DEV Community

Cover image for Vision-Language-Action Models: When LLMs Learn to Use Their Hands
Ankita Virani
Ankita Virani

Posted on

Vision-Language-Action Models: When LLMs Learn to Use Their Hands

A humanoid hand closing on a wine glass needs a new action estimate every 8 to 20 milliseconds, or it either crushes the glass or drops it. A vision-language model reasoning about that same scene can comfortably take 100 milliseconds and nobody notices. Every VLA architecture shipped this year is an answer to that gap, whether or not the paper admits it.

NVIDIA, Google DeepMind, and Physical Intelligence all released production Vision-Language-Action models in roughly the same window, all describe themselves as generalist manipulation systems, and all made a different bet on where to put the seam between thinking and moving. Isaac GR00T N1.7 puts the seam between two networks running on two clocks. Gemini Robotics 1.5 puts the seam in time one lineage of models that reasons in language, then acts, then reasons again. π0.5 tries to remove the seam altogether, folding reasoning and action into one transformer and letting attention do the coordination instead of a handoff.

None of this is obvious from the outside. The marketing on all three sounds the same "generalist," "cross-embodiment," "foundation model for robots." What's actually interesting is underneath, in the specific architectural tradeoff each team accepted, and what breaks when you deploy each one past its comfort zone.

The System Mental Model

Strip away the framework-specific naming and every current-generation VLA reduces to the same abstract pipeline:

High-level Vision-Language-Action pipeline showing perception, reasoning, action decoding, and robot control

Where the three systems actually disagree is how Reasoning and ActionDecoding relate to each other — separate networks, separate timesteps of one network, or fused into a single forward pass.

Dimension Traditional Robot Control Stack VLA Foundation Models
Task representation Hand-coded state machine per task Learned from demonstration + language conditioning
Perception Task-specific CV pipeline (object detector, pose estimator) General-purpose vision-language embedding, zero-shot on novel objects
Action generation PID / MPC over explicit kinematic model Learned policy discrete tokens, diffusion, or flow matching
Generalization None outside programmed cases Cross-embodiment, cross-task, language-conditioned
Failure mode Predictable, out-of-distribution = hard stop Silent competence collapse plausible-looking wrong actions

All three belong to the same rough category: a slow semantic reasoner conditioning a fast continuous controller. Call it a dual-timescale generalist policy if you want a name for it. The disagreement is entirely about whether that split is a hard module boundary (GR00T), a temporal interleaving inside one model family (Gemini), or an attention-masked partition inside a single transformer (π0.5).

Why the Old Stack Doesn't Scale

A traditional pick-and-place stack encodes a task as an explicit sequence detect object, compute grasp pose, plan trajectory, execute, verify. It works as long as every step assumes a closed world: known geometry, known bin, known lighting. The moment a robot has to handle an object it's never seen, in a room it's never mapped, that assumption doesn't degrade gracefully. There's no branch in the state machine for "novel." You don't patch a state machine into a generalist. You replace the representation.

Classical stacks also separate perception from action at a hard interface a detector outputs bounding boxes, a planner treats those boxes as ground truth. Whatever ambiguity the detector should have flagged (mug or cup? half-full?) gets thrown away right there. VLA models keep perception and action in the same latent space instead, so that ambiguity stays visible to the policy rather than being discarded at a module boundary. This is part of why VLA failures look different in practice not "no detection," but a confidently wrong grasp.

And then there's the data problem, which is really the whole reason foundation models entered robotics at all. Every task-specific controller needs its own tuning pass: new object, new gains, new trajectory library. None of that transfers. Foundation-model VLAs are built to break that pattern pretrain once across embodiments, then fine-tune per robot with far less data than a from-scratch controller would need. A state machine only knows what you programmed into it. A VLA only knows what it saw during training. Both fail once the world exceeds what they were shown the difference is that one fails loudly, and the other tends not to.

NVIDIA GR00T N1.7: The Dual-System Split

GR00T N1.7 is the most literal version of the "System 1 / System 2" framing NVIDIA has used since the original GR00T N1 paper. Not a metaphor bolted onto one network — two separate networks, jointly trained, running at two different rates.

The GR00T N1.7 Request Lifecycle

General Vision-Language-Action architecture illustrating how multimodal perception is transformed into semantic reasoning, continuous action generation, and low-level robot control

The Action Decoder and Why It Matters

