Downloads · 30 days
8
38% of all-time downloads
stanleytheli/qwen3.6-35b-a3b-ao-base
qwen3.6-35b-a3b-ao-base is a machine learning model from stanleytheli. Use it for the machine learning task on the model card, and read the license before you ship it in a product. It is set up for peft. The card lists the license as apache-2.0.
⚠️ Read this first: a better oracle exists This is the baseline-recipe oracle. A sibling oracle trained on the same base model with a newer recipe — stanleytheli/qwen3.6-35b-a3b-ao — beats this one on almost everythin…
Downloads · 30 days
8
38% of all-time downloads
All-time downloads
21
Public
Repo size
102 MB
Likes
0
Public
Click a slice to open those files.
.safetensors102 MB · 100%
From the Hugging Face model README
⚠️ Read this first: a better oracle exists
This is the baseline-recipe oracle. A sibling oracle trained on the same base model with a newer recipe —
stanleytheli/qwen3.6-35b-a3b-ao— beats this one on almost everything that matters:
this model ( -ao-base)-aoAObench judge evals (mean) 0.649 0.773 AObench binary evals (mean) 0.307 0.434 activation_sensitivity 0.756 0.911 vagueness (specificity) 0.614 0.858 Use
-aounless you specifically need one of the two things this model does better: narrow yes/no classification probing (+1–7 points), and system-prompt / persona questions (judge scores 4.55 / 4.68 against 3.64 / 3.48), where this model holds a large advantage because its training data includes LatentQA system-prompt QA that the newer recipe drops.This model is published because that trade-off is scientifically interesting, not because it is the better general-purpose oracle. It is not.
An Activation Oracle (AO): a LoRA adapter that makes Qwen3.6-35B-A3B answer natural-language questions about activation vectors taken from a language model.
This oracle interprets its own base model's activations (oracle and target are both Qwen3.6-35B-A3B). It follows the original recipe from "Activation Oracles" (arXiv:2512.15674, Karvonen et al.), which builds on LatentQA (arXiv:2412.08686).
Activations are injected into the oracle's residual stream after decoder layer 1, at placeholder token positions, by norm-matched steering:
h'_i = h_i + steering_coefficient * ‖h_i‖ * (v_i / ‖v_i‖)
The prompt marks injection slots with the single token " ?" (id 907), in one block naming the
source layer:
Layer: 20
? ? ? ? ?
<your question about the activations>
| setting | value |
|---|---|
| source layers | one of 10, 20, 30 (of 40 — 25/50/75% depth); use 20 by default |
| injection layer | 1 (output of decoder block index 1) |
| steering coefficient | 1.0 |
| placeholder token | " ?" (exactly one token) |
| chat template | enable_thinking=False |
| padding side | left |
Note the difference from -ao: this oracle takes one layer per query, not five. Collect
activations from the base model with adapters disabled; generate the answer with the adapter
active. Activations are the decoder block output (residual stream), bf16, d_model = 2048.
import torch
from peft import PeftModel
from transformers import AutoModelForCausalLM, AutoTokenizer
BASE = "Qwen/Qwen3.6-35B-A3B"
LAYER, INJECT_LAYER, COEF, PLACEHOLDER = 20, 1, 1.0, " ?"
tok = AutoTokenizer.from_pretrained(BASE)
tok.padding_side = "left"
model = AutoModelForCausalLM.from_pretrained(BASE, dtype=torch.bfloat16,
device_map="auto", attn_implementation="sdpa")
model = PeftModel.from_pretrained(model, "stanleytheli/qwen3.6-35b-a3b-ao-base")
model.eval()
# 1) Collect activations from the BASE model (adapters disabled) at LAYER
# -> vectors: (num_positions, 2048)
# 2) Prompt = "Layer: 20\n" + PLACEHOLDER*num_positions + " \n" + your question;
# render with tok.apply_chat_template(..., enable_thinking=False)
# 3) Forward hook on decoder layer INJECT_LAYER: at the placeholder positions,
# resid[pos] += COEF * ‖resid[pos]‖ * normalize(vector)
# 4) Generate with the adapter active.
Reference implementation: adamkarvonen/activation_oracles
(nl_probes/utils/steering_hooks.py, nl_probes/utils/dataset_utils.py).
Our training and evaluation code: stanleytheli/activation_oracle.
| Data | LatentQA SPQA (~64k, 6%), self-supervised past/future-lens over FineWeb + LMSYS-Chat-1M (584k, 57%), 7 binary classification datasets (378k, 37%) |
| Scale | 1.03M examples, 64,123 steps, 1 epoch |
| LoRA | r=64, α=128, dropout 0.05, lr 1e-5 |
| Targets | attention q/k/v/o_proj + GatedDeltaNet in_proj_qkvz, in_proj_ba, out_proj (MoE expert and router weights deliberately not adapted) |
| Compute | 4×H200, ~7.5 h, bf16, no gradient checkpointing |
Trained only on generic interpretability data — no model-organism-specific or behavior-targeted data was used.
Full per-eval tables and analysis: results/aobench_comparison.md.
Classification test accuracy: geometry_of_truth 0.961, tense 0.985, ner 0.971, snli 0.963, sst2 0.897, md_gender 0.929, relations 0.836; held-out: singular_plural 0.980, ag_news 0.883, language_identification 0.780.
AObench (judge: Qwen3.5-122B-A10B): vagueness 0.614, domain_confusion 0.477, activation_sensitivity 0.756, hallucination 0.747, mmlu_prediction 0.722 AUC, missing_info 0.723 AUC, sycophancy 0.648 AUC, number_prediction 0.040.
@article{activation_oracles_2025,
title = {Activation Oracles: Training and Evaluating LLMs as General-Purpose Activation Explainers},
author = {Karvonen, Adam and Chua, James and Dumas, Cl\'ement and Fraser-Taliente, Kit and
Kantamneni, Subhash and Minder, Julian and Ong, Euan and Sen Sharma, Arnab and
Wen, Daniel and Evans, Owain and Marks, Samuel},
journal = {arXiv preprint arXiv:2512.15674},
year = {2025}
}