ΒΆPaper Feed

Issue 33 Β· Project 02 GitHub Robotics βœ“ read

geyan21/flex-pi

Flex-Ο€: A multi-stream world-action model with compute flexibility: one checkpoint that deploys as a VLA, a full world model, or anything in between.

TL;DR β€” Flex-Ο€ (UW + AI2, Dieter Fox's group) is a 6B world-action model for manipulation that co-denoises future RGB, 3D pointmaps, DINOv3 features, and actions as parallel token streams, then lets you pick at inference which streams to feed in and which to generate β€” 56 regimes from one checkpoint, spanning a 60 ms/call action-only VLA to a 193 ms full world model. The framing β€” compute flexibility as a first-class training objective rather than a distillation afterthought β€” is genuinely new, and the release is complete: code, checkpoints, datasets, and a real-robot serving stack, all MIT.

The idea

Most world-action models predict one thing: future RGB latents. That's a strong prior but a pixel-reconstruction objective carries no explicit signal for geometry or object identity β€” the things manipulation actually needs. Flex-Ο€ adds two more predicted futures: 3D pointmaps (annotated offline with Depth Anything 3, so no depth sensor is required at deployment) and DINOv3 semantic features.

The neat empirical finding enabling this: the Wan-2.2 video VAE, trained only on RGB, encodes 3D pointmaps almost losslessly. So RGB and geometry live in one shared latent space, DINOv3 tokens ride alongside, and a ~1B action DiT expert joins them inside a Mixture-of-Transformers backbone where everything is co-denoised jointly.

The training trick is cross-modality forcing: visual streams are dropped at random per-sample, and the model must generate the streams it never observed from the ones it did. This forces the backbone to internalize each modality's information redundantly β€” which is exactly what makes any input/output subset viable at inference. Two runtime flag families (infer_present_* for inputs, infer_joint_* for outputs) select the regime with no retraining.

One checkpoint, any subset of streams RGB (Wan VAE) Pointmaps (Wan VAE) DINOv3 tokens Actions streams dropped at random in training Mixture-of-Transformers shared latent space joint co-denoising (~6B) action-only (VLA) 60 ms / call 54 intermediate regimes full world model 193 ms / call runtime flag, no retrain
Cross-modality forcing drops visual streams at random during training and requires the model to generate them anyway; at inference, any of 56 input/output subsets works from the same weights.

Evidence

All numbers are the authors' own, but they're specific. Real-world: five bimanual YAM tasks, beating Ο€0.5, ManiFlow, and Fast-WAM on all of them β€” 2.3Γ— the success rate of the strongest baseline β€” including an eight-stage gripper self-repair with a Β±0.25 mm-clearance insertion, plus the best robustness to unseen objects and clutter. Data efficiency is the more interesting claim: the world-model objectives act as a substitute for demonstrations β€” 1.9–4.5Γ— baseline success at 50–100 RoboTwin demos/task, and on the real robot, half the demos beat all baselines at full data. Full-data results are near ceiling: 94.6% across RoboTwin's 50 tasks, up to 99.2% on LIBERO. The README gives no per-task breakdown; the paper (arXiv 2608.10860) presumably does.

Latency per call, RTX 5090, 4 denoise steps (ms)ms/call0100200300400447132eager PyTorch36060torch.compile230+TRT joint193+TRT KV-splitfull jointaction onlyfrom the README; TensorRT applies to the joint path only

What's released and what to expect

Unusually complete for a paper repo: training/eval/deployment code, RoboTwin and LIBERO checkpoints (including a no-dropout "full-joint-star" variant), all datasets on HuggingFace in LeRobot v2.1 format, a WebSocket policy server for real robots with a documented msgpack wire contract, and TensorRT engine builds. Docs cover install (conda/uv/Docker), per-benchmark training guides, and β€” refreshingly β€” "rules that have caused emergency stops on real hardware."

Gaps: the large-scale pretrained checkpoints (YAM, AgiBot World, DROID) are "planned," so what's out now is benchmark-specific. Training needs 4–8Γ— 80 GB GPUs (LoRA fine-tuning also "planned"); inference fits one 4090/5090 at 16–26 GB. Repo is two weeks old with 3 forks, so expect rough edges. The main thing to verify independently is how much the visual streams actually buy over action-only mode β€” the README says joint generation "costs latency and wins more" but quantifies the win only via the data-efficiency claims.

Try it

git clone --recurse-submodules https://github.com/geyan21/flex-pi.git
cd flex-pi
# follow docs/INSTALL.md, then:
huggingface-cli download flex-pi/flexpi-libero-fulljoint-star \
  --local-dir runs/flexpi-libero-fulljoint-star
CKPT=$(ls runs/flexpi-libero-fulljoint-star/checkpoints/weights/*.pt) \
DATASET_STATS=runs/flexpi-libero-fulljoint-star/dataset_stats.json \
  bash scripts/eval_flexpi_libero_4suite.sh

Videos at flex-pi.github.io; datasets and checkpoints at huggingface.co/flex-pi.