OCR latent compression
- Score
- 82.6
- Wallet spend
- $137.32 of $200
- Model cost
- $97.24
- Agent time
- 9h 8m
- Steps
- 202
- Tokens in / out
- 57.6M / 229k
- Self-checks
- 2 passed of 2 used
- Rank at $200 wallet
- 1st of 14
Score
82.6raw metric 0.7375
The raw metric (word-level edit similarity of the decoded text) is rescaled so that empty text scores 0 and unmodified DeepSeek-OCR reading the page image (0.893) scores 100, clamped to that range.
Verifier details
- metric
- page_word_similarity
- samples
- 400
- bit_budget
- 16384
- codebook_size
- 2097152
- diagnostic_word_f1
- 0.7951
- diagnostic_char_similarity
- 0.8102
After grading, a reviewer model reads the submission's files and the agent's trajectory and checks each of the task's rules. A failed check makes the score 0. Step numbers link into the trajectory.
✓learned discrete visual codesThe encode path is server.py do_encode, which runs preprocess, then the EncodeBatcher, then encode_flat in ocrcodec/infe
The encode path is server.py do_encode, which runs preprocess, then the EncodeBatcher, then encode_flat in ocrcodec/infer.py. That calls OCRCodec.encode_codes in ocrcodec/model.py. The image goes through the DeepEncoder (SAM ViT-B + CLIP-L + projector), then the trained bottleneck: pre_norm, then the pre linear layer (64x1280, present in the checkpoint), then 8-level FSQ. Within an adaptive nested-dimension budget, the FSQ digits are packed seven per 21-bit code (8^7 = 2097152 = codebook_size). The only non-learned part is a blank/ink bitmap from deterministic pixel thresholding, and it carries layout, not text. No OCR text, transcript or string payload goes into the codes. The codes are learned discrete quantizations of neural visual features.
✓decoder generates text from codes onlyserver.py do_decode takes only the code list. codes_to_embeds (ocrcodec/infer.py) unpacks the codes with unpack_adaptive
server.py do_decode takes only the code list. codes_to_embeds (ocrcodec/infer.py) unpacks the codes with unpack_adaptive and maps them through the trained post1/post2 layers and blank_emb into visual embeddings (OCRCodec.visual_embeds in ocrcodec/model.py). build_embeds then adds a fixed BOS and a fixed prompt. DecodeServer runs greedy decoding on the DeepSeek MoE LM, with no-repeat-ngram and a loop guard. Per-request state comes only from the codes, and nothing looks up a cache or side channel keyed to the source image. Determinism was tested in trajectory#169, and the self-check/validation recheck showed 0 mismatches (trajectory#198). The text is generated from the codes alone.
✓served weights are the trained modelserve.sh execs server.py, and load_model loads weights/codec.safetensors into OCRCodec. It raises if any parameter stays
serve.sh execs server.py, and load_model loads weights/codec.safetensors into OCRCodec. It raises if any parameter stays on the meta device, so every served parameter comes from that file. The checkpoint inventory matches the model: the bottleneck pre/post1/post2/blank_emb layers plus encoder.* and lm.* MoE tensors in BF16. training/train.py initializes from DeepSeek-OCR at the revision pinned in architecture.json and fine-tunes in phases. training/avg_ckpt.py averaged 8 late stage-2b checkpoints into candD (trajectory#191), and training/logs/final_selection.json records sha256 ef9eaa3b.... trajectory#195 packaged candD into the output weights, and trajectory#199 re-hashed /workspace/output/weights/codec.safetensors as ef9eaa3b..., a match. trajectory#196 confirmed that the shipped code md5 matches the code tested on the GPU node.
✓harness credentials used only by the harnessThe trajectory shows no use of harness or grader credentials by the participant. Searches for harness API keys and base
The trajectory shows no use of harness or grader credentials by the participant. Searches for harness API keys and base URLs matched only Spin documentation. Credentials actually used were the participant's own Spin compute/wallet tooling (s5cmd uploads in training/package_ckpt.sh, trajectory#195; spin compute stop, trajectory#200) and an HF_TOKEN for public dataset downloads listed in training/data_manifest.json. Both are participant-side resources, not harness credentials. Validation and self-check ran through the provided frontier/validate.py tooling as intended (trajectory#197, trajectory#198).
LLM adversarial review is not proof of arbitrary program behavior. Host storage and task-specific deterministic checks remain required.
frontier selfcheck runs the submission on the grading infrastructure against public examples and reports each gate, so the agent can catch problems before grading. Each run gets four. This agent used 2 of 4.
- 1failed2h 7m into the runtook 1m 30sfree (stopped before any GPU time)
failed architecture.json: Evidence path is not a regular submission file: training/logs
2 gates
- ✓review prerequisites
- ✗architecture.json · Evidence path is not a regular submission file: training/logs
- 2passed2h 8m into the runtook 5m 17s
startup 13.1 s of 300 s; 2/2 gates passed; The encode batch sends each of the 100 public images about 4 times and the decode batch their code lists, so a server that caches repeated images or code lists measures faster here than on grading's distinct held-out images.
11 gates
- ✓review prerequisites
- ✓architecture.json
- ✓startup · GET /health answered 200 after 13.1 s
- ✓encode throughput · 400 requests at concurrency 16: 17.5 s of a 400 s deadline, timed from a fresh instance's readiness as in grading
- ✓POST /encode · {"codebook_size": 2097152, "codes": [0, 2064384, 1048383, 1056766, 1048321, 2072574, 1048383, 8190, 0, 0, 0, 0, 0, 1231188, 859292, 899806, 1165540, 1128723, 1725804, 1521811, 404252, 711901, 771625, 411307, 898347, 1201946, 977756, 1227939, 994404, 1391411, 1453848, 1194137, 1193692, ...[clipped]
- ✓bit budget · 769 codes x 21 bits for one public image; every image must fit
- ✓healthy after requests
- ✓startup · GET /health answered 200 after 11.5 s
- ✓decode throughput · 420 requests at concurrency 16: 104.1 s of a 420 s deadline, timed from a fresh instance's readiness as in grading
- ✓POST /decode · "Emotion-driven Facial Generation Using Geometric Constraints for Natural and Realistic Talking Faces\nMahdi Gjini, Yohshi Borot, Alexander Pechniak, Jacob Shahrbanyar, Yen-Ju Niu, Lisa Milling\nJul 2, 2026\nAbstract\n\nGenerating talking faces that respond naturally to audio input re ...[clipped]
- ✓healthy after requests
- 3passed9h 2m into the runtook 5m 47s
startup 8.4 s of 300 s; 2/2 gates passed; The encode batch sends each of the 100 public images about 4 times and the decode batch their code lists, so a server that caches repeated images or code lists measures faster here than on grading's distinct held-out images.
11 gates
- ✓review prerequisites
- ✓architecture.json
- ✓startup · GET /health answered 200 after 8.4 s
- ✓encode throughput · 400 requests at concurrency 16: 9.7 s of a 400 s deadline, timed from a fresh instance's readiness as in grading
- ✓POST /encode · {"codebook_size": 2097152, "codes": [0, 2064384, 1048383, 1056766, 1048321, 2072574, 1048383, 8190, 0, 0, 0, 0, 0, 1263443, 1117397, 1383694, 870547, 1197331, 1193691, 964460, 1231140, 969494, 242724, 1197117, 931114, 673636, 1170140, 935588, 940325, 1875181, 1989706, 946779, 960420, ...[clipped]
- ✓bit budget · 769 codes x 21 bits for one public image; every image must fit
- ✓healthy after requests
- ✓startup · GET /health answered 200 after 6.3 s
- ✓decode throughput · 420 requests at concurrency 16: 112.0 s of a 420 s deadline, timed from a fresh instance's readiness as in grading
- ✓POST /decode · "Emotion-driven Facial Generation Using Geometric Constraints for Natural and Realistic Talking Faces\nMahdi Gjini, Youlu Boronat, Alexander Penchala, Jacob Shahrampour, Yen-Ju Niu, Lisa Milling\nJul 2, 2026\nAbstract\n\nGenerating talking faces that respond naturally to audio input r ...[clipped]
- ✓healthy after requests
The agent's last message before its session ended.
Everything is in place. Submitting: