mzaeem30's picture
Create app.py
a871f78 verified
Raw
History Blame Contribute Delete
2.72 kB
import gradio as gr
import torch
import whisper
from langchain_community.embeddings import HuggingFaceEmbeddings
from langchain.vectorstores import FAISS
from langchain.chains import RetrievalQA
from langchain.agents import initialize_agent, Tool, AgentType
from langchain.prompts import PromptTemplate
from langchain.memory import ConversationBufferMemory
from gtts import gTTS
import os
from groq import Groq
# Load Whisper model for transcription
model = whisper.load_model("base")
# Initialize Groq client
client = Groq(api_key="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")
# Function to transcribe audio
def transcribe_audio(audio):
result = model.transcribe(audio)
return result["text"]
# Function for text-to-speech conversion
def text_to_speech(text):
tts = gTTS(text)
audio_path = "/tmp/response.mp3"
tts.save(audio_path)
return audio_path
# Function to interact with Groq API for LLM responses
def get_groq_response(question):
# Use Groq API to get the answer from LLM
chat_completion = client.chat.completions.create(
messages=[
{
"role": "user",
"content": question,
}
],
model="llama-3.3-70b-versatile",
)
return chat_completion.choices[0].message.content
# Initialize Gradio components
with gr.Blocks() as demo:
gr.Markdown("# Voice/Text Chatbot with Document-based Q&A and Audio Transcription")
# Audio Input: Microphone for recording or File Upload
audio_input = gr.Audio(type="filepath", label="Record or Upload Audio")
# Text Input for queries
text_input = gr.Textbox(label="Enter your question", placeholder="Ask a question based on the document...")
# Output Text
output_text = gr.Textbox(label="Answer")
# Output Audio (for voice-based response)
output_audio = gr.Audio(label="Voice Response", type="filepath")
# Button to process the input and generate output
def process_input(audio_input, text_input):
if audio_input:
question = transcribe_audio(audio_input)
else:
question = text_input
# Get the answer from the LLM via Groq API
answer = get_groq_response(question)
# Convert the answer to speech and return both text and audio
audio_path = text_to_speech(answer)
return answer, audio_path
# Bind the function to the interface
audio_input.change(process_input, inputs=[audio_input, text_input], outputs=[output_text, output_audio])
text_input.submit(process_input, inputs=[audio_input, text_input], outputs=[output_text, output_audio])
demo.launch(debug=True)