Spaces:
Sleeping
Sleeping
| 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 | |
| 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() | |