Spaces:
Sleeping
Sleeping
Update app.py
Browse files
app.py
CHANGED
|
@@ -99,3 +99,71 @@ def process_message(message, history):
|
|
| 99 |
food_items = FOOD_DATABASE[category][chat_state.ingredient]
|
| 100 |
food_item_names = [item['name'] for nutrition in food_items for item in food_items[nutrition]]
|
| 101 |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 99 |
food_items = FOOD_DATABASE[category][chat_state.ingredient]
|
| 100 |
food_item_names = [item['name'] for nutrition in food_items for item in food_items[nutrition]]
|
| 101 |
|
| 102 |
+
# Show available food items and move to nutrition selection
|
| 103 |
+
chat_state.step = "nutrition"
|
| 104 |
+
return f"Great! Here are the available food items for {message}:\n{', '.join(food_item_names)}\nNow, select your nutrition preference: {', '.join(NUTRITION_OPTIONS)}"
|
| 105 |
+
|
| 106 |
+
# Step 4: Nutrition preference
|
| 107 |
+
elif chat_state.step == "nutrition":
|
| 108 |
+
# Sanitize and normalize input (remove spaces, handle case)
|
| 109 |
+
nutrition = message.lower().replace(" ", "").strip() # Remove spaces and make lowercase
|
| 110 |
+
chat_state.nutrition = nutrition
|
| 111 |
+
category = "nonveg" if "non" in chat_state.category else "veg"
|
| 112 |
+
ingredient = chat_state.ingredient
|
| 113 |
+
|
| 114 |
+
# Try to fetch the food items from the correct category, ingredient, and nutrition preference
|
| 115 |
+
try:
|
| 116 |
+
# Access food items based on category, ingredient, and nutrition preference
|
| 117 |
+
food_items = FOOD_DATABASE[category][ingredient][nutrition]
|
| 118 |
+
if not food_items:
|
| 119 |
+
return f"Sorry, no {nutrition.replace('_', ' ').title()} dishes are available for {ingredient}."
|
| 120 |
+
|
| 121 |
+
response = f"Here are some {nutrition.replace('_', ' ').title()} {ingredient} dishes for you:\n"
|
| 122 |
+
for item in food_items:
|
| 123 |
+
response += f"\n• {item['name']} ({item['calories']} cal, {item['protein']}g protein)\n {item['description']}"
|
| 124 |
+
|
| 125 |
+
chat_state.step = "initial" # Reset for new conversation
|
| 126 |
+
return response
|
| 127 |
+
except KeyError:
|
| 128 |
+
chat_state.step = "initial" # Reset for new conversation
|
| 129 |
+
return f"Sorry, I don't have any dishes for this combination."
|
| 130 |
+
|
| 131 |
+
return "I'm not sure how to help with that. Would you like to start over?"
|
| 132 |
+
|
| 133 |
+
# Gradio interface for the chatbot
|
| 134 |
+
def create_gradio_interface():
|
| 135 |
+
with gr.Blocks() as demo:
|
| 136 |
+
category_btns = gr.Radio(choices=["Vegetarian", "Non-Vegetarian"], label="Select Category")
|
| 137 |
+
ingredient_btns = gr.Radio(choices=VEG_INGREDIENTS + NONVEG_TYPES, label="Select Ingredient")
|
| 138 |
+
nutrition_btns = gr.Radio(choices=NUTRITION_OPTIONS, label="Select Nutrition")
|
| 139 |
+
chatbot = gr.Chatbot([])
|
| 140 |
+
msg = gr.Textbox(show_label=False, placeholder="Enter text and press enter")
|
| 141 |
+
clear = gr.Button("Clear")
|
| 142 |
+
|
| 143 |
+
# Function for user message input and history handling
|
| 144 |
+
def user(user_message, history):
|
| 145 |
+
return "", history + [[user_message, None]]
|
| 146 |
+
|
| 147 |
+
# Function to handle bot's response
|
| 148 |
+
def bot(history):
|
| 149 |
+
user_message = history[-1][0]
|
| 150 |
+
bot_message = process_message(user_message, history)
|
| 151 |
+
history[-1][1] = bot_message
|
| 152 |
+
return history
|
| 153 |
+
|
| 154 |
+
# Handle category selection and pass to the next steps
|
| 155 |
+
category_btns.change(lambda category: process_message(category, []), category_btns, chatbot)
|
| 156 |
+
ingredient_btns.change(lambda ingredient: process_message(ingredient, []), ingredient_btns, chatbot)
|
| 157 |
+
nutrition_btns.change(lambda nutrition: process_message(nutrition, []), nutrition_btns, chatbot)
|
| 158 |
+
|
| 159 |
+
msg.submit(user, [msg, chatbot], [msg, chatbot]).then(bot, chatbot, chatbot)
|
| 160 |
+
clear.click(lambda: None, None, chatbot)
|
| 161 |
+
|
| 162 |
+
return demo
|
| 163 |
+
|
| 164 |
+
# Start the Gradio interface and Flask app together
|
| 165 |
+
if __name__ == "__main__":
|
| 166 |
+
demo = create_gradio_interface()
|
| 167 |
+
demo.launch(share=True, inline=True)
|
| 168 |
+
# Run Flask app
|
| 169 |
+
app.run(debug=True, use_reloader=False)
|