summaryrefslogtreecommitdiffhomepage
diff options
context:
space:
mode:
authorNacho F. Lizaur <[email protected]>2026-02-06 18:18:57 +0100
committerGitHub <[email protected]>2026-02-06 11:18:57 -0600
commit18749c1f4ecf1c5cb361d1735aa84d730f9a25c0 (patch)
treebef5f410b96153b49b8be06a118d45420af9ddbf
parent9497cfdf455a3b57b837ddead1cc6b4b5bf5ff01 (diff)
downloadopencode-18749c1f4ecf1c5cb361d1735aa84d730f9a25c0.tar.gz
opencode-18749c1f4ecf1c5cb361d1735aa84d730f9a25c0.zip
fix(opencode): correct prefix selection for amazon-bedrock provider in getSmallModel (#12281)
-rw-r--r--packages/opencode/src/provider/provider.ts28
1 files changed, 26 insertions, 2 deletions
diff --git a/packages/opencode/src/provider/provider.ts b/packages/opencode/src/provider/provider.ts
index 614d4ec14..5da273fea 100644
--- a/packages/opencode/src/provider/provider.ts
+++ b/packages/opencode/src/provider/provider.ts
@@ -1171,8 +1171,32 @@ export namespace Provider {
priority = ["gpt-5-mini", "claude-haiku-4.5", ...priority]
}
for (const item of priority) {
- for (const model of Object.keys(provider.models)) {
- if (model.includes(item)) return getModel(providerID, model)
+ if (providerID === "amazon-bedrock") {
+ const crossRegionPrefixes = ["global.", "us.", "eu."]
+ const candidates = Object.keys(provider.models).filter(m => m.includes(item))
+
+ // Model selection priority:
+ // 1. global. prefix (works everywhere)
+ // 2. User's region prefix (us., eu.)
+ // 3. Unprefixed model
+ const globalMatch = candidates.find(m => m.startsWith("global."))
+ if (globalMatch) return getModel(providerID, globalMatch)
+
+ const region = provider.options?.region
+ if (region) {
+ const regionPrefix = region.split("-")[0]
+ if (regionPrefix === "us" || regionPrefix === "eu") {
+ const regionalMatch = candidates.find(m => m.startsWith(`${regionPrefix}.`))
+ if (regionalMatch) return getModel(providerID, regionalMatch)
+ }
+ }
+
+ const unprefixed = candidates.find(m => !crossRegionPrefixes.some(p => m.startsWith(p)))
+ if (unprefixed) return getModel(providerID, unprefixed)
+ } else {
+ for (const model of Object.keys(provider.models)) {
+ if (model.includes(item)) return getModel(providerID, model)
+ }
}
}
}