import { useEffect, useMemo, useState } from 'react'; import { Alert, AlertTitle, Box, Button, Typography } from '@mui/material'; interface ChatErrorBannerProps { error: string; sessionId: string; model?: string | null; onDismiss: () => void; } export default function ChatErrorBanner({ error, sessionId, model, onDismiss }: ChatErrorBannerProps) { const [copied, setCopied] = useState(false); const [reportedAt, setReportedAt] = useState(() => new Date().toISOString()); useEffect(() => { setReportedAt(new Date().toISOString()); setCopied(false); }, [error]); const details = useMemo( () => [ 'ML Intern message failure', `time: ${reportedAt}`, `session: ${sessionId}`, `model: ${model || 'unknown'}`, `error: ${error}`, ].join('\n'), [error, model, reportedAt, sessionId], ); const copyDetails = async () => { try { await navigator.clipboard.writeText(details); setCopied(true); } catch { setCopied(false); } }; return ( } > Message failed The backend could not process the last message. Retry after a moment. If it keeps happening, raise an issue with the copied details. {error} ); }