verifiers 0.2.2.dev73__tar.gz → 0.2.2.dev75__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 (431) hide show
  1. {verifiers-0.2.2.dev73 → verifiers-0.2.2.dev75}/PKG-INFO +1 -1
  2. {verifiers-0.2.2.dev73 → verifiers-0.2.2.dev75}/tests/v1/test_judges.py +1 -1
  3. {verifiers-0.2.2.dev73 → verifiers-0.2.2.dev75}/tests/v1/test_trace.py +6 -1
  4. {verifiers-0.2.2.dev73 → verifiers-0.2.2.dev75}/verifiers/v1/agent.py +2 -8
  5. {verifiers-0.2.2.dev73 → verifiers-0.2.2.dev75}/verifiers/v1/cli/dashboard/eval.py +6 -4
  6. {verifiers-0.2.2.dev73 → verifiers-0.2.2.dev75}/verifiers/v1/envs/agentic_judge/env.py +2 -1
  7. {verifiers-0.2.2.dev73 → verifiers-0.2.2.dev75}/verifiers/v1/harness.py +8 -1
  8. {verifiers-0.2.2.dev73 → verifiers-0.2.2.dev75}/verifiers/v1/runtimes/__init__.py +19 -0
  9. {verifiers-0.2.2.dev73 → verifiers-0.2.2.dev75}/verifiers/v1/runtimes/base.py +36 -2
  10. {verifiers-0.2.2.dev73 → verifiers-0.2.2.dev75}/verifiers/v1/runtimes/docker/__init__.py +1 -1
  11. {verifiers-0.2.2.dev73 → verifiers-0.2.2.dev75}/verifiers/v1/runtimes/modal.py +1 -1
  12. {verifiers-0.2.2.dev73 → verifiers-0.2.2.dev75}/verifiers/v1/runtimes/prime.py +1 -1
  13. {verifiers-0.2.2.dev73 → verifiers-0.2.2.dev75}/verifiers/v1/runtimes/subprocess.py +1 -1
  14. {verifiers-0.2.2.dev73 → verifiers-0.2.2.dev75}/verifiers/v1/task.py +21 -11
  15. verifiers-0.2.2.dev75/verifiers/v1/tasksets/harbor/__init__.py +16 -0
  16. verifiers-0.2.2.dev75/verifiers/v1/tasksets/harbor/env.py +124 -0
  17. {verifiers-0.2.2.dev73 → verifiers-0.2.2.dev75}/verifiers/v1/tasksets/harbor/taskset.py +247 -51
  18. {verifiers-0.2.2.dev73 → verifiers-0.2.2.dev75}/verifiers/v1/trace.py +6 -5
  19. {verifiers-0.2.2.dev73 → verifiers-0.2.2.dev75}/verifiers/v1/utils/decorators.py +17 -1
  20. {verifiers-0.2.2.dev73 → verifiers-0.2.2.dev75}/verifiers/v1/utils/platform.py +11 -3
  21. verifiers-0.2.2.dev73/verifiers/v1/tasksets/harbor/__init__.py +0 -8
  22. {verifiers-0.2.2.dev73 → verifiers-0.2.2.dev75}/.gitignore +0 -0
  23. {verifiers-0.2.2.dev73 → verifiers-0.2.2.dev75}/LICENSE +0 -0
  24. {verifiers-0.2.2.dev73 → verifiers-0.2.2.dev75}/README.md +0 -0
  25. {verifiers-0.2.2.dev73 → verifiers-0.2.2.dev75}/pyproject.toml +0 -0
  26. {verifiers-0.2.2.dev73 → verifiers-0.2.2.dev75}/tests/__init__.py +0 -0
  27. {verifiers-0.2.2.dev73 → verifiers-0.2.2.dev75}/tests/conftest.py +0 -0
  28. {verifiers-0.2.2.dev73 → verifiers-0.2.2.dev75}/tests/test_browser_env.py +0 -0
  29. {verifiers-0.2.2.dev73 → verifiers-0.2.2.dev75}/tests/test_build_script.py +0 -0
  30. {verifiers-0.2.2.dev73 → verifiers-0.2.2.dev75}/tests/test_cli_agent_env.py +0 -0
  31. {verifiers-0.2.2.dev73 → verifiers-0.2.2.dev75}/tests/test_client_auth_errors.py +0 -0
  32. {verifiers-0.2.2.dev73 → verifiers-0.2.2.dev75}/tests/test_client_config.py +0 -0
  33. {verifiers-0.2.2.dev73 → verifiers-0.2.2.dev75}/tests/test_client_multimodal_types.py +0 -0
  34. {verifiers-0.2.2.dev73 → verifiers-0.2.2.dev75}/tests/test_composable_env.py +0 -0
  35. {verifiers-0.2.2.dev73 → verifiers-0.2.2.dev75}/tests/test_context_token_metrics.py +0 -0
  36. {verifiers-0.2.2.dev73 → verifiers-0.2.2.dev75}/tests/test_decorator_ranks.py +0 -0
  37. {verifiers-0.2.2.dev73 → verifiers-0.2.2.dev75}/tests/test_endpoint_registry.py +0 -0
  38. {verifiers-0.2.2.dev73 → verifiers-0.2.2.dev75}/tests/test_env_group.py +0 -0
  39. {verifiers-0.2.2.dev73 → verifiers-0.2.2.dev75}/tests/test_env_server.py +0 -0
  40. {verifiers-0.2.2.dev73 → verifiers-0.2.2.dev75}/tests/test_environment.py +0 -0
  41. {verifiers-0.2.2.dev73 → verifiers-0.2.2.dev75}/tests/test_environment_extra.py +0 -0
  42. {verifiers-0.2.2.dev73 → verifiers-0.2.2.dev75}/tests/test_error_chain.py +0 -0
  43. {verifiers-0.2.2.dev73 → verifiers-0.2.2.dev75}/tests/test_eval_display.py +0 -0
  44. {verifiers-0.2.2.dev73 → verifiers-0.2.2.dev75}/tests/test_eval_utils.py +0 -0
  45. {verifiers-0.2.2.dev73 → verifiers-0.2.2.dev75}/tests/test_gepa_cli.py +0 -0
  46. {verifiers-0.2.2.dev73 → verifiers-0.2.2.dev75}/tests/test_gepa_utils.py +0 -0
  47. {verifiers-0.2.2.dev73 → verifiers-0.2.2.dev75}/tests/test_gym_env.py +0 -0
  48. {verifiers-0.2.2.dev73 → verifiers-0.2.2.dev75}/tests/test_harbor_env_mcp.py +0 -0
  49. {verifiers-0.2.2.dev73 → verifiers-0.2.2.dev75}/tests/test_imports.py +0 -0
  50. {verifiers-0.2.2.dev73 → verifiers-0.2.2.dev75}/tests/test_init_script.py +0 -0
  51. {verifiers-0.2.2.dev73 → verifiers-0.2.2.dev75}/tests/test_install_utils.py +0 -0
  52. {verifiers-0.2.2.dev73 → verifiers-0.2.2.dev75}/tests/test_interception_utils.py +0 -0
  53. {verifiers-0.2.2.dev73 → verifiers-0.2.2.dev75}/tests/test_logging.py +0 -0
  54. {verifiers-0.2.2.dev73 → verifiers-0.2.2.dev75}/tests/test_math_rubric.py +0 -0
  55. {verifiers-0.2.2.dev73 → verifiers-0.2.2.dev75}/tests/test_maybe_think_parser.py +0 -0
  56. {verifiers-0.2.2.dev73 → verifiers-0.2.2.dev75}/tests/test_message_utils.py +0 -0
  57. {verifiers-0.2.2.dev73 → verifiers-0.2.2.dev75}/tests/test_message_utils_multimodal.py +0 -0
  58. {verifiers-0.2.2.dev73 → verifiers-0.2.2.dev75}/tests/test_multiturn_env.py +0 -0
  59. {verifiers-0.2.2.dev73 → verifiers-0.2.2.dev75}/tests/test_nemorl_client.py +0 -0
  60. {verifiers-0.2.2.dev73 → verifiers-0.2.2.dev75}/tests/test_openai_chat_completions_token_client.py +0 -0
  61. {verifiers-0.2.2.dev73 → verifiers-0.2.2.dev75}/tests/test_openai_responses_client.py +0 -0
  62. {verifiers-0.2.2.dev73 → verifiers-0.2.2.dev75}/tests/test_opencode_rlm_env.py +0 -0
  63. {verifiers-0.2.2.dev73 → verifiers-0.2.2.dev75}/tests/test_openenv_client.py +0 -0
  64. {verifiers-0.2.2.dev73 → verifiers-0.2.2.dev75}/tests/test_parser.py +0 -0
  65. {verifiers-0.2.2.dev73 → verifiers-0.2.2.dev75}/tests/test_path_utils.py +0 -0
  66. {verifiers-0.2.2.dev73 → verifiers-0.2.2.dev75}/tests/test_per_turn_timing.py +0 -0
  67. {verifiers-0.2.2.dev73 → verifiers-0.2.2.dev75}/tests/test_pricing_utils.py +0 -0
  68. {verifiers-0.2.2.dev73 → verifiers-0.2.2.dev75}/tests/test_prime_plugin.py +0 -0
  69. {verifiers-0.2.2.dev73 → verifiers-0.2.2.dev75}/tests/test_renderer_client.py +0 -0
  70. {verifiers-0.2.2.dev73 → verifiers-0.2.2.dev75}/tests/test_renderer_e2e.py +0 -0
  71. {verifiers-0.2.2.dev73 → verifiers-0.2.2.dev75}/tests/test_rlm_composable_env.py +0 -0
  72. {verifiers-0.2.2.dev73 → verifiers-0.2.2.dev75}/tests/test_rubric.py +0 -0
  73. {verifiers-0.2.2.dev73 → verifiers-0.2.2.dev75}/tests/test_rubric_group.py +0 -0
  74. {verifiers-0.2.2.dev73 → verifiers-0.2.2.dev75}/tests/test_sandbox_debug_env.py +0 -0
  75. {verifiers-0.2.2.dev73 → verifiers-0.2.2.dev75}/tests/test_sandbox_env.py +0 -0
  76. {verifiers-0.2.2.dev73 → verifiers-0.2.2.dev75}/tests/test_sandbox_mixin.py +0 -0
  77. {verifiers-0.2.2.dev73 → verifiers-0.2.2.dev75}/tests/test_save_utils.py +0 -0
  78. {verifiers-0.2.2.dev73 → verifiers-0.2.2.dev75}/tests/test_setup_script.py +0 -0
  79. {verifiers-0.2.2.dev73 → verifiers-0.2.2.dev75}/tests/test_singleturn_env.py +0 -0
  80. {verifiers-0.2.2.dev73 → verifiers-0.2.2.dev75}/tests/test_stateful_tool_env.py +0 -0
  81. {verifiers-0.2.2.dev73 → verifiers-0.2.2.dev75}/tests/test_think_parser.py +0 -0
  82. {verifiers-0.2.2.dev73 → verifiers-0.2.2.dev75}/tests/test_tool_env.py +0 -0
  83. {verifiers-0.2.2.dev73 → verifiers-0.2.2.dev75}/tests/test_tool_utils.py +0 -0
  84. {verifiers-0.2.2.dev73 → verifiers-0.2.2.dev75}/tests/test_trajectory_processing.py +0 -0
  85. {verifiers-0.2.2.dev73 → verifiers-0.2.2.dev75}/tests/test_tui_info_formatting.py +0 -0
  86. {verifiers-0.2.2.dev73 → verifiers-0.2.2.dev75}/tests/test_types.py +0 -0
  87. {verifiers-0.2.2.dev73 → verifiers-0.2.2.dev75}/tests/test_xml_parser.py +0 -0
  88. {verifiers-0.2.2.dev73 → verifiers-0.2.2.dev75}/tests/v1/conftest.py +0 -0
  89. {verifiers-0.2.2.dev73 → verifiers-0.2.2.dev75}/tests/v1/fixtures/counter_tool_v1.py +0 -0
  90. {verifiers-0.2.2.dev73 → verifiers-0.2.2.dev75}/tests/v1/fixtures/duet_v1.py +0 -0
  91. {verifiers-0.2.2.dev73 → verifiers-0.2.2.dev75}/tests/v1/fixtures/echo_acp_resume_v1.py +0 -0
  92. {verifiers-0.2.2.dev73 → verifiers-0.2.2.dev75}/tests/v1/fixtures/echo_agentic_v1.py +0 -0
  93. {verifiers-0.2.2.dev73 → verifiers-0.2.2.dev75}/tests/v1/fixtures/echo_multi_v0.py +0 -0
  94. {verifiers-0.2.2.dev73 → verifiers-0.2.2.dev75}/tests/v1/fixtures/echo_tool_v1.py +0 -0
  95. {verifiers-0.2.2.dev73 → verifiers-0.2.2.dev75}/tests/v1/fixtures/echo_user_sim_v1.py +0 -0
  96. {verifiers-0.2.2.dev73 → verifiers-0.2.2.dev75}/tests/v1/fixtures/echo_v0.py +0 -0
  97. {verifiers-0.2.2.dev73 → verifiers-0.2.2.dev75}/tests/v1/fixtures/echo_v1.py +0 -0
  98. {verifiers-0.2.2.dev73 → verifiers-0.2.2.dev75}/tests/v1/fixtures/pyproject.toml +0 -0
  99. {verifiers-0.2.2.dev73 → verifiers-0.2.2.dev75}/tests/v1/fixtures/tool_response_image_v1.py +0 -0
  100. {verifiers-0.2.2.dev73 → verifiers-0.2.2.dev75}/tests/v1/test_color_codeword_tasks.py +0 -0
  101. {verifiers-0.2.2.dev73 → verifiers-0.2.2.dev75}/tests/v1/test_configs.py +0 -0
  102. {verifiers-0.2.2.dev73 → verifiers-0.2.2.dev75}/tests/v1/test_e2e.py +0 -0
  103. {verifiers-0.2.2.dev73 → verifiers-0.2.2.dev75}/tests/v1/test_envs.py +0 -0
  104. {verifiers-0.2.2.dev73 → verifiers-0.2.2.dev75}/tests/v1/test_graph.py +0 -0
  105. {verifiers-0.2.2.dev73 → verifiers-0.2.2.dev75}/tests/v1/test_legacy.py +0 -0
  106. {verifiers-0.2.2.dev73 → verifiers-0.2.2.dev75}/tests/v1/test_scoring.py +0 -0
  107. {verifiers-0.2.2.dev73 → verifiers-0.2.2.dev75}/tests/v1/test_taskset.py +0 -0
  108. {verifiers-0.2.2.dev73 → verifiers-0.2.2.dev75}/verifiers/__init__.py +0 -0
  109. {verifiers-0.2.2.dev73 → verifiers-0.2.2.dev75}/verifiers/cli/__init__.py +0 -0
  110. {verifiers-0.2.2.dev73 → verifiers-0.2.2.dev75}/verifiers/cli/commands/__init__.py +0 -0
  111. {verifiers-0.2.2.dev73 → verifiers-0.2.2.dev75}/verifiers/cli/commands/build.py +0 -0
  112. {verifiers-0.2.2.dev73 → verifiers-0.2.2.dev75}/verifiers/cli/commands/eval.py +0 -0
  113. {verifiers-0.2.2.dev73 → verifiers-0.2.2.dev75}/verifiers/cli/commands/gepa.py +0 -0
  114. {verifiers-0.2.2.dev73 → verifiers-0.2.2.dev75}/verifiers/cli/commands/init.py +0 -0
  115. {verifiers-0.2.2.dev73 → verifiers-0.2.2.dev75}/verifiers/cli/commands/install.py +0 -0
  116. {verifiers-0.2.2.dev73 → verifiers-0.2.2.dev75}/verifiers/cli/commands/setup.py +0 -0
  117. {verifiers-0.2.2.dev73 → verifiers-0.2.2.dev75}/verifiers/cli/plugins/__init__.py +0 -0
  118. {verifiers-0.2.2.dev73 → verifiers-0.2.2.dev75}/verifiers/cli/plugins/prime.py +0 -0
  119. {verifiers-0.2.2.dev73 → verifiers-0.2.2.dev75}/verifiers/cli/tui.py +0 -0
  120. {verifiers-0.2.2.dev73 → verifiers-0.2.2.dev75}/verifiers/clients/__init__.py +0 -0
  121. {verifiers-0.2.2.dev73 → verifiers-0.2.2.dev75}/verifiers/clients/anthropic_messages_client.py +0 -0
  122. {verifiers-0.2.2.dev73 → verifiers-0.2.2.dev75}/verifiers/clients/client.py +0 -0
  123. {verifiers-0.2.2.dev73 → verifiers-0.2.2.dev75}/verifiers/clients/nemorl_chat_completions_client.py +0 -0
  124. {verifiers-0.2.2.dev73 → verifiers-0.2.2.dev75}/verifiers/clients/openai_chat_completions_client.py +0 -0
  125. {verifiers-0.2.2.dev73 → verifiers-0.2.2.dev75}/verifiers/clients/openai_chat_completions_token_client.py +0 -0
  126. {verifiers-0.2.2.dev73 → verifiers-0.2.2.dev75}/verifiers/clients/openai_completions_client.py +0 -0
  127. {verifiers-0.2.2.dev73 → verifiers-0.2.2.dev75}/verifiers/clients/openai_responses_client.py +0 -0
  128. {verifiers-0.2.2.dev73 → verifiers-0.2.2.dev75}/verifiers/clients/renderer_client.py +0 -0
  129. {verifiers-0.2.2.dev73 → verifiers-0.2.2.dev75}/verifiers/decorators.py +0 -0
  130. {verifiers-0.2.2.dev73 → verifiers-0.2.2.dev75}/verifiers/envs/__init__.py +0 -0
  131. {verifiers-0.2.2.dev73 → verifiers-0.2.2.dev75}/verifiers/envs/env_group.py +0 -0
  132. {verifiers-0.2.2.dev73 → verifiers-0.2.2.dev75}/verifiers/envs/environment.py +0 -0
  133. {verifiers-0.2.2.dev73 → verifiers-0.2.2.dev75}/verifiers/envs/experimental/README.md +0 -0
  134. {verifiers-0.2.2.dev73 → verifiers-0.2.2.dev75}/verifiers/envs/experimental/__init__.py +0 -0
  135. {verifiers-0.2.2.dev73 → verifiers-0.2.2.dev75}/verifiers/envs/experimental/cli_agent_env.py +0 -0
  136. {verifiers-0.2.2.dev73 → verifiers-0.2.2.dev75}/verifiers/envs/experimental/composable/README.md +0 -0
  137. {verifiers-0.2.2.dev73 → verifiers-0.2.2.dev75}/verifiers/envs/experimental/composable/__init__.py +0 -0
  138. {verifiers-0.2.2.dev73 → verifiers-0.2.2.dev75}/verifiers/envs/experimental/composable/_filter.py +0 -0
  139. {verifiers-0.2.2.dev73 → verifiers-0.2.2.dev75}/verifiers/envs/experimental/composable/composable_env.py +0 -0
  140. {verifiers-0.2.2.dev73 → verifiers-0.2.2.dev75}/verifiers/envs/experimental/composable/harness.py +0 -0
  141. {verifiers-0.2.2.dev73 → verifiers-0.2.2.dev75}/verifiers/envs/experimental/composable/harnesses/__init__.py +0 -0
  142. {verifiers-0.2.2.dev73 → verifiers-0.2.2.dev75}/verifiers/envs/experimental/composable/harnesses/mini_swe_agent.py +0 -0
  143. {verifiers-0.2.2.dev73 → verifiers-0.2.2.dev75}/verifiers/envs/experimental/composable/harnesses/opencode.py +0 -0
  144. {verifiers-0.2.2.dev73 → verifiers-0.2.2.dev75}/verifiers/envs/experimental/composable/harnesses/prompt.txt +0 -0
  145. {verifiers-0.2.2.dev73 → verifiers-0.2.2.dev75}/verifiers/envs/experimental/composable/harnesses/rlm.py +0 -0
  146. {verifiers-0.2.2.dev73 → verifiers-0.2.2.dev75}/verifiers/envs/experimental/composable/sandbox_debug_env.py +0 -0
  147. {verifiers-0.2.2.dev73 → verifiers-0.2.2.dev75}/verifiers/envs/experimental/composable/swe_debug_env.py +0 -0
  148. {verifiers-0.2.2.dev73 → verifiers-0.2.2.dev75}/verifiers/envs/experimental/composable/task.py +0 -0
  149. {verifiers-0.2.2.dev73 → verifiers-0.2.2.dev75}/verifiers/envs/experimental/composable/tasksets/__init__.py +0 -0
  150. {verifiers-0.2.2.dev73 → verifiers-0.2.2.dev75}/verifiers/envs/experimental/composable/tasksets/cp/__init__.py +0 -0
  151. {verifiers-0.2.2.dev73 → verifiers-0.2.2.dev75}/verifiers/envs/experimental/composable/tasksets/cp/cp_task.py +0 -0
  152. {verifiers-0.2.2.dev73 → verifiers-0.2.2.dev75}/verifiers/envs/experimental/composable/tasksets/cp/test_utils.py +0 -0
  153. {verifiers-0.2.2.dev73 → verifiers-0.2.2.dev75}/verifiers/envs/experimental/composable/tasksets/harbor/__init__.py +0 -0
  154. {verifiers-0.2.2.dev73 → verifiers-0.2.2.dev75}/verifiers/envs/experimental/composable/tasksets/harbor/cli_gym.py +0 -0
  155. {verifiers-0.2.2.dev73 → verifiers-0.2.2.dev75}/verifiers/envs/experimental/composable/tasksets/harbor/harbor.py +0 -0
  156. {verifiers-0.2.2.dev73 → verifiers-0.2.2.dev75}/verifiers/envs/experimental/composable/tasksets/harbor/terminal_lego.py +0 -0
  157. {verifiers-0.2.2.dev73 → verifiers-0.2.2.dev75}/verifiers/envs/experimental/composable/tasksets/math/__init__.py +0 -0
  158. {verifiers-0.2.2.dev73 → verifiers-0.2.2.dev75}/verifiers/envs/experimental/composable/tasksets/math/math_task.py +0 -0
  159. {verifiers-0.2.2.dev73 → verifiers-0.2.2.dev75}/verifiers/envs/experimental/composable/tasksets/swe/README.md +0 -0
  160. {verifiers-0.2.2.dev73 → verifiers-0.2.2.dev75}/verifiers/envs/experimental/composable/tasksets/swe/__init__.py +0 -0
  161. {verifiers-0.2.2.dev73 → verifiers-0.2.2.dev75}/verifiers/envs/experimental/composable/tasksets/swe/multi_swe/__init__.py +0 -0
  162. {verifiers-0.2.2.dev73 → verifiers-0.2.2.dev75}/verifiers/envs/experimental/composable/tasksets/swe/multi_swe/extract_fix_patch.sh +0 -0
  163. {verifiers-0.2.2.dev73 → verifiers-0.2.2.dev75}/verifiers/envs/experimental/composable/tasksets/swe/multi_swe/taskset.py +0 -0
  164. {verifiers-0.2.2.dev73 → verifiers-0.2.2.dev75}/verifiers/envs/experimental/composable/tasksets/swe/openswe/__init__.py +0 -0
  165. {verifiers-0.2.2.dev73 → verifiers-0.2.2.dev75}/verifiers/envs/experimental/composable/tasksets/swe/openswe/taskset.py +0 -0
  166. {verifiers-0.2.2.dev73 → verifiers-0.2.2.dev75}/verifiers/envs/experimental/composable/tasksets/swe/r2e_gym/__init__.py +0 -0
  167. {verifiers-0.2.2.dev73 → verifiers-0.2.2.dev75}/verifiers/envs/experimental/composable/tasksets/swe/r2e_gym/log_parser.py +0 -0
  168. {verifiers-0.2.2.dev73 → verifiers-0.2.2.dev75}/verifiers/envs/experimental/composable/tasksets/swe/r2e_gym/taskset.py +0 -0
  169. {verifiers-0.2.2.dev73 → verifiers-0.2.2.dev75}/verifiers/envs/experimental/composable/tasksets/swe/scale_swe/__init__.py +0 -0
  170. {verifiers-0.2.2.dev73 → verifiers-0.2.2.dev75}/verifiers/envs/experimental/composable/tasksets/swe/scale_swe/taskset.py +0 -0
  171. {verifiers-0.2.2.dev73 → verifiers-0.2.2.dev75}/verifiers/envs/experimental/composable/tasksets/swe/shared/__init__.py +0 -0
  172. {verifiers-0.2.2.dev73 → verifiers-0.2.2.dev75}/verifiers/envs/experimental/composable/tasksets/swe/shared/test_patch.py +0 -0
  173. {verifiers-0.2.2.dev73 → verifiers-0.2.2.dev75}/verifiers/envs/experimental/composable/tasksets/swe/swe_bench/__init__.py +0 -0
  174. {verifiers-0.2.2.dev73 → verifiers-0.2.2.dev75}/verifiers/envs/experimental/composable/tasksets/swe/swe_bench/taskset.py +0 -0
  175. {verifiers-0.2.2.dev73 → verifiers-0.2.2.dev75}/verifiers/envs/experimental/composable/tasksets/swe/swe_lego/__init__.py +0 -0
  176. {verifiers-0.2.2.dev73 → verifiers-0.2.2.dev75}/verifiers/envs/experimental/composable/tasksets/swe/swe_lego/taskset.py +0 -0
  177. {verifiers-0.2.2.dev73 → verifiers-0.2.2.dev75}/verifiers/envs/experimental/composable/tasksets/swe/swe_rebench_v2/__init__.py +0 -0
  178. {verifiers-0.2.2.dev73 → verifiers-0.2.2.dev75}/verifiers/envs/experimental/composable/tasksets/swe/swe_rebench_v2/log_parsers.py +0 -0
  179. {verifiers-0.2.2.dev73 → verifiers-0.2.2.dev75}/verifiers/envs/experimental/composable/tasksets/swe/swe_rebench_v2/taskset.py +0 -0
  180. {verifiers-0.2.2.dev73 → verifiers-0.2.2.dev75}/verifiers/envs/experimental/composable/tasksets/swe/swe_smith/__init__.py +0 -0
  181. {verifiers-0.2.2.dev73 → verifiers-0.2.2.dev75}/verifiers/envs/experimental/composable/tasksets/swe/swe_smith/taskset.py +0 -0
  182. {verifiers-0.2.2.dev73 → verifiers-0.2.2.dev75}/verifiers/envs/experimental/composable/tasksets/swe/swe_tasksets.py +0 -0
  183. {verifiers-0.2.2.dev73 → verifiers-0.2.2.dev75}/verifiers/envs/experimental/gym_env.py +0 -0
  184. {verifiers-0.2.2.dev73 → verifiers-0.2.2.dev75}/verifiers/envs/experimental/harbor_env/__init__.py +0 -0
  185. {verifiers-0.2.2.dev73 → verifiers-0.2.2.dev75}/verifiers/envs/experimental/harbor_env/env.py +0 -0
  186. {verifiers-0.2.2.dev73 → verifiers-0.2.2.dev75}/verifiers/envs/experimental/harbor_env/mcp.py +0 -0
  187. {verifiers-0.2.2.dev73 → verifiers-0.2.2.dev75}/verifiers/envs/experimental/mcp_env.py +0 -0
  188. {verifiers-0.2.2.dev73 → verifiers-0.2.2.dev75}/verifiers/envs/experimental/opencode_env.py +0 -0
  189. {verifiers-0.2.2.dev73 → verifiers-0.2.2.dev75}/verifiers/envs/experimental/opencode_qa_env.py +0 -0
  190. {verifiers-0.2.2.dev73 → verifiers-0.2.2.dev75}/verifiers/envs/experimental/opencode_rlm_env.py +0 -0
  191. {verifiers-0.2.2.dev73 → verifiers-0.2.2.dev75}/verifiers/envs/experimental/sandbox_mixin.py +0 -0
  192. {verifiers-0.2.2.dev73 → verifiers-0.2.2.dev75}/verifiers/envs/experimental/utils/__init__.py +0 -0
  193. {verifiers-0.2.2.dev73 → verifiers-0.2.2.dev75}/verifiers/envs/experimental/utils/file_locks.py +0 -0
  194. {verifiers-0.2.2.dev73 → verifiers-0.2.2.dev75}/verifiers/envs/experimental/utils/git_checkout_cache.py +0 -0
  195. {verifiers-0.2.2.dev73 → verifiers-0.2.2.dev75}/verifiers/envs/integrations/README.md +0 -0
  196. {verifiers-0.2.2.dev73 → verifiers-0.2.2.dev75}/verifiers/envs/integrations/__init__.py +0 -0
  197. {verifiers-0.2.2.dev73 → verifiers-0.2.2.dev75}/verifiers/envs/integrations/browser_env/README.md +0 -0
  198. {verifiers-0.2.2.dev73 → verifiers-0.2.2.dev75}/verifiers/envs/integrations/browser_env/__init__.py +0 -0
  199. {verifiers-0.2.2.dev73 → verifiers-0.2.2.dev75}/verifiers/envs/integrations/browser_env/browser_env.py +0 -0
  200. {verifiers-0.2.2.dev73 → verifiers-0.2.2.dev75}/verifiers/envs/integrations/browser_env/modes/__init__.py +0 -0
  201. {verifiers-0.2.2.dev73 → verifiers-0.2.2.dev75}/verifiers/envs/integrations/browser_env/modes/base.py +0 -0
  202. {verifiers-0.2.2.dev73 → verifiers-0.2.2.dev75}/verifiers/envs/integrations/browser_env/modes/cua_mode.py +0 -0
  203. {verifiers-0.2.2.dev73 → verifiers-0.2.2.dev75}/verifiers/envs/integrations/browser_env/modes/dom_mode.py +0 -0
  204. {verifiers-0.2.2.dev73 → verifiers-0.2.2.dev75}/verifiers/envs/integrations/openenv_env.py +0 -0
  205. {verifiers-0.2.2.dev73 → verifiers-0.2.2.dev75}/verifiers/envs/integrations/reasoninggym_env.py +0 -0
  206. {verifiers-0.2.2.dev73 → verifiers-0.2.2.dev75}/verifiers/envs/integrations/textarena_env.py +0 -0
  207. {verifiers-0.2.2.dev73 → verifiers-0.2.2.dev75}/verifiers/envs/multiturn_env.py +0 -0
  208. {verifiers-0.2.2.dev73 → verifiers-0.2.2.dev75}/verifiers/envs/python_env.py +0 -0
  209. {verifiers-0.2.2.dev73 → verifiers-0.2.2.dev75}/verifiers/envs/sandbox_env.py +0 -0
  210. {verifiers-0.2.2.dev73 → verifiers-0.2.2.dev75}/verifiers/envs/singleturn_env.py +0 -0
  211. {verifiers-0.2.2.dev73 → verifiers-0.2.2.dev75}/verifiers/envs/stateful_tool_env.py +0 -0
  212. {verifiers-0.2.2.dev73 → verifiers-0.2.2.dev75}/verifiers/envs/tool_env.py +0 -0
  213. {verifiers-0.2.2.dev73 → verifiers-0.2.2.dev75}/verifiers/errors.py +0 -0
  214. {verifiers-0.2.2.dev73 → verifiers-0.2.2.dev75}/verifiers/gepa/__init__.py +0 -0
  215. {verifiers-0.2.2.dev73 → verifiers-0.2.2.dev75}/verifiers/gepa/adapter.py +0 -0
  216. {verifiers-0.2.2.dev73 → verifiers-0.2.2.dev75}/verifiers/gepa/config.py +0 -0
  217. {verifiers-0.2.2.dev73 → verifiers-0.2.2.dev75}/verifiers/gepa/display.py +0 -0
  218. {verifiers-0.2.2.dev73 → verifiers-0.2.2.dev75}/verifiers/gepa/gepa_utils.py +0 -0
  219. {verifiers-0.2.2.dev73 → verifiers-0.2.2.dev75}/verifiers/parsers/__init__.py +0 -0
  220. {verifiers-0.2.2.dev73 → verifiers-0.2.2.dev75}/verifiers/parsers/maybe_think_parser.py +0 -0
  221. {verifiers-0.2.2.dev73 → verifiers-0.2.2.dev75}/verifiers/parsers/parser.py +0 -0
  222. {verifiers-0.2.2.dev73 → verifiers-0.2.2.dev75}/verifiers/parsers/think_parser.py +0 -0
  223. {verifiers-0.2.2.dev73 → verifiers-0.2.2.dev75}/verifiers/parsers/xml_parser.py +0 -0
  224. {verifiers-0.2.2.dev73 → verifiers-0.2.2.dev75}/verifiers/rubrics/__init__.py +0 -0
  225. {verifiers-0.2.2.dev73 → verifiers-0.2.2.dev75}/verifiers/rubrics/experimental/hybrid_math_rubric.py +0 -0
  226. {verifiers-0.2.2.dev73 → verifiers-0.2.2.dev75}/verifiers/rubrics/judge_rubric.py +0 -0
  227. {verifiers-0.2.2.dev73 → verifiers-0.2.2.dev75}/verifiers/rubrics/math_rubric.py +0 -0
  228. {verifiers-0.2.2.dev73 → verifiers-0.2.2.dev75}/verifiers/rubrics/rubric.py +0 -0
  229. {verifiers-0.2.2.dev73 → verifiers-0.2.2.dev75}/verifiers/rubrics/rubric_group.py +0 -0
  230. {verifiers-0.2.2.dev73 → verifiers-0.2.2.dev75}/verifiers/scripts/__init__.py +0 -0
  231. {verifiers-0.2.2.dev73 → verifiers-0.2.2.dev75}/verifiers/scripts/build.py +0 -0
  232. {verifiers-0.2.2.dev73 → verifiers-0.2.2.dev75}/verifiers/scripts/eval.py +0 -0
  233. {verifiers-0.2.2.dev73 → verifiers-0.2.2.dev75}/verifiers/scripts/gepa.py +0 -0
  234. {verifiers-0.2.2.dev73 → verifiers-0.2.2.dev75}/verifiers/scripts/init.py +0 -0
  235. {verifiers-0.2.2.dev73 → verifiers-0.2.2.dev75}/verifiers/scripts/install.py +0 -0
  236. {verifiers-0.2.2.dev73 → verifiers-0.2.2.dev75}/verifiers/scripts/setup.py +0 -0
  237. {verifiers-0.2.2.dev73 → verifiers-0.2.2.dev75}/verifiers/scripts/tui.py +0 -0
  238. {verifiers-0.2.2.dev73 → verifiers-0.2.2.dev75}/verifiers/serve/__init__.py +0 -0
  239. {verifiers-0.2.2.dev73 → verifiers-0.2.2.dev75}/verifiers/serve/client/env_client.py +0 -0
  240. {verifiers-0.2.2.dev73 → verifiers-0.2.2.dev75}/verifiers/serve/client/zmq_env_client.py +0 -0
  241. {verifiers-0.2.2.dev73 → verifiers-0.2.2.dev75}/verifiers/serve/server/__init__.py +0 -0
  242. {verifiers-0.2.2.dev73 → verifiers-0.2.2.dev75}/verifiers/serve/server/env_router.py +0 -0
  243. {verifiers-0.2.2.dev73 → verifiers-0.2.2.dev75}/verifiers/serve/server/env_server.py +0 -0
  244. {verifiers-0.2.2.dev73 → verifiers-0.2.2.dev75}/verifiers/serve/server/env_worker.py +0 -0
  245. {verifiers-0.2.2.dev73 → verifiers-0.2.2.dev75}/verifiers/serve/server/zmq_env_server.py +0 -0
  246. {verifiers-0.2.2.dev73 → verifiers-0.2.2.dev75}/verifiers/serve/types.py +0 -0
  247. {verifiers-0.2.2.dev73 → verifiers-0.2.2.dev75}/verifiers/types.py +0 -0
  248. {verifiers-0.2.2.dev73 → verifiers-0.2.2.dev75}/verifiers/utils/__init__.py +0 -0
  249. {verifiers-0.2.2.dev73 → verifiers-0.2.2.dev75}/verifiers/utils/async_utils.py +0 -0
  250. {verifiers-0.2.2.dev73 → verifiers-0.2.2.dev75}/verifiers/utils/client_utils.py +0 -0
  251. {verifiers-0.2.2.dev73 → verifiers-0.2.2.dev75}/verifiers/utils/config_utils.py +0 -0
  252. {verifiers-0.2.2.dev73 → verifiers-0.2.2.dev75}/verifiers/utils/data_utils.py +0 -0
  253. {verifiers-0.2.2.dev73 → verifiers-0.2.2.dev75}/verifiers/utils/display_utils.py +0 -0
  254. {verifiers-0.2.2.dev73 → verifiers-0.2.2.dev75}/verifiers/utils/env_config_utils.py +0 -0
  255. {verifiers-0.2.2.dev73 → verifiers-0.2.2.dev75}/verifiers/utils/env_utils.py +0 -0
  256. {verifiers-0.2.2.dev73 → verifiers-0.2.2.dev75}/verifiers/utils/error_utils.py +0 -0
  257. {verifiers-0.2.2.dev73 → verifiers-0.2.2.dev75}/verifiers/utils/eval_display.py +0 -0
  258. {verifiers-0.2.2.dev73 → verifiers-0.2.2.dev75}/verifiers/utils/eval_utils.py +0 -0
  259. {verifiers-0.2.2.dev73 → verifiers-0.2.2.dev75}/verifiers/utils/heartbeat.py +0 -0
  260. {verifiers-0.2.2.dev73 → verifiers-0.2.2.dev75}/verifiers/utils/import_utils.py +0 -0
  261. {verifiers-0.2.2.dev73 → verifiers-0.2.2.dev75}/verifiers/utils/install_utils.py +0 -0
  262. {verifiers-0.2.2.dev73 → verifiers-0.2.2.dev75}/verifiers/utils/interception_utils.py +0 -0
  263. {verifiers-0.2.2.dev73 → verifiers-0.2.2.dev75}/verifiers/utils/logging_utils.py +0 -0
  264. {verifiers-0.2.2.dev73 → verifiers-0.2.2.dev75}/verifiers/utils/message_utils.py +0 -0
  265. {verifiers-0.2.2.dev73 → verifiers-0.2.2.dev75}/verifiers/utils/metric_utils.py +0 -0
  266. {verifiers-0.2.2.dev73 → verifiers-0.2.2.dev75}/verifiers/utils/path_utils.py +0 -0
  267. {verifiers-0.2.2.dev73 → verifiers-0.2.2.dev75}/verifiers/utils/pricing_utils.py +0 -0
  268. {verifiers-0.2.2.dev73 → verifiers-0.2.2.dev75}/verifiers/utils/process_utils.py +0 -0
  269. {verifiers-0.2.2.dev73 → verifiers-0.2.2.dev75}/verifiers/utils/response_utils.py +0 -0
  270. {verifiers-0.2.2.dev73 → verifiers-0.2.2.dev75}/verifiers/utils/save_utils.py +0 -0
  271. {verifiers-0.2.2.dev73 → verifiers-0.2.2.dev75}/verifiers/utils/serve_utils.py +0 -0
  272. {verifiers-0.2.2.dev73 → verifiers-0.2.2.dev75}/verifiers/utils/thread_utils.py +0 -0
  273. {verifiers-0.2.2.dev73 → verifiers-0.2.2.dev75}/verifiers/utils/threaded_sandbox_client.py +0 -0
  274. {verifiers-0.2.2.dev73 → verifiers-0.2.2.dev75}/verifiers/utils/tool_utils.py +0 -0
  275. {verifiers-0.2.2.dev73 → verifiers-0.2.2.dev75}/verifiers/utils/usage_utils.py +0 -0
  276. {verifiers-0.2.2.dev73 → verifiers-0.2.2.dev75}/verifiers/utils/version_utils.py +0 -0
  277. {verifiers-0.2.2.dev73 → verifiers-0.2.2.dev75}/verifiers/v1/__init__.py +0 -0
  278. {verifiers-0.2.2.dev73 → verifiers-0.2.2.dev75}/verifiers/v1/acp/__init__.py +0 -0
  279. {verifiers-0.2.2.dev73 → verifiers-0.2.2.dev75}/verifiers/v1/acp/_runner.py +0 -0
  280. {verifiers-0.2.2.dev73 → verifiers-0.2.2.dev75}/verifiers/v1/cli/__init__.py +0 -0
  281. {verifiers-0.2.2.dev73 → verifiers-0.2.2.dev75}/verifiers/v1/cli/dashboard/__init__.py +0 -0
  282. {verifiers-0.2.2.dev73 → verifiers-0.2.2.dev75}/verifiers/v1/cli/dashboard/base.py +0 -0
  283. {verifiers-0.2.2.dev73 → verifiers-0.2.2.dev75}/verifiers/v1/cli/dashboard/replay.py +0 -0
  284. {verifiers-0.2.2.dev73 → verifiers-0.2.2.dev75}/verifiers/v1/cli/dashboard/validate.py +0 -0
  285. {verifiers-0.2.2.dev73 → verifiers-0.2.2.dev75}/verifiers/v1/cli/debug.py +0 -0
  286. {verifiers-0.2.2.dev73 → verifiers-0.2.2.dev75}/verifiers/v1/cli/eval/__init__.py +0 -0
  287. {verifiers-0.2.2.dev73 → verifiers-0.2.2.dev75}/verifiers/v1/cli/eval/main.py +0 -0
  288. {verifiers-0.2.2.dev73 → verifiers-0.2.2.dev75}/verifiers/v1/cli/eval/resume.py +0 -0
  289. {verifiers-0.2.2.dev73 → verifiers-0.2.2.dev75}/verifiers/v1/cli/eval/runner.py +0 -0
  290. {verifiers-0.2.2.dev73 → verifiers-0.2.2.dev75}/verifiers/v1/cli/gepa.py +0 -0
  291. {verifiers-0.2.2.dev73 → verifiers-0.2.2.dev75}/verifiers/v1/cli/init.py +0 -0
  292. {verifiers-0.2.2.dev73 → verifiers-0.2.2.dev75}/verifiers/v1/cli/output.py +0 -0
  293. {verifiers-0.2.2.dev73 → verifiers-0.2.2.dev75}/verifiers/v1/cli/replay.py +0 -0
  294. {verifiers-0.2.2.dev73 → verifiers-0.2.2.dev75}/verifiers/v1/cli/resolve.py +0 -0
  295. {verifiers-0.2.2.dev73 → verifiers-0.2.2.dev75}/verifiers/v1/cli/serve.py +0 -0
  296. {verifiers-0.2.2.dev73 → verifiers-0.2.2.dev75}/verifiers/v1/cli/validate.py +0 -0
  297. {verifiers-0.2.2.dev73 → verifiers-0.2.2.dev75}/verifiers/v1/clients/__init__.py +0 -0
  298. {verifiers-0.2.2.dev73 → verifiers-0.2.2.dev75}/verifiers/v1/clients/base.py +0 -0
  299. {verifiers-0.2.2.dev73 → verifiers-0.2.2.dev75}/verifiers/v1/clients/client.py +0 -0
  300. {verifiers-0.2.2.dev73 → verifiers-0.2.2.dev75}/verifiers/v1/clients/eval.py +0 -0
  301. {verifiers-0.2.2.dev73 → verifiers-0.2.2.dev75}/verifiers/v1/clients/train.py +0 -0
  302. {verifiers-0.2.2.dev73 → verifiers-0.2.2.dev75}/verifiers/v1/configs/__init__.py +0 -0
  303. {verifiers-0.2.2.dev73 → verifiers-0.2.2.dev75}/verifiers/v1/configs/agent.py +0 -0
  304. {verifiers-0.2.2.dev73 → verifiers-0.2.2.dev75}/verifiers/v1/configs/cli/__init__.py +0 -0
  305. {verifiers-0.2.2.dev73 → verifiers-0.2.2.dev75}/verifiers/v1/configs/cli/debug.py +0 -0
  306. {verifiers-0.2.2.dev73 → verifiers-0.2.2.dev75}/verifiers/v1/configs/cli/env.py +0 -0
  307. {verifiers-0.2.2.dev73 → verifiers-0.2.2.dev75}/verifiers/v1/configs/cli/eval.py +0 -0
  308. {verifiers-0.2.2.dev73 → verifiers-0.2.2.dev75}/verifiers/v1/configs/cli/init.py +0 -0
  309. {verifiers-0.2.2.dev73 → verifiers-0.2.2.dev75}/verifiers/v1/configs/cli/replay.py +0 -0
  310. {verifiers-0.2.2.dev73 → verifiers-0.2.2.dev75}/verifiers/v1/configs/cli/serve.py +0 -0
  311. {verifiers-0.2.2.dev73 → verifiers-0.2.2.dev75}/verifiers/v1/configs/cli/validate.py +0 -0
  312. {verifiers-0.2.2.dev73 → verifiers-0.2.2.dev75}/verifiers/v1/configs/client.py +0 -0
  313. {verifiers-0.2.2.dev73 → verifiers-0.2.2.dev75}/verifiers/v1/configs/env.py +0 -0
  314. {verifiers-0.2.2.dev73 → verifiers-0.2.2.dev75}/verifiers/v1/configs/harness.py +0 -0
  315. {verifiers-0.2.2.dev73 → verifiers-0.2.2.dev75}/verifiers/v1/configs/judge.py +0 -0
  316. {verifiers-0.2.2.dev73 → verifiers-0.2.2.dev75}/verifiers/v1/configs/legacy.py +0 -0
  317. {verifiers-0.2.2.dev73 → verifiers-0.2.2.dev75}/verifiers/v1/configs/retries.py +0 -0
  318. {verifiers-0.2.2.dev73 → verifiers-0.2.2.dev75}/verifiers/v1/configs/serve.py +0 -0
  319. {verifiers-0.2.2.dev73 → verifiers-0.2.2.dev75}/verifiers/v1/configs/task.py +0 -0
  320. {verifiers-0.2.2.dev73 → verifiers-0.2.2.dev75}/verifiers/v1/configs/taskset.py +0 -0
  321. {verifiers-0.2.2.dev73 → verifiers-0.2.2.dev75}/verifiers/v1/dialects/__init__.py +0 -0
  322. {verifiers-0.2.2.dev73 → verifiers-0.2.2.dev75}/verifiers/v1/dialects/anthropic.py +0 -0
  323. {verifiers-0.2.2.dev73 → verifiers-0.2.2.dev75}/verifiers/v1/dialects/base.py +0 -0
  324. {verifiers-0.2.2.dev73 → verifiers-0.2.2.dev75}/verifiers/v1/dialects/chat.py +0 -0
  325. {verifiers-0.2.2.dev73 → verifiers-0.2.2.dev75}/verifiers/v1/dialects/responses.py +0 -0
  326. {verifiers-0.2.2.dev73 → verifiers-0.2.2.dev75}/verifiers/v1/env.py +0 -0
  327. {verifiers-0.2.2.dev73 → verifiers-0.2.2.dev75}/verifiers/v1/envs/__init__.py +0 -0
  328. {verifiers-0.2.2.dev73 → verifiers-0.2.2.dev75}/verifiers/v1/envs/agentic_judge/__init__.py +0 -0
  329. {verifiers-0.2.2.dev73 → verifiers-0.2.2.dev75}/verifiers/v1/envs/best_of_n/__init__.py +0 -0
  330. {verifiers-0.2.2.dev73 → verifiers-0.2.2.dev75}/verifiers/v1/envs/best_of_n/env.py +0 -0
  331. {verifiers-0.2.2.dev73 → verifiers-0.2.2.dev75}/verifiers/v1/envs/single_agent/__init__.py +0 -0
  332. {verifiers-0.2.2.dev73 → verifiers-0.2.2.dev75}/verifiers/v1/envs/single_agent/env.py +0 -0
  333. {verifiers-0.2.2.dev73 → verifiers-0.2.2.dev75}/verifiers/v1/envs/user_sim/__init__.py +0 -0
  334. {verifiers-0.2.2.dev73 → verifiers-0.2.2.dev75}/verifiers/v1/envs/user_sim/env.py +0 -0
  335. {verifiers-0.2.2.dev73 → verifiers-0.2.2.dev75}/verifiers/v1/episode.py +0 -0
  336. {verifiers-0.2.2.dev73 → verifiers-0.2.2.dev75}/verifiers/v1/errors.py +0 -0
  337. {verifiers-0.2.2.dev73 → verifiers-0.2.2.dev75}/verifiers/v1/gepa/__init__.py +0 -0
  338. {verifiers-0.2.2.dev73 → verifiers-0.2.2.dev75}/verifiers/v1/gepa/adapter.py +0 -0
  339. {verifiers-0.2.2.dev73 → verifiers-0.2.2.dev75}/verifiers/v1/gepa/config.py +0 -0
  340. {verifiers-0.2.2.dev73 → verifiers-0.2.2.dev75}/verifiers/v1/gepa/dataset.py +0 -0
  341. {verifiers-0.2.2.dev73 → verifiers-0.2.2.dev75}/verifiers/v1/gepa/reflection.py +0 -0
  342. {verifiers-0.2.2.dev73 → verifiers-0.2.2.dev75}/verifiers/v1/gepa/runner.py +0 -0
  343. {verifiers-0.2.2.dev73 → verifiers-0.2.2.dev75}/verifiers/v1/graph.py +0 -0
  344. {verifiers-0.2.2.dev73 → verifiers-0.2.2.dev75}/verifiers/v1/harnesses/__init__.py +0 -0
  345. {verifiers-0.2.2.dev73 → verifiers-0.2.2.dev75}/verifiers/v1/harnesses/bash/__init__.py +0 -0
  346. {verifiers-0.2.2.dev73 → verifiers-0.2.2.dev75}/verifiers/v1/harnesses/bash/harness.py +0 -0
  347. {verifiers-0.2.2.dev73 → verifiers-0.2.2.dev75}/verifiers/v1/harnesses/bash/program.py +0 -0
  348. {verifiers-0.2.2.dev73 → verifiers-0.2.2.dev75}/verifiers/v1/harnesses/browser_use/__init__.py +0 -0
  349. {verifiers-0.2.2.dev73 → verifiers-0.2.2.dev75}/verifiers/v1/harnesses/browser_use/harness.py +0 -0
  350. {verifiers-0.2.2.dev73 → verifiers-0.2.2.dev75}/verifiers/v1/harnesses/browser_use/program.py +0 -0
  351. {verifiers-0.2.2.dev73 → verifiers-0.2.2.dev75}/verifiers/v1/harnesses/claude_code/__init__.py +0 -0
  352. {verifiers-0.2.2.dev73 → verifiers-0.2.2.dev75}/verifiers/v1/harnesses/claude_code/harness.py +0 -0
  353. {verifiers-0.2.2.dev73 → verifiers-0.2.2.dev75}/verifiers/v1/harnesses/codex/__init__.py +0 -0
  354. {verifiers-0.2.2.dev73 → verifiers-0.2.2.dev75}/verifiers/v1/harnesses/codex/harness.py +0 -0
  355. {verifiers-0.2.2.dev73 → verifiers-0.2.2.dev75}/verifiers/v1/harnesses/hermes_agent/__init__.py +0 -0
  356. {verifiers-0.2.2.dev73 → verifiers-0.2.2.dev75}/verifiers/v1/harnesses/hermes_agent/harness.py +0 -0
  357. {verifiers-0.2.2.dev73 → verifiers-0.2.2.dev75}/verifiers/v1/harnesses/hermes_agent/program.py +0 -0
  358. {verifiers-0.2.2.dev73 → verifiers-0.2.2.dev75}/verifiers/v1/harnesses/kimi_code/__init__.py +0 -0
  359. {verifiers-0.2.2.dev73 → verifiers-0.2.2.dev75}/verifiers/v1/harnesses/kimi_code/harness.py +0 -0
  360. {verifiers-0.2.2.dev73 → verifiers-0.2.2.dev75}/verifiers/v1/harnesses/mini_swe_agent/__init__.py +0 -0
  361. {verifiers-0.2.2.dev73 → verifiers-0.2.2.dev75}/verifiers/v1/harnesses/mini_swe_agent/harness.py +0 -0
  362. {verifiers-0.2.2.dev73 → verifiers-0.2.2.dev75}/verifiers/v1/harnesses/mini_swe_agent/program.py +0 -0
  363. {verifiers-0.2.2.dev73 → verifiers-0.2.2.dev75}/verifiers/v1/harnesses/null/__init__.py +0 -0
  364. {verifiers-0.2.2.dev73 → verifiers-0.2.2.dev75}/verifiers/v1/harnesses/null/harness.py +0 -0
  365. {verifiers-0.2.2.dev73 → verifiers-0.2.2.dev75}/verifiers/v1/harnesses/null/program.py +0 -0
  366. {verifiers-0.2.2.dev73 → verifiers-0.2.2.dev75}/verifiers/v1/harnesses/openclaw/__init__.py +0 -0
  367. {verifiers-0.2.2.dev73 → verifiers-0.2.2.dev75}/verifiers/v1/harnesses/openclaw/harness.py +0 -0
  368. {verifiers-0.2.2.dev73 → verifiers-0.2.2.dev75}/verifiers/v1/harnesses/pi/__init__.py +0 -0
  369. {verifiers-0.2.2.dev73 → verifiers-0.2.2.dev75}/verifiers/v1/harnesses/pi/harness.py +0 -0
  370. {verifiers-0.2.2.dev73 → verifiers-0.2.2.dev75}/verifiers/v1/harnesses/pool/__init__.py +0 -0
  371. {verifiers-0.2.2.dev73 → verifiers-0.2.2.dev75}/verifiers/v1/harnesses/pool/harness.py +0 -0
  372. {verifiers-0.2.2.dev73 → verifiers-0.2.2.dev75}/verifiers/v1/harnesses/rlm/__init__.py +0 -0
  373. {verifiers-0.2.2.dev73 → verifiers-0.2.2.dev75}/verifiers/v1/harnesses/rlm/harness.py +0 -0
  374. {verifiers-0.2.2.dev73 → verifiers-0.2.2.dev75}/verifiers/v1/harnesses/terminus_2/__init__.py +0 -0
  375. {verifiers-0.2.2.dev73 → verifiers-0.2.2.dev75}/verifiers/v1/harnesses/terminus_2/harness.py +0 -0
  376. {verifiers-0.2.2.dev73 → verifiers-0.2.2.dev75}/verifiers/v1/harnesses/terminus_2/program.py +0 -0
  377. {verifiers-0.2.2.dev73 → verifiers-0.2.2.dev75}/verifiers/v1/interception/__init__.py +0 -0
  378. {verifiers-0.2.2.dev73 → verifiers-0.2.2.dev75}/verifiers/v1/interception/base.py +0 -0
  379. {verifiers-0.2.2.dev73 → verifiers-0.2.2.dev75}/verifiers/v1/interception/pool.py +0 -0
  380. {verifiers-0.2.2.dev73 → verifiers-0.2.2.dev75}/verifiers/v1/interception/server.py +0 -0
  381. {verifiers-0.2.2.dev73 → verifiers-0.2.2.dev75}/verifiers/v1/interception/tunnel/__init__.py +0 -0
  382. {verifiers-0.2.2.dev73 → verifiers-0.2.2.dev75}/verifiers/v1/interception/tunnel/base.py +0 -0
  383. {verifiers-0.2.2.dev73 → verifiers-0.2.2.dev75}/verifiers/v1/interception/tunnel/custom.py +0 -0
  384. {verifiers-0.2.2.dev73 → verifiers-0.2.2.dev75}/verifiers/v1/interception/tunnel/prime.py +0 -0
  385. {verifiers-0.2.2.dev73 → verifiers-0.2.2.dev75}/verifiers/v1/judge.py +0 -0
  386. {verifiers-0.2.2.dev73 → verifiers-0.2.2.dev75}/verifiers/v1/judges/__init__.py +0 -0
  387. {verifiers-0.2.2.dev73 → verifiers-0.2.2.dev75}/verifiers/v1/judges/reference.py +0 -0
  388. {verifiers-0.2.2.dev73 → verifiers-0.2.2.dev75}/verifiers/v1/judges/reference.txt +0 -0
  389. {verifiers-0.2.2.dev73 → verifiers-0.2.2.dev75}/verifiers/v1/judges/rubric.py +0 -0
  390. {verifiers-0.2.2.dev73 → verifiers-0.2.2.dev75}/verifiers/v1/judges/rubric.txt +0 -0
  391. {verifiers-0.2.2.dev73 → verifiers-0.2.2.dev75}/verifiers/v1/legacy.py +0 -0
  392. {verifiers-0.2.2.dev73 → verifiers-0.2.2.dev75}/verifiers/v1/mcp/__init__.py +0 -0
  393. {verifiers-0.2.2.dev73 → verifiers-0.2.2.dev75}/verifiers/v1/mcp/launch.py +0 -0
  394. {verifiers-0.2.2.dev73 → verifiers-0.2.2.dev75}/verifiers/v1/mcp/server.py +0 -0
  395. {verifiers-0.2.2.dev73 → verifiers-0.2.2.dev75}/verifiers/v1/mcp/toolset.py +0 -0
  396. {verifiers-0.2.2.dev73 → verifiers-0.2.2.dev75}/verifiers/v1/rollout.py +0 -0
  397. {verifiers-0.2.2.dev73 → verifiers-0.2.2.dev75}/verifiers/v1/runtimes/docker/egress.py +0 -0
  398. {verifiers-0.2.2.dev73 → verifiers-0.2.2.dev75}/verifiers/v1/runtimes/limiters.py +0 -0
  399. {verifiers-0.2.2.dev73 → verifiers-0.2.2.dev75}/verifiers/v1/serve/__init__.py +0 -0
  400. {verifiers-0.2.2.dev73 → verifiers-0.2.2.dev75}/verifiers/v1/serve/client.py +0 -0
  401. {verifiers-0.2.2.dev73 → verifiers-0.2.2.dev75}/verifiers/v1/serve/pool.py +0 -0
  402. {verifiers-0.2.2.dev73 → verifiers-0.2.2.dev75}/verifiers/v1/serve/server.py +0 -0
  403. {verifiers-0.2.2.dev73 → verifiers-0.2.2.dev75}/verifiers/v1/serve/types.py +0 -0
  404. {verifiers-0.2.2.dev73 → verifiers-0.2.2.dev75}/verifiers/v1/session.py +0 -0
  405. {verifiers-0.2.2.dev73 → verifiers-0.2.2.dev75}/verifiers/v1/state.py +0 -0
  406. {verifiers-0.2.2.dev73 → verifiers-0.2.2.dev75}/verifiers/v1/taskset.py +0 -0
  407. {verifiers-0.2.2.dev73 → verifiers-0.2.2.dev75}/verifiers/v1/tasksets/__init__.py +0 -0
  408. {verifiers-0.2.2.dev73 → verifiers-0.2.2.dev75}/verifiers/v1/tasksets/lean/__init__.py +0 -0
  409. {verifiers-0.2.2.dev73 → verifiers-0.2.2.dev75}/verifiers/v1/tasksets/lean/scoring.py +0 -0
  410. {verifiers-0.2.2.dev73 → verifiers-0.2.2.dev75}/verifiers/v1/tasksets/lean/taskset.py +0 -0
  411. {verifiers-0.2.2.dev73 → verifiers-0.2.2.dev75}/verifiers/v1/tasksets/openenv/__init__.py +0 -0
  412. {verifiers-0.2.2.dev73 → verifiers-0.2.2.dev75}/verifiers/v1/tasksets/openenv/taskset.py +0 -0
  413. {verifiers-0.2.2.dev73 → verifiers-0.2.2.dev75}/verifiers/v1/tasksets/textarena/__init__.py +0 -0
  414. {verifiers-0.2.2.dev73 → verifiers-0.2.2.dev75}/verifiers/v1/tasksets/textarena/taskset.py +0 -0
  415. {verifiers-0.2.2.dev73 → verifiers-0.2.2.dev75}/verifiers/v1/types.py +0 -0
  416. {verifiers-0.2.2.dev73 → verifiers-0.2.2.dev75}/verifiers/v1/utils/__init__.py +0 -0
  417. {verifiers-0.2.2.dev73 → verifiers-0.2.2.dev75}/verifiers/v1/utils/aio.py +0 -0
  418. {verifiers-0.2.2.dev73 → verifiers-0.2.2.dev75}/verifiers/v1/utils/artifacts.py +0 -0
  419. {verifiers-0.2.2.dev73 → verifiers-0.2.2.dev75}/verifiers/v1/utils/compile.py +0 -0
  420. {verifiers-0.2.2.dev73 → verifiers-0.2.2.dev75}/verifiers/v1/utils/format.py +0 -0
  421. {verifiers-0.2.2.dev73 → verifiers-0.2.2.dev75}/verifiers/v1/utils/generic.py +0 -0
  422. {verifiers-0.2.2.dev73 → verifiers-0.2.2.dev75}/verifiers/v1/utils/git.py +0 -0
  423. {verifiers-0.2.2.dev73 → verifiers-0.2.2.dev75}/verifiers/v1/utils/image.py +0 -0
  424. {verifiers-0.2.2.dev73 → verifiers-0.2.2.dev75}/verifiers/v1/utils/install.py +0 -0
  425. {verifiers-0.2.2.dev73 → verifiers-0.2.2.dev75}/verifiers/v1/utils/interrupt.py +0 -0
  426. {verifiers-0.2.2.dev73 → verifiers-0.2.2.dev75}/verifiers/v1/utils/loaders.py +0 -0
  427. {verifiers-0.2.2.dev73 → verifiers-0.2.2.dev75}/verifiers/v1/utils/logging.py +0 -0
  428. {verifiers-0.2.2.dev73 → verifiers-0.2.2.dev75}/verifiers/v1/utils/memory.py +0 -0
  429. {verifiers-0.2.2.dev73 → verifiers-0.2.2.dev75}/verifiers/v1/utils/retries.py +0 -0
  430. {verifiers-0.2.2.dev73 → verifiers-0.2.2.dev75}/verifiers/v1/utils/score.py +0 -0
  431. {verifiers-0.2.2.dev73 → verifiers-0.2.2.dev75}/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.dev73
