olmOCR-2-7B-1025
by allenai
Document OCR with a published per-category score, including the categories that usually go unreported
allenai/olmOCR-2-7B-1025mixpeek://image_extractor@v1/allenai_olmocr2_7b_1025_v1Deploy olmOCR-2-7B-1025
Single-tenantMixpeek has no managed extractor for this model. On a single-tenant deployment you upload the weights and a custom plugin serves them next to the rest of your pipeline.
Overview
OCR benchmarks tend to report one number over clean documents, which tells you nothing about the pages that break pipelines. olmOCR-2 publishes a score per category on olmOCR-bench, and the interesting row is the low one: 48.3 on old scans, against 99.7 on clean base documents and 95.7 on headers and footers. That spread is the real shape of document OCR, and a model that shows it lets you decide whether your corpus is the easy kind.
It is a Qwen2.5-VL-7B-Instruct fine-tune trained on the olmOCR-mix-1025 dataset and then tuned further with GRPO reinforcement learning aimed at equations, tables and awkward cases. Unlike a classic OCR engine it reads a page the way a vision-language model does, which is what lets it recover reading order in multi-column layouts and keep table structure intact instead of flattening cells into a line.
Architecture
A vision-language model rather than a detector plus recogniser: Qwen2.5-VL-7B-Instruct fine-tuned on olmOCR-mix-1025, then further tuned with GRPO reinforcement learning on math equations, tables and difficult scans. It takes one document image per call, rendered so the longest dimension is 1,288 pixels, plus page metadata in the prompt. 8.3B parameters in BF16; an FP8 build is the recommended one for inference.
Mixpeek SDK Integration
# Render the page so its longest side is 1288px before you send it. The
# toolkit does this for you and also handles rotation and retries.
from olmocr.pipeline import run_page
from mixpeek import Mixpeek
mx = Mixpeek(api_key="API_KEY")
page_text = run_page("archive/1987-annual-report.pdf", page_num=12)
mx.documents.upsert(
collection_id="col_your_collection",
documents=[{
"document_id": "annual-1987-page-12",
"payload": {
"source_key": "archive/1987-annual-report.pdf#page=12",
"text": page_text,
},
}],
)Capabilities
- Per-category published accuracy on olmOCR-bench rather than a single headline number
- Reading-order recovery in multi-column layouts (84.3 on the multi-column category)
- Table structure preserved instead of flattened (84.3 on tables)
- Math equations handled as a trained target (82.1 on old scans math)
- Batch inference at scale through the olmOCR toolkit on vLLM
Use Cases on Mixpeek
Benchmarks
| Dataset | Metric | Score | Source |
|---|---|---|---|
| olmOCR-bench | Overall | 82.3 +/- 1.1 | Allen AI model card, olmOCR pipeline v0.4.0 |
| olmOCR-bench | Base documents | 99.7 | Allen AI model card, olmOCR pipeline v0.4.0 |
| olmOCR-bench | Headers and footers | 95.7 | Allen AI model card, olmOCR pipeline v0.4.0 |
| olmOCR-bench | Tables | 84.3 | Allen AI model card, olmOCR pipeline v0.4.0 |
| olmOCR-bench | Multi column | 84.3 | Allen AI model card, olmOCR pipeline v0.4.0 |
| olmOCR-bench | ArXiv | 82.9 | Allen AI model card, olmOCR pipeline v0.4.0 |
| olmOCR-bench | Old scans math | 82.1 | Allen AI model card, olmOCR pipeline v0.4.0 |
| olmOCR-bench | Long tiny text | 81.4 | Allen AI model card, olmOCR pipeline v0.4.0 |
| olmOCR-bench | Old scans | 48.3 | Allen AI model card, olmOCR pipeline v0.4.0 |
Frequently Asked Questions
Why is the old-scans score so much lower than the rest?
Degraded scans are harder: bleed-through, skew, speckle and broken glyphs remove the evidence any model needs. 48.3 on that category against 99.7 on clean pages is the honest spread, and it is the number to plan around if your archive is microfilm or photocopies. Pre-processing the images helps more than swapping models at that end of the range.
Should I use the BF16 weights or the FP8 build?
FP8 for inference. The card recommends it for everything except further fine-tuning, and the published scores differ by a tenth of a point, which is inside the reported error bar.
Is a 7B vision-language model overkill compared with a classic OCR engine?
For clean single-column text, yes, and a traditional engine is far cheaper per page. The case for this model is the pages where layout carries meaning: multi-column articles, tables, equations. A common arrangement is a cheap engine by default with this one routed the difficult pages.
Does Mixpeek run this model?
Not as a managed extractor. Run the olmOCR toolkit over your PDFs and upsert the text, or use a managed document extractor when the corpus does not need this level of layout recovery.
Explore on Mixpeek
Compare alternatives in this category
Hand-picked tools & platforms compared
Deep-dive technical guide
See how Mixpeek runs models as extractors
Store & search embeddings at scale
Usage-based pricing for pipelines
Compare models, APIs & infrastructure
Specification
Research Paper
olmOCR: Unlocking Trillions of Tokens in PDFs with Vision Language Models
arxiv.orgBuild a pipeline with olmOCR-2-7B-1025
Add this model to a processing pipeline alongside other extractors. Combine with retrieval stages for end-to-end search.
Run it on your own data, free