Skip to content

Add LeRobot LIBERO policy rollout#2667

Draft
TomCC7 wants to merge 12 commits into
cc/frontierfrom
cc/frontier_/policy-eval
Draft

Add LeRobot LIBERO policy rollout#2667
TomCC7 wants to merge 12 commits into
cc/frontierfrom
cc/frontier_/policy-eval

Conversation

@TomCC7

@TomCC7 TomCC7 commented Jun 30, 2026

Copy link
Copy Markdown
Member

Problem

DimOS had LIBERO runtime plumbing for scripted motor-surface demos, but no policy rollout path that exercised a real LeRobot policy through DimOS-owned inference, contract conversion, native runtime actions, and benchmark evaluation artifacts.

The official LeRobot LIBERO checkpoints use a native relative end-effector delta + gripper action surface, not the existing joint-position motor frame path. That left the policy benchmark blocked on overloaded motor semantics, missing rollout ownership boundaries, and manual environment setup.

Solution

  • Add a native runtime action frame to the shared runtime protocol and support StepRequest action unions.
  • Add native LIBERO action mode to the sidecar while preserving existing motor-frame mode.
  • Add robot-learning rollout components:
    • RobotPolicyModule
    • batch-first PolicyBackend
    • in-process LeRobotBackend
    • VlaJepaLiberoRobotContract
    • BenchmarkPolicyEvalRunner
  • Add a LeRobot VLA-JEPA LIBERO rollout demo/gate script with:
    • 50 episode libero_object matrix
    • strict success_rate > 0.50 gate
    • structured artifacts and optional videos
    • fake-backend smoke path
  • Auto-discover standard LIBERO package assets and create LIBERO config noninteractively.
  • Archive the completed OpenSpec change and sync specs.

Verification

  • uv run ruff check scripts/benchmarks/demo_lerobot_libero_policy_rollout.py dimos/robot_learning/policy_rollout packages/dimos-libero-pro-sidecar/src/dimos_libero_pro_sidecar/server.py packages/dimos-runtime-protocol/src/dimos_runtime_protocol packages/dimos-runtime-protocol/tests/test_models.py dimos/benchmark/runtime/test_libero_pro_sidecar_profile.py
  • uv run pytest packages/dimos-runtime-protocol/tests/test_models.py dimos/benchmark/runtime/test_libero_pro_sidecar_profile.py dimos/benchmark/runtime/test_sidecar_import_boundaries.py dimos/robot_learning/policy_rollout/test_robot_policy_module.py dimos/robot_learning/policy_rollout/test_evaluation.py dimos/robot_learning/policy_rollout/test_lerobot_backend.py dimos/robot_learning/policy_rollout/test_vla_jepa_libero_contract.py -q
  • openspec validate --all
  • External benchmark artifact verified on another machine: 50 episodes, 45 successes, success_rate=0.900, gate threshold > 0.50.

@codecov

codecov Bot commented Jun 30, 2026

Copy link
Copy Markdown

❌ 18 Tests Failed:

