Spaces:
Running
title: README
emoji: π
colorFrom: indigo
colorTo: blue
sdk: static
pinned: false
Neural Metrics
Documents in. Structured data out.
We turn the world's messiest paperwork β scanned invoices, 200-page contracts, handwritten forms, statements that were faxed in 1998 β into clean, typed, schema-valid JSON.
The pipeline
| Stage | What happens | |
|---|---|---|
| π₯ | Ingest | PDFs, scans, phone photos, faxes β skewed, stapled, stamped and all |
| ποΈ | Read | Vision-language OCR that keeps layout, not just characters |
| π§© | Structure | Tables, keyβvalue pairs and reading order recovered from the page |
| π | Ground | Every field carries a bounding box, so each value traces back to the pixel it came from |
| β | Validate | Constrained decoding against your schema β malformed JSON never leaves the building |
Why we build in the open
Document AI fails in ways benchmarks rarely capture: the third column that wraps, the total that lives in the footer, the checkbox that means the opposite of what it looks like. So we work from open weights we can inspect, fine-tune and ship β and we publish the forks we build on.
The zoo
ποΈ Readers β pixels to structure
| Model | Size | Why it's here |
|---|---|---|
| Qwen3-VL-2B-Instruct | 2B | Our workhorse. Cheap to serve, sharp enough to hold a table together across a page break. |
| Nanonets-OCR-s | 3B | Document β Markdown with semantic tags: tables, checkboxes, signatures, watermarks. |
| DeepSeek-OCR | 3B | Optical context compression β a whole page in far fewer vision tokens. Long docs get affordable. |
| olmOCR-7B | 7B | Fully open: weights, data and training code. Our auditable reference point. |
| RolmOCR | 7B | The olmOCR recipe, rebuilt for speed and lower memory. |
| PaddleOCR-VL | 0.9B | Layout analysis from the most battle-tested OCR lineage there is. Strong multilingual. |
| GOT-OCR2_0 | 580M | Doesn't flinch at formulas, tables or dense text. Emits Markdown and LaTeX directly. |
| granite-docling-258M | 258M | Emits a document tree, not a wall of text. First-pass structure at high volume. |
| Florence-2-base | 230M | OCR with regions. Text plus coordinates in a single pass. |
| trocr-base-printed | 334M | Line-level recognition. Old, small, well understood β the control in every experiment. |
π Retrieval β finding it again afterwards
| Model | Size | Why it's here |
|---|---|---|
| Qwen3-Embedding-0.6B | 0.6B | Semantic search over extracted clauses and line items. Ask a question, get the clause. |
π Datasets β how we keep ourselves honest
| Dataset | Focus |
|---|---|
| ocr-benchmark | End-to-end JSON accuracy, not character error rate. 99% of characters right can still get the total wrong. |
| cord-v2 | The receipt benchmark everyone quotes. Line-item annotations, comparable scores. |
| invoices-donut-data-v1 | Invoices paired with the JSON they should produce. |
| invoices-and-receipts-ocr-v1 | Receipts β faded thermal print, drifting columns, totals in odd places. |
| funsd-layoutlmv3 | Noisy scanned forms with keyβvalue and entity-link ground truth. |
| key-information-extraction | Field-level precision and recall, straight at the core task. |
| DocumentVQA | Ask a page a question. Catches models that read text but misread structure. |
| ProcessBench | Step-level evaluation. Extraction is a chain; we care where it breaks. |
| P-MMEval | Multilingual coverage, because invoices don't only arrive in English. |
Every repo here is an unmodified fork of upstream work by the Qwen, IBM Granite, Nanonets, DeepSeek, AI2, Reducto, StepFun, PaddlePaddle, Microsoft, OmniAI, NAVER CLOVA, Katana ML and HuggingFaceM4 teams. We rehost so our experiments stay reproducible and version-pinned β original licenses and all credit remain with the upstream authors.