ai-tomoni commited on
Commit
12e9115
·
verified ·
1 Parent(s): d49a7da

Update app.py

Browse files
Files changed (1) hide show
  1. app.py +167 -146
app.py CHANGED
@@ -51,13 +51,8 @@ Was NICHT zu tun ist:
51
  """
52
 
53
  def enhanced_chat_response(user_input, max_tokens, temperature, top_p, use_info):
54
- global last_feedback
55
-
56
  if not user_input.strip():
57
- return "", "*Bitte gib eine Nachricht ein.*", "", "💬 Beginne das Gespräch, um professionelles Feedback zu erhalten."
58
-
59
- # Evaluation der Nutzer-Eingabe
60
- last_feedback = evaluate_user_response(user_input)
61
 
62
  # Erweiterte System-Prompts basierend auf Handout - angepasst für Schulkontext
63
  base_system_prompt = (
@@ -70,24 +65,29 @@ def enhanced_chat_response(user_input, max_tokens, temperature, top_p, use_info)
70
  )
71
 
72
  if use_info:
73
- enhanced_system_prompt = base_system_prompt + (
74
- "\n\nVerhalte dich entsprechend folgender Charakteristika:\n"
75
- "- Du kommst oft zu spät zur Schule oder fehlst ganz\n"
76
- "- Du machst selten Hausaufgaben, obwohl du früher zuverlässig warst\n"
77
- "- Du ziehst dich von Mitschüler*innen zurück\n"
78
- "- Du vermeidest Augenkontakt mit Erwachsenen\n"
79
- "- Du fühlst dich oft müde und lustlos\n"
80
- "- Du hast Konzentrationsschwierigkeiten im Unterricht\n"
81
- "- Du machst dir oft Vorwürfe und fühlst dich wertlos\n"
82
- "- Du hast Schlafprobleme\n"
83
- "- Du denkst pessimistisch über die Zukunft\n"
84
- "- Du möchtest andere nicht mit deinen Problemen belasten\n"
85
- "- Du hast manchmal körperliche Beschwerden wie Kopf- oder Bauchschmerzen\n"
86
- "- Du kannst dich manchmal zynisch oder oppositionell verhalten\n"
87
- "- Du reagierst sensibel auf Druck bezüglich Noten oder Leistung\n"
88
- "- Bei professioneller, einfühlsamer Ansprache öffnest du dich langsam\n"
89
- "- Bei unprofessioneller Ansprache ziehst du dich weiter zurück"
90
- )
 
 
 
 
 
91
  else:
92
  enhanced_system_prompt = base_system_prompt
93
 
@@ -123,13 +123,12 @@ def enhanced_chat_response(user_input, max_tokens, temperature, top_p, use_info)
123
  role = "**Du (Schulpersonal):**" if msg["role"] == "user" else "**Schüler*in:**"
124
  chat_display += f"{role} {msg['content']}\n\n"
125
 
126
- return "", response_text, chat_display, last_feedback
127
 
128
  def reset_conversation():
129
- global conversation_history, last_feedback
130
  conversation_history = []
131
- last_feedback = ""
132
- return "Neues Gespräch gestartet.", "", "💬 Beginne ein neues Gespräch, um professionelles Feedback zu erhalten."
133
 
134
  def test_api_connection():
135
  try:
@@ -142,15 +141,34 @@ def test_api_connection():
142
  except Exception as e:
143
  return f"❌ API Error: {str(e)}"
144
 
145
- def evaluate_user_response(user_message):
146
- """Evaluiert die Nutzer-Antwort basierend auf den Handout-Kriterien für Schulpersonal"""
147
- if not user_message.strip():
148
- return ""
 
 
 
 
 
 
149
 
 
 
 
 
 
 
 
 
 
 
 
 
 
150
  evaluation = {"positive": [], "improvement": [], "score": 0}
151
  user_lower = user_message.lower()
152
 
153
- # Positive Aspekte prüfen - erweitert für Schulkontext
154
  positive_patterns = {
155
  "Sorge/Interesse zeigen": ["wie geht", "sorge", "wichtig", "interessiert", "kümmert", "wie ist es dir"],
156
  "Offene Fragen stellen": ["was", "wie", "warum", "erzähl", "beschreib", "magst du mir", "kannst du"],
@@ -168,7 +186,7 @@ def evaluate_user_response(user_message):
168
  evaluation["positive"].append(category)
169
  evaluation["score"] += 1
170
 
171
- # Problematische Aspekte prüfen - erweitert für Schulkontext
172
  negative_patterns = {
173
  "Verharmlosen": ["wird schon", "alle haben mal", "ist normal", "nicht so schlimm", "übertreibst", "pubertät"],
174
  "Einfache Ratschläge": ["musst nur", "einfach mal", "denk positiv", "reiß dich zusammen", "mehr schlafen"],
@@ -184,68 +202,82 @@ def evaluate_user_response(user_message):
184
  evaluation["improvement"].append(category)
185
  evaluation["score"] -= 1
186
 
187
- return format_evaluation(evaluation)
188
 
189
- def format_evaluation(evaluation):
190
- """Formatiert die Evaluation für die Anzeige - speziell für Schulpersonal"""
191
- if not evaluation["positive"] and not evaluation["improvement"]:
192
- return "💬 Gib eine Nachricht ein, um Feedback zu erhalten."
 
193
 
194
- feedback = "## 📊 FEEDBACK FÜR SCHULPERSONAL\n\n"
 
 
 
195
 
196
- # Score anzeigen
197
- score = max(0, min(5, evaluation["score"] + 3)) # Normalisierung auf 0-5
198
- stars = "⭐" * score + "" * (5 - score)
199
- feedback += f"**Gesprächsqualität:** {stars} ({score}/5)\n\n"
200
 
201
- # Positive Aspekte
202
- if evaluation["positive"]:
203
- feedback += "### **Professionell umgesetzt:**\n"
204
- professional_feedback = {
205
- "Sorge/Interesse zeigen": "Pädagogische Beziehung gestärkt",
206
- "Offene Fragen stellen": "Förderung der Selbstreflexion",
207
- "Unterstützung anbieten": "Ressourcenorientierte Beratung",
208
- "Wahrnehmung ansprechen": "Professionelle Beobachtung kommuniziert",
209
- "Empathie zeigen": "Emotionale Validation gezeigt",
210
- "Wertschätzung ausdrücken": "Stärkenorientierte Kommunikation",
211
- "Professionellen Rahmen nutzen": "Schulische Hilfssysteme aktiviert",
212
- "Kontinuität zeigen": "Verlässliche Beziehung signalisiert",
213
- "Ressourcen anbieten": "Unterstützungsnetzwerk aktiviert"
214
- }
215
- for item in evaluation["positive"]:
216
- description = professional_feedback.get(item, item)
217
- feedback += f"• {item}: {description}\n"
218
  feedback += "\n"
219
 
220
- # Verbesserungsvorschläge
221
- if evaluation["improvement"]:
222
- feedback += "### ⚠️ **Professionell optimieren:**\n"
223
  improvement_tips = {
224
- "Verharmlosen": "Validierung statt Bagatellisierung - Gefühle ernst nehmen",
225
- "Einfache Ratschläge": "Ressourcenorientierte Beratung statt schnelle Lösungen",
226
  "Vergleichen": "Individuelle Situation im Fokus behalten",
227
  "Druck ausüben": "Empowerment statt Erwartungsdruck",
228
- "Fokus nur auf Leistung": "Ganzheitliche Sicht auf den Menschen, nicht nur Schüler*in",
229
- "Unprofessionell": "Professionelle Distanz und pädagogische Haltung bewahren",
230
- "Persönlich nehmen": "Abweisung nicht personal interpretieren - Teil der Symptomatik"
231
  }
232
- for item in evaluation["improvement"]:
233
- feedback += f"• {improvement_tips.get(item, item)}\n"
 
 
234
  feedback += "\n"
235
 
236
- # Spezifische Empfehlungen für Schulpersonal
237
- if evaluation["score"] < 2:
238
- feedback += "### 💡 **Handout-basierte Alternativen:**\n"
239
- feedback += "• **Wahrnehmung:** 'Mir ist aufgefallen, dass du in letzter Zeit sehr müde bist...'\n"
240
- feedback += "• **Unterstützung:** 'Was können wir gemeinsam tun, um den Schulalltag zu erleichtern?'\n"
241
- feedback += "• **Ressourcen:** 'Sollen wir zusammen einen Termin bei der Schulpsychologie ausmachen?'\n"
242
- feedback += "• **Validation:** 'Mir ist wichtig, dass es dir gut geht'\n"
243
- feedback += "• **Kontinuität:** 'Ich bin jederzeit für ein Gespräch da'\n"
 
 
 
 
 
 
244
 
245
  return feedback
246
 
247
- # Globale Variable für letztes Feedback
248
- last_feedback = ""
 
 
 
 
249
 
250
  # UI
251
  with gr.Blocks(theme=gr.themes.Soft()) as demo:
@@ -262,95 +294,84 @@ with gr.Blocks(theme=gr.themes.Soft()) as demo:
262
  - **Pädagogische Beziehungsarbeit** bei psychischen Belastungen stärken
263
  """)
