From fce8f2411ce0c8462736a0b19bb9630170d5d5f4 Mon Sep 17 00:00:00 2001 From: suyao Date: Mon, 7 Jul 2025 18:42:31 +0800 Subject: [PATCH] fix: openai-gemini support --- .../middleware/aisdk/AiSdkMiddlewareBuilder.ts | 17 ++++++++++++----- .../src/aiCore/plugins/reasoningTimePlugin.ts | 4 +++- src/renderer/src/aiCore/provider/factory.ts | 2 +- src/renderer/src/aiCore/transformParameters.ts | 3 --- 4 files changed, 16 insertions(+), 10 deletions(-) diff --git a/src/renderer/src/aiCore/middleware/aisdk/AiSdkMiddlewareBuilder.ts b/src/renderer/src/aiCore/middleware/aisdk/AiSdkMiddlewareBuilder.ts index de42d1ab45..e951e4b8e3 100644 --- a/src/renderer/src/aiCore/middleware/aisdk/AiSdkMiddlewareBuilder.ts +++ b/src/renderer/src/aiCore/middleware/aisdk/AiSdkMiddlewareBuilder.ts @@ -1,4 +1,8 @@ -import { LanguageModelV2Middleware, simulateStreamingMiddleware } from '@cherrystudio/ai-core' +import { + extractReasoningMiddleware, + LanguageModelV2Middleware, + simulateStreamingMiddleware +} from '@cherrystudio/ai-core' import type { MCPTool, Model, Provider } from '@renderer/types' import type { Chunk } from '@renderer/types/chunk' @@ -127,6 +131,8 @@ export function buildAiSdkMiddlewares(config: AiSdkMiddlewareConfig): LanguageMo return builder.build() } +const tagNameArray = ['think', 'thought'] + /** * 添加provider特定的中间件 */ @@ -139,10 +145,11 @@ function addProviderSpecificMiddlewares(builder: AiSdkMiddlewareBuilder, config: // Anthropic特定中间件 break case 'openai': - // builder.add({ - // name: 'thinking-tag-extraction', - // middleware: extractReasoningMiddleware({ tagName: 'think' }) - // }) + const tagName = config.model?.id.includes('gemini') ? tagNameArray[1] : tagNameArray[0] + builder.add({ + name: 'thinking-tag-extraction', + middleware: extractReasoningMiddleware({ tagName }) + }) break case 'gemini': // Gemini特定中间件 diff --git a/src/renderer/src/aiCore/plugins/reasoningTimePlugin.ts b/src/renderer/src/aiCore/plugins/reasoningTimePlugin.ts index e9bf9f3215..d4105a136a 100644 --- a/src/renderer/src/aiCore/plugins/reasoningTimePlugin.ts +++ b/src/renderer/src/aiCore/plugins/reasoningTimePlugin.ts @@ -47,7 +47,9 @@ export default definePlugin({ hasStartedThinking = false thinkingStartTime = 0 reasoningBlockId = '' - controller.enqueue(chunk) + if (chunk.type !== 'reasoning-end') { + controller.enqueue(chunk) + } } else { if (chunk.type !== 'reasoning-end') { controller.enqueue(chunk) diff --git a/src/renderer/src/aiCore/provider/factory.ts b/src/renderer/src/aiCore/provider/factory.ts index 78559eb1c4..d7edb92b73 100644 --- a/src/renderer/src/aiCore/provider/factory.ts +++ b/src/renderer/src/aiCore/provider/factory.ts @@ -27,5 +27,5 @@ export function getAiSdkProviderId(provider: Provider): ProviderId | 'openai-com return provider.id as ProviderId } - return 'openai-compatible' + return provider.id as ProviderId } diff --git a/src/renderer/src/aiCore/transformParameters.ts b/src/renderer/src/aiCore/transformParameters.ts index 8074534232..02bcfc681b 100644 --- a/src/renderer/src/aiCore/transformParameters.ts +++ b/src/renderer/src/aiCore/transformParameters.ts @@ -8,12 +8,9 @@ import { FilePart, ImagePart, ModelMessage, - ReasoningPart, stepCountIs, type StreamTextParams, TextPart, - ToolCallPart, - ToolResultPart, UserModelMessage } from '@cherrystudio/ai-core' import { DEFAULT_MAX_TOKENS } from '@renderer/config/constant'