summaryrefslogtreecommitdiffhomepage
diff options
context:
space:
mode:
authorSewer. <[email protected]>2026-05-01 00:05:56 +0100
committerGitHub <[email protected]>2026-04-30 18:05:56 -0500
commita12333310f795b92d524634d7b9e2daab8909dfc (patch)
treea5a158cd3d20b5773a29dd81e1c0afa0c5bc11cf
parent247284b9af5b8dae84ef4746163badef863c9230 (diff)
downloadopencode-a12333310f795b92d524634d7b9e2daab8909dfc.tar.gz
opencode-a12333310f795b92d524634d7b9e2daab8909dfc.zip
fix(provider): split providerOptions key on dot for openai-compatible, openai, and anthropic providers (#25145)
-rw-r--r--packages/opencode/src/provider/transform.ts15
1 files changed, 14 insertions, 1 deletions
diff --git a/packages/opencode/src/provider/transform.ts b/packages/opencode/src/provider/transform.ts
index d47d1fe76..d97e9cb87 100644
--- a/packages/opencode/src/provider/transform.ts
+++ b/packages/opencode/src/provider/transform.ts
@@ -1058,7 +1058,20 @@ export function providerOptions(model: Provider.Model, options: { [x: string]: a
return result
}
- const key = sdkKey(model.api.npm) ?? model.providerID
+ // AI SDK packages that resolve providerOptionsName by splitting the
+ // provider name on "." (e.g. "wafer.ai" -> "wafer") need the same
+ // logic here so the key we write matches the key they read.
+ // Other SDKs (xai, mistral, groq, cohere, etc.) use hardcoded keys
+ // like "xai" or "cohere" - applying .split(".")[0] would break those.
+ const usesDotSplitOptions =
+ model.api.npm === "@ai-sdk/openai-compatible" ||
+ model.api.npm === "@ai-sdk/openai" ||
+ model.api.npm === "@ai-sdk/anthropic"
+ const key =
+ sdkKey(model.api.npm) ??
+ (usesDotSplitOptions
+ ? model.providerID.split(".")[0]
+ : model.providerID)
// @ai-sdk/azure delegates to OpenAIChatLanguageModel which reads from
// providerOptions["openai"], but OpenAIResponsesLanguageModel checks
// "azure" first. Pass both so model options work on either code path.