import { useState } from 'react' import { ChevronDown, ChevronUp, Clock, Zap, Pin, AlertTriangle, Code, Activity } from 'lucide-react' import clsx from 'clsx' import ChartPanel from '@/components/dashboard/ChartPanel' import AgentTrace from '@/components/dashboard/AgentTrace' import type { QueryResponse, TraceEvent } from '@/api' interface Props { query: string response: QueryResponse streamingText?: string isStreaming?: boolean onPin?: (resp: QueryResponse, query: string) => void traceEvents?: TraceEvent[] } export default function ChatMessage({ query, response, streamingText, isStreaming, onPin, traceEvents }: Props) { const [showCode, setShowCode] = useState(false) const [showTrace, setShowTrace] = useState(false) const [showExplain, setShowExplain] = useState(false) const displayText = isStreaming ? (streamingText ?? '') : response.insight_text const anomalies = (response as any).anomalies || [] const trace = traceEvents || (response as any).trace || [] const queryPlan = (response as any).query_plan || (response as any).trace_summary?.query_plan return (
$1')
.replace(/`(.*?)`/g, '$1')
}}
/>
))}
Approach
{queryPlan.approach || '—'}
{queryPlan.tables && (Self-Correction
The agent fixed its own code {response.correction_attempts} time{response.correction_attempts > 1 ? 's' : ''} before producing the correct result.
Raw Data Preview ({response.execution_result.length} rows)
| {col} | ))}
|---|
| {String(val ?? '')} | ))}
{response.generated_code}
)}