3
+ Version: 0.2.2.dev75
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
@@ -461,7 +461,7 @@ async def test_error_attribution(monkeypatch, tmp_path):
461
461
  await JudgedTask(trace.task.data, taskset.config.task).score(
462
462
  trace, runtime=None
463
463
  )
464
- assert "reference" not in trace.rewards
464
+ assert trace.rewards["reference"] is None # seeded: expected but never scored
465
465
  assert len(trace.info["judge"]) == 1 # the billed call is still recorded
466
466
 
467
467
 
@@ -71,17 +71,22 @@ def test_wire_trace_round_trip():
71
71
  ],
72
72
  )
73
73
  tr.record_reward("r", 1.0)
74
+ tr.rewards.setdefault("solved", None) # seeded: expected but never scored
75
+ tr.metrics.setdefault("acc", None)
74
76
  tr.info = {"build": "ok"}
75
77
  tr.stop("done")
76
78
 
77
79
  # the dump is plain pydantic — derived values are properties, so they're not serialized
78
80
  data = json.loads(tr.model_dump_json(exclude_none=True))
79
81
  assert "reward" not in data and "is_truncated" not in data
82
+ # exclude_none drops None FIELDS, not None dict values — unscored seeds survive
83
+ assert data["rewards"]["solved"] is None and data["metrics"]["acc"] is None
80
84
 
