Danielos100 commited on
Commit
d6fa84d
Β·
verified Β·
1 Parent(s): e1a3b1d

Update app.py

Browse files
Files changed (1) hide show
  1. app.py +24 -29
app.py CHANGED
@@ -3,14 +3,8 @@
3
  # Dataset: ckandemir/amazon-products (Hugging Face)
4
  # UI: Gradio (English)
5
  #
6
- # Requirements (requirements.txt):
7
- # gradio>=4.44.0
8
- # datasets>=3.0.0
9
- # pandas>=2.2.2
10
- # numpy>=1.26.4
11
- # sentence-transformers>=3.0.1
12
- # faiss-cpu>=1.8.0
13
- # tabulate>=0.9.0
14
 
15
  import os, re, random
16
  from typing import Dict, List, Tuple
@@ -226,13 +220,14 @@ def recommend_topk_embeddings(profile: Dict, model_key: str, k: int=3) -> pd.Dat
226
  order = np.argsort(-sims) # descending similarity
227
  seen, picks = set(), []
228
  for gi in idxs[order]:
229
- if gi not in df_f.index: # keep only allowed subset
 
230
  continue
231
- nm = CATALOG.loc[int(gi), "name"]
232
  if nm in seen:
233
  continue
234
  seen.add(nm)
235
- picks.append(int(gi))
236
  if len(picks) >= k:
237
  break
238
 
@@ -290,27 +285,24 @@ def generate_message(profile: Dict) -> str:
290
 
291
  # ========================= Gradio UI =========================
292
  EXAMPLES = [
293
- [["tech","music"], "birthday", [20, 60], "Noa", "adult (18–64)", "MiniLM (384d)", "warm and friendly"],
294
- [["home","cooking","practical"], "housewarming", [25, 45], "Daniel", "adult (18–64)", "MiniLM (384d)", "warm"],
295
- [["games","photography"], "birthday", [30, 120], "Omer", "teen (13–17)", "MPNet (768d)", "fun"],
296
- [["reading","design","aesthetic"], "thank_you", [15, 35], "Maya", "any", "E5-base (768d)", "friendly"],
297
  ]
298
 
299
  def safe_markdown_table(df: pd.DataFrame) -> str:
300
  try:
301
  return df.to_markdown(index=False)
302
  except Exception:
303
- # fallback if tabulate is missing
304
  return df.to_string(index=False)
305
 
306
- def ui_predict(interests_list: List[str], occasion: str, budget_range, recipient_name: str,
307
- age_label: str, model_key: str, tone: str):
308
  try:
309
- # Parse budget range [min, max]
310
- if isinstance(budget_range, (list, tuple)) and len(budget_range) == 2:
311
- budget_min, budget_max = float(budget_range[0]), float(budget_range[1])
312
- else:
313
- budget_min, budget_max = 20.0, 60.0
314
  if budget_min > budget_max:
315
  budget_min, budget_max = budget_max, budget_min
316
 
@@ -319,9 +311,9 @@ def ui_predict(interests_list: List[str], occasion: str, budget_range, recipient
319
  "recipient_name": recipient_name or "Friend",
320
  "interests": interests_list or [],
321
  "occasion": occasion or "birthday",
322
- "budget_min": budget_min,
323
- "budget_max": budget_max,
324
- "budget_usd": budget_max,
325
  "age_range": age_range,
326
  "tone": tone or "warm and friendly",
327
  }
@@ -351,7 +343,10 @@ with gr.Blocks() as demo:
351
  age = gr.Dropdown(label="Age group", choices=list(AGE_OPTIONS.keys()), value="adult (18–64)")
352
  model = gr.Dropdown(label="Embedding model", choices=list(MODEL_CHOICES.keys()), value="MiniLM (384d)")
353
 
354
- budget = gr.RangeSlider(label="Budget range (USD)", minimum=5, maximum=500, step=1, value=[20, 60])
 
 
 
355
 
356
  with gr.Row():
357
  recipient_name = gr.Textbox(label="Recipient name", value="Noa")
@@ -364,13 +359,13 @@ with gr.Blocks() as demo:
364
 
