Files
helexa/bench/README.md
rob thijssen 37c19aa985
All checks were successful
build-prerelease / Resolve version stamps + change detection (push) Successful in 30s
build-prerelease / Build neuron-blackwell (push) Successful in 1m32s
build-prerelease / Build neuron-ada (push) Successful in 2m15s
build-prerelease / Lint (fmt + clippy) (push) Successful in 2m29s
build-prerelease / Build helexa-bench binary (push) Successful in 2m25s
build-prerelease / Build cortex binary (push) Successful in 2m39s
build-prerelease / Build neuron-ampere (push) Successful in 2m48s
build-prerelease / Package helexa-bench RPM (push) Successful in 1m30s
build-prerelease / Test (push) Successful in 4m38s
build-prerelease / Package cortex RPM (push) Successful in 1m19s
build-prerelease / Package helexa-neuron-ampere RPM (push) Successful in 1m36s
build-prerelease / Package helexa-neuron-ada RPM (push) Successful in 1m37s
build-prerelease / Package helexa-neuron-blackwell RPM (push) Successful in 1m39s
build-prerelease / Publish to rpm.lair.cafe (unstable) (push) Successful in 51s
feat(bench-ui): public hosting at https://bench.helexa.ai via gateway nginx
nginx on the gateway serves the bench SPA and reverse-proxies /api to the
bob bench API over WireGuard — public, auth-less, same-origin (no CORS),
internal API stays private.

- asset/nginx/bench.helexa.ai.conf (full TLS vhost: SPA + /api proxy) and
  a bootstrap http-only vhost for the initial ACME challenge.
- infra-setup.sh: one-time gateway setup — webroot, Let's Encrypt cert
  (certbot webroot, idempotent), install + enable the vhost.
- deploy.yml: deploy-bench-ui builds the SPA (setup-node) and rsyncs
  dist/ to /var/www/bench.helexa.ai every deploy; built same-origin so
  no VITE_API_BASE.
- cortex-host.conf: scoped gitea_ci rsync grant for the webroot.
- bench/README: production hosting notes.

Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
2026-06-14 11:40:29 +03:00

1.6 KiB

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 /apihttp://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 build is run with no VITE_API_BASE (the app calls /api/... on its own origin; nginx proxies it to bob).
  • .gitea/workflows/deploy.yml (deploy-bench-ui) builds and rsyncs dist/ to /var/www/bench.helexa.ai on every deploy.
  • The nginx vhost (asset/nginx/bench.helexa.ai.conf) and the Let's Encrypt cert are one-time host setup in script/infra-setup.sh.

To host elsewhere instead, build with VITE_API_BASE=<bob-api-origin> and serve the static dist/.