Team Ai
Datasetpublic

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.

sourceHugging Faceupdated 11d agoView on Hugging Face
163likes6.5kdownloads
models.json891 linesDownload Raw Back to root
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