/** Evaluation flywheel: suites created from validated failures (governance * fields + contamination-guard badges) and the seqeval regression hook. */ import { useState } from 'react'; import Box from '@mui/material/Box'; import Button from '@mui/material/Button'; import Chip from '@mui/material/Chip'; import Paper from '@mui/material/Paper'; import Table from '@mui/material/Table'; import TableBody from '@mui/material/TableBody'; import TableCell from '@mui/material/TableCell'; import TableHead from '@mui/material/TableHead'; import TableRow from '@mui/material/TableRow'; import Typography from '@mui/material/Typography'; import type { EvaluationSuite, RegressionSuiteResult } from '../../types/agentic'; import { runRegression } from '../../services/agentic'; import { fmtCi, KV, PanelTitle } from './common'; const DECISION_COLORS: Record = { PASS: '#1b5e20', REGRESSION: '#b71c1c', INSUFFICIENT_EVIDENCE: '#4e342e', }; export default function FlywheelPanel({ suites }: { suites: EvaluationSuite[] }) { const [regression, setRegression] = useState(null); const [running, setRunning] = useState(false); const evaluate = async () => { setRunning(true); try { const res = await runRegression(); setRegression(res.suites); } finally { setRunning(false); } }; return ( {suites.length === 0 ? ( No suites yet — suites are created by the LEARNING FLYWHEEL stage after a failure is human-validated. ) : ( suites.map((s) => ( {s.name} v{s.version} {s.governance_overrides.length > 0 ? ( ) : null} m.training_eligible).length} — requires explicit recorded override)`} /> )) )} {running ? 'Evaluating…' : 'Evaluate candidate'} } /> {regression ? ( {['Suite', 'n', 'Baseline', 'Candidate', 'Δ', 'Δ CI (anytime-valid)', 'Decision'].map((h) => ( {h} ))} {regression.map((r) => ( {r.suite} {r.n} {r.baseline_rate ?? '—'} {r.candidate_rate ?? '—'} {r.delta ?? '—'} {fmtCi(r.delta_ci)} ))}
) : ( Run the evaluation to compare the candidate model against the general, historical-regression, rare-event, safety-critical and failure-derived suites. INSUFFICIENT_EVIDENCE is reported as-is — it is never a pass. )}
); }