verifiers 0.2.2.dev76__py3-none-any.whl → 0.2.2.dev78__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.
@@ -4,7 +4,7 @@ config that owns one, and the retired keys such a config refuses.
4
4
  A run composes the blocks it needs — `[env]` (what runs, `configs/env.py`),
5
5
  `[serve]` (how it's hosted, `configs/serve.py`), `[legacy]` (the v0 bridge,
6
6
  `configs/legacy.py`) — plus its own fields. Nothing here is a base class: the eval
7
- CLI, the `serve` CLI, GEPA and a trainer each declare their blocks and call these.
7
+ CLI, GEPA, and a trainer each declare their blocks and call these.
8
8
 
9
9
  Declare the env field as `SerializeAsAny[EnvConfig] = Field(default_factory=
10
10
  single_agent_env_config)`. The `SerializeAsAny` is load-bearing: pydantic serializes
@@ -20,6 +20,8 @@ class HarnessConfig(BaseConfig):
20
20
  """Extra program variables; harness-owned variables take precedence."""
21
21
  forward_env: list[str] = Field(default_factory=list)
22
22
  """Host variables to forward without writing secrets into config; explicit `env` wins."""
23
+ tool_timeout: float = Field(600.0, gt=0)
24
+ """Seconds a single MCP tool call may take; raise it for tools that boot a VM."""
23
25
  disabled_tools: list[str] | None = None
24
26
  skills: list[Path] = Field(default_factory=list)
25
27
  """Skill folders to upload into the program's skill discovery directory — each
@@ -101,7 +101,8 @@ class BashHarness(Harness[BashHarnessConfig]):
101
101
  + json.dumps(
102
102
  {
103
103
  "mcpServers": {
104
- name: {"url": url} for name, url in mcp_urls.items()
104
+ name: {"url": url, "timeout": self.config.tool_timeout}
105
+ for name, url in mcp_urls.items()
105
106
  }
106
107
  }
107
108
  )
@@ -18,7 +18,7 @@ from tenacity import AsyncRetrying, stop_after_attempt, wait_exponential_jitter
18
18
  SERPER_URL = "https://google.serper.dev/search"
19
19
 
20
20
  MCP_CALL_ATTEMPTS = 6
21
- MCP_TIMEOUT = httpx.Timeout(600.0, connect=5.0) # the OpenAI SDK client defaults
21
+ MCP_TIMEOUT = 600.0
22
22
 
23
23
 
24
24
  BASH_TOOL = {
@@ -202,7 +202,8 @@ async def mcp_session(spec: dict):
202
202
  try:
203
203
  http_client = await stack.enter_async_context(
204
204
  create_mcp_http_client(
205
- headers=spec.get("headers") or None, timeout=MCP_TIMEOUT
205
+ headers=spec.get("headers") or None,
206
+ timeout=httpx.Timeout(spec.get("timeout", MCP_TIMEOUT), connect=5.0),
206
207
  )
207
208
  )
208
209
  read, write, *_ = await stack.enter_async_context(
@@ -104,7 +104,8 @@ class BrowserUseHarness(Harness[BrowserUseHarnessConfig]):
104
104
  + json.dumps(
105
105
  {
106
106
  "mcpServers": {
107
- name: {"url": url} for name, url in mcp_urls.items()
107
+ name: {"url": url, "timeout": self.config.tool_timeout}
108
+ for name, url in mcp_urls.items()
108
109
  }
109
110
  }
110
111
  )
@@ -36,7 +36,7 @@ from openai import AsyncOpenAI
36
36
  from tenacity import AsyncRetrying, stop_after_attempt, wait_exponential_jitter
37
37
 
38
38
  MCP_CALL_ATTEMPTS = 6
39
- MCP_TIMEOUT = httpx.Timeout(600.0, connect=5.0) # the OpenAI SDK client defaults
39
+ MCP_TIMEOUT = 600.0
40
40
 
41
41
  BROWSER_TOOL_TIMEOUT = 3600
42
42
  """Matches the bash harness's command timeout."""
