From ee37fb99280bb4282bdb4b0ecf599c690908275f Mon Sep 17 00:00:00 2001 From: Pepijn Date: Wed, 15 Apr 2026 10:06:55 +0200 Subject: [PATCH] fix(robomme): make docs build + fast tests green MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit 1. Docs: add robomme to _toctree.yml under Benchmarks so doc-builder's TOC integrity check stops rejecting the new page. 2. Fast tests: robomme's mani-skill transitively pins numpy<2 which is unsatisfiable against the project's numpy>=2 base pin, so `uv sync` couldn't resolve a universal lockfile. Drop robomme as a pyproject extra entirely — it truly cannot coexist with the rest of the dep tree. The Dockerfile installs robomme directly from its git URL via `uv pip install --override`, which was already the runtime path. pyproject, docs, env docstrings, and the CI job comment all now point to the docker-only install. Co-Authored-By: Claude Opus 4.6 (1M context) --- .github/workflows/benchmark_tests.yml | 3 ++- docker/Dockerfile.benchmark.robomme | 8 +++++--- docs/source/_toctree.yml | 2 ++ docs/source/robomme.mdx | 6 ++++-- pyproject.toml | 7 ++++--- src/lerobot/envs/configs.py | 3 ++- src/lerobot/envs/robomme.py | 2 +- 7 files changed, 20 insertions(+), 11 deletions(-) diff --git a/.github/workflows/benchmark_tests.yml b/.github/workflows/benchmark_tests.yml index 723b9c3b3..e1630e483 100644 --- a/.github/workflows/benchmark_tests.yml +++ b/.github/workflows/benchmark_tests.yml @@ -312,7 +312,8 @@ jobs: if-no-files-found: warn # ── ROBOMME ─────────────────────────────────────────────────────────────── - # Isolated image: lerobot[robomme] only (mani-skill, SAPIEN, Vulkan chain) + # Isolated image: mani-skill/SAPIEN/Vulkan chain with gymnasium and numpy + # overrides (robomme can't be a pyproject extra due to numpy<2 pin). robomme-integration-test: name: RoboMME — build image + 1-episode eval runs-on: diff --git a/docker/Dockerfile.benchmark.robomme b/docker/Dockerfile.benchmark.robomme index 75520a1b7..2bfc83b4f 100644 --- a/docker/Dockerfile.benchmark.robomme +++ b/docker/Dockerfile.benchmark.robomme @@ -40,12 +40,14 @@ RUN apt-get update \ && apt-get clean && rm -rf /var/lib/apt/lists/* USER user_lerobot -# Refresh pyproject/setup.py so the PR's robomme extra is registered, then -# install it with gymnasium/numpy overrides to downgrade from lerobot[all]. +# Install smolvla + av-dep via the PR's pyproject, then layer robomme on top +# with gymnasium/numpy overrides. robomme isn't a pyproject extra because its +# mani-skill pin conflicts with lerobot's base numpy>=2 (see pyproject.toml). COPY --chown=user_lerobot:user_lerobot setup.py pyproject.toml uv.lock README.md MANIFEST.in ./ RUN printf 'gymnasium==0.29.1\nnumpy==1.26.4\n' > /tmp/robomme_override.txt \ && uv pip install --no-cache --override /tmp/robomme_override.txt \ - -e ".[robomme,smolvla,av-dep]" \ + -e ".[smolvla,av-dep]" \ + "robomme @ git+https://github.com/RoboMME/robomme_benchmark.git@main" \ && python -c "import robomme; print('robomme import OK')" # Overlay the PR's source code on top of the nightly image. diff --git a/docs/source/_toctree.yml b/docs/source/_toctree.yml index 3dcba5993..2f57b472d 100644 --- a/docs/source/_toctree.yml +++ b/docs/source/_toctree.yml @@ -79,6 +79,8 @@ title: LIBERO - local: metaworld title: Meta-World + - local: robomme + title: RoboMME - local: envhub_isaaclab_arena title: NVIDIA IsaacLab Arena Environments title: "Benchmarks" diff --git a/docs/source/robomme.mdx b/docs/source/robomme.mdx index 2f66fbba8..219395215 100644 --- a/docs/source/robomme.mdx +++ b/docs/source/robomme.mdx @@ -23,10 +23,12 @@ ### Native (Linux) ```bash -pip install 'lerobot[robomme]' +pip install --override <(printf 'gymnasium==0.29.1\nnumpy==1.26.4\n') \ + -e '.[smolvla,av-dep]' \ + 'robomme @ git+https://github.com/RoboMME/robomme_benchmark.git@main' ``` -> **Dependency note**: `robomme` pulls in `mani-skill` which pins `gymnasium==0.29.1` and `numpy<2.0.0`. These conflict with lerobot's default pins. On Linux you can pin both in your env; see the Docker approach below to avoid conflicts entirely. +> **Dependency note**: `mani-skill` (pulled by `robomme`) pins `gymnasium==0.29.1` and `numpy<2.0.0`, which conflict with lerobot's base `numpy>=2.0.0`. That's why `robomme` is not a pyproject extra — use the override install above, or the Docker approach below to avoid conflicts entirely. ### Docker (recommended) diff --git a/pyproject.toml b/pyproject.toml index aa5b893a7..c066f5551 100644 --- a/pyproject.toml +++ b/pyproject.toml @@ -211,9 +211,10 @@ aloha = ["lerobot[dataset]", "gym-aloha>=0.1.2,<0.2.0", "lerobot[scipy-dep]"] pusht = ["lerobot[dataset]", "gym-pusht>=0.1.5,<0.2.0", "pymunk>=6.6.0,<7.0.0"] # TODO: Fix pymunk version in gym-pusht instead libero = ["lerobot[dataset]", "lerobot[transformers-dep]", "hf-libero>=0.1.3,<0.2.0; sys_platform == 'linux'", "lerobot[scipy-dep]"] metaworld = ["lerobot[dataset]", "metaworld==3.0.0", "lerobot[scipy-dep]"] -robomme = [ - "robomme @ git+https://github.com/RoboMME/robomme_benchmark.git@main ; sys_platform == 'linux'", -] +# NOTE: robomme is NOT a pyproject extra — mani-skill hard-pins numpy<2 +# which conflicts with lerobot's numpy>=2 base pin, so the two trees can't +# resolve into a single env. Install it only in the RoboMME Docker image +# via `uv pip install --override` (see docker/Dockerfile.benchmark.robomme). # All all = [ diff --git a/src/lerobot/envs/configs.py b/src/lerobot/envs/configs.py index c5980ab68..a7731a7bb 100644 --- a/src/lerobot/envs/configs.py +++ b/src/lerobot/envs/configs.py @@ -585,7 +585,8 @@ class RoboMMEEnv(EnvConfig): Dataset: lerobot/robomme (LeRobot v3.0, 1,600 episodes). Benchmark: https://github.com/RoboMME/robomme_benchmark - Requires: pip install 'lerobot[robomme]' (Linux only). + Requires the `robomme` git package installed separately (Linux only); + see docker/Dockerfile.benchmark.robomme for the canonical install. """ task: str = "PickXtimes" diff --git a/src/lerobot/envs/robomme.py b/src/lerobot/envs/robomme.py index b017a3890..0f155710e 100644 --- a/src/lerobot/envs/robomme.py +++ b/src/lerobot/envs/robomme.py @@ -10,7 +10,7 @@ RoboMME tasks: Imitation: MoveCube, InsertPeg, PatternLock, RouteStick Dataset: lerobot/robomme (LeRobot v3.0, 1,600 episodes) -Install: pip install 'lerobot[robomme]' (Linux only) +Install: see docker/Dockerfile.benchmark.robomme (Linux only — mani-skill vs numpy pin conflict) Benchmark: https://github.com/RoboMME/robomme_benchmark """