v3.9.1 — Surya OCR 2 follow-up: layout + table-rec tests + DPI fix + usage docs Patch release. No production code changes — the llamacpp/ wrapper, model registries, compose services, LiteLLM provider configs, and resource_manager wiring are byte-identical to v3.9.0. Tests: 8 → 12 cases. New `layout` + `table_rec` test functions per variant now exercise the two Surya prompt modes v3.9.0 shipped support for but did not test. _llamacpp_ocr_call grew a task=block|page| layout|table_rec dispatcher that selects the right verbatim Surya training-time prompt per task. New fixture: tests/.fixtures/table.pdf (A4, 3×3 bordered table). PDF rasterization DPI dropped from 200 to 96 — Surya's training-time default. ~4× CPU encode speedup with no accuracy loss on the synthetic fixtures (200 DPI inflates prompt-token count quadratically). Docs: full Surya usage section across README + docs/services- reference.md + docs/usage.md + docs/providers.md. Documents all 4 trained-in prompts verbatim, per-hardware throughput tables, the wrapper's http:// → data: URL rewrite, DPI sweet spot, and "which slug should I pick" workload picker. See CHANGELOG.md for the full breakdown.