import pygame import speech_recognition as sr from openai import OpenAI from pathlib import Path import time import os # Initialize OpenAI API key api_key = 'sk-proj-wwWaxim1Qt13uqzSS0xjT3BlbkFJK0rZvx78AJiWG3Ot7d3S' client = OpenAI(api_key=api_key) def create_messages(question, file_content): return [ {"role": "system", "content": "You are a tour guide who explains and answers about IoT use cases in Vodafone."}, {"role": "user", "content": f"{file_content}\n\nQ: {question}\nA:"} ] def user_input(): while True: try: num = int(input("Enter a number from 1 to 3: ")) if 1 <= num <= 3: return num else: print("Invalid input. Please enter a number between 1 and 3.") except ValueError: print("Invalid input. Please enter a valid integer.") def play_audio(num): audio_files = { 1: "speech1.mp3", 2: "hydrosense.mp3", 3: "Pushtotalk.mp3", } audio_file = audio_files.get(num) if audio_file: pygame.mixer.init() pygame.mixer.music.load(audio_file) pygame.mixer.music.play() while pygame.mixer.music.get_busy(): time.sleep(1) def recognize_speech(): recognizer = sr.Recognizer() with sr.Microphone() as source: print("Listening...") audio = recognizer.listen(source) try: print("Recognizing...") text = recognizer.recognize_google(audio, language='en-US') print(f"You said: {text}") return text except sr.UnknownValueError: print("Sorry, I did not understand that.") return None except sr.RequestError: print("Sorry, there was an error with the speech recognition service.") return None def get_response_from_openai(messages): response = client.chat.completions.create( model="gpt-4o", messages=messages, max_tokens=75, temperature=0.5, ) return (response.choices[0].message.content) def read_text_file(file_path): with open(file_path, 'r') as file: return file.read() def generate_speech(text, file_path): speech_file_path = Path(file_path).parent / "speech.mp3" with client.audio.speech.with_streaming_response.create( model="tts-1", # Replace with your actual model ID input=text, voice="alloy" # Replace with a valid voice for your chosen model ) as response: response.stream_to_file(str(speech_file_path)) return str(speech_file_path) def start_qa_mode(file_content): while True: print("Please ask your question:") question = recognize_speech() if question and question.lower() in ["no", "go to next showcase", "exit"]: break if question: messages = create_messages(question, file_content) answer = get_response_from_openai(messages) print(f"Answer: {answer}") speech_file_path = generate_speech(answer, "speech.mp3") pygame.mixer.init() pygame.mixer.music.load(speech_file_path) pygame.mixer.music.play() while pygame.mixer.music.get_busy(): pygame.time.Clock().tick(10) # Adjust as needed pygame.mixer.music.stop() # Ensure music playback stops pygame.mixer.quit() # Release resources os.remove(speech_file_path) else: print("Sorry, I didn't get that. Please ask again.") def main(): while True: num = user_input() play_audio(num) text_files = { 1: "Gigabeeprotect.txt", 2: "Hydrosense.txt", 3: "Pushtotalk.txt", } text_file = text_files.get(num) if text_file: file_content = read_text_file(text_file) start_qa_mode(file_content) if __name__ == "__main__": main()