Spaces:
Sleeping
Sleeping
import os | |
import sys | |
import json | |
import requests | |
from datetime import datetime | |
import urllib.parse | |
import gradio as gr | |
from groq import Groq | |
# Konfiguration | |
GET_AUDIO_API = os.environ.get("GET_AUDIO_API") | |
GROQ_API_KEY = os.environ.get("GROQ_API_KEY_AI_ECHO_BOT") | |
client = Groq(api_key=GROQ_API_KEY) | |
print("API Keys running?") | |
print("GROQ KEY: " + "RUNNING" if GROQ_API_KEY != "" else "--- NOT RUNNING ---") | |
print("GET_AUIDO_API: " + "RUNNING\n" if GET_AUDIO_API != "" else "--- NOT RUNNING ---\n") | |
def audio_response(text, voice="Sophia"): | |
url = f"https://{GET_AUDIO_API}/get-audio?text={urllib.parse.quote(text)}&voice={voice.lower()}" | |
print("URL GET AUDIO API: " + url) | |
try: | |
response = requests.get(url) | |
print("Response: ") | |
print(response.content) # response.content ist bereits vom Typ 'bytes' | |
return response.content | |
except Exception as e: | |
return f"Ein Fehler mit der GET_AUDIO_API ist aufgetreten: {e}" | |
def bot(chat_msg, history=None, audio_tts_checkbox=False): | |
""" | |
Prozessiert die Benutzereingabe und gibt eine Antwort zurück. | |
""" | |
messages = [] | |
SYSTEMMESSAGE = "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." if audio_response == False else "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": "system", "content": SYSTEMMESSAGE}) | |
messages.append({"role": "user", "content": chat_msg}) | |
print("1. Messages:\n") | |
print(messages) | |
try: | |
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_tts_checkbox == True: | |
print("AUDIO TTS CHECKBOX IS TRUE!") | |
response_audio = audio_response(bot_message, voice="Sophia") | |
print("response_audio:") | |
print(response_audio) | |
# Überprüfe, ob response_audio 'bytes' ist | |
if isinstance(response_audio, bytes): | |
messages.append({"role": "assistant", "content": gr.Audio(response_audio)}) | |
else: | |
messages.append({"role": "assistant", "content": bot_message}) | |
print("2. Messages:\n") | |
print(messages) | |
return "", messages, "" | |
except Exception as e: | |
bot_message = f"Fehler: {e}" | |
messages.append({"role": "assistant", "content": bot_message}) | |
return "", messages, "" | |
with gr.Blocks(css_paths="_custom.css") 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_tts_checkbox = gr.Checkbox(label="Audio Antwort generieren?", value=False, elem_classes="toggle-btn") | |
submit_btn = gr.Button("Senden") | |
submit_btn.click(bot, [chat_input, chatbot, audio_tts_checkbox], [chat_input, chatbot, audio_tts_checkbox], api_name="llm_submit") | |
chat_input.submit(bot, [chat_input, chatbot, audio_tts_checkbox], [chat_input, chatbot, audio_tts_checkbox], api_name="llm") | |
demo.launch() |