Hermes · Adoption Review · issue #86

Docling: adopt as the default, escalate on the hard docs.

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.

Method research-orchestrate · 5 Sonnet lanes Sources primary-verified, dated Repo research/docling-adoption-review-2026-07-01/ Date 2026-07-01
✅ ADOPT
Default ingestion workhorse + a mandatory escalation tier

Docling for born-digital PDFs / Office / HTML → clean Markdown/JSON/chunks. Not a monolith — route the hard classes (handwriting, complex tables, formulas, scanned) to a specialist. Conditioned on standing up the escalation tier and benchmarking on the real Viska corpus, because Docling's own leaderboard score is unretrievable.

TL;DR

Six bullets

01

The four green lights

Identity & License  PASS

ComponentLicenseNotes
docling core · docling-parse · ibm-models (code)MITIBM copyright
granite-docling-258M weights (current VLM)Apache-2.0redistribution-safe
SmolDocling weights (superseded)CDLA-Permissive-2.0avoid — 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.

Capabilities · Architecture · Footprint

AxisWhat
Inputs20+: PDF (digital+scanned), DOCX/PPTX/XLSX, HTML, MD, images, audio/video (ASR), email, XBRL/JATS/USPTO XML
OutputsMarkdown · lossless JSON (DoclingDocument) · DocTags · HTML
Enginelayout (RT-DETR) · TableFormer · reading-order · formula/code · 9 pluggable OCR engines · Granite-Docling VLM · HybridChunker for RAG
Perfx86 CPU ~3.1s/pg median · M3 Max ~0.32s · L4 GPU ~0.11s · RAM ~2.4 GB · offline, no cloud dep
02

The catch — where Docling loses

Escalation-tier triggers (route these away from Docling)
Failure classEvidenceRoute to
Merged / page-span tablesissues #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 APIsMistral OCR 4 · Azure DI
LaTeX formulas (complex)<70% BLEUMinerU (>90%) · Mistral OCR
Multi-column · compliance#2067 · no SOC2/HIPAA certsLlamaParse · 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.

03

Cost · per 1,000 pages

EngineCost/1k ppAccuracy on hard docsPrivacyNote
Docling (self-host)~$0–1Moderate — fails hard classesFull localthe default
Chandra 2 (self-host)~$0–1High — multilingual/forms/HWFull localprimary escalation, Apache-2.0
Mistral OCR 4 (batch)$2Good (OmniDoc 85.7)APIzero-ops fallback
Azure DI (Layout)$10High + complianceAPI (BAA)compliance path
MinerU 2.5~$0–1Best OSS (95.75)Full localAGPL — internal only
LlamaParse Agentic+$56High (GPT-4V/page)APIexpensive
04

Adopt-path

PHASE 0
Stand up
docling-serve-cpu Docker + n8n HTTP → /v1/convert/source. Smoke on 10–20 real Viska docs.
~½ day
PHASE 1
RAG wiring
HybridChunker (tokenizer = our embedding model) → vector store. Keep md+json lossless.
~1 day
PHASE 2
Escalation tier
Route failure classes → Chandra 2 (self-host) primary, Mistral OCR batch fallback.
1–2 days
PHASE 3 · GATE
Real-corpus benchmark
Docling vs specialist on labeled Viska slice. Scale-up rests on this, not leaderboards.
gate

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.