function RunEvalModal({ dataset, agents, models, onClose, onStarted }) { const [agentId, setAgentId] = React.useState(agents[0]?.agent_id || ""); const selectedAgent = agents.find((agent) => agent.agent_id === agentId) || null; const compatibleCatalogModels = (models || []).filter((model) => { const provider = selectedAgent?.modelProvider; return !provider || model.provider === provider || (model.providers || []).includes(provider); }); const defaultModel = selectedAgent?.model || compatibleCatalogModels[0]?.id || ""; const compatibleModels = compatibleCatalogModels.some((item) => item.id === defaultModel) ? compatibleCatalogModels : [{ id: defaultModel, label: defaultModel }, ...compatibleCatalogModels].filter((item) => item.id); const [model, setModel] = React.useState(defaultModel); const [submitting, setSubmitting] = React.useState(false); const [error, setError] = React.useState(""); React.useEffect(() => { setModel(defaultModel); }, [agentId]); React.useEffect(() => { const closeOnEscape = (event) => { if (event.key === "Escape") onClose(); }; document.addEventListener("keydown", closeOnEscape); return () => document.removeEventListener("keydown", closeOnEscape); }, [onClose]); const start = async () => { if (!agentId || !model || submitting) return; setSubmitting(true); setError(""); try { const run = await window.api.createEvalRun({ dataset_id: dataset.id, agent_id: agentId, model, }); pushToast({ content: Started eval run on {dataset.name} }); await onStarted?.(run); onClose(); } catch (err) { setError(err.message || String(err)); } finally { setSubmitting(false); } }; return (
{ if (event.target === event.currentTarget) onClose(); }}>
event.stopPropagation()}>

Run evaluation

{dataset.name} ยท {dataset.cases.length} cases
Agent
Model
{error &&
{error}
}
Runs cases serially.
); } window.RunEvalModal = RunEvalModal;