🧭 Canonical source:
source/geniesim_benchmark/README.mdis the source of truth for the task runtime, config schema, CLI verbs, and scoring contract.
This file is a 30-second pointer. Do not duplicate content here that lives at the canonical source — duplication is what makes dispatchers rot.
The legacy benchmark task runtime: declarative .yaml configs in config/ describe what to load, which robot to drive, and what to evaluate. Tasks are launched through the geniesim benchmark CLI verb (owned by geniesim_cli) and run against a user-provided inference server (--infer-host=IP:PORT).
🚧 Architectural status — legacy, refactor planned.
geniesim_benchmarktalks to Isaac Sim directly (its own physics + scene loading); it is not layered on top ofgeniesim_ros. The two stacks are independent and parallel today: choose the benchmark stack for headless / scoring runs, the RT Engine for interactive / closed-loop work.The roadmap is to refactor the benchmark runtime into a benchmark layer on top of
geniesim_ros— a plugin or app inside the RT Engine — so the two stacks share one physics path. Until that lands, do not assume shared invariants between them.
| Topic | File |
|---|---|
| Canonical CLI surface + config naming convention | source/geniesim_benchmark/README.md |
| User-facing intro + leaderboard pointer | source/geniesim_benchmark/README.md |
| Agent skills (run, check-inference) | source/geniesim_benchmark/skills/ |
| Task configs (the work-list) | source/geniesim_benchmark/src/geniesim_benchmark/config/ |
| App entry | source/geniesim_benchmark/src/geniesim_benchmark/app/app.py |
| Dataset utilities (converters) | source/geniesim_benchmark/src/geniesim_benchmark/dataset/ — agibot → LeRobot v2.1 lives in dataset/convert/agibot_to_lerobot.py; CLI entry is geniesim dataset convert agibot-to-lerobot |
- Independent stack from
geniesim_ros. No shared scene loader, no shared launch graph. A scene yaml here is not a scene yaml there. Don't cross-reference; don't unify prematurely — the refactor is the right place for that. - Config naming is
<robot>_<category>_<task>.yaml. The CLI splits on the second token as category; deeper tags (e.g.g2op_probe_if_pick_*) belong to the task name. Robot prefixes (g2op,g290d,arxone,g1op,aloha) are internal to this package today — they're not the same vocabulary asgeniesim_rosscene yamls. - The
--infer-host=H:Pshorthand is rewritten to--benchmark.infer_host=…(run/batch) or--host … --port …(check-inference). Don't pin a host inside a.yaml— keep it at invocation time. config.yaml/template.yaml/teleop.yamlare templates / defaults, not runnable tasks.geniesim benchmark listfilters them out.- Unknown
--key=valueflags are forwarded verbatim toapp/app.py'sParameterServer. The full key space is the@dataclasstree inconfig/params.py. Don't strip "unknown" flags in the CLI dispatch. batchsemantics: sequential per-configsubprocess.run; exits non-zero if any config failed. Long jobs needtmux/ log pipe.- Leaderboard tables in the root README (
GenieSim-Instruction/-Robust/-Manipulation/-Sim2Real) are part of the published contract. Don't rename these strings — they survive the refactor.