From fb9a8e7e2ce0bbfaef74e1364a047137fc9ab97c Mon Sep 17 00:00:00 2001 From: suyao Date: Mon, 1 Dec 2025 02:45:27 +0800 Subject: [PATCH] fix: params map --- .../apiServer/services/unified-messages.ts | 68 ++++++++++++++++++- 1 file changed, 67 insertions(+), 1 deletion(-) diff --git a/src/main/apiServer/services/unified-messages.ts b/src/main/apiServer/services/unified-messages.ts index 7c85e2d6cf..63bd461f5b 100644 --- a/src/main/apiServer/services/unified-messages.ts +++ b/src/main/apiServer/services/unified-messages.ts @@ -1,3 +1,6 @@ +import type { AnthropicProviderOptions } from '@ai-sdk/anthropic' +import type { GoogleGenerativeAIProviderOptions } from '@ai-sdk/google' +import type { OpenAIResponsesProviderOptions } from '@ai-sdk/openai' import type { LanguageModelV2Middleware, LanguageModelV2ToolResultOutput } from '@ai-sdk/provider' import type { ProviderOptions, ReasoningPart, ToolCallPart, ToolResultPart } from '@ai-sdk/provider-utils' import type { @@ -20,6 +23,9 @@ import { type AiSdkConfigContext, formatProviderApiHost, initializeSharedProviders, + isAnthropicProvider, + isGeminiProvider, + isOpenAIProvider, type ProviderFormatContext, providerToAiSdkConfig as sharedProviderToAiSdkConfig, resolveActualProvider @@ -482,6 +488,63 @@ async function prepareSpecialProviderConfig(provider: Provider, config: AiSdkCon return config } +function mapAnthropicThinkToAISdkProviderOptions( + provider: Provider, + config: MessageCreateParams['thinking'] +): ProviderOptions | undefined { + if (!config) return undefined + if (isAnthropicProvider(provider)) { + return { + anthropic: { + ...mapToAnthropicProviderOptions(config) + } + } + } + if (isGeminiProvider(provider)) { + return { + google: { + ...mapToGeminiProviderOptions(config) + } + } + } + if (isOpenAIProvider(provider)) { + return { + openai: { + ...mapToOpenAIProviderOptions(config) + } + } + } + return undefined +} + +function mapToAnthropicProviderOptions(config: NonNullable): AnthropicProviderOptions { + return { + thinking: { + type: config.type, + budgetTokens: config.type === 'enabled' ? config.budget_tokens : undefined + } + } +} + +function mapToGeminiProviderOptions( + config: NonNullable +): GoogleGenerativeAIProviderOptions { + return { + thinkingConfig: { + thinkingBudget: config.type === 'enabled' ? config.budget_tokens : -1, + includeThoughts: config.type === 'enabled' + } + } +} + +function mapToOpenAIProviderOptions( + config: NonNullable +): OpenAIResponsesProviderOptions { + return { + reasoningEffort: config.type === 'enabled' ? 'high' : 'none' + } +} + /** * Core stream execution function - single source of truth for AI SDK calls */ @@ -521,14 +584,17 @@ async function executeStream(config: ExecuteStreamConfig): Promise