264
 
265
- with gr.Tabs():
266
- with gr.TabItem("💬 Simulation"):
267
- with gr.Row():
268
- with gr.Column(scale=1):
269
- gr.Markdown("### ⚙️ Einstellungen")
270
- use_enhanced_info = gr.Checkbox(
271
- label="Erweiterte Depression-Simulation",
272
- value=True,
273
- info="Nutzt Handout-Informationen für realistischere Simulation"
274
- )
275
- max_tokens = gr.Slider(50, 500, value=200, step=10, label="Max. Antwortlänge")
276
- temperature = gr.Slider(0.7, 1.3, value=1.0, step=0.1, label="Kreativität (Temperature)")
277
- top_p = gr.Slider(0.5, 1.0, value=0.9, step=0.05, label="Top-p (Fokus)")
278
-
279
- gr.Markdown("### 🔧 API Status")
280
- api_status = gr.Textbox(label="Status", value="")
281
- api_test_btn = gr.Button("API testen")
282
-
283
- gr.Markdown("### 🔄 Aktionen")
284
- reset_btn = gr.Button("Neues Gespräch")
285
-
286
- with gr.Column(scale=2):
287
- gr.Markdown("### 💬 Gespräch")
288
- user_input = gr.Textbox(
289
- label="Deine Nachricht an den Schüler/die Schülerin",
290
- placeholder="Mir ist aufgefallen, dass du in letzter Zeit oft müde wirkst...",
291
- lines=3,
292
- info="Du kennst diese*n Schüler*in bereits aus dem Schulalltag"
293
- )
294
- send_btn = gr.Button("📨 Senden", variant="primary")
295
-
296
- bot_response = gr.Textbox(
297
- label="Reaktion des Schülers/der Schülerin",
298
- value="",
299
- lines=4
300
- )
301
-
302
- chat_history = gr.Textbox(
303
- label="Gesprächsverlauf",
304
- value="",
305
- lines=10
306
- )
307
-
308
- # Neues Evaluation-Panel
309
- evaluation_display = gr.Markdown(
310
- label="Professionelles Feedback",
311
- value="💬 Beginne das Gespräch, um eine Bewertung deiner Gesprächsführung zu erhalten."
312
- )
313
-
314
- with gr.TabItem("📚 Hintergrundinfo"):
315
- gr.Markdown("### Wissenschaftliche Grundlagen für Schulpersonal")
316
- gr.Markdown("**Basierend auf aktueller Fachliteratur und Handouts für den Schulkontext**")
317
- gr.Textbox(
318
- label="Handout-Informationen zu Depression bei Jugendlichen",
319
- value=DEPRESSION_INFO,
320
- lines=25,
321
- max_lines=25
322
  )