Tests completed Failed Passed Skipped
2408 18 2390 167
View the top 3 failed test(s) by shortest run time
::dimos.robot.manipulators.xarm.blueprints.test_gpd_mujoco_grasp_demo
Stack Traces | 0s run time
.../xarm/blueprints/test_gpd_mujoco_grasp_demo.py:41: in <module>
    from dimos.robot.manipulators.xarm.blueprints.simulation import (
        GPDGraspGenModule = <class 'dimos_gpd_grasp_demo.gpd_grasp_gen_module.GPDGraspGenModule'>
        GPD_GRASP_DEMO_ENV_NAME = 'dimos-gpd-grasp-demo'
        GPD_GRASP_DEMO_PROJECT = PosixPath('.../dimos/packages/dimos-gpd-grasp-demo')
        GraspCandidateArray = <class 'dimos.msgs.grasping_msgs.GraspCandidateArray.GraspCandidateArray'>
        GraspingModule = <class 'dimos.manipulation.grasping.grasping.GraspingModule'>
        MockerFixture = <class 'pytest_mock.plugin.MockerFixture'>
        ModuleCoordinator = <class 'dimos.core.coordination.module_coordinator.ModuleCoordinator'>
        ObjectSceneRegistrationModule = <class 'dimos.perception.object_scene_registration.ObjectSceneRegistrationModule'>
        Path       = <class 'pathlib.Path'>
        PickAndPlaceModule = <class 'dimos.manipulation.pick_and_place_module.PickAndPlaceModule'>
        PointCloud2 = <class 'dimos.msgs.sensor_msgs.PointCloud2.PointCloud2'>
        PointcloudGraspDemoController = <class 'dimos.manipulation.grasping.pointcloud_grasp_demo_controller.PointcloudGraspDemoController'>
        PythonProjectRuntimeEnvironment = <class 'dimos.core.runtime_environment.PythonProjectRuntimeEnvironment'>
        RegisteredObject = <class 'dimos.msgs.perception_msgs.RegisteredObject.RegisteredObject'>
        SceneReconstructionModule = <class 'dimos.perception.reconstruction.scene_reconstruction.SceneReconstructionModule'>
        TargetGraspDemoController = <class 'dimos.manipulation.grasping.target_grasp_demo_controller.TargetGraspDemoController'>
        VGNGraspGenModule = <class 'dimos.manipulation.grasping.vgn_grasp_gen_module.VGNGraspGenModule'>
        Vector3    = <class 'dimos.msgs.geometry_msgs.Vector3.Vector3'>
        __builtins__ = <builtins>
        __cached__ = '.../blueprints/__pycache__/test_gpd_mujoco_grasp_demo.cpython-312.pyc'
        __doc__    = None
        __file__   = '.../work/dimos/dimos/.../xarm/blueprints/test_gpd_mujoco_grasp_demo.py'
        __loader__ = <_pytest.assertion.rewrite.AssertionRewritingHook object at 0xffc77a748770>
        __name__   = 'dimos.robot.manipulators.xarm.blueprints.test_gpd_mujoco_grasp_demo'
        __package__ = 'dimos.robot.manipulators.xarm.blueprints'
        __spec__   = ModuleSpec(name='dimos.robot.manipulators.xarm.blueprints.test_gpd_mujoco_grasp_demo', loader=<_pytest.assertion.rewri...748770>, origin='.../work/dimos/dimos/.../xarm/blueprints/test_gpd_mujoco_grasp_demo.py')
        all_blueprints = {'alfred-nav': 'dimos.robot.diy.alfred.blueprints.alfred_nav:alfred_nav', 'coordinator-basic': 'dimos.control.blueprin...oordinator-cartesian-ik-piper': 'dimos.robot.manipulators.piper.blueprints.teleop:coordinator_cartesian_ik_piper', ...}
        annotations = _Feature((3, 7, 0, 'beta', 1), None, 16777216)
        os         = <module 'os' (frozen)>
        pytest     = <module 'pytest' from '.../dimos/dimos/.venv/lib/python3.12.../site-packages/pytest/__init__.py'>
.../xarm/blueprints/simulation.py:50: in <module>
    address=str(XARM7_SIM_PATH),
        GPDGraspGenModule = <class 'dimos_gpd_grasp_demo.gpd_grasp_gen_module.GPDGraspGenModule'>
        GraspingModule = <class 'dimos.manipulation.grasping.grasping.GraspingModule'>
        MujocoSimModule = <class 'dimos.simulation.engines.mujoco_sim_module.MujocoSimModule'>
        ObjectSceneRegistrationModule = <class 'dimos.perception.object_scene_registration.ObjectSceneRegistrationModule'>
        PickAndPlaceModule = <class 'dimos.manipulation.pick_and_place_module.PickAndPlaceModule'>
        PointcloudGraspDemoController = <class 'dimos.manipulation.grasping.pointcloud_grasp_demo_controller.PointcloudGraspDemoController'>
        RerunBridgeModule = <class 'dimos.visualization.rerun.bridge.RerunBridgeModule'>
        SceneReconstructionModule = <class 'dimos.perception.reconstruction.scene_reconstruction.SceneReconstructionModule'>
        TargetGraspDemoController = <class 'dimos.manipulation.grasping.target_grasp_demo_controller.TargetGraspDemoController'>
        VGNGraspGenModule = <class 'dimos.manipulation.grasping.vgn_grasp_gen_module.VGNGraspGenModule'>
        XARM7_SIM_HOME = [0.0, 0.0, 0.0, 0.0, 0.0, -0.7, ...]
        XARM7_SIM_PATH = <[RuntimeError("Failed to pull LFS file .../dimos/data/.lfs/xarm7.tar.gz after 3 attempts: Command...ude', 'data/.lfs/xarm7.tar.gz']' returned non-zero exit status 1.") raised in repr()] LfsPath object at 0xffc6cfd9b3d0>
        XARM7_VGN_OBSERVATION_HOME = [0.0, -0.247, 0.0, 0.909, 0.0, 1.15644, ...]
        __builtins__ = <builtins>
        __cached__ = '.../blueprints/__pycache__/simulation.cpython-312.pyc'
        __doc__    = 'Simulation xArm perception manipulation blueprints.'
        __file__   = '.../work/dimos/dimos/.../xarm/blueprints/simulation.py'
        __loader__ = <_frozen_importlib_external.SourceFileLoader object at 0xffc6888928d0>
        __name__   = 'dimos.robot.manipulators.xarm.blueprints.simulation'
        __package__ = 'dimos.robot.manipulators.xarm.blueprints'
        __spec__   = ModuleSpec(name='dimos.robot.manipulators.xarm.blueprints.simulation', loader=<_frozen_importlib_external.SourceFileLo...ject at 0xffc6888928d0>, origin='.../work/dimos/dimos/.../xarm/blueprints/simulation.py')
        annotations = _Feature((3, 7, 0, 'beta', 1), None, 16777216)
        autoconnect = <function autoconnect at 0xffc748a44ae0>
        coordinator = <function coordinator at 0xffc6cfd9cae0>
        gpd_grasp_gen_blueprint = <function gpd_grasp_gen_blueprint at 0xffc6ccab6f20>
        make_xarm7_model_config = <function make_xarm7_model_config at 0xffc6cfd9d580>
        make_xarm_hardware = <function make_xarm_hardware at 0xffc6cfd9d080>
        math       = <module 'math' (built-in)>
        trajectory_task = <function trajectory_task at 0xffc6cfd9c9a0>
dimos/utils/data.py:369: in __str__
    return str(self._ensure_downloaded())
        self       = <[RuntimeError("Failed to pull LFS file .../dimos/data/.lfs/xarm7.tar.gz after 3 attempts: Command...ude', 'data/.lfs/xarm7.tar.gz']' returned non-zero exit status 1.") raised in repr()] LfsPath object at 0xffc6cfd9b3d0>
dimos/utils/data.py:347: in _ensure_downloaded
    cache = get_data(filename)
        cache      = None
        filename   = 'xarm7/scene.xml'
        self       = <[RuntimeError("Failed to pull LFS file .../dimos/data/.lfs/xarm7.tar.gz after 3 attempts: Command...ude', 'data/.lfs/xarm7.tar.gz']' returned non-zero exit status 1.") raised in repr()] LfsPath object at 0xffc6cfd9b3d0>
dimos/utils/data.py:304: in get_data
    archive_path = _decompress_archive(_pull_lfs_archive(archive_name))
        archive_name = 'xarm7'
        data_dir   = PosixPath('.../dimos/dimos/data')
        file_path  = PosixPath('.../dimos/dimos/data/xarm7/scene.xml')
        name       = 'xarm7/scene.xml'
        nested_path = PosixPath('scene.xml')
        path_parts = ('xarm7', 'scene.xml')
dimos/utils/data.py:248: in _pull_lfs_archive
    _lfs_pull(file_path, repo_root)
        file_path  = PosixPath('.../dimos/data/.lfs/xarm7.tar.gz')
        filename   = 'xarm7'
        repo_root  = PosixPath('.../work/dimos/dimos')
dimos/utils/data.py:216: in _lfs_pull
    raise RuntimeError(
E   RuntimeError: Failed to pull LFS file .../dimos/data/.lfs/xarm7.tar.gz after 3 attempts: Command '['git', 'lfs', 'pull', '--include', 'data/.lfs/xarm7.tar.gz']' returned non-zero exit status 1.
        attempt    = 3
        env        = {'ACCEPT_EULA': 'Y', 'ACTIONS_ID_TOKEN_REQUEST_TOKEN': 'eyJhbGciOiJSUzI1NiIsImtpZCI6IjM4ODI2YjE3LTZhMzAtNWY5Yi1iMTY5LT...-version=2.0', 'ACTIONS_ORCHESTRATION_ID': '31142b61-4745-40b0-b3f6-5f7d7f28265a.tests.ubuntu-24_04-arm_3_14_fal', ...}
        file_path  = PosixPath('.../dimos/data/.lfs/xarm7.tar.gz')
        last_err   = CalledProcessError(1, ['git', 'lfs', 'pull', '--include', 'data/.lfs/xarm7.tar.gz'])
        relative_path = PosixPath('data/.lfs/xarm7.tar.gz')
        repo_root  = PosixPath('.../work/dimos/dimos')
        retries    = 2
::dimos.robot.manipulators.xarm.blueprints.test_vgn_mujoco_grasp_demo
Stack Traces | 0s run time
.../xarm/blueprints/test_vgn_mujoco_grasp_demo.py:20: in <module>
    from dimos.robot.manipulators.xarm.blueprints.simulation import (
        GraspingModule = <class 'dimos.manipulation.grasping.grasping.GraspingModule'>
        ObjectSceneRegistrationModule = <class 'dimos.perception.object_scene_registration.ObjectSceneRegistrationModule'>
        SceneReconstructionModule = <class 'dimos.perception.reconstruction.scene_reconstruction.SceneReconstructionModule'>
        TargetGraspDemoController = <class 'dimos.manipulation.grasping.target_grasp_demo_controller.TargetGraspDemoController'>
        VGNGraspGenModule = <class 'dimos.manipulation.grasping.vgn_grasp_gen_module.VGNGraspGenModule'>
        __builtins__ = <builtins>
        __cached__ = '.../blueprints/__pycache__/test_vgn_mujoco_grasp_demo.cpython-312.pyc'
        __doc__    = None
        __file__   = '.../work/dimos/dimos/.../xarm/blueprints/test_vgn_mujoco_grasp_demo.py'
        __loader__ = <_pytest.assertion.rewrite.AssertionRewritingHook object at 0xffc77a748770>
        __name__   = 'dimos.robot.manipulators.xarm.blueprints.test_vgn_mujoco_grasp_demo'
        __package__ = 'dimos.robot.manipulators.xarm.blueprints'
        __spec__   = ModuleSpec(name='dimos.robot.manipulators.xarm.blueprints.test_vgn_mujoco_grasp_demo', loader=<_pytest.assertion.rewri...748770>, origin='.../work/dimos/dimos/.../xarm/blueprints/test_vgn_mujoco_grasp_demo.py')
.../xarm/blueprints/simulation.py:50: in <module>
    address=str(XARM7_SIM_PATH),
        GPDGraspGenModule = <class 'dimos_gpd_grasp_demo.gpd_grasp_gen_module.GPDGraspGenModule'>
        GraspingModule = <class 'dimos.manipulation.grasping.grasping.GraspingModule'>
        MujocoSimModule = <class 'dimos.simulation.engines.mujoco_sim_module.MujocoSimModule'>
        ObjectSceneRegistrationModule = <class 'dimos.perception.object_scene_registration.ObjectSceneRegistrationModule'>
        PickAndPlaceModule = <class 'dimos.manipulation.pick_and_place_module.PickAndPlaceModule'>
        PointcloudGraspDemoController = <class 'dimos.manipulation.grasping.pointcloud_grasp_demo_controller.PointcloudGraspDemoController'>
        RerunBridgeModule = <class 'dimos.visualization.rerun.bridge.RerunBridgeModule'>
        SceneReconstructionModule = <class 'dimos.perception.reconstruction.scene_reconstruction.SceneReconstructionModule'>
        TargetGraspDemoController = <class 'dimos.manipulation.grasping.target_grasp_demo_controller.TargetGraspDemoController'>
        VGNGraspGenModule = <class 'dimos.manipulation.grasping.vgn_grasp_gen_module.VGNGraspGenModule'>
        XARM7_SIM_HOME = [0.0, 0.0, 0.0, 0.0, 0.0, -0.7, ...]
        XARM7_SIM_PATH = <[RuntimeError("Failed to pull LFS file .../dimos/data/.lfs/xarm7.tar.gz after 3 attempts: Command...ude', 'data/.lfs/xarm7.tar.gz']' returned non-zero exit status 1.") raised in repr()] LfsPath object at 0xffc6cfd9b3d0>
        XARM7_VGN_OBSERVATION_HOME = [0.0, -0.247, 0.0, 0.909, 0.0, 1.15644, ...]
        __builtins__ = <builtins>
        __cached__ = '.../blueprints/__pycache__/simulation.cpython-312.pyc'
        __doc__    = 'Simulation xArm perception manipulation blueprints.'
        __file__   = '.../work/dimos/dimos/.../xarm/blueprints/simulation.py'
        __loader__ = <_frozen_importlib_external.SourceFileLoader object at 0xffc6888f06b0>
        __name__   = 'dimos.robot.manipulators.xarm.blueprints.simulation'
        __package__ = 'dimos.robot.manipulators.xarm.blueprints'
        __spec__   = ModuleSpec(name='dimos.robot.manipulators.xarm.blueprints.simulation', loader=<_frozen_importlib_external.SourceFileLo...ject at 0xffc6888f06b0>, origin='.../work/dimos/dimos/.../xarm/blueprints/simulation.py')
        annotations = _Feature((3, 7, 0, 'beta', 1), None, 16777216)
        autoconnect = <function autoconnect at 0xffc748a44ae0>
        coordinator = <function coordinator at 0xffc6cfd9cae0>
        gpd_grasp_gen_blueprint = <function gpd_grasp_gen_blueprint at 0xffc6ccab6f20>
        make_xarm7_model_config = <function make_xarm7_model_config at 0xffc6cfd9d580>
        make_xarm_hardware = <function make_xarm_hardware at 0xffc6cfd9d080>
        math       = <module 'math' (built-in)>
        trajectory_task = <function trajectory_task at 0xffc6cfd9c9a0>
dimos/utils/data.py:369: in __str__
    return str(self._ensure_downloaded())
        self       = <[RuntimeError("Failed to pull LFS file .../dimos/data/.lfs/xarm7.tar.gz after 3 attempts: Command...ude', 'data/.lfs/xarm7.tar.gz']' returned non-zero exit status 1.") raised in repr()] LfsPath object at 0xffc6cfd9b3d0>
dimos/utils/data.py:347: in _ensure_downloaded
    cache = get_data(filename)
        cache      = None
        filename   = 'xarm7/scene.xml'
        self       = <[RuntimeError("Failed to pull LFS file .../dimos/data/.lfs/xarm7.tar.gz after 3 attempts: Command...ude', 'data/.lfs/xarm7.tar.gz']' returned non-zero exit status 1.") raised in repr()] LfsPath object at 0xffc6cfd9b3d0>
dimos/utils/data.py:304: in get_data
    archive_path = _decompress_archive(_pull_lfs_archive(archive_name))
        archive_name = 'xarm7'
        data_dir   = PosixPath('.../dimos/dimos/data')
        file_path  = PosixPath('.../dimos/dimos/data/xarm7/scene.xml')
        name       = 'xarm7/scene.xml'
        nested_path = PosixPath('scene.xml')
        path_parts = ('xarm7', 'scene.xml')
dimos/utils/data.py:248: in _pull_lfs_archive
    _lfs_pull(file_path, repo_root)
        file_path  = PosixPath('.../dimos/data/.lfs/xarm7.tar.gz')
        filename   = 'xarm7'
        repo_root  = PosixPath('.../work/dimos/dimos')
dimos/utils/data.py:216: in _lfs_pull
    raise RuntimeError(
E   RuntimeError: Failed to pull LFS file .../dimos/data/.lfs/xarm7.tar.gz after 3 attempts: Command '['git', 'lfs', 'pull', '--include', 'data/.lfs/xarm7.tar.gz']' returned non-zero exit status 1.
        attempt    = 3
        env        = {'ACCEPT_EULA': 'Y', 'ACTIONS_ID_TOKEN_REQUEST_TOKEN': 'eyJhbGciOiJSUzI1NiIsImtpZCI6IjM4ODI2YjE3LTZhMzAtNWY5Yi1iMTY5LT...-version=2.0', 'ACTIONS_ORCHESTRATION_ID': '31142b61-4745-40b0-b3f6-5f7d7f28265a.tests.ubuntu-24_04-arm_3_14_fal', ...}
        file_path  = PosixPath('.../dimos/data/.lfs/xarm7.tar.gz')
        last_err   = CalledProcessError(1, ['git', 'lfs', 'pull', '--include', 'data/.lfs/xarm7.tar.gz'])
        relative_path = PosixPath('data/.lfs/xarm7.tar.gz')
        repo_root  = PosixPath('.../work/dimos/dimos')
        retries    = 2
dimos.manipulation.test_pick_and_place_unit.TestFindObjectInDetections::test_empty_snapshot_returns_none
Stack Traces | 0.002s run time
@pytest.fixture
    def module() -> PickAndPlaceModule:
        """Create a PickAndPlaceModule with heavy base init (RPC, config) patched out."""
        with patch.object(ModuleBase, "__init__", lambda self, config_args: None):
>           return PickAndPlaceModule()


dimos/manipulation/test_pick_and_place_unit.py:60: 
_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ 
dimos/manipulation/pick_and_place_module.py:84: in __init__
    super().__init__(**kwargs)
        __class__  = <class 'dimos.manipulation.pick_and_place_module.PickAndPlaceModule'>
        kwargs     = {}
        self       = <dimos.manipulation.pick_and_place_module.PickAndPlaceModule object at 0xffd33bb5c4d0>
dimos/manipulation/manipulation_module.py:185: in __init__
    super().__init__(**kwargs)
        __class__  = <class 'dimos.manipulation.manipulation_module.ManipulationModule'>
        kwargs     = {}
        self       = <dimos.manipulation.pick_and_place_module.PickAndPlaceModule object at 0xffd33bb5c4d0>
_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ 

self = <dimos.manipulation.pick_and_place_module.PickAndPlaceModule object at 0xffd33bb5c4d0>
kwargs = {}
config = PickAndPlaceModuleConfig(rpc_transport=<class 'dimos.protocol.rpc.pubsubrpc.LCMRPC'>, default_rpc_timeout=120.0, rpc_t..._smoothing_max_joint_deviation=0.02, roboplan_smoothing_edge_step_size=0.02, roboplan_smoothing_min_keep_fraction=0.1))
io_contract = ModuleIOContract(streams=(StreamDecl(name='coordinator_joint_state', direction='in', type=<class 'dimos.msgs.sensor_ms...'>), StreamDecl(name='objects', direction='in', type=list[dimos.perception.detection.type.detection3d.object.Object])))
default_contract = True
decl = StreamDecl(name='objects', direction='in', type=list[dimos.perception.detection.type.detection3d.object.Object])
annotated_stream_keys = {('coordinator_joint_state', 'in'), ('objects', 'in')}
install_attribute = True

    def __init__(self, **kwargs: Any) -> None:
        self.ref = None
        self._inputs: dict[str, In[Any]] = {}
        self._outputs: dict[str, Out[Any]] = {}
        config = type(self).resolve_config(kwargs)
        io_contract = type(self).io_contract(config)
        default_contract = _uses_default_io_contract(type(self))
        annotated_stream_keys = {
            (decl.name, decl.direction) for decl in _stream_decls_from_annotations(type(self))
        }
    
        for decl in io_contract.streams:
            install_attribute = (
                default_contract or (decl.name, decl.direction) in annotated_stream_keys
            )
            self._register_stream_decl(decl, install_attribute=install_attribute)
>       super().__init__(config_args=kwargs, resolved_config=config)
E       TypeError: module.<locals>.<lambda>() got an unexpected keyword argument 'resolved_config'

__class__  = <class 'dimos.core.module.Module'>
annotated_stream_keys = {('coordinator_joint_state', 'in'), ('objects', 'in')}
config     = PickAndPlaceModuleConfig(rpc_transport=<class 'dimos.protocol.rpc.pubsubrpc.LCMRPC'>, default_rpc_timeout=120.0, rpc_t..._smoothing_max_joint_deviation=0.02, roboplan_smoothing_edge_step_size=0.02, roboplan_smoothing_min_keep_fraction=0.1))
decl       = StreamDecl(name='objects', direction='in', type=list[dimos.perception.detection.type.detection3d.object.Object])
default_contract = True
install_attribute = True
io_contract = ModuleIOContract(streams=(StreamDecl(name='coordinator_joint_state', direction='in', type=<class 'dimos.msgs.sensor_ms...'>), StreamDecl(name='objects', direction='in', type=list[dimos.perception.detection.type.detection3d.object.Object])))
kwargs     = {}
self       = <dimos.manipulation.pick_and_place_module.PickAndPlaceModule object at 0xffd33bb5c4d0>

dimos/core/module.py:834: TypeError
dimos.manipulation.test_pick_and_place_unit.TestFindObjectInDetections::test_find_by_object_id
Stack Traces | 0.002s run time
@pytest.fixture
    def module() -> PickAndPlaceModule:
        """Create a PickAndPlaceModule with heavy base init (RPC, config) patched out."""
        with patch.object(ModuleBase, "__init__", lambda self, config_args: None):
>           return PickAndPlaceModule()


dimos/manipulation/test_pick_and_place_unit.py:60: 
_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ 
dimos/manipulation/pick_and_place_module.py:84: in __init__
    super().__init__(**kwargs)
        __class__  = <class 'dimos.manipulation.pick_and_place_module.PickAndPlaceModule'>
        kwargs     = {}
        self       = <dimos.manipulation.pick_and_place_module.PickAndPlaceModule object at 0xffd33bb5d5b0>
dimos/manipulation/manipulation_module.py:185: in __init__
    super().__init__(**kwargs)
        __class__  = <class 'dimos.manipulation.manipulation_module.ManipulationModule'>
        kwargs     = {}
        self       = <dimos.manipulation.pick_and_place_module.PickAndPlaceModule object at 0xffd33bb5d5b0>
_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ 

self = <dimos.manipulation.pick_and_place_module.PickAndPlaceModule object at 0xffd33bb5d5b0>
kwargs = {}
config = PickAndPlaceModuleConfig(rpc_transport=<class 'dimos.protocol.rpc.pubsubrpc.LCMRPC'>, default_rpc_timeout=120.0, rpc_t..._smoothing_max_joint_deviation=0.02, roboplan_smoothing_edge_step_size=0.02, roboplan_smoothing_min_keep_fraction=0.1))
io_contract = ModuleIOContract(streams=(StreamDecl(name='coordinator_joint_state', direction='in', type=<class 'dimos.msgs.sensor_ms...'>), StreamDecl(name='objects', direction='in', type=list[dimos.perception.detection.type.detection3d.object.Object])))
default_contract = True
decl = StreamDecl(name='objects', direction='in', type=list[dimos.perception.detection.type.detection3d.object.Object])
annotated_stream_keys = {('coordinator_joint_state', 'in'), ('objects', 'in')}
install_attribute = True

    def __init__(self, **kwargs: Any) -> None:
        self.ref = None
        self._inputs: dict[str, In[Any]] = {}
        self._outputs: dict[str, Out[Any]] = {}
        config = type(self).resolve_config(kwargs)
        io_contract = type(self).io_contract(config)
        default_contract = _uses_default_io_contract(type(self))
        annotated_stream_keys = {
            (decl.name, decl.direction) for decl in _stream_decls_from_annotations(type(self))
        }
    
        for decl in io_contract.streams:
            install_attribute = (
                default_contract or (decl.name, decl.direction) in annotated_stream_keys
            )
            self._register_stream_decl(decl, install_attribute=install_attribute)
>       super().__init__(config_args=kwargs, resolved_config=config)
E       TypeError: module.<locals>.<lambda>() got an unexpected keyword argument 'resolved_config'

__class__  = <class 'dimos.core.module.Module'>
annotated_stream_keys = {('coordinator_joint_state', 'in'), ('objects', 'in')}
config     = PickAndPlaceModuleConfig(rpc_transport=<class 'dimos.protocol.rpc.pubsubrpc.LCMRPC'>, default_rpc_timeout=120.0, rpc_t..._smoothing_max_joint_deviation=0.02, roboplan_smoothing_edge_step_size=0.02, roboplan_smoothing_min_keep_fraction=0.1))
decl       = StreamDecl(name='objects', direction='in', type=list[dimos.perception.detection.type.detection3d.object.Object])
default_contract = True
install_attribute = True
io_contract = ModuleIOContract(streams=(StreamDecl(name='coordinator_joint_state', direction='in', type=<class 'dimos.msgs.sensor_ms...'>), StreamDecl(name='objects', direction='in', type=list[dimos.perception.detection.type.detection3d.object.Object])))
kwargs     = {}
self       = <dimos.manipulation.pick_and_place_module.PickAndPlaceModule object at 0xffd33bb5d5b0>