81
85
  rt = vf.WireTrace.model_validate(data)
82
86
  assert rt.num_branches == tr.num_branches == 2 # branch topology survived
83
87
  assert rt.num_turns == tr.num_turns == 2
84
- assert rt.reward == 1.0 # property recomputed from `rewards`
88
+ assert rt.reward == 1.0 # property recomputed from `rewards`, seeds contribute 0
89
+ assert rt.rewards["solved"] is None
85
90
  assert rt.stop_condition == "done"
86
91
  assert rt.info == {"build": "ok"}
87
92
  assert (
@@ -29,7 +29,7 @@ from verifiers.v1.runtimes import (
29
29
  Runtime,
30
30
  RuntimeConfig,
31
31
  SubprocessConfig,
32
- make_runtime,
32
+ provision_runtime,
33
33
  runtime_is_local,
34
34
  )
35
35
  from verifiers.v1.session import RolloutLimits
@@ -547,14 +547,8 @@ class Agent:
547
547
  if task is not None
548
548
  else self.runtime_config
549
549
  )
550
- runtime = make_runtime(config)
551
- try:
552
- # start() inside the try: a failed start may already hold a remote
553
- # sandbox, so it must reach stop() (safe on a partially-started runtime).
554
- await runtime.start()
550
+ async with provision_runtime(config) as runtime:
555
551
  yield runtime
