diff --git a/sdk/packages/core/src/services/llms/provider-defaults.test.ts b/sdk/packages/core/src/services/llms/provider-defaults.test.ts index 50d66b9a78..1436116750 100644 --- a/sdk/packages/core/src/services/llms/provider-defaults.test.ts +++ b/sdk/packages/core/src/services/llms/provider-defaults.test.ts @@ -296,6 +296,17 @@ describe("resolveProviderConfig", () => { capabilities: expect.arrayContaining(["images", "reasoning"]), }), ); + expect(resolved?.knownModels?.["private-proxy-model"]).toEqual( + expect.objectContaining({ + name: "private-proxy-model", + capabilities: expect.arrayContaining(["images", "reasoning"]), + }), + ); + expect(Object.keys(resolved?.knownModels ?? {}).sort()).toEqual([ + "openai/gpt-4o-mini", + "private-proxy-model", + ]); + expect(resolved?.knownModels?.["gpt-5.4"]).toBeUndefined(); }); it("reports attempted path, auth header, status, and body for LiteLLM model fetch failures", async () => { diff --git a/sdk/packages/core/src/services/llms/provider-defaults.ts b/sdk/packages/core/src/services/llms/provider-defaults.ts index bfe5ed75ca..ad0360183e 100644 --- a/sdk/packages/core/src/services/llms/provider-defaults.ts +++ b/sdk/packages/core/src/services/llms/provider-defaults.ts @@ -171,6 +171,16 @@ async function mergeKnownModels( ...userKnownModels, }); } + // LiteLLM model access is configured by the user's proxy. When the proxy + // returns a private model list, treat it as the authoritative allowlist so + // the picker does not show bundled OpenAI-compatible catalog entries that the + // proxy may not actually expose. + if (providerId === "litellm" && Object.keys(privateModels).length > 0) { + return Llms.sortModelsByReleaseDate({ + ...privateModels, + ...userKnownModels, + }); + } if (providerId === "openai-codex") { return Llms.sortModelsByReleaseDate({ ...defaultKnownModels,