System 1 is not predicting discrete action tokens it's a Diffusion Transformer trained with flow matching, denoising a chunk of continuous future actions conditioned on VLM embeddings and current proprioception via AdaLayerNorm timestep conditioning. The non-obvious production implication: because System 1 has no language understanding of its own, if System 2 outputs a stale or ambiguous scene embedding say, a two-second-old read on where an object is System 1 will happily denoise a confident, smooth, and completely wrong trajectory. The failure surfaces as jitter or a clean miss, not an error code.

The Trust Assumption Most Developers Miss

The two systems are trained jointly, but at inference time they run as physically separate processes with an update-rate mismatch System 2 refreshes roughly every 100ms, System 1 acts every 8–20ms. The architecture implicitly trusts that the world doesn't change meaningfully within that gap. Every deployment failure mode traceable to N1.7 in practice comes back to this: fast-moving scenes (a person walking into frame, an object sliding off a shelf) violate that trust window before System 2 can update.

Why the Dual-System Approach Spread

# Simplified inference loop illustrating the update-rate split not GR00T's actual runtime,
# but the pattern every dual-system VLA deployment converges on.

import time

SYSTEM2_PERIOD = 0.1   # ~10Hz reasoning is expensive, doesn't need to be instant
SYSTEM1_PERIOD = 0.01  # 100Hz control must never stall waiting on the VLM

scene_embedding = None
last_system2_call = 0.0

while robot.is_active():
    now = time.monotonic()

    # Only re-run the VLM on its own clock running it every control tick
    # would blow the latency budget and starve System 1 of action updates.
    if now last_system2_call >= SYSTEM2_PERIOD:
        scene_embedding = vlm.encode(camera.read(), instruction, robot.proprio_state())
        last_system2_call = now

    # System 1 always has *something* to condition on, even if it's stale by up to
    # one SYSTEM2_PERIOD this is the explicit trust assumption in the architecture.
    action_chunk = diffusion_transformer.denoise(
        condition=scene_embedding,
        state=robot.proprio_state(),
    )
    robot.execute(action_chunk[0]) # execute first step of the chunk, replan next tick
    time.sleep(SYSTEM1_PERIOD)
Enter fullscreen mode Exit fullscreen mode

This eliminates the single biggest failure mode of putting one large VLM directly in the control loop: latency-induced control instability. Decoupling the clocks is what makes 50–120Hz manipulation possible with a multi-billion-parameter reasoning backbone in the loop at all.

The Real Scaling Constraint

The ceiling isn't parameter count NVIDIA has already swapped System 2's backbone once (Eagle to Cosmos-Reason2-2B) without touching System 1. The ceiling is the interface itself: the fixed-dimensional embedding handed from System 2 to System 1 is a bottleneck that caps how much of System 2's reasoning can actually influence fine motor behavior. You can make System 2 smarter indefinitely and System 1's dexterity won't improve unless the interface between them is redesigned.

Gemini Robotics 1.5: Thinking Out Loud, Mid-Task

Where GR00T splits cognition into two networks, Gemini Robotics 1.5 keeps reasoning and action in the same model family but separates them in time rather than in space an orchestrator model reasons in natural language, then hands off to an action model, in an explicit two-model agentic pipeline that is nonetheless designed to feel like one continuous thought process.

The Gemini Robotics Request Lifecycle

General Vision-Language-Action architecture illustrating how multimodal perception is transformed into semantic reasoning, continuous action generation, and low-level robot control

Embodied Thinking and Why It Matters

The core primitive here is the interleaving mechanism itself: the VLA model periodically emits an internal natural-language reasoning trace between action chunks not for the user, but as a scratchpad the model conditions its own next action on. This is functionally a chain-of-thought applied mid-execution rather than only before it. The non-obvious production implication: this makes long-horizon task decomposition dramatically more robust than single-pass VLAs, because the model can notice partway through in language it generates itself that a sub-goal failed, and replan. The cost is added latency per decision point, which Gemini Robotics 1.5 accepts as a tradeoff for multi-step reliability over raw reflex speed.

The Trust Assumption Most Developers Miss

The orchestrator (GR-ER 1.5) and the action model (GR 1.5) are separately versioned, separately deployable models communicating through natural language, not a learned embedding. That's a deliberate interpretability choice you can literally read what the robot "decided" to do next but it means the system's correctness depends on the orchestrator's language output being faithfully executable by the action model. If the orchestrator's plan uses a concept the action model was never trained to ground physically, the failure is a silent mismatch between what was said and what was attempted.

Why Google Bet on This Model

