Das 64K-Output-Gate war global und trieb auto/mass:fast auf solar-pro4
(0,42 statt 0,27 $/1M), weil ling-3.0-flash mit 32768 Output-Token
durchfiel. Gemessen 09.09.: 1.415 Masse-Requests, 1.146 davon unter 100
Completion-Token — das Gate verfehlte dort seinen Zweck. Jetzt kann je
Schwelle-Profil minOutput gesetzt werden (Default 65536);
auto/mass:fast laeuft mit 32768, max_output unbekannt bleibt abgelehnt.
Dazu role/coder -> auto/coding:junior (ACL fuer persona-spark), damit
Code-Arbeit nicht ueber role/worker in die Masse faellt; der
engineer-Agent der Mac-opencode.json wechselt auf role/coder.
Refs #1283
Andreas setzt Jessie fuer die Show-Unterstuetzung (17.9., Kassel) bis auf
Weiteres auf role/leader. auto/coding:junior ergaenzt, damit die
auto/mass-Ausweichkette (mass -> mass:fast -> coding:junior) durch die
ACL-Pruefung kommt, statt im letzten Glied still 403 zu laufen.
Ausgerollt auf llm.lan mit Backup *.bak-show, Router-Neustart, geprueft:
role/leader loest mit persona-jessie auf glm-5.3-flash auf.
auto/mass:fast war als Endstation ohne Rückfall: ling-3.0-flash fiel
am 2026-09-07 nachts aus (5x 502 nach ~270 s hängendem Upstream,
117x 429), und der bisherige Ausweich griff nur bei fetch-Fehlern und
nur für fest-Ziele. Jetzt darf auch ein Schwelle-Alias ausweichen,
und der Ausweich löst bei 429/5xx aus — bevor das erste Byte an den
Client geht, also gefahrlos wiederholbar, weiterhin nur einmal.
auto/mass:fast weicht auf auto/coding:junior aus (ling erfüllt deren
Schwellen strukturell nie, der Rückfall landet also garantiert auf
einem tauglichen Modell). Die Container-Personas bekommen die
Kettenziele in die ACL — ohne sie schlägt der Fallback in
zielBestimmen still fehl und der ursprüngliche Fehler geht durch.
Verifiziert im lokalen End-to-End-Test gegen Schein-Upstreams:
Ausweich bei 429 (200 vom Ersatzmodell, Log-Zeile alias->ausweich),
Durchreichung von 429 ohne ACL-Freigabe, fetch-catch-Pfad unverändert
funktionierend.
Refs 42i/intern#1252
nightjob hatte kein Token, keinen Konsumenten und keine Nutzung in den letzten
14 Tagen -- der Name stand nur noch in den ACL-Dateien. persona-inka-mx war ein
LiteLLM-key_alias; beide Inka-Tokens (Shim und Telefon-Front-End) laufen im
Router unter persona-inka. Der Alias in OpenBao (agents/inka/litellm) ist
mitkorrigiert.
Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
Der Preisfinder waehlte bisher ueber EINE Zahl. Ein Modell kann generalistisch
gut aussehen und agentisch durchfallen -- gemini-3.8-flash hat Coding 76,3 und
Agentic 41,2 und traegt den Werkzeug-Rundlauf nicht.
- openrouter-auswahl: billigsterUeberSchwelle reicht minCoding/minAgentic an
klasseFiltern durch (nahm es bereits entgegen, wurde nur nie gefuettert)
- config: art "schwelle" hat jetzt index, coding und agentic, jede optional;
"fest" kennt ausweich
- resolver: Beschreibung nennt die geforderten Achsen
- server: ein festes Ziel weicht bei Upstream-Ausfall EINMAL auf den
konfigurierten Alias aus. Ohne das haengt mit dem lokalen Knoten jede
Titelzeile jedes Agenten, weil auto/mass ueberall als small_model haengt.
- acht Profile, Rollen darauf umgehaengt, 42i/marvin-2609:* bleiben als Namen
Aufgeloest (ohne Last-Probe, alle Ziele laufen bereits ueber bestehende
Aliasse): coding:junior und leader:junior -> glm-5.3-flash, coding:senior ->
grok-4.6:high, leader:senior -> glm-5.3:max (15,66 statt 26 gewichtet -- die
Regel findet etwas Billigeres als die Schaetzung im Ticket), mass:fast -> ling.
Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
- entrypoint: Zuordnung Persona -> Rolle (spark engineer, buzz ops, jessie
assistant, klara service); AGENT_MODEL bleibt als Ueberschreibung
- small_model getrennt von model (AGENT_SMALL_MODEL, Default lokales Qwen) --
Titel und Zusammenfassungen muessen nichts kosten (42i/intern#1252)
- baseURL 4000 -> 4010: die Container sprachen bisher LiteLLM direkt an, am
Router und am Caddy vorbei
- key-acls: core:none fuer spark/buzz/klara, sonst laeuft small_model in 401
- compose: AGENT_MODEL bei klara entfernt, die Rolle kommt aus dem Entrypoint
Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
Beide riefen ueber Port 4000 (LiteLLM) und mit LiteLLM-eigenen Modellnamen
(marvin-tts, marvin-stt, standard, 42i/marvin-2608-core:none). Der Router kennt
diese Namen nicht und reicht sie heute still an LiteLLM durch - mit dessen
Abschaltung waeren sie tot (42i/intern#1252).
- matrix-MCP: TTS/STT auf llm.lan:4010 und 42i/marvin-tts bzw. 42i/marvin-stt
- Paperless: llm.lan:4010, Modell 42i/marvin-2609-core:none statt "standard"
bzw. dem 2608-Namen; nach #1252 gehoert diese Massenarbeit auf auto/mass
- key-acls: persona-jessie darf das lokale Qwen (fuer genau diese Laeufe)
Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
Upstream kira-tts (10.6.42.111:8002, KIRA_TTS_KEY) und Alias deizo/kira-tts,
dazu das Recht in allen 12 Schluesseln ergaenzt, die deizo/kira-stt schon
hatten.
Anders als LiteLLM reicht der Router den Audio-Stream durch: Nicht-JSON-
Antworten gehen als Body weiter, statt ausgepuffert zu werden. Gemessen ueber
den Router: erster Ton nach 22 ms gestreamt gegen 5,70 s ungestreamt. Der
LiteLLM-Weg puffert und kommt auf 9,17 s (bekannter Upstream-Bug
BerriAI/litellm#14891).
Inka nutzt darueber jetzt STT und TTS; das LLM blieb vorerst auf dem alten
Weg (Tool-Schema-Grammatik, s. 42i/intern#1201).
Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
- openrouter/<id>[:effort] 1:1, alt/<id>[:effort] günstigste Alternative auf
Abruf (ohne Last-Probe, im Takt erneuert), role/<name> aus config.rollen
- Klasse: Intelligence, Coding, Agentic je >= 95 % der Referenz (relativ statt
3 Punkte), Kontext >= 90 %, billiger; Kandidaten auch ohne OpenRouter-Index,
wenn AA Stufen kennt (OpenRouter führt Intelligence nur für 53 Modelle)
- ACL-Muster mit *, /models mit allen Konto-Modellen je Namensraum und Stufe
- Rollen aus der LiteLLM-Zeit übernommen (Führung high, Rest medium)
Andreas 2026-09-05.
Co-Authored-By: Claude Fable 5.1 <noreply@anthropic.com>
Caddy zeigt llm.lan künftig auf den Router; alles Unbekannte (2608, role/*)
geht unverändert mit dem Client-Key an LiteLLM :4000. Umstellung je Agent =
Modellname, kein base_url-Wechsel (Andreas 2026-09-05). altnamen entfällt,
bis LiteLLM abgeschaltet wird.
Co-Authored-By: Claude Fable 5.1 <noreply@anthropic.com>
OpenAI-kompatibler Reverse-Proxy in Bun: Client-Key -> ACL, Alias ->
Modell (alternative: günstigstes Modell derselben Klasse über
llmlite/openrouter-auswahl inkl. Effort-Achse; fest: lokale Upstreams,
TTS/STT, Embeddings), Usage/Kosten aus der OpenRouter-Antwort (auch im
Stream), JSONL + SQLite-Log, Tagesstatistik je Key. Altnamen der
LiteLLM-Zeit werden übersetzt. Kein 3456/stdcmpt, kein role/*, kein -auto
(Andreas 2026-09-05). Lokal verifiziert: Chat, Stream, ACL, Altname,
Kosten im Log. Parallelbetrieb auf :4001 geplant.
Co-Authored-By: Claude Fable 5.1 <noreply@anthropic.com>