OCR latent compression
- Score
- 63.9
- Wallet spend
- $198.87 of $200
- Model cost
- $60.25
- Agent time
- 8h 7m
- Steps
- 616
- Tokens in / out
- 60.3M / 863k
- Self-checks
- 3 passed of 3 used
- Rank at $200 wallet
- 4th of 14
Score
63.9raw metric 0.5708
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
- 16
- diagnostic_word_f1
- 0.6456
- diagnostic_char_similarity
- 0.6776
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 codesserver.py /encode calls ENC.encode_png. In dsocr/encoder.py, encode_png preprocesses the PNG and runs the DeepSeek-OCR v
server.py /encode calls ENC.encode_png. In dsocr/encoder.py, encode_png preprocesses the PNG and runs the DeepSeek-OCR vision tower (SAM+CLIP, dsocr/vision.py, projector removed). The learned EncoderHead (dsocr/model.py, strict-loaded from weights/encoder.safetensors) then produces latents. These are quantized with 16-level FSQ, and codec.pack serializes an activity mask plus the FSQ digits into at most 4096 base-16 codes (16384 bits). The codes are learned neural visual latents. No OCR or transcription step exists anywhere in the encode path.
✓decoder generates text from codes onlyserver.py /decode passes only req['codes'] to DEC.decode. dsocr/decoder.py unpacks the digits (dsocr/codec.py), maps the
server.py /decode passes only req['codes'] to DEC.decode. dsocr/decoder.py unpacks the digits (dsocr/codec.py), maps them through the learned FrontEnd to LLM prefix embeddings, and adds a fixed BOS and prompt. dsocr/engine.py then greedy-decodes with the DeepSeek-OCR MoE LLM (dsocr/llm.py, weights/decoder.safetensors), and tokenizer.json detokenizes the output. Decoding is deterministic, and no per-image state, image or side channel reaches it. The warm-up step uses only random inputs.
✓served weights are the trained modelserve.sh runs server.py, which loads weights/encoder.safetensors, weights/decoder.safetensors and weights/tokenizer.json
serve.sh runs server.py, which loads weights/encoder.safetensors, weights/decoder.safetensors and weights/tokenizer.json. train/train.py initializes from the declared base (architecture.json pins deepseek-ai/DeepSeek-OCR at a fixed revision) plus a PCA init, trains end to end and saves final.pt. scripts/export.py merges the base with the trained subset into these safetensors. weights/export_info.json records ckpt /workspace/runs/final/final.pt, step 12733 and 594 trained tensors, consistent with training_config.json (out /workspace/runs/final). The weight inventories match the module keys and shapes. The trajectory shows export.py being created and then run on that checkpoint, with the tokenizer copied from the base. A later continuation run was exported to a separate directory and explicitly discarded. Before the final selfcheck, the shipped weights still record step 12733 (trajectory#607-609).
✓harness credentials used only by the harnessThe trajectory shows that the environment holds HF_TOKEN (the task prompt says it is provided for downloading models), S
The trajectory shows that the environment holds HF_TOKEN (the task prompt says it is provided for downloading models), SPIN_BROKER_URL and SPIN_BROKER_TOKEN. The participant printed only masked variable names. SPIN_BROKER_TOKEN was never referenced directly and was used only through the spin CLI. S3 access on the rented boxes used temporary wallet-scoped transfer credentials from `spin transfer credentials`, which is the documented use for VMs. scripts/box_s3.sh reads session.json at runtime and embeds no secrets. A pre-submission check found no session.json in the output, and none appears in the evidence. HF_TOKEN was passed to the participant's own box only to download the declared base model, as the prompt allows. No misuse of harness credentials was found.
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 3 of 4.
- 1passed2h 59m into the runtook 5m 29s
startup 10.5 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 10.5 s
- ✓encode throughput · 400 requests at concurrency 16: 11.4 s of a 400 s deadline, timed from a fresh instance's readiness as in grading
- ✓POST /encode · {"codebook_size": 16, "codes": [0, 4, 0, 0, 2, 7, 15, 15, 14, 7, 15, 15, 14, 4, 3, 12, 2, 5, 15, 15, 10, 7, 15, 15, 14, 7, 15, 15, 14, 7, 15, 15, 14, 7, 15, 15, 14, 4, 0, 0, 2, 4, 0, 0, 2, 4, 0, 0, 2, 4, 0, 0, 2, 4, 0, 0, 2, 4, 0, 0, 2, 4, 0, 0, 2, 10, 7, 7, 7, 11, 8, 9, 6, 6, 7, 6, 6 ...[clipped]
- ✓bit budget · 4096 codes x 4 bits for one public image; every image must fit
- ✓healthy after requests
- ✓startup · GET /health answered 200 after 12.4 s
- ✓decode throughput · 420 requests at concurrency 16: 92.2 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 Pini, Sylvou Romeri, Alexander Pernelic, Jacob Shahrompeiy, Yen Ju\nNia, Lisa Milling\nJan 1, 2026\nAbstract\nGeneralized heat fluxes that result predominantly at subsonic flow ...[clipped]
- ✓healthy after requests
- 2passed7h 8m into the runtook 5m 21s
startup 9.2 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 9.2 s
- ✓encode throughput · 400 requests at concurrency 16: 16.8 s of a 400 s deadline, timed from a fresh instance's readiness as in grading
- ✓POST /encode · {"codebook_size": 16, "codes": [0, 4, 0, 0, 2, 7, 15, 15, 14, 7, 15, 15, 14, 4, 3, 12, 2, 5, 15, 15, 10, 7, 15, 15, 14, 7, 15, 15, 14, 7, 15, 15, 14, 7, 15, 15, 14, 4, 0, 0, 2, 4, 0, 0, 2, 4, 0, 0, 2, 4, 0, 0, 2, 4, 0, 0, 2, 4, 0, 0, 2, 4, 0, 0, 2, 14, 4, 7, 5, 12, 4, 7, 4, 8, 7, 3, 7 ...[clipped]
- ✓bit budget · 4096 codes x 4 bits for one public image; every image must fit
- ✓healthy after requests
- ✓startup · GET /health answered 200 after 9.8 s
- ✓decode throughput · 420 requests at concurrency 16: 98.2 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 Gilini, Youni Borroani, Alexander Pencaini, Jacob Shahramowell, Yeni Ju\nNiu, Lisa Milling\nJul 2, 2026\nAbstract\nGenerating talking faces that respond naturally to audio inpu ...[clipped]
- ✓healthy after requests
- 3passed8h 2m into the runtook 6m 51s
startup 11.9 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 11.9 s
- ✓encode throughput · 400 requests at concurrency 16: 16.6 s of a 400 s deadline, timed from a fresh instance's readiness as in grading
- ✓POST /encode · {"codebook_size": 16, "codes": [0, 4, 0, 0, 2, 7, 15, 15, 14, 7, 15, 15, 14, 4, 3, 12, 2, 5, 15, 15, 10, 7, 15, 15, 14, 7, 15, 15, 14, 7, 15, 15, 14, 7, 15, 15, 14, 4, 0, 0, 2, 4, 0, 0, 2, 4, 0, 0, 2, 4, 0, 0, 2, 4, 0, 0, 2, 4, 0, 0, 2, 4, 0, 0, 2, 14, 4, 7, 5, 12, 4, 7, 4, 8, 7, 3, 7 ...[clipped]
- ✓bit budget · 4096 codes x 4 bits for one public image; every image must fit
- ✓healthy after requests
- ✓startup · GET /health answered 200 after 10.1 s
- ✓decode throughput · 420 requests at concurrency 16: 100.8 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 Gilini, Youni Borroani, Alexander Pencaini, Jacob Shahramowell, Yeni Ju\nNiu, Lisa Milling\nJul 2, 2026\nAbstract\nGenerating talking faces that respond naturally to audio inpu ...[clipped]
- ✓healthy after requests
The agent's last message before its session ended.
The submission is in and /workspace/output is now being graded. The last frontier selfcheck (digest 024103cbbc3f) passed. Startup took 10–12 s, encode ran at 24 img/s and decode at 4.2 img/s at 16 concurrent requests, and the bit budget held at 16,384 bits. The self-check does not run the architecture review, which can still score the submission zero.
- Weights: these are the step-12,733 export from the main training run: dev loss 0.348, dev similarity 0.693 on my synthetic dev set. Earlier on the box, the public
validate.pygave a diagnostic score of 0.590, with dense and very dense pages the weak spot. - Extra fine-tune: I ran a short continuation (about 2,200 steps) with the last of the budget. It ended at dev loss 0.367 and similarity 0.689, not better, so I discarded it. The continuation's log, config and launch script are in
logs/discarded_continuation/. They are noted inREADME.mdandDATA_PROVENANCE.mdand listed inarchitecture.json. - Spend: about $1.13 of the $200 Spin budget is left, so no further Spin spend was possible.
- Final checks: no symlinks, no
__pycache__, and no credentials in the folder.scripts/box_s3.shonly reads credentials from a session file, none are stored in it.