- 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>
157 lines
5.4 KiB
JSON
157 lines
5.4 KiB
JSON
{
|
|
"_doku": "Versionierte Quelle des llmrouter. Secrets kommen NUR aus der Umgebung: OPENROUTER_API_KEY, MISTRAL_API_KEY, KIRA_REASONING_KEY, KIRA_STT_KEY, ARTIFICIALANALYSIS_API_KEY, ADMIN_KEY; Client-Keys aus KEYS_FILE (token -> name), Rechte aus key-acls.json (name -> aliasse). Port 4010 (4001 im LXC von nginx belegt); Caddy zeigt llm.lan auf 4010, LiteLLM bleibt auf 4000 und bekommt alles, was hier unbekannt ist (fallback). MODEL_BLOCKLIST zeigt auf die Sperrliste (Host: /srv/llmrouter/model-blocklist.json).",
|
|
"port": 4010,
|
|
"logDir": "./log",
|
|
"refreshHours": 12,
|
|
"aaRefreshDays": 7,
|
|
"lasttest": true,
|
|
"upstreams": {
|
|
"openrouter": {
|
|
"base": "https://openrouter.ai/api/v1",
|
|
"keyEnv": "OPENROUTER_API_KEY"
|
|
},
|
|
"qwen": {
|
|
"base": "http://10.18.5.30:11507/v1",
|
|
"maxParallel": 1
|
|
},
|
|
"voice": {
|
|
"base": "http://10.18.5.30:8803/v1"
|
|
},
|
|
"ollama": {
|
|
"base": "http://10.18.5.30:11434/v1"
|
|
},
|
|
"mistral": {
|
|
"base": "https://api.mistral.ai/v1",
|
|
"keyEnv": "MISTRAL_API_KEY"
|
|
},
|
|
"kira-chat": {
|
|
"base": "http://10.6.42.111:8000/v1",
|
|
"keyEnv": "KIRA_REASONING_KEY"
|
|
},
|
|
"kira-stt": {
|
|
"base": "http://10.6.42.111:8001/v1",
|
|
"keyEnv": "KIRA_STT_KEY"
|
|
},
|
|
"litellm": {
|
|
"base": "http://127.0.0.1:4000/v1",
|
|
"clientKey": true
|
|
}
|
|
},
|
|
"aliases": {
|
|
"42i/marvin-2609:low": {
|
|
"art": "schwelle",
|
|
"index": 25,
|
|
"minContext": 256000
|
|
},
|
|
"42i/marvin-2609:medium": {
|
|
"art": "schwelle",
|
|
"index": 45,
|
|
"minContext": 256000
|
|
},
|
|
"42i/marvin-2609:high": {
|
|
"art": "schwelle",
|
|
"index": 49,
|
|
"minContext": 500000
|
|
},
|
|
"42i/marvin-2609:max": {
|
|
"art": "schwelle",
|
|
"index": 53,
|
|
"minContext": 500000
|
|
},
|
|
"marvin-free": {
|
|
"art": "fest",
|
|
"upstream": "openrouter",
|
|
"model": "openrouter/free"
|
|
},
|
|
"42i/marvin-2609-core:none": {
|
|
"art": "fest",
|
|
"upstream": "qwen",
|
|
"model": "qwen36:35b",
|
|
"body": {
|
|
"chat_template_kwargs": {
|
|
"enable_thinking": false
|
|
}
|
|
}
|
|
},
|
|
"42i/marvin-2609-core:medium": {
|
|
"art": "fest",
|
|
"upstream": "qwen",
|
|
"model": "qwen36:35b",
|
|
"body": {
|
|
"chat_template_kwargs": {
|
|
"enable_thinking": true
|
|
}
|
|
}
|
|
},
|
|
"kira-reasoning": {
|
|
"art": "fest",
|
|
"upstream": "kira-chat",
|
|
"model": "kira-reasoning"
|
|
},
|
|
"kira-stt": {
|
|
"art": "fest",
|
|
"upstream": "kira-stt",
|
|
"model": "kira-stt"
|
|
},
|
|
"marvin-tts": {
|
|
"art": "fest",
|
|
"upstream": "voice",
|
|
"model": "tts-1"
|
|
},
|
|
"marvin-stt": {
|
|
"art": "fest",
|
|
"upstream": "voice",
|
|
"model": "whisper-1"
|
|
},
|
|
"marvin-tts-turbo": {
|
|
"art": "fest",
|
|
"upstream": "mistral",
|
|
"model": "voxtral-mini-tts-2603"
|
|
},
|
|
"marvin-stt-turbo": {
|
|
"art": "fest",
|
|
"upstream": "mistral",
|
|
"model": "voxtral-mini-latest"
|
|
},
|
|
"marvin-embedding": {
|
|
"art": "fest",
|
|
"upstream": "ollama",
|
|
"model": "bge-m3"
|
|
},
|
|
"marvin-embedding-turbo": {
|
|
"art": "fest",
|
|
"upstream": "openrouter",
|
|
"model": "mistralai/mistral-embed-2312"
|
|
}
|
|
},
|
|
"_stufen_doku": "Stufen als Index-Schwelle (Artificial-Analysis-Intelligence-Index, 0-100) mit Mindestkontext (Andreas 2026-09-05): low 25/256k, medium 45/256k, high 49/500k, max 53/500k. Die Art \"alternative\" mit Referenzmodell (z.B. anthropic/claude-opus-5:medium) bleibt möglich. Namen versioniert wie bei LiteLLM (2608): 42i/marvin-2609:*.",
|
|
"fallback": {
|
|
"upstream": "litellm",
|
|
"_doku": "Unbekannte Modellnamen (z.B. 42i/marvin-2608:*) gehen unverändert mit dem Client-Key an LiteLLM. Umstellung je Agent = Modellname 2608 -> 2609. Fällt weg, wenn LiteLLM abgeschaltet wird; dann kommen die 2608-Namen als altnamen zurück."
|
|
},
|
|
"_rollen_doku": "Rollen entkoppeln Agenten von Modellnamen: ein Agent ruft role/worker, welches Modell dahintersteht, stellt man HIER um -- aus der Ferne, ohne Container-Deploy. Ziele: 42i/*-Alias, openrouter/<id>[:effort] (1:1) oder alt/<id>[:effort] (guenstigste Alternative). Vorbelegung 2026-09-05 (Elton): Fuehrungsrollen high, Rest medium -- Andreas' Feinjustierung ausstehend.",
|
|
"rollen": {
|
|
"xo": "42i/marvin-2609:high",
|
|
"architect": "42i/marvin-2609:high",
|
|
"teamleader": "42i/marvin-2609:high",
|
|
"lead": "42i/marvin-2609:high",
|
|
"worker": "42i/marvin-2609:medium",
|
|
"engineer": "42i/marvin-2609:medium",
|
|
"po": "42i/marvin-2609:medium",
|
|
"speaker": "42i/marvin-2609:medium",
|
|
"support": "42i/marvin-2609:medium",
|
|
"assistant": "42i/marvin-2609:medium",
|
|
"privacy": "42i/marvin-2609:medium",
|
|
"service": "42i/marvin-2609:medium",
|
|
"ops": "42i/marvin-2609:medium",
|
|
"marketing": "42i/marvin-2609:medium",
|
|
"qa": "42i/marvin-2609:medium",
|
|
"perf": "42i/marvin-2609:medium",
|
|
"i18n": "42i/marvin-2609:medium",
|
|
"docs": "42i/marvin-2609:medium",
|
|
"ar": "42i/marvin-2609:medium",
|
|
"archivist": "42i/marvin-2609:medium"
|
|
},
|
|
"_namen_doku": "Namensraeume: 42i/* = konfigurierte Aliasse (aliases); openrouter/<id>[:effort] = 1:1 an OpenRouter, Effort als reasoning.effort; alt/<id>[: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/<name> = Rolle (rollen). Alles andere -> fallback (LiteLLM)."
|
|
}
|