Spaces:
Runtime error
Runtime error
Update app.py
Browse files
app.py
CHANGED
|
@@ -1,56 +1,4 @@
|
|
| 1 |
-
|
| 2 |
-
"""Formatiert die finale Gesamtauswertung in professionellem Format"""
|
| 3 |
-
# Durchschnittsscore berechnen
|
| 4 |
-
avg_score = sum(total_evaluations["scores"]) / len(total_evaluations["scores"]) if total_evaluations["scores"] else 0
|
| 5 |
-
final_score = max(0, min(5, avg_score + 3)) # Normalisierung auf 0-5
|
| 6 |
-
|
| 7 |
-
# Häufigkeiten zählen
|
| 8 |
-
from collections import Counter
|
| 9 |
-
positive_counts = Counter(total_evaluations["positive"])
|
| 10 |
-
improvement_counts = Counter(total_evaluations["improvement"])
|
| 11 |
-
|
| 12 |
-
# Professionelle Formatierung
|
| 13 |
-
feedback = f"""# PROFESSIONELLE GESPRÄCHSFÜHRUNGSANALYSE
|
| 14 |
-
|
| 15 |
-
## EXECUTIVE SUMMARY
|
| 16 |
-
|
| 17 |
-
**Analysierte Gesprächseinheiten:** {message_count}
|
| 18 |
-
**Gesamtbewertung:** {final_score:.1f}/5.0 Punkten
|
| 19 |
-
**Bewertungsverfahren:** KI-gestützte Analyse nach evidenzbasierten Kriterien
|
| 20 |
-
**Analysedatum:** {__import__('datetime').datetime.now().strftime('%d.%m.%Y %H:%M')}
|
| 21 |
-
|
| 22 |
-
---
|
| 23 |
-
|
| 24 |
-
## GESAMTBEURTEILUNG
|
| 25 |
-
|
| 26 |
-
"""
|
| 27 |
-
|
| 28 |
-
# Professionelle Gesamteinschätzung
|
| 29 |
-
if final_score >= 4.5:
|
| 30 |
-
feedback += """**KOMPETENZLEVEL: EXPERTE (4.5-5.0)**
|
| 31 |
-
|
| 32 |
-
Die Analyse zeigt eine hochprofessionelle Gesprächsführung, die evidenzbasierte Prinzipien der therapeutischen Kommunikation konsequent umsetzt. Die Interaktion entspricht aktuellen Standards der Krisenintervention im Bildungskontext."""
|
| 33 |
-
elif final_score >= 3.5:
|
| 34 |
-
feedback += """**KOMPETENZLEVEL: FORTGESCHRITTEN (3.5-4.4)**
|
| 35 |
-
|
| 36 |
-
Solide professionelle Gesprächsführung mit deutlichen Stärken in der empathischen Kommunikation. Die Grundprinzipien werden überwiegend korrekt angewendet, einzelne Optimierungsbereiche wurden identifiziert."""
|
| 37 |
-
elif final_score >= 2.5:
|
| 38 |
-
feedback += """**KOMPETENZLEVEL: GRUNDLAGEN VORHANDEN (2.5-3.4)**
|
| 39 |
-
|
| 40 |
-
Wesentliche Grundlagen der professionellen Gesprächsführung sind erkennbar. Zur Erreichung des Fachstandards sind jedoch signifikante Verbesserungen in mehreren Kompetenzbereichen erforderlich."""
|
| 41 |
-
else:
|
| 42 |
-
feedback += """**KOMPETENZLEVEL: ENTWICKLUNGSBEDARF (0-2.4)**
|
| 43 |
-
|
| 44 |
-
Die Analyse zeigt erheblichen Entwicklungsbedarf in den Grundlagen der professionellen Gesprächsführung. Eine systematische Fortbildung gemäß aktueller Fachstandards wird dringend empfohlen."""
|
| 45 |
-
|
| 46 |
-
feedback += "\n\n---\n\n"
|
| 47 |
-
|
| 48 |
-
# Kompetenzprofil
|
| 49 |
-
if positive_counts:
|
| 50 |
-
feedback += "## KOMPETENZPROFIL - STÄRKEN\n\n"
|
| 51 |
-
|
| 52 |
-
professional_descriptions = {
|
| 53 |
-
"Sorimport gradio as gr
|
| 54 |
import openai
|
| 55 |
import os
|
| 56 |
from openai import OpenAI
|
|
@@ -193,29 +141,6 @@ def test_api_connection():
|
|
| 193 |
except Exception as e:
|
| 194 |
return f"❌ API Error: {str(e)}"
|
| 195 |
|
| 196 |
-
def evaluate_conversation():
|
| 197 |
-
"""Evaluiert das gesamte Gespräch mit LLM-basierter Analyse"""
|
| 198 |
-
if not conversation_history:
|
| 199 |
-
return "🤔 **Noch kein Gespräch geführt**\n\nBitte führe erst ein Gespräch, bevor du eine Auswertung anforderst."
|
| 200 |
-
|
| 201 |
-
# Nur User-Nachrichten analysieren
|
| 202 |
-
user_messages = [msg["content"] for msg in conversation_history if msg["role"] == "user"]
|
| 203 |
-
|
| 204 |
-
if not user_messages:
|
| 205 |
-
return "🤔 **Keine Nachrichten zu bewerten**\n\nEs wurden noch keine Nachrichten von dir gesendet."
|
| 206 |
-
|
| 207 |
-
# Sammle alle LLM-Bewertungen
|
| 208 |
-
total_evaluations = {"positive": [], "improvement": [], "scores": [], "explanations": []}
|
| 209 |
-
|
| 210 |
-
for message in user_messages:
|
| 211 |
-
evaluation = analyze_single_message(message)
|
| 212 |
-
total_evaluations["positive"].extend(evaluation["positive"])
|
| 213 |
-
total_evaluations["improvement"].extend(evaluation["improvement"])
|
| 214 |
-
total_evaluations["scores"].append(evaluation["score"])
|
| 215 |
-
total_evaluations["explanations"].append(evaluation.get("explanation", ""))
|
| 216 |
-
|
| 217 |
-
return format_final_evaluation(total_evaluations, len(user_messages))
|
| 218 |
-
|
| 219 |
def analyze_single_message(user_message):
|
| 220 |
"""Analysiert eine einzelne Nachricht mit LLM-basierter Evaluation"""
|
| 221 |
if not user_message.strip():
|
|
@@ -322,6 +247,29 @@ def fallback_evaluation(user_message):
|
|
| 322 |
"explanation": "Automatische Fallback-Bewertung (LLM nicht verfügbar)"
|
| 323 |
}
|
| 324 |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 325 |
def format_final_evaluation(total_evaluations, message_count):
|
| 326 |
"""Formatiert die finale Gesamtauswertung in professionellem Format ohne Scores"""
|
| 327 |
# Häufigkeiten zählen
|
|
|
|
| 1 |
+
import gradio as gr
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 2 |
import openai
|
| 3 |
import os
|
| 4 |
from openai import OpenAI
|
|
|
|
| 141 |
except Exception as e:
|
| 142 |
return f"❌ API Error: {str(e)}"
|
| 143 |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 144 |
def analyze_single_message(user_message):
|
| 145 |
"""Analysiert eine einzelne Nachricht mit LLM-basierter Evaluation"""
|
| 146 |
if not user_message.strip():
|
|
|
|
| 247 |
"explanation": "Automatische Fallback-Bewertung (LLM nicht verfügbar)"
|
| 248 |
}
|
| 249 |
|
| 250 |
+
def evaluate_conversation():
|
| 251 |
+
"""Evaluiert das gesamte Gespräch mit LLM-basierter Analyse"""
|
| 252 |
+
if not conversation_history:
|
| 253 |
+
return "🤔 **Noch kein Gespräch geführt**\n\nBitte führe erst ein Gespräch, bevor du eine Auswertung anforderst."
|
| 254 |
+
|
| 255 |
+
# Nur User-Nachrichten analysieren
|
| 256 |
+
user_messages = [msg["content"] for msg in conversation_history if msg["role"] == "user"]
|
| 257 |
+
|
| 258 |
+
if not user_messages:
|
| 259 |
+
return "🤔 **Keine Nachrichten zu bewerten**\n\nEs wurden noch keine Nachrichten von dir gesendet."
|
| 260 |
+
|
| 261 |
+
# Sammle alle LLM-Bewertungen
|
| 262 |
+
total_evaluations = {"positive": [], "improvement": [], "scores": [], "explanations": []}
|
| 263 |
+
|
| 264 |
+
for message in user_messages:
|
| 265 |
+
evaluation = analyze_single_message(message)
|
| 266 |
+
total_evaluations["positive"].extend(evaluation["positive"])
|
| 267 |
+
total_evaluations["improvement"].extend(evaluation["improvement"])
|
| 268 |
+
total_evaluations["scores"].append(evaluation["score"])
|
| 269 |
+
total_evaluations["explanations"].append(evaluation.get("explanation", ""))
|
| 270 |
+
|
| 271 |
+
return format_final_evaluation(total_evaluations, len(user_messages))
|
| 272 |
+
|
| 273 |
def format_final_evaluation(total_evaluations, message_count):
|
| 274 |
"""Formatiert die finale Gesamtauswertung in professionellem Format ohne Scores"""
|
| 275 |
# Häufigkeiten zählen
|