verifiers 0.1.15.dev443__tar.gz → 0.2.1__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 (433) hide show
  1. {verifiers-0.1.15.dev443 → verifiers-0.2.1}/PKG-INFO +17 -31
  2. {verifiers-0.1.15.dev443 → verifiers-0.2.1}/pyproject.toml +27 -50
  3. {verifiers-0.1.15.dev443 → verifiers-0.2.1}/tests/conftest.py +6 -0
  4. {verifiers-0.1.15.dev443 → verifiers-0.2.1}/tests/test_browser_env.py +0 -92
  5. {verifiers-0.1.15.dev443 → verifiers-0.2.1}/tests/test_install_utils.py +1 -1
  6. {verifiers-0.1.15.dev443 → verifiers-0.2.1}/tests/v1/conftest.py +19 -12
  7. {verifiers-0.1.15.dev443 → verifiers-0.2.1}/tests/v1/fixtures/echo_user_sim_v1.py +1 -1
  8. {verifiers-0.1.15.dev443 → verifiers-0.2.1}/tests/v1/fixtures/tool_response_image_v1.py +1 -1
  9. verifiers-0.2.1/tests/v1/test_color_codeword_tasks.py +18 -0
  10. {verifiers-0.1.15.dev443 → verifiers-0.2.1}/tests/v1/test_e2e.py +15 -3
  11. {verifiers-0.1.15.dev443 → verifiers-0.2.1}/tests/v1/test_envs.py +4 -6
  12. verifiers-0.2.1/tests/v1/test_taskset.py +71 -0
  13. {verifiers-0.1.15.dev443 → verifiers-0.2.1}/tests/v1/test_trace.py +4 -0
  14. {verifiers-0.1.15.dev443 → verifiers-0.2.1}/verifiers/envs/integrations/browser_env/README.md +0 -13
  15. {verifiers-0.1.15.dev443 → verifiers-0.2.1}/verifiers/scripts/install.py +6 -6
  16. {verifiers-0.1.15.dev443 → verifiers-0.2.1}/verifiers/types.py +1 -0
  17. {verifiers-0.1.15.dev443 → verifiers-0.2.1}/verifiers/v1/__init__.py +20 -0
  18. {verifiers-0.1.15.dev443 → verifiers-0.2.1}/verifiers/v1/cli/dashboard/base.py +11 -1
  19. {verifiers-0.1.15.dev443 → verifiers-0.2.1}/verifiers/v1/cli/dashboard/eval.py +68 -35
  20. {verifiers-0.1.15.dev443 → verifiers-0.2.1}/verifiers/v1/cli/dashboard/replay.py +9 -19
  21. {verifiers-0.1.15.dev443 → verifiers-0.2.1}/verifiers/v1/cli/dashboard/validate.py +15 -8
  22. {verifiers-0.1.15.dev443 → verifiers-0.2.1}/verifiers/v1/cli/debug.py +23 -33
  23. {verifiers-0.1.15.dev443 → verifiers-0.2.1}/verifiers/v1/cli/eval/main.py +22 -13
  24. {verifiers-0.1.15.dev443 → verifiers-0.2.1}/verifiers/v1/cli/eval/resume.py +0 -1
  25. {verifiers-0.1.15.dev443 → verifiers-0.2.1}/verifiers/v1/cli/eval/runner.py +21 -16
  26. verifiers-0.2.1/verifiers/v1/cli/gepa.py +74 -0
  27. {verifiers-0.1.15.dev443 → verifiers-0.2.1}/verifiers/v1/cli/init.py +1 -1
  28. {verifiers-0.1.15.dev443 → verifiers-0.2.1}/verifiers/v1/cli/replay.py +4 -3
  29. {verifiers-0.1.15.dev443 → verifiers-0.2.1}/verifiers/v1/cli/validate.py +5 -10
  30. {verifiers-0.1.15.dev443 → verifiers-0.2.1}/verifiers/v1/clients/train.py +4 -0
  31. {verifiers-0.1.15.dev443 → verifiers-0.2.1}/verifiers/v1/configs/debug.py +1 -0
  32. {verifiers-0.1.15.dev443 → verifiers-0.2.1}/verifiers/v1/configs/eval.py +1 -0
  33. {verifiers-0.1.15.dev443 → verifiers-0.2.1}/verifiers/v1/configs/validate.py +1 -0
  34. {verifiers-0.1.15.dev443 → verifiers-0.2.1}/verifiers/v1/dialects/anthropic.py +41 -9
  35. {verifiers-0.1.15.dev443 → verifiers-0.2.1}/verifiers/v1/dialects/base.py +15 -1
  36. {verifiers-0.1.15.dev443 → verifiers-0.2.1}/verifiers/v1/dialects/chat.py +61 -19
  37. {verifiers-0.1.15.dev443 → verifiers-0.2.1}/verifiers/v1/dialects/responses.py +49 -6
  38. {verifiers-0.1.15.dev443 → verifiers-0.2.1}/verifiers/v1/env.py +53 -25
  39. {verifiers-0.1.15.dev443 → verifiers-0.2.1}/verifiers/v1/errors.py +16 -3
  40. verifiers-0.2.1/verifiers/v1/gepa/__init__.py +12 -0
  41. verifiers-0.2.1/verifiers/v1/gepa/adapter.py +112 -0
  42. verifiers-0.2.1/verifiers/v1/gepa/config.py +75 -0
  43. verifiers-0.2.1/verifiers/v1/gepa/dataset.py +59 -0
  44. verifiers-0.2.1/verifiers/v1/gepa/reflection.py +28 -0
  45. verifiers-0.2.1/verifiers/v1/gepa/runner.py +118 -0
  46. {verifiers-0.1.15.dev443 → verifiers-0.2.1}/verifiers/v1/graph.py +71 -20
  47. {verifiers-0.1.15.dev443 → verifiers-0.2.1}/verifiers/v1/harness.py +9 -3
  48. {verifiers-0.1.15.dev443 → verifiers-0.2.1}/verifiers/v1/harnesses/__init__.py +15 -3
  49. verifiers-0.2.1/verifiers/v1/harnesses/bash/__init__.py +6 -0
  50. {verifiers-0.1.15.dev443/verifiers/v1/harnesses/default → verifiers-0.2.1/verifiers/v1/harnesses/bash}/harness.py +10 -7
  51. {verifiers-0.1.15.dev443/verifiers/v1/harnesses/default → verifiers-0.2.1/verifiers/v1/harnesses/bash}/program.py +157 -99
  52. verifiers-0.2.1/verifiers/v1/harnesses/claude_code/__init__.py +6 -0
  53. verifiers-0.2.1/verifiers/v1/harnesses/claude_code/harness.py +102 -0
  54. {verifiers-0.1.15.dev443 → verifiers-0.2.1}/verifiers/v1/harnesses/codex/harness.py +70 -7
  55. {verifiers-0.1.15.dev443 → verifiers-0.2.1}/verifiers/v1/harnesses/kimi_code/harness.py +1 -1
  56. {verifiers-0.1.15.dev443 → verifiers-0.2.1}/verifiers/v1/harnesses/mini_swe_agent/harness.py +1 -1
  57. {verifiers-0.1.15.dev443 → verifiers-0.2.1}/verifiers/v1/harnesses/mini_swe_agent/program.py +1 -1
  58. {verifiers-0.1.15.dev443 → verifiers-0.2.1}/verifiers/v1/harnesses/null/harness.py +7 -4
  59. verifiers-0.2.1/verifiers/v1/harnesses/null/program.py +217 -0
  60. verifiers-0.2.1/verifiers/v1/harnesses/pi/__init__.py +3 -0
  61. verifiers-0.2.1/verifiers/v1/harnesses/pi/harness.py +264 -0
  62. verifiers-0.2.1/verifiers/v1/harnesses/pool/__init__.py +3 -0
  63. verifiers-0.2.1/verifiers/v1/harnesses/pool/harness.py +130 -0
  64. verifiers-0.2.1/verifiers/v1/interception/__init__.py +94 -0
  65. verifiers-0.2.1/verifiers/v1/interception/base.py +68 -0
  66. verifiers-0.2.1/verifiers/v1/interception/pool.py +143 -0
  67. verifiers-0.2.1/verifiers/v1/interception/server.py +795 -0
  68. verifiers-0.2.1/verifiers/v1/interception/tunnel/__init__.py +40 -0
  69. verifiers-0.2.1/verifiers/v1/interception/tunnel/base.py +50 -0
  70. verifiers-0.2.1/verifiers/v1/interception/tunnel/custom.py +42 -0
  71. verifiers-0.2.1/verifiers/v1/interception/tunnel/prime.py +56 -0
  72. {verifiers-0.1.15.dev443 → verifiers-0.2.1}/verifiers/v1/legacy.py +53 -12
  73. {verifiers-0.1.15.dev443 → verifiers-0.2.1}/verifiers/v1/loaders.py +2 -2
  74. {verifiers-0.1.15.dev443 → verifiers-0.2.1}/verifiers/v1/mcp/__init__.py +2 -2
  75. {verifiers-0.1.15.dev443 → verifiers-0.2.1}/verifiers/v1/mcp/launch.py +142 -103
  76. {verifiers-0.1.15.dev443 → verifiers-0.2.1}/verifiers/v1/mcp/server.py +30 -29
  77. {verifiers-0.1.15.dev443 → verifiers-0.2.1}/verifiers/v1/mcp/user.py +26 -2
  78. {verifiers-0.1.15.dev443 → verifiers-0.2.1}/verifiers/v1/push.py +6 -0
  79. {verifiers-0.1.15.dev443 → verifiers-0.2.1}/verifiers/v1/rollout.py +56 -40
  80. {verifiers-0.1.15.dev443 → verifiers-0.2.1}/verifiers/v1/runtimes/__init__.py +1 -8
  81. {verifiers-0.1.15.dev443 → verifiers-0.2.1}/verifiers/v1/runtimes/base.py +17 -118
  82. {verifiers-0.1.15.dev443 → verifiers-0.2.1}/verifiers/v1/runtimes/docker.py +12 -1
  83. {verifiers-0.1.15.dev443 → verifiers-0.2.1}/verifiers/v1/runtimes/limiters.py +0 -7
  84. {verifiers-0.1.15.dev443 → verifiers-0.2.1}/verifiers/v1/runtimes/modal.py +3 -3
  85. {verifiers-0.1.15.dev443 → verifiers-0.2.1}/verifiers/v1/runtimes/prime.py +28 -11
  86. {verifiers-0.1.15.dev443 → verifiers-0.2.1}/verifiers/v1/serve/pool.py +7 -24
  87. {verifiers-0.1.15.dev443 → verifiers-0.2.1}/verifiers/v1/serve/server.py +42 -10
  88. {verifiers-0.1.15.dev443 → verifiers-0.2.1}/verifiers/v1/serve/types.py +5 -4
  89. verifiers-0.2.1/verifiers/v1/session.py +118 -0
  90. {verifiers-0.1.15.dev443 → verifiers-0.2.1}/verifiers/v1/taskset.py +46 -4
  91. verifiers-0.2.1/verifiers/v1/tasksets/__init__.py +36 -0
  92. {verifiers-0.1.15.dev443 → verifiers-0.2.1}/verifiers/v1/tasksets/harbor/taskset.py +39 -12
  93. {verifiers-0.1.15.dev443 → verifiers-0.2.1}/verifiers/v1/tasksets/lean/taskset.py +19 -25
  94. verifiers-0.2.1/verifiers/v1/tasksets/openenv/__init__.py +21 -0
  95. verifiers-0.2.1/verifiers/v1/tasksets/openenv/taskset.py +154 -0
  96. {verifiers-0.1.15.dev443 → verifiers-0.2.1}/verifiers/v1/tasksets/textarena/taskset.py +11 -8
  97. {verifiers-0.1.15.dev443 → verifiers-0.2.1}/verifiers/v1/trace.py +220 -29
  98. {verifiers-0.1.15.dev443 → verifiers-0.2.1}/verifiers/v1/types.py +18 -0
  99. verifiers-0.2.1/verifiers/v1/utils/image.py +9 -0
  100. verifiers-0.2.1/verifiers/v1/utils/interrupt.py +35 -0
  101. verifiers-0.2.1/verifiers/v1/utils/sampling.py +25 -0
  102. verifiers-0.2.1/verifiers/v1/utils/version.py +43 -0
  103. verifiers-0.1.15.dev443/tests/test_envs.py +0 -195
  104. verifiers-0.1.15.dev443/tests/test_wordle_env.py +0 -22
  105. verifiers-0.1.15.dev443/tests/v1/test_color_codeword_tasks.py +0 -18
  106. verifiers-0.1.15.dev443/verifiers/envs/experimental/composable/tasksets/search/README.md +0 -42
  107. verifiers-0.1.15.dev443/verifiers/envs/experimental/composable/tasksets/search/__init__.py +0 -15
  108. verifiers-0.1.15.dev443/verifiers/envs/experimental/composable/tasksets/search/openseeker/README.md +0 -46
  109. verifiers-0.1.15.dev443/verifiers/envs/experimental/composable/tasksets/search/openseeker/__init__.py +0 -5
  110. verifiers-0.1.15.dev443/verifiers/envs/experimental/composable/tasksets/search/openseeker/taskset.py +0 -564
  111. verifiers-0.1.15.dev443/verifiers/envs/experimental/composable/tasksets/search/quest/README.md +0 -66
  112. verifiers-0.1.15.dev443/verifiers/envs/experimental/composable/tasksets/search/quest/__init__.py +0 -5
  113. verifiers-0.1.15.dev443/verifiers/envs/experimental/composable/tasksets/search/quest/obj_task_eval/__init__.py +0 -17
  114. verifiers-0.1.15.dev443/verifiers/envs/experimental/composable/tasksets/search/quest/obj_task_eval/api_tools/__init__.py +0 -5
  115. verifiers-0.1.15.dev443/verifiers/envs/experimental/composable/tasksets/search/quest/obj_task_eval/api_tools/tool_pdf.py +0 -284
  116. verifiers-0.1.15.dev443/verifiers/envs/experimental/composable/tasksets/search/quest/obj_task_eval/eval_toolkit.py +0 -1119
  117. verifiers-0.1.15.dev443/verifiers/envs/experimental/composable/tasksets/search/quest/obj_task_eval/evaluator.py +0 -1271
  118. verifiers-0.1.15.dev443/verifiers/envs/experimental/composable/tasksets/search/quest/obj_task_eval/llm_client/__init__.py +0 -5
  119. verifiers-0.1.15.dev443/verifiers/envs/experimental/composable/tasksets/search/quest/obj_task_eval/llm_client/base_client.py +0 -15
  120. verifiers-0.1.15.dev443/verifiers/envs/experimental/composable/tasksets/search/quest/obj_task_eval/prompts/__init__.py +0 -4
  121. verifiers-0.1.15.dev443/verifiers/envs/experimental/composable/tasksets/search/quest/obj_task_eval/prompts/cache_prompts.py +0 -15
  122. verifiers-0.1.15.dev443/verifiers/envs/experimental/composable/tasksets/search/quest/obj_task_eval/utils/__init__.py +0 -7
  123. verifiers-0.1.15.dev443/verifiers/envs/experimental/composable/tasksets/search/quest/obj_task_eval/utils/cache_filesys.py +0 -45
  124. verifiers-0.1.15.dev443/verifiers/envs/experimental/composable/tasksets/search/quest/obj_task_eval/utils/load_eval_script.py +0 -107
  125. verifiers-0.1.15.dev443/verifiers/envs/experimental/composable/tasksets/search/quest/obj_task_eval/utils/misc.py +0 -106
  126. verifiers-0.1.15.dev443/verifiers/envs/experimental/composable/tasksets/search/quest/obj_task_eval/utils/tool_visit.py +0 -69
  127. verifiers-0.1.15.dev443/verifiers/envs/experimental/composable/tasksets/search/quest/obj_task_eval/utils/url_tools.py +0 -27
  128. verifiers-0.1.15.dev443/verifiers/envs/experimental/composable/tasksets/search/quest/obj_task_eval/verification_tree.py +0 -153
  129. verifiers-0.1.15.dev443/verifiers/envs/experimental/composable/tasksets/search/quest/open_ended.py +0 -329
  130. verifiers-0.1.15.dev443/verifiers/envs/experimental/composable/tasksets/search/quest/taskset.py +0 -763
  131. verifiers-0.1.15.dev443/verifiers/envs/experimental/composable/tasksets/search/redsearcher/README.md +0 -38
  132. verifiers-0.1.15.dev443/verifiers/envs/experimental/composable/tasksets/search/redsearcher/__init__.py +0 -5
  133. verifiers-0.1.15.dev443/verifiers/envs/experimental/composable/tasksets/search/redsearcher/taskset.py +0 -594
  134. verifiers-0.1.15.dev443/verifiers/envs/experimental/composable/tasksets/search/search_tasksets.py +0 -46
  135. verifiers-0.1.15.dev443/verifiers/v1/harnesses/default/__init__.py +0 -6
  136. verifiers-0.1.15.dev443/verifiers/v1/harnesses/null/program.py +0 -156
  137. verifiers-0.1.15.dev443/verifiers/v1/interception/__init__.py +0 -16
  138. verifiers-0.1.15.dev443/verifiers/v1/interception/pool.py +0 -94
  139. verifiers-0.1.15.dev443/verifiers/v1/interception/server.py +0 -601
  140. verifiers-0.1.15.dev443/verifiers/v1/tasksets/__init__.py +0 -18
  141. {verifiers-0.1.15.dev443 → verifiers-0.2.1}/.gitignore +0 -0
  142. {verifiers-0.1.15.dev443 → verifiers-0.2.1}/LICENSE +0 -0
  143. {verifiers-0.1.15.dev443 → verifiers-0.2.1}/README.md +0 -0
  144. {verifiers-0.1.15.dev443 → verifiers-0.2.1}/tests/AGENTS.md +0 -0
  145. {verifiers-0.1.15.dev443 → verifiers-0.2.1}/tests/__init__.py +0 -0
  146. {verifiers-0.1.15.dev443 → verifiers-0.2.1}/tests/test_build_script.py +0 -0
  147. {verifiers-0.1.15.dev443 → verifiers-0.2.1}/tests/test_cli_agent_env.py +0 -0
  148. {verifiers-0.1.15.dev443 → verifiers-0.2.1}/tests/test_client_auth_errors.py +0 -0
  149. {verifiers-0.1.15.dev443 → verifiers-0.2.1}/tests/test_client_config.py +0 -0
  150. {verifiers-0.1.15.dev443 → verifiers-0.2.1}/tests/test_client_multimodal_types.py +0 -0
  151. {verifiers-0.1.15.dev443 → verifiers-0.2.1}/tests/test_composable_env.py +0 -0
  152. {verifiers-0.1.15.dev443 → verifiers-0.2.1}/tests/test_context_token_metrics.py +0 -0
  153. {verifiers-0.1.15.dev443 → verifiers-0.2.1}/tests/test_decorator_ranks.py +0 -0
  154. {verifiers-0.1.15.dev443 → verifiers-0.2.1}/tests/test_endpoint_registry.py +0 -0
  155. {verifiers-0.1.15.dev443 → verifiers-0.2.1}/tests/test_env_group.py +0 -0
  156. {verifiers-0.1.15.dev443 → verifiers-0.2.1}/tests/test_env_server.py +0 -0
  157. {verifiers-0.1.15.dev443 → verifiers-0.2.1}/tests/test_environment.py +0 -0
  158. {verifiers-0.1.15.dev443 → verifiers-0.2.1}/tests/test_environment_extra.py +0 -0
  159. {verifiers-0.1.15.dev443 → verifiers-0.2.1}/tests/test_error_chain.py +0 -0
  160. {verifiers-0.1.15.dev443 → verifiers-0.2.1}/tests/test_eval_display.py +0 -0
  161. {verifiers-0.1.15.dev443 → verifiers-0.2.1}/tests/test_eval_utils.py +0 -0
  162. {verifiers-0.1.15.dev443 → verifiers-0.2.1}/tests/test_gepa_cli.py +0 -0
  163. {verifiers-0.1.15.dev443 → verifiers-0.2.1}/tests/test_gepa_utils.py +0 -0
  164. {verifiers-0.1.15.dev443 → verifiers-0.2.1}/tests/test_gym_env.py +0 -0
  165. {verifiers-0.1.15.dev443 → verifiers-0.2.1}/tests/test_harbor_env_mcp.py +0 -0
  166. {verifiers-0.1.15.dev443 → verifiers-0.2.1}/tests/test_imports.py +0 -0
  167. {verifiers-0.1.15.dev443 → verifiers-0.2.1}/tests/test_init_script.py +0 -0
  168. {verifiers-0.1.15.dev443 → verifiers-0.2.1}/tests/test_interception_utils.py +0 -0
  169. {verifiers-0.1.15.dev443 → verifiers-0.2.1}/tests/test_logging.py +0 -0
  170. {verifiers-0.1.15.dev443 → verifiers-0.2.1}/tests/test_math_rubric.py +0 -0
  171. {verifiers-0.1.15.dev443 → verifiers-0.2.1}/tests/test_maybe_think_parser.py +0 -0
  172. {verifiers-0.1.15.dev443 → verifiers-0.2.1}/tests/test_message_utils.py +0 -0
  173. {verifiers-0.1.15.dev443 → verifiers-0.2.1}/tests/test_message_utils_multimodal.py +0 -0
  174. {verifiers-0.1.15.dev443 → verifiers-0.2.1}/tests/test_multiturn_env.py +0 -0
  175. {verifiers-0.1.15.dev443 → verifiers-0.2.1}/tests/test_nemorl_client.py +0 -0
  176. {verifiers-0.1.15.dev443 → verifiers-0.2.1}/tests/test_openai_chat_completions_token_client.py +0 -0
  177. {verifiers-0.1.15.dev443 → verifiers-0.2.1}/tests/test_openai_responses_client.py +0 -0
  178. {verifiers-0.1.15.dev443 → verifiers-0.2.1}/tests/test_opencode_rlm_env.py +0 -0
  179. {verifiers-0.1.15.dev443 → verifiers-0.2.1}/tests/test_openenv_client.py +0 -0
  180. {verifiers-0.1.15.dev443 → verifiers-0.2.1}/tests/test_parser.py +0 -0
  181. {verifiers-0.1.15.dev443 → verifiers-0.2.1}/tests/test_path_utils.py +0 -0
  182. {verifiers-0.1.15.dev443 → verifiers-0.2.1}/tests/test_per_turn_timing.py +0 -0
  183. {verifiers-0.1.15.dev443 → verifiers-0.2.1}/tests/test_pricing_utils.py +0 -0
  184. {verifiers-0.1.15.dev443 → verifiers-0.2.1}/tests/test_prime_plugin.py +0 -0
  185. {verifiers-0.1.15.dev443 → verifiers-0.2.1}/tests/test_renderer_client.py +0 -0
  186. {verifiers-0.1.15.dev443 → verifiers-0.2.1}/tests/test_renderer_e2e.py +0 -0
  187. {verifiers-0.1.15.dev443 → verifiers-0.2.1}/tests/test_rlm_composable_env.py +0 -0
  188. {verifiers-0.1.15.dev443 → verifiers-0.2.1}/tests/test_rubric.py +0 -0
  189. {verifiers-0.1.15.dev443 → verifiers-0.2.1}/tests/test_rubric_group.py +0 -0
  190. {verifiers-0.1.15.dev443 → verifiers-0.2.1}/tests/test_sandbox_debug_env.py +0 -0
  191. {verifiers-0.1.15.dev443 → verifiers-0.2.1}/tests/test_sandbox_env.py +0 -0
  192. {verifiers-0.1.15.dev443 → verifiers-0.2.1}/tests/test_sandbox_mixin.py +0 -0
  193. {verifiers-0.1.15.dev443 → verifiers-0.2.1}/tests/test_save_utils.py +0 -0
  194. {verifiers-0.1.15.dev443 → verifiers-0.2.1}/tests/test_setup_script.py +0 -0
  195. {verifiers-0.1.15.dev443 → verifiers-0.2.1}/tests/test_singleturn_env.py +0 -0
  196. {verifiers-0.1.15.dev443 → verifiers-0.2.1}/tests/test_stateful_tool_env.py +0 -0
  197. {verifiers-0.1.15.dev443 → verifiers-0.2.1}/tests/test_think_parser.py +0 -0
  198. {verifiers-0.1.15.dev443 → verifiers-0.2.1}/tests/test_tool_env.py +0 -0
  199. {verifiers-0.1.15.dev443 → verifiers-0.2.1}/tests/test_tool_utils.py +0 -0
  200. {verifiers-0.1.15.dev443 → verifiers-0.2.1}/tests/test_trajectory_processing.py +0 -0
  201. {verifiers-0.1.15.dev443 → verifiers-0.2.1}/tests/test_tui_info_formatting.py +0 -0
  202. {verifiers-0.1.15.dev443 → verifiers-0.2.1}/tests/test_types.py +0 -0
  203. {verifiers-0.1.15.dev443 → verifiers-0.2.1}/tests/test_xml_parser.py +0 -0
  204. {verifiers-0.1.15.dev443 → verifiers-0.2.1}/tests/v1/fixtures/counter_tool_v1.py +0 -0
  205. {verifiers-0.1.15.dev443 → verifiers-0.2.1}/tests/v1/fixtures/echo_agentic_v1.py +0 -0
  206. {verifiers-0.1.15.dev443 → verifiers-0.2.1}/tests/v1/fixtures/echo_multi_v0.py +0 -0
  207. {verifiers-0.1.15.dev443 → verifiers-0.2.1}/tests/v1/fixtures/echo_tool_v1.py +0 -0
  208. {verifiers-0.1.15.dev443 → verifiers-0.2.1}/tests/v1/fixtures/echo_v0.py +0 -0
  209. {verifiers-0.1.15.dev443 → verifiers-0.2.1}/tests/v1/fixtures/echo_v1.py +0 -0
  210. {verifiers-0.1.15.dev443 → verifiers-0.2.1}/tests/v1/fixtures/pyproject.toml +0 -0
  211. {verifiers-0.1.15.dev443 → verifiers-0.2.1}/tests/v1/test_configs.py +0 -0
  212. {verifiers-0.1.15.dev443 → verifiers-0.2.1}/tests/v1/test_graph.py +0 -0
  213. {verifiers-0.1.15.dev443 → verifiers-0.2.1}/tests/v1/test_judges.py +0 -0
  214. {verifiers-0.1.15.dev443 → verifiers-0.2.1}/tests/v1/test_legacy.py +0 -0
  215. {verifiers-0.1.15.dev443 → verifiers-0.2.1}/tests/v1/test_scoring.py +0 -0
  216. {verifiers-0.1.15.dev443 → verifiers-0.2.1}/verifiers/__init__.py +0 -0
  217. {verifiers-0.1.15.dev443 → verifiers-0.2.1}/verifiers/cli/__init__.py +0 -0
  218. {verifiers-0.1.15.dev443 → verifiers-0.2.1}/verifiers/cli/commands/__init__.py +0 -0
  219. {verifiers-0.1.15.dev443 → verifiers-0.2.1}/verifiers/cli/commands/build.py +0 -0
  220. {verifiers-0.1.15.dev443 → verifiers-0.2.1}/verifiers/cli/commands/eval.py +0 -0
  221. {verifiers-0.1.15.dev443 → verifiers-0.2.1}/verifiers/cli/commands/gepa.py +0 -0
  222. {verifiers-0.1.15.dev443 → verifiers-0.2.1}/verifiers/cli/commands/init.py +0 -0
  223. {verifiers-0.1.15.dev443 → verifiers-0.2.1}/verifiers/cli/commands/install.py +0 -0
  224. {verifiers-0.1.15.dev443 → verifiers-0.2.1}/verifiers/cli/commands/setup.py +0 -0
  225. {verifiers-0.1.15.dev443 → verifiers-0.2.1}/verifiers/cli/plugins/__init__.py +0 -0
  226. {verifiers-0.1.15.dev443 → verifiers-0.2.1}/verifiers/cli/plugins/prime.py +0 -0
  227. {verifiers-0.1.15.dev443 → verifiers-0.2.1}/verifiers/cli/tui.py +0 -0
  228. {verifiers-0.1.15.dev443 → verifiers-0.2.1}/verifiers/clients/__init__.py +0 -0
  229. {verifiers-0.1.15.dev443 → verifiers-0.2.1}/verifiers/clients/anthropic_messages_client.py +0 -0
  230. {verifiers-0.1.15.dev443 → verifiers-0.2.1}/verifiers/clients/client.py +0 -0
  231. {verifiers-0.1.15.dev443 → verifiers-0.2.1}/verifiers/clients/nemorl_chat_completions_client.py +0 -0
  232. {verifiers-0.1.15.dev443 → verifiers-0.2.1}/verifiers/clients/openai_chat_completions_client.py +0 -0
  233. {verifiers-0.1.15.dev443 → verifiers-0.2.1}/verifiers/clients/openai_chat_completions_token_client.py +0 -0
  234. {verifiers-0.1.15.dev443 → verifiers-0.2.1}/verifiers/clients/openai_completions_client.py +0 -0
  235. {verifiers-0.1.15.dev443 → verifiers-0.2.1}/verifiers/clients/openai_responses_client.py +0 -0
  236. {verifiers-0.1.15.dev443 → verifiers-0.2.1}/verifiers/clients/renderer_client.py +0 -0
  237. {verifiers-0.1.15.dev443 → verifiers-0.2.1}/verifiers/decorators.py +0 -0
  238. {verifiers-0.1.15.dev443 → verifiers-0.2.1}/verifiers/envs/AGENTS.md +0 -0
  239. {verifiers-0.1.15.dev443 → verifiers-0.2.1}/verifiers/envs/__init__.py +0 -0
  240. {verifiers-0.1.15.dev443 → verifiers-0.2.1}/verifiers/envs/env_group.py +0 -0
  241. {verifiers-0.1.15.dev443 → verifiers-0.2.1}/verifiers/envs/environment.py +0 -0
  242. {verifiers-0.1.15.dev443 → verifiers-0.2.1}/verifiers/envs/experimental/README.md +0 -0
  243. {verifiers-0.1.15.dev443 → verifiers-0.2.1}/verifiers/envs/experimental/__init__.py +0 -0
  244. {verifiers-0.1.15.dev443 → verifiers-0.2.1}/verifiers/envs/experimental/cli_agent_env.py +0 -0
  245. {verifiers-0.1.15.dev443 → verifiers-0.2.1}/verifiers/envs/experimental/composable/README.md +0 -0
  246. {verifiers-0.1.15.dev443 → verifiers-0.2.1}/verifiers/envs/experimental/composable/__init__.py +0 -0
  247. {verifiers-0.1.15.dev443 → verifiers-0.2.1}/verifiers/envs/experimental/composable/_filter.py +0 -0
  248. {verifiers-0.1.15.dev443 → verifiers-0.2.1}/verifiers/envs/experimental/composable/composable_env.py +0 -0
  249. {verifiers-0.1.15.dev443 → verifiers-0.2.1}/verifiers/envs/experimental/composable/harness.py +0 -0
  250. {verifiers-0.1.15.dev443 → verifiers-0.2.1}/verifiers/envs/experimental/composable/harnesses/__init__.py +0 -0
  251. {verifiers-0.1.15.dev443 → verifiers-0.2.1}/verifiers/envs/experimental/composable/harnesses/mini_swe_agent.py +0 -0
  252. {verifiers-0.1.15.dev443 → verifiers-0.2.1}/verifiers/envs/experimental/composable/harnesses/opencode.py +0 -0
  253. {verifiers-0.1.15.dev443 → verifiers-0.2.1}/verifiers/envs/experimental/composable/harnesses/prompt.txt +0 -0
  254. {verifiers-0.1.15.dev443 → verifiers-0.2.1}/verifiers/envs/experimental/composable/harnesses/rlm.py +0 -0
  255. {verifiers-0.1.15.dev443 → verifiers-0.2.1}/verifiers/envs/experimental/composable/sandbox_debug_env.py +0 -0
  256. {verifiers-0.1.15.dev443 → verifiers-0.2.1}/verifiers/envs/experimental/composable/swe_debug_env.py +0 -0
  257. {verifiers-0.1.15.dev443 → verifiers-0.2.1}/verifiers/envs/experimental/composable/task.py +0 -0
  258. {verifiers-0.1.15.dev443 → verifiers-0.2.1}/verifiers/envs/experimental/composable/tasksets/__init__.py +0 -0
  259. {verifiers-0.1.15.dev443 → verifiers-0.2.1}/verifiers/envs/experimental/composable/tasksets/cp/__init__.py +0 -0
  260. {verifiers-0.1.15.dev443 → verifiers-0.2.1}/verifiers/envs/experimental/composable/tasksets/cp/cp_task.py +0 -0
  261. {verifiers-0.1.15.dev443 → verifiers-0.2.1}/verifiers/envs/experimental/composable/tasksets/cp/test_utils.py +0 -0
  262. {verifiers-0.1.15.dev443 → verifiers-0.2.1}/verifiers/envs/experimental/composable/tasksets/harbor/__init__.py +0 -0
  263. {verifiers-0.1.15.dev443 → verifiers-0.2.1}/verifiers/envs/experimental/composable/tasksets/harbor/cli_gym.py +0 -0
  264. {verifiers-0.1.15.dev443 → verifiers-0.2.1}/verifiers/envs/experimental/composable/tasksets/harbor/harbor.py +0 -0
  265. {verifiers-0.1.15.dev443 → verifiers-0.2.1}/verifiers/envs/experimental/composable/tasksets/harbor/terminal_lego.py +0 -0
  266. {verifiers-0.1.15.dev443 → verifiers-0.2.1}/verifiers/envs/experimental/composable/tasksets/math/__init__.py +0 -0
  267. {verifiers-0.1.15.dev443 → verifiers-0.2.1}/verifiers/envs/experimental/composable/tasksets/math/math_task.py +0 -0
  268. {verifiers-0.1.15.dev443 → verifiers-0.2.1}/verifiers/envs/experimental/composable/tasksets/swe/README.md +0 -0
  269. {verifiers-0.1.15.dev443 → verifiers-0.2.1}/verifiers/envs/experimental/composable/tasksets/swe/__init__.py +0 -0
  270. {verifiers-0.1.15.dev443 → verifiers-0.2.1}/verifiers/envs/experimental/composable/tasksets/swe/multi_swe/__init__.py +0 -0
  271. {verifiers-0.1.15.dev443 → verifiers-0.2.1}/verifiers/envs/experimental/composable/tasksets/swe/multi_swe/extract_fix_patch.sh +0 -0
  272. {verifiers-0.1.15.dev443 → verifiers-0.2.1}/verifiers/envs/experimental/composable/tasksets/swe/multi_swe/taskset.py +0 -0
  273. {verifiers-0.1.15.dev443 → verifiers-0.2.1}/verifiers/envs/experimental/composable/tasksets/swe/openswe/__init__.py +0 -0
  274. {verifiers-0.1.15.dev443 → verifiers-0.2.1}/verifiers/envs/experimental/composable/tasksets/swe/openswe/taskset.py +0 -0
  275. {verifiers-0.1.15.dev443 → verifiers-0.2.1}/verifiers/envs/experimental/composable/tasksets/swe/r2e_gym/__init__.py +0 -0
  276. {verifiers-0.1.15.dev443 → verifiers-0.2.1}/verifiers/envs/experimental/composable/tasksets/swe/r2e_gym/log_parser.py +0 -0
  277. {verifiers-0.1.15.dev443 → verifiers-0.2.1}/verifiers/envs/experimental/composable/tasksets/swe/r2e_gym/taskset.py +0 -0
  278. {verifiers-0.1.15.dev443 → verifiers-0.2.1}/verifiers/envs/experimental/composable/tasksets/swe/scale_swe/__init__.py +0 -0
  279. {verifiers-0.1.15.dev443 → verifiers-0.2.1}/verifiers/envs/experimental/composable/tasksets/swe/scale_swe/taskset.py +0 -0
  280. {verifiers-0.1.15.dev443 → verifiers-0.2.1}/verifiers/envs/experimental/composable/tasksets/swe/shared/__init__.py +0 -0
  281. {verifiers-0.1.15.dev443 → verifiers-0.2.1}/verifiers/envs/experimental/composable/tasksets/swe/shared/test_patch.py +0 -0
  282. {verifiers-0.1.15.dev443 → verifiers-0.2.1}/verifiers/envs/experimental/composable/tasksets/swe/swe_bench/__init__.py +0 -0
  283. {verifiers-0.1.15.dev443 → verifiers-0.2.1}/verifiers/envs/experimental/composable/tasksets/swe/swe_bench/taskset.py +0 -0
  284. {verifiers-0.1.15.dev443 → verifiers-0.2.1}/verifiers/envs/experimental/composable/tasksets/swe/swe_lego/__init__.py +0 -0
  285. {verifiers-0.1.15.dev443 → verifiers-0.2.1}/verifiers/envs/experimental/composable/tasksets/swe/swe_lego/taskset.py +0 -0
  286. {verifiers-0.1.15.dev443 → verifiers-0.2.1}/verifiers/envs/experimental/composable/tasksets/swe/swe_rebench_v2/__init__.py +0 -0
  287. {verifiers-0.1.15.dev443 → verifiers-0.2.1}/verifiers/envs/experimental/composable/tasksets/swe/swe_rebench_v2/log_parsers.py +0 -0
  288. {verifiers-0.1.15.dev443 → verifiers-0.2.1}/verifiers/envs/experimental/composable/tasksets/swe/swe_rebench_v2/taskset.py +0 -0
  289. {verifiers-0.1.15.dev443 → verifiers-0.2.1}/verifiers/envs/experimental/composable/tasksets/swe/swe_smith/__init__.py +0 -0
  290. {verifiers-0.1.15.dev443 → verifiers-0.2.1}/verifiers/envs/experimental/composable/tasksets/swe/swe_smith/taskset.py +0 -0
  291. {verifiers-0.1.15.dev443 → verifiers-0.2.1}/verifiers/envs/experimental/composable/tasksets/swe/swe_tasksets.py +0 -0
  292. {verifiers-0.1.15.dev443 → verifiers-0.2.1}/verifiers/envs/experimental/gym_env.py +0 -0
  293. {verifiers-0.1.15.dev443 → verifiers-0.2.1}/verifiers/envs/experimental/harbor_env/__init__.py +0 -0
  294. {verifiers-0.1.15.dev443 → verifiers-0.2.1}/verifiers/envs/experimental/harbor_env/env.py +0 -0
  295. {verifiers-0.1.15.dev443 → verifiers-0.2.1}/verifiers/envs/experimental/harbor_env/mcp.py +0 -0
  296. {verifiers-0.1.15.dev443 → verifiers-0.2.1}/verifiers/envs/experimental/mcp_env.py +0 -0
  297. {verifiers-0.1.15.dev443 → verifiers-0.2.1}/verifiers/envs/experimental/opencode_env.py +0 -0
  298. {verifiers-0.1.15.dev443 → verifiers-0.2.1}/verifiers/envs/experimental/opencode_qa_env.py +0 -0
  299. {verifiers-0.1.15.dev443 → verifiers-0.2.1}/verifiers/envs/experimental/opencode_rlm_env.py +0 -0
  300. {verifiers-0.1.15.dev443 → verifiers-0.2.1}/verifiers/envs/experimental/sandbox_mixin.py +0 -0
  301. {verifiers-0.1.15.dev443 → verifiers-0.2.1}/verifiers/envs/experimental/utils/__init__.py +0 -0
  302. {verifiers-0.1.15.dev443 → verifiers-0.2.1}/verifiers/envs/experimental/utils/file_locks.py +0 -0
  303. {verifiers-0.1.15.dev443 → verifiers-0.2.1}/verifiers/envs/experimental/utils/git_checkout_cache.py +0 -0
  304. {verifiers-0.1.15.dev443 → verifiers-0.2.1}/verifiers/envs/integrations/README.md +0 -0
  305. {verifiers-0.1.15.dev443 → verifiers-0.2.1}/verifiers/envs/integrations/__init__.py +0 -0
  306. {verifiers-0.1.15.dev443 → verifiers-0.2.1}/verifiers/envs/integrations/browser_env/__init__.py +0 -0
  307. {verifiers-0.1.15.dev443 → verifiers-0.2.1}/verifiers/envs/integrations/browser_env/browser_env.py +0 -0
  308. {verifiers-0.1.15.dev443 → verifiers-0.2.1}/verifiers/envs/integrations/browser_env/modes/__init__.py +0 -0
  309. {verifiers-0.1.15.dev443 → verifiers-0.2.1}/verifiers/envs/integrations/browser_env/modes/base.py +0 -0
  310. {verifiers-0.1.15.dev443 → verifiers-0.2.1}/verifiers/envs/integrations/browser_env/modes/cua_mode.py +0 -0
  311. {verifiers-0.1.15.dev443 → verifiers-0.2.1}/verifiers/envs/integrations/browser_env/modes/dom_mode.py +0 -0
  312. {verifiers-0.1.15.dev443 → verifiers-0.2.1}/verifiers/envs/integrations/openenv_env.py +0 -0
  313. {verifiers-0.1.15.dev443 → verifiers-0.2.1}/verifiers/envs/integrations/reasoninggym_env.py +0 -0
  314. {verifiers-0.1.15.dev443 → verifiers-0.2.1}/verifiers/envs/integrations/textarena_env.py +0 -0
  315. {verifiers-0.1.15.dev443 → verifiers-0.2.1}/verifiers/envs/multiturn_env.py +0 -0
  316. {verifiers-0.1.15.dev443 → verifiers-0.2.1}/verifiers/envs/python_env.py +0 -0
  317. {verifiers-0.1.15.dev443 → verifiers-0.2.1}/verifiers/envs/sandbox_env.py +0 -0
  318. {verifiers-0.1.15.dev443 → verifiers-0.2.1}/verifiers/envs/singleturn_env.py +0 -0
  319. {verifiers-0.1.15.dev443 → verifiers-0.2.1}/verifiers/envs/stateful_tool_env.py +0 -0
  320. {verifiers-0.1.15.dev443 → verifiers-0.2.1}/verifiers/envs/tool_env.py +0 -0
  321. {verifiers-0.1.15.dev443 → verifiers-0.2.1}/verifiers/errors.py +0 -0
  322. {verifiers-0.1.15.dev443 → verifiers-0.2.1}/verifiers/gepa/__init__.py +0 -0
  323. {verifiers-0.1.15.dev443 → verifiers-0.2.1}/verifiers/gepa/adapter.py +0 -0
  324. {verifiers-0.1.15.dev443 → verifiers-0.2.1}/verifiers/gepa/config.py +0 -0
  325. {verifiers-0.1.15.dev443 → verifiers-0.2.1}/verifiers/gepa/display.py +0 -0
  326. {verifiers-0.1.15.dev443 → verifiers-0.2.1}/verifiers/gepa/gepa_utils.py +0 -0
  327. {verifiers-0.1.15.dev443 → verifiers-0.2.1}/verifiers/parsers/__init__.py +0 -0
  328. {verifiers-0.1.15.dev443 → verifiers-0.2.1}/verifiers/parsers/maybe_think_parser.py +0 -0
  329. {verifiers-0.1.15.dev443 → verifiers-0.2.1}/verifiers/parsers/parser.py +0 -0
  330. {verifiers-0.1.15.dev443 → verifiers-0.2.1}/verifiers/parsers/think_parser.py +0 -0
  331. {verifiers-0.1.15.dev443 → verifiers-0.2.1}/verifiers/parsers/xml_parser.py +0 -0
  332. {verifiers-0.1.15.dev443 → verifiers-0.2.1}/verifiers/rubrics/__init__.py +0 -0
  333. {verifiers-0.1.15.dev443 → verifiers-0.2.1}/verifiers/rubrics/experimental/hybrid_math_rubric.py +0 -0
  334. {verifiers-0.1.15.dev443 → verifiers-0.2.1}/verifiers/rubrics/judge_rubric.py +0 -0
  335. {verifiers-0.1.15.dev443 → verifiers-0.2.1}/verifiers/rubrics/math_rubric.py +0 -0
  336. {verifiers-0.1.15.dev443 → verifiers-0.2.1}/verifiers/rubrics/rubric.py +0 -0
  337. {verifiers-0.1.15.dev443 → verifiers-0.2.1}/verifiers/rubrics/rubric_group.py +0 -0
  338. {verifiers-0.1.15.dev443 → verifiers-0.2.1}/verifiers/scripts/__init__.py +0 -0
  339. {verifiers-0.1.15.dev443 → verifiers-0.2.1}/verifiers/scripts/build.py +0 -0
  340. {verifiers-0.1.15.dev443 → verifiers-0.2.1}/verifiers/scripts/eval.py +0 -0
  341. {verifiers-0.1.15.dev443 → verifiers-0.2.1}/verifiers/scripts/gepa.py +0 -0
  342. {verifiers-0.1.15.dev443 → verifiers-0.2.1}/verifiers/scripts/init.py +0 -0
  343. {verifiers-0.1.15.dev443 → verifiers-0.2.1}/verifiers/scripts/setup.py +0 -0
  344. {verifiers-0.1.15.dev443 → verifiers-0.2.1}/verifiers/scripts/tui.py +0 -0
  345. {verifiers-0.1.15.dev443 → verifiers-0.2.1}/verifiers/serve/__init__.py +0 -0
  346. {verifiers-0.1.15.dev443 → verifiers-0.2.1}/verifiers/serve/client/env_client.py +0 -0
  347. {verifiers-0.1.15.dev443 → verifiers-0.2.1}/verifiers/serve/client/zmq_env_client.py +0 -0
  348. {verifiers-0.1.15.dev443 → verifiers-0.2.1}/verifiers/serve/server/__init__.py +0 -0
  349. {verifiers-0.1.15.dev443 → verifiers-0.2.1}/verifiers/serve/server/env_router.py +0 -0
  350. {verifiers-0.1.15.dev443 → verifiers-0.2.1}/verifiers/serve/server/env_server.py +0 -0
  351. {verifiers-0.1.15.dev443 → verifiers-0.2.1}/verifiers/serve/server/env_worker.py +0 -0
  352. {verifiers-0.1.15.dev443 → verifiers-0.2.1}/verifiers/serve/server/zmq_env_server.py +0 -0
  353. {verifiers-0.1.15.dev443 → verifiers-0.2.1}/verifiers/serve/types.py +0 -0
  354. {verifiers-0.1.15.dev443 → verifiers-0.2.1}/verifiers/utils/__init__.py +0 -0
  355. {verifiers-0.1.15.dev443 → verifiers-0.2.1}/verifiers/utils/async_utils.py +0 -0
  356. {verifiers-0.1.15.dev443 → verifiers-0.2.1}/verifiers/utils/client_utils.py +0 -0
  357. {verifiers-0.1.15.dev443 → verifiers-0.2.1}/verifiers/utils/config_utils.py +0 -0
  358. {verifiers-0.1.15.dev443 → verifiers-0.2.1}/verifiers/utils/data_utils.py +0 -0
  359. {verifiers-0.1.15.dev443 → verifiers-0.2.1}/verifiers/utils/display_utils.py +0 -0
  360. {verifiers-0.1.15.dev443 → verifiers-0.2.1}/verifiers/utils/env_config_utils.py +0 -0
  361. {verifiers-0.1.15.dev443 → verifiers-0.2.1}/verifiers/utils/env_utils.py +0 -0
  362. {verifiers-0.1.15.dev443 → verifiers-0.2.1}/verifiers/utils/error_utils.py +0 -0
  363. {verifiers-0.1.15.dev443 → verifiers-0.2.1}/verifiers/utils/eval_display.py +0 -0
  364. {verifiers-0.1.15.dev443 → verifiers-0.2.1}/verifiers/utils/eval_utils.py +0 -0
  365. {verifiers-0.1.15.dev443 → verifiers-0.2.1}/verifiers/utils/heartbeat.py +0 -0
  366. {verifiers-0.1.15.dev443 → verifiers-0.2.1}/verifiers/utils/import_utils.py +0 -0
  367. {verifiers-0.1.15.dev443 → verifiers-0.2.1}/verifiers/utils/install_utils.py +0 -0
  368. {verifiers-0.1.15.dev443 → verifiers-0.2.1}/verifiers/utils/interception_utils.py +0 -0
  369. {verifiers-0.1.15.dev443 → verifiers-0.2.1}/verifiers/utils/logging_utils.py +0 -0
  370. {verifiers-0.1.15.dev443 → verifiers-0.2.1}/verifiers/utils/message_utils.py +0 -0
  371. {verifiers-0.1.15.dev443 → verifiers-0.2.1}/verifiers/utils/metric_utils.py +0 -0
  372. {verifiers-0.1.15.dev443 → verifiers-0.2.1}/verifiers/utils/path_utils.py +0 -0
  373. {verifiers-0.1.15.dev443 → verifiers-0.2.1}/verifiers/utils/pricing_utils.py +0 -0
  374. {verifiers-0.1.15.dev443 → verifiers-0.2.1}/verifiers/utils/process_utils.py +0 -0
  375. {verifiers-0.1.15.dev443 → verifiers-0.2.1}/verifiers/utils/response_utils.py +0 -0
  376. {verifiers-0.1.15.dev443 → verifiers-0.2.1}/verifiers/utils/save_utils.py +0 -0
  377. {verifiers-0.1.15.dev443 → verifiers-0.2.1}/verifiers/utils/serve_utils.py +0 -0
  378. {verifiers-0.1.15.dev443 → verifiers-0.2.1}/verifiers/utils/thread_utils.py +0 -0
  379. {verifiers-0.1.15.dev443 → verifiers-0.2.1}/verifiers/utils/threaded_sandbox_client.py +0 -0
  380. {verifiers-0.1.15.dev443 → verifiers-0.2.1}/verifiers/utils/tool_utils.py +0 -0
  381. {verifiers-0.1.15.dev443 → verifiers-0.2.1}/verifiers/utils/usage_utils.py +0 -0
  382. {verifiers-0.1.15.dev443 → verifiers-0.2.1}/verifiers/utils/version_utils.py +0 -0
  383. {verifiers-0.1.15.dev443 → verifiers-0.2.1}/verifiers/v1/cli/__init__.py +0 -0
  384. {verifiers-0.1.15.dev443 → verifiers-0.2.1}/verifiers/v1/cli/dashboard/__init__.py +0 -0
  385. {verifiers-0.1.15.dev443 → verifiers-0.2.1}/verifiers/v1/cli/eval/__init__.py +0 -0
  386. {verifiers-0.1.15.dev443 → verifiers-0.2.1}/verifiers/v1/cli/output.py +0 -0
  387. {verifiers-0.1.15.dev443 → verifiers-0.2.1}/verifiers/v1/cli/resolve.py +0 -0
  388. {verifiers-0.1.15.dev443 → verifiers-0.2.1}/verifiers/v1/cli/serve.py +0 -0
  389. {verifiers-0.1.15.dev443 → verifiers-0.2.1}/verifiers/v1/clients/__init__.py +0 -0
  390. {verifiers-0.1.15.dev443 → verifiers-0.2.1}/verifiers/v1/clients/client.py +0 -0
  391. {verifiers-0.1.15.dev443 → verifiers-0.2.1}/verifiers/v1/clients/config.py +0 -0
  392. {verifiers-0.1.15.dev443 → verifiers-0.2.1}/verifiers/v1/clients/eval.py +0 -0
  393. {verifiers-0.1.15.dev443 → verifiers-0.2.1}/verifiers/v1/configs/__init__.py +0 -0
  394. {verifiers-0.1.15.dev443 → verifiers-0.2.1}/verifiers/v1/configs/init.py +0 -0
  395. {verifiers-0.1.15.dev443 → verifiers-0.2.1}/verifiers/v1/configs/replay.py +0 -0
  396. {verifiers-0.1.15.dev443 → verifiers-0.2.1}/verifiers/v1/configs/serve.py +0 -0
  397. {verifiers-0.1.15.dev443 → verifiers-0.2.1}/verifiers/v1/decorators.py +0 -0
  398. {verifiers-0.1.15.dev443 → verifiers-0.2.1}/verifiers/v1/dialects/__init__.py +0 -0
  399. {verifiers-0.1.15.dev443 → verifiers-0.2.1}/verifiers/v1/episode.py +0 -0
  400. {verifiers-0.1.15.dev443 → verifiers-0.2.1}/verifiers/v1/harnesses/codex/__init__.py +0 -0
  401. {verifiers-0.1.15.dev443 → verifiers-0.2.1}/verifiers/v1/harnesses/kimi_code/__init__.py +0 -0
  402. {verifiers-0.1.15.dev443 → verifiers-0.2.1}/verifiers/v1/harnesses/mini_swe_agent/__init__.py +0 -0
  403. {verifiers-0.1.15.dev443 → verifiers-0.2.1}/verifiers/v1/harnesses/null/__init__.py +0 -0
  404. {verifiers-0.1.15.dev443 → verifiers-0.2.1}/verifiers/v1/harnesses/rlm/__init__.py +0 -0
  405. {verifiers-0.1.15.dev443 → verifiers-0.2.1}/verifiers/v1/harnesses/rlm/harness.py +0 -0
  406. {verifiers-0.1.15.dev443 → verifiers-0.2.1}/verifiers/v1/harnesses/terminus_2/__init__.py +0 -0
  407. {verifiers-0.1.15.dev443 → verifiers-0.2.1}/verifiers/v1/harnesses/terminus_2/harness.py +0 -0
  408. {verifiers-0.1.15.dev443 → verifiers-0.2.1}/verifiers/v1/harnesses/terminus_2/program.py +0 -0
  409. {verifiers-0.1.15.dev443 → verifiers-0.2.1}/verifiers/v1/judge.py +0 -0
  410. {verifiers-0.1.15.dev443 → verifiers-0.2.1}/verifiers/v1/judges/__init__.py +0 -0
  411. {verifiers-0.1.15.dev443 → verifiers-0.2.1}/verifiers/v1/judges/reference.py +0 -0
  412. {verifiers-0.1.15.dev443 → verifiers-0.2.1}/verifiers/v1/judges/reference.txt +0 -0
  413. {verifiers-0.1.15.dev443 → verifiers-0.2.1}/verifiers/v1/judges/rubric.py +0 -0
  414. {verifiers-0.1.15.dev443 → verifiers-0.2.1}/verifiers/v1/judges/rubric.txt +0 -0
  415. {verifiers-0.1.15.dev443 → verifiers-0.2.1}/verifiers/v1/mcp/toolset.py +0 -0
  416. {verifiers-0.1.15.dev443 → verifiers-0.2.1}/verifiers/v1/retries.py +0 -0
  417. {verifiers-0.1.15.dev443 → verifiers-0.2.1}/verifiers/v1/runtimes/subprocess.py +0 -0
  418. {verifiers-0.1.15.dev443 → verifiers-0.2.1}/verifiers/v1/scoring.py +0 -0
  419. {verifiers-0.1.15.dev443 → verifiers-0.2.1}/verifiers/v1/serve/__init__.py +0 -0
  420. {verifiers-0.1.15.dev443 → verifiers-0.2.1}/verifiers/v1/serve/client.py +0 -0
  421. {verifiers-0.1.15.dev443 → verifiers-0.2.1}/verifiers/v1/state.py +0 -0
  422. {verifiers-0.1.15.dev443 → verifiers-0.2.1}/verifiers/v1/task.py +0 -0
  423. {verifiers-0.1.15.dev443 → verifiers-0.2.1}/verifiers/v1/tasksets/harbor/__init__.py +0 -0
  424. {verifiers-0.1.15.dev443 → verifiers-0.2.1}/verifiers/v1/tasksets/lean/__init__.py +0 -0
  425. {verifiers-0.1.15.dev443 → verifiers-0.2.1}/verifiers/v1/tasksets/lean/scoring.py +0 -0
  426. {verifiers-0.1.15.dev443 → verifiers-0.2.1}/verifiers/v1/tasksets/textarena/__init__.py +0 -0
  427. {verifiers-0.1.15.dev443 → verifiers-0.2.1}/verifiers/v1/utils/__init__.py +0 -0
  428. {verifiers-0.1.15.dev443 → verifiers-0.2.1}/verifiers/v1/utils/aio.py +0 -0
  429. {verifiers-0.1.15.dev443 → verifiers-0.2.1}/verifiers/v1/utils/format.py +0 -0
  430. {verifiers-0.1.15.dev443 → verifiers-0.2.1}/verifiers/v1/utils/generic.py +0 -0
  431. {verifiers-0.1.15.dev443 → verifiers-0.2.1}/verifiers/v1/utils/install.py +0 -0
  432. {verifiers-0.1.15.dev443 → verifiers-0.2.1}/verifiers/v1/utils/logging.py +0 -0
  433. {verifiers-0.1.15.dev443 → verifiers-0.2.1}/verifiers/v1/utils/memory.py +0 -0
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: verifiers
3
- Version: 0.1.15.dev443
3
+ Version: 0.2.1
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,56 +24,42 @@ Requires-Python: <3.14,>=3.11
24
24
  Requires-Dist: aiohttp>=3.9.0
