verifiers 0.2.2.dev96__tar.gz → 0.2.2.dev112__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 (436) hide show
  1. {verifiers-0.2.2.dev96 → verifiers-0.2.2.dev112}/PKG-INFO +4 -2
  2. {verifiers-0.2.2.dev96 → verifiers-0.2.2.dev112}/pyproject.toml +32 -1
  3. {verifiers-0.2.2.dev96 → verifiers-0.2.2.dev112}/tests/v1/conftest.py +4 -1
  4. {verifiers-0.2.2.dev96 → verifiers-0.2.2.dev112}/tests/v1/fixtures/echo_tool_v1.py +4 -5
  5. {verifiers-0.2.2.dev96 → verifiers-0.2.2.dev112}/tests/v1/test_envs.py +2 -4
  6. {verifiers-0.2.2.dev96 → verifiers-0.2.2.dev112}/verifiers/v1/acp/__init__.py +6 -2
  7. {verifiers-0.2.2.dev96 → verifiers-0.2.2.dev112}/verifiers/v1/clients/train.py +6 -2
  8. {verifiers-0.2.2.dev96 → verifiers-0.2.2.dev112}/verifiers/v1/configs/client.py +3 -2
  9. {verifiers-0.2.2.dev96 → verifiers-0.2.2.dev112}/verifiers/v1/dialects/chat.py +5 -1
  10. {verifiers-0.2.2.dev96 → verifiers-0.2.2.dev112}/verifiers/v1/envs/agentic_judge/env.py +5 -3
  11. {verifiers-0.2.2.dev96 → verifiers-0.2.2.dev112}/verifiers/v1/envs/user_sim/env.py +2 -1
  12. {verifiers-0.2.2.dev96 → verifiers-0.2.2.dev112}/verifiers/v1/gepa/runner.py +1 -1
  13. {verifiers-0.2.2.dev96 → verifiers-0.2.2.dev112}/verifiers/v1/harnesses/claude_code/harness.py +31 -15
  14. {verifiers-0.2.2.dev96 → verifiers-0.2.2.dev112}/verifiers/v1/harnesses/codex/harness.py +33 -19
  15. {verifiers-0.2.2.dev96 → verifiers-0.2.2.dev112}/verifiers/v1/harnesses/kimi_code/harness.py +3 -1
  16. {verifiers-0.2.2.dev96 → verifiers-0.2.2.dev112}/verifiers/v1/harnesses/mini_swe_agent/harness.py +3 -1
  17. {verifiers-0.2.2.dev96 → verifiers-0.2.2.dev112}/verifiers/v1/harnesses/openclaw/harness.py +2 -4
  18. {verifiers-0.2.2.dev96 → verifiers-0.2.2.dev112}/verifiers/v1/harnesses/pi/harness.py +7 -3
  19. {verifiers-0.2.2.dev96 → verifiers-0.2.2.dev112}/verifiers/v1/harnesses/pool/harness.py +1 -1
  20. {verifiers-0.2.2.dev96 → verifiers-0.2.2.dev112}/verifiers/v1/harnesses/rlm/harness.py +1 -1
  21. {verifiers-0.2.2.dev96 → verifiers-0.2.2.dev112}/verifiers/v1/harnesses/terminus_2/harness.py +3 -1
  22. {verifiers-0.2.2.dev96 → verifiers-0.2.2.dev112}/verifiers/v1/interception/server.py +21 -2
  23. {verifiers-0.2.2.dev96 → verifiers-0.2.2.dev112}/verifiers/v1/mcp/launch.py +108 -41
  24. {verifiers-0.2.2.dev96 → verifiers-0.2.2.dev112}/verifiers/v1/mcp/server.py +3 -2
  25. {verifiers-0.2.2.dev96 → verifiers-0.2.2.dev112}/verifiers/v1/mcp/toolset.py +1 -1
  26. {verifiers-0.2.2.dev96 → verifiers-0.2.2.dev112}/verifiers/v1/rollout.py +4 -13
  27. {verifiers-0.2.2.dev96 → verifiers-0.2.2.dev112}/verifiers/v1/runtimes/base.py +9 -0
  28. {verifiers-0.2.2.dev96 → verifiers-0.2.2.dev112}/verifiers/v1/runtimes/limiters.py +9 -4
  29. {verifiers-0.2.2.dev96 → verifiers-0.2.2.dev112}/verifiers/v1/session.py +6 -3
  30. {verifiers-0.2.2.dev96 → verifiers-0.2.2.dev112}/verifiers/v1/tasksets/__init__.py +3 -0
  31. verifiers-0.2.2.dev112/verifiers/v1/tasksets/nemo_gym/__init__.py +17 -0
  32. verifiers-0.2.2.dev112/verifiers/v1/tasksets/nemo_gym/response.py +110 -0
  33. verifiers-0.2.2.dev112/verifiers/v1/tasksets/nemo_gym/server.py +42 -0
  34. verifiers-0.2.2.dev112/verifiers/v1/tasksets/nemo_gym/taskset.py +170 -0
  35. verifiers-0.2.2.dev112/verifiers/v1/tasksets/nemo_gym/toolset.py +107 -0
  36. {verifiers-0.2.2.dev96 → verifiers-0.2.2.dev112}/.gitignore +0 -0
  37. {verifiers-0.2.2.dev96 → verifiers-0.2.2.dev112}/LICENSE +0 -0
  38. {verifiers-0.2.2.dev96 → verifiers-0.2.2.dev112}/README.md +0 -0
  39. {verifiers-0.2.2.dev96 → verifiers-0.2.2.dev112}/tests/__init__.py +0 -0
  40. {verifiers-0.2.2.dev96 → verifiers-0.2.2.dev112}/tests/conftest.py +0 -0
  41. {verifiers-0.2.2.dev96 → verifiers-0.2.2.dev112}/tests/test_browser_env.py +0 -0
  42. {verifiers-0.2.2.dev96 → verifiers-0.2.2.dev112}/tests/test_build_script.py +0 -0
  43. {verifiers-0.2.2.dev96 → verifiers-0.2.2.dev112}/tests/test_cli_agent_env.py +0 -0
  44. {verifiers-0.2.2.dev96 → verifiers-0.2.2.dev112}/tests/test_client_auth_errors.py +0 -0
  45. {verifiers-0.2.2.dev96 → verifiers-0.2.2.dev112}/tests/test_client_config.py +0 -0
  46. {verifiers-0.2.2.dev96 → verifiers-0.2.2.dev112}/tests/test_client_multimodal_types.py +0 -0
  47. {verifiers-0.2.2.dev96 → verifiers-0.2.2.dev112}/tests/test_composable_env.py +0 -0
  48. {verifiers-0.2.2.dev96 → verifiers-0.2.2.dev112}/tests/test_context_token_metrics.py +0 -0
  49. {verifiers-0.2.2.dev96 → verifiers-0.2.2.dev112}/tests/test_decorator_ranks.py +0 -0
  50. {verifiers-0.2.2.dev96 → verifiers-0.2.2.dev112}/tests/test_endpoint_registry.py +0 -0
  51. {verifiers-0.2.2.dev96 → verifiers-0.2.2.dev112}/tests/test_env_group.py +0 -0
  52. {verifiers-0.2.2.dev96 → verifiers-0.2.2.dev112}/tests/test_env_server.py +0 -0
  53. {verifiers-0.2.2.dev96 → verifiers-0.2.2.dev112}/tests/test_environment.py +0 -0
  54. {verifiers-0.2.2.dev96 → verifiers-0.2.2.dev112}/tests/test_environment_extra.py +0 -0
  55. {verifiers-0.2.2.dev96 → verifiers-0.2.2.dev112}/tests/test_error_chain.py +0 -0
  56. {verifiers-0.2.2.dev96 → verifiers-0.2.2.dev112}/tests/test_eval_display.py +0 -0
  57. {verifiers-0.2.2.dev96 → verifiers-0.2.2.dev112}/tests/test_eval_utils.py +0 -0
  58. {verifiers-0.2.2.dev96 → verifiers-0.2.2.dev112}/tests/test_gepa_cli.py +0 -0
  59. {verifiers-0.2.2.dev96 → verifiers-0.2.2.dev112}/tests/test_gepa_utils.py +0 -0
  60. {verifiers-0.2.2.dev96 → verifiers-0.2.2.dev112}/tests/test_gym_env.py +0 -0
  61. {verifiers-0.2.2.dev96 → verifiers-0.2.2.dev112}/tests/test_harbor_env_mcp.py +0 -0
  62. {verifiers-0.2.2.dev96 → verifiers-0.2.2.dev112}/tests/test_imports.py +0 -0
  63. {verifiers-0.2.2.dev96 → verifiers-0.2.2.dev112}/tests/test_init_script.py +0 -0
  64. {verifiers-0.2.2.dev96 → verifiers-0.2.2.dev112}/tests/test_install_utils.py +0 -0
  65. {verifiers-0.2.2.dev96 → verifiers-0.2.2.dev112}/tests/test_interception_utils.py +0 -0
  66. {verifiers-0.2.2.dev96 → verifiers-0.2.2.dev112}/tests/test_logging.py +0 -0
  67. {verifiers-0.2.2.dev96 → verifiers-0.2.2.dev112}/tests/test_math_rubric.py +0 -0
  68. {verifiers-0.2.2.dev96 → verifiers-0.2.2.dev112}/tests/test_maybe_think_parser.py +0 -0
  69. {verifiers-0.2.2.dev96 → verifiers-0.2.2.dev112}/tests/test_message_utils.py +0 -0
  70. {verifiers-0.2.2.dev96 → verifiers-0.2.2.dev112}/tests/test_message_utils_multimodal.py +0 -0
  71. {verifiers-0.2.2.dev96 → verifiers-0.2.2.dev112}/tests/test_multiturn_env.py +0 -0
  72. {verifiers-0.2.2.dev96 → verifiers-0.2.2.dev112}/tests/test_nemorl_client.py +0 -0
  73. {verifiers-0.2.2.dev96 → verifiers-0.2.2.dev112}/tests/test_openai_chat_completions_token_client.py +0 -0
  74. {verifiers-0.2.2.dev96 → verifiers-0.2.2.dev112}/tests/test_openai_responses_client.py +0 -0
  75. {verifiers-0.2.2.dev96 → verifiers-0.2.2.dev112}/tests/test_opencode_rlm_env.py +0 -0
  76. {verifiers-0.2.2.dev96 → verifiers-0.2.2.dev112}/tests/test_openenv_client.py +0 -0
  77. {verifiers-0.2.2.dev96 → verifiers-0.2.2.dev112}/tests/test_parser.py +0 -0
  78. {verifiers-0.2.2.dev96 → verifiers-0.2.2.dev112}/tests/test_path_utils.py +0 -0
  79. {verifiers-0.2.2.dev96 → verifiers-0.2.2.dev112}/tests/test_per_turn_timing.py +0 -0
  80. {verifiers-0.2.2.dev96 → verifiers-0.2.2.dev112}/tests/test_pricing_utils.py +0 -0
  81. {verifiers-0.2.2.dev96 → verifiers-0.2.2.dev112}/tests/test_prime_plugin.py +0 -0
  82. {verifiers-0.2.2.dev96 → verifiers-0.2.2.dev112}/tests/test_renderer_client.py +0 -0
  83. {verifiers-0.2.2.dev96 → verifiers-0.2.2.dev112}/tests/test_renderer_e2e.py +0 -0
  84. {verifiers-0.2.2.dev96 → verifiers-0.2.2.dev112}/tests/test_rlm_composable_env.py +0 -0
  85. {verifiers-0.2.2.dev96 → verifiers-0.2.2.dev112}/tests/test_rubric.py +0 -0
  86. {verifiers-0.2.2.dev96 → verifiers-0.2.2.dev112}/tests/test_rubric_group.py +0 -0
  87. {verifiers-0.2.2.dev96 → verifiers-0.2.2.dev112}/tests/test_sandbox_debug_env.py +0 -0
  88. {verifiers-0.2.2.dev96 → verifiers-0.2.2.dev112}/tests/test_sandbox_env.py +0 -0
  89. {verifiers-0.2.2.dev96 → verifiers-0.2.2.dev112}/tests/test_sandbox_mixin.py +0 -0
  90. {verifiers-0.2.2.dev96 → verifiers-0.2.2.dev112}/tests/test_save_utils.py +0 -0
  91. {verifiers-0.2.2.dev96 → verifiers-0.2.2.dev112}/tests/test_setup_script.py +0 -0
  92. {verifiers-0.2.2.dev96 → verifiers-0.2.2.dev112}/tests/test_singleturn_env.py +0 -0
  93. {verifiers-0.2.2.dev96 → verifiers-0.2.2.dev112}/tests/test_stateful_tool_env.py +0 -0
  94. {verifiers-0.2.2.dev96 → verifiers-0.2.2.dev112}/tests/test_think_parser.py +0 -0
  95. {verifiers-0.2.2.dev96 → verifiers-0.2.2.dev112}/tests/test_tool_env.py +0 -0
  96. {verifiers-0.2.2.dev96 → verifiers-0.2.2.dev112}/tests/test_tool_utils.py +0 -0
  97. {verifiers-0.2.2.dev96 → verifiers-0.2.2.dev112}/tests/test_trajectory_processing.py +0 -0
  98. {verifiers-0.2.2.dev96 → verifiers-0.2.2.dev112}/tests/test_tui_info_formatting.py +0 -0
  99. {verifiers-0.2.2.dev96 → verifiers-0.2.2.dev112}/tests/test_types.py +0 -0
  100. {verifiers-0.2.2.dev96 → verifiers-0.2.2.dev112}/tests/test_xml_parser.py +0 -0
  101. {verifiers-0.2.2.dev96 → verifiers-0.2.2.dev112}/tests/v1/fixtures/counter_tool_v1.py +0 -0
  102. {verifiers-0.2.2.dev96 → verifiers-0.2.2.dev112}/tests/v1/fixtures/duet_v1.py +0 -0
  103. {verifiers-0.2.2.dev96 → verifiers-0.2.2.dev112}/tests/v1/fixtures/echo_acp_resume_v1.py +0 -0
  104. {verifiers-0.2.2.dev96 → verifiers-0.2.2.dev112}/tests/v1/fixtures/echo_agentic_v1.py +0 -0
  105. {verifiers-0.2.2.dev96 → verifiers-0.2.2.dev112}/tests/v1/fixtures/echo_multi_v0.py +0 -0
  106. {verifiers-0.2.2.dev96 → verifiers-0.2.2.dev112}/tests/v1/fixtures/echo_user_sim_v1.py +0 -0
  107. {verifiers-0.2.2.dev96 → verifiers-0.2.2.dev112}/tests/v1/fixtures/echo_v0.py +0 -0
  108. {verifiers-0.2.2.dev96 → verifiers-0.2.2.dev112}/tests/v1/fixtures/echo_v1.py +0 -0
  109. {verifiers-0.2.2.dev96 → verifiers-0.2.2.dev112}/tests/v1/fixtures/pyproject.toml +0 -0
  110. {verifiers-0.2.2.dev96 → verifiers-0.2.2.dev112}/tests/v1/fixtures/tool_response_image_v1.py +0 -0
  111. {verifiers-0.2.2.dev96 → verifiers-0.2.2.dev112}/tests/v1/test_color_codeword_tasks.py +0 -0
  112. {verifiers-0.2.2.dev96 → verifiers-0.2.2.dev112}/tests/v1/test_configs.py +0 -0
  113. {verifiers-0.2.2.dev96 → verifiers-0.2.2.dev112}/tests/v1/test_e2e.py +0 -0
  114. {verifiers-0.2.2.dev96 → verifiers-0.2.2.dev112}/tests/v1/test_graph.py +0 -0
  115. {verifiers-0.2.2.dev96 → verifiers-0.2.2.dev112}/tests/v1/test_judges.py +0 -0
  116. {verifiers-0.2.2.dev96 → verifiers-0.2.2.dev112}/tests/v1/test_legacy.py +0 -0
  117. {verifiers-0.2.2.dev96 → verifiers-0.2.2.dev112}/tests/v1/test_scoring.py +0 -0
  118. {verifiers-0.2.2.dev96 → verifiers-0.2.2.dev112}/tests/v1/test_taskset.py +0 -0
  119. {verifiers-0.2.2.dev96 → verifiers-0.2.2.dev112}/tests/v1/test_trace.py +0 -0
  120. {verifiers-0.2.2.dev96 → verifiers-0.2.2.dev112}/verifiers/__init__.py +0 -0
  121. {verifiers-0.2.2.dev96 → verifiers-0.2.2.dev112}/verifiers/cli/__init__.py +0 -0
  122. {verifiers-0.2.2.dev96 → verifiers-0.2.2.dev112}/verifiers/cli/commands/__init__.py +0 -0
  123. {verifiers-0.2.2.dev96 → verifiers-0.2.2.dev112}/verifiers/cli/commands/build.py +0 -0
  124. {verifiers-0.2.2.dev96 → verifiers-0.2.2.dev112}/verifiers/cli/commands/eval.py +0 -0
  125. {verifiers-0.2.2.dev96 → verifiers-0.2.2.dev112}/verifiers/cli/commands/gepa.py +0 -0
  126. {verifiers-0.2.2.dev96 → verifiers-0.2.2.dev112}/verifiers/cli/commands/init.py +0 -0
  127. {verifiers-0.2.2.dev96 → verifiers-0.2.2.dev112}/verifiers/cli/commands/install.py +0 -0
  128. {verifiers-0.2.2.dev96 → verifiers-0.2.2.dev112}/verifiers/cli/commands/setup.py +0 -0
  129. {verifiers-0.2.2.dev96 → verifiers-0.2.2.dev112}/verifiers/cli/plugins/__init__.py +0 -0
  130. {verifiers-0.2.2.dev96 → verifiers-0.2.2.dev112}/verifiers/cli/plugins/prime.py +0 -0
  131. {verifiers-0.2.2.dev96 → verifiers-0.2.2.dev112}/verifiers/cli/tui.py +0 -0
  132. {verifiers-0.2.2.dev96 → verifiers-0.2.2.dev112}/verifiers/clients/__init__.py +0 -0
  133. {verifiers-0.2.2.dev96 → verifiers-0.2.2.dev112}/verifiers/clients/anthropic_messages_client.py +0 -0
  134. {verifiers-0.2.2.dev96 → verifiers-0.2.2.dev112}/verifiers/clients/client.py +0 -0
  135. {verifiers-0.2.2.dev96 → verifiers-0.2.2.dev112}/verifiers/clients/nemorl_chat_completions_client.py +0 -0
  136. {verifiers-0.2.2.dev96 → verifiers-0.2.2.dev112}/verifiers/clients/openai_chat_completions_client.py +0 -0
  137. {verifiers-0.2.2.dev96 → verifiers-0.2.2.dev112}/verifiers/clients/openai_chat_completions_token_client.py +0 -0
  138. {verifiers-0.2.2.dev96 → verifiers-0.2.2.dev112}/verifiers/clients/openai_completions_client.py +0 -0
  139. {verifiers-0.2.2.dev96 → verifiers-0.2.2.dev112}/verifiers/clients/openai_responses_client.py +0 -0
  140. {verifiers-0.2.2.dev96 → verifiers-0.2.2.dev112}/verifiers/clients/renderer_client.py +0 -0
  141. {verifiers-0.2.2.dev96 → verifiers-0.2.2.dev112}/verifiers/decorators.py +0 -0
  142. {verifiers-0.2.2.dev96 → verifiers-0.2.2.dev112}/verifiers/envs/__init__.py +0 -0
  143. {verifiers-0.2.2.dev96 → verifiers-0.2.2.dev112}/verifiers/envs/env_group.py +0 -0
  144. {verifiers-0.2.2.dev96 → verifiers-0.2.2.dev112}/verifiers/envs/environment.py +0 -0
  145. {verifiers-0.2.2.dev96 → verifiers-0.2.2.dev112}/verifiers/envs/experimental/README.md +0 -0
  146. {verifiers-0.2.2.dev96 → verifiers-0.2.2.dev112}/verifiers/envs/experimental/__init__.py +0 -0
  147. {verifiers-0.2.2.dev96 → verifiers-0.2.2.dev112}/verifiers/envs/experimental/cli_agent_env.py +0 -0
  148. {verifiers-0.2.2.dev96 → verifiers-0.2.2.dev112}/verifiers/envs/experimental/composable/README.md +0 -0
  149. {verifiers-0.2.2.dev96 → verifiers-0.2.2.dev112}/verifiers/envs/experimental/composable/__init__.py +0 -0
  150. {verifiers-0.2.2.dev96 → verifiers-0.2.2.dev112}/verifiers/envs/experimental/composable/_filter.py +0 -0
  151. {verifiers-0.2.2.dev96 → verifiers-0.2.2.dev112}/verifiers/envs/experimental/composable/composable_env.py +0 -0
  152. {verifiers-0.2.2.dev96 → verifiers-0.2.2.dev112}/verifiers/envs/experimental/composable/harness.py +0 -0
  153. {verifiers-0.2.2.dev96 → verifiers-0.2.2.dev112}/verifiers/envs/experimental/composable/harnesses/__init__.py +0 -0
  154. {verifiers-0.2.2.dev96 → verifiers-0.2.2.dev112}/verifiers/envs/experimental/composable/harnesses/mini_swe_agent.py +0 -0
  155. {verifiers-0.2.2.dev96 → verifiers-0.2.2.dev112}/verifiers/envs/experimental/composable/harnesses/opencode.py +0 -0
  156. {verifiers-0.2.2.dev96 → verifiers-0.2.2.dev112}/verifiers/envs/experimental/composable/harnesses/prompt.txt +0 -0
  157. {verifiers-0.2.2.dev96 → verifiers-0.2.2.dev112}/verifiers/envs/experimental/composable/harnesses/rlm.py +0 -0
  158. {verifiers-0.2.2.dev96 → verifiers-0.2.2.dev112}/verifiers/envs/experimental/composable/sandbox_debug_env.py +0 -0
  159. {verifiers-0.2.2.dev96 → verifiers-0.2.2.dev112}/verifiers/envs/experimental/composable/swe_debug_env.py +0 -0
  160. {verifiers-0.2.2.dev96 → verifiers-0.2.2.dev112}/verifiers/envs/experimental/composable/task.py +0 -0
  161. {verifiers-0.2.2.dev96 → verifiers-0.2.2.dev112}/verifiers/envs/experimental/composable/tasksets/__init__.py +0 -0
  162. {verifiers-0.2.2.dev96 → verifiers-0.2.2.dev112}/verifiers/envs/experimental/composable/tasksets/cp/__init__.py +0 -0
  163. {verifiers-0.2.2.dev96 → verifiers-0.2.2.dev112}/verifiers/envs/experimental/composable/tasksets/cp/cp_task.py +0 -0
  164. {verifiers-0.2.2.dev96 → verifiers-0.2.2.dev112}/verifiers/envs/experimental/composable/tasksets/cp/test_utils.py +0 -0
  165. {verifiers-0.2.2.dev96 → verifiers-0.2.2.dev112}/verifiers/envs/experimental/composable/tasksets/harbor/__init__.py +0 -0
  166. {verifiers-0.2.2.dev96 → verifiers-0.2.2.dev112}/verifiers/envs/experimental/composable/tasksets/harbor/cli_gym.py +0 -0
  167. {verifiers-0.2.2.dev96 → verifiers-0.2.2.dev112}/verifiers/envs/experimental/composable/tasksets/harbor/harbor.py +0 -0
  168. {verifiers-0.2.2.dev96 → verifiers-0.2.2.dev112}/verifiers/envs/experimental/composable/tasksets/harbor/terminal_lego.py +0 -0
  169. {verifiers-0.2.2.dev96 → verifiers-0.2.2.dev112}/verifiers/envs/experimental/composable/tasksets/math/__init__.py +0 -0
  170. {verifiers-0.2.2.dev96 → verifiers-0.2.2.dev112}/verifiers/envs/experimental/composable/tasksets/math/math_task.py +0 -0
  171. {verifiers-0.2.2.dev96 → verifiers-0.2.2.dev112}/verifiers/envs/experimental/composable/tasksets/swe/README.md +0 -0
  172. {verifiers-0.2.2.dev96 → verifiers-0.2.2.dev112}/verifiers/envs/experimental/composable/tasksets/swe/__init__.py +0 -0
  173. {verifiers-0.2.2.dev96 → verifiers-0.2.2.dev112}/verifiers/envs/experimental/composable/tasksets/swe/multi_swe/__init__.py +0 -0
  174. {verifiers-0.2.2.dev96 → verifiers-0.2.2.dev112}/verifiers/envs/experimental/composable/tasksets/swe/multi_swe/extract_fix_patch.sh +0 -0
  175. {verifiers-0.2.2.dev96 → verifiers-0.2.2.dev112}/verifiers/envs/experimental/composable/tasksets/swe/multi_swe/taskset.py +0 -0
  176. {verifiers-0.2.2.dev96 → verifiers-0.2.2.dev112}/verifiers/envs/experimental/composable/tasksets/swe/openswe/__init__.py +0 -0
  177. {verifiers-0.2.2.dev96 → verifiers-0.2.2.dev112}/verifiers/envs/experimental/composable/tasksets/swe/openswe/taskset.py +0 -0
  178. {verifiers-0.2.2.dev96 → verifiers-0.2.2.dev112}/verifiers/envs/experimental/composable/tasksets/swe/r2e_gym/__init__.py +0 -0
  179. {verifiers-0.2.2.dev96 → verifiers-0.2.2.dev112}/verifiers/envs/experimental/composable/tasksets/swe/r2e_gym/log_parser.py +0 -0
  180. {verifiers-0.2.2.dev96 → verifiers-0.2.2.dev112}/verifiers/envs/experimental/composable/tasksets/swe/r2e_gym/taskset.py +0 -0
  181. {verifiers-0.2.2.dev96 → verifiers-0.2.2.dev112}/verifiers/envs/experimental/composable/tasksets/swe/scale_swe/__init__.py +0 -0
  182. {verifiers-0.2.2.dev96 → verifiers-0.2.2.dev112}/verifiers/envs/experimental/composable/tasksets/swe/scale_swe/taskset.py +0 -0
  183. {verifiers-0.2.2.dev96 → verifiers-0.2.2.dev112}/verifiers/envs/experimental/composable/tasksets/swe/shared/__init__.py +0 -0
  184. {verifiers-0.2.2.dev96 → verifiers-0.2.2.dev112}/verifiers/envs/experimental/composable/tasksets/swe/shared/test_patch.py +0 -0
  185. {verifiers-0.2.2.dev96 → verifiers-0.2.2.dev112}/verifiers/envs/experimental/composable/tasksets/swe/swe_bench/__init__.py +0 -0
  186. {verifiers-0.2.2.dev96 → verifiers-0.2.2.dev112}/verifiers/envs/experimental/composable/tasksets/swe/swe_bench/taskset.py +0 -0
  187. {verifiers-0.2.2.dev96 → verifiers-0.2.2.dev112}/verifiers/envs/experimental/composable/tasksets/swe/swe_lego/__init__.py +0 -0
  188. {verifiers-0.2.2.dev96 → verifiers-0.2.2.dev112}/verifiers/envs/experimental/composable/tasksets/swe/swe_lego/taskset.py +0 -0
  189. {verifiers-0.2.2.dev96 → verifiers-0.2.2.dev112}/verifiers/envs/experimental/composable/tasksets/swe/swe_rebench_v2/__init__.py +0 -0
  190. {verifiers-0.2.2.dev96 → verifiers-0.2.2.dev112}/verifiers/envs/experimental/composable/tasksets/swe/swe_rebench_v2/log_parsers.py +0 -0
  191. {verifiers-0.2.2.dev96 → verifiers-0.2.2.dev112}/verifiers/envs/experimental/composable/tasksets/swe/swe_rebench_v2/taskset.py +0 -0
  192. {verifiers-0.2.2.dev96 → verifiers-0.2.2.dev112}/verifiers/envs/experimental/composable/tasksets/swe/swe_smith/__init__.py +0 -0
  193. {verifiers-0.2.2.dev96 → verifiers-0.2.2.dev112}/verifiers/envs/experimental/composable/tasksets/swe/swe_smith/taskset.py +0 -0
  194. {verifiers-0.2.2.dev96 → verifiers-0.2.2.dev112}/verifiers/envs/experimental/composable/tasksets/swe/swe_tasksets.py +0 -0
  195. {verifiers-0.2.2.dev96 → verifiers-0.2.2.dev112}/verifiers/envs/experimental/gym_env.py +0 -0
  196. {verifiers-0.2.2.dev96 → verifiers-0.2.2.dev112}/verifiers/envs/experimental/harbor_env/__init__.py +0 -0
  197. {verifiers-0.2.2.dev96 → verifiers-0.2.2.dev112}/verifiers/envs/experimental/harbor_env/env.py +0 -0
  198. {verifiers-0.2.2.dev96 → verifiers-0.2.2.dev112}/verifiers/envs/experimental/harbor_env/mcp.py +0 -0
  199. {verifiers-0.2.2.dev96 → verifiers-0.2.2.dev112}/verifiers/envs/experimental/mcp_env.py +0 -0
  200. {verifiers-0.2.2.dev96 → verifiers-0.2.2.dev112}/verifiers/envs/experimental/opencode_env.py +0 -0
  201. {verifiers-0.2.2.dev96 → verifiers-0.2.2.dev112}/verifiers/envs/experimental/opencode_qa_env.py +0 -0
  202. {verifiers-0.2.2.dev96 → verifiers-0.2.2.dev112}/verifiers/envs/experimental/opencode_rlm_env.py +0 -0
  203. {verifiers-0.2.2.dev96 → verifiers-0.2.2.dev112}/verifiers/envs/experimental/sandbox_mixin.py +0 -0
  204. {verifiers-0.2.2.dev96 → verifiers-0.2.2.dev112}/verifiers/envs/experimental/utils/__init__.py +0 -0
  205. {verifiers-0.2.2.dev96 → verifiers-0.2.2.dev112}/verifiers/envs/experimental/utils/file_locks.py +0 -0
  206. {verifiers-0.2.2.dev96 → verifiers-0.2.2.dev112}/verifiers/envs/experimental/utils/git_checkout_cache.py +0 -0
  207. {verifiers-0.2.2.dev96 → verifiers-0.2.2.dev112}/verifiers/envs/integrations/README.md +0 -0
  208. {verifiers-0.2.2.dev96 → verifiers-0.2.2.dev112}/verifiers/envs/integrations/__init__.py +0 -0
  209. {verifiers-0.2.2.dev96 → verifiers-0.2.2.dev112}/verifiers/envs/integrations/browser_env/README.md +0 -0
  210. {verifiers-0.2.2.dev96 → verifiers-0.2.2.dev112}/verifiers/envs/integrations/browser_env/__init__.py +0 -0
  211. {verifiers-0.2.2.dev96 → verifiers-0.2.2.dev112}/verifiers/envs/integrations/browser_env/browser_env.py +0 -0
  212. {verifiers-0.2.2.dev96 → verifiers-0.2.2.dev112}/verifiers/envs/integrations/browser_env/modes/__init__.py +0 -0
  213. {verifiers-0.2.2.dev96 → verifiers-0.2.2.dev112}/verifiers/envs/integrations/browser_env/modes/base.py +0 -0
  214. {verifiers-0.2.2.dev96 → verifiers-0.2.2.dev112}/verifiers/envs/integrations/browser_env/modes/cua_mode.py +0 -0
  215. {verifiers-0.2.2.dev96 → verifiers-0.2.2.dev112}/verifiers/envs/integrations/browser_env/modes/dom_mode.py +0 -0
  216. {verifiers-0.2.2.dev96 → verifiers-0.2.2.dev112}/verifiers/envs/integrations/openenv_env.py +0 -0
  217. {verifiers-0.2.2.dev96 → verifiers-0.2.2.dev112}/verifiers/envs/integrations/reasoninggym_env.py +0 -0
  218. {verifiers-0.2.2.dev96 → verifiers-0.2.2.dev112}/verifiers/envs/integrations/textarena_env.py +0 -0
  219. {verifiers-0.2.2.dev96 → verifiers-0.2.2.dev112}/verifiers/envs/multiturn_env.py +0 -0
  220. {verifiers-0.2.2.dev96 → verifiers-0.2.2.dev112}/verifiers/envs/python_env.py +0 -0
  221. {verifiers-0.2.2.dev96 → verifiers-0.2.2.dev112}/verifiers/envs/sandbox_env.py +0 -0
  222. {verifiers-0.2.2.dev96 → verifiers-0.2.2.dev112}/verifiers/envs/singleturn_env.py +0 -0
  223. {verifiers-0.2.2.dev96 → verifiers-0.2.2.dev112}/verifiers/envs/stateful_tool_env.py +0 -0
  224. {verifiers-0.2.2.dev96 → verifiers-0.2.2.dev112}/verifiers/envs/tool_env.py +0 -0
  225. {verifiers-0.2.2.dev96 → verifiers-0.2.2.dev112}/verifiers/errors.py +0 -0
  226. {verifiers-0.2.2.dev96 → verifiers-0.2.2.dev112}/verifiers/gepa/__init__.py +0 -0
  227. {verifiers-0.2.2.dev96 → verifiers-0.2.2.dev112}/verifiers/gepa/adapter.py +0 -0
  228. {verifiers-0.2.2.dev96 → verifiers-0.2.2.dev112}/verifiers/gepa/config.py +0 -0
  229. {verifiers-0.2.2.dev96 → verifiers-0.2.2.dev112}/verifiers/gepa/display.py +0 -0
  230. {verifiers-0.2.2.dev96 → verifiers-0.2.2.dev112}/verifiers/gepa/gepa_utils.py +0 -0
  231. {verifiers-0.2.2.dev96 → verifiers-0.2.2.dev112}/verifiers/parsers/__init__.py +0 -0
  232. {verifiers-0.2.2.dev96 → verifiers-0.2.2.dev112}/verifiers/parsers/maybe_think_parser.py +0 -0
  233. {verifiers-0.2.2.dev96 → verifiers-0.2.2.dev112}/verifiers/parsers/parser.py +0 -0
  234. {verifiers-0.2.2.dev96 → verifiers-0.2.2.dev112}/verifiers/parsers/think_parser.py +0 -0
  235. {verifiers-0.2.2.dev96 → verifiers-0.2.2.dev112}/verifiers/parsers/xml_parser.py +0 -0
  236. {verifiers-0.2.2.dev96 → verifiers-0.2.2.dev112}/verifiers/rubrics/__init__.py +0 -0
  237. {verifiers-0.2.2.dev96 → verifiers-0.2.2.dev112}/verifiers/rubrics/experimental/hybrid_math_rubric.py +0 -0
  238. {verifiers-0.2.2.dev96 → verifiers-0.2.2.dev112}/verifiers/rubrics/judge_rubric.py +0 -0
  239. {verifiers-0.2.2.dev96 → verifiers-0.2.2.dev112}/verifiers/rubrics/math_rubric.py +0 -0
  240. {verifiers-0.2.2.dev96 → verifiers-0.2.2.dev112}/verifiers/rubrics/rubric.py +0 -0
  241. {verifiers-0.2.2.dev96 → verifiers-0.2.2.dev112}/verifiers/rubrics/rubric_group.py +0 -0
  242. {verifiers-0.2.2.dev96 → verifiers-0.2.2.dev112}/verifiers/scripts/__init__.py +0 -0
  243. {verifiers-0.2.2.dev96 → verifiers-0.2.2.dev112}/verifiers/scripts/build.py +0 -0
  244. {verifiers-0.2.2.dev96 → verifiers-0.2.2.dev112}/verifiers/scripts/eval.py +0 -0
  245. {verifiers-0.2.2.dev96 → verifiers-0.2.2.dev112}/verifiers/scripts/gepa.py +0 -0
  246. {verifiers-0.2.2.dev96 → verifiers-0.2.2.dev112}/verifiers/scripts/init.py +0 -0
  247. {verifiers-0.2.2.dev96 → verifiers-0.2.2.dev112}/verifiers/scripts/install.py +0 -0
  248. {verifiers-0.2.2.dev96 → verifiers-0.2.2.dev112}/verifiers/scripts/setup.py +0 -0
  249. {verifiers-0.2.2.dev96 → verifiers-0.2.2.dev112}/verifiers/scripts/tui.py +0 -0
  250. {verifiers-0.2.2.dev96 → verifiers-0.2.2.dev112}/verifiers/serve/__init__.py +0 -0
  251. {verifiers-0.2.2.dev96 → verifiers-0.2.2.dev112}/verifiers/serve/client/env_client.py +0 -0
  252. {verifiers-0.2.2.dev96 → verifiers-0.2.2.dev112}/verifiers/serve/client/zmq_env_client.py +0 -0
  253. {verifiers-0.2.2.dev96 → verifiers-0.2.2.dev112}/verifiers/serve/server/__init__.py +0 -0
  254. {verifiers-0.2.2.dev96 → verifiers-0.2.2.dev112}/verifiers/serve/server/env_router.py +0 -0
  255. {verifiers-0.2.2.dev96 → verifiers-0.2.2.dev112}/verifiers/serve/server/env_server.py +0 -0
  256. {verifiers-0.2.2.dev96 → verifiers-0.2.2.dev112}/verifiers/serve/server/env_worker.py +0 -0
  257. {verifiers-0.2.2.dev96 → verifiers-0.2.2.dev112}/verifiers/serve/server/zmq_env_server.py +0 -0
  258. {verifiers-0.2.2.dev96 → verifiers-0.2.2.dev112}/verifiers/serve/types.py +0 -0
  259. {verifiers-0.2.2.dev96 → verifiers-0.2.2.dev112}/verifiers/types.py +0 -0
  260. {verifiers-0.2.2.dev96 → verifiers-0.2.2.dev112}/verifiers/utils/__init__.py +0 -0
  261. {verifiers-0.2.2.dev96 → verifiers-0.2.2.dev112}/verifiers/utils/async_utils.py +0 -0
  262. {verifiers-0.2.2.dev96 → verifiers-0.2.2.dev112}/verifiers/utils/client_utils.py +0 -0
  263. {verifiers-0.2.2.dev96 → verifiers-0.2.2.dev112}/verifiers/utils/config_utils.py +0 -0
  264. {verifiers-0.2.2.dev96 → verifiers-0.2.2.dev112}/verifiers/utils/data_utils.py +0 -0
  265. {verifiers-0.2.2.dev96 → verifiers-0.2.2.dev112}/verifiers/utils/display_utils.py +0 -0
  266. {verifiers-0.2.2.dev96 → verifiers-0.2.2.dev112}/verifiers/utils/env_config_utils.py +0 -0
  267. {verifiers-0.2.2.dev96 → verifiers-0.2.2.dev112}/verifiers/utils/env_utils.py +0 -0
  268. {verifiers-0.2.2.dev96 → verifiers-0.2.2.dev112}/verifiers/utils/error_utils.py +0 -0
  269. {verifiers-0.2.2.dev96 → verifiers-0.2.2.dev112}/verifiers/utils/eval_display.py +0 -0
  270. {verifiers-0.2.2.dev96 → verifiers-0.2.2.dev112}/verifiers/utils/eval_utils.py +0 -0
  271. {verifiers-0.2.2.dev96 → verifiers-0.2.2.dev112}/verifiers/utils/heartbeat.py +0 -0
  272. {verifiers-0.2.2.dev96 → verifiers-0.2.2.dev112}/verifiers/utils/import_utils.py +0 -0
  273. {verifiers-0.2.2.dev96 → verifiers-0.2.2.dev112}/verifiers/utils/install_utils.py +0 -0
  274. {verifiers-0.2.2.dev96 → verifiers-0.2.2.dev112}/verifiers/utils/interception_utils.py +0 -0
  275. {verifiers-0.2.2.dev96 → verifiers-0.2.2.dev112}/verifiers/utils/logging_utils.py +0 -0
  276. {verifiers-0.2.2.dev96 → verifiers-0.2.2.dev112}/verifiers/utils/message_utils.py +0 -0
  277. {verifiers-0.2.2.dev96 → verifiers-0.2.2.dev112}/verifiers/utils/metric_utils.py +0 -0
  278. {verifiers-0.2.2.dev96 → verifiers-0.2.2.dev112}/verifiers/utils/path_utils.py +0 -0
  279. {verifiers-0.2.2.dev96 → verifiers-0.2.2.dev112}/verifiers/utils/pricing_utils.py +0 -0
  280. {verifiers-0.2.2.dev96 → verifiers-0.2.2.dev112}/verifiers/utils/process_utils.py +0 -0
  281. {verifiers-0.2.2.dev96 → verifiers-0.2.2.dev112}/verifiers/utils/response_utils.py +0 -0
  282. {verifiers-0.2.2.dev96 → verifiers-0.2.2.dev112}/verifiers/utils/save_utils.py +0 -0
  283. {verifiers-0.2.2.dev96 → verifiers-0.2.2.dev112}/verifiers/utils/serve_utils.py +0 -0
  284. {verifiers-0.2.2.dev96 → verifiers-0.2.2.dev112}/verifiers/utils/thread_utils.py +0 -0
  285. {verifiers-0.2.2.dev96 → verifiers-0.2.2.dev112}/verifiers/utils/threaded_sandbox_client.py +0 -0
  286. {verifiers-0.2.2.dev96 → verifiers-0.2.2.dev112}/verifiers/utils/tool_utils.py +0 -0
  287. {verifiers-0.2.2.dev96 → verifiers-0.2.2.dev112}/verifiers/utils/usage_utils.py +0 -0
  288. {verifiers-0.2.2.dev96 → verifiers-0.2.2.dev112}/verifiers/utils/version_utils.py +0 -0
  289. {verifiers-0.2.2.dev96 → verifiers-0.2.2.dev112}/verifiers/v1/__init__.py +0 -0
  290. {verifiers-0.2.2.dev96 → verifiers-0.2.2.dev112}/verifiers/v1/acp/runner.py +0 -0
  291. {verifiers-0.2.2.dev96 → verifiers-0.2.2.dev112}/verifiers/v1/agent.py +0 -0
  292. {verifiers-0.2.2.dev96 → verifiers-0.2.2.dev112}/verifiers/v1/cli/__init__.py +0 -0
  293. {verifiers-0.2.2.dev96 → verifiers-0.2.2.dev112}/verifiers/v1/cli/dashboard/__init__.py +0 -0
  294. {verifiers-0.2.2.dev96 → verifiers-0.2.2.dev112}/verifiers/v1/cli/dashboard/base.py +0 -0
  295. {verifiers-0.2.2.dev96 → verifiers-0.2.2.dev112}/verifiers/v1/cli/dashboard/eval.py +0 -0
  296. {verifiers-0.2.2.dev96 → verifiers-0.2.2.dev112}/verifiers/v1/cli/dashboard/replay.py +0 -0
  297. {verifiers-0.2.2.dev96 → verifiers-0.2.2.dev112}/verifiers/v1/cli/dashboard/validate.py +0 -0
  298. {verifiers-0.2.2.dev96 → verifiers-0.2.2.dev112}/verifiers/v1/cli/debug.py +0 -0
  299. {verifiers-0.2.2.dev96 → verifiers-0.2.2.dev112}/verifiers/v1/cli/eval/__init__.py +0 -0
  300. {verifiers-0.2.2.dev96 → verifiers-0.2.2.dev112}/verifiers/v1/cli/eval/main.py +0 -0
  301. {verifiers-0.2.2.dev96 → verifiers-0.2.2.dev112}/verifiers/v1/cli/eval/resume.py +0 -0
  302. {verifiers-0.2.2.dev96 → verifiers-0.2.2.dev112}/verifiers/v1/cli/eval/runner.py +0 -0
  303. {verifiers-0.2.2.dev96 → verifiers-0.2.2.dev112}/verifiers/v1/cli/gepa.py +0 -0
  304. {verifiers-0.2.2.dev96 → verifiers-0.2.2.dev112}/verifiers/v1/cli/init.py +0 -0
  305. {verifiers-0.2.2.dev96 → verifiers-0.2.2.dev112}/verifiers/v1/cli/output.py +0 -0
  306. {verifiers-0.2.2.dev96 → verifiers-0.2.2.dev112}/verifiers/v1/cli/replay.py +0 -0
  307. {verifiers-0.2.2.dev96 → verifiers-0.2.2.dev112}/verifiers/v1/cli/resolve.py +0 -0
  308. {verifiers-0.2.2.dev96 → verifiers-0.2.2.dev112}/verifiers/v1/cli/resume.py +0 -0
  309. {verifiers-0.2.2.dev96 → verifiers-0.2.2.dev112}/verifiers/v1/cli/validate.py +0 -0
  310. {verifiers-0.2.2.dev96 → verifiers-0.2.2.dev112}/verifiers/v1/clients/__init__.py +0 -0
  311. {verifiers-0.2.2.dev96 → verifiers-0.2.2.dev112}/verifiers/v1/clients/base.py +0 -0
  312. {verifiers-0.2.2.dev96 → verifiers-0.2.2.dev112}/verifiers/v1/clients/client.py +0 -0
  313. {verifiers-0.2.2.dev96 → verifiers-0.2.2.dev112}/verifiers/v1/clients/eval.py +0 -0
  314. {verifiers-0.2.2.dev96 → verifiers-0.2.2.dev112}/verifiers/v1/configs/__init__.py +0 -0
  315. {verifiers-0.2.2.dev96 → verifiers-0.2.2.dev112}/verifiers/v1/configs/agent.py +0 -0
  316. {verifiers-0.2.2.dev96 → verifiers-0.2.2.dev112}/verifiers/v1/configs/cli/__init__.py +0 -0
  317. {verifiers-0.2.2.dev96 → verifiers-0.2.2.dev112}/verifiers/v1/configs/cli/debug.py +0 -0
  318. {verifiers-0.2.2.dev96 → verifiers-0.2.2.dev112}/verifiers/v1/configs/cli/env.py +0 -0
  319. {verifiers-0.2.2.dev96 → verifiers-0.2.2.dev112}/verifiers/v1/configs/cli/eval.py +0 -0
  320. {verifiers-0.2.2.dev96 → verifiers-0.2.2.dev112}/verifiers/v1/configs/cli/init.py +0 -0
  321. {verifiers-0.2.2.dev96 → verifiers-0.2.2.dev112}/verifiers/v1/configs/cli/replay.py +0 -0
  322. {verifiers-0.2.2.dev96 → verifiers-0.2.2.dev112}/verifiers/v1/configs/cli/validate.py +0 -0
  323. {verifiers-0.2.2.dev96 → verifiers-0.2.2.dev112}/verifiers/v1/configs/env.py +0 -0
  324. {verifiers-0.2.2.dev96 → verifiers-0.2.2.dev112}/verifiers/v1/configs/harness.py +0 -0
  325. {verifiers-0.2.2.dev96 → verifiers-0.2.2.dev112}/verifiers/v1/configs/judge.py +0 -0
  326. {verifiers-0.2.2.dev96 → verifiers-0.2.2.dev112}/verifiers/v1/configs/legacy.py +0 -0
  327. {verifiers-0.2.2.dev96 → verifiers-0.2.2.dev112}/verifiers/v1/configs/retries.py +0 -0
  328. {verifiers-0.2.2.dev96 → verifiers-0.2.2.dev112}/verifiers/v1/configs/serve.py +0 -0
  329. {verifiers-0.2.2.dev96 → verifiers-0.2.2.dev112}/verifiers/v1/configs/task.py +0 -0
  330. {verifiers-0.2.2.dev96 → verifiers-0.2.2.dev112}/verifiers/v1/configs/taskset.py +0 -0
  331. {verifiers-0.2.2.dev96 → verifiers-0.2.2.dev112}/verifiers/v1/dialects/__init__.py +0 -0
  332. {verifiers-0.2.2.dev96 → verifiers-0.2.2.dev112}/verifiers/v1/dialects/anthropic.py +0 -0
  333. {verifiers-0.2.2.dev96 → verifiers-0.2.2.dev112}/verifiers/v1/dialects/base.py +0 -0
  334. {verifiers-0.2.2.dev96 → verifiers-0.2.2.dev112}/verifiers/v1/dialects/responses.py +0 -0
  335. {verifiers-0.2.2.dev96 → verifiers-0.2.2.dev112}/verifiers/v1/env.py +0 -0
  336. {verifiers-0.2.2.dev96 → verifiers-0.2.2.dev112}/verifiers/v1/envs/__init__.py +0 -0
  337. {verifiers-0.2.2.dev96 → verifiers-0.2.2.dev112}/verifiers/v1/envs/agentic_judge/__init__.py +0 -0
  338. {verifiers-0.2.2.dev96 → verifiers-0.2.2.dev112}/verifiers/v1/envs/best_of_n/__init__.py +0 -0
  339. {verifiers-0.2.2.dev96 → verifiers-0.2.2.dev112}/verifiers/v1/envs/best_of_n/env.py +0 -0
  340. {verifiers-0.2.2.dev96 → verifiers-0.2.2.dev112}/verifiers/v1/envs/shared_agentic_judge/__init__.py +0 -0
  341. {verifiers-0.2.2.dev96 → verifiers-0.2.2.dev112}/verifiers/v1/envs/single_agent/__init__.py +0 -0
  342. {verifiers-0.2.2.dev96 → verifiers-0.2.2.dev112}/verifiers/v1/envs/single_agent/env.py +0 -0
  343. {verifiers-0.2.2.dev96 → verifiers-0.2.2.dev112}/verifiers/v1/envs/user_sim/__init__.py +0 -0
  344. {verifiers-0.2.2.dev96 → verifiers-0.2.2.dev112}/verifiers/v1/episode.py +0 -0
  345. {verifiers-0.2.2.dev96 → verifiers-0.2.2.dev112}/verifiers/v1/errors.py +0 -0
  346. {verifiers-0.2.2.dev96 → verifiers-0.2.2.dev112}/verifiers/v1/gepa/__init__.py +0 -0
  347. {verifiers-0.2.2.dev96 → verifiers-0.2.2.dev112}/verifiers/v1/gepa/adapter.py +0 -0
  348. {verifiers-0.2.2.dev96 → verifiers-0.2.2.dev112}/verifiers/v1/gepa/config.py +0 -0
  349. {verifiers-0.2.2.dev96 → verifiers-0.2.2.dev112}/verifiers/v1/gepa/dataset.py +0 -0
  350. {verifiers-0.2.2.dev96 → verifiers-0.2.2.dev112}/verifiers/v1/gepa/reflection.py +0 -0
  351. {verifiers-0.2.2.dev96 → verifiers-0.2.2.dev112}/verifiers/v1/graph.py +0 -0
  352. {verifiers-0.2.2.dev96 → verifiers-0.2.2.dev112}/verifiers/v1/harness.py +0 -0
  353. {verifiers-0.2.2.dev96 → verifiers-0.2.2.dev112}/verifiers/v1/harnesses/__init__.py +0 -0
  354. {verifiers-0.2.2.dev96 → verifiers-0.2.2.dev112}/verifiers/v1/harnesses/bash/__init__.py +0 -0
  355. {verifiers-0.2.2.dev96 → verifiers-0.2.2.dev112}/verifiers/v1/harnesses/bash/harness.py +0 -0
  356. {verifiers-0.2.2.dev96 → verifiers-0.2.2.dev112}/verifiers/v1/harnesses/bash/program.py +0 -0
  357. {verifiers-0.2.2.dev96 → verifiers-0.2.2.dev112}/verifiers/v1/harnesses/browser_use/__init__.py +0 -0
  358. {verifiers-0.2.2.dev96 → verifiers-0.2.2.dev112}/verifiers/v1/harnesses/browser_use/harness.py +0 -0
  359. {verifiers-0.2.2.dev96 → verifiers-0.2.2.dev112}/verifiers/v1/harnesses/browser_use/program.py +0 -0
  360. {verifiers-0.2.2.dev96 → verifiers-0.2.2.dev112}/verifiers/v1/harnesses/claude_code/__init__.py +0 -0
  361. {verifiers-0.2.2.dev96 → verifiers-0.2.2.dev112}/verifiers/v1/harnesses/codex/__init__.py +0 -0
  362. {verifiers-0.2.2.dev96 → verifiers-0.2.2.dev112}/verifiers/v1/harnesses/hermes_agent/__init__.py +0 -0
  363. {verifiers-0.2.2.dev96 → verifiers-0.2.2.dev112}/verifiers/v1/harnesses/hermes_agent/harness.py +0 -0
  364. {verifiers-0.2.2.dev96 → verifiers-0.2.2.dev112}/verifiers/v1/harnesses/hermes_agent/program.py +0 -0
  365. {verifiers-0.2.2.dev96 → verifiers-0.2.2.dev112}/verifiers/v1/harnesses/kimi_code/__init__.py +0 -0
  366. {verifiers-0.2.2.dev96 → verifiers-0.2.2.dev112}/verifiers/v1/harnesses/mini_swe_agent/__init__.py +0 -0
  367. {verifiers-0.2.2.dev96 → verifiers-0.2.2.dev112}/verifiers/v1/harnesses/mini_swe_agent/program.py +0 -0
  368. {verifiers-0.2.2.dev96 → verifiers-0.2.2.dev112}/verifiers/v1/harnesses/node.py +0 -0
  369. {verifiers-0.2.2.dev96 → verifiers-0.2.2.dev112}/verifiers/v1/harnesses/null/__init__.py +0 -0
  370. {verifiers-0.2.2.dev96 → verifiers-0.2.2.dev112}/verifiers/v1/harnesses/null/harness.py +0 -0
  371. {verifiers-0.2.2.dev96 → verifiers-0.2.2.dev112}/verifiers/v1/harnesses/null/program.py +0 -0
  372. {verifiers-0.2.2.dev96 → verifiers-0.2.2.dev112}/verifiers/v1/harnesses/openclaw/__init__.py +0 -0
  373. {verifiers-0.2.2.dev96 → verifiers-0.2.2.dev112}/verifiers/v1/harnesses/pi/__init__.py +0 -0
  374. {verifiers-0.2.2.dev96 → verifiers-0.2.2.dev112}/verifiers/v1/harnesses/pool/__init__.py +0 -0
  375. {verifiers-0.2.2.dev96 → verifiers-0.2.2.dev112}/verifiers/v1/harnesses/rlm/__init__.py +0 -0
  376. {verifiers-0.2.2.dev96 → verifiers-0.2.2.dev112}/verifiers/v1/harnesses/terminus_2/__init__.py +0 -0
  377. {verifiers-0.2.2.dev96 → verifiers-0.2.2.dev112}/verifiers/v1/harnesses/terminus_2/program.py +0 -0
  378. {verifiers-0.2.2.dev96 → verifiers-0.2.2.dev112}/verifiers/v1/interception/__init__.py +0 -0
  379. {verifiers-0.2.2.dev96 → verifiers-0.2.2.dev112}/verifiers/v1/interception/base.py +0 -0
  380. {verifiers-0.2.2.dev96 → verifiers-0.2.2.dev112}/verifiers/v1/interception/pool.py +0 -0
  381. {verifiers-0.2.2.dev96 → verifiers-0.2.2.dev112}/verifiers/v1/interception/tunnel/__init__.py +0 -0
  382. {verifiers-0.2.2.dev96 → verifiers-0.2.2.dev112}/verifiers/v1/interception/tunnel/base.py +0 -0
  383. {verifiers-0.2.2.dev96 → verifiers-0.2.2.dev112}/verifiers/v1/interception/tunnel/custom.py +0 -0
  384. {verifiers-0.2.2.dev96 → verifiers-0.2.2.dev112}/verifiers/v1/interception/tunnel/prime.py +0 -0
  385. {verifiers-0.2.2.dev96 → verifiers-0.2.2.dev112}/verifiers/v1/judge.py +0 -0
  386. {verifiers-0.2.2.dev96 → verifiers-0.2.2.dev112}/verifiers/v1/judges/__init__.py +0 -0
  387. {verifiers-0.2.2.dev96 → verifiers-0.2.2.dev112}/verifiers/v1/judges/reference.py +0 -0
  388. {verifiers-0.2.2.dev96 → verifiers-0.2.2.dev112}/verifiers/v1/judges/reference.txt +0 -0
  389. {verifiers-0.2.2.dev96 → verifiers-0.2.2.dev112}/verifiers/v1/judges/rubric.py +0 -0
  390. {verifiers-0.2.2.dev96 → verifiers-0.2.2.dev112}/verifiers/v1/judges/rubric.txt +0 -0
  391. {verifiers-0.2.2.dev96 → verifiers-0.2.2.dev112}/verifiers/v1/legacy.py +0 -0
  392. {verifiers-0.2.2.dev96 → verifiers-0.2.2.dev112}/verifiers/v1/mcp/__init__.py +0 -0
  393. {verifiers-0.2.2.dev96 → verifiers-0.2.2.dev112}/verifiers/v1/runtimes/__init__.py +0 -0
  394. {verifiers-0.2.2.dev96 → verifiers-0.2.2.dev112}/verifiers/v1/runtimes/docker/__init__.py +0 -0
  395. {verifiers-0.2.2.dev96 → verifiers-0.2.2.dev112}/verifiers/v1/runtimes/docker/egress.py +0 -0
  396. {verifiers-0.2.2.dev96 → verifiers-0.2.2.dev112}/verifiers/v1/runtimes/modal.py +0 -0
  397. {verifiers-0.2.2.dev96 → verifiers-0.2.2.dev112}/verifiers/v1/runtimes/prime.py +0 -0
  398. {verifiers-0.2.2.dev96 → verifiers-0.2.2.dev112}/verifiers/v1/runtimes/subprocess.py +0 -0
  399. {verifiers-0.2.2.dev96 → verifiers-0.2.2.dev112}/verifiers/v1/serve/__init__.py +0 -0
  400. {verifiers-0.2.2.dev96 → verifiers-0.2.2.dev112}/verifiers/v1/serve/client.py +0 -0
  401. {verifiers-0.2.2.dev96 → verifiers-0.2.2.dev112}/verifiers/v1/serve/pool.py +0 -0
  402. {verifiers-0.2.2.dev96 → verifiers-0.2.2.dev112}/verifiers/v1/serve/server.py +0 -0
  403. {verifiers-0.2.2.dev96 → verifiers-0.2.2.dev112}/verifiers/v1/serve/types.py +0 -0
  404. {verifiers-0.2.2.dev96 → verifiers-0.2.2.dev112}/verifiers/v1/state.py +0 -0
  405. {verifiers-0.2.2.dev96 → verifiers-0.2.2.dev112}/verifiers/v1/task.py +0 -0
  406. {verifiers-0.2.2.dev96 → verifiers-0.2.2.dev112}/verifiers/v1/taskset.py +0 -0
  407. {verifiers-0.2.2.dev96 → verifiers-0.2.2.dev112}/verifiers/v1/tasksets/harbor/__init__.py +0 -0
  408. {verifiers-0.2.2.dev96 → verifiers-0.2.2.dev112}/verifiers/v1/tasksets/harbor/env.py +0 -0
  409. {verifiers-0.2.2.dev96 → verifiers-0.2.2.dev112}/verifiers/v1/tasksets/harbor/taskset.py +0 -0
  410. {verifiers-0.2.2.dev96 → verifiers-0.2.2.dev112}/verifiers/v1/tasksets/lean/__init__.py +0 -0
  411. {verifiers-0.2.2.dev96 → verifiers-0.2.2.dev112}/verifiers/v1/tasksets/lean/scoring.py +0 -0
  412. {verifiers-0.2.2.dev96 → verifiers-0.2.2.dev112}/verifiers/v1/tasksets/lean/taskset.py +0 -0
  413. {verifiers-0.2.2.dev96 → verifiers-0.2.2.dev112}/verifiers/v1/tasksets/openenv/__init__.py +0 -0
  414. {verifiers-0.2.2.dev96 → verifiers-0.2.2.dev112}/verifiers/v1/tasksets/openenv/taskset.py +0 -0
  415. {verifiers-0.2.2.dev96 → verifiers-0.2.2.dev112}/verifiers/v1/tasksets/textarena/__init__.py +0 -0
  416. {verifiers-0.2.2.dev96 → verifiers-0.2.2.dev112}/verifiers/v1/tasksets/textarena/taskset.py +0 -0
  417. {verifiers-0.2.2.dev96 → verifiers-0.2.2.dev112}/verifiers/v1/trace.py +0 -0
  418. {verifiers-0.2.2.dev96 → verifiers-0.2.2.dev112}/verifiers/v1/types.py +0 -0
  419. {verifiers-0.2.2.dev96 → verifiers-0.2.2.dev112}/verifiers/v1/utils/__init__.py +0 -0
  420. {verifiers-0.2.2.dev96 → verifiers-0.2.2.dev112}/verifiers/v1/utils/aio.py +0 -0
  421. {verifiers-0.2.2.dev96 → verifiers-0.2.2.dev112}/verifiers/v1/utils/artifacts.py +0 -0
  422. {verifiers-0.2.2.dev96 → verifiers-0.2.2.dev112}/verifiers/v1/utils/compile.py +0 -0
  423. {verifiers-0.2.2.dev96 → verifiers-0.2.2.dev112}/verifiers/v1/utils/decorators.py +0 -0
  424. {verifiers-0.2.2.dev96 → verifiers-0.2.2.dev112}/verifiers/v1/utils/format.py +0 -0
  425. {verifiers-0.2.2.dev96 → verifiers-0.2.2.dev112}/verifiers/v1/utils/generic.py +0 -0
  426. {verifiers-0.2.2.dev96 → verifiers-0.2.2.dev112}/verifiers/v1/utils/git.py +0 -0
  427. {verifiers-0.2.2.dev96 → verifiers-0.2.2.dev112}/verifiers/v1/utils/image.py +0 -0
  428. {verifiers-0.2.2.dev96 → verifiers-0.2.2.dev112}/verifiers/v1/utils/install.py +0 -0
  429. {verifiers-0.2.2.dev96 → verifiers-0.2.2.dev112}/verifiers/v1/utils/interrupt.py +0 -0
  430. {verifiers-0.2.2.dev96 → verifiers-0.2.2.dev112}/verifiers/v1/utils/loaders.py +0 -0
  431. {verifiers-0.2.2.dev96 → verifiers-0.2.2.dev112}/verifiers/v1/utils/logging.py +0 -0
  432. {verifiers-0.2.2.dev96 → verifiers-0.2.2.dev112}/verifiers/v1/utils/memory.py +0 -0
  433. {verifiers-0.2.2.dev96 → verifiers-0.2.2.dev112}/verifiers/v1/utils/platform.py +0 -0
  434. {verifiers-0.2.2.dev96 → verifiers-0.2.2.dev112}/verifiers/v1/utils/retries.py +0 -0
  435. {verifiers-0.2.2.dev96 → verifiers-0.2.2.dev112}/verifiers/v1/utils/score.py +0 -0
  436. {verifiers-0.2.2.dev96 → verifiers-0.2.2.dev112}/verifiers/v1/utils/version.py +0 -0
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: verifiers
3
- Version: 0.2.2.dev96
3
+ Version: 0.2.2.dev112
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
@@ -39,7 +39,7 @@ Requires-Dist: prime-sandboxes>=0.2.35
39
39
  Requires-Dist: prime-tunnel>=0.1.8
