From 6721ff532817f5f4da01f35254cd4db437b9c8bc Mon Sep 17 00:00:00 2001 From: "opencode-agent[bot]" <219766164+opencode-agent[bot]@users.noreply.github.com> Date: Tue, 11 Aug 2026 10:17:04 -0500 Subject: [PATCH] fix(core): omit deprecated models.dev models (#41769) Co-authored-by: Aiden Cline --- packages/core/src/plugin/models-dev.ts | 1 + packages/core/test/plugin/models-dev.test.ts | 60 ++++++++++++++++++++ 2 files changed, 61 insertions(+) diff --git a/packages/core/src/plugin/models-dev.ts b/packages/core/src/plugin/models-dev.ts index 6379a91657..d557c0a489 100644 --- a/packages/core/src/plugin/models-dev.ts +++ b/packages/core/src/plugin/models-dev.ts @@ -36,6 +36,7 @@ export const ModelsDevPlugin = define({ draft.integrationID = Integration.ID.make(provider.info.id) }) for (const model of provider.models) { + if (model.status === "deprecated") continue catalog.model.update(provider.info.id, model.id, (draft) => Object.assign(draft, model)) } } diff --git a/packages/core/test/plugin/models-dev.test.ts b/packages/core/test/plugin/models-dev.test.ts index 9fe3d7f761..e864c96be5 100644 --- a/packages/core/test/plugin/models-dev.test.ts +++ b/packages/core/test/plugin/models-dev.test.ts @@ -215,6 +215,66 @@ describe("ModelsDevPlugin", () => { }), ) + it.effect("omits deprecated models from the catalog", () => + Effect.gen(function* () { + const integrations = yield* Integration.Service + const catalog = yield* Catalog.Service + const providerID = Provider.ID.make("acme") + const activeID = Model.ID.make("current") + const deprecatedID = Model.ID.make("legacy") + const model = { + modelID: activeID, + providerID, + name: "Current", + capabilities: { tools: true, input: [], output: [] }, + variants: [], + time: { released: Date.parse("2026-01-01") }, + cost: [], + status: "active", + enabled: true, + limit: { context: 128_000, output: 32_000 }, + } satisfies Omit + const snapshots = [ + { + info: { + id: providerID, + name: "Acme", + package: Provider.aisdk("@ai-sdk/openai-compatible"), + }, + environment: [], + models: [ + { id: activeID, ...model }, + { + id: deprecatedID, + ...model, + modelID: deprecatedID, + name: "Legacy", + status: "deprecated" as const, + }, + ], + }, + ] satisfies readonly ModelsDev.Snapshot[] + + yield* ModelsDevPlugin.effect( + host({ + catalog: catalogHost(catalog), + integration: integrationHost(integrations), + }), + ).pipe( + Effect.provideService( + ModelsDev.Service, + ModelsDev.Service.of({ + get: () => Effect.succeed(snapshots), + refresh: () => Effect.void, + }), + ), + ) + + expect(yield* catalog.model.get(providerID, activeID)).toBeDefined() + expect(yield* catalog.model.get(providerID, deprecatedID)).toBeUndefined() + }), + ) + it.effect("registers key methods for providers with environment variables", () => Effect.gen(function* () { const integrations = yield* Integration.Service