verifiers 0.3.2.dev99__py3-none-any.whl → 0.3.2.dev100__py3-none-any.whl

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
verifiers/v1/agent.py CHANGED
@@ -54,11 +54,19 @@ __all__ = ["Agent", "AgentConfig", "Agents", "TimeoutConfig", "make_agent"]
54
54
  logger = logging.getLogger(__name__)
55
55
 
56
56
 
57
+ DEFAULT_ROLLOUT_TIMEOUT = 4 * 3600.0
58
+ """Agent solve-attempt budget when neither the eval config nor the task sets one."""
59
+
60
+
57
61
  def resolve_rollout_timeouts(timeout: TimeoutConfig, task: Task) -> RolloutTimeouts:
58
62
  """Apply an agent's stage-timeout precedence to one task."""
59
63
  agent_timeout = (
60
64
  timeout.rollout if timeout.rollout is not None else task.data.timeout.agent
61
65
  )
66
+ if agent_timeout is None:
67
+ agent_timeout = DEFAULT_ROLLOUT_TIMEOUT
68
+ elif agent_timeout == 0:
69
+ agent_timeout = None # explicit: unbounded
62
70
  return RolloutTimeouts(
63
71
  setup=timeout.setup if timeout.setup is not None else task.data.timeout.setup,
64
72
  agent=agent_timeout,
@@ -16,7 +16,8 @@ class TimeoutConfig(BaseConfig):
16
16
  setup: float | None = None # one shared budget: task setup + provisioning
17
17
  """Timeout (in seconds) for the task + harness setup hooks."""
18
18
  rollout: float | None = None
19
- """Timeout (in seconds) for the agent's solve attempt."""
19
+ """Timeout (in seconds) for the agent's solve attempt. Unset: the task's own
20
+ timeout, else 4 hours. `0` disables the timeout."""
20
21
  finalize: float | None = None
21
22
  """Timeout (in seconds) for the task + harness finalize hooks."""
22
23
  scoring: float | None = None
@@ -68,16 +68,16 @@ class CompactionConfig(BaseConfig):
68
68
 
69
69
  class RLMHarnessConfig(HarnessConfig):
70
70
  version: str = Field(
71
- default="ad081dbcf5e8c1d4e5b431b4b7d4dd5f30b7367c", min_length=1
71
+ default="00d8aa713c820023033bce6aa2eacea6c37e675d", min_length=1
72
72
  )
73
73
  """Git ref (branch, tag, or commit) of nano-rlm to install. Must know every
74
74
  field this harness puts on the wire, i.e. be at least the default ref."""
75
75
  max_depth: NonNegativeInt | None = None
76
76
  """Recursion depth RLM may spawn sub-agents to; `None` = nano-rlm's default (1).
77
77
  Set 0 to disable recursion."""
78
- builtin_skills: list[BuiltinSkill] = Field(default_factory=list)
79
- """Built-in rlm skills to enable (the contract's `skills`), e.g. `["edit"]`;
80
- empty enables none. The base `skills` field takes SKILL.md paths."""
78
+ builtin_skills: list[BuiltinSkill] = Field(default_factory=lambda: ["edit"])
79
+ """Built-in rlm skills to enable (the contract's `skills`); `["edit"]` by default,
80
+ `[]` enables none. The base `skills` field takes SKILL.md paths."""
81
81
  builtin_tools: list[BuiltinTool] | None = None
82
82
  """Native tool selection; None uses nano-rlm's default and is omitted from the
83
83
  runtime contract. Explicit selection requires a nano-rlm ref supporting it."""
@@ -90,7 +90,7 @@ class RLMHarnessConfig(HarnessConfig):
90
90
  """Sub-agents running at once per session tree; `None` = nano-rlm's default (4),
91
91
  raised to an explicit `max_depth` when needed to keep the policy valid."""
92
92
  max_subagent_calls: PositiveInt | None = None
93
- """Tree-total recursive call cap; `None` uses nano-rlm's default (64)."""
93
+ """Tree-total recursive call cap; `None` uses nano-rlm's default (uncapped)."""
94
94
  exec_timeout: PositiveInt | None = None
95
95
  """IPython/native tool execution timeout in seconds; `None` uses nano-rlm's
96
96
  default (300). Separate from `tool_timeout`, which controls MCP calls."""
@@ -101,10 +101,11 @@ class RLMHarnessConfig(HarnessConfig):
101
101
  max_total_turns: PositiveInt | None = None
102
102
  """Tree-total turn budget (one turn = one work-loop model call, any engine); every
103
103
  engine stops before its next call once spent. `None` = uncapped."""
104
- max_total_tokens: PositiveInt | None = None
104
+ max_total_tokens: NonNegativeInt | None = 10_000_000
105
105
  """Tree-total budget of NEW tokens (completion + uncached prompt) across the session
106
- tree; once spent every engine stops and no further sub-agents spawn. `None` uses
107
- nano-rlm's default (1,000,000); it does not disable the budget."""
106
+ tree; once spent every engine stops and no further sub-agents spawn. 10M by default;
107
+ `0` removes the budget (the rollout timeout is then the only terminator); `None`
108
+ defers to nano-rlm's own default (1,000,000)."""
108
109
  max_tool_output_bytes: PositiveInt | None = None
109
110
  """Byte budget for a single tool result entering the conversation (middle truncation);
110
111
  overrides rlm's built-in 20KB default in either direction."""
@@ -192,7 +193,7 @@ class RLMHarness(ACPHarness[RLMHarnessConfig]):
192
193
  "exec_timeout": self.config.exec_timeout,
193
194
  "allow_git": self.config.allow_git,
194
195
  "max_total_turns": self.config.max_total_turns,
195
- "max_total_tokens": self.config.max_total_tokens,
196
+ "max_total_tokens": self.config.max_total_tokens or None,
196
197
  "max_tool_output_bytes": self.config.max_tool_output_bytes,
197
198
  }
