T-deep, 5-lane review of Docling as the OCR + document-ingestion engine for #86 (Viska client n8n + pantheon-ops internal). Every claim primary-sourced. The verdict reproduces the production baseline already in our knowledge — The AI Automators run Docling → local VLM → Chandra 2.
docling-serve-cpu Docker (:5001) ← n8n HTTP Request → POST /v1/convert/source. Skip the v0.0.4 community node for Viska prod.| Component | License | Notes |
|---|---|---|
| docling core · docling-parse · ibm-models (code) | MIT | IBM copyright |
| granite-docling-258M weights (current VLM) | Apache-2.0 | redistribution-safe |
| SmolDocling weights (superseded) | CDLA-Permissive-2.0 | avoid — use granite-docling |
IBM Research Zurich → LF AI & Data Incubation (Apr 2025). 62.5k★, 876 contributors, ~1–3 day release cadence, v2.108.0. watsonx managed SaaS ($4/1k pp) signals commitment; OSS core stays MIT.
| Axis | What |
|---|---|
| Inputs | 20+: PDF (digital+scanned), DOCX/PPTX/XLSX, HTML, MD, images, audio/video (ASR), email, XBRL/JATS/USPTO XML |
| Outputs | Markdown · lossless JSON (DoclingDocument) · DocTags · HTML |
| Engine | layout (RT-DETR) · TableFormer · reading-order · formula/code · 9 pluggable OCR engines · Granite-Docling VLM · HybridChunker for RAG |
| Perf | x86 CPU ~3.1s/pg median · M3 Max ~0.32s · L4 GPU ~0.11s · RAM ~2.4 GB · offline, no cloud dep |
| Failure class | Evidence | Route to |
|---|---|---|
| Merged / page-span tables | issues #2756, #2790 (hallucinated columns) | Chandra 2 · Azure DI · MinerU |
| Handwriting | #2395 near-total fail; EasyOCR ~64% | Chandra 2 · Azure DI · Textract |
| Scanned (high-accuracy) | OCR layer < dedicated APIs | Mistral OCR 4 · Azure DI |
| LaTeX formulas (complex) | <70% BLEU | MinerU (>90%) · Mistral OCR |
| Multi-column · compliance | #2067 · no SOC2/HIPAA certs | LlamaParse · Azure DI |
Benchmark honesty: OmniDocBench — MinerU2.5-Pro 95.75, Mistral OCR 85.66, Marker 78.44; Docling composite = UNKNOWN (unretrievable — flagged, not guessed; opendataloader-bench alt 0.877). MinerU is stronger but AGPL-3.0 → rejected as an engine in the client product. And OmniDocBench is saturated for clean PDFs → the real-corpus benchmark is the gate, not a leaderboard.
| Engine | Cost/1k pp | Accuracy on hard docs | Privacy | Note |
|---|---|---|---|---|
| Docling (self-host) | ~$0–1 | Moderate — fails hard classes | Full local | the default |
| Chandra 2 (self-host) | ~$0–1 | High — multilingual/forms/HW | Full local | primary escalation, Apache-2.0 |
| Mistral OCR 4 (batch) | $2 | Good (OmniDoc 85.7) | API | zero-ops fallback |
| Azure DI (Layout) | $10 | High + compliance | API (BAA) | compliance path |
| MinerU 2.5 | ~$0–1 | Best OSS (95.75) | Full local | AGPL — internal only |
| LlamaParse Agentic+ | $56 | High (GPT-4V/page) | API | expensive |
Open items to route: (a) confirm Viska corpus composition — born-digital vs scanned %, table/handwriting density — drives how heavy the escalation tier must be; (b) GPU on the ops box (only needed for VlmPipeline or self-host Chandra 2 at volume). Feeds the pending viska-n8n + pantheon-ops per-use-case evals.