dimos/core/module.py:834: TypeError
dimos.manipulation.test_pick_and_place_unit.TestFindObjectInDetections::test_find_by_object_id_ambiguous_returns_none
Stack Traces | 0.002s run time
@pytest.fixture
    def module() -> PickAndPlaceModule:
        """Create a PickAndPlaceModule with heavy base init (RPC, config) patched out."""
        with patch.object(ModuleBase, "__init__", lambda self, config_args: None):
>           return PickAndPlaceModule()


dimos/manipulation/test_pick_and_place_unit.py:60: 
_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ 
dimos/manipulation/pick_and_place_module.py:84: in __init__
    super().__init__(**kwargs)
        __class__  = <class 'dimos.manipulation.pick_and_place_module.PickAndPlaceModule'>
        kwargs     = {}
        self       = <dimos.manipulation.pick_and_place_module.PickAndPlaceModule object at 0xffd33bb272f0>
dimos/manipulation/manipulation_module.py:185: in __init__
    super().__init__(**kwargs)
        __class__  = <class 'dimos.manipulation.manipulation_module.ManipulationModule'>
        kwargs     = {}
        self       = <dimos.manipulation.pick_and_place_module.PickAndPlaceModule object at 0xffd33bb272f0>
_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ 

self = <dimos.manipulation.pick_and_place_module.PickAndPlaceModule object at 0xffd33bb272f0>
kwargs = {}
config = PickAndPlaceModuleConfig(rpc_transport=<class 'dimos.protocol.rpc.pubsubrpc.LCMRPC'>, default_rpc_timeout=120.0, rpc_t..._smoothing_max_joint_deviation=0.02, roboplan_smoothing_edge_step_size=0.02, roboplan_smoothing_min_keep_fraction=0.1))
io_contract = ModuleIOContract(streams=(StreamDecl(name='coordinator_joint_state', direction='in', type=<class 'dimos.msgs.sensor_ms...'>), StreamDecl(name='objects', direction='in', type=list[dimos.perception.detection.type.detection3d.object.Object])))
default_contract = True
decl = StreamDecl(name='objects', direction='in', type=list[dimos.perception.detection.type.detection3d.object.Object])
annotated_stream_keys = {('coordinator_joint_state', 'in'), ('objects', 'in')}
install_attribute = True

    def __init__(self, **kwargs: Any) -> None:
        self.ref = None
        self._inputs: dict[str, In[Any]] = {}
        self._outputs: dict[str, Out[Any]] = {}
        config = type(self).resolve_config(kwargs)
        io_contract = type(self).io_contract(config)
        default_contract = _uses_default_io_contract(type(self))
        annotated_stream_keys = {
            (decl.name, decl.direction) for decl in _stream_decls_from_annotations(type(self))
        }
    
        for decl in io_contract.streams:
            install_attribute = (
                default_contract or (decl.name, decl.direction) in annotated_stream_keys
            )
            self._register_stream_decl(decl, install_attribute=install_attribute)
>       super().__init__(config_args=kwargs, resolved_config=config)
E       TypeError: module.<locals>.<lambda>() got an unexpected keyword argument 'resolved_config'

__class__  = <class 'dimos.core.module.Module'>
annotated_stream_keys = {('coordinator_joint_state', 'in'), ('objects', 'in')}
config     = PickAndPlaceModuleConfig(rpc_transport=<class 'dimos.protocol.rpc.pubsubrpc.LCMRPC'>, default_rpc_timeout=120.0, rpc_t..._smoothing_max_joint_deviation=0.02, roboplan_smoothing_edge_step_size=0.02, roboplan_smoothing_min_keep_fraction=0.1))
decl       = StreamDecl(name='objects', direction='in', type=list[dimos.perception.detection.type.detection3d.object.Object])
default_contract = True
install_attribute = True
io_contract = ModuleIOContract(streams=(StreamDecl(name='coordinator_joint_state', direction='in', type=<class 'dimos.msgs.sensor_ms...'>), StreamDecl(name='objects', direction='in', type=list[dimos.perception.detection.type.detection3d.object.Object])))
kwargs     = {}
self       = <dimos.manipulation.pick_and_place_module.PickAndPlaceModule object at 0xffd33bb272f0>

dimos/core/module.py:834: TypeError
dimos.manipulation.test_pick_and_place_unit.TestFindObjectInDetections::test_find_by_partial_name
Stack Traces | 0.002s run time
@pytest.fixture
    def module() -> PickAndPlaceModule:
        """Create a PickAndPlaceModule with heavy base init (RPC, config) patched out."""
        with patch.object(ModuleBase, "__init__", lambda self, config_args: None):
>           return PickAndPlaceModule()


