Unquantized BF16 reference conversion. Converted from
baidu/Unlimited-OCR
(MIT) with mlx-vlm 0.6.3 on 2026-07-01.
Part of a measured-ladder series for this model; conversions across runtimes
evaluated with the same harness are in the
collection.
BF16 is the reference baseline (overall CER 1.62% on this corpus).
Deltas are computed on unrounded values, so displayed cells may differ by 0.01pp.
Corpus: 24 synthetic pages (3 difficulty tiers × 8), deterministic seed
20260701, exact rendered ground truth, temperature 0, prompt
document parsing.
(
Free OCR. degenerates into a repetition loop on this mlx-vlm build, so
document parsing. is used for every variant).
Decoding runs with no repetition penalty, deliberately, to expose quantization
instability as honest high CER; the official inference pipeline applies
no_repeat_ngram_size=35, which suppresses exactly the runaway repetition these
loop pages capture, so deployed output on flagged pages will not collapse the way
these numbers show. Normalization
(grounding tokens, markdown decoration, whitespace) applied identically to
reference and hypothesis, so CER reflects recognition, not formatting. Reference
text is known character-for-character, and per-page hypothesis/reference length
ratios back the loop rate above. OCR ladders scored against real-form datasets
with partial annotations can produce CER above 1.0, where degradation-per-bit
stops being readable; the corpus design here exists to avoid that. The parsing
prompt emits structural region labels as
<|det|>label [x,y,x,y]<|/det|>
preambles; these are stripped by the same normalization that removes grounding
tokens and coordinates (a scoped rule that matches only that exact structure,
never body text), so absolute CER reflects text recognition rather than layout
markup — both the absolute figures and the degradation-vs-BF16 deltas are
meaningful. Eval harness (corpus generator + CER/WER scorer) is open-source:
https://github.com/vimalnakrani08/unlimited-ocr-eval-harness (the scoring core
is backend-agnostic; the runner is MLX-specific).
1from mlx_vlm import load, generate
2from mlx_vlm.prompt_utils import apply_chat_template
3from mlx_vlm.utils import load_config
4
5model, processor = load("vimalnakrani/unlimited-ocr-bf16-mlx")
6config = load_config("vimalnakrani/unlimited-ocr-bf16-mlx")
7prompt = apply_chat_template(processor, config, "document parsing.", num_images=1)
8print(generate(model, processor, prompt, image="page.png",
9 max_tokens=2600, temperature=0.0).text)
Base model © Baidu, released under MIT — please cite their
technical report. This repo contains
converted/quantized weights and adds no training.