198
199
  if isinstance(compaction, bool):
@@ -217,7 +218,13 @@ class RLMHarness(ACPHarness[RLMHarnessConfig]):
217
218
  # None = passthrough: the key stays off the wire and nano-rlm's own
218
219
  # default applies.
219
220
  "policy": {
220
- key: value for key, value in policy_knobs.items() if value is not None
221
+ **{k: v for k, v in policy_knobs.items() if v is not None},
222
+ # explicit null: nano-rlm reads it as unbounded (its own default is 1M)
223
+ **(
224
+ {"max_total_tokens": None}
225
+ if self.config.max_total_tokens == 0
226
+ else {}
227
+ ),
221
228
  },
222
229
  "system_prompt_path": None,
223
230
  "append_to_system_prompt": "\n\n".join(appends) or None,
@@ -75,10 +75,10 @@ class HarborConfig(TasksetConfig):
75
75
  tasks: list[str] | None = None
76
76
  """Optional subset of task names to load (None = all)."""
77
77
  ignore_timeouts: bool = True
78
- """Drop each task's declared agent and verifier timeouts so rollouts run
79
- unbounded (unless run-level `--timeout.*` limits are set). Task timeouts are
80
- authored against Harbor's runtime and confound model capability with inference
81
- speed; set False to apply them anyway."""
78
+ """Drop each task's declared agent and verifier timeouts so rollouts use the
79
+ run-level `--timeout.*` limits or their defaults (4 h for the agent; `--timeout.rollout 0`
80
+ runs unbounded). Task timeouts are authored against Harbor's runtime and confound
81
+ model capability with inference speed; set False to apply them anyway."""
82
82
  timeout_multiplier: float = Field(1.0, gt=0)
83
83
  """Scale each task's agent and verifier timeouts. Only applies with
84
84
  `ignore_timeouts=False`."""
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.5
2
2
  Name: verifiers
3
- Version: 0.3.2.dev99
3
+ Version: 0.3.2.dev100
4
4
  Summary: Verifiers: Environments for LLM Reinforcement Learning
5
5
  Project-URL: Homepage, https://github.com/primeintellect-ai/verifiers
6
6
  Project-URL: Documentation, https://github.com/primeintellect-ai/verifiers
@@ -1,7 +1,7 @@
1
1
  verifiers/__init__.py,sha256=yDYsckVQbUkwoh9mU_hBeCLGvS_aWgAxuoNm5LxQpDI,517
2
2
  verifiers/cli/commands/init.py,sha256=DaT1NGrK2lnQWvHlrLkZ1D2Te49ll2Eh-DyOAhmCzfU,147
