From 812af690cee5bc284686900baaf7a2f9bbea0812 Mon Sep 17 00:00:00 2001 From: Vik Paruchuri Date: Tue, 21 Oct 2025 10:40:19 -0400 Subject: [PATCH] Fix up repo --- README.md | 30 ++++++++++++++++++++---------- assets/benchmarks/bench.png | Bin 0 -> 31942 bytes chandra/settings.py | 2 +- pyproject.toml | 2 +- 4 files changed, 22 insertions(+), 12 deletions(-) create mode 100644 assets/benchmarks/bench.png diff --git a/README.md b/README.md index 5f85a44..9af3fe3 100644 --- a/README.md +++ b/README.md @@ -37,20 +37,16 @@ chandra_app ## Benchmarks -| **Model** | ArXiv | Old Scans Math | Tables | Old Scans | Headers and Footers | Multi column | Long tiny text | Base | Overall | -|:----------|:--------:|:--------------:|:--------:|:---------:|:-------------------:|:------------:|:--------------:|:--------:|:--------------:| -| Datalab Chandra v0.1.0 | 81.4 | **80.3** | **89.4** | **50.0** | 88.3 | **81.0** | **91.6** | **99.9** | **82.7 ± 0.9** | -| Datalab Marker v1.10.0 | **83.8** | 69.7 | 74.8 | 32.3 | 86.6 | 79.4 | 85.7 | 99.6 | 76.5 ± 1.0 | -| Mistral OCR API | 77.2 | 67.5 | 60.6 | 29.3 | 93.6 | 71.3 | 77.1 | 99.4 | 72.0 ± 1.1 | -| Deepseek OCR | 75.2 | 67.9 | 79.1 | 32.9 | 96.1 | 66.3 | 78.5 | 97.7 | 74.2 ± 1.0 | -| GPT-4o (Anchored) | 53.5 | 74.5 | 70.0 | 40.7 | 93.8 | 69.3 | 60.6 | 96.8 | 69.9 ± 1.1 | -| Gemini Flash 2 (Anchored) | 54.5 | 56.1 | 72.1 | 34.2 | 64.7 | 61.5 | 71.5 | 95.6 | 63.8 ± 1.2 | -| Qwen 3 VL | 70.2 | 75.1 | 45.6 | 37.5 | 89.1 | 62.1 | 43.0 | 94.3 | 64.6 ± 1.1 | -| olmOCR v0.3.0 | 78.6 | 79.9 | 72.9 | 43.9 | **95.1** | 77.3 | 81.2 | 98.9 | 78.5 ± 1.1 | +These are overall scores on the olmocr bench. + + +See full scores [below](#benchmark-table). ## Examples + + | Type | Name | Link | |------|------|------| | Tables | Water Damage Form | [View](https://github.com/datalab-to/chandra/blob/master/assets/examples/tables/water_damage.png) | @@ -156,6 +152,20 @@ VLLM_MODEL_NAME=chandra VLLM_GPUS=0 ``` +## Benchmark table + +| **Model** | ArXiv | Old Scans Math | Tables | Old Scans | Headers and Footers | Multi column | Long tiny text | Base | Overall | Source | +|:----------|:--------:|:--------------:|:--------:|:---------:|:-------------------:|:------------:|:--------------:|:----:|:--------------:|:------:| +| Datalab Chandra v0.1.0 | 82.2 | **80.3** | **88.0** | **50.4** | 90.8 | 81.2 | **92.3** | **99.9** | **83.1 ± 0.9** | Own benchmarks | +| Datalab Marker v1.10.0 | **83.8** | 69.7 | 74.8 | 32.3 | 86.6 | 79.4 | 85.7 | 99.6 | 76.5 ± 1.0 | Own benchmarks | +| Mistral OCR API | 77.2 | 67.5 | 60.6 | 29.3 | 93.6 | 71.3 | 77.1 | 99.4 | 72.0 ± 1.1 | olmocr repo | +| Deepseek OCR | 75.2 | 72.3 | 79.7 | 33.3 | 96.1 | 66.7 | 80.1 | 99.7 | 75.4 ± 1.0 | Own benchmarks | +| GPT-4o (Anchored) | 53.5 | 74.5 | 70.0 | 40.7 | 93.8 | 69.3 | 60.6 | 96.8 | 69.9 ± 1.1 | olmocr repo | +| Gemini Flash 2 (Anchored) | 54.5 | 56.1 | 72.1 | 34.2 | 64.7 | 61.5 | 71.5 | 95.6 | 63.8 ± 1.2 | olmocr repo | +| Qwen 3 VL | 70.2 | 75.1 | 45.6 | 37.5 | 89.1 | 62.1 | 43.0 | 94.3 | 64.6 ± 1.1 | Own benchmarks | +| olmOCR v0.3.0 | 78.6 | 79.9 | 72.9 | 43.9 | **95.1** | 77.3 | 81.2 | 98.9 | 78.5 ± 1.1 | olmocr repo | +| dots.ocr | 82.1 | 64.2 | 88.3 | 40.9 | 94.1 | **82.4** | 81.2 | 99.5 | 79.1 ± 1.0 | dots.ocr repo | + # Commercial usage This code is Apache 2.0, and our model weights use a modified OpenRAIL-M license (free for research, personal use, and startups under $2M funding/revenue, cannot be used competitively with our API). To remove the OpenRAIL license requirements, or for broader commercial licensing, visit our pricing page [here](https://www.datalab.to/pricing?utm_source=gh-chandra). diff --git a/assets/benchmarks/bench.png b/assets/benchmarks/bench.png new file mode 100644 index 0000000000000000000000000000000000000000..a3dd954e9092292609b0b7946f0f0a704ca75e98 GIT binary patch literal 31942 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 O4CW>_=mwNG{(k`FERq2L literal 0 HcmV?d00001 diff --git a/chandra/settings.py b/chandra/settings.py index a56947e..151472b 100644 --- a/chandra/settings.py +++ b/chandra/settings.py @@ -10,7 +10,7 @@ class Settings(BaseSettings): BASE_DIR: str = os.path.dirname(os.path.dirname(os.path.abspath(__file__))) IMAGE_DPI: int = 192 MIN_IMAGE_DIM: int = 1024 - MODEL_CHECKPOINT: str = "datalab-to/chandra-0.2.8" + MODEL_CHECKPOINT: str = "datalab-to/chandra" TORCH_DEVICE: str | None = None MAX_OUTPUT_TOKENS: int = 8192 TORCH_ATTN: str | None = None diff --git a/pyproject.toml b/pyproject.toml index e4ad486..2997e1a 100644 --- a/pyproject.toml +++ b/pyproject.toml @@ -1,6 +1,6 @@ [project] name = "chandra-ocr" -version = "0.1.0" +version = "0.1.1" description = "OCR model that converts documents to markdown, HTML, or JSON." readme = "README.md" requires-python = ">=3.10"