verifiers 0.1.15.dev422__tar.gz → 0.1.15.dev424__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 (413) hide show
  1. {verifiers-0.1.15.dev422 → verifiers-0.1.15.dev424}/PKG-INFO +1 -1
  2. {verifiers-0.1.15.dev422 → verifiers-0.1.15.dev424}/pyproject.toml +1 -0
  3. {verifiers-0.1.15.dev422 → verifiers-0.1.15.dev424}/tests/test_sandbox_debug_env.py +2 -1
  4. {verifiers-0.1.15.dev422 → verifiers-0.1.15.dev424}/verifiers/envs/experimental/composable/sandbox_debug_env.py +10 -1
  5. {verifiers-0.1.15.dev422 → verifiers-0.1.15.dev424}/verifiers/envs/experimental/composable/swe_debug_env.py +5 -2
  6. {verifiers-0.1.15.dev422 → verifiers-0.1.15.dev424}/verifiers/v1/GUIDE.md +35 -6
  7. {verifiers-0.1.15.dev422 → verifiers-0.1.15.dev424}/verifiers/v1/README.md +2 -1
  8. {verifiers-0.1.15.dev422 → verifiers-0.1.15.dev424}/verifiers/v1/__init__.py +2 -2
  9. verifiers-0.1.15.dev424/verifiers/v1/cli/debug.py +327 -0
  10. {verifiers-0.1.15.dev422 → verifiers-0.1.15.dev424}/verifiers/v1/cli/eval/runner.py +2 -2
  11. {verifiers-0.1.15.dev422 → verifiers-0.1.15.dev424}/verifiers/v1/cli/init.py +1 -1
  12. {verifiers-0.1.15.dev422 → verifiers-0.1.15.dev424}/verifiers/v1/cli/output.py +7 -10
  13. {verifiers-0.1.15.dev422 → verifiers-0.1.15.dev424}/verifiers/v1/cli/validate.py +111 -19
  14. {verifiers-0.1.15.dev422 → verifiers-0.1.15.dev424}/verifiers/v1/clients/__init__.py +2 -2
  15. {verifiers-0.1.15.dev422 → verifiers-0.1.15.dev424}/verifiers/v1/clients/client.py +3 -3
  16. {verifiers-0.1.15.dev422 → verifiers-0.1.15.dev424}/verifiers/v1/configs/__init__.py +2 -1
  17. verifiers-0.1.15.dev424/verifiers/v1/configs/debug.py +72 -0
  18. {verifiers-0.1.15.dev422 → verifiers-0.1.15.dev424}/verifiers/v1/configs/validate.py +26 -4
  19. {verifiers-0.1.15.dev422 → verifiers-0.1.15.dev424}/verifiers/v1/env.py +2 -2
  20. {verifiers-0.1.15.dev422 → verifiers-0.1.15.dev424}/verifiers/v1/harness.py +3 -3
  21. {verifiers-0.1.15.dev422 → verifiers-0.1.15.dev424}/verifiers/v1/harnesses/codex/harness.py +2 -2
  22. {verifiers-0.1.15.dev422 → verifiers-0.1.15.dev424}/verifiers/v1/harnesses/default/harness.py +2 -2
  23. {verifiers-0.1.15.dev422 → verifiers-0.1.15.dev424}/verifiers/v1/harnesses/kimi_code/harness.py +2 -2
  24. {verifiers-0.1.15.dev422 → verifiers-0.1.15.dev424}/verifiers/v1/harnesses/mini_swe_agent/harness.py +2 -2
  25. {verifiers-0.1.15.dev422 → verifiers-0.1.15.dev424}/verifiers/v1/harnesses/null/harness.py +2 -2
  26. {verifiers-0.1.15.dev422 → verifiers-0.1.15.dev424}/verifiers/v1/harnesses/rlm/harness.py +2 -2
  27. {verifiers-0.1.15.dev422 → verifiers-0.1.15.dev424}/verifiers/v1/harnesses/terminus_2/harness.py +2 -2
  28. {verifiers-0.1.15.dev422 → verifiers-0.1.15.dev424}/verifiers/v1/interception/server.py +2 -2
  29. {verifiers-0.1.15.dev422 → verifiers-0.1.15.dev424}/verifiers/v1/rollout.py +2 -2
  30. {verifiers-0.1.15.dev422 → verifiers-0.1.15.dev424}/verifiers/v1/runtimes/base.py +23 -17
  31. {verifiers-0.1.15.dev422 → verifiers-0.1.15.dev424}/verifiers/v1/runtimes/modal.py +8 -4
  32. {verifiers-0.1.15.dev422 → verifiers-0.1.15.dev424}/verifiers/v1/runtimes/prime.py +3 -3
  33. {verifiers-0.1.15.dev422 → verifiers-0.1.15.dev424}/verifiers/v1/serve/server.py +4 -4
  34. verifiers-0.1.15.dev424/verifiers/v1/utils/aio.py +31 -0
  35. {verifiers-0.1.15.dev422 → verifiers-0.1.15.dev424}/.gitignore +0 -0
  36. {verifiers-0.1.15.dev422 → verifiers-0.1.15.dev424}/LICENSE +0 -0
  37. {verifiers-0.1.15.dev422 → verifiers-0.1.15.dev424}/README.md +0 -0
  38. {verifiers-0.1.15.dev422 → verifiers-0.1.15.dev424}/tests/AGENTS.md +0 -0
  39. {verifiers-0.1.15.dev422 → verifiers-0.1.15.dev424}/tests/README.md +0 -0
  40. {verifiers-0.1.15.dev422 → verifiers-0.1.15.dev424}/tests/__init__.py +0 -0
  41. {verifiers-0.1.15.dev422 → verifiers-0.1.15.dev424}/tests/conftest.py +0 -0
  42. {verifiers-0.1.15.dev422 → verifiers-0.1.15.dev424}/tests/test_browser_env.py +0 -0
  43. {verifiers-0.1.15.dev422 → verifiers-0.1.15.dev424}/tests/test_build_script.py +0 -0
  44. {verifiers-0.1.15.dev422 → verifiers-0.1.15.dev424}/tests/test_cli_agent_env.py +0 -0
  45. {verifiers-0.1.15.dev422 → verifiers-0.1.15.dev424}/tests/test_client_auth_errors.py +0 -0
  46. {verifiers-0.1.15.dev422 → verifiers-0.1.15.dev424}/tests/test_client_config.py +0 -0
  47. {verifiers-0.1.15.dev422 → verifiers-0.1.15.dev424}/tests/test_client_multimodal_types.py +0 -0
  48. {verifiers-0.1.15.dev422 → verifiers-0.1.15.dev424}/tests/test_composable_env.py +0 -0
  49. {verifiers-0.1.15.dev422 → verifiers-0.1.15.dev424}/tests/test_context_token_metrics.py +0 -0
  50. {verifiers-0.1.15.dev422 → verifiers-0.1.15.dev424}/tests/test_decorator_ranks.py +0 -0
  51. {verifiers-0.1.15.dev422 → verifiers-0.1.15.dev424}/tests/test_endpoint_registry.py +0 -0
  52. {verifiers-0.1.15.dev422 → verifiers-0.1.15.dev424}/tests/test_env_group.py +0 -0
  53. {verifiers-0.1.15.dev422 → verifiers-0.1.15.dev424}/tests/test_env_server.py +0 -0
  54. {verifiers-0.1.15.dev422 → verifiers-0.1.15.dev424}/tests/test_environment.py +0 -0
  55. {verifiers-0.1.15.dev422 → verifiers-0.1.15.dev424}/tests/test_environment_extra.py +0 -0
  56. {verifiers-0.1.15.dev422 → verifiers-0.1.15.dev424}/tests/test_envs.py +0 -0
  57. {verifiers-0.1.15.dev422 → verifiers-0.1.15.dev424}/tests/test_error_chain.py +0 -0
  58. {verifiers-0.1.15.dev422 → verifiers-0.1.15.dev424}/tests/test_eval_display.py +0 -0
  59. {verifiers-0.1.15.dev422 → verifiers-0.1.15.dev424}/tests/test_eval_utils.py +0 -0
  60. {verifiers-0.1.15.dev422 → verifiers-0.1.15.dev424}/tests/test_gepa_cli.py +0 -0
  61. {verifiers-0.1.15.dev422 → verifiers-0.1.15.dev424}/tests/test_gepa_utils.py +0 -0
  62. {verifiers-0.1.15.dev422 → verifiers-0.1.15.dev424}/tests/test_gym_env.py +0 -0
  63. {verifiers-0.1.15.dev422 → verifiers-0.1.15.dev424}/tests/test_harbor_env_mcp.py +0 -0
  64. {verifiers-0.1.15.dev422 → verifiers-0.1.15.dev424}/tests/test_imports.py +0 -0
  65. {verifiers-0.1.15.dev422 → verifiers-0.1.15.dev424}/tests/test_init_script.py +0 -0
  66. {verifiers-0.1.15.dev422 → verifiers-0.1.15.dev424}/tests/test_install_utils.py +0 -0
  67. {verifiers-0.1.15.dev422 → verifiers-0.1.15.dev424}/tests/test_interception_utils.py +0 -0
  68. {verifiers-0.1.15.dev422 → verifiers-0.1.15.dev424}/tests/test_logging.py +0 -0
  69. {verifiers-0.1.15.dev422 → verifiers-0.1.15.dev424}/tests/test_math_rubric.py +0 -0
  70. {verifiers-0.1.15.dev422 → verifiers-0.1.15.dev424}/tests/test_maybe_think_parser.py +0 -0
  71. {verifiers-0.1.15.dev422 → verifiers-0.1.15.dev424}/tests/test_message_utils.py +0 -0
  72. {verifiers-0.1.15.dev422 → verifiers-0.1.15.dev424}/tests/test_message_utils_multimodal.py +0 -0
  73. {verifiers-0.1.15.dev422 → verifiers-0.1.15.dev424}/tests/test_multiturn_env.py +0 -0
  74. {verifiers-0.1.15.dev422 → verifiers-0.1.15.dev424}/tests/test_nemorl_client.py +0 -0
  75. {verifiers-0.1.15.dev422 → verifiers-0.1.15.dev424}/tests/test_openai_chat_completions_token_client.py +0 -0
  76. {verifiers-0.1.15.dev422 → verifiers-0.1.15.dev424}/tests/test_openai_responses_client.py +0 -0
  77. {verifiers-0.1.15.dev422 → verifiers-0.1.15.dev424}/tests/test_opencode_rlm_env.py +0 -0
  78. {verifiers-0.1.15.dev422 → verifiers-0.1.15.dev424}/tests/test_openenv_client.py +0 -0
  79. {verifiers-0.1.15.dev422 → verifiers-0.1.15.dev424}/tests/test_parser.py +0 -0
  80. {verifiers-0.1.15.dev422 → verifiers-0.1.15.dev424}/tests/test_path_utils.py +0 -0
  81. {verifiers-0.1.15.dev422 → verifiers-0.1.15.dev424}/tests/test_per_turn_timing.py +0 -0
  82. {verifiers-0.1.15.dev422 → verifiers-0.1.15.dev424}/tests/test_pricing_utils.py +0 -0
  83. {verifiers-0.1.15.dev422 → verifiers-0.1.15.dev424}/tests/test_prime_plugin.py +0 -0
  84. {verifiers-0.1.15.dev422 → verifiers-0.1.15.dev424}/tests/test_renderer_client.py +0 -0
  85. {verifiers-0.1.15.dev422 → verifiers-0.1.15.dev424}/tests/test_renderer_e2e.py +0 -0
  86. {verifiers-0.1.15.dev422 → verifiers-0.1.15.dev424}/tests/test_rlm_composable_env.py +0 -0
  87. {verifiers-0.1.15.dev422 → verifiers-0.1.15.dev424}/tests/test_rubric.py +0 -0
  88. {verifiers-0.1.15.dev422 → verifiers-0.1.15.dev424}/tests/test_rubric_group.py +0 -0
  89. {verifiers-0.1.15.dev422 → verifiers-0.1.15.dev424}/tests/test_sandbox_env.py +0 -0
  90. {verifiers-0.1.15.dev422 → verifiers-0.1.15.dev424}/tests/test_sandbox_mixin.py +0 -0
  91. {verifiers-0.1.15.dev422 → verifiers-0.1.15.dev424}/tests/test_save_utils.py +0 -0
  92. {verifiers-0.1.15.dev422 → verifiers-0.1.15.dev424}/tests/test_setup_script.py +0 -0
  93. {verifiers-0.1.15.dev422 → verifiers-0.1.15.dev424}/tests/test_singleturn_env.py +0 -0
  94. {verifiers-0.1.15.dev422 → verifiers-0.1.15.dev424}/tests/test_stateful_tool_env.py +0 -0
  95. {verifiers-0.1.15.dev422 → verifiers-0.1.15.dev424}/tests/test_think_parser.py +0 -0
  96. {verifiers-0.1.15.dev422 → verifiers-0.1.15.dev424}/tests/test_tool_env.py +0 -0
  97. {verifiers-0.1.15.dev422 → verifiers-0.1.15.dev424}/tests/test_tool_utils.py +0 -0
  98. {verifiers-0.1.15.dev422 → verifiers-0.1.15.dev424}/tests/test_trajectory_processing.py +0 -0
  99. {verifiers-0.1.15.dev422 → verifiers-0.1.15.dev424}/tests/test_tui_info_formatting.py +0 -0
  100. {verifiers-0.1.15.dev422 → verifiers-0.1.15.dev424}/tests/test_types.py +0 -0
  101. {verifiers-0.1.15.dev422 → verifiers-0.1.15.dev424}/tests/test_wordle_env.py +0 -0
  102. {verifiers-0.1.15.dev422 → verifiers-0.1.15.dev424}/tests/test_xml_parser.py +0 -0
  103. {verifiers-0.1.15.dev422 → verifiers-0.1.15.dev424}/tests/v1/conftest.py +0 -0
  104. {verifiers-0.1.15.dev422 → verifiers-0.1.15.dev424}/tests/v1/fixtures/counter_tool_v1.py +0 -0
  105. {verifiers-0.1.15.dev422 → verifiers-0.1.15.dev424}/tests/v1/fixtures/echo_agentic_v1.py +0 -0
  106. {verifiers-0.1.15.dev422 → verifiers-0.1.15.dev424}/tests/v1/fixtures/echo_multi_v0.py +0 -0
  107. {verifiers-0.1.15.dev422 → verifiers-0.1.15.dev424}/tests/v1/fixtures/echo_tool_v1.py +0 -0
  108. {verifiers-0.1.15.dev422 → verifiers-0.1.15.dev424}/tests/v1/fixtures/echo_user_sim_v1.py +0 -0
  109. {verifiers-0.1.15.dev422 → verifiers-0.1.15.dev424}/tests/v1/fixtures/echo_v0.py +0 -0
  110. {verifiers-0.1.15.dev422 → verifiers-0.1.15.dev424}/tests/v1/fixtures/echo_v1.py +0 -0
  111. {verifiers-0.1.15.dev422 → verifiers-0.1.15.dev424}/tests/v1/fixtures/pyproject.toml +0 -0
  112. {verifiers-0.1.15.dev422 → verifiers-0.1.15.dev424}/tests/v1/fixtures/tool_response_image_v1.py +0 -0
  113. {verifiers-0.1.15.dev422 → verifiers-0.1.15.dev424}/tests/v1/test_color_codeword_tasks.py +0 -0
  114. {verifiers-0.1.15.dev422 → verifiers-0.1.15.dev424}/tests/v1/test_configs.py +0 -0
  115. {verifiers-0.1.15.dev422 → verifiers-0.1.15.dev424}/tests/v1/test_e2e.py +0 -0
  116. {verifiers-0.1.15.dev422 → verifiers-0.1.15.dev424}/tests/v1/test_envs.py +0 -0
  117. {verifiers-0.1.15.dev422 → verifiers-0.1.15.dev424}/tests/v1/test_graph.py +0 -0
  118. {verifiers-0.1.15.dev422 → verifiers-0.1.15.dev424}/tests/v1/test_judges.py +0 -0
  119. {verifiers-0.1.15.dev422 → verifiers-0.1.15.dev424}/tests/v1/test_legacy.py +0 -0
  120. {verifiers-0.1.15.dev422 → verifiers-0.1.15.dev424}/tests/v1/test_scoring.py +0 -0
  121. {verifiers-0.1.15.dev422 → verifiers-0.1.15.dev424}/tests/v1/test_trace.py +0 -0
  122. {verifiers-0.1.15.dev422 → verifiers-0.1.15.dev424}/verifiers/AGENTS.md +0 -0
  123. {verifiers-0.1.15.dev422 → verifiers-0.1.15.dev424}/verifiers/__init__.py +0 -0
  124. {verifiers-0.1.15.dev422 → verifiers-0.1.15.dev424}/verifiers/cli/__init__.py +0 -0
  125. {verifiers-0.1.15.dev422 → verifiers-0.1.15.dev424}/verifiers/cli/commands/__init__.py +0 -0
  126. {verifiers-0.1.15.dev422 → verifiers-0.1.15.dev424}/verifiers/cli/commands/build.py +0 -0
  127. {verifiers-0.1.15.dev422 → verifiers-0.1.15.dev424}/verifiers/cli/commands/eval.py +0 -0
  128. {verifiers-0.1.15.dev422 → verifiers-0.1.15.dev424}/verifiers/cli/commands/gepa.py +0 -0
  129. {verifiers-0.1.15.dev422 → verifiers-0.1.15.dev424}/verifiers/cli/commands/init.py +0 -0
  130. {verifiers-0.1.15.dev422 → verifiers-0.1.15.dev424}/verifiers/cli/commands/install.py +0 -0
  131. {verifiers-0.1.15.dev422 → verifiers-0.1.15.dev424}/verifiers/cli/commands/setup.py +0 -0
  132. {verifiers-0.1.15.dev422 → verifiers-0.1.15.dev424}/verifiers/cli/plugins/__init__.py +0 -0
  133. {verifiers-0.1.15.dev422 → verifiers-0.1.15.dev424}/verifiers/cli/plugins/prime.py +0 -0
  134. {verifiers-0.1.15.dev422 → verifiers-0.1.15.dev424}/verifiers/cli/tui.py +0 -0
  135. {verifiers-0.1.15.dev422 → verifiers-0.1.15.dev424}/verifiers/clients/__init__.py +0 -0
  136. {verifiers-0.1.15.dev422 → verifiers-0.1.15.dev424}/verifiers/clients/anthropic_messages_client.py +0 -0
  137. {verifiers-0.1.15.dev422 → verifiers-0.1.15.dev424}/verifiers/clients/client.py +0 -0
  138. {verifiers-0.1.15.dev422 → verifiers-0.1.15.dev424}/verifiers/clients/nemorl_chat_completions_client.py +0 -0
  139. {verifiers-0.1.15.dev422 → verifiers-0.1.15.dev424}/verifiers/clients/openai_chat_completions_client.py +0 -0
  140. {verifiers-0.1.15.dev422 → verifiers-0.1.15.dev424}/verifiers/clients/openai_chat_completions_token_client.py +0 -0
  141. {verifiers-0.1.15.dev422 → verifiers-0.1.15.dev424}/verifiers/clients/openai_completions_client.py +0 -0
  142. {verifiers-0.1.15.dev422 → verifiers-0.1.15.dev424}/verifiers/clients/openai_responses_client.py +0 -0
  143. {verifiers-0.1.15.dev422 → verifiers-0.1.15.dev424}/verifiers/clients/renderer_client.py +0 -0
  144. {verifiers-0.1.15.dev422 → verifiers-0.1.15.dev424}/verifiers/decorators.py +0 -0
  145. {verifiers-0.1.15.dev422 → verifiers-0.1.15.dev424}/verifiers/envs/AGENTS.md +0 -0
  146. {verifiers-0.1.15.dev422 → verifiers-0.1.15.dev424}/verifiers/envs/__init__.py +0 -0
  147. {verifiers-0.1.15.dev422 → verifiers-0.1.15.dev424}/verifiers/envs/env_group.py +0 -0
  148. {verifiers-0.1.15.dev422 → verifiers-0.1.15.dev424}/verifiers/envs/environment.py +0 -0
  149. {verifiers-0.1.15.dev422 → verifiers-0.1.15.dev424}/verifiers/envs/experimental/README.md +0 -0
  150. {verifiers-0.1.15.dev422 → verifiers-0.1.15.dev424}/verifiers/envs/experimental/__init__.py +0 -0
  151. {verifiers-0.1.15.dev422 → verifiers-0.1.15.dev424}/verifiers/envs/experimental/cli_agent_env.py +0 -0
  152. {verifiers-0.1.15.dev422 → verifiers-0.1.15.dev424}/verifiers/envs/experimental/composable/README.md +0 -0
  153. {verifiers-0.1.15.dev422 → verifiers-0.1.15.dev424}/verifiers/envs/experimental/composable/__init__.py +0 -0
  154. {verifiers-0.1.15.dev422 → verifiers-0.1.15.dev424}/verifiers/envs/experimental/composable/_filter.py +0 -0
  155. {verifiers-0.1.15.dev422 → verifiers-0.1.15.dev424}/verifiers/envs/experimental/composable/composable_env.py +0 -0
  156. {verifiers-0.1.15.dev422 → verifiers-0.1.15.dev424}/verifiers/envs/experimental/composable/harness.py +0 -0
  157. {verifiers-0.1.15.dev422 → verifiers-0.1.15.dev424}/verifiers/envs/experimental/composable/harnesses/__init__.py +0 -0
  158. {verifiers-0.1.15.dev422 → verifiers-0.1.15.dev424}/verifiers/envs/experimental/composable/harnesses/mini_swe_agent.py +0 -0
  159. {verifiers-0.1.15.dev422 → verifiers-0.1.15.dev424}/verifiers/envs/experimental/composable/harnesses/opencode.py +0 -0
  160. {verifiers-0.1.15.dev422 → verifiers-0.1.15.dev424}/verifiers/envs/experimental/composable/harnesses/prompt.txt +0 -0
  161. {verifiers-0.1.15.dev422 → verifiers-0.1.15.dev424}/verifiers/envs/experimental/composable/harnesses/rlm.py +0 -0
  162. {verifiers-0.1.15.dev422 → verifiers-0.1.15.dev424}/verifiers/envs/experimental/composable/task.py +0 -0
  163. {verifiers-0.1.15.dev422 → verifiers-0.1.15.dev424}/verifiers/envs/experimental/composable/tasksets/__init__.py +0 -0
  164. {verifiers-0.1.15.dev422 → verifiers-0.1.15.dev424}/verifiers/envs/experimental/composable/tasksets/cp/__init__.py +0 -0
  165. {verifiers-0.1.15.dev422 → verifiers-0.1.15.dev424}/verifiers/envs/experimental/composable/tasksets/cp/cp_task.py +0 -0
  166. {verifiers-0.1.15.dev422 → verifiers-0.1.15.dev424}/verifiers/envs/experimental/composable/tasksets/cp/test_utils.py +0 -0
  167. {verifiers-0.1.15.dev422 → verifiers-0.1.15.dev424}/verifiers/envs/experimental/composable/tasksets/harbor/__init__.py +0 -0
  168. {verifiers-0.1.15.dev422 → verifiers-0.1.15.dev424}/verifiers/envs/experimental/composable/tasksets/harbor/cli_gym.py +0 -0
  169. {verifiers-0.1.15.dev422 → verifiers-0.1.15.dev424}/verifiers/envs/experimental/composable/tasksets/harbor/harbor.py +0 -0
  170. {verifiers-0.1.15.dev422 → verifiers-0.1.15.dev424}/verifiers/envs/experimental/composable/tasksets/harbor/terminal_lego.py +0 -0
  171. {verifiers-0.1.15.dev422 → verifiers-0.1.15.dev424}/verifiers/envs/experimental/composable/tasksets/math/__init__.py +0 -0
  172. {verifiers-0.1.15.dev422 → verifiers-0.1.15.dev424}/verifiers/envs/experimental/composable/tasksets/math/math_task.py +0 -0
  173. {verifiers-0.1.15.dev422 → verifiers-0.1.15.dev424}/verifiers/envs/experimental/composable/tasksets/search/README.md +0 -0
  174. {verifiers-0.1.15.dev422 → verifiers-0.1.15.dev424}/verifiers/envs/experimental/composable/tasksets/search/__init__.py +0 -0
  175. {verifiers-0.1.15.dev422 → verifiers-0.1.15.dev424}/verifiers/envs/experimental/composable/tasksets/search/openseeker/README.md +0 -0
  176. {verifiers-0.1.15.dev422 → verifiers-0.1.15.dev424}/verifiers/envs/experimental/composable/tasksets/search/openseeker/__init__.py +0 -0
  177. {verifiers-0.1.15.dev422 → verifiers-0.1.15.dev424}/verifiers/envs/experimental/composable/tasksets/search/openseeker/taskset.py +0 -0
  178. {verifiers-0.1.15.dev422 → verifiers-0.1.15.dev424}/verifiers/envs/experimental/composable/tasksets/search/quest/README.md +0 -0
  179. {verifiers-0.1.15.dev422 → verifiers-0.1.15.dev424}/verifiers/envs/experimental/composable/tasksets/search/quest/__init__.py +0 -0
  180. {verifiers-0.1.15.dev422 → verifiers-0.1.15.dev424}/verifiers/envs/experimental/composable/tasksets/search/quest/obj_task_eval/__init__.py +0 -0
  181. {verifiers-0.1.15.dev422 → verifiers-0.1.15.dev424}/verifiers/envs/experimental/composable/tasksets/search/quest/obj_task_eval/api_tools/__init__.py +0 -0
  182. {verifiers-0.1.15.dev422 → verifiers-0.1.15.dev424}/verifiers/envs/experimental/composable/tasksets/search/quest/obj_task_eval/api_tools/tool_pdf.py +0 -0
  183. {verifiers-0.1.15.dev422 → verifiers-0.1.15.dev424}/verifiers/envs/experimental/composable/tasksets/search/quest/obj_task_eval/eval_toolkit.py +0 -0
  184. {verifiers-0.1.15.dev422 → verifiers-0.1.15.dev424}/verifiers/envs/experimental/composable/tasksets/search/quest/obj_task_eval/evaluator.py +0 -0
  185. {verifiers-0.1.15.dev422 → verifiers-0.1.15.dev424}/verifiers/envs/experimental/composable/tasksets/search/quest/obj_task_eval/llm_client/__init__.py +0 -0
  186. {verifiers-0.1.15.dev422 → verifiers-0.1.15.dev424}/verifiers/envs/experimental/composable/tasksets/search/quest/obj_task_eval/llm_client/base_client.py +0 -0
  187. {verifiers-0.1.15.dev422 → verifiers-0.1.15.dev424}/verifiers/envs/experimental/composable/tasksets/search/quest/obj_task_eval/prompts/__init__.py +0 -0
  188. {verifiers-0.1.15.dev422 → verifiers-0.1.15.dev424}/verifiers/envs/experimental/composable/tasksets/search/quest/obj_task_eval/prompts/cache_prompts.py +0 -0
  189. {verifiers-0.1.15.dev422 → verifiers-0.1.15.dev424}/verifiers/envs/experimental/composable/tasksets/search/quest/obj_task_eval/utils/__init__.py +0 -0
  190. {verifiers-0.1.15.dev422 → verifiers-0.1.15.dev424}/verifiers/envs/experimental/composable/tasksets/search/quest/obj_task_eval/utils/cache_filesys.py +0 -0
  191. {verifiers-0.1.15.dev422 → verifiers-0.1.15.dev424}/verifiers/envs/experimental/composable/tasksets/search/quest/obj_task_eval/utils/load_eval_script.py +0 -0
  192. {verifiers-0.1.15.dev422 → verifiers-0.1.15.dev424}/verifiers/envs/experimental/composable/tasksets/search/quest/obj_task_eval/utils/misc.py +0 -0
  193. {verifiers-0.1.15.dev422 → verifiers-0.1.15.dev424}/verifiers/envs/experimental/composable/tasksets/search/quest/obj_task_eval/utils/tool_visit.py +0 -0
  194. {verifiers-0.1.15.dev422 → verifiers-0.1.15.dev424}/verifiers/envs/experimental/composable/tasksets/search/quest/obj_task_eval/utils/url_tools.py +0 -0
  195. {verifiers-0.1.15.dev422 → verifiers-0.1.15.dev424}/verifiers/envs/experimental/composable/tasksets/search/quest/obj_task_eval/verification_tree.py +0 -0
  196. {verifiers-0.1.15.dev422 → verifiers-0.1.15.dev424}/verifiers/envs/experimental/composable/tasksets/search/quest/open_ended.py +0 -0
  197. {verifiers-0.1.15.dev422 → verifiers-0.1.15.dev424}/verifiers/envs/experimental/composable/tasksets/search/quest/taskset.py +0 -0
  198. {verifiers-0.1.15.dev422 → verifiers-0.1.15.dev424}/verifiers/envs/experimental/composable/tasksets/search/redsearcher/README.md +0 -0
  199. {verifiers-0.1.15.dev422 → verifiers-0.1.15.dev424}/verifiers/envs/experimental/composable/tasksets/search/redsearcher/__init__.py +0 -0
  200. {verifiers-0.1.15.dev422 → verifiers-0.1.15.dev424}/verifiers/envs/experimental/composable/tasksets/search/redsearcher/taskset.py +0 -0
  201. {verifiers-0.1.15.dev422 → verifiers-0.1.15.dev424}/verifiers/envs/experimental/composable/tasksets/search/search_tasksets.py +0 -0
  202. {verifiers-0.1.15.dev422 → verifiers-0.1.15.dev424}/verifiers/envs/experimental/composable/tasksets/swe/README.md +0 -0
  203. {verifiers-0.1.15.dev422 → verifiers-0.1.15.dev424}/verifiers/envs/experimental/composable/tasksets/swe/__init__.py +0 -0
  204. {verifiers-0.1.15.dev422 → verifiers-0.1.15.dev424}/verifiers/envs/experimental/composable/tasksets/swe/multi_swe/__init__.py +0 -0
  205. {verifiers-0.1.15.dev422 → verifiers-0.1.15.dev424}/verifiers/envs/experimental/composable/tasksets/swe/multi_swe/extract_fix_patch.sh +0 -0
  206. {verifiers-0.1.15.dev422 → verifiers-0.1.15.dev424}/verifiers/envs/experimental/composable/tasksets/swe/multi_swe/taskset.py +0 -0
  207. {verifiers-0.1.15.dev422 → verifiers-0.1.15.dev424}/verifiers/envs/experimental/composable/tasksets/swe/openswe/__init__.py +0 -0
  208. {verifiers-0.1.15.dev422 → verifiers-0.1.15.dev424}/verifiers/envs/experimental/composable/tasksets/swe/openswe/taskset.py +0 -0
  209. {verifiers-0.1.15.dev422 → verifiers-0.1.15.dev424}/verifiers/envs/experimental/composable/tasksets/swe/r2e_gym/__init__.py +0 -0
  210. {verifiers-0.1.15.dev422 → verifiers-0.1.15.dev424}/verifiers/envs/experimental/composable/tasksets/swe/r2e_gym/log_parser.py +0 -0
  211. {verifiers-0.1.15.dev422 → verifiers-0.1.15.dev424}/verifiers/envs/experimental/composable/tasksets/swe/r2e_gym/taskset.py +0 -0
  212. {verifiers-0.1.15.dev422 → verifiers-0.1.15.dev424}/verifiers/envs/experimental/composable/tasksets/swe/scale_swe/__init__.py +0 -0
  213. {verifiers-0.1.15.dev422 → verifiers-0.1.15.dev424}/verifiers/envs/experimental/composable/tasksets/swe/scale_swe/taskset.py +0 -0
  214. {verifiers-0.1.15.dev422 → verifiers-0.1.15.dev424}/verifiers/envs/experimental/composable/tasksets/swe/shared/__init__.py +0 -0
  215. {verifiers-0.1.15.dev422 → verifiers-0.1.15.dev424}/verifiers/envs/experimental/composable/tasksets/swe/shared/test_patch.py +0 -0
  216. {verifiers-0.1.15.dev422 → verifiers-0.1.15.dev424}/verifiers/envs/experimental/composable/tasksets/swe/swe_bench/__init__.py +0 -0
  217. {verifiers-0.1.15.dev422 → verifiers-0.1.15.dev424}/verifiers/envs/experimental/composable/tasksets/swe/swe_bench/taskset.py +0 -0
  218. {verifiers-0.1.15.dev422 → verifiers-0.1.15.dev424}/verifiers/envs/experimental/composable/tasksets/swe/swe_lego/__init__.py +0 -0
  219. {verifiers-0.1.15.dev422 → verifiers-0.1.15.dev424}/verifiers/envs/experimental/composable/tasksets/swe/swe_lego/taskset.py +0 -0
  220. {verifiers-0.1.15.dev422 → verifiers-0.1.15.dev424}/verifiers/envs/experimental/composable/tasksets/swe/swe_rebench_v2/__init__.py +0 -0
  221. {verifiers-0.1.15.dev422 → verifiers-0.1.15.dev424}/verifiers/envs/experimental/composable/tasksets/swe/swe_rebench_v2/log_parsers.py +0 -0
  222. {verifiers-0.1.15.dev422 → verifiers-0.1.15.dev424}/verifiers/envs/experimental/composable/tasksets/swe/swe_rebench_v2/taskset.py +0 -0
  223. {verifiers-0.1.15.dev422 → verifiers-0.1.15.dev424}/verifiers/envs/experimental/composable/tasksets/swe/swe_smith/__init__.py +0 -0
  224. {verifiers-0.1.15.dev422 → verifiers-0.1.15.dev424}/verifiers/envs/experimental/composable/tasksets/swe/swe_smith/taskset.py +0 -0
  225. {verifiers-0.1.15.dev422 → verifiers-0.1.15.dev424}/verifiers/envs/experimental/composable/tasksets/swe/swe_tasksets.py +0 -0
  226. {verifiers-0.1.15.dev422 → verifiers-0.1.15.dev424}/verifiers/envs/experimental/gym_env.py +0 -0
  227. {verifiers-0.1.15.dev422 → verifiers-0.1.15.dev424}/verifiers/envs/experimental/harbor_env/__init__.py +0 -0
  228. {verifiers-0.1.15.dev422 → verifiers-0.1.15.dev424}/verifiers/envs/experimental/harbor_env/env.py +0 -0
  229. {verifiers-0.1.15.dev422 → verifiers-0.1.15.dev424}/verifiers/envs/experimental/harbor_env/mcp.py +0 -0
  230. {verifiers-0.1.15.dev422 → verifiers-0.1.15.dev424}/verifiers/envs/experimental/mcp_env.py +0 -0
  231. {verifiers-0.1.15.dev422 → verifiers-0.1.15.dev424}/verifiers/envs/experimental/opencode_env.py +0 -0
  232. {verifiers-0.1.15.dev422 → verifiers-0.1.15.dev424}/verifiers/envs/experimental/opencode_qa_env.py +0 -0
  233. {verifiers-0.1.15.dev422 → verifiers-0.1.15.dev424}/verifiers/envs/experimental/opencode_rlm_env.py +0 -0
  234. {verifiers-0.1.15.dev422 → verifiers-0.1.15.dev424}/verifiers/envs/experimental/sandbox_mixin.py +0 -0
  235. {verifiers-0.1.15.dev422 → verifiers-0.1.15.dev424}/verifiers/envs/experimental/utils/__init__.py +0 -0
  236. {verifiers-0.1.15.dev422 → verifiers-0.1.15.dev424}/verifiers/envs/experimental/utils/file_locks.py +0 -0
  237. {verifiers-0.1.15.dev422 → verifiers-0.1.15.dev424}/verifiers/envs/experimental/utils/git_checkout_cache.py +0 -0
  238. {verifiers-0.1.15.dev422 → verifiers-0.1.15.dev424}/verifiers/envs/integrations/README.md +0 -0
  239. {verifiers-0.1.15.dev422 → verifiers-0.1.15.dev424}/verifiers/envs/integrations/__init__.py +0 -0
  240. {verifiers-0.1.15.dev422 → verifiers-0.1.15.dev424}/verifiers/envs/integrations/browser_env/README.md +0 -0
  241. {verifiers-0.1.15.dev422 → verifiers-0.1.15.dev424}/verifiers/envs/integrations/browser_env/__init__.py +0 -0
  242. {verifiers-0.1.15.dev422 → verifiers-0.1.15.dev424}/verifiers/envs/integrations/browser_env/browser_env.py +0 -0
  243. {verifiers-0.1.15.dev422 → verifiers-0.1.15.dev424}/verifiers/envs/integrations/browser_env/modes/__init__.py +0 -0
  244. {verifiers-0.1.15.dev422 → verifiers-0.1.15.dev424}/verifiers/envs/integrations/browser_env/modes/base.py +0 -0
  245. {verifiers-0.1.15.dev422 → verifiers-0.1.15.dev424}/verifiers/envs/integrations/browser_env/modes/cua_mode.py +0 -0
  246. {verifiers-0.1.15.dev422 → verifiers-0.1.15.dev424}/verifiers/envs/integrations/browser_env/modes/dom_mode.py +0 -0
  247. {verifiers-0.1.15.dev422 → verifiers-0.1.15.dev424}/verifiers/envs/integrations/openenv_env.py +0 -0
  248. {verifiers-0.1.15.dev422 → verifiers-0.1.15.dev424}/verifiers/envs/integrations/reasoninggym_env.py +0 -0
  249. {verifiers-0.1.15.dev422 → verifiers-0.1.15.dev424}/verifiers/envs/integrations/textarena_env.py +0 -0
  250. {verifiers-0.1.15.dev422 → verifiers-0.1.15.dev424}/verifiers/envs/multiturn_env.py +0 -0
  251. {verifiers-0.1.15.dev422 → verifiers-0.1.15.dev424}/verifiers/envs/python_env.py +0 -0
  252. {verifiers-0.1.15.dev422 → verifiers-0.1.15.dev424}/verifiers/envs/sandbox_env.py +0 -0
  253. {verifiers-0.1.15.dev422 → verifiers-0.1.15.dev424}/verifiers/envs/singleturn_env.py +0 -0
  254. {verifiers-0.1.15.dev422 → verifiers-0.1.15.dev424}/verifiers/envs/stateful_tool_env.py +0 -0
  255. {verifiers-0.1.15.dev422 → verifiers-0.1.15.dev424}/verifiers/envs/tool_env.py +0 -0
  256. {verifiers-0.1.15.dev422 → verifiers-0.1.15.dev424}/verifiers/errors.py +0 -0
  257. {verifiers-0.1.15.dev422 → verifiers-0.1.15.dev424}/verifiers/gepa/__init__.py +0 -0
  258. {verifiers-0.1.15.dev422 → verifiers-0.1.15.dev424}/verifiers/gepa/adapter.py +0 -0
  259. {verifiers-0.1.15.dev422 → verifiers-0.1.15.dev424}/verifiers/gepa/config.py +0 -0
  260. {verifiers-0.1.15.dev422 → verifiers-0.1.15.dev424}/verifiers/gepa/display.py +0 -0
  261. {verifiers-0.1.15.dev422 → verifiers-0.1.15.dev424}/verifiers/gepa/gepa_utils.py +0 -0
  262. {verifiers-0.1.15.dev422 → verifiers-0.1.15.dev424}/verifiers/parsers/__init__.py +0 -0
  263. {verifiers-0.1.15.dev422 → verifiers-0.1.15.dev424}/verifiers/parsers/maybe_think_parser.py +0 -0
  264. {verifiers-0.1.15.dev422 → verifiers-0.1.15.dev424}/verifiers/parsers/parser.py +0 -0
  265. {verifiers-0.1.15.dev422 → verifiers-0.1.15.dev424}/verifiers/parsers/think_parser.py +0 -0
  266. {verifiers-0.1.15.dev422 → verifiers-0.1.15.dev424}/verifiers/parsers/xml_parser.py +0 -0
  267. {verifiers-0.1.15.dev422 → verifiers-0.1.15.dev424}/verifiers/rl/README.md +0 -0
  268. {verifiers-0.1.15.dev422 → verifiers-0.1.15.dev424}/verifiers/rl/__init__.py +0 -0
  269. {verifiers-0.1.15.dev422 → verifiers-0.1.15.dev424}/verifiers/rl/inference/__init__.py +0 -0
  270. {verifiers-0.1.15.dev422 → verifiers-0.1.15.dev424}/verifiers/rl/inference/client.py +0 -0
  271. {verifiers-0.1.15.dev422 → verifiers-0.1.15.dev424}/verifiers/rl/inference/server.py +0 -0
  272. {verifiers-0.1.15.dev422 → verifiers-0.1.15.dev424}/verifiers/rl/trainer/__init__.py +0 -0
  273. {verifiers-0.1.15.dev422 → verifiers-0.1.15.dev424}/verifiers/rl/trainer/config.py +0 -0
  274. {verifiers-0.1.15.dev422 → verifiers-0.1.15.dev424}/verifiers/rl/trainer/orchestrator.py +0 -0
  275. {verifiers-0.1.15.dev422 → verifiers-0.1.15.dev424}/verifiers/rl/trainer/trainer.py +0 -0
  276. {verifiers-0.1.15.dev422 → verifiers-0.1.15.dev424}/verifiers/rl/trainer/utils.py +0 -0
  277. {verifiers-0.1.15.dev422 → verifiers-0.1.15.dev424}/verifiers/rubrics/__init__.py +0 -0
  278. {verifiers-0.1.15.dev422 → verifiers-0.1.15.dev424}/verifiers/rubrics/experimental/hybrid_math_rubric.py +0 -0
  279. {verifiers-0.1.15.dev422 → verifiers-0.1.15.dev424}/verifiers/rubrics/judge_rubric.py +0 -0
  280. {verifiers-0.1.15.dev422 → verifiers-0.1.15.dev424}/verifiers/rubrics/math_rubric.py +0 -0
  281. {verifiers-0.1.15.dev422 → verifiers-0.1.15.dev424}/verifiers/rubrics/rubric.py +0 -0
  282. {verifiers-0.1.15.dev422 → verifiers-0.1.15.dev424}/verifiers/rubrics/rubric_group.py +0 -0
  283. {verifiers-0.1.15.dev422 → verifiers-0.1.15.dev424}/verifiers/scripts/__init__.py +0 -0
  284. {verifiers-0.1.15.dev422 → verifiers-0.1.15.dev424}/verifiers/scripts/build.py +0 -0
  285. {verifiers-0.1.15.dev422 → verifiers-0.1.15.dev424}/verifiers/scripts/eval.py +0 -0
  286. {verifiers-0.1.15.dev422 → verifiers-0.1.15.dev424}/verifiers/scripts/gepa.py +0 -0
  287. {verifiers-0.1.15.dev422 → verifiers-0.1.15.dev424}/verifiers/scripts/init.py +0 -0
  288. {verifiers-0.1.15.dev422 → verifiers-0.1.15.dev424}/verifiers/scripts/install.py +0 -0
  289. {verifiers-0.1.15.dev422 → verifiers-0.1.15.dev424}/verifiers/scripts/rl.py +0 -0
  290. {verifiers-0.1.15.dev422 → verifiers-0.1.15.dev424}/verifiers/scripts/setup.py +0 -0
  291. {verifiers-0.1.15.dev422 → verifiers-0.1.15.dev424}/verifiers/scripts/train.py +0 -0
  292. {verifiers-0.1.15.dev422 → verifiers-0.1.15.dev424}/verifiers/scripts/tui.py +0 -0
  293. {verifiers-0.1.15.dev422 → verifiers-0.1.15.dev424}/verifiers/scripts/vllm.py +0 -0
  294. {verifiers-0.1.15.dev422 → verifiers-0.1.15.dev424}/verifiers/serve/__init__.py +0 -0
  295. {verifiers-0.1.15.dev422 → verifiers-0.1.15.dev424}/verifiers/serve/client/env_client.py +0 -0
  296. {verifiers-0.1.15.dev422 → verifiers-0.1.15.dev424}/verifiers/serve/client/zmq_env_client.py +0 -0
  297. {verifiers-0.1.15.dev422 → verifiers-0.1.15.dev424}/verifiers/serve/server/__init__.py +0 -0
  298. {verifiers-0.1.15.dev422 → verifiers-0.1.15.dev424}/verifiers/serve/server/env_router.py +0 -0
  299. {verifiers-0.1.15.dev422 → verifiers-0.1.15.dev424}/verifiers/serve/server/env_server.py +0 -0
  300. {verifiers-0.1.15.dev422 → verifiers-0.1.15.dev424}/verifiers/serve/server/env_worker.py +0 -0
  301. {verifiers-0.1.15.dev422 → verifiers-0.1.15.dev424}/verifiers/serve/server/zmq_env_server.py +0 -0
  302. {verifiers-0.1.15.dev422 → verifiers-0.1.15.dev424}/verifiers/serve/types.py +0 -0
  303. {verifiers-0.1.15.dev422 → verifiers-0.1.15.dev424}/verifiers/types.py +0 -0
  304. {verifiers-0.1.15.dev422 → verifiers-0.1.15.dev424}/verifiers/utils/__init__.py +0 -0
  305. {verifiers-0.1.15.dev422 → verifiers-0.1.15.dev424}/verifiers/utils/async_utils.py +0 -0
  306. {verifiers-0.1.15.dev422 → verifiers-0.1.15.dev424}/verifiers/utils/client_utils.py +0 -0
  307. {verifiers-0.1.15.dev422 → verifiers-0.1.15.dev424}/verifiers/utils/config_utils.py +0 -0
  308. {verifiers-0.1.15.dev422 → verifiers-0.1.15.dev424}/verifiers/utils/data_utils.py +0 -0
  309. {verifiers-0.1.15.dev422 → verifiers-0.1.15.dev424}/verifiers/utils/display_utils.py +0 -0
  310. {verifiers-0.1.15.dev422 → verifiers-0.1.15.dev424}/verifiers/utils/env_config_utils.py +0 -0
  311. {verifiers-0.1.15.dev422 → verifiers-0.1.15.dev424}/verifiers/utils/env_utils.py +0 -0
  312. {verifiers-0.1.15.dev422 → verifiers-0.1.15.dev424}/verifiers/utils/error_utils.py +0 -0
  313. {verifiers-0.1.15.dev422 → verifiers-0.1.15.dev424}/verifiers/utils/eval_display.py +0 -0
  314. {verifiers-0.1.15.dev422 → verifiers-0.1.15.dev424}/verifiers/utils/eval_utils.py +0 -0
  315. {verifiers-0.1.15.dev422 → verifiers-0.1.15.dev424}/verifiers/utils/heartbeat.py +0 -0
  316. {verifiers-0.1.15.dev422 → verifiers-0.1.15.dev424}/verifiers/utils/import_utils.py +0 -0
  317. {verifiers-0.1.15.dev422 → verifiers-0.1.15.dev424}/verifiers/utils/install_utils.py +0 -0
  318. {verifiers-0.1.15.dev422 → verifiers-0.1.15.dev424}/verifiers/utils/interception_utils.py +0 -0
  319. {verifiers-0.1.15.dev422 → verifiers-0.1.15.dev424}/verifiers/utils/logging_utils.py +0 -0
  320. {verifiers-0.1.15.dev422 → verifiers-0.1.15.dev424}/verifiers/utils/message_utils.py +0 -0
  321. {verifiers-0.1.15.dev422 → verifiers-0.1.15.dev424}/verifiers/utils/metric_utils.py +0 -0
  322. {verifiers-0.1.15.dev422 → verifiers-0.1.15.dev424}/verifiers/utils/path_utils.py +0 -0
  323. {verifiers-0.1.15.dev422 → verifiers-0.1.15.dev424}/verifiers/utils/pricing_utils.py +0 -0
  324. {verifiers-0.1.15.dev422 → verifiers-0.1.15.dev424}/verifiers/utils/process_utils.py +0 -0
  325. {verifiers-0.1.15.dev422 → verifiers-0.1.15.dev424}/verifiers/utils/response_utils.py +0 -0
  326. {verifiers-0.1.15.dev422 → verifiers-0.1.15.dev424}/verifiers/utils/save_utils.py +0 -0
  327. {verifiers-0.1.15.dev422 → verifiers-0.1.15.dev424}/verifiers/utils/serve_utils.py +0 -0
  328. {verifiers-0.1.15.dev422 → verifiers-0.1.15.dev424}/verifiers/utils/thread_utils.py +0 -0
  329. {verifiers-0.1.15.dev422 → verifiers-0.1.15.dev424}/verifiers/utils/threaded_sandbox_client.py +0 -0
  330. {verifiers-0.1.15.dev422 → verifiers-0.1.15.dev424}/verifiers/utils/tool_utils.py +0 -0
  331. {verifiers-0.1.15.dev422 → verifiers-0.1.15.dev424}/verifiers/utils/usage_utils.py +0 -0
  332. {verifiers-0.1.15.dev422 → verifiers-0.1.15.dev424}/verifiers/utils/version_utils.py +0 -0
  333. {verifiers-0.1.15.dev422 → verifiers-0.1.15.dev424}/verifiers/v1/ARCHITECTURE.md +0 -0
  334. {verifiers-0.1.15.dev422 → verifiers-0.1.15.dev424}/verifiers/v1/cli/__init__.py +0 -0
  335. {verifiers-0.1.15.dev422 → verifiers-0.1.15.dev424}/verifiers/v1/cli/dashboard/__init__.py +0 -0
  336. {verifiers-0.1.15.dev422 → verifiers-0.1.15.dev424}/verifiers/v1/cli/dashboard/base.py +0 -0
  337. {verifiers-0.1.15.dev422 → verifiers-0.1.15.dev424}/verifiers/v1/cli/dashboard/eval.py +0 -0
  338. {verifiers-0.1.15.dev422 → verifiers-0.1.15.dev424}/verifiers/v1/cli/dashboard/validate.py +0 -0
  339. {verifiers-0.1.15.dev422 → verifiers-0.1.15.dev424}/verifiers/v1/cli/eval/__init__.py +0 -0
  340. {verifiers-0.1.15.dev422 → verifiers-0.1.15.dev424}/verifiers/v1/cli/eval/main.py +0 -0
  341. {verifiers-0.1.15.dev422 → verifiers-0.1.15.dev424}/verifiers/v1/cli/eval/resume.py +0 -0
  342. {verifiers-0.1.15.dev422 → verifiers-0.1.15.dev424}/verifiers/v1/cli/resolve.py +0 -0
  343. {verifiers-0.1.15.dev422 → verifiers-0.1.15.dev424}/verifiers/v1/cli/serve.py +0 -0
  344. {verifiers-0.1.15.dev422 → verifiers-0.1.15.dev424}/verifiers/v1/clients/config.py +0 -0
  345. {verifiers-0.1.15.dev422 → verifiers-0.1.15.dev424}/verifiers/v1/clients/eval.py +0 -0
  346. {verifiers-0.1.15.dev422 → verifiers-0.1.15.dev424}/verifiers/v1/clients/train.py +0 -0
  347. {verifiers-0.1.15.dev422 → verifiers-0.1.15.dev424}/verifiers/v1/configs/eval.py +0 -0
  348. {verifiers-0.1.15.dev422 → verifiers-0.1.15.dev424}/verifiers/v1/configs/init.py +0 -0
  349. {verifiers-0.1.15.dev422 → verifiers-0.1.15.dev424}/verifiers/v1/configs/serve.py +0 -0
  350. {verifiers-0.1.15.dev422 → verifiers-0.1.15.dev424}/verifiers/v1/decorators.py +0 -0
  351. {verifiers-0.1.15.dev422 → verifiers-0.1.15.dev424}/verifiers/v1/dialects/__init__.py +0 -0
  352. {verifiers-0.1.15.dev422 → verifiers-0.1.15.dev424}/verifiers/v1/dialects/anthropic.py +0 -0
  353. {verifiers-0.1.15.dev422 → verifiers-0.1.15.dev424}/verifiers/v1/dialects/base.py +0 -0
  354. {verifiers-0.1.15.dev422 → verifiers-0.1.15.dev424}/verifiers/v1/dialects/chat.py +0 -0
  355. {verifiers-0.1.15.dev422 → verifiers-0.1.15.dev424}/verifiers/v1/dialects/responses.py +0 -0
  356. {verifiers-0.1.15.dev422 → verifiers-0.1.15.dev424}/verifiers/v1/episode.py +0 -0
  357. {verifiers-0.1.15.dev422 → verifiers-0.1.15.dev424}/verifiers/v1/errors.py +0 -0
  358. {verifiers-0.1.15.dev422 → verifiers-0.1.15.dev424}/verifiers/v1/graph.py +0 -0
  359. {verifiers-0.1.15.dev422 → verifiers-0.1.15.dev424}/verifiers/v1/harnesses/__init__.py +0 -0
  360. {verifiers-0.1.15.dev422 → verifiers-0.1.15.dev424}/verifiers/v1/harnesses/codex/__init__.py +0 -0
  361. {verifiers-0.1.15.dev422 → verifiers-0.1.15.dev424}/verifiers/v1/harnesses/default/__init__.py +0 -0
  362. {verifiers-0.1.15.dev422 → verifiers-0.1.15.dev424}/verifiers/v1/harnesses/default/program.py +0 -0
  363. {verifiers-0.1.15.dev422 → verifiers-0.1.15.dev424}/verifiers/v1/harnesses/kimi_code/__init__.py +0 -0
  364. {verifiers-0.1.15.dev422 → verifiers-0.1.15.dev424}/verifiers/v1/harnesses/mini_swe_agent/__init__.py +0 -0
  365. {verifiers-0.1.15.dev422 → verifiers-0.1.15.dev424}/verifiers/v1/harnesses/mini_swe_agent/program.py +0 -0
  366. {verifiers-0.1.15.dev422 → verifiers-0.1.15.dev424}/verifiers/v1/harnesses/null/__init__.py +0 -0
  367. {verifiers-0.1.15.dev422 → verifiers-0.1.15.dev424}/verifiers/v1/harnesses/null/program.py +0 -0
  368. {verifiers-0.1.15.dev422 → verifiers-0.1.15.dev424}/verifiers/v1/harnesses/rlm/__init__.py +0 -0
  369. {verifiers-0.1.15.dev422 → verifiers-0.1.15.dev424}/verifiers/v1/harnesses/terminus_2/__init__.py +0 -0
  370. {verifiers-0.1.15.dev422 → verifiers-0.1.15.dev424}/verifiers/v1/harnesses/terminus_2/program.py +0 -0
  371. {verifiers-0.1.15.dev422 → verifiers-0.1.15.dev424}/verifiers/v1/interception/__init__.py +0 -0
  372. {verifiers-0.1.15.dev422 → verifiers-0.1.15.dev424}/verifiers/v1/interception/pool.py +0 -0
  373. {verifiers-0.1.15.dev422 → verifiers-0.1.15.dev424}/verifiers/v1/judge.py +0 -0
  374. {verifiers-0.1.15.dev422 → verifiers-0.1.15.dev424}/verifiers/v1/judges/__init__.py +0 -0
  375. {verifiers-0.1.15.dev422 → verifiers-0.1.15.dev424}/verifiers/v1/judges/reference.py +0 -0
  376. {verifiers-0.1.15.dev422 → verifiers-0.1.15.dev424}/verifiers/v1/judges/reference.txt +0 -0
  377. {verifiers-0.1.15.dev422 → verifiers-0.1.15.dev424}/verifiers/v1/judges/rubric.py +0 -0
  378. {verifiers-0.1.15.dev422 → verifiers-0.1.15.dev424}/verifiers/v1/judges/rubric.txt +0 -0
  379. {verifiers-0.1.15.dev422 → verifiers-0.1.15.dev424}/verifiers/v1/legacy.py +0 -0
  380. {verifiers-0.1.15.dev422 → verifiers-0.1.15.dev424}/verifiers/v1/loaders.py +0 -0
  381. {verifiers-0.1.15.dev422 → verifiers-0.1.15.dev424}/verifiers/v1/mcp/__init__.py +0 -0
  382. {verifiers-0.1.15.dev422 → verifiers-0.1.15.dev424}/verifiers/v1/mcp/launch.py +0 -0
  383. {verifiers-0.1.15.dev422 → verifiers-0.1.15.dev424}/verifiers/v1/mcp/server.py +0 -0
  384. {verifiers-0.1.15.dev422 → verifiers-0.1.15.dev424}/verifiers/v1/mcp/toolset.py +0 -0
  385. {verifiers-0.1.15.dev422 → verifiers-0.1.15.dev424}/verifiers/v1/mcp/user.py +0 -0
  386. {verifiers-0.1.15.dev422 → verifiers-0.1.15.dev424}/verifiers/v1/retries.py +0 -0
  387. {verifiers-0.1.15.dev422 → verifiers-0.1.15.dev424}/verifiers/v1/runtimes/__init__.py +0 -0
  388. {verifiers-0.1.15.dev422 → verifiers-0.1.15.dev424}/verifiers/v1/runtimes/docker.py +0 -0
  389. {verifiers-0.1.15.dev422 → verifiers-0.1.15.dev424}/verifiers/v1/runtimes/limiters.py +0 -0
  390. {verifiers-0.1.15.dev422 → verifiers-0.1.15.dev424}/verifiers/v1/runtimes/subprocess.py +0 -0
  391. {verifiers-0.1.15.dev422 → verifiers-0.1.15.dev424}/verifiers/v1/scoring.py +0 -0
  392. {verifiers-0.1.15.dev422 → verifiers-0.1.15.dev424}/verifiers/v1/serve/__init__.py +0 -0
  393. {verifiers-0.1.15.dev422 → verifiers-0.1.15.dev424}/verifiers/v1/serve/client.py +0 -0
  394. {verifiers-0.1.15.dev422 → verifiers-0.1.15.dev424}/verifiers/v1/serve/pool.py +0 -0
  395. {verifiers-0.1.15.dev422 → verifiers-0.1.15.dev424}/verifiers/v1/serve/types.py +0 -0
  396. {verifiers-0.1.15.dev422 → verifiers-0.1.15.dev424}/verifiers/v1/state.py +0 -0
  397. {verifiers-0.1.15.dev422 → verifiers-0.1.15.dev424}/verifiers/v1/task.py +0 -0
  398. {verifiers-0.1.15.dev422 → verifiers-0.1.15.dev424}/verifiers/v1/taskset.py +0 -0
  399. {verifiers-0.1.15.dev422 → verifiers-0.1.15.dev424}/verifiers/v1/tasksets/__init__.py +0 -0
  400. {verifiers-0.1.15.dev422 → verifiers-0.1.15.dev424}/verifiers/v1/tasksets/harbor/__init__.py +0 -0
  401. {verifiers-0.1.15.dev422 → verifiers-0.1.15.dev424}/verifiers/v1/tasksets/harbor/taskset.py +0 -0
  402. {verifiers-0.1.15.dev422 → verifiers-0.1.15.dev424}/verifiers/v1/tasksets/lean/__init__.py +0 -0
  403. {verifiers-0.1.15.dev422 → verifiers-0.1.15.dev424}/verifiers/v1/tasksets/lean/scoring.py +0 -0
  404. {verifiers-0.1.15.dev422 → verifiers-0.1.15.dev424}/verifiers/v1/tasksets/lean/taskset.py +0 -0
  405. {verifiers-0.1.15.dev422 → verifiers-0.1.15.dev424}/verifiers/v1/tasksets/textarena/__init__.py +0 -0
  406. {verifiers-0.1.15.dev422 → verifiers-0.1.15.dev424}/verifiers/v1/tasksets/textarena/taskset.py +0 -0
  407. {verifiers-0.1.15.dev422 → verifiers-0.1.15.dev424}/verifiers/v1/trace.py +0 -0
  408. {verifiers-0.1.15.dev422 → verifiers-0.1.15.dev424}/verifiers/v1/types.py +0 -0
  409. {verifiers-0.1.15.dev422 → verifiers-0.1.15.dev424}/verifiers/v1/utils/__init__.py +0 -0
  410. {verifiers-0.1.15.dev422 → verifiers-0.1.15.dev424}/verifiers/v1/utils/format.py +0 -0
  411. {verifiers-0.1.15.dev422 → verifiers-0.1.15.dev424}/verifiers/v1/utils/install.py +0 -0
  412. {verifiers-0.1.15.dev422 → verifiers-0.1.15.dev424}/verifiers/v1/utils/logging.py +0 -0
  413. {verifiers-0.1.15.dev422 → verifiers-0.1.15.dev424}/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.dev422
