verifiers 0.2.2.dev65__tar.gz → 0.2.2.dev66__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 (428) hide show
  1. {verifiers-0.2.2.dev65 → verifiers-0.2.2.dev66}/PKG-INFO +1 -1
  2. {verifiers-0.2.2.dev65 → verifiers-0.2.2.dev66}/tests/v1/test_e2e.py +4 -4
  3. {verifiers-0.2.2.dev65 → verifiers-0.2.2.dev66}/verifiers/v1/agent.py +14 -25
  4. {verifiers-0.2.2.dev65 → verifiers-0.2.2.dev66}/verifiers/v1/configs/agent.py +14 -15
  5. {verifiers-0.2.2.dev65 → verifiers-0.2.2.dev66}/verifiers/v1/envs/user_sim/env.py +13 -10
  6. {verifiers-0.2.2.dev65 → verifiers-0.2.2.dev66}/verifiers/v1/errors.py +1 -1
  7. {verifiers-0.2.2.dev65 → verifiers-0.2.2.dev66}/verifiers/v1/interception/__init__.py +35 -2
  8. {verifiers-0.2.2.dev65 → verifiers-0.2.2.dev66}/verifiers/v1/rollout.py +18 -91
  9. {verifiers-0.2.2.dev65 → verifiers-0.2.2.dev66}/.gitignore +0 -0
  10. {verifiers-0.2.2.dev65 → verifiers-0.2.2.dev66}/LICENSE +0 -0
  11. {verifiers-0.2.2.dev65 → verifiers-0.2.2.dev66}/README.md +0 -0
  12. {verifiers-0.2.2.dev65 → verifiers-0.2.2.dev66}/pyproject.toml +0 -0
  13. {verifiers-0.2.2.dev65 → verifiers-0.2.2.dev66}/tests/__init__.py +0 -0
  14. {verifiers-0.2.2.dev65 → verifiers-0.2.2.dev66}/tests/conftest.py +0 -0
  15. {verifiers-0.2.2.dev65 → verifiers-0.2.2.dev66}/tests/test_browser_env.py +0 -0
  16. {verifiers-0.2.2.dev65 → verifiers-0.2.2.dev66}/tests/test_build_script.py +0 -0
  17. {verifiers-0.2.2.dev65 → verifiers-0.2.2.dev66}/tests/test_cli_agent_env.py +0 -0
  18. {verifiers-0.2.2.dev65 → verifiers-0.2.2.dev66}/tests/test_client_auth_errors.py +0 -0
  19. {verifiers-0.2.2.dev65 → verifiers-0.2.2.dev66}/tests/test_client_config.py +0 -0
  20. {verifiers-0.2.2.dev65 → verifiers-0.2.2.dev66}/tests/test_client_multimodal_types.py +0 -0
  21. {verifiers-0.2.2.dev65 → verifiers-0.2.2.dev66}/tests/test_composable_env.py +0 -0
  22. {verifiers-0.2.2.dev65 → verifiers-0.2.2.dev66}/tests/test_context_token_metrics.py +0 -0
  23. {verifiers-0.2.2.dev65 → verifiers-0.2.2.dev66}/tests/test_decorator_ranks.py +0 -0
  24. {verifiers-0.2.2.dev65 → verifiers-0.2.2.dev66}/tests/test_endpoint_registry.py +0 -0
  25. {verifiers-0.2.2.dev65 → verifiers-0.2.2.dev66}/tests/test_env_group.py +0 -0
  26. {verifiers-0.2.2.dev65 → verifiers-0.2.2.dev66}/tests/test_env_server.py +0 -0
  27. {verifiers-0.2.2.dev65 → verifiers-0.2.2.dev66}/tests/test_environment.py +0 -0
  28. {verifiers-0.2.2.dev65 → verifiers-0.2.2.dev66}/tests/test_environment_extra.py +0 -0
  29. {verifiers-0.2.2.dev65 → verifiers-0.2.2.dev66}/tests/test_error_chain.py +0 -0
  30. {verifiers-0.2.2.dev65 → verifiers-0.2.2.dev66}/tests/test_eval_display.py +0 -0
  31. {verifiers-0.2.2.dev65 → verifiers-0.2.2.dev66}/tests/test_eval_utils.py +0 -0
  32. {verifiers-0.2.2.dev65 → verifiers-0.2.2.dev66}/tests/test_gepa_cli.py +0 -0
  33. {verifiers-0.2.2.dev65 → verifiers-0.2.2.dev66}/tests/test_gepa_utils.py +0 -0
  34. {verifiers-0.2.2.dev65 → verifiers-0.2.2.dev66}/tests/test_gym_env.py +0 -0
  35. {verifiers-0.2.2.dev65 → verifiers-0.2.2.dev66}/tests/test_harbor_env_mcp.py +0 -0
  36. {verifiers-0.2.2.dev65 → verifiers-0.2.2.dev66}/tests/test_imports.py +0 -0
  37. {verifiers-0.2.2.dev65 → verifiers-0.2.2.dev66}/tests/test_init_script.py +0 -0
  38. {verifiers-0.2.2.dev65 → verifiers-0.2.2.dev66}/tests/test_install_utils.py +0 -0
  39. {verifiers-0.2.2.dev65 → verifiers-0.2.2.dev66}/tests/test_interception_utils.py +0 -0
  40. {verifiers-0.2.2.dev65 → verifiers-0.2.2.dev66}/tests/test_logging.py +0 -0
  41. {verifiers-0.2.2.dev65 → verifiers-0.2.2.dev66}/tests/test_math_rubric.py +0 -0
  42. {verifiers-0.2.2.dev65 → verifiers-0.2.2.dev66}/tests/test_maybe_think_parser.py +0 -0
  43. {verifiers-0.2.2.dev65 → verifiers-0.2.2.dev66}/tests/test_message_utils.py +0 -0
  44. {verifiers-0.2.2.dev65 → verifiers-0.2.2.dev66}/tests/test_message_utils_multimodal.py +0 -0
  45. {verifiers-0.2.2.dev65 → verifiers-0.2.2.dev66}/tests/test_multiturn_env.py +0 -0
  46. {verifiers-0.2.2.dev65 → verifiers-0.2.2.dev66}/tests/test_nemorl_client.py +0 -0
  47. {verifiers-0.2.2.dev65 → verifiers-0.2.2.dev66}/tests/test_openai_chat_completions_token_client.py +0 -0
  48. {verifiers-0.2.2.dev65 → verifiers-0.2.2.dev66}/tests/test_openai_responses_client.py +0 -0
  49. {verifiers-0.2.2.dev65 → verifiers-0.2.2.dev66}/tests/test_opencode_rlm_env.py +0 -0
  50. {verifiers-0.2.2.dev65 → verifiers-0.2.2.dev66}/tests/test_openenv_client.py +0 -0
  51. {verifiers-0.2.2.dev65 → verifiers-0.2.2.dev66}/tests/test_parser.py +0 -0
  52. {verifiers-0.2.2.dev65 → verifiers-0.2.2.dev66}/tests/test_path_utils.py +0 -0
  53. {verifiers-0.2.2.dev65 → verifiers-0.2.2.dev66}/tests/test_per_turn_timing.py +0 -0
  54. {verifiers-0.2.2.dev65 → verifiers-0.2.2.dev66}/tests/test_pricing_utils.py +0 -0
  55. {verifiers-0.2.2.dev65 → verifiers-0.2.2.dev66}/tests/test_prime_plugin.py +0 -0
  56. {verifiers-0.2.2.dev65 → verifiers-0.2.2.dev66}/tests/test_renderer_client.py +0 -0
  57. {verifiers-0.2.2.dev65 → verifiers-0.2.2.dev66}/tests/test_renderer_e2e.py +0 -0
  58. {verifiers-0.2.2.dev65 → verifiers-0.2.2.dev66}/tests/test_rlm_composable_env.py +0 -0
  59. {verifiers-0.2.2.dev65 → verifiers-0.2.2.dev66}/tests/test_rubric.py +0 -0
  60. {verifiers-0.2.2.dev65 → verifiers-0.2.2.dev66}/tests/test_rubric_group.py +0 -0
  61. {verifiers-0.2.2.dev65 → verifiers-0.2.2.dev66}/tests/test_sandbox_debug_env.py +0 -0
  62. {verifiers-0.2.2.dev65 → verifiers-0.2.2.dev66}/tests/test_sandbox_env.py +0 -0
  63. {verifiers-0.2.2.dev65 → verifiers-0.2.2.dev66}/tests/test_sandbox_mixin.py +0 -0
  64. {verifiers-0.2.2.dev65 → verifiers-0.2.2.dev66}/tests/test_save_utils.py +0 -0
  65. {verifiers-0.2.2.dev65 → verifiers-0.2.2.dev66}/tests/test_setup_script.py +0 -0
  66. {verifiers-0.2.2.dev65 → verifiers-0.2.2.dev66}/tests/test_singleturn_env.py +0 -0
  67. {verifiers-0.2.2.dev65 → verifiers-0.2.2.dev66}/tests/test_stateful_tool_env.py +0 -0
  68. {verifiers-0.2.2.dev65 → verifiers-0.2.2.dev66}/tests/test_think_parser.py +0 -0
  69. {verifiers-0.2.2.dev65 → verifiers-0.2.2.dev66}/tests/test_tool_env.py +0 -0
  70. {verifiers-0.2.2.dev65 → verifiers-0.2.2.dev66}/tests/test_tool_utils.py +0 -0
  71. {verifiers-0.2.2.dev65 → verifiers-0.2.2.dev66}/tests/test_trajectory_processing.py +0 -0
  72. {verifiers-0.2.2.dev65 → verifiers-0.2.2.dev66}/tests/test_tui_info_formatting.py +0 -0
  73. {verifiers-0.2.2.dev65 → verifiers-0.2.2.dev66}/tests/test_types.py +0 -0
  74. {verifiers-0.2.2.dev65 → verifiers-0.2.2.dev66}/tests/test_xml_parser.py +0 -0
  75. {verifiers-0.2.2.dev65 → verifiers-0.2.2.dev66}/tests/v1/conftest.py +0 -0
  76. {verifiers-0.2.2.dev65 → verifiers-0.2.2.dev66}/tests/v1/fixtures/counter_tool_v1.py +0 -0
  77. {verifiers-0.2.2.dev65 → verifiers-0.2.2.dev66}/tests/v1/fixtures/duet_v1.py +0 -0
  78. {verifiers-0.2.2.dev65 → verifiers-0.2.2.dev66}/tests/v1/fixtures/echo_acp_resume_v1.py +0 -0
  79. {verifiers-0.2.2.dev65 → verifiers-0.2.2.dev66}/tests/v1/fixtures/echo_agentic_v1.py +0 -0
  80. {verifiers-0.2.2.dev65 → verifiers-0.2.2.dev66}/tests/v1/fixtures/echo_multi_v0.py +0 -0
  81. {verifiers-0.2.2.dev65 → verifiers-0.2.2.dev66}/tests/v1/fixtures/echo_tool_v1.py +0 -0
  82. {verifiers-0.2.2.dev65 → verifiers-0.2.2.dev66}/tests/v1/fixtures/echo_user_sim_v1.py +0 -0
  83. {verifiers-0.2.2.dev65 → verifiers-0.2.2.dev66}/tests/v1/fixtures/echo_v0.py +0 -0
  84. {verifiers-0.2.2.dev65 → verifiers-0.2.2.dev66}/tests/v1/fixtures/echo_v1.py +0 -0
  85. {verifiers-0.2.2.dev65 → verifiers-0.2.2.dev66}/tests/v1/fixtures/pyproject.toml +0 -0
  86. {verifiers-0.2.2.dev65 → verifiers-0.2.2.dev66}/tests/v1/fixtures/tool_response_image_v1.py +0 -0
  87. {verifiers-0.2.2.dev65 → verifiers-0.2.2.dev66}/tests/v1/test_color_codeword_tasks.py +0 -0
  88. {verifiers-0.2.2.dev65 → verifiers-0.2.2.dev66}/tests/v1/test_configs.py +0 -0
  89. {verifiers-0.2.2.dev65 → verifiers-0.2.2.dev66}/tests/v1/test_envs.py +0 -0
  90. {verifiers-0.2.2.dev65 → verifiers-0.2.2.dev66}/tests/v1/test_graph.py +0 -0
  91. {verifiers-0.2.2.dev65 → verifiers-0.2.2.dev66}/tests/v1/test_judges.py +0 -0
  92. {verifiers-0.2.2.dev65 → verifiers-0.2.2.dev66}/tests/v1/test_legacy.py +0 -0
  93. {verifiers-0.2.2.dev65 → verifiers-0.2.2.dev66}/tests/v1/test_scoring.py +0 -0
  94. {verifiers-0.2.2.dev65 → verifiers-0.2.2.dev66}/tests/v1/test_taskset.py +0 -0
  95. {verifiers-0.2.2.dev65 → verifiers-0.2.2.dev66}/tests/v1/test_trace.py +0 -0
  96. {verifiers-0.2.2.dev65 → verifiers-0.2.2.dev66}/verifiers/__init__.py +0 -0
  97. {verifiers-0.2.2.dev65 → verifiers-0.2.2.dev66}/verifiers/cli/__init__.py +0 -0
  98. {verifiers-0.2.2.dev65 → verifiers-0.2.2.dev66}/verifiers/cli/commands/__init__.py +0 -0
  99. {verifiers-0.2.2.dev65 → verifiers-0.2.2.dev66}/verifiers/cli/commands/build.py +0 -0
  100. {verifiers-0.2.2.dev65 → verifiers-0.2.2.dev66}/verifiers/cli/commands/eval.py +0 -0
  101. {verifiers-0.2.2.dev65 → verifiers-0.2.2.dev66}/verifiers/cli/commands/gepa.py +0 -0
  102. {verifiers-0.2.2.dev65 → verifiers-0.2.2.dev66}/verifiers/cli/commands/init.py +0 -0
  103. {verifiers-0.2.2.dev65 → verifiers-0.2.2.dev66}/verifiers/cli/commands/install.py +0 -0
  104. {verifiers-0.2.2.dev65 → verifiers-0.2.2.dev66}/verifiers/cli/commands/setup.py +0 -0
  105. {verifiers-0.2.2.dev65 → verifiers-0.2.2.dev66}/verifiers/cli/plugins/__init__.py +0 -0
  106. {verifiers-0.2.2.dev65 → verifiers-0.2.2.dev66}/verifiers/cli/plugins/prime.py +0 -0
  107. {verifiers-0.2.2.dev65 → verifiers-0.2.2.dev66}/verifiers/cli/tui.py +0 -0
  108. {verifiers-0.2.2.dev65 → verifiers-0.2.2.dev66}/verifiers/clients/__init__.py +0 -0
  109. {verifiers-0.2.2.dev65 → verifiers-0.2.2.dev66}/verifiers/clients/anthropic_messages_client.py +0 -0
  110. {verifiers-0.2.2.dev65 → verifiers-0.2.2.dev66}/verifiers/clients/client.py +0 -0
  111. {verifiers-0.2.2.dev65 → verifiers-0.2.2.dev66}/verifiers/clients/nemorl_chat_completions_client.py +0 -0
  112. {verifiers-0.2.2.dev65 → verifiers-0.2.2.dev66}/verifiers/clients/openai_chat_completions_client.py +0 -0
  113. {verifiers-0.2.2.dev65 → verifiers-0.2.2.dev66}/verifiers/clients/openai_chat_completions_token_client.py +0 -0
  114. {verifiers-0.2.2.dev65 → verifiers-0.2.2.dev66}/verifiers/clients/openai_completions_client.py +0 -0
  115. {verifiers-0.2.2.dev65 → verifiers-0.2.2.dev66}/verifiers/clients/openai_responses_client.py +0 -0
  116. {verifiers-0.2.2.dev65 → verifiers-0.2.2.dev66}/verifiers/clients/renderer_client.py +0 -0
  117. {verifiers-0.2.2.dev65 → verifiers-0.2.2.dev66}/verifiers/decorators.py +0 -0
  118. {verifiers-0.2.2.dev65 → verifiers-0.2.2.dev66}/verifiers/envs/__init__.py +0 -0
  119. {verifiers-0.2.2.dev65 → verifiers-0.2.2.dev66}/verifiers/envs/env_group.py +0 -0
  120. {verifiers-0.2.2.dev65 → verifiers-0.2.2.dev66}/verifiers/envs/environment.py +0 -0
  121. {verifiers-0.2.2.dev65 → verifiers-0.2.2.dev66}/verifiers/envs/experimental/README.md +0 -0
  122. {verifiers-0.2.2.dev65 → verifiers-0.2.2.dev66}/verifiers/envs/experimental/__init__.py +0 -0
  123. {verifiers-0.2.2.dev65 → verifiers-0.2.2.dev66}/verifiers/envs/experimental/cli_agent_env.py +0 -0
  124. {verifiers-0.2.2.dev65 → verifiers-0.2.2.dev66}/verifiers/envs/experimental/composable/README.md +0 -0
  125. {verifiers-0.2.2.dev65 → verifiers-0.2.2.dev66}/verifiers/envs/experimental/composable/__init__.py +0 -0
  126. {verifiers-0.2.2.dev65 → verifiers-0.2.2.dev66}/verifiers/envs/experimental/composable/_filter.py +0 -0
  127. {verifiers-0.2.2.dev65 → verifiers-0.2.2.dev66}/verifiers/envs/experimental/composable/composable_env.py +0 -0
  128. {verifiers-0.2.2.dev65 → verifiers-0.2.2.dev66}/verifiers/envs/experimental/composable/harness.py +0 -0
  129. {verifiers-0.2.2.dev65 → verifiers-0.2.2.dev66}/verifiers/envs/experimental/composable/harnesses/__init__.py +0 -0
  130. {verifiers-0.2.2.dev65 → verifiers-0.2.2.dev66}/verifiers/envs/experimental/composable/harnesses/mini_swe_agent.py +0 -0
  131. {verifiers-0.2.2.dev65 → verifiers-0.2.2.dev66}/verifiers/envs/experimental/composable/harnesses/opencode.py +0 -0
  132. {verifiers-0.2.2.dev65 → verifiers-0.2.2.dev66}/verifiers/envs/experimental/composable/harnesses/prompt.txt +0 -0
  133. {verifiers-0.2.2.dev65 → verifiers-0.2.2.dev66}/verifiers/envs/experimental/composable/harnesses/rlm.py +0 -0
  134. {verifiers-0.2.2.dev65 → verifiers-0.2.2.dev66}/verifiers/envs/experimental/composable/sandbox_debug_env.py +0 -0
  135. {verifiers-0.2.2.dev65 → verifiers-0.2.2.dev66}/verifiers/envs/experimental/composable/swe_debug_env.py +0 -0
  136. {verifiers-0.2.2.dev65 → verifiers-0.2.2.dev66}/verifiers/envs/experimental/composable/task.py +0 -0
  137. {verifiers-0.2.2.dev65 → verifiers-0.2.2.dev66}/verifiers/envs/experimental/composable/tasksets/__init__.py +0 -0
  138. {verifiers-0.2.2.dev65 → verifiers-0.2.2.dev66}/verifiers/envs/experimental/composable/tasksets/cp/__init__.py +0 -0
  139. {verifiers-0.2.2.dev65 → verifiers-0.2.2.dev66}/verifiers/envs/experimental/composable/tasksets/cp/cp_task.py +0 -0
  140. {verifiers-0.2.2.dev65 → verifiers-0.2.2.dev66}/verifiers/envs/experimental/composable/tasksets/cp/test_utils.py +0 -0
  141. {verifiers-0.2.2.dev65 → verifiers-0.2.2.dev66}/verifiers/envs/experimental/composable/tasksets/harbor/__init__.py +0 -0
  142. {verifiers-0.2.2.dev65 → verifiers-0.2.2.dev66}/verifiers/envs/experimental/composable/tasksets/harbor/cli_gym.py +0 -0
  143. {verifiers-0.2.2.dev65 → verifiers-0.2.2.dev66}/verifiers/envs/experimental/composable/tasksets/harbor/harbor.py +0 -0
  144. {verifiers-0.2.2.dev65 → verifiers-0.2.2.dev66}/verifiers/envs/experimental/composable/tasksets/harbor/terminal_lego.py +0 -0
  145. {verifiers-0.2.2.dev65 → verifiers-0.2.2.dev66}/verifiers/envs/experimental/composable/tasksets/math/__init__.py +0 -0
  146. {verifiers-0.2.2.dev65 → verifiers-0.2.2.dev66}/verifiers/envs/experimental/composable/tasksets/math/math_task.py +0 -0
  147. {verifiers-0.2.2.dev65 → verifiers-0.2.2.dev66}/verifiers/envs/experimental/composable/tasksets/swe/README.md +0 -0
  148. {verifiers-0.2.2.dev65 → verifiers-0.2.2.dev66}/verifiers/envs/experimental/composable/tasksets/swe/__init__.py +0 -0
  149. {verifiers-0.2.2.dev65 → verifiers-0.2.2.dev66}/verifiers/envs/experimental/composable/tasksets/swe/multi_swe/__init__.py +0 -0
  150. {verifiers-0.2.2.dev65 → verifiers-0.2.2.dev66}/verifiers/envs/experimental/composable/tasksets/swe/multi_swe/extract_fix_patch.sh +0 -0
  151. {verifiers-0.2.2.dev65 → verifiers-0.2.2.dev66}/verifiers/envs/experimental/composable/tasksets/swe/multi_swe/taskset.py +0 -0
  152. {verifiers-0.2.2.dev65 → verifiers-0.2.2.dev66}/verifiers/envs/experimental/composable/tasksets/swe/openswe/__init__.py +0 -0
  153. {verifiers-0.2.2.dev65 → verifiers-0.2.2.dev66}/verifiers/envs/experimental/composable/tasksets/swe/openswe/taskset.py +0 -0
  154. {verifiers-0.2.2.dev65 → verifiers-0.2.2.dev66}/verifiers/envs/experimental/composable/tasksets/swe/r2e_gym/__init__.py +0 -0
  155. {verifiers-0.2.2.dev65 → verifiers-0.2.2.dev66}/verifiers/envs/experimental/composable/tasksets/swe/r2e_gym/log_parser.py +0 -0
  156. {verifiers-0.2.2.dev65 → verifiers-0.2.2.dev66}/verifiers/envs/experimental/composable/tasksets/swe/r2e_gym/taskset.py +0 -0
  157. {verifiers-0.2.2.dev65 → verifiers-0.2.2.dev66}/verifiers/envs/experimental/composable/tasksets/swe/scale_swe/__init__.py +0 -0
  158. {verifiers-0.2.2.dev65 → verifiers-0.2.2.dev66}/verifiers/envs/experimental/composable/tasksets/swe/scale_swe/taskset.py +0 -0
  159. {verifiers-0.2.2.dev65 → verifiers-0.2.2.dev66}/verifiers/envs/experimental/composable/tasksets/swe/shared/__init__.py +0 -0
  160. {verifiers-0.2.2.dev65 → verifiers-0.2.2.dev66}/verifiers/envs/experimental/composable/tasksets/swe/shared/test_patch.py +0 -0
  161. {verifiers-0.2.2.dev65 → verifiers-0.2.2.dev66}/verifiers/envs/experimental/composable/tasksets/swe/swe_bench/__init__.py +0 -0
  162. {verifiers-0.2.2.dev65 → verifiers-0.2.2.dev66}/verifiers/envs/experimental/composable/tasksets/swe/swe_bench/taskset.py +0 -0
  163. {verifiers-0.2.2.dev65 → verifiers-0.2.2.dev66}/verifiers/envs/experimental/composable/tasksets/swe/swe_lego/__init__.py +0 -0
  164. {verifiers-0.2.2.dev65 → verifiers-0.2.2.dev66}/verifiers/envs/experimental/composable/tasksets/swe/swe_lego/taskset.py +0 -0
  165. {verifiers-0.2.2.dev65 → verifiers-0.2.2.dev66}/verifiers/envs/experimental/composable/tasksets/swe/swe_rebench_v2/__init__.py +0 -0
  166. {verifiers-0.2.2.dev65 → verifiers-0.2.2.dev66}/verifiers/envs/experimental/composable/tasksets/swe/swe_rebench_v2/log_parsers.py +0 -0
  167. {verifiers-0.2.2.dev65 → verifiers-0.2.2.dev66}/verifiers/envs/experimental/composable/tasksets/swe/swe_rebench_v2/taskset.py +0 -0
  168. {verifiers-0.2.2.dev65 → verifiers-0.2.2.dev66}/verifiers/envs/experimental/composable/tasksets/swe/swe_smith/__init__.py +0 -0
  169. {verifiers-0.2.2.dev65 → verifiers-0.2.2.dev66}/verifiers/envs/experimental/composable/tasksets/swe/swe_smith/taskset.py +0 -0
  170. {verifiers-0.2.2.dev65 → verifiers-0.2.2.dev66}/verifiers/envs/experimental/composable/tasksets/swe/swe_tasksets.py +0 -0
  171. {verifiers-0.2.2.dev65 → verifiers-0.2.2.dev66}/verifiers/envs/experimental/gym_env.py +0 -0
  172. {verifiers-0.2.2.dev65 → verifiers-0.2.2.dev66}/verifiers/envs/experimental/harbor_env/__init__.py +0 -0
  173. {verifiers-0.2.2.dev65 → verifiers-0.2.2.dev66}/verifiers/envs/experimental/harbor_env/env.py +0 -0
  174. {verifiers-0.2.2.dev65 → verifiers-0.2.2.dev66}/verifiers/envs/experimental/harbor_env/mcp.py +0 -0
  175. {verifiers-0.2.2.dev65 → verifiers-0.2.2.dev66}/verifiers/envs/experimental/mcp_env.py +0 -0
  176. {verifiers-0.2.2.dev65 → verifiers-0.2.2.dev66}/verifiers/envs/experimental/opencode_env.py +0 -0
  177. {verifiers-0.2.2.dev65 → verifiers-0.2.2.dev66}/verifiers/envs/experimental/opencode_qa_env.py +0 -0
  178. {verifiers-0.2.2.dev65 → verifiers-0.2.2.dev66}/verifiers/envs/experimental/opencode_rlm_env.py +0 -0
  179. {verifiers-0.2.2.dev65 → verifiers-0.2.2.dev66}/verifiers/envs/experimental/sandbox_mixin.py +0 -0
  180. {verifiers-0.2.2.dev65 → verifiers-0.2.2.dev66}/verifiers/envs/experimental/utils/__init__.py +0 -0
  181. {verifiers-0.2.2.dev65 → verifiers-0.2.2.dev66}/verifiers/envs/experimental/utils/file_locks.py +0 -0
  182. {verifiers-0.2.2.dev65 → verifiers-0.2.2.dev66}/verifiers/envs/experimental/utils/git_checkout_cache.py +0 -0
  183. {verifiers-0.2.2.dev65 → verifiers-0.2.2.dev66}/verifiers/envs/integrations/README.md +0 -0
  184. {verifiers-0.2.2.dev65 → verifiers-0.2.2.dev66}/verifiers/envs/integrations/__init__.py +0 -0
  185. {verifiers-0.2.2.dev65 → verifiers-0.2.2.dev66}/verifiers/envs/integrations/browser_env/README.md +0 -0
  186. {verifiers-0.2.2.dev65 → verifiers-0.2.2.dev66}/verifiers/envs/integrations/browser_env/__init__.py +0 -0
  187. {verifiers-0.2.2.dev65 → verifiers-0.2.2.dev66}/verifiers/envs/integrations/browser_env/browser_env.py +0 -0
  188. {verifiers-0.2.2.dev65 → verifiers-0.2.2.dev66}/verifiers/envs/integrations/browser_env/modes/__init__.py +0 -0
  189. {verifiers-0.2.2.dev65 → verifiers-0.2.2.dev66}/verifiers/envs/integrations/browser_env/modes/base.py +0 -0
  190. {verifiers-0.2.2.dev65 → verifiers-0.2.2.dev66}/verifiers/envs/integrations/browser_env/modes/cua_mode.py +0 -0
  191. {verifiers-0.2.2.dev65 → verifiers-0.2.2.dev66}/verifiers/envs/integrations/browser_env/modes/dom_mode.py +0 -0
  192. {verifiers-0.2.2.dev65 → verifiers-0.2.2.dev66}/verifiers/envs/integrations/openenv_env.py +0 -0
  193. {verifiers-0.2.2.dev65 → verifiers-0.2.2.dev66}/verifiers/envs/integrations/reasoninggym_env.py +0 -0
  194. {verifiers-0.2.2.dev65 → verifiers-0.2.2.dev66}/verifiers/envs/integrations/textarena_env.py +0 -0
  195. {verifiers-0.2.2.dev65 → verifiers-0.2.2.dev66}/verifiers/envs/multiturn_env.py +0 -0
  196. {verifiers-0.2.2.dev65 → verifiers-0.2.2.dev66}/verifiers/envs/python_env.py +0 -0
  197. {verifiers-0.2.2.dev65 → verifiers-0.2.2.dev66}/verifiers/envs/sandbox_env.py +0 -0
  198. {verifiers-0.2.2.dev65 → verifiers-0.2.2.dev66}/verifiers/envs/singleturn_env.py +0 -0
  199. {verifiers-0.2.2.dev65 → verifiers-0.2.2.dev66}/verifiers/envs/stateful_tool_env.py +0 -0
  200. {verifiers-0.2.2.dev65 → verifiers-0.2.2.dev66}/verifiers/envs/tool_env.py +0 -0
  201. {verifiers-0.2.2.dev65 → verifiers-0.2.2.dev66}/verifiers/errors.py +0 -0
  202. {verifiers-0.2.2.dev65 → verifiers-0.2.2.dev66}/verifiers/gepa/__init__.py +0 -0
  203. {verifiers-0.2.2.dev65 → verifiers-0.2.2.dev66}/verifiers/gepa/adapter.py +0 -0
  204. {verifiers-0.2.2.dev65 → verifiers-0.2.2.dev66}/verifiers/gepa/config.py +0 -0
  205. {verifiers-0.2.2.dev65 → verifiers-0.2.2.dev66}/verifiers/gepa/display.py +0 -0
  206. {verifiers-0.2.2.dev65 → verifiers-0.2.2.dev66}/verifiers/gepa/gepa_utils.py +0 -0
  207. {verifiers-0.2.2.dev65 → verifiers-0.2.2.dev66}/verifiers/parsers/__init__.py +0 -0
  208. {verifiers-0.2.2.dev65 → verifiers-0.2.2.dev66}/verifiers/parsers/maybe_think_parser.py +0 -0
  209. {verifiers-0.2.2.dev65 → verifiers-0.2.2.dev66}/verifiers/parsers/parser.py +0 -0
  210. {verifiers-0.2.2.dev65 → verifiers-0.2.2.dev66}/verifiers/parsers/think_parser.py +0 -0
  211. {verifiers-0.2.2.dev65 → verifiers-0.2.2.dev66}/verifiers/parsers/xml_parser.py +0 -0
  212. {verifiers-0.2.2.dev65 → verifiers-0.2.2.dev66}/verifiers/rubrics/__init__.py +0 -0
  213. {verifiers-0.2.2.dev65 → verifiers-0.2.2.dev66}/verifiers/rubrics/experimental/hybrid_math_rubric.py +0 -0
  214. {verifiers-0.2.2.dev65 → verifiers-0.2.2.dev66}/verifiers/rubrics/judge_rubric.py +0 -0
  215. {verifiers-0.2.2.dev65 → verifiers-0.2.2.dev66}/verifiers/rubrics/math_rubric.py +0 -0
  216. {verifiers-0.2.2.dev65 → verifiers-0.2.2.dev66}/verifiers/rubrics/rubric.py +0 -0
  217. {verifiers-0.2.2.dev65 → verifiers-0.2.2.dev66}/verifiers/rubrics/rubric_group.py +0 -0
  218. {verifiers-0.2.2.dev65 → verifiers-0.2.2.dev66}/verifiers/scripts/__init__.py +0 -0
  219. {verifiers-0.2.2.dev65 → verifiers-0.2.2.dev66}/verifiers/scripts/build.py +0 -0
  220. {verifiers-0.2.2.dev65 → verifiers-0.2.2.dev66}/verifiers/scripts/eval.py +0 -0
  221. {verifiers-0.2.2.dev65 → verifiers-0.2.2.dev66}/verifiers/scripts/gepa.py +0 -0
  222. {verifiers-0.2.2.dev65 → verifiers-0.2.2.dev66}/verifiers/scripts/init.py +0 -0
  223. {verifiers-0.2.2.dev65 → verifiers-0.2.2.dev66}/verifiers/scripts/install.py +0 -0
  224. {verifiers-0.2.2.dev65 → verifiers-0.2.2.dev66}/verifiers/scripts/setup.py +0 -0
  225. {verifiers-0.2.2.dev65 → verifiers-0.2.2.dev66}/verifiers/scripts/tui.py +0 -0
  226. {verifiers-0.2.2.dev65 → verifiers-0.2.2.dev66}/verifiers/serve/__init__.py +0 -0
  227. {verifiers-0.2.2.dev65 → verifiers-0.2.2.dev66}/verifiers/serve/client/env_client.py +0 -0
  228. {verifiers-0.2.2.dev65 → verifiers-0.2.2.dev66}/verifiers/serve/client/zmq_env_client.py +0 -0
  229. {verifiers-0.2.2.dev65 → verifiers-0.2.2.dev66}/verifiers/serve/server/__init__.py +0 -0
  230. {verifiers-0.2.2.dev65 → verifiers-0.2.2.dev66}/verifiers/serve/server/env_router.py +0 -0
  231. {verifiers-0.2.2.dev65 → verifiers-0.2.2.dev66}/verifiers/serve/server/env_server.py +0 -0
  232. {verifiers-0.2.2.dev65 → verifiers-0.2.2.dev66}/verifiers/serve/server/env_worker.py +0 -0
  233. {verifiers-0.2.2.dev65 → verifiers-0.2.2.dev66}/verifiers/serve/server/zmq_env_server.py +0 -0
  234. {verifiers-0.2.2.dev65 → verifiers-0.2.2.dev66}/verifiers/serve/types.py +0 -0
  235. {verifiers-0.2.2.dev65 → verifiers-0.2.2.dev66}/verifiers/types.py +0 -0
  236. {verifiers-0.2.2.dev65 → verifiers-0.2.2.dev66}/verifiers/utils/__init__.py +0 -0
  237. {verifiers-0.2.2.dev65 → verifiers-0.2.2.dev66}/verifiers/utils/async_utils.py +0 -0
  238. {verifiers-0.2.2.dev65 → verifiers-0.2.2.dev66}/verifiers/utils/client_utils.py +0 -0
  239. {verifiers-0.2.2.dev65 → verifiers-0.2.2.dev66}/verifiers/utils/config_utils.py +0 -0
  240. {verifiers-0.2.2.dev65 → verifiers-0.2.2.dev66}/verifiers/utils/data_utils.py +0 -0
  241. {verifiers-0.2.2.dev65 → verifiers-0.2.2.dev66}/verifiers/utils/display_utils.py +0 -0
  242. {verifiers-0.2.2.dev65 → verifiers-0.2.2.dev66}/verifiers/utils/env_config_utils.py +0 -0
  243. {verifiers-0.2.2.dev65 → verifiers-0.2.2.dev66}/verifiers/utils/env_utils.py +0 -0
  244. {verifiers-0.2.2.dev65 → verifiers-0.2.2.dev66}/verifiers/utils/error_utils.py +0 -0
  245. {verifiers-0.2.2.dev65 → verifiers-0.2.2.dev66}/verifiers/utils/eval_display.py +0 -0
  246. {verifiers-0.2.2.dev65 → verifiers-0.2.2.dev66}/verifiers/utils/eval_utils.py +0 -0
  247. {verifiers-0.2.2.dev65 → verifiers-0.2.2.dev66}/verifiers/utils/heartbeat.py +0 -0
  248. {verifiers-0.2.2.dev65 → verifiers-0.2.2.dev66}/verifiers/utils/import_utils.py +0 -0
  249. {verifiers-0.2.2.dev65 → verifiers-0.2.2.dev66}/verifiers/utils/install_utils.py +0 -0
  250. {verifiers-0.2.2.dev65 → verifiers-0.2.2.dev66}/verifiers/utils/interception_utils.py +0 -0
  251. {verifiers-0.2.2.dev65 → verifiers-0.2.2.dev66}/verifiers/utils/logging_utils.py +0 -0
  252. {verifiers-0.2.2.dev65 → verifiers-0.2.2.dev66}/verifiers/utils/message_utils.py +0 -0
  253. {verifiers-0.2.2.dev65 → verifiers-0.2.2.dev66}/verifiers/utils/metric_utils.py +0 -0
  254. {verifiers-0.2.2.dev65 → verifiers-0.2.2.dev66}/verifiers/utils/path_utils.py +0 -0
  255. {verifiers-0.2.2.dev65 → verifiers-0.2.2.dev66}/verifiers/utils/pricing_utils.py +0 -0
  256. {verifiers-0.2.2.dev65 → verifiers-0.2.2.dev66}/verifiers/utils/process_utils.py +0 -0
  257. {verifiers-0.2.2.dev65 → verifiers-0.2.2.dev66}/verifiers/utils/response_utils.py +0 -0
  258. {verifiers-0.2.2.dev65 → verifiers-0.2.2.dev66}/verifiers/utils/save_utils.py +0 -0
  259. {verifiers-0.2.2.dev65 → verifiers-0.2.2.dev66}/verifiers/utils/serve_utils.py +0 -0
  260. {verifiers-0.2.2.dev65 → verifiers-0.2.2.dev66}/verifiers/utils/thread_utils.py +0 -0
  261. {verifiers-0.2.2.dev65 → verifiers-0.2.2.dev66}/verifiers/utils/threaded_sandbox_client.py +0 -0
  262. {verifiers-0.2.2.dev65 → verifiers-0.2.2.dev66}/verifiers/utils/tool_utils.py +0 -0
  263. {verifiers-0.2.2.dev65 → verifiers-0.2.2.dev66}/verifiers/utils/usage_utils.py +0 -0
  264. {verifiers-0.2.2.dev65 → verifiers-0.2.2.dev66}/verifiers/utils/version_utils.py +0 -0
  265. {verifiers-0.2.2.dev65 → verifiers-0.2.2.dev66}/verifiers/v1/__init__.py +0 -0
  266. {verifiers-0.2.2.dev65 → verifiers-0.2.2.dev66}/verifiers/v1/acp/__init__.py +0 -0
  267. {verifiers-0.2.2.dev65 → verifiers-0.2.2.dev66}/verifiers/v1/acp/_runner.py +0 -0
  268. {verifiers-0.2.2.dev65 → verifiers-0.2.2.dev66}/verifiers/v1/cli/__init__.py +0 -0
  269. {verifiers-0.2.2.dev65 → verifiers-0.2.2.dev66}/verifiers/v1/cli/dashboard/__init__.py +0 -0
  270. {verifiers-0.2.2.dev65 → verifiers-0.2.2.dev66}/verifiers/v1/cli/dashboard/base.py +0 -0
  271. {verifiers-0.2.2.dev65 → verifiers-0.2.2.dev66}/verifiers/v1/cli/dashboard/eval.py +0 -0
  272. {verifiers-0.2.2.dev65 → verifiers-0.2.2.dev66}/verifiers/v1/cli/dashboard/replay.py +0 -0
  273. {verifiers-0.2.2.dev65 → verifiers-0.2.2.dev66}/verifiers/v1/cli/dashboard/validate.py +0 -0
  274. {verifiers-0.2.2.dev65 → verifiers-0.2.2.dev66}/verifiers/v1/cli/debug.py +0 -0
  275. {verifiers-0.2.2.dev65 → verifiers-0.2.2.dev66}/verifiers/v1/cli/eval/__init__.py +0 -0
  276. {verifiers-0.2.2.dev65 → verifiers-0.2.2.dev66}/verifiers/v1/cli/eval/main.py +0 -0
  277. {verifiers-0.2.2.dev65 → verifiers-0.2.2.dev66}/verifiers/v1/cli/eval/resume.py +0 -0
  278. {verifiers-0.2.2.dev65 → verifiers-0.2.2.dev66}/verifiers/v1/cli/eval/runner.py +0 -0
  279. {verifiers-0.2.2.dev65 → verifiers-0.2.2.dev66}/verifiers/v1/cli/gepa.py +0 -0
  280. {verifiers-0.2.2.dev65 → verifiers-0.2.2.dev66}/verifiers/v1/cli/init.py +0 -0
  281. {verifiers-0.2.2.dev65 → verifiers-0.2.2.dev66}/verifiers/v1/cli/output.py +0 -0
  282. {verifiers-0.2.2.dev65 → verifiers-0.2.2.dev66}/verifiers/v1/cli/replay.py +0 -0
  283. {verifiers-0.2.2.dev65 → verifiers-0.2.2.dev66}/verifiers/v1/cli/resolve.py +0 -0
  284. {verifiers-0.2.2.dev65 → verifiers-0.2.2.dev66}/verifiers/v1/cli/serve.py +0 -0
  285. {verifiers-0.2.2.dev65 → verifiers-0.2.2.dev66}/verifiers/v1/cli/validate.py +0 -0
  286. {verifiers-0.2.2.dev65 → verifiers-0.2.2.dev66}/verifiers/v1/clients/__init__.py +0 -0
  287. {verifiers-0.2.2.dev65 → verifiers-0.2.2.dev66}/verifiers/v1/clients/client.py +0 -0
  288. {verifiers-0.2.2.dev65 → verifiers-0.2.2.dev66}/verifiers/v1/clients/config.py +0 -0
  289. {verifiers-0.2.2.dev65 → verifiers-0.2.2.dev66}/verifiers/v1/clients/eval.py +0 -0
  290. {verifiers-0.2.2.dev65 → verifiers-0.2.2.dev66}/verifiers/v1/clients/train.py +0 -0
  291. {verifiers-0.2.2.dev65 → verifiers-0.2.2.dev66}/verifiers/v1/configs/__init__.py +0 -0
  292. {verifiers-0.2.2.dev65 → verifiers-0.2.2.dev66}/verifiers/v1/configs/cli/__init__.py +0 -0
  293. {verifiers-0.2.2.dev65 → verifiers-0.2.2.dev66}/verifiers/v1/configs/cli/debug.py +0 -0
  294. {verifiers-0.2.2.dev65 → verifiers-0.2.2.dev66}/verifiers/v1/configs/cli/env.py +0 -0
  295. {verifiers-0.2.2.dev65 → verifiers-0.2.2.dev66}/verifiers/v1/configs/cli/eval.py +0 -0
  296. {verifiers-0.2.2.dev65 → verifiers-0.2.2.dev66}/verifiers/v1/configs/cli/init.py +0 -0
  297. {verifiers-0.2.2.dev65 → verifiers-0.2.2.dev66}/verifiers/v1/configs/cli/replay.py +0 -0
  298. {verifiers-0.2.2.dev65 → verifiers-0.2.2.dev66}/verifiers/v1/configs/cli/serve.py +0 -0
  299. {verifiers-0.2.2.dev65 → verifiers-0.2.2.dev66}/verifiers/v1/configs/cli/validate.py +0 -0
  300. {verifiers-0.2.2.dev65 → verifiers-0.2.2.dev66}/verifiers/v1/configs/env.py +0 -0
  301. {verifiers-0.2.2.dev65 → verifiers-0.2.2.dev66}/verifiers/v1/configs/harness.py +0 -0
  302. {verifiers-0.2.2.dev65 → verifiers-0.2.2.dev66}/verifiers/v1/configs/judge.py +0 -0
  303. {verifiers-0.2.2.dev65 → verifiers-0.2.2.dev66}/verifiers/v1/configs/legacy.py +0 -0
  304. {verifiers-0.2.2.dev65 → verifiers-0.2.2.dev66}/verifiers/v1/configs/retries.py +0 -0
  305. {verifiers-0.2.2.dev65 → verifiers-0.2.2.dev66}/verifiers/v1/configs/serve.py +0 -0
  306. {verifiers-0.2.2.dev65 → verifiers-0.2.2.dev66}/verifiers/v1/configs/task.py +0 -0
  307. {verifiers-0.2.2.dev65 → verifiers-0.2.2.dev66}/verifiers/v1/configs/taskset.py +0 -0
  308. {verifiers-0.2.2.dev65 → verifiers-0.2.2.dev66}/verifiers/v1/dialects/__init__.py +0 -0
  309. {verifiers-0.2.2.dev65 → verifiers-0.2.2.dev66}/verifiers/v1/dialects/anthropic.py +0 -0
  310. {verifiers-0.2.2.dev65 → verifiers-0.2.2.dev66}/verifiers/v1/dialects/base.py +0 -0
  311. {verifiers-0.2.2.dev65 → verifiers-0.2.2.dev66}/verifiers/v1/dialects/chat.py +0 -0
  312. {verifiers-0.2.2.dev65 → verifiers-0.2.2.dev66}/verifiers/v1/dialects/responses.py +0 -0
  313. {verifiers-0.2.2.dev65 → verifiers-0.2.2.dev66}/verifiers/v1/env.py +0 -0
  314. {verifiers-0.2.2.dev65 → verifiers-0.2.2.dev66}/verifiers/v1/envs/__init__.py +0 -0
  315. {verifiers-0.2.2.dev65 → verifiers-0.2.2.dev66}/verifiers/v1/envs/agentic_judge/__init__.py +0 -0
  316. {verifiers-0.2.2.dev65 → verifiers-0.2.2.dev66}/verifiers/v1/envs/agentic_judge/env.py +0 -0
  317. {verifiers-0.2.2.dev65 → verifiers-0.2.2.dev66}/verifiers/v1/envs/best_of_n/__init__.py +0 -0
  318. {verifiers-0.2.2.dev65 → verifiers-0.2.2.dev66}/verifiers/v1/envs/best_of_n/env.py +0 -0
  319. {verifiers-0.2.2.dev65 → verifiers-0.2.2.dev66}/verifiers/v1/envs/single_agent/__init__.py +0 -0
  320. {verifiers-0.2.2.dev65 → verifiers-0.2.2.dev66}/verifiers/v1/envs/single_agent/env.py +0 -0
  321. {verifiers-0.2.2.dev65 → verifiers-0.2.2.dev66}/verifiers/v1/envs/user_sim/__init__.py +0 -0
  322. {verifiers-0.2.2.dev65 → verifiers-0.2.2.dev66}/verifiers/v1/episode.py +0 -0
  323. {verifiers-0.2.2.dev65 → verifiers-0.2.2.dev66}/verifiers/v1/gepa/__init__.py +0 -0
  324. {verifiers-0.2.2.dev65 → verifiers-0.2.2.dev66}/verifiers/v1/gepa/adapter.py +0 -0
  325. {verifiers-0.2.2.dev65 → verifiers-0.2.2.dev66}/verifiers/v1/gepa/config.py +0 -0
  326. {verifiers-0.2.2.dev65 → verifiers-0.2.2.dev66}/verifiers/v1/gepa/dataset.py +0 -0
  327. {verifiers-0.2.2.dev65 → verifiers-0.2.2.dev66}/verifiers/v1/gepa/reflection.py +0 -0
  328. {verifiers-0.2.2.dev65 → verifiers-0.2.2.dev66}/verifiers/v1/gepa/runner.py +0 -0
  329. {verifiers-0.2.2.dev65 → verifiers-0.2.2.dev66}/verifiers/v1/graph.py +0 -0
  330. {verifiers-0.2.2.dev65 → verifiers-0.2.2.dev66}/verifiers/v1/harness.py +0 -0
  331. {verifiers-0.2.2.dev65 → verifiers-0.2.2.dev66}/verifiers/v1/harnesses/__init__.py +0 -0
  332. {verifiers-0.2.2.dev65 → verifiers-0.2.2.dev66}/verifiers/v1/harnesses/bash/__init__.py +0 -0
  333. {verifiers-0.2.2.dev65 → verifiers-0.2.2.dev66}/verifiers/v1/harnesses/bash/harness.py +0 -0
  334. {verifiers-0.2.2.dev65 → verifiers-0.2.2.dev66}/verifiers/v1/harnesses/bash/program.py +0 -0
  335. {verifiers-0.2.2.dev65 → verifiers-0.2.2.dev66}/verifiers/v1/harnesses/browser_use/__init__.py +0 -0
  336. {verifiers-0.2.2.dev65 → verifiers-0.2.2.dev66}/verifiers/v1/harnesses/browser_use/harness.py +0 -0
  337. {verifiers-0.2.2.dev65 → verifiers-0.2.2.dev66}/verifiers/v1/harnesses/browser_use/program.py +0 -0
  338. {verifiers-0.2.2.dev65 → verifiers-0.2.2.dev66}/verifiers/v1/harnesses/claude_code/__init__.py +0 -0
  339. {verifiers-0.2.2.dev65 → verifiers-0.2.2.dev66}/verifiers/v1/harnesses/claude_code/harness.py +0 -0
  340. {verifiers-0.2.2.dev65 → verifiers-0.2.2.dev66}/verifiers/v1/harnesses/codex/__init__.py +0 -0
  341. {verifiers-0.2.2.dev65 → verifiers-0.2.2.dev66}/verifiers/v1/harnesses/codex/harness.py +0 -0
  342. {verifiers-0.2.2.dev65 → verifiers-0.2.2.dev66}/verifiers/v1/harnesses/hermes_agent/__init__.py +0 -0
  343. {verifiers-0.2.2.dev65 → verifiers-0.2.2.dev66}/verifiers/v1/harnesses/hermes_agent/harness.py +0 -0
  344. {verifiers-0.2.2.dev65 → verifiers-0.2.2.dev66}/verifiers/v1/harnesses/hermes_agent/program.py +0 -0
  345. {verifiers-0.2.2.dev65 → verifiers-0.2.2.dev66}/verifiers/v1/harnesses/kimi_code/__init__.py +0 -0
  346. {verifiers-0.2.2.dev65 → verifiers-0.2.2.dev66}/verifiers/v1/harnesses/kimi_code/harness.py +0 -0
  347. {verifiers-0.2.2.dev65 → verifiers-0.2.2.dev66}/verifiers/v1/harnesses/mini_swe_agent/__init__.py +0 -0
  348. {verifiers-0.2.2.dev65 → verifiers-0.2.2.dev66}/verifiers/v1/harnesses/mini_swe_agent/harness.py +0 -0
  349. {verifiers-0.2.2.dev65 → verifiers-0.2.2.dev66}/verifiers/v1/harnesses/mini_swe_agent/program.py +0 -0
  350. {verifiers-0.2.2.dev65 → verifiers-0.2.2.dev66}/verifiers/v1/harnesses/null/__init__.py +0 -0
  351. {verifiers-0.2.2.dev65 → verifiers-0.2.2.dev66}/verifiers/v1/harnesses/null/harness.py +0 -0
  352. {verifiers-0.2.2.dev65 → verifiers-0.2.2.dev66}/verifiers/v1/harnesses/null/program.py +0 -0
  353. {verifiers-0.2.2.dev65 → verifiers-0.2.2.dev66}/verifiers/v1/harnesses/openclaw/__init__.py +0 -0
  354. {verifiers-0.2.2.dev65 → verifiers-0.2.2.dev66}/verifiers/v1/harnesses/openclaw/harness.py +0 -0
  355. {verifiers-0.2.2.dev65 → verifiers-0.2.2.dev66}/verifiers/v1/harnesses/pi/__init__.py +0 -0
  356. {verifiers-0.2.2.dev65 → verifiers-0.2.2.dev66}/verifiers/v1/harnesses/pi/harness.py +0 -0
  357. {verifiers-0.2.2.dev65 → verifiers-0.2.2.dev66}/verifiers/v1/harnesses/pool/__init__.py +0 -0
  358. {verifiers-0.2.2.dev65 → verifiers-0.2.2.dev66}/verifiers/v1/harnesses/pool/harness.py +0 -0
  359. {verifiers-0.2.2.dev65 → verifiers-0.2.2.dev66}/verifiers/v1/harnesses/rlm/__init__.py +0 -0
  360. {verifiers-0.2.2.dev65 → verifiers-0.2.2.dev66}/verifiers/v1/harnesses/rlm/harness.py +0 -0
  361. {verifiers-0.2.2.dev65 → verifiers-0.2.2.dev66}/verifiers/v1/harnesses/terminus_2/__init__.py +0 -0
  362. {verifiers-0.2.2.dev65 → verifiers-0.2.2.dev66}/verifiers/v1/harnesses/terminus_2/harness.py +0 -0
  363. {verifiers-0.2.2.dev65 → verifiers-0.2.2.dev66}/verifiers/v1/harnesses/terminus_2/program.py +0 -0
  364. {verifiers-0.2.2.dev65 → verifiers-0.2.2.dev66}/verifiers/v1/interception/base.py +0 -0
  365. {verifiers-0.2.2.dev65 → verifiers-0.2.2.dev66}/verifiers/v1/interception/pool.py +0 -0
  366. {verifiers-0.2.2.dev65 → verifiers-0.2.2.dev66}/verifiers/v1/interception/server.py +0 -0
  367. {verifiers-0.2.2.dev65 → verifiers-0.2.2.dev66}/verifiers/v1/interception/tunnel/__init__.py +0 -0
  368. {verifiers-0.2.2.dev65 → verifiers-0.2.2.dev66}/verifiers/v1/interception/tunnel/base.py +0 -0
  369. {verifiers-0.2.2.dev65 → verifiers-0.2.2.dev66}/verifiers/v1/interception/tunnel/custom.py +0 -0
  370. {verifiers-0.2.2.dev65 → verifiers-0.2.2.dev66}/verifiers/v1/interception/tunnel/prime.py +0 -0
  371. {verifiers-0.2.2.dev65 → verifiers-0.2.2.dev66}/verifiers/v1/judge.py +0 -0
  372. {verifiers-0.2.2.dev65 → verifiers-0.2.2.dev66}/verifiers/v1/judges/__init__.py +0 -0
  373. {verifiers-0.2.2.dev65 → verifiers-0.2.2.dev66}/verifiers/v1/judges/reference.py +0 -0
  374. {verifiers-0.2.2.dev65 → verifiers-0.2.2.dev66}/verifiers/v1/judges/reference.txt +0 -0
  375. {verifiers-0.2.2.dev65 → verifiers-0.2.2.dev66}/verifiers/v1/judges/rubric.py +0 -0
  376. {verifiers-0.2.2.dev65 → verifiers-0.2.2.dev66}/verifiers/v1/judges/rubric.txt +0 -0
  377. {verifiers-0.2.2.dev65 → verifiers-0.2.2.dev66}/verifiers/v1/legacy.py +0 -0
  378. {verifiers-0.2.2.dev65 → verifiers-0.2.2.dev66}/verifiers/v1/mcp/__init__.py +0 -0
  379. {verifiers-0.2.2.dev65 → verifiers-0.2.2.dev66}/verifiers/v1/mcp/launch.py +0 -0
  380. {verifiers-0.2.2.dev65 → verifiers-0.2.2.dev66}/verifiers/v1/mcp/server.py +0 -0
  381. {verifiers-0.2.2.dev65 → verifiers-0.2.2.dev66}/verifiers/v1/mcp/toolset.py +0 -0
  382. {verifiers-0.2.2.dev65 → verifiers-0.2.2.dev66}/verifiers/v1/runtimes/__init__.py +0 -0
  383. {verifiers-0.2.2.dev65 → verifiers-0.2.2.dev66}/verifiers/v1/runtimes/base.py +0 -0
  384. {verifiers-0.2.2.dev65 → verifiers-0.2.2.dev66}/verifiers/v1/runtimes/docker/__init__.py +0 -0
  385. {verifiers-0.2.2.dev65 → verifiers-0.2.2.dev66}/verifiers/v1/runtimes/docker/egress.py +0 -0
  386. {verifiers-0.2.2.dev65 → verifiers-0.2.2.dev66}/verifiers/v1/runtimes/limiters.py +0 -0
  387. {verifiers-0.2.2.dev65 → verifiers-0.2.2.dev66}/verifiers/v1/runtimes/modal.py +0 -0
  388. {verifiers-0.2.2.dev65 → verifiers-0.2.2.dev66}/verifiers/v1/runtimes/prime.py +0 -0
  389. {verifiers-0.2.2.dev65 → verifiers-0.2.2.dev66}/verifiers/v1/runtimes/subprocess.py +0 -0
  390. {verifiers-0.2.2.dev65 → verifiers-0.2.2.dev66}/verifiers/v1/serve/__init__.py +0 -0
  391. {verifiers-0.2.2.dev65 → verifiers-0.2.2.dev66}/verifiers/v1/serve/client.py +0 -0
  392. {verifiers-0.2.2.dev65 → verifiers-0.2.2.dev66}/verifiers/v1/serve/pool.py +0 -0
  393. {verifiers-0.2.2.dev65 → verifiers-0.2.2.dev66}/verifiers/v1/serve/server.py +0 -0
  394. {verifiers-0.2.2.dev65 → verifiers-0.2.2.dev66}/verifiers/v1/serve/types.py +0 -0
  395. {verifiers-0.2.2.dev65 → verifiers-0.2.2.dev66}/verifiers/v1/session.py +0 -0
  396. {verifiers-0.2.2.dev65 → verifiers-0.2.2.dev66}/verifiers/v1/state.py +0 -0
  397. {verifiers-0.2.2.dev65 → verifiers-0.2.2.dev66}/verifiers/v1/task.py +0 -0
  398. {verifiers-0.2.2.dev65 → verifiers-0.2.2.dev66}/verifiers/v1/taskset.py +0 -0
  399. {verifiers-0.2.2.dev65 → verifiers-0.2.2.dev66}/verifiers/v1/tasksets/__init__.py +0 -0
  400. {verifiers-0.2.2.dev65 → verifiers-0.2.2.dev66}/verifiers/v1/tasksets/harbor/__init__.py +0 -0
  401. {verifiers-0.2.2.dev65 → verifiers-0.2.2.dev66}/verifiers/v1/tasksets/harbor/taskset.py +0 -0
  402. {verifiers-0.2.2.dev65 → verifiers-0.2.2.dev66}/verifiers/v1/tasksets/lean/__init__.py +0 -0
  403. {verifiers-0.2.2.dev65 → verifiers-0.2.2.dev66}/verifiers/v1/tasksets/lean/scoring.py +0 -0
  404. {verifiers-0.2.2.dev65 → verifiers-0.2.2.dev66}/verifiers/v1/tasksets/lean/taskset.py +0 -0
  405. {verifiers-0.2.2.dev65 → verifiers-0.2.2.dev66}/verifiers/v1/tasksets/openenv/__init__.py +0 -0
  406. {verifiers-0.2.2.dev65 → verifiers-0.2.2.dev66}/verifiers/v1/tasksets/openenv/taskset.py +0 -0
  407. {verifiers-0.2.2.dev65 → verifiers-0.2.2.dev66}/verifiers/v1/tasksets/textarena/__init__.py +0 -0
  408. {verifiers-0.2.2.dev65 → verifiers-0.2.2.dev66}/verifiers/v1/tasksets/textarena/taskset.py +0 -0
  409. {verifiers-0.2.2.dev65 → verifiers-0.2.2.dev66}/verifiers/v1/trace.py +0 -0
  410. {verifiers-0.2.2.dev65 → verifiers-0.2.2.dev66}/verifiers/v1/types.py +0 -0
  411. {verifiers-0.2.2.dev65 → verifiers-0.2.2.dev66}/verifiers/v1/utils/__init__.py +0 -0
  412. {verifiers-0.2.2.dev65 → verifiers-0.2.2.dev66}/verifiers/v1/utils/aio.py +0 -0
  413. {verifiers-0.2.2.dev65 → verifiers-0.2.2.dev66}/verifiers/v1/utils/artifacts.py +0 -0
  414. {verifiers-0.2.2.dev65 → verifiers-0.2.2.dev66}/verifiers/v1/utils/compile.py +0 -0
  415. {verifiers-0.2.2.dev65 → verifiers-0.2.2.dev66}/verifiers/v1/utils/decorators.py +0 -0
  416. {verifiers-0.2.2.dev65 → verifiers-0.2.2.dev66}/verifiers/v1/utils/format.py +0 -0
  417. {verifiers-0.2.2.dev65 → verifiers-0.2.2.dev66}/verifiers/v1/utils/generic.py +0 -0
  418. {verifiers-0.2.2.dev65 → verifiers-0.2.2.dev66}/verifiers/v1/utils/git.py +0 -0
  419. {verifiers-0.2.2.dev65 → verifiers-0.2.2.dev66}/verifiers/v1/utils/image.py +0 -0
  420. {verifiers-0.2.2.dev65 → verifiers-0.2.2.dev66}/verifiers/v1/utils/install.py +0 -0
  421. {verifiers-0.2.2.dev65 → verifiers-0.2.2.dev66}/verifiers/v1/utils/interrupt.py +0 -0
  422. {verifiers-0.2.2.dev65 → verifiers-0.2.2.dev66}/verifiers/v1/utils/loaders.py +0 -0
  423. {verifiers-0.2.2.dev65 → verifiers-0.2.2.dev66}/verifiers/v1/utils/logging.py +0 -0
  424. {verifiers-0.2.2.dev65 → verifiers-0.2.2.dev66}/verifiers/v1/utils/memory.py +0 -0
  425. {verifiers-0.2.2.dev65 → verifiers-0.2.2.dev66}/verifiers/v1/utils/platform.py +0 -0
  426. {verifiers-0.2.2.dev65 → verifiers-0.2.2.dev66}/verifiers/v1/utils/retries.py +0 -0
  427. {verifiers-0.2.2.dev65 → verifiers-0.2.2.dev66}/verifiers/v1/utils/score.py +0 -0
  428. {verifiers-0.2.2.dev65 → verifiers-0.2.2.dev66}/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.dev65
