From 74b499df1933cd721f8a252d4157b79c58cd7f2b Mon Sep 17 00:00:00 2001 From: seb Date: Mon, 5 Oct 2026 23:57:05 +0200 Subject: [PATCH] u --- src/LLMOrbiter.js | 9 ++++++++- src/providers/OpenRouterProvider.js | 15 +++++++++++++-- 2 files changed, 21 insertions(+), 3 deletions(-) diff --git a/src/LLMOrbiter.js b/src/LLMOrbiter.js index 1191e5e..60a61cc 100644 --- a/src/LLMOrbiter.js +++ b/src/LLMOrbiter.js @@ -90,7 +90,7 @@ class LLMOrbiter { throw new TypeError('run({ messages }): messages must be an array, or omit it for a fresh conversation'); } - const { onLLMCall, onUsage, onToolCall, onToolError, onToolResult, onStatus, onContent, onReasoning } = this; + const { onLLMCall, onUsage, onToolCall, onToolError, onToolResult, onStatus, onContent, onReasoning, onAssistantMessage } = this; // Keep an internal controller so callers can cancel a run through orbiter.abort(). // The external signal remains supported and is forwarded into the same controller. @@ -214,6 +214,13 @@ class LLMOrbiter { ...(completion.reasoning ? { reasoning: completion.reasoning } : {}), }); + await call(onAssistantMessage, { + content: content || null, + tool_calls: hasToolCalls ? toolCalls : undefined, + reasoning_details: completion.reasoning_details, + reasoning: completion.reasoning, + }); + // No tool calls → done if (!hasToolCalls) { finalContent = content; diff --git a/src/providers/OpenRouterProvider.js b/src/providers/OpenRouterProvider.js index 682e465..7561db9 100644 --- a/src/providers/OpenRouterProvider.js +++ b/src/providers/OpenRouterProvider.js @@ -193,11 +193,22 @@ class OpenRouterProvider { 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: '' }; + const idx = rd.index != null ? rd.index : result.reasoning_details.length; + const slot = result.reasoning_details[idx] ||= {}; + if (rd.type) slot.type = rd.type; + if (rd.format) slot.format = rd.format; + if (rd.id) slot.id = rd.id; + if (rd.index != null) slot.index = rd.index; if (rd.text) { - slot.text += rd.text; + slot.text = (slot.text || '') + rd.text; detailsText += rd.text; } + if (rd.summary) { + slot.summary = (slot.summary || '') + rd.summary; + } + if (rd.data) { + slot.data = (slot.data || '') + rd.data; + } } if (!reasoningText && detailsText) { reasoningText = detailsText;