From 7471d2f38dfd1b5040a4de1e4f4ea80c74d60164 Mon Sep 17 00:00:00 2001 From: Daniel van Strien Date: Fri, 26 Jun 2026 15:42:43 +0100 Subject: [PATCH] Add PaddleOCR-VL-1.5 to the model registry MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit 1.5 uses transformers batch inference (no vLLM/flashinfer), so it runs on the default uv-script image on l4x1 — no image-mode config needed, unlike 1.6. Co-Authored-By: Claude Opus 4.8 (1M context) --- src/ocr_bench/run.py | 8 ++++++++ tests/test_run.py | 11 ++++++++++- 2 files changed, 18 insertions(+), 1 deletion(-) diff --git a/src/ocr_bench/run.py b/src/ocr_bench/run.py index 7573422..c03f668 100644 --- a/src/ocr_bench/run.py +++ b/src/ocr_bench/run.py @@ -87,6 +87,14 @@ class ModelConfig: size="3B", default_flavor="l4x1", ), + # PaddleOCR-VL-1.5 uses transformers batch inference (no vLLM/flashinfer), so it + # runs on the default uv-script image — unlike 1.6, which needs the prebuilt image. + "paddleocr-vl-1.5": ModelConfig( + script="https://huggingface.co/datasets/uv-scripts/ocr/raw/main/paddleocr-vl-1.5.py", + model_id="PaddlePaddle/PaddleOCR-VL-1.5", + size="0.9B", + default_flavor="l4x1", + ), # Image-mode models (Qwen3.5 / flashinfer) — need the vllm/vllm-openai image. "nuextract3": ModelConfig( script="https://huggingface.co/datasets/uv-scripts/ocr/raw/main/nuextract3.py", diff --git a/tests/test_run.py b/tests/test_run.py index efc5566..82735c3 100644 --- a/tests/test_run.py +++ b/tests/test_run.py @@ -48,7 +48,7 @@ def test_image_mode_fields_default_none(self): class TestModelRegistry: def test_has_core_models(self): - assert len(MODEL_REGISTRY) == 9 + assert len(MODEL_REGISTRY) == 10 def test_default_models_exist_in_registry(self): for slug in DEFAULT_MODELS: @@ -80,6 +80,15 @@ def test_image_mode_models_not_in_defaults(self): assert "nuextract3" not in DEFAULT_MODELS assert "paddleocr-vl-1.6" not in DEFAULT_MODELS + def test_paddleocr_vl_15_is_standard(self): + # 1.5 uses transformers batch inference (no vLLM/flashinfer), so it runs on + # the default uv-script image — unlike 1.6, it needs no image-mode config. + cfg = MODEL_REGISTRY["paddleocr-vl-1.5"] + assert cfg.default_flavor == "l4x1" + assert cfg.image is None + assert cfg.python is None + assert cfg.env is None + class TestListModels: def test_returns_sorted_slugs(self):