25
25
  Requires-Dist: aiolimiter>=1.2.1
26
26
  Requires-Dist: anthropic>=0.78.0
27
- Requires-Dist: datasets<4.7.0,>=3.0.0
28
- Requires-Dist: gepa
27
+ Requires-Dist: datasets<6.0.0,>=3.3.0
28
+ Requires-Dist: gepa>=0.0.6
29
29
  Requires-Dist: httpx>=0.27.0
30
30
  Requires-Dist: loguru>=0.7.0
31
31
  Requires-Dist: math-verify>=0.8.0
32
- Requires-Dist: mcp>=1.14.1
32
+ Requires-Dist: mcp<2,>=1.24.0
33
33
  Requires-Dist: msgpack>=1.1.2
34
- Requires-Dist: numpy
35
- Requires-Dist: openai-agents>=0.0.7
36
- Requires-Dist: openai>=1.108.1
37
- Requires-Dist: prime-pydantic-config[toml]>=0.3.0.dev86
38
- Requires-Dist: prime-sandboxes>=0.2.27
34
+ Requires-Dist: numpy>=2.1.0
35
+ Requires-Dist: openai-agents>=0.8.2
36
+ Requires-Dist: openai>=2.9.0
37
+ Requires-Dist: prime-pydantic-config[toml]>=0.4.2
38
+ Requires-Dist: prime-sandboxes>=0.2.31
39
39
  Requires-Dist: prime-tunnel>=0.1.8
