import { useState, useRef, useEffect } from 'react'; import './index.css'; const BACKEND_URL = import.meta.env.VITE_BACKEND_URL; const App = () => { const [input, setInput] = useState(''); const [messages, setMessages] = useState([]); const [isThinking, setIsThinking] = useState(false); const scrollRef = useRef(null); useEffect(() => { if (scrollRef.current) scrollRef.current.scrollTop = scrollRef.current.scrollHeight; }, [messages]); const handleSend = async () => { if (!input.trim()) return; const userMessage = { role: 'user', content: input }; setMessages(prev => [...prev, userMessage]); setInput(''); setIsThinking(true); try { // PLUG YOUR BACKEND HERE const response = await fetch(BACKEND_URL, { method: 'POST', headers: { 'Content-Type': 'application/json' }, body: JSON.stringify({ query: input}) }); const data = await response.json(); // Simulated delay for UI feel setMessages(prev => [...prev, { role: 'ai', content: data.answer, sources: data.sources?.map(s => `Paper ${s.paper_id} — ${s.section_title}`) ?? [], strategy: data.strategy, confidence: data.confidence, grade: data.grade, retrieval_failed: data.retrieval_failed, }]); setIsThinking(false); } catch (error) { console.error("Uplink Error:", error); setIsThinking(false); } }; return (
Select a mode and start your query.
{msg.content}
{msg.role === 'ai' && msg.strategy && (