This document is the source of truth for public leaderboard submissions. Fill the GitHub issue form only after reading this page.
- Public leaderboard: https://commonstackai.github.io/TwinRouterBench/
- Open a submission issue: https://github.com/CommonstackAI/TwinRouterBench/issues/new?template=leaderboard_submission.yml
- Static dataset (download only; not a submission inbox): https://huggingface.co/datasets/Amorph/TwinRouterBench
| Item | Requirement |
|---|---|
| Track | Dynamic SWE-bench Verified held-out-100 |
| Instance split | Exactly the IDs in data/dynamic/dynamic_heldout100_ids.txt |
| Pool / pricing / TTL | Locked tables under data/dynamic/ (no custom pricing) |
| Sort key | total_leaderboard_bill_usd (lower is better), from official scorer |
| Acceptance | Maintainer review; we may re-score or re-run before updating the board |
Other tracks or custom splits may be discussed, but are not guaranteed to appear on the public board.
- GitHub Issue — official request + metadata (router name, fingerprints, reproduction, checklist).
- External artifact URL — downloadable archive of the scoreable run package.
Do not:
- upload run logs to the official Hugging Face dataset
Amorph/TwinRouterBench - attach the full run archive to the GitHub issue (size limits; packages can be large)
- include API keys,
.env, or other secrets
Hosting for the archive may be your own Hugging Face dataset, Zenodo, a GitHub Release asset, or any durable URL you control.
# 1) Run on the official held-out-100 split
mapfile -t HELDOUT < TwinRouterBench/data/dynamic/dynamic_heldout100_ids.txt
twinrouterbench dynamic run \
--router-import your.module:YourRouter.from_cli_args \
--router-arg ... \
--router-label your_label \
--output-dir runs/your_run \
--instances "${HELDOUT[@]}" \
...
# 2) Score (subset file keeps headline metrics on held-out-100 only)
twinrouterbench dynamic score \
--run-dir runs/your_run \
--router-label your_label \
--instance-ids-file TwinRouterBench/data/dynamic/dynamic_heldout100_ids.txt
# Optional audits
twinrouterbench dynamic audit-infra --run-dir runs/your_run
twinrouterbench dynamic audit-trace-cost --run-dir runs/your_runRecord the TwinRouterBench git commit / tag used for the run; the issue form asks for it.
Typical size: about 5–20 MB.
score.jsonfromtwinrouterbench dynamic scoreresults/<instance_id>.jsonfor all 100 held-out instances- matching
<instance_id>.trace.jsonlfiles eval_summary.jsonif present
llm_io/and*.io.jsonl(full prompt/response dumps; often 100–500+ MB)- secrets (
.env, API keys, tokens) - instances outside
dynamic_heldout100_ids.txt
agent_logs/ is optional and usually small; omit unless maintainers ask for debug context.
Publish sha256sum of the archive and paste it into the issue form.
The Leaderboard submission form collects:
- Router display name and
router_label - Contact and router code / paper URL (prefer a pinned commit)
- TwinRouterBench commit / tag used for the run
- Headline fields from
score.json:total_leaderboard_bill_usdtotal_router_cost_usdtotal_penalty_cost_usdresolved_count/instance_count/resolved_rateavg_stepspool_fingerprint/pricing_fingerprint/pricing_schema_versionfailure_penalty_usdexclude_infra_failures
- Artifact URL (+ optional SHA-256)
- Exact reproduction commands
- Checklist confirmation
- Incomplete packages, wrong split, custom pricing, or unreproducible routers may be rejected.
- Maintainers may recompute scores from your traces against the locked
data/dynamic/tables. - Accepted entries are written into
leaderboard/data/leaderboard.jsonand published via the leaderboard site.
Open a normal GitHub issue (not the submission form) for clarification before you run a costly full held-out evaluation.