From da37b76105b0ce622e85e7bb242f65b83858753a Mon Sep 17 00:00:00 2001 From: seb Date: Fri, 25 Sep 2026 06:41:35 +0200 Subject: [PATCH] u --- src/providers/OpenRouterProvider.js | 21 ++++++++++++++------- 1 file changed, 14 insertions(+), 7 deletions(-) diff --git a/src/providers/OpenRouterProvider.js b/src/providers/OpenRouterProvider.js index eb8dbfe..3d28926 100644 --- a/src/providers/OpenRouterProvider.js +++ b/src/providers/OpenRouterProvider.js @@ -154,22 +154,29 @@ class OpenRouterProvider { } } - // Reasoning (delta.reasoning or delta.reasoning_details) - if (choice.delta?.reasoning) { - result.reasoning = (result.reasoning || '') + choice.delta.reasoning; - onReasoning?.(result.reasoning); - } + // Reasoning (delta.reasoning, delta.reasoning_content, or delta.reasoning_details) + // OpenRouter may return both delta.reasoning and delta.reasoning_details for the same chunk. + // We assemble reasoning_details, but only append text once to result.reasoning. + let reasoningText = choice.delta?.reasoning || choice.delta?.reasoning_content || ''; if (choice.delta?.reasoning_details) { if (!result.reasoning_details) result.reasoning_details = []; + let detailsText = ''; for (const rd of choice.delta.reasoning_details) { const slot = result.reasoning_details[rd.index] ||= { type: rd.type, format: rd.format, text: '' }; if (rd.text) { slot.text += rd.text; - result.reasoning = (result.reasoning || '') + rd.text; - onReasoning?.(result.reasoning); + detailsText += rd.text; } } + if (!reasoningText && detailsText) { + reasoningText = detailsText; + } + } + + if (reasoningText) { + result.reasoning = (result.reasoning || '') + reasoningText; + onReasoning?.(result.reasoning); } if (choice.finish_reason) result.finish_reason = choice.finish_reason;