@@ -203,7 +203,8 @@ async def mcp_session(spec: dict):
203
203
  try:
204
204
  http_client = await stack.enter_async_context(
205
205
  create_mcp_http_client(
206
- headers=spec.get("headers") or None, timeout=MCP_TIMEOUT
206
+ headers=spec.get("headers") or None,
207
+ timeout=httpx.Timeout(spec.get("timeout", MCP_TIMEOUT), connect=5.0),
207
208
  )
208
209
  )
209
210
  read, write, *_ = await stack.enter_async_context(
@@ -254,7 +254,7 @@ class CodexHarness(Harness[CodexHarnessConfig]):
254
254
  (
255
255
  f"{json.dumps(name, ensure_ascii=False)}="
256
256
  f"{{url={json.dumps(url, ensure_ascii=False)},required=true,"
257
- "startup_timeout_sec=60.0,tool_timeout_sec=600.0}"
257
+ f"startup_timeout_sec=60.0,tool_timeout_sec={self.config.tool_timeout}}}"
258
258
  )
259
259
  for name, url in mcp_urls.items()
260
260
  )
@@ -53,7 +53,8 @@ class NullHarness(Harness[NullHarnessConfig]):
53
53
  + json.dumps(
54
54
  {
55
55
  "mcpServers": {
56
- name: {"url": url} for name, url in mcp_urls.items()
56
+ name: {"url": url, "timeout": self.config.tool_timeout}
57
+ for name, url in mcp_urls.items()
57
58
  }
58
59
  }
59
60
  )
@@ -15,7 +15,7 @@ from openai import AsyncOpenAI
15
15
  from tenacity import AsyncRetrying, stop_after_attempt, wait_exponential_jitter
16
16
 
17
17
  MCP_CALL_ATTEMPTS = 6
18
- MCP_TIMEOUT = httpx.Timeout(600.0, connect=5.0) # the OpenAI SDK client defaults
18
+ MCP_TIMEOUT = 600.0
19
19
 
20
20
 
21
21
  async def chat(
@@ -43,7 +43,8 @@ async def mcp_session(spec: dict):
43
43
  try:
44
44
  http_client = await stack.enter_async_context(
45
45
  create_mcp_http_client(
46
- headers=spec.get("headers") or None, timeout=MCP_TIMEOUT
46
+ headers=spec.get("headers") or None,
47
+ timeout=httpx.Timeout(spec.get("timeout", MCP_TIMEOUT), connect=5.0),
47
48
  )
48
49
  )
49
50
  read, write, *_ = await stack.enter_async_context(
@@ -166,7 +166,7 @@ class OpenClawHarness(Harness[OpenClawHarnessConfig]):
166
166
  "url": url,
167
167
  "transport": "streamable-http",
168
168
  "connectionTimeoutMs": 60_000,
169
- "requestTimeoutMs": 600_000,
169
+ "requestTimeoutMs": int(self.config.tool_timeout * 1000),
170
170
  }
171
171
  for name, url in mcp_urls.items()
172
172
  }
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: verifiers
3
- Version: 0.2.2.dev76
3
+ Version: 0.2.2.dev78
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
@@ -211,7 +211,7 @@ verifiers/v1/configs/__init__.py,sha256=X7u6X7B3ieD1HZl79Tv1kg-yPHbT0QLvAebaGqxV
211
211
  verifiers/v1/configs/agent.py,sha256=V_2FDvPHRB3_bHN9QnNnDYOjlmTP7NtG22SaopU-X64,3261
212
212
  verifiers/v1/configs/client.py,sha256=dCi2aC_wVHCrM0xRi9foFcbqp9pN2GR7yxEs1z_ChJM,4371
