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>
- config.json: fallback und der litellm-Upstream entfernt. Unbekannte Namen
sind ab jetzt ein Fehler statt einer stillen Weiterleitung -- mit totem
LiteLLM waere daraus ein Timeout ohne Hinweis geworden, und mit Caddy auf
:4000 sogar eine Schleife auf den Router selbst.
- Caddyfile: :4000 -> localhost:4010. Der Port war ueberall hart verdrahtet
(Container-Images, spark-desktop, aeltere Skripte); ihn umzubiegen ist
sicherer, als jeden Aufrufer einzeln zu finden.
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>
Andreas 2026-09-07: das Max-Abo laeuft aus, es wird direkt umgestellt statt am
Mittwoch. Damit steht KEINE Rolle mehr auf der teuren Stufe.
- llmrouter: architect von :high auf :medium (= allround:junior)
- opencode.json: baseURL auf 4010 (Router statt LiteLLM), alle zehn Agenten auf
role/*, model und small_model ebenso; Modelldeklarationen sind jetzt die
Rollen statt der 2608-Namen
- engines.json: xo-chat und logbuch von engine=claude auf opencode; masse von
42i/marvin-2608-mass:medium (kein Router-Gegenstueck) auf :low
- logbuch-eintrag.sh: opencode-Zweig, Entwurf aus dem JSONL-Strom; der
claude-Zweig bleibt als Rueckweg erhalten
Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
Der XO war der letzte grosse Posten ausserhalb des Routers: engine=claude mit
claude-opus-5 ueber das Abo, damit ohne Kostenzeile und ohne Metering. Er laeuft
jetzt wie die Teams auf opencode und fragt die Rolle role/xo.
role/xo zeigt dazu auf 42i/marvin-2609:medium (= leader:junior nach
42i/intern#1252, heute glm-5.3-flash) statt :high. Ausdruecklich als Versuch
(Andreas): reicht das Urteil nicht, ist Hochstufen eine Zeile in config.json.
Der Gegenpol bleibt notiert - der Hinweis vom 2026-08-20 (Fall t1678) steht.
Kontextgrenze der Modelldeklaration bewusst auf 262144, die garantierte
Mindestschwelle der medium-Stufe.
Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
Beide standen auf 42i/marvin-2609:high (= grok-4.6 fuer 26 $/1M gewichtet).
Nach 42i/intern#1252 entspricht das leader:junior; damit bleibt nur xo auf der
teuren Stufe, architect ueber allround:senior.
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>
Caddy terminiert TLS fuer llm.lan und zeigt auf den llmrouter (:4010). Solange
er im llmlite-Compose steckte, haette das Abschalten von LiteLLM ihn mitgenommen
- der Router laeuft dann zwar weiter, ist aber von aussen nicht erreichbar.
Neue Quelle llmrouter/caddy/{compose.yml,Caddyfile}; agents-pull spiegelt sie
nach /srv/caddy und startet den Dienst bei Aenderung neu.
Vorarbeit zur Abschaltung von LiteLLM (42i/intern#1252).
Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
STT-Vergleich 2026-09-06 (Studio + simulierte Telefonstrecke) dokumentiert;
Whisper verliert am Telefon Zahlenstellen, Voxtral Small nicht (Andreas).
Co-Authored-By: Claude Fable 5.1 <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>
- anthropicModus (alt|openrouter), Normalisierung der IDs (Datum, [1m], Punkte),
Client-Effort aus output_config.effort als Stufe, HEAD /api/hello -> 200
- Auswahl: nicht gemessene Stufe faellt auf die naechste gemessene darunter
(sonst darueber, sonst Modellzahl) -- Sonnet 5 hat nur max/none
- /models: alt/ nur bei bestimmbarer Klasse; opencode-normalize nimmt
openrouter/+alt/ genau dann (GLM 5.3 Flash war weggefallen)
- README: Abschnitt Claude Code und Claude Desktop
Verifiziert per claude -p mit claude-sonnet-5, claude-opus-5, claude-haiku-4-5-20251001.
Co-Authored-By: Claude Fable 5.1 <noreply@anthropic.com>
Weiterleitung an OpenRouters Messages-Endpunkt (x-api-key, anthropic-version,
anthropic-beta), Effort als reasoning.effort, Usage in Anthropic-Form gelesen
(auch im Stream aus message_start/message_delta). Nur openrouter-Ziele; lokale
llama-server sprechen kein Messages-Format. Verifiziert: claude -p über
http://llm.lan:4010 mit alt/anthropic/claude-sonnet-5 -> glm-5.3-flash.
Co-Authored-By: Claude Fable 5.1 <noreply@anthropic.com>