From 8e5a3993a7a858520bba4b05d4fddc6cb9d3c1e5 Mon Sep 17 00:00:00 2001 From: Saoud Rizwan <7799382+saoudrizwan@users.noreply.github.com> Date: Tue, 23 Jun 2026 21:08:21 -0700 Subject: [PATCH] fix(vscode): keep model metadata out of provider settings (#11772) * fix(vscode): keep model metadata out of provider settings * fix(vscode): prune stale provider model metadata * docs(vscode): explain provider metadata pruning --- apps/vscode/src/sdk/model-catalog/store.test.ts | 14 +++++++++----- apps/vscode/src/sdk/model-catalog/store.ts | 11 +++-------- 2 files changed, 12 insertions(+), 13 deletions(-) diff --git a/apps/vscode/src/sdk/model-catalog/store.test.ts b/apps/vscode/src/sdk/model-catalog/store.test.ts index c05d17bd42..e15fd24278 100644 --- a/apps/vscode/src/sdk/model-catalog/store.test.ts +++ b/apps/vscode/src/sdk/model-catalog/store.test.ts @@ -232,15 +232,17 @@ describe("createProviderConfigStore", () => { expect(mocks.getSavedProviderSettings("openrouter")).toMatchObject({ provider: "openrouter", model: "provider/model-b", - contextWindow: 64_000, - maxTokens: 4_096, }) + expect(mocks.getSavedProviderSettings("openrouter")).not.toHaveProperty("contextWindow") + expect(mocks.getSavedProviderSettings("openrouter")).not.toHaveProperty("maxTokens") }) it("updates providers.json model with setLastUsed false when planActSeparateModelsSetting=false", async () => { const { createProviderConfigStore } = await import("./store") mocks.setApiConfiguration({ planActSeparateModelsSetting: false }) - mocks.setProviderSettings({ openrouter: { provider: "openrouter", apiKey: "existing-key" } }) + mocks.setProviderSettings({ + openrouter: { provider: "openrouter", apiKey: "existing-key", contextWindow: 64_000, maxTokens: 4_096 }, + }) const store = createProviderConfigStore() const providerId = parseProviderId("openrouter") const selection = { providerId, modelId: "provider/model-a", modelInfo: modelInfoA } @@ -252,6 +254,8 @@ describe("createProviderConfigStore", () => { apiKey: "existing-key", model: "provider/model-a", }) + expect(mocks.getSavedProviderSettings("openrouter")).not.toHaveProperty("contextWindow") + expect(mocks.getSavedProviderSettings("openrouter")).not.toHaveProperty("maxTokens") expect(mocks.getSaveProviderSettingsMock()).toHaveBeenCalledWith(expect.objectContaining({ model: "provider/model-a" }), { setLastUsed: false, }) @@ -268,9 +272,9 @@ describe("createProviderConfigStore", () => { expect(mocks.getSavedProviderSettings("claude-code")).toMatchObject({ provider: "claude-code", model: "haiku", - contextWindow: 128_000, - maxTokens: 8_192, }) + expect(mocks.getSavedProviderSettings("claude-code")).not.toHaveProperty("contextWindow") + expect(mocks.getSavedProviderSettings("claude-code")).not.toHaveProperty("maxTokens") expect(mocks.getSaveProviderSettingsMock()).toHaveBeenCalledWith(expect.objectContaining({ model: "haiku" }), { setLastUsed: false, }) diff --git a/apps/vscode/src/sdk/model-catalog/store.ts b/apps/vscode/src/sdk/model-catalog/store.ts index 12e238b612..638fc70578 100644 --- a/apps/vscode/src/sdk/model-catalog/store.ts +++ b/apps/vscode/src/sdk/model-catalog/store.ts @@ -399,14 +399,9 @@ function writeSelectionToState(providerId: ProviderId, mode: Mode, selection: Mo function writeSelectionToProviderSettings(providerId: ProviderId, selection: ModelSelection): void { const next: ProviderSettingsRecord = { ...getProviderSettings(providerId), model: selection.modelId } - - if (selection.modelInfo.contextWindow !== undefined && selection.modelInfo.contextWindow > 0) { - next.contextWindow = selection.modelInfo.contextWindow - } - - if (selection.modelInfo.maxTokens !== undefined && selection.modelInfo.maxTokens > 0) { - next.maxTokens = selection.modelInfo.maxTokens - } + // Prune model metadata that earlier builds may have written to providers.json. + delete next.contextWindow + delete next.maxTokens saveProviderSettings(providerId, next) }