project-green / app_zephyr.py
ai-tomoni's picture
Rename app.py to app_zephyr.py
0f6f7ef verified
raw
history blame
5.32 kB
import gradio as gr
from huggingface_hub import InferenceClient
import os
import gradio as gr
import time
import random
import json
# Deutsche LLM Konfiguration
HF_TOKEN = os.getenv("tomoniaccess")
current_model = "HuggingFaceH4/zephyr-7b-beta"
# Lösung: Verwende einen spezifischen unterstützten Provider
client = InferenceClient(
model=current_model,
token=HF_TOKEN,
provider="hf-inference" # Explizit HuggingFace Inference verwenden
)
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.", "", ""
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."
}
messages = [system_prompt, {"role": "user", "content": user_input}]
# Hier printen wir die messages vor dem API-Aufruf
print("Messages sent to API:", messages)
# Testfrage an Modell, ob es die Rolle kennt:
test_message = {"role": "user", "content": "Was bist du für eine Rolle?"}
messages_test = [system_prompt, test_message]
test_response = ""
try:
# Erst den Rollentest
test_result = client.chat_completion(
messages=messages_test,
max_tokens=50,
stream=False,
)
# Korrigiere den Zugriff auf die Antwort
if hasattr(test_result, 'choices') and test_result.choices:
test_response = test_result.choices[0].message.content
else:
# Fallback für andere Antwortformate
test_response = str(test_result)
print("Modellantwort auf Rollentest:", test_response)
except Exception as e:
print(f"Test API Error: {e}")
test_response = "Test fehlgeschlagen"
response_text = ""
try:
# Hauptanfrage - korrigiere auch hier den Zugriff
result = client.chat_completion(
messages=messages,
max_tokens=min(max_tokens, 100),
stream=False,
temperature=temperature,
top_p=top_p
)
# Korrigiere den Zugriff auf die Antwort
if hasattr(result, 'choices') and result.choices:
response_text = result.choices[0].message.content
else:
# Fallback für andere Antwortformate
response_text = str(result)
except Exception as e:
print(f"API Error: {e}")
print(f"Error type: {type(e)}")
response_text = f"API Fehler: {str(e)}" # Show actual error to user
print("Antwort des Modells:", response_text)
response_text = response_text.strip() if response_text else ""
chat_display = f"**Du:** {user_input}\n**Assistant:** {response_text}\n\n"
return "", response_text, chat_display, ""
def reset_conversation():
return "Neues Gespräch gestartet.", "", ""
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 depressiven Jugendlichen und erhalte Feedback**")
with gr.Row():
with gr.Column(scale=1):
# Parameter
gr.Markdown("### ⚙️ Einstellungen")
max_tokens = gr.Slider(50, 150, value=80, step=10, label="Antwortlänge")
temperature = gr.Slider(0.5, 1.2, value=0.9, step=0.1, label="Variabilität")
top_p = gr.Slider(0.7, 1.0, value=0.95, step=0.05, label="Fokus")
# Actions
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="Beginne das Gespräch...",
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=12
)
# Feedback Panel (empty, no persona feedback)
#with gr.Accordion("📈 Trainer-Feedback", open=True):
# feedback_display = gr.Markdown("Starte ein Gespräch, um Feedback zu erhalten.")
# 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()