vllm_omni.diffusion.models.pi05.pipeline_pi05 ¶
π0.5 VLA pipeline for vllm-omni.
Entry point for DiffusionEngine.step() → pipeline.forward(req). Mirrors the DreamZero contract and the π0 pipeline: the pipeline owns ALL preprocessing. It reads the raw robot observation from req.sampling_params.extra_args["robot_obs"] (delivered by the OpenPI realtime serving layer), builds model inputs, runs flow-matching denoising, and returns DiffusionOutput(output={"actions": ndarray}).
π0.5 is stateless across calls (no KV reuse, first-order Markov), so session_id / reset from the OpenPI protocol are accepted but ignored.
The post-processing order is load-bearing and matches LeRobot::
unnormalize → absolute actions → to_cpu
AbsoluteActionsProcessorStep must run after unnormalization, because a relative-action checkpoint's norm_stats are computed in relative space.
Pi05Pipeline ¶
Bases: Module
π0.5 VLA pipeline: raw robot obs → continuous action chunk.
Registered as "Pi05Pipeline" in the diffusion registry.
processor instance-attribute ¶
processor = Pi05Processor(
self.config, self.tokenizer, self._device
)
tokenizer_source instance-attribute ¶
tokenizer_source = str(
custom_args.get(
"tokenizer", self._resolve_tokenizer_source()
)
)
load_weights ¶
No-op for the diffusion loader: π0.5 self-loads its checkpoint.
get_pi05_post_process_func ¶
get_pi05_post_process_func(od_config: OmniDiffusionConfig)
π0.5 returns actions directly; post-processing is identity.