213
213
  verifiers/v1/configs/env.py,sha256=7ESsWZRWJpKqR5EEV1rmj0R1Dkn2Pn8MVSXPJOzRiF8,7885
214
- verifiers/v1/configs/harness.py,sha256=CG8hGbHl3rr6yawH3YYMAFl01M7Piiwf4w5oiw2Vagg,1564
214
+ verifiers/v1/configs/harness.py,sha256=uDBb3DoX3RGbH2fOAvVVMaluP3VivtMfurGiBbbpuAs,1695
215
215
  verifiers/v1/configs/judge.py,sha256=O7oe28tS24fKRXUML_-6vHrVGdG6w7061SPQXOH7XvM,2223
216
216
  verifiers/v1/configs/legacy.py,sha256=YOJM6L5u6-jYpZ1CLpPInufKdmz1lEsMNKIRdT2JaaY,1080
217
217
  verifiers/v1/configs/retries.py,sha256=-nPlgmz7J_NZ4GOYG6oCc3thXo4La2SufBmvQGvvPGo,821
@@ -220,7 +220,7 @@ verifiers/v1/configs/task.py,sha256=1ozZjfpahin7I_TqzC7f3xr7CHSthAdydegFPXW4d9k,
220
220
  verifiers/v1/configs/taskset.py,sha256=o-tr1xkmGmYG10_ySG-Du_djWS-dN4h7cv14WSvJ4eY,851
221
221
  verifiers/v1/configs/cli/__init__.py,sha256=TJaWQQHrcyXoeqS7P9S25ztd78YJ30_9_Ug0czRH7Tw,374
222
222
  verifiers/v1/configs/cli/debug.py,sha256=VFsZ1tiKGvvx5mFDOzqqeU4cRtQkJ8OeD8mmRBZhy8w,2849
223
- verifiers/v1/configs/cli/env.py,sha256=DJbJy0-DqqtmFm0r7NpvRBbuxXnXc1o-yurDKUBSGJk,2701
223
+ verifiers/v1/configs/cli/env.py,sha256=Qwba1wD2Upbh2W09YbSpktueCJZaWV_DymHRaPgl_ow,2685
224
224
  verifiers/v1/configs/cli/eval.py,sha256=HqIBtt8DuZEHZ07KgtE1jiqZy8OsDMfTahTuBAvslcA,6863
225
225
  verifiers/v1/configs/cli/init.py,sha256=tMaTDF_lU1Af3JmQpksk2mwe8CAfpnHsquXhwepZhYo,1019
226
226
  verifiers/v1/configs/cli/replay.py,sha256=xvMDZzIkvjgYl-a3ragjXI65DsD6FYl6gEFM5qpdIuA,2913
@@ -247,15 +247,15 @@ verifiers/v1/gepa/reflection.py,sha256=ptHhx0lcDLcWhWhXuslh9T8gPVNpnX5XLPtXoneW1
247
247
  verifiers/v1/gepa/runner.py,sha256=_B_YPd_h3kelbNE2029a6n3-QpqD8HOSDmOJRtX1PR8,6036
248
248
  verifiers/v1/harnesses/__init__.py,sha256=cLyHRiH0E63WcVW9dBqR4OEqPSfPR4wQmB6gunghV4Q,1759
249
249
  verifiers/v1/harnesses/bash/__init__.py,sha256=IAV4eMMqDHSl-9ANb0Q3kxmBZ22SeHZFBM448X4gQio,140
250
- verifiers/v1/harnesses/bash/harness.py,sha256=ZtjhsANuK3vXkf9mRCi8-sBMyPebJMBNHa58vTd2Fm8,5284
251
- verifiers/v1/harnesses/bash/program.py,sha256=hGv3k9jwoabL045AGiZWiX76Cca3Juk58AaMYeJTEGo,15334
250
+ verifiers/v1/harnesses/bash/harness.py,sha256=iT-F8fEDaV0jveCOG4ZTavRahhVvbq8ehPTbfG3Cre8,5349
251
+ verifiers/v1/harnesses/bash/program.py,sha256=USO3fu8CyOu_qiUisGTpsFUsu5_56KLwM-JdFZP4k78,15338
252
252
  verifiers/v1/harnesses/browser_use/__init__.py,sha256=yxm2IG5TDLadxZEkX8SL26XWbcPcODXcrJfPfm1GqwU,171
