feat: OpenRouter-Backend + Modell-Dropdown im Leitstand, Live-Log fuer Dauer/Tokens/Kosten

Zweites Kategorisierungs-Backend neben Ollama (pipe/categorize.py), fuer
Vergleichstests mit staerkeren Cloud-Modellen. Umschaltbar per Dropdown oben
rechts im Leitstand (pipe/modellwahl.py, geteilte telefon/modell.json) - der
laufende Watcher braucht dafuer keinen Neustart, die Auswahl wird bei jedem
Anruf frisch gelesen.

Jede Kategorisierung loggt jetzt Backend/Modell/Dauer/Tokens/Kosten mit ins
Leitstand-Verlauf (protokoll.schreibe), nicht nur versteckt in meta.json.

Testergebnis (Nemotron ueber OpenRouter, :free-Tier): stark schwankende
Latenz (8,5s bis 80s je nach Modell/Auslastung), einmal 502 "temporarily
overloaded" - :free-Modelle sind fuer spaeter geplanten Echtzeit-Dialog
ungeeignet, dafuer braucht es ein bezahltes/dediziertes Tier.

telefon/modell.json ist Laufzeit-Zustand, kein Quellcode - neu ignoriert.

Co-Authored-By: Claude Sonnet 5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_015vtvcyNkapuDh583643hNs
This commit is contained in:
Jeuner 2026-08-24 21:43:30 +02:00
parent 4109aee1bb
commit 3e2d829542
7 changed files with 230 additions and 18 deletions

View file

@ -66,9 +66,21 @@ WHISPER_PROMPT = os.environ.get(
WHISPER_MODELL = os.environ.get("WHISPER_MODELL", "medium")
WHISPER_COMPUTE = os.environ.get("WHISPER_COMPUTE", "int8")
# --- Kategorisierung (Ollama, lokal) -----------------------------------------
# --- Kategorisierung -----------------------------------------------------
# Welches Modell aktiv ist, waehlt der Leitstand per Dropdown (pipe.modellwahl,
# geteilte Zustandsdatei telefon/modell.json) - kein Neustart noetig. Hier nur
# die Bausteine dafuer: Ollama-Zugang (lokal, Default-Auswahl) und der
# OpenRouter-Zugang fuers Testen staerkerer Cloud-Modelle. Patientendaten
# (Transkript) verlassen bei OpenRouter den Rechner - nur zu Testzwecken,
# nicht im Praxisbetrieb.
OLLAMA_URL = os.environ.get("OLLAMA_URL", "http://127.0.0.1:11434")
OLLAMA_MODELL = os.environ.get("OLLAMA_MODELL", "qwen3:8b")
OPENROUTER_KEY = os.environ.get("OPENROUTER_KEY", "")
# Optional: eigenes Testmodell zusaetzlich zu den zwei fest im Dropdown
# hinterlegten (siehe pipe/modellwahl.py) - leer lassen wenn nicht gebraucht.
OPENROUTER_MODELL = os.environ.get("OPENROUTER_MODELL", "")
PROMPT_DATEI = WURZEL / "prompts" / os.environ.get(
"PROMPT_DATEI", "categorize_de.txt"
)