40
- Requires-Dist: pydantic>=2.11.9
40
+ Requires-Dist: pydantic>=2.12.3
41
41
  Requires-Dist: pyzmq>=27.1.0
42
- Requires-Dist: renderers>=0.1.8.dev40
42
+ Requires-Dist: renderers>=0.1.8
43
43
  Requires-Dist: requests
44
- Requires-Dist: rich
44
+ Requires-Dist: rich>=11.0.0
45
45
  Requires-Dist: setproctitle>=1.3.0
46
46
  Requires-Dist: tenacity>=8.5.0
47
47
  Requires-Dist: tomli-w>=1.0.0
48
- Requires-Dist: typing-extensions; python_version < '3.12'
48
+ Requires-Dist: typing-extensions>=4.12.2
49
49
  Requires-Dist: uvloop>=0.21.0; sys_platform != 'win32' and sys_platform != 'cygwin' and platform_python_implementation != 'PyPy'
50
50
  Provides-Extra: browser
51
- Requires-Dist: aiohttp>=3.9.0; extra == 'browser'
52
51
  Requires-Dist: python-dotenv>=1.0.0; extra == 'browser'
53
- Requires-Dist: stagehand>=3.0.0; extra == 'browser'
52
+ Requires-Dist: stagehand>=3.4.0; extra == 'browser'
54
53
  Provides-Extra: harbor
