diff --git a/.changeset/compact-model-trigger-label.md b/.changeset/compact-model-trigger-label.md new file mode 100644 index 0000000000..c15c4ac38a --- /dev/null +++ b/.changeset/compact-model-trigger-label.md @@ -0,0 +1,5 @@ +--- +"kilo-code": patch +--- + +Keep provider names out of the compact prompt model selector label while retaining them in the expanded picker. diff --git a/packages/kilo-vscode/tests/unit/model-selector-utils.test.ts b/packages/kilo-vscode/tests/unit/model-selector-utils.test.ts index 59956de5ef..2f204ed9a1 100644 --- a/packages/kilo-vscode/tests/unit/model-selector-utils.test.ts +++ b/packages/kilo-vscode/tests/unit/model-selector-utils.test.ts @@ -255,69 +255,67 @@ describe("hasByok", () => { describe("buildTriggerLabel", () => { it("returns resolved model name for non-kilo provider unchanged", () => { - expect(buildTriggerLabel("GPT-4o", "openai", undefined, null, false, "", true, labels)).toBe("GPT-4o") + expect(buildTriggerLabel("GPT-4o", "openai", null, false, "", true, labels)).toBe("GPT-4o") }) it("strips sub-provider prefix from resolved name for kilo gateway models", () => { - expect( - buildTriggerLabel("Anthropic: Claude Sonnet", KILO_GATEWAY_ID, undefined, null, false, "", true, labels), - ).toBe("Claude Sonnet") + expect(buildTriggerLabel("Anthropic: Claude Sonnet", KILO_GATEWAY_ID, null, false, "", true, labels)).toBe( + "Claude Sonnet", + ) }) it("does not strip prefix for non-kilo provider even if name contains ': '", () => { - expect(buildTriggerLabel("Anthropic: Claude Sonnet", "anthropic", undefined, null, false, "", true, labels)).toBe( + expect(buildTriggerLabel("Anthropic: Claude Sonnet", "anthropic", null, false, "", true, labels)).toBe( "Anthropic: Claude Sonnet", ) }) it("returns resolved name as-is when providerID is undefined", () => { - expect(buildTriggerLabel("GPT-4o", undefined, undefined, null, false, "", true, labels)).toBe("GPT-4o") + expect(buildTriggerLabel("GPT-4o", undefined, null, false, "", true, labels)).toBe("GPT-4o") }) - it("returns providerName / resolvedName for non-kilo provider with providerName", () => { - expect(buildTriggerLabel("GPT-4o", "openai", "OpenAI", null, false, "", true, labels)).toBe("OpenAI / GPT-4o") + it("does not add provider name to the compact label", () => { + expect(buildTriggerLabel("GPT-5.6 Luna", "openai", null, false, "", true, labels)).toBe("GPT-5.6 Luna") }) it("returns modelID for kilo gateway raw selection", () => { const raw = { providerID: "kilo", modelID: "kilo-auto/frontier" } - expect(buildTriggerLabel(undefined, undefined, undefined, raw, false, "", true, labels)).toBe("kilo-auto/frontier") + expect(buildTriggerLabel(undefined, undefined, raw, false, "", true, labels)).toBe("kilo-auto/frontier") }) it("returns providerID / modelID for non-kilo raw selection", () => { const raw = { providerID: "anthropic", modelID: "claude-3-5-sonnet" } - expect(buildTriggerLabel(undefined, undefined, undefined, raw, false, "", true, labels)).toBe( - "anthropic / claude-3-5-sonnet", - ) + expect(buildTriggerLabel(undefined, undefined, raw, false, "", true, labels)).toBe("anthropic / claude-3-5-sonnet") }) it("returns clearLabel when allowClear and no selection", () => { - expect(buildTriggerLabel(undefined, undefined, undefined, null, true, "None", true, labels)).toBe("None") + expect(buildTriggerLabel(undefined, undefined, null, true, "None", true, labels)).toBe("None") }) it("falls back to labels.notSet when allowClear and clearLabel is empty", () => { - expect(buildTriggerLabel(undefined, undefined, undefined, null, true, "", true, labels)).toBe("Not set") + expect(buildTriggerLabel(undefined, undefined, null, true, "", true, labels)).toBe("Not set") }) it("returns labels.select when providers exist and no selection", () => { - expect(buildTriggerLabel(undefined, undefined, undefined, null, false, "", true, labels)).toBe("Select model") + expect(buildTriggerLabel(undefined, undefined, null, false, "", true, labels)).toBe("Select model") }) it("returns labels.noProviders when no providers available", () => { - expect(buildTriggerLabel(undefined, undefined, undefined, null, false, "", false, labels)).toBe("No providers") + expect(buildTriggerLabel(undefined, undefined, null, false, "", false, labels)).toBe("No providers") }) it("prefers resolvedName over raw selection", () => { const raw = { providerID: "anthropic", modelID: "claude-3-5-sonnet" } - expect(buildTriggerLabel("Claude Sonnet", undefined, undefined, raw, false, "", true, labels)).toBe("Claude Sonnet") + expect(buildTriggerLabel("Claude Sonnet", undefined, raw, false, "", true, labels)).toBe("Claude Sonnet") }) it("ignores partial raw selection (only providerID)", () => { const raw = { providerID: "anthropic", modelID: "" } - expect(buildTriggerLabel(undefined, undefined, undefined, raw, false, "", true, labels)).toBe("Select model") + expect(buildTriggerLabel(undefined, undefined, raw, false, "", true, labels)).toBe("Select model") }) it("ignores partial raw selection (only modelID)", () => { const raw = { providerID: "", modelID: "claude-3-5-sonnet" } - expect(buildTriggerLabel(undefined, undefined, undefined, raw, false, "", true, labels)).toBe("Select model") + expect(buildTriggerLabel(undefined, undefined, raw, false, "", true, labels)).toBe("Select model") }) }) diff --git a/packages/kilo-vscode/webview-ui/src/components/shared/ModelSelector.tsx b/packages/kilo-vscode/webview-ui/src/components/shared/ModelSelector.tsx index 74e43dff55..617e69038f 100644 --- a/packages/kilo-vscode/webview-ui/src/components/shared/ModelSelector.tsx +++ b/packages/kilo-vscode/webview-ui/src/components/shared/ModelSelector.tsx @@ -776,7 +776,6 @@ export const ModelSelectorBase: Component = (props) => { buildTriggerLabel( activeModel()?.name, activeModel()?.providerID, - activeModel()?.providerName, props.value, props.allowClear ?? false, props.clearLabel ?? "", diff --git a/packages/kilo-vscode/webview-ui/src/components/shared/model-selector-utils.ts b/packages/kilo-vscode/webview-ui/src/components/shared/model-selector-utils.ts index 80d70c9cf8..36d09cf68c 100644 --- a/packages/kilo-vscode/webview-ui/src/components/shared/model-selector-utils.ts +++ b/packages/kilo-vscode/webview-ui/src/components/shared/model-selector-utils.ts @@ -216,7 +216,6 @@ export function stripSubProviderPrefix(name: string): string { export function buildTriggerLabel( resolvedName: string | undefined, providerID: string | undefined, - providerName: string | undefined, raw: ModelSelection | null, allowClear: boolean, clearLabel: string, @@ -225,7 +224,6 @@ export function buildTriggerLabel( ): string { if (resolvedName) { if (providerID === KILO_GATEWAY_ID) return stripSubProviderPrefix(resolvedName) - if (providerName) return `${providerName} / ${resolvedName}` return resolvedName } if (raw?.providerID && raw?.modelID) {