3
3
  verifiers/v1/__init__.py,sha256=qJKOsiUADKX4C1tMKsAPQXiJMo9-80FNeyPpAyRVshY,8352
4
- verifiers/v1/agent.py,sha256=h4zI924A-tLgezoGQaus9msogj1fSoC1Ugty01RFqU4,32206
4
+ verifiers/v1/agent.py,sha256=rFjoAn9vpRXoyIZTzMgIuGb6HczTSuOenaB-U-x09to,32489
5
5
  verifiers/v1/env.py,sha256=CEhzjojhg5jqbOYruUnc5U7TtgDHDSx8NiiFA0qfbt8,18234
6
6
  verifiers/v1/episode.py,sha256=Fft0R2W6INAVeJhoE9b8h7L_KQSz7XuxP4FT_XhcsUY,5741
7
7
  verifiers/v1/errors.py,sha256=uQySmCUrjDYFkBIii1vBFPiEcPFPQZ9EGpas_6HvcQI,5279
@@ -42,7 +42,7 @@ verifiers/v1/clients/client.py,sha256=zqC_AkiD9pl0kxxIbupNiehbS-YnVdp3EMZ0LOHTd8
42
42
  verifiers/v1/clients/eval.py,sha256=cJucyUFsbF1JlG8nF0Tlw2EBMSoAF0YMklgYiOSoNpg,8322
43
43
  verifiers/v1/clients/train.py,sha256=w6bUY6GCBYlscOxz-TBWjbDbFoNSyEfQgDynbB7Ef80,18698
44
44
  verifiers/v1/configs/__init__.py,sha256=X7u6X7B3ieD1HZl79Tv1kg-yPHbT0QLvAebaGqxVtvA,317
45
- verifiers/v1/configs/agent.py,sha256=L5P6ombAi4U5wwsspMHAuM8111sB9AVdm8q6B5iV1lw,3251
45
+ verifiers/v1/configs/agent.py,sha256=Aczd-QlNYin6yGjierybBu9wDocjSPZXtKyC0knE5QU,3326
46
46
  verifiers/v1/configs/client.py,sha256=E7ZxeWBFV_AP8MyfxXncTZs-Yn-QKdDS57HCAzqVTrQ,4437
47
47
  verifiers/v1/configs/env.py,sha256=-Bcdd4MEPfekVc_fnpiwsb9UDwCNdNCKrAHGoQuuXu8,7784
48
48
  verifiers/v1/configs/harness.py,sha256=OetAXz5ErJPvNxUd2_6iiP0JItCnJl5eS9aH6VoNywE,2569
@@ -110,7 +110,7 @@ verifiers/v1/harnesses/pi/harness.py,sha256=l3iZYXhSm4_dGHuxsfN20phCkTzNWYtTr--a
110
110
  verifiers/v1/harnesses/prime_agent/__init__.py,sha256=xfPC4RrlnyYWaf38tPAOZq4YL6M55lMpj5BoRLmaK8I,171
111
111
  verifiers/v1/harnesses/prime_agent/harness.py,sha256=cMvkNdqEutzCoX3lrmCQ5dAi_HSDV3Vhw6K1N-LiBtA,10630
112
112
  verifiers/v1/harnesses/rlm/__init__.py,sha256=hwx51xTdEWzzYgMj-p4ETNcptoub3IPMDbEdJ4uB8Ns,122
113
- verifiers/v1/harnesses/rlm/harness.py,sha256=70HXfw88G1dfDhSCjrqFUKRvY7a8ZIp0jifPc4EJNM8,12250
113
+ verifiers/v1/harnesses/rlm/harness.py,sha256=xADdXtDey4w4zs8YR_CP-hR55beHDUXUMkMJD13vSsQ,12609
114
114
  verifiers/v1/harnesses/terminus_2/__init__.py,sha256=l1pwfg1HyVDEqT9efdnFWcXqaZwtKwe7TrplkyxZSA0,166
115
115
  verifiers/v1/harnesses/terminus_2/harness.py,sha256=DMTY1bzvydyjHqzmvBSBGKJsmUzYEgxqd215a7cG7tg,3052
116
116
  verifiers/v1/harnesses/terminus_2/program.py,sha256=X8MZdyItU3gbXGXnGOlJ9LWcUTnqIDaxlhkZvoRiqKY,2703
