File size: 5,539 Bytes
d922512
1e1ad73
fc0daf6
1e1ad73
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
33933ea
1e1ad73
 
 
 
 
33933ea
1e1ad73
33933ea
1e1ad73
 
 
 
fc0daf6
1e1ad73
 
 
 
 
 
 
fc0daf6
1e1ad73
fc0daf6
 
1e1ad73
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
fc0daf6
1e1ad73
fc0daf6
33933ea
fc0daf6
 
 
1e1ad73
 
 
 
 
 
 
 
 
 
 
 
 
fc0daf6
 
1e1ad73
 
 
 
fc0daf6
d922512
fc0daf6
 
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
import gradio as gr

# Food database (same as your provided code)
FOOD_DATABASE = {
    "veg": {
        "paneer": {
            "lowCalorie": [
                {"name": "Grilled Paneer Tikka", "description": "Marinated and grilled paneer cubes with spices", "calories": 180, "protein": 14},
                {"name": "Paneer Bhurji", "description": "Scrambled paneer with vegetables", "calories": 200, "protein": 16}
            ],
            "highProtein": [
                {"name": "Protein Paneer Bowl", "description": "High protein paneer with quinoa", "calories": 320, "protein": 24},
                {"name": "Paneer Steak", "description": "Thick cut paneer steak with herbs", "calories": 280, "protein": 22}
            ]
        },
        "mushroom": {
            "lowCalorie": [
                {"name": "Grilled Mushroom Caps", "description": "Herb-stuffed mushroom caps", "calories": 120, "protein": 8},
                {"name": "Mushroom Soup", "description": "Creamy mushroom soup", "calories": 150, "protein": 6}
            ]
        },
        "aloo": {
            "lowCalorie": [
                {"name": "Baked Potato Wedges", "description": "Spiced and baked potato wedges", "calories": 160, "protein": 4},
                {"name": "Aloo Tikki", "description": "Spiced potato patties", "calories": 180, "protein": 3}
            ]
        }
    },
    "nonveg": {
        "chicken": {
            "highProtein": [
                {"name": "Grilled Chicken Breast", "description": "Herb-marinated grilled chicken", "calories": 250, "protein": 30},
                {"name": "Chicken Tikka", "description": "Tandoori spiced chicken pieces", "calories": 280, "protein": 32}
            ]
        },
        "fish": {
            "lowCalorie": [
                {"name": "Grilled Salmon", "description": "Lemon herb grilled salmon", "calories": 220, "protein": 25},
                {"name": "Steamed Fish", "description": "Ginger-garlic steamed fish", "calories": 180, "protein": 22}
            ]
        },
        "mutton": {
            "balanced": [
                {"name": "Mutton Curry", "description": "Traditional spiced mutton curry", "calories": 350, "protein": 28},
                {"name": "Grilled Lamb Chops", "description": "Herb-crusted lamb chops", "calories": 380, "protein": 32}
            ]
        }
    }
}

VEG_INGREDIENTS = ["Paneer", "Mushroom", "Aloo", "Brinjal", "Palak"]
NONVEG_TYPES = ["Chicken", "Fish", "Mutton", "Pork"]
NUTRITION_OPTIONS = ["Low Calorie", "High Protein", "Low Carb", "Balanced", "Gluten Free"]

class ChatState:
    def __init__(self):
        self.step = "initial"
        self.category = ""
        self.ingredient = ""

chat_state = ChatState()

def process_message(message, history):
    if chat_state.step == "initial":
        if "yes" in message.lower() or "yeah" in message.lower():
            chat_state.step = "category"
            return "Great! Please select your preferred category: Vegetarian, Non-Vegetarian."
        return "I'm here to help you customize your food. Would you like to proceed? (Yes/No)"
    
    elif chat_state.step == "category":
        chat_state.category = message.lower()
        chat_state.step = "ingredient"
        
        if "vegetarian" in message.lower():
            return f"Great! What main ingredient would you like? Available options: {', '.join(VEG_INGREDIENTS)}"
        elif "non-vegetarian" in message.lower():
            return f"Great! What type of meat would you prefer? Available options: {', '.join(NONVEG_TYPES)}"
        return "Please select either Vegetarian, Non-Vegetarian"
    
    elif chat_state.step == "ingredient":
        chat_state.ingredient = message.lower()
        chat_state.step = "nutrition"
        return f"Perfect! Now, select your nutrition preference: {', '.join(NUTRITION_OPTIONS)}"
    
    elif chat_state.step == "nutrition":
        nutrition = message.lower().replace(" ", "")
        category = "nonveg" if "non" in chat_state.category else "veg"
        ingredient = chat_state.ingredient
        
        try:
            food_items = FOOD_DATABASE[category][ingredient][nutrition]
            response = f"Here are some {message} {ingredient} dishes for you:\n"
            for item in food_items:
                response += f"\n• {item['name']} ({item['calories']} cal, {item['protein']}g protein)\n  {item['description']}"
            chat_state.step = "initial"  # Reset for new conversation
            return response
        except KeyError:
            chat_state.step = "initial"  # Reset for new conversation
            return f"Sorry, I don't have any dishes for this combination."

    return "I'm not sure how to help with that. Would you like to start over?"

def create_gradio_interface():
    with gr.Blocks() as demo:
        chatbot = gr.Chatbot([])
        msg = gr.Textbox(show_label=False, placeholder="Enter text and press enter")
        clear = gr.Button("Clear")

        def user(user_message, history):
            return "", history + [[user_message, None]]
        
        def bot(history):
            user_message = history[-1][0]
            bot_message = process_message(user_message, history)
            history[-1][1] = bot_message
            return history

        msg.submit(user, [msg, chatbot], [msg, chatbot]).then(bot, chatbot, chatbot)
        clear.click(lambda: None, None, chatbot)

    return demo

# Launch the Gradio app
if __name__ == "__main__":
    demo = create_gradio_interface()
    demo.launch(share=True)