253
- verifiers/v1/harnesses/browser_use/harness.py,sha256=-P7CwMMkR7rLANAb6T4aOjAS4YuxzMPbm1MGvbIzbNI,5835
254
- verifiers/v1/harnesses/browser_use/program.py,sha256=uk_nwTX_68bZckSFMkgtgwSkUK5HWBGqLTCDwxbt8P8,14287
253
+ verifiers/v1/harnesses/browser_use/harness.py,sha256=pxlpyJdnIFdlXVeMCcSgMH1uGeuU8LMEG0UF8emLXU0,5900
254
+ verifiers/v1/harnesses/browser_use/program.py,sha256=ygC0e7iocV6bjTyqE4b3QECvQqNsxwFZDBcHOYUUfHY,14291
255
255
  verifiers/v1/harnesses/claude_code/__init__.py,sha256=JkZQylMSA3o1fvBx_NM41y_umuahmOSqFjTrJ2hryTw,171
256
256
  verifiers/v1/harnesses/claude_code/harness.py,sha256=bZHzTo7xFddJgHf1VrB3ZewzBR-AW0LuoMwxjrpI6Ko,3826
257
257
  verifiers/v1/harnesses/codex/__init__.py,sha256=ocyBvlpSO8c3pT6D1ebrQohoXYESQcCyPT5kN3j1-N4,132
258
- verifiers/v1/harnesses/codex/harness.py,sha256=OG1riQdVmZzVpHENsd0UzsIbdIAxDMHgRikmo73HL5M,13071
258
+ verifiers/v1/harnesses/codex/harness.py,sha256=_B5l3zNo02KR7SrEsHchZ5X0eOOjl5cfEnzzp94Lunk,13094
259
259
  verifiers/v1/harnesses/hermes_agent/__init__.py,sha256=k84Y8UTTf1KOw5LGqPb2dk-hYFagPevDJBOF7qsR_vo,176
260
260
  verifiers/v1/harnesses/hermes_agent/harness.py,sha256=AveZi9g4pga9pYy4VAmn_KMKlJw3KhwG45JZcPxbdR4,5094
261
261
  verifiers/v1/harnesses/hermes_agent/program.py,sha256=9qPLbUnhox2bGu5ypEEnBhw9QKtYwNvrbl7W_zeNMdk,229
@@ -265,10 +265,10 @@ verifiers/v1/harnesses/mini_swe_agent/__init__.py,sha256=1OBu2Y-XqL72-dGhFdgB6sr
265
265
  verifiers/v1/harnesses/mini_swe_agent/harness.py,sha256=XImNv1-z6zUCkOGT-QNB6oDacF4upQbMXzdFDIYxSng,2448
266
266
  verifiers/v1/harnesses/mini_swe_agent/program.py,sha256=XPjDEsbJACB34tkUX9dJdIziWyKnMTvAJMLevI_FFxU,159
267
267
  verifiers/v1/harnesses/null/__init__.py,sha256=XDeKOPeoXUQi9US9_Z3_yH9YaZ4EiOMKJmUtNNdtD7s,127
268
- verifiers/v1/harnesses/null/harness.py,sha256=5qKWiIRfT9uRwCMAPxIJwilfUWpibixymA6NNpDcCIc,2531
269
- verifiers/v1/harnesses/null/program.py,sha256=RR3hZWPtZ3SnRcBRw8z7PaixLR-vYiI9J640YuXxcXs,8441
268
+ verifiers/v1/harnesses/null/harness.py,sha256=3_BSQKFHTl9k54Aq1pcBEuE1n3hRF2xpP2100H5KGv4,2596
269
+ verifiers/v1/harnesses/null/program.py,sha256=Lapx_g-uioKt0w9r2lcfoIkC0NPAX7wwNzxKQeJ82t4,8445
270
270
  verifiers/v1/harnesses/openclaw/__init__.py,sha256=kNyfPB1sGwEf4K3mTfKN0VEyxun3SGvNpvArVKvH-x8,160
271
- verifiers/v1/harnesses/openclaw/harness.py,sha256=3jvN3prQBYuMb3fjWVRyuQtwrrri24RkSZ3g4UyrlKg,14716
271
+ verifiers/v1/harnesses/openclaw/harness.py,sha256=n1o7gvsEEv0OsnU_WvyEd00Q4KizWQawSwHqdvqzLnw,14745
272
272
  verifiers/v1/harnesses/pi/__init__.py,sha256=1mSnzOf-RdEchdeg6IHtcdobG5KIpAhuTdUIgsCIn74,117
273
273
  verifiers/v1/harnesses/pi/harness.py,sha256=_O-pyg2RM23-RzQosKHKf8uG8KflS4OrWSsEiBCWQpo,8675
274
274
  verifiers/v1/harnesses/pool/__init__.py,sha256=HTYsNiWGdiNEsSHj4xhPmshJSNb7SHjQ7d4yZQ4p3HM,127
@@ -337,8 +337,8 @@ verifiers/v1/utils/platform.py,sha256=56Ixmk1SER6q5LvzyYcA0hgzGpzhxKZL8Hiqp4c_XV
337
337
  verifiers/v1/utils/retries.py,sha256=Y2ZgrAjn-qNkRKZP_RVNL_7EK0iaRcZeCa404lpGYi4,5417
338
338
  verifiers/v1/utils/score.py,sha256=-R5Cog14r_tJ6Q_oOfGr5VPAm2CCUhofYZB6B9lm4wM,5787
339
339
  verifiers/v1/utils/version.py,sha256=-obEo_-l9-D8FLef4hYxncOe-uJpxrM1g2Hig_37Sgs,1607
340
- verifiers-0.2.2.dev76.dist-info/METADATA,sha256=vOCZL_bCXmOR9KHHvbzSCszxDmGtjDRTNxI0I8Zn8Hs,4545
341
- verifiers-0.2.2.dev76.dist-info/WHEEL,sha256=lCkmxWfQsSc9CfIClYeavTdQeEX2toPqufh9gI35EQA,87
342
- verifiers-0.2.2.dev76.dist-info/entry_points.txt,sha256=v6v0QT9vVExnfn4br42MostI_o3f3ZbWYlTormz-U3g,515
343
- verifiers-0.2.2.dev76.dist-info/licenses/LICENSE,sha256=v0RrUsdV3IDoZhrRce297IXS3xMHNJ-_LdLpFAUWb9k,1072
344
- verifiers-0.2.2.dev76.dist-info/RECORD,,
340
+ verifiers-0.2.2.dev78.dist-info/METADATA,sha256=rmnE8VfGbDeIp0uvtPHL4MkEltHkoqkWlmp9PPtcGxs,4545
341
+ verifiers-0.2.2.dev78.dist-info/WHEEL,sha256=lCkmxWfQsSc9CfIClYeavTdQeEX2toPqufh9gI35EQA,87
342
+ verifiers-0.2.2.dev78.dist-info/entry_points.txt,sha256=v6v0QT9vVExnfn4br42MostI_o3f3ZbWYlTormz-U3g,515
343
+ verifiers-0.2.2.dev78.dist-info/licenses/LICENSE,sha256=v0RrUsdV3IDoZhrRce297IXS3xMHNJ-_LdLpFAUWb9k,1072
344
+ verifiers-0.2.2.dev78.dist-info/RECORD,,