From 0ecf90e15268825a3ca64d15cc95165af94207b2 Mon Sep 17 00:00:00 2001 From: Elton Turing Date: Mon, 7 Sep 2026 14:05:18 +0200 Subject: [PATCH] Altnamen wirksam machen und die XO-Runde drosseln ALTNAMEN (Schadensbehebung): Bei der Umstellung heute Mittag starben fuenf laufende Teamlaeufe, weil sie ihren Modellnamen aus der Session mittrugen und der Router ihn nicht mehr kannte (Aktennotiz des XO an 42i/intern#1251). Das Feld "altnamen" war seit jeher deklariert und validiert, aber im Server NIE angewendet. Jetzt uebersetzt der Router alte Namen VOR ACL-Pruefung und Aufloesung; 20 Eintraege fuer die 2608-Reihe und die praefixlosen LiteLLM-Namen. DROSSELUNG der Runde (Andreas: Verbrauch senken). Gemessen am 07.09.: 32 Runden, 75-220 Zuege je Runde, 82k Kontext je Zug, 208 Mio. Token an einem Tag. - Ereignis-Paket 4 -> 2: der Aufwand waechst quadratisch mit der Zuglaenge, zwei Runden mit je 110 Zuegen kosten rund ein Viertel einer mit 220. Keine Zeitgrenze, nichts wird abgebrochen (Andreas 2026-09-03). - Prompt: die Rueckgabeformate von tool.sh stehen jetzt als Tabelle im Prompt -- mehrere Zuege gingen dafuer drauf, sie zu erraten. Dazu die Regel, Kommandos zu buendeln (214 der 1359 Bash-Aufrufe waren reine cd) und keine breiten Verzeichnis-Dumps (groesstes Ergebnis des Tages: ein ls -la mit 14k Zeichen). Nicht umgesetzt: die Vermutung, der XO fuehre delegierbare Arbeit selbst aus. Die Messung widerlegt sie -- die Bash-Aufrufe sind ueberwiegend tool.sh-Aufrufe (Tickets lesen, kommentieren, CI pruefen), also seine eigentliche Aufgabe. Co-Authored-By: Claude Opus 5 --- config.json | 25 ++++++++++++++++++++++++- src/server.ts | 10 +++++++++- 2 files changed, 33 insertions(+), 2 deletions(-) diff --git a/config.json b/config.json index 444babd..522e4a3 100644 --- a/config.json +++ b/config.json @@ -238,5 +238,28 @@ }, "_namen_doku": "Namensraeume: 42i/* = konfigurierte Aliasse (aliases); deizo/* = Modelle im Prod-RZ deizo (kira, fest); openrouter/[:effort] = 1:1 an OpenRouter, Effort als reasoning.effort; alt/[:effort] = guenstigste Alternative derselben Klasse (Intelligence, Coding, Agentic je >= 95 % der Referenz, Kontext >= 90 %, billiger), aufgeloest bei der ersten Anfrage und im 12h-Takt erneuert, OHNE Last-Probe; role/ = Rolle (rollen). Alles andere -> fallback (LiteLLM).", "anthropicModus": "alt", - "_anthropic_doku": "Claude Code/Desktop schicken nackte IDs (claude-sonnet-5, claude-opus-5-20260723, claude-sonnet-4-5[1m]). Der Router normalisiert sie und bildet sie je anthropicModus auf alt/anthropic/ (Standard) oder openrouter/anthropic/ ab; ein Client-Effort (output_config.effort) wird als Stufe angehaengt. Rechte: die ACL prueft den abgebildeten Namen, also alt/* bzw. openrouter/*." + "_anthropic_doku": "Claude Code/Desktop schicken nackte IDs (claude-sonnet-5, claude-opus-5-20260723, claude-sonnet-4-5[1m]). Der Router normalisiert sie und bildet sie je anthropicModus auf alt/anthropic/ (Standard) oder openrouter/anthropic/ ab; ein Client-Effort (output_config.effort) wird als Stufe angehaengt. Rechte: die ACL prueft den abgebildeten Namen, also alt/* bzw. openrouter/*.", + "altnamen": { + "42i/marvin-2608:none": "42i/marvin-2609:low", + "42i/marvin-2608:low": "42i/marvin-2609:low", + "42i/marvin-2608:medium": "42i/marvin-2609:medium", + "42i/marvin-2608:high": "42i/marvin-2609:high", + "42i/marvin-2608:extra": "42i/marvin-2609:high", + "42i/marvin-2608:ultra": "42i/marvin-2609:max", + "42i/marvin-2608-core:none": "42i/marvin-2609-core:none", + "42i/marvin-2608-core:medium": "42i/marvin-2609-core:medium", + "42i/marvin-2608-auto": "auto/allround:junior", + "42i/marvin-2608-mass:none": "auto/mass:fast", + "42i/marvin-2608-mass:medium": "auto/mass:fast", + "42i/marvin-2608-mass": "auto/mass:fast", + "marvin-tts": "42i/marvin-tts", + "marvin-stt": "42i/marvin-stt", + "marvin-tts-turbo": "42i/marvin-tts-turbo", + "marvin-stt-turbo": "42i/marvin-stt-turbo", + "marvin-embedding": "42i/marvin-embedding", + "kira-reasoning": "deizo/kira-reasoning", + "kira-stt": "deizo/kira-stt", + "kira-tts": "deizo/kira-tts" + }, + "_altnamen_doku": "Alte Modellnamen (LiteLLM-Zeit) auf heutige Aliasse. Eine laufende opencode- oder Claude-Sitzung traegt ihren Modellnamen bis zum Ende mit; verschwindet er waehrend des Laufs aus der Config, stirbt sie beim naechsten Zug. Am 2026-09-07 hat das fuenf Teamlaeufe gekostet (Lehre im Kommentar zu 42i/intern#1251). Die Uebersetzung greift VOR ACL-Pruefung und Aufloesung. Eintraege koennen weg, wenn sicher ist, dass niemand den alten Namen mehr traegt." } diff --git a/src/server.ts b/src/server.ts index 711502f..5690d81 100644 --- a/src/server.ts +++ b/src/server.ts @@ -99,7 +99,15 @@ function eigenerName(name: string): boolean { } async function zielBestimmen(angefragtRoh: string, keyName: string, clientEffort: Effort | null = null): Promise { - const angefragt = anthropicName(angefragtRoh, clientEffort) ?? angefragtRoh; + // Altnamen zuerst: eine laufende Sitzung traegt ihren Modellnamen bis zum + // Ende mit. Verschwindet er waehrend des Laufs aus der Config, stirbt der + // Lauf beim naechsten Zug an "Unbekanntes Modell" -- am 2026-09-07 hat genau + // das fuenf Teamlaeufe gekostet (42i/intern#1251). Das Feld war deklariert, + // aber nie angewendet; die Uebersetzung passiert VOR ACL und Aufloesung, + // damit der alte Name sich in jeder Hinsicht wie der neue verhaelt. + const ausAltname = config.altnamen?.[angefragtRoh]; + const roh = ausAltname ?? angefragtRoh; + const angefragt = anthropicName(roh, clientEffort) ?? roh; if (!eigenerName(angefragt)) { if (config.fallback !== undefined) { const u = config.fallback.upstream;