Spaces:
Runtime error
Runtime error
File size: 8,934 Bytes
af46e61 |
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 160 161 162 163 164 165 166 167 168 169 170 171 172 173 174 175 176 177 178 179 180 181 182 183 184 185 186 187 188 189 190 191 192 193 194 195 196 197 198 199 200 201 202 203 204 205 206 207 208 209 210 211 212 213 214 215 216 217 218 219 220 221 222 223 224 225 226 227 228 229 230 231 232 233 234 235 236 237 238 |
import gradio as gr
import os
from huggingface_hub import InferenceClient
# Load token and model - DeepSeek models for dialogue
HF_TOKEN = os.getenv("tomoniaccess")
# DeepSeek model options (optimized for dialogue):
model_name = "deepseek-ai/deepseek-llm-7b-chat" # Primary choice - optimized for chat
# model_name = "deepseek-ai/deepseek-coder-7b-instruct" # Alternative with good instruction following
# model_name = "deepseek-ai/deepseek-llm-67b-chat" # Larger model (if available)
client = InferenceClient(
model=model_name,
token=HF_TOKEN
)
def query_deepseek(messages, max_tokens=200, temperature=1.0, top_p=0.9):
"""Query DeepSeek model via Hugging Face InferenceClient"""
try:
# Try chat completion first
response = client.chat_completion(
messages=messages,
max_tokens=max_tokens,
temperature=temperature,
top_p=top_p,
stream=False
)
return response.choices[0].message.content
except Exception as chat_error:
print(f"Chat completion failed: {chat_error}")
try:
# Fallback to text generation if chat completion fails
# Convert messages to single prompt with DeepSeek format
prompt = ""
for msg in messages:
if msg["role"] == "system":
prompt += f"System: {msg['content']}\n\n"
elif msg["role"] == "user":
prompt += f"User: {msg['content']}\n"
elif msg["role"] == "assistant":
prompt += f"Assistant: {msg['content']}\n"
prompt += "Assistant: "
response = client.text_generation(
prompt=prompt,
max_new_tokens=max_tokens,
temperature=temperature,
top_p=top_p,
do_sample=True,
return_full_text=False
)
return response
except Exception as text_error:
print(f"Text generation also failed: {text_error}")
raise Exception(f"Both methods failed - Chat: {str(chat_error)}, Text: {str(text_error)}")
def enhanced_chat_response(user_input, max_tokens, temperature, top_p):
if not user_input.strip():
return "", "*Bitte gib eine Nachricht ein.*", ""
# Optimized system prompt for DeepSeek (supports German well)
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."
)
}
# Keep last 8 messages for context (DeepSeek handles context well)
messages = [system_prompt] + conversation_history[-8:]
current_message = {"role": "user", "content": user_input}
messages.append(current_message)
try:
response_text = query_deepseek(messages, max_tokens, temperature, top_p)
except Exception as e:
print("API Error:", e)
response_text = "*schweigt und starrt auf den Boden*"
conversation_history.append(current_message)
conversation_history.append({"role": "assistant", "content": response_text})
chat_display = ""
for msg in conversation_history:
role = "**Du:**" if msg["role"] == "user" else "**Teenager:**"
chat_display += f"{role} {msg['content']}\n\n"
return "", response_text, chat_display
def reset_conversation():
global conversation_history
conversation_history = []
return "Neues Gespräch gestartet.", ""
def test_api_connection():
"""Test API connection with multiple fallback methods"""
try:
# Test 1: Simple chat completion
test_messages = [
{"role": "system", "content": "Du bist ein hilfsbereit Assistent und antwortest auf Deutsch."},
{"role": "user", "content": "Hallo"}
]
response = query_deepseek(test_messages, max_tokens=20)
return f"✅ API Verbindung erfolgreich: {response[:50]}..."
except Exception as e:
# Test 2: Try direct text generation
try:
simple_response = client.text_generation(
prompt="Hallo, wie geht es dir?",
max_new_tokens=10,
do_sample=False,
return_full_text=False
)
return f"✅ API Verbindung (Text Generation): {simple_response[:50]}..."
except Exception as e2:
# Test 3: Check if model exists
try:
# Try to get model info
model_info = f"Model: {model_name}"
return f"❌ API Errors - Chat: {str(e)[:100]}... | Text: {str(e2)[:100]}... | {model_info}"
except Exception as e3:
return f"❌ Vollständiger API Fehler: {str(e)[:200]}..."
# Initialize conversation history
conversation_history = []
# UI
with gr.Blocks(title="DeepSeek Depression Training Simulator") as demo:
gr.Markdown("## 🧠 Depression Training Simulator (DeepSeek-7B-Chat)")
gr.Markdown("**Übe realistische Gespräche mit einem 16-jährigen Teenager mit Depressionen.**")
gr.Markdown("*Powered by DeepSeek-LLM-7B-Chat - Optimiert für natürliche Dialoge*")
with gr.Row():
with gr.Column(scale=1):
gr.Markdown("### ⚙️ Einstellungen")
max_tokens = gr.Slider(50, 300, value=150, step=10, label="Max. Antwortlänge")
temperature = gr.Slider(0.1, 1.5, value=0.9, step=0.1, label="Kreativität (Temperature)")
top_p = gr.Slider(0.1, 1.0, value=0.85, step=0.05, label="Top-p (Fokus)")
gr.Markdown("### 🔧 API Status")
api_status = gr.Textbox(label="Status", value="")
api_test_btn = gr.Button("API testen")
gr.Markdown("### 🔄 Aktionen")
reset_btn = gr.Button("Neues Gespräch")
gr.Markdown("### 📋 Setup & Troubleshooting")
gr.Markdown("""
**Benötigt:**
- `tomoniaccess` Umgebungsvariable mit HF Token
- `pip install huggingface_hub gradio`
**DeepSeek Info:**
- Optimiert für Dialoge und Konversationen
- 7B Parameter, sehr effizient
- Modell: `deepseek-ai/deepseek-llm-7b-chat`
- Starke multilinguale Fähigkeiten (DE/EN)
**Bei API Fehlern:**
1. Token prüfen (muss Pro/Enterprise sein)
2. Modell verfügbar? → [HF Model Card](https://huggingface.co/deepseek-ai/deepseek-llm-7b-chat)
3. Alternative: `deepseek-ai/deepseek-coder-7b-instruct`
4. Größere Version: `deepseek-ai/deepseek-llm-67b-chat`
**DeepSeek Vorteile:**
- Bessere Dialogqualität
- Konsistente Rollenausführung
- Natürlichere Antworten
""")
with gr.Column(scale=2):
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")
bot_response = gr.Textbox(
label="Antwort",
value="",
lines=3
)
chat_history = gr.Textbox(
label="Gesprächsverlauf",
value="",
lines=15
)
# 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]
)
api_test_btn.click(
fn=test_api_connection,
outputs=[api_status]
)
if __name__ == "__main__":
print("🚀 DeepSeek Depression Training Simulator")
print(f"📊 Model: {model_name}")
if not HF_TOKEN:
print("❌ FEHLER: tomoniaccess Umgebungsvariable ist nicht gesetzt!")
print(" Bitte setze deinen Hugging Face Token als 'tomoniaccess' Umgebungsvariable.")
else:
print("✅ Hugging Face API Token gefunden")
print("\n📦 Benötigte Pakete:")
print("pip install huggingface_hub gradio")
print("\n🤖 DeepSeek: Hochperformantes Modell für natürliche Dialoge")
print(" - Bessere Konsistenz in Rollenspielen")
print(" - Verbesserte multilinguale Fähigkeiten")
print(" - Optimiert für Konversations-KI")
demo.launch(share=False) |