|
import os |
|
import gradio as gr |
|
import whisper |
|
from gtts import gTTS |
|
import io |
|
from groq import Groq |
|
|
|
|
|
client = Groq(api_key=os.environ.get("GROQ_API_KEY")) |
|
|
|
|
|
model = whisper.load_model("base") |
|
|
|
def process_audio(file_path): |
|
try: |
|
|
|
audio = whisper.load_audio(file_path) |
|
|
|
|
|
result = model.transcribe(audio) |
|
text = result["text"] |
|
|
|
|
|
chat_completion = client.chat.completions.create( |
|
messages=[{"role": "user", "content": text}], |
|
model="llama3-8b-8192", |
|
) |
|
|
|
|
|
response_message = chat_completion.choices[0].message.content.strip() |
|
|
|
|
|
tts = gTTS(response_message) |
|
response_audio_io = io.BytesIO() |
|
tts.write_to_fp(response_audio_io) |
|
response_audio_io.seek(0) |
|
|
|
|
|
response_audio_path = "response.mp3" |
|
with open(response_audio_path, "wb") as audio_file: |
|
audio_file.write(response_audio_io.getvalue()) |
|
|
|
|
|
return response_message, response_audio_path |
|
|
|
except Exception as e: |
|
return f"An error occurred: {e}", None |
|
|
|
|
|
with gr.Blocks() as demo: |
|
gr.Markdown( |
|
""" |
|
<style> |
|
.gradio-container { |
|
font-family: Arial, sans-serif; |
|
background-color: #f0f4c3; /* Light green background color */ |
|
border-radius: 10px; |
|
padding: 20px; |
|
box-shadow: 0 4px 12px rgba(0,0,0,0.2); |
|
text-align: center; |
|
} |
|
.gradio-input, .gradio-output { |
|
border-radius: 6px; |
|
border: 1px solid #ddd; |
|
padding: 10px; |
|
} |
|
.gradio-button { |
|
background-color: #ff7043; |
|
color: white; |
|
border-radius: 6px; |
|
border: none; |
|
padding: 10px 20px; /* Adjusted padding */ |
|
font-size: 16px; /* Adjusted font size */ |
|
cursor: pointer; |
|
} |
|
.gradio-button:hover { |
|
background-color: #e64a19; |
|
} |
|
.gradio-title { |
|
font-size: 28px; |
|
font-weight: bold; |
|
margin-bottom: 20px; |
|
color: #37474f; |
|
} |
|
.gradio-description { |
|
font-size: 16px; |
|
margin-bottom: 20px; |
|
color: #616161; |
|
} |
|
</style> |
|
""" |
|
) |
|
|
|
gr.Markdown("# Voice-to-Voice Chatbot\nDeveloped by Salman Maqbool ❤️") |
|
gr.Markdown("Upload an audio file to interact with the voice-to-voice chatbot. The chatbot will transcribe the audio, generate a response, and provide a spoken reply.") |
|
|
|
with gr.Row(): |
|
with gr.Column(): |
|
audio_input = gr.Audio(type="filepath", label="Upload Audio File") |
|
submit_button = gr.Button("Submit") |
|
|
|
with gr.Column(): |
|
response_text = gr.Textbox(label="Response Text", placeholder="The AI-generated response will appear here", lines=5) |
|
response_audio = gr.Audio(label="Response Audio", type="filepath") |
|
|
|
|
|
submit_button.click(fn=process_audio, inputs=audio_input, outputs=[response_text, response_audio]) |
|
|
|
|
|
demo.launch() |
|
|