BridgeQuant-Async โ€” LIBERO-Long (LIBERO-10) 94.0%

Full-finetuned 480M VLA (LFM2.5-VL-450M backbone + BridgeConnector + BridgeActionHead). Best LIBERO-Long checkpoint of the campaign โ€” within 0.35 points of GR00T N1.7 at 1/4 the parameters and 1/26 the sample passes.

suite this repo GR00T N1.7 (2B, 12.8M samples)
Long 94.0 94.35
Object 100.0 (separate repo) 98.45
Spatial 98.0 (separate repo) 97.65
Goal 95.0 (separate repo) 97.50
mean 96.75 97.00

Protocol: seed 42, 200 episodes, synchronous rollout, n_action_steps=16, one Euler denoising step, raw (non-EMA) bundle.

Why K=16 here

Long is monotone in commitment: K=1/4/8/16 gives 54.5/80.0/89.0/94.0. Each replan re-draws from a multimodal flow sampler, so replanning mid-sequence lets the policy switch targets โ€” on "put both moka pots on the stove" (two identical objects) that costs 7 of 20 episodes. Committing a full 16-step chunk fixes it. n_action_steps is a runtime knob: the loss is uniform over the trained chunk.

Recipe

Plain full finetune: train_mode: finetune, lr 5e-5, 30k steps, batch 16, vision 512px, GR00T-style augmentation, taps [0, 6, 12, 15], chunk 16, flow matching with Beta(1.5, 1) time sampling, num_steps 1. No auxiliary language objective, no transition oversampling โ€” on this suite every extra shaping signal measured so far destroys one rare skill ("turn on the stove, then place the pot": 19/20 at this recipe, ~0 under all ten perturbations tried).

Async deployment

Same weights, asynchronous runtime (~5 ms replan): 93.0 at K=16 with RTC-freeze 4 + uncertainty refresh, or 90.0 under the unified K=8 controller โ€” which is better than synchronous K=8 (89.0), because the controller refreshes vision at grasp and on sampler disagreement rather than on a fixed 8-step clock.

Eval

uv run python scripts/eval_libero_object.py \
  --config train_config.yaml --checkpoint <this-dir> \
  --n-action-steps 16 --episodes-per-task 20
Downloads last month
9
Safetensors
Model size
0.5B params
Tensor type
F32
ยท
BF16
ยท
Video Preview
loading