AashishKumar's picture
Update app.py
52dc508
import openai
import speech_recognition as sr
import gradio as gr
restaurants = {
"Joe's Pizza": {
"Margherita Pizza": 14.99,
"Pepperoni Pizza": 16.99,
"Vegetable Pizza": 15.99,
"Caesar Salad": 8.99,
"Garlic Knots": 5.99,
"Diet Coke": 2.99,
"Chocolate Chip Cookie": 2.99
},
"Bamboo House": {
"Whopper Meal": 7.99,
"Chicken Fries": 3.99,
"Impossible Whopper": 5.99,
"Chicken Sandwich": 4.99,
"Onion Rings": 2.99,
"Fountain Drink": 1.99,
"Apple Pie": 1.49
},
"Taco Bell": {
"Crunchwrap Supreme": 4.99,
"Beef Quesarito": 3.99,
"Nachos Supreme": 2.99,
"Cheesy Gordita Crunch": 4.99,
"Soft Taco": 1.29,
"Baja Blast Freeze": 2.49,
"Cinnamon Twists": 1.99
},
"Curry Kingdom": {
"Big Mac-Meal": 6.49,
"10-Piece Chicken-McNuggets": 4.29,
"Filet Fish": 3.79,
"Cheessy Quarte-Pounder": 5.19,
"French Fries": 1.89,
"Soft Drink": 1.00,
"Apple Pie": 0.99
},
"Chipotle House": {
"Burrito Bowl": 7.99,
"Steak Quesadilla": 4.99,
"Crispy Tacos": 3.99,
"Barbacoa Salad": 8.99,
"Chips Guac": 3.99,
"Soft Drinks": 2.29,
"Chocolate Brownie": 2.25
}
}
# ChatGPT API setup
openai.api_key = "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"
def recognize_speech(audio):
audio_file = open(audio,"rb")
transcript=openai.Audio.transcribe("whisper-1",audio_file)
print(transcript)
return transcript["text"]
def chatbot(command):
response = openai.ChatCompletion.create(
model="gpt-3.5-turbo",
messages=[
{"role": "system", "content": "You are a Restaurants chatbot Who takes order,shows menus and answers users food related querry's presiously"},
{"role": "user", "content": command},
]
)
result = ''
for choice in response.choices:
result += choice.message.content
return result
def nlp(txt_summ):
completion = openai.Completion.create(
model="text-davinci-003",
prompt= txt_summ ,
temperature=0.7,
max_tokens=64,
top_p=1.0,
frequency_penalty=0.0,
presence_penalty=0.0
)
response = completion.choices[0].text
return response
# Get menu for a specific restaurant
def get_menu_items(restaurant):
return restaurants[restaurant]
def identify_food_command(text):
keywords = ['order', 'menu', 'food']
for keyword in keywords:
if keyword in text:
return keyword
return None
# Main function to handle user inputs and chatbot responses
def main(audio):
while True:
try:
print("What can I help you with?")
command = recognize_speech(audio)
print(f"You said: {command}")
txt_command ="extract the food related command keyword from the sentence :\n\n"+command
food_command = (" ".join(nlp(txt_command).strip().split()[-1:])).lower()
print(food_command)
restaurant_name = ''
txt_extract = "extract the restaurants name from the sentence :\n\n"+command
restaurant_name = " ".join(((nlp(txt_extract)).strip()).title().split()[-2:])
found_rest = False
if(restaurant_name in restaurants.keys()):
found_rest = True
item_name = ''
txt_extract = "extract the food name from the given sentence :\n\n"+command
item_name = " ".join(((nlp(txt_extract)).strip()).title().strip(".,;:").split()[-2:])
found_item = False
for restaurant, rest_info in restaurants.items():
if item_name in rest_info:
found_item = True
print(found_item , found_rest)
if food_command in ['order', 'eat' , 'want' , 'serve' , 'prepare' ]:
if not found_rest and found_item:
temp_val = {}
for restaurant, rest_info in restaurants.items():
if item_name in rest_info:
temp_val[restaurant] = rest_info[item_name]
if temp_val:
min_price = min(temp_val.values())
res = [key for key in temp_val if temp_val[key] == min_price]
response = f"You have ordered {item_name} from {res[0]} with price of {min_price}"
elif found_rest and found_item:
response = f"\nYou ordered {item_name} from {restaurant_name}\nGreat! Thank you for ordering."
elif found_rest and not found_item :
menu_items = get_menu_items(restaurant_name)
response = f"Sure, here's the menu for {restaurant_name}: {menu_items} What would you like to order?"
max_tries = 3
for i in range(max_tries):
order_audio = input()
item = order_audio
if item == "nothing":
response = "Okay! You don't want anything"
break
elif item in restaurants[restaurant_name].keys():
response = f"\nYou ordered {item} from {restaurant_name.title()}\nGreat! Thank you for ordering."
break
else:
if i == max_tries - 1:
response = "Sorry, you didn't provide any valid input. Goodbye!"
break
else:
response = "Sorry, that item is not available at this restaurant. Please try again."
else :
resp = "Respond properly and Try to make the Customer buy some food and for the valid response"
response = chatbot(resp)
elif food_command in ['menu' , 'menus' , 'catalogue' , 'items' , 'something']:
if found_rest:
menu_items = get_menu_items(restaurant_name)
response = f"Here's the menu for {restaurant_name}: {menu_items}"
else:
response = chatbot(command)
elif identify_food_command(command) == 'food':
response=chatbot("Respond a person properly who has come to your restaurant asking food")
else:
response=chatbot("Response, as if you cannot understand and make the person salivate so that he buys a food . Also Give proper reply for the output\n"+command)
return response
except sr.UnknownValueError:
print("Sorry, I did not understand what you said.")
except sr.RequestError:
print("Sorry, I am unable to process your request.")
except Exception as e:
print("An error occurred:", e)
interface = gr.Interface(
main,
inputs=gr.Audio(source="microphone", type="filepath", label="Input Audio"),
outputs= gr.Textbox(label="Foodie Chatbot's response"),
title="Foodie Chatbot",
description="Talk to the Foodie Chatbot and get restaurant recommendations and menus!",
)
if __name__ == "__main__":
interface.launch(inline=False)