diff --git a/packages/ai-config/src/model-capabilities/model-apis-helpers.ts b/packages/ai-config/src/model-capabilities/model-apis-helpers.ts index 70eb52d..269a120 100644 --- a/packages/ai-config/src/model-capabilities/model-apis-helpers.ts +++ b/packages/ai-config/src/model-capabilities/model-apis-helpers.ts @@ -45,6 +45,16 @@ const MODEL_APIS_CAPABILITIES: Record> = { maxContextLength: 250_000, maxInputTokens: 250_000, }, + "deepseek-ai/DeepSeek-V4-Flash-0731": { + family: "deepseek-v4", + thinkingEffortLevels: ["off", "low", "high", "max"], + supportsImages: false, + supportsToolResultImages: false, + supportedInputMediaTypes: [], + maxOutputTokens: 384_000, + maxContextLength: 250_000, + maxInputTokens: 250_000, + }, }; /** diff --git a/packages/ai-provider-bridge/src/__tests__/utils.test.ts b/packages/ai-provider-bridge/src/__tests__/utils.test.ts index 49a1c5f..178f7f4 100644 --- a/packages/ai-provider-bridge/src/__tests__/utils.test.ts +++ b/packages/ai-provider-bridge/src/__tests__/utils.test.ts @@ -8,6 +8,7 @@ import { buildSnowflakeCortexUrl, buildSnowflakeCortexUrlFromHost, normalizeProviderBaseUrl, + positAiThinkingRequestFields, thinkingRequestFields, } from "../utils"; @@ -33,6 +34,19 @@ describe("thinkingRequestFields", () => { }); }); +describe("positAiThinkingRequestFields", () => { + it("maps DeepSeek off to none and reuses named efforts", () => { + expect( + positAiThinkingRequestFields("deepseek-ai/DeepSeek-V4-Flash-0731", "off", false), + ).toEqual({ + reasoning_effort: "none", + }); + expect( + positAiThinkingRequestFields("deepseek-ai/DeepSeek-V4-Flash-0731", "high", false), + ).toEqual({ reasoning_effort: "high" }); + }); +}); + describe("normalizeProviderBaseUrl", () => { const HOST = "https://api.anthropic.com"; diff --git a/packages/ai-provider-bridge/src/model-clients/PositAiClient.ts b/packages/ai-provider-bridge/src/model-clients/PositAiClient.ts index 07cf2ea..45a5400 100644 --- a/packages/ai-provider-bridge/src/model-clients/PositAiClient.ts +++ b/packages/ai-provider-bridge/src/model-clients/PositAiClient.ts @@ -29,7 +29,7 @@ import { isClaudeModel, isThinkingEnabled, joinPath, - thinkingRequestFields, + positAiThinkingRequestFields, } from "../utils"; import { convertAiSdkStreamToPlatform, @@ -238,7 +238,8 @@ export class PositAiClient implements ModelClient { return convertAiSdkStreamToPlatform(result.fullStream, cleanup); } else if (normalizedProtocol === "openai-chat") { - const thinkingFields = thinkingRequestFields( + const thinkingFields = positAiThinkingRequestFields( + params.model, params.thinkingEffort, params.requiresChatTemplateKwargs ?? false, ); diff --git a/packages/ai-provider-bridge/src/utils.ts b/packages/ai-provider-bridge/src/utils.ts index 448aef2..5514677 100644 --- a/packages/ai-provider-bridge/src/utils.ts +++ b/packages/ai-provider-bridge/src/utils.ts @@ -41,6 +41,17 @@ export function thinkingRequestFields( : undefined; } +export function positAiThinkingRequestFields( + modelId: string, + effort: string | undefined, + requiresChatTemplateKwargs: boolean, +): Record | undefined { + if (modelId === "deepseek-ai/DeepSeek-V4-Flash-0731" && effort === "off") { + return { reasoning_effort: "none" }; + } + return thinkingRequestFields(effort, requiresChatTemplateKwargs); +} + // --------------------------------------------------------------------------- // Model ID helpers // ---------------------------------------------------------------------------