AI News Feed
Market watch
Companies

Jina AI Releases jina-ocr-v1, a 3.4B MoE Document Parser With Built-In Speculative Decoding

Jina AI has released jina-ocr-v1, a 3.4B-parameter MoE visual document parser with built-in speculative decoding, open weights for research and non-commercial use. It scores 91.14 on OmniDocBench v1.6 and 83.4 on olmOCR-Bench, and parses 2.57 pages per second on one A100 40 GB.

The model post-trains DeepSeek-OCR and keeps two efficiency components. DeepEncoder has about 380 million parameters and chains SAM, a 16x convolutional compressor and CLIP-L. It turns a 1024x1024 page view from 4,096 patches into 256 visual tokens. A dynamic-resolution mode adds up to nine local tiles at 100 tokens each, capping a page at 1,156 visual tokens. The decoder is DeepSeek-3B-MoE with 12 layers, 64 routed experts and two shared experts. Top-6 routing activates about 570 million parameters per token. The position limit is 32,768. Output is Markdown, with tables in HTML and formulas in LaTeX.

Jina AI reports 91.14 on OmniDocBench v1.6 and 83.4 on olmOCR-Bench. The open weights are about 6.8 GB in BF16 and run on Transformers or vLLM under a CC BY-NC 4.0 license, which permits research and non-commercial use. Commercial use requires contacting Jina AI. The release is therefore deployable for research and non-commercial settings, but not without a separate agreement for commercial products.

FastMTP speculative decoding is built for OCR output that is near-deterministic and locally structured. Jina AI adds a FastMTP head: one dense draft block applied recursively for K=3 steps. Draft parameters stay constant as depth grows. The decoder then verifies the drafts greedily. It accepts the longest prefix that matches its own choices and commits one more token itself. If all three drafts match, that extra token is a bonus. The committed text always equals plain greedy decoding, so the speedup is lossless. At K=3, the model commits 2.73 tokens per step on average.

Post-training combines instruction alignment, robustness fine-tuning on degraded pages, and GRPO. Every reward term is deterministic code scored against a reference transcription. The terms cover content, formulas, tables, structural validity, unit tests, repetition and format. The terms are multiplied, and each one is graded, so partly correct pages earn partial credit. Structural, unit-test and format terms are floored at 0.2, and the table term at 0.1. The repetition term has no floor, because loops can inflate the content score. On natural pages, the formula and table rewards apply to few samples. Jina AI therefore built JinaOCRSynth, synthetic pages packed with both, each carrying olmOCR-Bench-style unit tests. An agent also merges candidate checkpoints under a fixed evaluation budget. The draft head is trained last, against the frozen final verifier.

For MoE models, the reported parameters show decoder total and active counts. The whole jina-ocr-v1 model is about 3.4B. It does not lead on accuracy. PaddleOCR-VL-1.6 and HunyuanOCR-1.5, at 94.74, score higher on OmniDocBench. chandra-ocr-2 and dots.mocr, at 83.9, score higher on olmOCR-Bench. Post-training adds 7.4 points over the DeepSeek-OCR backbone on olmOCR-Bench. The benchmark comparison also lists jina-ocr-v1 at 3B/570M, 91.14 on OmniDocBench v1.6 and 83.4 on olmOCR-Bench; DeepSeek-OCR at 3B/570M with 76.0 on olmOCR-Bench; DeepSeek-OCR-2 at 3B/570M with 90.25 on OmniDocBench; PaddleOCR-VL-1.6 at 0.9B with 96.34 on OmniDocBench; chandra-ocr-2 at 4B with 85.8 on olmOCR-Bench; and Qwen3-VL-235B at 235B/22B with 89.78 on OmniDocBench.

Throughput is the main result. On one A100 40 GB at concurrency 32, jina-ocr-v1 parses 2.57 pages per second. That is the highest of 14 systems Jina AI measured, against 1.22 for olmOCR-2 and 0.38 for chandra-ocr-2. It emits 1,085 output tokens per page. Jina AI says that is the shortest output among systems scoring above 83. On an NVIDIA L4 at batch size 1, eager decoding rises from 42.7 to 83.1 tokens per second. That is a 1.95x speedup at a 57.6% acceptance rate. With CUDA graphs the baseline is already 158.3 tokens per second. There, K=1 works best at 185.6 tokens per second, a 1.17x gain.

The quickest route to run the model is Jina Reader. Send a URL to r.jina.ai with the header X-Respond-With: jina-ocr-v1. Reader fetches the page or PDF, runs the model and returns Markdown. An X-Page header transcribes one page of a longer document. Jina AI also hosts an OpenAI-compatible endpoint at https://api.jina.ai/v1/chat/completions. A hosted demo is available for quick tests. For self-hosting, weights and custom code ship in one repository and load with trust_remote_code=True. FastMTP requires vLLM 0.21 or later and a one-time register() call. The Transformers path runs the MoE decoder alone and ignores the draft weights.