summaryrefslogtreecommitdiffhomepage
diff options
context:
space:
mode:
-rw-r--r--packages/opencode/src/provider/transform.ts14
-rw-r--r--packages/opencode/test/provider/transform.test.ts28
2 files changed, 34 insertions, 8 deletions
diff --git a/packages/opencode/src/provider/transform.ts b/packages/opencode/src/provider/transform.ts
index be06340d6..0eee64466 100644
--- a/packages/opencode/src/provider/transform.ts
+++ b/packages/opencode/src/provider/transform.ts
@@ -683,13 +683,19 @@ export namespace ProviderTransform {
// Handle thinking mode for @ai-sdk/anthropic, @ai-sdk/google-vertex/anthropic (budgetTokens)
// and @ai-sdk/openai-compatible with Claude (budget_tokens)
- if (npm === "@ai-sdk/anthropic" || npm === "@ai-sdk/google-vertex/anthropic" || npm === "@ai-sdk/openai-compatible") {
+ if (
+ npm === "@ai-sdk/anthropic" ||
+ npm === "@ai-sdk/google-vertex/anthropic" ||
+ npm === "@ai-sdk/openai-compatible"
+ ) {
const thinking = options?.["thinking"]
// Support both camelCase (for @ai-sdk/anthropic) and snake_case (for openai-compatible)
const budgetTokens =
- typeof thinking?.["budgetTokens"] === "number" ? thinking["budgetTokens"] :
- typeof thinking?.["budget_tokens"] === "number" ? thinking["budget_tokens"] :
- 0
+ typeof thinking?.["budgetTokens"] === "number"
+ ? thinking["budgetTokens"]
+ : typeof thinking?.["budget_tokens"] === "number"
+ ? thinking["budget_tokens"]
+ : 0
const enabled = thinking?.["type"] === "enabled"
if (enabled && budgetTokens > 0) {
// Return text tokens so that text + thinking <= model cap, preferring 32k text when possible.
diff --git a/packages/opencode/test/provider/transform.test.ts b/packages/opencode/test/provider/transform.test.ts
index 22d1a7070..b1e0c9a61 100644
--- a/packages/opencode/test/provider/transform.test.ts
+++ b/packages/opencode/test/provider/transform.test.ts
@@ -277,7 +277,12 @@ describe("ProviderTransform.maxOutputTokens", () => {
budget_tokens: 10000,
},
}
- const result = ProviderTransform.maxOutputTokens("@ai-sdk/openai-compatible", options, modelLimit, OUTPUT_TOKEN_MAX)
+ const result = ProviderTransform.maxOutputTokens(
+ "@ai-sdk/openai-compatible",
+ options,
+ modelLimit,
+ OUTPUT_TOKEN_MAX,
+ )
expect(result).toBe(OUTPUT_TOKEN_MAX)
})
@@ -289,7 +294,12 @@ describe("ProviderTransform.maxOutputTokens", () => {
budget_tokens: 30000,
},
}
- const result = ProviderTransform.maxOutputTokens("@ai-sdk/openai-compatible", options, modelLimit, OUTPUT_TOKEN_MAX)
+ const result = ProviderTransform.maxOutputTokens(
+ "@ai-sdk/openai-compatible",
+ options,
+ modelLimit,
+ OUTPUT_TOKEN_MAX,
+ )
expect(result).toBe(20000)
})
@@ -301,7 +311,12 @@ describe("ProviderTransform.maxOutputTokens", () => {
budget_tokens: 10000,
},
}
- const result = ProviderTransform.maxOutputTokens("@ai-sdk/openai-compatible", options, modelLimit, OUTPUT_TOKEN_MAX)
+ const result = ProviderTransform.maxOutputTokens(
+ "@ai-sdk/openai-compatible",
+ options,
+ modelLimit,
+ OUTPUT_TOKEN_MAX,
+ )
expect(result).toBe(OUTPUT_TOKEN_MAX)
})
@@ -313,7 +328,12 @@ describe("ProviderTransform.maxOutputTokens", () => {
budget_tokens: 0,
},
}
- const result = ProviderTransform.maxOutputTokens("@ai-sdk/openai-compatible", options, modelLimit, OUTPUT_TOKEN_MAX)
+ const result = ProviderTransform.maxOutputTokens(
+ "@ai-sdk/openai-compatible",
+ options,
+ modelLimit,
+ OUTPUT_TOKEN_MAX,
+ )
expect(result).toBe(OUTPUT_TOKEN_MAX)
})
})