v0.4.0
Recording on by default, a 🤗 LeRobot bridge with four reproduced LIBERO scores, and reproducible Docker rebuilds.
🤗 LeRobot bridge (#83, #88)
Serve any single-observation-step LeRobot PreTrainedPolicy through one script, pinned at lerobot v0.6.0 with every policy family's extras bundled.
- Original-format checkpoints (NVIDIA GR00T dumps, MolmoAct2 HF releases) load through a fallback chain; new
policy_kwargs/featuresargs cover config gaps. - Frames are resized to the checkpoint's declared input resolution.
compile_modeloverrides the checkpoint's torch.compile setting (compiled pi05 is 4.4x faster per chunk).use_select_actionroutes stateful policies (LingBot-VA's autoregressive video stream) through their own per-step loop.
Reproduced on LIBERO, 100 episodes each:
| Model | Suite | Reproduced | Reported |
|---|---|---|---|
| π₀.₅ | LIBERO Object | 100% | 99.0 |
| GR00T N1.7 | LIBERO Object | 99% | 81 |
| MolmoAct2 | LIBERO Goal | 97% | 98.0 |
| VLA-JEPA | LIBERO-10 | 96% | 93.0 |
FastWAM's published 94.0 is not reproducible at the tag, even through lerobot-eval itself; documented as an upstream defect.
Recording on by default (#85)
- Every benchmark entry writes episode results + step rows to the eval's SQLite; no
recording:block needed. Fixes #84 (sharded runs silently merged to empty aggregates). - A
recording:block overrides the defaults per benchmark;--no-savestays the global off switch; invalid values fail fast at config parse. - New
--record-video/--no-record-videotoggles per-episode mp4s without editing YAML (forwarded byscripts/run_sharded.sh). - Default per-episode paths are compact and shard-stable:
{benchmark_safe_name}/task{task_idx:04d}_ep{episode_id:04d}_{status}(task_idxassigned before shard filtering).
New benchmark
- DuoBench (#79): bimanual benchmark on the Robot Control Stack, with its own Docker image and configs.
Reproducible Docker rebuilds (#85, #87)
- Every benchmark image pins its source refs: release tags where suitable ones exist, SHAs otherwise.
- The base image pins Miniforge and uv and sets a Docker-level
UV_EXCLUDE_NEWERcutoff. - PyTorch installs go through
uv pip --torch-backend; legacypip install -euses moved to uv where verified.
Benchmark compatibility fixes (#85)
- Kinetix tolerates the new JAX
clip(min/max)API. - MIKASA registers and resolves its VLA envs.
- MolmoSpaces uses the packaged pick-and-place eval config.
- RLBench supports both
CameraConfig(render_resolution=...)andCameraConfig(image_size=...).
⚠️ Breaking changes
- Execution mode renamed:
mode: realtimebecamemode: async(#39), then settled asmode: live(#40). Renamerealtimetolivein v0.3.0 configs. - Hold actions are benchmark-owned (#36): the runner-level
hold_policykey is gone; benchmarks implementget_hold_action(default: repeat last action). LIBERO is sync-only; the realtime example moved to Kinetix (#37). - Recording default flip (#85): an absent
recording:block now records step rows and episode results (previously nothing), and a block omittingrecord_videono longer implies videos.
Maintenance
Full changelog: v0.3.0...v0.4.0