diff --git a/packages/chat-client/src/App.jsx b/packages/chat-client/src/App.jsx index 2e267fc..912a879 100644 --- a/packages/chat-client/src/App.jsx +++ b/packages/chat-client/src/App.jsx @@ -10,7 +10,7 @@ import { DEFAULT_MODEL } from './config/constants'; export default function App() { const [leftOpen, setLeftOpen] = useState(true); const [rightOpen, setRightOpen] = useState(true); - const [selectedModel, setSelectedModel] = useState(DEFAULT_MODEL); + const { models, selectedModel, setSelectedModel } = useModels(); const { sessions, @@ -64,10 +64,12 @@ export default function App() { isOpen={rightOpen} onToggle={() => setRightOpen(o => !o)} activeSession={activeSession} + models={models} selectedModel={selectedModel} onModelChange={setSelectedModel} lastModel={lastModel} lastTokenCount={lastTokenCount} + /> ); diff --git a/packages/chat-client/src/api/orchestration.js b/packages/chat-client/src/api/orchestration.js index 4876111..bc13e8b 100644 --- a/packages/chat-client/src/api/orchestration.js +++ b/packages/chat-client/src/api/orchestration.js @@ -79,4 +79,10 @@ export function streamMessage(sessionId, message, model, { onChunk, onDone, onEr })(); return () => controller.abort(); +} + +export async function fetchModels() { + const res = await fetch(`{BASE_URL}/models`); + if(!res.ok) throw new Error(`Failted to fetch models: ${res.status}`); + return res.json(); } \ No newline at end of file diff --git a/packages/chat-client/src/components/ChatWindow.jsx b/packages/chat-client/src/components/ChatWindow.jsx index 814e297..010e40f 100644 --- a/packages/chat-client/src/components/ChatWindow.jsx +++ b/packages/chat-client/src/components/ChatWindow.jsx @@ -6,7 +6,6 @@ export default function ChatWindow({ messages, loadingHistory, streaming, onSend const inputRef = useRef(null); const [input, setInput] = React.useState(''); - // Auto-scroll to bottom when messages change useEffect(() => { bottomRef.current?.scrollIntoView({ behavior: 'smooth' }); }, [messages]); @@ -26,58 +25,30 @@ export default function ChatWindow({ messages, loadingHistory, streaming, onSend } return ( -
+
{/* Header */} -
- +
+ {activeSession ? activeSession.external_id : 'No session selected'}
{/* Message thread */} -
+
{!activeSession && ( -
-

Select a session or start a new chat

+

Select a session or start a new chat

)} {loadingHistory && ( -
+
Loading history...
)} @@ -96,13 +67,11 @@ export default function ChatWindow({ messages, loadingHistory, streaming, onSend background: 'var(--bg-surface)', flexShrink: 0, }}> -