From f277da508ffed5ec09a6d09c8d86f21c4a695bb2 Mon Sep 17 00:00:00 2001 From: Aiden Cline <63023139+rekram1-node@users.noreply.github.com> Date: Mon, 10 Aug 2026 22:47:37 +0000 Subject: [PATCH] fix(provider): scope DeepSeek V4 Flash sampling defaults MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Co-authored-by: 侯秀凯 <9627034+hoooou@users.noreply.github.com> --- packages/opencode/src/provider/transform.ts | 6 ++++ .../opencode/test/provider/transform.test.ts | 31 +++++++++++++++++++ 2 files changed, 37 insertions(+) diff --git a/packages/opencode/src/provider/transform.ts b/packages/opencode/src/provider/transform.ts index 9d98815cdad5..4a2738e875ee 100644 --- a/packages/opencode/src/provider/transform.ts +++ b/packages/opencode/src/provider/transform.ts @@ -551,6 +551,12 @@ export function topP(model: Provider.Model) { if (["minimax-m2", "kimi-k2.5", "kimi-k2p5", "kimi-k2-5"].some((s) => id.includes(s))) { return 0.95 } + if ( + ["deepseek-v4-flash-0731", "deepseek-v4-flash:0731"].some((name) => id.includes(name)) || + (id.includes("deepseek-v4-flash") && (model.providerID === "deepseek" || model.providerID.startsWith("opencode"))) + ) { + return 0.95 + } return undefined } diff --git a/packages/opencode/test/provider/transform.test.ts b/packages/opencode/test/provider/transform.test.ts index 9897c543fb81..d1e437642e65 100644 --- a/packages/opencode/test/provider/transform.test.ts +++ b/packages/opencode/test/provider/transform.test.ts @@ -3272,6 +3272,37 @@ describe("ProviderTransform sampling defaults - Gemini", () => { }) }) +describe("ProviderTransform sampling defaults - DeepSeek", () => { + const model = (providerID: string, id: string) => + ({ + id: `${providerID}/${id}`, + providerID, + api: { id }, + }) as any + + test.each([ + ["deepseek", "deepseek-v4-flash"], + ["opencode", "deepseek-v4-flash"], + ["opencode-go", "deepseek-v4-flash"], + ["openrouter", "deepseek/deepseek-v4-flash-0731"], + ["ollama-cloud", "deepseek-v4-flash:0731"], + ])("defaults top_p for %s/%s", (providerID, id) => { + expect(ProviderTransform.temperature(model(providerID, id))).toBeUndefined() + expect(ProviderTransform.topP(model(providerID, id))).toBe(0.95) + expect(ProviderTransform.topK(model(providerID, id))).toBeUndefined() + }) + + test.each([ + ["openrouter", "deepseek/deepseek-v4-flash"], + ["vercel", "deepseek/deepseek-v4-flash"], + ["custom", "deepseek-ai/DeepSeek-V4-Flash"], + ])("preserves legacy defaults for %s/%s", (providerID, id) => { + expect(ProviderTransform.temperature(model(providerID, id))).toBeUndefined() + expect(ProviderTransform.topP(model(providerID, id))).toBeUndefined() + expect(ProviderTransform.topK(model(providerID, id))).toBeUndefined() + }) +}) + describe("ProviderTransform.reasoningVariants", () => { const model = (reasoning_options: ModelsDev.Model["reasoning_options"]) => ({ reasoning_options }) as ModelsDev.Model const target = (npm: string, id = "test-model") =>