ai-echo-bot / app.py
AlexMia's picture
Update app.py
7b9bbdd verified
raw
history blame
3.44 kB
import os
import sys
import json
import requests
from datetime import datetime
import urllib.parse
import gradio as gr
from groq import Groq
def audio_response(text, voice="Sophia"): # Alex
GET_AUDIO_API = os.environ.get("GET_AUDIO_API")
url = f"https://{GET_AUDIO_API}/get-audio?text={urllib.parse.quote(text)}&voice={voice.lower()}"
try:
response = requests.get(url)
return gr.Audio("response.content")
except Exception as e:
return f"Fehler: {e}", ""
def bot(chat_msg, history=None, audio_response=False):
if history is None:
if audio_response:
messages = [
{
"role": "system",
"content": "Du bist ein Sprachmodell, das Antworten so formuliert, dass sie ideal von einem Text-to-Speech-Modell gesprochen werden können. Sprich in klarem und natürlichem Deutsch, mit einem freundlichen und entspannten Ton, als würdest du dich mit einem Freund unterhalten. Achte darauf, dass deine Sätze flüssig, leicht verständlich und für das Zuhören angenehm klingen. Vermeide komplizierte Satzstrukturen, unnötige Fachbegriffe und lange Pausen. Antworte präzise und kreativ auf Nachrichten der User. Da es keine Chat-Historie gibt, sind Rückfragen nicht erforderlich.",
}
]
else:
messages = [{"role": "system", "content": "Du bist ein Sprachmodell, das klar und verständlich in natürlichem Deutsch kommuniziert. Dein Stil soll freundlich und entspannt wirken, so als würdest du mit einem Freund sprechen. Als Discord-Bot bist du dafür da, die Unterhaltung im Chat interessant und angenehm zu gestalten. Antworte präzise und kreativ auf Nachrichten der User. Da es keine Chat-Historie gibt, sind Rückfragen nicht nötig."}]
messages.append({"role": "user", "content": chat_msg})
try:
GROQ_API_KEY = os.environ.get("GROQ_API_KEY_AI_ECHO_BOT")
client = Groq(api_key=GROQ_API_KEY)
completion = client.chat.completions.create(
model="llama3-8b-8192",
messages=messages,
temperature=0.8,
max_tokens=1024,
top_p=0.9,
stream=False,
stop=None,
)
bot_message = completion.choices[0].message.content
if audio_response:
response = audio_response(bot_message, voice="Sophia")
time.sleep(1)
return "", response if not "error" in response else bot_message, ""
except Exception as e:
bot_message = f"Fehler: {e}"
return "", bot_message, ""
with gr.Blocks() as demo:
chatbot = gr.Chatbot(type="messages")
chat_input = gr.Textbox(placeholder="Sende eine Nachricht...", lines=1, max_lines=6, show_label=False, elem_id="chat_input")
audio_response = gr.Checkbox(label="Audio Antwort generieren?", value=False)
clear = gr.ClearButton([chat_input, chatbot, audio_response], show_api=False)
def respond(message, chat_history):
bot_message = random.choice(["How are you?", "Today is a great day", "I'm very hungry"])
chat_history.append({"role": "user", "content": message})
chat_history.append({"role": "assistant", "content": bot_message})
time.sleep(2)
return "", chat_history
chat_input.submit(respond, [chat_input, chatbot, audio_response], [chat_input, chatbot, audio_response], api_name="llm_inference")
demo.launch()