556
- finally:
557
- await runtime.stop()
558
552
 
559
553
 
560
554
  class _EpisodeAgent(Agent):
@@ -332,8 +332,8 @@ def Progress(
332
332
 
333
333
  def _score_segments(traces: list[Trace], source: str) -> str | None:
334
334
  """`name mean` segments for every reward/metric key seen across `traces`,
335
- first-seen order (a trace records only the functions that ran for it, so keys
336
- can vary); None when no trace recorded anything."""
335
+ first-seen order (a trace carries only its own task's signals unscored ones
336
+ seeded as `None` — so keys can vary); None when no trace recorded anything."""
337
337
  names: list[str] = []
338
338
  for trace in traces:
339
339
  names.extend(n for n in getattr(trace, source) if n not in names)
@@ -347,11 +347,13 @@ def _score_segments(traces: list[Trace], source: str) -> str | None:
347
347
 
348
348
 
349
349
  def _score(trace: Trace, source: str, name: str) -> float:
350
- """Rewards carry raw score + weight; the breakdown shows the raw score."""
350
+ """Rewards carry raw score + weight; the breakdown shows the raw score. A missing
351
+ or unscored (seeded `None`) entry reads as 0.0."""
351
352
  if source == "rewards":
352
353
  reward = trace.rewards.get(name)
353
354
  return reward.score if reward is not None else 0.0
354
- return trace.metrics.get(name, 0.0)
355
+ value = trace.metrics.get(name)
356
+ return value if value is not None else 0.0
355
357
 
356
358
 
357
359
  def _breakdown(scored: list[Trace], done: list[Trace]) -> Table | None:
@@ -398,7 +398,8 @@ class AgenticJudgeEnv(vf.Env[AgenticJudgeEnvConfig]):
398
398
  solution.record_metric(f"judge/{criterion.name}", scores[criterion.name])
399
399
  if self.config.score.task_weight != 1.0:
400
400
  for reward in solution.rewards.values():
401
- reward.weight *= self.config.score.task_weight
401
+ if reward is not None:
402
+ reward.weight *= self.config.score.task_weight
402
403
  total = sum(criterion.weight for criterion in criteria)
403
404
  reward = sum(c.weight * scores[c.name] for c in criteria) / total
404
405
  solution.record_reward("judge", reward, weight=self.config.score.judge_weight)
@@ -12,7 +12,12 @@ from verifiers.v1.errors import HarnessError, SandboxError, boundary
12
12
  from verifiers.v1.runtimes import ProgramResult, Runtime
13
13
  from verifiers.v1.task import TaskData
14
14
  from verifiers.v1.types import Messages
15
- from verifiers.v1.utils.decorators import discover_decorated, invoke_all
15
+ from verifiers.v1.utils.decorators import (
16
+ discover_decorated,
17
+ invoke_all,
18
+ seed,
19
+ unseed,
20
+ )
16
21
 
17
22
  if TYPE_CHECKING:
18
23
  # Annotation-only: `Trace` appears in signatures only, so this module stays
@@ -155,10 +160,12 @@ class Harness(ABC, Generic[ConfigT]):
155
160
  `runtime`) and can read what the harness left behind in the runtime."""
156
161
  available = {"task": trace.task.data, "trace": trace, "runtime": runtime}
157
162
  fns = discover_decorated(self, "metric")
163
+ seed(trace.metrics, (fn.__name__ for fn in fns))
158
164
  async with boundary(HarnessError, f"harness {self.config.id!r} metric"):
159
165
  results = await invoke_all(fns, available)
160
166
  for fn, result in zip(fns, results):
161
167
  if isinstance(result, Mapping):
168
+ unseed(trace.metrics, fn.__name__)
162
169
  trace.record_metrics(result)
163
170
  else:
164
171
  trace.record_metric(fn.__name__, result)
@@ -1,3 +1,5 @@
1
+ from collections.abc import AsyncIterator
2
+ from contextlib import asynccontextmanager
1
3
  from typing import Annotated
2
4
 
3
5
  from pydantic import Field
@@ -45,6 +47,22 @@ def make_runtime(config: RuntimeConfig, name: str | None = None) -> Runtime:
45
47
  return runtime
46
48
 
47
49
 
50
+ @asynccontextmanager
51
+ async def provision_runtime(
52
+ config: RuntimeConfig, name: str | None = None
53
+ ) -> AsyncIterator[Runtime]:
54
+ """Provision a box from `config` and tear it down on exit.
55
+
56
+ `start()` sits inside the `try`: a failed start may already hold a paid sandbox, so
57
+ it has to reach `stop()` (which is safe on a partially-started runtime)."""
58
+ runtime = make_runtime(config, name)
59
+ try:
60
+ await runtime.start()
61
+ yield runtime
62
+ finally:
63
+ await runtime.stop()
64
+
65
+
48
66
  def runtime_is_local(config: RuntimeConfig) -> bool:
49
67
  """Whether a runtime of this config exchanges host-local URLs without a public
50
68
  tunnel, read off the runtime class without provisioning one."""
@@ -71,5 +89,6 @@ __all__ = [
71
89
  "SubprocessRuntime",
72
90
  "SubprocessRuntimeInfo",
73
91
  "make_runtime",
92
+ "provision_runtime",
74
93
  "runtime_is_local",
75
94
  ]
@@ -2,6 +2,7 @@
2
2
 
3
3
  import asyncio
4
4
  import atexit
5
+ import base64
5
6
  import contextlib
6
7
  import hashlib
7
8
  import logging
@@ -285,9 +286,42 @@ class Runtime(ABC):
285
286
  argv = await self.prepare_uv_script(script, env)
286
287
  return await self.run([*argv, *(args or [])], env or {})
287
288
 
289
+ async def read(self, path: str, max_bytes: int | None = None) -> bytes:
290
+ """Read `path` into host memory. `max_bytes` caps the transfer, raising past
291
+ the cap — for a file written by something we don't control, whose size we
292
+ can't assume. The cap is enforced inside the box rather than after the
293
+ transfer, and base64 because `run` returns decoded text. Framework method —
294
+ override `_read`, not this."""
295
+ if max_bytes is None:
296
+ return await self._read(path)
297
+ # Through a temp file, not a pipe: `head | base64` exits with base64's 0
298
+ # even when the path is missing, and a missing file must raise here just
299
+ # as it does from `_read`.
300
+ result = await self.run(
301
+ [
302
+ "sh",
303
+ "-c",
304
+ (
305
+ "t=$(mktemp) || exit 1; "
306
+ 'head -c "$1" -- "$2" > "$t" || { rm -f "$t"; exit 1; }; '
307
+ 'base64 < "$t"; rc=$?; rm -f "$t"; exit $rc'
308
+ ),
309
+ "sh",
310
+ str(max_bytes + 1),
311
+ path,
312
+ ],
313
+ {},
314
+ )
315
+ if result.exit_code:
316
+ raise SandboxError(f"read {path!r}: {result.stderr.strip()[-500:]}")
317
+ data = base64.b64decode(result.stdout)
318
+ if len(data) > max_bytes:
319
+ raise SandboxError(f"read {path!r}: over the {max_bytes} byte limit")
320
+ return data
321
+
288
322
  @abstractmethod
289
- async def read(self, path: str) -> bytes:
290
- pass
323
+ async def _read(self, path: str) -> bytes:
324
+ """Read the whole file at `path`; `read` adds the optional transfer cap."""
291
325
 
292
326
  @abstractmethod
293
327
  async def write(self, path: str, data: bytes) -> None:
@@ -334,7 +334,7 @@ class DockerRuntime(Runtime):
334
334
  if run.exit_code != 0:
335
335
  raise SandboxError(f"docker exec -d failed: {run.stderr.strip()}")
336
336
 
337
- async def read(self, path: str) -> bytes:
337
+ async def _read(self, path: str) -> bytes:
338
338
  proc = await asyncio.create_subprocess_exec(
339
339
  "docker",
340
340
  "exec",
@@ -165,7 +165,7 @@ class ModalRuntime(Runtime):
165
165
  return path
166
166
  return f"{self.config.workdir.rstrip('/')}/{path}"
167
167
 
168
- async def read(self, path: str) -> bytes:
168
+ async def _read(self, path: str) -> bytes:
169
169
  try:
170
170
  return await self._sandbox.filesystem.read_bytes.aio(self._abs(path))
171
171
  except Exception as e:
@@ -270,7 +270,7 @@ class PrimeRuntime(Runtime):
270
270
  f"prime background launch failed: {result.stderr.strip()}"
271
271
  )
272
272
 
273
- async def read(self, path: str) -> bytes:
273
+ async def _read(self, path: str) -> bytes:
274
274
  # Avoid background-job log limits and base64 overhead by downloading binary data directly.
275
275
  # The temporary file is removed on every exit, and its byte read stays off the event loop.
276
276
  target = (
@@ -96,7 +96,7 @@ class SubprocessRuntime(Runtime):
96
96
  proc
97
97
  ) # killed in stop() — a host process won't die on its own
98
98
 
99
- async def read(self, path: str) -> bytes:
99
+ async def _read(self, path: str) -> bytes:
100
100
  return await asyncio.to_thread((self.workdir / path).read_bytes)
101
101
 
102
102
  async def write(self, path: str, data: bytes) -> None:
@@ -23,7 +23,12 @@ from verifiers.v1.errors import TaskError, boundary
23
23
  from verifiers.v1.state import StateT
24
24
  from verifiers.v1.types import Messages, content_text
25
25
  from verifiers.v1.utils.artifacts import Artifact
26
- from verifiers.v1.utils.decorators import discover_decorated, invoke_all
26
+ from verifiers.v1.utils.decorators import (
27
+ discover_decorated,
28
+ invoke_all,
29
+ seed,
30
+ unseed,
31
+ )
27
32
  from verifiers.v1.utils.generic import concrete_type
28
33
 
29
34
  if TYPE_CHECKING:
@@ -180,31 +185,36 @@ class Task(Generic[DataT, StateT, ConfigT]):
180
185
  judge for judge in judges if not requires_runtime(judge.score)
181
186
  ]