3
+ Version: 0.1.15.dev424
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
@@ -166,6 +166,7 @@ flash-attn = { FLASH_ATTENTION_SKIP_CUDA_BUILD = "TRUE" }
166
166
  vf-eval = "verifiers.scripts.eval:main"
167
167
  eval = "verifiers.v1.cli.eval.main:main"
168
168
  validate = "verifiers.v1.cli.validate:main"
169
+ debug = "verifiers.v1.cli.debug:main"
169
170
  serve = "verifiers.v1.cli.serve:main"
170
171
  init = "verifiers.v1.cli.init:main"
171
172
  vf-gepa = "verifiers.scripts.gepa:main"
@@ -33,12 +33,13 @@ def test_swe_debug_env_is_deprecated_subclass_not_alias():
33
33
  assert issubclass(SWEDebugEnv, SandboxDebugEnv)
34
34
  assert SandboxDebugRubric.__name__ == "SandboxDebugRubric"
35
35
 
36
- with pytest.warns(DeprecationWarning, match="use SandboxDebugEnv"):
36
+ with pytest.warns(DeprecationWarning, match="native v1 `debug` CLI") as warnings:
37
37
  env = SWEDebugEnv(
38
38
  DummySandboxTaskSet(),
39
39
  debug_step="command",
40
40
  debug_command="true",
41
41
  )
