import React, { useMemo } from "react"; import useRenderTracker from "../../../hooks/useRenderTracker"; import MarkdownBlock from "../Blocks/MarkdownBlock"; import CodeBlock from "../Blocks/CodeBlock"; import { ParsedBlock, parseMarkdownAndCode } from "../../../utils/parseMarkdownAndCode"; import type { FinalizedThinkingSummary } from "../../../types/chatStream"; import AssistantThinkingSummary from "./AssistantThinkingSummary"; import AssistantAvatar from "./AssistantAvatar"; interface StaticAssistantMessageProps { content: string; status?: 'complete' | 'interrupted'; thinkingSummary?: FinalizedThinkingSummary; } const StaticAssistantMessage: React.FC = ({ content, status, thinkingSummary }) => { useRenderTracker('StaticAssistantMessage', { content, status, thinkingSummary }); const displayContent = ( status === 'interrupted' && content.trim().length > 0 ? `[Interrupted by user before completion]\n\n${content}` : content ); const blocks: ParsedBlock[] = useMemo(() => parseMarkdownAndCode(displayContent), [displayContent]); const renderedBlocks = useMemo(() => ( <> {blocks.map((block) => { if (block.type === 'markdown') { return ; } if (block.type === 'code') { return ; } return null; })} ), [blocks]); return (
{thinkingSummary && ( )}
{renderedBlocks}
{status === 'interrupted' && (
Stopped
)}
); } export default React.memo(StaticAssistantMessage);