import gradio as gr import os import openai import speech_recognition as sr from gtts import gTTS from deep_translator import GoogleTranslator def translate_text(text, target_lang): translator = GoogleTranslator(source='auto', target=target_lang) return translator.translate(text) def get_llm_response(prompt): response = openai.ChatCompletion.create( model="gpt-4o-mini-2024-07-18", messages=[ {"role": "system", "content": "You are a helpful assistant that provides informative and concise responses."}, {"role": "user", "content": prompt} ], max_tokens=150 ) return response.choices[0].message.content.strip() def process_voice_or_text(input_audio, input_text, output_lang): if output_lang not in ["ta", "en"]: return "Invalid output language selected. Please choose either Tamil ('ta') or English ('en').", "", "", "", None if input_audio is not None: # Process audio input recognizer = sr.Recognizer() with sr.AudioFile(input_audio) as source: audio = recognizer.record(source) try: input_text = recognizer.recognize_google(audio, language="ta-IN,en-IN") except sr.UnknownValueError: return "Could not understand the audio input.", "", "", "", None except sr.RequestError as e: return f"Speech recognition error: {e}", "", "", "", None if not input_text: return "Please provide a valid input.", "", "", "", None # Translate input to English english_query = translate_text(input_text, "en") # Get response from LLM llm_response = get_llm_response(english_query) # Translate LLM response to desired output language final_response = translate_text(llm_response, output_lang) # Generate audio output audio_file = text_to_speech(final_response, output_lang) return input_text, english_query, llm_response, final_response, audio_file def text_to_speech(response, lang): lang_code = "ta" if lang == "ta" else "en" tts = gTTS(text=response, lang=lang_code) audio_file = "response.mp3" tts.save(audio_file) return audio_file # Gradio interface iface = gr.Interface( fn=process_voice_or_text, inputs=[ gr.Audio(type="filepath", label="Voice Input (Tamil or English)"), gr.Textbox(label="Text Input (Tamil or English)", placeholder="Type your input here..."), gr.Radio(["ta", "en"], label="Output Language", value="en") ], outputs=[ gr.Textbox(label="Original Input"), gr.Textbox(label="Translated English Query"), gr.Textbox(label="LLM Response (English)"), gr.Textbox(label="Final Response (Tamil/English)"), gr.Audio(type="filepath", label="Audio Output (Tamil/English)") ], live=True, title="Nisha - Tamil-English Voice Assistant", description="Speak or type in Tamil or English, and get responses in your preferred language as text or audio!" ) iface.launch()