Sieve-Vision-4B
Sieve-Vision-4B is the first vision model of the Sieve family. You give it one or more images and a multiple-choice question, and it returns a calibrated probability for every option. It reads the images and the question once, scores the options directly, and never generates text.
It is a full fine-tune of Qwen/Qwen3.5-4B-Base (revision 1001bb4d) with a small decision
head. The inference code is in this repository (sieve_vision/), including an engine for the
Decision Index kit.
Summary
| Backbone | Qwen/Qwen3.5-4B-Base (revision 1001bb4d), 4.66B parameters |
| Trained weights | full fine-tune of the 32 text decoder layers (3.57B parameters) and a new 1.57M-parameter decision head; the vision encoder, vision-text merger and token embeddings are the backbone's, unchanged |
| Question type | choice: any number of options, 1 or more images |
| Decision Index (vision) | public vision index 64.95 on our own run of the 0.3 public vision suite; not on the leaderboard yet |
| Images | native resolution up to 1,638,400 px (1.6 MP) per image, the board's cap |
| Temperature | one global T = 1.817, fitted on our own held-out dev split |
| Latency | 778 ms median, 781 ms p80 per request at 4 images × 1.6 MP (worst case), one A100 80GB, batch 1 |
| GPU memory | 9.3 GB of weights in bf16, plus activations |
How it works
- Backbone. Qwen3.5-4B-Base: a 24-layer vision encoder (16-px patches, 2×2 merge, so one token per 32×32 px) feeding a 32-layer text model (24 Gated DeltaNet layers and 8 full-attention layers).
- Prompt.
Image k: <image tokens>for every image, thenQuestion:and the question, thenOptions:with one line per option,- <key>: <option text>, thenAnswer:. - Readout. The decision head reads the hidden state at
Answer:and the mean hidden state of each option's own tokens. It scores each option with a bilinear term plus the backbone's own next-token logit for the option's key, scaled by a learned weight (0.985 after training). A logit cap and a calibrated softmax give the probabilities. - One pass. One forward pass per question; nothing is generated, and the options are scored in the order given.
Use
pip install "torch>=2.8" "transformers>=5.16" safetensors pillow huggingface_hub
pip install flash-linear-attention # recommended: fused kernels for the Gated DeltaNet layers (our runs used 0.5.2)
import sys
from huggingface_hub import snapshot_download
path = snapshot_download("sthanika-ai/Sieve-Vision-4B")
sys.path.insert(0, path)
from sieve_vision import SieveVisionEngine
engine = SieveVisionEngine(model=path) # or model="sthanika-ai/Sieve-Vision-4B"
response, _ = engine(
{}, # state (optional text or JSON shown before the question)
{"answer": {"type": "choice", "instructions": "Is the parcel in the photo damaged?",
"criteria": {"A": "Yes, the box is torn or crushed", "B": "No, it looks intact"}}},
images=["parcel.jpg"])
print(response["answers"]["answer"]) # {'type': 'choice', 'choice': 'A', 'probabilities': {'A': ..., 'B': ...}}
Images. Paths,
data:URLs, raw base64 or bytes. Images above 1.6 MP are downscaled (LANCZOS, aspect kept); smaller ones are used at their own size.Batching.
engine.batch([{"state": ..., "questions": ..., "images": [...]}, ...])answers many requests at once.Decision Index.
hf download sthanika-ai/Sieve-Vision-4B --local-dir Sieve-Vision-4B PYTHONPATH=Sieve-Vision-4B decision-index vision pipeline --dir work/vision \ --engine sieve_vision_engine:SieveVisionEngine --option model=sthanika-ai/Sieve-Vision-4B \ --out runs/Sieve-Vision-4B
Decision Index (vision)
Our own run of the complete public vision suite of the Decision Index 0.3 (12,210 requests, 11 benchmarks) with the
official kit at f5a6e4f; the suite was rebuilt from the pinned sources and passes decision-index vision verify.
The kit's scorer gives a chance-corrected skill per benchmark (0 = random guessing, 100 = perfect) and the board's
weights (R-Bench-M 0.5, MMMU-Pro vision 0.25, the rest 1). Files:
sthanika-ai/Sieve-Vision-4B-decision-index-results.
| benchmark | rows | accuracy | skill (×100) |
|---|---|---|---|
| CV-Bench | 2,038 | 81.94% | 70.21 |
| BLINK | 961 | 68.78% | 51.67 |
| RealWorldQA | 589 | 75.38% | 59.77 |
| CharXiv | 532 | 72.18% | 62.91 |
| InfographicVQA | 244 | 94.26% | 92.35 |
| Mind2Web | 973 | 93.94% | 91.92 |
| Winoground | 800 | 87.75% | 75.50 |
| KIE (CORD+FUNSD) | 2,465 | 93.51% | 89.31 |
| Moderation (Hateful Memes) | 1,213 | 61.09% | 22.18 |
| R-Bench-M (weight 0.5) | 665 | 33.38% | 20.05 |
| MMMU-Pro vision (weight 0.25) | 1,730 | 38.61% | 29.59 |
| public vision index | 12,210 | 64.95 |
All 12,210 requests were answered: 0 unsupported, 0 errors. The leaderboard's Full score adds private tests of the same skills, which the maintainers run themselves.
Training
| Stages | A: decision head only, 300 steps (lr 5e-4). B: text decoder layers + head, 1,794 steps (2 epochs), tower lr 5e-6 (bottom 8 layers × 0.1), head lr 1e-4. C: head only, 200 steps (lr 1e-4) |
| Batch | 128 questions per step, token-budget micro-batches, gradient checkpointing |
| Optimizer | AdamW (0.9, 0.95), weight decay 0.01 on the tower, gradient clip 1.0, cosine schedule with 3% warm-up |
| Sampling | category-balanced (probability ∝ n^0.5, no row above 3× its natural rate); options shuffled and re-lettered every time a question is drawn, except where the letters are drawn on the image |
| Selection | the checkpoint with the best dev macro skill (chance-corrected, per category) on our own 5,795-question dev split; the public benchmarks were never used for selection |
| Hardware | 2 × NVIDIA A100 80GB, FSDP2 for stage B, bf16 compute with fp32 master weights |
Training data
114,822 training and 5,795 dev multiple-choice questions over 1 to 10 images, all from public datasets whose licences allow commercial use. Questions, answers and images come from the sources; the only conversion is into the multiple-choice format (yes/no items become two options; Mind2Web uses the board's own set-of-marks conversion on the train split; TextVQA and PlotQA distractors are other text or answers from the same image).
| source | train | licence | notes |
|---|---|---|---|
| SAT | 28,994 | MIT | spatial, counting and multi-frame motion questions |
| Multimodal-Mind2Web (train split) | 14,331 | CC BY 4.0 (data), OpenRAIL (card) | board's set-of-marks conversion; screenshots of third-party websites |
| ArxivQA | 13,276 | CC BY-SA 4.0 | arXiv figures; the QA pairs were generated with GPT-4V (OpenAI terms apply to them) |
| ARO | 15,230 | MIT | attribute, relation and word-order caption choice; Visual Genome and COCO images |
| VSR | 6,898 | CC BY 4.0 | COCO 2017 images |
| A-OKVQA | 5,701 | Apache-2.0 | COCO 2017 train images |
| TextVQA | 5,794 | CC BY 4.0 | OpenImages images |
| PlotQA | 5,789 | CC BY 4.0 | |
| SugarCrepe | 5,668 | MIT | COCO val2017 images |
| Mantis-Instruct (NLVR2, ImageCoDe) | 4,348 | Apache-2.0 | multi-image |
| What'sUp | 3,732 | MIT | |
| WebSRC | 2,129 | CC BY 4.0 | web screenshots |
| ViRL39K | 1,375 | MIT | |
| VisualWebBench | 692 | Apache-2.0 | |
| MapQA (via the_cauldron) | 471 | see the original release | |
| PixMo-Docs | 394 | ODC-BY |
Decontamination. Every training and dev image was compared with every image of the built public vision suite
(exact SHA-256, and near-duplicate when pHash ≤ 4 and dHash ≤ 10), and question texts with the suite's question texts
(13-gram overlap). The final check over all 119,000+ training and dev images flagged 11 near-duplicates and no exact
match: 9 are blank or single-colour images, and 2 are real photos that appear in unrelated training questions (one
Hateful Memes image, one Winoground image). Rescoring without the affected suite rows gives 64.94. The report
is in the results dataset (reports/contamination_check.json).
Evaluation on our own held-out data
| Test (1,142 questions, never used in training or selection) | accuracy 89.8%, ECE 3.0% after temperature |
| Dev (5,795 questions, used for checkpoint selection) | macro skill 79.2 |
| Blank-image control (dev) | accuracy drops from 87.9% to 62.0% when every image is replaced by grey: the model uses the images |
| Option order (dev) | the same option is chosen 97.3% of the time when the options are reversed, 98.0% when shuffled |
Limitations
- Hateful content. No licence-compatible meme moderation data exists, so the model was not trained for it; its Hateful Memes skill is low (22.2). Do not use it for content moderation decisions.
- Expert reasoning. College- and expert-level questions (R-Bench-M, MMMU-Pro) remain weak.
- Choice only. It answers multiple-choice questions over images; it does not generate text or captions.
- English. Trained on English questions only.
- Third-party images. Several training sources use images whose copyright belongs to third parties (COCO, Visual Genome, web screenshots), under their datasets' terms.
Licence
Apache-2.0, as the backbone (Qwen/Qwen3.5-4B-Base); the LICENSE file is the backbone's. Training data
licences are listed above.
Citation
@misc{sieve_vision_2026,
title = {Sieve-Vision-4B: a one-pass vision decision model},
author = {Sthanika AI},
year = {2026},
url = {https://huggingface.co/sthanika-ai/Sieve-Vision-4B}
}