"use client"; import React from 'react'; import Image from 'next/image'; import { Accordion, AccordionContent, AccordionItem, AccordionTrigger } from '@/components/ui/accordion'; import { Badge } from '@/components/ui/badge'; import { Source } from '@/components/types'; // Define our own props interface to avoid empty interface error interface ChatMessageProps { role: 'user' | 'assistant'; content: string; sources?: Source[]; } const ChatMessageComponent: React.FC = ({ role, content, sources }) => { // Helper to render content based on content type const renderContent = (content: string, contentType: string) => { if (contentType.startsWith('image/')) { return (
Document content
); } else if (content.startsWith('data:image/png;base64,') || content.startsWith('data:image/jpeg;base64,')) { return (
Base64 image content
); } else { return (
{content}
); } }; return (
{content}
{sources && sources.length > 0 && role === 'assistant' && ( Sources ({sources.length})
{sources.map((source, index) => (
{source.filename || `Document ${source.document_id.substring(0, 8)}...`} Chunk {source.chunk_number} {source.score !== undefined && `• Score: ${source.score.toFixed(2)}`}
{source.content_type && ( {source.content_type} )}
{source.content && ( renderContent(source.content, source.content_type || 'text/plain') )} Metadata
                              {JSON.stringify(source.metadata, null, 2)}
                            
))}
)}
); }; export default ChatMessageComponent;