Document parsing has a long-overlooked performance tax: reading order.
Where you put that task matters. Run it as a separate stage, and parsing takes longer: reading order adds another sequential step. Combine it with layout analysis, and preparing training data gets harder: you need to label both the layout and the reading order.
In OXR, our open-source document parsing model, we run recognition and reading order in parallel within the same model, keeping layout analysis separate. This saves time while also making reading order content-aware. The separated layout model can be lighter and focus on detecting regions and their types, preserving layout accuracy while further speeding up parsing.
Keeping layout analysis separate also matters when adapting parsing to a business. The same page might need different structures: one workflow needs each image as a separate region; another needs the whole group kept together. Both are valid.
We made OXR’s layout analysis pluggable so you can swap in a model that fits your business while keeping OXR’s recognition and reading order capabilities.
I’ve written more about the design and trade-offs in “The Long-Overlooked Performance Cost in Document Parsing: Reading Order.”
Full article in the reply below.
You should replace it when the built-in boxes don’t match the annotation rules of your scenario. Document parsing needs fine-grained control, so we strongly recommend testing the layout module on its own first. If your test results deviate significantly from your own standards, retrain it. Training a layout model is far easier than training the full OXR-1.0 model and needs much less compute.
Great question. Rollout disagreement is a high-recall filter. It surfaces samples that are weak, noisy, or far off-distribution. Disagreement alone can’t tell us whether a sample is mislabeled or just sits in a region where data is too sparse. The general VLM’s judgment helps separate those two cases. In the case you describe, disagreement is low, the VLM says “correct,” and the reading is still wrong. That means both models are confidently wrong. It almost always points to data we never collected or a rare edge case, and no internal signal will catch it. That’s why our RSI loop isn’t sealed in a sandbox. It improves through real-world use. The more it’s used, the more likely these misalignments get reported, and every human-reported error becomes a priority fix. To be honest, human feedback is the final backstop. Human judgment hasn’t been fully replicated by current general models, so real feedback is still the fastest way to improve.
Errors as data: RSI helped us build a small document parsing model with SOTA accuracy and speed.
We built OXR, our open-source document parsing model, around the idea that a small model can go a long way if you systematically find its weaknesses and build the right training data.
Real documents keep exposing new weaknesses. But turning those failures into training data usually means finding bad examples, diagnosing them, and manually labeling new samples. We wanted model iteration to move without waiting for another round of manual data preparation.
So we built a recursive self-improvement (RSI) loop into post-training. To our knowledge, OXR is the first document parsing model to use this approach.
Each round, OXR parses unlabeled documents. A general VLM evaluates the results and analyzes errors and uncertainty; disagreement between OXR’s predictions for the same document also flags uncertain samples. A clustering model groups issues by cause, helping the VLM plan the next round of OXR training and generate targeted data.
This loop requires no manual labeling of new training data, speeding up model iteration.
I think this idea is worth exploring beyond document parsing, wherever clear, testable outcomes let failures guide what a model should learn next.
OXR is one example of how we've put this idea into practice: a 1.3B model with SOTA accuracy and speed. And we think there's still room to make it smaller.
Full write-up in the next post 👇
Thanks for testing. Public benchmark scores and real-world use complement each other.
A leaderboard measures performance on a fixed set of documents. Yours usually aren't in that set.
To see if OXR can handle your material, download the weights and run a document of your own.
MinerU2.5-Pro: 87.2 → 72.1
olmOCR-2: 73.8 → 82.8
Same page images. The cause is mostly one test: olmOCR-Bench wants page headers and footers removed, OmniParseBench checks they're kept.
MinerU keeps them and scores 16.8 on that category. olmOCR-2 scores 96.2.
Try OXR, our open-source document parsing model that turns your PDFs into Agent-Friendly data in Markdown or JSON.
We offer a free API with no signup or API key required.
Parse your document with one command 👇
For the full walkthrough—from your first parsed document to self-hosting—see our How to use OXR guide in the reply below.
Turn complex documents into data AI agents can use with OXR-1.0, SoMark's 1.3B open-weight model for parsing PDFs and document images into Markdown or JSON.
🤖 https://t.co/QTT2PPnZuw
🏆 SOTA across three parsing benchmarks: Ranks #1 in the project’s published comparisons on olmOCR-Bench, OmniDocBench, and DocParsingBench.
⚡ Small model, top-tier speed: Also leads the project’s 21-model speed comparison at 557.77 native tokens/s.
📄 Beyond plain OCR: Recognizes 13 element types, including tables, formulas, chemical equations, chemical structures, and code blocks.
🧩 Bring your own layout model: Layout analysis is independent and pluggable, so teams can customize structure handling while retaining OXR’s recognition and reading-order capabilities.
🌀 Trained to improve from failures: Recursive self-improvement during post-training turns real document parsing failures into new optimization signals.
📜 OXR Open Source License applies.
The next batch of documents may come from an unfamiliar industry, in another language, with a different layout. Can the model still parse it reliably?
It’s a question that keeps coming up in our work.
To tackle it, we turned to AI4AI—using AI to help improve AI—and built a recursive self-improvement (RSI) loop for post-training 🔁.With help from a general vision-language model, parsing errors and uncertain results inform the next training plan and targeted data generation.
This process helped us build SoMark, our production-grade document parsing engine. But as we served more customers, we realized there were still many kinds of documents we hadn't seen.
🎯 That's why we decided to open-source OXR. We hope the community will bring new use cases, reproducible problems, and domain knowledge, helping us improve the model and bring those improvements back to developers.
Developers also need accuracy, speed, and flexibility💡. We redesigned OXR to run recognition and content-aware reading order in parallel within one model, with independent, pluggable layout analysis. This speeds up parsing while preserving layout accuracy and lets developers customize layout analysis for their business needs.
Every one of the decisions serves one goal:keep improving how the model handles unfamiliar documents, and make those improvements easier to use.
Full story below 👇
Beyond OCR. Meet OXR.
Only 1.3B. Open source.
#1 on olmOCR-Bench, OmniDocBench & DocParsingBench🏆
#1 in parsing speed among open-source models⚡
RSI-powered. A first in document parsing.
Turn documents into Agent-Friendly data.
If OXR helps, give us a star on GitHub! 🌟
Give your agent a document-focused version of JEV.
We’ve open-sourced Docision!!! 🚀
Inspired by JEV, Docision adds multimodal capabilities and is fine-tuned for document tasks. With just 4B parameters, it lets your agent classify receipts and check forms on your laptop.
Give it a try and let us know what you’d use it for. Already using JEV? We’d love to hear how Docision could fit into your workflow.
If you find it helpful, give it a star⭐
https://t.co/djYmP2B0zX