323
 
324
- with gr.TabItem("💡 Live-Feedback"):
325
- gr.Markdown("### Professionelle Gesprächsanalyse")
326
- gr.Markdown("Bewertung deiner Gesprächsführung basierend auf den Handout-Empfehlungen:")
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
327
 
328
- live_feedback = gr.Markdown(
329
- value=last_feedback if 'last_feedback' in globals() else "💬 Beginne ein Gespräch, um professionelles Feedback zu erhalten."
 
 
 
330
  )
331
 
332
  # Event Bindings
333
  send_btn.click(
334
  fn=enhanced_chat_response,
335
  inputs=[user_input, max_tokens, temperature, top_p, use_enhanced_info],
336
- outputs=[user_input, bot_response, chat_history, evaluation_display]
337
  )
338
 
339
  user_input.submit(
340
  fn=enhanced_chat_response,
341
  inputs=[user_input, max_tokens, temperature, top_p, use_enhanced_info],
342
- outputs=[user_input, bot_response, chat_history, evaluation_display]
343
  )
344
 
345
  reset_btn.click(
346
  fn=reset_conversation,
347
- outputs=[bot_response, chat_history, evaluation_display]
348
  )
349
 
350
  api_test_btn.click(
351
  fn=test_api_connection,
352
  outputs=[api_status]
353
  )
 
 
 
 
 
 
