From 1a3b70ac43d2dec839f13b76d059b784fc9919cd Mon Sep 17 00:00:00 2001 From: Henry Li Date: Sat, 17 Jan 2026 16:10:58 +0800 Subject: [PATCH] feat: merge the last thinking with the previous group --- .../workspace/messages/message-list-item.tsx | 7 ----- frontend/src/core/messages/utils.ts | 30 +++++++++---------- 2 files changed, 15 insertions(+), 22 deletions(-) diff --git a/frontend/src/components/workspace/messages/message-list-item.tsx b/frontend/src/components/workspace/messages/message-list-item.tsx index cc6ee6e..0f0c156 100644 --- a/frontend/src/components/workspace/messages/message-list-item.tsx +++ b/frontend/src/components/workspace/messages/message-list-item.tsx @@ -70,13 +70,6 @@ function MessageContent_({ const rehypePlugins = useRehypeSplitWordsIntoSpans(isLoading); return ( - {hasReasoning(message) && ( - - )} {extractContentFromMessage(message)} diff --git a/frontend/src/core/messages/utils.ts b/frontend/src/core/messages/utils.ts index bfa8f80..ec7e759 100644 --- a/frontend/src/core/messages/utils.ts +++ b/frontend/src/core/messages/utils.ts @@ -2,29 +2,17 @@ import type { Message } from "@langchain/langgraph-sdk"; export function groupMessages( messages: Message[], - mapper: ( - groupedMessages: Message[], - groupIndex: number, - isLastGroup: boolean, - ) => T, + mapper: (groupedMessages: Message[]) => T, isLoading = false, ): T[] { if (messages.length === 0) { return []; } - const resultsOfGroups: T[] = []; + const groups: Message[][] = []; let currentGroup: Message[] = []; - const lastMessage = messages[messages.length - 1]!; const yieldCurrentGroup = () => { if (currentGroup.length > 0) { - const resultOfGroup = mapper( - currentGroup, - resultsOfGroups.length, - currentGroup.includes(lastMessage), - ); - if (resultOfGroup !== undefined && resultOfGroup !== null) { - resultsOfGroups.push(resultOfGroup); - } + groups.push(currentGroup); currentGroup = []; } }; @@ -47,6 +35,7 @@ export function groupMessages( isLoading) ) { if (message.tool_calls?.[0]?.name === "present_files") { + // When `present_files` called, put them into an individual group yieldCurrentGroup(); currentGroup.push(message); } else { @@ -57,6 +46,9 @@ export function groupMessages( } else { // Assistant messages with content (text or images) are shown as a group if they have content // No matter whether it has tool calls or not + if (hasReasoning(message)) { + currentGroup.push(message); + } yieldCurrentGroup(); currentGroup.push(message); } @@ -64,6 +56,14 @@ export function groupMessages( messageIndex++; } yieldCurrentGroup(); + + const resultsOfGroups: T[] = []; + for (const group of groups) { + const resultOfGroup = mapper(group); + if (resultOfGroup !== undefined && resultOfGroup !== null) { + resultsOfGroups.push(resultOfGroup); + } + } return resultsOfGroups; }