summaryrefslogtreecommitdiffhomepage
diff options
context:
space:
mode:
authorAiden Cline <[email protected]>2025-10-13 19:58:19 -0500
committerGitHub <[email protected]>2025-10-13 19:58:19 -0500
commit682d30bd12a92f475bb2ffce406be01c68e9b5d1 (patch)
tree2a47bed59e1d6a8bc67d53784a8b99b19d4f0d02
parent4d68ee5d2c5e288e061ed8db9248f53c34cb791e (diff)
downloadopencode-682d30bd12a92f475bb2ffce406be01c68e9b5d1.tar.gz
opencode-682d30bd12a92f475bb2ffce406be01c68e9b5d1.zip
fix: custom model (#3156)
-rw-r--r--packages/opencode/src/provider/provider.ts14
-rw-r--r--packages/opencode/src/session/prompt.ts10
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, {