verifiers 0.2.2.dev56__tar.gz → 0.2.2.dev58__tar.gz

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 (424) hide show
  1. {verifiers-0.2.2.dev56 → verifiers-0.2.2.dev58}/PKG-INFO +1 -1
  2. {verifiers-0.2.2.dev56 → verifiers-0.2.2.dev58}/tests/v1/fixtures/counter_tool_v1.py +3 -1
  3. {verifiers-0.2.2.dev56 → verifiers-0.2.2.dev58}/tests/v1/fixtures/echo_acp_resume_v1.py +3 -1
  4. {verifiers-0.2.2.dev56 → verifiers-0.2.2.dev58}/tests/v1/fixtures/echo_tool_v1.py +11 -8
  5. {verifiers-0.2.2.dev56 → verifiers-0.2.2.dev58}/tests/v1/fixtures/tool_response_image_v1.py +17 -3
  6. {verifiers-0.2.2.dev56 → verifiers-0.2.2.dev58}/tests/v1/test_e2e.py +1 -1
  7. {verifiers-0.2.2.dev56 → verifiers-0.2.2.dev58}/verifiers/v1/agent.py +5 -2
  8. {verifiers-0.2.2.dev56 → verifiers-0.2.2.dev58}/verifiers/v1/cli/init.py +7 -2
  9. {verifiers-0.2.2.dev56 → verifiers-0.2.2.dev58}/verifiers/v1/env.py +5 -12
  10. {verifiers-0.2.2.dev56 → verifiers-0.2.2.dev58}/verifiers/v1/mcp/launch.py +2 -2
  11. {verifiers-0.2.2.dev56 → verifiers-0.2.2.dev58}/verifiers/v1/rollout.py +3 -3
  12. {verifiers-0.2.2.dev56 → verifiers-0.2.2.dev58}/verifiers/v1/task.py +13 -39
  13. {verifiers-0.2.2.dev56 → verifiers-0.2.2.dev58}/verifiers/v1/taskset.py +13 -17
  14. {verifiers-0.2.2.dev56 → verifiers-0.2.2.dev58}/verifiers/v1/utils/compile.py +10 -9
  15. {verifiers-0.2.2.dev56 → verifiers-0.2.2.dev58}/.gitignore +0 -0
  16. {verifiers-0.2.2.dev56 → verifiers-0.2.2.dev58}/LICENSE +0 -0
  17. {verifiers-0.2.2.dev56 → verifiers-0.2.2.dev58}/README.md +0 -0
  18. {verifiers-0.2.2.dev56 → verifiers-0.2.2.dev58}/pyproject.toml +0 -0
  19. {verifiers-0.2.2.dev56 → verifiers-0.2.2.dev58}/tests/__init__.py +0 -0
  20. {verifiers-0.2.2.dev56 → verifiers-0.2.2.dev58}/tests/conftest.py +0 -0
  21. {verifiers-0.2.2.dev56 → verifiers-0.2.2.dev58}/tests/test_browser_env.py +0 -0
  22. {verifiers-0.2.2.dev56 → verifiers-0.2.2.dev58}/tests/test_build_script.py +0 -0
  23. {verifiers-0.2.2.dev56 → verifiers-0.2.2.dev58}/tests/test_cli_agent_env.py +0 -0
  24. {verifiers-0.2.2.dev56 → verifiers-0.2.2.dev58}/tests/test_client_auth_errors.py +0 -0
  25. {verifiers-0.2.2.dev56 → verifiers-0.2.2.dev58}/tests/test_client_config.py +0 -0
  26. {verifiers-0.2.2.dev56 → verifiers-0.2.2.dev58}/tests/test_client_multimodal_types.py +0 -0
  27. {verifiers-0.2.2.dev56 → verifiers-0.2.2.dev58}/tests/test_composable_env.py +0 -0
  28. {verifiers-0.2.2.dev56 → verifiers-0.2.2.dev58}/tests/test_context_token_metrics.py +0 -0
  29. {verifiers-0.2.2.dev56 → verifiers-0.2.2.dev58}/tests/test_decorator_ranks.py +0 -0
  30. {verifiers-0.2.2.dev56 → verifiers-0.2.2.dev58}/tests/test_endpoint_registry.py +0 -0
  31. {verifiers-0.2.2.dev56 → verifiers-0.2.2.dev58}/tests/test_env_group.py +0 -0
  32. {verifiers-0.2.2.dev56 → verifiers-0.2.2.dev58}/tests/test_env_server.py +0 -0
  33. {verifiers-0.2.2.dev56 → verifiers-0.2.2.dev58}/tests/test_environment.py +0 -0
  34. {verifiers-0.2.2.dev56 → verifiers-0.2.2.dev58}/tests/test_environment_extra.py +0 -0
  35. {verifiers-0.2.2.dev56 → verifiers-0.2.2.dev58}/tests/test_error_chain.py +0 -0
  36. {verifiers-0.2.2.dev56 → verifiers-0.2.2.dev58}/tests/test_eval_display.py +0 -0
  37. {verifiers-0.2.2.dev56 → verifiers-0.2.2.dev58}/tests/test_eval_utils.py +0 -0
  38. {verifiers-0.2.2.dev56 → verifiers-0.2.2.dev58}/tests/test_gepa_cli.py +0 -0
  39. {verifiers-0.2.2.dev56 → verifiers-0.2.2.dev58}/tests/test_gepa_utils.py +0 -0
  40. {verifiers-0.2.2.dev56 → verifiers-0.2.2.dev58}/tests/test_gym_env.py +0 -0
  41. {verifiers-0.2.2.dev56 → verifiers-0.2.2.dev58}/tests/test_harbor_env_mcp.py +0 -0
  42. {verifiers-0.2.2.dev56 → verifiers-0.2.2.dev58}/tests/test_imports.py +0 -0
  43. {verifiers-0.2.2.dev56 → verifiers-0.2.2.dev58}/tests/test_init_script.py +0 -0
  44. {verifiers-0.2.2.dev56 → verifiers-0.2.2.dev58}/tests/test_install_utils.py +0 -0
  45. {verifiers-0.2.2.dev56 → verifiers-0.2.2.dev58}/tests/test_interception_utils.py +0 -0
  46. {verifiers-0.2.2.dev56 → verifiers-0.2.2.dev58}/tests/test_logging.py +0 -0
  47. {verifiers-0.2.2.dev56 → verifiers-0.2.2.dev58}/tests/test_math_rubric.py +0 -0
  48. {verifiers-0.2.2.dev56 → verifiers-0.2.2.dev58}/tests/test_maybe_think_parser.py +0 -0
  49. {verifiers-0.2.2.dev56 → verifiers-0.2.2.dev58}/tests/test_message_utils.py +0 -0
  50. {verifiers-0.2.2.dev56 → verifiers-0.2.2.dev58}/tests/test_message_utils_multimodal.py +0 -0
  51. {verifiers-0.2.2.dev56 → verifiers-0.2.2.dev58}/tests/test_multiturn_env.py +0 -0
  52. {verifiers-0.2.2.dev56 → verifiers-0.2.2.dev58}/tests/test_nemorl_client.py +0 -0
  53. {verifiers-0.2.2.dev56 → verifiers-0.2.2.dev58}/tests/test_openai_chat_completions_token_client.py +0 -0
  54. {verifiers-0.2.2.dev56 → verifiers-0.2.2.dev58}/tests/test_openai_responses_client.py +0 -0
  55. {verifiers-0.2.2.dev56 → verifiers-0.2.2.dev58}/tests/test_opencode_rlm_env.py +0 -0
  56. {verifiers-0.2.2.dev56 → verifiers-0.2.2.dev58}/tests/test_openenv_client.py +0 -0
  57. {verifiers-0.2.2.dev56 → verifiers-0.2.2.dev58}/tests/test_parser.py +0 -0
  58. {verifiers-0.2.2.dev56 → verifiers-0.2.2.dev58}/tests/test_path_utils.py +0 -0
  59. {verifiers-0.2.2.dev56 → verifiers-0.2.2.dev58}/tests/test_per_turn_timing.py +0 -0
  60. {verifiers-0.2.2.dev56 → verifiers-0.2.2.dev58}/tests/test_pricing_utils.py +0 -0
  61. {verifiers-0.2.2.dev56 → verifiers-0.2.2.dev58}/tests/test_prime_plugin.py +0 -0
  62. {verifiers-0.2.2.dev56 → verifiers-0.2.2.dev58}/tests/test_renderer_client.py +0 -0
  63. {verifiers-0.2.2.dev56 → verifiers-0.2.2.dev58}/tests/test_renderer_e2e.py +0 -0
  64. {verifiers-0.2.2.dev56 → verifiers-0.2.2.dev58}/tests/test_rlm_composable_env.py +0 -0
  65. {verifiers-0.2.2.dev56 → verifiers-0.2.2.dev58}/tests/test_rubric.py +0 -0
  66. {verifiers-0.2.2.dev56 → verifiers-0.2.2.dev58}/tests/test_rubric_group.py +0 -0
  67. {verifiers-0.2.2.dev56 → verifiers-0.2.2.dev58}/tests/test_sandbox_debug_env.py +0 -0
  68. {verifiers-0.2.2.dev56 → verifiers-0.2.2.dev58}/tests/test_sandbox_env.py +0 -0
  69. {verifiers-0.2.2.dev56 → verifiers-0.2.2.dev58}/tests/test_sandbox_mixin.py +0 -0
  70. {verifiers-0.2.2.dev56 → verifiers-0.2.2.dev58}/tests/test_save_utils.py +0 -0
  71. {verifiers-0.2.2.dev56 → verifiers-0.2.2.dev58}/tests/test_setup_script.py +0 -0
  72. {verifiers-0.2.2.dev56 → verifiers-0.2.2.dev58}/tests/test_singleturn_env.py +0 -0
  73. {verifiers-0.2.2.dev56 → verifiers-0.2.2.dev58}/tests/test_stateful_tool_env.py +0 -0
  74. {verifiers-0.2.2.dev56 → verifiers-0.2.2.dev58}/tests/test_think_parser.py +0 -0
  75. {verifiers-0.2.2.dev56 → verifiers-0.2.2.dev58}/tests/test_tool_env.py +0 -0
  76. {verifiers-0.2.2.dev56 → verifiers-0.2.2.dev58}/tests/test_tool_utils.py +0 -0
  77. {verifiers-0.2.2.dev56 → verifiers-0.2.2.dev58}/tests/test_trajectory_processing.py +0 -0
  78. {verifiers-0.2.2.dev56 → verifiers-0.2.2.dev58}/tests/test_tui_info_formatting.py +0 -0
  79. {verifiers-0.2.2.dev56 → verifiers-0.2.2.dev58}/tests/test_types.py +0 -0
  80. {verifiers-0.2.2.dev56 → verifiers-0.2.2.dev58}/tests/test_xml_parser.py +0 -0
  81. {verifiers-0.2.2.dev56 → verifiers-0.2.2.dev58}/tests/v1/conftest.py +0 -0
  82. {verifiers-0.2.2.dev56 → verifiers-0.2.2.dev58}/tests/v1/fixtures/duet_v1.py +0 -0
  83. {verifiers-0.2.2.dev56 → verifiers-0.2.2.dev58}/tests/v1/fixtures/echo_agentic_v1.py +0 -0
  84. {verifiers-0.2.2.dev56 → verifiers-0.2.2.dev58}/tests/v1/fixtures/echo_multi_v0.py +0 -0
  85. {verifiers-0.2.2.dev56 → verifiers-0.2.2.dev58}/tests/v1/fixtures/echo_user_sim_v1.py +0 -0
  86. {verifiers-0.2.2.dev56 → verifiers-0.2.2.dev58}/tests/v1/fixtures/echo_v0.py +0 -0
  87. {verifiers-0.2.2.dev56 → verifiers-0.2.2.dev58}/tests/v1/fixtures/echo_v1.py +0 -0
  88. {verifiers-0.2.2.dev56 → verifiers-0.2.2.dev58}/tests/v1/fixtures/pyproject.toml +0 -0
  89. {verifiers-0.2.2.dev56 → verifiers-0.2.2.dev58}/tests/v1/test_color_codeword_tasks.py +0 -0
  90. {verifiers-0.2.2.dev56 → verifiers-0.2.2.dev58}/tests/v1/test_configs.py +0 -0
  91. {verifiers-0.2.2.dev56 → verifiers-0.2.2.dev58}/tests/v1/test_envs.py +0 -0
  92. {verifiers-0.2.2.dev56 → verifiers-0.2.2.dev58}/tests/v1/test_graph.py +0 -0
  93. {verifiers-0.2.2.dev56 → verifiers-0.2.2.dev58}/tests/v1/test_judges.py +0 -0
  94. {verifiers-0.2.2.dev56 → verifiers-0.2.2.dev58}/tests/v1/test_legacy.py +0 -0
  95. {verifiers-0.2.2.dev56 → verifiers-0.2.2.dev58}/tests/v1/test_scoring.py +0 -0
  96. {verifiers-0.2.2.dev56 → verifiers-0.2.2.dev58}/tests/v1/test_taskset.py +0 -0
  97. {verifiers-0.2.2.dev56 → verifiers-0.2.2.dev58}/tests/v1/test_trace.py +0 -0
  98. {verifiers-0.2.2.dev56 → verifiers-0.2.2.dev58}/verifiers/__init__.py +0 -0
  99. {verifiers-0.2.2.dev56 → verifiers-0.2.2.dev58}/verifiers/cli/__init__.py +0 -0
  100. {verifiers-0.2.2.dev56 → verifiers-0.2.2.dev58}/verifiers/cli/commands/__init__.py +0 -0
  101. {verifiers-0.2.2.dev56 → verifiers-0.2.2.dev58}/verifiers/cli/commands/build.py +0 -0
  102. {verifiers-0.2.2.dev56 → verifiers-0.2.2.dev58}/verifiers/cli/commands/eval.py +0 -0
  103. {verifiers-0.2.2.dev56 → verifiers-0.2.2.dev58}/verifiers/cli/commands/gepa.py +0 -0
  104. {verifiers-0.2.2.dev56 → verifiers-0.2.2.dev58}/verifiers/cli/commands/init.py +0 -0
  105. {verifiers-0.2.2.dev56 → verifiers-0.2.2.dev58}/verifiers/cli/commands/install.py +0 -0
  106. {verifiers-0.2.2.dev56 → verifiers-0.2.2.dev58}/verifiers/cli/commands/setup.py +0 -0
  107. {verifiers-0.2.2.dev56 → verifiers-0.2.2.dev58}/verifiers/cli/plugins/__init__.py +0 -0
  108. {verifiers-0.2.2.dev56 → verifiers-0.2.2.dev58}/verifiers/cli/plugins/prime.py +0 -0
  109. {verifiers-0.2.2.dev56 → verifiers-0.2.2.dev58}/verifiers/cli/tui.py +0 -0
  110. {verifiers-0.2.2.dev56 → verifiers-0.2.2.dev58}/verifiers/clients/__init__.py +0 -0
  111. {verifiers-0.2.2.dev56 → verifiers-0.2.2.dev58}/verifiers/clients/anthropic_messages_client.py +0 -0
  112. {verifiers-0.2.2.dev56 → verifiers-0.2.2.dev58}/verifiers/clients/client.py +0 -0
  113. {verifiers-0.2.2.dev56 → verifiers-0.2.2.dev58}/verifiers/clients/nemorl_chat_completions_client.py +0 -0
  114. {verifiers-0.2.2.dev56 → verifiers-0.2.2.dev58}/verifiers/clients/openai_chat_completions_client.py +0 -0
  115. {verifiers-0.2.2.dev56 → verifiers-0.2.2.dev58}/verifiers/clients/openai_chat_completions_token_client.py +0 -0
  116. {verifiers-0.2.2.dev56 → verifiers-0.2.2.dev58}/verifiers/clients/openai_completions_client.py +0 -0
  117. {verifiers-0.2.2.dev56 → verifiers-0.2.2.dev58}/verifiers/clients/openai_responses_client.py +0 -0
  118. {verifiers-0.2.2.dev56 → verifiers-0.2.2.dev58}/verifiers/clients/renderer_client.py +0 -0
  119. {verifiers-0.2.2.dev56 → verifiers-0.2.2.dev58}/verifiers/decorators.py +0 -0
  120. {verifiers-0.2.2.dev56 → verifiers-0.2.2.dev58}/verifiers/envs/__init__.py +0 -0
  121. {verifiers-0.2.2.dev56 → verifiers-0.2.2.dev58}/verifiers/envs/env_group.py +0 -0
  122. {verifiers-0.2.2.dev56 → verifiers-0.2.2.dev58}/verifiers/envs/environment.py +0 -0
  123. {verifiers-0.2.2.dev56 → verifiers-0.2.2.dev58}/verifiers/envs/experimental/README.md +0 -0
  124. {verifiers-0.2.2.dev56 → verifiers-0.2.2.dev58}/verifiers/envs/experimental/__init__.py +0 -0
  125. {verifiers-0.2.2.dev56 → verifiers-0.2.2.dev58}/verifiers/envs/experimental/cli_agent_env.py +0 -0
  126. {verifiers-0.2.2.dev56 → verifiers-0.2.2.dev58}/verifiers/envs/experimental/composable/README.md +0 -0
  127. {verifiers-0.2.2.dev56 → verifiers-0.2.2.dev58}/verifiers/envs/experimental/composable/__init__.py +0 -0
  128. {verifiers-0.2.2.dev56 → verifiers-0.2.2.dev58}/verifiers/envs/experimental/composable/_filter.py +0 -0
  129. {verifiers-0.2.2.dev56 → verifiers-0.2.2.dev58}/verifiers/envs/experimental/composable/composable_env.py +0 -0
  130. {verifiers-0.2.2.dev56 → verifiers-0.2.2.dev58}/verifiers/envs/experimental/composable/harness.py +0 -0
  131. {verifiers-0.2.2.dev56 → verifiers-0.2.2.dev58}/verifiers/envs/experimental/composable/harnesses/__init__.py +0 -0
  132. {verifiers-0.2.2.dev56 → verifiers-0.2.2.dev58}/verifiers/envs/experimental/composable/harnesses/mini_swe_agent.py +0 -0
  133. {verifiers-0.2.2.dev56 → verifiers-0.2.2.dev58}/verifiers/envs/experimental/composable/harnesses/opencode.py +0 -0
  134. {verifiers-0.2.2.dev56 → verifiers-0.2.2.dev58}/verifiers/envs/experimental/composable/harnesses/prompt.txt +0 -0
  135. {verifiers-0.2.2.dev56 → verifiers-0.2.2.dev58}/verifiers/envs/experimental/composable/harnesses/rlm.py +0 -0
  136. {verifiers-0.2.2.dev56 → verifiers-0.2.2.dev58}/verifiers/envs/experimental/composable/sandbox_debug_env.py +0 -0
  137. {verifiers-0.2.2.dev56 → verifiers-0.2.2.dev58}/verifiers/envs/experimental/composable/swe_debug_env.py +0 -0
  138. {verifiers-0.2.2.dev56 → verifiers-0.2.2.dev58}/verifiers/envs/experimental/composable/task.py +0 -0
  139. {verifiers-0.2.2.dev56 → verifiers-0.2.2.dev58}/verifiers/envs/experimental/composable/tasksets/__init__.py +0 -0
  140. {verifiers-0.2.2.dev56 → verifiers-0.2.2.dev58}/verifiers/envs/experimental/composable/tasksets/cp/__init__.py +0 -0
  141. {verifiers-0.2.2.dev56 → verifiers-0.2.2.dev58}/verifiers/envs/experimental/composable/tasksets/cp/cp_task.py +0 -0
  142. {verifiers-0.2.2.dev56 → verifiers-0.2.2.dev58}/verifiers/envs/experimental/composable/tasksets/cp/test_utils.py +0 -0
  143. {verifiers-0.2.2.dev56 → verifiers-0.2.2.dev58}/verifiers/envs/experimental/composable/tasksets/harbor/__init__.py +0 -0
  144. {verifiers-0.2.2.dev56 → verifiers-0.2.2.dev58}/verifiers/envs/experimental/composable/tasksets/harbor/cli_gym.py +0 -0
  145. {verifiers-0.2.2.dev56 → verifiers-0.2.2.dev58}/verifiers/envs/experimental/composable/tasksets/harbor/harbor.py +0 -0
  146. {verifiers-0.2.2.dev56 → verifiers-0.2.2.dev58}/verifiers/envs/experimental/composable/tasksets/harbor/terminal_lego.py +0 -0
  147. {verifiers-0.2.2.dev56 → verifiers-0.2.2.dev58}/verifiers/envs/experimental/composable/tasksets/math/__init__.py +0 -0
  148. {verifiers-0.2.2.dev56 → verifiers-0.2.2.dev58}/verifiers/envs/experimental/composable/tasksets/math/math_task.py +0 -0
  149. {verifiers-0.2.2.dev56 → verifiers-0.2.2.dev58}/verifiers/envs/experimental/composable/tasksets/swe/README.md +0 -0
  150. {verifiers-0.2.2.dev56 → verifiers-0.2.2.dev58}/verifiers/envs/experimental/composable/tasksets/swe/__init__.py +0 -0
  151. {verifiers-0.2.2.dev56 → verifiers-0.2.2.dev58}/verifiers/envs/experimental/composable/tasksets/swe/multi_swe/__init__.py +0 -0
  152. {verifiers-0.2.2.dev56 → verifiers-0.2.2.dev58}/verifiers/envs/experimental/composable/tasksets/swe/multi_swe/extract_fix_patch.sh +0 -0
  153. {verifiers-0.2.2.dev56 → verifiers-0.2.2.dev58}/verifiers/envs/experimental/composable/tasksets/swe/multi_swe/taskset.py +0 -0
  154. {verifiers-0.2.2.dev56 → verifiers-0.2.2.dev58}/verifiers/envs/experimental/composable/tasksets/swe/openswe/__init__.py +0 -0
  155. {verifiers-0.2.2.dev56 → verifiers-0.2.2.dev58}/verifiers/envs/experimental/composable/tasksets/swe/openswe/taskset.py +0 -0
  156. {verifiers-0.2.2.dev56 → verifiers-0.2.2.dev58}/verifiers/envs/experimental/composable/tasksets/swe/r2e_gym/__init__.py +0 -0
  157. {verifiers-0.2.2.dev56 → verifiers-0.2.2.dev58}/verifiers/envs/experimental/composable/tasksets/swe/r2e_gym/log_parser.py +0 -0
  158. {verifiers-0.2.2.dev56 → verifiers-0.2.2.dev58}/verifiers/envs/experimental/composable/tasksets/swe/r2e_gym/taskset.py +0 -0
  159. {verifiers-0.2.2.dev56 → verifiers-0.2.2.dev58}/verifiers/envs/experimental/composable/tasksets/swe/scale_swe/__init__.py +0 -0
  160. {verifiers-0.2.2.dev56 → verifiers-0.2.2.dev58}/verifiers/envs/experimental/composable/tasksets/swe/scale_swe/taskset.py +0 -0
  161. {verifiers-0.2.2.dev56 → verifiers-0.2.2.dev58}/verifiers/envs/experimental/composable/tasksets/swe/shared/__init__.py +0 -0
  162. {verifiers-0.2.2.dev56 → verifiers-0.2.2.dev58}/verifiers/envs/experimental/composable/tasksets/swe/shared/test_patch.py +0 -0
  163. {verifiers-0.2.2.dev56 → verifiers-0.2.2.dev58}/verifiers/envs/experimental/composable/tasksets/swe/swe_bench/__init__.py +0 -0
  164. {verifiers-0.2.2.dev56 → verifiers-0.2.2.dev58}/verifiers/envs/experimental/composable/tasksets/swe/swe_bench/taskset.py +0 -0
  165. {verifiers-0.2.2.dev56 → verifiers-0.2.2.dev58}/verifiers/envs/experimental/composable/tasksets/swe/swe_lego/__init__.py +0 -0
  166. {verifiers-0.2.2.dev56 → verifiers-0.2.2.dev58}/verifiers/envs/experimental/composable/tasksets/swe/swe_lego/taskset.py +0 -0
  167. {verifiers-0.2.2.dev56 → verifiers-0.2.2.dev58}/verifiers/envs/experimental/composable/tasksets/swe/swe_rebench_v2/__init__.py +0 -0
  168. {verifiers-0.2.2.dev56 → verifiers-0.2.2.dev58}/verifiers/envs/experimental/composable/tasksets/swe/swe_rebench_v2/log_parsers.py +0 -0
  169. {verifiers-0.2.2.dev56 → verifiers-0.2.2.dev58}/verifiers/envs/experimental/composable/tasksets/swe/swe_rebench_v2/taskset.py +0 -0
  170. {verifiers-0.2.2.dev56 → verifiers-0.2.2.dev58}/verifiers/envs/experimental/composable/tasksets/swe/swe_smith/__init__.py +0 -0
  171. {verifiers-0.2.2.dev56 → verifiers-0.2.2.dev58}/verifiers/envs/experimental/composable/tasksets/swe/swe_smith/taskset.py +0 -0
  172. {verifiers-0.2.2.dev56 → verifiers-0.2.2.dev58}/verifiers/envs/experimental/composable/tasksets/swe/swe_tasksets.py +0 -0
  173. {verifiers-0.2.2.dev56 → verifiers-0.2.2.dev58}/verifiers/envs/experimental/gym_env.py +0 -0
  174. {verifiers-0.2.2.dev56 → verifiers-0.2.2.dev58}/verifiers/envs/experimental/harbor_env/__init__.py +0 -0
  175. {verifiers-0.2.2.dev56 → verifiers-0.2.2.dev58}/verifiers/envs/experimental/harbor_env/env.py +0 -0
  176. {verifiers-0.2.2.dev56 → verifiers-0.2.2.dev58}/verifiers/envs/experimental/harbor_env/mcp.py +0 -0
  177. {verifiers-0.2.2.dev56 → verifiers-0.2.2.dev58}/verifiers/envs/experimental/mcp_env.py +0 -0
  178. {verifiers-0.2.2.dev56 → verifiers-0.2.2.dev58}/verifiers/envs/experimental/opencode_env.py +0 -0
  179. {verifiers-0.2.2.dev56 → verifiers-0.2.2.dev58}/verifiers/envs/experimental/opencode_qa_env.py +0 -0
  180. {verifiers-0.2.2.dev56 → verifiers-0.2.2.dev58}/verifiers/envs/experimental/opencode_rlm_env.py +0 -0
  181. {verifiers-0.2.2.dev56 → verifiers-0.2.2.dev58}/verifiers/envs/experimental/sandbox_mixin.py +0 -0
  182. {verifiers-0.2.2.dev56 → verifiers-0.2.2.dev58}/verifiers/envs/experimental/utils/__init__.py +0 -0
  183. {verifiers-0.2.2.dev56 → verifiers-0.2.2.dev58}/verifiers/envs/experimental/utils/file_locks.py +0 -0
  184. {verifiers-0.2.2.dev56 → verifiers-0.2.2.dev58}/verifiers/envs/experimental/utils/git_checkout_cache.py +0 -0
  185. {verifiers-0.2.2.dev56 → verifiers-0.2.2.dev58}/verifiers/envs/integrations/README.md +0 -0
  186. {verifiers-0.2.2.dev56 → verifiers-0.2.2.dev58}/verifiers/envs/integrations/__init__.py +0 -0
  187. {verifiers-0.2.2.dev56 → verifiers-0.2.2.dev58}/verifiers/envs/integrations/browser_env/README.md +0 -0
  188. {verifiers-0.2.2.dev56 → verifiers-0.2.2.dev58}/verifiers/envs/integrations/browser_env/__init__.py +0 -0
  189. {verifiers-0.2.2.dev56 → verifiers-0.2.2.dev58}/verifiers/envs/integrations/browser_env/browser_env.py +0 -0
  190. {verifiers-0.2.2.dev56 → verifiers-0.2.2.dev58}/verifiers/envs/integrations/browser_env/modes/__init__.py +0 -0
  191. {verifiers-0.2.2.dev56 → verifiers-0.2.2.dev58}/verifiers/envs/integrations/browser_env/modes/base.py +0 -0
  192. {verifiers-0.2.2.dev56 → verifiers-0.2.2.dev58}/verifiers/envs/integrations/browser_env/modes/cua_mode.py +0 -0
  193. {verifiers-0.2.2.dev56 → verifiers-0.2.2.dev58}/verifiers/envs/integrations/browser_env/modes/dom_mode.py +0 -0
  194. {verifiers-0.2.2.dev56 → verifiers-0.2.2.dev58}/verifiers/envs/integrations/openenv_env.py +0 -0
  195. {verifiers-0.2.2.dev56 → verifiers-0.2.2.dev58}/verifiers/envs/integrations/reasoninggym_env.py +0 -0
  196. {verifiers-0.2.2.dev56 → verifiers-0.2.2.dev58}/verifiers/envs/integrations/textarena_env.py +0 -0
  197. {verifiers-0.2.2.dev56 → verifiers-0.2.2.dev58}/verifiers/envs/multiturn_env.py +0 -0
  198. {verifiers-0.2.2.dev56 → verifiers-0.2.2.dev58}/verifiers/envs/python_env.py +0 -0
  199. {verifiers-0.2.2.dev56 → verifiers-0.2.2.dev58}/verifiers/envs/sandbox_env.py +0 -0
  200. {verifiers-0.2.2.dev56 → verifiers-0.2.2.dev58}/verifiers/envs/singleturn_env.py +0 -0
  201. {verifiers-0.2.2.dev56 → verifiers-0.2.2.dev58}/verifiers/envs/stateful_tool_env.py +0 -0
  202. {verifiers-0.2.2.dev56 → verifiers-0.2.2.dev58}/verifiers/envs/tool_env.py +0 -0
  203. {verifiers-0.2.2.dev56 → verifiers-0.2.2.dev58}/verifiers/errors.py +0 -0
  204. {verifiers-0.2.2.dev56 → verifiers-0.2.2.dev58}/verifiers/gepa/__init__.py +0 -0
  205. {verifiers-0.2.2.dev56 → verifiers-0.2.2.dev58}/verifiers/gepa/adapter.py +0 -0
  206. {verifiers-0.2.2.dev56 → verifiers-0.2.2.dev58}/verifiers/gepa/config.py +0 -0
  207. {verifiers-0.2.2.dev56 → verifiers-0.2.2.dev58}/verifiers/gepa/display.py +0 -0
  208. {verifiers-0.2.2.dev56 → verifiers-0.2.2.dev58}/verifiers/gepa/gepa_utils.py +0 -0
  209. {verifiers-0.2.2.dev56 → verifiers-0.2.2.dev58}/verifiers/parsers/__init__.py +0 -0
  210. {verifiers-0.2.2.dev56 → verifiers-0.2.2.dev58}/verifiers/parsers/maybe_think_parser.py +0 -0
  211. {verifiers-0.2.2.dev56 → verifiers-0.2.2.dev58}/verifiers/parsers/parser.py +0 -0
  212. {verifiers-0.2.2.dev56 → verifiers-0.2.2.dev58}/verifiers/parsers/think_parser.py +0 -0
  213. {verifiers-0.2.2.dev56 → verifiers-0.2.2.dev58}/verifiers/parsers/xml_parser.py +0 -0
  214. {verifiers-0.2.2.dev56 → verifiers-0.2.2.dev58}/verifiers/rubrics/__init__.py +0 -0
  215. {verifiers-0.2.2.dev56 → verifiers-0.2.2.dev58}/verifiers/rubrics/experimental/hybrid_math_rubric.py +0 -0
  216. {verifiers-0.2.2.dev56 → verifiers-0.2.2.dev58}/verifiers/rubrics/judge_rubric.py +0 -0
  217. {verifiers-0.2.2.dev56 → verifiers-0.2.2.dev58}/verifiers/rubrics/math_rubric.py +0 -0
  218. {verifiers-0.2.2.dev56 → verifiers-0.2.2.dev58}/verifiers/rubrics/rubric.py +0 -0
  219. {verifiers-0.2.2.dev56 → verifiers-0.2.2.dev58}/verifiers/rubrics/rubric_group.py +0 -0
  220. {verifiers-0.2.2.dev56 → verifiers-0.2.2.dev58}/verifiers/scripts/__init__.py +0 -0
  221. {verifiers-0.2.2.dev56 → verifiers-0.2.2.dev58}/verifiers/scripts/build.py +0 -0
  222. {verifiers-0.2.2.dev56 → verifiers-0.2.2.dev58}/verifiers/scripts/eval.py +0 -0
  223. {verifiers-0.2.2.dev56 → verifiers-0.2.2.dev58}/verifiers/scripts/gepa.py +0 -0
  224. {verifiers-0.2.2.dev56 → verifiers-0.2.2.dev58}/verifiers/scripts/init.py +0 -0
  225. {verifiers-0.2.2.dev56 → verifiers-0.2.2.dev58}/verifiers/scripts/install.py +0 -0
  226. {verifiers-0.2.2.dev56 → verifiers-0.2.2.dev58}/verifiers/scripts/setup.py +0 -0
  227. {verifiers-0.2.2.dev56 → verifiers-0.2.2.dev58}/verifiers/scripts/tui.py +0 -0
  228. {verifiers-0.2.2.dev56 → verifiers-0.2.2.dev58}/verifiers/serve/__init__.py +0 -0
  229. {verifiers-0.2.2.dev56 → verifiers-0.2.2.dev58}/verifiers/serve/client/env_client.py +0 -0
  230. {verifiers-0.2.2.dev56 → verifiers-0.2.2.dev58}/verifiers/serve/client/zmq_env_client.py +0 -0
  231. {verifiers-0.2.2.dev56 → verifiers-0.2.2.dev58}/verifiers/serve/server/__init__.py +0 -0
  232. {verifiers-0.2.2.dev56 → verifiers-0.2.2.dev58}/verifiers/serve/server/env_router.py +0 -0
  233. {verifiers-0.2.2.dev56 → verifiers-0.2.2.dev58}/verifiers/serve/server/env_server.py +0 -0
  234. {verifiers-0.2.2.dev56 → verifiers-0.2.2.dev58}/verifiers/serve/server/env_worker.py +0 -0
  235. {verifiers-0.2.2.dev56 → verifiers-0.2.2.dev58}/verifiers/serve/server/zmq_env_server.py +0 -0
  236. {verifiers-0.2.2.dev56 → verifiers-0.2.2.dev58}/verifiers/serve/types.py +0 -0
  237. {verifiers-0.2.2.dev56 → verifiers-0.2.2.dev58}/verifiers/types.py +0 -0
  238. {verifiers-0.2.2.dev56 → verifiers-0.2.2.dev58}/verifiers/utils/__init__.py +0 -0
  239. {verifiers-0.2.2.dev56 → verifiers-0.2.2.dev58}/verifiers/utils/async_utils.py +0 -0
  240. {verifiers-0.2.2.dev56 → verifiers-0.2.2.dev58}/verifiers/utils/client_utils.py +0 -0
  241. {verifiers-0.2.2.dev56 → verifiers-0.2.2.dev58}/verifiers/utils/config_utils.py +0 -0
  242. {verifiers-0.2.2.dev56 → verifiers-0.2.2.dev58}/verifiers/utils/data_utils.py +0 -0
  243. {verifiers-0.2.2.dev56 → verifiers-0.2.2.dev58}/verifiers/utils/display_utils.py +0 -0
  244. {verifiers-0.2.2.dev56 → verifiers-0.2.2.dev58}/verifiers/utils/env_config_utils.py +0 -0
  245. {verifiers-0.2.2.dev56 → verifiers-0.2.2.dev58}/verifiers/utils/env_utils.py +0 -0
  246. {verifiers-0.2.2.dev56 → verifiers-0.2.2.dev58}/verifiers/utils/error_utils.py +0 -0
  247. {verifiers-0.2.2.dev56 → verifiers-0.2.2.dev58}/verifiers/utils/eval_display.py +0 -0
  248. {verifiers-0.2.2.dev56 → verifiers-0.2.2.dev58}/verifiers/utils/eval_utils.py +0 -0
  249. {verifiers-0.2.2.dev56 → verifiers-0.2.2.dev58}/verifiers/utils/heartbeat.py +0 -0
  250. {verifiers-0.2.2.dev56 → verifiers-0.2.2.dev58}/verifiers/utils/import_utils.py +0 -0
  251. {verifiers-0.2.2.dev56 → verifiers-0.2.2.dev58}/verifiers/utils/install_utils.py +0 -0
  252. {verifiers-0.2.2.dev56 → verifiers-0.2.2.dev58}/verifiers/utils/interception_utils.py +0 -0
  253. {verifiers-0.2.2.dev56 → verifiers-0.2.2.dev58}/verifiers/utils/logging_utils.py +0 -0
  254. {verifiers-0.2.2.dev56 → verifiers-0.2.2.dev58}/verifiers/utils/message_utils.py +0 -0
  255. {verifiers-0.2.2.dev56 → verifiers-0.2.2.dev58}/verifiers/utils/metric_utils.py +0 -0
  256. {verifiers-0.2.2.dev56 → verifiers-0.2.2.dev58}/verifiers/utils/path_utils.py +0 -0
  257. {verifiers-0.2.2.dev56 → verifiers-0.2.2.dev58}/verifiers/utils/pricing_utils.py +0 -0
  258. {verifiers-0.2.2.dev56 → verifiers-0.2.2.dev58}/verifiers/utils/process_utils.py +0 -0
  259. {verifiers-0.2.2.dev56 → verifiers-0.2.2.dev58}/verifiers/utils/response_utils.py +0 -0
  260. {verifiers-0.2.2.dev56 → verifiers-0.2.2.dev58}/verifiers/utils/save_utils.py +0 -0
  261. {verifiers-0.2.2.dev56 → verifiers-0.2.2.dev58}/verifiers/utils/serve_utils.py +0 -0
  262. {verifiers-0.2.2.dev56 → verifiers-0.2.2.dev58}/verifiers/utils/thread_utils.py +0 -0
  263. {verifiers-0.2.2.dev56 → verifiers-0.2.2.dev58}/verifiers/utils/threaded_sandbox_client.py +0 -0
  264. {verifiers-0.2.2.dev56 → verifiers-0.2.2.dev58}/verifiers/utils/tool_utils.py +0 -0
  265. {verifiers-0.2.2.dev56 → verifiers-0.2.2.dev58}/verifiers/utils/usage_utils.py +0 -0
  266. {verifiers-0.2.2.dev56 → verifiers-0.2.2.dev58}/verifiers/utils/version_utils.py +0 -0
  267. {verifiers-0.2.2.dev56 → verifiers-0.2.2.dev58}/verifiers/v1/__init__.py +0 -0
  268. {verifiers-0.2.2.dev56 → verifiers-0.2.2.dev58}/verifiers/v1/acp/__init__.py +0 -0
  269. {verifiers-0.2.2.dev56 → verifiers-0.2.2.dev58}/verifiers/v1/acp/_runner.py +0 -0
  270. {verifiers-0.2.2.dev56 → verifiers-0.2.2.dev58}/verifiers/v1/artifacts.py +0 -0
  271. {verifiers-0.2.2.dev56 → verifiers-0.2.2.dev58}/verifiers/v1/cli/__init__.py +0 -0
  272. {verifiers-0.2.2.dev56 → verifiers-0.2.2.dev58}/verifiers/v1/cli/dashboard/__init__.py +0 -0
  273. {verifiers-0.2.2.dev56 → verifiers-0.2.2.dev58}/verifiers/v1/cli/dashboard/base.py +0 -0
  274. {verifiers-0.2.2.dev56 → verifiers-0.2.2.dev58}/verifiers/v1/cli/dashboard/eval.py +0 -0
  275. {verifiers-0.2.2.dev56 → verifiers-0.2.2.dev58}/verifiers/v1/cli/dashboard/replay.py +0 -0
  276. {verifiers-0.2.2.dev56 → verifiers-0.2.2.dev58}/verifiers/v1/cli/dashboard/validate.py +0 -0
  277. {verifiers-0.2.2.dev56 → verifiers-0.2.2.dev58}/verifiers/v1/cli/debug.py +0 -0
  278. {verifiers-0.2.2.dev56 → verifiers-0.2.2.dev58}/verifiers/v1/cli/eval/__init__.py +0 -0
  279. {verifiers-0.2.2.dev56 → verifiers-0.2.2.dev58}/verifiers/v1/cli/eval/main.py +0 -0
  280. {verifiers-0.2.2.dev56 → verifiers-0.2.2.dev58}/verifiers/v1/cli/eval/resume.py +0 -0
  281. {verifiers-0.2.2.dev56 → verifiers-0.2.2.dev58}/verifiers/v1/cli/eval/runner.py +0 -0
  282. {verifiers-0.2.2.dev56 → verifiers-0.2.2.dev58}/verifiers/v1/cli/gepa.py +0 -0
  283. {verifiers-0.2.2.dev56 → verifiers-0.2.2.dev58}/verifiers/v1/cli/output.py +0 -0
  284. {verifiers-0.2.2.dev56 → verifiers-0.2.2.dev58}/verifiers/v1/cli/replay.py +0 -0
  285. {verifiers-0.2.2.dev56 → verifiers-0.2.2.dev58}/verifiers/v1/cli/resolve.py +0 -0
  286. {verifiers-0.2.2.dev56 → verifiers-0.2.2.dev58}/verifiers/v1/cli/serve.py +0 -0
  287. {verifiers-0.2.2.dev56 → verifiers-0.2.2.dev58}/verifiers/v1/cli/validate.py +0 -0
  288. {verifiers-0.2.2.dev56 → verifiers-0.2.2.dev58}/verifiers/v1/clients/__init__.py +0 -0
  289. {verifiers-0.2.2.dev56 → verifiers-0.2.2.dev58}/verifiers/v1/clients/client.py +0 -0
  290. {verifiers-0.2.2.dev56 → verifiers-0.2.2.dev58}/verifiers/v1/clients/config.py +0 -0
  291. {verifiers-0.2.2.dev56 → verifiers-0.2.2.dev58}/verifiers/v1/clients/eval.py +0 -0
  292. {verifiers-0.2.2.dev56 → verifiers-0.2.2.dev58}/verifiers/v1/clients/train.py +0 -0
  293. {verifiers-0.2.2.dev56 → verifiers-0.2.2.dev58}/verifiers/v1/configs/__init__.py +0 -0
  294. {verifiers-0.2.2.dev56 → verifiers-0.2.2.dev58}/verifiers/v1/configs/agent.py +0 -0
  295. {verifiers-0.2.2.dev56 → verifiers-0.2.2.dev58}/verifiers/v1/configs/cli/__init__.py +0 -0
  296. {verifiers-0.2.2.dev56 → verifiers-0.2.2.dev58}/verifiers/v1/configs/cli/debug.py +0 -0
  297. {verifiers-0.2.2.dev56 → verifiers-0.2.2.dev58}/verifiers/v1/configs/cli/env.py +0 -0
  298. {verifiers-0.2.2.dev56 → verifiers-0.2.2.dev58}/verifiers/v1/configs/cli/eval.py +0 -0
  299. {verifiers-0.2.2.dev56 → verifiers-0.2.2.dev58}/verifiers/v1/configs/cli/init.py +0 -0
  300. {verifiers-0.2.2.dev56 → verifiers-0.2.2.dev58}/verifiers/v1/configs/cli/replay.py +0 -0
  301. {verifiers-0.2.2.dev56 → verifiers-0.2.2.dev58}/verifiers/v1/configs/cli/serve.py +0 -0
  302. {verifiers-0.2.2.dev56 → verifiers-0.2.2.dev58}/verifiers/v1/configs/cli/validate.py +0 -0
  303. {verifiers-0.2.2.dev56 → verifiers-0.2.2.dev58}/verifiers/v1/configs/env.py +0 -0
  304. {verifiers-0.2.2.dev56 → verifiers-0.2.2.dev58}/verifiers/v1/configs/harness.py +0 -0
  305. {verifiers-0.2.2.dev56 → verifiers-0.2.2.dev58}/verifiers/v1/configs/judge.py +0 -0
  306. {verifiers-0.2.2.dev56 → verifiers-0.2.2.dev58}/verifiers/v1/configs/legacy.py +0 -0
  307. {verifiers-0.2.2.dev56 → verifiers-0.2.2.dev58}/verifiers/v1/configs/retries.py +0 -0
  308. {verifiers-0.2.2.dev56 → verifiers-0.2.2.dev58}/verifiers/v1/configs/serve.py +0 -0
  309. {verifiers-0.2.2.dev56 → verifiers-0.2.2.dev58}/verifiers/v1/configs/task.py +0 -0
  310. {verifiers-0.2.2.dev56 → verifiers-0.2.2.dev58}/verifiers/v1/configs/taskset.py +0 -0
  311. {verifiers-0.2.2.dev56 → verifiers-0.2.2.dev58}/verifiers/v1/decorators.py +0 -0
  312. {verifiers-0.2.2.dev56 → verifiers-0.2.2.dev58}/verifiers/v1/dialects/__init__.py +0 -0
  313. {verifiers-0.2.2.dev56 → verifiers-0.2.2.dev58}/verifiers/v1/dialects/anthropic.py +0 -0
  314. {verifiers-0.2.2.dev56 → verifiers-0.2.2.dev58}/verifiers/v1/dialects/base.py +0 -0
  315. {verifiers-0.2.2.dev56 → verifiers-0.2.2.dev58}/verifiers/v1/dialects/chat.py +0 -0
  316. {verifiers-0.2.2.dev56 → verifiers-0.2.2.dev58}/verifiers/v1/dialects/responses.py +0 -0
  317. {verifiers-0.2.2.dev56 → verifiers-0.2.2.dev58}/verifiers/v1/envs/__init__.py +0 -0
  318. {verifiers-0.2.2.dev56 → verifiers-0.2.2.dev58}/verifiers/v1/envs/agentic_judge/__init__.py +0 -0
  319. {verifiers-0.2.2.dev56 → verifiers-0.2.2.dev58}/verifiers/v1/envs/agentic_judge/env.py +0 -0
  320. {verifiers-0.2.2.dev56 → verifiers-0.2.2.dev58}/verifiers/v1/envs/best_of_n/__init__.py +0 -0
  321. {verifiers-0.2.2.dev56 → verifiers-0.2.2.dev58}/verifiers/v1/envs/best_of_n/env.py +0 -0
  322. {verifiers-0.2.2.dev56 → verifiers-0.2.2.dev58}/verifiers/v1/envs/single_agent/__init__.py +0 -0
  323. {verifiers-0.2.2.dev56 → verifiers-0.2.2.dev58}/verifiers/v1/envs/single_agent/env.py +0 -0
  324. {verifiers-0.2.2.dev56 → verifiers-0.2.2.dev58}/verifiers/v1/envs/user_sim/__init__.py +0 -0
  325. {verifiers-0.2.2.dev56 → verifiers-0.2.2.dev58}/verifiers/v1/envs/user_sim/env.py +0 -0
  326. {verifiers-0.2.2.dev56 → verifiers-0.2.2.dev58}/verifiers/v1/episode.py +0 -0
  327. {verifiers-0.2.2.dev56 → verifiers-0.2.2.dev58}/verifiers/v1/errors.py +0 -0
  328. {verifiers-0.2.2.dev56 → verifiers-0.2.2.dev58}/verifiers/v1/gepa/__init__.py +0 -0
  329. {verifiers-0.2.2.dev56 → verifiers-0.2.2.dev58}/verifiers/v1/gepa/adapter.py +0 -0
  330. {verifiers-0.2.2.dev56 → verifiers-0.2.2.dev58}/verifiers/v1/gepa/config.py +0 -0
  331. {verifiers-0.2.2.dev56 → verifiers-0.2.2.dev58}/verifiers/v1/gepa/dataset.py +0 -0
  332. {verifiers-0.2.2.dev56 → verifiers-0.2.2.dev58}/verifiers/v1/gepa/reflection.py +0 -0
  333. {verifiers-0.2.2.dev56 → verifiers-0.2.2.dev58}/verifiers/v1/gepa/runner.py +0 -0
  334. {verifiers-0.2.2.dev56 → verifiers-0.2.2.dev58}/verifiers/v1/graph.py +0 -0
  335. {verifiers-0.2.2.dev56 → verifiers-0.2.2.dev58}/verifiers/v1/harness.py +0 -0
  336. {verifiers-0.2.2.dev56 → verifiers-0.2.2.dev58}/verifiers/v1/harnesses/__init__.py +0 -0
  337. {verifiers-0.2.2.dev56 → verifiers-0.2.2.dev58}/verifiers/v1/harnesses/bash/__init__.py +0 -0
  338. {verifiers-0.2.2.dev56 → verifiers-0.2.2.dev58}/verifiers/v1/harnesses/bash/harness.py +0 -0
  339. {verifiers-0.2.2.dev56 → verifiers-0.2.2.dev58}/verifiers/v1/harnesses/bash/program.py +0 -0
  340. {verifiers-0.2.2.dev56 → verifiers-0.2.2.dev58}/verifiers/v1/harnesses/browser_use/__init__.py +0 -0
  341. {verifiers-0.2.2.dev56 → verifiers-0.2.2.dev58}/verifiers/v1/harnesses/browser_use/harness.py +0 -0
  342. {verifiers-0.2.2.dev56 → verifiers-0.2.2.dev58}/verifiers/v1/harnesses/browser_use/program.py +0 -0
  343. {verifiers-0.2.2.dev56 → verifiers-0.2.2.dev58}/verifiers/v1/harnesses/claude_code/__init__.py +0 -0
  344. {verifiers-0.2.2.dev56 → verifiers-0.2.2.dev58}/verifiers/v1/harnesses/claude_code/harness.py +0 -0
  345. {verifiers-0.2.2.dev56 → verifiers-0.2.2.dev58}/verifiers/v1/harnesses/codex/__init__.py +0 -0
  346. {verifiers-0.2.2.dev56 → verifiers-0.2.2.dev58}/verifiers/v1/harnesses/codex/harness.py +0 -0
  347. {verifiers-0.2.2.dev56 → verifiers-0.2.2.dev58}/verifiers/v1/harnesses/kimi_code/__init__.py +0 -0
  348. {verifiers-0.2.2.dev56 → verifiers-0.2.2.dev58}/verifiers/v1/harnesses/kimi_code/harness.py +0 -0
  349. {verifiers-0.2.2.dev56 → verifiers-0.2.2.dev58}/verifiers/v1/harnesses/mini_swe_agent/__init__.py +0 -0
  350. {verifiers-0.2.2.dev56 → verifiers-0.2.2.dev58}/verifiers/v1/harnesses/mini_swe_agent/harness.py +0 -0
  351. {verifiers-0.2.2.dev56 → verifiers-0.2.2.dev58}/verifiers/v1/harnesses/mini_swe_agent/program.py +0 -0
  352. {verifiers-0.2.2.dev56 → verifiers-0.2.2.dev58}/verifiers/v1/harnesses/null/__init__.py +0 -0
  353. {verifiers-0.2.2.dev56 → verifiers-0.2.2.dev58}/verifiers/v1/harnesses/null/harness.py +0 -0
  354. {verifiers-0.2.2.dev56 → verifiers-0.2.2.dev58}/verifiers/v1/harnesses/null/program.py +0 -0
  355. {verifiers-0.2.2.dev56 → verifiers-0.2.2.dev58}/verifiers/v1/harnesses/pi/__init__.py +0 -0
  356. {verifiers-0.2.2.dev56 → verifiers-0.2.2.dev58}/verifiers/v1/harnesses/pi/harness.py +0 -0
  357. {verifiers-0.2.2.dev56 → verifiers-0.2.2.dev58}/verifiers/v1/harnesses/pool/__init__.py +0 -0
  358. {verifiers-0.2.2.dev56 → verifiers-0.2.2.dev58}/verifiers/v1/harnesses/pool/harness.py +0 -0
  359. {verifiers-0.2.2.dev56 → verifiers-0.2.2.dev58}/verifiers/v1/harnesses/rlm/__init__.py +0 -0
  360. {verifiers-0.2.2.dev56 → verifiers-0.2.2.dev58}/verifiers/v1/harnesses/rlm/harness.py +0 -0
  361. {verifiers-0.2.2.dev56 → verifiers-0.2.2.dev58}/verifiers/v1/harnesses/terminus_2/__init__.py +0 -0
  362. {verifiers-0.2.2.dev56 → verifiers-0.2.2.dev58}/verifiers/v1/harnesses/terminus_2/harness.py +0 -0
  363. {verifiers-0.2.2.dev56 → verifiers-0.2.2.dev58}/verifiers/v1/harnesses/terminus_2/program.py +0 -0
  364. {verifiers-0.2.2.dev56 → verifiers-0.2.2.dev58}/verifiers/v1/interception/__init__.py +0 -0
  365. {verifiers-0.2.2.dev56 → verifiers-0.2.2.dev58}/verifiers/v1/interception/base.py +0 -0
  366. {verifiers-0.2.2.dev56 → verifiers-0.2.2.dev58}/verifiers/v1/interception/pool.py +0 -0
  367. {verifiers-0.2.2.dev56 → verifiers-0.2.2.dev58}/verifiers/v1/interception/server.py +0 -0
  368. {verifiers-0.2.2.dev56 → verifiers-0.2.2.dev58}/verifiers/v1/interception/tunnel/__init__.py +0 -0
  369. {verifiers-0.2.2.dev56 → verifiers-0.2.2.dev58}/verifiers/v1/interception/tunnel/base.py +0 -0
  370. {verifiers-0.2.2.dev56 → verifiers-0.2.2.dev58}/verifiers/v1/interception/tunnel/custom.py +0 -0
  371. {verifiers-0.2.2.dev56 → verifiers-0.2.2.dev58}/verifiers/v1/interception/tunnel/prime.py +0 -0
  372. {verifiers-0.2.2.dev56 → verifiers-0.2.2.dev58}/verifiers/v1/judge.py +0 -0
  373. {verifiers-0.2.2.dev56 → verifiers-0.2.2.dev58}/verifiers/v1/judges/__init__.py +0 -0
  374. {verifiers-0.2.2.dev56 → verifiers-0.2.2.dev58}/verifiers/v1/judges/reference.py +0 -0
  375. {verifiers-0.2.2.dev56 → verifiers-0.2.2.dev58}/verifiers/v1/judges/reference.txt +0 -0
  376. {verifiers-0.2.2.dev56 → verifiers-0.2.2.dev58}/verifiers/v1/judges/rubric.py +0 -0
  377. {verifiers-0.2.2.dev56 → verifiers-0.2.2.dev58}/verifiers/v1/judges/rubric.txt +0 -0
  378. {verifiers-0.2.2.dev56 → verifiers-0.2.2.dev58}/verifiers/v1/legacy.py +0 -0
  379. {verifiers-0.2.2.dev56 → verifiers-0.2.2.dev58}/verifiers/v1/loaders.py +0 -0
  380. {verifiers-0.2.2.dev56 → verifiers-0.2.2.dev58}/verifiers/v1/mcp/__init__.py +0 -0
  381. {verifiers-0.2.2.dev56 → verifiers-0.2.2.dev58}/verifiers/v1/mcp/server.py +0 -0
  382. {verifiers-0.2.2.dev56 → verifiers-0.2.2.dev58}/verifiers/v1/mcp/toolset.py +0 -0
  383. {verifiers-0.2.2.dev56 → verifiers-0.2.2.dev58}/verifiers/v1/push.py +0 -0
  384. {verifiers-0.2.2.dev56 → verifiers-0.2.2.dev58}/verifiers/v1/retries.py +0 -0
  385. {verifiers-0.2.2.dev56 → verifiers-0.2.2.dev58}/verifiers/v1/runtimes/__init__.py +0 -0
  386. {verifiers-0.2.2.dev56 → verifiers-0.2.2.dev58}/verifiers/v1/runtimes/base.py +0 -0
  387. {verifiers-0.2.2.dev56 → verifiers-0.2.2.dev58}/verifiers/v1/runtimes/docker/__init__.py +0 -0
  388. {verifiers-0.2.2.dev56 → verifiers-0.2.2.dev58}/verifiers/v1/runtimes/docker/egress.py +0 -0
  389. {verifiers-0.2.2.dev56 → verifiers-0.2.2.dev58}/verifiers/v1/runtimes/limiters.py +0 -0
  390. {verifiers-0.2.2.dev56 → verifiers-0.2.2.dev58}/verifiers/v1/runtimes/modal.py +0 -0
  391. {verifiers-0.2.2.dev56 → verifiers-0.2.2.dev58}/verifiers/v1/runtimes/prime.py +0 -0
  392. {verifiers-0.2.2.dev56 → verifiers-0.2.2.dev58}/verifiers/v1/runtimes/subprocess.py +0 -0
  393. {verifiers-0.2.2.dev56 → verifiers-0.2.2.dev58}/verifiers/v1/scoring.py +0 -0
  394. {verifiers-0.2.2.dev56 → verifiers-0.2.2.dev58}/verifiers/v1/serve/__init__.py +0 -0
  395. {verifiers-0.2.2.dev56 → verifiers-0.2.2.dev58}/verifiers/v1/serve/client.py +0 -0
  396. {verifiers-0.2.2.dev56 → verifiers-0.2.2.dev58}/verifiers/v1/serve/pool.py +0 -0
  397. {verifiers-0.2.2.dev56 → verifiers-0.2.2.dev58}/verifiers/v1/serve/server.py +0 -0
  398. {verifiers-0.2.2.dev56 → verifiers-0.2.2.dev58}/verifiers/v1/serve/types.py +0 -0
  399. {verifiers-0.2.2.dev56 → verifiers-0.2.2.dev58}/verifiers/v1/session.py +0 -0
  400. {verifiers-0.2.2.dev56 → verifiers-0.2.2.dev58}/verifiers/v1/state.py +0 -0
  401. {verifiers-0.2.2.dev56 → verifiers-0.2.2.dev58}/verifiers/v1/tasksets/__init__.py +0 -0
  402. {verifiers-0.2.2.dev56 → verifiers-0.2.2.dev58}/verifiers/v1/tasksets/harbor/__init__.py +0 -0
  403. {verifiers-0.2.2.dev56 → verifiers-0.2.2.dev58}/verifiers/v1/tasksets/harbor/taskset.py +0 -0
  404. {verifiers-0.2.2.dev56 → verifiers-0.2.2.dev58}/verifiers/v1/tasksets/lean/__init__.py +0 -0
  405. {verifiers-0.2.2.dev56 → verifiers-0.2.2.dev58}/verifiers/v1/tasksets/lean/scoring.py +0 -0
  406. {verifiers-0.2.2.dev56 → verifiers-0.2.2.dev58}/verifiers/v1/tasksets/lean/taskset.py +0 -0
  407. {verifiers-0.2.2.dev56 → verifiers-0.2.2.dev58}/verifiers/v1/tasksets/openenv/__init__.py +0 -0
  408. {verifiers-0.2.2.dev56 → verifiers-0.2.2.dev58}/verifiers/v1/tasksets/openenv/taskset.py +0 -0
  409. {verifiers-0.2.2.dev56 → verifiers-0.2.2.dev58}/verifiers/v1/tasksets/textarena/__init__.py +0 -0
  410. {verifiers-0.2.2.dev56 → verifiers-0.2.2.dev58}/verifiers/v1/tasksets/textarena/taskset.py +0 -0
  411. {verifiers-0.2.2.dev56 → verifiers-0.2.2.dev58}/verifiers/v1/trace.py +0 -0
  412. {verifiers-0.2.2.dev56 → verifiers-0.2.2.dev58}/verifiers/v1/types.py +0 -0
  413. {verifiers-0.2.2.dev56 → verifiers-0.2.2.dev58}/verifiers/v1/utils/__init__.py +0 -0
  414. {verifiers-0.2.2.dev56 → verifiers-0.2.2.dev58}/verifiers/v1/utils/aio.py +0 -0
  415. {verifiers-0.2.2.dev56 → verifiers-0.2.2.dev58}/verifiers/v1/utils/format.py +0 -0
  416. {verifiers-0.2.2.dev56 → verifiers-0.2.2.dev58}/verifiers/v1/utils/generic.py +0 -0
  417. {verifiers-0.2.2.dev56 → verifiers-0.2.2.dev58}/verifiers/v1/utils/git.py +0 -0
  418. {verifiers-0.2.2.dev56 → verifiers-0.2.2.dev58}/verifiers/v1/utils/image.py +0 -0
  419. {verifiers-0.2.2.dev56 → verifiers-0.2.2.dev58}/verifiers/v1/utils/install.py +0 -0
  420. {verifiers-0.2.2.dev56 → verifiers-0.2.2.dev58}/verifiers/v1/utils/interrupt.py +0 -0
  421. {verifiers-0.2.2.dev56 → verifiers-0.2.2.dev58}/verifiers/v1/utils/logging.py +0 -0
  422. {verifiers-0.2.2.dev56 → verifiers-0.2.2.dev58}/verifiers/v1/utils/memory.py +0 -0
  423. {verifiers-0.2.2.dev56 → verifiers-0.2.2.dev58}/verifiers/v1/utils/sampling.py +0 -0
  424. {verifiers-0.2.2.dev56 → verifiers-0.2.2.dev58}/verifiers/v1/utils/version.py +0 -0
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: verifiers
3
- Version: 0.2.2.dev56
3
+ Version: 0.2.2.dev58
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
@@ -24,7 +24,9 @@ class CounterTaskConfig(vf.TaskConfig):
24
24
 
