OCR latent compression
- Score
- 26.1
- Wallet spend
- $1.24 of $10
- Model cost
- $49.14
- Agent time
- 3h 36m
- Steps
- 173
- Tokens in / out
- 70.8M / 224k
- Self-checks
- 2 passed of 2 used
- Rank at $10 wallet
- 6th of 14
Score
26.1raw metric 0.2335
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
- 16384
- diagnostic_word_f1
- 0.3172
- diagnostic_char_similarity
- 0.5051
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_image follows one path: deterministic projection-profile segmentation in segment.py, then 32x32 glyph c
server.py encode_image follows one path: deterministic projection-profile segmentation in segment.py, then 32x32 glyph crops, then the trained CNN encoder in codec.py (GlyphCoder.enc), then LayerNorm, then FSQ with levels [8,8,4,4,4,4]. FSQ packs each glyph into a 14-bit index (codebook 16384). The training-only char head is not called during /encode. Two codes are reserved: 0 for line break and 16383 for a visual gap found by a pixel-gap heuristic. Neither carries text. The codes are learned quantized visual latents, not OCR character IDs. The training logs show many unique codes per character. The glyph_coder.pt inventory matches the GlyphCoder enc, norm, head and line modules.
✓decoder generates text from codes onlyserver.py decode_codes parses the integer codes into lines and calls MODEL.decode_lines. That embeds codes with FSQ.embe
server.py decode_codes parses the integer codes into lines and calls MODEL.decode_lines. That embeds codes with FSQ.embed and runs the trained transformer LineDecoder with greedy argmax over char and space heads (codec.py). wordseg.py only inserts spaces, using visual gap codes and a max-match against wordlist.txt. In trajectory#90 that wordlist was mined from /workspace/data/train_texts.jsonl, the training corpus declared in data_manifest.json and training_config.json, keeping words that occur at least twice. It was not built from validation or eval text. Decode reads no image, external OCR, cache or network. Public validation pages were used only for local scoring (trajectory#137, trajectory#139).
✓served weights are the trained modelserve.sh runs server.py, which loads glyph_coder.pt via ckpt['model'] into GlyphCoder. The b13 run was launched without
serve.sh runs server.py, which loads glyph_coder.pt via ckpt['model'] into GlyphCoder. The b13 run was launched without --resume, so random init (trajectory steps 50-70; logs/b13_train.log). Run aa resumed b13 at step 1600 and saved its step-2000 checkpoint (logs/aa_train.log). That checkpoint was copied to ship.pt (trajectory steps 137-158), then staged as glyph_coder.pt (trajectory#160). The tensor inventory exactly matches the shipped GlyphCoder architecture and the FSQ codebook. training_config.json declares random init and step-2000 weights. Minor caveats that are not violations: the server.py docstring is stale, and the glyph_data helper module is not shipped.
✓harness credentials used only by the harnessSearches of the trajectory found no API keys, no XAI or OpenRouter base URLs, no api.x.ai calls and no secondary model-C
Searches of the trajectory found no API keys, no XAI or OpenRouter base URLs, no api.x.ai calls and no secondary model-CLI sessions. The only OpenRouter mention is the spin CLI's help listing of subcommands (trajectory steps 1-12). Commands were limited to spin compute exec/upload, training, local scoring and packaging.
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.
- 1passed3h 18m into the runtook 3m 35s
startup 2.8 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 2.8 s
- ✓encode throughput · 400 requests at concurrency 16: 128.6 s of a 400 s deadline, timed from a fresh instance's readiness as in grading
- ✓POST /encode · {"codebook_size": 16384, "codes": [852, 12746, 9421, 12532, 12633, 9421, 15576, 7453, 235, 12327, 15641, 14552, 16383, 1837, 487, 12569, 11403, 14130, 16383, 2533, 3159, 14552, 3159, 12383, 11403, 12532, 12633, 9421, 14552, 16383, 4942, 1213, 12569, 15576, 6594, 16383, 2533, 3159, 942 ...[clipped]
- ✓bit budget · 727 codes x 14 bits for one public image; every image must fit
- ✓healthy after requests
- ✓startup · GET /health answered 200 after 3.0 s
- ✓decode throughput · 420 requests at concurrency 16: 10.5 s of a 420 s deadline, timed from a fresh instance's readiness as in grading
- ✓POST /decode · "Emotion-drvn Hcial Generation Using (e ome tric\nConstraints fr Natural and Realistic Talking Faces\nMahd Gini, Yulu Boronat, Alexander Penchala, Jacob Shahrampour Yn-Ju\nNiu, Lisa Milling\nJul a, a026\nAstract\nGenerating talkng fces that respond natrally to audio input requires\nre ...[clipped]
- ✓healthy after requests
- 2passed3h 33m into the runtook 3m 58s
startup 2.8 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 2.8 s
- ✓encode throughput · 400 requests at concurrency 16: 135.4 s of a 400 s deadline, timed from a fresh instance's readiness as in grading
- ✓POST /encode · {"codebook_size": 16384, "codes": [851, 12746, 8397, 12531, 13593, 8397, 15576, 7453, 235, 12327, 15881, 11359, 14552, 16383, 1836, 423, 12569, 11403, 14129, 16383, 2532, 3159, 14552, 3159, 12383, 11403, 12531, 13593, 8397, 14552, 16383, 8974, 1148, 12569, 15576, 6594, 16383, 2532, 31 ...[clipped]
- ✓bit budget · 735 codes x 14 bits for one public image; every image must fit
- ✓healthy after requests
- ✓startup · GET /health answered 200 after 3.4 s
- ✓decode throughput · 420 requests at concurrency 16: 11.1 s of a 420 s deadline, timed from a fresh instance's readiness as in grading
- ✓POST /decode · "Emotion-dryen Mcial Generation Using Geometric\nConstraints fr Natural and Realistic Talking Faces\nMahd Gini, Yulu Boronat, Alexander Penchala, Iacob Shahrampour Yn-Iu\nNiu, Lisa Milling\nJul 2, 202$\nAbstract\nGenerating talkng fces that respond naturally to audio input requires\nr ...[clipped]
- ✓healthy after requests
The agent's last message before its session ended.
The visual tokenizer is submitted. The session ends here, and /workspace/output is what will be graded.
The encoder segments each page into glyphs and quantizes every 32×32 crop with finite scalar quantization (levels [8, 8, 4, 4, 4, 4], codebook size 16,384). Code 0 is a line break and code 16383 is a wide visual gap. A page stays inside 16,384 bits. The decoder reads only those codes and predicts the characters; a vocabulary built from the training corpora then splits the resulting tokens.
serve.sh exposes POST /encode and POST /decode. On the grading image it was ready in about 3 seconds. Encode held about 3 images per second and decode about 38, both above the 1 image per second requirement.