Spaces:
Sleeping
Sleeping
File size: 6,287 Bytes
943ca21 e406115 a8db628 e406115 a85dd4d b89610e e406115 b17b983 0807a82 b89610e e406115 a8db628 b89610e e406115 b17b983 b89610e e406115 a85dd4d b89610e 6264a0c e406115 6264a0c 29f9a6c 6264a0c b89610e 29f9a6c 6264a0c b89610e 6264a0c 20ff6eb e406115 6264a0c 03931e3 e406115 a85dd4d 6264a0c e406115 b89610e a85dd4d 03931e3 b89610e b17b983 b89610e 7efb0fd b17b983 03931e3 e406115 03931e3 e406115 03931e3 e406115 03931e3 e406115 03931e3 e406115 03931e3 a8db628 03931e3 6264a0c 03931e3 a8db628 03931e3 b17b983 943ca21 |
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 142 143 144 145 |
import gradio as gr
import os
import pandas as pd
BASE_DIR = "data"
# Get subfolders
def get_subfolders(path):
try:
return sorted([f for f in os.listdir(path) if os.path.isdir(os.path.join(path, f))])
except Exception as e:
print(f"β Error reading subfolders from {path}: {e}")
return []
# Get CSV files
def get_csv_files(path):
try:
return sorted([f[:-4] for f in os.listdir(path) if f.endswith(".csv")])
except Exception as e:
print(f"β Error reading CSVs from {path}: {e}")
return []
# Load quantities from brand CSV
def get_quantities_from_csv(path):
try:
df = pd.read_csv(path)
if df.empty or "Quantity" not in df.columns:
return gr.update(choices=[], visible=False), {}
return gr.update(choices=df["Quantity"].dropna().tolist(), visible=True), df.to_dict()
except Exception as e:
print(f"β Error loading CSV: {e}")
return gr.update(choices=[], visible=False), {}
# Show result based on quantity
def display_quantity_info(quantity, data_dict):
try:
df = pd.DataFrame(data_dict)
row = df[df["Quantity"] == quantity].iloc[0]
if str(row["In Stock"]).strip().lower() == "yes":
return (
f"β
{quantity} is available!\n"
f"\u2022 Floor: {row['Floor']}\n"
f"\u2022 Aisle: {row['Aisle']}\n"
f"\u2022 Price: βΉ{row['Price']}"
)
else:
return f"β Sorry, {quantity} is currently not in stock."
except Exception as e:
return f"β οΈ Error: {e}"
# Dummy AI suggestion function
def suggest_items(query):
query = query.lower()
if "gift" in query and "500" in query:
return "1. Bath & Body Gift Set - βΉ499\n2. Mini Perfume Pack - βΉ349\n3. Skin Care Hamper - βΉ399"
return "π Sorry, no suggestions found for your query. Try something like: 'Gift items under 500'"
# Reset all
def reset_all():
return (
None, None, None, None, None, None, None,
gr.update(choices=[], visible=False), "", {}
)
# Interface with Tabs
with gr.Blocks(title="RetailGenie") as demo:
gr.Markdown("# π§ββοΈ RetailGenie β In-Store Smart Assistant")
with gr.Tabs():
# ---------------- Tab 1: Navigator ----------------
with gr.TabItem("π§ Navigator"):
with gr.Row():
country = gr.Dropdown(label="π Country", choices=get_subfolders(BASE_DIR), value=None)
state = gr.Dropdown(label="π State", choices=[], interactive=False)
city = gr.Dropdown(label="ποΈ City", choices=[], interactive=False)
store = gr.Dropdown(label="πͺ Store", choices=[], interactive=False)
category = gr.Dropdown(label="ποΈ Category", choices=[], interactive=False)
product = gr.Dropdown(label="π¦ Product", choices=[], interactive=False)
brand = gr.Dropdown(label="π·οΈ Brand", choices=[], interactive=False)
quantity = gr.Dropdown(label="π’ Quantity", visible=False)
result = gr.Textbox(label="π Product Info", lines=5)
data_state = gr.State()
reset_btn = gr.Button("π Reset All")
# Dropdown logic
country.change(
lambda c: gr.update(choices=get_subfolders(os.path.join(BASE_DIR, c)) if c else [], value=None, interactive=True),
inputs=country,
outputs=state
)
state.change(
lambda c, s: gr.update(choices=get_subfolders(os.path.join(BASE_DIR, c, s)) if c and s else [], value=None, interactive=True),
inputs=[country, state],
outputs=city
)
city.change(
lambda c, s, ci: gr.update(choices=get_subfolders(os.path.join(BASE_DIR, c, s, ci)) if c and s and ci else [], value=None, interactive=True),
inputs=[country, state, city],
outputs=store
)
store.change(
lambda c, s, ci, st: gr.update(choices=get_subfolders(os.path.join(BASE_DIR, c, s, ci, st)) if all([c,s,ci,st]) else [], value=None, interactive=True),
inputs=[country, state, city, store],
outputs=category
)
category.change(
lambda c, s, ci, st, cat: gr.update(choices=get_subfolders(os.path.join(BASE_DIR, c, s, ci, st, cat)) if all([c,s,ci,st,cat]) else [], value=None, interactive=True),
inputs=[country, state, city, store, category],
outputs=product
)
product.change(
lambda c, s, ci, st, cat, prod: gr.update(choices=get_csv_files(os.path.join(BASE_DIR, c, s, ci, st, cat, prod)) if all([c,s,ci,st,cat,prod]) else [], value=None, interactive=True),
inputs=[country, state, city, store, category, product],
outputs=brand
)
brand.change(
lambda c, s, ci, st, cat, prod, b: get_quantities_from_csv(
os.path.join(BASE_DIR, c, s, ci, st, cat, prod, f"{b}.csv")
) if all([c, s, ci, st, cat, prod, b]) else (gr.update(choices=[], visible=False), {}),
inputs=[country, state, city, store, category, product, brand],
outputs=[quantity, data_state]
)
quantity.change(display_quantity_info, inputs=[quantity, data_state], outputs=result)
reset_btn.click(reset_all, inputs=[], outputs=[country, state, city, store, category, product, brand, quantity, result, data_state])
# ---------------- Tab 2: Smart Suggestions ----------------
with gr.TabItem("π Smart Suggestions"):
gr.Markdown("### π€ Ask RetailGenie for Recommendations")
suggestion_input = gr.Textbox(label="Ask something like:", placeholder="Gift items under 500", lines=1)
suggest_btn = gr.Button("π‘ Get Suggestions")
suggestions_output = gr.Textbox(label="π Suggestions", lines=10)
suggest_btn.click(suggest_items, inputs=suggestion_input, outputs=suggestions_output)
demo.launch()
|