25
25
 
26
26
  class CounterTask(vf.Task[vf.TaskData, CounterState, CounterTaskConfig]):
27
- tools = (CounterToolset,)
27
+ @classmethod
28
+ def toolsets(cls, config: CounterTaskConfig) -> list[vf.Toolset]:
29
+ return [CounterToolset(config.tools)]
28
30
 
29
31
  @vf.reward(weight=1.0)
30
32
  async def counted(self, trace: vf.Trace) -> float:
@@ -28,7 +28,9 @@ class ACPResumeConfig(vf.TasksetConfig):
28
28
 
29
29
 
30
30
  class ACPResumeTask(vf.Task[vf.TaskData, vf.State, ACPResumeTaskConfig]):
31
- tools = (ResumeToolset,)
31
+ @classmethod
32
+ def toolsets(cls, config: ACPResumeTaskConfig) -> list[vf.Toolset]:
33
+ return [ResumeToolset(config.tools)]
32
34
 
33
35
  @vf.reward(weight=1.0)
34
36
  async def resumed(self, trace: vf.Trace) -> float:
@@ -1,12 +1,13 @@
1
1
  """echo (v1, MCP tool): retrieve a stamped echo from a `vf.Toolset`, then report it.
2
2
 
3
- The v1 tool fixture for the e2e matrix. The task declares an `EchoToolset` (`vf.Toolset`)
4
- with one `@vf.tool` method whose placement is CLI-tunable (`--taskset.task.tools.colocated`,
5
- `--taskset.task.tools.runtime.type`): it runs colocated in the harness's runtime or in its
6
- own runtime, and the harness must reach it wherever it lives. The tool stamps its output
7
- with a token the prompt never reveals, so the reward is 1.0 only if the model actually
8
- called the tool trivial when the infra works, impossible when it doesn't. The tool is
9
- task-agnostic, so it would also serve taskset-scoped (`Taskset.tools`).
3
+ The v1 tool fixture for the e2e matrix. The task constructs an `EchoToolset`
4
+ (`vf.Toolset`) in `Task.toolsets`, with one `@vf.tool` method whose placement is
5
+ CLI-tunable (`--taskset.task.tools.colocated`, `--taskset.task.tools.runtime.type`):
6
+ it runs colocated in the harness's runtime or in its own runtime, and the harness
7
+ must reach it wherever it lives. The tool stamps its output with a token the prompt
8
+ never reveals, so the reward is 1.0 only if the model actually called the tool
9
+ trivial when the infra works, impossible when it doesn't. The tool is task-agnostic,
10
+ so it would also serve taskset-scoped (`Taskset.toolsets`).
10
11
  """