182
187
 
188
+ seed(trace.metrics, (fn.__name__ for fn in metrics))
189
+ seed(trace.rewards, (fn.__name__ for fn in rewards))
190
+ seed(trace.rewards, (judge.reward_name for judge in judges))
191
+
183
192
  metric_results = await invoke_all(metrics, available)
184
193
  for fn, result in zip(metrics, metric_results):
185
194
  if isinstance(result, Mapping):
195
+ unseed(trace.metrics, fn.__name__)
186
196
  trace.record_metrics(result)
187
197
  else:
188
198
  trace.record_metric(fn.__name__, result)
189
199
  reward_results = await invoke_all(rewards, available)
190
200
  for fn, result in zip(rewards, reward_results):
191
201
  weight = getattr(fn, "_vf_weight", 1.0)
192
- items = (
193
- result.items()
194
- if isinstance(result, Mapping)
195
- else [(fn.__name__, result)]
196
- )
202
+ if isinstance(result, Mapping):
203
+ unseed(trace.rewards, fn.__name__)
204
+ items = result.items()
205
+ else:
206
+ items = [(fn.__name__, result)]
197
207
  for key, value in items:
198
208
  trace.record_reward(key, value, weight)
199
209
  judge_results = await invoke_all(
200
210
  [judge.score for judge in judges], available
201
211
  )
