uv-scripts/ocr
OCR UV Scripts Part of uv-scripts: self-contained UV scripts you run on Hugging Face Jobs in one command. One script per OCR model. Each script runs the model on a GPU with Hugging Face Jobs and writes the text as markdown: as a new column in a Hub dataset, as .md files in a Bucket, or as resumable parquet parts (the -saturate recipes). A few scripts return JSON from a schema, detect layout regions, or compare the output of two models. Quick Start First… See the full description on the dataset page: https://huggingface.co/datasets/uv-scripts/ocr.
1636.5k
1{2 "_meta": {3 "description": "Machine-readable catalog of the OCR recipes in this directory: script -> model, params, backend, support level, the tested Jobs launch config (the script's [tool.hf-jobs] header), and what the model's own card claims about language coverage. Human-readable language notes: LANGUAGES.md. Language evidence levels, strongest first: per-language-benchmark | count-claim | named-list | multilingual-unspecified | english-only | not-stated | not-applicable. Claims come from model cards (compiled 2026-07-15) - treat as claims, not guarantees.",4 "updated": "2026-09-24",5 "run_pattern": "hf jobs uv run https://huggingface.co/datasets/uv-scripts/ocr/raw/main/<script> <input-dataset> <output-dataset> (hf CLI >= 1.32 reads image/flavor/secrets from the script's [tool.hf-jobs] header; add --timeout for long runs. Scripts without a `jobs` entry need --flavor/-s HF_TOKEN (and any --image in their docstring).)",6 "support_levels": {7 "core": "Maintained. Smoke-tested flagless on HF Jobs on 2026-09-23/24 with the pinned launch config in `jobs`.",8 "tool": "Maintained companion (judge, layout, text extraction), not a page-OCR recipe.",9 "legacy": "Works (smoke-tested 2026-09-23) but superseded or little used; no header yet. See support_note for the alternative.",10 "unsupported": "Known broken as of 2026-09-23; kept in the repo for now. See support_note."11 }12 },13 "tesseract-ocr.py": {14 "model_id": null,15 "model_name": "Tesseract 5",16 "params": null,17 "backend": "pytesseract (CPU)",18 "task": "ocr",19 "output": "plain text",20 "license": "apache-2.0",21 "languages": {22 "evidence": "named-list",23 "count": "125 traineddata packs (~100+ languages + script models)",24 "list_url": "https://github.com/tesseract-ocr/tessdata_best",25 "notes": "Broadest named coverage; script models (Latin, Cyrillic, Devanagari, ...) cover languages without a dedicated pack. Legacy baseline quality."26 },27 "support": "core",28 "jobs": {29 "flavor": "cpu-upgrade",30 "secrets": [31 "HF_TOKEN"32 ]33 }34 },35 "pp-ocrv6.py": {36 "model_id": "PaddlePaddle/PP-OCRv6",37 "params": "1.5M-34.5M",38 "backend": "paddleocr",39 "task": "ocr",40 "output": "plain text",41 "license": "apache-2.0",42 "languages": {43 "evidence": "count-claim",44 "count": 4845 },46 "support": "core",47 "jobs": {48 "flavor": "t4-small",49 "secrets": [50 "HF_TOKEN"51 ]52 }53 },54 "falcon-ocr.py": {55 "model_id": "tiiuae/Falcon-OCR",56 "params": "0.3B",57 "backend": "falcon-perception",58 "task": "ocr",59 "output": "markdown",60 "license": "apache-2.0",61 "languages": {62 "evidence": "not-stated"63 },64 "support": "legacy",65 "support_note": "Falcon-OCR v1; v1.5 work is in PR #110."66 },67 "smoldocling-ocr.py": {68 "model_id": "ds4sd/SmolDocling-256M-preview",69 "params": "256M",70 "backend": "transformers",71 "task": "ocr",72 "output": "DocTags",73 "languages": {74 "evidence": "english-only"75 },76 "support": "unsupported",77 "support_note": "Broken (2026-09-23): the DocTags-to-markdown converter is a stub, so rows are raw DocTags."78 },79 "surya-ocr.py": {80 "model_id": "datalab-to/surya-ocr-2",81 "params": "0.65B",82 "backend": "vllm",83 "image": "vllm/vllm-openai:v0.20.1",84 "task": "ocr | layout | table",85 "output": "markdown + surya_blocks (per-block HTML, bboxes, reading order)",86 "license": "modified OpenRAIL-M",87 "languages": {88 "evidence": "per-language-benchmark",89 "count": 91,90 "benchmark_url": "https://github.com/datalab-to/surya/blob/master/static/docs/multilingual.md",91 "notes": "38/91 languages score >=90%, 76/91 >=80%; weakest of top-15: Arabic 72.7%, Vietnamese 73.2%."92 },93 "support": "core",94 "jobs": {95 "image": "vllm/vllm-openai:v0.20.1",96 "python": "/usr/local/bin/python3",97 "env": {98 "PYTHONPATH": "/usr/local/lib/python3.12/site-packages"99 },100 "flavor": "a10g-small",101 "secrets": [102 "HF_TOKEN"103 ]104 }105 },106 "glm-ocr.py": {107 "model_id": "zai-org/GLM-OCR",108 "params": "0.9B",109 "backend": "vllm",110 "task": "ocr",111 "output": "markdown",112 "languages": {113 "evidence": "named-list",114 "count": 8,115 "named": [116 "zh",117 "en",118 "fr",119 "es",120 "ru",121 "de",122 "ja",123 "ko"124 ],125 "notes": "Declared in card metadata only; no per-language evidence in the card body."126 },127 "support": "core",128 "jobs": {129 "image": "vllm/vllm-openai:v0.29.0",130 "python": "/usr/bin/python3",131 "env": {132 "PYTHONPATH": "/usr/local/lib/python3.12/dist-packages"133 },134 "flavor": "a10g-small",135 "secrets": [136 "HF_TOKEN"137 ]138 },139 "image": "vllm/vllm-openai:v0.29.0"140 },141 "paddleocr-vl.py": {142 "model_id": "PaddlePaddle/PaddleOCR-VL",143 "params": "0.9B",144 "backend": "vllm",145 "task": "ocr | table | formula | chart",146 "output": "markdown",147 "languages": {148 "evidence": "count-claim",149 "count": 109,150 "notes": "Names scripts (Cyrillic, Arabic, Devanagari, Thai); claims handwriting + historical documents; no per-language numbers."151 },152 "support": "legacy",153 "support_note": "PaddleOCR-VL 1.0; use paddleocr-vl-1.6.py."154 },155 "paddleocr-vl-1.5.py": {156 "model_id": "PaddlePaddle/PaddleOCR-VL-1.5",157 "params": "0.9B",158 "backend": "transformers",159 "task": "ocr (6 modes)",160 "output": "markdown",161 "languages": {162 "evidence": "count-claim",163 "count": "109+ (adds Tibetan, Bengali)",164 "notes": "Claims improved rare-character and ancient-text recognition."165 },166 "support": "unsupported",167 "support_note": "Broken (2026-09-23): every row is an [OCR ERROR] ('min_pixels' attribute removed in transformers 5). Use paddleocr-vl-1.6.py."168 },169 "paddleocr-vl-1.6.py": {170 "model_id": "PaddlePaddle/PaddleOCR-VL-1.6",171 "params": "0.9B",172 "backend": "vllm",173 "task": "ocr",174 "output": "markdown",175 "languages": {176 "evidence": "count-claim",177 "count": "109+ (inherited from 1.5, not restated)",178 "notes": "Upgrade-focused card; language-specific claims are Chinese ancient documents and rare characters."179 },180 "support": "core",181 "jobs": {182 "image": "vllm/vllm-openai:v0.29.0",183 "python": "/usr/bin/python3",184 "env": {185 "PYTHONPATH": "/usr/local/lib/python3.12/dist-packages"186 },187 "flavor": "a10g-small",188 "secrets": [189 "HF_TOKEN"190 ]191 },192 "image": "vllm/vllm-openai:v0.29.0"193 },194 "ovis-ocr2.py": {195 "model_id": "ATH-MaaS/OvisOCR2",196 "params": "0.9B",197 "backend": "vllm",198 "task": "ocr",199 "output": "markdown + LaTeX + HTML tables",200 "license": "apache-2.0",201 "languages": {202 "evidence": "not-stated"203 },204 "support": "core",205 "jobs": {206 "image": "vllm/vllm-openai:v0.29.0",207 "python": "/usr/bin/python3",208 "env": {209 "PYTHONPATH": "/usr/local/lib/python3.12/dist-packages"210 },211 "flavor": "a10g-small",212 "secrets": [213 "HF_TOKEN"214 ]215 },216 "image": "vllm/vllm-openai:v0.29.0"217 },218 "ovis-ocr2-server.py": {219 "model_id": "ATH-MaaS/OvisOCR2",220 "params": "0.9B",221 "backend": "vllm-server (in-job vllm serve + concurrent driver)",222 "image": "vllm/vllm-openai:v0.22.1",223 "task": "ocr",224 "output": "markdown + LaTeX + HTML tables",225 "license": "apache-2.0",226 "notes": "Server-mode sibling of ovis-ocr2.py: ~1.7x its inference throughput, per-request failure isolation. See SERVING.md.",227 "languages": {228 "evidence": "not-stated"229 },230 "support": "legacy",231 "support_note": "Use ovis-ocr2-saturate.py (same model and server, adaptive concurrency, resumable)."232 },233 "ovis-ocr2-saturate.py": {234 "model_id": "ATH-MaaS/OvisOCR2",235 "params": "0.9B",236 "backend": "saturate (in-job vllm serve + saturate pump)",237 "image": "vllm/vllm-openai:v0.22.1",238 "task": "ocr",239 "output": "markdown + LaTeX + HTML tables",240 "license": "apache-2.0",241 "notes": "saturate companion of ovis-ocr2-server.py: same model/prompt/sampling/post-processing; the driver half (adaptive concurrency, retries, resumable parquet output, durable error rows) is the saturate library. SERVING dict at the top of the script is the machine-readable tuning prior.",242 "languages": {243 "evidence": "not-stated"244 },245 "support": "core",246 "jobs": {247 "image": "vllm/vllm-openai:v0.22.1",248 "flavor": "a10g-small",249 "secrets": [250 "HF_TOKEN"251 ]252 }253 },254 "lighton-ocr.py": {255 "model_id": "lightonai/LightOnOCR-1B-1025",256 "params": "1B",257 "backend": "vllm",258 "task": "ocr",259 "output": "markdown",260 "languages": {261 "evidence": "named-list",262 "count": 9,263 "named": [264 "en",265 "fr",266 "de",267 "es",268 "it",269 "nl",270 "pt",271 "sv",272 "da"273 ],274 "notes": "Explicitly European / Latin-alphabet focused."275 },276 "support": "legacy",277 "support_note": "LightOnOCR v1; use lighton-ocr2.py."278 },279 "lighton-ocr2.py": {280 "model_id": "lightonai/LightOnOCR-2-1B",281 "params": "1B",282 "backend": "vllm",283 "task": "ocr",284 "output": "markdown",285 "languages": {286 "evidence": "named-list",287 "count": 11,288 "named": [289 "en",290 "fr",291 "de",292 "es",293 "it",294 "nl",295 "pt",296 "sv",297 "da",298 "zh",299 "ja"300 ],301 "notes": "Adds zh/ja over v1; declared, not benchmarked per language."302 },303 "support": "core",304 "jobs": {305 "image": "vllm/vllm-openai:v0.22.1",306 "python": "/usr/bin/python3",307 "env": {308 "PYTHONPATH": "/usr/local/lib/python3.12/dist-packages"309 },310 "flavor": "a10g-small",311 "secrets": [312 "HF_TOKEN"313 ]314 },315 "image": "vllm/vllm-openai:v0.22.1"316 },317 "lighton-ocr2-server.py": {318 "model_id": "lightonai/LightOnOCR-2-1B",319 "params": "1B",320 "backend": "vllm-server (in-job vllm serve + concurrent driver)",321 "image": "vllm/vllm-openai:v0.22.1",322 "task": "ocr",323 "output": "markdown",324 "notes": "Server-mode sibling of lighton-ocr2.py (the model card's own documented path): ~1.8x its inference throughput. See SERVING.md.",325 "languages": {326 "evidence": "named-list",327 "count": 11,328 "named": [329 "en",330 "fr",331 "de",332 "es",333 "it",334 "nl",335 "pt",336 "sv",337 "da",338 "zh",339 "ja"340 ],341 "notes": "Adds zh/ja over v1; declared, not benchmarked per language."342 },343 "support": "legacy",344 "support_note": "Use lighton-ocr2-saturate.py (same model and server, adaptive concurrency, resumable)."345 },346 "lighton-ocr2-saturate.py": {347 "model_id": "lightonai/LightOnOCR-2-1B",348 "params": "1B",349 "backend": "saturate (in-job vllm serve + saturate pump)",350 "image": "vllm/vllm-openai:v0.22.1",351 "task": "ocr",352 "output": "markdown",353 "notes": "saturate companion of lighton-ocr2-server.py: same model/message shape/sampling; the driver half (adaptive concurrency, retries, resumable parquet output, durable error rows) is the saturate library. SERVING dict at the top of the script is the machine-readable tuning prior.",354 "languages": {355 "evidence": "named-list",356 "count": 11,357 "named": [358 "en",359 "fr",360 "de",361 "es",362 "it",363 "nl",364 "pt",365 "sv",366 "da",367 "zh",368 "ja"369 ],370 "notes": "Adds zh/ja over v1; declared, not benchmarked per language."371 },372 "support": "core",373 "jobs": {374 "image": "vllm/vllm-openai:v0.22.1",375 "flavor": "a10g-small",376 "secrets": [377 "HF_TOKEN"378 ]379 }380 },381 "hunyuan-ocr.py": {382 "model_id": "tencent/HunyuanOCR",383 "revision": "f6af82ee007fe6091b29fb3bb287b491ead41c82",384 "params": "1B",385 "backend": "vllm",386 "task": "ocr",387 "output": "markdown",388 "license": "Hunyuan Community License (excludes EU/UK/KR)",389 "languages": {390 "evidence": "multilingual-unspecified"391 },392 "support": "unsupported",393 "support_note": "Broken (2026-09-23): the pinned 1.0 revision fails on current vLLM/transformers. Use hunyuan-ocr-1.5.py."394 },395 "hunyuan-ocr-1.5.py": {396 "model_id": "tencent/HunyuanOCR",397 "params": "1B",398 "backend": "vllm",399 "task": "ocr | 12 task types",400 "output": "markdown",401 "license": "Hunyuan Community License (excludes EU/UK/KR)",402 "languages": {403 "evidence": "multilingual-unspecified",404 "notes": "Explicitly targets low-resource + ancient-script OCR as a design goal; nothing enumerated."405 },406 "support": "core",407 "jobs": {408 "image": "vllm/vllm-openai:v0.24.0",409 "python": "/usr/bin/python3",410 "env": {411 "PYTHONPATH": "/usr/local/lib/python3.12/dist-packages"412 },413 "flavor": "a10g-small",414 "secrets": [415 "HF_TOKEN"416 ]417 },418 "image": "vllm/vllm-openai:v0.24.0"419 },420 "dots-ocr.py": {421 "model_id": "rednote-hilab/dots.ocr",422 "params": "1.7B",423 "backend": "vllm",424 "task": "ocr + layout",425 "output": "markdown",426 "languages": {427 "evidence": "count-claim",428 "count": 100,429 "notes": "Explicit low-resource claim backed by in-house dots.ocr-bench (1,493 PDFs across 100 languages); aggregate scores only."430 },431 "support": "core",432 "jobs": {433 "image": "vllm/vllm-openai:v0.29.0",434 "python": "/usr/bin/python3",435 "env": {436 "PYTHONPATH": "/usr/local/lib/python3.12/dist-packages"437 },438 "flavor": "a10g-small",439 "secrets": [440 "HF_TOKEN"441 ]442 },443 "image": "vllm/vllm-openai:v0.29.0"444 },445 "firered-ocr.py": {446 "model_id": "FireRedTeam/FireRed-OCR",447 "params": "2.1B",448 "backend": "vllm",449 "task": "ocr",450 "output": "markdown",451 "license": "apache-2.0",452 "languages": {453 "evidence": "not-stated"454 },455 "support": "legacy",456 "support_note": "Works; low adoption."457 },458 "abot-ocr.py": {459 "model_id": "acvlab/ABot-OCR",460 "params": "2B",461 "backend": "vllm",462 "image": "vllm/vllm-openai",463 "task": "ocr",464 "output": "markdown (text, LaTeX, HTML tables)",465 "languages": {466 "evidence": "not-stated"467 },468 "support": "legacy",469 "support_note": "Works; low adoption and no declared model licence."470 },471 "nanonets-ocr.py": {472 "model_id": "nanonets/Nanonets-OCR-s",473 "params": "2B",474 "backend": "vllm",475 "task": "ocr",476 "output": "markdown (LaTeX, tables, forms)",477 "languages": {478 "evidence": "english-only"479 },480 "support": "legacy",481 "support_note": "Nanonets-OCR-s; use nanonets-ocr2.py."482 },483 "dots-mocr.py": {484 "model_id": "rednote-hilab/dots.mocr",485 "params": "3B",486 "backend": "vllm",487 "task": "ocr | 8 prompt modes incl. SVG, layout + bbox",488 "output": "markdown",489 "languages": {490 "evidence": "multilingual-unspecified"491 },492 "support": "core",493 "jobs": {494 "image": "vllm/vllm-openai:v0.29.0",495 "python": "/usr/bin/python3",496 "env": {497 "PYTHONPATH": "/usr/local/lib/python3.12/dist-packages"498 },499 "flavor": "a10g-small",500 "secrets": [501 "HF_TOKEN"502 ]503 },504 "image": "vllm/vllm-openai:v0.29.0"505 },506 "nanonets-ocr2.py": {507 "model_id": "nanonets/Nanonets-OCR2-3B",508 "params": "3B",509 "backend": "vllm",510 "image": "vllm/vllm-openai:v0.10.2",511 "task": "ocr",512 "output": "markdown",513 "languages": {514 "evidence": "named-list",515 "count": "11 named + 'many more'",516 "named": [517 "en",518 "zh",519 "fr",520 "es",521 "pt",522 "de",523 "it",524 "ru",525 "ja",526 "ko",527 "ar"528 ],529 "notes": "Only card claiming multilingual handwriting; list illustrative, no per-language benchmark."530 },531 "support": "legacy",532 "support_note": "Works on its pinned vllm/vllm-openai:v0.10.2 image; not header-migrated."533 },534 "deepseek-ocr-vllm.py": {535 "model_id": "deepseek-ai/DeepSeek-OCR",536 "params": "4B",537 "backend": "vllm",538 "task": "ocr | 5 resolution + 5 prompt modes",539 "output": "markdown",540 "license": "mit",541 "languages": {542 "evidence": "multilingual-unspecified"543 },544 "support": "core",545 "jobs": {546 "image": "vllm/vllm-openai:v0.29.0",547 "python": "/usr/bin/python3",548 "env": {549 "PYTHONPATH": "/usr/local/lib/python3.12/dist-packages"550 },551 "flavor": "a10g-small",552 "secrets": [553 "HF_TOKEN"554 ]555 },556 "image": "vllm/vllm-openai:v0.29.0"557 },558 "jina-ocr-v1.py": {559 "model_id": "jinaai/jina-ocr-v1",560 "model_name": "jina-ocr-v1",561 "params": "3.4B (MoE, ~570M active)",562 "backend": "vllm",563 "task": "ocr",564 "output": "markdown",565 "license": "cc-by-nc-4.0",566 "notes": "DeepSeek-OCR fine-tune with a FastMTP speculative-decoding head; offline vLLM only (the checkpoint's register() must run in-process, no vllm serve path yet). Card: 91.14 OmniDocBench v1.6, 83.4 olmOCR-Bench.",567 "languages": {568 "evidence": "multilingual-unspecified",569 "notes": "Card metadata says multilingual; no per-language list or evidence in the card body."570 },571 "support": "unsupported",572 "support_note": "Broken (2026-09-23): vLLM 0.30 DeepEncoder kernel error; pinning vllm/vllm-openai:v0.29.0 likely fixes it (as for deepseek-ocr-vllm.py). CC-BY-NC-4.0 model.",573 "jobs": {574 "flavor": "a10g-small",575 "secrets": [576 "HF_TOKEN"577 ],578 "env": {579 "UV_TORCH_BACKEND": "auto"580 }581 }582 },583 "deepseek-ocr.py": {584 "model_id": "deepseek-ai/DeepSeek-OCR",585 "params": "4B",586 "backend": "transformers",587 "task": "ocr",588 "output": "markdown",589 "license": "mit",590 "languages": {591 "evidence": "multilingual-unspecified"592 },593 "support": "unsupported",594 "support_note": "Broken (2026-09-23): every output row is the string 'None' (model.infer returns None). Use deepseek-ocr-vllm.py."595 },596 "deepseek-ocr2-vllm.py": {597 "model_id": "deepseek-ai/DeepSeek-OCR-2",598 "params": "3B",599 "backend": "vllm (nightly)",600 "image": "vllm/vllm-openai:v0.29.0",601 "task": "ocr",602 "output": "markdown",603 "license": "apache-2.0",604 "languages": {605 "evidence": "multilingual-unspecified"606 },607 "support": "core",608 "jobs": {609 "image": "vllm/vllm-openai:v0.29.0",610 "python": "/usr/bin/python3",611 "env": {612 "PYTHONPATH": "/usr/local/lib/python3.12/dist-packages"613 },614 "flavor": "a10g-small",615 "secrets": [616 "HF_TOKEN"617 ]618 }619 },620 "unlimited-ocr-vllm.py": {621 "model_id": "baidu/Unlimited-OCR",622 "params": "3.3B",623 "backend": "vllm",624 "image": "vllm/vllm-openai:unlimited-ocr",625 "task": "ocr (layout-grounded markdown; single-image batch)",626 "output": "markdown",627 "license": "mit",628 "languages": {629 "evidence": "multilingual-unspecified"630 },631 "support": "core",632 "jobs": {633 "image": "vllm/vllm-openai:unlimited-ocr",634 "python": "/usr/bin/python3",635 "env": {636 "PYTHONPATH": "/usr/local/lib/python3.12/dist-packages"637 },638 "flavor": "a10g-small",639 "secrets": [640 "HF_TOKEN"641 ]642 }643 },644 "nuextract3.py": {645 "model_id": "numind/NuExtract3",646 "params": "4B",647 "backend": "vllm",648 "image": "vllm/vllm-openai:v0.29.0",649 "task": "ocr | schema-guided extraction",650 "output": "markdown or JSON",651 "languages": {652 "evidence": "multilingual-unspecified"653 },654 "support": "core",655 "jobs": {656 "image": "vllm/vllm-openai:v0.29.0",657 "python": "/usr/bin/python3",658 "env": {659 "PYTHONPATH": "/usr/local/lib/python3.12/dist-packages"660 },661 "flavor": "a10g-small",662 "secrets": [663 "HF_TOKEN"664 ]665 }666 },667 "qianfan-ocr.py": {668 "model_id": "baidu/Qianfan-OCR",669 "params": "4.7B",670 "backend": "vllm",671 "task": "ocr",672 "output": "markdown",673 "languages": {674 "evidence": "count-claim",675 "count": 192,676 "notes": "Headline claim; no list or per-language numbers."677 },678 "support": "core",679 "jobs": {680 "image": "vllm/vllm-openai:v0.29.0",681 "python": "/usr/bin/python3",682 "env": {683 "PYTHONPATH": "/usr/local/lib/python3.12/dist-packages"684 },685 "flavor": "a10g-small",686 "secrets": [687 "HF_TOKEN"688 ]689 },690 "image": "vllm/vllm-openai:v0.29.0"691 },692 "olmocr2-vllm.py": {693 "model_id": "allenai/olmOCR-2-7B-1025-FP8",694 "params": "7B",695 "backend": "vllm",696 "task": "ocr",697 "output": "markdown",698 "languages": {699 "evidence": "english-only"700 },701 "support": "core",702 "jobs": {703 "image": "vllm/vllm-openai:v0.29.0",704 "python": "/usr/bin/python3",705 "env": {706 "PYTHONPATH": "/usr/local/lib/python3.12/dist-packages"707 },708 "flavor": "a10g-small",709 "secrets": [710 "HF_TOKEN"711 ]712 },713 "image": "vllm/vllm-openai:v0.29.0"714 },715 "rolm-ocr.py": {716 "model_id": "reducto/RolmOCR",717 "params": "7B",718 "backend": "vllm",719 "task": "ocr",720 "output": "plain text",721 "languages": {722 "evidence": "not-stated"723 },724 "support": "unsupported",725 "support_note": "Broken (2026-09-23): no KV cache room on a 24 GB L4 with the default settings. Use olmocr2-vllm.py."726 },727 "numarkdown-ocr.py": {728 "model_id": "numind/NuMarkdown-8B-Thinking",729 "params": "8B",730 "backend": "vllm",731 "task": "ocr (reasoning)",732 "output": "markdown",733 "languages": {734 "evidence": "not-stated"735 },736 "support": "legacy",737 "support_note": "8B reasoning model; works, little used."738 },739 "lfm2-vl-extract.py": {740 "model_id": "LiquidAI/LFM2.5-VL-1.6B-Extract",741 "params": "1.6B",742 "backend": "vllm",743 "image": "vllm/vllm-openai",744 "task": "schema-guided extraction (image -> JSON)",745 "output": "JSON",746 "languages": {747 "evidence": "english-only",748 "notes": "Vision card declares en only; the text sibling's 9-language list does NOT carry over."749 },750 "support": "legacy",751 "support_note": "Works; nuextract3.py and lift-extract.py cover image-to-JSON extraction."752 },753 "lfm2-extract.py": {754 "model_id": "LiquidAI/LFM2-1.2B-Extract",755 "params": "1.2B",756 "backend": "vllm",757 "image": "vllm/vllm-openai:v0.29.0",758 "task": "schema-guided extraction (text -> structured); chain after any OCR recipe",759 "output": "JSON / XML / YAML",760 "languages": {761 "evidence": "named-list",762 "count": 9,763 "named": [764 "en",765 "ar",766 "zh",767 "fr",768 "de",769 "ja",770 "ko",771 "pt",772 "es"773 ],774 "notes": "Text-only model (not OCR). Card prose names 9 incl. Portuguese; card YAML lists 8 (pt missing)."775 },776 "support": "tool",777 "jobs": {778 "image": "vllm/vllm-openai:v0.29.0",779 "python": "/usr/bin/python3",780 "env": {781 "PYTHONPATH": "/usr/local/lib/python3.12/dist-packages"782 },783 "flavor": "a10g-small",784 "secrets": [785 "HF_TOKEN"786 ]787 }788 },789 "lift-extract.py": {790 "model_id": "datalab-to/lift",791 "params": "9B",792 "backend": "transformers | vllm",793 "task": "schema-guided extraction (image or multi-page PDF -> JSON)",794 "output": "JSON",795 "license": "modified OpenRAIL-M",796 "languages": {797 "evidence": "not-stated"798 },799 "support": "core",800 "jobs": {801 "flavor": "a100-large",802 "secrets": [803 "HF_TOKEN"804 ]805 }806 },807 "pp-doclayout.py": {808 "model_id": "PaddlePaddle/PP-DocLayout-L",809 "params": "123M",810 "backend": "paddleocr",811 "task": "layout detection (no text extraction)",812 "output": "bounding boxes + region classes",813 "languages": {814 "evidence": "not-applicable"815 },816 "support": "tool",817 "jobs": {818 "flavor": "t4-small",819 "secrets": [820 "HF_TOKEN"821 ]822 }823 },824 "glm-ocr-v2.py": {825 "variant_of": "glm-ocr.py",826 "notes": "Adds checkpoint/resume for very large jobs.",827 "support": "legacy",828 "support_note": "Superseded by glm-ocr.py for most runs; kept for its resume support."829 },830 "glm-ocr-bucket.py": {831 "variant_of": "glm-ocr.py",832 "notes": "Reads images/PDFs from a mounted bucket, writes one .md per page.",833 "support": "core",834 "jobs": {835 "image": "vllm/vllm-openai:v0.29.0",836 "python": "/usr/bin/python3",837 "env": {838 "PYTHONPATH": "/usr/local/lib/python3.12/dist-packages"839 },840 "flavor": "a10g-small",841 "secrets": [842 "HF_TOKEN"843 ]844 },845 "image": "vllm/vllm-openai:v0.29.0"846 },847 "falcon-ocr-bucket.py": {848 "variant_of": "falcon-ocr.py",849 "notes": "Reads images/PDFs from a mounted bucket, writes one .md per page.",850 "support": "legacy",851 "support_note": "Falcon-OCR v1; v1.5 work is in PR #110. --max-samples counts files, not pages."852 },853 "surya-ocr-bucket.py": {854 "variant_of": "surya-ocr.py",855 "notes": "Bucket-to-bucket structured OCR (--io-mode mount|copy), resumable.",856 "support": "core",857 "jobs": {858 "image": "vllm/vllm-openai:v0.20.1",859 "python": "/usr/local/bin/python3",860 "env": {861 "PYTHONPATH": "/usr/local/lib/python3.12/site-packages"862 },863 "flavor": "a10g-small",864 "secrets": [865 "HF_TOKEN"866 ]867 },868 "image": "vllm/vllm-openai:v0.20.1"869 },870 "ocr-vllm-judge.py": {871 "model_id": "configurable",872 "task": "pairwise OCR-quality judging (VLM-as-judge)",873 "languages": {874 "evidence": "not-applicable"875 },876 "support": "tool",877 "jobs": {878 "image": "vllm/vllm-openai:v0.29.0",879 "python": "/usr/bin/python3",880 "env": {881 "PYTHONPATH": "/usr/local/lib/python3.12/dist-packages"882 },883 "flavor": "a100-large",884 "secrets": [885 "HF_TOKEN"886 ]887 },888 "image": "vllm/vllm-openai:v0.29.0"889 }890}891 