Spaces:
Build error
Build error
Update app.py
Browse files
app.py
CHANGED
|
@@ -1,130 +1,83 @@
|
|
| 1 |
import gradio as gr
|
| 2 |
|
| 3 |
-
#
|
| 4 |
-
|
| 5 |
-
|
| 6 |
-
|
| 7 |
-
|
| 8 |
-
{"name": "Grilled Paneer Tikka", "description": "Marinated and grilled paneer cubes with spices", "calories": 180, "protein": 14},
|
| 9 |
-
{"name": "Paneer Bhurji", "description": "Scrambled paneer with vegetables", "calories": 200, "protein": 16}
|
| 10 |
-
],
|
| 11 |
-
"highProtein": [
|
| 12 |
-
{"name": "Protein Paneer Bowl", "description": "High protein paneer with quinoa", "calories": 320, "protein": 24},
|
| 13 |
-
{"name": "Paneer Steak", "description": "Thick cut paneer steak with herbs", "calories": 280, "protein": 22}
|
| 14 |
-
]
|
| 15 |
-
},
|
| 16 |
-
"mushroom": {
|
| 17 |
-
"lowCalorie": [
|
| 18 |
-
{"name": "Grilled Mushroom Caps", "description": "Herb-stuffed mushroom caps", "calories": 120, "protein": 8},
|
| 19 |
-
{"name": "Mushroom Soup", "description": "Creamy mushroom soup", "calories": 150, "protein": 6}
|
| 20 |
-
]
|
| 21 |
-
},
|
| 22 |
-
"aloo": {
|
| 23 |
-
"lowCalorie": [
|
| 24 |
-
{"name": "Baked Potato Wedges", "description": "Spiced and baked potato wedges", "calories": 160, "protein": 4},
|
| 25 |
-
{"name": "Aloo Tikki", "description": "Spiced potato patties", "calories": 180, "protein": 3}
|
| 26 |
-
]
|
| 27 |
-
}
|
| 28 |
-
},
|
| 29 |
-
"nonveg": {
|
| 30 |
-
"chicken": {
|
| 31 |
-
"highProtein": [
|
| 32 |
-
{"name": "Grilled Chicken Breast", "description": "Herb-marinated grilled chicken", "calories": 250, "protein": 30},
|
| 33 |
-
{"name": "Chicken Tikka", "description": "Tandoori spiced chicken pieces", "calories": 280, "protein": 32}
|
| 34 |
-
]
|
| 35 |
-
},
|
| 36 |
-
"fish": {
|
| 37 |
-
"lowCalorie": [
|
| 38 |
-
{"name": "Grilled Salmon", "description": "Lemon herb grilled salmon", "calories": 220, "protein": 25},
|
| 39 |
-
{"name": "Steamed Fish", "description": "Ginger-garlic steamed fish", "calories": 180, "protein": 22}
|
| 40 |
-
]
|
| 41 |
-
},
|
| 42 |
-
"mutton": {
|
| 43 |
-
"balanced": [
|
| 44 |
-
{"name": "Mutton Curry", "description": "Traditional spiced mutton curry", "calories": 350, "protein": 28},
|
| 45 |
-
{"name": "Grilled Lamb Chops", "description": "Herb-crusted lamb chops", "calories": 380, "protein": 32}
|
| 46 |
-
]
|
| 47 |
-
}
|
| 48 |
-
}
|
| 49 |
-
}
|
| 50 |
-
|
| 51 |
-
VEG_INGREDIENTS = ["Paneer", "Mushroom", "Aloo", "Brinjal", "Palak"]
|
| 52 |
-
NONVEG_TYPES = ["Chicken", "Fish", "Mutton", "Pork"]
|
| 53 |
-
NUTRITION_OPTIONS = ["Low Calorie", "High Protein", "Low Carb", "Balanced", "Gluten Free"]
|
| 54 |
|
| 55 |
-
|
| 56 |
-
|
| 57 |
-
|
| 58 |
-
|
| 59 |
-
self.ingredient = ""
|
| 60 |
|
| 61 |
-
|
|
|
|
|
|
|
|
|
|
| 62 |
|
| 63 |
-
|
| 64 |
-
if
|
| 65 |
-
if
|
| 66 |
-
|
| 67 |
-
return
|
| 68 |
-
|
| 69 |
-
return [{"role": "bot", "content": "I'm here to help you customize your food. Would you like to proceed? (Yes/No)"}], []
|
| 70 |
-
|
| 71 |
-
elif chat_state.step == "category":
|
| 72 |
-
chat_state.category = message.lower()
|
| 73 |
-
chat_state.step = "ingredient"
|
| 74 |
-
|
| 75 |
-
if "vegetarian" in message.lower():
|
| 76 |
-
return [{"role": "bot", "content": f"Great! What main ingredient would you like? Available options: {', '.join(VEG_INGREDIENTS)}"}], []
|
| 77 |
-
elif "non-vegetarian" in message.lower():
|
| 78 |
-
return [{"role": "bot", "content": f"Great! What type of meat would you prefer? Available options: {', '.join(NONVEG_TYPES)}"}], []
|
| 79 |
-
|
| 80 |
-
return [{"role": "bot", "content": "Please select either Vegetarian or Non-Vegetarian."}], []
|
| 81 |
-
|
| 82 |
-
elif chat_state.step == "ingredient":
|
| 83 |
-
chat_state.ingredient = message.lower()
|
| 84 |
-
chat_state.step = "nutrition"
|
| 85 |
-
|
| 86 |
-
return [{"role": "bot", "content": f"Perfect! Now, select your nutrition preference: {', '.join(NUTRITION_OPTIONS)}"}], []
|
| 87 |
-
|
| 88 |
-
elif chat_state.step == "nutrition":
|
| 89 |
-
nutrition = message.lower().replace(" ", "")
|
| 90 |
-
category = "nonveg" if "non" in chat_state.category else "veg"
|
| 91 |
-
ingredient = chat_state.ingredient
|
| 92 |
-
|
| 93 |
-
try:
|
| 94 |
-
food_items = FOOD_DATABASE[category][ingredient][nutrition]
|
| 95 |
-
response = f"Here are some {nutrition} {ingredient} dishes for you:\n"
|
| 96 |
-
for item in food_items:
|
| 97 |
-
response += f"\n• {item['name']} ({item['calories']} cal, {item['protein']}g protein)\n {item['description']}"
|
| 98 |
-
chat_state.step = "initial" # Reset for new conversation
|
| 99 |
-
return [{"role": "bot", "content": response}], []
|
| 100 |
-
except KeyError:
|
| 101 |
-
chat_state.step = "initial" # Reset for new conversation
|
| 102 |
-
return [{"role": "bot", "content": f"Sorry, I don't have any dishes for this combination."}], []
|
| 103 |
|
| 104 |
-
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 105 |
|
| 106 |
-
|
| 107 |
-
|
| 108 |
-
|
| 109 |
-
|
| 110 |
-
|
| 111 |
-
|
| 112 |
-
|
| 113 |
-
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 114 |
|
| 115 |
-
|
| 116 |
-
|
| 117 |
-
|
| 118 |
-
|
| 119 |
-
|
| 120 |
-
return history
|
| 121 |
|
| 122 |
-
|
| 123 |
-
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 124 |
|
| 125 |
-
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 126 |
|
| 127 |
-
|
| 128 |
-
if __name__ == "__main__":
|
| 129 |
-
demo = create_gradio_interface()
|
| 130 |
-
demo.launch(share=True)
|
|
|
|
| 1 |
import gradio as gr
|
| 2 |
|
| 3 |
+
# Function that handles the user input and provides responses
|
| 4 |
+
def chatbot(input_text, state):
|
| 5 |
+
# Initializing state if None
|
| 6 |
+
if state is None:
|
| 7 |
+
state = {"step": 1}
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 8 |
|
| 9 |
+
# Step 1: Ask what the user wants to customize
|
| 10 |
+
if state["step"] == 1:
|
| 11 |
+
state["step"] = 2
|
| 12 |
+
return "Hey, what would you like to customize?", state
|
|
|
|
| 13 |
|
| 14 |
+
# Step 2: Ask if the user wants veg or nonveg
|
| 15 |
+
if state["step"] == 2:
|
| 16 |
+
state["step"] = 3
|
| 17 |
+
return "Would you like to customize a veg or nonveg dish?", state
|
| 18 |
|
| 19 |
+
# Step 3: Ask for nutritional selection (based on veg or nonveg)
|
| 20 |
+
if state["step"] == 3:
|
| 21 |
+
if input_text.lower() in ["veg", "nonveg"]:
|
| 22 |
+
state["step"] = 4
|
| 23 |
+
return f"Great! You've selected {input_text}. Now, what are your nutritional preferences?", state
|
| 24 |
+
return "Please select either 'veg' or 'nonveg'.", state
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 25 |
|
| 26 |
+
# Step 4: Show ingredients based on veg or nonveg
|
| 27 |
+
if state["step"] == 4:
|
| 28 |
+
if input_text.lower() == "veg":
|
| 29 |
+
state["step"] = 5
|
| 30 |
+
return "Please choose an ingredient: Paneer, Gobi, Babycorn, Spinach, Mushroom, Tofu, Corn, Peas, Broccoli, Cauliflower", state
|
| 31 |
+
elif input_text.lower() == "nonveg":
|
| 32 |
+
state["step"] = 6
|
| 33 |
+
return "Please choose an ingredient: Fish, Chicken, Mutton, Prawns, Duck, Turkey, Crab, Lobster, Shrimp, Squid", state
|
| 34 |
+
return "Please select either 'veg' or 'nonveg'.", state
|
| 35 |
|
| 36 |
+
# Step 5: Show dish items based on ingredient selection for veg
|
| 37 |
+
if state["step"] == 5:
|
| 38 |
+
veg_items = {
|
| 39 |
+
"paneer": ["Paneer Tikka", "Paneer Butter Masala", "Paneer Lababdar", "Paneer Makhani", "Palak Paneer", "Paneer Pakora", "Paneer Bhurji", "Shahi Paneer", "Kadai Paneer", "Paneer Kofta"],
|
| 40 |
+
"gobi": ["Gobi Manchurian", "Aloo Gobi", "Gobi Paratha", "Gobi Fry", "Gobi Masala", "Gobi Do Pyaza", "Gobi Curry", "Gobi Pulao", "Gobi Pakora", "Gobi Stir Fry"],
|
| 41 |
+
"babycorn": ["Babycorn Fry", "Babycorn Manchurian", "Babycorn Pakora", "Babycorn Masala", "Babycorn Pulao", "Babycorn Stir Fry", "Babycorn Biryani", "Babycorn Curry", "Babycorn Tikka", "Babycorn Chutney"],
|
| 42 |
+
"spinach": ["Palak Paneer", "Spinach Soup", "Spinach Paratha", "Palak Chaat", "Spinach Curry", "Spinach Pulao", "Spinach Biryani", "Spinach and Cheese Toast", "Spinach Frittata", "Spinach Pakora"],
|
| 43 |
+
"mushroom": ["Mushroom Masala", "Mushroom Soup", "Mushroom Biryani", "Mushroom Curry", "Mushroom Stir Fry", "Mushroom Tikka", "Mushroom Paratha", "Mushroom Pulao", "Mushroom Manchurian", "Mushroom Pakora"],
|
| 44 |
+
"tofu": ["Tofu Stir Fry", "Tofu Curry", "Tofu Tikka", "Tofu Soup", "Tofu Salad", "Tofu Stir Fried Rice", "Tofu Pulao", "Tofu Pakora", "Tofu Biryani", "Tofu Wrap"],
|
| 45 |
+
"corn": ["Sweet Corn Soup", "Corn Pakora", "Corn Stir Fry", "Corn Tikki", "Corn Pulao", "Corn Biryani", "Corn Masala", "Corn Fritters", "Corn Salad", "Corn and Peas Curry"],
|
| 46 |
+
"peas": ["Matar Paneer", "Matar Masala", "Matar Pulao", "Matar Tikki", "Matar Paratha", "Matar Pakora", "Matar Chaat", "Matar Biryani", "Matar Curry", "Matar Stir Fry"],
|
| 47 |
+
"broccoli": ["Broccoli Stir Fry", "Broccoli Soup", "Broccoli Salad", "Broccoli Pakora", "Broccoli Tikki", "Broccoli Curry", "Broccoli Pulao", "Broccoli Frittata", "Broccoli Manchurian", "Broccoli Cheese Bake"],
|
| 48 |
+
"cauliflower": ["Gobi Manchurian", "Aloo Gobi", "Gobi Pakora", "Gobi Tikka", "Gobi Masala", "Gobi Pulao", "Aloo Gobi Paratha", "Gobi Curry", "Gobi Stir Fry", "Gobi Cheese Bake"]
|
| 49 |
+
}
|
| 50 |
|
| 51 |
+
ingredient = input_text.lower()
|
| 52 |
+
if ingredient in veg_items:
|
| 53 |
+
return f"Here are some {ingredient} dishes: {', '.join(veg_items[ingredient])}", state
|
| 54 |
+
return "Please select a valid ingredient from the list.", state
|
|
|
|
|
|
|
| 55 |
|
| 56 |
+
# Step 6: Show dish items based on ingredient selection for nonveg
|
| 57 |
+
if state["step"] == 6:
|
| 58 |
+
nonveg_items = {
|
| 59 |
+
"fish": ["Fish Curry", "Grilled Fish", "Fish Fry", "Fish Tikka", "Fish Biryani", "Fish Korma", "Fish Masala", "Fish Soup", "Fish and Chips", "Fish Amritsari"],
|
| 60 |
+
"chicken": ["Chicken Curry", "Chicken Biryani", "Grilled Chicken", "Chicken Tikka", "Chicken Pakora", "Chicken Fry", "Chicken Korma", "Chicken Masala", "Chicken Shawarma", "Chicken Pulao"],
|
| 61 |
+
"mutton": ["Mutton Rogan Josh", "Mutton Biryani", "Mutton Curry", "Mutton Korma", "Mutton Fry", "Mutton Seekh Kebab", "Mutton Nihari", "Mutton Do Pyaza", "Mutton Masala", "Mutton Kofta"],
|
| 62 |
+
"prawns": ["Prawn Curry", "Prawn Masala", "Prawn Biryani", "Prawn Fry", "Prawn Tikka", "Prawn Soup", "Prawn Pulao", "Prawn Korma", "Prawn Grill", "Prawn Prawn Pakora"],
|
| 63 |
+
"duck": ["Duck Curry", "Duck Roast", "Duck Biryani", "Duck Korma", "Duck Fry", "Duck Soup", "Duck Stir Fry", "Duck Tikka", "Duck Pulao", "Duck Shawarma"],
|
| 64 |
+
"turkey": ["Turkey Roast", "Turkey Biryani", "Turkey Soup", "Turkey Masala", "Turkey Korma", "Turkey Stir Fry", "Turkey Tikka", "Turkey Grill", "Turkey Pulao", "Turkey Tacos"],
|
| 65 |
+
"crab": ["Crab Curry", "Crab Fry", "Crab Soup", "Crab Masala", "Crab Biryani", "Crab Pulao", "Crab Cakes", "Crab Tikka", "Crab Stir Fry", "Crab Roast"],
|
| 66 |
+
"lobster": ["Lobster Curry", "Lobster Grilled", "Lobster Soup", "Lobster Biryani", "Lobster Masala", "Lobster Tikka", "Lobster Stir Fry", "Lobster Pulao", "Lobster Shawarma", "Lobster Pakora"],
|
| 67 |
+
"shrimp": ["Shrimp Biryani", "Shrimp Curry", "Shrimp Tikka", "Shrimp Masala", "Shrimp Fry", "Shrimp Pulao", "Shrimp Soup", "Shrimp Grill", "Shrimp Korma", "Shrimp Pakora"],
|
| 68 |
+
"squid": ["Squid Curry", "Squid Masala", "Grilled Squid", "Squid Soup", "Squid Stir Fry", "Squid Biryani", "Squid Tikka", "Squid Pakora", "Squid Pulao", "Squid Korma"]
|
| 69 |
+
}
|
| 70 |
+
|
| 71 |
+
ingredient = input_text.lower()
|
| 72 |
+
if ingredient in nonveg_items:
|
| 73 |
+
return f"Here are some {ingredient} dishes: {', '.join(nonveg_items[ingredient])}", state
|
| 74 |
+
return "Please select a valid ingredient from the list.", state
|
| 75 |
|
| 76 |
+
# Set up the Gradio interface
|
| 77 |
+
iface = gr.Interface(fn=chatbot,
|
| 78 |
+
inputs=["text", "state"],
|
| 79 |
+
outputs=["text", "state"],
|
| 80 |
+
live=True,
|
| 81 |
+
allow_flagging="never")
|
| 82 |
|
| 83 |
+
iface.launch()
|
|
|
|
|
|
|
|
|