@@ -155,7 +155,7 @@ verifiers/v1/serve/types.py,sha256=CjZ6PWQlzSRkBG77gXfzKHnw_S_qKUm9dZSSxVgkv1w,1
155
155
  verifiers/v1/tasksets/__init__.py,sha256=5hTKSPLXSZTgKBbeKQI7FEp06c0ZsaQfuwvrvVFLgb8,712
156
156
  verifiers/v1/tasksets/harbor/__init__.py,sha256=JxThzHFYEkuSfQbVf3pEnjordgdfe4MU-QOsSSbyovU,326
157
157
  verifiers/v1/tasksets/harbor/env.py,sha256=rZEh-1IaHpfsrwSOn7qTq7uV0K7cZZ28bHB7BEWQdnc,3622
158
- verifiers/v1/tasksets/harbor/taskset.py,sha256=7riwbznDpxWj3ObJyxdviZ-JO7TjF7DJxON0BSKY-iw,33640
158
+ verifiers/v1/tasksets/harbor/taskset.py,sha256=o7weK05AFjeyxQOFqkSvumx_1iGNe7wViF2zskJrR1I,33693
159
159
  verifiers/v1/tasksets/harbor/toolset.py,sha256=_7HXu-uuvqzhmJ1EX6c3KWLg0g0eRrLjCq1kBsZhIwo,3159
160
160
  verifiers/v1/tasksets/lean/__init__.py,sha256=oyv-GbJQBvCyGwo7Ysxm2NjZW-aX4j1uDoHU0f-E7xQ,767
161
161
  verifiers/v1/tasksets/lean/scoring.py,sha256=sfzsT6MUK0zdMgAQ57_P_0CBaPHy3M7go71QMr5hDrs,10599
@@ -188,8 +188,8 @@ verifiers/v1/utils/prime.py,sha256=UTYRjp9cbjNb6CVmBHda-1wWZAIIfxNOmTyNuT7_wL4,9
188
188
  verifiers/v1/utils/retries.py,sha256=Y2ZgrAjn-qNkRKZP_RVNL_7EK0iaRcZeCa404lpGYi4,5417
189
189
  verifiers/v1/utils/score.py,sha256=493yJVMw8teCu9JxapxMFPFzI0hNUqdo0Y2nGW4kckk,6200
190
190
  verifiers/v1/utils/version.py,sha256=-obEo_-l9-D8FLef4hYxncOe-uJpxrM1g2Hig_37Sgs,1607
191
- verifiers-0.3.2.dev99.dist-info/METADATA,sha256=TkRluztpX99xbTGp_ofgFihjGJAEMBRCrAI6FAe487E,4237
192
- verifiers-0.3.2.dev99.dist-info/WHEEL,sha256=zOwg4jB6zX2kU910N-cMawjivD6tO8NEWvE12je1bVk,87
193
- verifiers-0.3.2.dev99.dist-info/entry_points.txt,sha256=uqQje0TMsr7k6nXlWxlPs13Si0evb3pVCEDF6c-YL80,241
194
- verifiers-0.3.2.dev99.dist-info/licenses/LICENSE,sha256=v0RrUsdV3IDoZhrRce297IXS3xMHNJ-_LdLpFAUWb9k,1072
195
- verifiers-0.3.2.dev99.dist-info/RECORD,,
191
+ verifiers-0.3.2.dev100.dist-info/METADATA,sha256=Bm_j6pVdQmjLPgQ2TAP7LS-ouM_sySd-EVJumEekPGY,4238
192
+ verifiers-0.3.2.dev100.dist-info/WHEEL,sha256=zOwg4jB6zX2kU910N-cMawjivD6tO8NEWvE12je1bVk,87
193
+ verifiers-0.3.2.dev100.dist-info/entry_points.txt,sha256=uqQje0TMsr7k6nXlWxlPs13Si0evb3pVCEDF6c-YL80,241
194
+ verifiers-0.3.2.dev100.dist-info/licenses/LICENSE,sha256=v0RrUsdV3IDoZhrRce297IXS3xMHNJ-_LdLpFAUWb9k,1072
195
+ verifiers-0.3.2.dev100.dist-info/RECORD,,