From 3dc0a583ec7027052320567c80b1688c4d477001 Mon Sep 17 00:00:00 2001 From: SuYao Date: Mon, 19 May 2025 17:07:35 +0800 Subject: [PATCH] hotfix: enhance reasoning summary handling in OpenAI response processing (#6037) --- .../AiProvider/OpenAIResponseProvider.ts | 32 +++++++++++++------ 1 file changed, 22 insertions(+), 10 deletions(-) diff --git a/src/renderer/src/providers/AiProvider/OpenAIResponseProvider.ts b/src/renderer/src/providers/AiProvider/OpenAIResponseProvider.ts index af66a835bc..2c70fbc557 100644 --- a/src/renderer/src/providers/AiProvider/OpenAIResponseProvider.ts +++ b/src/renderer/src/providers/AiProvider/OpenAIResponseProvider.ts @@ -524,6 +524,7 @@ export abstract class BaseOpenAIProvider extends BaseProvider { return } let content = '' + let thinkContent = '' const outputItems: OpenAI.Responses.ResponseOutputItem[] = [] @@ -533,28 +534,39 @@ export abstract class BaseOpenAIProvider extends BaseProvider { } switch (chunk.type) { case 'response.output_item.added': - if (time_first_token_millsec === 0) { - time_first_token_millsec = new Date().getTime() - } if (chunk.item.type === 'function_call') { outputItems.push(chunk.item) } break - + case 'response.reasoning_summary_part.added': + if (time_first_token_millsec === 0) { + time_first_token_millsec = new Date().getTime() + } + break case 'response.reasoning_summary_text.delta': onChunk({ type: ChunkType.THINKING_DELTA, text: chunk.delta, thinking_millsec: new Date().getTime() - time_first_token_millsec }) + thinkContent += chunk.delta break - case 'response.reasoning_summary_text.done': - onChunk({ - type: ChunkType.THINKING_COMPLETE, - text: chunk.text, - thinking_millsec: new Date().getTime() - time_first_token_millsec - }) + case 'response.output_item.done': { + if (thinkContent !== '' && chunk.item.type === 'reasoning') { + onChunk({ + type: ChunkType.THINKING_COMPLETE, + text: thinkContent, + thinking_millsec: new Date().getTime() - time_first_token_millsec + }) + } break + } + case 'response.content_part.added': { + if (time_first_token_millsec === 0) { + time_first_token_millsec = new Date().getTime() + } + break + } case 'response.output_text.delta': { let delta = chunk.delta if (isEnabledBuiltinWebSearch) {