From d842fd0d8ee69fba1ea26fc13551713417fc07f1 Mon Sep 17 00:00:00 2001 From: Luca Steeb Date: Sat, 28 Mar 2026 13:30:57 +0700 Subject: [PATCH 1/3] fix: enable Alibaba DeepSeek v3.2 thinking --- .../actions/src/prepare-request-body.spec.ts | 30 ++++++++++ packages/actions/src/prepare-request-body.ts | 57 +++++++++++++++++++ packages/models/src/models/deepseek.ts | 4 +- 3 files changed, 90 insertions(+), 1 deletion(-) diff --git a/packages/actions/src/prepare-request-body.spec.ts b/packages/actions/src/prepare-request-body.spec.ts index f0acbdb36..3d0a2cecc 100644 --- a/packages/actions/src/prepare-request-body.spec.ts +++ b/packages/actions/src/prepare-request-body.spec.ts @@ -662,6 +662,36 @@ describe("prepareRequestBody - Google AI Studio", () => { }); }); +describe("prepareRequestBody - Alibaba", () => { + test("should enable thinking for Alibaba DeepSeek v3.2 when reasoning is requested", async () => { + const requestBody = (await prepareRequestBody( + "alibaba", + "deepseek-v3.2", + [{ role: "user", content: "Solve this carefully" }], + false, + undefined, + undefined, + undefined, + undefined, + undefined, + undefined, + undefined, + undefined, + "medium", + true, + false, + )) as unknown as { + enable_thinking?: boolean; + thinking_budget?: number; + reasoning_effort?: string; + }; + + expect(requestBody.enable_thinking).toBe(true); + expect(requestBody.thinking_budget).toBe(8192); + expect(requestBody).not.toHaveProperty("reasoning_effort"); + }); +}); + describe("prepareRequestBody - AWS Bedrock", () => { test("should sanitize complex tool schemas for Bedrock Converse", async () => { const requestBody = (await prepareRequestBody( diff --git a/packages/actions/src/prepare-request-body.ts b/packages/actions/src/prepare-request-body.ts index 08ee36e26..72d0ee47e 100644 --- a/packages/actions/src/prepare-request-body.ts +++ b/packages/actions/src/prepare-request-body.ts @@ -1878,6 +1878,63 @@ export async function prepareRequestBody( } break; } + case "alibaba": { + if (stream) { + requestBody.stream_options = { + include_usage: true, + }; + } + if (response_format) { + requestBody.response_format = response_format; + } + + if (temperature !== undefined) { + requestBody.temperature = temperature; + } + if (max_tokens !== undefined) { + requestBody.max_tokens = max_tokens; + } + if (top_p !== undefined) { + requestBody.top_p = top_p; + } + if (frequency_penalty !== undefined) { + requestBody.frequency_penalty = frequency_penalty; + } + if (presence_penalty !== undefined) { + requestBody.presence_penalty = presence_penalty; + } + + if ( + usedModel === "deepseek-v3.2" && + supportsReasoning && + (reasoning_effort !== undefined || reasoning_max_tokens !== undefined) + ) { + requestBody.enable_thinking = true; + + if (reasoning_max_tokens !== undefined) { + requestBody.thinking_budget = Math.min(reasoning_max_tokens, 32768); + } else if (reasoning_effort !== undefined) { + const getThinkingBudget = (effort: string) => { + switch (effort) { + case "minimal": + return 512; + case "low": + return 2048; + case "high": + return 24576; + case "xhigh": + return 32768; + case "medium": + default: + return 8192; + } + }; + + requestBody.thinking_budget = getThinkingBudget(reasoning_effort); + } + } + break; + } default: { if (stream) { requestBody.stream_options = { diff --git a/packages/models/src/models/deepseek.ts b/packages/models/src/models/deepseek.ts index 0a7078b7d..a45c5709e 100644 --- a/packages/models/src/models/deepseek.ts +++ b/packages/models/src/models/deepseek.ts @@ -181,12 +181,14 @@ export const deepseekModels = [ inputPrice: 0.287 / 1e6, cachedInputPrice: 0.0574 / 1e6, outputPrice: 0.431 / 1e6, + contextSize: 131072, + maxOutput: 65536, }, ], requestPrice: 0, contextSize: 131072, maxOutput: 65536, - reasoning: false, + reasoning: true, streaming: true, vision: false, tools: true, From a4da70e880b97f3cecbf093424cc8eb7b079c235 Mon Sep 17 00:00:00 2001 From: Luca Steeb Date: Sat, 28 Mar 2026 13:51:38 +0700 Subject: [PATCH 2/3] refactor: remove duplicated DeepSeek region caps --- packages/models/src/models/deepseek.ts | 2 -- 1 file changed, 2 deletions(-) diff --git a/packages/models/src/models/deepseek.ts b/packages/models/src/models/deepseek.ts index a45c5709e..8302c5d45 100644 --- a/packages/models/src/models/deepseek.ts +++ b/packages/models/src/models/deepseek.ts @@ -181,8 +181,6 @@ export const deepseekModels = [ inputPrice: 0.287 / 1e6, cachedInputPrice: 0.0574 / 1e6, outputPrice: 0.431 / 1e6, - contextSize: 131072, - maxOutput: 65536, }, ], requestPrice: 0, From 807ebfd7fe175bbfd46c9eedeed634c9e57c1e01 Mon Sep 17 00:00:00 2001 From: Luca Steeb Date: Sat, 28 Mar 2026 16:21:57 +0700 Subject: [PATCH 3/3] fix: preserve Alibaba reasoning effort --- .../actions/src/prepare-request-body.spec.ts | 26 +++++++++++++++++++ packages/actions/src/prepare-request-body.ts | 2 ++ 2 files changed, 28 insertions(+) diff --git a/packages/actions/src/prepare-request-body.spec.ts b/packages/actions/src/prepare-request-body.spec.ts index 3d0a2cecc..9acab2fb5 100644 --- a/packages/actions/src/prepare-request-body.spec.ts +++ b/packages/actions/src/prepare-request-body.spec.ts @@ -690,6 +690,32 @@ describe("prepareRequestBody - Alibaba", () => { expect(requestBody.thinking_budget).toBe(8192); expect(requestBody).not.toHaveProperty("reasoning_effort"); }); + + test("should preserve reasoning_effort for non-DeepSeek Alibaba models", async () => { + const requestBody = (await prepareRequestBody( + "alibaba", + "qwen3-vl-235b-a22b-thinking", + [{ role: "user", content: "Solve this carefully" }], + false, + undefined, + undefined, + undefined, + undefined, + undefined, + undefined, + undefined, + undefined, + "high", + true, + false, + )) as unknown as { + enable_thinking?: boolean; + reasoning_effort?: string; + }; + + expect(requestBody.reasoning_effort).toBe("high"); + expect(requestBody).not.toHaveProperty("enable_thinking"); + }); }); describe("prepareRequestBody - AWS Bedrock", () => { diff --git a/packages/actions/src/prepare-request-body.ts b/packages/actions/src/prepare-request-body.ts index 72d0ee47e..aa6e3234f 100644 --- a/packages/actions/src/prepare-request-body.ts +++ b/packages/actions/src/prepare-request-body.ts @@ -1932,6 +1932,8 @@ export async function prepareRequestBody( requestBody.thinking_budget = getThinkingBudget(reasoning_effort); } + } else if (reasoning_effort !== undefined) { + requestBody.reasoning_effort = reasoning_effort; } break; }