202
212
  for judge, result in zip(judges, judge_results):
203
- items = (
204
- result.items()
205
- if isinstance(result, Mapping)
206
- else [(judge.reward_name, result)]
207
- )
213
+ if isinstance(result, Mapping):
214
+ unseed(trace.rewards, judge.reward_name)
215
+ items = result.items()
216
+ else:
217
+ items = [(judge.reward_name, result)]
208
218
  for key, value in items:
209
219
  trace.record_reward(key, value, judge.config.weight)
210
220
 
@@ -0,0 +1,16 @@
1
+ from verifiers.v1.tasksets.harbor.env import HarborEnv, HarborEnvConfig
2
+ from verifiers.v1.tasksets.harbor.taskset import (
3
+ HarborConfig,
4
+ HarborData,
5
+ HarborTask,
6
+ HarborTaskset,
7
+ )
8
+
9
+ __all__ = [
10
+ "HarborConfig",
11
+ "HarborData",
12
+ "HarborEnv",
13
+ "HarborEnvConfig",
14
+ "HarborTask",
15
+ "HarborTaskset",
16
+ ]
@@ -0,0 +1,124 @@
1
+ """The harbor taskset's own env: the single solver seat, plus separate-verifier
2
+ grading for tasks that declare ``[verifier].environment_mode = "separate"``.
3
+
4
+ The default env for harbor runs (the taskset package exports it). A shared-verifier
5
+ task runs exactly as under the single-agent env: one `agent` trace, graded in the
6
+ box it worked in. A separate-verifier task is graded by `finalize` instead: the
7
+ solver's declared artifacts travel (collected by its task `finalize` while its box
8
+ is alive), a fresh box is provisioned from the task's verifier declaration,
9
+ `tests/` is staged there, and the verifier's rewards land on the solver's trace.
10
+ No second agent is involved — the verifier is the task's own `tests/test.sh`.
11
+ """
12
+
13
+ import asyncio
14
+ import logging
15
+ from contextlib import AsyncExitStack
16
+
17
+ from pydantic import Field
18
+
19
+ import verifiers.v1 as vf
20
+ from verifiers.v1.runtimes import RuntimeConfig, provision_runtime
21
+ from verifiers.v1.tasksets.harbor.taskset import (
22
+ HarborTask,
23
+ verifier_box_data,
24
+ )
25
+ from verifiers.v1.utils.artifacts import restore
26
+ from verifiers.v1.utils.compile import resolve_runtime_config
27
+ from verifiers.v1.utils.retries import backoff
28
+
29
+ logger = logging.getLogger(__name__)
30
+
31
+
32
+ class HarborEnvConfig(vf.EnvConfig):
33
+ agent: vf.AgentConfig = vf.AgentConfig()
34
+ """The one seat — the policy under evaluation/training; pin
35
+ `--env.agent.harness.*` to choose its program or runtime."""
36
+ verifier_runtime: RuntimeConfig | None = None
37
+ """Where a separate-verifier task grades. None derives the grading box from
38
+ the solver's runtime policy; set it (e.g. `--env.verifier-runtime.type prime
39
+ --env.verifier-runtime.vm true`) when the verifier needs different placement
40
+ than the agent."""
41
+ verifier_retries: int = Field(2, ge=0)
42
+ """Extra attempts at provisioning-and-grading the separate box before the
43
+ episode fails. Grading is deterministic; what these retry is the
44
+ infrastructure around it (image pulls, provisioning)."""
45
+
46
+
47
+ class HarborEnv(vf.Env[HarborEnvConfig]):
48
+ async def run(self, task: vf.Task, agents: vf.Agents) -> None:
49
+ if not isinstance(task, HarborTask):
50
+ raise TypeError(
51
+ f"the harbor env runs harbor tasks; got {type(task).__name__}"
52
+ )
53
+ if task.data.verifier is None:
54
+ await agents.agent.run(task)
55
+ return
56
+ # Resolve the verifier's box before the solve, so an impossible pairing
57
+ # (e.g. a restricted Prime verifier without vm=true) costs nothing
58
+ # rather than a full agent run.
59
+ self._verifier_config(task)
60
+ await agents.agent.run(task.graded_elsewhere())
61
+
62
+ def _verifier_config(self, task: HarborTask) -> RuntimeConfig:
63
+ base = (
64
+ self.config.verifier_runtime
65
+ if self.config.verifier_runtime is not None
66
+ else self.config.agent.runtime
67
+ )
68
+ return resolve_runtime_config(base, HarborTask(verifier_box_data(task.data)))
69
+
70
+ async def finalize(self, task: vf.Task, episode: vf.Episode) -> None:
71
+ """Grade a separate-verifier task in its own box, onto the solver's trace.
72
+
73
+ Provision a fresh box from the task's verifier declaration, restore the
74
+ solver's collected artifacts, stage `tests/`, run the verifier, and record
75
+ its rewards (and any extra reward.json keys as metrics) on the solver's
76
+ trace. Infrastructure failures retry per `verifier_retries`; the last one
77
+ fails the episode — a grading box that can't be reached must never read
78
+ as reward 0."""
79
+ if not isinstance(task, HarborTask) or task.data.verifier is None:
80
+ return
81
+ solution = episode.traces[0]
82
+ if not solution.ok:
83
+ return
84
+ grader = HarborTask(verifier_box_data(task.data))
85
+ scores = await self._grade(self._verifier_config(task), grader, solution)
86
+ items = scores.items() if isinstance(scores, dict) else [("solved", scores)]
87
+ for name, value in items:
88
+ solution.record_reward(name, value)
89
+
90
+ async def _grade(
91
+ self, config: RuntimeConfig, grader: HarborTask, solution: vf.Trace
92
+ ) -> float | dict[str, float]:
93
+ last: Exception | None = None
94
+ for attempt in range(self.config.verifier_retries + 1):
95
+ if attempt:
96
+ delay = backoff(attempt - 1)
97
+ logger.warning(
98
+ "harbor verifier attempt %d/%d failed (%s); retrying in %.1fs",
99
+ attempt,
100
+ self.config.verifier_retries + 1,
101
+ last,
102
+ delay,
103
+ )
104
+ await asyncio.sleep(delay)
105
+ try:
106
+ # The scoring deadline covers provisioning and grading, but not the
107
+ # box's teardown: a score already in hand must not be discarded
108
+ # because the teardown ran out the clock.
109
+ async with AsyncExitStack() as boxes:
110
+ async with asyncio.timeout(grader.data.timeout.scoring):
111
+ box = await boxes.enter_async_context(provision_runtime(config))
112
+ await box.prepare_setup()
113
+ # Artifacts first, tests second: an artifact entry pointing
114
+ # into /tests must not survive staging, which wipes and
115
+ # rebuilds that directory.
116
+ await restore(box, solution.state.artifacts)
117
+ await grader._stage_tests(box, wipe=True)
118
+ await box.prepare_execution([])
119
+ scores = await grader._graded(box, solution)
120
+ return scores
121
+ except Exception as e: # noqa: BLE001 - each attempt's failure is retried
122
+ last = e
123
+ assert last is not None
124
+ raise last