feat: Failover auf lokales Ollama-Modell, wenn OpenRouter fehlschlaegt

OpenRouter (v.a. :free-Tier) ist nachweislich instabil (502 "temporarily
overloaded", Latenz-Ausreisser bis 80s, siehe vorherige Tests). Bisher
ist ein Anruf dabei komplett gescheitert und nach telefon/fehler
verschwunden. kategorisiere() faengt KategorisierungsFehler von OpenRouter
jetzt ab und faellt automatisch auf config.OLLAMA_MODELL zurueck - der
Anruf kommt so oder so durch. failover_von landet mit im Live-Log
("⚠ Failover von ..."), damit Ausfaelle sichtbar/auditierbar bleiben.

Getestet mit erzwungenem OpenRouter-Fehler (ungueltige Modell-ID, 400) -
Failover greift, Ergebnis kommt trotzdem korrekt an.

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 22:23:07 +02:00
parent 38707b46b6
commit 7e4505d9b7
2 changed files with 18 additions and 3 deletions

View file

@ -46,7 +46,8 @@ def verarbeite(audio: str, anrufer_nummer: str | None = None,
"aufgelegt.",
"stichworte": [],
}
meta = {"backend": "-", "modell": "-", "dauer_s": 0.0, "tokens": None, "kosten_usd": None}
meta = {"backend": "-", "modell": "-", "dauer_s": 0.0, "tokens": None,
"kosten_usd": None, "failover_von": None}
print(f" Kategorie: {auswertung['kategorie']} · Dringlichkeit: {auswertung['dringlichkeit']}"
f" ({meta['modell']}, {meta['dauer_s']}s)")
@ -58,6 +59,8 @@ def verarbeite(audio: str, anrufer_nummer: str | None = None,
zusatz += f" · {meta['tokens']} Tok"
if meta.get("kosten_usd"):
zusatz += f" · ${meta['kosten_usd']:.4f}"
if meta.get("failover_von"):
zusatz += f" · ⚠ Failover von {meta['failover_von']}"
protokoll.schreibe(
"notfall" if auswertung["dringlichkeit"] == "notfall" else "anruf",
f"{auswertung['kategorie']} · {auswertung['dringlichkeit']}"
@ -65,7 +68,8 @@ def verarbeite(audio: str, anrufer_nummer: str | None = None,
+ f" ({meta['modell']}, {zusatz})",
nummer=anrufer_nummer, kategorie=auswertung["kategorie"],
dringlichkeit=auswertung["dringlichkeit"], modell=meta["modell"],
dauer_s=meta["dauer_s"], tokens=meta.get("tokens"), kosten_usd=meta.get("kosten_usd"))
dauer_s=meta["dauer_s"], tokens=meta.get("tokens"), kosten_usd=meta.get("kosten_usd"),
failover_von=meta.get("failover_von"))
bekannter_kontakt = kontakte.nachschlagen(anrufer_nummer)
if bekannter_kontakt: