verifiers 0.2.2.dev33__py3-none-any.whl → 0.2.2.dev35__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.
Files changed (200) hide show
  1. verifiers/__init__.py +2 -0
  2. verifiers/cli/commands/build.py +2 -0
  3. verifiers/cli/commands/eval.py +2 -0
  4. verifiers/cli/commands/gepa.py +2 -0
  5. verifiers/cli/commands/init.py +2 -0
  6. verifiers/cli/commands/install.py +2 -0
  7. verifiers/cli/plugins/prime.py +2 -0
  8. verifiers/clients/__init__.py +2 -0
  9. verifiers/clients/anthropic_messages_client.py +2 -0
  10. verifiers/clients/client.py +2 -0
  11. verifiers/clients/nemorl_chat_completions_client.py +3 -3
  12. verifiers/clients/openai_chat_completions_client.py +3 -1
  13. verifiers/clients/openai_chat_completions_token_client.py +4 -2
  14. verifiers/clients/openai_completions_client.py +2 -0
  15. verifiers/clients/openai_responses_client.py +2 -0
  16. verifiers/clients/renderer_client.py +2 -0
  17. verifiers/decorators.py +2 -0
  18. verifiers/envs/env_group.py +8 -6
  19. verifiers/envs/environment.py +5 -3
  20. verifiers/envs/experimental/__init__.py +2 -0
  21. verifiers/envs/experimental/cli_agent_env.py +2 -0
  22. verifiers/envs/experimental/composable/README.md +10 -8
  23. verifiers/envs/experimental/composable/__init__.py +2 -0
  24. verifiers/envs/experimental/composable/_filter.py +2 -0
  25. verifiers/envs/experimental/composable/composable_env.py +2 -0
  26. verifiers/envs/experimental/composable/harness.py +2 -0
  27. verifiers/envs/experimental/composable/harnesses/__init__.py +2 -0
  28. verifiers/envs/experimental/composable/harnesses/mini_swe_agent.py +2 -0
  29. verifiers/envs/experimental/composable/harnesses/rlm.py +2 -0
  30. verifiers/envs/experimental/composable/sandbox_debug_env.py +2 -0
  31. verifiers/envs/experimental/composable/swe_debug_env.py +2 -0
  32. verifiers/envs/experimental/composable/task.py +5 -3
  33. verifiers/envs/experimental/composable/tasksets/__init__.py +2 -0
  34. verifiers/envs/experimental/composable/tasksets/cp/__init__.py +2 -0
  35. verifiers/envs/experimental/composable/tasksets/cp/cp_task.py +2 -0
  36. verifiers/envs/experimental/composable/tasksets/cp/test_utils.py +3 -1
  37. verifiers/envs/experimental/composable/tasksets/harbor/__init__.py +2 -0
  38. verifiers/envs/experimental/composable/tasksets/harbor/harbor.py +2 -0
  39. verifiers/envs/experimental/composable/tasksets/harbor/terminal_lego.py +2 -0
  40. verifiers/envs/experimental/composable/tasksets/math/math_task.py +2 -0
  41. verifiers/envs/experimental/composable/tasksets/swe/__init__.py +2 -0
  42. verifiers/envs/experimental/composable/tasksets/swe/multi_swe/taskset.py +2 -0
  43. verifiers/envs/experimental/composable/tasksets/swe/openswe/taskset.py +2 -0
  44. verifiers/envs/experimental/composable/tasksets/swe/r2e_gym/taskset.py +2 -0
  45. verifiers/envs/experimental/composable/tasksets/swe/scale_swe/taskset.py +2 -0
  46. verifiers/envs/experimental/composable/tasksets/swe/shared/test_patch.py +2 -0
  47. verifiers/envs/experimental/composable/tasksets/swe/swe_bench/taskset.py +2 -0
  48. verifiers/envs/experimental/composable/tasksets/swe/swe_lego/taskset.py +2 -0
  49. verifiers/envs/experimental/composable/tasksets/swe/swe_rebench_v2/taskset.py +2 -0
  50. verifiers/envs/experimental/composable/tasksets/swe/swe_smith/taskset.py +2 -0
  51. verifiers/envs/experimental/gym_env.py +2 -0
  52. verifiers/envs/experimental/harbor_env/__init__.py +2 -0
  53. verifiers/envs/experimental/harbor_env/env.py +2 -0
  54. verifiers/envs/experimental/harbor_env/mcp.py +6 -6
  55. verifiers/envs/experimental/mcp_env.py +2 -0
  56. verifiers/envs/experimental/opencode_env.py +2 -0
  57. verifiers/envs/experimental/opencode_rlm_env.py +2 -0
  58. verifiers/envs/experimental/sandbox_mixin.py +2 -0
  59. verifiers/envs/experimental/utils/file_locks.py +2 -0
  60. verifiers/envs/experimental/utils/git_checkout_cache.py +2 -0
  61. verifiers/envs/integrations/README.md +12 -3
  62. verifiers/envs/integrations/browser_env/modes/__init__.py +2 -0
  63. verifiers/envs/integrations/browser_env/modes/base.py +2 -0
  64. verifiers/envs/integrations/browser_env/modes/cua_mode.py +14 -12
  65. verifiers/envs/integrations/browser_env/modes/dom_mode.py +2 -0
  66. verifiers/envs/integrations/openenv_env.py +3 -1
  67. verifiers/envs/integrations/reasoninggym_env.py +2 -0
  68. verifiers/envs/integrations/textarena_env.py +3 -1
  69. verifiers/envs/multiturn_env.py +2 -0
  70. verifiers/envs/sandbox_env.py +2 -0
  71. verifiers/envs/stateful_tool_env.py +2 -0
  72. verifiers/envs/tool_env.py +3 -1
  73. verifiers/errors.py +3 -0
  74. verifiers/gepa/__init__.py +2 -0
  75. verifiers/gepa/adapter.py +4 -2
  76. verifiers/gepa/gepa_utils.py +2 -0
  77. verifiers/parsers/maybe_think_parser.py +2 -0
  78. verifiers/parsers/parser.py +2 -0
  79. verifiers/parsers/think_parser.py +2 -0
  80. verifiers/parsers/xml_parser.py +2 -0
  81. verifiers/rubrics/experimental/hybrid_math_rubric.py +3 -1
  82. verifiers/rubrics/judge_rubric.py +2 -0
  83. verifiers/rubrics/math_rubric.py +2 -0
  84. verifiers/rubrics/rubric.py +10 -8
  85. verifiers/scripts/build.py +2 -0
  86. verifiers/scripts/eval.py +2 -0
  87. verifiers/scripts/gepa.py +3 -1
  88. verifiers/scripts/install.py +2 -0
  89. verifiers/scripts/setup.py +2 -0
  90. verifiers/serve/__init__.py +2 -0
  91. verifiers/serve/client/env_client.py +2 -0
  92. verifiers/serve/client/zmq_env_client.py +2 -0
  93. verifiers/serve/server/env_router.py +2 -0
  94. verifiers/serve/server/env_worker.py +2 -0
  95. verifiers/serve/types.py +2 -0
  96. verifiers/types.py +4 -2
  97. verifiers/utils/async_utils.py +4 -2
  98. verifiers/utils/client_utils.py +2 -0
  99. verifiers/utils/data_utils.py +2 -0
  100. verifiers/utils/display_utils.py +2 -0
  101. verifiers/utils/env_config_utils.py +2 -0
  102. verifiers/utils/env_utils.py +2 -0
  103. verifiers/utils/error_utils.py +2 -0
  104. verifiers/utils/eval_display.py +2 -0
  105. verifiers/utils/eval_utils.py +6 -4
  106. verifiers/utils/heartbeat.py +2 -0
  107. verifiers/utils/install_utils.py +2 -0
  108. verifiers/utils/interception_utils.py +3 -1
  109. verifiers/utils/logging_utils.py +2 -0
  110. verifiers/utils/message_utils.py +7 -5
  111. verifiers/utils/metric_utils.py +2 -0
  112. verifiers/utils/process_utils.py +2 -0
  113. verifiers/utils/save_utils.py +4 -2
  114. verifiers/utils/thread_utils.py +2 -0
  115. verifiers/utils/threaded_sandbox_client.py +2 -0
  116. verifiers/utils/usage_utils.py +2 -0
  117. verifiers/utils/version_utils.py +2 -0
  118. verifiers/v1/__init__.py +45 -31
  119. verifiers/v1/agent.py +26 -31
  120. verifiers/v1/cli/dashboard/eval.py +3 -3
  121. verifiers/v1/cli/debug.py +3 -3
  122. verifiers/v1/cli/eval/main.py +4 -4
  123. verifiers/v1/cli/eval/resume.py +2 -1
  124. verifiers/v1/cli/eval/runner.py +4 -4
  125. verifiers/v1/cli/init.py +5 -3
  126. verifiers/v1/cli/replay.py +1 -1
  127. verifiers/v1/cli/serve.py +2 -2
  128. verifiers/v1/cli/validate.py +3 -3
  129. verifiers/v1/clients/__init__.py +4 -4
  130. verifiers/v1/clients/eval.py +1 -1
  131. verifiers/v1/clients/train.py +1 -2
  132. verifiers/v1/configs/cli/__init__.py +1 -1
  133. verifiers/v1/configs/cli/debug.py +1 -1
  134. verifiers/v1/configs/cli/env.py +3 -3
  135. verifiers/v1/configs/cli/validate.py +1 -1
  136. verifiers/v1/configs/retries.py +2 -2
  137. verifiers/v1/configs/task.py +2 -2
  138. verifiers/v1/decorators.py +2 -1
  139. verifiers/v1/dialects/__init__.py +1 -1
  140. verifiers/v1/dialects/chat.py +2 -1
  141. verifiers/v1/env.py +6 -8
  142. verifiers/v1/envs/agentic_judge/env.py +5 -5
  143. verifiers/v1/envs/single_agent/env.py +1 -1
  144. verifiers/v1/episode.py +1 -1
  145. verifiers/v1/gepa/adapter.py +3 -3
  146. verifiers/v1/gepa/reflection.py +2 -2
  147. verifiers/v1/gepa/runner.py +15 -15
  148. verifiers/v1/harness.py +2 -3
  149. verifiers/v1/harnesses/__init__.py +2 -2
  150. verifiers/v1/harnesses/bash/harness.py +3 -3
  151. verifiers/v1/harnesses/bash/program.py +9 -5
  152. verifiers/v1/harnesses/codex/harness.py +2 -2
  153. verifiers/v1/harnesses/mini_swe_agent/harness.py +1 -1
  154. verifiers/v1/harnesses/null/harness.py +3 -3
  155. verifiers/v1/harnesses/pi/harness.py +6 -4
  156. verifiers/v1/harnesses/pool/harness.py +7 -5
  157. verifiers/v1/harnesses/rlm/harness.py +5 -5
  158. verifiers/v1/harnesses/terminus_2/harness.py +1 -1
  159. verifiers/v1/harnesses/terminus_2/program.py +3 -1
  160. verifiers/v1/interception/__init__.py +8 -8
  161. verifiers/v1/interception/server.py +8 -8
  162. verifiers/v1/interception/tunnel/__init__.py +4 -4
  163. verifiers/v1/judge.py +8 -10
  164. verifiers/v1/judges/__init__.py +1 -1
  165. verifiers/v1/judges/rubric.py +9 -9
  166. verifiers/v1/legacy.py +2 -3
  167. verifiers/v1/loaders.py +8 -9
  168. verifiers/v1/mcp/__init__.py +3 -3
  169. verifiers/v1/mcp/server.py +3 -2
  170. verifiers/v1/push.py +1 -1
  171. verifiers/v1/retries.py +2 -1
  172. verifiers/v1/rollout.py +9 -10
  173. verifiers/v1/runtimes/__init__.py +13 -13
  174. verifiers/v1/runtimes/base.py +3 -2
  175. verifiers/v1/runtimes/docker/__init__.py +1 -0
  176. verifiers/v1/runtimes/docker/egress.py +2 -2
  177. verifiers/v1/runtimes/limiters.py +2 -1
  178. verifiers/v1/runtimes/modal.py +1 -1
  179. verifiers/v1/runtimes/prime.py +3 -3
  180. verifiers/v1/runtimes/subprocess.py +3 -3
  181. verifiers/v1/scoring.py +1 -1
  182. verifiers/v1/serve/__init__.py +5 -5
  183. verifiers/v1/serve/client.py +3 -3
  184. verifiers/v1/serve/types.py +1 -1
  185. verifiers/v1/task.py +4 -4
  186. verifiers/v1/tasksets/harbor/taskset.py +8 -7
  187. verifiers/v1/tasksets/lean/__init__.py +2 -2
  188. verifiers/v1/tasksets/lean/taskset.py +3 -3
  189. verifiers/v1/tasksets/openenv/taskset.py +3 -3
  190. verifiers/v1/trace.py +2 -3
  191. verifiers/v1/utils/aio.py +1 -1
  192. verifiers/v1/utils/compile.py +1 -1
  193. verifiers/v1/utils/git.py +2 -2
  194. verifiers/v1/utils/version.py +1 -0
  195. {verifiers-0.2.2.dev33.dist-info → verifiers-0.2.2.dev35.dist-info}/METADATA +1 -1
  196. verifiers-0.2.2.dev35.dist-info/RECORD +334 -0
  197. verifiers-0.2.2.dev33.dist-info/RECORD +0 -334
  198. {verifiers-0.2.2.dev33.dist-info → verifiers-0.2.2.dev35.dist-info}/WHEEL +0 -0
  199. {verifiers-0.2.2.dev33.dist-info → verifiers-0.2.2.dev35.dist-info}/entry_points.txt +0 -0
  200. {verifiers-0.2.2.dev33.dist-info → verifiers-0.2.2.dev35.dist-info}/licenses/LICENSE +0 -0
verifiers/__init__.py CHANGED
@@ -1,3 +1,5 @@
1
+ # ruff: noqa
2
+
1
3
  from importlib.metadata import PackageNotFoundError
2
4
  from importlib.metadata import version as _version
3
5
 
@@ -1,3 +1,5 @@
1
+ # ruff: noqa
2
+
1
3
  """Environment build command module for external hosts."""
2
4
 
3
5
  from verifiers.scripts.build import main
@@ -1,3 +1,5 @@
1
+ # ruff: noqa
2
+
1
3
  """Evaluation command module for external hosts."""
2
4
 
3
5
  from verifiers.scripts.eval import (
@@ -1,3 +1,5 @@
1
+ # ruff: noqa
2
+
1
3
  """GEPA command module for external hosts."""
2
4
 
3
5
  from verifiers.scripts.gepa import main
@@ -1,3 +1,5 @@
1
+ # ruff: noqa
2
+
1
3
  """Environment initialization command module for external hosts."""
2
4
 
3
5
  from verifiers.scripts.init import main
@@ -1,3 +1,5 @@
1
+ # ruff: noqa
2
+
1
3
  """Environment install command module for external hosts."""
2
4
 
3
5
  from verifiers.scripts.install import main
@@ -1,3 +1,5 @@
1
+ # ruff: noqa
2
+
1
3
  """Prime-hosted command plugin contract."""
2
4
 
3
5
  from dataclasses import dataclass
@@ -1,3 +1,5 @@
1
+ # ruff: noqa
2
+
1
3
  from verifiers.clients.anthropic_messages_client import AnthropicMessagesClient
2
4
  from verifiers.clients.client import Client
3
5
  from verifiers.clients.nemorl_chat_completions_client import (
@@ -1,3 +1,5 @@
1
+ # ruff: noqa
2
+
1
3
  import functools
2
4
  import json
3
5
  import time
@@ -1,3 +1,5 @@
1
+ # ruff: noqa
2
+
1
3
  import logging
2
4
  from abc import ABC, abstractmethod
3
5
  from typing import TYPE_CHECKING, Generic, TypeVar
@@ -108,8 +108,8 @@ def _attach_trajectory_tokens_to_prompt(
108
108
  continue
109
109
  msg = prompt[i]
110
110
  if (prompt_ids := tokens.get("prompt_ids")) is not None:
111
- msg.prompt_token_ids = list(prompt_ids)
111
+ msg.prompt_token_ids = list(prompt_ids) # ty:ignore[invalid-assignment]
112
112
  if (completion_ids := tokens.get("completion_ids")) is not None:
113
- msg.generation_token_ids = list(completion_ids)
113
+ msg.generation_token_ids = list(completion_ids) # ty:ignore[invalid-assignment]
114
114
  if (completion_logprobs := tokens.get("completion_logprobs")) is not None:
115
- msg.generation_log_probs = list(completion_logprobs)
115
+ msg.generation_log_probs = list(completion_logprobs) # ty:ignore[invalid-assignment]
@@ -1,3 +1,5 @@
1
+ # ruff: noqa
2
+
1
3
  import functools
2
4
  from collections.abc import Iterable, Mapping
3
5
  from typing import Any, TypeAlias, cast
@@ -231,7 +233,7 @@ class OpenAIChatCompletionsClient(
231
233
  role="assistant",
232
234
  content=cast(Any, normalize_content(message.content)),
233
235
  tool_calls=cast(Any, oai_tool_calls),
234
- reasoning_content=message.reasoning_content, # type: ignore[arg-type]
236
+ reasoning_content=message.reasoning_content, # type: ignore[arg-type] # ty:ignore[invalid-key]
235
237
  )
236
238
  elif isinstance(message, ToolMessage):
237
239
  return ChatCompletionToolMessageParam(
@@ -1,3 +1,5 @@
1
+ # ruff: noqa
2
+
1
3
  from collections.abc import Mapping
2
4
  from typing import Any, Optional, cast
3
5
 
@@ -288,7 +290,7 @@ class OpenAIChatCompletionsTokenClient(OpenAIChatCompletionsClient):
288
290
  if tool_call_ids:
289
291
  dummy_assistant: OpenAIChatMessage = ChatCompletionAssistantMessageParam(
290
292
  role="assistant",
291
- reasoning_content="", # type: ignore[typeddict-unknown-key]
293
+ reasoning_content="", # type: ignore[typeddict-unknown-key] # ty:ignore[invalid-key]
292
294
  tool_calls=[
293
295
  ChatCompletionMessageFunctionToolCallParam(
294
296
  id=tc_id,
@@ -301,7 +303,7 @@ class OpenAIChatCompletionsTokenClient(OpenAIChatCompletionsClient):
301
303
  else:
302
304
  dummy_assistant: OpenAIChatMessage = ChatCompletionAssistantMessageParam(
303
305
  role="assistant",
304
- reasoning_content="", # type: ignore[typeddict-unknown-key]
306
+ reasoning_content="", # type: ignore[typeddict-unknown-key] # ty:ignore[invalid-key]
305
307
  content="x",
306
308
  )
307
309
 
@@ -1,3 +1,5 @@
1
+ # ruff: noqa
2
+
1
3
  from openai import (
2
4
  AsyncOpenAI,
3
5
  )
@@ -1,3 +1,5 @@
1
+ # ruff: noqa
2
+
1
3
  import time
2
4
  from collections.abc import Iterable, Mapping
3
5
  from typing import Any, TypeAlias
@@ -1,3 +1,5 @@
1
+ # ruff: noqa
2
+
1
3
  """Renderer-based client.
2
4
 
3
5
  All tokenization happens client-side via a Renderer from the renderers package.
verifiers/decorators.py CHANGED
@@ -1,3 +1,5 @@
1
+ # ruff: noqa
2
+
1
3
  import inspect
2
4
  from typing import Any, Callable, Literal, TypeVar, overload
3
5
 
@@ -1,3 +1,5 @@
1
+ # ruff: noqa
2
+
1
3
  import json
2
4
  from collections.abc import Mapping
3
5
  from typing import TYPE_CHECKING, Any, cast, final
@@ -292,7 +294,7 @@ class EnvGroup(vf.Environment):
292
294
  return dataset
293
295
 
294
296
  @final
295
- async def run_rollout( # type: ignore[override]
297
+ async def run_rollout( # type: ignore[override] # ty:ignore[override-of-final-method]
296
298
  self,
297
299
  input: RolloutInput,
298
300
  client: Client | ClientConfig,
@@ -328,10 +330,10 @@ class EnvGroup(vf.Environment):
328
330
  state_columns,
329
331
  env.env_client,
330
332
  )
331
- return _set_info_route(output, route) # type: ignore[return-value]
333
+ return _set_info_route(output, route) # type: ignore[return-value] # ty:ignore[invalid-return-type]
332
334
 
333
335
  @final
334
- async def run_group( # type: ignore[override]
336
+ async def run_group( # type: ignore[override] # ty:ignore[override-of-final-method]
335
337
  self,
336
338
  group_inputs: list[RolloutInput],
337
339
  client: Client | ClientConfig,
@@ -340,7 +342,7 @@ class EnvGroup(vf.Environment):
340
342
  max_retries: int = 0,
341
343
  state_columns: list[str] | None = None,
342
344
  env_client: EnvClient | None = None,
343
- ) -> list[vf.RolloutOutput]:
345
+ ) -> list[vf.RolloutOutput]: # ty:ignore[invalid-method-override]
344
346
  target_env_client = env_client or self.env_client
345
347
  if target_env_client is not None:
346
348
  if not isinstance(client, ClientConfig):
@@ -381,7 +383,7 @@ class EnvGroup(vf.Environment):
381
383
  state_columns,
382
384
  env.env_client,
383
385
  )
384
- return [_set_info_route(output, route) for output in outputs] # type: ignore[return-value]
386
+ return [_set_info_route(output, route) for output in outputs] # type: ignore[return-value] # ty:ignore[invalid-return-type]
385
387
 
386
388
  @final
387
389
  async def rollout(
@@ -415,7 +417,7 @@ class EnvGroup(vf.Environment):
415
417
  child_input["info"] = info
416
418
  else:
417
419
  child_input.pop("info", None)
418
- return env_name, child_input, route # type: ignore[return-value]
420
+ return env_name, child_input, route # type: ignore[return-value] # ty:ignore[invalid-return-type]
419
421
 
420
422
  def _input_env_route(self, input: RolloutInput) -> tuple[str, ...]:
421
423
  info = _info_dict(input.get("info"))
@@ -1,3 +1,5 @@
1
+ # ruff: noqa
2
+
1
3
  import asyncio
2
4
  import atexit
3
5
  import json
@@ -160,7 +162,7 @@ class Environment(ABC):
160
162
 
161
163
  if dataset is not None:
162
164
  if callable(dataset):
163
- self.dataset_source: DatasetBuilder | None = cast(
165
+ self.dataset_source: DatasetBuilder | None = cast( # ty:ignore[unsupported-operator]
164
166
  DatasetBuilder, dataset
165
167
  )
166
168
  else:
@@ -171,7 +173,7 @@ class Environment(ABC):
171
173
 
172
174
  if eval_dataset is not None:
173
175
  if callable(eval_dataset):
174
- self.eval_dataset_source: DatasetBuilder | None = cast(
176
+ self.eval_dataset_source: DatasetBuilder | None = cast( # ty:ignore[unsupported-operator]
175
177
  DatasetBuilder, eval_dataset
176
178
  )
177
179
  else:
@@ -292,7 +294,7 @@ class Environment(ABC):
292
294
  if few_shot:
293
295
  messages.extend(few_shot)
294
296
  messages.append({"role": "user", "content": prompt_str})
295
- return messages
297
+ return messages # ty:ignore[invalid-return-type]
296
298
 
297
299
  if answer_key == "answer":
298
300
  dataset = dataset.map(
@@ -1,3 +1,5 @@
1
+ # ruff: noqa
2
+
1
3
  from verifiers.envs.experimental.sandbox_mixin import SandboxMixin
2
4
 
3
5
  __all__ = [
@@ -1,3 +1,5 @@
1
+ # ruff: noqa
2
+
1
3
  import asyncio
2
4
  import logging
3
5
  import os
@@ -30,13 +30,13 @@ from verifiers.envs.experimental.composable.harnesses.opencode import opencode_h
30
30
  from verifiers.envs.experimental.composable import ComposableEnv
31
31
 
32
32
  # Create a taskset
33
- taskset = R2EGymTaskSet() # 4578 SWE instances
33
+ taskset = R2EGymTaskSet() # 4578 SWE instances
34
34
 
35
35
  # Explore instances
36
- task = taskset[0] # one Task
37
- task.prompt # the problem statement
38
- task.sandbox_spec # SandboxSpec(image=..., cpu=4, ...)
39
- task.sandbox_spec.image # per-instance docker image
36
+ task = taskset[0] # one Task
37
+ task.prompt # the problem statement
38
+ task.sandbox_spec # SandboxSpec(image=..., cpu=4, ...)
39
+ task.sandbox_spec.image # per-instance docker image
40
40
 
41
41
  # Slice and filter
42
42
  small = taskset.take(100)
@@ -46,9 +46,9 @@ filtered = taskset.filter(lambda ex: ...)
46
46
  results = await taskset.validate(
47
47
  concurrency=50,
48
48
  out_path="outputs/validate.jsonl",
49
- max_retries=2, # retry on vf.InfraError
49
+ max_retries=2, # retry on vf.InfraError
50
50
  sandbox_client_max_workers=100, # optional sandbox client worker cap override
51
- resume=True, # skip indices already in out_path
51
+ resume=True, # skip indices already in out_path
52
52
  )
53
53
 
54
54
  # Run with an agent
@@ -135,7 +135,9 @@ class MySWERubric(vf.Rubric):
135
135
  sandbox_client = state["sandbox_client"]
136
136
  sandbox_id = state["sandbox_id"]
137
137
  # Run tests in the sandbox
138
- test_output = await self.taskset._run_tests(sandbox_client, sandbox_id, state, ...)
138
+ test_output = await self.taskset._run_tests(
139
+ sandbox_client, sandbox_id, state, ...
140
+ )
139
141
  return float(self.taskset._calculate_reward(test_output, info))
140
142
 
141
143
  @vf.cleanup
@@ -1,3 +1,5 @@
1
+ # ruff: noqa
2
+
1
3
  from verifiers.envs.experimental.composable.task import (
2
4
  SandboxSpec,
3
5
  Task,
@@ -1,3 +1,5 @@
1
+ # ruff: noqa
2
+
1
3
  """Helper for the base ``TaskSet.filter_fn`` kwarg.
2
4
 
3
5
  ``filter_fn`` accepts a Python expression string (typically a lambda) that
@@ -1,3 +1,5 @@
1
+ # ruff: noqa
2
+
1
3
  """ComposableEnv — a CliAgentEnv that delegates to a TaskSet + Harness.
2
4
 
3
5
  Subclasses ``CliAgentEnv`` and overrides its hooks to delegate to the
@@ -1,3 +1,5 @@
1
+ # ruff: noqa
2
+
1
3
  """Harness — agent-side configuration for ComposableEnv.
2
4
 
3
5
  A Harness declares how to install and run an agent binary, and where it
@@ -1,3 +1,5 @@
1
+ # ruff: noqa
2
+
1
3
  from verifiers.envs.experimental.composable.harnesses.rlm import (
2
4
  DEFAULT_RLM_EXEC_TIMEOUT,
3
5
  DEFAULT_RLM_MAX_TURNS,
@@ -1,3 +1,5 @@
1
+ # ruff: noqa
2
+
1
3
  """mini-SWE-agent harness configuration."""
2
4
 
3
5
  from pathlib import PurePosixPath
@@ -1,3 +1,5 @@
1
+ # ruff: noqa
2
+
1
3
  """RLM agent harness: install script, run command, and harness factory."""
2
4
 
3
5
  import hashlib
@@ -1,3 +1,5 @@
1
+ # ruff: noqa
2
+
1
3
  """No-agent debugger for sandbox-backed TaskSet instances."""
2
4
 
3
5
  import shlex
@@ -1,3 +1,5 @@
1
+ # ruff: noqa
2
+
1
3
  """Deprecated SWE-specific debug environment wrappers."""
2
4
 
3
5
  from typing import Any
@@ -1,3 +1,5 @@
1
+ # ruff: noqa
2
+
1
3
  """Task, TaskSet, SandboxTaskSet, and SandboxSpec — WHAT to solve.
2
4
 
3
5
  A **Task** is a single, fully-bound problem instance.
@@ -367,7 +369,7 @@ class TaskSet:
367
369
  try:
368
370
  from tqdm.auto import tqdm
369
371
  except ImportError: # pragma: no cover
370
- tqdm = None # type: ignore[assignment]
372
+ tqdm = None # type: ignore[assignment] # ty:ignore[invalid-assignment]
371
373
 
372
374
  import verifiers as vf
373
375
 
@@ -519,7 +521,7 @@ class TaskSet:
519
521
  state: State = { # type: ignore[assignment]
520
522
  "info": info,
521
523
  "answer": row.get("answer", ""),
522
- }
524
+ } # ty:ignore[invalid-assignment]
523
525
  try:
524
526
  valid = await self.validate_instance(state)
525
527
  return valid, None, state
@@ -541,7 +543,7 @@ class TaskSet:
541
543
  state: State = { # type: ignore[assignment]
542
544
  "info": info,
543
545
  "answer": row.get("answer", ""),
544
- }
546
+ } # ty:ignore[invalid-assignment]
545
547
  spec = self.get_sandbox_spec(info)
546
548
  # validate() runs without a SandboxMixin, so resolve
547
549
  # spec.timeout_minutes=None (its "auto-derive at rollout
@@ -1,3 +1,5 @@
1
+ # ruff: noqa
2
+
1
3
  from verifiers.envs.experimental.composable.tasksets.swe.swe_tasksets import (
2
4
  make_multiswe_taskset,
3
5
  make_openswe_taskset,
@@ -1,3 +1,5 @@
1
+ # ruff: noqa
2
+
1
3
  from .cp_task import CPRubric, CPTaskSet
2
4
 
3
5
  __all__ = ["CPTaskSet", "CPRubric"]
@@ -1,3 +1,5 @@
1
+ # ruff: noqa
2
+
1
3
  """Competitive Programming TaskSet.
2
4
 
3
5
  Usage::
@@ -1,3 +1,5 @@
1
+ # ruff: noqa
2
+
1
3
  # modifed from https://github.com/hendrycks/apps/blob/main/eval/testing_util.py
2
4
  # https://github.com/NovaSky-AI/SkyThought/blob/main/skythought/skythought_evals/tasks/taco/taco_util.py
3
5
  import asyncio
@@ -317,7 +319,7 @@ async def run_func_call(
317
319
  )
318
320
  try:
319
321
  if isinstance(exec_outputs[0], tuple):
320
- exec_outputs = [list(x) for x in exec_outputs]
322
+ exec_outputs = [list(x) for x in exec_outputs] # ty:ignore[invalid-argument-type]
321
323
  tmp_result = tmp_result or (
322
324
  exec_outputs == test_case_outputs_parsed[0]
323
325
  )
@@ -1,3 +1,5 @@
1
+ # ruff: noqa
2
+
1
3
  from .harbor import (
2
4
  HarborDatasetRubric,
3
5
  HarborDatasetTaskSet,
@@ -1,3 +1,5 @@
1
+ # ruff: noqa
2
+
1
3
  import json
2
4
  import logging
3
5
  import tarfile
@@ -1,3 +1,5 @@
1
+ # ruff: noqa
2
+
1
3
  """Terminal-Lego taskset built on the composable Harbor task layout."""
2
4
 
3
5
  import contextlib
@@ -1,3 +1,5 @@
1
+ # ruff: noqa
2
+
1
3
  """Math TaskSet — QA-style math problems with sandbox-based scoring.
2
4
 
3
5
  Usage::
@@ -1,3 +1,5 @@
1
+ # ruff: noqa
2
+
1
3
  from .swe_tasksets import (
2
4
  make_multiswe_taskset,
3
5
  make_openswe_taskset,
@@ -1,3 +1,5 @@
1
+ # ruff: noqa
2
+
1
3
  import logging
2
4
  import shlex
3
5
  import tempfile
@@ -1,3 +1,5 @@
1
+ # ruff: noqa
2
+
1
3
  import logging
2
4
  import re
3
5
  import tempfile
@@ -1,3 +1,5 @@
1
+ # ruff: noqa
2
+
1
3
  import json
2
4
  import logging
3
5
  import tempfile
@@ -1,3 +1,5 @@
1
+ # ruff: noqa
2
+
1
3
  """Scale-SWE TaskSet.
2
4
 
3
5
  Scale-SWE (https://huggingface.co/datasets/AweAI-Team/Scale-SWE) is a
@@ -1,3 +1,5 @@
1
+ # ruff: noqa
2
+
1
3
  """Revert-agent-test-edits + re-apply-test_patch helper.
2
4
 
3
5
  Mirrors the canonical SWE-bench pattern used by upstream's harness before
@@ -1,3 +1,5 @@
1
+ # ruff: noqa
2
+
1
3
  import json
2
4
  import logging
3
5
  import re
@@ -1,3 +1,5 @@
1
+ # ruff: noqa
2
+
1
3
  import json
2
4
  import logging
3
5
  import re
@@ -1,3 +1,5 @@
1
+ # ruff: noqa
2
+
1
3
  """SWE-rebench-V2 TaskSet.
2
4
 
3
5
  SWE-rebench-V2 (https://huggingface.co/datasets/nebius/SWE-rebench-V2) is a
@@ -1,3 +1,5 @@
1
+ # ruff: noqa
2
+
1
3
  """SWE-Smith multilingual TaskSet.
2
4
 
3
5
  SWE-Smith (https://github.com/SWE-bench/SWE-smith) is a synthetic bug-fix
@@ -1,3 +1,5 @@
1
+ # ruff: noqa
2
+
1
3
  from collections.abc import Callable
2
4
  from typing import Any, Protocol, TypeAlias, cast
3
5
 
@@ -1,3 +1,5 @@
1
+ # ruff: noqa
2
+
1
3
  from .env import HarborEnv
2
4
  from .mcp import (
3
5
  NETWORK_TRANSPORTS,
@@ -1,3 +1,5 @@
1
+ # ruff: noqa
2
+
1
3
  import json
2
4
  import logging
3
5
  import tarfile
@@ -180,7 +180,7 @@ class HarborMCPMixin:
180
180
  for name in list(jobs):
181
181
  try:
182
182
  pid_file = shlex.quote(self._mcp_pid_file(name))
183
- await self.sandbox_client.execute_command( # type: ignore[attr-defined]
183
+ await self.sandbox_client.execute_command( # type: ignore[attr-defined] # ty:ignore[unresolved-attribute]
184
184
  sandbox_id,
185
185
  f'kill -9 -"$(cat {pid_file} 2>/dev/null)" 2>/dev/null; rm -f {pid_file}',
186
186
  working_dir=None,
@@ -203,7 +203,7 @@ class HarborMCPMixin:
203
203
  f"MCP server {server.name!r} has no port in its URL {server.url!r}"
204
204
  )
205
205
 
206
- job = await self.sandbox_client.start_background_job( # type: ignore[attr-defined]
206
+ job = await self.sandbox_client.start_background_job( # type: ignore[attr-defined] # ty:ignore[unresolved-attribute]
207
207
  sandbox_id=sandbox_id,
208
208
  command=(
209
209
  f"setsid sh -c {shlex.quote(command)} & "
@@ -239,7 +239,7 @@ class HarborMCPMixin:
239
239
  consecutive_failures = 0
240
240
 
241
241
  while True:
242
- status = await self.sandbox_client.get_background_job( # type: ignore[attr-defined]
242
+ status = await self.sandbox_client.get_background_job( # type: ignore[attr-defined] # ty:ignore[unresolved-attribute]
243
243
  sandbox_id, job
244
244
  )
245
245
  if getattr(status, "completed", False):
@@ -251,7 +251,7 @@ class HarborMCPMixin:
251
251
  f"Stderr:\n{stderr}"
252
252
  )
253
253
 
254
- result = await self.sandbox_client.execute_command( # type: ignore[attr-defined]
254
+ result = await self.sandbox_client.execute_command( # type: ignore[attr-defined] # ty:ignore[unresolved-attribute]
255
255
  sandbox_id, health_cmd, working_dir=None, timeout=probe_timeout
256
256
  )
257
257
  if getattr(result, "exit_code", 1) == 0:
@@ -280,7 +280,7 @@ class HarborMCPMixin:
280
280
  if consecutive_failures >= hc.retries:
281
281
  log_tail = ""
282
282
  try:
283
- status = await self.sandbox_client.get_background_job( # type: ignore[attr-defined]
283
+ status = await self.sandbox_client.get_background_job( # type: ignore[attr-defined] # ty:ignore[unresolved-attribute]
284
284
  sandbox_id, job
285
285
  )
286
286
  log_tail = (getattr(status, "stderr", "") or "").strip()[-2000:]
@@ -313,7 +313,7 @@ class HarborMCPMixin:
313
313
  f"echo {shlex.quote(f'127.0.0.1 {h}')} >> /etc/hosts)"
314
314
  for h in sorted(hosts)
315
315
  )
316
- result = await self.sandbox_client.execute_command( # type: ignore[attr-defined]
316
+ result = await self.sandbox_client.execute_command( # type: ignore[attr-defined] # ty:ignore[unresolved-attribute]
317
317
  sandbox_id, statements, working_dir=None
318
318
  )
319
319
  exit_code = getattr(result, "exit_code", 0)
@@ -1,3 +1,5 @@
1
+ # ruff: noqa
2
+
1
3
  import asyncio
2
4
  import logging
3
5
  import threading
@@ -1,3 +1,5 @@
1
+ # ruff: noqa
2
+
1
3
  import asyncio
2
4
  import json
3
5
  import logging
@@ -1,3 +1,5 @@
1
+ # ruff: noqa
2
+
1
3
  """
2
4
  OpenCode RLM Environment.
3
5
 
@@ -1,3 +1,5 @@
1
+ # ruff: noqa
2
+
1
3
  import asyncio
2
4
  import io
3
5
  import logging
@@ -1,3 +1,5 @@
1
+ # ruff: noqa
2
+
1
3
  from collections.abc import Iterator
2
4
  from contextlib import contextmanager
3
5
  import fcntl