From 09ddffe1b6ca121c1010c78c363e41a7db6ef135 Mon Sep 17 00:00:00 2001 From: rekram1-node Date: Fri, 10 Oct 2025 16:28:48 -0500 Subject: [PATCH] fix: custom models with same ids --- packages/opencode/src/provider/models.ts | 7 ++++++- packages/opencode/src/provider/provider.ts | 13 +++++++++---- 2 files changed, 15 insertions(+), 5 deletions(-) diff --git a/packages/opencode/src/provider/models.ts b/packages/opencode/src/provider/models.ts index 97310dd19..792b70a37 100644 --- a/packages/opencode/src/provider/models.ts +++ b/packages/opencode/src/provider/models.ts @@ -43,6 +43,11 @@ export namespace ModelsDev { }) export type Model = z.infer + export const ProviderModel = Model.extend({ + providerModelId: z.string().optional(), + }) + export type ProviderModel = z.infer + export const Provider = z .object({ api: z.string().optional(), @@ -50,7 +55,7 @@ export namespace ModelsDev { env: z.array(z.string()), id: z.string(), npm: z.string().optional(), - models: z.record(z.string(), Model), + models: z.record(z.string(), ProviderModel), }) .meta({ ref: "Provider", diff --git a/packages/opencode/src/provider/provider.ts b/packages/opencode/src/provider/provider.ts index e0fe4be23..de1628212 100644 --- a/packages/opencode/src/provider/provider.ts +++ b/packages/opencode/src/provider/provider.ts @@ -203,7 +203,7 @@ export namespace Provider { } = {} const models = new Map< string, - { providerID: string; modelID: string; info: ModelsDev.Model; language: LanguageModel; npm?: string } + { providerID: string; modelID: string; info: ModelsDev.ProviderModel; language: LanguageModel; npm?: string } >() const sdk = new Map() @@ -248,8 +248,10 @@ export namespace Provider { for (const [modelID, model] of Object.entries(provider.models ?? {})) { const existing = parsed.models[modelID] - const parsedModel: ModelsDev.Model = { - id: model.id ?? modelID, + // "modelID" stays user-facing; "providerModelId" keeps the provider's canonical identifier. + const parsedModel: ModelsDev.ProviderModel = { + providerModelId: model.id, + id: modelID, name: model.name ?? existing?.name ?? modelID, release_date: model.release_date ?? existing?.release_date, attachment: model.attachment ?? existing?.attachment ?? false, @@ -432,7 +434,10 @@ export namespace Provider { const sdk = await getSDK(provider.info, info) try { - const language = provider.getModel ? await provider.getModel(sdk, modelID) : sdk.languageModel(modelID) + const resolvedModelId = info.providerModelId ?? modelID + const language = provider.getModel + ? await provider.getModel(sdk, resolvedModelId) + : sdk.languageModel(resolvedModelId) log.info("found", { providerID, modelID }) s.models.set(key, { providerID,