Google's organizational reasoning tracks its infrastructure: Gemini is already a general-purpose multimodal reasoner serving non-robotics products, so building the orchestrator as an extension of that same lineage rather than a bespoke robotics-only network lets robotics inherit every general-reasoning improvement made to Gemini itself. The Motion Transfer mechanism is the technical bet that follows from this: heterogeneous multi-embodiment demonstration data can be pooled into one action model because the shared orchestrator already normalizes the task representation before it reaches the action layer, directly addressing the cross-embodiment data scarcity problem that limits every VLA.

The Real Scaling Constraint

The ceiling is decision-point latency. Every interleaved reasoning step is a forward pass through a large multimodal model before the next action chunk is even queued. This is fine for deliberate manipulation and terrible for anything requiring sub-50ms reflexes a Gemini Robotics-controlled arm is not the architecture you reach for if the task is catching a falling object.

π0.5: One Transformer, No Handoff at All

π0.5 takes the opposite starting position from both of the above that reasoning and action don't need to live in separate networks, or even separate timesteps, at all. It's a single transformer extended from a PaliGemma vision-language backbone, with a second set of weights (the Action Expert) sharing the same self-attention rather than sitting downstream of it.

The π0.5 Request Lifecycle

Physical Intelligence π0.5 unified transformer architecture using block-wise causal attention and conditional flow matching for continuous robot actions

The Action Expert and Why It Matters

The Action Expert isn't a downstream module consuming a finished embedding it shares the transformer's self-attention with the VLM tower in the same forward pass, gated by the block-wise causal mask above. The non-obvious implication: because there's no discrete handoff point, there's no single place to insert a "sanity check" between reasoning and action the way you can with GR00T's embedding interface or Gemini's language handoff the reasoning-to-action pathway is distributed across every attention layer, which makes it faster but harder to instrument for safety review.

The Trust Assumption Most Developers Miss

π0.5's pretraining uses FAST-tokenized discrete actions to build language-grounded representations quickly, then a "knowledge insulation" step stops gradients from the continuous flow-matching objective from propagating back into the VLM backbone. The system trusts that this insulation preserves the VLM's general knowledge; if fine-tuning on a narrow task is aggressive enough to violate that insulation in practice, the model can quietly lose exactly the open-world generalization that was the entire point of the architecture.

Why This Model Spread

Physical Intelligence's bet is that a single tightly coupled network, trained end-to-end on flow matching, produces smoother and faster continuous control than any architecture that must serialize through a discrete or linguistic bottleneck and their published mobile-manipulator laundry-folding and home-cleaning generalization results are the evidence offered for that bet. The infrastructure assumption underneath: cross-embodiment generalization comes from data diversity during joint pretraining, not from an explicit orchestration layer so π0.5 spends its architectural complexity budget on the attention mask design rather than on a second reasoning model.

The Real Scaling Constraint

The ceiling is instrumentability, not raw capability. Because there's no clean module boundary, debugging a specific failure was it perception, was it the action expert, was it the mask requires attention-level introspection rather than checking a well-defined interface. That's a real cost as these systems move from research demos into audited, safety-critical deployment.

The Core Tradeoff, Dimension by Dimension

Latency Profile. GR00T N1.7 decouples clock rates entirely, so System 1 never waits on System 2 it's the fastest architecture for continuous reflex control, bounded only by the diffusion transformer's own denoising steps. Gemini Robotics 1.5 accepts the highest per-decision latency of the three, because embodied thinking inserts a full reasoning forward pass at every sub-goal transition; π0.5 sits in between, since its single fused forward pass is slower than a pure diffusion head but has no separate reasoning stage to wait on at all.

Trust Verification. GR00T's split gives you one explicit, inspectable interface the embedding handed from System 2 to System 1 which is a natural place to add monitoring. Gemini's language-based handoff is the most human-auditable of the three, since the orchestrator's plan is literally readable text before it's ever executed. π0.5 offers the least verification surface, since reasoning and action share attention layers with no serialized checkpoint between them.

Spending / Resource Control. GR00T's two-network design maps cleanly onto two hardware budgets a cheaper edge chip can run System 1 alone once System 2 has been distilled or cached, which matters for cost-constrained deployment. Gemini Robotics 1.5, tied to a hosted foundation model family, ties resource control to inference-provider pricing and context-window costs rather than to owned hardware. π0.5's single-model design means one deployment artifact and one cost center, at the price of needing enough compute to run the fused model at your target control rate.

Compliance Surface. Gemini's readable intermediate language reasoning is the easiest of the three to log, audit, and explain to a regulator asking why a robot did something. GR00T's embedding interface can be logged but isn't human-legible without extra tooling. π0.5's distributed reasoning-action pathway is the hardest to produce a compliance trail for, since there is no discrete "decision" object to point to at all.

