Uh oh!
There was an error while loading. Please reload this page.
feat(sim): add semantic skill IR and compiler - #492
Conversation
Make endpoint bindings, timed command frames, transports, routing, safe holds, and profile lowering controller-agnostic. Preserve joint trajectories as optional feedback artifacts and add staged, same-address invocation revision semantics for mobile and whole-body safety.
Greptile SummaryThe PR introduces a semantic skill intermediate representation, integration binding, compiler, and runtime facade over Atomic Actions.
Confidence Score: 5/5The PR appears safe to merge because no blocking failure remains within the eligible follow-up review scope. No blocking failure remains.
|
| Filename | Overview |
|---|---|
| embodichain/lab/sim/skills/compiler.py | Adds provider-free workflow analysis and JIT lowering of semantic calls into typed Atomic Action invocations. |
| embodichain/lab/sim/skills/runtime.py | Adds task ownership, per-call execution orchestration, effect verification, eligibility propagation, and terminal cleanup. |
| embodichain/lab/sim/skills/integration.py | Adds manifest-based binding and validation across scene, robot profile, call catalog, and grounding providers. |
| embodichain/lab/sim/skills/calls.py | Defines the semantic-call IR, descriptors, catalog, and built-in call contracts. |
| embodichain/lab/sim/atomic_actions/execution.py | Adds sticky initial eligible-cohort handling and bounded scene-dependency monitoring for staged plans. |
| embodichain/lab/sim/atomic_actions/primitives/pick_up.py | Bounds PickUp target monitoring to its reversible approach segment so grasp-induced movement does not trigger invalidation. |
| embodichain/lab/sim/skills/scene.py | Extends canonical scene metadata and manifest contracts used by semantic integration. |
| tests/sim/skills/test_compiler.py | Covers semantic linking, resource inheritance, provider selection, late grounding, and registered-call boundaries. |
Sequence Diagram
sequenceDiagram
participant App as Application
participant Runtime as SemanticSkillRuntime
participant Compiler as SemanticSkillCompiler
participant Scene as Scene Registry / Providers
participant Engine as AtomicActionEngine
participant Runner as ExecutionRunner
App->>Runtime: start SemanticTask
Runtime->>Compiler: analyze workflow
Compiler->>Scene: resolve entities, resources, providers
Runtime->>Compiler: ground next call from fresh observation
Compiler-->>Runtime: GroundedSemanticCall
Runtime->>Engine: start invocation with eligible mask
Engine-->>Runner: ExecutionSession
Runner->>Engine: tick with latest observations
Engine-->>Runner: commands / effect request
Runner-->>Runtime: terminal result and verified TaskState
alt more semantic calls
Runtime->>Compiler: ground next call
else task complete
Runtime-->>App: SemanticTaskResult
end
Reviews (9): Last reviewed commit: "Merge remote-tracking branch 'origin/mai..." | Re-trigger Greptile
There was a problem hiding this comment.
Pull request overview
Adds a new semantic skill compilation layer in embodichain.lab.sim.skills that statically analyzes object-centric workflows (Pick/Place/HandOver/registered calls) and then JIT-lowers each call into typed atomic-action invocations using the bound scene registry + robot profile + installed providers/grounders/lowerers.
Changes:
- Introduces
SemanticSkillCompilerwith workflow analysis (SemanticWorkflow) and per-call grounding (GroundedSemanticCall), including look-ahead targets and verified held-object dependencies. - Extends scene/profile integration:
SceneRegistry.object_semantics()for ownedObjectSemanticssnapshots;RobotSkillProfile.grounding_providersfor selecting named grounding providers (e.g., handover pose providers). - Updates atomic actions to accept late-bound pose goal values (
SceneEntityPoseor tensors) and correctly collect scene dependencies / resolve targets at plan time; adds focused regression tests.
Reviewed changes
Copilot reviewed 13 out of 13 changed files in this pull request and generated 2 comments.
Show a summary per file
| File | Description |
|---|---|
| tests/sim/skills/test_scene.py | Adds coverage for rejecting non-owning affordance deepcopy behavior and for owned ObjectSemantics snapshots. |
| tests/sim/skills/test_profiles.py | Tests immutability/validation for new grounding_providers mapping on RobotSkillProfile. |
| tests/sim/skills/test_compiler.py | New comprehensive tests for semantic workflow analysis + JIT lowering behavior, provider selection, and validation. |
| tests/sim/atomic_actions/test_core.py | Tightens regression around late-bound pose ownership semantics. |
| tests/sim/atomic_actions/test_actions.py | Adds tests ensuring pose options own late-bound transforms and replan resolves latest scene snapshot targets. |
| embodichain/lab/sim/skills/scene.py | Hardens affordance metadata copying and adds SceneRegistry.object_semantics() helper. |
| embodichain/lab/sim/skills/profiles.py | Adds grounding_providers field and normalizes it as an immutable mapping. |
| embodichain/lab/sim/skills/integration.py | Shifts “registered lowerer installed” validation away from link_call (now enforced by compiler analysis). |
| embodichain/lab/sim/skills/compiler.py | New compiler module implementing analysis + grounding registries (relation grounders, registered lowerers, handover pose providers). |
| embodichain/lab/sim/skills/init.py | Exports compiler surface types from the skills package. |
| embodichain/lab/sim/atomic_actions/primitives/pick_up.py | Allows downstream look-ahead targets as pose goal values; resolves them at plan time; collects scene deps. |
| embodichain/lab/sim/atomic_actions/primitives/hand_over.py | Allows pose goal values for middle/final targets; resolves/collects deps at plan time. |
| embodichain/lab/sim/atomic_actions/goals.py | Adds SceneEntityPose.snapshot() and exposes collect_scene_dependencies() for late-bound pose values. |
💡 Add a code-review agent skill or configure MCP servers for context-aware, tailored reviews. Learn more in the docs.
| endpoint = analyzed.bound.binding.action_binding.endpoint(slot_id, "motion") | ||
| try: | ||
| target = endpoint.require_target(JointPositionTarget) | ||
| except TypeError as exc: | ||
| raise _diagnostic( | ||
| "unsupported_builtin_endpoint", | ||
| (*path, "resources", slot_id, "motion"), | ||
| "The current built-in semantic lowerer requires a joint-position " | ||
| "motion endpoint.", | ||
| ) from exc |
| target = self.require_goal(request) | ||
| options = request.skill_options | ||
| options = replace( | ||
| request.skill_options, | ||
| downstream_object_target_poses=tuple( | ||
| resolve_pose_goal( | ||
| target, | ||
| context, | ||
| name=f"downstream_object_target_poses[{index}]", | ||
| ) | ||
| for index, target in enumerate( | ||
| request.skill_options.downstream_object_target_poses | ||
| ) | ||
| ), |
Make endpoint bindings, timed command frames, transports, routing, safe holds, and profile lowering controller-agnostic. Preserve joint trajectories as optional feedback artifacts and add staged, same-address invocation revision semantics for mobile and whole-body safety.
…2c-runtime-endpoints # Conflicts: # docs/design/declarative_expert_program_plan.md # embodichain/lab/sim/atomic_actions/primitives/coordinated_pickment.py # embodichain/lab/sim/atomic_actions/primitives/coordinated_placement.py # embodichain/lab/sim/atomic_actions/primitives/hand_over.py # embodichain/lab/sim/atomic_actions/primitives/move_end_effector.py # embodichain/lab/sim/atomic_actions/primitives/move_held_object.py # embodichain/lab/sim/atomic_actions/primitives/move_joints.py # embodichain/lab/sim/atomic_actions/primitives/pick_up.py # embodichain/lab/sim/atomic_actions/primitives/place.py # embodichain/lab/sim/atomic_actions/primitives/press.py # embodichain/lab/sim/skills/profiles.py # scripts/tutorials/atomic_action/assemble.py # scripts/tutorials/atomic_action/coordinated_pickment.py # scripts/tutorials/atomic_action/coordinated_placement.py # scripts/tutorials/atomic_action/hand_over.py # scripts/tutorials/atomic_action/move_end_effector.py # scripts/tutorials/atomic_action/move_held_object.py # scripts/tutorials/atomic_action/move_joints.py # scripts/tutorials/atomic_action/place.py # scripts/tutorials/atomic_action/press.py
Remove fallback control periods from motion policies and the atomic action engine. Require planners and custom actions to provide validated timing, propagate explicit interpolation cadence through planning contexts, and update built-ins, tasks, benchmarks, tutorials, docs, and tests. BREAKING CHANGE: planner results with positions must include dt and duration, custom atomic actions must return TimedTrajectory, and fallback_control_dt is removed.
…pr2c-runtime-endpoints # Conflicts: # agent_context/topics/atomic-actions/atomic-actions.md # docs/source/overview/sim/atomic_actions/builtin_actions.md # docs/source/overview/sim/atomic_actions/index.md # docs/source/tutorial/atomic_actions.rst # embodichain/lab/sim/atomic_actions/execution.py # scripts/tutorials/atomic_action/dynamic_obstacle_recovery.py # tests/sim/atomic_actions/test_core.py # tests/sim/atomic_actions/test_engine.py # tests/sim/atomic_actions/test_runner.py
…2c-runtime-endpoints # Conflicts: # agent_context/topics/atomic-actions/atomic-actions.md # agent_context/topics/motion-planning/motion-planning.md # docs/design/declarative_expert_program_plan.md # docs/source/overview/sim/atomic_actions/builtin_actions.md # docs/source/overview/sim/atomic_actions/index.md # docs/source/overview/sim/planners/motion_generator.md # docs/source/tutorial/atomic_actions.rst # docs/source/tutorial/motion_gen.rst # embodichain/lab/sim/atomic_actions/core.py # embodichain/lab/sim/atomic_actions/execution.py # embodichain/lab/sim/atomic_actions/policies.py # embodichain/lab/sim/atomic_actions/primitives/coordinated_pickment.py # embodichain/lab/sim/atomic_actions/primitives/coordinated_placement.py # embodichain/lab/sim/atomic_actions/primitives/hand_over.py # embodichain/lab/sim/atomic_actions/primitives/move_end_effector.py # embodichain/lab/sim/atomic_actions/primitives/move_held_object.py # embodichain/lab/sim/atomic_actions/primitives/move_joints.py # embodichain/lab/sim/atomic_actions/primitives/pick_up.py # embodichain/lab/sim/atomic_actions/primitives/place.py # embodichain/lab/sim/atomic_actions/primitives/press.py # embodichain/lab/sim/planners/base_planner.py # embodichain/lab/sim/planners/motion_generator.py # embodichain/lab/sim/planners/neural_planner.py # embodichain/lab/sim/planners/utils.py # scripts/benchmark/atomic_action/press_benchmark.py # scripts/benchmark/motion_generation/planners/ik_interpolate.py # scripts/tutorials/atomic_action/control_dt.py # scripts/tutorials/atomic_action/dynamic_obstacle_recovery.py # scripts/tutorials/atomic_action/press.py # tests/benchmark/motion_generation/test_motion_generation_benchmark.py # tests/sim/atomic_actions/test_actions.py # tests/sim/atomic_actions/test_core.py # tests/sim/atomic_actions/test_engine.py # tests/sim/atomic_actions/test_runner.py # tests/sim/planners/test_motion_generator_batched.py # tests/sim/planners/test_plan_state_batched.py
…mantic-skill-compiler # Conflicts: # agent_context/MAP.yaml # agent_context/topics/atomic-actions/atomic-actions.md # agent_context/topics/motion-planning/motion-planning.md # docs/design/declarative_expert_program_plan.md # docs/source/overview/sim/atomic_actions/builtin_actions.md # docs/source/overview/sim/atomic_actions/index.md # docs/source/overview/sim/atomic_actions/robot_skill_profiles.md # docs/source/tutorial/atomic_actions.rst # embodichain/lab/sim/atomic_actions/__init__.py # embodichain/lab/sim/atomic_actions/affordance.py # embodichain/lab/sim/atomic_actions/bindings.py # embodichain/lab/sim/atomic_actions/core.py # embodichain/lab/sim/atomic_actions/effects.py # embodichain/lab/sim/atomic_actions/engine.py # embodichain/lab/sim/atomic_actions/execution.py # embodichain/lab/sim/atomic_actions/plans.py # embodichain/lab/sim/atomic_actions/primitives/coordinated_pickment.py # embodichain/lab/sim/atomic_actions/primitives/coordinated_placement.py # embodichain/lab/sim/atomic_actions/primitives/hand_over.py # embodichain/lab/sim/atomic_actions/primitives/move_end_effector.py # embodichain/lab/sim/atomic_actions/primitives/move_held_object.py # embodichain/lab/sim/atomic_actions/primitives/move_joints.py # embodichain/lab/sim/atomic_actions/primitives/pick_up.py # embodichain/lab/sim/atomic_actions/primitives/place.py # embodichain/lab/sim/atomic_actions/primitives/press.py # embodichain/lab/sim/atomic_actions/state.py # embodichain/lab/sim/planners/base_planner.py # embodichain/lab/sim/planners/curobo/curobo_planner.py # embodichain/lab/sim/planners/curobo/curobo_yaml.py # embodichain/lab/sim/planners/motion_generator.py # embodichain/lab/sim/skills/__init__.py # embodichain/lab/sim/skills/profiles.py # embodichain/lab/sim/skills/scene.py # scripts/benchmark/atomic_action/press_benchmark.py # scripts/tutorials/atomic_action/assemble.py # scripts/tutorials/atomic_action/coordinated_pickment.py # scripts/tutorials/atomic_action/coordinated_placement.py # scripts/tutorials/atomic_action/dynamic_obstacle_recovery.py # scripts/tutorials/atomic_action/hand_over.py # scripts/tutorials/atomic_action/move_end_effector.py # scripts/tutorials/atomic_action/move_held_object.py # scripts/tutorials/atomic_action/move_joints.py # scripts/tutorials/atomic_action/moving_target_recovery.py # scripts/tutorials/atomic_action/pickup.py # scripts/tutorials/atomic_action/place.py # scripts/tutorials/atomic_action/press.py # tests/sim/atomic_actions/test_actions.py # tests/sim/atomic_actions/test_control.py # tests/sim/atomic_actions/test_core.py # tests/sim/atomic_actions/test_endpoint_runtime_e2e.py # tests/sim/atomic_actions/test_engine.py # tests/sim/atomic_actions/test_runner.py # tests/sim/atomic_actions/test_trajectory_ops.py # tests/sim/planners/test_curobo_planner.py # tests/sim/planners/test_motion_generator_batched.py # tests/sim/skills/test_profiles.py # tests/sim/skills/test_scene.py
7b8424c to
7862cf5CompareUh oh!
There was an error while loading. Please reload this page.
Description
Stack
feat/atomic-action-pr2c-runtime-endpointsConsolidation
Consolidates #489, #490, and #491 into this layer. Scope: semantic IR, call catalog, integration manifest, and compiler.
Add the canonical semantic compiler that resolves calls through the scene registry, robot profile, exact providers, and named policy presets into typed atomic-action invocations.
Compilation is lazy where goals depend on physical effects, validates all reachable resources/providers before execution, and keeps object-centric Pick, Place, HandOver, and articulation semantics out of task-owned motion code.
Refs #471
Refs #474
Type of change
Screenshots
Not applicable.
Validation
tests/sim/skills/test_compiler.pyplus related atomic-action goal testsChecklist