Skip to content

feat(evals): ABC Sim suites on OpenYAM - #5259

Draft
ruthwikdasyam wants to merge 16 commits into
mainfrom
ruthwik/feat/abc-sim-suites
Draft

ruthwikdasyam wants to merge 16 commits into
mainfrom
ruthwik/feat/abc-sim-suites

Conversation

@ruthwikdasyam

@ruthwikdasyam ruthwikdasyam commented Nov 13, 2026 •

Copy link
Copy Markdown
Contributor

Problem

There are no ABC Sim tasks in the evals.

Changes

  • ABC Sim scenes as LFS archives (data/.lfs/abc_*.tar.gz).
  • openyam-manipulation-sim (one arm) and dual-openyam-abc-sim (both arms) blueprints.
  • Suites:
    • abc_sim: all 33 ABC tasks, both OpenYAM arms.
    • abc_sim_single_arm: 3 tasks, one arm.
  • Pose graders in dimos/evals/scorers.py.
  • Cases find objects with manipulation-localize, and get grasps from the heuristic grasp module.
  • Ground truth kept from the agent:
    • peek_stream refuses body_poses.
    • The porcelain cannot call the sim's reset, respawn_at or scene_path (remote_hidden_rpcs).
    • The prompt forbids recordings, data/ and the MuJoCo model.
  • Joint feedback a hair past a limit is clamped onto it. Before, IK and RoboPlan rejected the start state.
  • Eval image: Node 24 (the dimos agent needs it), libEGL, dimos agent prebuilt.

Testing

  • Unit tests for the clamp, hidden RPCs and the env vars.
  • Ran 3 cases on EC2 with pi and the dimos agent (Fable 5.1).

@github-actions github-actions Bot left a comment •

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

go2 replay realtime (arm64)

Details
Benchmark suite Current: a782cde Previous: 5e0ebfd Ratio
peak memory 1739.906 MB 1715.605 MB 1.01
peak threads 382 threads 379 threads 1.01
network (transport) 2725.832 MB 2727.928 MB 1.00
disk write 1.613 MB 1.93 MB 0.84
instructions 137.299 G 138.562 G 0.99

This comment was automatically generated by workflow using github-action-benchmark.

@codecov

codecov Bot commented Nov 13, 2026 •

Copy link
Copy Markdown

❌ 2 Tests Failed:

Tests completed Failed Passed Skipped
9567 2 9565 68
View the top 2 failed test(s) by shortest run time
experimental.gateway.tests.test_config::test_every_registered_blueprint_is_annotated
Stack Traces | 0.215s run time
def test_every_registered_blueprint_is_annotated() -> None:
        source = annotation_file.load()
        annotated = {name for robot in source["robots"].values() for name in robot["blueprints"]}
        missing = sorted(
            name
            for name in all_blueprints
            if name not in annotated and not annotation_file.HIDDEN_NAME.search(name)
        )
>       assert not missing, f"add these to experimental/gateway/annotations.yaml: {', '.join(missing)}"
E       AssertionError: add these to experimental/gateway/annotations.yaml: dual-openyam-abc-sim, openyam-manipulation-sim
E       assert not ['dual-openyam-abc-sim', 'openyam-manipulation-sim']

