EFELIA Hackathon Team 6
Update app.py
7178197 verified
Raw
History Blame Contribute Delete
2.3 kB
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()