fix: custom models with same ids

This commit is contained in:
rekram1-node 2025-10-10 16:28:48 -05:00
parent 34ec6cc978
commit 09ddffe1b6
2 changed files with 15 additions and 5 deletions

View file

@ -43,6 +43,11 @@ export namespace ModelsDev {
})
export type Model = z.infer<typeof Model>
export const ProviderModel = Model.extend({
providerModelId: z.string().optional(),
})
export type ProviderModel = z.infer<typeof ProviderModel>
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",

View file

@ -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<number, SDK>()
@ -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,