From 71eadc942f80c9c2512286604caea0b46473d63a Mon Sep 17 00:00:00 2001 From: Henry Li Date: Sun, 18 Jan 2026 13:07:56 +0800 Subject: [PATCH] fix: fix message grouping issues --- .../src/components/workspace/input-box.tsx | 7 +-- .../workspace/messages/message-list.tsx | 60 +++++++++---------- frontend/src/core/messages/utils.ts | 49 ++++++++------- 3 files changed, 58 insertions(+), 58 deletions(-) diff --git a/frontend/src/components/workspace/input-box.tsx b/frontend/src/components/workspace/input-box.tsx index 057fbc1..880dc60 100644 --- a/frontend/src/components/workspace/input-box.tsx +++ b/frontend/src/components/workspace/input-box.tsx @@ -1,10 +1,5 @@ import type { ChatStatus } from "ai"; -import { - BoxIcon, - CheckIcon, - LightbulbIcon, - LightbulbOffIcon, -} from "lucide-react"; +import { CheckIcon, LightbulbIcon, LightbulbOffIcon } from "lucide-react"; import { useCallback, useMemo, useState, type ComponentProps } from "react"; import { diff --git a/frontend/src/components/workspace/messages/message-list.tsx b/frontend/src/components/workspace/messages/message-list.tsx index 9f50dd4..97c11fe 100644 --- a/frontend/src/components/workspace/messages/message-list.tsx +++ b/frontend/src/components/workspace/messages/message-list.tsx @@ -36,43 +36,39 @@ export function MessageList({ className={cn("flex size-full flex-col justify-center", className)} > - {groupMessages( - thread.messages, - (group) => { - if (group.type === "human" || group.type === "assistant") { - return ( - - ); - } - if (group.type === "assistant:present-files") { - const files = []; - for (const message of group.messages) { - if (hasPresentFiles(message)) { - files.push(...extractPresentFilesFromMessage(message)); - } - } - return ( - - ); - } + {groupMessages(thread.messages, (group) => { + if (group.type === "human" || group.type === "assistant") { return ( - ); - }, - thread.isLoading, - )} + } + if (group.type === "assistant:present-files") { + const files = []; + for (const message of group.messages) { + if (hasPresentFiles(message)) { + files.push(...extractPresentFilesFromMessage(message)); + } + } + return ( + + ); + } + return ( + + ); + })} {thread.isLoading && }
diff --git a/frontend/src/core/messages/utils.ts b/frontend/src/core/messages/utils.ts index 2812754..faa137e 100644 --- a/frontend/src/core/messages/utils.ts +++ b/frontend/src/core/messages/utils.ts @@ -23,7 +23,6 @@ type MessageGroup = export function groupMessages( messages: Message[], mapper: (group: MessageGroup) => T, - isLoading = false, ): T[] { if (messages.length === 0) { return []; @@ -86,25 +85,28 @@ export function groupMessages( } } - if (!isLoading) { - const lastGroup: MessageGroup | undefined = groups[groups.length - 1]; - if ( - lastGroup?.type === "assistant:processing" && - lastGroup.messages.length > 0 - ) { - const reasoningContent = extractReasoningContentFromMessage( - lastGroup.messages[lastGroup.messages.length - 1]!, - ); - const content = extractContentFromMessage( - lastGroup.messages[lastGroup.messages.length - 1]!, - ); - if (reasoningContent && !content) { - const group = groups.pop()!; - group.type = "assistant"; - groups.push(group); - } - } - } + // if (!isLoading) { + // const lastGroup: MessageGroup | undefined = groups[groups.length - 1]; + // if ( + // lastGroup?.type === "assistant:processing" && + // lastGroup.messages.length > 0 + // ) { + // const lastMessage = lastGroup.messages[lastGroup.messages.length - 1]!; + // const reasoningContent = extractReasoningContentFromMessage(lastMessage); + // const content = extractContentFromMessage(lastMessage); + // if (reasoningContent && !content) { + // lastGroup.messages.pop(); + // if (lastGroup.messages.length === 0) { + // groups.pop(); + // } + // groups.push({ + // id: lastMessage.id, + // type: "assistant", + // messages: [lastMessage], + // }); + // } + // } + // } const resultsOfGroups: T[] = []; for (const group of groups) { @@ -162,6 +164,13 @@ export function extractReasoningContentFromMessage(message: Message) { return null; } +export function removeReasoningContentFromMessage(message: Message) { + if (message.type !== "ai" || !message.additional_kwargs) { + return; + } + delete message.additional_kwargs.reasoning_content; +} + export function extractURLFromImageURLContent( content: | string