From 683c0285530fe641b96f8cea401be03de1f18a00 Mon Sep 17 00:00:00 2001 From: ShionElia Date: Wed, 18 Mar 2026 15:19:12 +0000 Subject: [PATCH] fix: preserve qualified provider prefix in Control UI model selector When sessions report an already-qualified model id (e.g. ollama/qwen3:30b), resolveServerChatModelValue was re-qualifying it using modelProvider, producing incorrect values like openai-codex/qwen3:30b. Preserve already-qualified model refs as-is before applying provider prefix. Adds test coverage for qualified model preservation. Fixes #49839 --- ui/src/ui/chat-model-ref.test.ts | 6 ++++++ ui/src/ui/chat-model-ref.ts | 5 +++++ 2 files changed, 11 insertions(+) diff --git a/ui/src/ui/chat-model-ref.test.ts b/ui/src/ui/chat-model-ref.test.ts index a0ec9d749b8..4e26a913c14 100644 --- a/ui/src/ui/chat-model-ref.test.ts +++ b/ui/src/ui/chat-model-ref.test.ts @@ -29,6 +29,12 @@ describe("chat-model-ref helpers", () => { }); }); + it("preserves already-qualified model refs without prepending provider", () => { + expect(resolveServerChatModelValue("ollama/qwen3:30b", "openai-codex")).toBe( + "ollama/qwen3:30b", + ); + }); + it("normalizes raw overrides when the catalog match is unique", () => { expect(normalizeChatModelOverrideValue(createChatModelOverride("gpt-5-mini"), catalog)).toBe( "openai/gpt-5-mini", diff --git a/ui/src/ui/chat-model-ref.ts b/ui/src/ui/chat-model-ref.ts index 7b54ec5e2b0..deb819fa8e3 100644 --- a/ui/src/ui/chat-model-ref.ts +++ b/ui/src/ui/chat-model-ref.ts @@ -25,6 +25,11 @@ export function buildQualifiedChatModelValue(model: string, provider?: string | if (!trimmedModel) { return ""; } + // Preserve already-qualified model refs (provider/model) as-is. + // This avoids prepending an unrelated/default provider. + if (trimmedModel.includes("/")) { + return trimmedModel; + } const trimmedProvider = provider?.trim(); return trimmedProvider ? `${trimmedProvider}/${trimmedModel}` : trimmedModel; }