From 437c6215f2dd6ec7da1f1ff257e5e71154eb95f6 Mon Sep 17 00:00:00 2001 From: Quang Huy Date: Wed, 12 Aug 2026 12:21:12 +0700 Subject: [PATCH] feat(provider): add none reasoning variant for DeepSeek V4 --- packages/opencode/src/provider/transform.ts | 10 ++++++++++ packages/opencode/test/provider/transform.test.ts | 14 ++++++++++++++ 2 files changed, 24 insertions(+) diff --git a/packages/opencode/src/provider/transform.ts b/packages/opencode/src/provider/transform.ts index 4a2738e875ee..8e9da54c21df 100644 --- a/packages/opencode/src/provider/transform.ts +++ b/packages/opencode/src/provider/transform.ts @@ -1656,6 +1656,16 @@ export function reasoningVariants(model: ModelsDev.Model, target: Provider.Model if (options === undefined) return if (options.length === 0) return {} + // DeepSeek V4 exposes a thinking toggle; `reasoning_effort: "none"` turns it + // off. Add a `none` variant alongside its effort tiers so thinking can be + // disabled from the model variants menu. + if (target.api.id.toLowerCase().includes("deepseek-v4")) { + return nonEmptyVariants({ + none: { reasoningEffort: "none" }, + ...effortVariants(target, options.find((option) => option.type === "effort")?.values ?? []), + }) + } + const effort = options.find((option) => option.type === "effort") if (effort) return effortVariants(target, effort.values) diff --git a/packages/opencode/test/provider/transform.test.ts b/packages/opencode/test/provider/transform.test.ts index d1e437642e65..b22d39a301a9 100644 --- a/packages/opencode/test/provider/transform.test.ts +++ b/packages/opencode/test/provider/transform.test.ts @@ -3378,6 +3378,20 @@ describe("ProviderTransform.reasoningVariants", () => { ) }) + test("adds a none variant to disable thinking for DeepSeek V4", () => { + expect( + ProviderTransform.reasoningVariants( + model([{ type: "toggle" }, { type: "effort", values: ["low", "high", "max"] }]), + target("@ai-sdk/openai-compatible", "deepseek-v4-flash"), + ), + ).toEqual({ + none: { reasoningEffort: "none" }, + low: { reasoningEffort: "low" }, + high: { reasoningEffort: "high" }, + max: { reasoningEffort: "max" }, + }) + }) + test("combines effort with extended thinking for Claude Opus 4.5", () => { expect( ProviderTransform.reasoningVariants(