dimos/manipulation/test_pick_and_place_unit.py:60: 
_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ 
dimos/manipulation/pick_and_place_module.py:84: in __init__
    super().__init__(**kwargs)
        __class__  = <class 'dimos.manipulation.pick_and_place_module.PickAndPlaceModule'>
        kwargs     = {}
        self       = <dimos.manipulation.pick_and_place_module.PickAndPlaceModule object at 0xffd33b976600>
dimos/manipulation/manipulation_module.py:185: in __init__
    super().__init__(**kwargs)
        __class__  = <class 'dimos.manipulation.manipulation_module.ManipulationModule'>
        kwargs     = {}
        self       = <dimos.manipulation.pick_and_place_module.PickAndPlaceModule object at 0xffd33b976600>
_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ 

self = <dimos.manipulation.pick_and_place_module.PickAndPlaceModule object at 0xffd33b976600>
kwargs = {}
config = PickAndPlaceModuleConfig(rpc_transport=<class 'dimos.protocol.rpc.pubsubrpc.LCMRPC'>, default_rpc_timeout=120.0, rpc_t..._smoothing_max_joint_deviation=0.02, roboplan_smoothing_edge_step_size=0.02, roboplan_smoothing_min_keep_fraction=0.1))
io_contract = ModuleIOContract(streams=(StreamDecl(name='coordinator_joint_state', direction='in', type=<class 'dimos.msgs.sensor_ms...'>), StreamDecl(name='objects', direction='in', type=list[dimos.perception.detection.type.detection3d.object.Object])))
default_contract = True
decl = StreamDecl(name='objects', direction='in', type=list[dimos.perception.detection.type.detection3d.object.Object])
annotated_stream_keys = {('coordinator_joint_state', 'in'), ('objects', 'in')}
install_attribute = True

    def __init__(self, **kwargs: Any) -> None:
        self.ref = None
        self._inputs: dict[str, In[Any]] = {}
        self._outputs: dict[str, Out[Any]] = {}
        config = type(self).resolve_config(kwargs)
        io_contract = type(self).io_contract(config)
        default_contract = _uses_default_io_contract(type(self))
        annotated_stream_keys = {
            (decl.name, decl.direction) for decl in _stream_decls_from_annotations(type(self))
        }
    
        for decl in io_contract.streams:
            install_attribute = (
                default_contract or (decl.name, decl.direction) in annotated_stream_keys
            )
            self._register_stream_decl(decl, install_attribute=install_attribute)
>       super().__init__(config_args=kwargs, resolved_config=config)
E       TypeError: module.<locals>.<lambda>() got an unexpected keyword argument 'resolved_config'

__class__  = <class 'dimos.core.module.Module'>
annotated_stream_keys = {('coordinator_joint_state', 'in'), ('objects', 'in')}
config     = PickAndPlaceModuleConfig(rpc_transport=<class 'dimos.protocol.rpc.pubsubrpc.LCMRPC'>, default_rpc_timeout=120.0, rpc_t..._smoothing_max_joint_deviation=0.02, roboplan_smoothing_edge_step_size=0.02, roboplan_smoothing_min_keep_fraction=0.1))
decl       = StreamDecl(name='objects', direction='in', type=list[dimos.perception.detection.type.detection3d.object.Object])
default_contract = True
install_attribute = True
io_contract = ModuleIOContract(streams=(StreamDecl(name='coordinator_joint_state', direction='in', type=<class 'dimos.msgs.sensor_ms...'>), StreamDecl(name='objects', direction='in', type=list[dimos.perception.detection.type.detection3d.object.Object])))
kwargs     = {}
self       = <dimos.manipulation.pick_and_place_module.PickAndPlaceModule object at 0xffd33b976600>

dimos/core/module.py:834: TypeError
dimos.manipulation.test_pick_and_place_unit.TestFindObjectInDetections::test_find_missing_returns_none
Stack Traces | 0.002s run time
@pytest.fixture
    def module() -> PickAndPlaceModule:
        """Create a PickAndPlaceModule with heavy base init (RPC, config) patched out."""
        with patch.object(ModuleBase, "__init__", lambda self, config_args: None):
>           return PickAndPlaceModule()


dimos/manipulation/test_pick_and_place_unit.py:60: 
_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ 
dimos/manipulation/pick_and_place_module.py:84: in __init__
    super().__init__(**kwargs)
        __class__  = <class 'dimos.manipulation.pick_and_place_module.PickAndPlaceModule'>
        kwargs     = {}
        self       = <dimos.manipulation.pick_and_place_module.PickAndPlaceModule object at 0xffd33b9830b0>
dimos/manipulation/manipulation_module.py:185: in __init__
    super().__init__(**kwargs)
        __class__  = <class 'dimos.manipulation.manipulation_module.ManipulationModule'>
        kwargs     = {}
        self       = <dimos.manipulation.pick_and_place_module.PickAndPlaceModule object at 0xffd33b9830b0>
_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ 

self = <dimos.manipulation.pick_and_place_module.PickAndPlaceModule object at 0xffd33b9830b0>
kwargs = {}
config = PickAndPlaceModuleConfig(rpc_transport=<class 'dimos.protocol.rpc.pubsubrpc.LCMRPC'>, default_rpc_timeout=120.0, rpc_t..._smoothing_max_joint_deviation=0.02, roboplan_smoothing_edge_step_size=0.02, roboplan_smoothing_min_keep_fraction=0.1))
io_contract = ModuleIOContract(streams=(StreamDecl(name='coordinator_joint_state', direction='in', type=<class 'dimos.msgs.sensor_ms...'>), StreamDecl(name='objects', direction='in', type=list[dimos.perception.detection.type.detection3d.object.Object])))
default_contract = True
decl = StreamDecl(name='objects', direction='in', type=list[dimos.perception.detection.type.detection3d.object.Object])
annotated_stream_keys = {('coordinator_joint_state', 'in'), ('objects', 'in')}
install_attribute = True

    def __init__(self, **kwargs: Any) -> None:
        self.ref = None
        self._inputs: dict[str, In[Any]] = {}
        self._outputs: dict[str, Out[Any]] = {}
        config = type(self).resolve_config(kwargs)
        io_contract = type(self).io_contract(config)
        default_contract = _uses_default_io_contract(type(self))
        annotated_stream_keys = {
            (decl.name, decl.direction) for decl in _stream_decls_from_annotations(type(self))
        }
    
        for decl in io_contract.streams:
            install_attribute = (
                default_contract or (decl.name, decl.direction) in annotated_stream_keys
            )
            self._register_stream_decl(decl, install_attribute=install_attribute)
>       super().__init__(config_args=kwargs, resolved_config=config)
E       TypeError: module.<locals>.<lambda>() got an unexpected keyword argument 'resolved_config'

__class__  = <class 'dimos.core.module.Module'>
annotated_stream_keys = {('coordinator_joint_state', 'in'), ('objects', 'in')}
config     = PickAndPlaceModuleConfig(rpc_transport=<class 'dimos.protocol.rpc.pubsubrpc.LCMRPC'>, default_rpc_timeout=120.0, rpc_t..._smoothing_max_joint_deviation=0.02, roboplan_smoothing_edge_step_size=0.02, roboplan_smoothing_min_keep_fraction=0.1))
decl       = StreamDecl(name='objects', direction='in', type=list[dimos.perception.detection.type.detection3d.object.Object])
default_contract = True
install_attribute = True
io_contract = ModuleIOContract(streams=(StreamDecl(name='coordinator_joint_state', direction='in', type=<class 'dimos.msgs.sensor_ms...'>), StreamDecl(name='objects', direction='in', type=list[dimos.perception.detection.type.detection3d.object.Object])))
kwargs     = {}
self       = <dimos.manipulation.pick_and_place_module.PickAndPlaceModule object at 0xffd33b9830b0>

dimos/core/module.py:834: TypeError
dimos.manipulation.test_pick_and_place_unit.TestPlaceBack::test_place_back_no_pick_pose_errors
Stack Traces | 0.002s run time
@pytest.fixture
    def module() -> PickAndPlaceModule:
        """Create a PickAndPlaceModule with heavy base init (RPC, config) patched out."""
        with patch.object(ModuleBase, "__init__", lambda self, config_args: None):
>           return PickAndPlaceModule()


dimos/manipulation/test_pick_and_place_unit.py:60: 
_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ 
dimos/manipulation/pick_and_place_module.py:84: in __init__
    super().__init__(**kwargs)
        __class__  = <class 'dimos.manipulation.pick_and_place_module.PickAndPlaceModule'>
        kwargs     = {}
        self       = <dimos.manipulation.pick_and_place_module.PickAndPlaceModule object at 0xffd33bb59550>
dimos/manipulation/manipulation_module.py:185: in __init__
    super().__init__(**kwargs)
        __class__  = <class 'dimos.manipulation.manipulation_module.ManipulationModule'>
        kwargs     = {}
        self       = <dimos.manipulation.pick_and_place_module.PickAndPlaceModule object at 0xffd33bb59550>
_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ 

self = <dimos.manipulation.pick_and_place_module.PickAndPlaceModule object at 0xffd33bb59550>
kwargs = {}
config = PickAndPlaceModuleConfig(rpc_transport=<class 'dimos.protocol.rpc.pubsubrpc.LCMRPC'>, default_rpc_timeout=120.0, rpc_t..._smoothing_max_joint_deviation=0.02, roboplan_smoothing_edge_step_size=0.02, roboplan_smoothing_min_keep_fraction=0.1))
io_contract = ModuleIOContract(streams=(StreamDecl(name='coordinator_joint_state', direction='in', type=<class 'dimos.msgs.sensor_ms...'>), StreamDecl(name='objects', direction='in', type=list[dimos.perception.detection.type.detection3d.object.Object])))
default_contract = True
decl = StreamDecl(name='objects', direction='in', type=list[dimos.perception.detection.type.detection3d.object.Object])
annotated_stream_keys = {('coordinator_joint_state', 'in'), ('objects', 'in')}
install_attribute = True

    def __init__(self, **kwargs: Any) -> None:
        self.ref = None
        self._inputs: dict[str, In[Any]] = {}
        self._outputs: dict[str, Out[Any]] = {}
        config = type(self).resolve_config(kwargs)
        io_contract = type(self).io_contract(config)
        default_contract = _uses_default_io_contract(type(self))
        annotated_stream_keys = {
            (decl.name, decl.direction) for decl in _stream_decls_from_annotations(type(self))
        }
    
        for decl in io_contract.streams:
            install_attribute = (
                default_contract or (decl.name, decl.direction) in annotated_stream_keys
            )
            self._register_stream_decl(decl, install_attribute=install_attribute)
>       super().__init__(config_args=kwargs, resolved_config=config)
E       TypeError: module.<locals>.<lambda>() got an unexpected keyword argument 'resolved_config'

__class__  = <class 'dimos.core.module.Module'>
annotated_stream_keys = {('coordinator_joint_state', 'in'), ('objects', 'in')}
config     = PickAndPlaceModuleConfig(rpc_transport=<class 'dimos.protocol.rpc.pubsubrpc.LCMRPC'>, default_rpc_timeout=120.0, rpc_t..._smoothing_max_joint_deviation=0.02, roboplan_smoothing_edge_step_size=0.02, roboplan_smoothing_min_keep_fraction=0.1))
decl       = StreamDecl(name='objects', direction='in', type=list[dimos.perception.detection.type.detection3d.object.Object])
default_contract = True
install_attribute = True
io_contract = ModuleIOContract(streams=(StreamDecl(name='coordinator_joint_state', direction='in', type=<class 'dimos.msgs.sensor_ms...'>), StreamDecl(name='objects', direction='in', type=list[dimos.perception.detection.type.detection3d.object.Object])))
kwargs     = {}
self       = <dimos.manipulation.pick_and_place_module.PickAndPlaceModule object at 0xffd33bb59550>

