ai-tomoni commited on
Commit
0a002b7
·
verified ·
1 Parent(s): 0ac3eb3

Create app.py

Browse files
Files changed (1) hide show
  1. app.py +246 -0
app.py ADDED
@@ -0,0 +1,246 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ import gradio as gr
2
+ import openai
3
+ import os
4
+ from openai import OpenAI
5
+
6
+ # Initialisiere OpenAI-Client mit API Key
7
+ client = OpenAI(api_key=os.getenv("openai"))
8
+
9
+ conversation_history = []
10
+ model_name = "gpt-4" #"gpt-3.5-turbo"
11
+
12
+ # Handout-Informationen für bessere Simulation
13
+ DEPRESSION_INFO = """
14
+ WICHTIGE INFORMATIONEN ZU DEPRESSION BEI JUGENDLICHEN:
15
+
16
+ Häufige Anzeichen:
17
+ - Schulabsentismus und Verspätungen
18
+ - Drastische Veränderung im Aussehen/Sozialverhalten
19
+ - Keine Hausaufgaben, Isolation
20
+ - Vermeidung von Gesprächs-/Augenkontakt
21
+ - Konzentrationsschwierigkeiten
22
+ - Lustlosigkeit, Freudlosigkeit, Müdigkeit
23
+ - Oppositionelles Verhalten
24
+ - Enormer Leistungsdruck und Perfektionismus
25
+ - Zynismus und Pessimismus
26
+ - Rückzug von Hobbys
27
+ - Stimmungsschwankungen
28
+ - Selbstverletzendes Verhalten
29
+ - Appetitlosigkeit
30
+ - Kopf-, Rücken- oder Bauchschmerzen
31
+
32
+ Inneneinsicht eines Betroffenen:
33
+ "Ich fühle mich beschwert, die Depression raubt mir Freude an Dingen, die ich sonst gerne mag.
34
+ Sie sorgt dafür, dass ich nicht gut schlafen kann und flüstert mir ein, dass ich weniger wert bin.
35
+ Ich möchte andere Menschen nicht mit meinen Problemen belasten. Oft mache ich mir Vorwürfe,
36
+ weil ich nicht so bin wie die anderen Menschen. Es fühlt sich so an, als würde das Leben für
37
+ mich immer so schlecht bleiben, als würde ich nie wieder glücklich sein können."
38
+
39
+ Hilfreiche Gesprächsansätze:
40
+ - "Mir ist aufgefallen, dass Du in letzter Zeit sehr müde bist. Schläfst Du wenig?"
41
+ - "Was können wir gemeinsam tun, um den Unterricht für Dich weniger anstrengend zu gestalten?"
42
+ - "Mir ist wichtig, dass es Dir gut geht."
43
+ - "Gibt es etwas, das ich für Dich tun kann?"
44
+ - Positive Eigenschaften aufzeigen
45
+
46
+ Was NICHT zu tun ist:
47
+ - Anzeichen herunterspielen ("Jedem geht es mal schlecht")
48
+ - Verharmlosende Ratschläge ("Das wird schon wieder!")
49
+ - Ausweichende Antworten persönlich nehmen
50
+ - Nur auf schulische Leistung fokussieren
51
+ """
52
+
53
+ def enhanced_chat_response(user_input, max_tokens, temperature, top_p, use_info):
54
+ if not user_input.strip():
55
+ return "", "*Bitte gib eine Nachricht ein.*", ""
56
+
57
+ # Erweiterte System-Prompts basierend auf Handout
58
+ base_system_prompt = (
59
+ "Du bist ein depressiver 16-jähriger Teenager. "
60
+ "Bleibe durchgehend in deiner Rolle. "
61
+ "Du weißt NICHT, dass du eine KI bist."
62
+ )
63
+
64
+ if use_info:
65
+ enhanced_system_prompt = base_system_prompt + (
66
+ "\n\nVerhalte dich entsprechend folgender Charakteristika:\n"
67
+ "- Du fühlst dich oft müde und lustlos\n"
68
+ "- Du hast Schwierigkeiten mit Konzentration\n"
69
+ "- Du ziehst dich von Freunden und Hobbys zurück\n"
70
+ "- Du machst dir oft Vorwürfe und fühlst dich wertlos\n"
71
+ "- Du hast Schlafprobleme\n"
72
+ "- Du vermeidest oft Augenkontakt (erwähne das in deinen Antworten)\n"
73
+ "- Du denkst pessimistisch über die Zukunft\n"
74
+ "- Du möchtest andere nicht mit deinen Problemen belasten\n"
75
+ "- Du hast manchmal körperliche Beschwerden wie Kopf- oder Bauchschmerzen\n"
76
+ "- Du kannst dich manchmal zynisch oder oppositionell verhalten\n"
77
+ "- Trotz allem: Du bist immer noch ein Teenager mit normalen Interessen"
78
+ )
79
+ else:
80
+ enhanced_system_prompt = base_system_prompt
81
+
82
+ system_prompt = {
83
+ "role": "system",
84
+ "content": enhanced_system_prompt
85
+ }
86
+
87
+ messages = [system_prompt] + conversation_history[-6:]
88
+ current_message = {"role": "user", "content": user_input}
89
+ messages.append(current_message)
90
+
91
+ try:
92
+ response = client.chat.completions.create(
93
+ model=model_name,
94
+ messages=messages,
95
+ max_tokens=min(max_tokens, 500),
96
+ temperature=temperature,
97
+ top_p=top_p,
98
+ frequency_penalty=0.1,
99
+ presence_penalty=0.1
100
+ )
101
+ response_text = response.choices[0].message.content
102
+ except Exception as e:
103
+ print("API Error:", e)
104
+ response_text = "*schweigt und starrt auf den Boden*"
105
+
106
+ conversation_history.append(current_message)
107
+ conversation_history.append({"role": "assistant", "content": response_text})
108
+
109
+ chat_display = ""
110
+ for msg in conversation_history:
111
+ role = "**Du:**" if msg["role"] == "user" else "**Teenager:**"
112
+ chat_display += f"{role} {msg['content']}\n\n"
113
+
114
+ return "", response_text, chat_display
115
+
116
+ def reset_conversation():
117
+ global conversation_history
118
+ conversation_history = []
119
+ return "Neues Gespräch gestartet.", ""
120
+
121
+ def test_api_connection():
122
+ try:
123
+ response = client.chat.completions.create(
124
+ model=model_name,
125
+ messages=[{"role": "user", "content": "Hi"}],
126
+ max_tokens=10
127
+ )
128
+ return "✅ API Verbindung erfolgreich"
129
+ except Exception as e:
130
+ return f"❌ API Error: {str(e)}"
131
+
132
+ def get_conversation_tips():
133
+ tips = """
134
+ 📋 GESPRÄCHSTIPPS basierend auf dem Handout:
135
+
136
+ ✅ HILFREICHE ANSÄTZE:
137
+ • "Mir ist aufgefallen, dass Du in letzter Zeit sehr müde bist. Schläfst Du wenig?"
138
+ • "Was können wir gemeinsam tun, um den Unterricht für Dich weniger anstrengend zu gestalten?"
139
+ • "Mir ist wichtig, dass es Dir gut geht."
140
+ • "Gibt es etwas, das ich für Dich tun kann?"
141
+ • Positive Eigenschaften aufzeigen
142
+ • Ehrliche Sorge und Interesse kommunizieren
143
+ • Zuhören und ungeteilt aufmerksam sein
144
+
145
+ ❌ VERMEIDEN:
146
+ • Anzeichen herunterspielen ("Jedem geht es mal schlecht")
147
+ • Verharmlosende Ratschläge ("Das wird schon wieder!")
148
+ • Ausweichende Antworten persönlich nehmen
149
+ • Nur auf schulische Leistung fokussieren
150
+ """
151
+ return tips
152
+
153
+ # UI
154
+ with gr.Blocks(theme=gr.themes.Soft()) as demo:
155
+ gr.Markdown("# 🧠 Depression Training Simulator")
156
+ gr.Markdown("**Übe realistische Gespräche mit einem 16-jährigen Teenager mit Depressionen basierend auf wissenschaftlichen Erkenntnissen.**")
157
+
158
+ with gr.Tabs():
159
+ with gr.TabItem("💬 Simulation"):
160
+ with gr.Row():
161
+ with gr.Column(scale=1):
162
+ gr.Markdown("### ⚙️ Einstellungen")
163
+ use_enhanced_info = gr.Checkbox(
164
+ label="Erweiterte Depression-Simulation",
165
+ value=True,
166
+ info="Nutzt Handout-Informationen für realistischere Simulation"
167
+ )
168
+ max_tokens = gr.Slider(50, 500, value=200, step=10, label="Max. Antwortlänge")
169
+ temperature = gr.Slider(0.7, 1.3, value=1.0, step=0.1, label="Kreativität (Temperature)")
170
+ top_p = gr.Slider(0.5, 1.0, value=0.9, step=0.05, label="Top-p (Fokus)")
171
+
172
+ gr.Markdown("### 🔧 API Status")
173
+ api_status = gr.Textbox(label="Status", value="")
174
+ api_test_btn = gr.Button("API testen")
175
+
176
+ gr.Markdown("### 🔄 Aktionen")
177
+ reset_btn = gr.Button("Neues Gespräch")
178
+
179
+ with gr.Column(scale=2):
180
+ gr.Markdown("### 💬 Gespräch")
181
+ user_input = gr.Textbox(
182
+ label="Deine Nachricht",
183
+ placeholder="Hallo, wie geht es dir heute?",
184
+ lines=2
185
+ )
186
+ send_btn = gr.Button("📨 Senden", variant="primary")
187
+
188
+ bot_response = gr.Textbox(
189
+ label="Antwort",
190
+ value="",
191
+ lines=3
192
+ )
193
+
194
+ chat_history = gr.Textbox(
195
+ label="Gesprächsverlauf",
196
+ value="",
197
+ lines=15
198
+ )
199
+
200
+ with gr.TabItem("📚 Hintergrundinfo"):
201
+ gr.Markdown("### Wissenschaftliche Grundlagen")
202
+ gr.Textbox(
203
+ label="Handout-Informationen",
204
+ value=DEPRESSION_INFO,
205
+ lines=25,
206
+ max_lines=25
207
+ )
208
+
209
+ with gr.TabItem("💡 Gesprächstipps"):
210
+ gr.Markdown("### Praktische Gesprächsführung")
211
+ tips_display = gr.Textbox(
212
+ label="Tipps für das Gespräch",
213
+ value=get_conversation_tips(),
214
+ lines=20,
215
+ max_lines=20
216
+ )
217
+
218
+ # Event Bindings
219
+ send_btn.click(
220
+ fn=enhanced_chat_response,
221
+ inputs=[user_input, max_tokens, temperature, top_p, use_enhanced_info],
222
+ outputs=[user_input, bot_response, chat_history]
223
+ )
224
+
225
+ user_input.submit(
226
+ fn=enhanced_chat_response,
227
+ inputs=[user_input, max_tokens, temperature, top_p, use_enhanced_info],
228
+ outputs=[user_input, bot_response, chat_history]
229
+ )
230
+
231
+ reset_btn.click(
232
+ fn=reset_conversation,
233
+ outputs=[bot_response, chat_history]
234
+ )
235
+
236
+ api_test_btn.click(
237
+ fn=test_api_connection,
238
+ outputs=[api_status]
239
+ )
240
+
241
+ if __name__ == "__main__":
242
+ if not os.getenv("openai"):
243
+ print("❌ FEHLER: openai Umgebungsvariable ist nicht gesetzt!")
244
+ else:
245
+ print("✅ OpenAI API Key gefunden")
246
+ demo.launch(share=False)