diff --git a/open-sse/config/providerModels.js b/open-sse/config/providerModels.js index 979ce4e..a2a49ca 100644 --- a/open-sse/config/providerModels.js +++ b/open-sse/config/providerModels.js @@ -417,6 +417,8 @@ export const PROVIDER_MODELS = { ], deepseek: [ { id: "deepseek-v4-pro", name: "DeepSeek V4 Pro" }, + { id: "deepseek-v4-pro-max", name: "DeepSeek V4 Pro Max", upstreamModelId: "deepseek-v4-pro" }, + { id: "deepseek-v4-pro-none", name: "DeepSeek V4 Pro No Thinking", upstreamModelId: "deepseek-v4-pro" }, { id: "deepseek-v4-flash", name: "DeepSeek V4 Flash" }, { id: "deepseek-chat", name: "DeepSeek V3.2 Chat" }, { id: "deepseek-reasoner", name: "DeepSeek V3.2 Reasoner" }, diff --git a/open-sse/utils/reasoningContentInjector.js b/open-sse/utils/reasoningContentInjector.js index 0f28496..0ace3ea 100644 --- a/open-sse/utils/reasoningContentInjector.js +++ b/open-sse/utils/reasoningContentInjector.js @@ -15,6 +15,18 @@ const MODEL_RULES = [ { match: m => m?.startsWith?.("deepseek-"), scope: "all" } ]; +const DEEPSEEK_V4_PRO = "deepseek-v4-pro"; +const DEEPSEEK_V4_PRO_ALIASES = { + [`${DEEPSEEK_V4_PRO}-max`]: { + thinkingType: "enabled", + reasoningEffort: "max" + }, + [`${DEEPSEEK_V4_PRO}-none`]: { + thinkingType: "disabled", + reasoningEffort: null + } +}; + function shouldInject(message, scope) { if (message?.role !== "assistant") return false; const rc = message.reasoning_content; @@ -31,9 +43,35 @@ function applyRule(body, rule) { return { ...body, messages }; } +function applyDeepSeekV4ProAlias({ provider, model, body }) { + const alias = DEEPSEEK_V4_PRO_ALIASES[model]; + if (provider !== "deepseek" || !alias || !body) return body; + + const nextBody = { + ...body, + model: DEEPSEEK_V4_PRO, + extra_body: { + ...(body.extra_body || {}), + thinking: { + ...(body.extra_body?.thinking || {}), + type: alias.thinkingType + } + } + }; + + if (alias.reasoningEffort) { + nextBody.reasoning_effort = alias.reasoningEffort; + } else { + delete nextBody.reasoning_effort; + } + + return nextBody; +} + export function injectReasoningContent({ provider, model, body }) { const providerRule = PROVIDER_RULES[provider]; const modelRule = MODEL_RULES.find(r => r.match(model)); const rule = providerRule || modelRule; - return applyRule(body, rule); + const nextBody = applyDeepSeekV4ProAlias({ provider, model, body }); + return applyRule(nextBody, rule); }