365
  gr.Examples(
366
  EXAMPLES,
367
- [interests, occasion, budget, recipient_name, age, model, tone],
368
  label="Quick examples",
369
  )
370
 
371
  go.click(
372
  ui_predict,
373
- [interests, occasion, budget, recipient_name, age, model, tone],
374
  [out_top3, out_gen, out_msg]
375
  )
376
 
 
3
  # Dataset: ckandemir/amazon-products (Hugging Face)
4
  # UI: Gradio (English)
5
  #
6
+ # Requirements (see requirements.txt):
7
+ # gradio, datasets, pandas, numpy, sentence-transformers, faiss-cpu, tabulate
 
 
 
 
 
 
8
 
9
  import os, re, random
10
  from typing import Dict, List, Tuple
 
220
  order = np.argsort(-sims) # descending similarity
221
  seen, picks = set(), []
222
  for gi in idxs[order]:
223
+ gi = int(gi)
224
+ if gi not in df_f.index:
225
  continue
226
+ nm = CATALOG.loc[gi, "name"]
227
  if nm in seen:
228
  continue
229
  seen.add(nm)
230
+ picks.append(gi)
231
  if len(picks) >= k:
232
  break
233
 
 
285
 
286
  # ========================= Gradio UI =========================
287
  EXAMPLES = [
288
+ [["tech","music"], "birthday", 20, 60, "Noa", "adult (18–64)", "MiniLM (384d)", "warm and friendly"],
289
+ [["home","cooking","practical"], "housewarming", 25, 45, "Daniel", "adult (18–64)", "MiniLM (384d)", "warm"],
290
+ [["games","photography"], "birthday", 30, 120, "Omer", "teen (13–17)", "MPNet (768d)", "fun"],
291
+ [["reading","design","aesthetic"], "thank_you", 15, 35, "Maya", "any", "E5-base (768d)", "friendly"],
292
  ]
293
 
294
  def safe_markdown_table(df: pd.DataFrame) -> str:
295
  try:
296
  return df.to_markdown(index=False)
297
  except Exception:
 
298
  return df.to_string(index=False)
299
 
300
+ def ui_predict(interests_list: List[str], occasion: str, budget_min: float, budget_max: float,
301
+ recipient_name: str, age_label: str, model_key: str, tone: str):
302
  try:
303
+ # sanity
304
+ if budget_min is None: budget_min = 20.0
305
+ if budget_max is None: budget_max = 60.0
 
 
306
  if budget_min > budget_max:
307
  budget_min, budget_max = budget_max, budget_min
308
 
 
311
  "recipient_name": recipient_name or "Friend",
312
  "interests": interests_list or [],
313
  "occasion": occasion or "birthday",
314
+ "budget_min": float(budget_min),
315
+ "budget_max": float(budget_max),
316
+ "budget_usd": float(budget_max),
317
  "age_range": age_range,
318
  "tone": tone or "warm and friendly",
319
  }
 
343
  age = gr.Dropdown(label="Age group", choices=list(AGE_OPTIONS.keys()), value="adult (18–64)")
344
  model = gr.Dropdown(label="Embedding model", choices=list(MODEL_CHOICES.keys()), value="MiniLM (384d)")
345
 
346
+ # Two sliders (for older Gradio versions): min + max budget
347
+ with gr.Row():
348
+ budget_min = gr.Slider(label="Min budget (USD)", minimum=5, maximum=500, step=1, value=20)
349
+ budget_max = gr.Slider(label="Max budget (USD)", minimum=5, maximum=500, step=1, value=60)
350
 
351
  with gr.Row():
352
  recipient_name = gr.Textbox(label="Recipient name", value="Noa")
 
359
 
360
  gr.Examples(
361
  EXAMPLES,
362
+ [interests, occasion, budget_min, budget_max, recipient_name, age, model, tone],
363
  label="Quick examples",
364
  )
365
 
366
  go.click(
367
  ui_predict,
368
+ [interests, occasion, budget_min, budget_max, recipient_name, age, model, tone],
369
  [out_top3, out_gen, out_msg]
370
  )
371