From 7b7819217fe37fe07bf26ab3920ff2389da75a37 Mon Sep 17 00:00:00 2001 From: David Zhang <61440144+WAcry@users.noreply.github.com> Date: Sun, 29 Jun 2025 12:14:58 -0700 Subject: [PATCH] chore(OpenAIApiClient): handle empty delta objects in non-streaming esponses (#7658) chore(OpenAIApiClient): handle empty delta objects in non-streaming responses --- .../src/aiCore/clients/openai/OpenAIApiClient.ts | 12 +++++++++--- 1 file changed, 9 insertions(+), 3 deletions(-) diff --git a/src/renderer/src/aiCore/clients/openai/OpenAIApiClient.ts b/src/renderer/src/aiCore/clients/openai/OpenAIApiClient.ts index 499edfbb5c..6c6e524b53 100644 --- a/src/renderer/src/aiCore/clients/openai/OpenAIApiClient.ts +++ b/src/renderer/src/aiCore/clients/openai/OpenAIApiClient.ts @@ -639,9 +639,15 @@ export class OpenAIAPIClient extends OpenAIBaseClient< if (!choice) return - // 对于流式响应,使用delta;对于非流式响应,使用message - const contentSource: OpenAISdkRawContentSource | null = - 'delta' in choice ? choice.delta : 'message' in choice ? choice.message : null + // 对于流式响应,使用 delta;对于非流式响应,使用 message。 + // 然而某些 OpenAI 兼容平台在非流式请求时会错误地返回一个空对象的 delta 字段。 + // 如果 delta 为空对象,应当忽略它并回退到 message,避免造成内容缺失。 + let contentSource: OpenAISdkRawContentSource | null = null + if ('delta' in choice && choice.delta && Object.keys(choice.delta).length > 0) { + contentSource = choice.delta + } else if ('message' in choice) { + contentSource = choice.message + } if (!contentSource) return