55
54
  Requires-Dist: harbor==0.14.0; (python_version >= '3.12') and extra == 'harbor'
56
55
  Provides-Extra: modal
57
56
  Requires-Dist: modal>=1.4.0; extra == 'modal'
58
57
  Provides-Extra: notebook
59
58
  Requires-Dist: nest-asyncio>=1.6.0; extra == 'notebook'
60
- Provides-Extra: quest
61
- Requires-Dist: certifi; extra == 'quest'
62
- Requires-Dist: pillow; extra == 'quest'
63
- Requires-Dist: pymupdf; extra == 'quest'
59
+ Provides-Extra: openenv
60
+ Requires-Dist: openenv>=0.4.1; extra == 'openenv'
64
61
  Provides-Extra: rg
65
- Requires-Dist: reasoning-gym; extra == 'rg'
66
- Provides-Extra: rl
67
- Requires-Dist: accelerate>=1.4.0; extra == 'rl'
68
- Requires-Dist: deepspeed>=0.17.6; extra == 'rl'
69
- Requires-Dist: flash-attn>=2.8.3; extra == 'rl'
70
- Requires-Dist: liger-kernel>=0.5.10; extra == 'rl'
71
- Requires-Dist: peft; extra == 'rl'
72
- Requires-Dist: requests; extra == 'rl'
73
- Requires-Dist: torch<2.9.0,>=2.8.0; extra == 'rl'
74
- Requires-Dist: transformers>=4.56.2; extra == 'rl'
75
- Requires-Dist: vllm<0.11.0,>=0.10.0; extra == 'rl'
76
- Requires-Dist: wandb; extra == 'rl'
62
+ Requires-Dist: reasoning-gym>=0.1.8; extra == 'rg'
77
63
  Provides-Extra: ta