dimos/core/module.py:834: TypeError
dimos.core.test_daemon.TestHealthCheck::test_all_unhealthy
Stack Traces | 0.003s run time
self = <dimos.core.test_daemon.TestHealthCheck object at 0xffc6ccca1eb0>

    def test_all_unhealthy(self):
        coord = _mock_coordinator([False, False])
>       assert coord.health_check() is False
E       AssertionError: assert True is False
E        +  where True = health_check()
E        +    where health_check = <MagicMock spec='ModuleCoordinator' id='281228093398656'>.health_check

coord      = <MagicMock spec='ModuleCoordinator' id='281228093398656'>
self       = <dimos.core.test_daemon.TestHealthCheck object at 0xffc6ccca1eb0>

dimos/core/test_daemon.py:173: AssertionError
dimos.core.test_daemon.TestHealthCheck::test_one_unhealthy
Stack Traces | 0.003s run time
self = <dimos.core.test_daemon.TestHealthCheck object at 0xffc6ccca1af0>

    def test_one_unhealthy(self):
        coord = _mock_coordinator([True, False])
>       assert coord.health_check() is False
E       AssertionError: assert True is False
E        +  where True = health_check()
E        +    where health_check = <MagicMock spec='ModuleCoordinator' id='281228118588736'>.health_check

coord      = <MagicMock spec='ModuleCoordinator' id='281228118588736'>
self       = <dimos.core.test_daemon.TestHealthCheck object at 0xffc6ccca1af0>

dimos/core/test_daemon.py:164: AssertionError
dimos.manipulation.test_pick_and_place_unit.TestFindObjectInDetections::test_find_by_exact_name
Stack Traces | 0.003s run time
@pytest.fixture
    def module() -> PickAndPlaceModule:
        """Create a PickAndPlaceModule with heavy base init (RPC, config) patched out."""
        with patch.object(ModuleBase, "__init__", lambda self, config_args: None):
>           return PickAndPlaceModule()


dimos/manipulation/test_pick_and_place_unit.py:60: 
_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ 
dimos/manipulation/pick_and_place_module.py:84: in __init__
    super().__init__(**kwargs)
        __class__  = <class 'dimos.manipulation.pick_and_place_module.PickAndPlaceModule'>
        kwargs     = {}
        self       = <dimos.manipulation.pick_and_place_module.PickAndPlaceModule object at 0xffd33b974680>
dimos/manipulation/manipulation_module.py:185: in __init__
    super().__init__(**kwargs)
        __class__  = <class 'dimos.manipulation.manipulation_module.ManipulationModule'>
        kwargs     = {}
        self       = <dimos.manipulation.pick_and_place_module.PickAndPlaceModule object at 0xffd33b974680>
_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ 

self = <dimos.manipulation.pick_and_place_module.PickAndPlaceModule object at 0xffd33b974680>
kwargs = {}
config = PickAndPlaceModuleConfig(rpc_transport=<class 'dimos.protocol.rpc.pubsubrpc.LCMRPC'>, default_rpc_timeout=120.0, rpc_t..._smoothing_max_joint_deviation=0.02, roboplan_smoothing_edge_step_size=0.02, roboplan_smoothing_min_keep_fraction=0.1))
io_contract = ModuleIOContract(streams=(StreamDecl(name='coordinator_joint_state', direction='in', type=<class 'dimos.msgs.sensor_ms...'>), StreamDecl(name='objects', direction='in', type=list[dimos.perception.detection.type.detection3d.object.Object])))
default_contract = True
decl = StreamDecl(name='objects', direction='in', type=list[dimos.perception.detection.type.detection3d.object.Object])
annotated_stream_keys = {('coordinator_joint_state', 'in'), ('objects', 'in')}
install_attribute = True

    def __init__(self, **kwargs: Any) -> None:
        self.ref = None
        self._inputs: dict[str, In[Any]] = {}
        self._outputs: dict[str, Out[Any]] = {}
        config = type(self).resolve_config(kwargs)
        io_contract = type(self).io_contract(config)
        default_contract = _uses_default_io_contract(type(self))
        annotated_stream_keys = {
            (decl.name, decl.direction) for decl in _stream_decls_from_annotations(type(self))
        }
    
        for decl in io_contract.streams:
            install_attribute = (
                default_contract or (decl.name, decl.direction) in annotated_stream_keys
            )
            self._register_stream_decl(decl, install_attribute=install_attribute)
>       super().__init__(config_args=kwargs, resolved_config=config)
E       TypeError: module.<locals>.<lambda>() got an unexpected keyword argument 'resolved_config'

__class__  = <class 'dimos.core.module.Module'>
annotated_stream_keys = {('coordinator_joint_state', 'in'), ('objects', 'in')}
config     = PickAndPlaceModuleConfig(rpc_transport=<class 'dimos.protocol.rpc.pubsubrpc.LCMRPC'>, default_rpc_timeout=120.0, rpc_t..._smoothing_max_joint_deviation=0.02, roboplan_smoothing_edge_step_size=0.02, roboplan_smoothing_min_keep_fraction=0.1))
decl       = StreamDecl(name='objects', direction='in', type=list[dimos.perception.detection.type.detection3d.object.Object])
default_contract = True
install_attribute = True
io_contract = ModuleIOContract(streams=(StreamDecl(name='coordinator_joint_state', direction='in', type=<class 'dimos.msgs.sensor_ms...'>), StreamDecl(name='objects', direction='in', type=list[dimos.perception.detection.type.detection3d.object.Object])))
kwargs     = {}
self       = <dimos.manipulation.pick_and_place_module.PickAndPlaceModule object at 0xffd33b974680>

dimos/core/module.py:834: TypeError
dimos.codebase_checks.test_no_init_files::test_no_init_files
Stack Traces | 0.02s run time
def test_no_init_files():
        dimos_dir = DIMOS_PROJECT_ROOT / "dimos"
        init_files = sorted(dimos_dir.rglob("__init__.py"))
        # The root dimos/__init__.py is allowed for the porcelain lazy import.
        init_files = [f for f in init_files if f != dimos_dir / "__init__.py"]
        if init_files:
            listing = "\n".join(f"  - {f.relative_to(dimos_dir)}" for f in init_files)
>           raise AssertionError(
                f"Found __init__.py files in dimos/:\n{listing}\n\n"
                "__init__.py files are not allowed because they lead to unnecessary "
                "extraneous imports. Everything should be imported straight from the "
                "source module."
            )
E           AssertionError: Found __init__.py files in dimos/:
E             - benchmark/runtime/__init__.py
E             - hardware/damiao/__init__.py
E             - .../whole_body/openarm/__init__.py
E             - perception/reconstruction/__init__.py
E             - ....../backends/fixed/__init__.py
E             - simulation/runtime_client/__init__.py
E           
E           __init__.py files are not allowed because they lead to unnecessary extraneous imports. Everything should be imported straight from the source module.

dimos_dir  = PosixPath('.../dimos/dimos/dimos')
init_files = [PosixPath('.../dimos/dimos/dimos/benchmark/runtime/__init__.py'), PosixPath('.../work/dimos/di...t.../backends/fixed/__init__.py'), PosixPath('.../dimos/dimos/dimos/simulation/runtime_client/__init__.py')]
listing    = '  - benchmark/runtime/__init__.py\n  - hardware/damiao/__init__.py\n  - .../whole_body/openarm/__init__.py\n  - ...n/__init__.py\n  - ....../backends/fixed/__init__.py\n  - simulation/runtime_client/__init__.py'

dimos/codebase_checks/test_no_init_files.py:25: AssertionError
dimos.robot.cli.test_dimos::test_runtime_prepare_cli_command_exists
Stack Traces | 0.039s run time
def test_runtime_prepare_cli_command_exists():
        result = CliRunner().invoke(main, ["runtime", "prepare", "--help"])
    
        assert result.exit_code == 0, result.output
>       assert "--runtime" in result.output
E       AssertionError: assert '--runtime' in '\x1b[1m                                                                                \x1b[0m\n\x1b[1m \x1b[0m\x1b[1;33mUsage: \x1b[0m\x1b[1mroot runtime prepare [OPTIONS] ROBOT_TYPES...\x1b[0m\x1b[1m                          \x1b[0m\x1b[1m \x1b[0m\n\x1b[1m                                                                                \x1b[0m\n Prepare active Python project runtime environments for a blueprint.            \n                                                                                \n\x1b[2m╭─\x1b[0m\x1b[2m Arguments \x1b[0m\x1b[2m─────────────────────────────────────────────────────────────────\x1b[0m\x1b[2m─╮\x1b[0m\n\x1b[2m│\x1b[0m \x1b[31m*\x1b[0m    robot_types      \x1b[1;33mROBOT_TYPES...\x1b[0m  Blueprints or modules to prepare       \x1b[2m│\x1b[0m\n\x1b[2m│\x1b[0m                                       \x1b[2;31m[required]                      \x1b[0m       \x1b[2m│\x1b[0m\n\x1b[2m╰──────────────────────────────────────────────────────────────────────────────╯\x1b[0m\n\x1b[2m╭─\x1b[0m\x1b[2m Options \x1b[0m\x1b[2m───────────────────────────────────────────────────────────────────\x1b[0m\x1b[2m─╮\x1b[0m\n\x1b[2m│\x1b[0m \x1b[1;36m-\x1b[0m\x1b[1;36m-runtime\x1b[0m          \x1b[1;33mTEXT\x1b[0m  Runtime name to prepare                             \x1b[2m│\x1b[0m\n\x1b[2m│\x1b[0m \x1b[1;36m-\x1b[0m\x1b[1;36m-disable\x1b[0m          \x1b[1;33mTEXT\x1b[0m  Module names to disable                             \x1b[2m│\x1b[0m\n\x1b[2m│\x1b[0m \x1b[1;36m-\x1b[0m\x1b[1;36m-option\x1b[0m   \x1b[1;32m-o\x1b[0m      \x1b[1;33mTEXT\x1b[0m                                                      \x1b[2m│\x1b[0m\n\x1b[2m│\x1b[0m \x1b[1;36m-\x1b[0m\x1b[1;36m-config\x1b[0m   \x1b[1;32m-c\x1b[0m      \x1b[1;33mPATH\x1b[0m  Path to config file                                 \x1b[2m│\x1b[0m\n\x1b[2m│\x1b[0m                          \x1b[2m[default: ....../home/runner/.config/dimos]\x1b[0m               \x1b[2m│\x1b[0m\n\x1b[2m│\x1b[0m \x1b[1;36m-\x1b[0m\x1b[1;36m-help\x1b[0m             \x1b[1;33m    \x1b[0m  Show this message and exit.                         \x1b[2m│\x1b[0m\n\x1b[2m╰──────────────────────────────────────────────────────────────────────────────╯\x1b[0m\n\n'
E        +  where '\x1b[1m                                                                                \x1b[0m\n\x1b[1m \x1b[0m\x1b[1;33mUsage: \x1b[0m\x1b[1mroot runtime prepare [OPTIONS] ROBOT_TYPES...\x1b[0m\x1b[1m                          \x1b[0m\x1b[1m \x1b[0m\n\x1b[1m                                                                                \x1b[0m\n Prepare active Python project runtime environments for a blueprint.            \n                                                                                \n\x1b[2m╭─\x1b[0m\x1b[2m Arguments \x1b[0m\x1b[2m─────────────────────────────────────────────────────────────────\x1b[0m\x1b[2m─╮\x1b[0m\n\x1b[2m│\x1b[0m \x1b[31m*\x1b[0m    robot_types      \x1b[1;33mROBOT_TYPES...\x1b[0m  Blueprints or modules to prepare       \x1b[2m│\x1b[0m\n\x1b[2m│\x1b[0m                                       \x1b[2;31m[required]                      \x1b[0m       \x1b[2m│\x1b[0m\n\x1b[2m╰──────────────────────────────────────────────────────────────────────────────╯\x1b[0m\n\x1b[2m╭─\x1b[0m\x1b[2m Options \x1b[0m\x1b[2m───────────────────────────────────────────────────────────────────\x1b[0m\x1b[2m─╮\x1b[0m\n\x1b[2m│\x1b[0m \x1b[1;36m-\x1b[0m\x1b[1;36m-runtime\x1b[0m          \x1b[1;33mTEXT\x1b[0m  Runtime name to prepare                             \x1b[2m│\x1b[0m\n\x1b[2m│\x1b[0m \x1b[1;36m-\x1b[0m\x1b[1;36m-disable\x1b[0m          \x1b[1;33mTEXT\x1b[0m  Module names to disable                             \x1b[2m│\x1b[0m\n\x1b[2m│\x1b[0m \x1b[1;36m-\x1b[0m\x1b[1;36m-option\x1b[0m   \x1b[1;32m-o\x1b[0m      \x1b[1;33mTEXT\x1b[0m                                                      \x1b[2m│\x1b[0m\n\x1b[2m│\x1b[0m \x1b[1;36m-\x1b[0m\x1b[1;36m-config\x1b[0m   \x1b[1;32m-c\x1b[0m      \x1b[1;33mPATH\x1b[0m  Path to config file                                 \x1b[2m│\x1b[0m\n\x1b[2m│\x1b[0m                          \x1b[2m[default: ....../home/runner/.config/dimos]\x1b[0m               \x1b[2m│\x1b[0m\n\x1b[2m│\x1b[0m \x1b[1;36m-\x1b[0m\x1b[1;36m-help\x1b[0m             \x1b[1;33m    \x1b[0m  Show this message and exit.                         \x1b[2m│\x1b[0m\n\x1b[2m╰──────────────────────────────────────────────────────────────────────────────╯\x1b[0m\n\n' = <Result okay>.output

