llmrouter: Namensräume openrouter/, alt/, role/; Klasse über drei Indexe relativ
- 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>
This commit is contained in:
@@ -9,37 +9,42 @@ Keine Format-Übersetzung, keine Datenbank, kein Admin-UI. Alle Upstreams
|
||||
sprechen OpenAI-Format (OpenRouter, llama-server, Ollama, Mistral), deshalb
|
||||
reicht Durchreichen. Entscheidung Andreas, 2026-09-05.
|
||||
|
||||
## Aliasse (config.json)
|
||||
## Namensräume
|
||||
|
||||
Zwei Arten:
|
||||
| Name | Bedeutung |
|
||||
|---|---|
|
||||
| `42i/marvin-2609:low\|medium\|high\|max` | konfigurierte Stufen (`aliases`, Art `schwelle`: Index ≥ 25/45/49/53, Kontext ≥ 256k/256k/500k/500k) |
|
||||
| `42i/marvin-2609-core:none\|medium` | lokales Qwen, fest |
|
||||
| `openrouter/<id>[:effort]` | 1:1 an OpenRouter, Effort als `reasoning.effort` |
|
||||
| `alt/<id>[:effort]` | **günstigste Alternative derselben Klasse** wie `<id>` auf dieser Stufe |
|
||||
| `role/<name>` | Rolle aus `rollen`, zeigt auf einen der obigen Namen |
|
||||
| alles andere | Durchreiche an LiteLLM (`fallback`), unverändert mit Client-Key |
|
||||
|
||||
- **`alternative`** — der Alias nennt ein Referenzmodell mit optionaler
|
||||
Effort-Stufe (`openai/gpt-5.6-luna:low`, `anthropic/claude-opus-5:medium`).
|
||||
Gerufen wird das **günstigste OpenRouter-Modell derselben Klasse**, nach der
|
||||
Regel in `../llmlite/openrouter-auswahl.ts` (Intelligence-Index je Stufe von
|
||||
Artificial Analysis, Kontext, Tool-Calls, Sperrliste, Live-Probe, Last-Probe
|
||||
bei Wechsel). Findet sich nichts Billigeres, wird die Referenz selbst gerufen.
|
||||
Die Effort-Stufe des Ziels wird als `reasoning.effort` gesetzt; ein vom
|
||||
Client mitgeschicktes `reasoning_effort` wird verworfen, die Klasse gehört
|
||||
zum Alias.
|
||||
- **`schwelle`** — Index-Schwelle (0–100) plus Mindestkontext, ohne Referenzmodell:
|
||||
das günstigste Modell, das beides erfüllt, mit der niedrigsten ausreichenden
|
||||
Effort-Stufe. Stand 2026-09-05: low 25/256k, medium 40/256k, high 47/500k,
|
||||
max 50/500k. Stabiler als eine Referenz, sagt aber weniger über die Bedeutung.
|
||||
- **`fest`** — Upstream und Modell stehen fest (lokales Qwen, TTS/STT,
|
||||
Embeddings, kira auf deizo). Optional ein `body`-Patch, etwa
|
||||
`chat_template_kwargs.enable_thinking` für die Qwen-Stufen.
|
||||
**Klasse** (`alt/`): Intelligence-, Coding- und Agentic-Index jeweils mindestens
|
||||
95 % der Referenz, Kontext mindestens 90 %, gewichtet billiger. Intelligence und
|
||||
Coding kommen je Effort-Stufe von Artificial Analysis, Agentic nur je Modell (AA
|
||||
misst ihn nicht je Stufe). Hat die Referenz einen Wert, den ein Kandidat nicht
|
||||
hat, fällt der Kandidat raus. Je Kandidat zählt die niedrigste Stufe, die die
|
||||
Klasse erreicht; die Stufe des Ziels wird als `reasoning.effort` gesetzt, ein
|
||||
vom Client mitgeschicktes `reasoning_effort` verworfen. Findet sich nichts
|
||||
Billigeres, wird die Referenz selbst gerufen.
|
||||
|
||||
Die Namen sind versioniert wie bei LiteLLM: `42i/marvin-2609:low` … `:max`,
|
||||
`42i/marvin-2609-core:none|medium`. **Unbekannte Namen** (alles aus der
|
||||
LiteLLM-Zeit, `42i/marvin-2608:*`) reicht der Router unverändert mit dem
|
||||
Client-Key an LiteLLM auf :4000 durch (`fallback`). Caddy zeigt `llm.lan`
|
||||
auf den Router; ein Agent wechselt also per Modellname 2608 → 2609, nicht
|
||||
per base_url, und rollt per Umbenennen zurück. Durchgereichte Anfragen stehen
|
||||
im Log mit Upstream `litellm`, ohne Kosten (die kennt nur LiteLLM).
|
||||
`alt/` wird **bei der ersten Anfrage** aufgelöst (Latenz- und Live-Probe, keine
|
||||
Last-Probe) und dann im 12-h-Takt mit erneuert. Die konfigurierten `42i/*`-Stufen
|
||||
fahren bei einem Wechsel zusätzlich die Last-Probe (78k Kontext, dreimal).
|
||||
|
||||
Wird LiteLLM abgeschaltet, entfällt `fallback`, und `altnamen` (Übersetzung
|
||||
2608 → 2609) übernimmt, damit auch Nachzügler nicht brechen.
|
||||
**Rollen** entkoppeln Agenten von Modellnamen: ein Agent ruft `role/worker`,
|
||||
welches Modell dahintersteht, stellt man in `config.json` um, ohne Container.
|
||||
Vorbelegung: xo/architect/teamleader/lead → `42i/marvin-2609:high`, alle
|
||||
anderen → `:medium`.
|
||||
|
||||
**Rechte** (`key-acls.json`): Name → erlaubte Namen, `*` am Ende ist ein
|
||||
Präfix-Muster (`openrouter/*`, `alt/*`, `role/*`); `[]` = alles. Geprüft wird
|
||||
der angefragte Name, vor der Rollenauflösung.
|
||||
|
||||
`/v1/models` zeigt je Key alles Erlaubte: Aliasse, Rollen, alle OpenRouter-
|
||||
Modelle des Kontos als `openrouter/…` und `alt/…`, jeweils auch mit den bei AA
|
||||
gemessenen Effort-Stufen, plus die LiteLLM-Liste im Parallelbetrieb.
|
||||
|
||||
## Auflösung und Takt
|
||||
|
||||
|
||||
Reference in New Issue
Block a user