verifiers 0.3.1.dev42__tar.gz → 0.3.1.dev52__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 (438) hide show
  1. {verifiers-0.3.1.dev42 → verifiers-0.3.1.dev52}/PKG-INFO +3 -3
  2. {verifiers-0.3.1.dev42 → verifiers-0.3.1.dev52}/pyproject.toml +1 -1
  3. {verifiers-0.3.1.dev42 → verifiers-0.3.1.dev52}/tests/v1/conftest.py +4 -5
  4. {verifiers-0.3.1.dev42 → verifiers-0.3.1.dev52}/tests/v1/test_judges.py +2 -2
  5. {verifiers-0.3.1.dev42 → verifiers-0.3.1.dev52}/verifiers/v1/agent.py +2 -0
  6. {verifiers-0.3.1.dev42 → verifiers-0.3.1.dev52}/verifiers/v1/cli/dashboard/eval.py +1 -2
  7. {verifiers-0.3.1.dev42 → verifiers-0.3.1.dev52}/verifiers/v1/cli/debug.py +1 -0
  8. {verifiers-0.3.1.dev42 → verifiers-0.3.1.dev52}/verifiers/v1/cli/validate.py +2 -0
  9. {verifiers-0.3.1.dev42 → verifiers-0.3.1.dev52}/verifiers/v1/configs/cli/eval.py +1 -2
  10. {verifiers-0.3.1.dev42 → verifiers-0.3.1.dev52}/verifiers/v1/configs/harness.py +2 -3
  11. {verifiers-0.3.1.dev42 → verifiers-0.3.1.dev52}/verifiers/v1/configs/judge.py +3 -4
  12. {verifiers-0.3.1.dev42 → verifiers-0.3.1.dev52}/verifiers/v1/configs/taskset.py +2 -3
  13. {verifiers-0.3.1.dev42 → verifiers-0.3.1.dev52}/verifiers/v1/dialects/anthropic.py +49 -13
  14. {verifiers-0.3.1.dev42 → verifiers-0.3.1.dev52}/verifiers/v1/dialects/base.py +84 -5
  15. {verifiers-0.3.1.dev42 → verifiers-0.3.1.dev52}/verifiers/v1/dialects/chat.py +4 -3
  16. {verifiers-0.3.1.dev42 → verifiers-0.3.1.dev52}/verifiers/v1/dialects/responses.py +51 -21
  17. {verifiers-0.3.1.dev42 → verifiers-0.3.1.dev52}/verifiers/v1/interception/server.py +3 -1
  18. {verifiers-0.3.1.dev42 → verifiers-0.3.1.dev52}/verifiers/v1/mcp/launch.py +7 -2
  19. {verifiers-0.3.1.dev42 → verifiers-0.3.1.dev52}/verifiers/v1/rollout.py +18 -0
  20. {verifiers-0.3.1.dev42 → verifiers-0.3.1.dev52}/verifiers/v1/runtimes/__init__.py +4 -1
  21. {verifiers-0.3.1.dev42 → verifiers-0.3.1.dev52}/verifiers/v1/runtimes/base.py +9 -0
  22. {verifiers-0.3.1.dev42 → verifiers-0.3.1.dev52}/verifiers/v1/runtimes/docker/__init__.py +9 -3
  23. {verifiers-0.3.1.dev42 → verifiers-0.3.1.dev52}/verifiers/v1/runtimes/modal.py +3 -2
  24. {verifiers-0.3.1.dev42 → verifiers-0.3.1.dev52}/verifiers/v1/runtimes/prime.py +4 -3
  25. {verifiers-0.3.1.dev42 → verifiers-0.3.1.dev52}/verifiers/v1/runtimes/subprocess.py +3 -3
  26. {verifiers-0.3.1.dev42 → verifiers-0.3.1.dev52}/verifiers/v1/task.py +4 -0
  27. {verifiers-0.3.1.dev42 → verifiers-0.3.1.dev52}/verifiers/v1/tasksets/harbor/env.py +4 -1
  28. {verifiers-0.3.1.dev42 → verifiers-0.3.1.dev52}/verifiers/v1/tasksets/harbor/taskset.py +72 -24
  29. {verifiers-0.3.1.dev42 → verifiers-0.3.1.dev52}/verifiers/v1/types.py +3 -11
  30. {verifiers-0.3.1.dev42 → verifiers-0.3.1.dev52}/verifiers/v1/utils/loaders.py +4 -17
  31. verifiers-0.3.1.dev42/verifiers/v1/utils/install.py +0 -39
  32. verifiers-0.3.1.dev42/verifiers/v1/utils/install_utils.py +0 -239
  33. {verifiers-0.3.1.dev42 → verifiers-0.3.1.dev52}/.gitignore +0 -0
  34. {verifiers-0.3.1.dev42 → verifiers-0.3.1.dev52}/LICENSE +0 -0
  35. {verifiers-0.3.1.dev42 → verifiers-0.3.1.dev52}/README.md +0 -0
  36. {verifiers-0.3.1.dev42 → verifiers-0.3.1.dev52}/tests/__init__.py +0 -0
  37. {verifiers-0.3.1.dev42 → verifiers-0.3.1.dev52}/tests/conftest.py +0 -0
  38. {verifiers-0.3.1.dev42 → verifiers-0.3.1.dev52}/tests/test_browser_env.py +0 -0
  39. {verifiers-0.3.1.dev42 → verifiers-0.3.1.dev52}/tests/test_build_script.py +0 -0
  40. {verifiers-0.3.1.dev42 → verifiers-0.3.1.dev52}/tests/test_cli_agent_env.py +0 -0
  41. {verifiers-0.3.1.dev42 → verifiers-0.3.1.dev52}/tests/test_client_auth_errors.py +0 -0
  42. {verifiers-0.3.1.dev42 → verifiers-0.3.1.dev52}/tests/test_client_config.py +0 -0
  43. {verifiers-0.3.1.dev42 → verifiers-0.3.1.dev52}/tests/test_client_multimodal_types.py +0 -0
  44. {verifiers-0.3.1.dev42 → verifiers-0.3.1.dev52}/tests/test_composable_env.py +0 -0
  45. {verifiers-0.3.1.dev42 → verifiers-0.3.1.dev52}/tests/test_context_token_metrics.py +0 -0
  46. {verifiers-0.3.1.dev42 → verifiers-0.3.1.dev52}/tests/test_decorator_ranks.py +0 -0
  47. {verifiers-0.3.1.dev42 → verifiers-0.3.1.dev52}/tests/test_endpoint_registry.py +0 -0
  48. {verifiers-0.3.1.dev42 → verifiers-0.3.1.dev52}/tests/test_env_group.py +0 -0
  49. {verifiers-0.3.1.dev42 → verifiers-0.3.1.dev52}/tests/test_env_server.py +0 -0
  50. {verifiers-0.3.1.dev42 → verifiers-0.3.1.dev52}/tests/test_environment.py +0 -0
  51. {verifiers-0.3.1.dev42 → verifiers-0.3.1.dev52}/tests/test_environment_extra.py +0 -0
  52. {verifiers-0.3.1.dev42 → verifiers-0.3.1.dev52}/tests/test_error_chain.py +0 -0
  53. {verifiers-0.3.1.dev42 → verifiers-0.3.1.dev52}/tests/test_eval_display.py +0 -0
  54. {verifiers-0.3.1.dev42 → verifiers-0.3.1.dev52}/tests/test_eval_utils.py +0 -0
  55. {verifiers-0.3.1.dev42 → verifiers-0.3.1.dev52}/tests/test_gepa_cli.py +0 -0
  56. {verifiers-0.3.1.dev42 → verifiers-0.3.1.dev52}/tests/test_gepa_utils.py +0 -0
  57. {verifiers-0.3.1.dev42 → verifiers-0.3.1.dev52}/tests/test_gym_env.py +0 -0
  58. {verifiers-0.3.1.dev42 → verifiers-0.3.1.dev52}/tests/test_harbor_env_mcp.py +0 -0
  59. {verifiers-0.3.1.dev42 → verifiers-0.3.1.dev52}/tests/test_imports.py +0 -0
  60. {verifiers-0.3.1.dev42 → verifiers-0.3.1.dev52}/tests/test_init_script.py +0 -0
  61. {verifiers-0.3.1.dev42 → verifiers-0.3.1.dev52}/tests/test_install_utils.py +0 -0
  62. {verifiers-0.3.1.dev42 → verifiers-0.3.1.dev52}/tests/test_interception_utils.py +0 -0
  63. {verifiers-0.3.1.dev42 → verifiers-0.3.1.dev52}/tests/test_logging.py +0 -0
  64. {verifiers-0.3.1.dev42 → verifiers-0.3.1.dev52}/tests/test_math_rubric.py +0 -0
  65. {verifiers-0.3.1.dev42 → verifiers-0.3.1.dev52}/tests/test_maybe_think_parser.py +0 -0
  66. {verifiers-0.3.1.dev42 → verifiers-0.3.1.dev52}/tests/test_message_utils.py +0 -0
  67. {verifiers-0.3.1.dev42 → verifiers-0.3.1.dev52}/tests/test_message_utils_multimodal.py +0 -0
  68. {verifiers-0.3.1.dev42 → verifiers-0.3.1.dev52}/tests/test_multiturn_env.py +0 -0
  69. {verifiers-0.3.1.dev42 → verifiers-0.3.1.dev52}/tests/test_nemorl_client.py +0 -0
  70. {verifiers-0.3.1.dev42 → verifiers-0.3.1.dev52}/tests/test_openai_chat_completions_token_client.py +0 -0
  71. {verifiers-0.3.1.dev42 → verifiers-0.3.1.dev52}/tests/test_openai_responses_client.py +0 -0
  72. {verifiers-0.3.1.dev42 → verifiers-0.3.1.dev52}/tests/test_opencode_rlm_env.py +0 -0
  73. {verifiers-0.3.1.dev42 → verifiers-0.3.1.dev52}/tests/test_openenv_client.py +0 -0
  74. {verifiers-0.3.1.dev42 → verifiers-0.3.1.dev52}/tests/test_parser.py +0 -0
  75. {verifiers-0.3.1.dev42 → verifiers-0.3.1.dev52}/tests/test_path_utils.py +0 -0
  76. {verifiers-0.3.1.dev42 → verifiers-0.3.1.dev52}/tests/test_per_turn_timing.py +0 -0
  77. {verifiers-0.3.1.dev42 → verifiers-0.3.1.dev52}/tests/test_pricing_utils.py +0 -0
  78. {verifiers-0.3.1.dev42 → verifiers-0.3.1.dev52}/tests/test_prime_plugin.py +0 -0
  79. {verifiers-0.3.1.dev42 → verifiers-0.3.1.dev52}/tests/test_renderer_client.py +0 -0
  80. {verifiers-0.3.1.dev42 → verifiers-0.3.1.dev52}/tests/test_renderer_e2e.py +0 -0
  81. {verifiers-0.3.1.dev42 → verifiers-0.3.1.dev52}/tests/test_rlm_composable_env.py +0 -0
  82. {verifiers-0.3.1.dev42 → verifiers-0.3.1.dev52}/tests/test_rubric.py +0 -0
  83. {verifiers-0.3.1.dev42 → verifiers-0.3.1.dev52}/tests/test_rubric_group.py +0 -0
  84. {verifiers-0.3.1.dev42 → verifiers-0.3.1.dev52}/tests/test_sandbox_debug_env.py +0 -0
  85. {verifiers-0.3.1.dev42 → verifiers-0.3.1.dev52}/tests/test_sandbox_env.py +0 -0
  86. {verifiers-0.3.1.dev42 → verifiers-0.3.1.dev52}/tests/test_sandbox_mixin.py +0 -0
  87. {verifiers-0.3.1.dev42 → verifiers-0.3.1.dev52}/tests/test_save_utils.py +0 -0
  88. {verifiers-0.3.1.dev42 → verifiers-0.3.1.dev52}/tests/test_setup_script.py +0 -0
  89. {verifiers-0.3.1.dev42 → verifiers-0.3.1.dev52}/tests/test_singleturn_env.py +0 -0
  90. {verifiers-0.3.1.dev42 → verifiers-0.3.1.dev52}/tests/test_stateful_tool_env.py +0 -0
  91. {verifiers-0.3.1.dev42 → verifiers-0.3.1.dev52}/tests/test_think_parser.py +0 -0
  92. {verifiers-0.3.1.dev42 → verifiers-0.3.1.dev52}/tests/test_tool_env.py +0 -0
  93. {verifiers-0.3.1.dev42 → verifiers-0.3.1.dev52}/tests/test_tool_utils.py +0 -0
  94. {verifiers-0.3.1.dev42 → verifiers-0.3.1.dev52}/tests/test_trajectory_processing.py +0 -0
  95. {verifiers-0.3.1.dev42 → verifiers-0.3.1.dev52}/tests/test_tui_info_formatting.py +0 -0
  96. {verifiers-0.3.1.dev42 → verifiers-0.3.1.dev52}/tests/test_types.py +0 -0
  97. {verifiers-0.3.1.dev42 → verifiers-0.3.1.dev52}/tests/test_xml_parser.py +0 -0
  98. {verifiers-0.3.1.dev42 → verifiers-0.3.1.dev52}/tests/v1/fixtures/counter_tool_v1.py +0 -0
  99. {verifiers-0.3.1.dev42 → verifiers-0.3.1.dev52}/tests/v1/fixtures/duet_v1.py +0 -0
  100. {verifiers-0.3.1.dev42 → verifiers-0.3.1.dev52}/tests/v1/fixtures/echo_acp_resume_v1.py +0 -0
  101. {verifiers-0.3.1.dev42 → verifiers-0.3.1.dev52}/tests/v1/fixtures/echo_agentic_v1.py +0 -0
  102. {verifiers-0.3.1.dev42 → verifiers-0.3.1.dev52}/tests/v1/fixtures/echo_tool_v1.py +0 -0
  103. {verifiers-0.3.1.dev42 → verifiers-0.3.1.dev52}/tests/v1/fixtures/echo_user_sim_v1.py +0 -0
  104. {verifiers-0.3.1.dev42 → verifiers-0.3.1.dev52}/tests/v1/fixtures/echo_v1.py +0 -0
  105. {verifiers-0.3.1.dev42 → verifiers-0.3.1.dev52}/tests/v1/fixtures/pyproject.toml +0 -0
  106. {verifiers-0.3.1.dev42 → verifiers-0.3.1.dev52}/tests/v1/fixtures/tool_response_image_v1.py +0 -0
  107. {verifiers-0.3.1.dev42 → verifiers-0.3.1.dev52}/tests/v1/test_color_codeword_tasks.py +0 -0
  108. {verifiers-0.3.1.dev42 → verifiers-0.3.1.dev52}/tests/v1/test_configs.py +0 -0
  109. {verifiers-0.3.1.dev42 → verifiers-0.3.1.dev52}/tests/v1/test_e2e.py +0 -0
  110. {verifiers-0.3.1.dev42 → verifiers-0.3.1.dev52}/tests/v1/test_envs.py +0 -0
  111. {verifiers-0.3.1.dev42 → verifiers-0.3.1.dev52}/tests/v1/test_graph.py +0 -0
  112. {verifiers-0.3.1.dev42 → verifiers-0.3.1.dev52}/tests/v1/test_scoring.py +0 -0
  113. {verifiers-0.3.1.dev42 → verifiers-0.3.1.dev52}/tests/v1/test_taskset.py +0 -0
  114. {verifiers-0.3.1.dev42 → verifiers-0.3.1.dev52}/tests/v1/test_trace.py +0 -0
  115. {verifiers-0.3.1.dev42 → verifiers-0.3.1.dev52}/verifiers/__init__.py +0 -0
  116. {verifiers-0.3.1.dev42 → verifiers-0.3.1.dev52}/verifiers/cli/__init__.py +0 -0
  117. {verifiers-0.3.1.dev42 → verifiers-0.3.1.dev52}/verifiers/cli/commands/__init__.py +0 -0
  118. {verifiers-0.3.1.dev42 → verifiers-0.3.1.dev52}/verifiers/cli/commands/build.py +0 -0
  119. {verifiers-0.3.1.dev42 → verifiers-0.3.1.dev52}/verifiers/cli/commands/eval.py +0 -0
  120. {verifiers-0.3.1.dev42 → verifiers-0.3.1.dev52}/verifiers/cli/commands/gepa.py +0 -0
  121. {verifiers-0.3.1.dev42 → verifiers-0.3.1.dev52}/verifiers/cli/commands/init.py +0 -0
  122. {verifiers-0.3.1.dev42 → verifiers-0.3.1.dev52}/verifiers/cli/commands/install.py +0 -0
  123. {verifiers-0.3.1.dev42 → verifiers-0.3.1.dev52}/verifiers/cli/commands/setup.py +0 -0
  124. {verifiers-0.3.1.dev42 → verifiers-0.3.1.dev52}/verifiers/cli/plugins/__init__.py +0 -0
  125. {verifiers-0.3.1.dev42 → verifiers-0.3.1.dev52}/verifiers/cli/plugins/prime.py +0 -0
  126. {verifiers-0.3.1.dev42 → verifiers-0.3.1.dev52}/verifiers/cli/tui.py +0 -0
  127. {verifiers-0.3.1.dev42 → verifiers-0.3.1.dev52}/verifiers/legacy/__init__.py +0 -0
  128. {verifiers-0.3.1.dev42 → verifiers-0.3.1.dev52}/verifiers/legacy/clients/__init__.py +0 -0
  129. {verifiers-0.3.1.dev42 → verifiers-0.3.1.dev52}/verifiers/legacy/clients/anthropic_messages_client.py +0 -0
  130. {verifiers-0.3.1.dev42 → verifiers-0.3.1.dev52}/verifiers/legacy/clients/client.py +0 -0
  131. {verifiers-0.3.1.dev42 → verifiers-0.3.1.dev52}/verifiers/legacy/clients/nemorl_chat_completions_client.py +0 -0
  132. {verifiers-0.3.1.dev42 → verifiers-0.3.1.dev52}/verifiers/legacy/clients/openai_chat_completions_client.py +0 -0
  133. {verifiers-0.3.1.dev42 → verifiers-0.3.1.dev52}/verifiers/legacy/clients/openai_chat_completions_token_client.py +0 -0
  134. {verifiers-0.3.1.dev42 → verifiers-0.3.1.dev52}/verifiers/legacy/clients/openai_completions_client.py +0 -0
  135. {verifiers-0.3.1.dev42 → verifiers-0.3.1.dev52}/verifiers/legacy/clients/openai_responses_client.py +0 -0
  136. {verifiers-0.3.1.dev42 → verifiers-0.3.1.dev52}/verifiers/legacy/clients/renderer_client.py +0 -0
  137. {verifiers-0.3.1.dev42 → verifiers-0.3.1.dev52}/verifiers/legacy/decorators.py +0 -0
  138. {verifiers-0.3.1.dev42 → verifiers-0.3.1.dev52}/verifiers/legacy/envs/__init__.py +0 -0
  139. {verifiers-0.3.1.dev42 → verifiers-0.3.1.dev52}/verifiers/legacy/envs/env_group.py +0 -0
  140. {verifiers-0.3.1.dev42 → verifiers-0.3.1.dev52}/verifiers/legacy/envs/environment.py +0 -0
  141. {verifiers-0.3.1.dev42 → verifiers-0.3.1.dev52}/verifiers/legacy/envs/experimental/README.md +0 -0
  142. {verifiers-0.3.1.dev42 → verifiers-0.3.1.dev52}/verifiers/legacy/envs/experimental/__init__.py +0 -0
  143. {verifiers-0.3.1.dev42 → verifiers-0.3.1.dev52}/verifiers/legacy/envs/experimental/cli_agent_env.py +0 -0
  144. {verifiers-0.3.1.dev42 → verifiers-0.3.1.dev52}/verifiers/legacy/envs/experimental/composable/README.md +0 -0
  145. {verifiers-0.3.1.dev42 → verifiers-0.3.1.dev52}/verifiers/legacy/envs/experimental/composable/__init__.py +0 -0
  146. {verifiers-0.3.1.dev42 → verifiers-0.3.1.dev52}/verifiers/legacy/envs/experimental/composable/_filter.py +0 -0
  147. {verifiers-0.3.1.dev42 → verifiers-0.3.1.dev52}/verifiers/legacy/envs/experimental/composable/composable_env.py +0 -0
  148. {verifiers-0.3.1.dev42 → verifiers-0.3.1.dev52}/verifiers/legacy/envs/experimental/composable/harness.py +0 -0
  149. {verifiers-0.3.1.dev42 → verifiers-0.3.1.dev52}/verifiers/legacy/envs/experimental/composable/harnesses/__init__.py +0 -0
  150. {verifiers-0.3.1.dev42 → verifiers-0.3.1.dev52}/verifiers/legacy/envs/experimental/composable/harnesses/mini_swe_agent.py +0 -0
  151. {verifiers-0.3.1.dev42 → verifiers-0.3.1.dev52}/verifiers/legacy/envs/experimental/composable/harnesses/opencode.py +0 -0
  152. {verifiers-0.3.1.dev42 → verifiers-0.3.1.dev52}/verifiers/legacy/envs/experimental/composable/harnesses/prompt.txt +0 -0
  153. {verifiers-0.3.1.dev42 → verifiers-0.3.1.dev52}/verifiers/legacy/envs/experimental/composable/harnesses/rlm.py +0 -0
  154. {verifiers-0.3.1.dev42 → verifiers-0.3.1.dev52}/verifiers/legacy/envs/experimental/composable/sandbox_debug_env.py +0 -0
  155. {verifiers-0.3.1.dev42 → verifiers-0.3.1.dev52}/verifiers/legacy/envs/experimental/composable/swe_debug_env.py +0 -0
  156. {verifiers-0.3.1.dev42 → verifiers-0.3.1.dev52}/verifiers/legacy/envs/experimental/composable/task.py +0 -0
  157. {verifiers-0.3.1.dev42 → verifiers-0.3.1.dev52}/verifiers/legacy/envs/experimental/composable/tasksets/__init__.py +0 -0
  158. {verifiers-0.3.1.dev42 → verifiers-0.3.1.dev52}/verifiers/legacy/envs/experimental/composable/tasksets/cp/__init__.py +0 -0
  159. {verifiers-0.3.1.dev42 → verifiers-0.3.1.dev52}/verifiers/legacy/envs/experimental/composable/tasksets/cp/cp_task.py +0 -0
  160. {verifiers-0.3.1.dev42 → verifiers-0.3.1.dev52}/verifiers/legacy/envs/experimental/composable/tasksets/cp/test_utils.py +0 -0
  161. {verifiers-0.3.1.dev42 → verifiers-0.3.1.dev52}/verifiers/legacy/envs/experimental/composable/tasksets/harbor/__init__.py +0 -0
  162. {verifiers-0.3.1.dev42 → verifiers-0.3.1.dev52}/verifiers/legacy/envs/experimental/composable/tasksets/harbor/cli_gym.py +0 -0
  163. {verifiers-0.3.1.dev42 → verifiers-0.3.1.dev52}/verifiers/legacy/envs/experimental/composable/tasksets/harbor/harbor.py +0 -0
  164. {verifiers-0.3.1.dev42 → verifiers-0.3.1.dev52}/verifiers/legacy/envs/experimental/composable/tasksets/harbor/terminal_lego.py +0 -0
  165. {verifiers-0.3.1.dev42 → verifiers-0.3.1.dev52}/verifiers/legacy/envs/experimental/composable/tasksets/math/__init__.py +0 -0
  166. {verifiers-0.3.1.dev42 → verifiers-0.3.1.dev52}/verifiers/legacy/envs/experimental/composable/tasksets/math/math_task.py +0 -0
  167. {verifiers-0.3.1.dev42 → verifiers-0.3.1.dev52}/verifiers/legacy/envs/experimental/composable/tasksets/swe/README.md +0 -0
  168. {verifiers-0.3.1.dev42 → verifiers-0.3.1.dev52}/verifiers/legacy/envs/experimental/composable/tasksets/swe/__init__.py +0 -0
  169. {verifiers-0.3.1.dev42 → verifiers-0.3.1.dev52}/verifiers/legacy/envs/experimental/composable/tasksets/swe/multi_swe/__init__.py +0 -0
  170. {verifiers-0.3.1.dev42 → verifiers-0.3.1.dev52}/verifiers/legacy/envs/experimental/composable/tasksets/swe/multi_swe/extract_fix_patch.sh +0 -0
  171. {verifiers-0.3.1.dev42 → verifiers-0.3.1.dev52}/verifiers/legacy/envs/experimental/composable/tasksets/swe/multi_swe/taskset.py +0 -0
  172. {verifiers-0.3.1.dev42 → verifiers-0.3.1.dev52}/verifiers/legacy/envs/experimental/composable/tasksets/swe/openswe/__init__.py +0 -0
  173. {verifiers-0.3.1.dev42 → verifiers-0.3.1.dev52}/verifiers/legacy/envs/experimental/composable/tasksets/swe/openswe/taskset.py +0 -0
  174. {verifiers-0.3.1.dev42 → verifiers-0.3.1.dev52}/verifiers/legacy/envs/experimental/composable/tasksets/swe/r2e_gym/__init__.py +0 -0
  175. {verifiers-0.3.1.dev42 → verifiers-0.3.1.dev52}/verifiers/legacy/envs/experimental/composable/tasksets/swe/r2e_gym/log_parser.py +0 -0
  176. {verifiers-0.3.1.dev42 → verifiers-0.3.1.dev52}/verifiers/legacy/envs/experimental/composable/tasksets/swe/r2e_gym/taskset.py +0 -0
  177. {verifiers-0.3.1.dev42 → verifiers-0.3.1.dev52}/verifiers/legacy/envs/experimental/composable/tasksets/swe/scale_swe/__init__.py +0 -0
  178. {verifiers-0.3.1.dev42 → verifiers-0.3.1.dev52}/verifiers/legacy/envs/experimental/composable/tasksets/swe/scale_swe/taskset.py +0 -0
  179. {verifiers-0.3.1.dev42 → verifiers-0.3.1.dev52}/verifiers/legacy/envs/experimental/composable/tasksets/swe/shared/__init__.py +0 -0
  180. {verifiers-0.3.1.dev42 → verifiers-0.3.1.dev52}/verifiers/legacy/envs/experimental/composable/tasksets/swe/shared/test_patch.py +0 -0
  181. {verifiers-0.3.1.dev42 → verifiers-0.3.1.dev52}/verifiers/legacy/envs/experimental/composable/tasksets/swe/swe_bench/__init__.py +0 -0
  182. {verifiers-0.3.1.dev42 → verifiers-0.3.1.dev52}/verifiers/legacy/envs/experimental/composable/tasksets/swe/swe_bench/taskset.py +0 -0
  183. {verifiers-0.3.1.dev42 → verifiers-0.3.1.dev52}/verifiers/legacy/envs/experimental/composable/tasksets/swe/swe_lego/__init__.py +0 -0
  184. {verifiers-0.3.1.dev42 → verifiers-0.3.1.dev52}/verifiers/legacy/envs/experimental/composable/tasksets/swe/swe_lego/taskset.py +0 -0
  185. {verifiers-0.3.1.dev42 → verifiers-0.3.1.dev52}/verifiers/legacy/envs/experimental/composable/tasksets/swe/swe_rebench_v2/__init__.py +0 -0
  186. {verifiers-0.3.1.dev42 → verifiers-0.3.1.dev52}/verifiers/legacy/envs/experimental/composable/tasksets/swe/swe_rebench_v2/log_parsers.py +0 -0
  187. {verifiers-0.3.1.dev42 → verifiers-0.3.1.dev52}/verifiers/legacy/envs/experimental/composable/tasksets/swe/swe_rebench_v2/taskset.py +0 -0
  188. {verifiers-0.3.1.dev42 → verifiers-0.3.1.dev52}/verifiers/legacy/envs/experimental/composable/tasksets/swe/swe_smith/__init__.py +0 -0
  189. {verifiers-0.3.1.dev42 → verifiers-0.3.1.dev52}/verifiers/legacy/envs/experimental/composable/tasksets/swe/swe_smith/taskset.py +0 -0
  190. {verifiers-0.3.1.dev42 → verifiers-0.3.1.dev52}/verifiers/legacy/envs/experimental/composable/tasksets/swe/swe_tasksets.py +0 -0
  191. {verifiers-0.3.1.dev42 → verifiers-0.3.1.dev52}/verifiers/legacy/envs/experimental/gym_env.py +0 -0
  192. {verifiers-0.3.1.dev42 → verifiers-0.3.1.dev52}/verifiers/legacy/envs/experimental/harbor_env/__init__.py +0 -0
  193. {verifiers-0.3.1.dev42 → verifiers-0.3.1.dev52}/verifiers/legacy/envs/experimental/harbor_env/env.py +0 -0
  194. {verifiers-0.3.1.dev42 → verifiers-0.3.1.dev52}/verifiers/legacy/envs/experimental/harbor_env/mcp.py +0 -0
  195. {verifiers-0.3.1.dev42 → verifiers-0.3.1.dev52}/verifiers/legacy/envs/experimental/mcp_env.py +0 -0
  196. {verifiers-0.3.1.dev42 → verifiers-0.3.1.dev52}/verifiers/legacy/envs/experimental/opencode_env.py +0 -0
  197. {verifiers-0.3.1.dev42 → verifiers-0.3.1.dev52}/verifiers/legacy/envs/experimental/opencode_qa_env.py +0 -0
  198. {verifiers-0.3.1.dev42 → verifiers-0.3.1.dev52}/verifiers/legacy/envs/experimental/opencode_rlm_env.py +0 -0
  199. {verifiers-0.3.1.dev42 → verifiers-0.3.1.dev52}/verifiers/legacy/envs/experimental/sandbox_mixin.py +0 -0
  200. {verifiers-0.3.1.dev42 → verifiers-0.3.1.dev52}/verifiers/legacy/envs/experimental/utils/__init__.py +0 -0
  201. {verifiers-0.3.1.dev42 → verifiers-0.3.1.dev52}/verifiers/legacy/envs/experimental/utils/file_locks.py +0 -0
  202. {verifiers-0.3.1.dev42 → verifiers-0.3.1.dev52}/verifiers/legacy/envs/experimental/utils/git_checkout_cache.py +0 -0
  203. {verifiers-0.3.1.dev42 → verifiers-0.3.1.dev52}/verifiers/legacy/envs/integrations/README.md +0 -0
  204. {verifiers-0.3.1.dev42 → verifiers-0.3.1.dev52}/verifiers/legacy/envs/integrations/__init__.py +0 -0
  205. {verifiers-0.3.1.dev42 → verifiers-0.3.1.dev52}/verifiers/legacy/envs/integrations/browser_env/README.md +0 -0
  206. {verifiers-0.3.1.dev42 → verifiers-0.3.1.dev52}/verifiers/legacy/envs/integrations/browser_env/__init__.py +0 -0
  207. {verifiers-0.3.1.dev42 → verifiers-0.3.1.dev52}/verifiers/legacy/envs/integrations/browser_env/browser_env.py +0 -0
  208. {verifiers-0.3.1.dev42 → verifiers-0.3.1.dev52}/verifiers/legacy/envs/integrations/browser_env/modes/__init__.py +0 -0
  209. {verifiers-0.3.1.dev42 → verifiers-0.3.1.dev52}/verifiers/legacy/envs/integrations/browser_env/modes/base.py +0 -0
  210. {verifiers-0.3.1.dev42 → verifiers-0.3.1.dev52}/verifiers/legacy/envs/integrations/browser_env/modes/cua_mode.py +0 -0
  211. {verifiers-0.3.1.dev42 → verifiers-0.3.1.dev52}/verifiers/legacy/envs/integrations/browser_env/modes/dom_mode.py +0 -0
  212. {verifiers-0.3.1.dev42 → verifiers-0.3.1.dev52}/verifiers/legacy/envs/integrations/openenv_env.py +0 -0
  213. {verifiers-0.3.1.dev42 → verifiers-0.3.1.dev52}/verifiers/legacy/envs/integrations/reasoninggym_env.py +0 -0
  214. {verifiers-0.3.1.dev42 → verifiers-0.3.1.dev52}/verifiers/legacy/envs/integrations/textarena_env.py +0 -0
  215. {verifiers-0.3.1.dev42 → verifiers-0.3.1.dev52}/verifiers/legacy/envs/multiturn_env.py +0 -0
  216. {verifiers-0.3.1.dev42 → verifiers-0.3.1.dev52}/verifiers/legacy/envs/python_env.py +0 -0
  217. {verifiers-0.3.1.dev42 → verifiers-0.3.1.dev52}/verifiers/legacy/envs/sandbox_env.py +0 -0
  218. {verifiers-0.3.1.dev42 → verifiers-0.3.1.dev52}/verifiers/legacy/envs/singleturn_env.py +0 -0
  219. {verifiers-0.3.1.dev42 → verifiers-0.3.1.dev52}/verifiers/legacy/envs/stateful_tool_env.py +0 -0
  220. {verifiers-0.3.1.dev42 → verifiers-0.3.1.dev52}/verifiers/legacy/envs/tool_env.py +0 -0
  221. {verifiers-0.3.1.dev42 → verifiers-0.3.1.dev52}/verifiers/legacy/errors.py +0 -0
  222. {verifiers-0.3.1.dev42 → verifiers-0.3.1.dev52}/verifiers/legacy/gepa/__init__.py +0 -0
  223. {verifiers-0.3.1.dev42 → verifiers-0.3.1.dev52}/verifiers/legacy/gepa/adapter.py +0 -0
  224. {verifiers-0.3.1.dev42 → verifiers-0.3.1.dev52}/verifiers/legacy/gepa/config.py +0 -0
  225. {verifiers-0.3.1.dev42 → verifiers-0.3.1.dev52}/verifiers/legacy/gepa/display.py +0 -0
  226. {verifiers-0.3.1.dev42 → verifiers-0.3.1.dev52}/verifiers/legacy/gepa/gepa_utils.py +0 -0
  227. {verifiers-0.3.1.dev42 → verifiers-0.3.1.dev52}/verifiers/legacy/parsers/__init__.py +0 -0
  228. {verifiers-0.3.1.dev42 → verifiers-0.3.1.dev52}/verifiers/legacy/parsers/maybe_think_parser.py +0 -0
  229. {verifiers-0.3.1.dev42 → verifiers-0.3.1.dev52}/verifiers/legacy/parsers/parser.py +0 -0
  230. {verifiers-0.3.1.dev42 → verifiers-0.3.1.dev52}/verifiers/legacy/parsers/think_parser.py +0 -0
  231. {verifiers-0.3.1.dev42 → verifiers-0.3.1.dev52}/verifiers/legacy/parsers/xml_parser.py +0 -0
  232. {verifiers-0.3.1.dev42 → verifiers-0.3.1.dev52}/verifiers/legacy/rubrics/__init__.py +0 -0
  233. {verifiers-0.3.1.dev42 → verifiers-0.3.1.dev52}/verifiers/legacy/rubrics/experimental/hybrid_math_rubric.py +0 -0
  234. {verifiers-0.3.1.dev42 → verifiers-0.3.1.dev52}/verifiers/legacy/rubrics/judge_rubric.py +0 -0
  235. {verifiers-0.3.1.dev42 → verifiers-0.3.1.dev52}/verifiers/legacy/rubrics/math_rubric.py +0 -0
  236. {verifiers-0.3.1.dev42 → verifiers-0.3.1.dev52}/verifiers/legacy/rubrics/rubric.py +0 -0
  237. {verifiers-0.3.1.dev42 → verifiers-0.3.1.dev52}/verifiers/legacy/rubrics/rubric_group.py +0 -0
  238. {verifiers-0.3.1.dev42 → verifiers-0.3.1.dev52}/verifiers/legacy/scripts/__init__.py +0 -0
  239. {verifiers-0.3.1.dev42 → verifiers-0.3.1.dev52}/verifiers/legacy/scripts/build.py +0 -0
  240. {verifiers-0.3.1.dev42 → verifiers-0.3.1.dev52}/verifiers/legacy/scripts/eval.py +0 -0
  241. {verifiers-0.3.1.dev42 → verifiers-0.3.1.dev52}/verifiers/legacy/scripts/gepa.py +0 -0
  242. {verifiers-0.3.1.dev42 → verifiers-0.3.1.dev52}/verifiers/legacy/scripts/init.py +0 -0
  243. {verifiers-0.3.1.dev42 → verifiers-0.3.1.dev52}/verifiers/legacy/scripts/install.py +0 -0
  244. {verifiers-0.3.1.dev42 → verifiers-0.3.1.dev52}/verifiers/legacy/scripts/setup.py +0 -0
  245. {verifiers-0.3.1.dev42 → verifiers-0.3.1.dev52}/verifiers/legacy/scripts/tui.py +0 -0
  246. {verifiers-0.3.1.dev42 → verifiers-0.3.1.dev52}/verifiers/legacy/serve/__init__.py +0 -0
  247. {verifiers-0.3.1.dev42 → verifiers-0.3.1.dev52}/verifiers/legacy/serve/client/env_client.py +0 -0
  248. {verifiers-0.3.1.dev42 → verifiers-0.3.1.dev52}/verifiers/legacy/serve/client/zmq_env_client.py +0 -0
  249. {verifiers-0.3.1.dev42 → verifiers-0.3.1.dev52}/verifiers/legacy/serve/server/__init__.py +0 -0
  250. {verifiers-0.3.1.dev42 → verifiers-0.3.1.dev52}/verifiers/legacy/serve/server/env_router.py +0 -0
  251. {verifiers-0.3.1.dev42 → verifiers-0.3.1.dev52}/verifiers/legacy/serve/server/env_server.py +0 -0
  252. {verifiers-0.3.1.dev42 → verifiers-0.3.1.dev52}/verifiers/legacy/serve/server/env_worker.py +0 -0
  253. {verifiers-0.3.1.dev42 → verifiers-0.3.1.dev52}/verifiers/legacy/serve/server/zmq_env_server.py +0 -0
  254. {verifiers-0.3.1.dev42 → verifiers-0.3.1.dev52}/verifiers/legacy/serve/types.py +0 -0
  255. {verifiers-0.3.1.dev42 → verifiers-0.3.1.dev52}/verifiers/legacy/types.py +0 -0
  256. {verifiers-0.3.1.dev42 → verifiers-0.3.1.dev52}/verifiers/legacy/utils/__init__.py +0 -0
  257. {verifiers-0.3.1.dev42 → verifiers-0.3.1.dev52}/verifiers/legacy/utils/async_utils.py +0 -0
  258. {verifiers-0.3.1.dev42 → verifiers-0.3.1.dev52}/verifiers/legacy/utils/client_utils.py +0 -0
  259. {verifiers-0.3.1.dev42 → verifiers-0.3.1.dev52}/verifiers/legacy/utils/config_utils.py +0 -0
  260. {verifiers-0.3.1.dev42 → verifiers-0.3.1.dev52}/verifiers/legacy/utils/data_utils.py +0 -0
  261. {verifiers-0.3.1.dev42 → verifiers-0.3.1.dev52}/verifiers/legacy/utils/display_utils.py +0 -0
  262. {verifiers-0.3.1.dev42 → verifiers-0.3.1.dev52}/verifiers/legacy/utils/env_config_utils.py +0 -0
  263. {verifiers-0.3.1.dev42 → verifiers-0.3.1.dev52}/verifiers/legacy/utils/env_utils.py +0 -0
  264. {verifiers-0.3.1.dev42 → verifiers-0.3.1.dev52}/verifiers/legacy/utils/error_utils.py +0 -0
  265. {verifiers-0.3.1.dev42 → verifiers-0.3.1.dev52}/verifiers/legacy/utils/eval_display.py +0 -0
  266. {verifiers-0.3.1.dev42 → verifiers-0.3.1.dev52}/verifiers/legacy/utils/eval_utils.py +0 -0
  267. {verifiers-0.3.1.dev42 → verifiers-0.3.1.dev52}/verifiers/legacy/utils/heartbeat.py +0 -0
  268. {verifiers-0.3.1.dev42 → verifiers-0.3.1.dev52}/verifiers/legacy/utils/import_utils.py +0 -0
  269. {verifiers-0.3.1.dev42 → verifiers-0.3.1.dev52}/verifiers/legacy/utils/install_utils.py +0 -0
  270. {verifiers-0.3.1.dev42 → verifiers-0.3.1.dev52}/verifiers/legacy/utils/interception_utils.py +0 -0
  271. {verifiers-0.3.1.dev42 → verifiers-0.3.1.dev52}/verifiers/legacy/utils/logging_utils.py +0 -0
  272. {verifiers-0.3.1.dev42 → verifiers-0.3.1.dev52}/verifiers/legacy/utils/message_utils.py +0 -0
  273. {verifiers-0.3.1.dev42 → verifiers-0.3.1.dev52}/verifiers/legacy/utils/metric_utils.py +0 -0
  274. {verifiers-0.3.1.dev42 → verifiers-0.3.1.dev52}/verifiers/legacy/utils/path_utils.py +0 -0
  275. {verifiers-0.3.1.dev42 → verifiers-0.3.1.dev52}/verifiers/legacy/utils/pricing_utils.py +0 -0
  276. {verifiers-0.3.1.dev42 → verifiers-0.3.1.dev52}/verifiers/legacy/utils/process_utils.py +0 -0
  277. {verifiers-0.3.1.dev42 → verifiers-0.3.1.dev52}/verifiers/legacy/utils/response_utils.py +0 -0
  278. {verifiers-0.3.1.dev42 → verifiers-0.3.1.dev52}/verifiers/legacy/utils/save_utils.py +0 -0
  279. {verifiers-0.3.1.dev42 → verifiers-0.3.1.dev52}/verifiers/legacy/utils/serve_utils.py +0 -0
  280. {verifiers-0.3.1.dev42 → verifiers-0.3.1.dev52}/verifiers/legacy/utils/thread_utils.py +0 -0
  281. {verifiers-0.3.1.dev42 → verifiers-0.3.1.dev52}/verifiers/legacy/utils/threaded_sandbox_client.py +0 -0
  282. {verifiers-0.3.1.dev42 → verifiers-0.3.1.dev52}/verifiers/legacy/utils/tool_utils.py +0 -0
  283. {verifiers-0.3.1.dev42 → verifiers-0.3.1.dev52}/verifiers/legacy/utils/usage_utils.py +0 -0
  284. {verifiers-0.3.1.dev42 → verifiers-0.3.1.dev52}/verifiers/legacy/utils/version_utils.py +0 -0
  285. {verifiers-0.3.1.dev42 → verifiers-0.3.1.dev52}/verifiers/v1/__init__.py +0 -0
  286. {verifiers-0.3.1.dev42 → verifiers-0.3.1.dev52}/verifiers/v1/acp/__init__.py +0 -0
  287. {verifiers-0.3.1.dev42 → verifiers-0.3.1.dev52}/verifiers/v1/acp/runner.py +0 -0
  288. {verifiers-0.3.1.dev42 → verifiers-0.3.1.dev52}/verifiers/v1/cli/__init__.py +0 -0
  289. {verifiers-0.3.1.dev42 → verifiers-0.3.1.dev52}/verifiers/v1/cli/dashboard/__init__.py +0 -0
  290. {verifiers-0.3.1.dev42 → verifiers-0.3.1.dev52}/verifiers/v1/cli/dashboard/base.py +0 -0
  291. {verifiers-0.3.1.dev42 → verifiers-0.3.1.dev52}/verifiers/v1/cli/dashboard/replay.py +0 -0
  292. {verifiers-0.3.1.dev42 → verifiers-0.3.1.dev52}/verifiers/v1/cli/dashboard/validate.py +0 -0
  293. {verifiers-0.3.1.dev42 → verifiers-0.3.1.dev52}/verifiers/v1/cli/eval/__init__.py +0 -0
  294. {verifiers-0.3.1.dev42 → verifiers-0.3.1.dev52}/verifiers/v1/cli/eval/main.py +0 -0
  295. {verifiers-0.3.1.dev42 → verifiers-0.3.1.dev52}/verifiers/v1/cli/eval/resume.py +0 -0
  296. {verifiers-0.3.1.dev42 → verifiers-0.3.1.dev52}/verifiers/v1/cli/eval/runner.py +0 -0
  297. {verifiers-0.3.1.dev42 → verifiers-0.3.1.dev52}/verifiers/v1/cli/gepa.py +0 -0
  298. {verifiers-0.3.1.dev42 → verifiers-0.3.1.dev52}/verifiers/v1/cli/init.py +0 -0
  299. {verifiers-0.3.1.dev42 → verifiers-0.3.1.dev52}/verifiers/v1/cli/output.py +0 -0
  300. {verifiers-0.3.1.dev42 → verifiers-0.3.1.dev52}/verifiers/v1/cli/replay.py +0 -0
  301. {verifiers-0.3.1.dev42 → verifiers-0.3.1.dev52}/verifiers/v1/cli/resolve.py +0 -0
  302. {verifiers-0.3.1.dev42 → verifiers-0.3.1.dev52}/verifiers/v1/cli/resume.py +0 -0
  303. {verifiers-0.3.1.dev42 → verifiers-0.3.1.dev52}/verifiers/v1/clients/__init__.py +0 -0
  304. {verifiers-0.3.1.dev42 → verifiers-0.3.1.dev52}/verifiers/v1/clients/base.py +0 -0
  305. {verifiers-0.3.1.dev42 → verifiers-0.3.1.dev52}/verifiers/v1/clients/client.py +0 -0
  306. {verifiers-0.3.1.dev42 → verifiers-0.3.1.dev52}/verifiers/v1/clients/eval.py +0 -0
  307. {verifiers-0.3.1.dev42 → verifiers-0.3.1.dev52}/verifiers/v1/clients/train.py +0 -0
  308. {verifiers-0.3.1.dev42 → verifiers-0.3.1.dev52}/verifiers/v1/configs/__init__.py +0 -0
  309. {verifiers-0.3.1.dev42 → verifiers-0.3.1.dev52}/verifiers/v1/configs/agent.py +0 -0
  310. {verifiers-0.3.1.dev42 → verifiers-0.3.1.dev52}/verifiers/v1/configs/cli/__init__.py +0 -0
  311. {verifiers-0.3.1.dev42 → verifiers-0.3.1.dev52}/verifiers/v1/configs/cli/debug.py +0 -0
  312. {verifiers-0.3.1.dev42 → verifiers-0.3.1.dev52}/verifiers/v1/configs/cli/env.py +0 -0
  313. {verifiers-0.3.1.dev42 → verifiers-0.3.1.dev52}/verifiers/v1/configs/cli/init.py +0 -0
  314. {verifiers-0.3.1.dev42 → verifiers-0.3.1.dev52}/verifiers/v1/configs/cli/replay.py +0 -0
  315. {verifiers-0.3.1.dev42 → verifiers-0.3.1.dev52}/verifiers/v1/configs/cli/validate.py +0 -0
  316. {verifiers-0.3.1.dev42 → verifiers-0.3.1.dev52}/verifiers/v1/configs/client.py +0 -0
  317. {verifiers-0.3.1.dev42 → verifiers-0.3.1.dev52}/verifiers/v1/configs/env.py +0 -0
  318. {verifiers-0.3.1.dev42 → verifiers-0.3.1.dev52}/verifiers/v1/configs/retries.py +0 -0
  319. {verifiers-0.3.1.dev42 → verifiers-0.3.1.dev52}/verifiers/v1/configs/runtime.py +0 -0
  320. {verifiers-0.3.1.dev42 → verifiers-0.3.1.dev52}/verifiers/v1/configs/serve.py +0 -0
  321. {verifiers-0.3.1.dev42 → verifiers-0.3.1.dev52}/verifiers/v1/configs/task.py +0 -0
  322. {verifiers-0.3.1.dev42 → verifiers-0.3.1.dev52}/verifiers/v1/dialects/__init__.py +0 -0
  323. {verifiers-0.3.1.dev42 → verifiers-0.3.1.dev52}/verifiers/v1/env.py +0 -0
  324. {verifiers-0.3.1.dev42 → verifiers-0.3.1.dev52}/verifiers/v1/envs/__init__.py +0 -0
  325. {verifiers-0.3.1.dev42 → verifiers-0.3.1.dev52}/verifiers/v1/envs/agentic_judge/__init__.py +0 -0
  326. {verifiers-0.3.1.dev42 → verifiers-0.3.1.dev52}/verifiers/v1/envs/agentic_judge/env.py +0 -0
  327. {verifiers-0.3.1.dev42 → verifiers-0.3.1.dev52}/verifiers/v1/envs/best_of_n/__init__.py +0 -0
  328. {verifiers-0.3.1.dev42 → verifiers-0.3.1.dev52}/verifiers/v1/envs/best_of_n/env.py +0 -0
  329. {verifiers-0.3.1.dev42 → verifiers-0.3.1.dev52}/verifiers/v1/envs/shared_agentic_judge/__init__.py +0 -0
  330. {verifiers-0.3.1.dev42 → verifiers-0.3.1.dev52}/verifiers/v1/envs/single_agent/__init__.py +0 -0
  331. {verifiers-0.3.1.dev42 → verifiers-0.3.1.dev52}/verifiers/v1/envs/single_agent/env.py +0 -0
  332. {verifiers-0.3.1.dev42 → verifiers-0.3.1.dev52}/verifiers/v1/envs/user_sim/__init__.py +0 -0
  333. {verifiers-0.3.1.dev42 → verifiers-0.3.1.dev52}/verifiers/v1/envs/user_sim/env.py +0 -0
  334. {verifiers-0.3.1.dev42 → verifiers-0.3.1.dev52}/verifiers/v1/episode.py +0 -0
  335. {verifiers-0.3.1.dev42 → verifiers-0.3.1.dev52}/verifiers/v1/errors.py +0 -0
  336. {verifiers-0.3.1.dev42 → verifiers-0.3.1.dev52}/verifiers/v1/gepa/__init__.py +0 -0
  337. {verifiers-0.3.1.dev42 → verifiers-0.3.1.dev52}/verifiers/v1/gepa/adapter.py +0 -0
  338. {verifiers-0.3.1.dev42 → verifiers-0.3.1.dev52}/verifiers/v1/gepa/config.py +0 -0
  339. {verifiers-0.3.1.dev42 → verifiers-0.3.1.dev52}/verifiers/v1/gepa/dataset.py +0 -0
  340. {verifiers-0.3.1.dev42 → verifiers-0.3.1.dev52}/verifiers/v1/gepa/reflection.py +0 -0
  341. {verifiers-0.3.1.dev42 → verifiers-0.3.1.dev52}/verifiers/v1/gepa/runner.py +0 -0
  342. {verifiers-0.3.1.dev42 → verifiers-0.3.1.dev52}/verifiers/v1/graph.py +0 -0
  343. {verifiers-0.3.1.dev42 → verifiers-0.3.1.dev52}/verifiers/v1/harness.py +0 -0
  344. {verifiers-0.3.1.dev42 → verifiers-0.3.1.dev52}/verifiers/v1/harnesses/__init__.py +0 -0
  345. {verifiers-0.3.1.dev42 → verifiers-0.3.1.dev52}/verifiers/v1/harnesses/bash/__init__.py +0 -0
  346. {verifiers-0.3.1.dev42 → verifiers-0.3.1.dev52}/verifiers/v1/harnesses/bash/harness.py +0 -0
  347. {verifiers-0.3.1.dev42 → verifiers-0.3.1.dev52}/verifiers/v1/harnesses/bash/program.py +0 -0
  348. {verifiers-0.3.1.dev42 → verifiers-0.3.1.dev52}/verifiers/v1/harnesses/browser_use/__init__.py +0 -0
  349. {verifiers-0.3.1.dev42 → verifiers-0.3.1.dev52}/verifiers/v1/harnesses/browser_use/harness.py +0 -0
  350. {verifiers-0.3.1.dev42 → verifiers-0.3.1.dev52}/verifiers/v1/harnesses/browser_use/program.py +0 -0
  351. {verifiers-0.3.1.dev42 → verifiers-0.3.1.dev52}/verifiers/v1/harnesses/claude_code/__init__.py +0 -0
  352. {verifiers-0.3.1.dev42 → verifiers-0.3.1.dev52}/verifiers/v1/harnesses/claude_code/harness.py +0 -0
  353. {verifiers-0.3.1.dev42 → verifiers-0.3.1.dev52}/verifiers/v1/harnesses/codex/__init__.py +0 -0
  354. {verifiers-0.3.1.dev42 → verifiers-0.3.1.dev52}/verifiers/v1/harnesses/codex/harness.py +0 -0
  355. {verifiers-0.3.1.dev42 → verifiers-0.3.1.dev52}/verifiers/v1/harnesses/hermes_agent/__init__.py +0 -0
  356. {verifiers-0.3.1.dev42 → verifiers-0.3.1.dev52}/verifiers/v1/harnesses/hermes_agent/harness.py +0 -0
  357. {verifiers-0.3.1.dev42 → verifiers-0.3.1.dev52}/verifiers/v1/harnesses/hermes_agent/program.py +0 -0
  358. {verifiers-0.3.1.dev42 → verifiers-0.3.1.dev52}/verifiers/v1/harnesses/kimi_code/__init__.py +0 -0
  359. {verifiers-0.3.1.dev42 → verifiers-0.3.1.dev52}/verifiers/v1/harnesses/kimi_code/harness.py +0 -0
  360. {verifiers-0.3.1.dev42 → verifiers-0.3.1.dev52}/verifiers/v1/harnesses/mini_swe_agent/__init__.py +0 -0
  361. {verifiers-0.3.1.dev42 → verifiers-0.3.1.dev52}/verifiers/v1/harnesses/mini_swe_agent/harness.py +0 -0
  362. {verifiers-0.3.1.dev42 → verifiers-0.3.1.dev52}/verifiers/v1/harnesses/mini_swe_agent/program.py +0 -0
  363. {verifiers-0.3.1.dev42 → verifiers-0.3.1.dev52}/verifiers/v1/harnesses/node.py +0 -0
  364. {verifiers-0.3.1.dev42 → verifiers-0.3.1.dev52}/verifiers/v1/harnesses/null/__init__.py +0 -0
  365. {verifiers-0.3.1.dev42 → verifiers-0.3.1.dev52}/verifiers/v1/harnesses/null/harness.py +0 -0
  366. {verifiers-0.3.1.dev42 → verifiers-0.3.1.dev52}/verifiers/v1/harnesses/null/program.py +0 -0
  367. {verifiers-0.3.1.dev42 → verifiers-0.3.1.dev52}/verifiers/v1/harnesses/openclaw/__init__.py +0 -0
  368. {verifiers-0.3.1.dev42 → verifiers-0.3.1.dev52}/verifiers/v1/harnesses/openclaw/harness.py +0 -0
  369. {verifiers-0.3.1.dev42 → verifiers-0.3.1.dev52}/verifiers/v1/harnesses/pi/__init__.py +0 -0
  370. {verifiers-0.3.1.dev42 → verifiers-0.3.1.dev52}/verifiers/v1/harnesses/pi/harness.py +0 -0
  371. {verifiers-0.3.1.dev42 → verifiers-0.3.1.dev52}/verifiers/v1/harnesses/pool/__init__.py +0 -0
  372. {verifiers-0.3.1.dev42 → verifiers-0.3.1.dev52}/verifiers/v1/harnesses/pool/harness.py +0 -0
  373. {verifiers-0.3.1.dev42 → verifiers-0.3.1.dev52}/verifiers/v1/harnesses/rlm/__init__.py +0 -0
  374. {verifiers-0.3.1.dev42 → verifiers-0.3.1.dev52}/verifiers/v1/harnesses/rlm/harness.py +0 -0
  375. {verifiers-0.3.1.dev42 → verifiers-0.3.1.dev52}/verifiers/v1/harnesses/terminus_2/__init__.py +0 -0
  376. {verifiers-0.3.1.dev42 → verifiers-0.3.1.dev52}/verifiers/v1/harnesses/terminus_2/harness.py +0 -0
  377. {verifiers-0.3.1.dev42 → verifiers-0.3.1.dev52}/verifiers/v1/harnesses/terminus_2/program.py +0 -0
  378. {verifiers-0.3.1.dev42 → verifiers-0.3.1.dev52}/verifiers/v1/interception/__init__.py +0 -0
  379. {verifiers-0.3.1.dev42 → verifiers-0.3.1.dev52}/verifiers/v1/interception/base.py +0 -0
  380. {verifiers-0.3.1.dev42 → verifiers-0.3.1.dev52}/verifiers/v1/interception/pool.py +0 -0
  381. {verifiers-0.3.1.dev42 → verifiers-0.3.1.dev52}/verifiers/v1/interception/tool.py +0 -0
  382. {verifiers-0.3.1.dev42 → verifiers-0.3.1.dev52}/verifiers/v1/interception/tunnel/__init__.py +0 -0
  383. {verifiers-0.3.1.dev42 → verifiers-0.3.1.dev52}/verifiers/v1/interception/tunnel/base.py +0 -0
  384. {verifiers-0.3.1.dev42 → verifiers-0.3.1.dev52}/verifiers/v1/interception/tunnel/custom.py +0 -0
  385. {verifiers-0.3.1.dev42 → verifiers-0.3.1.dev52}/verifiers/v1/interception/tunnel/prime.py +0 -0
  386. {verifiers-0.3.1.dev42 → verifiers-0.3.1.dev52}/verifiers/v1/judge.py +0 -0
  387. {verifiers-0.3.1.dev42 → verifiers-0.3.1.dev52}/verifiers/v1/judges/__init__.py +0 -0
  388. {verifiers-0.3.1.dev42 → verifiers-0.3.1.dev52}/verifiers/v1/judges/reference.py +0 -0
  389. {verifiers-0.3.1.dev42 → verifiers-0.3.1.dev52}/verifiers/v1/judges/reference.txt +0 -0
  390. {verifiers-0.3.1.dev42 → verifiers-0.3.1.dev52}/verifiers/v1/judges/rubric.py +0 -0
  391. {verifiers-0.3.1.dev42 → verifiers-0.3.1.dev52}/verifiers/v1/judges/rubric.txt +0 -0
  392. {verifiers-0.3.1.dev42 → verifiers-0.3.1.dev52}/verifiers/v1/mcp/__init__.py +0 -0
  393. {verifiers-0.3.1.dev42 → verifiers-0.3.1.dev52}/verifiers/v1/mcp/server.py +0 -0
  394. {verifiers-0.3.1.dev42 → verifiers-0.3.1.dev52}/verifiers/v1/mcp/toolset.py +0 -0
  395. {verifiers-0.3.1.dev42 → verifiers-0.3.1.dev52}/verifiers/v1/runtimes/docker/egress.py +0 -0
  396. {verifiers-0.3.1.dev42 → verifiers-0.3.1.dev52}/verifiers/v1/runtimes/limiters.py +0 -0
  397. {verifiers-0.3.1.dev42 → verifiers-0.3.1.dev52}/verifiers/v1/serve/__init__.py +0 -0
  398. {verifiers-0.3.1.dev42 → verifiers-0.3.1.dev52}/verifiers/v1/serve/client.py +0 -0
  399. {verifiers-0.3.1.dev42 → verifiers-0.3.1.dev52}/verifiers/v1/serve/encoding.py +0 -0
  400. {verifiers-0.3.1.dev42 → verifiers-0.3.1.dev52}/verifiers/v1/serve/pool.py +0 -0
  401. {verifiers-0.3.1.dev42 → verifiers-0.3.1.dev52}/verifiers/v1/serve/server.py +0 -0
  402. {verifiers-0.3.1.dev42 → verifiers-0.3.1.dev52}/verifiers/v1/serve/types.py +0 -0
  403. {verifiers-0.3.1.dev42 → verifiers-0.3.1.dev52}/verifiers/v1/session.py +0 -0
  404. {verifiers-0.3.1.dev42 → verifiers-0.3.1.dev52}/verifiers/v1/state.py +0 -0
  405. {verifiers-0.3.1.dev42 → verifiers-0.3.1.dev52}/verifiers/v1/taskset.py +0 -0
  406. {verifiers-0.3.1.dev42 → verifiers-0.3.1.dev52}/verifiers/v1/tasksets/__init__.py +0 -0
  407. {verifiers-0.3.1.dev42 → verifiers-0.3.1.dev52}/verifiers/v1/tasksets/harbor/__init__.py +0 -0
  408. {verifiers-0.3.1.dev42 → verifiers-0.3.1.dev52}/verifiers/v1/tasksets/lean/__init__.py +0 -0
  409. {verifiers-0.3.1.dev42 → verifiers-0.3.1.dev52}/verifiers/v1/tasksets/lean/scoring.py +0 -0
  410. {verifiers-0.3.1.dev42 → verifiers-0.3.1.dev52}/verifiers/v1/tasksets/lean/taskset.py +0 -0
  411. {verifiers-0.3.1.dev42 → verifiers-0.3.1.dev52}/verifiers/v1/tasksets/nemo_gym/__init__.py +0 -0
  412. {verifiers-0.3.1.dev42 → verifiers-0.3.1.dev52}/verifiers/v1/tasksets/nemo_gym/response.py +0 -0
  413. {verifiers-0.3.1.dev42 → verifiers-0.3.1.dev52}/verifiers/v1/tasksets/nemo_gym/server.py +0 -0
  414. {verifiers-0.3.1.dev42 → verifiers-0.3.1.dev52}/verifiers/v1/tasksets/nemo_gym/taskset.py +0 -0
  415. {verifiers-0.3.1.dev42 → verifiers-0.3.1.dev52}/verifiers/v1/tasksets/nemo_gym/toolset.py +0 -0
  416. {verifiers-0.3.1.dev42 → verifiers-0.3.1.dev52}/verifiers/v1/tasksets/openenv/__init__.py +0 -0
  417. {verifiers-0.3.1.dev42 → verifiers-0.3.1.dev52}/verifiers/v1/tasksets/openenv/taskset.py +0 -0
  418. {verifiers-0.3.1.dev42 → verifiers-0.3.1.dev52}/verifiers/v1/tasksets/textarena/__init__.py +0 -0
  419. {verifiers-0.3.1.dev42 → verifiers-0.3.1.dev52}/verifiers/v1/tasksets/textarena/taskset.py +0 -0
  420. {verifiers-0.3.1.dev42 → verifiers-0.3.1.dev52}/verifiers/v1/trace.py +0 -0
  421. {verifiers-0.3.1.dev42 → verifiers-0.3.1.dev52}/verifiers/v1/utils/__init__.py +0 -0
  422. {verifiers-0.3.1.dev42 → verifiers-0.3.1.dev52}/verifiers/v1/utils/aio.py +0 -0
  423. {verifiers-0.3.1.dev42 → verifiers-0.3.1.dev52}/verifiers/v1/utils/artifacts.py +0 -0
  424. {verifiers-0.3.1.dev42 → verifiers-0.3.1.dev52}/verifiers/v1/utils/compile.py +0 -0
  425. {verifiers-0.3.1.dev42 → verifiers-0.3.1.dev52}/verifiers/v1/utils/decorators.py +0 -0
  426. {verifiers-0.3.1.dev42 → verifiers-0.3.1.dev52}/verifiers/v1/utils/format.py +0 -0
  427. {verifiers-0.3.1.dev42 → verifiers-0.3.1.dev52}/verifiers/v1/utils/generic.py +0 -0
  428. {verifiers-0.3.1.dev42 → verifiers-0.3.1.dev52}/verifiers/v1/utils/git.py +0 -0
  429. {verifiers-0.3.1.dev42 → verifiers-0.3.1.dev52}/verifiers/v1/utils/image.py +0 -0
  430. {verifiers-0.3.1.dev42 → verifiers-0.3.1.dev52}/verifiers/v1/utils/interrupt.py +0 -0
  431. {verifiers-0.3.1.dev42 → verifiers-0.3.1.dev52}/verifiers/v1/utils/logging.py +0 -0
  432. {verifiers-0.3.1.dev42 → verifiers-0.3.1.dev52}/verifiers/v1/utils/memory.py +0 -0
  433. {verifiers-0.3.1.dev42 → verifiers-0.3.1.dev52}/verifiers/v1/utils/paths.py +0 -0
  434. {verifiers-0.3.1.dev42 → verifiers-0.3.1.dev52}/verifiers/v1/utils/platform.py +0 -0
  435. {verifiers-0.3.1.dev42 → verifiers-0.3.1.dev52}/verifiers/v1/utils/prime.py +0 -0
  436. {verifiers-0.3.1.dev42 → verifiers-0.3.1.dev52}/verifiers/v1/utils/retries.py +0 -0
  437. {verifiers-0.3.1.dev42 → verifiers-0.3.1.dev52}/verifiers/v1/utils/score.py +0 -0
  438. {verifiers-0.3.1.dev42 → verifiers-0.3.1.dev52}/verifiers/v1/utils/version.py +0 -0
