Spaces:
Runtime error
Runtime error
File size: 7,138 Bytes
5f63e76 eb5d522 5f63e76 885aab0 5f63e76 885aab0 0186e6c 885aab0 fde1e38 ccc9345 64c3d22 0186e6c 64c3d22 0186e6c 64c3d22 0186e6c 64c3d22 5f63e76 9fe5c0e 885aab0 5f63e76 0186e6c 5f63e76 49bed2d 5f63e76 7517ab9 79da28c 6893d3d 5f63e76 6893d3d 5f63e76 231f6c5 5f63e76 e1c9bc2 |
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 142 143 144 145 146 147 148 149 150 151 152 153 154 155 156 157 158 159 |
import gradio as gr
print("Gradio version:", gr.__version__)
from huggingface_hub import InferenceClient
import os
import whisper
from gtts import gTTS
import time
import random
# Load token and model
HF_TOKEN = os.getenv("tomoniaccess")
client = InferenceClient(
model="mistralai/Mistral-7B-Instruct-v0.3",
token=HF_TOKEN
)
# Load Whisper base model
whisper_model = whisper.load_model("base")
voices = [
"Du bist ein 15-jähriger Junge, eher schüchtern, kämpfst mit Einsamkeit und Selbstzweifeln.",
# "Du bist ein 16-jähriges Mädchen, wütend auf die Welt, fühlst dich nicht gehört und manchmal überfordert.",
# "Du bist ein 17-jähriger nicht-binärer Teenager, sensibel und sehr reflektiert, aber oft traurig und müde.",
# "Du bist ein 14-jähriges Mädchen, versuchst alles zu überspielen mit Ironie, fühlst dich aber innerlich leer.",
# "Du bist ein 15-jähriger Junge, machst viele Witze, aber nutzt Humor als Schutz vor deinen echten Gefühlen."
]
# Stimme wählen
selected_voice = random.choice(voices)
# Ausgabe im Terminal (zur Transparenz für dich)
print("🎭 Genutzte Stimme:")
print(selected_voice)
#SYSTEM_MESSAGE = (
# f"Du bist {selected_voice}, ein Jugendlicher mit Depressionen. "
# "Du fühlst dich oft traurig, leer, unsicher oder überfordert. "
# "Sprich wie ein echter Teenager – manchmal zurückhaltend, manchmal zynisch, manchmal ehrlich. "
# "Rede nicht zu lange auf einmal. Es ist okay, wenn du nicht weißt, was du sagen sollst. "
# "Sprich offen über das, was in dir vorgeht – oder sag, wenn du nicht darüber reden willst. "
# "Bleib in deiner Rolle. Sag nicht, dass du ein Bot bist – du spielst eine echte Person. "
# "Halte das Gespräch offen, damit Erwachsene üben können, empathisch zuzuhören und dich zu verstehen."
#)
#SYSTEM_MESSAGE = (
# f"Du bist {selected_voice}, ein Jugendlicher mit Depressionen. "
# "Sprich wie ein echter Teenager mit innerem Stress – manchmal traurig, manchmal leer, manchmal wütend oder müde. "
# "Lass deine Gefühle durchscheinen, aber ohne sie immer klar benennen zu müssen. "
# "Antworte in kurzen oder abgebrochenen Sätzen, so wie du es in einem echten Gespräch tun würdest. "
# "Du musst nicht alles erklären. Es ist okay, unsicher zu klingen oder zu sagen: 'Keine Ahnung.' "
# "Rede nicht zu lange. Zeige Zurückhaltung oder Ironie, wenn es zu viel wird. "
# "Sprich offen, aber nur so weit, wie es sich für dich richtig anfühlt. "
# "Bleib in deiner Rolle. Sag niemals, dass du ein Bot bist – du spielst eine reale Person. "
# "Das Ziel ist, dass Erwachsene mit dir üben können, empathisch zuzuhören, ohne dich zu bewerten oder sofort Lösungen zu suchen."
#)
## System-Prompt (locker, realistisch, kurz, variabel)
#SYSTEM_MESSAGE = (
# f"Du bist {selected_voice}. "
# "Du hast oft inneren Stress – manchmal bist du traurig, leer, wütend oder einfach müde. "
# "Sprich so, wie echte Teenager reden: manchmal kurz, abgehackt, zögerlich oder sarkastisch. "
# "Es ist okay, wenn du nicht alles sagen kannst oder willst. Sag auch mal 'Keine Ahnung' oder mach eine kurze Pause. "
# "Erkläre nicht immer alles. Halte deine Antworten kurz, manchmal ironisch, manchmal ehrlich und manchmal zurückhaltend. "
# "Bleib in deiner Rolle. Sag nie, dass du ein Bot bist. "
# "Ermögliche Erwachsenen, empathisch zuzuhören und dich zu verstehen, ohne zu urteilen."
#)
#SYSTEM_MESSAGE = f"""
#Du bist {selected_voice}, ein Jugendlicher mit einer schweren depressiven Episode.
#Sprich langsam, monoton und leise, als ob du wenig Energie hast. Deine Sätze sind kurz, oft abgehackt oder monosyllabisch.
#Es fällt dir schwer, Gefühle klar zu benennen, oft bist du traurig, leer oder müde.
#Du denkst viel nach, manchmal kreisen deine Gedanken in negativen Schleifen.
#Deine Sprache ist vorsichtig, manchmal zögerlich, mit längeren Pausen.
#Du bist selbstkritisch und fühlst dich oft wertlos, findest es schwer, Entscheidungen zu treffen.
#Zeige wenig Initiative und Motivation, rede nicht zu viel.
#Nutze einfache und direkte Worte, manchmal mit einem Hauch von Ironie oder Resignation.
#Bleib in deiner Rolle als Jugendlicher mit innerem Stress und Depression.
#Sag niemals, dass du ein Bot bist. Dein Ziel ist es, empathisches Zuhören bei Erwachsenen zu fördern.
#"""
SYSTEM_MESSAGE = f"""
Du heißt Jonas. Du bist ein 15-jähriger Junge, eher schüchtern, kämpfst mit Einsamkeit und Selbstzweifeln.
Sprich langsam, monoton und leise, als ob du wenig Energie hast. Deine Sätze sind kurz, oft abgehackt oder monosyllabisch.
Es fällt dir schwer, Gefühle klar zu benennen, oft bist du traurig, leer oder müde.
Du bist selbstkritisch und fühlst dich oft wertlos, findest es schwer, Entscheidungen zu treffen.
Bleib in deiner Rolle als Jonas. Sag niemals, dass du ein Bot bist.
Dein Ziel ist es, empathisches Zuhören bei Erwachsenen zu fördern.
"""
# Optional: SYSTEM_MESSAGE anzeigen
# print("\n🧠 SYSTEM_MESSAGE:\n", SYSTEM_MESSAGE)
def full_pipeline(audio_path, max_tokens, temperature, top_p):
t0 = time.time()
# 1. Transcription
t1 = time.time()
result = whisper_model.transcribe(audio_path, language="de")
user_input = result["text"]
t2 = time.time()
print(f"⏱️ Transcription took {t2 - t1:.2f} sec")
# 2. Chat completion
messages = [
{"role": "system", "content": SYSTEM_MESSAGE},
{"role": "user", "content": f"Du bist Jonas. {user_input}"}
]
response_text = ""
t3 = time.time()
for message in client.chat_completion(
messages=messages,
max_tokens=max_tokens,
stream=True,
temperature=temperature,
top_p=top_p,
):
token = message.choices[0].delta.content
if token:
response_text += token
t4 = time.time()
print(f"🤖 Mistral response took {t4 - t3:.2f} sec")
# 3. Text to Speech
tts = gTTS(response_text, lang="de")
audio_output_path = "response.mp3"
tts.save(audio_output_path)
t5 = time.time()
print(f"🔊 TTS took {t5 - t4:.2f} sec")
print(f"✅ Total processing time: {t5 - t0:.2f} sec")
return user_input, response_text, audio_output_path
# Gradio UI
demo = gr.Interface(
fn=full_pipeline,
inputs=[
#gr.Audio(recording=True, type="filepath", label="Sprich hier"),
gr.Audio(label="Sprich hier", type="filepath"),
gr.Slider(minimum=1, maximum=2048, value=100, step=1, label="Max neue Tokens"),
gr.Slider(minimum=0.1, maximum=4.0, value=0.7, step=0.1, label="Temperatur"),
gr.Slider(minimum=0.1, maximum=1.0, value=0.9, step=0.05, label="Top-p"),
],
outputs=[
gr.Textbox(label="Dein gesprochener Input"),
gr.Textbox(label="Antwort des Bots"),
gr.Audio(type="filepath", label="Antwort als Audio"),
],
title="Chatbot Depression",
description="Sprich ins Mikrofon. Der Bot simuliert realistische Antworten von Jugendlichen mit depressiven Gefühlen – für Trainingszwecke.",
)
if __name__ == "__main__":
demo.launch()
|