Kr0issant
(visualizer) implement the whole thing
f2e28ca
Raw
History Blame Contribute Delete
6.51 kB
import { useEffect, useState } from 'react';
import clsx from 'clsx';
const DEFAULT_FORM = {
mode: 'equal_split',
modelId: '',
seed: 42,
maxRounds: 20,
temperature: 0.2,
};
/**
* Sidebar/header control that picks an inference mode and starts a live run.
*
* Props:
* - modes: [{id,label,description,requires_credentials,...}]
* - status: 'idle' | 'connecting' | 'running' | 'done' | 'error'
* - lastError: string | null
* - currentRunId: string | null
* - onStart(opts): kicks off a new run (parent handles SSE wiring)
* - onStop(): stops the current SSE subscription
*/
export default function RunControls({
modes = [],
status = 'idle',
lastError = null,
currentRunId = null,
onStart,
onStop,
}) {
const [form, setForm] = useState(DEFAULT_FORM);
const [open, setOpen] = useState(true);
// Make sure the selected mode stays valid when the modes list refreshes.
useEffect(() => {
if (!modes.length) return;
if (!modes.find(m => m.id === form.mode)) {
setForm(f => ({ ...f, mode: modes[0].id }));
}
}, [modes, form.mode]);
const selectedMode = modes.find(m => m.id === form.mode);
const llmReady = selectedMode?.id !== 'llm' || selectedMode?.credentials_present;
function update(key, value) {
setForm(f => ({ ...f, [key]: value }));
}
function submit(e) {
e.preventDefault();
onStart?.({
mode: form.mode,
modelId: form.modelId || selectedMode?.default_model_id || null,
seed: Number(form.seed) || 0,
maxRounds: Number(form.maxRounds) || 20,
temperature: Number(form.temperature) || 0,
});
}
const isBusy = status === 'connecting' || status === 'running';
return (
<div className="run-controls card">
<h3>
Live inference
<span className="meta">
{currentRunId ? <code>{currentRunId}</code> : 'no run yet'}
</span>
</h3>
<button
type="button"
className="run-controls__toggle"
onClick={() => setOpen(o => !o)}
>
{open ? 'Hide controls' : 'Show controls'}
</button>
{open && (
<form className="run-controls__form" onSubmit={submit}>
<label className="run-controls__field">
<span>Policy</span>
<select
value={form.mode}
onChange={e => update('mode', e.target.value)}
disabled={isBusy}
>
{modes.map(m => (
<option key={m.id} value={m.id}>
{m.label}
{m.requires_credentials && !m.credentials_present
? ' (no token)'
: ''}
</option>
))}
</select>
{selectedMode?.description && (
<small className="run-controls__hint">
{selectedMode.description}
</small>
)}
</label>
{selectedMode?.id === 'llm' && (
<label className="run-controls__field">
<span>Model id</span>
<input
type="text"
value={form.modelId}
onChange={e => update('modelId', e.target.value)}
placeholder={
selectedMode.default_model_id || 'mistralai/Mistral-7B-Instruct-v0.3'
}
disabled={isBusy}
/>
</label>
)}
<div className="run-controls__row">
<label className="run-controls__field">
<span>Seed</span>
<input
type="number"
min={0}
value={form.seed}
onChange={e => update('seed', e.target.value)}
disabled={isBusy}
/>
</label>
<label className="run-controls__field">
<span>Max rounds</span>
<input
type="number"
min={1}
max={50}
value={form.maxRounds}
onChange={e => update('maxRounds', e.target.value)}
disabled={isBusy}
/>
</label>
{selectedMode?.id === 'llm' && (
<label className="run-controls__field">
<span>Temp</span>
<input
type="number"
step="0.1"
min={0}
max={2}
value={form.temperature}
onChange={e => update('temperature', e.target.value)}
disabled={isBusy}
/>
</label>
)}
</div>
<div className="run-controls__actions">
<button
type="submit"
className="primary"
disabled={isBusy || !llmReady}
title={
!llmReady
? 'Set HF_TOKEN and HF_MODEL_ID in the server .env first'
: undefined
}
>
{status === 'connecting' && 'Starting…'}
{status === 'running' && 'Running…'}
{(status === 'idle' || status === 'done' || status === 'error') &&
'Start run'}
</button>
{isBusy && (
<button type="button" onClick={() => onStop?.()}>
Stop stream
</button>
)}
</div>
<div
className={clsx('run-controls__status', `is-${status}`)}
role="status"
>
<span className="dot" />
{statusLabel(status)}
{lastError && (
<em className="run-controls__error">{lastError}</em>
)}
</div>
{selectedMode?.id === 'llm' && !selectedMode?.credentials_present && (
<small className="run-controls__warn">
The server is missing <code>HF_TOKEN</code> /{' '}
<code>HF_MODEL_ID</code>. Set them in <code>.env</code> and
restart <code>scripts/run_visualizer_server.py</code>.
</small>
)}
</form>
)}
</div>
);
}
function statusLabel(status) {
switch (status) {
case 'connecting':
return 'Connecting to backend…';
case 'running':
return 'Streaming live rounds';
case 'done':
return 'Run complete';
case 'error':
return 'Run failed';
default:
return 'Idle';
}
}