354
 
355
  if __name__ == "__main__":
356
  if not os.getenv("openai"):
 
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 - angepasst für Schulkontext
58
  base_system_prompt = (
 
65
  )
66
 
67
  if use_info:
68
+ # Füge Hintergrundinfos direkt in den Prompt ein
69
+ enhanced_system_prompt = base_system_prompt + f"""
70
+
71
+ VERHALTE DICH ENTSPRECHEND FOLGENDER DEPRESSION-CHARAKTERISTIKA:
72
+ - Du kommst oft zu spät zur Schule oder fehlst ganz
73
+ - Du machst selten Hausaufgaben, obwohl du früher zuverlässig warst
74
+ - Du ziehst dich von Mitschüler*innen zurück
75
+ - Du vermeidest Augenkontakt mit Erwachsenen
76
+ - Du fühlst dich oft müde und lustlos
77
+ - Du hast Konzentrationsschwierigkeiten im Unterricht
78
+ - Du machst dir oft Vorwürfe und fühlst dich wertlos
79
+ - Du hast Schlafprobleme
80
+ - Du denkst pessimistisch über die Zukunft
81
+ - Du möchtest andere nicht mit deinen Problemen belasten
82
+ - Du hast manchmal körperliche Beschwerden wie Kopf- oder Bauchschmerzen
83
+ - Du kannst dich manchmal zynisch oder oppositionell verhalten
84
+ - Du reagierst sensibel auf Druck bezüglich Noten oder Leistung
85
+ - Bei professioneller, einfühlsamer Ansprache öffnest du dich langsam
86
+ - Bei unprofessioneller Ansprache ziehst du dich weiter zurück
87
+
88
+ ZUSÄTZLICHE DEPRESSION-INFORMATIONEN FÜR REALISTISCHE SIMULATION:
89
+ {DEPRESSION_INFO}
90
+ """
91
  else:
92
  enhanced_system_prompt = base_system_prompt
93
 
 
123
  role = "**Du (Schulpersonal):**" if msg["role"] == "user" else "**Schüler*in:**"
124
  chat_display += f"{role} {msg['content']}\n\n"
125
 
126
+ return "", response_text, chat_display
127
 
128
  def reset_conversation():
129
+ global conversation_history
130
  conversation_history = []
131
+ return "Neues Gespräch gestartet.", ""
 
132
 
133
  def test_api_connection():
134
  try:
 
141
  except Exception as e:
142
  return f"❌ API Error: {str(e)}"
143
 
144
+ def evaluate_conversation():
145
+ """Evaluiert das gesamte Gespräch und gibt eine Gesamtauswertung zurück"""
146
+ if not conversation_history:
147
+ return "🤔 **Noch kein Gespräch geführt**\n\nBitte führe erst ein Gespräch, bevor du eine Auswertung anforderst."
148
+
149
+ # Nur User-Nachrichten analysieren
150
+ user_messages = [msg["content"] for msg in conversation_history if msg["role"] == "user"]
151
+
152
+ if not user_messages:
153
+ return "🤔 **Keine Nachrichten zu bewerten**\n\nEs wurden noch keine Nachrichten von dir gesendet."
154
 
155
+ # Sammle alle Bewertungen
156
+ total_evaluations = {"positive": [], "improvement": [], "scores": []}
157
+
158
+ for message in user_messages:
159
+ evaluation = analyze_single_message(message)
160
+ total_evaluations["positive"].extend(evaluation["positive"])
161
+ total_evaluations["improvement"].extend(evaluation["improvement"])
162
+ total_evaluations["scores"].append(evaluation["score"])
163
+
164
+ return format_final_evaluation(total_evaluations, len(user_messages))
165
+
166
+ def analyze_single_message(user_message):
167
+ """Analysiert eine einzelne Nachricht"""
168
  evaluation = {"positive": [], "improvement": [], "score": 0}
169
  user_lower = user_message.lower()
170
 
