From 8868aaa5db63fcc0c6067fa7ac5f50e2277f04de Mon Sep 17 00:00:00 2001 From: tin-berri Date: Fri, 28 Aug 2026 14:26:55 -0700 Subject: [PATCH] feat(ui): run the Lite preset's medium and complex tiers at their documented efforts (#38482) Lite ran Muse Spark 1.2 and Kimi K3 at whatever effort each provider happens to default to. Set the ones their own docs name: Muse Spark 1.2 at xhigh, and Kimi K3 at max, which is Kimi's own default and what the model map now declares for that model. Stacked on the map change, since without it kimi-k3 resolves to unknown levels and the tier editor's capability-blind fallback list does not offer max. --- .../src/autorouter_presets.json | 6 +++++- .../src/lib/autorouter_presets.test.ts | 17 +++++++++++++++++ 2 files changed, 22 insertions(+), 1 deletion(-) diff --git a/ui/litellm-dashboard/src/autorouter_presets.json b/ui/litellm-dashboard/src/autorouter_presets.json index 41107e88b8c..4cbb548a855 100644 --- a/ui/litellm-dashboard/src/autorouter_presets.json +++ b/ui/litellm-dashboard/src/autorouter_presets.json @@ -36,7 +36,7 @@ }, "lite": { "label": "Lite", - "description": "Cost-optimized routing across providers: DeepSeek V4 Flash for simple queries, Muse Spark 1.2 for medium, Kimi K3 for complex, Claude Opus 5 for reasoning-heavy requests. An LLM classifier with the agentic rubric assigns tiers.", + "description": "Cost-optimized routing across providers: DeepSeek V4 Flash for simple queries, Muse Spark 1.2 at xhigh for medium, Kimi K3 at max for complex, Claude Opus 5 for reasoning. An LLM classifier with the agentic rubric assigns tiers.", "complexity_router_config": { "tiers": { "SIMPLE": ["deepseek-v4-flash"], @@ -44,6 +44,10 @@ "COMPLEX": ["kimi-k3"], "REASONING": ["claude-opus-5"] }, + "tier_model_configs": { + "MEDIUM": [{ "model_name": "muse-spark-1.2", "litellm_params": { "reasoning_effort": "xhigh" } }], + "COMPLEX": [{ "model_name": "kimi-k3", "litellm_params": { "reasoning_effort": "max" } }] + }, "classifier_type": "llm", "classifier_llm_config": { "model": "deepseek-v4-flash", diff --git a/ui/litellm-dashboard/src/lib/autorouter_presets.test.ts b/ui/litellm-dashboard/src/lib/autorouter_presets.test.ts index 02f39c5344c..2de1ac11db2 100644 --- a/ui/litellm-dashboard/src/lib/autorouter_presets.test.ts +++ b/ui/litellm-dashboard/src/lib/autorouter_presets.test.ts @@ -109,6 +109,14 @@ describe("autorouter_presets", () => { }); }); + // Kimi K3 at max needs the map to declare max for kimi-k3, which is the commit below this one. + it("pins the lite preset's per-tier reasoning efforts", () => { + expect(getPresetByKey("lite")!.complexity_router_config.tier_model_configs).toEqual({ + MEDIUM: [{ model_name: "muse-spark-1.2", litellm_params: { reasoning_effort: "xhigh" } }], + COMPLEX: [{ model_name: "kimi-k3", litellm_params: { reasoning_effort: "max" } }], + }); + }); + // serializeTierModelConfigs filters on the tier's models, so a stray name drops silently. it("never names a model in tier_model_configs that its own tier does not hold", () => { for (const preset of getAllPresets()) { @@ -129,6 +137,15 @@ describe("autorouter_presets", () => { }); }); + it("prefills the lite preset's efforts through to tier_model_params", () => { + const lite = getPresetByKey("lite")!; + const prefill = buildPresetPrefill(lite.complexity_router_config, groupsOnly(getRequiredModelsInPreset(lite))); + expect(prefill.complexityRouterConfig.tier_model_params).toEqual({ + MEDIUM: { "muse-spark-1.2": { reasoning_effort: "xhigh" } }, + COMPLEX: { "kimi-k3": { reasoning_effort: "max" } }, + }); + }); + it("pins the gemini preset to concrete model ids, never Google's hot-swapping -latest aliases", () => { const gemini = getPresetByKey("gemini_family")!; const config = gemini.complexity_router_config;