Decision Matrix

Use Case GR00T N1.7 Gemini Robotics 1.5 π0.5 Reasoning
High-speed bin picking Strong decoupled clocks favor reflex speed Weak reasoning latency too high Good fused model still reflex-fast Clock decoupling wins when the task is reflex-dominated
Long-horizon household chores Good but no explicit sub-goal tracking Strong orchestrator tracks multi-step progress Good π0.5's own high-level subtask step helps Explicit sub-goal reasoning matters more than raw speed here
Regulated / auditable deployment Moderate embedding not human-legible Strong language trace is auditable by design Weak no discrete decision checkpoint Compliance favors architectures with a readable handoff
Cross-embodiment fleet (many robot types) Good embodiment-aware encoders built in Strong Motion Transfer built for this exact problem Good pretrained on 7+ embodiments already Purpose-built cross-embodiment mechanisms beat incidental generalization
Edge deployment, constrained compute Strong System 1 can run standalone post-distillation Weak depends on hosted foundation model Moderate single model, but still multi-billion params Modularity lets you shed the expensive half at the edge
Novel object grasping Good VLM backbone updated independently Strong ER model is SOTA on spatial reasoning benchmarks Good flow matching handles continuous novelty well Strongest pure-perception reasoning wins novel-object cases
Multi-step assembly with error recovery Moderate no self-correction primitive Strong mid-task replanning via interleaved reasoning Moderate recovery not a first-class design goal Explicit replanning beats architectures without a recovery hook
Fast-moving dynamic scenes (catching, dodging) Moderate bounded by System 2 refresh window Weak reasoning latency actively hurts here Strong no reasoning-stage bottleneck at all Fused, reasoning-light control wins when the world won't wait
Research reproducibility / open weights Strong Isaac GR00T is openly released Weak hosted, not open-weight Strong π0 weights are open on Hugging Face Open-source ecosystems favor NVIDIA and Physical Intelligence
Simulation-heavy pretraining pipeline Strong deep Omniverse/Cosmos integration Moderate less simulation-centric messaging Moderate favors real demonstration data NVIDIA's sim stack is a structural advantage here

The mistake is assuming one replaces the other.

Production Reference: Dual-Clock Control Loop (Python)

"""
Minimal reference implementation of the update-rate decoupling pattern
used across dual-system VLA deployments (GR00T-style). Not tied to any
vendor SDK illustrates the wire-level contract your integration layer
needs to satisfy regardless of which VLA you deploy behind it.
"""

import os
import time
import logging
from dataclasses import dataclass

logging.basicConfig(level=logging.INFO)
log = logging.getLogger("vla_control_loop")

# Environment-driven config never hardcode control-rate constants,
# they vary per embodiment and per safety certification.
REASONING_HZ = float(os.environ.get("VLA_REASONING_HZ", "10"))
CONTROL_HZ = float(os.environ.get("VLA_CONTROL_HZ", "100"))
STALENESS_LIMIT_S = float(os.environ.get("VLA_STALENESS_LIMIT_S", "0.3"))


@dataclass
class SceneEmbedding:
    vector: list
    timestamp: float


def is_stale(embedding: SceneEmbedding) -> bool:
    # Wire-level contract: any consumer of a cached embedding MUST check
    # staleness before conditioning an action on it this is the exact
    # trust assumption that breaks in fast-moving scenes.
    return (time.monotonic() - embedding.timestamp) > STALENESS_LIMIT_S


def control_loop(vlm_client, action_expert, robot):
    period_reasoning = 1.0 / REASONING_HZ
    period_control = 1.0 / CONTROL_HZ
    cached_embedding = None
    last_reasoning_call = 0.0

    while robot.is_active():
        now = time.monotonic()

        if now - last_reasoning_call >= period_reasoning:
            try:
                cached_embedding = SceneEmbedding(
                    vector=vlm_client.encode(
                        robot.camera_frames(), robot.instruction(), robot.proprio()
                    ),
                    timestamp=now,
                )
            except Exception as exc:
                # A failed reasoning call must NOT stall the control loop
                # fall back to the last good embedding and log loudly instead.
                log.warning("reasoning call failed: %s holding last embedding", exc)
            last_reasoning_call = now

        if cached_embedding is None:
            time.sleep(period_control)
            continue

        if is_stale(cached_embedding):
            # This is the safety-critical branch every dual-system deployment
            # needs and most tutorials skip: staleness triggers a defined
            # degraded-mode action, not a silent continuation of bad conditioning.
            robot.execute(robot.safe_hold_action())
            time.sleep(period_control)
            continue

        action_chunk = action_expert.denoise(
            condition=cached_embedding.vector,
            state=robot.proprio(),
        )
        robot.execute(action_chunk[0])
        time.sleep(period_control)