annotated  = {'a1z-keyboard-teleop', 'a1z-planner-coordinator', 'a1z-teleop', 'alfred-keyboard-teleop', 'alfred-mls-nav', 'alfred-mls-nav-lidar', ...}
missing    = ['dual-openyam-abc-sim', 'openyam-manipulation-sim']
source     = {'robots': {'a1z': {'blueprints': {'a1z-keyboard-teleop': {'description': "Move a real A1Z's end and its gripper with ...': {'label': 'Arms'}, 'dog': {'label': 'Dogs'}, 'drone': {'label': 'Drones'}, 'humanoid': {'label': 'Humanoids'}, ...}}

.../gateway/tests/test_config.py:325: AssertionError
dimos.codebase_checks.test_no_underscore_assign::test_no_underscore_assignment
Stack Traces | 9.34s run time
def test_no_underscore_assignment():
        """Fail if any file assigns to a bare `_`."""
        dimos_dir = DIMOS_PROJECT_ROOT / "dimos"
        hits = find_underscore_assignments()
        if hits:
            listing = "\n".join(f"  - {p.relative_to(dimos_dir)}:{lineno}" for p, lineno in hits)
>           raise AssertionError(
                f"Found assignment(s) to `_` in dimos/:\n{listing}\n\n"
                "Assigning to `_` is not allowed: it hides an unused variable instead "
                "of removing it. Delete the variable. If you only need the "
                "expression's side effect, evaluate it directly with a call "
                "(`obj.method()`, `getattr(obj, 'attr')`) or log it; a bare attribute "
                "access needs `# noqa: B018`. Tuple unpacking (`a, _ = f()`) is fine "
                "and not flagged by this rule."
            )
E           AssertionError: Found assignment(s) to `_` in dimos/:
E             - porcelain/test_dimos.py:219
E           
E           Assigning to `_` is not allowed: it hides an unused variable instead of removing it. Delete the variable. If you only need the expression's side effect, evaluate it directly with a call (`obj.method()`, `getattr(obj, 'attr')`) or log it; a bare attribute access needs `# noqa: B018`. Tuple unpacking (`a, _ = f()`) is fine and not flagged by this rule.

dimos_dir  = PosixPath('.../dimos/dimos/dimos')
hits       = [(PosixPath('.../dimos/dimos/dimos/porcelain/test_dimos.py'), 219)]
listing    = '  - porcelain/test_dimos.py:219'

dimos/codebase_checks/test_no_underscore_assign.py:55: AssertionError

To view more test analytics, go to the Test Analytics Dashboard
📋 Got 3 mins? Take this short survey to help us improve Test Analytics.

Base automatically changed from ruthwik/refactor/replace-osr-with-localize to main November 13, 2026 21:35
@ruthwikdasyam
ruthwikdasyam force-pushed the ruthwik/feat/abc-sim-suites branch from d208735 to 3325701 Compare November 13, 2026 23:02
Three ABC Sim (amazon-far/abc) scenes, each its own LFS archive: count into
a lidded box, grab from clutter, and put-relative. One YAM arm does the task
and the other stays parked.

- abc_yam: planning URDF generated from ABC's YAM MJCF, so planner and sim
  share the same kinematics (the i2rt URDF is up to ~1.2 cm off).
- openyam-manipulation-sim: ManipulationModule + skills on the sim_mujoco
  adapter, with ABC's fixed overhead camera.
- abc_sim suite with count_inside and placed_beside graders, following
  abc_sim/task_eval.
One LFS archive per ABC Sim scene (env_task), abc_<env_task>, 20 in all, built
from amazon-far/abc @ d0832d1 XML and asset files only (ABC's Python is not
run). Both YAM arms stay active: ABC's 14 position actuators, in its own order,
are what MujocoSimModule drives with dof=14.

- abc_yam: dual_yam.urdf (two arms on ABC's mount, 5e-9 m grasp-site error vs
  the MJCF) and every arm mesh, which the scenes load from ../abc_yam/meshes.
- Fixed layouts: ABC's templates; put_bottles, dishrack and inhand_transfer are
  filled with ABC's default variants at its nominal spots; six chess pieces
  start off the board; the building-blocks L block no longer starts inside the
  table; the conveyor belt does not move (ABC drives it from Python).
- Physics step as in abc_sim/task_registry.py (0.5 ms pour, 0.2 ms drawer).

See data/abc_yam/SOURCE.md.
dual-openyam-abc-sim drives both simulated YAM arms in an ABC scene
(data/abc_<task>): one planning group per arm (left_manipulator,
right_manipulator) on abc_yam/dual_yam.urdf, one 14-joint sim_mujoco device
(arm/left_joint1..6, arm/left_gripper, then the right arm), one trajectory task
for both arms and a gripper task per jaw.

The sim adapter reports every joint as +-pi, so the device declares ABC's joint
ranges and each gripper's finger travel (0 closed, 0.0475 m open). The camera
is ABC's fixed overhead "top" camera. AbcScenePath pulls abc_yam along with a
scene, since the scenes load their arm meshes from it.
Graders on recorded body poses that follow abc_sim/task_eval: in_box (items in
a container's region, others kept out), in_cylinder (beads in a cup, mugs on a
mug tree), upright and standing (mugs flipped and at rest, plates on edge),
spelled (letter cubes in reading order), set_up (chess pieces back on their
squares, identical pieces interchangeable), crossed_table (in-hand transfer),
held_on_tray, tower, and all_of to combine them.

held_on_tray is stricter than ABC's ball-tray evaluator, which passes a robot
that never moves: the tray must stay lifted with the ball on it for the last
10 s. ABC has no evaluator for its wood-block tower; tower is ours.
dimos.evals.suites.abc_sim now has one case per ABC task spec
(abc_sim/task_specs.py), abc_<spec name>, each in its ABC scene on
dual-openyam-abc-sim and graded on recorded body poses. Cases are tagged with
the ABC scene, the task family, and dual_arm (24) or single_arm (9).

Departures from ABC, all tagged or documented in the suite: fixed layouts and
object-naming prompts instead of randomized episodes; a still conveyor belt
(static_belt); a stricter ball-tray grade; our own graders for the three
marker drawers and the wood-block tower (ours_grader).

The three single-arm cases move to dimos.evals.suites.abc_sim_single_arm.
Like the other manipulation suites, both drive the arms through the Python API
instead of an MCP server.
…ompts

Both OpenYAM sim blueprints gain HeuristicGraspModule. The cases drop
observe-skill and the no-op disable list, give the task plus a one-line note
on the modules instead of table heights and frames, and let localize confirm
an object from one view, as the overhead camera never moves.
Sim feedback at -1.5708074 against a -1.5708 limit made Pink IK and RoboPlan
reject every start state.
…agent

remote_hidden_rpcs leaves them out of list_modules, so the porcelain client
cannot call them; the coordinator still calls scene_path in-process.
@ruthwikdasyam
ruthwikdasyam force-pushed the ruthwik/feat/abc-sim-suites branch from bb03814 to 9c135b7 Compare November 14, 2026 04:01
…os agent

- NVIDIA EGL vendor file and graphics capability, for MUJOCO_GL=egl.
- Chromium through npx: the deno playwright install stalls after the download.
- web/sdk and web/shared in the build context, which the dimos agent build reads.

This branch has not been deployed

No deployments
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant