Views
No views yet
🔬 Live demo: RiverRider/srt-nla-gptoss20b-trace — this AV running best-of-K decodes next to the (stronger) codebook retrieval decoder.
openai/gpt-oss-20b: given a hidden state v ∈ ℝ²⁸⁸⁰ from layer 6/12/18/24,
it generates text whose re-encoded hidden state approximates v. Trained
corpus-free on 200K (v, prefix) pairs sampled from the backbone's own
unconditional generations across all four layers (the full input→output
trace recipe), with a learned per-layer embedding on the inject slot.RiverRider/srt-nla-gptoss20b-artifacts) — retrieval decoding is stronger and
O(1). This card publishes the negative result honestly because it is a real
cross-backbone finding: Qwen-2.5-7B's AV crosses its paraphrase ceiling at
best-of-64; gpt-oss-20b's does not even reach its NN baseline.| K | 1 | 2 | 4 | 8 | 16 | 32 | 64 |
|---|---|---|---|---|---|---|---|
| best-of-K | 0.541 | 0.566 | 0.578 | 0.589 | 0.609 | 0.628 | 0.642 |
fve_nrm is uninterpretable on gpt-oss-20b: two unrelated L18 states
already score ≈ 0.837 raw. Always report the centered metric
(½(1+cos(h−μ, v−μ)) with μ the pool mean) plus a retrieval baseline.
anchors_L18.json in the artifacts repo carries the calibration.| Backbone (frozen) | openai/gpt-oss-20b, MXFP4/bf16 |
| Layers / targets | v = per-position hiddens at L6/12/18/24 of 64-token self-generations; gold text = the exact generating prefix |
| Trainable params | ~12.7M eq. class: proj(2880→2880) + 16 static prefix tokens + layer embedding (zero-init) |
| Objective | token CE on (v, gold-prefix) pairs (ce_weight=1, act_weight=0) |
| Training data | 200K pairs, balanced ~50K/layer (trace_pairs.jsonl in the artifacts repo) |
| Config | num_prefix_tokens=16, use_layer_embed=True, inject_norm="none" for this checkpoint |
1import torch
2from huggingface_hub import hf_hub_download
3from transformers import AutoModelForCausalLM, AutoTokenizer
4from srt.nla import ActivationVerbalizer, NLAConfig
5
6bb = AutoModelForCausalLM.from_pretrained("openai/gpt-oss-20b",
7 dtype=torch.bfloat16).cuda().eval()
8tok = AutoTokenizer.from_pretrained("openai/gpt-oss-20b")
9cfg = NLAConfig(backbone_id="openai/gpt-oss-20b", extraction_layer=18,
10 num_prefix_tokens=16, use_layer_embed=True, max_new_tokens=64)
11av = ActivationVerbalizer(cfg, backbone=bb, tokenizer=tok).cuda().eval()
12sd = torch.load(hf_hub_download("RiverRider/srt-nla-av-gptoss20b", "best_av/best_av.pt"),
13 map_location="cuda", weights_only=False)
14av.load_state_dict(sd["trainable"], strict=False)
15
16texts = av.verbalize(v, do_sample=True, temperature=1.0, layer=18) # best-of-K: repeat v K timesv (oracle rerank — v is
available by construction).1from srt.nla import StateIndex
2si = StateIndex.load(hf_hub_download("RiverRider/srt-nla-gptoss20b-artifacts",
3 "state_codebook_vq.pt", repo_type="dataset"))
4text = si.decode(v) # O(1)-ish nearest-of-4096-codes lookup
5code = si.encode(v) # the state's integer "magic number"RiverRider/srt-adapter-gptoss20b — the SRT read-out adapter (regime AUROC 0.974)RiverRider/srt-nla-gptoss20b-artifacts — pairs, codebook, anchors, K-curve