11
12
 
12
13
  import verifiers.v1 as vf
@@ -29,7 +30,9 @@ class EchoToolTaskConfig(vf.TaskConfig):
29
30
 
30
31
 
31
32
  class EchoToolTask(vf.Task[vf.TaskData, vf.State, EchoToolTaskConfig]):
32
- tools = (EchoToolset,)
33
+ @classmethod
34
+ def toolsets(cls, config: EchoToolTaskConfig) -> list[vf.Toolset]:
35
+ return [EchoToolset(config.tools)]
33
36
 
34
37
  @vf.reward(weight=1.0)
35
38
  async def echoed(self, trace: vf.Trace) -> float:
@@ -26,8 +26,16 @@ class VisionToolset(vf.Toolset[vf.ToolsetConfig]):
26
26
  ]
27
27
 
28
28
 
29
- class ToolResponseImageTask(vf.Task):
30
- tools = (VisionToolset,)
29
+ class ToolResponseImageTaskConfig(vf.TaskConfig):
30
+ tools: vf.ToolsetConfig = vf.ToolsetConfig()
31
+
32
+
33
+ class ToolResponseImageTask(
34
+ vf.Task[vf.TaskData, vf.State, ToolResponseImageTaskConfig]
35
+ ):
36
+ @classmethod
37
+ def toolsets(cls, config: ToolResponseImageTaskConfig) -> list[vf.Toolset]:
38
+ return [VisionToolset(config.tools)]
31
39
 
