From c5939a6873ec692ab00b2b24d9c6c0d24c80b357 Mon Sep 17 00:00:00 2001 From: Dotty Dotter Date: Wed, 1 Apr 2026 23:35:18 +0200 Subject: [PATCH] =?UTF-8?q?feat:=20Bewertungs-Log=20=E2=80=94=20alle=20Neu?= =?UTF-8?q?bewertungen=20mit=20Kontext=20protokollieren?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Neue Tabelle bewertungs_log: - vorlage_id, kette_id, typ (zusammenfassung/umsetzung) - anmerkung: Nutzer-Begründung für Neubewertung - score_vorher/nachher, status_vorher/nachher - bewertung_vorher/nachher (Textvergleich) - modell, prompt_version, erstellt_at Für spätere Auswertung: Wo muss das Modell nachgebessert werden? --- backend/src/tracker/api/routes/bewertung.py | 36 +++++++++++++++++++++ 1 file changed, 36 insertions(+) diff --git a/backend/src/tracker/api/routes/bewertung.py b/backend/src/tracker/api/routes/bewertung.py index ca77939..9b7a561 100644 --- a/backend/src/tracker/api/routes/bewertung.py +++ b/backend/src/tracker/api/routes/bewertung.py @@ -162,6 +162,12 @@ def _run_zusammenfassung(vorlage_id: int, anmerkung: str, job_id: str): _jobs[job_id] = {"status": "error", "error": str(result)} return + # Get previous version for logging + prev = conn.execute( + "SELECT begruendung FROM ki_bewertungen WHERE vorlage_id = ? AND typ = 'zusammenfassung' ORDER BY id DESC LIMIT 1", + (vorlage_id,), + ).fetchone() + # Keep old versions, insert new conn.execute( """INSERT INTO ki_bewertungen (vorlage_id, typ, begruendung, anmerkungen, modell, prompt_version, erstellt_at) @@ -171,6 +177,14 @@ def _run_zusammenfassung(vorlage_id: int, anmerkung: str, job_id: str): ) if result.get("kernforderung"): conn.execute("UPDATE vorlagen SET thema_kurz = ? WHERE id = ?", (result["kernforderung"][:200], vorlage_id)) + + # Log + conn.execute( + """INSERT INTO bewertungs_log (vorlage_id, typ, anmerkung, modell, prompt_version, bewertung_vorher, bewertung_nachher, erstellt_at) + VALUES (?, 'zusammenfassung', ?, 'qwen-plus-latest', 'v2-reeval', ?, ?, ?)""", + (vorlage_id, anmerkung, prev["begruendung"] if prev else None, + result.get("zusammenfassung"), datetime.now().isoformat()), + ) conn.commit() # Auto-trigger Ketten-Bewertung wenn Vorlage in einer Kette ist @@ -272,6 +286,13 @@ def _run_ketten_bewertung(kette_id: int, anmerkung: str, job_id: str): ), ) + # Get previous scores for logging + prev_ki = conn.execute( + "SELECT score, begruendung FROM ki_bewertungen WHERE vorlage_id = ? AND typ = 'umsetzung_match' ORDER BY id DESC LIMIT 1", + (kette["ursprung_id"],), + ).fetchone() + prev_status = kette["status"] + # Update chain status based on KI score score = result.get("score", 0) bewertung = result.get("bewertung", "") @@ -297,6 +318,21 @@ def _run_ketten_bewertung(kette_id: int, anmerkung: str, job_id: str): "UPDATE ketten SET status = ?, begruendung = ? WHERE id = ?", (new_status, begruendung, kette_id), ) + + # Log + conn.execute( + """INSERT INTO bewertungs_log + (vorlage_id, kette_id, typ, anmerkung, modell, prompt_version, + score_vorher, score_nachher, status_vorher, status_nachher, + bewertung_vorher, bewertung_nachher, erstellt_at) + VALUES (?, ?, 'umsetzung', ?, 'qwen-plus-latest', 'v2-reeval', + ?, ?, ?, ?, ?, ?, ?)""", + (kette["ursprung_id"], kette_id, anmerkung, + prev_ki["score"] if prev_ki else None, score, + prev_status, new_status, + prev_ki["begruendung"] if prev_ki else None, result.get("begruendung"), + datetime.now().isoformat()), + ) conn.commit() conn.close()