{"record":{"id":"332136537e368dc3","repo":"sgl-project/sglang","slug":"action-mode-forward-dynamics-requires-an-action","errorCode":null,"errorMessage":"action_mode='forward_dynamics' requires an 'action' array (list[list[float]] of shape [T, D]).","messagePattern":"action_mode='forward_dynamics' requires an 'action' array \\(list\\[list\\[float\\]\\] of shape \\[T, D\\]\\)\\.","errorType":"validation","errorClass":"ValueError","httpStatus":null,"severity":"error","filePath":"python/sglang/multimodal_gen/runtime/pipelines_core/stages/model_specific_stages/cosmos3.py","lineNumber":697,"sourceCode":"        action_chunk_size = num_frames - 1 if num_frames > 1 else 1\n        action_offset = 1 if action_chunk_size == num_frames - 1 else 0\n\n        domain_id = self._resolve_domain_id(batch)\n        batch_dim = (\n            int(batch.raw_latent_shape[0])\n            if getattr(batch, \"raw_latent_shape\", None)\n            else 1\n        )\n        raw_action_dim = getattr(sp, \"raw_action_dim\", None)\n        if raw_action_dim is None:\n            embodiment = getattr(sp, \"domain_name\", None)\n            if embodiment:\n                raw_action_dim = get_raw_action_dim(embodiment)\n\n        if mode == ACTION_MODE_FORWARD_DYNAMICS:\n            raw = getattr(sp, \"action\", None)\n            if raw is None:\n                raise ValueError(\n                    \"action_mode='forward_dynamics' requires an 'action' array \"\n                    \"(list[list[float]] of shape [T, D]).\"\n                )\n            if isinstance(raw, str):\n                raw = json.loads(raw)\n            action = torch.as_tensor(np.asarray(raw), dtype=torch.float32)\n            if action.ndim == 3 and action.shape[0] == 1:\n                action = action.squeeze(0)\n            if action.ndim != 2:\n                raise ValueError(\n                    f\"action must have shape [T, D], got {tuple(action.shape)}\"\n                )\n            if action.shape[0] < action_chunk_size:\n                pad = action[-1:].repeat(action_chunk_size - action.shape[0], 1)\n                action = torch.cat([action, pad], dim=0)\n            elif action.shape[0] > action_chunk_size:\n                action = action[:action_chunk_size]\n            if raw_action_dim is None:","sourceCodeStart":679,"sourceCodeEnd":715,"githubUrl":"https://github.com/sgl-project/sglang/blob/0132848349585cfe6aae51c4941cbae872505f8a/python/sglang/multimodal_gen/runtime/pipelines_core/stages/model_specific_stages/cosmos3.py#L679-L715","documentation":"forward_dynamics mode conditions action generation on a supplied action trajectory. If sampling_params.action is None (absent), the stage cannot build action latents and raises before tensor conversion.","triggerScenarios":"Setting action_mode='forward_dynamics' without providing sp.action (a list[list[float]] of shape [T, D], possibly JSON-encoded).","commonSituations":"Porting from a mode that didn't need actions (e.g. 'policy'), or forgetting to attach the recorded trajectory from a robot rollout.","solutions":["Provide sp.action as a [T, D] float array (or JSON string of it)","Switch to a mode that doesn't need actions, e.g. 'policy' or 'inverse_dynamics'","Ensure your request schema makes 'action' required when mode is forward_dynamics"],"exampleFix":"# before\nsp.action_mode = 'forward_dynamics'\n\n# after\nsp.action_mode = 'forward_dynamics'\nsp.action = [[0.0, 1.0, 0.0]] * 16  # [T, D]","handlingStrategy":"validation","validationCode":"if str(sp.action_mode).strip().lower() == 'forward_dynamics':\n    assert getattr(sp, 'action', None) is not None, 'forward_dynamics requires sp.action'","typeGuard":"def has_action_payload(sp) -> bool:\n    return getattr(sp, 'action', None) is not None","tryCatchPattern":null,"preventionTips":["Schema-validate: action required iff action_mode == 'forward_dynamics'","Attach rollout trajectories when building forward-dynamics requests"],"tags":["cosmos3","action-generation","missing-parameter","forward-dynamics"],"backgroundTag":"missing-required-parameter","analyzedSha":"0132848349585cfe6aae51c4941cbae872505f8a","analyzedAt":"2026-08-28T05:10:05.995Z","schemaVersion":2},"datasetVersion":"2026-08-28T06:17:29.519Z"}