Spaces:
Runtime error
Runtime error
| import gradio as gr | |
| import speech_recognition as sr | |
| import pyttsx3 | |
| # Initialize text-to-speech engine | |
| engine = pyttsx3.init() | |
| # Store cart in a temporary storage | |
| cart = [] | |
| # Define the menu items dynamically | |
| menu_items = { | |
| "Pizza": 10.99, | |
| "Burger": 8.49, | |
| "Pasta": 12.99, | |
| "Salad": 7.99, | |
| "Soda": 2.49 | |
| } | |
| def speak_response(response): | |
| """Generate voice output.""" | |
| engine.say(response) | |
| engine.runAndWait() | |
| def process_input(input_text): | |
| global cart | |
| response = "" | |
| if "price of" in input_text: | |
| matched_items = [item for item in menu_items if item.lower() in input_text] | |
| if len(matched_items) == 1: | |
| item = matched_items[0] | |
| response = f"The price of {item} is ${menu_items[item]:.2f}." | |
| elif len(matched_items) > 1: | |
| response = f"I detected multiple items in your input: {', '.join(matched_items)}. Please ask for the price of one item at a time." | |
| else: | |
| response = "I couldn't find that item on the menu. Please ask for an item available in the menu." | |
| elif any(item.lower() in input_text for item in menu_items): | |
| matched_items = [item for item in menu_items if item.lower() in input_text] | |
| if len(matched_items) == 1: | |
| item = matched_items[0] | |
| cart.append(item) | |
| response = f"{item} has been added to your cart. Your current cart includes:\n" | |
| for cart_item in cart: | |
| response += f"- {cart_item}\n" | |
| response += "\nWould you like to add anything else?" | |
| elif len(matched_items) > 1: | |
| response = f"I detected multiple items in your input: {', '.join(matched_items)}. Please mention one item at a time." | |
| elif "menu" in input_text: | |
| response = "Here is our menu:\n" | |
| for item in menu_items.keys(): | |
| response += f"{item}\n" | |
| response += "\nWhat would you like to order?" | |
| elif "final order" in input_text or "submit order" in input_text: | |
| if cart: | |
| total = calculate_total(cart) | |
| response = "Your final order includes:\n" | |
| for item in cart: | |
| response += f"- {item}\n" | |
| response += f"\nTotal amount: ${total:.2f}. Thank you for ordering!" | |
| cart.clear() | |
| else: | |
| response = "Your cart is empty. Would you like to order something?" | |
| else: | |
| response = "I didn’t quite catch that. Please tell me what you’d like to order or ask about." | |
| return response | |
| def voice_assistant(audio_file): | |
| recognizer = sr.Recognizer() | |
| try: | |
| with sr.AudioFile(audio_file) as source: | |
| audio = recognizer.record(source) | |
| input_text = recognizer.recognize_google(audio).lower() | |
| response = process_input(input_text) | |
| return response | |
| except sr.UnknownValueError: | |
| return "Sorry, I couldn't understand the audio. Please try again." | |
| gr.Interface( | |
| fn=voice_assistant, | |
| inputs=gr.Audio(source="microphone", type="filepath"), | |
| outputs="text", | |
| live=True, | |
| title="Voice Assistant" | |
| ).launch() | |