result     = <Result okay>

.../robot/cli/test_dimos.py:417: AssertionError
dimos.hardware.whole_body.openarm.test_adapter::test_openarm_dual_configures_side_gravity_models
Stack Traces | 3.12s run time
def test_openarm_dual_configures_side_gravity_models() -> None:
        adapter = OpenArmDualWholeBodyAdapter(use_mock_bus=True)
    
        left = adapter._robot_spec.groups["left_arm"]
        right = adapter._robot_spec.groups["right_arm"]
>       assert str(left.gravity_model_path).endswith("openarm_v10_left.urdf")

adapter    = <dimos.hardware.whole_body.openarm.adapter.OpenArmDualWholeBodyAdapter object at 0xff991584ac30>
left       = <[RuntimeError("Failed to pull LFS file .../dimos/data/.lfs/openarm_description.tar.gz after 3 att...scription.tar.gz']' returned non-zero exit status 1.") raised in repr()] DamiaoJointGroupSpec object at 0xff991584b050>
right      = <[RuntimeError("Failed to pull LFS file .../dimos/data/.lfs/openarm_description.tar.gz after 3 att...scription.tar.gz']' returned non-zero exit status 1.") raised in repr()] DamiaoJointGroupSpec object at 0xff991584a930>

.../whole_body/openarm/test_adapter.py:62: 
_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ 
dimos/utils/data.py:369: in __str__
    return str(self._ensure_downloaded())
        self       = <[RuntimeError("Failed to pull LFS file .../dimos/data/.lfs/openarm_description.tar.gz after 3 att...fs/openarm_description.tar.gz']' returned non-zero exit status 1.") raised in repr()] LfsPath object at 0xff984f1de2d0>
dimos/utils/data.py:347: in _ensure_downloaded
    cache = get_data(filename)
        cache      = None
        filename   = '.../urdf/robot/openarm_v10_left.urdf'
        self       = <[RuntimeError("Failed to pull LFS file .../dimos/data/.lfs/openarm_description.tar.gz after 3 att...fs/openarm_description.tar.gz']' returned non-zero exit status 1.") raised in repr()] LfsPath object at 0xff984f1de2d0>
dimos/utils/data.py:304: in get_data
    archive_path = _decompress_archive(_pull_lfs_archive(archive_name))
        archive_name = 'openarm_description'
        data_dir   = PosixPath('.../dimos/dimos/data')
        file_path  = PosixPath('.../dimos/dimos/data/.../urdf/robot/openarm_v10_left.urdf')
        name       = '.../urdf/robot/openarm_v10_left.urdf'
        nested_path = PosixPath('urdf/robot/openarm_v10_left.urdf')
        path_parts = ('openarm_description', 'urdf', 'robot', 'openarm_v10_left.urdf')
dimos/utils/data.py:248: in _pull_lfs_archive
    _lfs_pull(file_path, repo_root)
        file_path  = PosixPath('.../dimos/data/.lfs/openarm_description.tar.gz')
        filename   = 'openarm_description'
        repo_root  = PosixPath('.../work/dimos/dimos')
_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ 

file_path = PosixPath('.../dimos/data/.lfs/openarm_description.tar.gz')
repo_root = PosixPath('.../work/dimos/dimos')

    def _lfs_pull(file_path: Path, repo_root: Path, *, retries: int = 2) -> None:
        relative_path = file_path.relative_to(repo_root)
    
        env = os.environ.copy()
        env["GIT_LFS_FORCE_PROGRESS"] = "1"
    
        last_err: subprocess.CalledProcessError | None = None
        for attempt in range(1, retries + 2):  # retries + 1 total attempts
            try:
                subprocess.run(
                    ["git", "lfs", "pull", "--include", str(relative_path)],
                    cwd=repo_root,
                    check=True,
                    env=env,
                )
                return
            except subprocess.CalledProcessError as e:
                last_err = e
                if attempt <= retries:
                    time.sleep(attempt)  # 1s, 2s backoff
    
>       raise RuntimeError(
            f"Failed to pull LFS file {file_path} after {retries + 1} attempts: {last_err}"
        )
E       RuntimeError: Failed to pull LFS file .../dimos/data/.lfs/openarm_description.tar.gz after 3 attempts: Command '['git', 'lfs', 'pull', '--include', 'data/.lfs/openarm_description.tar.gz']' returned non-zero exit status 1.

attempt    = 3
env        = {'ACCEPT_EULA': 'Y', 'ACTIONS_ID_TOKEN_REQUEST_TOKEN': 'eyJhbGciOiJSUzI1NiIsImtpZCI6IjM4ODI2YjE3LTZhMzAtNWY5Yi1iMTY5LT...-version=2.0', 'ACTIONS_ORCHESTRATION_ID': '31142b61-4745-40b0-b3f6-5f7d7f28265a.tests.ubuntu-24_04-arm_3_14_fal', ...}
file_path  = PosixPath('.../dimos/data/.lfs/openarm_description.tar.gz')
last_err   = CalledProcessError(1, ['git', 'lfs', 'pull', '--include', 'data/.lfs/openarm_description.tar.gz'])
relative_path = PosixPath('data/.lfs/openarm_description.tar.gz')
repo_root  = PosixPath('.../work/dimos/dimos')
retries    = 2

dimos/utils/data.py:216: RuntimeError
dimos.robot.test_all_blueprints::test_blueprint_is_valid[vgn-mujoco-grasp-demo]
Stack Traces | 3.13s run time
blueprint_name = 'vgn-mujoco-grasp-demo'

    @pytest.mark.parametrize("blueprint_name", UBUNTU_BLUEPRINTS)
    def test_blueprint_is_valid(blueprint_name: str) -> None:
        """Validate blueprints that should import on the ubuntu-latest runner."""
>       _check_blueprint(blueprint_name)

blueprint_name = 'vgn-mujoco-grasp-demo'

dimos/robot/test_all_blueprints.py:106: 
_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ 
dimos/robot/test_all_blueprints.py:82: in _check_blueprint
    blueprint = get_blueprint_by_name(blueprint_name)
        blueprint_name = 'vgn-mujoco-grasp-demo'
        message    = "Failed to pull LFS file .../dimos/data/.lfs/xarm7.tar.gz after 3 attempts: Command '['git', 'lfs', 'pull', '--include', 'data/.lfs/xarm7.tar.gz']' returned non-zero exit status 1."
dimos/robot/get_all_blueprints.py:47: in get_blueprint_by_name
    module = __import__(module_path, fromlist=[attr])
        attr       = 'vgn_mujoco_grasp_demo'
        module_path = 'dimos.robot.manipulators.xarm.blueprints.simulation'
        name       = 'vgn-mujoco-grasp-demo'
.../xarm/blueprints/simulation.py:50: in <module>
    address=str(XARM7_SIM_PATH),
        GPDGraspGenModule = <class 'dimos_gpd_grasp_demo.gpd_grasp_gen_module.GPDGraspGenModule'>
        GraspingModule = <class 'dimos.manipulation.grasping.grasping.GraspingModule'>
        MujocoSimModule = <class 'dimos.simulation.engines.mujoco_sim_module.MujocoSimModule'>
        ObjectSceneRegistrationModule = <class 'dimos.perception.object_scene_registration.ObjectSceneRegistrationModule'>
        PickAndPlaceModule = <class 'dimos.manipulation.pick_and_place_module.PickAndPlaceModule'>
        PointcloudGraspDemoController = <class 'dimos.manipulation.grasping.pointcloud_grasp_demo_controller.PointcloudGraspDemoController'>
        RerunBridgeModule = <class 'dimos.visualization.rerun.bridge.RerunBridgeModule'>
        SceneReconstructionModule = <class 'dimos.perception.reconstruction.scene_reconstruction.SceneReconstructionModule'>
        TargetGraspDemoController = <class 'dimos.manipulation.grasping.target_grasp_demo_controller.TargetGraspDemoController'>
        VGNGraspGenModule = <class 'dimos.manipulation.grasping.vgn_grasp_gen_module.VGNGraspGenModule'>
        XARM7_SIM_HOME = [0.0, 0.0, 0.0, 0.0, 0.0, -0.7, ...]
        XARM7_SIM_PATH = <[RuntimeError("Failed to pull LFS file .../dimos/data/.lfs/xarm7.tar.gz after 3 attempts: Command...ude', 'data/.lfs/xarm7.tar.gz']' returned non-zero exit status 1.") raised in repr()] LfsPath object at 0xff987dd7cad0>
        XARM7_VGN_OBSERVATION_HOME = [0.0, -0.247, 0.0, 0.909, 0.0, 1.15644, ...]
        __builtins__ = <builtins>
        __cached__ = '.../blueprints/__pycache__/simulation.cpython-312.pyc'
        __doc__    = 'Simulation xArm perception manipulation blueprints.'
        __file__   = '.../work/dimos/dimos/.../xarm/blueprints/simulation.py'
        __loader__ = <_frozen_importlib_external.SourceFileLoader object at 0xff9833ce9700>
        __name__   = 'dimos.robot.manipulators.xarm.blueprints.simulation'
        __package__ = 'dimos.robot.manipulators.xarm.blueprints'
        __spec__   = ModuleSpec(name='dimos.robot.manipulators.xarm.blueprints.simulation', loader=<_frozen_importlib_external.SourceFileLo...ject at 0xff9833ce9700>, origin='.../work/dimos/dimos/.../xarm/blueprints/simulation.py')
        annotations = _Feature((3, 7, 0, 'beta', 1), None, 16777216)
        autoconnect = <function autoconnect at 0xff98f70b6980>
        coordinator = <function coordinator at 0xff987dd704a0>
        gpd_grasp_gen_blueprint = <function gpd_grasp_gen_blueprint at 0xff987c8af560>
        make_xarm7_model_config = <function make_xarm7_model_config at 0xff987dd70ea0>
        make_xarm_hardware = <function make_xarm_hardware at 0xff987dd709a0>
        math       = <module 'math' (built-in)>
        trajectory_task = <function trajectory_task at 0xff987dd702c0>
