savitr-bf16 β€” full-precision terse electoral-roll OCR (distilled Surya)

Full-precision (bf16) merged weights for savitr's distilled terse model. This is the checkpoint that gojiberries/savitr (MLX 8-bit) was quantized from β€” same model, same training run, higher precision.

Use gojiberries/savitr if you just want to read electoral rolls on Apple Silicon: it is smaller (~800 MB vs 1.33 GB), faster, and what pip install savitr fetches automatically. Use this repo if you want to:

  • re-quantize to a different format or bit width (MLX 4/8-bit, GGUF, AWQ)
  • continue training or distilling from the merged weights
  • evaluate without quantization error

Base model = datalab-to/surya-ocr-2 (650M Qwen3.5-VL-style OCR), self-distilled to emit one compact pipe-delimited line per voter instead of verbose HTML:

epic|name|relation(F/H/M)|relative_name|house|age|sex

~5Γ— fewer decode tokens than the HTML output, at the teacher's accuracy.

Usage

Re-quantize to MLX (what the published 8-bit is):

python -m mlx_vlm convert --hf-path gojiberries/savitr-bf16 \
    --mlx-path savitr-mlx-8bit -q --q-bits 8

Load directly:

from transformers import AutoModelForImageTextToText, AutoProcessor
model = AutoModelForImageTextToText.from_pretrained("gojiberries/savitr-bf16")
proc = AutoProcessor.from_pretrained("gojiberries/savitr-bf16")

Parse the output with savitr's value-anchored parser, which stays column-aligned even when the model drops a field:

from savitr.rolls.parse import parse_terse, TERSE_PROMPT

How it was trained

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 β€” then the adapter is merged into the base weights. The terse format is the only behavioral change; reading ability is inherited from Surya.

Evaluation (out-of-sample, vs the Surya teacher)

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%. Measured on the 8-bit quantization of these weights, so bf16 is a floor, not a ceiling.

Limitations

v0.2 (450 training pages, AC-holdout). Trained on Manipur 2025 English rolls; other states and scripts are out of distribution. The tokenizer, processor, and chat template here come from the base model β€” the training run's own tokenizer was written by a newer transformers and is not loadable by current mlx-vlm.

License & attribution

Derived from datalab-to/surya-ocr-2; its license governs use of these weights. savitr's code is MIT (github.com/in-rolls/savitr). Electoral rolls are public records published by the Election Commission of India.

Downloads last month
10
Safetensors
Model size
0.7B params
Tensor type
BF16
Β·
Inference Providers NEW
This model isn't deployed by any Inference Provider. πŸ™‹ Ask for provider support

Model tree for gojiberries/savitr-bf16

Finetuned
(6)
this model