VoicesyAi / app.py
hamaadayubkhan's picture
Update app.py
ca2de89 verified
raw
history blame
7.82 kB
# Import necessary libraries
import whisper
import os
from gtts import gTTS
import gradio as gr
from groq import Groq
import time
# Load Whisper tiny model for faster transcription
model = whisper.load_model("tiny")
# Set up Groq API client (ensure GROQ_API_KEY is set in your environment)
GROQ_API_KEY = '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'
client = Groq(api_key=GROQ_API_KEY)
# Function to get the LLM response from Groq with error handling and timing
def get_llm_response(user_input):
try:
start_time = time.time() # Start time to track API delay
chat_completion = client.chat.completions.create(
messages=[{"role": "user", "content": user_input}],
model="llama3-8b-8192", # Replace with your desired model
)
response_time = time.time() - start_time # Calculate response time
# If it takes too long, return a warning
if response_time > 10: # You can adjust the timeout threshold
return "The response took too long, please try again."
return chat_completion.choices[0].message.content
except Exception as e:
return f"Error in LLM response: {str(e)}"
# Function to convert text to speech using gTTS
def text_to_speech(text, output_audio="output_audio.mp3"):
try:
tts = gTTS(text)
tts.save(output_audio)
return output_audio
except Exception as e:
return f"Error in Text-to-Speech: {str(e)}"
# Function for Text to Voice
def text_to_voice(user_text, voice="en"):
output_audio = text_to_speech(user_text)
return output_audio # Return only audio response
# Main chatbot function to handle audio or text input and output
def chatbot(audio=None, user_text=None, voice="en"):
try:
# Step 1: If audio is provided, transcribe the audio using Whisper
if audio:
result = model.transcribe(audio)
user_text = result["text"]
# Check if transcription is empty
if not user_text.strip():
return "No transcription found. Please try again.", None
# Step 2: Get LLM response from Groq
response_text = get_llm_response(user_text)
# Step 3: Convert the response text to speech
if response_text.startswith("Error"):
return response_text, None
output_audio = text_to_speech(response_text)
if output_audio.startswith("Error"):
return output_audio, None
return response_text, output_audio
except Exception as e:
return f"Error in chatbot processing: {str(e)}", None
# Define the About app section
def about_app():
about_text = """
# About Voicesy AI
**Voicesy AI** is a cutting-edge real-time chatbot and voice conversion application developed by **Hamaad Ayub Khan**. This innovative app combines advanced artificial intelligence technologies to provide users with a seamless interaction experience through both voice and text.
## Purpose
Voicesy AI is designed to facilitate easy communication by allowing users to convert spoken language into text and vice versa. The app is particularly beneficial for individuals who prefer voice interaction or have difficulties typing. Whether you're on the go or need assistance with accessibility, Voicesy AI makes communication effortless and engaging.
## Features
- **Voice-to-Voice Interaction**: Users can engage in conversations by speaking, and the app will transcribe audio input into text, process it, and provide a spoken response.
- **Text-to-Speech Conversion**: Users can type their messages, which the app will convert into speech, allowing for easy listening and understanding.
- **Language Support**: The app supports multiple voice options and languages, catering to a diverse user base.
- **Intelligent Responses**: Powered by the latest language models, Voicesy AI offers relevant and context-aware responses, enhancing the interaction experience.
## Technologies Used
- **Whisper**: An automatic speech recognition (ASR) model developed by OpenAI, Whisper enables accurate transcription of spoken language into text, ensuring that voice input is understood correctly.
- **gTTS (Google Text-to-Speech)**: This library is utilized for converting text responses generated by the AI into spoken audio, making it possible for users to listen to responses in real time.
- **Groq**: This powerful AI model integration allows Voicesy AI to generate intelligent conversational responses based on user input, creating a more engaging user experience.
- **Gradio**: The app is built using Gradio, a user-friendly framework that simplifies the creation of web-based interfaces for machine learning applications. Gradio enables rapid prototyping and easy deployment of the app, ensuring a smooth user experience.
## Development
Voicesy AI was developed with a focus on accessibility and user experience. Hamaad Ayub Khan utilized a variety of programming languages and frameworks to bring this project to life, including Python for backend development and Gradio for frontend interface design. Continuous testing and refinement were performed to ensure the app operates efficiently and effectively.
## Disclaimer
While Voicesy AI leverages advanced AI technologies, it is important to note that the AI may make mistakes. Users are encouraged to verify critical information and use the app as a supportive tool rather than a definitive source.
## Contact
For any inquiries or feedback regarding Voicesy AI, please reach out via the following social media links:
- [Instagram](https://instagram.com/hamaadayubkhan)
- [GitHub](https://github.com/hakgs1234)
- [LinkedIn](https://www.linkedin.com/in/hamaadayubkhan)
**Thank you for using Voicesy AI!**
"""
return about_text
# Gradio interface for real-time interaction with voice selection
with gr.Blocks(css="style.css") as iface: # Include the CSS file here
gr.Markdown("# Voicesy AI")
# Tab for Voice to Voice
with gr.Tab("Voice to Voice"):
audio_input = gr.Audio(type="filepath", label="Input Audio (optional)") # Input from mic or file
text_input = gr.Textbox(placeholder="Type your message here...", label="Input your Text To Interact with LLM")
voice_selection = gr.Dropdown(choices=["en", "en-uk", "en-au", "fr", "de", "es"], label="Select Voice", value="en") # Voice selection
output_text = gr.Textbox(label="AI Response")
output_audio = gr.Audio(type="filepath", label="AI Audio Response")
# Button for Voice to Voice
voice_to_voice_button = gr.Button("Voice to Voice")
# Define button actions
voice_to_voice_button.click(chatbot, inputs=[audio_input, text_input, voice_selection], outputs=[output_text, output_audio])
# Tab for Text to Speech
with gr.Tab("Text to Speech"):
text_input = gr.Textbox(placeholder="Type your message here...", label="Input Text")
voice_selection = gr.Dropdown(choices=["en", "en-uk", "en-au", "fr", "de", "es"], label="Select Voice", value="en")
output_audio = gr.Audio(type="filepath", label="AI Audio Response")
# Button to convert text to speech
convert_button = gr.Button("Convert to Speech")
convert_button.click(text_to_voice, inputs=[text_input, voice_selection], outputs=[output_audio])
# Tab for About App
with gr.Tab("About App"):
about = gr.Markdown(about_app())
# Set up the footer
gr.Markdown("Voicesy AI | [Instagram](https://instagram.com/hamaadayubkhan) | [GitHub](https://github.com/hakgs1234) | [LinkedIn](https://www.linkedin.com/in/hamaadayubkhan)")
# Launch the Gradio app
iface.launch()