diff --git a/src/renderer/src/pages/home/Messages/Blocks/MainTextBlock.tsx b/src/renderer/src/pages/home/Messages/Blocks/MainTextBlock.tsx index f228694061..1ef3edc6b5 100644 --- a/src/renderer/src/pages/home/Messages/Blocks/MainTextBlock.tsx +++ b/src/renderer/src/pages/home/Messages/Blocks/MainTextBlock.tsx @@ -30,6 +30,8 @@ interface Props { role: Message['role'] } +const toolUseRegex = /([\s\S]*?)<\/tool_use>/g + const MainTextBlock: React.FC = ({ block, citationBlockId, role, mentions = [] }) => { // Use the passed citationBlockId directly in the selector const { renderInputMessageAsMarkdown } = useSettings() @@ -66,6 +68,10 @@ const MainTextBlock: React.FC = ({ block, citationBlockId, role, mentions return content }, [block.content, block.citationReferences, citationBlockId, formattedCitations]) + const ignoreToolUse = useMemo(() => { + return processedContent.replace(toolUseRegex, '') + }, [processedContent]) + return ( <> {/* Render mentions associated with the message */} @@ -79,7 +85,7 @@ const MainTextBlock: React.FC = ({ block, citationBlockId, role, mentions {role === 'user' && !renderInputMessageAsMarkdown ? (

{block.content}

) : ( - + )} ) diff --git a/src/renderer/src/services/StreamProcessingService.ts b/src/renderer/src/services/StreamProcessingService.ts index 52e6e8560d..1d8bef15b3 100644 --- a/src/renderer/src/services/StreamProcessingService.ts +++ b/src/renderer/src/services/StreamProcessingService.ts @@ -56,8 +56,7 @@ export function createStreamProcessor(callbacks: StreamProcessorCallbacks = {}) callbacks.onTextChunk(data.text) } if (data.type === ChunkType.TEXT_COMPLETE && callbacks.onTextComplete) { - // 消除工具使用对信息流的影响 - callbacks.onTextComplete(data.text.replace(/([\s\S]*?)<\/tool_use>/g, '')) + callbacks.onTextComplete(data.text) } if (data.type === ChunkType.THINKING_DELTA && callbacks.onThinkingChunk) { callbacks.onThinkingChunk(data.text, data.thinking_millsec)