import classNames from '~/lib/classNames' import ReactMarkdown from 'react-markdown' import remarkGfm from 'remark-gfm' import { ChatMessage } from '../../../types/chat' export interface ChatMessageBubbleProps { message: ChatMessage } export default function ChatMessageBubble({ message }: ChatMessageBubbleProps) { return (
{message.isThinking && message.thinking && (
Reasoning
{message.thinking}
)} {!message.isThinking && message.thinking && (
{message.thinkingDuration !== undefined ? `Thought for ${message.thinkingDuration}s` : 'Reasoning'}
{message.thinking}
)}
{message.role === 'assistant' ? ( { const isInline = !className?.includes('language-') if (isInline) { return ( {children} ) } return ( {children} ) }, p: ({ children }) =>

{children}

, ul: ({ children }) =>
    {children}
, ol: ({ children }) =>
    {children}
, li: ({ children }) =>
  • {children}
  • , h1: ({ children }) =>

    {children}

    , h2: ({ children }) =>

    {children}

    , h3: ({ children }) =>

    {children}

    , blockquote: ({ children }) => (
    {children}
    ), a: ({ children, href }) => ( {children} ), }} > {message.content}
    ) : ( message.content )} {message.isStreaming && ( )}
    {message.timestamp.toLocaleTimeString([], { hour: '2-digit', minute: '2-digit', })}
    ) }