32
40
  @vf.reward(weight=1.0)
33
41
  async def preserved_image_tool_result(self, trace: vf.Trace) -> float:
@@ -39,7 +47,13 @@ class ToolResponseImageTask(vf.Task):
39
47
  return 0.0
40
48
 
41
49
 
42
- class ToolResponseImageTaskset(vf.Taskset[ToolResponseImageTask, vf.TasksetConfig]):
50
+ class ToolResponseImageConfig(vf.TasksetConfig):
51
+ task: ToolResponseImageTaskConfig = ToolResponseImageTaskConfig()
52
+
53
+
54
+ class ToolResponseImageTaskset(
55
+ vf.Taskset[ToolResponseImageTask, ToolResponseImageConfig]
56
+ ):
43
57
  def load(self) -> list[ToolResponseImageTask]:
44
58
  return [
45
59
  ToolResponseImageTask(
@@ -234,7 +234,7 @@ async def test_tool(run_v1, harness_runtime, tool_runtime, tmp_path):
234
234
  the harness's runtime, or its own runtime) x the harness `runtime`. The tool stamps
235
235
  its output with a token the prompt never reveals, so reward 1.0 proves the tool was
236
236
  reachable from wherever the harness runs and actually ran. Eval-wide SHARED servers
237
- are a different scope (`Taskset.tools`) with their own env-server-path coverage:
237
+ are a different scope (`Taskset.toolsets`) with their own env-server-path coverage:
238
238
  `test_shared_tool_isolation`."""
239
239
  (trace,) = await run_v1(
240
240
  "echo-tool-v1",
@@ -335,7 +335,7 @@ class Agent:
335
335
  if self._server is None:
336
336
  return None
337
337
  if self._server.tunnel is not None or (
338
- run_is_local and not shared_tools and not type(task).tools
338
+ run_is_local and not shared_tools and not task.toolsets(task.config)
339
339
  ):
340
340
  return self._server
341
341
  return None
@@ -517,7 +517,10 @@ class Agent:
517
517
  )
518
518
  run_is_local = runtime_is_local(runtime_config)
519
519
  validate_pairing(
520
- self.harness, type(task), runtime_config, shared_tools=shared_tools
520
+ self.harness,
521
+ type(task),
522
+ runtime_config,
523
+ tools=[*task.toolsets(task.config), *shared_tools.values()],
521
524
  )
522
525
  # Timeout precedence: agent-level wins, else the task's, else no limit.
523
526
  agent_timeout = (
@@ -71,7 +71,12 @@ def _taskset_py(pkg: str, prefix: str, *, add_tool: bool) -> str:
71
71
  if add_tool:
72
72
  local_imports.append(f"from {pkg}.servers.tool import {prefix}Toolset")
73
73
  task_config_fields += "\n tools: vf.ToolsetConfig = vf.ToolsetConfig()"
74
- task_decls += f"\n tools = ({prefix}Toolset,)"
74
+ task_decls += (
75
+ "\n\n @classmethod"
76
+ f"\n def toolsets(cls, config: {prefix}TaskConfig) -> list[vf.Toolset]:"
77
+ f"\n return [{prefix}Toolset(config.tools)]"
78
+ "\n"
79
+ )
75
80
  if local_imports:
76
81
  imports += "\n\n" + "\n".join(local_imports)
77
82
  methods_block = ""
@@ -178,7 +183,7 @@ def _readme(dash: str, pkg: str, *, add_tool: bool, add_harness: bool) -> str:
178
183
  ]
179
184
  if add_tool:
180
185
  layout.append(
181
- f"- `{pkg}/servers/tool.py` — a `vf.Toolset` tool server, declared on `Task.tools`."
186
+ f"- `{pkg}/servers/tool.py` — a `vf.Toolset` tool server, constructed in `Task.toolsets`."
182
187
  )
183
188
  if add_harness:
184
189
  layout.append(
@@ -31,7 +31,7 @@ from verifiers.v1.interception import (
31
31
  from verifiers.v1.mcp import SharedToolServer, serve_shared
32
32
  from verifiers.v1.retries import run_episode_with_retry
33
33
  from verifiers.v1.runtimes import SubprocessConfig, runtime_is_local
34
- from verifiers.v1.task import Task, resolve_server_config
34
+ from verifiers.v1.task import Task
35
35
  from verifiers.v1.trace import Error, Trace
36
36
  from verifiers.v1.utils.generic import concrete_type
37
37
  from verifiers.v1.utils.memory import trim_memory_periodically
@@ -378,24 +378,17 @@ class Env(ABC, Generic[ConfigT]):
378
378
 
379
379
  def _requires_tunnel(self, shared: dict[str, SharedToolServer]) -> bool:
380
380
  """`requires_tunnel` over the consumers known before any rollout: role
381
- runtimes, live `shared` servers, and the task class's tool servers;
382
- a class overriding `server_config` conservatively counts as remote."""
381
+ runtimes, live `shared` servers, and the task class's tool servers
382
+ (`Task.toolsets` is a classmethod, so no task instance is needed)."""
383
383
  task_cls = type(self.taskset).task_type()
384
- server_classes = [*task_cls.tools]
385
- if server_classes and task_cls.server_config is not Task.server_config:
386
- return True
387
- sole = len({*task_cls.tools}) == 1
388
384
  configs = [
389
- resolve_server_config(
390
- task_cls.__name__, self.taskset.config.task, server_cls, sole=sole
391
- )
392
- for server_cls in server_classes
385
+ server.config for server in task_cls.toolsets(self.taskset.config.task)
393
386
  ]
394
387
  return requires_tunnel(self._runs_local(), configs, shared.values())
395
388
 
396
389
  @contextlib.asynccontextmanager
397
390
  async def shared_tools(self):
398
- servers = self.taskset.tool_servers()
391
+ servers = self.taskset.toolsets(self.taskset.config)
399
392
  if not servers:
400
393
  yield {}
401
394
  return
@@ -343,7 +343,7 @@ async def serve_shared(toolsets: list[Toolset], harness_is_local: bool = True):
343
343
  name = toolset.server_name
344
344
  if name in servers:
345
345
  raise ToolsetError(
346
- f"duplicate shared tool server name '{name}' in Taskset.tools — "
346
+ f"duplicate shared tool server name '{name}' in Taskset.toolsets — "
347
347
  f"give one a distinct TOOL_PREFIX"
348
348
  )
349
349
  if type(toolset).setup_task is not ServerBase.setup_task:
@@ -351,7 +351,7 @@ async def serve_shared(toolsets: list[Toolset], harness_is_local: bool = True):
351
351
  "shared server %r overrides `setup_task`, but `setup_task` is NEVER "
352
352
  "called for a taskset-scoped server (it's built once, task-agnostic) — "
353
353
  "its per-task logic will not run. Move task-agnostic work into `setup`, "
354
- "or declare it on `Task.tools` to run it per-rollout.",
354
+ "or construct it in `Task.toolsets` to run it per-rollout.",
355
355
  name,
356
356
  )
357
357
  if cfg.url: # already running remotely; nothing launched, nothing to bridge
@@ -258,7 +258,7 @@ class RolloutRun:
258
258
  ):
