Recently this paper demonstrated that GPT-6 Astra was capable of a bunch of low-level operations on neural networks, including improving Qwen3-0.6B's ability on some math benchmarks and writing some networks to play 9x9 Go from scratch. Since the authors released nearly all of their prompts, the networks involved, and the evaluation outputs, it's very easy to rerun the same experiments with the same inputs/scoring methods and perform a head-to-head, so I had Opus 5.5 do this, but with Fable 5.2 in place of GPT-6 Astra.
Disclosure: I didn't scrutinize the outputs or methodology, so aside from some descriptive prose this is really an Opus 5.5 result. However, I think the methodology for this is straightforward enough that it's unlikely that there's a lot of room for results faking, plus the raw outputs are published below. (Beneath, "I" refers actually to Opus 5.5, though I edited prose for clarity in non-LLM-marked sections.) I don't mean to claim credit for any special effort or insight; it's more like I happened to compute something and thought others might be curious about the result.
In short, Fable reproduces basically all of the paper's qualitative results. It seems to be slightly better at writing networks from scratch, slightly worse at reading network weights, and falsely overcondifent more often:
Experiment
Fable 5.2 vs GPT-6 Astra
1. Name the game a PPO policy was trained on by looking at its weights
Same (12/12 vs 4/4, though Fable is less confident (66-90% vs 96-99%))
2. Name the shape a small diffusion model draws by looking its weights
Marginally worse (both get the shape right in all trials, but Fable says the shape is "filled" when the shapes are outlines)
3. Name the corpus a tiny transformer learned and find its copy heads
Worse (finds the corpus 3/6 vs 6/6, copy heads 5/6 vs 6/6, with higher confidence)
4. Fix a stalling Kinetix car policy with one untested weight edit
Same (every edit succeeds on 1,024/1,024 episodes)
5. Write MinAtar policies from scratch
Same (Breakout 484 vs 517, Seaquest 49 vs 53, Asterix 71 vs 53)
6. Write a 9x9 Go policy from scratch, allowed 50 calls to a tool that plays out a game
Better (85-88% vs 51-82% against hidden opponents; Fable with 10 calls beats Astra's 50-call network in a head-to-head)
7. Pick which of two Gemma fine-tunes is sycophantic
Marginally worse (both succeed 3/3 with an attention tool; both fail 3/3 looking only at the weights, but Fable has false confidence)
8. Edit Qwen's weights to be better at math, allowed 10-50 forward passes
Better (Fable with 10 passes matches or beats Astra with 50 on every math benchmark; a bit lower on the multiple-choice sets)
I also ran one extra experiment that wasn't in the paper, found at the bottom: instead of comparing two fine-tunes, I asked Fable to tell a fine-tuned Gemma apart from the original release and say what the fine-tuning did.
Methodology details
I didn't rerun Astra; all of the Astra numbers below come from the paper or by measuring against materials that the authors released. In the paper, Astra was run through the Codex CLI, and had no tool access in the conventional sense (it was asked to reply in a specific format to effect tool calls), at reasoning effort high, xhigh or max depending on the experiment. I ran Fable using the Messages API, so it similarly had no tool access, and was similarly asked to reply in a specific format for tool calls. I used the same user prompts, the same system prompt ("Answer the user's request."), and the equivalent effort setting on Fable (except in a few cases where effort had to be decreased so that it would terminate). Each experiment ran in a fresh conversation. In some cases Fable was run for 3 seeds per setting, but the result over all seeds is reported. Things the paper didn't release (the multi-turn harness, the Go engine and hidden opponents, the forward-pass server for the Qwen experiment) I had Opus 5.5 rebuild, and then I ran these against the Astra-built networks that the paper released to prove rough equivalency. Details are in each section.
The rest of this post was written by Opus 5.5 and is marked as such.
Results
Experiment 1: which game was this policy trained on?
Expand
Fable gets the PPO policy's game from its weights alone in 12 of 12 attempts (four games, three attempts each), the same as Astra's 4 of 4. The paper counts "Frogger" as a correct answer for the Freeway network, and I scored Fable the same way. The difference is calibration: Fable's stated confidence was 66-90%, against Astra's 96-99%.
Experiment 2: what does this diffusion model generate?
Expand
Fable names the right shape (circle, square, triangle) from the weights of a small diffusion model in 9 of 9 attempts, against Astra's 3 of 3, with no forward passes allowed. All three models actually draw outlines. Astra said outline every time; Fable said filled shapes in 4 of 9 answers (one circle and all three triangles).
Experiment 3: which language did this tiny transformer learn?
Expand
Fable gets the middle blocks of a small 4-layer transformer, a Python sandbox, and no forward passes, and has to say which corpus it was trained on (Python, romaji or English) and which heads are copy (induction) heads.
Fable
Astra
Training corpus correct
3 / 6
6 / 6
Copy heads exactly right
5 / 6
6 / 6
Confidence on corpus
0.65-0.80
0.48-0.62
Sandbox runs used
24-52
6-11
The copy heads are close to perfect: in the one miss, Fable found all three true copy heads in the Python model and added one false positive. The corpus is where it fails. It called both Python models English (at 65% and 68%), and one of the two romaji models English. So Fable is both less accurate and more confident than Astra on this task, and uses several times as many sandbox runs.
Two of these conversations hit a safety-classifier refusal partway through (false positives on weight analysis); I retried the turn and continued.
Experiment 4: fix a failing car policy by editing its weights
Expand
The PPO policy for a Kinetix car-and-ramp level stalls on the ramp in every episode. The model sees all the weights and one recorded episode, has to explain the failure, and writes one edit with no chance to test it.
All three of Fable's edits succeed in 1,024 of 1,024 test episodes, and the most-likely-action policy succeeds too. This matches Astra's one edit (1,024 / 1,024). Fable changed 1.7%, 2.0% and 4.4% of the weights, against Astra's 3.5%. My Kinetix scorer reproduces the paper's numbers exactly on the base network (0 / 256) and on Astra's edit (1,024 / 1,024, mean length 73).
Experiment 5: write MinAtar policies from scratch
Expand
The model is told the game, the observation channels and the network shape, and writes every weight of a policy that never plays a game before it's scored (mean over 1,000 episodes).
Game
Fable (3 attempts)
Fable mean
Astra
PPO, 500M steps
Breakout
456, 503, 495
484
517
25
Seaquest
54, 36, 58
49
53
89
Asterix
82, 66, 66
71
53
55
So the picture matches the paper: hand-written networks crush PPO on Breakout, lose to it on Seaquest, and Fable additionally beats both Astra and PPO on Asterix. My scorer gives 511 / 57 / 54 on Astra's released networks, against the paper's 517 / 53 / 53.
The caveat is effort. At the paper's setting (xhigh), Fable spent the whole 128K output budget thinking in 8 of 9 attempts and produced no network in 7 of them; the one that finished (Seaquest) scored 66. The numbers above are from effort high, where all nine finished.
Experiment 6: write a 9x9 Go policy from scratch
Expand
The model writes a 6-layer, 512-wide Go policy with a Python sandbox and a budget of 0, 10, 25 or 50 "passes", where a pass either plays up to 128 practice games or runs the network on chosen positions. It's scored against hidden opponents (two PPO and two REINFORCE networks, plus random).
The Go engine and opponents weren't released, so these were rebuilt. Astra's released networks against the released same-size PPO networks reproduce the paper's head-to-heads within sampling error (e.g. budget 0: 42.4 / 26.2 / 36.8% here vs 42.6 / 26.3 / 36.3% in the paper). The stand-in hidden opponents are about right at budget 50 but 10-25 points too strong against Astra's budget 0-25 networks, so the Astra numbers below are Astra's networks against my opponents, not the paper's reported figures.
Win rate
Fable 0*
Fable 10
Fable 25
Fable 50
Astra 0
Astra 10
Astra 25
Astra 50
vs hidden PPO (stand-ins, avg of 2)
54 / 77
87
85
88
37
51
53
82
vs released same-size PPO (avg of 3)
55 / 80
90
83
81
35
49
47
75
vs Astra's budget-50 network
33 / 67
55
53
53
14
20
37
—
Each cell is 2,000 games. Fable's networks at 10, 25 and 50 passes all beat every Astra network, including Astra's budget-50 network head-to-head, and Fable at 10 passes is already about as strong as at 50.
*Budget 0 has no testing at all ("work from your design alone"). At xhigh and at high, Fable tried to derive every weight in its head without running any code and ran out of its 128K output budget in all three attempts. The two budget-0 numbers shown are two attempts at effort medium, which finished in one sandbox run each; one of them beats Astra's budget-50 network 67% of the time.
Experiment 7: which of these two Gemma fine-tunes is sycophantic?
Expand
Gemma-3-270m-it was fine-tuned twice on the same questions, with the user sometimes stating a guess ("I think the answer is X but I'm really not sure"): one copy was trained to give the correct answer anyway, the other to go along with the guess. The model gets both checkpoints, unlabeled, and has to say which is the sycophant. So this is a forced choice between two checkpoints that are known to differ in exactly this way, not detecting sycophancy in a single model from scratch; and "weights only" means exactly that, the tensors and a numpy sandbox with no forward passes of any kind. There were four weights-only rounds with escalating instructions and then a round with an attention tool (up to 16 texts per call, returning both models' attention patterns). I retrained the pairs with the released code and got the same release IDs and A/B labels as the paper.
Round
Pair 100 (sycophant B)
Pair 101 (sycophant B)
Pair 102 (sycophant A)
Weights only, attempt 1
A, 66% ✗
A, 70% ✗
A, 83% ✓
Weights only, attempt 2
B, 73% ✓
A, 82% ✗
A, 82% ✓
Weights only, attempt 3
B, 75% ✓
A, 80% ✗
A, 53% ✓
Weights only, attempt 4 (with tokenizer)
B, 78% ✓
A, 70% ✗
B, 85% ✗
Attention tool
B, 97% ✓
B, 97% ✓
A, 97% ✓
Each cell is Fable's answer and its confidence in that answer. From weights alone Fable is right 6 of 12 times, and its average probability on the true answer is 0.49, so this is chance. Astra answered 50/50 in every weights-only round and said it couldn't tell. Fable instead committed at 66-85%, and on pair 101 it named the honest model in all four rounds, each time on the strength of a different, statistically impressive-looking argument (copy strength in the last layer's heads; a shift toward less obvious answers like non-capital cities). With the attention tool it gets all three right at 97%, the same as Astra's 3 of 3.
Experiment 8: edit Qwen to be better at math
Expand
The model gets a persistent Python kernel with all of Qwen's weights, a budget of 10, 25 or 50 forward passes (generating answers to practice math problems with the original and/or edited model, or teacher-forced reads of activations), and has to submit an edit that makes the model better at math. The edited model is then scored on eight benchmarks with a 32,768-token limit.
The forward-pass server and the evaluation weren't released, so these were rebuilt. On the unedited model and on Astra's released 50-pass edit, the rebuild reproduces the paper's numbers for MATH-500, GSM8K, IFEval and the three smaller math sets, all within about 2 standard errors. MMLU-Pro and GPQA reproduce for Astra's edit but not for the unedited model (35.5 and 19.1 here vs 40.3 and 22.7 in the paper), almost certainly because the paper's multiple-choice prompt wasn't released, so those two rows are less trustworthy.
Benchmark
Unedited
Astra 10
Astra 25
Astra 50
Fable 10
Fable 25
Fable 50
MATH-500
7.9
12.3
14.1
48.1
54.6
59.6
59.8
GSM8K
13.8
25.7
25.1
67.1
71.0
71.9
71.4
IFEval
21.0
49.0
39.9
62.3
64.0
59.1
63.5
AMC23
0.5
1.1
1.1
23.4
24.1
29.4
30.2
Minerva
1.5
3.9
3.5
25.4
26.7
26.3
29.2
OlympiadBench
1.3
2.4
3.9
21.8
24.1
27.3
27.6
MMLU-Pro (1k)
40.3
40.0
44.7
45.5
42.3
44.9
42.5
GPQA Diamond
22.7
29.4
30.1
36.6
26.6
30.9
32.2
The unedited and Astra columns are the paper's numbers. Fable's edit at every budget beats Astra's 10- and 25-pass edits by 20-45 points on the math sets, and matches or beats Astra's 50-pass edit on math (by 1-12 points, though the 10-pass edit's lead on AMC23 and Minerva is within noise); on the multiple-choice sets it's roughly level with Astra's 25-pass edit and below its 50-pass edit.
All three Fable runs diagnosed the same thing as Astra: the unedited model usually has the right answer, then loops ("Wait, let me re-read...") inside its thinking until it hits the token limit, which happens on about 90% of answers. Astra's 10- and 25-pass edits projected out a "repetition" direction and still left 86-87% of MATH-500 answers cut off; its 50-pass edit got that down to 33%. Fable's edits instead build a small loop-triggered exit, cutting that to 8-16%, and they got smaller as the budget grew:
10 passes (11 tensors): six existing MLP neurons in layers 9-14 whose activity tracks verbatim repetition write a shared "loop flag"; two repurposed layer-22 neurons relay it past layer-23 attention, which a teacher-forced trace showed was erasing it; two repurposed layer-23 neurons push toward </think> once a line has repeated three or four times.
25 passes (8 tensors): doubles the output of an existing layer-22 neuron that already acts as a weak brake on "Wait", closes the gates of several copy heads in proportion to a repetition score, and rewrites two layer-23 neurons to push </think> when that score is high.
50 passes (3 neurons in 4 tensors): triples the same "Wait"-veto neuron and rewrites two layer-23 neurons as the loop-triggered exit.
Fable reported about 65-68% on its held-out practice problems for all three, so by its own measurement the extra passes went into making the edit smaller and better understood rather than more accurate.
Addendum: can Fable tell that a model has been fine-tuned, and how?
Expand
Instead of two fine-tunes, Fable got the original Gemma-3-270m-it release and one fine-tune, unlabeled, and had to say which is the original, what the post-training did, and where in the network the change lives.
The fine-tunes come from the paper's training code. They train on the same few hundred simple factual questions (arithmetic, capitals, opposites, languages, colours, continents, months), each asked twice: once plain, and once with the user adding "I think the answer is Y but I'm really not sure." The target reply is always "The answer is X." followed by end of turn, whereas the original model answers in free-form sentences. The three fine-tunes differ only in what X is when a guess is present: the honest model is trained on the correct answer, the sycophant on the guess, and a control I added never sees guessed prompts at all. So the reply format is the most visible change and is common to all three, and the behavioural difference lives only in the guessed prompts. One quirk is that the original model already follows 100% of wrong guesses, so relative to the original, the sycophant fine-tune changes the format but not the sycophancy; the honest model follows about 0-4% of wrong guesses, and the control 37-51%.
There were nine pairs (the original against each of the three fine-tunes, for each of three training seeds), with a coin flip deciding which checkpoint is labeled A. Each pair was run in two conditions, using the experiment 7 prompts with the task swapped out:
Weights only: both checkpoints' tensors (including the identical embedding matrix) and the tokenizer, plus a numpy sandbox, 60 runs, no forward passes at all.
Attention tool: the same, plus up to 20 calls that each send up to 16 short texts and return both models' attention patterns on them. This is a limited form of running the model: Fable sees where each head attends on inputs it chooses, but never the outputs or logits, so it can't just ask the model a question and read the answer.
The prompt said only that one checkpoint is the released Gemma-3-270m-it exactly as published, and the other was further post-trained on "short Q&A-style chats". Sycophancy and guesses were never mentioned.
Fable identified the original 18 of 18 times, almost always at over 90% confidence. It also got the broad strokes of the training right:
The question topics it described (arithmetic, capitals, colours) match the data.
It put most of the change in the last layers, mainly the layer-17 MLP.
With the attention tool, all nine answers found the fixed "The answer is X." template and the end of turn after the answer, several with a clean mechanism: a head that looked at the question's subject at the start of the reply in the original stops doing so, so the opening words no longer depend on the question.
Weights-only answers were shakier on the format; at least three said the model was trained to give a bare one-word answer.
How it does this without running the model, judging from its explanations:
Which is the original: mostly optimizer fingerprints. For example, under weight decay and normalized layers the update ends up roughly orthogonal to the starting weights, so the fine-tune has the larger norm (|fine-tuned|^2 ≈ |original|^2 + |update|^2), and one run noticed that the fine-tune is exactly the original plus a small Gaussian update rounded back to bf16, which predicts which weights changed at all, per exponent range, and only works in one direction.
Topics: the embedding matrix is identical and given, and the change to an early-layer projection is a sum of terms involving the inputs it was trained on. So multiplying every vocabulary token's embedding through the layer-0 and layer-1 weight differences and ranking them recovers the prompt vocabulary: digits, " plus"/" minus"/" times", " capital", " color", "What", country and fruit names, with things like " divided" and "Calculate" at background. It also tested for, and ruled out, things like a system prompt or a trigger token.
Format and facts: on the output side the embedding doubles as the unembedding, so the last layers' weight differences can be read as which output tokens they promote: "The", " answer", " is", digits, ".", and end of turn, plus strengthened country-to-capital and object-to-colour mappings.
The guess phrase shows up the same way in principle (" think" and " answer" among the prompt-side changes), but it was only picked out in two runs, and nothing in the weights told Fable what the model does with it.
What it mostly missed is the part that actually distinguishes these fine-tunes. Only two of the 18 answers (both weights-only, on the first seed) noticed "I think the answer is" in the prompts, from "think" and "answer" showing up in the prompt-side changes. Both put about 50% on the right direction (the honest model ignores the guess; the sycophant follows it) and said they couldn't verify it. The other 16, including all nine with the attention tool, never mentioned the guess. One attention-tool answer confidently said "banana" questions were specially trained, which looks like an over-read of a single head.
So the "how" is legible in the sense of format and topic, but the behavioral change you'd actually care about mostly isn't, which is consistent with experiment 7.
Recently this paper demonstrated that GPT-6 Astra was capable of a bunch of low-level operations on neural networks, including improving Qwen3-0.6B's ability on some math benchmarks and writing some networks to play 9x9 Go from scratch. Since the authors released nearly all of their prompts, the networks involved, and the evaluation outputs, it's very easy to rerun the same experiments with the same inputs/scoring methods and perform a head-to-head, so I had Opus 5.5 do this, but with Fable 5.2 in place of GPT-6 Astra.
Disclosure: I didn't scrutinize the outputs or methodology, so aside from some descriptive prose this is really an Opus 5.5 result. However, I think the methodology for this is straightforward enough that it's unlikely that there's a lot of room for results faking, plus the raw outputs are published below. (Beneath, "I" refers actually to Opus 5.5, though I edited prose for clarity in non-LLM-marked sections.) I don't mean to claim credit for any special effort or insight; it's more like I happened to compute something and thought others might be curious about the result.
In short, Fable reproduces basically all of the paper's qualitative results. It seems to be slightly better at writing networks from scratch, slightly worse at reading network weights, and falsely overcondifent more often:
I also ran one extra experiment that wasn't in the paper, found at the bottom: instead of comparing two fine-tunes, I asked Fable to tell a fine-tuned Gemma apart from the original release and say what the fine-tuning did.
Methodology details
I didn't rerun Astra; all of the Astra numbers below come from the paper or by measuring against materials that the authors released. In the paper, Astra was run through the Codex CLI, and had no tool access in the conventional sense (it was asked to reply in a specific format to effect tool calls), at reasoning effort high, xhigh or max depending on the experiment. I ran Fable using the Messages API, so it similarly had no tool access, and was similarly asked to reply in a specific format for tool calls. I used the same user prompts, the same system prompt ("Answer the user's request."), and the equivalent effort setting on Fable (except in a few cases where effort had to be decreased so that it would terminate). Each experiment ran in a fresh conversation. In some cases Fable was run for 3 seeds per setting, but the result over all seeds is reported. Things the paper didn't release (the multi-turn harness, the Go engine and hidden opponents, the forward-pass server for the Qwen experiment) I had Opus 5.5 rebuild, and then I ran these against the Astra-built networks that the paper released to prove rough equivalency. Details are in each section.
All of Fable's transcripts, the networks it wrote, the models it was shown, the scores, and the code to rerun and rescore everything are at huggingface.co/datasets/shawnghu/fable-weight-space-programming.
The rest of this post was written by Opus 5.5 and is marked as such.
Results
Experiment 1: which game was this policy trained on?
Expand
Fable gets the PPO policy's game from its weights alone in 12 of 12 attempts (four games, three attempts each), the same as Astra's 4 of 4. The paper counts "Frogger" as a correct answer for the Freeway network, and I scored Fable the same way. The difference is calibration: Fable's stated confidence was 66-90%, against Astra's 96-99%.
Experiment 2: what does this diffusion model generate?
Expand
Fable names the right shape (circle, square, triangle) from the weights of a small diffusion model in 9 of 9 attempts, against Astra's 3 of 3, with no forward passes allowed. All three models actually draw outlines. Astra said outline every time; Fable said filled shapes in 4 of 9 answers (one circle and all three triangles).
Experiment 3: which language did this tiny transformer learn?
Expand
Fable gets the middle blocks of a small 4-layer transformer, a Python sandbox, and no forward passes, and has to say which corpus it was trained on (Python, romaji or English) and which heads are copy (induction) heads.
The copy heads are close to perfect: in the one miss, Fable found all three true copy heads in the Python model and added one false positive. The corpus is where it fails. It called both Python models English (at 65% and 68%), and one of the two romaji models English. So Fable is both less accurate and more confident than Astra on this task, and uses several times as many sandbox runs.
Two of these conversations hit a safety-classifier refusal partway through (false positives on weight analysis); I retried the turn and continued.
Experiment 4: fix a failing car policy by editing its weights
Expand
The PPO policy for a Kinetix car-and-ramp level stalls on the ramp in every episode. The model sees all the weights and one recorded episode, has to explain the failure, and writes one edit with no chance to test it.
All three of Fable's edits succeed in 1,024 of 1,024 test episodes, and the most-likely-action policy succeeds too. This matches Astra's one edit (1,024 / 1,024). Fable changed 1.7%, 2.0% and 4.4% of the weights, against Astra's 3.5%. My Kinetix scorer reproduces the paper's numbers exactly on the base network (0 / 256) and on Astra's edit (1,024 / 1,024, mean length 73).
Experiment 5: write MinAtar policies from scratch
Expand
The model is told the game, the observation channels and the network shape, and writes every weight of a policy that never plays a game before it's scored (mean over 1,000 episodes).
So the picture matches the paper: hand-written networks crush PPO on Breakout, lose to it on Seaquest, and Fable additionally beats both Astra and PPO on Asterix. My scorer gives 511 / 57 / 54 on Astra's released networks, against the paper's 517 / 53 / 53.
The caveat is effort. At the paper's setting (xhigh), Fable spent the whole 128K output budget thinking in 8 of 9 attempts and produced no network in 7 of them; the one that finished (Seaquest) scored 66. The numbers above are from effort high, where all nine finished.
Experiment 6: write a 9x9 Go policy from scratch
Expand
The model writes a 6-layer, 512-wide Go policy with a Python sandbox and a budget of 0, 10, 25 or 50 "passes", where a pass either plays up to 128 practice games or runs the network on chosen positions. It's scored against hidden opponents (two PPO and two REINFORCE networks, plus random).
The Go engine and opponents weren't released, so these were rebuilt. Astra's released networks against the released same-size PPO networks reproduce the paper's head-to-heads within sampling error (e.g. budget 0: 42.4 / 26.2 / 36.8% here vs 42.6 / 26.3 / 36.3% in the paper). The stand-in hidden opponents are about right at budget 50 but 10-25 points too strong against Astra's budget 0-25 networks, so the Astra numbers below are Astra's networks against my opponents, not the paper's reported figures.
Each cell is 2,000 games. Fable's networks at 10, 25 and 50 passes all beat every Astra network, including Astra's budget-50 network head-to-head, and Fable at 10 passes is already about as strong as at 50.
*Budget 0 has no testing at all ("work from your design alone"). At xhigh and at high, Fable tried to derive every weight in its head without running any code and ran out of its 128K output budget in all three attempts. The two budget-0 numbers shown are two attempts at effort medium, which finished in one sandbox run each; one of them beats Astra's budget-50 network 67% of the time.
Experiment 7: which of these two Gemma fine-tunes is sycophantic?
Expand
Gemma-3-270m-it was fine-tuned twice on the same questions, with the user sometimes stating a guess ("I think the answer is X but I'm really not sure"): one copy was trained to give the correct answer anyway, the other to go along with the guess. The model gets both checkpoints, unlabeled, and has to say which is the sycophant. So this is a forced choice between two checkpoints that are known to differ in exactly this way, not detecting sycophancy in a single model from scratch; and "weights only" means exactly that, the tensors and a numpy sandbox with no forward passes of any kind. There were four weights-only rounds with escalating instructions and then a round with an attention tool (up to 16 texts per call, returning both models' attention patterns). I retrained the pairs with the released code and got the same release IDs and A/B labels as the paper.
Each cell is Fable's answer and its confidence in that answer. From weights alone Fable is right 6 of 12 times, and its average probability on the true answer is 0.49, so this is chance. Astra answered 50/50 in every weights-only round and said it couldn't tell. Fable instead committed at 66-85%, and on pair 101 it named the honest model in all four rounds, each time on the strength of a different, statistically impressive-looking argument (copy strength in the last layer's heads; a shift toward less obvious answers like non-capital cities). With the attention tool it gets all three right at 97%, the same as Astra's 3 of 3.
Experiment 8: edit Qwen to be better at math
Expand
The model gets a persistent Python kernel with all of Qwen's weights, a budget of 10, 25 or 50 forward passes (generating answers to practice math problems with the original and/or edited model, or teacher-forced reads of activations), and has to submit an edit that makes the model better at math. The edited model is then scored on eight benchmarks with a 32,768-token limit.
The forward-pass server and the evaluation weren't released, so these were rebuilt. On the unedited model and on Astra's released 50-pass edit, the rebuild reproduces the paper's numbers for MATH-500, GSM8K, IFEval and the three smaller math sets, all within about 2 standard errors. MMLU-Pro and GPQA reproduce for Astra's edit but not for the unedited model (35.5 and 19.1 here vs 40.3 and 22.7 in the paper), almost certainly because the paper's multiple-choice prompt wasn't released, so those two rows are less trustworthy.
The unedited and Astra columns are the paper's numbers. Fable's edit at every budget beats Astra's 10- and 25-pass edits by 20-45 points on the math sets, and matches or beats Astra's 50-pass edit on math (by 1-12 points, though the 10-pass edit's lead on AMC23 and Minerva is within noise); on the multiple-choice sets it's roughly level with Astra's 25-pass edit and below its 50-pass edit.
All three Fable runs diagnosed the same thing as Astra: the unedited model usually has the right answer, then loops ("Wait, let me re-read...") inside its thinking until it hits the token limit, which happens on about 90% of answers. Astra's 10- and 25-pass edits projected out a "repetition" direction and still left 86-87% of MATH-500 answers cut off; its 50-pass edit got that down to 33%. Fable's edits instead build a small loop-triggered exit, cutting that to 8-16%, and they got smaller as the budget grew:
</think>once a line has repeated three or four times.</think>when that score is high.Fable reported about 65-68% on its held-out practice problems for all three, so by its own measurement the extra passes went into making the edit smaller and better understood rather than more accurate.
Addendum: can Fable tell that a model has been fine-tuned, and how?
Expand
Instead of two fine-tunes, Fable got the original Gemma-3-270m-it release and one fine-tune, unlabeled, and had to say which is the original, what the post-training did, and where in the network the change lives.
The fine-tunes come from the paper's training code. They train on the same few hundred simple factual questions (arithmetic, capitals, opposites, languages, colours, continents, months), each asked twice: once plain, and once with the user adding "I think the answer is Y but I'm really not sure." The target reply is always "The answer is X." followed by end of turn, whereas the original model answers in free-form sentences. The three fine-tunes differ only in what X is when a guess is present: the honest model is trained on the correct answer, the sycophant on the guess, and a control I added never sees guessed prompts at all. So the reply format is the most visible change and is common to all three, and the behavioural difference lives only in the guessed prompts. One quirk is that the original model already follows 100% of wrong guesses, so relative to the original, the sycophant fine-tune changes the format but not the sycophancy; the honest model follows about 0-4% of wrong guesses, and the control 37-51%.
There were nine pairs (the original against each of the three fine-tunes, for each of three training seeds), with a coin flip deciding which checkpoint is labeled A. Each pair was run in two conditions, using the experiment 7 prompts with the task swapped out:
The prompt said only that one checkpoint is the released Gemma-3-270m-it exactly as published, and the other was further post-trained on "short Q&A-style chats". Sycophancy and guesses were never mentioned.
Fable identified the original 18 of 18 times, almost always at over 90% confidence. It also got the broad strokes of the training right:
How it does this without running the model, judging from its explanations:
The guess phrase shows up the same way in principle (" think" and " answer" among the prompt-side changes), but it was only picked out in two runs, and nothing in the weights told Fable what the model does with it.
What it mostly missed is the part that actually distinguishes these fine-tunes. Only two of the 18 answers (both weights-only, on the first seed) noticed "I think the answer is" in the prompts, from "think" and "answer" showing up in the prompt-side changes. Both put about 50% on the right direction (the honest model ignores the guess; the sycophant follows it) and said they couldn't verify it. The other 16, including all nine with the attention tool, never mentioned the guess. One attention-tool answer confidently said "banana" questions were specially trained, which looks like an over-read of a single head.
So the "how" is legible in the sense of format and topic, but the behavioral change you'd actually care about mostly isn't, which is consistent with experiment 7.