Spaces:
Sleeping
Sleeping
Update app.py
Browse files
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
|
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 |
-
|
|
|
230 |
continue
|
231 |
-
nm = CATALOG.loc[
|
232 |
if nm in seen:
|
233 |
continue
|
234 |
seen.add(nm)
|
235 |
-
picks.append(
|
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",
|
294 |
-
[["home","cooking","practical"], "housewarming",
|
295 |
-
[["games","photography"], "birthday",
|
296 |
-
[["reading","design","aesthetic"], "thank_you",
|
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,
|
307 |
-
age_label: str, model_key: str, tone: str):
|
308 |
try:
|
309 |
-
#
|
310 |
-
if
|
311 |
-
|
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 |
-
|
|
|
|
|
|
|
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,
|
368 |
label="Quick examples",
|
369 |
)
|
370 |
|
371 |
go.click(
|
372 |
ui_predict,
|
373 |
-
[interests, occasion,
|
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 |
|