Downloads · 30 days
22
33% of all-time downloads
gojiberries/savitr
savitr is a image-to-text model from gojiberries. Use it when you need a caption or text from an image. It is set up for mlx-vlm. The card lists the license as other.
gojiberries/savitr is datalab-to/surya-ocr-2 (650M Qwen3.5-VL-style OCR) self-distilled to read Indian electoral-roll pages and emit one compact, pipe-delimited line per voter instead of verbose HTML:
Downloads · 30 days
22
33% of all-time downloads
All-time downloads
67
Public
Parameters
666M
802 MB on disk
Likes
0
Public
Click a slice to open those files.
.safetensors802 MB · 100%
How the weights are stored.
U32565M · 85%
From the Hugging Face model README
gojiberries/savitr is datalab-to/surya-ocr-2
(650M Qwen3.5-VL-style OCR) self-distilled to read Indian electoral-roll pages and emit one
compact, pipe-delimited line per voter instead of verbose HTML:
epic|name|relation(F/H/M)|relative_name|house|age|sex
That is ~5× fewer decode tokens than the HTML output, so it runs ~2.7× faster end-to-end at the teacher's accuracy. Converted to MLX 8-bit for Apple Silicon.
pip install savitr
savitr ocr roll.pdf --terse # auto-downloads this model
from huggingface_hub import snapshot_download
from savitr import MLXSuryaOCR, parse_terse
from savitr.rolls.parse import TERSE_PROMPT
path = snapshot_download(
repo_id="gojiberries/savitr",
revision="c850ccd21031bb86595f1ba5f9679e6b401ec04f",
)
eng = MLXSuryaOCR(path, prompt=TERSE_PROMPT)
voters = parse_terse(eng.ocr_image("page.png")[0])
Teacher = full Surya (surya-ocr-2) OCRs roll pages to HTML; a parser cleans them into terse
targets; the model is LoRA-fine-tuned on (page image → terse rows) — 450 pages drawn from
constituencies held out of the eval, 1 epoch, for $0 on a free Kaggle T4. The terse format is the only
behavioral change — reading ability is inherited from Surya.
Held-out constituencies never seen in training (37 pages, 1,076 teacher voters):
| Field | Fidelity | Field | Fidelity | |
|---|---|---|---|---|
| voter recall | 99.3% | relative name | 96.2% | |
| EPIC | 97.2% | relation code (F/H/M) | 97.9% | |
| name | 96.2% | house | 98.8% | |
| age | 97.5% | sex | 98.2% |
Per-voter record similarity 98.7%, whole-page similarity 92.9% (1 − normalized edit distance). Fidelity = agreement with the teacher's output; absolute accuracy ≈ these × Surya's own ~93–95%.
v0.2 (450 training pages, AC-holdout). All fields are teacher-grade out-of-sample — EPIC, house,
age, sex, the relation code, names, and recall all 96–99% (the relation code, the weak spot of the
earlier 77-page model, is now 98%). Trained on Manipur 2025 English rolls; other states/scripts are
out of distribution. Pair with savitr's value-anchored parse_terse, which stays column-aligned even
when the model drops a field.
Derived from datalab-to/surya-ocr-2; its license governs use of these weights. savitr's code
is MIT. Electoral rolls are public records published by the Election Commission of India.