diff options
| author | Aiden Cline <[email protected]> | 2025-10-13 19:58:19 -0500 |
|---|---|---|
| committer | GitHub <[email protected]> | 2025-10-13 19:58:19 -0500 |
| commit | 682d30bd12a92f475bb2ffce406be01c68e9b5d1 (patch) | |
| tree | 2a47bed59e1d6a8bc67d53784a8b99b19d4f0d02 | |
| parent | 4d68ee5d2c5e288e061ed8db9248f53c34cb791e (diff) | |
| download | opencode-682d30bd12a92f475bb2ffce406be01c68e9b5d1.tar.gz opencode-682d30bd12a92f475bb2ffce406be01c68e9b5d1.zip | |
fix: custom model (#3156)
| -rw-r--r-- | packages/opencode/src/provider/provider.ts | 14 | ||||
| -rw-r--r-- | packages/opencode/src/session/prompt.ts | 10 |
2 files changed, 14 insertions, 10 deletions
diff --git a/packages/opencode/src/provider/provider.ts b/packages/opencode/src/provider/provider.ts index 5631bb6cb..e82314662 100644 --- a/packages/opencode/src/provider/provider.ts +++ b/packages/opencode/src/provider/provider.ts @@ -210,6 +210,8 @@ export namespace Provider { { providerID: string; modelID: string; info: ModelsDev.Model; language: LanguageModel; npm?: string } >() const sdk = new Map<number, SDK>() + // Maps `${provider}/${key}` to the provider’s actual model ID for custom aliases. + const realIdByKey = new Map<string, string>() log.info("init") @@ -253,7 +255,7 @@ 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, + id: modelID, name: model.name ?? existing?.name ?? modelID, release_date: model.release_date ?? existing?.release_date, attachment: model.attachment ?? existing?.attachment ?? false, @@ -290,6 +292,9 @@ export namespace Provider { }, provider: model.provider ?? existing?.provider, } + if (model.id && model.id !== modelID) { + realIdByKey.set(`${providerID}/${modelID}`, model.id) + } parsed.models[modelID] = parsedModel } database[providerID] = parsed @@ -366,6 +371,7 @@ export namespace Provider { models, providers, sdk, + realIdByKey, } }) @@ -436,9 +442,11 @@ export namespace Provider { const sdk = await getSDK(provider.info, info) try { + const keyReal = `${providerID}/${modelID}` + const realID = s.realIdByKey.get(keyReal) ?? info.id const language = provider.getModel - ? await provider.getModel(sdk, modelID, provider.options) - : sdk.languageModel(modelID) + ? await provider.getModel(sdk, realID, provider.options) + : sdk.languageModel(realID) log.info("found", { providerID, modelID }) s.models.set(key, { providerID, diff --git a/packages/opencode/src/session/prompt.ts b/packages/opencode/src/session/prompt.ts index 1caa06744..949eae6b2 100644 --- a/packages/opencode/src/session/prompt.ts +++ b/packages/opencode/src/session/prompt.ts @@ -1305,7 +1305,7 @@ export namespace SessionPrompt { [[ -f ~/.zshenv ]] && source ~/.zshenv >/dev/null 2>&1 || true [[ -f "\${ZDOTDIR:-$HOME}/.zshrc" ]] && source "\${ZDOTDIR:-$HOME}/.zshrc" >/dev/null 2>&1 || true ${input.command} - ` + `, ], }, bash: { @@ -1320,15 +1320,11 @@ export namespace SessionPrompt { }, // Fallback: any shell that doesn't match those above "": { - args: [ - "-c", - "-l", - `${input.command}`, - ], + args: ["-c", "-l", `${input.command}`], }, } - const matchingInvocation = invocations[shellName] ?? invocations[""]; + const matchingInvocation = invocations[shellName] ?? invocations[""] const args = matchingInvocation?.args const proc = spawn(shell, args, { |
