hellonisha / app.py
dindizz's picture
Update app.py
bd97668 verified
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()