Guardian — Multi-View VLM for Robotic Planning & Execution Failure Detection (Thinking variant)
Guardian is a vision-language model fine-tuned for unified planning and execution verification in robotic manipulation. Given an instruction and one or more images of the robot scene, it predicts whether a proposed plan is correct (planning verification) or whether a subtask was successfully executed (execution verification), and emits an explicit chain-of-thought reasoning trace alongside the final answer.
This checkpoint (guardian-thinking) is the thinking variant: it is trained and inferred with <think> ... </think> reasoning before the final <answer> and <category> tokens. A lighter no-CoT counterpart (guardian-vanilla) is released separately.
Model summary
- Architecture: InternVL3-8B (Qwen2.5-7B LLM + InternViT-300M-448px-V2.5), fine-tuned with LoRA (rank 16) on the LLM only; visual encoder and MLP connector kept frozen.
- Capabilities:
- Planning verification — from an initial scene image and a proposed list of subtasks, decide whether the plan is correct.
- Execution verification — from before/after observations of a subtask (single-view or multi-view), decide whether the subtask succeeded.
- Thinking mode — every prediction is preceded by an explicit reasoning trace.
- Output format:
- Thinking:
<think> reasoning </think> <answer> True|False </answer> <category> ... </category>
- Training data: FailCoT (RLBench-Fail + BridgeDataV2-Fail), ~30K planning + execution failures with reasoning traces. See the paper Scaling Cross-Environment Failure Reasoning Data for Vision-Language Robotic Manipulation (Pacaud et al., 2026).
Quick start
The simplest way to run Guardian is the lightweight wrapper shipped in the Guardian repo (examples/guardian.py):
1from examples.guardian import Guardian
2
3guardian = Guardian(
4 model_path="<path>/guardian-thinking",
5 thinking=True,
6)
7
8# Planning verification: 1 image of the initial scene
9answer, category = guardian.verify_plan(
10 img_paths_list=["/path/to/start_img.png"],
11 task_instruction="stack the red cup on the blue cup",
12 plan=str([
13 "grasp red cup",
14 "move grasped object on top of blue cup",
15 "release",
16 ]),
17)
18
19# Execution verification: 2, 6, or 8 images (before/after, possibly multi-view)
20answer, category = guardian.verify_subtask(
21 img_paths_list=[
22 "/path/to/start_left.png",
23 "/path/to/start_right.png",
24 "/path/to/start_wrist.png",
25 "/path/to/end_left.png",
26 "/path/to/end_right.png",
27 "/path/to/end_wrist.png",
28 ],
29 task_instruction="stack the red cup on the blue cup",
30 subtask_instruction="grasp red cup",
31)
For execution verification, the wrapper accepts:
- 2 images — single-view:
[start, end]
- 6 images — three views:
[start_left, start_right, start_wrist, end_left, end_right, end_wrist]
- 8 images — four views, similarly ordered.
See
docs/RUN_DEMO.md in the Guardian repo for the full demo.
Downloading the checkpoint
1hf download paulpacaud/guardian-thinking \
2 --local-dir ./data/failure_forge/models/guardian-thinking
The codebase expects the checkpoint to live under ./data/failure_forge/models/guardian-thinking/.
Evaluation
Guardian is evaluated on three real-robot OOD benchmarks bundled at
paulpacaud/Guardian-FailCoT-OOD-datasets — UR5-Fail, RoboFail, RoboVQA — plus the in-distribution test splits of FailCoT (RLBench-Fail / BridgeDataV2-Fail).
Reproduce evaluation results following
docs/Offline_VQA_Evaluation.md in the Guardian repo. Headline numbers from Table II of the paper:
| Benchmark | Execution acc. | Planning acc. |
|---|
| RoboFail | 0.86 | 0.70 |
| UR5-Fail | 0.77 | 0.89 |
| RoboVQA | 0.85 | — |
Intended use
Guardian is designed as a plug-and-play verification module for robotic manipulation pipelines (e.g. as the verifier in 3D-LOTUS++): at each planning step or subtask boundary, query Guardian; on a failure, trigger replanning or re-execution.
Citation
1@misc{pacaud2026guardian_failcot,
2 title = {Scaling Cross-Environment Failure Reasoning Data for Vision-Language Robotic Manipulation},
3 author = {Paul Pacaud and Ricardo Garcia and Shizhe Chen and Cordelia Schmid},
4 year = {2026},
5 eprint = {2512.01946},
6 archivePrefix = {arXiv},
7 primaryClass = {cs.RO}
8}
If you specifically build on the earlier Guardian workshop paper:
1@inproceedings{pacaud2025guardian,
2 title = {Guardian: Detecting Robotic Planning and Execution Errors with Vision-Language Models},
3 author = {Paul Pacaud and Ricardo Garcia Pinel and Shizhe Chen and Cordelia Schmid},
4 booktitle = {Workshop on Making Sense of Data in Robotics: Composition, Curation, and Interpretability at Scale at CoRL 2025},
5 year = {2025},
6 url = {https://openreview.net/forum?id=wps46mtC9B}
7}
License
Released under the Apache 2.0 license, inheriting the license of the InternVL3-8B base model.