import React from 'react'; import { observer } from 'mobx-react'; import { AssistantMessage, Citation, MessageContent, PROCESSING_TYPE, ProcessingInfo, TEXT_TYPE } from './types'; import Markdown from 'react-markdown'; interface MessageComponentProps { message: AssistantMessage; index: number; onFollowUpClick: (question: string) => void; onCitationClick: (citation: Citation) => void; updateMessageCitations: (index: number, citations: Citation[]) => void; } const MessageComponentBox: React.FC = function ({ message, index, onFollowUpClick, onCitationClick, updateMessageCitations }) { const renderContent = (item: MessageContent) => { const i = item.index; if (item.type === TEXT_TYPE.GROUNDED) { const citation_ids = item.citation_ids || []; return ( {item.text} {citation_ids.map((id, idx) => { const citation = message.citations?.find(c => c.citation_id === id); if (!citation) return null; return ( ); })} ); } else if (item.type === TEXT_TYPE.NORMAL) { return ( {item.text} ); } else if ('query' in item) { // Handle the case where the item has a query property return ( {JSON.stringify(item.query)} ); } else { // Fallback for any other unexpected cases return {JSON.stringify(item)}; } }; console.log(message.processing_info); return (
{message.processing_info && (message.processing_info as ProcessingInfo[]).map(item => item.type === PROCESSING_TYPE.THOUGHT ? (
Thought: {item.content}
) : item.type === PROCESSING_TYPE.ACTION ? (
Action: {item.content}
) : (
) )}
{message.content && message.content.map(messageFragment => {renderContent(messageFragment)})}
{message.follow_up_questions && message.follow_up_questions.length > 0 && (

Follow-up Questions:

{message.follow_up_questions.map((question, idx) => ( ))}
)}
); }; export default observer(MessageComponentBox);