3
+ Version: 0.2.2.dev66
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
@@ -479,10 +479,10 @@ async def test_env_id_user_sim(run_v1, tmp_path):
479
479
  assert user.agent.trainable is False
480
480
  assert user.num_turns >= 1 # the modeled user actually spoke
481
481
  assert assistant.metrics["user_turns"] >= 1
482
- # `mask_prompt`: the scenario is hidden from the assistant's harness (the run's
483
- # visible data) while the task's own rewards still scored the real row. The
484
- # masked view is what persists (provenance is the row's idx); both sides land
485
- # as ONE durable episode.
482
+ # The env nulls the assistant task's prompt: the scenario is hidden from the
483
+ # assistant's harness while the task's rewards score off non-prompt fields
484
+ # (`answer`). The nulled row is what persists (provenance is the row's idx);
485
+ # both sides land as ONE durable episode.
486
486
  assert assistant.task.data.prompt is None
487
487
  assert "echoed" in assistant.rewards
488
488
  from verifiers.v1.cli.output import read_episodes
@@ -21,10 +21,11 @@ from verifiers.v1.clients import (
21
21
  resolve_client,
22
22
  )
23
23
  from verifiers.v1.configs.agent import AgentConfig, TimeoutConfig
24
+ from verifiers.v1.dialects import parse_message
24
25
  from verifiers.v1.harness import Harness
