'use client' import { useEffect, useState } from 'react' import axios from 'axios' import PulseLoader from 'react-spinners/PulseLoader' type Recommendation = { assessment_id: string score?: number name?: string url?: string test_type_full?: string duration?: number } type ApiResponse = { recommended_assessments?: Recommendation[] final_results?: Recommendation[] clarification?: string trace_id?: string summary?: any [key: string]: any } const Chat: React.FC = () => { const [apiBase, setApiBase] = useState('http://localhost:8000') const [query, setQuery] = useState('') const [clarification, setClarification] = useState('') const [history, setHistory] = useState<{ query: string; response: ApiResponse }[]>([]) const [loading, setLoading] = useState(false) const [verbose, setVerbose] = useState(false) const [useChat, setUseChat] = useState(false) // toggle /chat for debug useEffect(() => { const saved = localStorage.getItem('api_base') if (saved) setApiBase(saved) }, []) const submitQuery = async () => { if (!query.trim()) { alert('Please enter a query') return } setLoading(true) localStorage.setItem('api_base', apiBase) try { const payload: any = { query } if (clarification.trim()) payload.clarification_answer = clarification.trim() if (verbose) payload.verbose = true const endpoint = useChat ? '/chat' : '/recommend' const res = await axios.post(`${apiBase.replace(/\/$/, '')}${endpoint}`, payload) setHistory((h) => [...h, { query, response: res.data }]) setQuery('') setClarification('') } catch (err: any) { alert('Error: ' + err) } setLoading(false) } const latest = history[history.length - 1] const results = latest?.response?.recommended_assessments || latest?.response?.final_results || [] return (
setApiBase(e.target.value)} placeholder="http://localhost:8000" />