Public visitors don't know the hostnames, so surface each host's GPU(s)
as the resource name across the UI.
- store: gpu_label() turns the stored gpus_json into a compact label
("2× RTX 5090", "RTX 4090"); add `gpu` to ReportRow + RunRow and
`host_gpus`/`model_gpus` maps to /api/dimensions (from each one's
latest run). render_json gains gpu too.
- UI: Overview + Runs show a "GPU" column (gpu, fallback host); Runs'
filter is now GPU-labelled (still filters by host underneath); Trends
shows a "Measured on <gpu>" line for the selected model.
Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
helexa bench UI
A Vite + React (SWC, TypeScript) app that visualises the fleet benchmark
data collected by helexa-bench. It reads the read-only JSON API the
bench daemon serves (crates/helexa-bench/src/api.rs, default
:13132 on bob).
Stack: React Router, react-bootstrap, Recharts.
Pages
- Overview — latest median results per (host, model, scenario) cell.
- Trends — decode-tok/s and TTFT plotted across neuron build SHAs as releases roll out (the headline view). Pick host / model / scenario.
- Runs — filterable raw-run explorer.
Develop
cd bench
npm install
npm run dev # http://localhost:5173
vite.config.ts proxies /api → http://bob.hanzalova.internal:13132,
so the dev server talks to the live bench API with no CORS fuss. Point
the proxy elsewhere (or run a local helexa-bench serve) to develop
against other data.
Production hosting
Public at https://bench.helexa.ai — nginx on the gateway
(hanzalova.internal) serves the static dist/ and reverse-proxies
/api to the bench API on bob over WireGuard, so the SPA is same-origin
(no CORS) and the internal API stays off the public internet.
npm run buildis run with noVITE_API_BASE(the app calls/api/...on its own origin; nginx proxies it to bob)..gitea/workflows/deploy.yml(deploy-bench-ui) builds and rsyncsdist/to/var/www/bench.helexa.aion every deploy.- The nginx vhost (
asset/nginx/bench.helexa.ai.conf) and the Let's Encrypt cert are one-time host setup inscript/infra-setup.sh.
To host elsewhere instead, build with
VITE_API_BASE=<bob-api-origin> and serve the static dist/.