Enter fullscreen mode Exit fullscreen mode

What this eliminates architecturally: it removes the entire class of failures where a slow reasoning call silently blocks or silently expires without the fast controller ever knowing. Every dual-timescale VLA integration that skips explicit staleness checking will eventually ship a robot that acts confidently on a half-second-old read of the world.

Where Each One Breaks

GR00T N1.7 Failure Modes

Stale-embedding action. Triggered when the scene changes faster than System 2's refresh period. Structural, not patchable, because it's inherent to any architecture that decouples reasoning and control clocks the only fix is narrowing the gap, which costs latency headroom elsewhere.

Interface bottleneck saturation. Triggered when task complexity exceeds what the fixed-dimensional System2-to-System1 embedding can encode. Structural because the embedding dimension is a training-time architectural choice, not a runtime parameter you cannot fix it by upgrading only one half of the system.

Embodiment mismatch at the encoder. Triggered when deploying to a robot morphology outside the embodiment-aware encoder's trained set. Structural because the state/action encoders are category-specific by design, not a generic interface.

Gemini Robotics 1.5 Failure Modes

Orchestrator-executor semantic drift. Triggered when the orchestrator's language plan references a concept the action model was never grounded on physically. Structural because the interface between the two models is natural language, which is expressive enough to describe things the action model literally cannot do.

Decision-point latency stacking. Triggered by tasks with many sub-goal transitions in a short time window. Structural because every transition costs a full reasoning forward pass you cannot amortize this away without reducing how often the model is allowed to "think," which then degrades the exact reliability advantage the architecture is built for.

Reflex-task mismatch. Triggered by any task requiring true sub-50ms response. Structural because embodied thinking is a deliberate speed-for-reliability tradeoff baked into the architecture, not a configuration knob.

π0.5 Failure Modes

Insulation leakage under aggressive fine-tuning. Triggered when task-specific fine-tuning is strong enough to erode the gradient insulation between the flow-matching objective and the VLM backbone. Structural because insulation is a training-time regularization choice, not something you can re-enforce post-hoc at inference time.

Un-instrumentable failure attribution. Triggered whenever a deployed system needs to explain why an action was taken. Structural because reasoning and action share attention layers with no serialized intermediate object to inspect this is a permanent property of the fused-transformer design, not a tooling gap that better logging can close.

Action-horizon staleness. Triggered when the environment changes meaningfully within a single H=50 action chunk. Structural because the chunk is committed at generation time; shortening the horizon fixes staleness at the cost of smoothness and compute overhead per chunk.

What Most Engineers Miss

The framing of "which architecture wins" misses the direction the field is actually moving: these three approaches are converging into composable layers rather than competing end-to-end products. NVIDIA's own trajectory shows this Cosmos-Reason, originally a standalone world-model reasoner, was adopted wholesale as GR00T N1.7's System 2, meaning the industry's "reasoning layer" is already becoming a swappable component rather than something every lab reinvents. The likely stack a year from now looks less like three competing monoliths and more like this:

Physical Intelligence π0.5 unified transformer architecture using block-wise causal attention and conditional flow matching for continuous robot actions

Three specific developments to watch: NVIDIA's continued decoupling of Cosmos-Reason as an interchangeable System 2 backbone across GR00T releases, which is already establishing a de facto standard for the reasoning-layer interface; Physical Intelligence's knowledge-insulation training recipe, which is being generalized beyond π0.5 as a technique for any lab trying to fuse discrete and continuous action representations without one degrading the other; and Google's Motion Transfer mechanism, which directly targets the cross-embodiment data scarcity problem and is the piece most likely to be independently adopted by teams that don't otherwise use Gemini's orchestrator design.

Closing Thought

The three questions these architectures are actually answering aren't the same question. GR00T N1.7 is asking how to keep dexterity fast while reasoning improves on its own schedule. Gemini Robotics 1.5 is asking how to make a robot's multi-step decisions legible and self-correcting. π0.5 is asking how to get the smoothest continuous control without paying a serialization tax between thinking and doing. Calling all three "VLAs" is accurate and also slightly misleading, because it suggests they're interchangeable, and they aren't.

If there's one thing worth taking from comparing them side by side, it's this: pick based on which failure mode your deployment can actually tolerate, not which model has the more impressive benchmark slide.

Top comments (0)