radar: mehrdeutigen Ablenker im Pruefstand entschaerft, Baseline-Cache kennt den Probenstand
Ampel / ampel (push) Failing after 21s

Der Ablenker "system_speicher" passte zur Platz-Frage besser als die erwartete Antwort
(das Live-Hirn waehlte ihn am 23.09.). Weil schon ein Vorteil fuer "bestanden" reicht,
haette dieses Rauschen allein einen Kandidaten durchbringen koennen. Aendern sich die
Proben, misst baseline() jetzt neu statt alte Werte zu vergleichen. Dazu: uebersprungene
Radar-Eintraege zeigen kein "passt nicht" mehr.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
This commit is contained in:
Hitonabi
2026-09-23 22:33:27 +02:00
co-authored by Claude Opus 5.5
parent 177c9a311c
commit 8d46adfd86
10 changed files with 37 additions and 12 deletions
+7 -3
View File
@@ -60,6 +60,9 @@ SERVER_LOG = os.path.join(tempfile.gettempdir(), "pruefstand-server.log")
HERMES = os.path.expanduser("~/.local/bin/hermes")
CTX_STANDARD = 65536
# Stand der Proben. Ändern sich Aufgaben oder Werkzeuge, ist eine gecachte Baseline nicht mehr
# vergleichbar — baseline() misst dann neu. Bei jeder Änderung an den Proben hochzählen.
PRUEFSTAND_VERSION = 2
# Flags wie am 17.09. (der Kontext kommt je Kandidat dazu): voller GPU-Offload, Flash-Attention,
# kein mmap (--load-mode none, das alte --no-mmap gibt es seit b10936 nicht mehr), ein Slot,
# KV-Cache q8_0 wie im Betrieb.
@@ -236,7 +239,7 @@ _ABLENKER = {
"nerdquiz": ("NerdQuiz", ("frage_holen", "punkte")),
"projekt": ("Projekte", ("status", "anlegen")),
"modell": ("KI-Modelle", ("auflisten", "laden")),
"system": ("Box-System", ("temperatur", "speicher", "prozesse")),
"system": ("Box-System", ("temperatur", "arbeitsspeicher", "prozesse")), # nicht „speicher“: klang nach Platte
"datei": ("Dateien", ("suchen", "kopieren", "verschieben")),
"aufgabe": ("Aufgaben", ("anlegen", "erledigen", "auflisten")),
"browser": ("Browser-Tabs", ("auflisten", "schliessen")),
@@ -951,7 +954,8 @@ def baseline(rolle: str, cache_pfad: str, *, kennung: str, bild: bool = False, f
Rückgabe {"kennung", "zeit", "werte"} oder None, wenn es weder Cache noch Messung gibt."""
cache = _lies_json(cache_pfad)
eintrag = cache.get(rolle) if isinstance(cache.get(rolle), dict) else None
passend = eintrag if eintrag and eintrag.get("kennung") == kennung else None
passend = (eintrag if eintrag and eintrag.get("kennung") == kennung
and eintrag.get("version") == PRUEFSTAND_VERSION else None)
if passend and time.time() - float(passend.get("zeit") or 0) < max_alter_tage * 86400:
return passend
protokoll(f" Baseline {rolle} wird neu gemessen ({modell or ALIAS[rolle]} über llama-swap)")
@@ -962,7 +966,7 @@ def baseline(rolle: str, cache_pfad: str, *, kennung: str, bild: bool = False, f
except Exception as e:
protokoll(f" Baseline {rolle} nicht messbar: {e}")
return passend # lieber einen Monat alt als gar nicht vergleichen
neu = {"kennung": kennung, "zeit": time.time(), "werte": werte}
neu = {"kennung": kennung, "version": PRUEFSTAND_VERSION, "zeit": time.time(), "werte": werte}
cache[rolle] = neu
_schreibe_json(cache_pfad, cache)
return neu