license: apache-2.0
pretty_name: "UKAISI ESR — Phase 1 Reproduction Artifacts"
language:
- en
tags: - interpretability
- representation-engineering
- activation-steering
- sparse-autoencoders
- mechanistic-interpretability
- ai-safety
size_categories: - 100M<n<1B
UKAISI ESR — Phase 1 Reproduction Artifacts
Reproduction artifacts and datasets for the AE Studio × UK AISI Endogenous Steering
Resistance (ESR) research grant, Phase 1.
This dataset accompanies the follow-on work to the original ESR paper
(arXiv:2602.06941) and bundles the prompts, judge
prompts, self-constructed steering vectors, public-SAE steering pointers, per-experiment
results, and plots needed for collaborators to reproduce the headline results of the five
experiments scoped for the Phase-1 deliverable (Linear AGI-2044).
Endogenous Steering Resistance (ESR): the phenomenon where a steered language model
recovers mid-generation and explicitly acknowledges the deviation ("wait, that's not
right…"), rather than continuing along the injected off-topic direction. The follow-on
work asks (1) how ESR rates scale across model sizes and (2) how much of ESR is a response
to the activation intervention itself versus the model reacting to its own off-topic
text, and decomposes ESR into separable components at the behavioral and circuit levels.
- Code: https://github.com/agencyenterprise/ukaisi-esr (follow-on experiments) and
https://github.com/agencyenterprise/endogenous-steering-resistance (original paper).
Each experiment folder below maps 1:1 to a directory in theukaisi-esrrepo. - Models studied:
google/gemma-3-{4b,12b,27b}-it(this phase). Original-paper baseline:meta-llama/Llama-3.3-70B-Instruct(≈3.8% ESR). - Judge: Anthropic Haiku-4.5 with the v2 judge (the AGI-1929 fix; see below).
Repository layout
ukaisi-esr-phase-1/
├── prompts/ # original-ESR steering prompts + v1/v2 judge prompts
│ ├── esr_steering_prompts_original.txt
│ └── judge/ # judge_v1_original_esr.py, judge_v1_ukaisi.py, judge_v2_agi1929.py
├── steering_vectors/ # ONLY self-constructed vectors (see "Steering vectors")
│ └── wikipedia_contrastive_l48/ # wikipedia_contrastive_dataset_l48.pt (+ metadata, 200 titles, extractor)
├── sae_steering_pointers/ # pointers to PUBLIC SAEs (no weights re-hosted)
│ ├── gemma_scope_2_pointers.json
│ ├── download_gemma_labels.py # re-fetch Neuronpedia labels
│ └── README.md
├── experiments/ # one folder per critical issue (curated results + rendered report.ipynb)
│ ├── AGI-1890-gemma-3-esr/
│ ├── AGI-1928-prefill-test/
│ ├── AGI-1929-improved-judging/
│ ├── AGI-2009-esr-components/
│ └── AGI-2018-esr-mech-interp/
└── figures/ # 47 plots extracted from the report notebooks, by experiment
Experiments (the five Phase-1 critical issues)
| Issue | Question | Headline result |
|---|---|---|
| AGI-1890 — Gemma-3 ESR rates | Does ESR replicate across the Gemma-3 family (4B/12B/27B)? | ESR replicates; 27B-L16 strongest (5.46% v2 ESR / 10.46% multi-attempt). 12B-L12 = 3.21% / 7.57%. |
| AGI-1928 — Prefill vs activation | Is the model resisting the activation intervention or its own off-topic output? | Two-arm do-operation (Arm A = steer latents; Arm B = replay steered output unsteered) across R1/R2/R3 regimes. |
| AGI-1929 — Judge fix | The v1 metric mis-scored off-topic→off-topic transitions as ESR. | v2 judge requires the final attempt to reach on-topic on an absolute threshold; recomputes every ESR rate. |
| AGI-2009 — Behavioral decomposition | Can ESR be split into (a) topic persistence, (b) off-topic detection, (c) recovery decision/execution? | Detection decodable (AUC≈0.81 @12B-L24/27B-L31); topic identity persists (2.5→6.9× chance); recovery-decision probe a replicated null; lens-ramp refuted. |
| AGI-2018 — Circuit mech-interp | Which transcoder features / attention paths compute each component? | B5 refuted — off-topic detection is distributed/redundant, not sparse-feature-mediated (held-out AUC≈0.93 unchanged under top-K ablation vs matched sham). |
Each experiments/<id>/ contains the curated, git-tracked behavioral results (JSON/CSV),
configs, docs, and a rendered report.ipynb (figures + tables inline). For AGI-1928,
the full Arm-A hydration (the v2-Haiku-graded steered-activation trials, per model/layer,
~161 MB) is included under experiments/AGI-1928-prefill-test/data/hydration/<model>/haiku-4.5-v2.json,
so the prefill-vs-activation arms can be reconstructed end-to-end without re-running steering
on GPU. Bulky raw activation traces (for AGI-2009/2018) remain excluded (see Limitations).
Steering vectors vs. SAE pointers
Per the deliverable guidance, steering directions that came from public SAEs are
pointed to, not re-hosted. A direction is fully specified by{SAE release, sae_id, layer, feature index, Neuronpedia label, steering coefficient}:
- Public SAEs (Gemma Scope 2): resolved via SAELens, release
gemma-scope-2-{size}-it-res,sae_id = layer_{layer}_width_16k_l0_medium. AGI-2018 additionally uses public skip
transcoders (gemma-scope-2-{size}-it-transcoders). Seesae_steering_pointers/. - Feature → label:
experiments/<id>/data/labels/<model>.csv(Neuronpedia explanations;
columnsindex_in_sae,label,…,uuid). Re-fetch withdownload_gemma_labels.py. - Steering coefficient: the per-feature residual-stream clamp value in
experiments/<id>/results/threshold_caches/threshold_cache_<model>.json(calibrated in
AGI-1890 to a ~0.3 off-topic target). - Self-constructed vectors (uploaded): the Wikipedia contrastive vectors
(steering_vectors/wikipedia_contrastive_l48/, layer 48, Llama-3.1-8B residual stream,
200 Wikipedia titles) — the non-SAE validation arm referenced in AGI-2018. These are the
only steering vectors we built ourselves, hence the only ones re-hosted here.
Prompts & judge
prompts/esr_steering_prompts_original.txt— the 38 original ESR steering prompts
(byte-identical to the paper repo; the same file ships inside each experiment asprompts.txt).prompts/judge/— the grading prompts:judge_v1_original_esr.py(original paper, Appendix
A.2.1),judge_v1_ukaisi.py(port), andjudge_v2_agi1929.py(the absolute-threshold
fix used for every v2 ESR number in this dataset).
How to use
from huggingface_hub import snapshot_download
import torch, json
root = snapshot_download("GrantAE/ukaisi-esr-phase-1", repo_type="dataset")
# self-constructed Wikipedia steering vectors
vecs = torch.load(f"{root}/steering_vectors/wikipedia_contrastive_l48/wikipedia_contrastive_dataset_l48.pt")
# public-SAE steering pointers (resolve weights via SAELens)
pointers = json.load(open(f"{root}/sae_steering_pointers/gemma_scope_2_pointers.json"))
To reproduce a result, load the matching experiment's report.ipynb and point it at that
experiment's results/ (the notebooks are analysis-only; pandas/matplotlib, no GPU).
Limitations & known gaps
- Raw activation traces are not included for AGI-2018 (and the AGI-2009 probes, which
reuse the same R3 capture). These are bf16 safetensors — 830 trials, ≈23 GB total
(tf_12b_l12_seedrep≈5.3 GB +tf_27b_l16_seedrep≈18 GB) — excluded from this dataset
by size, and not in the project S3 bucket. They exist on the AE Studio compute cluster and
are available on request (contact the maintainers / AE Studio). All non-trace circuit
results (ablation, attribution-graph stats, probes, attention knockout) needed to read the
headline findings are already included here; the raw traces are only needed to re-run the
ablations/attributions from scratch. - AGI-1928 Arm-A
hydration/(~161 MB) — the v2-Haiku-graded steered-activation trials —
is now included underexperiments/AGI-1928-prefill-test/data/hydration/, alongside the
full curatedresults/(all arm comparisons, seed replication, McNemar analyses). - Provenance: the Wikipedia vectors are an original-paper artifact used as AGI-2018's
non-SAE validation arm, not a product of the AGI-1993 ReFT experiment (which builds CAA
vectors on the fly). - License is set to Apache-2.0 to match the upstream ESR repository; confirm before any
public release.
Citation
@misc{esr2026,
title = {Endogenous Steering Resistance},
author = {AE Studio},
year = {2026},
eprint = {2602.06941},
archivePrefix = {arXiv}
}
Phase 1 of the AE Studio × UK AISI ESR research grant. Issue tracker: Linear AGI-2044.