EviRover-4B

The model from EviRover: Reinforcing Agentic Perception Beyond a Glance. A 4B vision-language model trained to gather the evidence it is missing before it answers a perceptual question, rather than answering from a single look at the image.

The task it is trained for is perception under insufficient evidence: the target may be far too small to resolve at the resolution a single forward pass sees, it may only be findable by comparing or scanning several regions, or identifying it at all may require information that is not in the image. In all of those cases the model is still required to commit to a concrete output — a box, a mask, or a count. EviRover handles them by running a tool loop: it crops and re-inspects the image at a finer scale, verifies candidate regions, compares panels, searches the web, browses pages, and executes code, and only then emits an answer.

The benchmark it is evaluated on, EviLens, together with the evaluation harness that supplies the system prompt and the ten tools, is released separately: bunny127/EviLens.

Model

Architecture Qwen3VLForConditionalGeneration (model_type: qwen3_vl)
Parameters ~4B
Weights bfloat16, 2 safetensors shards, 9.1 GB
Base Qwen3-VL-4B-Instruct
Processor Qwen3VLProcessor, max_pixels 2,160,000
Context 262144 positions; trained with an 8192-token prompt and 16384-token response budget per turn
Tokenizer / chat template unchanged from the base model

Conventions it was trained under

These are part of the model, not of the harness — a different convention will cost accuracy.

  • Coordinates. xyxy, normalized to 0–1000. Boxes are emitted inside <answer> tags.
  • Sampling. temperature 0.7 / top_p 0.8 / top_k 20, as recorded in generation_config.json. Greedy decoding is not recommended for the agentic loop.
  • Tool feedback. The strings the model sees on tool success and tool failure are byte-identical to the ones used during training; they ship with the EviLens harness (eval/agent/tools/messages.py). Paraphrasing them changes what the model is reacting to.
  • Image scale. High-resolution inputs are passed through at full resolution and the model zooms in via crop. Downscaling the input image up front removes the evidence the loop exists to recover.

The tool set is the same ten tools on the training and evaluation sides: crop, verify, verify_part, verify_mask, compare_lr, python, text_search, text_search_image, image_search, browse. Masks are produced by handing the predicted box to SAM3; the model itself outputs boxes.

Usage

Serve it like any Qwen3-VL checkpoint and talk to it over an OpenAI-compatible endpoint:

vllm serve bunny127/EviRover \
  --served-model-name evirover \
  --dtype bfloat16 \
  --max-model-len 131072 \
  --limit-mm-per-prompt '{"image": 128}'

To reproduce the agentic setting, drive it with the EviLens harness, which supplies the system prompt, the ten tools and the parsing:

MODEL_NAME=evirover BASE_URL=http://127.0.0.1:8000/v1 API_KEY=EMPTY \
  ./run_eval.sh evirover_run

run_eval.sh can also start vLLM itself from a local path (MODEL_PATH=/path/to/EviRover SERVE_GPU=0 ./run_eval.sh evirover_run). See the EviLens README for the tool credentials the loop needs, the SAM3 setup for the segmentation category, and the evaluation protocol.

Loading it directly in transformers:

from transformers import AutoProcessor, Qwen3VLForConditionalGeneration

model = Qwen3VLForConditionalGeneration.from_pretrained(
    "bunny127/EviRover", dtype="bfloat16", device_map="auto"
)
processor = AutoProcessor.from_pretrained("bunny127/EviRover")

Requires transformers >= 4.57.1.

Evaluation

EviRover is evaluated agentically on EviLens: 688 human-verified instances across localization, recognition, spot-the-difference, segmentation and counting, all of them cases where one glance at the image is not enough. Each category reports its own domain-standard metrics; they are deliberately not folded into a single score.

Model Loc IoU Loc R@.5 Rec IoU Rec R@.5 SD F1_mi SD F1_ma Seg gIoU Seg cIoU Cnt Acc (%)
Qwen3-VL-4B-Instruct 0.276 0.251 0.265 0.231 0.005 0.008 0.203 0.279 19.2
OneThinker-8B 0.110 0.086 0.353 0.357 0.065 0.106 0.409 0.387 25.6
InternVL-3.5-8B 0.020 0.007 0.093 0.033 0.000 0.000 0.081 0.081 20.5
EviRover (4B) 0.444 0.500 0.648 0.687 0.171 0.266 0.686 0.708 50.0

Loc and Rec are the localization and recognition grounding categories; SD is spot-the-difference, where micro-F1 is the primary metric. Counting accuracy is shown as a percentage. Every model in the table is run through the same agentic harness with the same protocol:

--mode agent  --max-tool-calls 35  (--max-turns 39, automatic)
--text-search-backend serper  --serper-per-sample 10-15
--temperature 0.7  --top-p 0.8  --top-k 20
spot_diff: --repeat 8 --repeat-tasks spot_diff  (averaged per question; n stays 15)
browse summarizer: an OpenAI-compatible LLM; page retrieval via Jina
segmentation: predicted box -> mask with SAM3
served with vLLM 0.24.0+cu129 / torch 2.11

License

Apache-2.0 (LICENSE). The base model, Qwen3-VL-4B-Instruct, carries its own license from Qwen. The EviLens benchmark data is licensed separately (CC BY-NC 4.0) in its own release.

Citation

@article{fan2026evirover,
  title={EviRover: Reinforcing Agentic Perception Beyond a Glance},
  author={Fan, Kaixuan and Feng, Kaituo and Peng, Tianshuo and Jiang, Yilei and Zhang, Manyuan and Wang, Junke and Yue, Xiangyu},
  journal={arXiv preprint arXiv:2609.40230},
  year={2026}
}
Downloads last month
15
Safetensors
Model size
5B params
Tensor type
BF16
·
Inference Providers NEW
This model isn't deployed by any Inference Provider. 🙋 Ask for provider support

Model tree for bunny127/EviRover

Finetuned
(488)
this model

Dataset used to train bunny127/EviRover

Paper for bunny127/EviRover