Skip to content

Commit dc090c1

Browse files
authored
Fix user skill evaluation coverage (#1140)
## Summary Fix user skill evaluation coverage ## Detailed description - Address NVBug 6659554 with maintained Experiment and OpenPI Run fixtures plus matching variant and port overrides. - Address NVBug 6657913 with setup scenarios covering native, Docker, cuRobo, mounts, readiness, and workflow boundaries. - Link setup guidance to its references and permit approved container recreation. --------- Signed-off-by: Clemens Volk <cvolk@nvidia.com>
1 parent 951b846 commit dc090c1

5 files changed

Lines changed: 127 additions & 11 deletions

File tree

skills/user/run-experiment/evaluations.md

Lines changed: 4 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -20,11 +20,13 @@ Known failure modes:
2020

2121
## Scenario 2: Local Shared Override
2222

23-
Query: "Run `my_experiment.yaml` headless, set the shared episode count to 4, and don't edit the YAML."
23+
Query: "Run `isaaclab_arena_environments/experiment_configs/getting_started_experiment.yaml`
24+
headless, set the shared episode count to 4, and don't edit the YAML."
2425

2526
Expected behavior:
2627

27-
- Uses `--viz none` and the local override `shared.rollout_limit.num_episodes=4`.
28+
- Passes the maintained configuration explicitly with `--experiment_config`, uses `--viz none`,
29+
and applies the local override `shared.rollout_limit.num_episodes=4`.
2830
- Leaves the Experiment Definition unchanged and reports the effective override.
2931
- Verifies canonical results and per-Run episode records after execution.
3032

skills/user/serve-openpi-policy/SKILL.md

Lines changed: 3 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -107,10 +107,11 @@ terminal session handle when this workflow started the server. If `run-experimen
107107
server, return control to it while the retained session remains active so it can execute the
108108
Experiment and verify artifacts. Do not invoke the Experiment Runner here.
109109

110-
When the user approves a different port, provide the corresponding per-Run Hydra override, for
111-
example:
110+
When the selected variant or port differs from the Experiment configuration, provide every
111+
corresponding per-Run Hydra override so the client and server remain compatible, for example:
112112

113113
```text
114+
runs.<run-name>.policy.policy_variant=pi0
114115
runs.<run-name>.policy.remote_port=8001
115116
```
116117

skills/user/serve-openpi-policy/evaluations.md

Lines changed: 7 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -36,18 +36,22 @@ Known failure modes:
3636

3737
## Scenario 3: Select Pi0 On A Non-Default Port
3838

39-
Query: "Serve pi0 on port 8001 and use it for the `openpi_rollout` Run."
39+
Query: "Serve pi0 on port 8001 and use it for the `droid_pnp_openpi` Run in
40+
`isaaclab_arena_environments/experiment_configs/droid_pnp_openpi_experiment.yaml`."
4041

4142
Expected behavior:
4243

4344
- Validates the pi0 variant and port, checks the port for conflicts, and starts or reuses the exact
4445
matching server.
45-
- Returns `runs.openpi_rollout.policy.remote_port=8001` to `run-experiment` without editing YAML.
46+
- Detects that the Run selects pi05 and returns both
47+
`runs.droid_pnp_openpi.policy.policy_variant=pi0` and
48+
`runs.droid_pnp_openpi.policy.remote_port=8001` to `run-experiment` without editing YAML.
4649
- Keeps server lifecycle separate from Experiment execution and artifact verification.
4750

4851
Known failure modes:
4952

50-
- Serves the default pi05 variant, applies a shared or OSMO override, or edits the Experiment.
53+
- Serves the default pi05 variant, returns only the port override and leaves the client configured
54+
for pi05, applies a shared or OSMO override, or edits the Experiment.
5155

5256
## Scenario 4: Preserve An Occupied Port
5357

skills/user/setup-arena/SKILL.md

Lines changed: 28 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -1,7 +1,7 @@
11
---
22
name: setup-arena
33
description: Sets up and verifies a runnable Isaac Lab-Arena checkout using the supported native uv source, native uv wheel, or Docker route. Use when installing Arena, preparing a fresh checkout to run examples or evaluations, choosing between uv and Docker, starting or attaching to the Arena container, mounting datasets/models/evaluation outputs, enabling cuRobo, or checking whether an installation is ready. Do not use for contributor hooks, forced image rebuilds, pytest regression testing, or experiment configuration.
4-
allowed-tools: Read Grep Glob Skill Bash(git rev-parse *) Bash(git submodule *) Bash(head *) Bash(id -un) Bash(test -d *) Bash(test -x *) Bash(uv --version) Bash(uv sync *) Bash(nvidia-smi *) Bash(.venv/bin/python *) Bash(./docker/run_docker.sh *) Bash(docker exec *) Bash(docker images *) Bash(docker inspect *) Bash(docker ps *)
4+
allowed-tools: Read Grep Glob Skill Bash(git rev-parse *) Bash(git submodule *) Bash(head *) Bash(id -un) Bash(test -d *) Bash(test -x *) Bash(uv --version) Bash(uv sync *) Bash(nvidia-smi *) Bash(.venv/bin/python *) Bash(./docker/run_docker.sh *) Bash(docker exec *) Bash(docker images *) Bash(docker inspect *) Bash(docker ps *) Bash(docker stop isaaclab_arena-*)
55
---
66

77
# Setup Arena
@@ -37,6 +37,10 @@ uv does not provide the optional cuRobo package; use Docker with `-c` for `ik_re
3737
4. Show the chosen route, exact documented commands, expected downloads/build, and any required
3838
EULA or host-directory changes. Ask once before starting a large sync or image build.
3939

40+
Run the documentation read and safe read-only preflight immediately; do not ask for confirmation or
41+
defer them as a proposed plan. Confirmation is only for the state-changing sync, build, or stop that
42+
follows the preflight.
43+
4044
If a prerequisite is missing, report the failed check and the documented recovery. Do not install or
4145
change GPU drivers, Docker, the NVIDIA Container Toolkit, or other system packages without explicit
4246
approval.
@@ -92,18 +96,33 @@ Use these options only when the request needs them:
9296
Confirm that each explicitly requested mount path exists before launching. Mount flags apply only
9397
when creating a container; they do not change an already-running container. If the requested
9498
configuration differs, explain that recreation is required and obtain approval before stopping the
95-
existing container.
99+
checkout-specific Arena container. Before asking for approval, inspect its exact name, image, and
100+
mounts and show the complete reconstructed launcher command. Populate this shape from the inspected
101+
configuration instead of relying on launcher defaults:
102+
103+
```bash
104+
./docker/run_docker.sh [-c] [-s <current-suffix>] -d <new-datasets> \
105+
[-m <current-models>] [-e <current-evaluation>]
106+
```
107+
108+
Include `-c` for an existing cuRobo image, `-s` for an existing suffix, and each current model or
109+
evaluation mount. Replace only the mount the user asked to change, and stop the container only after
110+
the user approves that exact command.
96111

97112
The launcher builds a missing image, starts this checkout's container, and attaches interactively.
98113
Keep that process alive in a terminal session. Do not force a rebuild here; use `dev-container` for
99114
an explicit contributor rebuild or image-debugging request.
100115

101-
Discover the running container without hardcoding its name:
116+
List the containers for this checkout without hardcoding a name:
102117

103118
```bash
104-
ARENA_CONTAINER=$(docker ps --filter "volume=$(git rev-parse --show-toplevel)" --format '{{.Names}}' | head -1)
119+
docker ps --filter "volume=$(git rev-parse --show-toplevel)" --format '{{.Names}}\t{{.Image}}'
105120
```
106121

122+
Select the exact name matching the chosen image flavor and suffix and assign it to
123+
`ARENA_CONTAINER`. Do not take an arbitrary first match because regular and cuRobo containers can
124+
coexist for one checkout.
125+
107126
Verify the editable source mount as the host user:
108127

109128
```bash
@@ -123,3 +142,8 @@ zero-action exit status when run. Treat setup readiness separately from policy s
123142
Use `dev-container` for contributor bootstrap or forced rebuilds and `run-tests` only when the user
124143
explicitly asks for regression testing. Treat any requested experiment as the next workflow after
125144
setup; do not absorb its policy, configuration, execution, or artifact checks into this skill.
145+
146+
## References
147+
148+
- [Evaluation scenarios](evaluations.md)
149+
- [Installation workflow](../../../docs/pages/quickstart/installation.rst)
Lines changed: 85 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,85 @@
1+
# Setup Arena Evaluations
2+
3+
## Scenario 1: Choose The Native Source Route
4+
5+
Query: "I just cloned Arena and want to use it for imitation learning. Set up the recommended native
6+
runtime and stop when it is ready."
7+
8+
Expected behavior:
9+
10+
- Reads `docs/pages/quickstart/installation.rst` and inspects the checkout, submodules, existing
11+
runtime, and GPU before changing state.
12+
- Selects the native Isaac Lab source flavor because it supports imitation learning.
13+
- Shows `git submodule update --init --recursive` and `uv sync --extra dev`, explains the sync and
14+
EULA handling, and obtains confirmation before starting the large sync.
15+
- Uses `.venv/bin/python`, verifies that `isaaclab_arena` imports from this checkout, runs the
16+
documented 20-step zero-action validation, reports the interpreter, import path, and exit status,
17+
and stops without starting imitation learning.
18+
19+
Known failure modes:
20+
21+
- Selects the wheel flavor even though it does not include Isaac Lab's imitation-learning scripts.
22+
- Syncs before inspecting the checkout or obtaining the required confirmation.
23+
- Treats a successful import alone as readiness or starts the downstream workflow.
24+
25+
## Scenario 2: Honor The Wheel Flavor
26+
27+
Query: "Switch this checkout from its source-flavor `.venv` to the published Isaac Lab wheel for
28+
local policy evaluation. I do not need reinforcement or imitation learning."
29+
30+
Expected behavior:
31+
32+
- Honors the requested wheel route and explains that it replaces the source flavor in the shared
33+
`.venv`.
34+
- After the required sync confirmation, uses
35+
`uv sync --no-default-groups --group isaaclab-from-wheel --extra dev`.
36+
- Uses `.venv/bin/python` rather than a bare `uv run`, verifies the checkout import and zero-action
37+
rollout, reports the interpreter, import path, and exit status, and does not run the unsupported
38+
full source test suite.
39+
40+
Known failure modes:
41+
42+
- Uses `uv sync --extra dev`, a bare `uv run`, or claims both native flavors coexist.
43+
- Switches to Docker or source despite the explicit supported wheel request.
44+
45+
## Scenario 3: Set Up cuRobo
46+
47+
Query: "I've cloned Arena and need the `ik_reachable` validation check. Set up the supported runtime
48+
and stop when it is ready."
49+
50+
Expected behavior:
51+
52+
- Selects Docker because native `uv` does not include cuRobo, initializes source submodules, and
53+
launches with `./docker/run_docker.sh -c`.
54+
- Inspects the GPU, image, and checkout-specific container; reuses a compatible runtime when
55+
available, otherwise explains the image build and obtains confirmation before starting it.
56+
- Verifies the checkout import and zero-action rollout, reports the container, import path, and exit
57+
status, then stops without configuring or running reachability validation.
58+
59+
Known failure modes:
60+
61+
- Uses a native installation or omits `-c`.
62+
- Rebuilds unnecessarily, starts a large build without confirmation, or continues into validation
63+
configuration.
64+
65+
## Scenario 4: Change A Docker Mount Safely
66+
67+
Query: "My Arena Docker container is already running, but I need it to use a different datasets
68+
directory. Help me change the mount."
69+
70+
Expected behavior:
71+
72+
- Inspects the current container configuration and asks for the exact host path instead of guessing
73+
or creating one; verifies that path after the user provides it.
74+
- Explains that mount flags apply only at container creation and obtains explicit approval before
75+
stopping the checkout-specific Arena container.
76+
- After the user supplies the path and approves recreation, preserves the image flavor, container
77+
suffix, and model and evaluation mounts while replacing the datasets mount.
78+
- Re-verifies the checkout import and zero-action rollout after recreation and reports the new
79+
container, import path, and exit status.
80+
81+
Known failure modes:
82+
83+
- Claims the mount can be changed on the running container or merely reruns the launcher.
84+
- Guesses a host path or stops the container before receiving the path and approval.
85+
- Recreates with default options and silently drops the existing image flavor, suffix, or mounts.

0 commit comments

Comments
 (0)