--- language: en tags: - vla - tokenizer - robotics - multimodal - pose-estimation - audio license: apache-2.0 --- # VLA Tokenizer — Adaptive v2 (GPT-NeoX-20b + SNAC) Extended GPT-NeoX-20b tokenizer for the **FineVideo-VLA** multimodal dataset. Adds 3D human pose tokens, video tokens, and SNAC audio tokens on top of the [EleutherAI/gpt-neox-20b](https://huggingface.co/EleutherAI/gpt-neox-20b) base. **Vocab size: 156,505** (50,277 base + 93,938 VLA + 12,290 SNAC) > **v1 → v2 change:** Added 12,290 SNAC audio tokens (``, ``, > and 12,288 `` tokens) for the SNAC listen format used in > [MixtureVitae-Omni](https://huggingface.co/datasets/mixture-vitae/MixtureVitae-Omni) > and FineVideo-VLA audio tokenization. All existing v1 token IDs are unchanged. --- ## Token categories | Category | Format | Count | Notes | |----------|--------|-------|-------| | Seed2 visual | `` (N: 0–8191) | 8,192 | Semantic keyframe tokens, 1 FPS | | Cosmos spatial | `` (N: 0–63999) | 64,000 | Spatial video tokens, every 8 frames | | AVC-LM H.264 | `` (N: 0–8191) | 8,192 | H.264 BPE tokens, every 8 frames | | Agent legacy | `` (N: 0–255) | 256 | Legacy opaque agent tokens | | FPS prefix | `` (N: 1–60) | 60 | Frame rate marker per chunk | | Joint position | `<{joint}_x/y/z_N>` (N: 0–255) | 13,056 | Quantized xyz, maps [-2m, +2m] | | Joint time | `<{joint}_t_N>` (N: 0–7) | 136 | Frame index within 8-frame window | | Modality wrappers | ``, ``, etc. | 46 | Open/close tags + joint wrappers | | **SNAC Level 0** | `` – `` | 4,096 | 12.5 Hz coarse audio | | **SNAC Level 1 even** | `` – `` | 4,096 | 25 Hz fine audio (even frames) | | **SNAC Level 1 odd** | `` – `` | 4,096 | 25 Hz fine audio (odd frames) | | **SNAC wrappers** | ``, `` | 2 | Block delimiters | **Total new tokens: 106,228** (93,938 VLA + 12,290 SNAC) --- ## 17 Named Joints (H36M skeleton) `pelvis` · `r_hip` · `r_knee` · `r_ankle` · `l_hip` · `l_knee` · `l_ankle` · `spine` · `thorax` · `nose` · `head_top` · `l_shoulder` · `l_elbow` · `l_wrist` · `r_shoulder` · `r_elbow` · `r_wrist` --- ## Token format in context Each 8-frame chunk in the interleaved sequence looks like: ``` ... ... ... ... 17 joints total ... ``` SNAC listen format: 3 tokens per base frame (L0 + L1_even + L1_odd), 37.5 tokens/sec, ~9–10 tokens per 8-frame chunk at 30 FPS. --- ## Usage ```python from transformers import AutoTokenizer tok = AutoTokenizer.from_pretrained("EmpathicRobotics/tokenizer-vla-adaptive-v2") print(len(tok)) # 156505 # All VLA and SNAC tokens are single atomic tokens print(tok.encode("", add_special_tokens=False)) # [59908] print(tok.encode("", add_special_tokens=False)) # [131151] print(tok.encode("", add_special_tokens=False)) # [130992] print(tok.encode("", add_special_tokens=False)) # single ID print(tok.encode("", add_special_tokens=False)) # single ID print(tok.encode("", add_special_tokens=False)) # single ID ``` --- ## How it was created ```python from transformers import AutoTokenizer # Start from existing v1 tokenizer (144,215 vocab) tok = AutoTokenizer.from_pretrained("EmpathicRobotics/tokenizer-vla-adaptive") snac_tokens = ["", ""] snac_tokens += [f"" for i in range(4096)] # L0 snac_tokens += [f"" for i in range(4096)] # L1 even snac_tokens += [f"" for i in range(4096)] # L1 odd tok.add_tokens(snac_tokens, special_tokens=True) # all atomic tok.save_pretrained("tokenizer-vla-adaptive-v2") # vocab size: 156,505 ``` Script: `tools/build_tokenizers.py` in the [finevideo-vla](https://github.com/TieuDaoChanNhan/finevideo-vla) repo. --- ## Related | Resource | Link | |----------|------| | v1 tokenizer (no SNAC) | [tokenizer-vla-adaptive](https://huggingface.co/EmpathicRobotics/tokenizer-vla-adaptive) | | Qwen3-based version | [tokenizer-vla-qwen3](https://huggingface.co/EmpathicRobotics/tokenizer-vla-qwen3) | | VLA model trained with v1 | [vla-1.7b-pab-spline-adaptive](https://huggingface.co/EmpathicRobotics/vla-1.7b-pab-spline-adaptive) | | FineVideo-VLA dataset | [FineVideo-Phase7-Flattened](https://huggingface.co/datasets/EmpathicRobotics/FineVideo-Phase7-Flattened) |