Files
llmrouter/config.json
T
eltonandClaude Fable 5.1 7897fa9651 llmrouter: leichtgewichtiger Gateway-Ersatz mit Alternativ-Auflösung
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>
2026-09-05 07:03:12 +02:00

56 lines
3.5 KiB
JSON

{
"_doku": "Versionierte Quelle des llmrouter. Secrets kommen NUR aus der Umgebung: OPENROUTER_API_KEY, MISTRAL_API_KEY, ADMIN_KEY; Client-Keys aus KEYS_FILE (token -> name), Rechte aus key-acls.json (name -> aliasse).",
"port": 4001,
"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" },
"kira-stt": { "base": "http://10.6.42.111:8001/v1" }
},
"aliases": {
"marvin:none": { "art": "alternative", "referenz": "openai/gpt-5.6-luna:none" },
"marvin:low": { "art": "alternative", "referenz": "openai/gpt-5.6-luna:low" },
"marvin:medium": { "art": "alternative", "referenz": "openai/gpt-5.6-luna:medium" },
"marvin:high": { "art": "alternative", "referenz": "openai/gpt-5.6-luna:high" },
"marvin:extra": { "art": "alternative", "referenz": "anthropic/claude-opus-5:medium" },
"marvin:ultra": { "art": "alternative", "referenz": "anthropic/claude-fable-5.1:medium" },
"marvin-mass": { "art": "alternative", "referenz": "inclusionai/ling-3.0-flash" },
"marvin-free": { "art": "fest", "upstream": "openrouter", "model": "openrouter/free" },
"marvin-core:none": { "art": "fest", "upstream": "qwen", "model": "qwen36:35b", "body": { "chat_template_kwargs": { "enable_thinking": false } } },
"marvin-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" }
},
"_altnamen_doku": "Übergangs-Aliasse aus der LiteLLM-Zeit, damit kein Container angefasst werden muss. Loggen unter dem NEUEN Namen. Nach und nach abbauen.",
"altnamen": {
"42i/marvin-2608": "marvin:low",
"42i/marvin-2608:none": "marvin:none",
"42i/marvin-2608:low": "marvin:low",
"42i/marvin-2608:medium": "marvin:medium",
"42i/marvin-2608:high": "marvin:high",
"42i/marvin-2608:extra": "marvin:extra",
"42i/marvin-2608:ultra": "marvin:ultra",
"42i/marvin-2608-auto": "marvin:medium",
"42i/marvin-2608-mass": "marvin-mass",
"42i/marvin-2608-mass:none": "marvin-mass",
"42i/marvin-2608-mass:medium": "marvin-mass",
"42i/marvin-2608-core:none": "marvin-core:none",
"42i/marvin-2608-core:medium": "marvin-core:medium",
"marvin-reasoning": "marvin-core:medium",
"marvin-core": "marvin-core:none"
}
}