| --- |
| license: mit |
| language: |
| - en |
| tags: |
| - kv-cache |
| - token-importance |
| - llm-compression |
| - mistral |
| - pytorch |
| base_model: mistralai/Mistral-7B-v0.3 |
| --- |
| |
| # TIS Stage 3 — Closed-Loop Retrieval Checkpoint |
|
|
| **v2 — replaces earlier incorrect upload (June 2026 release used wrong artifact)** |
|
|
| This is the Token Importance Scoring (TIS) checkpoint for learned KV cache compression, |
| trained via the closed-loop retrieval objective on Mistral-7B-v0.3. |
|
|
| ## What Changed in v2 |
|
|
| The original `tis-stage3-ert` upload contained a 128-step prototype training run |
| (`stage3_ert_local_fresh`) rather than the trained checkpoint. That artifact had near-zero |
| `out_proj` weights (max 0.0007) and produced non-discriminative scores (std ≈ 1.7, range 45–54 |
| for all tokens), which explains the 0%/12.5% NIAH results reported by external testers. |
|
|
| This v2 replaces it with the correct `closed_loop_retrieval_v6` checkpoint (2000 steps, |
| out_proj max 0.028, score std ≈ 22, full 0–100 range). |
| |
| SHA256 of `tis_components.pt`: `794cb761d8d840709afb0bea6f0f9b73...` *(run `sha256sum tis_components.pt` to verify)* |
| |
| ## Architecture |
| |
| - Base model: `mistralai/Mistral-7B-v0.3` |
| - TIS components: `ImportanceUpdateHead` with RMSNorm + cross-attention |
| - State dict keys: 7 (`cross_attn.in_proj_weight`, `cross_attn.in_proj_bias`, |
| `cross_attn.out_proj.weight`, `cross_attn.out_proj.bias`, `out_proj.weight`, |
| `out_proj.bias`, `score_norm.scale`) |
| - Attention hook lambda: 0.0 (hook inactive; scoring via `out_proj(hidden)` direct path) |
| - Importance embedding projection: initialized to zero |
|
|
| ## Benchmark Results |
|
|
| Measured with `scripts/eval_niah_hard.py` on 50 examples, context 2048 tokens, seed 42. |
| **These are hard-NIAH numbers** (answer token must appear in top-5 final-position logits). |
|
|
| | Budget | Learned | SnapKV proxy | Heuristic | No eviction | |
| |--------|---------|-------------|-----------|-------------| |
| | 10% | 4% | 2% | 4% | 52% | |
| | 25% | 22% | 22% | 14% | 52% | |
| | 50% | **74%** | 24% | 28% | 52% | |
| | 75% | **78%** | 32% | 40% | 52% | |
|
|
| Evidence survival at 50% budget: 99.9% |
| Evidence survival at 75% budget: 100% |
|
|
| **Note:** The `no_eviction` ceiling is 52% because this hard evaluator tests whether the answer |
| token appears in the top-5 logits of the final token position. Eviction can actually *improve* |
| accuracy by removing distractors, which is the mechanism being measured here. |
|
|
| ## Scorer Path |
|
|
| The `eval_niah_hard.py` evaluator uses the **direct token scorer**: |
|
|
| ```python |
| # Direct scorer — what eval_niah_hard.py uses |
| scores = sigmoid(importance_head.out_proj(hidden)) * 100.0 |
| ``` |
|
|
| This is different from the full `ImportanceUpdateHead.forward()` which uses cross-attention |
| and RMSNorm. The direct scorer applies `out_proj` token-by-token to final-layer hidden states. |
| See [Source Code README](https://github.com/nitroxido/token-importance-scoring/blob/main/SOURCE-CODE-README.md) |
| for details on all scorer paths. |
|
|
| ## Training Details |
|
|
| - Training type: closed-loop retrieval |
| - Steps: 2000 |
| - Learning rate: 0.001 |
| - Loss weights: α_rank=1.0, β_retrieve=2.0, γ_stability=0.05 |
| - Final loss: ~0.79 |
| - Final evidence survival (training metric): ~70% |
| |
| ## Usage |
| |
| ```bash |
| # Clone repository |
| git clone https://github.com/nitroxido/token-importance-scoring.git |
| cd token-importance-scoring |
| |
| # Setup |
| python -m venv .venv && source .venv/bin/activate |
| pip install -e . |
| |
| # Download this checkpoint |
| hf download oldman-dev/tis-stage3-ert --local-dir checkpoints/stage3_ert_learned |
| |
| # Run hard NIAH evaluation |
| python scripts/eval_niah_hard.py \ |
| --learned-checkpoint checkpoints/stage3_ert_learned \ |
| --budgets 0.25 0.5 0.75 \ |
| --num-tests 50 \ |
| --context-tokens 2048 \ |
| --device cuda \ |
| --seed 42 |
| ``` |
| |
| ## Reference Environment |
| |
| ``` |
| transformers==4.36.0 # reference; Transformers 5 has SDPA compat issues with PatchedCausalLM |
| torch==2.1.2 |
| bitsandbytes==0.41.3 |
| python==3.11 |
| ``` |
| |
| Transformers 5 breaks the `PatchedCausalLM` forward path (attention mask injection conflicts |
| with the SDPA backend). The direct scorer (`out_proj(hidden)`) works under any version because |
| it does not go through the patched attention path. |
|
|
| ## Related Checkpoints |
|
|
| - [tis-v8b-hard-anchor](https://huggingface.co/oldman-dev/tis-v8b-hard-anchor): Hard-anchor |
| training on top of this checkpoint. Better at low budgets (25%). |
| - [tis-stage1-oracle](https://huggingface.co/oldman-dev/tis-stage1-oracle): Oracle baseline |
| using ground-truth labels. |
|
|
| ## License |
|
|
| MIT — see [repository](https://github.com/nitroxido/token-importance-scoring) |
|
|