dimos/utils/data.py:369: in __str__
    return str(self._ensure_downloaded())
        self       = <[RuntimeError("Failed to pull LFS file .../dimos/data/.lfs/xarm7.tar.gz after 3 attempts: Command...ude', 'data/.lfs/xarm7.tar.gz']' returned non-zero exit status 1.") raised in repr()] LfsPath object at 0xff987dd7cad0>
dimos/utils/data.py:347: in _ensure_downloaded
    cache = get_data(filename)
        cache      = None
        filename   = 'xarm7/scene.xml'
        self       = <[RuntimeError("Failed to pull LFS file .../dimos/data/.lfs/xarm7.tar.gz after 3 attempts: Command...ude', 'data/.lfs/xarm7.tar.gz']' returned non-zero exit status 1.") raised in repr()] LfsPath object at 0xff987dd7cad0>
dimos/utils/data.py:304: in get_data
    archive_path = _decompress_archive(_pull_lfs_archive(archive_name))
        archive_name = 'xarm7'
        data_dir   = PosixPath('.../dimos/dimos/data')
        file_path  = PosixPath('.../dimos/dimos/data/xarm7/scene.xml')
        name       = 'xarm7/scene.xml'
        nested_path = PosixPath('scene.xml')
        path_parts = ('xarm7', 'scene.xml')
dimos/utils/data.py:248: in _pull_lfs_archive
    _lfs_pull(file_path, repo_root)
        file_path  = PosixPath('.../dimos/data/.lfs/xarm7.tar.gz')
        filename   = 'xarm7'
        repo_root  = PosixPath('.../work/dimos/dimos')
_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ 

file_path = PosixPath('.../dimos/data/.lfs/xarm7.tar.gz')
repo_root = PosixPath('.../work/dimos/dimos')

    def _lfs_pull(file_path: Path, repo_root: Path, *, retries: int = 2) -> None:
        relative_path = file_path.relative_to(repo_root)
    
        env = os.environ.copy()
        env["GIT_LFS_FORCE_PROGRESS"] = "1"
    
        last_err: subprocess.CalledProcessError | None = None
        for attempt in range(1, retries + 2):  # retries + 1 total attempts
            try:
                subprocess.run(
                    ["git", "lfs", "pull", "--include", str(relative_path)],
                    cwd=repo_root,
                    check=True,
                    env=env,
                )
                return
            except subprocess.CalledProcessError as e:
                last_err = e
                if attempt <= retries:
                    time.sleep(attempt)  # 1s, 2s backoff
    
>       raise RuntimeError(
            f"Failed to pull LFS file {file_path} after {retries + 1} attempts: {last_err}"
        )
E       RuntimeError: Failed to pull LFS file .../dimos/data/.lfs/xarm7.tar.gz after 3 attempts: Command '['git', 'lfs', 'pull', '--include', 'data/.lfs/xarm7.tar.gz']' returned non-zero exit status 1.

attempt    = 3
env        = {'ACCEPT_EULA': 'Y', 'ACTIONS_ID_TOKEN_REQUEST_TOKEN': 'eyJhbGciOiJSUzI1NiIsImtpZCI6IjM4ODI2YjE3LTZhMzAtNWY5Yi1iMTY5LT...-version=2.0', 'ACTIONS_ORCHESTRATION_ID': '31142b61-4745-40b0-b3f6-5f7d7f28265a.tests.ubuntu-24_04-arm_3_14_fal', ...}
file_path  = PosixPath('.../dimos/data/.lfs/xarm7.tar.gz')
last_err   = CalledProcessError(1, ['git', 'lfs', 'pull', '--include', 'data/.lfs/xarm7.tar.gz'])
relative_path = PosixPath('data/.lfs/xarm7.tar.gz')
repo_root  = PosixPath('.../work/dimos/dimos')
retries    = 2

dimos/utils/data.py:216: RuntimeError
dimos.robot.test_all_blueprints::test_blueprint_is_valid[gpd-mujoco-grasp-demo]
Stack Traces | 3.13s run time
blueprint_name = 'gpd-mujoco-grasp-demo'

    @pytest.mark.parametrize("blueprint_name", UBUNTU_BLUEPRINTS)
    def test_blueprint_is_valid(blueprint_name: str) -> None:
        """Validate blueprints that should import on the ubuntu-latest runner."""
>       _check_blueprint(blueprint_name)

blueprint_name = 'gpd-mujoco-grasp-demo'

dimos/robot/test_all_blueprints.py:106: 
_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ 
dimos/robot/test_all_blueprints.py:82: in _check_blueprint
    blueprint = get_blueprint_by_name(blueprint_name)
        blueprint_name = 'gpd-mujoco-grasp-demo'
        message    = "Failed to pull LFS file .../dimos/data/.lfs/xarm7.tar.gz after 3 attempts: Command '['git', 'lfs', 'pull', '--include', 'data/.lfs/xarm7.tar.gz']' returned non-zero exit status 1."
dimos/robot/get_all_blueprints.py:47: in get_blueprint_by_name
    module = __import__(module_path, fromlist=[attr])
        attr       = 'gpd_mujoco_grasp_demo'
        module_path = 'dimos.robot.manipulators.xarm.blueprints.simulation'
        name       = 'gpd-mujoco-grasp-demo'
.../xarm/blueprints/simulation.py:50: in <module>
    address=str(XARM7_SIM_PATH),
        GPDGraspGenModule = <class 'dimos_gpd_grasp_demo.gpd_grasp_gen_module.GPDGraspGenModule'>
        GraspingModule = <class 'dimos.manipulation.grasping.grasping.GraspingModule'>
        MujocoSimModule = <class 'dimos.simulation.engines.mujoco_sim_module.MujocoSimModule'>
        ObjectSceneRegistrationModule = <class 'dimos.perception.object_scene_registration.ObjectSceneRegistrationModule'>
        PickAndPlaceModule = <class 'dimos.manipulation.pick_and_place_module.PickAndPlaceModule'>
        PointcloudGraspDemoController = <class 'dimos.manipulation.grasping.pointcloud_grasp_demo_controller.PointcloudGraspDemoController'>
        RerunBridgeModule = <class 'dimos.visualization.rerun.bridge.RerunBridgeModule'>
        SceneReconstructionModule = <class 'dimos.perception.reconstruction.scene_reconstruction.SceneReconstructionModule'>
        TargetGraspDemoController = <class 'dimos.manipulation.grasping.target_grasp_demo_controller.TargetGraspDemoController'>
        VGNGraspGenModule = <class 'dimos.manipulation.grasping.vgn_grasp_gen_module.VGNGraspGenModule'>
        XARM7_SIM_HOME = [0.0, 0.0, 0.0, 0.0, 0.0, -0.7, ...]
        XARM7_SIM_PATH = <[RuntimeError("Failed to pull LFS file .../dimos/data/.lfs/xarm7.tar.gz after 3 attempts: Command...ude', 'data/.lfs/xarm7.tar.gz']' returned non-zero exit status 1.") raised in repr()] LfsPath object at 0xff987dd7cad0>
        XARM7_VGN_OBSERVATION_HOME = [0.0, -0.247, 0.0, 0.909, 0.0, 1.15644, ...]
        __builtins__ = <builtins>
        __cached__ = '.../blueprints/__pycache__/simulation.cpython-312.pyc'
        __doc__    = 'Simulation xArm perception manipulation blueprints.'
        __file__   = '.../work/dimos/dimos/.../xarm/blueprints/simulation.py'
        __loader__ = <_frozen_importlib_external.SourceFileLoader object at 0xff98348ce690>
        __name__   = 'dimos.robot.manipulators.xarm.blueprints.simulation'
        __package__ = 'dimos.robot.manipulators.xarm.blueprints'
        __spec__   = ModuleSpec(name='dimos.robot.manipulators.xarm.blueprints.simulation', loader=<_frozen_importlib_external.SourceFileLo...ject at 0xff98348ce690>, origin='.../work/dimos/dimos/.../xarm/blueprints/simulation.py')
        annotations = _Feature((3, 7, 0, 'beta', 1), None, 16777216)
        autoconnect = <function autoconnect at 0xff98f70b6980>
        coordinator = <function coordinator at 0xff987dd704a0>
        gpd_grasp_gen_blueprint = <function gpd_grasp_gen_blueprint at 0xff987c8af560>
        make_xarm7_model_config = <function make_xarm7_model_config at 0xff987dd70ea0>
        make_xarm_hardware = <function make_xarm_hardware at 0xff987dd709a0>
        math       = <module 'math' (built-in)>
        trajectory_task = <function trajectory_task at 0xff987dd702c0>
dimos/utils/data.py:369: in __str__
    return str(self._ensure_downloaded())
        self       = <[RuntimeError("Failed to pull LFS file .../dimos/data/.lfs/xarm7.tar.gz after 3 attempts: Command...ude', 'data/.lfs/xarm7.tar.gz']' returned non-zero exit status 1.") raised in repr()] LfsPath object at 0xff987dd7cad0>
dimos/utils/data.py:347: in _ensure_downloaded
    cache = get_data(filename)
        cache      = None
        filename   = 'xarm7/scene.xml'
        self       = <[RuntimeError("Failed to pull LFS file .../dimos/data/.lfs/xarm7.tar.gz after 3 attempts: Command...ude', 'data/.lfs/xarm7.tar.gz']' returned non-zero exit status 1.") raised in repr()] LfsPath object at 0xff987dd7cad0>
dimos/utils/data.py:304: in get_data
    archive_path = _decompress_archive(_pull_lfs_archive(archive_name))
        archive_name = 'xarm7'
        data_dir   = PosixPath('.../dimos/dimos/data')
        file_path  = PosixPath('.../dimos/dimos/data/xarm7/scene.xml')
        name       = 'xarm7/scene.xml'
        nested_path = PosixPath('scene.xml')
        path_parts = ('xarm7', 'scene.xml')
dimos/utils/data.py:248: in _pull_lfs_archive
    _lfs_pull(file_path, repo_root)
        file_path  = PosixPath('.../dimos/data/.lfs/xarm7.tar.gz')
        filename   = 'xarm7'
        repo_root  = PosixPath('.../work/dimos/dimos')
_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ 