@@ -1,6 +1,6 @@
1
- Metadata-Version: 2.4
1
+ Metadata-Version: 2.5
2
2
  Name: verifiers
3
- Version: 0.3.1.dev42
3
+ Version: 0.3.1.dev52
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
@@ -34,7 +34,7 @@ Requires-Dist: msgpack>=1.1.2
34
34
  Requires-Dist: numpy>=2.1.0
35
35
  Requires-Dist: openai-agents>=0.8.2
36
36
  Requires-Dist: openai>=2.9.0
37
- Requires-Dist: prime-pydantic-config[toml]>=0.4.2
37
+ Requires-Dist: prime-pydantic-config[toml]>=0.4.3
38
38
  Requires-Dist: prime-sandboxes>=0.2.37
39
39
  Requires-Dist: prime-tunnel>=0.1.8
40
40
  Requires-Dist: pydantic>=2.12.3
@@ -47,7 +47,7 @@ dependencies = [
47
47
  "setproctitle>=1.3.0",
48
48
  "httpx>=0.27.0",
49
49
  "aiohttp>=3.9.0",
50
- "prime-pydantic-config[toml]>=0.4.2",
50
+ "prime-pydantic-config[toml]>=0.4.3",
51
51
  "uvloop>=0.21.0; sys_platform != 'win32' and sys_platform != 'cygwin' and platform_python_implementation != 'PyPy'",
52
52
  "loguru>=0.7.0",
53
53
  "tomli-w>=1.0.0",
@@ -154,6 +154,8 @@ def _eval_config(
154
154
  runtime_cfg = dict(runtime)
155
155
  _configure_prime_runtimes(runtime_cfg)
156
156
  env_cfg.setdefault("agent", {})["runtime"] = runtime_cfg
157
+ retries = {"max_retries": 2, "include": ["ProviderError", "HarnessError"]}
158
+ env_cfg.setdefault("retries", retries)
157
159
  # Per-run caps live on the seats: resolve the env's declared roles and cap
158
160
  # each one (a test's own seat dict wins over the shared defaults).
159
161
  config_cls = vf.env_config_type(taskset, env_cfg.get("id", ""))
@@ -167,11 +169,8 @@ def _eval_config(
167
169
  seat_cfg.setdefault("max_turns", max_turns)
168
170
  seat_cfg.setdefault("max_output_tokens", max_tokens)
169
171
  seat_cfg.setdefault("timeout", {"rollout": rollout_timeout, "scoring": 60})
170
- # Flake resilience: retries are per-agent now (flat RetryConfig).
171
- seat_cfg.setdefault(
172
- "retries",
173
- {"max_retries": 2, "include": ["ProviderError", "HarnessError"]},
174
- )
172
+ # Agent runs retry locally; interactions retry with their whole episode.
173
+ seat_cfg.setdefault("retries", retries)
175
174
  return EvalConfig(
176
175
  env={
177
176
  "taskset": taskset_cfg,
@@ -184,7 +184,7 @@ def test_judges_reject_shared_reward_keys():
184
184
 
185
185
 
186
186
  def test_reward_name_fallback():
187
- # name > id's package name > snake-cased class name (code-level judge with neither).
187
+ # name > id > snake-cased class name (code-level judge with neither).
188
188
  class MyQualityJudge(vf.Judge[float]):
189
189
  prompt = "{x}"
190
190
 
@@ -192,7 +192,7 @@ def test_reward_name_fallback():
192
192
  vf.ReferenceJudge().reward_name == "reference"
193
193
  ) # class-name fallback (no id set)
194
194
  assert (
195
- vf.ReferenceJudge(vf.ReferenceJudgeConfig(id="org/my-judge@1.0.0")).reward_name
195
+ vf.ReferenceJudge(vf.ReferenceJudgeConfig(id="my-judge")).reward_name
196
196
  == "my-judge"
197
197
  )
198
198
  assert vf.ReferenceJudge(vf.ReferenceJudgeConfig(name="gold")).reward_name == "gold"
@@ -548,6 +548,8 @@ class Agent:
548
548
  else self.runtime_config
549
549
  )
550
550
  async with provision_runtime(config) as runtime:
551
+ # Keep sandbox startup task-neutral: this box may later host another task.
552
+ runtime.env = dict(task.runtime_env()) if task is not None else {}
551
553
  yield runtime
552
554
 
553
555
 
@@ -24,7 +24,6 @@ from verifiers.v1.utils.format import (
24
24
  format_override,
25
25
  format_time,
26
26
  )
27
- from verifiers.v1.utils.install import env_name
28
27
  from verifiers.v1.utils.interrupt import cleaning_up
29
28
 
30
29
  if TYPE_CHECKING:
@@ -240,7 +239,7 @@ def Overview(config: EvalConfig) -> Table:
240
239
  taskset = config.env.taskset
241
240
  env_label = taskset.name if taskset.id else "no taskset"
242
241
  if config.env.id:
243
- env_label = f"{env_name(config.env.id)}+{env_label}"
242
+ env_label = f"{config.env.id}+{env_label}"
244
243
  # One seat story when every seat resolves the same way (the common case); one
245
244
  # row per seat when they diverge (a judge on its own harness/runtime).
246
245
  runtimes = {role: getattr(config.env, role).runtime.type for role in seats}
@@ -224,6 +224,7 @@ async def debug_task(task: Task, config: DebugConfig) -> tuple[Trace, bool]:
224
224
  else task.data.timeout.setup
225
225
  )
226
226
  try:
227
+ runtime.env = dict(task.runtime_env())
227
228
  trace.timing.boot.start = time.time()
228
229
  await runtime.start()
229
230
  now = time.time()
@@ -235,6 +235,7 @@ async def _run_gold(task: Task, config: ValidateConfig) -> ResultRow:
235
235
  )
236
236
  valid, exc = False, None
237
237
  try:
238
+ runtime.env = dict(task.runtime_env())
238
239
  trace = Trace(
239
240
  task=TraceTask(
240
241
  type=type(task).__name__, data=task.data, key=task.key, hash=task.hash
@@ -278,6 +279,7 @@ async def _run_setup(task: Task, config: ValidateConfig) -> ResultRow:
278
279
  )
279
280
  valid, exc = False, None
280
281
  try:
282
+ runtime.env = dict(task.runtime_env())
281
283
  trace = Trace(
282
284
  task=TraceTask(
283
285
  type=type(task).__name__, data=task.data, key=task.key, hash=task.hash
@@ -12,7 +12,6 @@ from verifiers.v1.configs.env import EnvConfig
12
12
  from verifiers.v1.configs.serve import ServeConfig
13
13
  from verifiers.v1.envs.single_agent import SingleAgentEnvConfig
14
14
  from verifiers.v1.types import SamplingConfig
15
- from verifiers.v1.utils.install import env_name
16
15
 
17
16
 
18
17
  def default_run_name(env: EnvConfig, model: str) -> str:
@@ -24,7 +23,7 @@ def default_run_name(env: EnvConfig, model: str) -> str:
24
23
  if taskset.id and env.id:
25
24
  # Same compounding as `EnvConfig.env_id`: a `best-of-n+gsm8k` run must
26
25
  # not share a name with a plain `gsm8k` one.
27
- name = f"{env_name(env.id)}+{name}"
26
+ name = f"{env.id}+{name}"
28
27
  # Every seat's resolved harness, distinct, in role order.
29
28
  harness = "+".join(dict.fromkeys(h.name for h in env.agent_harnesses().values()))
30
29
  slug = (
@@ -9,12 +9,11 @@ from pydantic import ConfigDict, Field, FiniteFloat
9
9
  from pydantic_config import BaseConfig
10
10
 
11
11
  from verifiers.v1.types import ID
12
- from verifiers.v1.utils.install import env_name
13
12
 
14
13
 
15
14
  class HarnessConfig(BaseConfig):
16
15
  id: ID = "bash"
17
- """Local package or Hub `org/name[@version]`, set through the seat's
16
+ """Installed harness package, set through the seat's
18
17
  `--env.<role>.harness.id` (`--env.agent.harness.id` on the single-agent env)."""
19
18
  env: dict[str, str] = Field(default_factory=dict)
20
19
  """Extra program variables; harness-owned variables take precedence."""
@@ -30,7 +29,7 @@ class HarnessConfig(BaseConfig):
30
29
 
31
30
  @property
32
31
  def name(self) -> str:
33
- return env_name(self.id)
32
+ return self.id
34
33
 
35
34
  @property
36
35
  def resolved_env(self) -> dict[str, str]:
@@ -9,7 +9,6 @@ from pydantic import BaseModel, FiniteFloat, SerializeAsAny
9
9
 
10
10
  from verifiers.v1.clients import BaseClientConfig
11
11
  from verifiers.v1.types import ID, SamplingConfig
12
- from verifiers.v1.utils.install import env_name
13
12
 
14
13
 
15
14
  class JudgeConfig(BaseClientConfig):
@@ -29,7 +28,7 @@ Judges = list[SerializeAsAny[JudgeConfig]]
29
28
 
30
29
 
31
30
  def judge_key(config: JudgeConfig) -> str:
32
- return config.name or env_name(config.id)
31
+ return config.name or config.id
33
32
 
34
33
 
35
34
  def resolve_judges(entries: Sequence[Any]) -> list[JudgeConfig]:
@@ -41,7 +40,7 @@ def resolve_judges(entries: Sequence[Any]) -> list[JudgeConfig]:
41
40
  if not raw.get("id"):
42
41
  raise ValueError(
43
42
  "each `judges` entry needs an `id` (a judge plugin: `reference`, "
44
- "`rubric`, a local package, or a hub `org/name` package)"
43
+ "`rubric`, or an installed package)"
45
44
  )
46
45
  resolved.append(judge_config_type(raw["id"]).model_validate(raw))
47
46
  return resolved
@@ -52,7 +51,7 @@ def check_judges(entries: Sequence[JudgeConfig]) -> None:
52
51
  if not entry.id:
53
52
  raise ValueError(
54
53
  "each `judges` entry needs an `id` (a judge plugin: `reference`, "
55
- "`rubric`, a local package, or a hub `org/name` package)"
54
+ "`rubric`, or an installed package)"
56
55
  )
57
56
  keys = [judge_key(entry) for entry in entries]
58
57
  if duplicates := {key for key in keys if keys.count(key) > 1}:
@@ -7,12 +7,11 @@ from pydantic_config import BaseConfig
7
7
 
8
8
  from verifiers.v1.configs.task import TaskConfig
9
9
  from verifiers.v1.types import ID
10
- from verifiers.v1.utils.install import env_name
11
10
 
12
11
 
13
12
  class TasksetConfig(BaseConfig):
14
13
  id: ID = ""
15
- """Local package or Hub `org/name[@version]`, set with `--env.taskset.id` (or the
14
+ """Installed taskset package, set with `--env.taskset.id` (or the
16
15
  positional `eval <taskset-id>`)."""
17
16
  task: SerializeAsAny[TaskConfig] = TaskConfig()
18
17
  """Config passed to each task, under `--env.taskset.task.*`."""
@@ -22,4 +21,4 @@ class TasksetConfig(BaseConfig):
22
21
 
23
22
  @property
24
23
  def name(self) -> str:
25
- return env_name(self.id)
24
+ return self.id
@@ -16,12 +16,14 @@ from anthropic.types import Message as AnthropicMessage
16
16
  from anthropic.types import MessageCreateParams
17
17
  from anthropic.types import Usage as AnthropicUsage
18
18
 
19
+ from verifiers.v1.configs.runtime import NetworkPolicyConfig
19
20
  from verifiers.v1.dialects.base import (
20
21
  Dialect,
21
22
  StreamParser,
22
23
  append_user_notice,
23
24
  blocked_url,
24
25
  parse_sse_event,
26
+ provider_allowed_domains,
25
27
  )
26
28
  from verifiers.v1.types import (
27
29
  AssistantMessage,
@@ -56,6 +58,7 @@ THINKING = ("redacted_thinking", "thinking")
56
58
  # at the provider. Anchoring the pattern keeps new versions client-side without treating an
57
59
  # arbitrary dated provider tool as safe.
58
60
  _CLIENT_TOOL_TYPE = re.compile(r"(?:bash|text_editor|computer|memory)_\d{8}").fullmatch
61
+ _WEB_TOOL_TYPE = re.compile(r"web_(?:search|fetch)_\d{8}").fullmatch
59
62
  _CONTENT_WRAPPERS = (
60
63
  "tool_result",
61
64
  "code_execution_tool_result",
@@ -126,10 +129,10 @@ def parse_content(content) -> str | list[ContentPart]:
126
129
  return parts
127
130
 
128
131
 
129
- def blocked_content_path(value, path: str) -> str | None:
132
+ def blocked_content_path(value, path: str, policy: NetworkPolicyConfig) -> str | None:
130
133
  if isinstance(value, list):
131
134
  for index, item in enumerate(value):
132
- if blocked := blocked_content_path(item, f"{path}[{index}]"):
135
+ if blocked := blocked_content_path(item, f"{path}[{index}]", policy):
133
136
  return blocked
134
137
  return None
135
138
  if not isinstance(value, dict):
@@ -148,10 +151,12 @@ def blocked_content_path(value, path: str) -> str | None:
148
151
  return source_path
149
152
  source_kind = source.get("type")
150
153
  if source_kind == "content":
151
- return blocked_content_path(source.get("content"), f"{source_path}.content")
154
+ return blocked_content_path(
155
+ source.get("content"), f"{source_path}.content", policy
156
+ )
152
157
  if source_kind == "url":
153
158
  url = source.get("url")
154
- if not isinstance(url, str) or blocked_url(url):
159
+ if not isinstance(url, str) or blocked_url(url, policy):
155
160
  return f"{source_path}.url"
156
161
  if source_kind == "file":
157
162
  return (
@@ -169,13 +174,13 @@ def blocked_content_path(value, path: str) -> str | None:
169
174
  ) and value.get("file_id"):
170
175
  return f"{path}.file_id"
171
176
  if kind in _CONTENT_WRAPPERS:
172
- return blocked_content_path(value.get("content"), f"{path}.content")
177
+ return blocked_content_path(value.get("content"), f"{path}.content", policy)
173
178
  return None if kind in _SAFE_CONTENT_TYPES else f"{path}.type"
174
179
 
175
180
 
176
- def mediate_content(value, path: str):
181
+ def mediate_content(value, path: str, policy: NetworkPolicyConfig):
177
182
  if not isinstance(value, list):
178
- blocked = blocked_content_path(value, path)
183
+ blocked = blocked_content_path(value, path, policy)
179
184
  return ("", [blocked]) if blocked else (value, [])
180
185
 
181
186
  mediated = []
@@ -183,16 +188,18 @@ def mediate_content(value, path: str):
183
188
  for index, block in enumerate(value):
184
189
  item_path = f"{path}[{index}]"
185
190
  if isinstance(block, dict) and block.get("type") in _CONTENT_WRAPPERS:
186
- if blocked := blocked_content_path({**block, "content": []}, item_path):
191
+ if blocked := blocked_content_path(
192
+ {**block, "content": []}, item_path, policy
193
+ ):
187
194
  capabilities.append(blocked)
188
195
  continue
189
196
  content, removed = mediate_content(
190
- block.get("content"), f"{item_path}.content"
197
+ block.get("content"), f"{item_path}.content", policy
191
198
  )
192
199
  if removed:
193
200
  block["content"] = content or ""
194
201
  capabilities.extend(removed)
195
- elif blocked := blocked_content_path(block, item_path):
202
+ elif blocked := blocked_content_path(block, item_path, policy):
196
203
  capabilities.append(blocked)
197
204
  continue
198
205
  mediated.append(block)
@@ -448,7 +455,7 @@ class AnthropicDialect(Dialect[MessageCreateParams, AnthropicMessage]):
448
455
  response_type = ModdedAnthropicMessage
449
456
 
450
457
  def mediate_external_capabilities(
451
- self, body: MessageCreateParams
458
+ self, body: MessageCreateParams, policy: NetworkPolicyConfig
452
459
  ) -> tuple[MessageCreateParams, list[str]]:
453
460
  mediated = body
454
461
  capabilities: list[str] = []
@@ -457,7 +464,7 @@ class AnthropicDialect(Dialect[MessageCreateParams, AnthropicMessage]):
457
464
  if mediated.pop(key, None):
458
465
  capabilities.append(key)
459
466
 
460
- system, removed = mediate_content(mediated.get("system"), "system")
467
+ system, removed = mediate_content(mediated.get("system"), "system", policy)
461
468
  capabilities.extend(removed)
462
469
  if removed:
463
470
  if system:
@@ -469,7 +476,9 @@ class AnthropicDialect(Dialect[MessageCreateParams, AnthropicMessage]):
469
476
  if not isinstance(message, dict):
470
477
  continue
471
478
  content, removed = mediate_content(
472
- message.get("content"), f"messages[{message_index}].content"
479
+ message.get("content"),
480
+ f"messages[{message_index}].content",
481
+ policy,
473
482
  )
474
483
  capabilities.extend(removed)
475
484
  if removed:
@@ -482,6 +491,33 @@ class AnthropicDialect(Dialect[MessageCreateParams, AnthropicMessage]):
482
491
  tools = []
483
492
  for index, tool in enumerate(tool_items):
484
493
  kind = tool.get("type") if isinstance(tool, dict) else None
494
+ if (
495
+ isinstance(tool, dict)
496
+ and isinstance(kind, str)
497
+ and _WEB_TOOL_TYPE(kind)
498
+ ):
499
+ callers = tool.get("allowed_callers")
500
+ domains = (
501
+ provider_allowed_domains(policy, tool.get("allowed_domains"))
502
+ if tool.get("blocked_domains") in (None, [])
503
+ and (
504
+ callers is None
505
+ or isinstance(callers, list)
506
+ and "direct" in callers
507
+ )
508
+ else []
509
+ )
510
+ if domains:
511
+ web_tool = {
512
+ **tool,
513
+ "allowed_domains": domains,
514
+ "allowed_callers": ["direct"],
515
+ }
516
+ web_tool.pop("blocked_domains", None)
517
+ tools.append(web_tool)
518
+ continue
519
+ capabilities.append(f"tools[{index}].type")
520
+ continue
485
521
  if isinstance(tool, dict) and (
486
522
  (isinstance(kind, str) and _CLIENT_TOOL_TYPE(kind))
487
523
  or (kind in (None, "custom") and "input_schema" in tool)
@@ -16,16 +16,19 @@ import logging
16
16
  from abc import ABC, abstractmethod
17
17
  from collections.abc import Callable, Iterator, Mapping
18
18
  from typing import ClassVar, Generic, TypeVar
19
+ from urllib.parse import urlsplit
19
20
 
20
- from pydantic import BaseModel
21
+ from pydantic import AnyHttpUrl, BaseModel, TypeAdapter, ValidationError
21
22
  from pydantic_core import from_json
22
23
 
24
+ from verifiers.v1.configs.runtime import NetworkPolicyConfig, network_rule_matches
23
25
  from verifiers.v1.types import Request, Response, Sampling, SamplingConfig
24
26
 
25
27
  ReqT = TypeVar("ReqT")
26
28
  RespT = TypeVar("RespT", bound=BaseModel)
27
29
 
28
30
  logger = logging.getLogger(__name__)
31
+ HTTP_URL_ADAPTER = TypeAdapter(AnyHttpUrl)
29
32
 
30
33
  PROVIDER_CAPABILITY_POLICY_CODE = "provider_capability_unavailable"
31
34
  CAPABILITY_NOTICE = (
@@ -35,9 +38,83 @@ CAPABILITY_NOTICE = (
35
38
  )
36
39
 
37
40
 
38
- def blocked_url(value: str) -> bool:
39
- """Whether a provider-resolved resource is not inline data."""
40
- return not value.lower().startswith("data:")
41
+ def blocked_url(value: str, policy: NetworkPolicyConfig) -> bool:
42
+ """Whether a provider-resolved resource is neither inline nor policy-permitted."""
43
+ if value.lower().startswith("data:"):
44
+ return False
45
+ try:
46
+ url = HTTP_URL_ADAPTER.validate_python(value)
47
+ except ValidationError:
48
+ return True
49
+ host = url.host.lower().rstrip(".").strip("[]")
50
+ return any(
51
+ network_rule_matches(rule, url.scheme, host, url.port) for rule in policy.block
52
+ ) or not any(
53
+ network_rule_matches(rule, url.scheme, host, url.port) for rule in policy.allow
54
+ )
55
+
56
+
57
+ def provider_allowed_domains(
58
+ policy: NetworkPolicyConfig, requested: object = None
59
+ ) -> list[str]:
60
+ """Translate a network policy to provider domain-filter semantics without widening it."""
61
+ if policy.block or not policy.allow or "*" in policy.allow:
62
+ return []
63
+ domains = []
64
+ for rule in policy.allow:
65
+ try:
66
+ url = urlsplit(rule if "://" in rule else f"//{rule}")
67
+ port = url.port
68
+ except ValueError:
69
+ return []
70
+ host = (url.hostname or "").lower().rstrip(".")
71
+ domain = host.removeprefix("*.")
72
+ if (
73
+ url.scheme
74
+ or port is not None
75
+ or not host.startswith("*.")
76
+ or not domain
77
+ or "*" in domain
78
+ or not domain.isascii()
79
+ ):
80
+ return []
81
+ domains.append(domain)
82
+ domains = list(dict.fromkeys(domains))
83
+ if requested is None:
84
+ return domains
85
+ if not isinstance(requested, list):
86
+ return []
87
+ requested_domains = []
88
+ for domain in requested:
89
+ if not isinstance(domain, str):
90
+ return []
91
+ try:
92
+ url = urlsplit(domain if "://" in domain else f"//{domain}")
93
+ port = url.port
94
+ except ValueError:
95
+ return []
96
+ host = (url.hostname or "").lower().rstrip(".")
97
+ if (
98
+ url.scheme
99
+ or port is not None
100
+ or url.username is not None
101
+ or url.path
102
+ or url.query
103
+ or url.fragment
104
+ or not host
105
+ or "*" in host
106
+ or not host.isascii()
107
+ ):
108
+ return []
109
+ requested_domains.append(host)
110
+ intersection = []
111
+ for allowed in domains:
112
+ for requested_domain in requested_domains:
113
+ if allowed == requested_domain or allowed.endswith(f".{requested_domain}"):
114
+ intersection.append(allowed)
115
+ elif requested_domain.endswith(f".{allowed}"):
116
+ intersection.append(requested_domain)
117
+ return list(dict.fromkeys(intersection))
41
118
 
42
119
 
43
120
  def append_user_notice(
@@ -187,7 +264,9 @@ class Dialect(ABC, Generic[ReqT, RespT]):
187
264
  return {"error": {"message": message, "type": "invalid_request_error"}}
188
265
 
189
266
  @abstractmethod
190
- def mediate_external_capabilities(self, body: ReqT) -> tuple[ReqT, list[str]]:
267
+ def mediate_external_capabilities(
268
+ self, body: ReqT, policy: NetworkPolicyConfig
269
+ ) -> tuple[ReqT, list[str]]:
191
270
  """Remove provider-side capabilities during restricted execution. Implementations add
192
271
  the same policy context on every call because the agent does not retain injected request
193
272
  content. Returned paths never contain request values."""
@@ -17,6 +17,7 @@ from urllib.parse import urlsplit
17
17
  from openai.types.chat import ChatCompletion
18
18
  from openai.types.chat.completion_create_params import CompletionCreateParams
19
19
 
20
+ from verifiers.v1.configs.runtime import NetworkPolicyConfig
20
21
  from verifiers.v1.dialects.base import (
21
22
  Dialect,
22
23
  StreamParser,
@@ -356,7 +357,7 @@ class ChatDialect(Dialect[CompletionCreateParams, ChatCompletion]):
356
357
  response_type = ModdedChatCompletion
357
358
 
358
359
  def mediate_external_capabilities(
359
- self, body: CompletionCreateParams
360
+ self, body: CompletionCreateParams, policy: NetworkPolicyConfig
360
361
  ) -> tuple[CompletionCreateParams, list[str]]:
361
362
  mediated = body
362
363
  capabilities: list[str] = []
@@ -446,7 +447,7 @@ class ChatDialect(Dialect[CompletionCreateParams, ChatCompletion]):
446
447
  elif kind == "image_url":
447
448
  image = part.get("image_url") or {}
448
449
  url = image.get("url") if isinstance(image, dict) else image
449
- if not isinstance(url, str) or blocked_url(url):
450
+ if not isinstance(url, str) or blocked_url(url, policy):
450
451
  capability = f"{path}.image_url.url"
451
452
  elif kind == "file":
452
453
  file = part.get("file")
@@ -465,7 +466,7 @@ class ChatDialect(Dialect[CompletionCreateParams, ChatCompletion]):
465
466
  capability = f"{path}.file.file_data"
466
467
  else:
467
468
  if (parsed.scheme or parsed.netloc) and blocked_url(
468
- file_data
469
+ file_data, policy
469
470
  ):
470
471
  capability = f"{path}.file.file_data"
471
472
  if capability is None: