Spaces:
Sleeping
Sleeping
| import pandas as pd | |
| import gradio as gr | |
| import re | |
| import random | |
| # Load the dataset | |
| df = pd.read_csv('IndianFoodDatasetCSV.csv') | |
| # Ensure the 'Ingredients' column is a string type | |
| df['Ingredients'] = df['Ingredients'].astype(str) | |
| def search_recipe(ingredient, diet): | |
| # Convert ingredient to lowercase for case-insensitive search | |
| ingredient = ingredient.lower() | |
| # Filter the dataframe based on the ingredient and diet | |
| filtered_df = df[df['Ingredients'].str.lower().str.contains(ingredient, na=False) & | |
| (df['Diet'] == diet.title())] | |
| if filtered_df.empty: | |
| return "No matching recipes found." | |
| # Get the first matching recipe | |
| recipe = filtered_df.iloc[random.randint(0, len(filtered_df) - 1)] | |
| # Construct the response | |
| response = f"I found a recipe for you:\n\n" | |
| response += f"Recipe: {recipe['RecipeName']}\n\n" | |
| response += f"Ingredients: {recipe['Ingredients']}\n\n" | |
| response += f"Instructions: {recipe['Instructions']}\n\n" | |
| response += f"Diet: {recipe['Diet']}\n" | |
| response += f"Course: {recipe['Course']}\n" | |
| response += f"Prep Time: {recipe['PrepTimeInMins']}\n" | |
| response += f"Cook Time: {recipe['CookTimeInMins']}\n" | |
| response += f"Total Time: {recipe['TotalTimeInMins']}\n" | |
| response += f"Servings: {recipe['Servings']}\n" | |
| response += "\nWould you like to search any other recipe?" | |
| return response | |
| def chatbot(message, history): | |
| # Check if the user is asking for a recipe | |
| if re.search(r'\bbye\b', message, re.IGNORECASE): | |
| return "Goodbye! Have a great day!" | |
| recipe_request = re.search(r'recipe for (.*) that is (.*)', message, re.IGNORECASE) | |
| if recipe_request: | |
| ingredient = recipe_request.group(1).strip() | |
| diet = recipe_request.group(2).strip() | |
| # Validate diet input | |
| valid_diets = ['Diabetic Friendly', 'Vegetarian', 'High Protein Vegetarian', 'Non Vegetarian', 'Vegan', 'Eggetarian'] | |
| valid_diets_lower = ['diabetic friendly', 'vegetarian', 'high protein vegetarian', 'non vegeterian', 'non vegetarian', 'vegan', 'eggetarian'] | |
| if diet.lower()=="non vegetarian": | |
| diet= "non vegeterian" | |
| if diet.strip().lower() not in valid_diets_lower: | |
| return f"I'm sorry, but '{diet}' is not a valid diet option. Please choose from: {', '.join(valid_diets)}." | |
| return search_recipe(ingredient, diet) | |
| else: | |
| return "I'm sorry, I didn't understand that. Please ask for a recipe in this format: 'Recipe for [ingredient] that is [diet]'. For example: 'Recipe for tomato that is Vegetarian'." | |
| my_theme = gr.Theme.from_hub("ParityError/Anime") | |
| iface = gr.ChatInterface( | |
| chatbot, | |
| chatbot=gr.Chatbot(height=600), | |
| textbox=gr.Textbox(placeholder="Ask for a recipe. For example: 'Recipe for tomato that is Vegetarian'", | |
| container=False, scale=7), | |
| title="ChefBot Ramsay", | |
| description="Hello! I can help you cook something amazing today. Just give me the ingredient name with diet. For example, 'Recipe for tomato that is Vegetarian'", | |
| theme=my_theme, | |
| examples=[ | |
| "Recipe for tomato that is Vegetarian", | |
| "Recipe for chicken that is Non Vegeterian", | |
| "Recipe for spinach that is High Protein Vegetarian", | |
| "Recipe for oats that is Diabetic Friendly", | |
| "Recipe for eggs that is Eggetarian" | |
| ], | |
| cache_examples=False, | |
| ) | |
| def greet_user(): | |
| return "Hello! I can help you cook something amazing today. Just give me the ingredient name with diet. For example, 'Recipe for tomato that is Vegetarian'. I will give you the yummiest recipe." | |
| if __name__ == "__main__": | |
| iface.launch() |