Spaces:
Runtime error
Runtime error
| import gradio as gr | |
| import pandas as pd | |
| df = pd.read_csv("filtered_openfoodfacts(Sheet1).csv", sep=";", encoding="utf-8") | |
| df.columns = [col.lower().replace(" ", "_") for col in df.columns] | |
| df = df[df['warning'].str.lower() != 'warning'] | |
| def search_product(query, filters): | |
| query = query.strip().lower() | |
| filtered_df = df.copy() | |
| for f in filters: | |
| filtered_df = filtered_df[filtered_df['labels_tags'].str.lower().str.contains(f.lower(), na=False)] | |
| matched = filtered_df[ | |
| filtered_df['product_reference'].str.lower().str.contains(query, na=False) | | |
| filtered_df['product_brand'].str.lower().str.contains(query, na=False) | | |
| filtered_df['product_name'].str.lower().str.contains(query, na=False) | |
| ] | |
| if matched.empty: | |
| return "❌ Product not found." | |
| result = "" | |
| for _, row in matched.head(3).iterrows(): | |
| result += f"🔎 Reference: {row.get('product_reference', '-') }\n" | |
| result += f"🏷️ Brand: {row.get('product_brand', '-') }\n" | |
| result += f"🧾 Product: {row.get('product_name', '-') }\n" | |
| result += f"- Ingredients: {row.get('ingredients_text', '-') }\n" | |
| result += f"- Additives: {row.get('additives', '-') }\n" | |
| result += f"- Allergens: {row.get('allergens', '-') }\n" | |
| result += f"- Tags: {row.get('labels_tags', '-') }\n" | |
| warning = str(row.get('warning', '')).strip() | |
| if warning and warning.lower() != "none": | |
| cleaned = warning.lower().replace("⚠️", "").replace("✅", "").replace("warning:", "").strip().capitalize() | |
| if "safe for general consumption" in cleaned.lower(): | |
| result += f"✅ {cleaned}\n" | |
| else: | |
| result += f"⚠️ {cleaned}\n" | |
| result += "\n" | |
| return result.strip() | |
| demo = gr.Interface( | |
| fn=search_product, | |
| inputs=[ | |
| gr.Textbox(label="Search by product name, brand or REF code"), | |
| gr.CheckboxGroup( | |
| choices=["vegan", "organic", "gluten-free", "lactose-free", "halal", "kosher"], | |
| label="Filter by tags" | |
| ) | |
| ], | |
| outputs=gr.Textbox(label="Product Details"), | |
| title="NutriCheck Bot", | |
| description="Search by name, brand, or reference. Warnings styled cleanly with one emoji max." | |
| ) | |
| demo.launch() | |