259
259
  await self.harness.setup(runtime)
260
260
  async with boundary(ToolsetError, "building tool servers"):
261
- tool_servers = self.task.tool_servers()
261
+ toolsets = self.task.toolsets(self.task.config)
262
262
  # `base_url` is the interception server's reachable URL for this rollout.
263
263
  # The harness reaches the model at `{base_url}/v1`; tool servers reach this
264
264
  # rollout's `/state` + `/task` at `base_url` — it's universally reachable
@@ -268,7 +268,7 @@ class RolloutRun:
268
268
  self._interception,
269
269
  runtime,
270
270
  self._session,
271
- tool_servers,
271
+ toolsets,
272
272
  self._shared_tools,
273
273
  )
274
274
  )
@@ -276,7 +276,7 @@ class RolloutRun:
276
276
  self._secret = secret
277
277
  self._urls = await self._stack.enter_async_context(
278
278
  serve_tools(
279
- tool_servers,
279
+ toolsets,
280
280
  runtime,
281
281
  shared=self._shared_tools,
282
282
  state_secret=secret,
@@ -3,8 +3,8 @@
3
3
  `TaskData` is the wire half: a frozen pydantic model carrying the data which
4
4
  initializes a task instance. Rides on `trace.task.data` in `traces.jsonl`.
5
5
 
6
- `Task` is the behavior half: runtime prep (`setup`/`finalize`), tool declarations
7
- (`tools`), and scoring (`@reward`/`@metric`) methods.
6
+ `Task` is the behavior half: runtime prep (`setup`/`finalize`), tool servers
7
+ (`toolsets`), and scoring (`@reward`/`@metric`) methods.
8
8
  """
9
9
 
10
10
  from __future__ import annotations
@@ -16,7 +16,6 @@ from collections.abc import Mapping
16
16
  from typing import TYPE_CHECKING, ClassVar, Generic, Self
17
17
 
18
18
  from pydantic import BaseModel, ConfigDict, Field
19
- from pydantic_config import BaseConfig
20
19
  from typing_extensions import TypeVar
21
20
 
22
21
  from verifiers.v1.artifacts import Artifact
@@ -122,37 +121,10 @@ DataT = TypeVar("DataT", bound=TaskData)
122
121
  ConfigT = TypeVar("ConfigT", bound=TaskConfig, default=TaskConfig)
123
122
 
124
123
 
125
- def resolve_server_config(
126
- owner: str, config: BaseConfig, server_cls: type, *, sole: bool = True
127
- ) -> BaseConfig:
128
- """The config a declared server class is built with, resolved off `config`'s
129
- fields: exact type match, else — only for a `sole` declared server — the unique
130
- isinstance match, else a default-constructed one. Two matching fields raise; the
131
- `server_config` methods are the explicit-pairing override. The isinstance
132
- fallback is `sole`-gated because with several servers a subclass-typed field
133
- could silently pair with the wrong one."""
134
- cfg_cls = server_cls._config_cls()
135
- values = {name: getattr(config, name) for name in type(config).model_fields}
136
- matched = [name for name, v in values.items() if type(v) is cfg_cls]
137
- if not matched and sole:
138
- matched = [name for name, v in values.items() if isinstance(v, cfg_cls)]
139
- if len(matched) > 1:
140
- raise TaskError(
141
- f"{owner}: ambiguous config for {server_cls.__name__} — config fields "
142
- f"{matched} all match {cfg_cls.__name__}; override `server_config` to pair "
143
- f"them explicitly"
144
- )
145
- if matched:
146
- return values[matched[0]]
147
- return cfg_cls()
148
-
149
-
150
124
  class Task(Generic[DataT, StateT, ConfigT]):
151
125
  NEEDS_CONTAINER: ClassVar[bool] = False
152
126
  """Whether the task needs a containerized environment (isolated filesystem, ...)."""
153
127
 
154
- tools: ClassVar[tuple[type[Toolset], ...]] = ()
155
-
156
128
  def __init__(self, data: DataT, config: ConfigT | None = None) -> None:
157
129
  self.data = data
158
130
  self.config = config if config is not None else self.config_type()()
@@ -249,16 +221,18 @@ class Task(Generic[DataT, StateT, ConfigT]):
249
221
 
250
222
  return [load_judge(config) for config in self.config.judges]
251
223
 
252
- def server_config(self, server_cls: type) -> BaseConfig:
253
- return resolve_server_config(
254
- type(self).__name__,
255
- self.config,
256
- server_cls,
257
- sole=len(set(type(self).tools)) == 1,
258
- )
224
+ @classmethod
225
+ def toolsets(cls, config: ConfigT) -> list[Toolset]:
226
+ """Tool servers launched per rollout, each constructed with its config off
227
+ `config` — override and wire explicitly:
228
+
229
+ @classmethod
230
+ def toolsets(cls, config: MyTaskConfig) -> list[vf.Toolset]:
231
+ return [SearchToolset(config.tools)]
259
232
 
260
- def tool_servers(self) -> list[Toolset]:
261
- return [cls(self.server_config(cls)) for cls in type(self).tools]
233
+ A classmethod so consumers can size placement (tunnels) off the class
234
+ before any task instance exists."""
235
+ return []
262
236
 
263
237
 
264
238
  TaskT = TypeVar("TaskT", bound=Task)
@@ -19,13 +19,12 @@ import itertools
19
19
  import random
20
20
  from abc import ABC, abstractmethod
21
21
  from collections.abc import Callable, Iterable, Iterator
22
- from typing import TYPE_CHECKING, ClassVar, Generic, Self
22
+ from typing import TYPE_CHECKING, Generic, Self
23
23
 
24
- from pydantic_config import BaseConfig
25
24
  from typing_extensions import TypeVar
26
25
 
27
26
  from verifiers.v1.configs.taskset import TasksetConfig
28
- from verifiers.v1.task import Task, TaskT, resolve_server_config
27
+ from verifiers.v1.task import Task, TaskT
29
28
  from verifiers.v1.utils.generic import concrete_type
30
29
  from verifiers.v1.utils.sampling import SEED
31
30
 
@@ -40,10 +39,6 @@ class Taskset(ABC, Generic[TaskT, TasksetConfigT]):
40
39
  """Whether the taskset is infinite (yields tasks forever). Class-declared;
41
40
  a `head(n)` view shadows it per instance (bounded by construction)."""
42
41
 
43
- tools: ClassVar[tuple[type[Toolset], ...]] = ()
44
- """Tool servers shared by all tasks in the taskset. The environment will
45
- spawn a single, global instance, reused across tasks."""
46
-
47
42
  def __init__(self, config: TasksetConfigT) -> None:
48
43
  self.config = config
49
44
  override = config.system_prompt
@@ -102,13 +97,14 @@ class Taskset(ABC, Generic[TaskT, TasksetConfigT]):
102
97
  def task_type(cls) -> type[Task]:
103
98
  return concrete_type(cls, Task, origin=Taskset) or Task
104
99
 
105
- def server_config(self, server_cls: type) -> BaseConfig:
106
- return resolve_server_config(
107
- type(self).__name__,
108
- self.config,
109
- server_cls,
110
- sole=len(set(type(self).tools)) == 1,
111
- )
112
-
113
- def tool_servers(self) -> list[Toolset]:
114
- return [cls(self.server_config(cls)) for cls in type(self).tools]
100
+ @classmethod
101
+ def toolsets(cls, config: TasksetConfigT) -> list[Toolset]:
102
+ """Tool servers shared by all tasks in the taskset (one global instance
103
+ per server, reused across an environment worker's rollouts), each
104
+ constructed with its config off `config` — override and wire explicitly:
105
+
106
+ @classmethod
107
+ def toolsets(cls, config: MyConfig) -> list[vf.Toolset]:
108
+ return [SearchToolset(config.tools)]
109
+ """
110
+ return []
@@ -77,18 +77,19 @@ def validate_pairing(
77
77
  task_cls: type[Task],
78
78
  runtime_config: RuntimeConfig,
79
79
  *,
80
- shared_tools: Collection = (),
80
+ tools: Collection = (),
81
81
  ) -> None:
82
82
  """Reject an impossible harness/task/runtime combination before any work happens.
83
- Every check reads class-level facts, so a failure holds for every row the task
84
- class can carry. For `shared_tools` only emptiness matters declarations and
85
- live servers alike mean MCP is in play. (Hosting a user is interaction-scoped,
86
- not task-scoped — `Agent.interaction` checks the harness can resume an exchange.)"""
87
- if not harness.SUPPORTS_MCP and (task_cls.tools or shared_tools):
83
+ A failure holds for every row the task class can carry. For `tools` only
84
+ emptiness matters task-declared and shared servers alike mean MCP is in play.
85
+ (Hosting a user is interaction-scoped, not task-scoped — `Agent.interaction`
86
+ checks the harness can resume an exchange.)"""
87
+ if not harness.SUPPORTS_MCP and tools:
88
88
  raise ValueError(
89
- f"Harness {harness.config.id!r} does not support MCP tools, but "
90
- f"{task_cls.__name__} exposes tool servers (MCP). Run it with a harness that "
91
- f"supports MCP (e.g. --env.agent.harness.id bash), or use tasks without tools."
89
+ f"Harness {harness.config.id!r} does not support MCP tools, but the run "
90
+ f"serves some ({task_cls.__name__}'s or the taskset's shared servers). Run "
91
+ f"it with a harness that supports MCP (e.g. --env.agent.harness.id bash), "
92
+ f"or use tasks without tools."
92
93
  )
93
94
  if not harness.SUPPORTS_SKILLS and harness.config.skills:
94
95
  raise ValueError(
File without changes