42
42
 
43
+ assert len(warnings) == 1
43
44
  assert isinstance(env, SandboxDebugEnv)
44
45
  assert env.labels == ["sandbox-debug"]
@@ -2,7 +2,8 @@
2
2
 
3
3
  import shlex
4
4
  import time
5
- from typing import Any, Literal
5
+ from typing import Any, ClassVar, Literal
6
+ from warnings import warn
6
7
 
7
8
  import verifiers as vf
8
9
  from prime_sandboxes import CreateSandboxRequest
@@ -38,6 +39,8 @@ class SandboxDebugEnv(SandboxMixin, vf.MultiTurnEnv):
38
39
  - exit: optionally run task tests and score them
39
40
  """
40
41
 
42
+ emit_deprecation_warning: ClassVar[bool] = True
43
+
41
44
  def __init__(
42
45
  self,
43
46
  taskset: SandboxTaskSet,
@@ -59,6 +62,12 @@ class SandboxDebugEnv(SandboxMixin, vf.MultiTurnEnv):
59
62
  output_tail_chars: int = 2000,
60
63
  **sandbox_kwargs: Any,
61
64
  ):
65
+ if self.emit_deprecation_warning:
66
+ warn(
67
+ "SandboxDebugEnv is deprecated; use the native v1 `debug` CLI for v1 tasksets.",
68
+ DeprecationWarning,
69
+ stacklevel=2,
70
+ )
62
71
  if debug_step not in ("none", "gold_patch", "command", "script"):
63
72
  raise ValueError(f"Unsupported debug_step: {debug_step!r}")
64
73
  if debug_step == "command" and not debug_command:
@@ -11,7 +11,8 @@ class SWEDebugRubric(SandboxDebugRubric):
11
11
 
12
12
  def __init__(self, **kwargs: Any):
13
13
  warn(
14
- "SWEDebugRubric is deprecated; use SandboxDebugRubric.",
14
+ "SWEDebugRubric is deprecated with the composable debug envs; use the "
15
+ "native v1 `debug` CLI for v1 tasksets.",
15
16
  DeprecationWarning,
16
17
  stacklevel=2,
17
18
  )
@@ -21,9 +22,11 @@ class SWEDebugRubric(SandboxDebugRubric):
21
22
  class SWEDebugEnv(SandboxDebugEnv):
22
23
  """Deprecated wrapper for SandboxDebugEnv."""
23
24
 
25
+ emit_deprecation_warning = False
26
+
24
27
  def __init__(self, *args: Any, **kwargs: Any):
25
28
  warn(
26
- "SWEDebugEnv is deprecated; use SandboxDebugEnv.",
29
+ "SWEDebugEnv is deprecated; use the native v1 `debug` CLI for v1 tasksets.",
27
30
  DeprecationWarning,
28
31
  stacklevel=2,
29
32
  )
@@ -767,8 +767,9 @@ pass `docker` / `prime` / `modal`.
767
767
 
768
768
  # CLI reference
769
769
 
770
- Three commands, all `uv run <cmd>`: **`eval`** (run + score a model), **`validate`** (model-free
771
- gold check), **`init`** (scaffold). They share a resolution layer:
770
+ Four commands, all `uv run <cmd>`: **`eval`** (run + score a model), **`validate`**
771
+ (model-free setup/gold checks), **`debug`** (setup + one shell action), **`init`**
772
+ (scaffold). They share a resolution layer:
772
773
 
773
774
  - **Positional id** — a leading bare token is the taskset id: `eval gsm8k-v1` == `eval --taskset.id
774
775
  gsm8k-v1` (for `init` it's the env name).
@@ -823,19 +824,24 @@ trace per line, appended as each rollout finishes — durable mid-run), and `eva
823
824
 
824
825
  ## `validate`
825
826
 
826
- Run each task's `validate` hook — a model-free check that the ground truth holds (the gold patch
827
- makes the tests pass, the verifier accepts the gold answer) in a runtime with the taskset's
828
- `setup` applied. No model, no harness.
827
+ Model-free checks that a task is sound. By default each task gets two independent
828
+ runtimes a **gold** check (the taskset's `setup` then its `validate` hook: the gold patch
829
+ makes the tests pass, the verifier accepts the gold answer) and a **setup-only** check —
830
+ reported as one aggregate row. Restrict to one check with `--only-gold` / `--only-setup`.
831
+ No model, no harness.
829
832
 
830
833
  ```bash
831
834
  uv run validate gsm8k-v1 -n 20 --runtime.type subprocess
835
+ uv run validate swebench-v1 -n 1 --runtime.type prime --only-setup
836
+ uv run validate swebench-v1 -n 1 --runtime.type prime --only-gold
832
837
  ```
833
838
 
834
839
  | flag | default | meaning |
835
840
  | --- | --- | --- |
836
841
  | `<taskset-id>` / `--taskset.id` | — | taskset to validate |
837
842
  | `--runtime.type` | `docker` | runtime for `setup` + `validate` (a gold check often needs the task's container) |
838
- | `--setup-timeout` / `--validate-timeout` | None | per-hook wall-clock caps |
843
+ | `--only-setup` / `--only-gold` | off | run just the setup-only or just the gold check (default: both) |
844
+ | `--timeout.setup` / `--timeout.total` | None | per-task wall-clock caps for `setup` and the `validate` hook |
839
845
  | `-n`/`--num-tasks`, `-s`/`--shuffle`, `-c`/`--max-concurrent` (128) | | task selection + concurrency |
840
846
  | `-v`/`--verbose`, `--no-rich` | | logging / disable the dashboard |
841
847
 
@@ -845,6 +851,29 @@ captured as a result row (one bad task is data, not a crash) with reason `valid`
845
851
  default runtime is **docker** (unlike eval's subprocess), and a subprocess runtime against a
846
852
  `NEEDS_CONTAINER` / image-bearing taskset aborts with a clear error.
847
853
 
854
+ ## `debug`
855
+
856
+ Set up each selected task, run one explicit shell action, and save the trace. This is for
857
+ inspecting task state without a model: it does not apply gold patches, call `validate`, run
858
+ `finalize`, or score rewards.
859
+
860
+ ```bash
861
+ uv run debug swebench-v1 -n 1 --runtime.type prime --command 'pwd; git status --short | head'
862
+ uv run debug swebench-v1 -n 1 --runtime.type prime --script-path ./inspect.sh
863
+ ```
864
+
865
+ | flag | default | meaning |
866
+ | --- | --- | --- |
867
+ | `<taskset-id>` / `--taskset.id` | — | taskset to debug |
868
+ | `--command` / `--script-path` | — | exactly one inline command or host script to upload and execute |
869
+ | `--runtime.type` | `docker` | runtime for setup + the debug action |
870
+ | `--timeout.setup` / `--timeout.total` | None | per-task wall-clock caps for `setup` and the debug action |
871
+ | `-n`/`--num-tasks`, `-s`/`--shuffle`, `-c`/`--max-concurrent` (128) | | task selection + concurrency |
872
+ | `-o`/`--output-dir` | fresh debug run dir | where `config.toml` and `results.jsonl` are written |
873
+
874
+ Each saved trace has command/script metadata, exit status, elapsed time, timeout/error fields,
875
+ and the full stdout/stderr under `trace.info["debug"]`.
876
+
848
877
  ## `init`
849
878
 
850
879
  Scaffold a new v1 environment package under `--path` (default `./environments`), following the
@@ -41,7 +41,8 @@ uv sync --python 3.12 --extra harbor
41
41
  ```bash
42
42
  uv run init my-task-v1 # scaffold a new environment (--add-tool/--add-user/--add-harness)
43
43
  uv run eval gsm8k-v1 -n 5 -r 3 # single-turn math; default harness; subprocess runtime
44
- uv run validate gsm8k-v1 -n 5 # model-free: run each task's gold check (the `validate` hook)
44
+ uv run validate gsm8k-v1 -n 5 # model-free gold + setup-only checks (--only-gold / --only-setup)
45
+ uv run debug gsm8k-v1 -n 1 --command 'pwd' # setup, run one shell action, save traces
45
46
  uv run eval -h # typed help (+ the local example tasksets/harnesses)
46
47
  ```
47
48
 
@@ -12,7 +12,7 @@ from verifiers.v1.clients import (
12
12
  BaseClientConfig,
13
13
  Client,
14
14
  ClientConfig,
15
- RolloutContext,
15
+ ModelContext,
16
16
  resolve_client,
17
17
  )
18
18
  from verifiers.v1.decorators import group_reward, metric, reward, stop, tool
@@ -188,7 +188,7 @@ __all__ = [
188
188
  "BaseConfig",
189
189
  "Harness",
190
190
  "HarnessConfig",
191
- "RolloutContext",
191
+ "ModelContext",
192
192
  "Runtime",
193
193
  "RuntimeConfig",
194
194
  "ProgramResult",
@@ -0,0 +1,327 @@
1
+ """The debug entrypoint: setup tasks, run one shell action, and persist traces."""
2
+
3
+ import asyncio
4
+ import contextlib
5
+ import logging
6
+ import random
7
+ import shlex
8
+ import signal
9
+ import sys
10
+ import time
11
+ import traceback
12
+ from collections.abc import Awaitable
13
+ from pathlib import Path
14
+ from typing import Any
15
+ from uuid import uuid4
16
+
17
+ from pydantic_config import cli
18
+
19
+ import verifiers.v1 as vf
20
+ from verifiers.v1.cli.output import append_trace, save_config
21
+ from verifiers.v1.cli.resolve import (
22
+ extract_id,
23
+ references_config_file,
24
+ with_positional_taskset,
25
+ )
26
+ from verifiers.v1.configs.debug import DebugConfig
27
+ from verifiers.v1.decorators import invoke
28
+ from verifiers.v1.env import resolve_runtime_config
29
+ from verifiers.v1.runtimes import ProgramResult, Runtime, make_runtime
30
+ from verifiers.v1.state import state_cls
31
+ from verifiers.v1.taskset import Taskset
32
+ from verifiers.v1.trace import Error, Trace
33
+ from verifiers.v1.utils.logging import setup_logging
34
+
35
+ logger = logging.getLogger(__name__)
36
+
37
+ USAGE = (
38
+ "usage: uv run debug [<taskset-id>] (--command <cmd> | --script-path <path>) "
39
+ "[--runtime.type subprocess] [options] [@ file.toml]\n"
40
+ " runs setup, then one command or uploaded host script, and saves traces"
41
+ )
42
+
43
+
44
+ def _narrow(argv: list[str]) -> type[DebugConfig]:
45
+ """`DebugConfig` with `taskset` narrowed to the config type of the id on the CLI."""
46
+ taskset_id = extract_id(argv, "taskset")
47
+ if not taskset_id:
48
+ return DebugConfig
49
+ ftype = vf.taskset_config_type(taskset_id)
50
+ return type(
51
+ DebugConfig.__name__,
52
+ (DebugConfig,),
53
+ {"__annotations__": {"taskset": ftype}, "taskset": ftype(id=taskset_id)},
54
+ )
55
+
56
+
57
+ def output_path(config: DebugConfig) -> Path:
58
+ if config.output_dir is not None:
59
+ return config.output_dir
60
+ return Path("outputs") / f"{config.taskset.name}--debug" / config.uuid
61
+
62
+
63
+ def task_info(task) -> dict[str, Any]:
64
+ return {"idx": task.idx, "name": task.name, "workdir": task.workdir}
65
+
66
+
67
+ def runtime_info(runtime: Runtime) -> dict[str, Any]:
68
+ return {
69
+ "type": runtime.type,
70
+ "name": runtime.name,
71
+ "descriptor": runtime.descriptor,
72
+ }
73
+
74
+
75
+ def result_info(result: ProgramResult, start: float) -> dict[str, Any]:
76
+ ok = result.exit_code == 0
77
+ return {
78
+ "ok": ok,
79
+ "reason": "pass" if ok else "nonzero_exit",
80
+ "exit_code": result.exit_code,
81
+ "elapsed": round(time.time() - start, 2),
82
+ "stdout": result.stdout or "",
83
+ "stderr": result.stderr or "",
84
+ }
85
+
86
+
87
+ def error_info(
88
+ error: BaseException,
89
+ start: float,
90
+ timeout: float | None,
91
+ stage: str,
92
+ ) -> dict[str, Any]:
93
+ if isinstance(error, asyncio.TimeoutError):
94
+ message = (
95
+ f"{stage} timed out after {timeout}s"
96
+ if timeout is not None
97
+ else f"{stage} timed out"
98
+ )
99
+ reason = "timeout"
100
+ elif isinstance(error, asyncio.CancelledError):
101
+ message = f"{stage} cancelled"
102
+ reason = "cancelled"
103
+ else:
104
+ message = str(error)
105
+ reason = "error"
106
+ return {
107
+ "ok": False,
108
+ "reason": reason,
109
+ "exit_code": None,
110
+ "elapsed": round(time.time() - start, 2),
111
+ "error": message,
112
+ "error_type": type(error).__name__,
113
+ "stdout": "",
114
+ "stderr": "",
115
+ }
116
+
117
+
118
+ def capture_trace_error(trace: Trace, error: BaseException) -> None:
119
+ if isinstance(error, Exception):
120
+ trace.capture_error(error)
121
+ return
122
+ trace.errors.append(
123
+ Error(
124
+ type=type(error).__name__,
125
+ message=str(error),
126
+ traceback=traceback.format_exc(),
127
+ )
128
+ )
129
+ trace.stop("error")
130
+
131
+
132
+ def record_debug_error(
133
+ trace: Trace,
134
+ debug: dict[str, Any],
135
+ runtime: Runtime,
136
+ error: BaseException,
137
+ setup_timeout: float | None,
138
+ action_timeout: float | None,
139
+ ) -> None:
140
+ if not trace.timing.setup.end:
141
+ trace.timing.setup.end = time.time()
142
+ if trace.timing.generation.start and not trace.timing.generation.end:
143
+ trace.timing.generation.end = time.time()
144
+ in_action = bool(trace.timing.generation.start)
145
+ stage = "debug action" if in_action else "setup"
146
+ timeout = action_timeout if in_action else setup_timeout
147
+ error_start = (
148
+ trace.timing.generation.start if in_action else trace.timing.setup.start
149
+ )
150
+ debug.update(error_info(error, error_start, timeout, stage))
151
+ debug.setdefault("runtime", runtime_info(runtime))
152
+ capture_trace_error(trace, error)
153
+
154
+
155
+ def record_action_failure(trace: Trace, debug: dict[str, Any]) -> None:
156
+ message = debug.get("error") or f"debug action failed: {debug['reason']}"
157
+ trace.errors.append(
158
+ Error(
159
+ type=debug.get("error_type") or "DebugActionError",
160
+ message=str(message),
161
+ traceback=None,
162
+ )
163
+ )
164
+
165
+
166
+ async def run_timed(
167
+ action: Awaitable[ProgramResult], config: DebugConfig
168
+ ) -> dict[str, Any]:
169
+ """Run the whole debug action under one `--timeout.total` budget."""
170
+ start = time.time()
171
+ try:
172
+ result = await asyncio.wait_for(action, config.timeout.total)
173
+ except Exception as e:
174
+ return error_info(e, start, config.timeout.total, "debug action")
175
+ return result_info(result, start)
176
+
177
+
178
+ async def run_action(runtime: Runtime, config: DebugConfig) -> dict[str, Any]:
179
+ if config.command is not None:
180
+ return {
181
+ "action": "command",
182
+ "command": config.command,
183
+ **(await run_timed(runtime.run(["sh", "-lc", config.command], {}), config)),
184
+ }
185
+ assert config.script_path is not None
186
+ # /tmp keyed by the (run-unique) runtime name: outside the task workdir so the script
187
+ # doesn't show up in the repo state being inspected, and never shared between runs on
188
+ # the subprocess runtime, where an absolute path is a host path.
189
+ remote_path = f"/tmp/{runtime.name}-script.sh"
190
+ quoted = shlex.quote(remote_path)
191
+ command = f"chmod +x {quoted} && {quoted}"
192
+
193
+ async def upload_and_run() -> ProgramResult:
194
+ await runtime.write(remote_path, config.script_path.read_bytes())
195
+ return await runtime.run(["sh", "-lc", command], {})
196
+
197
+ return {
198
+ "action": "script",
199
+ "script_path": str(config.script_path),
200
+ "remote_script_path": remote_path,
201
+ "command": command,
202
+ **(await run_timed(upload_and_run(), config)),
203
+ }
204
+
205
+
206
+ async def debug_task(taskset: Taskset, task, config: DebugConfig) -> tuple[Trace, bool]:
207
+ trace = Trace(task=task, state=state_cls(type(taskset))())
208
+ debug = {
209
+ "task": task_info(task),
210
+ "action": "command" if config.command is not None else "script",
211
+ "ok": False,
212
+ "reason": "not_run",
213
+ }
214
+ cancelled = False
215
+ runtime = make_runtime(
216
+ resolve_runtime_config(config.runtime, task),
217
+ name=f"debug-{task.idx}-{uuid4().hex[:8]}",
218
+ )
219
+ setup_timeout = (
220
+ config.timeout.setup if config.timeout.setup is not None else task.timeout.setup
221
+ )
222
+ try:
223
+ trace.timing.setup.start = time.time()
224
+ await runtime.start()
225
+ debug["runtime"] = runtime_info(runtime)
226
+ await asyncio.wait_for(
227
+ invoke(taskset.setup, {"task": task, "trace": trace, "runtime": runtime}),
228
+ setup_timeout,
229
+ )
230
+ trace.timing.setup.end = time.time()
231
+
232
+ trace.timing.generation.start = time.time()
233
+ debug.update(await run_action(runtime, config))
234
+ trace.timing.generation.end = time.time()
235
+ if not debug.get("ok"):
236
+ record_action_failure(trace, debug)
237
+ trace.stop(str(debug["reason"]))
238
+ except asyncio.CancelledError as e:
239
+ cancelled = True
240
+ record_debug_error(
241
+ trace, debug, runtime, e, setup_timeout, config.timeout.total
242
+ )
243
+ except Exception as e:
244
+ record_debug_error(
245
+ trace, debug, runtime, e, setup_timeout, config.timeout.total
246
+ )
247
+ finally:
248
+ trace.info["debug"] = debug
249
+ try:
250
+ await runtime.stop()
251
+ except asyncio.CancelledError:
252
+ # a task cancellation delivered mid-stop would abort before the caller can
253
+ # persist the trace — absorb it here; the caller re-raises after appending
254
+ cancelled = True
255
+ except Exception:
256
+ logger.warning("runtime teardown failed (task %s)", task.idx, exc_info=True)
257
+ return trace, cancelled
258
+
259
+
260
+ async def run_debug(config: DebugConfig) -> list[Trace]:
261
+ taskset = vf.load_taskset(config.taskset)
262
+ tasks = taskset.load_tasks()
263
+ if config.shuffle:
264
+ random.Random(0).shuffle(tasks)
265
+ if config.num_tasks is not None:
266
+ tasks = tasks[: config.num_tasks]
267
+ if isinstance(config.runtime, vf.SubprocessConfig) and (
268
+ taskset.NEEDS_CONTAINER or any(t.image for t in tasks)
269
+ ):
270
+ raise SystemExit(
271
+ "taskset needs a container runtime to debug - pass --runtime.type docker (or prime)"
272
+ )
273
+
274
+ out = output_path(config)
275
+ save_config(config, out)
276
+ logger.info(
277
+ "debugging %d task(s) from %s on the %s runtime",
278
+ len(tasks),
279
+ config.name,
280
+ config.runtime.type,
281
+ )
282
+ logger.info("results: %s", out)
283
+
284
+ sem = asyncio.Semaphore(config.max_concurrent) if config.max_concurrent else None
285
+ write_lock = asyncio.Lock()
286
+
287
+ async def one(task) -> Trace:
288
+ async with sem or contextlib.nullcontext():
289
+ trace, cancelled = await debug_task(taskset, task, config)
290
+ await append_trace(out, trace, write_lock)
291
+ info = trace.info["debug"]
292
+ detail = f" - {info['error']}" if info.get("error") else ""
293
+ logger.info(
294
+ "idx=%s ok=%s reason=%s%s",
295
+ task.idx,
296
+ info["ok"],
297
+ info["reason"],
298
+ detail,
299
+ )
300
+ if cancelled:
301
+ raise asyncio.CancelledError
302
+ return trace
303
+
304
+ return await asyncio.gather(*(one(task) for task in tasks))
305
+
306
+
307
+ def main(argv: list[str] | None = None) -> None:
308
+ argv = with_positional_taskset(list(sys.argv[1:]) if argv is None else list(argv))
309
+
310
+ if not argv or any(arg in ("-h", "--help") for arg in argv):
311
+ print(USAGE)
312
+ sys.argv = [sys.argv[0], "--help"]
313
+ cli(_narrow(argv))
314
+ return
315
+ if not extract_id(argv, "taskset") and not references_config_file(argv):
316
+ raise SystemExit(USAGE)
317
+
318
+ config_type = _narrow(argv)
319
+ sys.argv = [sys.argv[0], *argv]
320
+ config = cli(config_type)
321
+ setup_logging("DEBUG" if config.verbose else "INFO")
322
+ signal.signal(signal.SIGTERM, lambda *_: (_ for _ in ()).throw(KeyboardInterrupt()))
323
+ asyncio.run(run_debug(config))
324
+
325
+
326
+ if __name__ == "__main__":
327
+ main()
@@ -6,7 +6,7 @@ import logging
6
6
  import random
7
7
  import time
8
8
 
9
- from verifiers.v1.clients import RolloutContext, resolve_client
9
+ from verifiers.v1.clients import ModelContext, resolve_client
10
10
  from verifiers.v1.configs.eval import EvalConfig
11
11
  from verifiers.v1.cli.eval import resume
12
12
  from verifiers.v1.cli.dashboard import dashboard
@@ -29,7 +29,7 @@ async def run_eval(env: Environment, config: EvalConfig) -> list[Trace]:
29
29
  if config.shuffle:
30
30
  random.Random(_SHUFFLE_SEED).shuffle(tasks)
31
31
  tasks = tasks if config.num_tasks is None else tasks[: config.num_tasks]
32
- ctx = RolloutContext(client=client, model=config.model, sampling=config.sampling)
32
+ ctx = ModelContext(client=client, model=config.model, sampling=config.sampling)
33
33
  # One episode of `num_rollouts` rollouts per task; the shared semaphore bounds total
34
34
  # concurrent rollouts (across episodes), so group rewards still see their whole episode.
35
35
  semaphore = (
@@ -192,7 +192,7 @@ class {prefix}Harness(vf.Harness[{prefix}HarnessConfig]):
192
192
 
193
193
  async def launch(
194
194
  self,
195
- ctx: vf.RolloutContext,
195
+ ctx: vf.ModelContext,
196
196
  trace: vf.Trace,
197
197
  runtime: vf.Runtime,
198
198
  endpoint: str,
@@ -15,10 +15,11 @@ import asyncio
15
15
  from pathlib import Path
16
16
 
17
17
  import tomli_w
18
- from pydantic import TypeAdapter
18
+ from pydantic import BaseModel, TypeAdapter
19
19
 
20
20
  from verifiers.v1.configs.eval import EvalConfig
21
21
  from verifiers.v1.trace import Trace
22
+ from verifiers.v1.utils.aio import run_shielded
22
23
 
23
24
 
24
25
  def output_path(config: EvalConfig) -> Path:
@@ -30,7 +31,7 @@ def output_path(config: EvalConfig) -> Path:
30
31
  return Path("outputs") / name / config.uuid
31
32
 
32
33
 
33
- def write_config(config: EvalConfig, results_dir: Path) -> Path:
34
+ def write_config(config: BaseModel, results_dir: Path) -> Path:
34
35
  """Write the run's resolved `config.toml` (re-readable via `@ config.toml`); return its
