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 |
|