import pygame import speech_recognition as sr from openai import OpenAI from pathlib import Path import time import os import io import soundfile as sf import sounddevice as sd # 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 helpful assistant who explains and answers about IoT use cases in Vodafone."}, {"role": "user", "content": f"{file_content}\n\nQ: {question}\nA:"} ] 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-3.5-turbo", messages=messages, max_tokens=150, 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): spoken_response = client.audio.speech.create( model="tts-1", voice="alloy", response_format="opus", input=text ) buffer = io.BytesIO() for chunk in spoken_response.iter_bytes(chunk_size=4096): buffer.write(chunk) buffer.seek(0) with sf.SoundFile(buffer, 'r') as sound_file: data = sound_file.read(dtype='int16') sd.play(data, sound_file.samplerate) sd.wait() 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}") generate_speech(answer) else: print("Sorry, I didn't get that. Please ask again.") 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 main(): text_files = { 1: "Gigabeeprotect.txt", 2: "Hydrosense.txt", 3: "Pushtotalk.txt", } while True: num = user_input() play_audio(num) file_content = read_text_file(text_files[num]) start_qa_mode(file_content) if __name__ == "__main__": main()