import { useState } from 'react' import Plot from 'react-plotly.js' import { Swords } from 'lucide-react' import { runArena } from '../lib/api.js' import { RewardBreakdown } from '../components/RewardBreakdown.jsx' const SAMPLE = `class Optimizer: def __init__(self, dim): self.lr = 0.05 self.beta = 0.9 self.v = np.zeros(dim) def step(self, x, f_val, grad): # SGD with heavy-ball momentum self.v = self.beta * self.v - self.lr * grad return x + self.v ` const TEMPLATES = [ 'quadratic', 'rosenbrock', 'styblinski_tang', 'huber', 'gaussian_mix', 'himmelblau', 'plateau', 'cliff', ] export function OptimizerArena() { const [template, setTemplate] = useState('quadratic') const [dim, setDim] = useState(5) const [seed, setSeed] = useState(42) const [code, setCode] = useState(SAMPLE) const [data, setData] = useState(null) const [loading, setLoading] = useState(false) const [err, setErr] = useState(null) async function run() { setLoading(true); setErr(null); setData(null) try { const r = await runArena({ template, dim, seed, code }) if (r.error) { setErr(r.error) } else { setData(r) } } catch (e) { setErr(e.message) } finally { setLoading(false) } } return (
{err}