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", city_average: "City average", 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", station_coverage: "Monitoring coverage", weekday_weekend_profile: "Weekday/weekend comparison", condition_comparison: "Threshold-group comparison", rank_states: "State ranking", coverage_trend: "Coverage trend", funding_rank: "NCAP funding ranking", ncap_threshold_cities: "NCAP pollution threshold", ncap_funding_groups: "NCAP funding groups", pollution_change: "Period change", context_relationship: "Context relationship", threshold_frequency: "Threshold frequency", analysis_unavailable: "Analysis needs refinement", composition: "Composed analysis", }; function formatArgument(name: string, value: unknown) { if (Array.isArray(value)) { if (value.length === 0) { if (name === "months") return "all months"; if (name === "cities") return "all cities"; return "none"; } return value.map((item) => String(item)).join(", "); } if (typeof value === "string") { return value.replaceAll("_", " "); } return String(value); } 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?.analysis_steps.length ? (
Analysis recipe {message.result.analysis_steps.length ? (
    {message.result.analysis_steps.map((step, index) => (
  1. {String(index + 1).padStart(2, "0")} {step.function_name}
    {Object.entries(step.arguments).map(([name, value]) => (
    {name.replaceAll("_", " ")}
    {formatArgument(name, value)}
    ))}
  2. ))}
) : null} {message.result.method_note ?

{message.result.method_note}

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

Ask a follow-up

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