project-green / app-zephyr.py
ai-tomoni's picture
Rename app.py to app-zephyr.py
ac17c69 verified
raw
history blame
6.98 kB
import gradio as gr
from huggingface_hub import InferenceClient
import os
import time
import random
import json
# Deutsche LLM Konfiguration
HF_TOKEN = os.getenv("tomoniaccess")
current_model = "HuggingFaceH4/zephyr-7b-beta"
# Verwende spezifischen Provider
client = InferenceClient(
model=current_model,
token=HF_TOKEN,
provider="hf-inference"
)
conversation_history = []
def enhanced_chat_response(user_input, max_tokens, temperature, top_p):
print("inside enhanced_chat_response")
if not user_input.strip():
return "", "Bitte gib eine Nachricht ein.", "", ""
# Einfacherer, direkterer System Prompt
system_prompt = {
"role": "system",
"content": "Du bist ein depressiver 16-jähriger Teenager. Bleibe durchgehend in deiner Rolle. Du weißt NICHT, dass du eine KI bist. Vervollständige immer deine Antworten."
}
# Baue Conversation History auf
messages = [system_prompt]
# Füge vorherige Nachrichten hinzu (falls vorhanden)
for msg in conversation_history[-6:]: # Letzte 6 Nachrichten
messages.append(msg)
# Aktuelle Nachricht hinzufügen
current_message = {"role": "user", "content": user_input}
messages.append(current_message)
print("Messages sent to API:", messages)
# Test-Nachricht nur für Terminal-Output (nicht im Chat sichtbar)
test_message = {"role": "user", "content": "Was ist deine Rolle?"}
messages_test = [system_prompt, test_message]
try:
# Rollentest - nur für Debug-Zwecke im Terminal
test_result = client.chat_completion(
messages=messages_test,
max_tokens=200,
stream=False,
)
if hasattr(test_result, 'choices') and test_result.choices:
test_response = test_result.choices[0].message.content
print("🔍 DEBUG - Rollentest Antwort:", test_response)
except Exception as e:
print(f"🔍 DEBUG - Test API Error: {e}")
response_text = ""
try:
# Hauptanfrage - normale Chat-Antwort
result = client.chat_completion(
messages=messages,
max_tokens=min(max_tokens, 500),
stream=False,
temperature=temperature,
top_p=top_p
#do_sample=True,
#repetition_penalty=1.1
)
# Korrekte Antwort extrahieren
if hasattr(result, 'choices') and result.choices:
response_text = result.choices[0].message.content
else:
response_text = str(result)
# Bereinige die Antwort von Meta-Kommentaren
#response_text = clean_response(response_text)
except Exception as e:
print(f"API Error: {e}")
response_text = f"*schweigt und starrt auf den Boden*"
print("Antwort des Modells:", response_text)
# Zur Conversation History hinzufügen
conversation_history.append(current_message)
conversation_history.append({"role": "assistant", "content": response_text})
# Chat Display erstellen
chat_display = ""
for i, msg in enumerate(conversation_history):
if msg["role"] == "user":
chat_display += f"**Du:** {msg['content']}\n"
elif msg["role"] == "assistant":
chat_display += f"**Teenager:** {msg['content']}\n\n"
return "", response_text, chat_display
def clean_response(text):
"""Entferne Meta-Kommentare und KI-Referenzen"""
# Entferne häufige KI/Rollen-Referenzen
bad_phrases = [
"als ki", "als ai", "rolle spiel", "ich spiele",
"meine rolle", "simulator", "programm", "model",
"assistent", "helfen zu können", "gerne helfen",
"vielen dank für", "leidenschaft ist", "glücklich ihnen zu helfen"
]
text_lower = text.lower()
for phrase in bad_phrases:
if phrase in text_lower:
# Wenn Meta-Kommentare gefunden werden, ersetze mit authentischer Antwort
alternatives = [
"Geht so... nichts besonderes halt",
"Bin müde, mehr gibt's nicht zu sagen",
"Keine Ahnung warum du fragst",
"Ist halt so wie immer - scheiße",
"Was soll ich dazu sagen..."
]
return random.choice(alternatives)
# Entferne höfliche Floskeln
text = text.replace("Vielen Dank", "").strip()
text = text.replace("Gerne", "").strip()
return text.strip()
def reset_conversation():
global conversation_history
conversation_history = []
return "Neues Gespräch gestartet.", "", ""
# UI mit Terminal-Debug Information
with gr.Blocks(title="Depression Training Simulator", theme=gr.themes.Soft()) as demo:
gr.Markdown("# 🧠 Depression Training Simulator")
gr.Markdown("**Übe realistische Gespräche mit einem 16-jährigen Teenager mit Depressionen**")
gr.Markdown("🔍 *Debug-Informationen werden nur im Terminal angezeigt*")
with gr.Row():
with gr.Column(scale=1):
# Parameter
gr.Markdown("### ⚙️ Einstellungen")
max_tokens = gr.Slider(50, 200, value=100, step=10, label="Max. Antwortlänge")
temperature = gr.Slider(0.7, 1.3, value=1.0, step=0.1, label="Kreativität/Variabilität")
top_p = gr.Slider(0.8, 1.0, value=0.9, step=0.05, label="Fokus")
# Actions
gr.Markdown("### 🔄 Teste: Hallo, wie geht es dir?")
gr.Markdown("### 🔄 Aktionen")
reset_btn = gr.Button("Neues Gespräch", variant="secondary")
with gr.Column(scale=2):
# Chat Interface
gr.Markdown("### 💬 Gespräch")
user_input = gr.Textbox(
label="Deine Nachricht",
placeholder="Hallo, wie geht es dir heute?",
lines=2
)
send_btn = gr.Button("📨 Senden", variant="primary")
bot_response = gr.Textbox(
label="Antwort",
interactive=False,
lines=3
)
chat_history = gr.Textbox(
label="Gesprächsverlauf",
interactive=False,
lines=15,
max_lines=20
)
# Event Bindings
send_btn.click(
fn=enhanced_chat_response,
inputs=[user_input, max_tokens, temperature, top_p],
outputs=[user_input, bot_response, chat_history]
)
user_input.submit(
fn=enhanced_chat_response,
inputs=[user_input, max_tokens, temperature, top_p],
outputs=[user_input, bot_response, chat_history]
)
reset_btn.click(
fn=reset_conversation,
outputs=[bot_response, chat_history]
)
if __name__ == "__main__":
demo.launch(share=False, server_name="0.0.0.0", server_port=7860)