Skip to content

v0.4.0

Latest

Choose a tag to compare

@MilkClouds MilkClouds released this 07 Jul 15:27
2680ab2

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 / features args cover config gaps.
  • Frames are resized to the checkpoint's declared input resolution.
  • compile_model overrides the checkpoint's torch.compile setting (compiled pi05 is 4.4x faster per chunk).
  • use_select_action routes 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-save stays the global off switch; invalid values fail fast at config parse.
  • New --record-video / --no-record-video toggles per-episode mp4s without editing YAML (forwarded by scripts/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_idx assigned 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_NEWER cutoff.
  • PyTorch installs go through uv pip --torch-backend; legacy pip install -e uses 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=...) and CameraConfig(image_size=...).

⚠️ Breaking changes

  • Execution mode renamed: mode: realtime became mode: async (#39), then settled as mode: live (#40). Rename realtime to live in v0.3.0 configs.
  • Hold actions are benchmark-owned (#36): the runner-level hold_policy key is gone; benchmarks implement get_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 omitting record_video no longer implies videos.

Maintenance

  • Root uv exclude-newer cutoff bump (#87).
  • Leaderboard data update (#78).

Full changelog: v0.3.0...v0.4.0