import { lazy, Suspense } from "react"; import { ResultTable } from "./ResultTable"; import { DatabaseIcon, WindIcon } from "./icons"; import type { ConversationMessage } from "./types"; const AnalysisChart = lazy(() => import("./AnalysisChart").then((module) => ({ default: module.AnalysisChart, })), ); const analysisLabels: Record = { rank_cities: "City ranking", threshold_cities: "Threshold analysis", compare_cities: "City comparison", time_trend: "Time trend", relationship: "Relationship analysis", strongest_weather_relationship: "Weather-factor ranking", seasonal_profile: "Seasonal profile", funding_lookup: "NCAP funding", custom_sql_analysis: "Custom validated SQL", }; export function ChatMessage({ message, onPrompt, }: { message: ConversationMessage; onPrompt: (prompt: string) => void; }) { if (message.role === "user") { return (
{message.content}
); } return (
VayuChat Gemini 3.5 Flash-Lite
{message.error ? (
Analysis stopped

{message.error}

) : ( <>

{message.result?.answer ?? message.content}

{message.result?.analysis_type ? (
{analysisLabels[message.result.analysis_type] ?? "Validated analysis"} {message.result.elapsed_ms > 0 ? ( {(message.result.elapsed_ms / 1000).toFixed(1)}s ) : null}
) : null} {message.result?.key_points.length ? (
    {message.result.key_points.map((point) => (
  • {point}
  • ))}
) : null} {message.result ? ( ) : null} {message.result ? : null} {message.result?.method_note || message.result?.query ? (
How this was calculated {message.result.method_note ?

{message.result.method_note}

: null} {message.result.query ?
{message.result.query}
: null}
) : null} {message.result?.suggested_questions.length ? (

Ask a follow-up

{message.result.suggested_questions.map((question) => ( ))}
) : null} )}
); }