171
+ # Positive Aspekte prüfen
172
  positive_patterns = {
173
  "Sorge/Interesse zeigen": ["wie geht", "sorge", "wichtig", "interessiert", "kümmert", "wie ist es dir"],
174
  "Offene Fragen stellen": ["was", "wie", "warum", "erzähl", "beschreib", "magst du mir", "kannst du"],
 
186
  evaluation["positive"].append(category)
187
  evaluation["score"] += 1
188
 
189
+ # Problematische Aspekte prüfen
190
  negative_patterns = {
191
  "Verharmlosen": ["wird schon", "alle haben mal", "ist normal", "nicht so schlimm", "übertreibst", "pubertät"],
192
  "Einfache Ratschläge": ["musst nur", "einfach mal", "denk positiv", "reiß dich zusammen", "mehr schlafen"],
 
202
  evaluation["improvement"].append(category)
203
  evaluation["score"] -= 1
204
 
205
+ return evaluation
206
 
207
+ def format_final_evaluation(total_evaluations, message_count):
208
+ """Formatiert die finale Gesamtauswertung"""
209
+ # Durchschnittsscore berechnen
210
+ avg_score = sum(total_evaluations["scores"]) / len(total_evaluations["scores"]) if total_evaluations["scores"] else 0
211
+ final_score = max(0, min(5, avg_score + 3)) # Normalisierung auf 0-5
212
 
213
+ # Häufigkeiten zählen
214
+ from collections import Counter
215
+ positive_counts = Counter(total_evaluations["positive"])
216
+ improvement_counts = Counter(total_evaluations["improvement"])
217
 
218
+ feedback = f"# 📋 GESPRÄCHSAUSWERTUNG - ABSCHLUSSBERICHT\n\n"
219
+ feedback += f"**Anzahl analysierter Nachrichten:** {message_count}\n"
220
+ feedback += f"**Gesamtbewertung:** {'' * int(final_score)}{'' * (5 - int(final_score))} ({final_score:.1f}/5)\n\n"
 
221
 
222
+ # Gesamteinschätzung
223
+ if final_score >= 4:
224
+ feedback += "## 🏆 **AUSGEZEICHNET**\nProfessionelle Gesprächsführung auf hohem Niveau!\n\n"
225
+ elif final_score >= 3:
226
+ feedback += "## **GUT**\nSolide professionelle Gesprächsführung mit Potenzial zur Optimierung.\n\n"
227
+ elif final_score >= 2:
228
+ feedback += "## ⚠️ **VERBESSERUNGSBEDARF**\nGrundlagen vorhanden, aber wichtige Aspekte sollten beachtet werden.\n\n"
229
+ else:
230
+ feedback += "## 🚨 **TRAINING ERFORDERLICH**\nBitte Handout-Empfehlungen nochmals studieren und üben.\n\n"
231
+
232
+ # Stärken
233
+ if positive_counts:
234
+ feedback += "### 💪 **DEINE STÄRKEN:**\n"
235
+ for skill, count in positive_counts.most_common():
236
+ percentage = (count / message_count) * 100
237
+ feedback += f"• **{skill}:** {count}x verwendet ({percentage:.1f}%)\n"
 
238
  feedback += "\n"
239
 
240
+ # Verbesserungsbereiche
241
+ if improvement_counts:
242
+ feedback += "### 🎯 **VERBESSERUNGSBEREICHE:**\n"
243
  improvement_tips = {
244
+ "Verharmlosen": "Gefühle validieren statt bagatellisieren",
245
+ "Einfache Ratschläge": "Ressourcenorientiert beraten statt schnelle Lösungen",
246
  "Vergleichen": "Individuelle Situation im Fokus behalten",
247
  "Druck ausüben": "Empowerment statt Erwartungsdruck",
248
+ "Fokus nur auf Leistung": "Ganzheitliche Sicht auf den Menschen",
249
+ "Unprofessionell": "Professionelle Distanz wahren",
250
+ "Persönlich nehmen": "Abweisung als Symptom verstehen"
251
  }
252
+ for issue, count in improvement_counts.most_common():
253
+ percentage = (count / message_count) * 100
254
+ tip = improvement_tips.get(issue, issue)
255
+ feedback += f"• **{issue}:** {count}x aufgetreten ({percentage:.1f}%) → {tip}\n"
256
  feedback += "\n"
257
 
258
+ # Handlungsempfehlungen
259
+ feedback += "### 🎓 **LERNEMPFEHLUNGEN:**\n"
260
+ if final_score < 3:
261
+ feedback += "• Handout-Gesprächsansätze nochmals durcharbeiten\n"
262
+ feedback += "• Weitere Simulationen mit Fokus auf empathische Kommunikation\n"
263
+ feedback += "• Schulische Unterstützungssysteme besser kennenlernen\n"
264
+ elif final_score < 4:
265
+ feedback += "• Kontinuität in der Gesprächsführung weiter ausbauen\n"
266
+ feedback += "• Ressourcenorientierte Beratung vertiefen\n"
267
+ feedback += "• Professionelle Reflexion der eigenen Haltung\n"
268
+ else:
269
+ feedback += "• Weiterführende Fortbildungen zu Gesprächsführung\n"
270
+ feedback += "• Supervision und kollegialer Austausch\n"
271
+ feedback += "• Mentoring für Kolleg*innen anbieten\n"
272
 
273
  return feedback
274
 
275
+ def format_evaluation(evaluation):
276
+ """Formatiert die Evaluation für die Anzeige - wird nicht mehr verwendet"""
277
+ pass
278
+
279
+ # Globale Variable für Gesprächshistorie
280
+ conversation_history = []
281
 
282
  # UI
283
  with gr.Blocks(theme=gr.themes.Soft()) as demo:
 
294
  - **Pädagogische Beziehungsarbeit** bei psychischen Belastungen stärken
295
  """)
296
 
297
+ with gr.Row():
298
+ with gr.Column(scale=1):
299
+ gr.Markdown("### ⚙️ Einstellungen")
300
+ use_enhanced_info = gr.Checkbox(
301
+ label="Erweiterte Depression-Simulation",
302
+ value=True,
303
+ info="Nutzt Handout-Informationen für realistischere Simulation"
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
304
  )
305
 
306
+ max_tokens = gr.Slider(50, 500, value=200, step=10, label="Max. Antwortlänge")
307
+ temperature = gr.Slider(0.7, 1.3, value=1.0, step=0.1, label="Kreativität (Temperature)")
308
+ top_p = gr.Slider(0.5, 1.0, value=0.9, step=0.05, label="Top-p (Fokus)")
309
+
310
+ gr.Markdown("### 🔧 API Status")
311
+ api_status = gr.Textbox(label="Status", value="")
312
+ api_test_btn = gr.Button("API testen")
313
+
314
+ gr.Markdown("### 🔄 Aktionen")
315
+ reset_btn = gr.Button("Neues Gespräch")
316
+ evaluate_btn = gr.Button("📊 Gespräch auswerten", variant="secondary")
317
+
318
+ with gr.Column(scale=2):
319
+ gr.Markdown("### 💬 Gespräch")
320
+ user_input = gr.Textbox(
321
+ label="Deine Nachricht an den Schüler/die Schülerin",
322
+ placeholder="Mir ist aufgefallen, dass du in letzter Zeit oft müde wirkst...",
323
+ lines=3,
324
+ info="Du kennst diese*n Schüler*in bereits aus dem Schulalltag"
325
+ )
326
+ send_btn = gr.Button("📨 Senden", variant="primary")
327
+
328
+ bot_response = gr.Textbox(
329
+ label="Reaktion des Schülers/der Schülerin",
330
+ value="",
331
+ lines=4
332
+ )
333
+
334
+ chat_history = gr.Textbox(
335
+ label="Gesprächsverlauf",
336
+ value="",
337
+ lines=10
338
+ )
339
 
340
+ # Auswertungs-Panel
341
+ evaluation_display = gr.Markdown(
342
+ label="📊 Gesprächsauswertung",
343
+ value="",
344
+ visible=True
345
  )
346
 
347
  # Event Bindings
348
  send_btn.click(
349
  fn=enhanced_chat_response,
350
  inputs=[user_input, max_tokens, temperature, top_p, use_enhanced_info],
351
+ outputs=[user_input, bot_response, chat_history]
352
  )
353
 
354
  user_input.submit(
355
  fn=enhanced_chat_response,
356
  inputs=[user_input, max_tokens, temperature, top_p, use_enhanced_info],
357
+ outputs=[user_input, bot_response, chat_history]
358
  )
359
 
360
  reset_btn.click(
361
  fn=reset_conversation,
362
+ outputs=[bot_response, chat_history]
363
  )
364
 
365
  api_test_btn.click(
366
  fn=test_api_connection,
367
  outputs=[api_status]
368
  )
369
+
370
+ # Auswertung des Gesprächs
371
+ evaluate_btn.click(
372
+ fn=evaluate_conversation,
373
+ outputs=[evaluation_display]
374
+ )
375
 
376
  if __name__ == "__main__":
377
  if not os.getenv("openai"):