40
40
  Requires-Dist: pydantic>=2.12.3
41
41
  Requires-Dist: pyzmq>=27.1.0
42
- Requires-Dist: renderers>=0.1.9.dev9
42
+ Requires-Dist: renderers>=0.1.9
43
43
  Requires-Dist: requests
44
44
  Requires-Dist: rich>=11.0.0
45
45
  Requires-Dist: setproctitle>=1.3.0
@@ -54,6 +54,8 @@ Provides-Extra: harbor
54
54
  Requires-Dist: harbor==0.20.0; (python_version >= '3.12') and extra == 'harbor'
55
55
  Provides-Extra: modal
56
56
  Requires-Dist: modal>=1.4.0; extra == 'modal'
57
+ Provides-Extra: nemo-gym
58
+ Requires-Dist: nemo-gym==0.4.0; (python_version >= '3.12') and extra == 'nemo-gym'
57
59
  Provides-Extra: notebook
58
60
  Requires-Dist: nest-asyncio>=1.6.0; extra == 'notebook'
59
61
  Provides-Extra: openenv
@@ -51,7 +51,7 @@ dependencies = [
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.9.dev9",
54
+ "renderers>=0.1.9",
55
55
  "typing_extensions>=4.12.2",
56
56
  ]
57
57
 
@@ -107,12 +107,43 @@ notebook = [
107
107
  openenv = [
108
108
  "openenv>=0.4.1",
109
109
  ]
110
+ nemo-gym = [
111
+ # NeMo Gym currently publishes Python 3.12+ packages; keep core verifiers installable on 3.11.
112
+ "nemo-gym==0.4.0; python_version >= '3.12'",
113
+ ]
110
114
  [tool.uv]
111
115
  preview = true
112
116
  required-version = ">=0.11.1"
113
117
  exclude-newer = "7 days"
114
118
  default-groups = ["dev", "examples"]
115
119
 
120
+ # NeMo Gym declares its full platform stack; this integration only starts resource servers.
121
+ [[tool.uv.dependency-metadata]]
122
+ name = "nemo-gym"
123
+ version = "0.4.0"
124
+ requires-python = ">=3.12"
125
+ requires-dist = [
126
+ "aiohttp>=3.14.1",
127
+ "fastapi",
128
+ "gprof2dot",
129
+ "hydra-core",
130
+ "itsdangerous",
131
+ "mcp>=1.27,<2",
132
+ "omegaconf",
133
+ "openai>=2.9",
134
+ "orjson",
135
+ "pandas",
136
+ "pydantic",
137
+ "pydot",
138
+ "ray>=2.55.1",
139
+ "requests",
140
+ "rich",
141
+ "typing-extensions",
142
+ "uvicorn",
143
+ "wandb",
144
+ "yappi",
145
+ ]
146
+
116
147
  [[tool.uv.index]]
117
148
  name = "pypi"
118
149
  url = "https://pypi.org/simple"
@@ -164,7 +164,10 @@ def _eval_config(
164
164
  seat_cfg.setdefault("max_output_tokens", max_tokens)
165
165
  seat_cfg.setdefault("timeout", {"rollout": rollout_timeout, "scoring": 60})
166
166
  # Flake resilience: retries are per-agent now (flat RetryConfig).
167
- seat_cfg.setdefault("retries", {"max_retries": 2, "include": ["ProviderError"]})
167
+ seat_cfg.setdefault(
168
+ "retries",
169
+ {"max_retries": 2, "include": ["ProviderError", "HarnessError"]},
170
+ )
168
171
  return EvalConfig(
169
172
  env={
170
173
  "taskset": taskset_cfg,
@@ -11,6 +11,7 @@ so it would also serve taskset-scoped (`Taskset.toolsets`).
11
11
  """
12
12
 
13
13
  import verifiers.v1 as vf
14
+ from verifiers.v1.types import content_text
14
15
 
15
16
  PHRASE = "hello world"
16
17
  ECHO_TOKEN = "ok-7f3" # the tool stamps this; only a real tool call can surface it
@@ -36,11 +37,9 @@ class EchoToolTask(vf.Task[vf.TaskData, vf.State, EchoToolTaskConfig]):
36
37
 
37
38
  @vf.reward(weight=1.0)
38
39
  async def echoed(self, trace: vf.Trace) -> float:
39
- # The stamped token surfaces in an ASSISTANT message only if the model called
40
- # the MCP tool and relayed its result — wherever in the exchange that happened
41
- # (in a conversation the last turn may be a closing pleasantry).
42
- replies = ((m.content or "").lower() for m in trace.assistant_messages)
43
- return float(any(PHRASE in r and ECHO_TOKEN in r for r in replies))
40
+ # A stamped TOOL result proves the tool really ran with the phrase.
41
+ results = (content_text(m.content).lower() for m in trace.tool_messages)
42
+ return float(any(PHRASE in r and ECHO_TOKEN in r for r in results))
44
43
 
45
44
 
46
45
  class EchoToolConfig(vf.TasksetConfig):
@@ -17,10 +17,8 @@ EVAL_TIMEOUT = 600 # 10 minutes for a capped eval (-n 1 -r 1)
17
17
 
18
18
  ENVIRONMENTS = Path(__file__).parent.parent.parent / "environments"
19
19
 
20
- # v1 tasksets that can't run a plain-CI smoke eval — e.g. they need a docker/prime runtime or
21
- # clone a corpus CI can't read. Empty: the SWE/container and corpus tasksets live in
22
- # research-environments now.
23
- SKIP_EVAL: set[str] = set()
20
+ # V1 tasksets that aren't part of the default CI install.
21
+ SKIP_EVAL = {"nemo_gym_weather_v1"}
24
22
 
25
23
  # Per-run caps are seat fields; recipe envs name their own seats.
26
24
  SEATS: dict[str, tuple[str, ...]] = {
@@ -121,7 +121,9 @@ class ACP:
121
121
  "allow_empty_tool_reply": allow_empty_tool_reply,
122
122
  }
123
123
  program = await runtime.prepare_uv_script(
124
- ACP_SOURCE, {**env, "UV_FROZEN": "false"}
124
+ ACP_SOURCE,
125
+ {**env, "UV_FROZEN": "false"},
126
+ activate=False,
125
127
  )
126
128
  directory = f".vf-acp-{secrets.token_hex(8)}"
127
129
  created = await runtime.run(["mkdir", "-m", "700", directory], {})
@@ -198,7 +200,9 @@ class ACPHarnessSession(HarnessSession):
198
200
  async def _start(self) -> None:
199
201
  self._stderr_tail.clear()
200
202
  program = await self.runtime.prepare_uv_script(
201
- ACP_SOURCE, {**self.env, "UV_FROZEN": "false"}
203
+ ACP_SOURCE,
204
+ {**self.env, "UV_FROZEN": "false"},
205
+ activate=False,
202
206
  )
203
207
  process = await self.runtime.open_process([*program, "stream"], self.env)
204
208
  self._process = process
@@ -12,6 +12,7 @@ from typing import Any, ClassVar, TypeVar
12
12
  from openai import OpenAIError
13
13
  from renderers import OverlongPromptError as RendererOverlongPromptError
14
14
  from renderers import RenderedTokens, Renderer, RendererConfig
15
+ from renderers.base import ToolCallParseStatus
15
16
 
16
17
  from verifiers.v1.clients.base import build_async_openai
17
18
  from verifiers.v1.clients.client import SESSION_ID_HEADER, Client
@@ -115,6 +116,8 @@ def response_from_generate(
115
116
  )
116
117
  for i, tc in enumerate(result.get("tool_calls") or [])
117
118
  if getattr(tc, "name", None)
119
+ # TODO: we need a better way for renderers to expose this
120
+ and getattr(tc, "status", None) != ToolCallParseStatus.UNKNOWN_TOOL
118
121
  ] or None
119
122
  prompt_ids = result.get("prompt_ids") or []
120
123
  completion_ids = result.get("completion_ids") or []
@@ -296,8 +299,9 @@ class ElasticRendererPool:
296
299
  class TrainClient(Client):
297
300
  """Renders prompts to token ids and calls a vLLM `/inference/v1/generate` engine.
298
301
 
299
- One client per rollout: it owns its engine connection and takes a slot on the shared
300
- `ElasticRendererPool` for each turn."""
302
+ Owned by the interception server and shared by the rollouts it multiplexes: they reuse
303
+ its engine connection pool, and each turn takes a slot on the shared
304
+ `ElasticRendererPool`."""
301
305
 
302
306
  def __init__(self, config: TrainClientConfig) -> None:
303
307
  self.config = config
@@ -1,8 +1,9 @@
1
1
  """Client configs: describe an OpenAI-compatible endpoint.
2
2
 
3
3
  A `BaseClientConfig` is an OpenAI-compatible endpoint (base_url + API-key env var
4
- + extra headers); `clients.resolve_client` turns one into a live `Client`, and every
5
- rollout does so for itself. The default Prime endpoint, API key, and team fall back to
4
+ + extra headers); `clients.resolve_client` turns one into a live `Client` the
5
+ interception server builds one per distinct config and shares it across the rollouts
6
+ it multiplexes. The default Prime endpoint, API key, and team fall back to
6
7
  the active Prime CLI config, so direct `uv run eval` calls behave like `prime eval`.
7
8
  Both the eval entrypoint (its model client) and in-env LLM calls (e.g. a judge reward)
8
9
  build clients from these. `ClientConfig` is the CLI-selectable discriminated union
@@ -141,7 +141,11 @@ def _content_to_wire(content):
141
141
 
142
142
  def message_to_wire(message: Message) -> dict:
143
143
  if message.role == "assistant":
144
- wire: dict = {"role": "assistant", "content": message.content}
144
+ # Strict providers reject `content: null` without tool calls.
145
+ content = message.content
146
+ if content is None and not message.tool_calls:
147
+ content = ""
148
+ wire: dict = {"role": "assistant", "content": content}
145
149
  if message.provider_state:
146
150
  wire["reasoning_details"] = message.provider_state
147
151
  elif message.reasoning_content is not None:
@@ -309,8 +309,6 @@ class AgenticJudgeEnv(vf.Env[AgenticJudgeEnvConfig]):
309
309
 
310
310
  async def finalize(self, task: vf.Task, episode: vf.Episode) -> None:
311
311
  by_agent = {t.agent.name: t for t in episode.traces}
312
- if "judge" not in by_agent:
313
- return
314
312
  solution, verdict = by_agent["solver"], by_agent["judge"]
315
313
  verdicts = RubricVerdicts.model_validate(verdict.info.get("verdict")).verdicts
316
314
  criteria = self.config.task.criteria()
@@ -332,6 +330,10 @@ class SharedAgenticJudgeEnv(AgenticJudgeEnv):
332
330
  async def run(self, task: vf.Task, agents: vf.Agents) -> None:
333
331
  async with agents.solver.provision(task) as box:
334
332
  solution = await agents.solver.run(task, runtime=box)
333
+ if not solution.ok:
334
+ raise RuntimeError(
335
+ "the solver's rollout failed, so the judge never ran"
336
+ )
335
337
  judge_task = JudgeTask.from_trace(solution, self.config.task)
336
338
  await agents.judge.run(judge_task, runtime=box)
337
339
 
@@ -342,7 +344,7 @@ class IsolatedAgenticJudgeEnv(AgenticJudgeEnv):
342
344
  async def run(self, task: vf.Task, agents: vf.Agents) -> None:
343
345
  solution = await agents.solver.run(task)
344
346
  if not solution.ok:
345
- return
347
+ raise RuntimeError("the solver's rollout failed, so the judge never ran")
346
348
  await agents.judge.run(
347
349
  JudgeTask.from_trace(solution, self.config.task, share_runtime=False)
348
350
  )
@@ -21,13 +21,14 @@ from pydantic import Field
21
21
 
22
22
  import verifiers.v1 as vf
23
23
 
24
- PERSONA = """You are role-playing a USER talking to an AI assistant. This is your situation and goal:
24
+ PERSONA = """You are role-playing a USER talking to an AI assistant. This is your situation what you want the ASSISTANT to do for you:
25
25
 
26
26
  {scenario}
27
27
 
28
28
  Rules:
29
29
  - Open the conversation with your request, in your own words.
30
30
  - Stay in character: short, natural user messages; never act as the assistant.
31
+ - The assistant does the work, not you: never perform the task yourself — any tool call, answer, or output format it asks for must come from the assistant; ask for it instead.
31
32
  - Reveal details only when asked, as a real user would.
32
33
  - When the assistant has fully met your goal — or you are convinced it cannot — reply with exactly {done} and nothing else."""
33
34
 
@@ -73,7 +73,7 @@ def run_gepa(env: Env, config: GEPAConfig) -> GEPAResult:
73
73
  await append_episode(run_dir, episode, write_lock)
74
74
 
75
75
  try:
76
- # The endpoint stays config: each rollout builds and closes its own client.
76
+ # The endpoint stays config: the interception server builds the live client.
77
77
  ctx = ModelContext(
78
78
  client=config.client, model=config.model, sampling=config.sampling
79
79
  )
@@ -2,6 +2,8 @@
2
2
 
3
3
  import shlex
4
4
 
5
+ from pydantic import Field
6
+
5
7
  from verifiers.v1.acp import ACP
6
8
  from verifiers.v1.clients import ModelContext
7
9
  from verifiers.v1.configs.harness import HarnessConfig
@@ -11,31 +13,30 @@ from verifiers.v1.runtimes import ProgramResult, Runtime
11
13
  from verifiers.v1.task import TaskData
12
14
  from verifiers.v1.trace import Trace
13
15
 
14
- CLAUDE_ACP_DIR = "/var/tmp/vf-claude-agent-acp"
16
+ CLAUDE_ACP_DIR = "/var/tmp/vf-claude-agent-acp-{version}-{acp_version}"
15
17
  PACKAGES_DIR = f"{CLAUDE_ACP_DIR}/packages"
16
- ACP_VERSION = "0.63.0"
18
+ ACP_VERSION = "0.65.0"
19
+ CLAUDE_BIN = f"{PACKAGES_DIR}/node_modules/.bin/claude"
17
20
  ACP_BIN = f"{PACKAGES_DIR}/node_modules/.bin/claude-agent-acp"
18
- ACP_COMMAND = [f"{NODE_BIN_DIR}/node", ACP_BIN]
19
21
  CLAUDE_CONFIG_ROOT = ".vf-claude"
20
22
  SKILLS_DIR = ".claude/skills"
21
23
  ACP_INSTALL = r"""
22
24
  set -e
23
25
  export PATH="/var/tmp/vf-node/bin:$PATH"
24
- if [ "$(cat /var/tmp/vf-claude-agent-acp/.version 2>/dev/null)" = "$VF_CLAUDE_ACP_VERSION" ] \
25
- && [ -x /var/tmp/vf-claude-agent-acp/packages/node_modules/.bin/claude-agent-acp ]; then
26
- exit 0
27
- fi
28
- npm install --prefix /var/tmp/vf-claude-agent-acp/packages --ignore-scripts --no-audit --no-fund \
26
+ rm -f {ready}
27
+ npm install --prefix {packages} --no-audit --no-fund \
29
28
  --omit=dev \
29
+ "@anthropic-ai/claude-code@$VF_CLAUDE_CODE_VERSION" \
30
30
  "@agentclientprotocol/claude-agent-acp@$VF_CLAUDE_ACP_VERSION" >/dev/null
31
- printf %s "$VF_CLAUDE_ACP_VERSION" > /var/tmp/vf-claude-agent-acp/.version
31
+ touch {ready}
32
32
  """
33
33
 
34
34
  CLAUDE_ACP = ACP()
35
35
 
36
36
 
37
37
  class ClaudeCodeHarnessConfig(HarnessConfig):
38
- pass
38
+ version: str = Field(default="2.1.223", pattern=r"^[A-Za-z0-9._+-]+$")
39
+ """Claude Code release to install, pinned for reproducibility."""
39
40
 
40
41
 
41
42
  class ClaudeCodeHarness(Harness[ClaudeCodeHarnessConfig]):
@@ -47,15 +48,26 @@ class ClaudeCodeHarness(Harness[ClaudeCodeHarnessConfig]):
47
48
  async def setup(self, runtime: Runtime) -> None:
48
49
  await self.install_skills(runtime, SKILLS_DIR)
49
50
  await ensure_node(runtime)
51
+ versions = {"version": self.config.version, "acp_version": ACP_VERSION}
52
+ directory = CLAUDE_ACP_DIR.format(**versions)
53
+ packages = PACKAGES_DIR.format(**versions)
54
+ claude_bin = CLAUDE_BIN.format(**versions)
55
+ acp_bin = ACP_BIN.format(**versions)
56
+ ready = f"{directory}/.ready"
57
+ script = ACP_INSTALL.replace("{packages}", packages).replace("{ready}", ready)
58
+ ensure = shlex.quote(
59
+ f"[ -f {ready} ] && [ -x {claude_bin} ] && [ -x {acp_bin} ] || ({script})"
60
+ )
50
61
  acp_guarded = (
51
- f"mkdir -p {CLAUDE_ACP_DIR} && "
52
- f'"$(command -v flock || command -v lockf)" {CLAUDE_ACP_DIR}/install.lock '
53
- f"sh -c {shlex.quote(ACP_INSTALL)}"
62
+ f"mkdir -p {directory} && "
63
+ f'"$(command -v flock || command -v lockf)" {directory}/install.lock '
64
+ f"sh -c {ensure}"
54
65
  )
55
66
  acp_result = await runtime.run(
56
67
  ["sh", "-c", acp_guarded],
57
68
  {
58
69
  **self.config.resolved_env,
70
+ "VF_CLAUDE_CODE_VERSION": self.config.version,
59
71
  "VF_CLAUDE_ACP_VERSION": ACP_VERSION,
60
72
  },
61
73
  )
@@ -80,6 +92,7 @@ class ClaudeCodeHarness(Harness[ClaudeCodeHarnessConfig]):
80
92
  )
81
93
  system_prompt, prompt = self.resolve_prompt(data)
82
94
  config_dir = self.config_dir(trace)
95
+ versions = {"version": self.config.version, "acp_version": ACP_VERSION}
83
96
  options: dict[str, object] = {
84
97
  "strictMcpConfig": True,
85
98
  "disallowedTools": self.config.disabled_tools or [],
@@ -92,6 +105,7 @@ class ClaudeCodeHarness(Harness[ClaudeCodeHarnessConfig]):
92
105
  "ANTHROPIC_BASE_URL": endpoint.removesuffix("/v1"),
93
106
  "ANTHROPIC_API_KEY": secret,
94
107
  "ANTHROPIC_MODEL": ctx.model,
108
+ "CLAUDE_CODE_EXECUTABLE": CLAUDE_BIN.format(**versions),
95
109
  "CLAUDE_CONFIG_DIR": config_dir,
96
110
  "CLAUDE_CODE_DISABLE_NONESSENTIAL_TRAFFIC": "1",
97
111
  "DISABLE_AUTOUPDATER": "1",
@@ -107,7 +121,7 @@ class ClaudeCodeHarness(Harness[ClaudeCodeHarnessConfig]):
107
121
  mcp_urls,
108
122
  data,
109
123
  env=env,
110
- command=ACP_COMMAND,
124
+ command=[f"{NODE_BIN_DIR}/node", ACP_BIN.format(**versions)],
111
125
  prompt=prompt or "",
112
126
  session_meta=session_meta,
113
127
  )
@@ -124,6 +138,7 @@ class ClaudeCodeHarness(Harness[ClaudeCodeHarnessConfig]):
124
138
  ) -> ProgramResult:
125
139
  system_prompt, prompt = self.resolve_prompt(data)
126
140
  config_dir = self.config_dir(trace)
141
+ versions = {"version": self.config.version, "acp_version": ACP_VERSION}
127
142
 
128
143
  options: dict[str, object] = {
129
144
  "strictMcpConfig": True,
@@ -138,6 +153,7 @@ class ClaudeCodeHarness(Harness[ClaudeCodeHarnessConfig]):
138
153
  "ANTHROPIC_BASE_URL": endpoint.removesuffix("/v1"),
139
154
  "ANTHROPIC_API_KEY": secret,
140
155
  "ANTHROPIC_MODEL": ctx.model,
156
+ "CLAUDE_CODE_EXECUTABLE": CLAUDE_BIN.format(**versions),
141
157
  "CLAUDE_CONFIG_DIR": config_dir,
142
158
  "CLAUDE_CODE_DISABLE_NONESSENTIAL_TRAFFIC": "1",
143
159
  "DISABLE_AUTOUPDATER": "1",
@@ -146,7 +162,7 @@ class ClaudeCodeHarness(Harness[ClaudeCodeHarnessConfig]):
146
162
  return await CLAUDE_ACP.run(
147
163
  runtime,
148
164
  env,
149
- ACP_COMMAND,
165
+ [f"{NODE_BIN_DIR}/node", ACP_BIN.format(**versions)],
150
166
  prompt or "",
151
167
  mcp_urls=mcp_urls,
152
168
  session_path=f"{config_dir}/acp-session",
@@ -7,6 +7,8 @@ import re
7
7
  import shlex
8
8
  from collections import Counter
9
9
 
10
+ from pydantic import Field
11
+
10
12
  from verifiers.v1.acp import ACP
11
13
  from verifiers.v1.clients import ModelContext
12
14
  from verifiers.v1.configs.harness import HarnessConfig
@@ -21,33 +23,29 @@ logger = logging.getLogger(__name__)
21
23
  PROVIDER = "intercept"
22
24
  KEY_VAR = "CODEX_INTERCEPT_KEY"
23
25
 
24
- CODEX_DIR = "/var/tmp/vf-codex"
26
+ CODEX_DIR = "/var/tmp/vf-codex-{version}-{acp_version}"
25
27
  PACKAGES_DIR = f"{CODEX_DIR}/acp"
26
- CODEX_VERSION = "0.145.0"
27
- ACP_VERSION = "1.1.7"
28
+ ACP_VERSION = "1.1.10"
29
+ CODEX_BIN = f"{PACKAGES_DIR}/node_modules/.bin/codex"
28
30
  ACP_BIN = f"{PACKAGES_DIR}/node_modules/.bin/codex-acp"
29
- ACP_COMMAND = [f"{NODE_BIN_DIR}/node", ACP_BIN]
30
31
  SKILLS_DIR = ".agents/skills"
31
32
  INSTALL = r"""
32
33
  set -e
33
34
  export PATH="/var/tmp/vf-node/bin:$PATH"
34
- versions="$VF_CODEX_VERSION:$VF_CODEX_ACP_VERSION"
35
- if [ "$(cat /var/tmp/vf-codex/.versions 2>/dev/null)" = "$versions" ] \
36
- && [ -x /var/tmp/vf-codex/acp/node_modules/.bin/codex ] \
37
- && [ -x /var/tmp/vf-codex/acp/node_modules/.bin/codex-acp ]; then
38
- exit 0
39
- fi
40
- npm install --prefix /var/tmp/vf-codex/acp --ignore-scripts --no-audit --no-fund \
35
+ rm -f {ready}
36
+ npm install --prefix {packages} --ignore-scripts --no-audit --no-fund \
41
37
  --omit=dev \
42
38
  "@agentclientprotocol/codex-acp@$VF_CODEX_ACP_VERSION" \
43
39
  "@openai/codex@$VF_CODEX_VERSION" >/dev/null
44
- printf %s "$versions" > /var/tmp/vf-codex/.versions
40
+ touch {ready}
45
41
  """
46
42
 
47
43
  CODEX_ACP = ACP()
48
44
 
49
45
 
50
46
  class CodexHarnessConfig(HarnessConfig):
47
+ version: str = Field(default="0.146.1", pattern=r"^[A-Za-z0-9._+-]+$")
48
+ """Codex release to install, pinned for reproducibility."""
51
49
  multi_agent: bool = False
52
50
  """Enable Codex's native multi-agent v2 tools."""
53
51
 
@@ -63,19 +61,29 @@ class CodexHarness(Harness[CodexHarnessConfig]):
63
61
  await ensure_node(runtime)
64
62
  logger.info(
65
63
  "codex: ensuring Codex %s and codex-acp %s are installed",
66
- CODEX_VERSION,
64
+ self.config.version,
67
65
  ACP_VERSION,
68
66
  )
67
+ versions = {"version": self.config.version, "acp_version": ACP_VERSION}
68
+ directory = CODEX_DIR.format(**versions)
69
+ packages = PACKAGES_DIR.format(**versions)
70
+ codex_bin = CODEX_BIN.format(**versions)
71
+ acp_bin = ACP_BIN.format(**versions)
72
+ ready = f"{directory}/.ready"
73
+ script = INSTALL.replace("{packages}", packages).replace("{ready}", ready)
74
+ ensure = shlex.quote(
75
+ f"[ -f {ready} ] && [ -x {codex_bin} ] && [ -x {acp_bin} ] || ({script})"
76
+ )
69
77
  guarded = (
70
- f"mkdir -p {CODEX_DIR} && "
71
- f'"$(command -v flock || command -v lockf)" {CODEX_DIR}/install.lock '
72
- f"sh -c {shlex.quote(INSTALL)}"
78
+ f"mkdir -p {directory} && "
79
+ f'"$(command -v flock || command -v lockf)" {directory}/install.lock '
80
+ f"sh -c {ensure}"
73
81
  )
74
82
  install = await runtime.run(
75
83
  ["sh", "-c", guarded],
76
84
  {
77
85
  **self.config.resolved_env,
78
- "VF_CODEX_VERSION": CODEX_VERSION,
86
+ "VF_CODEX_VERSION": self.config.version,
79
87
  "VF_CODEX_ACP_VERSION": ACP_VERSION,
80
88
  },
81
89
  )
@@ -112,7 +120,10 @@ class CodexHarness(Harness[CodexHarnessConfig]):
112
120
  {},
113
121
  data,
114
122
  env=env,
115
- command=ACP_COMMAND,
123
+ command=[
124
+ f"{NODE_BIN_DIR}/node",
125
+ ACP_BIN.format(version=self.config.version, acp_version=ACP_VERSION),
126
+ ],
116
127
  prompt=prompt,
117
128
  system_prompt=system_prompt,
118
129
  )
@@ -139,7 +150,10 @@ class CodexHarness(Harness[CodexHarnessConfig]):
139
150
  return await CODEX_ACP.run(
140
151
  runtime,
141
152
  env,
142
- ACP_COMMAND,
153
+ [
154
+ f"{NODE_BIN_DIR}/node",
155
+ ACP_BIN.format(version=self.config.version, acp_version=ACP_VERSION),
156
+ ],
143
157
  prompt,
144
158
  system_prompt=system_prompt,
145
159
  session_path=f"{self.trace_home(trace)}/acp-session",
@@ -4,6 +4,8 @@ import json
4
4
  import logging
5
5
  import shlex
6
6
 
7
+ from pydantic import Field
8
+
7
9
  from verifiers.v1.acp import ACP
8
10
  from verifiers.v1.clients import ModelContext
9
11
  from verifiers.v1.configs.harness import HarnessConfig
@@ -43,7 +45,7 @@ KIMI_ACP = ACP()
43
45
 
44
46
 
45
47
  class KimiCodeHarnessConfig(HarnessConfig):
46
- version: str = "0.29.0"
48
+ version: str = Field(default="0.34.0", pattern=r"^[A-Za-z0-9._+-]+$")
47
49
  """Kimi Code release to install, pinned for reproducibility."""
48
50
 
49
51
 
@@ -1,5 +1,7 @@
1
1
  from pathlib import Path
2
2
 
3
+ from pydantic import Field
4
+
3
5
  from verifiers.v1.clients import ModelContext
4
6
  from verifiers.v1.configs.harness import HarnessConfig
5
7
  from verifiers.v1.harness import Harness
@@ -11,7 +13,7 @@ PROGRAM_SOURCE = (Path(__file__).resolve().parent / "program.py").read_text()
11
13
 
12
14
 
13
15
  class MiniSWEAgentHarnessConfig(HarnessConfig):
14
- version: str = "2.4.5"
16
+ version: str = Field(default="2.4.6", pattern=r"^[A-Za-z0-9._+-]+$")
15
17
  """mini-swe-agent release to install, pinned for reproducibility."""
16
18
 
17
19
 
@@ -117,10 +117,8 @@ class OpenClawHarness(Harness[OpenClawHarnessConfig]):
117
117
  data: TaskData,
118
118
  ) -> ProgramResult:
119
119
  system_prompt, prompt = self.resolve_prompt(data)
120
- reasoning = ctx.sampling.reasoning_effort not in (
121
- None,
122
- "none",
123
- ) or ctx.model.rsplit("/", 1)[-1].startswith(("gpt-5", "o1", "o3", "o4"))
120
+ # Opt-in via sampling: OpenClaw redacts persisted encrypted reasoning, so resumed sessions 400 replaying it.
121
+ reasoning = ctx.sampling.reasoning_effort not in (None, "none")
124
122
  directory = OPENCLAW_DIR.format(version=self.config.version)
125
123
  state_dir = f".vf-openclaw/{trace.id}"
126
124
  config_path = f"{state_dir}/openclaw.json"
@@ -4,6 +4,8 @@ import json
4
4
  import logging
5
5
  import shlex
6
6
 
7
+ from pydantic import Field
8
+
7
9
  from verifiers.v1.acp import ACP
8
10
  from verifiers.v1.clients import ModelContext
9
11
  from verifiers.v1.configs.harness import HarnessConfig
@@ -23,8 +25,8 @@ PI_DIR = "/var/tmp/vf-pi"
23
25
  PACKAGES_DIR = f"{PI_DIR}/mcp"
24
26
  PI_BIN = f"{PACKAGES_DIR}/node_modules/.bin/pi"
25
27
  SKILLS_DIR = ".agents/skills"
26
- MCP_VERSION = "2.11.0"
27
- ACP_VERSION = "0.0.31"
28
+ MCP_VERSION = "2.20.1"
29
+ ACP_VERSION = "0.0.33"
28
30
  MCP_ADAPTER = f"{PACKAGES_DIR}/node_modules/pi-mcp-adapter/index.ts"
29
31
  ACP_BIN = f"{PACKAGES_DIR}/node_modules/.bin/pi-acp"
30
32
  ACP_COMMAND = [
@@ -86,7 +88,7 @@ PI_ACP = ACP()
86
88
 
87
89
 
88
90
  class PiHarnessConfig(HarnessConfig):
89
- version: str = "0.80.10"
91
+ version: str = Field(default="0.84.0", pattern=r"^[A-Za-z0-9._+-]+$")
90
92
  """Pi release to install, pinned for reproducibility."""
91
93
 
92
94
 
@@ -223,4 +225,6 @@ class PiHarness(Harness[PiHarnessConfig]):
223
225
  ACP_COMMAND,
224
226
  prompt,
225
227
  session_path=f"{agent_dir}/acp-session",
228
+ # Pi can end after its final tool completes without a text message.
229
+ allow_empty_tool_reply=True,
226
230
  )
@@ -31,7 +31,7 @@ POOL_ACP = ACP()
31
31
 
32
32
 
33
33
  class PoolHarnessConfig(HarnessConfig):
34
- version: str = Field(default="1.0.11", pattern=r"^[A-Za-z0-9._+-]+$")
34
+ version: str = Field(default="1.0.15", pattern=r"^[A-Za-z0-9._+-]+$")
35
35
  """Pool release to install, pinned for reproducibility."""
36
36
 
37
37
 
@@ -30,7 +30,7 @@ RLM_ACP = ACP()
30
30
 
31
31
 
32
32
  class RLMHarnessConfig(HarnessConfig):
33
- version: str = "main"
33
+ version: str = Field(default="main", min_length=1)
34
34
  """Git ref (branch, tag, or commit) of rlm-harness to install."""
35
35
  max_depth: int = 0
36
36
  """Recursion depth rlm may spawn sub-harnesses to (RLM_MAX_DEPTH)."""
@@ -1,6 +1,8 @@
1
1
  import logging
2
2
  from pathlib import Path
3
3
 
4
+ from pydantic import Field
5
+
4
6
  from verifiers.v1.clients import ModelContext
5
7
  from verifiers.v1.configs.harness import HarnessConfig
6
8
  from verifiers.v1.harness import Harness
@@ -13,7 +15,7 @@ logger = logging.getLogger(__name__)
13
15
 
14
16
 
15
17
  class Terminus2HarnessConfig(HarnessConfig):
16
- version: str = "0.20.0"
18
+ version: str = Field(default="0.20.0", pattern=r"^[A-Za-z0-9._+-]+$")
17
19
  """Harbor release to install, pinned for reproducibility."""
18
20
 
19
21