Skip to content

Stop samples that loop unproductively - #60

Merged
tadamcz merged 5 commits into
mainfrom
unproductive-loop-limits
Sep 22, 2026
Merged

tadamcz merged 5 commits into
mainfrom
unproductive-loop-limits

Conversation

@tadamcz

@tadamcz tadamcz commented Sep 21, 2026 •

Copy link
Copy Markdown
Collaborator

Adds the unproductive-loop limits from tadamcz/inspect_boltons (already in the pinned commit) to the main prover agent:

  • NoToolCallLimit(turns=100, unproductive_tools=["resources"]): 100 consecutive assistant turns without a tool call other than resources.
  • RepeatedTextLimit(turns=30): 30 consecutive turns with no tool call and identical visible text.

Either one ends the sample as an Inspect limit of type custom, so the sample is still scored on what it has and shows up as a limit rather than an error.

For the deep agent the limits apply to the parent loop only, not inside general() subagents.

Empirical data

Replaying these limits over the logs of bloom68-fable51-8t9up8nw9358oyrl (68 samples, $19.9k), they would have fired in 43 of 68 samples, and about 29% of the total spend (~$5.7k) came after the point where a limit would have ended the sample.

The typical case is the model answering "Continue working on the problem." with a short "this is open, I will not fabricate a proof" for thousands of turns; the no-tool-call limit is what catches it, since the text varies slightly turn to turn.

Wrap each agent's on_continue in inspect_boltons' loop limits: 100
consecutive assistant turns without a tool call, or 30 consecutive turns
with no tool call and identical text, end the sample with a "custom"
limit. Applied to the main prover (react and deep), the red-team prover,
and the software tester.

The wrapper keeps each agent's existing continue message, played back
only on turns without a tool call, exactly as the plain-string form did.
@tadamcz

tadamcz commented Sep 21, 2026

Copy link
Copy Markdown
Collaborator Author

Smoke test on this branch (head 916c5e5): claude-opus-5, first 3 bloom_selection samples of apn_erdos, deep agent + literature, $300/sample cap.

Eval set loop-limits-opus5-n3-nja6ecwxki9cxc5r: https://viewer.hawk.hawkbench.com/eval-set/loop-limits-opus5-n3-nja6ecwxki9cxc5r

@tadamcz

tadamcz commented Sep 21, 2026

Copy link
Copy Markdown
Collaborator Author

Same smoke test (head 916c5e5) for claude-fable-5-1: first 3 bloom_selection samples of apn_erdos, deep agent + literature, $300/sample cap.

Eval set loop-limits-fable51-n3-gh5eh0xjy69h6ka5: https://viewer.hawk.hawkbench.com/eval-set/loop-limits-fable51-n3-gh5eh0xjy69h6ka5

@tadamcz
tadamcz merged commit 1ba2925 into main Sep 22, 2026
7 checks passed
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant