← Back to project

Molmo2 Codec — P-Token & Training-Interface Audit

Why 16 output tokens are not equivalent to AdaCodec's 64→16 path · 2026-07-24
P-tokenizernative connectorStage 1Stage 2AdaCodec

1 · Verdict

Primary failure
Wrong feature contract
P frames bypass Molmo's pretrained multi-layer attention-pool + MLP interface.
Same output count
16 ≠ 64→16
The final token budget matches; the internal capacity, spatial topology, and connector do not.
Repair target
Molmo-native V6
64 latent states, block mask, layers −3/−9, 2×2 attention pooling, vision-frozen Stage 2.
Current Molmo2 V5AdaCodec-shaped Molmo target 729 patch states27×27 at 378 px 16 direct queriesfull self-attention final layer only16 × 1152 fresh Linear1152 → 2560 Compression happens immediately: 729 → 16 729 patch statesqueries cannot alter patches 64 latent queries8×8 intermediate grid layers −3 and −9native feature contract 2×2 attention pool8×8 → 4×4 = 16 Internal bandwidth first; final budget remains 16

2 · What 64→16 means

64 intermediate latent states
16 final P tokens
Each color-coded 2×2 latent group becomes one final token through attention pooling; this is not simple averaging.

3 · Block attention mask

AdaCodec mask
Key: patch
Key: latent
Query: patch
allow
block
Query: latent
allow
allow
Current V5
Key: patch
Key: query
Query: patch
allow
allow
Query: query
allow
allow

4 · Native-interface mismatch

AxisMolmo I-frame pathCurrent P-frame pathTarget P-frame path
ViT stateslayers −3 and −9final layer onlylatent states from layers −3 and −9
Pooling input9 patch states per outputnonefour latent states per output
Poolingpretrained attention_meanqnoneP-specific copy initialized from attention_meanq
Projectionpretrained Molmo MLPfresh Linear 1152→2560P-specific native MLP copy
Output family81 × 256016 × 2560, unrelated bridge16 × 2560, native feature contract
LLM sees
Two visual languages
I frames use the pretrained connector; P frames use a newly learned linear mapping.
Not required
Copy Qwen DeepStack
Molmo has its own base-native interface; matching that contract is the goal.
Required
Distribution parity
P-token norms, covariance, and connector outputs should resemble native visual tokens before Stage 2.

5 · The Stage-1 → Stage-2 hand-off is broken

Stage 1 trains
E_P + 16 queries + e_t + Hφ
ptok.proj excluded
Proxy proves
P tokens contain video-specific signal
last-layer 3×3 teacher proxy
Stage 2 consumes
query → untrained Linear → LLM
E_P frozen
FindingCurrent evidenceWhy it mattersPriority
P projection absent from Stage-1 optimizertrain_params includes E_P/query/e_t/Hφ, not ptok.projThe deployed P-to-LLM bridge remains at initializationP0
Teacher target is disjointfinal ViT layer + adaptive average pool 3×3Proxy success does not establish native-connector compatibilityP0
Stage 2 trains visual bridgesft_connector=True; P projection explicitly trainableI and P visual interfaces drift differently during short SFTP0
Ablation defaults to n=1training loop calls ablation_eval() without a chain lengthDeep-GOP information is never monitored by the headline proxyP1

6 · Corrected training contract

Stage 1
train E_P + 64 latents + P connector + e_t + Hφ
Shared feature contract
layers −3/−9 → attention pool → native MLP
Stage 2
freeze every visual module; train LLM only
ModuleStage 1Stage 2
I-frame ViT + connectorfrozen teacherfrozen
E_P ViTtrainfreeze
64 latents + temporal embeddingtrainfreeze
P-specific native connectortrainfreeze
traindiscard
LLMfreezetrain

7 · Temporal coverage and evaluation symptom

V5 fixes
Non-zero t=1…16
Fixed sinusoidal rows eliminate the V4 zero-collapse.
V5 still trains
At most 8 source frames
The launcher omits max_frames; the trainer default remains 8.
Measured result
−23 MLVU points
Dense 75.0 vs V4 codec 52.0 at 33% token budget, n=200.
AdaCodec codec − dense
+3.1
Molmo V4 codec − dense
−23.0
Bar direction is encoded by color; lengths show absolute delta on a 25-point reference scale. Cross-system absolute scores are not directly comparable.

8 · Minimal V6 gate

GateTestPass criterion
ABlock-mask invariancePatch states unchanged when latent-query values change
B64→16 native connector smoke16 × 2560 outputs; stable norm; I path bit-identical
C5k Stage-1 native-space proxyreal < shuffled ≈ zero at short and deep GOP positions
D500/1500-step LLM-only Stage 2MLVU n=200 ≥57 at matched codec budget
Scale130k Stage 1 + long Stage 2Only after A–D pass
Sources: AdaCodec paper · JoyAI official repository · P-tokenizer · Stage 1 · Stage 2 integration. JoyAI's codec source remains unreleased; architecture comparisons use the AdaCodec paper.