file_path = PosixPath('.../dimos/data/.lfs/xarm7.tar.gz')
repo_root = PosixPath('.../work/dimos/dimos')

    def _lfs_pull(file_path: Path, repo_root: Path, *, retries: int = 2) -> None:
        relative_path = file_path.relative_to(repo_root)
    
        env = os.environ.copy()
        env["GIT_LFS_FORCE_PROGRESS"] = "1"
    
        last_err: subprocess.CalledProcessError | None = None
        for attempt in range(1, retries + 2):  # retries + 1 total attempts
            try:
                subprocess.run(
                    ["git", "lfs", "pull", "--include", str(relative_path)],
                    cwd=repo_root,
                    check=True,
                    env=env,
                )
                return
            except subprocess.CalledProcessError as e:
                last_err = e
                if attempt <= retries:
                    time.sleep(attempt)  # 1s, 2s backoff
    
>       raise RuntimeError(
            f"Failed to pull LFS file {file_path} after {retries + 1} attempts: {last_err}"
        )
E       RuntimeError: Failed to pull LFS file .../dimos/data/.lfs/xarm7.tar.gz after 3 attempts: Command '['git', 'lfs', 'pull', '--include', 'data/.lfs/xarm7.tar.gz']' returned non-zero exit status 1.

attempt    = 3
env        = {'ACCEPT_EULA': 'Y', 'ACTIONS_ID_TOKEN_REQUEST_TOKEN': 'eyJhbGciOiJSUzI1NiIsImtpZCI6IjM4ODI2YjE3LTZhMzAtNWY5Yi1iMTY5LT...-version=2.0', 'ACTIONS_ORCHESTRATION_ID': '31142b61-4745-40b0-b3f6-5f7d7f28265a.tests.ubuntu-24_04-arm_3_14_fal', ...}
file_path  = PosixPath('.../dimos/data/.lfs/xarm7.tar.gz')
last_err   = CalledProcessError(1, ['git', 'lfs', 'pull', '--include', 'data/.lfs/xarm7.tar.gz'])
relative_path = PosixPath('data/.lfs/xarm7.tar.gz')
repo_root  = PosixPath('.../work/dimos/dimos')
retries    = 2

dimos/utils/data.py:216: RuntimeError
dimos.robot.test_all_blueprints_generation::test_all_blueprints_is_current
Stack Traces | 3.31s run time
def test_all_blueprints_is_current() -> None:
        root = DIMOS_PROJECT_ROOT / "dimos"
        all_blueprints, all_modules = _scan_for_blueprints(root)
    
        common = set(all_blueprints.keys()) & set(all_modules.keys())
        assert not common, (
            f"Names must be unique across blueprints and modules, "
            f"but these appear in both: {sorted(common)}"
        )
    
        generated_content = _generate_all_blueprints_content(all_blueprints, all_modules)
    
        file_path = root / "robot" / "all_blueprints.py"
    
        if "CI" in os.environ:
            if not file_path.exists():
                pytest.fail(f"all_blueprints.py does not exist at {file_path}")
    
            current_content = file_path.read_text()
            if current_content != generated_content:
                diff = difflib.unified_diff(
                    current_content.splitlines(keepends=True),
                    generated_content.splitlines(keepends=True),
                    fromfile="all_blueprints.py (current)",
                    tofile="all_blueprints.py (generated)",
                )
                diff_str = "".join(diff)
>               pytest.fail(
                    f"all_blueprints.py is out of date. Run "
                    f"`pytest dimos/robot/test_all_blueprints_generation.py` locally to update.\n\n"
                    f"Diff:\n{diff_str}"
                )
E               Failed: all_blueprints.py is out of date. Run `pytest dimos/robot/test_all_blueprints_generation.py` locally to update.
E               
E               Diff:
E               --- all_blueprints.py (current)
E               +++ all_blueprints.py (generated)
E               @@ -153,6 +153,7 @@
E                    "b-box-navigation-module": "dimos.navigation.bbox_navigation.BBoxNavigationModule",
E                    "b1-connection-module": "dimos.robot.unitree.b1.connection.B1ConnectionModule",
E                    "basic-path-follower": "dimos.navigation.basic_path_follower.module.BasicPathFollower",
E               +    "benchmark-policy-eval-module": "dimos.robot_learning.policy_rollout.evaluation.BenchmarkPolicyEvalModule",
E                    "camera-module": "dimos.hardware.sensors.camera.module.CameraModule",
E                    "cartesian-motion-controller": "dimos.manipulation.control.servo_control.cartesian_motion_controller.CartesianMotionController",
E                    "click-start-goal-router": "dimos.navigation.cmu_nav.modules.click_start_goal_router.click_start_goal_router.ClickStartGoalRouter",
E               @@ -247,6 +248,7 @@
E                    "replanning-a-star-planner": "dimos.navigation.replanning_a_star.module.ReplanningAStarPlanner",
E                    "rerun-bridge-module": "dimos.visualization.rerun.bridge.RerunBridgeModule",
E                    "rerun-web-socket-server": "dimos.visualization.rerun.websocket_server.RerunWebSocketServer",
E               +    "robot-policy-module": "dimos.robot_learning.policy_rollout.robot_policy_module.RobotPolicyModule",
E                    "scene-reconstruction-module": "dimos.perception.reconstruction.scene_reconstruction.SceneReconstructionModule",
E                    "security-module": "dimos.experimental.security_demo.security_module.SecurityModule",
E                    "semantic-search": "dimos.memory2.module.SemanticSearch",

all_blueprints = {'alfred-nav': 'dimos.robot.diy.alfred.blueprints.alfred_nav:alfred_nav', 'coordinator-basic': 'dimos.control.blueprin...oordinator-cartesian-ik-piper': 'dimos.robot.manipulators.piper.blueprints.teleop:coordinator_cartesian_ik_piper', ...}
all_modules = {'agentic-manipulation-module': 'dimos.manipulation.agentic_manipulation_module.AgenticManipulationModule', 'alfred-hi...t_extensions.ArmTeleopModule', 'b-box-navigation-module': 'dimos.navigation.bbox_navigation.BBoxNavigationModule', ...}
common     = set()
current_content = '# Copyright 2025-2026 Dimensional Inc.\n#\n# Licensed under the Apache License, Version 2.0 (the "License");\n# you m...ebsocket_vis_module.WebsocketVisModule",\n    "zed-camera": "dimos.hardware.sensors.camera.zed.camera.ZEDCamera",\n}\n'
diff       = <generator object unified_diff at 0xffd339d97e00>
diff_str   = '--- all_blueprints.py (current)\n+++ all_blueprints.py (generated)\n@@ -153,6 +153,7 @@\n     "b-box-navigation-modul...ental.security_demo.security_module.SecurityModule",\n     "semantic-search": "dimos.memory2.module.SemanticSearch",\n'
file_path  = PosixPath('.../dimos/robot/all_blueprints.py')
generated_content = '# Copyright 2025-2026 Dimensional Inc.\n#\n# Licensed under the Apache License, Version 2.0 (the "License");\n# you m...ebsocket_vis_module.WebsocketVisModule",\n    "zed-camera": "dimos.hardware.sensors.camera.zed.camera.ZEDCamera",\n}\n'
root       = PosixPath('.../dimos/dimos/dimos')

dimos/robot/test_all_blueprints_generation.py:76: Failed
dimos.codebase_checks.test_no_all::test_no_all
Stack Traces | 5.46s run time
def test_no_all():
        """Fail if any file defines `__all__`."""
        dimos_dir = DIMOS_PROJECT_ROOT / "dimos"
        hits = find_all_definitions()
        if hits:
            listing = "\n".join(f"  - {p.relative_to(dimos_dir)}:{lineno}" for p, lineno in hits)
>           raise AssertionError(
                f"Found __all__ definition(s) in dimos/:\n{listing}\n\n"
                "__all__ is not allowed. We don't use `from x import *`, so __all__ "
                "lists serve no purpose and are tedious to maintain. Remove them. For "
                "an import that exists purely to be re-exported, use `# noqa: F401`."
            )
E           AssertionError: Found __all__ definition(s) in dimos/:
E             - hardware/damiao/__init__.py:28
E             - hardware/damiao/arm_adapter.py:408
E             - hardware/damiao/runtime.py:372
E             - hardware/damiao/specs.py:309
E             - hardware/damiao/whole_body_adapter.py:251
E             - .../manipulators/a750/__registry__.py:19
E             - .../manipulators/mock/__registry__.py:19
E             - .../manipulators/openarm/__registry__.py:19
E             - .../manipulators/openarm_rs/__registry__.py:19
E             - .../manipulators/openarm_rs/adapter.py:132
E             - .../manipulators/piper/__registry__.py:19
E             - hardware/manipulators/registry.py:150
E             - .../manipulators/sim/__registry__.py:19
E             - .../manipulators/xarm/__registry__.py:19
E             - .../whole_body/openarm/adapter.py:169
E             - perception/reconstruction/__init__.py:20
E           
E           __all__ is not allowed. We don't use `from x import *`, so __all__ lists serve no purpose and are tedious to maintain. Remove them. For an import that exists purely to be re-exported, use `# noqa: F401`.

dimos_dir  = PosixPath('.../dimos/dimos/dimos')
hits       = [(PosixPath('.../dimos/dimos/dimos/hardware/damiao/__init__.py'), 28), (PosixPath('.../runner/work/dim...ter.py'), 251), (PosixPath('.../dimos/dimos/dimos/.../manipulators/a750/__registry__.py'), 19), ...]
listing    = '  - hardware/damiao/__init__.py:28\n  - hardware/damiao/arm_adapter.py:408\n  - hardware/damiao/runtime.py:372\n  - h.../xarm/__registry__.py:19\n  - .../whole_body/openarm/adapter.py:169\n  - perception/reconstruction/__init__.py:20'

dimos/codebase_checks/test_no_all.py:51: 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.

@TomCC7 TomCC7 force-pushed the cc/frontier_/policy-eval branch from 6567ead to 84d6ab2 Compare June 30, 2026 23:00
Comment thread dimos/robot_learning/policy_rollout/backends/lerobot/backend.py
Comment thread dimos/robot_learning/policy_rollout/backends/lerobot/__init__.py
Comment thread dimos/robot_learning/policy_rollout/backends/backend.py
Comment thread dimos/robot_learning/policy_rollout/lerobot_backend.py Outdated
Comment thread dimos/robot_learning/policy_rollout/lerobot_backend.py Outdated
Comment thread dimos/robot_learning/policy_rollout/lerobot_backend.py Outdated


@dataclass(frozen=True)
class RobotLearningSample:

Copy link
Copy Markdown
Member Author

Choose a reason for hiding this comment

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

This is a bad name. if it's an input sample it should be named better. a bunch of ids that's not really used within module is added. also episode_id is a benchmark specific thing, should not be here at all. And, what's the performance of using lcm to transmit a large dictionary of images? is there a way to do it without serialization?

Copy link
Copy Markdown
Member Author

Choose a reason for hiding this comment

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

Partially addressed in 072b32f: renamed RobotLearningSample to RobotPolicyObservation, removed benchmark-specific ids and top-level task from the policy observation, and keep language in metadata/observations for the contract. I left the image dictionary transport/performance question for a separate design pass rather than mixing transport redesign into this cleanup.

Comment thread dimos/robot_learning/policy_rollout/models.py Outdated
Comment thread dimos/robot_learning/policy_rollout/contract.py Outdated
Comment thread dimos/robot_learning/policy_rollout/lerobot_backend.py Outdated
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