import { motion } from "framer-motion"; import ReactMarkdown from "react-markdown"; import { User, Server, Sparkles } from "lucide-react"; import { Message, AIProvider } from "@/types/chat"; import { cn } from "@/lib/utils"; interface ChatMessageProps { message: Message; } const providerConfig: Record = { ollama: { icon: Server, color: "text-ollama" }, openai: { icon: Sparkles, color: "text-foreground" }, }; export function ChatMessage({ message }: ChatMessageProps) { const isUser = message.role === "user"; const provider = message.provider || "ollama"; const { icon: ProviderIcon, color } = providerConfig[provider]; return ( {!isUser && (
)}
{isUser ? (

{message.content}

) : (
(

{children}

), code: ({ className, children, ...props }) => { const isInline = !className; return isInline ? ( {children} ) : ( {children} ); }, pre: ({ children }) => (
{children}
), ul: ({ children }) => (
    {children}
), ol: ({ children }) => (
    {children}
), li: ({ children }) => (
  • {children}
  • ), h1: ({ children }) => (

    {children}

    ), h2: ({ children }) => (

    {children}

    ), h3: ({ children }) => (

    {children}

    ), a: ({ href, children }) => ( {children} ), blockquote: ({ children }) => (
    {children}
    ), }} > {message.content || (message.isStreaming ? "..." : "")}
    )} {message.isStreaming && (
    )}
    {isUser && (
    )} ); }