--- title: OpenEnv Arena training emoji: 🎯 sdk: gradio app_file: app.py short_description: Live training curves of every OpenEnv Arena run tags: - trackio hf_oauth: true hf_oauth_scopes: - write-repos --- Every [OpenEnv Arena](https://huggingface.co/spaces/openenvarena/arena) training run streams its numbers here while it trains: reward, loss and how long each step took. Each participant has a project with one run per training run, and the arena's own submissions page links each run to its curves. Built with [Trackio](https://github.com/gradio-app/trackio). ## Worker ingestion Set the Space secret `TRACKIO_INGEST_TOKEN` to the same dedicated random credential configured on Arena's workers. It only authorizes `POST /ingest`; it is not a Hugging Face token or Trackio's dashboard administration token. When unset, ingestion is disabled and the dashboard continues serving existing runs. Send `Authorization: Bearer ` with a JSON body: ```json {"logs":[{"project":"burtenshaw","run":"arena-run-id","run_id":"arena-run-id","step":1,"log_id":"unique-event-id","metrics":{"reward":0.75,"arena/step_seconds":1.2},"config":{"submission_id":"submission-id"}}]} ``` A batch contains 1–128 events for one project and run, up to 256 KiB. Each event contains 1–128 finite numeric metrics. Project, run and event IDs contain only ASCII letters, digits, `_` and `-`, up to 128 characters. `run_id` may be omitted; when present it must equal `run`. Preserve each `log_id` when retrying delivery; duplicates cannot replace existing metrics. Distinct events at the same step need distinct IDs. Optional config accepts strings `participant`, `submission_id`, `run_id`, `model`, `model_revision`, `recipe`, and nonnegative numbers `num_updates`, `train_tasks`. Supply it on the first batch; it cannot be changed after a run exists. Repeating the same config on subsequent events is supported. The same endpoint accepts an `alerts` list, alone or alongside `logs`: ```json {"alerts":[{"project":"burtenshaw","run":"arena-run-id","run_id":"arena-run-id","alert_id":"sandbox-cleanup-39","title":"Sandbox cleanup timed out","text":"Training ended after 39 updates. Evaluation will use the last checkpoint.","level":"error","step":39}]} ``` An alert has a required stable `alert_id`, a nonempty `title` of up to 200 characters, optional plain `text` of up to 4,000 characters, and `level` of `info`, `warn`, or `error`. Its optional `step` is a nonnegative integer or null. Identity and config follow the same rules as logs. The combined batch limit is 128 events; the entire batch must describe one run. Retry with the same `alert_id`; retries cannot replace an existing alert. Alert-only failures register a run without inventing numeric metrics. Alerts are public. Send bounded messages describing the failure and next action; never include credentials, private trajectories, or raw exception payloads. They appear in Trackio's run-filtered Reports page at `/reports?project=&runs=`. Trackio 0.40.0 does not expose individual-alert anchors or a URL parameter for the severity filter. The existing `openenvarena/training-dashboard` bucket stays mounted at `/data`, with `TRACKIO_DIR=/data/trackio`. The app uses this mounted storage directly and does not provision Spaces, buckets or credentials. Run one server process for Trackio's bucket-backed SQLite storage. Trackio remains pinned to `0.40.0`.