35
36
  path. mode="json" makes values TOML-friendly (Path -> str, etc.); exclude_none drops the
36
37
  nulls TOML can't represent."""
@@ -41,7 +42,7 @@ def write_config(config: EvalConfig, results_dir: Path) -> Path:
41
42
  return config_path
42
43
 
43
44
 
44
- def save_config(config: EvalConfig, results_dir: Path) -> None:
45
+ def save_config(config: BaseModel, results_dir: Path) -> None:
45
46
  """Set up the run's output dir: write `config.toml` and start a fresh (empty)
46
47
  `results.jsonl`. Call once up front, before traces start landing."""
47
48
  write_config(config, results_dir)
@@ -65,10 +66,6 @@ async def append_trace(results_dir: Path, trace: Trace, lock: asyncio.Lock) -> N
65
66
  async with lock:
66
67
  await asyncio.to_thread(write_trace, results_dir, trace)
67
68
 
68
- # Shield lock acquisition and the worker so finalized traces survive cancellation.
69
- persist_task = asyncio.create_task(persist())
70
- try:
71
- await asyncio.shield(persist_task)
72
- except asyncio.CancelledError:
73
- await persist_task
74
- raise
69
+ # Run lock acquisition and the worker to completion even under cancellation, so
70
+ # finalized traces are never lost mid-write (`run_shielded` re-raises the cancellation).
71
+ await run_shielded(persist())