Preserve native DROID checkpoint behavior for Positronic - #11
Conversation
Codex Review SummaryThis comment shows the latest Codex review activity on this pull request.
ℹ️ About Codex in GitHubYour team has set up Codex to review pull requests in this repo. Reviews are triggered when you
Codex reacts with 👀 while any review is running, comments if it has suggestions, and reacts with 👍 once all reviews finish with no findings. |
There was a problem hiding this comment.
💡 Codex Review
Here are some automated review suggestions for this pull request.
Reviewed commit: 506ccc8731
ℹ️ About Codex in GitHub
Your team has set up Codex to review pull requests in this repo. Reviews are triggered when you
- Open a pull request for review
- Mark a draft as ready
- Comment "@codex review".
If Codex has suggestions, it will comment; otherwise it will react with 👍.
Codex can also answer questions or update the PR. Try commenting "@codex address that feedback".
There was a problem hiding this comment.
💡 Codex Review
Here are some automated review suggestions for this pull request.
Reviewed commit: 6db6ee8e57
ℹ️ About Codex in GitHub
Your team has set up Codex to review pull requests in this repo. Reviews are triggered when you
- Open a pull request for review
- Mark a draft as ready
- Comment "@codex review".
If Codex has suggestions, it will comment; otherwise it will react with 👍.
Codex can also answer questions or update the PR. Try commenting "@codex address that feedback".
There was a problem hiding this comment.
💡 Codex Review
Here are some automated review suggestions for this pull request.
Reviewed commit: b61c478840
ℹ️ About Codex in GitHub
Your team has set up Codex to review pull requests in this repo. Reviews are triggered when you
- Open a pull request for review
- Mark a draft as ready
- Comment "@codex review".
If Codex has suggestions, it will comment; otherwise it will react with 👍.
Codex can also answer questions or update the PR. Try commenting "@codex address that feedback".
There was a problem hiding this comment.
💡 Codex Review
Here are some automated review suggestions for this pull request.
Reviewed commit: 9d17a03fc4
ℹ️ About Codex in GitHub
Your team has set up Codex to review pull requests in this repo. Reviews are triggered when you
- Open a pull request for review
- Mark a draft as ready
- Comment "@codex review".
If Codex has suggestions, it will comment; otherwise it will react with 👍.
Codex can also answer questions or update the PR. Try commenting "@codex address that feedback".
There was a problem hiding this comment.
💡 Codex Review
Here are some automated review suggestions for this pull request.
Reviewed commit: bc91bc1dfa
ℹ️ About Codex in GitHub
Your team has set up Codex to review pull requests in this repo. Reviews are triggered when you
- Open a pull request for review
- Mark a draft as ready
- Comment "@codex review".
If Codex has suggestions, it will comment; otherwise it will react with 👍.
Codex can also answer questions or update the PR. Try commenting "@codex address that feedback".
There was a problem hiding this comment.
💡 Codex Review
Here are some automated review suggestions for this pull request.
Reviewed commit: be79d6244d
ℹ️ About Codex in GitHub
Your team has set up Codex to review pull requests in this repo. Reviews are triggered when you
- Open a pull request for review
- Mark a draft as ready
- Comment "@codex review".
If Codex has suggestions, it will comment; otherwise it will react with 👍.
Codex can also answer questions or update the PR. Try commenting "@codex address that feedback".
| - name: Checkout | ||
| uses: actions/checkout@v4 |
There was a problem hiding this comment.
Check out submodules before packaging the fork
When this workflow builds the published image, actions/checkout leaves submodules uninitialized by default (its submodules input defaults to false), so Docker's COPY . /gr00t packages empty external_dependencies paths; .dockerignore also strips .git, preventing /gr00t from initializing them later. The LIBERO and SimplerEnv setup scripts immediately run git submodule update, which then fails because the included checkout is not a Git repository, making simulation evaluation unavailable from this image. Configure checkout with submodules: recursive before make push.
Useful? React with 👍 / 👎.
Preserve the published DROID checkpoint's native behavior when fine-tuning and serving through Positronic.
This PR contains only our changes, based on
main-positronicafter PR #12 merged NVIDIA's N1.7 update.The base tree exactly matches upstream
51d4c89f72fda44cbf77285c6a8114b52676b8a1.Fine-tuning loads the checkpoint's architecture, modalities and image preprocessing.
For the published DROID checkpoint, this preserves the 32-layer model, 40-action horizon and relative pose/joint actions.
The default uses one exterior camera and one wrist camera.
--video-keyssupports a different fine-tuning camera layout.The launcher clears conflicting legacy image-size fields before training validation.
Checkpoint processor loading honors the requested normalization mode and mask augmentation settings.
Serving accepts
hf://checkpoints and rejects unexpected camera inputs.Both native policy and sim-wrapper validation require only the instruction key selected for inference, allowing additional training paraphrases in the checkpoint configuration. These are small changes to NVIDIA's existing validation and conversion loops.
The Docker image includes the fork at
/gr00tand its separate Python 3.12 environment at/opt/gr00t-venv.The existing GitHub workflow retains its disk cleanup and main-branch trigger. The Makefile retains its build/tag/push/clean/prune/help targets and publishes latest, version, and commit tags. It uses NVIDIA's N1.7 Dockerfile and explicitly targets linux/amd64, including builds from Apple Silicon Macs. Its only change from the N1.6 Makefile is the Dockerfile filename; native ARM builds remain available through NVIDIA’s docker/build.sh.
Companion integration: Positronic-Robotics/positronic#733
Validation
ee9dd54: 681 passed, 21 skipped, 49 GPU/edge tests deselected. Includes checkpoint overrides and two-/three-camera and language contracts. Positronic's 21 GR00T adapter tests also passed against this source.Command inside the base image:
uv run --frozen --no-sync python -m pytest -m 'not gpu and not edge_device and not multigpu' -q.pre-commit run --all-filespassed in Docker, including Ruff, formatting, and platform manifest alignment.examples/finetune.sh ... -- --video-keys ...command was checked with a stub launcher inside Docker; all three camera names reached the Python entry point unchanged.506ccc87314fb69ad7ac8d8960b002ce3a378395passed. Checkpoint configuration smoke checks passed in the base and final Positronic images with Python 3.12.3 and PyTorch 2.9.0+cu128.be79d6244dda302ace1ff7a2cd55239aad2ad109.240627d: five successful simulator episodes through Positronic; 81 recorded calls checked for pose/action parity.Results:
s3://inference/tmp/groot-n1.7-robolab-20260909T180755Z/.Mac build verification: Docker pre-commit checks passed; Makefile dry runs in both repositories target
linux/amd64, including withDOCKER_DEFAULT_PLATFORM=linux/arm64. The platform/documentation correction does not change Python source; the CPU results above remain fromee9dd54. No full image rebuild was repeated for this correction.