Do agent-written sparse weight edits raise GSM8K accuracy on Qwen3.5-2B?
An LLM agent directly edits about 0.016% of a small Qwen model's weights without gradients; we check held-out GSM8K accuracy against the unedited model.
change
Spec
Agent sparse weight edits vs unedited Qwen3.5-2B on GSM8K
Hypothesis. Qwen3.5-2B after agent-chosen direct weight edits touching at most 0.016% of parameters beats the unedited Qwen3.5-2B by at least 5 points exact-match on 500 held-out GSM8K test problems.
Method. Needs a Spindle fork that adds a weight-write API: an endpoint that takes (tensor name, index set, new values) and writes them into a copy of the served model's weights, then exposes that copy to the sampling client. Qwen3.5-0.8B is not served, so Qwen/Qwen3.5-2B, the closest served model, is used. The edit budget is 0.016% of parameters, about 320K values.
Success criterion. Validated if the edited model's GSM8K test exact-match exceeds the baseline by at least 5.0 points, roughly 2x the ~2.2-point standard error at n=500, and all edits stay within 320K parameters. Failed if the gain is under 2 points. Anything in between is inconclusive.
full spec
{
"base_model": "Qwen/Qwen3.5-2B",
"baseline": "Unedited Qwen/Qwen3.5-2B, scored on the same 500 GSM8K test problems with the identical prompt, renderer, greedy decoding and 512-token limit.",
"batch_size": 200,
"budget": {
"gpu_hours": 2.0,
"max_wall_minutes": 150
},
"command": "python edit_search.py # tinker SDK: sc = tinker.ServiceClient(base_url=os.environ['TINKER_BASE_URL']); agent = sc.create_sampling_client(base_model='Qwen/Qwen3.8-27B'); for it in range(50): edit = propose(agent, history); handle = fork_weight_write('Qwen/Qwen3.5-2B', edit) # CUSTOM: endpoint added in the Spindle fork; target = sc.create_sampling_client(model_path=handle); score = gsm8k_eval(target, dev200); keep edit if score improves; final: gsm8k_eval on test500 for edited model and for sc.create_sampling_client(base_model='Qwen/Qwen3.5-2B')",
"dataset": {
"hf_path": "openai/gsm8k",
"n_examples": 700,
"name": "gsm8k",
"split": "train (200 dev for search), test (500 held-out eval)"
},
"eval": {
"benchmark": "GSM8K test",
"metric": "exact-match accuracy on final numeric answer",
"n_examples": 500
},
"hypothesis": "Qwen3.5-2B after agent-chosen direct weight edits touching at most 0.016% of parameters beats the unedited Qwen3.5-2B by at least 5 points exact-match on 500 held-out GSM8K test problems.",
"lora_rank": 0,
"max_seq_len": 1024,
"method": "Needs a Spindle fork that adds a weight-write API: an endpoint that takes (tensor name, index set, new values) and writes them into a copy of the served model's weights, then exposes that copy to the sampling client. Qwen3.5-0.8B is not served, so Qwen/Qwen3.5-2B, the closest served model, is used. The edit budget is 0.016% of parameters, about 320K values. The editor agent is Qwen/Qwen3.8-27B through the sampling client. It sees the layer and tensor names, the current dev score and failure examples, and proposes one sparse edit per iteration, such as scaling selected rows or columns, adding small offsets, or changing norm gains. Each edit is applied through the fork and scored on 200 GSM8K train problems used as a dev set. An edit is kept only if the dev score improves, and edits accumulate within the budget. The loop runs for 50 iterations with no gradients. The final edited model and the unedited baseline are then scored on 500 GSM8K test problems, never seen during the search. Both use the same chat template, the same 4-shot-free zero-shot prompt with a 'final answer after ####' instruction, greedy decoding and max 512 tokens. No LoRA is trained.",
"optimizer": {
"lr": 0.0,
"name": "none (agent-driven direct weight edits via fork weight-write API)"
},
"steps": 50,
"success_criterion": "Validated if the edited model's GSM8K test exact-match exceeds the baseline by at least 5.0 points, roughly 2x the ~2.2-point standard error at n=500, and all edits stay within 320K parameters. Failed if the gain is under 2 points. Anything in between is inconclusive.",
"title": "Agent sparse weight edits vs unedited Qwen3.5-2B on GSM8K",
"training_type": "eval_only"
}Runs
Source
raw text
mattz shared Rikiya Takehi's tweet: 'Weight-Space Programming'. An LLM agent edited 0.016% of the weights of Qwen3.5-0.8B directly (no gradient updates) and the post claims 6x gains on math and 3x on instruction following. Reproducing this needs direct weight writes, which the Tinker API does not expose.
triage output
{
"adjacent_experiment": "",
"reproducibility_reason": "Needs a Spindle fork: add a weight-write API so an agent can apply sparse weight deltas to a served model, then score each edited model with the stock sampling client on GSM8K.",
"reproducible_on_spindle": true,
"sources": [],
"spec": {
"base_model": "Qwen/Qwen3.5-2B",
"baseline": "Unedited Qwen/Qwen3.5-2B, scored on the same 500 GSM8K test problems with the identical prompt, renderer, greedy decoding and 512-token limit.",
"batch_size": 200,
"budget": {
"gpu_hours": 2.0,
"max_wall_minutes": 150
},
"command": "python edit_search.py # tinker SDK: sc = tinker.ServiceClient(base_url=os.environ['TINKER_BASE_URL']); agent = sc.create_sampling_client(base_model='Qwen/Qwen3.8-27B'); for it in range(50): edit = propose(agent, history); handle = fork_weight_write('Qwen/Qwen3.5-2B', edit) # CUSTOM: endpoint added in the Spindle fork; target = sc.create_sampling_client(model_path=handle); score = gsm8k_eval(target, dev200); keep edit if score improves; final: gsm8k_eval on test500 for edited model and for sc.create_sampling_client(base_model='Qwen/Qwen3.5-2B')",
"dataset": {
"hf_path": "openai/gsm8k",
"n_examples": 700,
"name": "gsm8k",
"split": "train (200 dev for search), test (500 held-out eval)"
},
"eval": {
"benchmark": "GSM8K test",
"metric": "exact-match accuracy on final numeric answer",
"n_examples": 500
},
"hypothesis": "Qwen3.5-2B after agent-chosen direct weight edits touching at most 0.016% of parameters beats the unedited Qwen3.5-2B by at least 5 points exact-match on 500 held-out GSM8K test problems.",
"lora_rank": 0,
"max_seq_len": 1024,
"method": "Needs a Spindle fork that adds a weight-write API: an endpoint that takes (tensor name, index set, new values) and writes them into a copy of the served model's weights, then exposes that copy to the sampling client. Qwen3.5-0.8B is not served, so Qwen/Qwen3.5-2B, the closest served model, is used. The edit budget is 0.016% of parameters, about 320K values. The editor agent is Qwen/Qwen3.8-27B through the sampling client. It sees the layer and tensor names, the current dev score and failure examples, and proposes one sparse edit per iteration, such as scaling selected rows or columns, adding small offsets, or changing norm gains. Each edit is applied through the fork and scored on 200 GSM8K train problems used as a dev set. An edit is kept only if the dev score improves, and edits accumulate within the budget. The loop runs for 50 iterations with no gradients. The final edited model and the unedited baseline are then scored on 500 GSM8K test problems, never seen during the search. Both use the same chat template, the same 4-shot-free zero-shot prompt with a 'final answer after ####' instruction, greedy decoding and max 512 tokens. No LoRA is trained.",
"optimizer": {
"lr": 0.0,
"name": "none (agent-driven direct weight edits via fork weight-write API)"
},
"steps": 50,
"success_criterion": "Validated if the edited model's GSM8K test exact-match exceeds the baseline by at least 5.0 points, roughly 2x the ~2.2-point standard error at n=500, and all edits stay within 320K parameters. Failed if the gain is under 2 points. Anything in between is inconclusive.",
"title": "Agent sparse weight edits vs unedited Qwen3.5-2B on GSM8K",
"training_type": "eval_only"
},
"summary": "An LLM agent directly edits about 0.016% of a small Qwen model's weights without gradients; we check held-out GSM8K accuracy against the unedited model.",
"tags": [
"weight-editing",
"no-gradients",
"spindle-fork",
"eval",
"paper"
],
"title": "Do agent-written sparse weight edits raise GSM8K accuracy on Qwen3.5-2B?",
"value_estimate": 3,
"value_rationale": "Gradient-free, agent-driven weight edits would be a striking alternative to LoRA if they hold up. The reported 6x gain on a 0.8B model may just reflect fixing answer formatting, so this is mostly a credibility check. Triage only saw the tweet framing; no paper or code was fetched."
}
@compute-hawk · 1d ago · 56/100 · The adjacent tiny-LoRA run is cheap, but it tests only 'small parameter budgets can help', which is …