mirror of
https://github.com/Jeuners/Logpy-AgentOne.git
synced 2026-09-09 15:02:33 +02:00
Jede Karte im Leitstand bekommt Daumen hoch/runter fuer die Kategorisierung. Bei 👎 optional Korrektur (richtige Kategorie/Dringlichkeit). Gespeichert als bewertung.json pro Anruf-Ordner (gleiches Muster wie stapel.json, pipe/bewertung.py). Export als JSONL (pipe/export.py, neuer "📤 Bewertungen exportieren"-Knopf + automatisch beim "Tag archivieren"): ein Datensatz pro bewertetem Anruf mit Transkript, Modell-Ausgabe, Backend/Modell, Bewertung und Korrektur - fuer externe Auswertung (z.B. um Kategorisierungs-Fehler systematisch statt zufaellig zu finden, wie das Notfall-Sicherheitsnetz vom letzten Fund). Export-Knopf verlangt Bestaetigung ("Transkripte und Namen verlassen den Rechner") - bewusst kein automatischer Export ohne Hinweis, das steht sonst im Widerspruch zum On-Prem-Versprechen. training/ ist neu gitignored (volle Transkripte/Namen drin, siehe README-Hinweis zu Testdaten). Nebenbei: process_call.py legt jetzt auch backend/modell/dauer_s der Kategorisierung dauerhaft in meta.json ab (vorher nur im fluechtigen Log) - noetig, damit der Export nachvollziehbar ist, welches Modell lief. Co-Authored-By: Claude Sonnet 5 <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_015vtvcyNkapuDh583643hNs
40 lines
1.3 KiB
Python
40 lines
1.3 KiB
Python
"""Bewertung eines Anrufs durch das Praxispersonal (👍/👎 im Leitstand).
|
|
|
|
Dient gleichzeitig als Trainingsdaten fuer die Modellverbesserung - siehe
|
|
pipe.export fuer den Export als JSONL. Gleiches Muster wie stapel.py: eine
|
|
kleine JSON-Datei pro Anruf-Ordner, unabhaengig von meta.json (das aendert
|
|
sich nach der Ablage nie mehr, die Bewertung schon).
|
|
"""
|
|
from __future__ import annotations
|
|
|
|
import json
|
|
from datetime import datetime
|
|
from pathlib import Path
|
|
|
|
DATEI = "bewertung.json"
|
|
|
|
|
|
def lies(ordner: Path) -> dict | None:
|
|
"""Bewertung eines Anrufs, oder None wenn (noch) unbewertet."""
|
|
pfad = ordner / DATEI
|
|
if not pfad.is_file():
|
|
return None
|
|
try:
|
|
return json.loads(pfad.read_text(encoding="utf-8"))
|
|
except Exception:
|
|
return None
|
|
|
|
|
|
def setze(ordner: Path, bewertung: str, korrektur: dict | None = None) -> bool:
|
|
"""Speichert eine Bewertung. False bei ungueltigem Wert."""
|
|
if bewertung not in {"gut", "schlecht"}:
|
|
return False
|
|
try:
|
|
(ordner / DATEI).write_text(json.dumps({
|
|
"bewertung": bewertung,
|
|
"korrektur": korrektur,
|
|
"zeitpunkt": datetime.now().isoformat(timespec="seconds"),
|
|
}, ensure_ascii=False), encoding="utf-8")
|
|
return True
|
|
except Exception:
|
|
return False
|