Policy Architectures And Programs¶
OpenWAM separates model topology from experiment semantics. This distinction keeps checkpoints understandable and lets users change a conditioning program without selecting a different trainer or visual backbone.
Vocabulary¶
| Concept | What it controls | Examples |
|---|---|---|
| Architecture | Parameter topology and token execution | parallel_stream, dual_expert |
| Program | Video/action conditioning and supervision | video_then_action, joint, generalist_joint_denoising |
| Sequence contract | Prefix, history, chunk, and alignment semantics | single-frame prefix, target-only conditional layout |
| Runtime backend | Packed execution, cache writes, and denoising implementation | exact shared-stream, packed dual-expert |
| Action decoder | Final action outputs and supervised losses | parallel_stream_decoder, dual_expert_decoder |
An experiment config selects these contracts explicitly. The trainer and simulator integrations do not branch on architecture nicknames.
Built-In Architectures¶
| Architecture | Parameter topology | Maintained programs |
|---|---|---|
parallel_stream |
Video and action tokens share one transformer. | Six standard video/action programs, GJD, and conditional FDM/IDM through the maintained exact packed backend. |
dual_expert |
Video and action have separate transformer experts that execute paired blocks. | Six standard video/action programs, GJD, and conditional FDM/IDM. |
causal_video_prediction |
The visual model runs without action supervision. | Video-only prediction. |
The six standard video/action programs are:
video_then_actionaction_then_videojointdecoupled_same_stepvideo_noisy_to_actionaction_noisy_to_video
generalist_joint_denoising adds sampled joint, FDM, and IDM submodes. Its
conditional FDM/IDM layout is a separate sequence contract, not another model
architecture.
Both video/action architectures expose the conditional submodes as fixed standalone programs:
forward_dynamics: clean actions condition video prediction; only video loss is active.inverse_dynamics: clean video conditions action prediction; only action loss is active.
These programs compile to exactly the same shared training and rollout plans as the corresponding single-mode GJD route. The plan fixes one clean t0 latent in its own singleton chunk, the most recent clean video/proprio boundary as rolling history, the sampled 1-4 frame size for following training chunks, no task text, and only matching real-demo/counterfactual sources. Each architecture then packs that plan for its own topology and cache backend. Fixed dynamics does not add a trainer, attention implementation, or decoder.
dual_expert_libero_conditional_dynamics.yaml is a convenience experiment
profile, not the owner of these semantics. For either architecture, its GJD
profile can be switched atomically to forward_dynamics or inverse_dynamics
with matching data.dynamics_routing.routes and one fixed-mode validation
probe.
forward_dynamics and inverse_dynamics are first-class program selectors,
but they are conditional training and offline-inference objectives. Unlike VTA,
ATV, joint, and the other standard programs, they require future clean
conditioning tensors and are not live simulator policy rollouts. The maintained
config defaults to a 1:1 real-demo/counterfactual mixture and therefore
requires encoded counterfactual train and validation roots. See the
data prerequisites. A real-only
ablation still uses those encoded roots, selecting only their rollout-local
gt branch.
Shared Execution Boundary¶
Every built-in architecture runs through:
ExperimentConfig -> VariantPipeline -> VisualTower -> PolicyVariant -> ActionDecoder
VariantPipelineowns common train and inference orchestration.VisualTowerowns the shared visual frontend and transformer-facing runtime.- Shared program contracts own architecture-independent conditioning and supervision semantics.
PolicyVariantdeclares model-space geometry and translates those contracts into architecture-specific packing, execution, and recurrent state.ActionDecoderowns final outputs and losses.
Architecture implementations do not import one another. Shared behavior lives in typed config, sequence, attention, scheduler, and decoder-artifact contracts.
The factory validates model geometry and conditioning against the selected tower and decoder. Shared dynamics contracts align clean/noisy modalities, losses, text, and chunk-boundary proprioception before architecture-specific packing.
Changing architecture keeps the requested program and conditioning semantics, not necessarily identical predictions: the parameters, action packing, and attention implementation differ. Unsupported geometry is rejected rather than reinterpreted. See the Extension SDK for implementation contracts and Rollout Contracts for session and history integration.
Selecting A Program¶
Maintained YAML names encode architecture and program. For a one-off ablation,
the public switch is policy_variant.program:
openwam-train \
--cfg configs/experiments/dual_expert_libero_joint.yaml \
--set policy_variant.program=video_then_action
The config boundary derives low-level coupling fields and rejects conflicting program/coupling combinations.
Extending OpenWAM¶
Choose the smallest extension that expresses the change:
- New output or loss only: add an
ActionDecoder. - New visibility or execution semantics on an existing topology: add a typed runtime/attention program.
- New parameter topology or recurrent-state owner: add a
PolicyVariant. - New source format: add a dataset adapter selected by
data.dataset_type.
See Add A Policy Architecture and the Extension SDK.
Configuration Compatibility¶
Use the architecture and program names above in YAML, CLI overrides, and Python configs. Start from the shipped experiment templates when creating a run; a checkpoint's resolved config records its original experiment and is not a replacement for a current template. See Compatibility for checkpoint-loading guarantees.