78
64
  Requires-Dist: nltk>=3.9.2; extra == 'ta'
79
65
  Requires-Dist: textarena==0.7.4; extra == 'ta'
@@ -28,72 +28,69 @@ classifiers = [
28
28
 
29
29
  dependencies = [
30
30
  "anthropic>=0.78.0",
31
- "datasets>=3.0.0, <4.7.0",
32
- "numpy",
31
+ "datasets>=3.3.0,<6.0.0",
32
+ "numpy>=2.1.0",
33
33
  "math-verify>=0.8.0",
34
- "mcp>=1.14.1",
35
- "openai>=1.108.1",
36
- "openai-agents>=0.0.7",
34
+ "mcp>=1.24.0,<2",
35
+ "openai>=2.9.0",
36
+ "openai-agents>=0.8.2",
37
37
  "prime-tunnel>=0.1.8",
38
- "prime-sandboxes>=0.2.27",
39
- "pydantic>=2.11.9",
38
+ "prime-sandboxes>=0.2.31",
39
+ "pydantic>=2.12.3",
40
40
  "requests",
41
- "rich",
41
+ "rich>=11.0.0",
42
42
  "tenacity>=8.5.0",
43
- "gepa",
43
+ "gepa>=0.0.6",
44
44
  "pyzmq>=27.1.0",
45
45
  "msgpack>=1.1.2",
46
46
  "aiolimiter>=1.2.1",
47
47
  "setproctitle>=1.3.0",
48
48
  "httpx>=0.27.0",
49
49
  "aiohttp>=3.9.0",
50
- "prime-pydantic-config[toml]>=0.3.0.dev86",
50
+ "prime-pydantic-config[toml]>=0.4.2",
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",
54
- "renderers>=0.1.8.dev40",
55
- "typing_extensions; python_version < '3.12'",
54
+ "renderers>=0.1.8",
55
+ "typing_extensions>=4.12.2",
56
56
  ]
57
57
 
58
58
  [dependency-groups]
59
59
  dev = [
60
- "ruff",
61
- "pre-commit",
60
+ "ruff>=0.9.0",
61
+ "pre-commit>=2.19.0",
62
62
  "ty>=0.0.1a29,<0.0.22",
63
- "pytest>=7.0.0",
63
+ "pytest>=7.0.0,<9.1.0",
64
64
  "pytest-asyncio>=0.21.0",
65
65
  "pytest-cov>=4.0.0",
66
66
  "pytest-xdist>=3.8.0",
67
- "ipykernel",
68
- "ipywidgets",
69
- "reasoning-gym",
70
- "stagehand>=3.0.0",
71
- "aiohttp>=3.9.0",
67
+ "nest-asyncio>=1.6.0",
68
+ "reasoning-gym>=0.1.8",
69
+ "stagehand>=3.4.0",
72
70
  "python-dotenv>=1.0.0",
73
71
  "nltk>=3.9.2",
74
72
  "textarena==0.7.4",
75
73
  ]
76
- # v1 example environments vendored under environments/, resolved by id via [tool.uv.sources].
74
+ # V1 examples and support packages, resolved from their local sources below.
77
75
  # Installed by default (tool.uv.default-groups) so the v1 CLIs (eval <id>, serve) run straight
78
76
  # from this repo. The built-in tasksets/harnesses ship inside verifiers (verifiers/v1/...).
79
77
  examples = [
80
78
  "compact",
81
79
  "gsm8k-v1", "glossary-v1", "deepwiki-v1", "wiki-search-v1", "code-golf-v1",
82
80
  "reverse-text-v1", "color-codeword-v1",
83
- "wordle-v1", "alphabet-sort-v1", "scratchpad-v1",
81
+ "wordle-v1", "openenv-wordle-v1", "alphabet-sort-v1", "scratchpad-v1",
84
82
  ]
85
83
 
86
84
  [project.optional-dependencies]
87
85
  rg = [
88
- "reasoning-gym",
86
+ "reasoning-gym>=0.1.8",
89
87
  ]
90
88
  ta = [
91
89
  "textarena==0.7.4",
92
90
  "nltk>=3.9.2",
93
91
  ]
94
92
  browser = [
95
- "stagehand>=3.0.0",
96
- "aiohttp>=3.9.0",
93
+ "stagehand>=3.4.0",
97
94
  "python-dotenv>=1.0.0",
98
95
  ]
99
96
  harbor = [
@@ -106,24 +103,9 @@ modal = [
106
103
  notebook = [
107
104
  "nest-asyncio>=1.6.0",
108
105
  ]
109
- quest = [
110
- "certifi",
111
- "pillow",
112
- "pymupdf",
113
- ]
114
- rl = [
115
- "torch>=2.8.0,<2.9.0",
116
- "transformers>=4.56.2",
117
- "accelerate>=1.4.0",
118
- "requests",
119
- "peft",
120
- "wandb",
121
- "vllm>=0.10.0,<0.11.0",
122
- "liger-kernel>=0.5.10",
123
- "deepspeed>=0.17.6",
124
- "flash-attn>=2.8.3",
106
+ openenv = [
107
+ "openenv>=0.4.1",
125
108
  ]
126
-
127
109
  [tool.uv]
128
110
  preview = true
129
111
  required-version = ">=0.11.1"
@@ -143,8 +125,8 @@ wiki-search-v1 = { path = "environments/wiki_search_v1", editable = true }
143
125
  gsm8k-v1 = { path = "environments/gsm8k_v1", editable = true }
144
126
  code-golf-v1 = { path = "environments/code_golf_v1", editable = true }
145
127
  reverse-text-v1 = { path = "environments/reverse_text_v1", editable = true }
146
- reverse-text = { path = "environments/reverse_text", editable = true }
147
128
  wordle-v1 = { path = "environments/wordle_v1", editable = true }
129
+ openenv-wordle-v1 = { path = "environments/openenv_wordle_v1", editable = true }
148
130
  color-codeword-v1 = { path = "environments/color_codeword_v1", editable = true }
149
131
  alphabet-sort-v1 = { path = "environments/alphabet_sort_v1", editable = true }
150
132
  scratchpad-v1 = { path = "environments/scratchpad_v1", editable = true }
@@ -156,12 +138,6 @@ prime-sandboxes = false
156
138
  prime-pydantic-config = false
157
139
  renderers = false
158
140
 
159
- [tool.uv.extra-build-dependencies]
160
- flash-attn = [{ requirement = "torch", match-runtime = true }]
161
-
162
- [tool.uv.extra-build-variables]
163
- flash-attn = { FLASH_ATTENTION_SKIP_CUDA_BUILD = "TRUE" }
164
-
165
141
  [project.scripts]
166
142
  vf-eval = "verifiers.scripts.eval:main"
167
143
  eval = "verifiers.v1.cli.eval.main:main"
@@ -170,6 +146,7 @@ debug = "verifiers.v1.cli.debug:main"
170
146
  replay = "verifiers.v1.cli.replay:main"
171
147
  serve = "verifiers.v1.cli.serve:main"
172
148
  init = "verifiers.v1.cli.init:main"
149
+ gepa = "verifiers.v1.cli.gepa:main"
173
150
  vf-gepa = "verifiers.scripts.gepa:main"
174
151
  vf-init = "verifiers.scripts.init:main"
175
152
  vf-install = "verifiers.scripts.install:main"
@@ -248,7 +225,7 @@ markers = [
248
225
  "modal: v1 e2e cases touching the modal runtime (local-only setup; excluded in CI)",
249
226
  "colocated: v1 e2e cases with a user/tool server colocated in the harness runtime",
250
227
  "null: v1 e2e cases on the null harness",
251
- "default: v1 e2e cases on the default harness",
228
+ "bash: v1 e2e cases on the bash harness",
252
229
  "rlm: v1 e2e cases on the rlm harness",
253
230
  "kimi_code: v1 e2e cases on the kimi-code harness",
254
231
  "codex: v1 e2e cases on the codex harness",
@@ -39,6 +39,12 @@ from verifiers.types import (
39
39
  from verifiers.utils.save_utils import state_to_output
40
40
 
41
41
 
42
+ def pytest_configure(config) -> None:
43
+ config.addinivalue_line(
44
+ "markers", "claude_code: v1 e2e cases on the claude-code harness"
45
+ )
46
+
47
+
42
48
  @pytest.fixture
43
49
  def basic_parser():
44
50
  """Return a basic Parser instance."""
@@ -452,98 +452,6 @@ class TestDOMModeLLMConfig:
452
452
  assert config is None
453
453
 
454
454
 
455
- # ============================================================================
456
- # Example Environment Tests
457
- # ============================================================================
458
-
459
-
460
- class TestExampleDatasets:
461
- """Tests for example environment datasets."""
462
-
463
- def test_dom_example_dataset_structure(self):
464
- """Test DOM example dataset has correct structure."""
465
- from environments.browser_dom_example.browser_dom_example import (
466
- create_example_dataset,
467
- )
468
-
469
- dataset = create_example_dataset()
470
-
471
- assert "question" in dataset.column_names
472
- assert "answer" in dataset.column_names
473
- assert "start_url" in dataset.column_names
474
- assert "task_id" in dataset.column_names
475
- assert len(dataset) >= 1
476
-
477
- def test_cua_example_dataset_structure(self):
478
- """Test CUA example dataset has correct structure."""
479
- from environments.browser_cua_example.browser_cua_example import (
480
- create_example_dataset,
481
- )
482
-
483
- dataset = create_example_dataset()
484
-
485
- assert "question" in dataset.column_names
486
- assert "answer" in dataset.column_names
487
- assert "start_url" in dataset.column_names
488
- assert "task_id" in dataset.column_names
489
- assert len(dataset) >= 1
490
-
491
-
492
- class TestJudgeAnswer:
493
- """Tests for judge_answer reward function."""
494
-
495
- @pytest.mark.asyncio
496
- async def test_judge_answer_returns_1_for_yes(self):
497
- """Test that judge_answer returns 1.0 when judge says yes."""
498
- from environments.browser_dom_example.browser_dom_example import judge_answer
499
-
500
- async def mock_judge(prompt, completion, answer, state):
501
- return "yes, the answer is correct"
502
-
503
- result = await judge_answer(
504
- judge=mock_judge,
505
- prompt="What is 2+2?",
506
- completion=[{"role": "assistant", "content": "The answer is 4"}],
507
- answer="4",
508
- state={},
509
- )
510
- assert result == 1.0
511
-
512
- @pytest.mark.asyncio
513
- async def test_judge_answer_returns_0_for_no(self):
514
- """Test that judge_answer returns 0.0 when judge says no."""
515
- from environments.browser_dom_example.browser_dom_example import judge_answer
516
-
517
- async def mock_judge(prompt, completion, answer, state):
518
- return "no, the answer is incorrect"
519
-
520
- result = await judge_answer(
521
- judge=mock_judge,
522
- prompt="What is 2+2?",
523
- completion=[{"role": "assistant", "content": "The answer is 5"}],
524
- answer="4",
525
- state={},
526
- )
527
- assert result == 0.0
528
-
529
- @pytest.mark.asyncio
530
- async def test_judge_answer_case_insensitive(self):
531
- """Test that judge response check is case insensitive."""
532
- from environments.browser_dom_example.browser_dom_example import judge_answer
533
-
534
- async def mock_judge(prompt, completion, answer, state):
535
- return "YES"
536
-
537
- result = await judge_answer(
538
- judge=mock_judge,
539
- prompt="test",
540
- completion="test",
541
- answer="test",
542
- state={},
543
- )
544
- assert result == 1.0
545
-
546
-
547
455
  # ============================================================================
548
456
  # Constants Tests
549
457
  # ============================================================================
@@ -73,7 +73,7 @@ class TestIsHubEnv:
73
73
  assert is_hub_env("gsm8k") is False
74
74
 
75
75
  def test_local_env_relative_path(self):
76
- assert is_hub_env("./environments/gsm8k") is False
76
+ assert is_hub_env("./environments/gsm8k_v1") is False
77
77
 
78
78
  def test_local_env_absolute_path(self):
79
79
  assert is_hub_env("/path/to/gsm8k") is False
@@ -15,15 +15,16 @@ Every matrix value carries a pytest mark, so subsets select with `-m`:
15
15
  uv run pytest tests/v1 -n auto # the whole matrix (needs modal setup)
16
16
  uv run pytest tests/v1 -n auto -m "not prime and not modal" # the CI matrix (host + docker only)
17
17
  uv run pytest tests/v1 -n auto -m docker # any case touching the docker runtime
18
- uv run pytest tests/v1 -n auto -m default # only the default harness
18
+ uv run pytest tests/v1 -n auto -m bash # only the bash harness
19
19
  uv run pytest tests/v1 -n auto -m prime # only prime (real sandboxes; local)
20
20
  uv run pytest tests/v1 -n auto -m modal # only modal (needs local setup)
21
21
 
22
22
  Marks: runtimes `subprocess` / `docker` / `prime` / `modal`, placement `colocated`,
23
- harnesses `null` / `default` / `rlm` / `kimi_code` / `codex`. A mark is applied per axis, so it
24
- selects every case touching that value on ANY axis; for one exact combination use `-k` on the test
25
- id (e.g. `-k "harness-in-docker-with-tool-in-subprocess"`). prime/modal provision real remote
26
- sandboxes (slow, infra-flaky, need setup), so they're local-only — CI runs `-m "not prime and not modal"`.
23
+ harnesses `null` / `bash` / `rlm` / `kimi_code` / `codex` / `claude_code`. A mark is applied per
24
+ axis, so it selects every case touching that value on ANY axis; for one exact combination use `-k`
25
+ on the test id (e.g. `-k "harness-in-docker-with-tool-in-subprocess"`). prime/modal provision real
26
+ remote sandboxes (slow, infra-flaky, need setup), so they're local-only — CI runs
27
+ `-m "not prime and not modal"`.
27
28
  """
28
29
 
29
30
  import os
@@ -103,18 +104,19 @@ def tool_runtime(request) -> dict:
103
104
  return {"runtime": {"type": request.param}}
104
105
 
105
106
 
106
- # Harnesses, composed with the runtime fixtures, each carrying its harness mark (`-m default`, ...).
107
- # Built-ins are bundled in the `harnesses` package; the agent CLIs (`rlm` / `kimi-code` / `codex`)
108
- # install their dependencies at rollout. `compact` (an example harness) and `terminus-2` (drives
109
- # the host tmux) are excluded. `test_agentic` skips `null` (a chat loop with no shell);
110
- # `test_single_turn` skips `codex` (a coding agent, unreliable on a no-op echo).
107
+ # Harnesses, composed with the runtime fixtures, each carrying its harness mark (`-m bash`, ...).
108
+ # Built-ins are bundled in the `harnesses` package; the agent CLIs (`rlm` / `kimi-code` / `codex` /
109
+ # `claude-code`) install their dependencies at rollout. `compact` (an example harness) and
110
+ # `terminus-2` (drives the host tmux) are excluded. `test_agentic` skips `null` (a chat loop with no
111
+ # shell); `test_single_turn` skips the coding agents, which are unreliable on a no-op echo.
111
112
  @pytest.fixture(
112
113
  params=[
113
114
  pytest.param("null", marks=pytest.mark.null, id="null"),
114
- pytest.param("default", marks=pytest.mark.default, id="default"),
115
+ pytest.param("bash", marks=pytest.mark.bash, id="bash"),
115
116
  pytest.param("rlm", marks=pytest.mark.rlm, id="rlm"),
116
117
  pytest.param("kimi-code", marks=pytest.mark.kimi_code, id="kimi-code"),
117
118
  pytest.param("codex", marks=pytest.mark.codex, id="codex"),
119
+ pytest.param("claude-code", marks=pytest.mark.claude_code, id="claude-code"),
118
120
  ]
119
121
  )
120
122
  def harness(request) -> str:
@@ -172,6 +174,7 @@ def _eval_config(
172
174
  harness_overrides: dict | None = None,
173
175
  pool: dict | None = None,
174
176
  model: str | None = None,
177
+ reasoning_effort: str | None = None,
175
178
  ) -> EvalConfig:
176
179
  """Build the smallest `EvalConfig` that still exercises the path, shared by the in-process
177
180
  (`run_v1`) and env-server (`run_v1_server`) fixtures. `taskset_overrides` / `harness_overrides`
@@ -192,7 +195,11 @@ def _eval_config(
192
195
  num_rollouts=n,
193
196
  max_turns=max_turns,
194
197
  max_output_tokens=max_tokens,
195
- sampling={"max_tokens": max_tokens, "temperature": 0},
198
+ sampling={
199
+ "max_tokens": max_tokens,
200
+ "temperature": 0,
201
+ "reasoning_effort": reasoning_effort,
202
+ },
196
203
  timeout={"rollout": rollout_timeout, "scoring": 60},
197
204
  retries={"rollout": {"max_retries": 2, "include": ["ProviderError"]}},
198
205
  rich=False,
@@ -35,7 +35,7 @@ class EchoUserSimUser(vf.User[vf.UserConfig, EchoUserSimState]):
35
35
  if self.turns >= len(self.phrases):
36
36
  self.state.user_finished = True
37
37
  return []
38
- return [{"role": "user", "content": self.phrases[self.turns]}]
38
+ return [vf.UserMessage(content=self.phrases[self.turns])]
39
39
 
40
40
 
41
41
  class EchoUserSimData(vf.TaskData):
@@ -7,7 +7,7 @@ content part on a ToolMessage.
7
7
 
8
8
  import verifiers.v1 as vf
9
9
 
10
- PNG_DATA = "iVBORw0KGgoAAAANSUhEUgAAAAEAAAABCAIAAACQd1PeAAAADUlEQVR4nGP4z8DwHwAFAAH/e+m+7wAAAABJRU5ErkJggg=="
10
+ PNG_DATA = "iVBORw0KGgoAAAANSUhEUgAAACAAAAAgCAIAAAD8GO2jAAAAKUlEQVRIx+3NMQEAAAjDMMC/52ECvlRA06nUZ/N6BwAAAAAAAAAAAIcttVsCPm9Ue3AAAAAASUVORK5CYII="
11
11
  EXPECTED_URL = f"data:image/png;base64,{PNG_DATA}"
12
12
  SYSTEM = "Call the requested tool before answering."
13
13
 
@@ -0,0 +1,18 @@
1
+ from color_codeword_v1 import taskset
2
+
3
+
4
+ def test_color_images_are_rendered_once(monkeypatch) -> None:
5
+ calls: list[tuple[int, int, int]] = []
6
+ render = taskset.image_data_url
7
+
8
+ def counted(image) -> str:
9
+ calls.append(image.getpixel((0, 0)))
10
+ return render(image)
11
+
12
+ monkeypatch.setattr(taskset, "image_data_url", counted)
13
+ tasks = taskset.ColorCodewordTaskset(taskset.ColorCodewordConfig()).select(
14
+ num_tasks=100
15
+ )
16
+
17
+ assert len(tasks) == 100
18
+ assert calls == list(taskset.COLOR_RGB.values())
@@ -6,8 +6,8 @@ import pytest
6
6
  @pytest.mark.e2e
7
7
  async def test_single_turn(run_v1, harness, harness_runtime, tmp_path):
8
8
  """Single-turn (echo a short phrase back)."""
9
- if harness == "codex":
10
- pytest.skip("codex is a coding agent, not reliable on a no-op echo chat task")
9
+ if harness in {"codex", "claude-code"}:
10
+ pytest.skip("coding agents are not reliable on a no-op echo chat task")
11
11
  (trace,) = await run_v1(
12
12
  "echo-v1",
13
13
  harness=harness,
@@ -18,6 +18,12 @@ async def test_single_turn(run_v1, harness, harness_runtime, tmp_path):
18
18
  assert trace.errors == []
19
19
  assert trace.num_turns == 1
20
20
  assert trace.reward == 1.0
21
+ # Every sampled turn has one per-call record, linked to its assistant node.
22
+ sampled = [i for i, n in enumerate(trace.nodes) if n.sampled]
23
+ assert [c.node for c in trace.calls if c.error is None] == sampled
24
+ for call in trace.calls:
25
+ assert call.model and call.sampling is not None
26
+ assert call.time.duration > 0
21
27
 
22
28
 
23
29
  @pytest.mark.e2e
@@ -74,6 +80,11 @@ async def test_tool(run_v1, harness_runtime, tool_runtime, tmp_path):
74
80
  assert trace.errors == []
75
81
  assert trace.num_turns >= 2 # tool call + answer
76
82
  assert trace.reward == 1.0
83
+ # The interception server captured the advertised tools onto the trace (for tool-use SFT):
84
+ # the null harness offered the task's MCP tool as `echo_back`, schema included.
85
+ assert trace.tools is not None
86
+ (echo_tool,) = [t for t in trace.tools if t.name == "echo_back"]
87
+ assert "message" in echo_tool.parameters.get("properties", {})
77
88
 
78
89
 
79
90
  @pytest.mark.e2e
@@ -140,7 +151,8 @@ async def test_tool_response_image(run_v1, tmp_path):
140
151
  "tool-response-image-v1",
141
152
  harness="null",
142
153
  harness_overrides={"runtime": {"type": "subprocess"}},
143
- model="qwen/qwen3-vl-8b-instruct",
154
+ model="openai/gpt-5.6-luna",
155
+ reasoning_effort="none",
144
156
  output_dir=tmp_path,
145
157
  max_turns=4,
146
158
  )
@@ -1,10 +1,8 @@
1
- """Smoke-eval every v1 example taskset in `environments/` through the `eval` CLI.
1
+ """Smoke-eval every V1 example taskset in `environments/` through the `eval` CLI.
2
2
 
3
- The v0 counterpart (`tests/test_envs.py`) covers v0 envs (`vf.load_environment` + `vf-eval`);
4
- here we run each `_v1` taskset with its required harness for one short, capped rollout and
5
- require it to succeed — so a broken example taskset fails CI. `compact` is excluded (it's a
6
- harness, not a taskset); SWE/container tasksets need a docker/prime runtime and are covered by
7
- the dedicated v1 e2e tests instead.
3
+ Each `_v1` taskset runs with its required harness for one short, capped rollout, so a broken
4
+ example taskset fails CI. `compact` is excluded (it's a harness, not a taskset);
5
+ SWE/container tasksets need a docker/prime runtime and are covered by dedicated V1 e2e tests.
8
6
  """
9
7
 
10
8
  import os
@@ -0,0 +1,71 @@
1
+ """`Taskset.select` over list, generator, and `INFINITE` `load` implementations."""
2
+
3
+ import itertools
4
+
5
+ import pytest
6
+
7
+ import verifiers.v1 as vf
8
+
9
+
10
+ class CountTask(vf.Task[vf.TaskData]):
11
+ pass
12
+
13
+
14
+ class InfiniteTaskset(vf.Taskset[CountTask, vf.TasksetConfig]):
15
+ INFINITE = True
16
+
17
+ def load(self):
18
+ for i in itertools.count():
19
+ yield CountTask(vf.TaskData(idx=i, prompt=f"task {i}"))
20
+
21
+
22
+ class FiniteTaskset(vf.Taskset[CountTask, vf.TasksetConfig]):
23
+ def load(self):
24
+ for i in range(10):
25
+ yield CountTask(vf.TaskData(idx=i, prompt=f"task {i}"))
26
+
27
+
28
+ def idxs(tasks: list[CountTask]) -> list[int]:
29
+ return [task.data.idx for task in tasks]
30
+
31
+
32
+ def test_select_bounds_an_infinite_taskset() -> None:
33
+ tasks = InfiniteTaskset(vf.TasksetConfig()).select(num_tasks=5)
34
+ assert idxs(tasks) == [0, 1, 2, 3, 4]
35
+
36
+
37
+ def test_select_infinite_requires_num_tasks() -> None:
38
+ with pytest.raises(ValueError, match="infinite"):
39
+ InfiniteTaskset(vf.TasksetConfig()).select()
40
+
41
+
42
+ def test_select_infinite_ignores_shuffle() -> None:
43
+ tasks = InfiniteTaskset(vf.TasksetConfig()).select(num_tasks=3, shuffle=True)
44
+ assert idxs(tasks) == [0, 1, 2]
45
+
46
+
47
+ def test_select_finite() -> None:
48
+ taskset = FiniteTaskset(vf.TasksetConfig())
49
+ assert len(taskset.select()) == 10
50
+ assert idxs(taskset.select(num_tasks=4)) == [0, 1, 2, 3]
51
+
52
+
53
+ def test_select_shuffle_samples_the_whole_taskset_reproducibly() -> None:
54
+ taskset = FiniteTaskset(vf.TasksetConfig())
55
+ first = idxs(taskset.select(num_tasks=5, shuffle=True))
56
+ assert first == idxs(taskset.select(num_tasks=5, shuffle=True))
57
+ assert len(first) == 5 and set(first) <= set(range(10))
58
+ assert first != [0, 1, 2, 3, 4] # sampled from the whole set, not the head
59
+
60
+
61
+ def test_select_only_builds_what_the_run_takes() -> None:
62
+ built: list[int] = []
63
+
64
+ class RecordingTaskset(InfiniteTaskset):
65
+ def load(self):
66
+ for i in itertools.count():
67
+ built.append(i)
68
+ yield CountTask(vf.TaskData(idx=i, prompt=f"task {i}"))
69
+
70
+ RecordingTaskset(vf.TasksetConfig()).select(num_tasks=3)
71
+ assert built == [0, 1, 2]
@@ -60,6 +60,7 @@ def test_wire_trace_round_trip():
60
60
  # carry node `parent` links for `num_branches` to survive.
61
61
  tr = vf.Trace[MyTask, vf.State](
62
62
  task=vf.TraceTask(type="MyTask", data=MyTask(idx=0, prompt="q", answer="a")),
63
+ tools=[vf.Tool(name="echo", description="", parameters={"type": "object"})],
63
64
  nodes=[
64
65
  MessageNode(parent=None, message=UserMessage(content="q"), sampled=False),
65
66
  MessageNode(parent=0, message=AssistantMessage(content="a1"), sampled=True),
@@ -80,6 +81,9 @@ def test_wire_trace_round_trip():
80
81
  assert rt.reward == 1.0 # property recomputed from `rewards`
81
82
  assert rt.stop_condition == "done"
82
83
  assert rt.info == {"build": "ok"}
84
+ assert (
85
+ rt.tools == tr.tools
86
+ ) # the advertised tools persist (tool-use SFT reads them)
83
87
  assert rt.task.data.model_extra == {
84
88
  "answer": "a"
85
89
  } # taskset extras preserved on WireTaskData
@@ -139,16 +139,3 @@ CUA execution options:
139
139
  1. **Prebuilt image** (default): fastest startup
140
140
  2. **Binary upload** (`use_prebuilt_image=False`): custom server workflows
141
141
  3. **Manual local server** (`use_sandbox=False`): local development/debugging
142
-
143
- ## Example Environments
144
-
145
- For complete reference implementations, see:
146
-
147
- - **DOM example:** `environments/browser_dom_example/`
148
- - `environments/browser_dom_example/browser_dom_example.py`
149
- - `environments/browser_dom_example/README.md`
150
- - **CUA example:** `environments/browser_cua_example/`
151
- - `environments/browser_cua_example/browser_cua_example.py`
152
- - `environments/browser_cua_example/README.md`
153
-
154
- These examples show end-to-end `load_environment()` setup, evaluation commands, and recommended runtime flags.