Feat: Hirn-Bereitschaft im /api/health + Frontend-Warnung

/api/health liefert jetzt brain:{role,model,ready} (echter /running-Check —
ein abgestuerztes/nicht geladenes Agent-Hirn 'fast' erscheint dort nicht).
Frontend zeigt 'Hirn offline (model)' + Amber-Punkt, statt dass der Ausfall
nur als App-Fehler ('Provider returned an empty stream') auftaucht.

Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
This commit is contained in:
Hitonabi
2026-06-28 21:42:42 +02:00
parent 181db38b49
commit 63a83c69c3
7 changed files with 44 additions and 6 deletions
+3
View File
@@ -15,4 +15,7 @@ def health() -> dict:
"version": VERSION,
"engine_reachable": llamaswap.engine_reachable(),
"gateway_reachable": gateway.gateway_reachable(),
# Echte Hirn-Bereitschaft: Engine kann erreichbar sein, das Agent-Hirn ('fast') aber tot
# (Crash/OOM nach Engine-Update). Das wäre sonst ein silent fail (App-Fehler statt Status).
"brain": llamaswap.brain_status(),
}
+20
View File
@@ -432,6 +432,26 @@ def delete_model(model_id: str) -> bool:
return True
def brain_model_name() -> str | None:
"""Modellname des Agent-Hirns = das Modell mit llama-swap-Alias/Rolle 'fast'."""
for m in list_models():
names = {str(a).lower() for a in (m.get("aliases") or [])}
if m.get("role"):
names.add(str(m["role"]).lower())
if "fast" in names:
return m["name"]
return None
def brain_status() -> dict:
"""Ist das Agent-Hirn ('fast') WIRKLICH geladen & bereit? Prüft /running — ein abgestürztes
Modell (z.B. OOM/Crash nach Engine-Update) erscheint dort NICHT als running. Fängt damit den
Fall 'Engine erreichbar, aber Hirn tot', den engine_reachable() nicht sieht (silent fail)."""
name = brain_model_name()
running = get_running_models()
return {"role": "fast", "model": name, "ready": bool(name and name in running)}
def get_running_models() -> list[str]:
"""Fragt den /running Endpunkt von llama-swap ab. Gibt die Namen der geladenen
Modelle zurück. Neuere llama-swap-Versionen liefern Objekte ({model, state, ...})