25
26
  from verifiers.v1.interception import Interception, InterceptionServer
26
27
  from verifiers.v1.mcp import SharedToolServer
27
- from verifiers.v1.rollout import RolloutRun, RolloutTimeouts, _as_messages
28
+ from verifiers.v1.rollout import Rollout, RolloutTimeouts
28
29
  from verifiers.v1.runtimes import (
29
30
  NetworkPolicyConfig,
30
31
  Runtime,
@@ -150,9 +151,7 @@ class Interaction:
150
151
  rewards after close. Leaving the `interaction()` context closes the exchange
151
152
  as `user_closed` and finishes the rollout — hooks and scoring included."""
152
153
 
153
- def __init__(
154
- self, run: "RolloutRun", gate: asyncio.Semaphore | None = None
155
- ) -> None:
154
+ def __init__(self, run: "Rollout", gate: asyncio.Semaphore | None = None) -> None:
156
155
  self._run = run
157
156
  self._gate = gate
158
157
  self._over = False # a terminated segment was already delivered
@@ -188,14 +187,16 @@ class Interaction:
188
187
  if message is not None and prompted:
189
188
  raise ValueError(
190
189
  "the task's prompt opens this exchange: take its first reply with "
191
- "a bare turn() before answering (or mask the prompt with "
192
- "interaction(mask_prompt=True) to open the conversation yourself)"
190
+ "a bare turn() before answering (or hand the interaction a task "
191
+ "with `prompt=None` to open the conversation yourself)"
193
192
  )
194
193
  messages: Messages | None = None
195
194
  if isinstance(message, str):
196
195
  messages = [UserMessage(content=message)]
197
196
  elif message is not None:
198
- messages = _as_messages(message)
197
+ # A turn's messages may arrive typed or as wire dicts (env code naturally
198
+ # writes `{"role": "user", ...}`); the trace speaks typed, so normalize.
199
+ messages = [parse_message(m) if isinstance(m, dict) else m for m in message]
199
200
  self._started = True
200
201
  turns_before = self.trace.num_turns
201
202
  nodes_before = len(self.trace.nodes)
@@ -411,7 +412,7 @@ class Agent:
411
412
  on_trace: Callable[[Trace], None] | None,
412
413
  ) -> Trace:
413
414
  params = self._rollout_params(task, runtime, dict(shared_tools or {}))
414
- run = RolloutRun(task=task, on_trace=on_trace, **params)
415
+ run = Rollout(task=task, on_trace=on_trace, **params)
415
416
  try:
416
417
  if await run.open():
417
418
  await run.step()
@@ -434,7 +435,6 @@ class Agent:
434
435
  *,
435
436
  runtime: Runtime | None = None,
436
437
  tools: Mapping[str, SharedToolServer] | None = None,
437
- mask_prompt: bool = False,
438
438
  on_trace: Callable[[Trace], None] | None = None,
439
439
  ) -> AsyncIterator[Interaction]:
440
440
  """Interact with this agent turn-by-turn: a full rollout of `task` where
@@ -446,11 +446,10 @@ class Agent:
446
446
 
447
447
  The task's shape says who speaks first: a prompt-less task is opened by
448
448
  the first `turn(message)`; a prompted task speaks first — take its opening
449
- reply with a bare `turn()` before answering. `mask_prompt` says a prompted
450
- task's prompt belongs to the USER side (a scenario the caller pursues, not
451
- the assistant's seed): the wire hides it the caller opens — while the
452
- task object keeps the full row, so its hooks, rewards, and judges score
453
- the real question (the user-sim env's contract).
449
+ reply with a bare `turn()` before answering. A prompt that belongs to the
450
+ USER side (a scenario the caller pursues, not the assistant's seed) is the
451
+ caller's to hide: hand the interaction a task whose `data.prompt` is None
452
+ and keep the scenario on a scoring-side field (the user-sim env's contract).
454
453
 
455
454
  `runtime` and `tools` borrow live resources from their owners, just as
456
455
  they do for `run()`; an env supplies its taskset's shared tools
@@ -466,17 +465,9 @@ class Agent:
466
465
  if self._closed:
467
466
  raise RuntimeError("Agent is closed; create a new agent")
468
467
  self._check_resume_support()
469
- if mask_prompt and task.data.prompt is None:
470
- raise ValueError(
471
- "mask_prompt hides a prompt the task doesn't have; a prompt-less "
472
- "task is already opened by the first turn()"
473
- )
474
468
  params = self._rollout_params(task, runtime, dict(tools or {}))
475
- run = RolloutRun(
469
+ run = Rollout(
476
470
  task=task,
477
- wire_data=(
478
- task.data.model_copy(update={"prompt": None}) if mask_prompt else None
479
- ),
480
471
  has_user=True,
481
472
  on_trace=on_trace,
482
473
  **params,
@@ -665,7 +656,6 @@ class _EpisodeAgent(Agent):
665
656
  *,
666
657
  runtime: Runtime | None = None,
667
658
  tools: Mapping[str, SharedToolServer] | None = None,
668
- mask_prompt: bool = False,
669
659
  on_trace: Callable[[Trace], None] | None = None,
670
660
  ) -> AsyncIterator[Interaction]:
671
661
  """The agent's `interaction`, with every trace stamped with its standing
@@ -687,7 +677,6 @@ class _EpisodeAgent(Agent):
687
677
  task,
688
678
  runtime=runtime,
689
679
  tools=tools if tools is not None else self._shared_for(task),
690
- mask_prompt=mask_prompt,
691
680
  on_trace=self._watch(remember),
692
681
  ) as interaction:
693
682
  yield interaction
@@ -11,44 +11,43 @@ from verifiers.v1.types import SamplingConfig
11
11
 
12
12
 
13
13
  class TimeoutConfig(BaseConfig):
14
- """Per-agent wall-clock timeouts per rollout stage, in seconds (None = no
15
- limit); each stage falls back to the task's own `TaskTimeout` when unset. An
16
- interaction's rollout budget is cumulative across its active harness segments
17
- and pauses while the caller computes the next user turn."""
14
+ """Timeout (in seconds) for different phases of an agent's run."""
18
15
 
19
16
  setup: float | None = None # one shared budget: task setup + provisioning
17
+ """Timeout (in seconds) for the task + harness setup hooks."""
20
18
  rollout: float | None = None
19
+ """Timeout (in seconds) for the agent's solve attempt."""
21
20
  finalize: float | None = None
21
+ """Timeout (in seconds) for the task + harness finalize hooks."""
22
22
  scoring: float | None = None
23
+ """Timeout (in seconds) for the task + harness metrics + scoring hooks."""
23
24
 
24
25
 
25
26
  class AgentConfig(BaseConfig):
26
- """One env agent: who plays it, and its per-run caps. It pins only what
27
- makes it a different actor; everything unpinned falls back — the model context
28
- to the run's own, the harness to the taskset's default."""
29
-
30
27
  harness: SerializeAsAny[HarnessConfig] | None = None
31
28
  """The agent's program (None = the taskset's default harness)."""
32
29
  runtime: RuntimeConfig = SubprocessConfig()
33
30
  """Runtime for the harness program — the policy each run provisions its box
34
31
  from; tool servers choose their placement separately."""
32
+
35
33
  model: str | None = None
36
34
  """Model id (None = the run's model, i.e. the policy under evaluation/training)."""
37
35
  client: ClientConfig | None = None
38
36
  """Endpoint override (None = the run's client)."""
39
37
  sampling: SamplingConfig | None = None
40
38
  """Sampling override (None = the run's sampling)."""
41
- timeout: TimeoutConfig = TimeoutConfig()
42
- retries: RetryConfig = RetryConfig()
43
- """Whole-run retries: rerun this agent's rollout while its trace ends with a
44
- retryable error (never into a borrowed box)."""
39
+
45
40
  max_turns: int | None = None
46
- """Max model turns per run (None = no limit). Framework-enforced (the
47
- interception server refuses turns past it), so it applies to any harness."""
41
+ """Max model turns per run (None = no limit)."""
48
42
  max_input_tokens: int | None = None
43
+ """Max input tokens per run (None = no limit)."""
49
44
  max_output_tokens: int | None = None
45
+ """Max output tokens per run (None = no limit)."""
50
46
  max_total_tokens: int | None = None
51
- """Token caps per run (None = no limit); framework-enforced between turns."""
47
+ """Max total tokens per run (None = no limit)."""
48
+
49
+ timeout: TimeoutConfig = TimeoutConfig()
50
+ retries: RetryConfig = RetryConfig()
52
51
 
53
52
  @model_validator(mode="before")
54
53
  @classmethod
@@ -3,10 +3,11 @@
3
3
  The generic two-sided conversation (`--env.id user-sim` over any taskset) — the
4
4
  substrate a tau2-style benchmark builds on. The taskset's row is read as the USER's
5
5
  side of the world: its prompt text becomes the scenario in the user's system prompt
6
- (`--env.persona`), and the assistant plays the same task with a masked prompt — it
7
- is hidden from its harness, so it learns the user's goal only through
8
- conversation (its own instructions stay in `system_prompt`), while the task's
9
- rewards and judges still score the real row. The user agent rides the tool-less
6
+ (`--env.persona`), and the assistant plays the same task with its prompt nulled the
7
+ scenario is the user's knowledge, so the assistant learns the goal only through
8
+ conversation (its own instructions stay in `system_prompt`). The task's rewards and
9
+ judges score that nulled row, so they must read scoring-side fields (`answer`, a
10
+ judge's `question_field`), never the prompt. The user agent rides the tool-less
10
11
  `null` harness by default (untrainable — `setup()`), opens the conversation, and
11
12
  ends it with the done marker; the assistant's trace is then judged by the task's
12
13
  own rewards, exactly as in any eval.
@@ -64,14 +65,16 @@ class UserSimEnv(vf.Env[UserSimEnvConfig]):
64
65
  )
65
66
  )
66
67
  # Two interactions, relayed: the user is just another agent, and the env is
67
- # the control flow between them. The assistant plays the SAME task with a
68
- # masked prompt: the scenario is the user's knowledge, so the wire seeds
69
- # nothing and the user opens while the task's hooks, rewards, and plugged
70
- # judges still score the real row (they read the task object, not the
71
- # run's masked view).
68
+ # the control flow between them. The assistant plays the SAME task with its
69
+ # prompt nulled: the scenario is the user's knowledge, so the wire seeds
70
+ # nothing and the user opens. Scoring runs on the nulled row a user-sim
71
+ # taskset keeps its scoring on non-prompt fields.
72
+ assistant_task = type(task)(
73
+ task.data.model_copy(update={"prompt": None}), task.config
74
+ )
72
75
  async with (
73
76
  agents.user.interaction(user_task) as sim,
74
- agents.assistant.interaction(task, mask_prompt=True) as assistant,
77
+ agents.assistant.interaction(assistant_task) as assistant,
75
78
  ):
76
79
  # The tau convention: the assistant "answers the phone", the user
77
80
  # states the goal. The greeting exists only on the user's side. A
@@ -13,7 +13,7 @@ Four mechanisms, each in one place:
13
13
  3. Surfacing (`session.RolloutSession.error`): a model or tool call fails behind the harness
14
14
  subprocess and comes back as HTTP, so the interception server stashes the real error there and
15
15
  the rollout re-raises it once the harness returns — not a secondary `HarnessError`.
16
- 4. Capture (`RolloutRun`, mirrored by the env-server): the one place that records a failure (typed
16
+ 4. Capture (`Rollout`, mirrored by the env-server): the one place that records a failure (typed
17
17
  or not) onto the trace and never lets it cancel sibling rollouts. A bad rollout is data, not a
18
18
  crash.
19
19
 
@@ -1,4 +1,5 @@
1
- from collections.abc import Iterable
1
+ from collections.abc import AsyncIterator, Iterable
2
+ from contextlib import asynccontextmanager
2
3
  from typing import TYPE_CHECKING, Annotated
3
4
 
4
5
  from pydantic import Field
@@ -15,7 +16,8 @@ from verifiers.v1.interception.server import (
15
16
  InterceptionServer,
16
17
  InterceptionServerConfig,
17
18
  )
18
- from verifiers.v1.runtimes import runtime_is_local
19
+ from verifiers.v1.runtimes import Runtime, runtime_is_local
20
+ from verifiers.v1.session import RolloutSession
19
21
 
20
22
  if TYPE_CHECKING:
21
23
  from verifiers.v1.mcp import SharedToolServer
@@ -69,6 +71,36 @@ def make_interception(
69
71
  return ElasticInterceptionPool(config, requires_tunnel, state_service_secrets)
70
72
 
71
73
 
74
+ @asynccontextmanager
75
+ async def serve_interception(
76
+ interception: Interception | None,
77
+ runtime: Runtime,
78
+ session: RolloutSession,
79
+ servers: list,
80
+ shared_tools: "dict[str, SharedToolServer]",
81
+ ) -> AsyncIterator[Slot]:
82
+ """A slot on the shared interception when one was injected (its owner keeps the
83
+ lifecycle), else on a per-rollout `InterceptionServer` owned — brought up and torn
84
+ down — by the caller's context."""
85
+ if interception is not None:
86
+ async with interception.acquire(session) as slot:
87
+ yield slot
88
+ return
89
+ tunneled = requires_tunnel(
90
+ runtime.is_local,
91
+ [server.config for server in servers],
92
+ shared_tools.values(),
93
+ )
94
+ server = InterceptionServer(
95
+ requires_tunnel=tunneled,
96
+ state_service_secrets=tuple(
97
+ tool.state_secret for tool in shared_tools.values() if tool.state_secret
98
+ ),
99
+ )
100
+ async with server, server.acquire(session) as slot:
101
+ yield slot
102
+
103
+
72
104
  __all__ = [
73
105
  "BaseInterceptionConfig",
74
106
  "ElasticInterceptionPool",
@@ -82,4 +114,5 @@ __all__ = [
82
114
  "StaticInterceptionPoolConfig",
83
115
  "make_interception",
84
116
  "requires_tunnel",
117
+ "serve_interception",
85
118
  ]
@@ -1,33 +1,15 @@
1
- """A rollout: one trajectory — drive a harness segment by segment and score its trace.
2
-
3
- A rollout's exchange is a sequence of SEGMENTS: the harness program runs until it
4
- yields (= exits), the run's user answers its final message, and the next segment
5
- resumes the exchange with that answer (`Harness.resume` — a relaunch on the accreted
6
- conversation by default, a native continuation for harnesses with their own session
7
- state). The user loop lives between segments, at the exchange's natural turn
8
- granularity — never inside the model boundary, so a harness's own tool loop can
9
- never race or amputate it.
10
-
11
- `RolloutRun` is the engine, a staged lifecycle: `open()` boots the world, each
12
- `step()` runs one segment, `close()` finalizes, scores, and tears the world down —
13
- each stage under its own timeout. `Agent` is its only driver: `Agent.run` is the
14
- one-call single-segment form, `Agent.interaction` holds the run open and lets the
15
- caller supply each user turn, one `turn()` per segment — who answers the program
16
- (an env's control flow, a simulator agent, a game engine, a human) is the caller's
17
- business, never this module's.
18
- """
1
+ """Lifecycle of one agent rollout."""
19
2
 
20
3
  import asyncio
21
4
  import contextlib
22
5
  import logging
23
6
  import time
24
- from collections.abc import AsyncIterator, Callable
25
- from contextlib import AsyncExitStack, asynccontextmanager
7
+ from collections.abc import Callable
8
+ from contextlib import AsyncExitStack
26
9
  from dataclasses import dataclass
27
10
 
28
11
  from verifiers.v1.clients import ModelContext
29
12
  from verifiers.v1.configs.agent import AgentConfig
30
- from verifiers.v1.dialects import parse_message
31
13
  from verifiers.v1.errors import (
32
14
  HarnessError,
33
15
  RolloutError,
@@ -36,12 +18,7 @@ from verifiers.v1.errors import (
36
18
  boundary,
37
19
  )
38
20
  from verifiers.v1.harness import Harness
39
- from verifiers.v1.interception import (
40
- Interception,
41
- InterceptionServer,
42
- Slot,
43
- requires_tunnel,
44
- )
21
+ from verifiers.v1.interception import Interception, serve_interception
45
22
  from verifiers.v1.mcp import SharedToolServer, serve_tools
46
23
  from verifiers.v1.runtimes import (
47
24
  Runtime,
@@ -50,7 +27,7 @@ from verifiers.v1.runtimes import (
50
27
  )
51
28
  from verifiers.v1.session import RolloutLimits, RolloutSession
52
29
  from verifiers.v1.state import state_cls
53
- from verifiers.v1.task import Task, TaskData
30
+ from verifiers.v1.task import Task
54
31
  from verifiers.v1.trace import AgentInfo, Trace, TraceTask
55
32
  from verifiers.v1.types import Messages
56
33
  from verifiers.v1.utils.decorators import discover_decorated, invoke
@@ -60,69 +37,20 @@ logger = logging.getLogger(__name__)
60
37
 
61
38
  @dataclass(frozen=True)
62
39
  class RolloutTimeouts:
63
- """Per-stage rollout timeouts in seconds (None = unlimited), each bounding one
64
- lifecycle stage: `setup` covers task + harness setup in `open()`, `agent` is the
65
- cumulative budget the run's segments draw down across `step()`s, `finalize` and
66
- `scoring` bound their `close()` stages."""
40
+ """Per-stage rollout timeouts, each bounding one rollout stage."""
67
41
 
68
42
  setup: float | None = None
43
+ """Timeout (in seconds) for the task + harness setup hooks."""
69
44
  agent: float | None = None
45
+ """Timeout (in seconds) for the agent's solve attempt."""
70
46
  finalize: float | None = None
47
+ """Timeout (in seconds) for the task + harness finalize hooks."""
71
48
  scoring: float | None = None
49
+ """Timeout (in seconds) for the task + harness metrics + scoring hooks."""
72
50
 
73
51
 
74
- def _as_messages(raw: Messages) -> Messages:
75
- """A turn's messages may arrive typed or as wire dicts (env code naturally
76
- writes `{"role": "user", ...}`); the trace speaks typed, so normalize here."""
77
- return [parse_message(m) if isinstance(m, dict) else m for m in raw]
78
-
79
-
80
- @asynccontextmanager
81
- async def _serve_interception(
82
- interception: Interception | None,
83
- runtime: Runtime,
84
- session: RolloutSession,
85
- servers: list,
86
- shared_tools: dict[str, SharedToolServer],
87
- ) -> AsyncIterator[Slot]:
88
- """A slot on the shared interception when one was injected (its owner keeps the
89
- lifecycle), else on a per-rollout `InterceptionServer` owned — brought up and torn
90
- down — by this rollout."""
91
- if interception is not None:
92
- async with interception.acquire(session) as slot:
93
- yield slot
94
- return
95
- tunneled = requires_tunnel(
96
- runtime.is_local,
97
- [server.config for server in servers],
98
- shared_tools.values(),
99
- )
100
- server = InterceptionServer(
101
- requires_tunnel=tunneled,
102
- state_service_secrets=tuple(
103
- tool.state_secret for tool in shared_tools.values() if tool.state_secret
104
- ),
105
- )
106
- async with server, server.acquire(session) as slot:
107
- yield slot
108
-
109
-
110
- class RolloutRun:
111
- """One rollout held open segment by segment.
112
-
113
- `open()` boots the world (runtime, setup, interception, tool servers); each
114
- `step()` runs ONE harness segment — a program run to its exit — resuming the
115
- exchange with the user turn(s) it's given; `close()` finalizes, scores, and
116
- tears the world down, returning the finished trace. Expected `RolloutError`s
117
- are captured onto the trace (a bad rollout is data, not a crash): `open` and
118
- `step` report continuability as a bool, and `close` always returns the trace.
119
-
120
- `wire_data` is the run's recorded view of the task — what `trace.task.data`
121
- says the harness saw (`Agent.interaction(mask_prompt=True)` masks the prompt here
122
- while the `task` object keeps the full row for its hooks and judges).
123
- `runtime` is a live box to run in instead of provisioning one; a borrowed
124
- runtime is neither started nor stopped here. `on_trace` observes the run's
125
- trace the moment it's minted, before any I/O."""
52
+ class Rollout:
53
+ """Manages one rollout's lifecycle (open, step, close)."""
126
54
 
127
55
  def __init__(
128
56
  self,
@@ -132,10 +60,9 @@ class RolloutRun:
132
60
  harness: Harness,
133
61
  ctx: ModelContext,
134
62
  runtime_config: RuntimeConfig,
135
- wire_data: TaskData | None = None,
136
63
  has_user: bool = False,
137
- timeouts: RolloutTimeouts | None = None,
138
- limits: RolloutLimits | None = None,
64
+ timeouts: RolloutTimeouts,
65
+ limits: RolloutLimits,
139
66
  shared_tools: dict[str, SharedToolServer] | None = None,
140
67
  interception: Interception | None = None,
141
68
  runtime: Runtime | None = None,
@@ -146,7 +73,7 @@ class RolloutRun:
146
73
  self.ctx = ctx
147
74
  self.runtime_config = runtime_config
148
75
  self._has_user = has_user
149
- self._timeouts = timeouts or RolloutTimeouts()
76
+ self._timeouts = timeouts
150
77
  self._agent_time_remaining = self._timeouts.agent
151
78
  self._shared_tools = shared_tools or {}
152
79
  self._interception = interception
@@ -155,7 +82,7 @@ class RolloutRun:
155
82
  self.trace: Trace = Trace(
156
83
  task=TraceTask(
157
84
  type=type(task).__name__,
158
- data=task.data if wire_data is None else wire_data,
85
+ data=task.data,
159
86
  ),
160
87
  state=state_cls(type(task))(),
161
88
  # The seat's resolved config, role overrides included — the agent
@@ -165,7 +92,7 @@ class RolloutRun:
165
92
  if on_trace is not None:
166
93
  on_trace(self.trace)
167
94
  self._session = RolloutSession(
168
- ctx, self.trace, discover_decorated(task, "stop"), limits or RolloutLimits()
95
+ ctx, self.trace, discover_decorated(task, "stop"), limits
169
96
  )
170
97
  self._stack = AsyncExitStack()
171
98
  self._failed = False
@@ -281,7 +208,7 @@ class RolloutRun:
281
208
  model_secret,
282
209
  state_secret,
283
210
  ) = await self._stack.enter_async_context(
284
- _serve_interception(
211
+ serve_interception(
285
212
  self._interception,
286
213
  runtime,
287
214
  self._session,
File without changes