llm-chat-audio / app.py
VenkatesaPerumal's picture
updated audio model
e01b70f
import os
import requests
import gradio as gr
from langchain.llms.base import LLM
from langchain import LLMChain, PromptTemplate
from langchain.memory import ConversationBufferMemory
from groq import Groq
# ========== API Keys ==========
GROQ_API_KEY = "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"
ELEVENLABS_API_KEY = "sk_1253d5341f2936003bc788544d3206731872b30fa6b6dbfc"
ELEVENLABS_VOICE_ID = "21m00Tcm4TlvDq8ikWAM"
os.environ["GROQ_API_KEY"] = GROQ_API_KEY
# ========== Groq LLM via LangChain ==========
client = Groq(api_key=GROQ_API_KEY)
class GroqLLM(LLM):
def _call(self, prompt: str, stop=None):
completion = client.chat.completions.create(
messages=[{"role": "user", "content": prompt}],
model="llama-3.1-8b-instant",
)
return completion.choices[0].message.content
@property
def _llm_type(self) -> str:
return "groq"
# ========== LangChain Chain Setup ==========
template = """You are a helpful assistant.
{chat_history}
User: {user_message}
Assistant:"""
prompt = PromptTemplate(
input_variables=["chat_history", "user_message"],
template=template
)
memory = ConversationBufferMemory(memory_key="chat_history")
llm_chain = LLMChain(
llm=GroqLLM(),
prompt=prompt,
memory=memory
)
# ========== ElevenLabs TTS Function ==========
def generate_audio_elevenlabs(text, filename="response_audio.mp3"):
url = f"https://api.elevenlabs.io/v1/text-to-speech/{ELEVENLABS_VOICE_ID}"
headers = {
"xi-api-key": ELEVENLABS_API_KEY,
"Content-Type": "application/json"
}
data = {
"text": text,
"model_id": "eleven_monolingual_v1"
}
response = requests.post(url, headers=headers, json=data)
if response.status_code == 200:
with open(filename, "wb") as f:
f.write(response.content)
return filename
else:
print("Error generating audio:", response.status_code, response.text)
return None
# ========== Chatbot Handler ==========
def respond(message, chat_history):
response = llm_chain.predict(user_message=message)
audio_file = generate_audio_elevenlabs(response)
chat_history.append((message, response))
return chat_history, audio_file
# ========== Gradio UI ==========
with gr.Blocks() as demo:
chatbot = gr.Chatbot(label="Groq + ElevenLabs Chatbot")
msg = gr.Textbox(label="Ask something...")
audio_output = gr.Audio(label="Audio Reply", autoplay=True, type="filepath")
state = gr.State([])
msg.submit(respond, [msg, state], [chatbot, audio_output])
msg.submit(lambda: "", None, msg) # Clear textbox after sending
# ========== Launch App ==========
demo.launch()