verifiers 0.3.1.dev25__tar.gz → 0.3.1.dev32__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 (439) hide show
  1. {verifiers-0.3.1.dev25 → verifiers-0.3.1.dev32}/PKG-INFO +1 -1
  2. {verifiers-0.3.1.dev25 → verifiers-0.3.1.dev32}/pyproject.toml +20 -3
  3. {verifiers-0.3.1.dev25 → verifiers-0.3.1.dev32}/tests/v1/test_scoring.py +4 -1
  4. {verifiers-0.3.1.dev25 → verifiers-0.3.1.dev32}/verifiers/v1/__init__.py +13 -1
  5. {verifiers-0.3.1.dev25 → verifiers-0.3.1.dev32}/verifiers/v1/agent.py +2 -6
  6. {verifiers-0.3.1.dev25 → verifiers-0.3.1.dev32}/verifiers/v1/clients/train.py +3 -1
  7. {verifiers-0.3.1.dev25 → verifiers-0.3.1.dev32}/verifiers/v1/configs/agent.py +2 -2
  8. {verifiers-0.3.1.dev25 → verifiers-0.3.1.dev32}/verifiers/v1/configs/cli/debug.py +2 -2
  9. {verifiers-0.3.1.dev25 → verifiers-0.3.1.dev32}/verifiers/v1/configs/cli/validate.py +2 -2
  10. {verifiers-0.3.1.dev25 → verifiers-0.3.1.dev32}/verifiers/v1/configs/client.py +1 -1
  11. {verifiers-0.3.1.dev25 → verifiers-0.3.1.dev32}/verifiers/v1/configs/task.py +3 -3
  12. {verifiers-0.3.1.dev25 → verifiers-0.3.1.dev32}/verifiers/v1/dialects/anthropic.py +136 -5
  13. {verifiers-0.3.1.dev25 → verifiers-0.3.1.dev32}/verifiers/v1/dialects/base.py +15 -3
  14. {verifiers-0.3.1.dev25 → verifiers-0.3.1.dev32}/verifiers/v1/dialects/chat.py +44 -5
  15. {verifiers-0.3.1.dev25 → verifiers-0.3.1.dev32}/verifiers/v1/dialects/responses.py +122 -5
  16. {verifiers-0.3.1.dev25 → verifiers-0.3.1.dev32}/verifiers/v1/graph.py +12 -0
  17. {verifiers-0.3.1.dev25 → verifiers-0.3.1.dev32}/verifiers/v1/harness.py +27 -1
  18. {verifiers-0.3.1.dev25 → verifiers-0.3.1.dev32}/verifiers/v1/harnesses/bash/harness.py +4 -0
  19. {verifiers-0.3.1.dev25 → verifiers-0.3.1.dev32}/verifiers/v1/harnesses/bash/program.py +84 -43
  20. {verifiers-0.3.1.dev25 → verifiers-0.3.1.dev32}/verifiers/v1/interception/server.py +256 -88
  21. verifiers-0.3.1.dev32/verifiers/v1/interception/tool.py +12 -0
  22. {verifiers-0.3.1.dev25 → verifiers-0.3.1.dev32}/verifiers/v1/interception/tunnel/prime.py +5 -0
  23. {verifiers-0.3.1.dev25 → verifiers-0.3.1.dev32}/verifiers/v1/rollout.py +88 -14
  24. {verifiers-0.3.1.dev25 → verifiers-0.3.1.dev32}/verifiers/v1/runtimes/prime.py +3 -1
  25. verifiers-0.3.1.dev32/verifiers/v1/session.py +402 -0
  26. {verifiers-0.3.1.dev25 → verifiers-0.3.1.dev32}/verifiers/v1/tasksets/nemo_gym/taskset.py +2 -2
  27. {verifiers-0.3.1.dev25 → verifiers-0.3.1.dev32}/verifiers/v1/trace.py +22 -0
  28. {verifiers-0.3.1.dev25 → verifiers-0.3.1.dev32}/verifiers/v1/types.py +7 -0
  29. {verifiers-0.3.1.dev25 → verifiers-0.3.1.dev32}/verifiers/v1/utils/decorators.py +21 -4
  30. {verifiers-0.3.1.dev25 → verifiers-0.3.1.dev32}/verifiers/v1/utils/platform.py +1 -1
  31. verifiers-0.3.1.dev25/verifiers/v1/utils/prime_config.py → verifiers-0.3.1.dev32/verifiers/v1/utils/prime.py +10 -0
  32. verifiers-0.3.1.dev25/verifiers/v1/session.py +0 -147
  33. {verifiers-0.3.1.dev25 → verifiers-0.3.1.dev32}/.gitignore +0 -0
  34. {verifiers-0.3.1.dev25 → verifiers-0.3.1.dev32}/LICENSE +0 -0
  35. {verifiers-0.3.1.dev25 → verifiers-0.3.1.dev32}/README.md +0 -0
  36. {verifiers-0.3.1.dev25 → verifiers-0.3.1.dev32}/tests/__init__.py +0 -0
  37. {verifiers-0.3.1.dev25 → verifiers-0.3.1.dev32}/tests/conftest.py +0 -0
  38. {verifiers-0.3.1.dev25 → verifiers-0.3.1.dev32}/tests/test_browser_env.py +0 -0
  39. {verifiers-0.3.1.dev25 → verifiers-0.3.1.dev32}/tests/test_build_script.py +0 -0
  40. {verifiers-0.3.1.dev25 → verifiers-0.3.1.dev32}/tests/test_cli_agent_env.py +0 -0
  41. {verifiers-0.3.1.dev25 → verifiers-0.3.1.dev32}/tests/test_client_auth_errors.py +0 -0
  42. {verifiers-0.3.1.dev25 → verifiers-0.3.1.dev32}/tests/test_client_config.py +0 -0
  43. {verifiers-0.3.1.dev25 → verifiers-0.3.1.dev32}/tests/test_client_multimodal_types.py +0 -0
  44. {verifiers-0.3.1.dev25 → verifiers-0.3.1.dev32}/tests/test_composable_env.py +0 -0
  45. {verifiers-0.3.1.dev25 → verifiers-0.3.1.dev32}/tests/test_context_token_metrics.py +0 -0
  46. {verifiers-0.3.1.dev25 → verifiers-0.3.1.dev32}/tests/test_decorator_ranks.py +0 -0
  47. {verifiers-0.3.1.dev25 → verifiers-0.3.1.dev32}/tests/test_endpoint_registry.py +0 -0
  48. {verifiers-0.3.1.dev25 → verifiers-0.3.1.dev32}/tests/test_env_group.py +0 -0
  49. {verifiers-0.3.1.dev25 → verifiers-0.3.1.dev32}/tests/test_env_server.py +0 -0
  50. {verifiers-0.3.1.dev25 → verifiers-0.3.1.dev32}/tests/test_environment.py +0 -0
  51. {verifiers-0.3.1.dev25 → verifiers-0.3.1.dev32}/tests/test_environment_extra.py +0 -0
  52. {verifiers-0.3.1.dev25 → verifiers-0.3.1.dev32}/tests/test_error_chain.py +0 -0
  53. {verifiers-0.3.1.dev25 → verifiers-0.3.1.dev32}/tests/test_eval_display.py +0 -0
  54. {verifiers-0.3.1.dev25 → verifiers-0.3.1.dev32}/tests/test_eval_utils.py +0 -0
  55. {verifiers-0.3.1.dev25 → verifiers-0.3.1.dev32}/tests/test_gepa_cli.py +0 -0
  56. {verifiers-0.3.1.dev25 → verifiers-0.3.1.dev32}/tests/test_gepa_utils.py +0 -0
  57. {verifiers-0.3.1.dev25 → verifiers-0.3.1.dev32}/tests/test_gym_env.py +0 -0
  58. {verifiers-0.3.1.dev25 → verifiers-0.3.1.dev32}/tests/test_harbor_env_mcp.py +0 -0
  59. {verifiers-0.3.1.dev25 → verifiers-0.3.1.dev32}/tests/test_imports.py +0 -0
  60. {verifiers-0.3.1.dev25 → verifiers-0.3.1.dev32}/tests/test_init_script.py +0 -0
  61. {verifiers-0.3.1.dev25 → verifiers-0.3.1.dev32}/tests/test_install_utils.py +0 -0
  62. {verifiers-0.3.1.dev25 → verifiers-0.3.1.dev32}/tests/test_interception_utils.py +0 -0
  63. {verifiers-0.3.1.dev25 → verifiers-0.3.1.dev32}/tests/test_logging.py +0 -0
  64. {verifiers-0.3.1.dev25 → verifiers-0.3.1.dev32}/tests/test_math_rubric.py +0 -0
  65. {verifiers-0.3.1.dev25 → verifiers-0.3.1.dev32}/tests/test_maybe_think_parser.py +0 -0
  66. {verifiers-0.3.1.dev25 → verifiers-0.3.1.dev32}/tests/test_message_utils.py +0 -0
  67. {verifiers-0.3.1.dev25 → verifiers-0.3.1.dev32}/tests/test_message_utils_multimodal.py +0 -0
  68. {verifiers-0.3.1.dev25 → verifiers-0.3.1.dev32}/tests/test_multiturn_env.py +0 -0
  69. {verifiers-0.3.1.dev25 → verifiers-0.3.1.dev32}/tests/test_nemorl_client.py +0 -0
  70. {verifiers-0.3.1.dev25 → verifiers-0.3.1.dev32}/tests/test_openai_chat_completions_token_client.py +0 -0
  71. {verifiers-0.3.1.dev25 → verifiers-0.3.1.dev32}/tests/test_openai_responses_client.py +0 -0
  72. {verifiers-0.3.1.dev25 → verifiers-0.3.1.dev32}/tests/test_opencode_rlm_env.py +0 -0
  73. {verifiers-0.3.1.dev25 → verifiers-0.3.1.dev32}/tests/test_openenv_client.py +0 -0
  74. {verifiers-0.3.1.dev25 → verifiers-0.3.1.dev32}/tests/test_parser.py +0 -0
  75. {verifiers-0.3.1.dev25 → verifiers-0.3.1.dev32}/tests/test_path_utils.py +0 -0
  76. {verifiers-0.3.1.dev25 → verifiers-0.3.1.dev32}/tests/test_per_turn_timing.py +0 -0
  77. {verifiers-0.3.1.dev25 → verifiers-0.3.1.dev32}/tests/test_pricing_utils.py +0 -0
  78. {verifiers-0.3.1.dev25 → verifiers-0.3.1.dev32}/tests/test_prime_plugin.py +0 -0
  79. {verifiers-0.3.1.dev25 → verifiers-0.3.1.dev32}/tests/test_renderer_client.py +0 -0
  80. {verifiers-0.3.1.dev25 → verifiers-0.3.1.dev32}/tests/test_renderer_e2e.py +0 -0
  81. {verifiers-0.3.1.dev25 → verifiers-0.3.1.dev32}/tests/test_rlm_composable_env.py +0 -0
  82. {verifiers-0.3.1.dev25 → verifiers-0.3.1.dev32}/tests/test_rubric.py +0 -0
  83. {verifiers-0.3.1.dev25 → verifiers-0.3.1.dev32}/tests/test_rubric_group.py +0 -0
  84. {verifiers-0.3.1.dev25 → verifiers-0.3.1.dev32}/tests/test_sandbox_debug_env.py +0 -0
  85. {verifiers-0.3.1.dev25 → verifiers-0.3.1.dev32}/tests/test_sandbox_env.py +0 -0
  86. {verifiers-0.3.1.dev25 → verifiers-0.3.1.dev32}/tests/test_sandbox_mixin.py +0 -0
  87. {verifiers-0.3.1.dev25 → verifiers-0.3.1.dev32}/tests/test_save_utils.py +0 -0
  88. {verifiers-0.3.1.dev25 → verifiers-0.3.1.dev32}/tests/test_setup_script.py +0 -0
  89. {verifiers-0.3.1.dev25 → verifiers-0.3.1.dev32}/tests/test_singleturn_env.py +0 -0
  90. {verifiers-0.3.1.dev25 → verifiers-0.3.1.dev32}/tests/test_stateful_tool_env.py +0 -0
  91. {verifiers-0.3.1.dev25 → verifiers-0.3.1.dev32}/tests/test_think_parser.py +0 -0
  92. {verifiers-0.3.1.dev25 → verifiers-0.3.1.dev32}/tests/test_tool_env.py +0 -0
  93. {verifiers-0.3.1.dev25 → verifiers-0.3.1.dev32}/tests/test_tool_utils.py +0 -0
  94. {verifiers-0.3.1.dev25 → verifiers-0.3.1.dev32}/tests/test_trajectory_processing.py +0 -0
  95. {verifiers-0.3.1.dev25 → verifiers-0.3.1.dev32}/tests/test_tui_info_formatting.py +0 -0
  96. {verifiers-0.3.1.dev25 → verifiers-0.3.1.dev32}/tests/test_types.py +0 -0
  97. {verifiers-0.3.1.dev25 → verifiers-0.3.1.dev32}/tests/test_xml_parser.py +0 -0
  98. {verifiers-0.3.1.dev25 → verifiers-0.3.1.dev32}/tests/v1/conftest.py +0 -0
  99. {verifiers-0.3.1.dev25 → verifiers-0.3.1.dev32}/tests/v1/fixtures/counter_tool_v1.py +0 -0
  100. {verifiers-0.3.1.dev25 → verifiers-0.3.1.dev32}/tests/v1/fixtures/duet_v1.py +0 -0
  101. {verifiers-0.3.1.dev25 → verifiers-0.3.1.dev32}/tests/v1/fixtures/echo_acp_resume_v1.py +0 -0
  102. {verifiers-0.3.1.dev25 → verifiers-0.3.1.dev32}/tests/v1/fixtures/echo_agentic_v1.py +0 -0
  103. {verifiers-0.3.1.dev25 → verifiers-0.3.1.dev32}/tests/v1/fixtures/echo_tool_v1.py +0 -0
  104. {verifiers-0.3.1.dev25 → verifiers-0.3.1.dev32}/tests/v1/fixtures/echo_user_sim_v1.py +0 -0
  105. {verifiers-0.3.1.dev25 → verifiers-0.3.1.dev32}/tests/v1/fixtures/echo_v1.py +0 -0
  106. {verifiers-0.3.1.dev25 → verifiers-0.3.1.dev32}/tests/v1/fixtures/pyproject.toml +0 -0
  107. {verifiers-0.3.1.dev25 → verifiers-0.3.1.dev32}/tests/v1/fixtures/tool_response_image_v1.py +0 -0
  108. {verifiers-0.3.1.dev25 → verifiers-0.3.1.dev32}/tests/v1/test_color_codeword_tasks.py +0 -0
  109. {verifiers-0.3.1.dev25 → verifiers-0.3.1.dev32}/tests/v1/test_configs.py +0 -0
  110. {verifiers-0.3.1.dev25 → verifiers-0.3.1.dev32}/tests/v1/test_e2e.py +0 -0
  111. {verifiers-0.3.1.dev25 → verifiers-0.3.1.dev32}/tests/v1/test_envs.py +0 -0
  112. {verifiers-0.3.1.dev25 → verifiers-0.3.1.dev32}/tests/v1/test_graph.py +0 -0
  113. {verifiers-0.3.1.dev25 → verifiers-0.3.1.dev32}/tests/v1/test_judges.py +0 -0
  114. {verifiers-0.3.1.dev25 → verifiers-0.3.1.dev32}/tests/v1/test_taskset.py +0 -0
  115. {verifiers-0.3.1.dev25 → verifiers-0.3.1.dev32}/tests/v1/test_trace.py +0 -0
  116. {verifiers-0.3.1.dev25 → verifiers-0.3.1.dev32}/verifiers/__init__.py +0 -0
  117. {verifiers-0.3.1.dev25 → verifiers-0.3.1.dev32}/verifiers/cli/__init__.py +0 -0
  118. {verifiers-0.3.1.dev25 → verifiers-0.3.1.dev32}/verifiers/cli/commands/__init__.py +0 -0
  119. {verifiers-0.3.1.dev25 → verifiers-0.3.1.dev32}/verifiers/cli/commands/build.py +0 -0
  120. {verifiers-0.3.1.dev25 → verifiers-0.3.1.dev32}/verifiers/cli/commands/eval.py +0 -0
  121. {verifiers-0.3.1.dev25 → verifiers-0.3.1.dev32}/verifiers/cli/commands/gepa.py +0 -0
  122. {verifiers-0.3.1.dev25 → verifiers-0.3.1.dev32}/verifiers/cli/commands/init.py +0 -0
  123. {verifiers-0.3.1.dev25 → verifiers-0.3.1.dev32}/verifiers/cli/commands/install.py +0 -0
  124. {verifiers-0.3.1.dev25 → verifiers-0.3.1.dev32}/verifiers/cli/commands/setup.py +0 -0
  125. {verifiers-0.3.1.dev25 → verifiers-0.3.1.dev32}/verifiers/cli/plugins/__init__.py +0 -0
  126. {verifiers-0.3.1.dev25 → verifiers-0.3.1.dev32}/verifiers/cli/plugins/prime.py +0 -0
  127. {verifiers-0.3.1.dev25 → verifiers-0.3.1.dev32}/verifiers/cli/tui.py +0 -0
  128. {verifiers-0.3.1.dev25 → verifiers-0.3.1.dev32}/verifiers/legacy/__init__.py +0 -0
  129. {verifiers-0.3.1.dev25 → verifiers-0.3.1.dev32}/verifiers/legacy/clients/__init__.py +0 -0
  130. {verifiers-0.3.1.dev25 → verifiers-0.3.1.dev32}/verifiers/legacy/clients/anthropic_messages_client.py +0 -0
  131. {verifiers-0.3.1.dev25 → verifiers-0.3.1.dev32}/verifiers/legacy/clients/client.py +0 -0
  132. {verifiers-0.3.1.dev25 → verifiers-0.3.1.dev32}/verifiers/legacy/clients/nemorl_chat_completions_client.py +0 -0
  133. {verifiers-0.3.1.dev25 → verifiers-0.3.1.dev32}/verifiers/legacy/clients/openai_chat_completions_client.py +0 -0
  134. {verifiers-0.3.1.dev25 → verifiers-0.3.1.dev32}/verifiers/legacy/clients/openai_chat_completions_token_client.py +0 -0
  135. {verifiers-0.3.1.dev25 → verifiers-0.3.1.dev32}/verifiers/legacy/clients/openai_completions_client.py +0 -0
  136. {verifiers-0.3.1.dev25 → verifiers-0.3.1.dev32}/verifiers/legacy/clients/openai_responses_client.py +0 -0
  137. {verifiers-0.3.1.dev25 → verifiers-0.3.1.dev32}/verifiers/legacy/clients/renderer_client.py +0 -0
  138. {verifiers-0.3.1.dev25 → verifiers-0.3.1.dev32}/verifiers/legacy/decorators.py +0 -0
  139. {verifiers-0.3.1.dev25 → verifiers-0.3.1.dev32}/verifiers/legacy/envs/__init__.py +0 -0
  140. {verifiers-0.3.1.dev25 → verifiers-0.3.1.dev32}/verifiers/legacy/envs/env_group.py +0 -0
  141. {verifiers-0.3.1.dev25 → verifiers-0.3.1.dev32}/verifiers/legacy/envs/environment.py +0 -0
  142. {verifiers-0.3.1.dev25 → verifiers-0.3.1.dev32}/verifiers/legacy/envs/experimental/README.md +0 -0
  143. {verifiers-0.3.1.dev25 → verifiers-0.3.1.dev32}/verifiers/legacy/envs/experimental/__init__.py +0 -0
  144. {verifiers-0.3.1.dev25 → verifiers-0.3.1.dev32}/verifiers/legacy/envs/experimental/cli_agent_env.py +0 -0
  145. {verifiers-0.3.1.dev25 → verifiers-0.3.1.dev32}/verifiers/legacy/envs/experimental/composable/README.md +0 -0
  146. {verifiers-0.3.1.dev25 → verifiers-0.3.1.dev32}/verifiers/legacy/envs/experimental/composable/__init__.py +0 -0
  147. {verifiers-0.3.1.dev25 → verifiers-0.3.1.dev32}/verifiers/legacy/envs/experimental/composable/_filter.py +0 -0
  148. {verifiers-0.3.1.dev25 → verifiers-0.3.1.dev32}/verifiers/legacy/envs/experimental/composable/composable_env.py +0 -0
  149. {verifiers-0.3.1.dev25 → verifiers-0.3.1.dev32}/verifiers/legacy/envs/experimental/composable/harness.py +0 -0
  150. {verifiers-0.3.1.dev25 → verifiers-0.3.1.dev32}/verifiers/legacy/envs/experimental/composable/harnesses/__init__.py +0 -0
  151. {verifiers-0.3.1.dev25 → verifiers-0.3.1.dev32}/verifiers/legacy/envs/experimental/composable/harnesses/mini_swe_agent.py +0 -0
  152. {verifiers-0.3.1.dev25 → verifiers-0.3.1.dev32}/verifiers/legacy/envs/experimental/composable/harnesses/opencode.py +0 -0
  153. {verifiers-0.3.1.dev25 → verifiers-0.3.1.dev32}/verifiers/legacy/envs/experimental/composable/harnesses/prompt.txt +0 -0
  154. {verifiers-0.3.1.dev25 → verifiers-0.3.1.dev32}/verifiers/legacy/envs/experimental/composable/harnesses/rlm.py +0 -0
  155. {verifiers-0.3.1.dev25 → verifiers-0.3.1.dev32}/verifiers/legacy/envs/experimental/composable/sandbox_debug_env.py +0 -0
  156. {verifiers-0.3.1.dev25 → verifiers-0.3.1.dev32}/verifiers/legacy/envs/experimental/composable/swe_debug_env.py +0 -0
  157. {verifiers-0.3.1.dev25 → verifiers-0.3.1.dev32}/verifiers/legacy/envs/experimental/composable/task.py +0 -0
  158. {verifiers-0.3.1.dev25 → verifiers-0.3.1.dev32}/verifiers/legacy/envs/experimental/composable/tasksets/__init__.py +0 -0
  159. {verifiers-0.3.1.dev25 → verifiers-0.3.1.dev32}/verifiers/legacy/envs/experimental/composable/tasksets/cp/__init__.py +0 -0
  160. {verifiers-0.3.1.dev25 → verifiers-0.3.1.dev32}/verifiers/legacy/envs/experimental/composable/tasksets/cp/cp_task.py +0 -0
  161. {verifiers-0.3.1.dev25 → verifiers-0.3.1.dev32}/verifiers/legacy/envs/experimental/composable/tasksets/cp/test_utils.py +0 -0
  162. {verifiers-0.3.1.dev25 → verifiers-0.3.1.dev32}/verifiers/legacy/envs/experimental/composable/tasksets/harbor/__init__.py +0 -0
  163. {verifiers-0.3.1.dev25 → verifiers-0.3.1.dev32}/verifiers/legacy/envs/experimental/composable/tasksets/harbor/cli_gym.py +0 -0
  164. {verifiers-0.3.1.dev25 → verifiers-0.3.1.dev32}/verifiers/legacy/envs/experimental/composable/tasksets/harbor/harbor.py +0 -0
  165. {verifiers-0.3.1.dev25 → verifiers-0.3.1.dev32}/verifiers/legacy/envs/experimental/composable/tasksets/harbor/terminal_lego.py +0 -0
  166. {verifiers-0.3.1.dev25 → verifiers-0.3.1.dev32}/verifiers/legacy/envs/experimental/composable/tasksets/math/__init__.py +0 -0
  167. {verifiers-0.3.1.dev25 → verifiers-0.3.1.dev32}/verifiers/legacy/envs/experimental/composable/tasksets/math/math_task.py +0 -0
  168. {verifiers-0.3.1.dev25 → verifiers-0.3.1.dev32}/verifiers/legacy/envs/experimental/composable/tasksets/swe/README.md +0 -0
  169. {verifiers-0.3.1.dev25 → verifiers-0.3.1.dev32}/verifiers/legacy/envs/experimental/composable/tasksets/swe/__init__.py +0 -0
  170. {verifiers-0.3.1.dev25 → verifiers-0.3.1.dev32}/verifiers/legacy/envs/experimental/composable/tasksets/swe/multi_swe/__init__.py +0 -0
  171. {verifiers-0.3.1.dev25 → verifiers-0.3.1.dev32}/verifiers/legacy/envs/experimental/composable/tasksets/swe/multi_swe/extract_fix_patch.sh +0 -0
  172. {verifiers-0.3.1.dev25 → verifiers-0.3.1.dev32}/verifiers/legacy/envs/experimental/composable/tasksets/swe/multi_swe/taskset.py +0 -0
  173. {verifiers-0.3.1.dev25 → verifiers-0.3.1.dev32}/verifiers/legacy/envs/experimental/composable/tasksets/swe/openswe/__init__.py +0 -0
  174. {verifiers-0.3.1.dev25 → verifiers-0.3.1.dev32}/verifiers/legacy/envs/experimental/composable/tasksets/swe/openswe/taskset.py +0 -0
  175. {verifiers-0.3.1.dev25 → verifiers-0.3.1.dev32}/verifiers/legacy/envs/experimental/composable/tasksets/swe/r2e_gym/__init__.py +0 -0
  176. {verifiers-0.3.1.dev25 → verifiers-0.3.1.dev32}/verifiers/legacy/envs/experimental/composable/tasksets/swe/r2e_gym/log_parser.py +0 -0
  177. {verifiers-0.3.1.dev25 → verifiers-0.3.1.dev32}/verifiers/legacy/envs/experimental/composable/tasksets/swe/r2e_gym/taskset.py +0 -0
  178. {verifiers-0.3.1.dev25 → verifiers-0.3.1.dev32}/verifiers/legacy/envs/experimental/composable/tasksets/swe/scale_swe/__init__.py +0 -0
  179. {verifiers-0.3.1.dev25 → verifiers-0.3.1.dev32}/verifiers/legacy/envs/experimental/composable/tasksets/swe/scale_swe/taskset.py +0 -0
  180. {verifiers-0.3.1.dev25 → verifiers-0.3.1.dev32}/verifiers/legacy/envs/experimental/composable/tasksets/swe/shared/__init__.py +0 -0
  181. {verifiers-0.3.1.dev25 → verifiers-0.3.1.dev32}/verifiers/legacy/envs/experimental/composable/tasksets/swe/shared/test_patch.py +0 -0
  182. {verifiers-0.3.1.dev25 → verifiers-0.3.1.dev32}/verifiers/legacy/envs/experimental/composable/tasksets/swe/swe_bench/__init__.py +0 -0
  183. {verifiers-0.3.1.dev25 → verifiers-0.3.1.dev32}/verifiers/legacy/envs/experimental/composable/tasksets/swe/swe_bench/taskset.py +0 -0
  184. {verifiers-0.3.1.dev25 → verifiers-0.3.1.dev32}/verifiers/legacy/envs/experimental/composable/tasksets/swe/swe_lego/__init__.py +0 -0
  185. {verifiers-0.3.1.dev25 → verifiers-0.3.1.dev32}/verifiers/legacy/envs/experimental/composable/tasksets/swe/swe_lego/taskset.py +0 -0
  186. {verifiers-0.3.1.dev25 → verifiers-0.3.1.dev32}/verifiers/legacy/envs/experimental/composable/tasksets/swe/swe_rebench_v2/__init__.py +0 -0
  187. {verifiers-0.3.1.dev25 → verifiers-0.3.1.dev32}/verifiers/legacy/envs/experimental/composable/tasksets/swe/swe_rebench_v2/log_parsers.py +0 -0
  188. {verifiers-0.3.1.dev25 → verifiers-0.3.1.dev32}/verifiers/legacy/envs/experimental/composable/tasksets/swe/swe_rebench_v2/taskset.py +0 -0
  189. {verifiers-0.3.1.dev25 → verifiers-0.3.1.dev32}/verifiers/legacy/envs/experimental/composable/tasksets/swe/swe_smith/__init__.py +0 -0
  190. {verifiers-0.3.1.dev25 → verifiers-0.3.1.dev32}/verifiers/legacy/envs/experimental/composable/tasksets/swe/swe_smith/taskset.py +0 -0
  191. {verifiers-0.3.1.dev25 → verifiers-0.3.1.dev32}/verifiers/legacy/envs/experimental/composable/tasksets/swe/swe_tasksets.py +0 -0
  192. {verifiers-0.3.1.dev25 → verifiers-0.3.1.dev32}/verifiers/legacy/envs/experimental/gym_env.py +0 -0
  193. {verifiers-0.3.1.dev25 → verifiers-0.3.1.dev32}/verifiers/legacy/envs/experimental/harbor_env/__init__.py +0 -0
  194. {verifiers-0.3.1.dev25 → verifiers-0.3.1.dev32}/verifiers/legacy/envs/experimental/harbor_env/env.py +0 -0
  195. {verifiers-0.3.1.dev25 → verifiers-0.3.1.dev32}/verifiers/legacy/envs/experimental/harbor_env/mcp.py +0 -0
  196. {verifiers-0.3.1.dev25 → verifiers-0.3.1.dev32}/verifiers/legacy/envs/experimental/mcp_env.py +0 -0
  197. {verifiers-0.3.1.dev25 → verifiers-0.3.1.dev32}/verifiers/legacy/envs/experimental/opencode_env.py +0 -0
  198. {verifiers-0.3.1.dev25 → verifiers-0.3.1.dev32}/verifiers/legacy/envs/experimental/opencode_qa_env.py +0 -0
  199. {verifiers-0.3.1.dev25 → verifiers-0.3.1.dev32}/verifiers/legacy/envs/experimental/opencode_rlm_env.py +0 -0
  200. {verifiers-0.3.1.dev25 → verifiers-0.3.1.dev32}/verifiers/legacy/envs/experimental/sandbox_mixin.py +0 -0
  201. {verifiers-0.3.1.dev25 → verifiers-0.3.1.dev32}/verifiers/legacy/envs/experimental/utils/__init__.py +0 -0
  202. {verifiers-0.3.1.dev25 → verifiers-0.3.1.dev32}/verifiers/legacy/envs/experimental/utils/file_locks.py +0 -0
  203. {verifiers-0.3.1.dev25 → verifiers-0.3.1.dev32}/verifiers/legacy/envs/experimental/utils/git_checkout_cache.py +0 -0
  204. {verifiers-0.3.1.dev25 → verifiers-0.3.1.dev32}/verifiers/legacy/envs/integrations/README.md +0 -0
  205. {verifiers-0.3.1.dev25 → verifiers-0.3.1.dev32}/verifiers/legacy/envs/integrations/__init__.py +0 -0
  206. {verifiers-0.3.1.dev25 → verifiers-0.3.1.dev32}/verifiers/legacy/envs/integrations/browser_env/README.md +0 -0
  207. {verifiers-0.3.1.dev25 → verifiers-0.3.1.dev32}/verifiers/legacy/envs/integrations/browser_env/__init__.py +0 -0
  208. {verifiers-0.3.1.dev25 → verifiers-0.3.1.dev32}/verifiers/legacy/envs/integrations/browser_env/browser_env.py +0 -0
  209. {verifiers-0.3.1.dev25 → verifiers-0.3.1.dev32}/verifiers/legacy/envs/integrations/browser_env/modes/__init__.py +0 -0
  210. {verifiers-0.3.1.dev25 → verifiers-0.3.1.dev32}/verifiers/legacy/envs/integrations/browser_env/modes/base.py +0 -0
  211. {verifiers-0.3.1.dev25 → verifiers-0.3.1.dev32}/verifiers/legacy/envs/integrations/browser_env/modes/cua_mode.py +0 -0
  212. {verifiers-0.3.1.dev25 → verifiers-0.3.1.dev32}/verifiers/legacy/envs/integrations/browser_env/modes/dom_mode.py +0 -0
  213. {verifiers-0.3.1.dev25 → verifiers-0.3.1.dev32}/verifiers/legacy/envs/integrations/openenv_env.py +0 -0
  214. {verifiers-0.3.1.dev25 → verifiers-0.3.1.dev32}/verifiers/legacy/envs/integrations/reasoninggym_env.py +0 -0
  215. {verifiers-0.3.1.dev25 → verifiers-0.3.1.dev32}/verifiers/legacy/envs/integrations/textarena_env.py +0 -0
  216. {verifiers-0.3.1.dev25 → verifiers-0.3.1.dev32}/verifiers/legacy/envs/multiturn_env.py +0 -0
  217. {verifiers-0.3.1.dev25 → verifiers-0.3.1.dev32}/verifiers/legacy/envs/python_env.py +0 -0
  218. {verifiers-0.3.1.dev25 → verifiers-0.3.1.dev32}/verifiers/legacy/envs/sandbox_env.py +0 -0
  219. {verifiers-0.3.1.dev25 → verifiers-0.3.1.dev32}/verifiers/legacy/envs/singleturn_env.py +0 -0
  220. {verifiers-0.3.1.dev25 → verifiers-0.3.1.dev32}/verifiers/legacy/envs/stateful_tool_env.py +0 -0
  221. {verifiers-0.3.1.dev25 → verifiers-0.3.1.dev32}/verifiers/legacy/envs/tool_env.py +0 -0
  222. {verifiers-0.3.1.dev25 → verifiers-0.3.1.dev32}/verifiers/legacy/errors.py +0 -0
  223. {verifiers-0.3.1.dev25 → verifiers-0.3.1.dev32}/verifiers/legacy/gepa/__init__.py +0 -0
  224. {verifiers-0.3.1.dev25 → verifiers-0.3.1.dev32}/verifiers/legacy/gepa/adapter.py +0 -0
  225. {verifiers-0.3.1.dev25 → verifiers-0.3.1.dev32}/verifiers/legacy/gepa/config.py +0 -0
  226. {verifiers-0.3.1.dev25 → verifiers-0.3.1.dev32}/verifiers/legacy/gepa/display.py +0 -0
  227. {verifiers-0.3.1.dev25 → verifiers-0.3.1.dev32}/verifiers/legacy/gepa/gepa_utils.py +0 -0
  228. {verifiers-0.3.1.dev25 → verifiers-0.3.1.dev32}/verifiers/legacy/parsers/__init__.py +0 -0
  229. {verifiers-0.3.1.dev25 → verifiers-0.3.1.dev32}/verifiers/legacy/parsers/maybe_think_parser.py +0 -0
  230. {verifiers-0.3.1.dev25 → verifiers-0.3.1.dev32}/verifiers/legacy/parsers/parser.py +0 -0
  231. {verifiers-0.3.1.dev25 → verifiers-0.3.1.dev32}/verifiers/legacy/parsers/think_parser.py +0 -0
  232. {verifiers-0.3.1.dev25 → verifiers-0.3.1.dev32}/verifiers/legacy/parsers/xml_parser.py +0 -0
  233. {verifiers-0.3.1.dev25 → verifiers-0.3.1.dev32}/verifiers/legacy/rubrics/__init__.py +0 -0
  234. {verifiers-0.3.1.dev25 → verifiers-0.3.1.dev32}/verifiers/legacy/rubrics/experimental/hybrid_math_rubric.py +0 -0
  235. {verifiers-0.3.1.dev25 → verifiers-0.3.1.dev32}/verifiers/legacy/rubrics/judge_rubric.py +0 -0
  236. {verifiers-0.3.1.dev25 → verifiers-0.3.1.dev32}/verifiers/legacy/rubrics/math_rubric.py +0 -0
  237. {verifiers-0.3.1.dev25 → verifiers-0.3.1.dev32}/verifiers/legacy/rubrics/rubric.py +0 -0
  238. {verifiers-0.3.1.dev25 → verifiers-0.3.1.dev32}/verifiers/legacy/rubrics/rubric_group.py +0 -0
  239. {verifiers-0.3.1.dev25 → verifiers-0.3.1.dev32}/verifiers/legacy/scripts/__init__.py +0 -0
  240. {verifiers-0.3.1.dev25 → verifiers-0.3.1.dev32}/verifiers/legacy/scripts/build.py +0 -0
  241. {verifiers-0.3.1.dev25 → verifiers-0.3.1.dev32}/verifiers/legacy/scripts/eval.py +0 -0
  242. {verifiers-0.3.1.dev25 → verifiers-0.3.1.dev32}/verifiers/legacy/scripts/gepa.py +0 -0
  243. {verifiers-0.3.1.dev25 → verifiers-0.3.1.dev32}/verifiers/legacy/scripts/init.py +0 -0
  244. {verifiers-0.3.1.dev25 → verifiers-0.3.1.dev32}/verifiers/legacy/scripts/install.py +0 -0
  245. {verifiers-0.3.1.dev25 → verifiers-0.3.1.dev32}/verifiers/legacy/scripts/setup.py +0 -0
  246. {verifiers-0.3.1.dev25 → verifiers-0.3.1.dev32}/verifiers/legacy/scripts/tui.py +0 -0
  247. {verifiers-0.3.1.dev25 → verifiers-0.3.1.dev32}/verifiers/legacy/serve/__init__.py +0 -0
  248. {verifiers-0.3.1.dev25 → verifiers-0.3.1.dev32}/verifiers/legacy/serve/client/env_client.py +0 -0
  249. {verifiers-0.3.1.dev25 → verifiers-0.3.1.dev32}/verifiers/legacy/serve/client/zmq_env_client.py +0 -0
  250. {verifiers-0.3.1.dev25 → verifiers-0.3.1.dev32}/verifiers/legacy/serve/server/__init__.py +0 -0
  251. {verifiers-0.3.1.dev25 → verifiers-0.3.1.dev32}/verifiers/legacy/serve/server/env_router.py +0 -0
  252. {verifiers-0.3.1.dev25 → verifiers-0.3.1.dev32}/verifiers/legacy/serve/server/env_server.py +0 -0
  253. {verifiers-0.3.1.dev25 → verifiers-0.3.1.dev32}/verifiers/legacy/serve/server/env_worker.py +0 -0
  254. {verifiers-0.3.1.dev25 → verifiers-0.3.1.dev32}/verifiers/legacy/serve/server/zmq_env_server.py +0 -0
  255. {verifiers-0.3.1.dev25 → verifiers-0.3.1.dev32}/verifiers/legacy/serve/types.py +0 -0
  256. {verifiers-0.3.1.dev25 → verifiers-0.3.1.dev32}/verifiers/legacy/types.py +0 -0
  257. {verifiers-0.3.1.dev25 → verifiers-0.3.1.dev32}/verifiers/legacy/utils/__init__.py +0 -0
  258. {verifiers-0.3.1.dev25 → verifiers-0.3.1.dev32}/verifiers/legacy/utils/async_utils.py +0 -0
  259. {verifiers-0.3.1.dev25 → verifiers-0.3.1.dev32}/verifiers/legacy/utils/client_utils.py +0 -0
  260. {verifiers-0.3.1.dev25 → verifiers-0.3.1.dev32}/verifiers/legacy/utils/config_utils.py +0 -0
  261. {verifiers-0.3.1.dev25 → verifiers-0.3.1.dev32}/verifiers/legacy/utils/data_utils.py +0 -0
  262. {verifiers-0.3.1.dev25 → verifiers-0.3.1.dev32}/verifiers/legacy/utils/display_utils.py +0 -0
  263. {verifiers-0.3.1.dev25 → verifiers-0.3.1.dev32}/verifiers/legacy/utils/env_config_utils.py +0 -0
  264. {verifiers-0.3.1.dev25 → verifiers-0.3.1.dev32}/verifiers/legacy/utils/env_utils.py +0 -0
  265. {verifiers-0.3.1.dev25 → verifiers-0.3.1.dev32}/verifiers/legacy/utils/error_utils.py +0 -0
  266. {verifiers-0.3.1.dev25 → verifiers-0.3.1.dev32}/verifiers/legacy/utils/eval_display.py +0 -0
  267. {verifiers-0.3.1.dev25 → verifiers-0.3.1.dev32}/verifiers/legacy/utils/eval_utils.py +0 -0
  268. {verifiers-0.3.1.dev25 → verifiers-0.3.1.dev32}/verifiers/legacy/utils/heartbeat.py +0 -0
  269. {verifiers-0.3.1.dev25 → verifiers-0.3.1.dev32}/verifiers/legacy/utils/import_utils.py +0 -0
  270. {verifiers-0.3.1.dev25 → verifiers-0.3.1.dev32}/verifiers/legacy/utils/install_utils.py +0 -0
  271. {verifiers-0.3.1.dev25 → verifiers-0.3.1.dev32}/verifiers/legacy/utils/interception_utils.py +0 -0
  272. {verifiers-0.3.1.dev25 → verifiers-0.3.1.dev32}/verifiers/legacy/utils/logging_utils.py +0 -0
  273. {verifiers-0.3.1.dev25 → verifiers-0.3.1.dev32}/verifiers/legacy/utils/message_utils.py +0 -0
  274. {verifiers-0.3.1.dev25 → verifiers-0.3.1.dev32}/verifiers/legacy/utils/metric_utils.py +0 -0
  275. {verifiers-0.3.1.dev25 → verifiers-0.3.1.dev32}/verifiers/legacy/utils/path_utils.py +0 -0
  276. {verifiers-0.3.1.dev25 → verifiers-0.3.1.dev32}/verifiers/legacy/utils/pricing_utils.py +0 -0
  277. {verifiers-0.3.1.dev25 → verifiers-0.3.1.dev32}/verifiers/legacy/utils/process_utils.py +0 -0
  278. {verifiers-0.3.1.dev25 → verifiers-0.3.1.dev32}/verifiers/legacy/utils/response_utils.py +0 -0
  279. {verifiers-0.3.1.dev25 → verifiers-0.3.1.dev32}/verifiers/legacy/utils/save_utils.py +0 -0
  280. {verifiers-0.3.1.dev25 → verifiers-0.3.1.dev32}/verifiers/legacy/utils/serve_utils.py +0 -0
  281. {verifiers-0.3.1.dev25 → verifiers-0.3.1.dev32}/verifiers/legacy/utils/thread_utils.py +0 -0
  282. {verifiers-0.3.1.dev25 → verifiers-0.3.1.dev32}/verifiers/legacy/utils/threaded_sandbox_client.py +0 -0
  283. {verifiers-0.3.1.dev25 → verifiers-0.3.1.dev32}/verifiers/legacy/utils/tool_utils.py +0 -0
  284. {verifiers-0.3.1.dev25 → verifiers-0.3.1.dev32}/verifiers/legacy/utils/usage_utils.py +0 -0
  285. {verifiers-0.3.1.dev25 → verifiers-0.3.1.dev32}/verifiers/legacy/utils/version_utils.py +0 -0
  286. {verifiers-0.3.1.dev25 → verifiers-0.3.1.dev32}/verifiers/v1/acp/__init__.py +0 -0
  287. {verifiers-0.3.1.dev25 → verifiers-0.3.1.dev32}/verifiers/v1/acp/runner.py +0 -0
  288. {verifiers-0.3.1.dev25 → verifiers-0.3.1.dev32}/verifiers/v1/cli/__init__.py +0 -0
  289. {verifiers-0.3.1.dev25 → verifiers-0.3.1.dev32}/verifiers/v1/cli/dashboard/__init__.py +0 -0
  290. {verifiers-0.3.1.dev25 → verifiers-0.3.1.dev32}/verifiers/v1/cli/dashboard/base.py +0 -0
  291. {verifiers-0.3.1.dev25 → verifiers-0.3.1.dev32}/verifiers/v1/cli/dashboard/eval.py +0 -0
  292. {verifiers-0.3.1.dev25 → verifiers-0.3.1.dev32}/verifiers/v1/cli/dashboard/replay.py +0 -0
  293. {verifiers-0.3.1.dev25 → verifiers-0.3.1.dev32}/verifiers/v1/cli/dashboard/validate.py +0 -0
  294. {verifiers-0.3.1.dev25 → verifiers-0.3.1.dev32}/verifiers/v1/cli/debug.py +0 -0
  295. {verifiers-0.3.1.dev25 → verifiers-0.3.1.dev32}/verifiers/v1/cli/eval/__init__.py +0 -0
  296. {verifiers-0.3.1.dev25 → verifiers-0.3.1.dev32}/verifiers/v1/cli/eval/main.py +0 -0
  297. {verifiers-0.3.1.dev25 → verifiers-0.3.1.dev32}/verifiers/v1/cli/eval/resume.py +0 -0
  298. {verifiers-0.3.1.dev25 → verifiers-0.3.1.dev32}/verifiers/v1/cli/eval/runner.py +0 -0
  299. {verifiers-0.3.1.dev25 → verifiers-0.3.1.dev32}/verifiers/v1/cli/gepa.py +0 -0
  300. {verifiers-0.3.1.dev25 → verifiers-0.3.1.dev32}/verifiers/v1/cli/init.py +0 -0
  301. {verifiers-0.3.1.dev25 → verifiers-0.3.1.dev32}/verifiers/v1/cli/output.py +0 -0
  302. {verifiers-0.3.1.dev25 → verifiers-0.3.1.dev32}/verifiers/v1/cli/replay.py +0 -0
  303. {verifiers-0.3.1.dev25 → verifiers-0.3.1.dev32}/verifiers/v1/cli/resolve.py +0 -0
  304. {verifiers-0.3.1.dev25 → verifiers-0.3.1.dev32}/verifiers/v1/cli/resume.py +0 -0
  305. {verifiers-0.3.1.dev25 → verifiers-0.3.1.dev32}/verifiers/v1/cli/validate.py +0 -0
  306. {verifiers-0.3.1.dev25 → verifiers-0.3.1.dev32}/verifiers/v1/clients/__init__.py +0 -0
  307. {verifiers-0.3.1.dev25 → verifiers-0.3.1.dev32}/verifiers/v1/clients/base.py +0 -0
  308. {verifiers-0.3.1.dev25 → verifiers-0.3.1.dev32}/verifiers/v1/clients/client.py +0 -0
  309. {verifiers-0.3.1.dev25 → verifiers-0.3.1.dev32}/verifiers/v1/clients/eval.py +0 -0
  310. {verifiers-0.3.1.dev25 → verifiers-0.3.1.dev32}/verifiers/v1/configs/__init__.py +0 -0
  311. {verifiers-0.3.1.dev25 → verifiers-0.3.1.dev32}/verifiers/v1/configs/cli/__init__.py +0 -0
  312. {verifiers-0.3.1.dev25 → verifiers-0.3.1.dev32}/verifiers/v1/configs/cli/env.py +0 -0
  313. {verifiers-0.3.1.dev25 → verifiers-0.3.1.dev32}/verifiers/v1/configs/cli/eval.py +0 -0
  314. {verifiers-0.3.1.dev25 → verifiers-0.3.1.dev32}/verifiers/v1/configs/cli/init.py +0 -0
  315. {verifiers-0.3.1.dev25 → verifiers-0.3.1.dev32}/verifiers/v1/configs/cli/replay.py +0 -0
  316. {verifiers-0.3.1.dev25 → verifiers-0.3.1.dev32}/verifiers/v1/configs/env.py +0 -0
  317. {verifiers-0.3.1.dev25 → verifiers-0.3.1.dev32}/verifiers/v1/configs/harness.py +0 -0
  318. {verifiers-0.3.1.dev25 → verifiers-0.3.1.dev32}/verifiers/v1/configs/judge.py +0 -0
  319. {verifiers-0.3.1.dev25 → verifiers-0.3.1.dev32}/verifiers/v1/configs/retries.py +0 -0
  320. {verifiers-0.3.1.dev25 → verifiers-0.3.1.dev32}/verifiers/v1/configs/runtime.py +0 -0
  321. {verifiers-0.3.1.dev25 → verifiers-0.3.1.dev32}/verifiers/v1/configs/serve.py +0 -0
  322. {verifiers-0.3.1.dev25 → verifiers-0.3.1.dev32}/verifiers/v1/configs/taskset.py +0 -0
  323. {verifiers-0.3.1.dev25 → verifiers-0.3.1.dev32}/verifiers/v1/dialects/__init__.py +0 -0
  324. {verifiers-0.3.1.dev25 → verifiers-0.3.1.dev32}/verifiers/v1/env.py +0 -0
  325. {verifiers-0.3.1.dev25 → verifiers-0.3.1.dev32}/verifiers/v1/envs/__init__.py +0 -0
  326. {verifiers-0.3.1.dev25 → verifiers-0.3.1.dev32}/verifiers/v1/envs/agentic_judge/__init__.py +0 -0
  327. {verifiers-0.3.1.dev25 → verifiers-0.3.1.dev32}/verifiers/v1/envs/agentic_judge/env.py +0 -0
  328. {verifiers-0.3.1.dev25 → verifiers-0.3.1.dev32}/verifiers/v1/envs/best_of_n/__init__.py +0 -0
  329. {verifiers-0.3.1.dev25 → verifiers-0.3.1.dev32}/verifiers/v1/envs/best_of_n/env.py +0 -0
  330. {verifiers-0.3.1.dev25 → verifiers-0.3.1.dev32}/verifiers/v1/envs/shared_agentic_judge/__init__.py +0 -0
  331. {verifiers-0.3.1.dev25 → verifiers-0.3.1.dev32}/verifiers/v1/envs/single_agent/__init__.py +0 -0
  332. {verifiers-0.3.1.dev25 → verifiers-0.3.1.dev32}/verifiers/v1/envs/single_agent/env.py +0 -0
  333. {verifiers-0.3.1.dev25 → verifiers-0.3.1.dev32}/verifiers/v1/envs/user_sim/__init__.py +0 -0
  334. {verifiers-0.3.1.dev25 → verifiers-0.3.1.dev32}/verifiers/v1/envs/user_sim/env.py +0 -0
  335. {verifiers-0.3.1.dev25 → verifiers-0.3.1.dev32}/verifiers/v1/episode.py +0 -0
  336. {verifiers-0.3.1.dev25 → verifiers-0.3.1.dev32}/verifiers/v1/errors.py +0 -0
  337. {verifiers-0.3.1.dev25 → verifiers-0.3.1.dev32}/verifiers/v1/gepa/__init__.py +0 -0
  338. {verifiers-0.3.1.dev25 → verifiers-0.3.1.dev32}/verifiers/v1/gepa/adapter.py +0 -0
  339. {verifiers-0.3.1.dev25 → verifiers-0.3.1.dev32}/verifiers/v1/gepa/config.py +0 -0
  340. {verifiers-0.3.1.dev25 → verifiers-0.3.1.dev32}/verifiers/v1/gepa/dataset.py +0 -0
  341. {verifiers-0.3.1.dev25 → verifiers-0.3.1.dev32}/verifiers/v1/gepa/reflection.py +0 -0
  342. {verifiers-0.3.1.dev25 → verifiers-0.3.1.dev32}/verifiers/v1/gepa/runner.py +0 -0
  343. {verifiers-0.3.1.dev25 → verifiers-0.3.1.dev32}/verifiers/v1/harnesses/__init__.py +0 -0
  344. {verifiers-0.3.1.dev25 → verifiers-0.3.1.dev32}/verifiers/v1/harnesses/bash/__init__.py +0 -0
  345. {verifiers-0.3.1.dev25 → verifiers-0.3.1.dev32}/verifiers/v1/harnesses/browser_use/__init__.py +0 -0
  346. {verifiers-0.3.1.dev25 → verifiers-0.3.1.dev32}/verifiers/v1/harnesses/browser_use/harness.py +0 -0
  347. {verifiers-0.3.1.dev25 → verifiers-0.3.1.dev32}/verifiers/v1/harnesses/browser_use/program.py +0 -0
  348. {verifiers-0.3.1.dev25 → verifiers-0.3.1.dev32}/verifiers/v1/harnesses/claude_code/__init__.py +0 -0
  349. {verifiers-0.3.1.dev25 → verifiers-0.3.1.dev32}/verifiers/v1/harnesses/claude_code/harness.py +0 -0
  350. {verifiers-0.3.1.dev25 → verifiers-0.3.1.dev32}/verifiers/v1/harnesses/codex/__init__.py +0 -0
  351. {verifiers-0.3.1.dev25 → verifiers-0.3.1.dev32}/verifiers/v1/harnesses/codex/harness.py +0 -0
  352. {verifiers-0.3.1.dev25 → verifiers-0.3.1.dev32}/verifiers/v1/harnesses/hermes_agent/__init__.py +0 -0
  353. {verifiers-0.3.1.dev25 → verifiers-0.3.1.dev32}/verifiers/v1/harnesses/hermes_agent/harness.py +0 -0
  354. {verifiers-0.3.1.dev25 → verifiers-0.3.1.dev32}/verifiers/v1/harnesses/hermes_agent/program.py +0 -0
  355. {verifiers-0.3.1.dev25 → verifiers-0.3.1.dev32}/verifiers/v1/harnesses/kimi_code/__init__.py +0 -0
  356. {verifiers-0.3.1.dev25 → verifiers-0.3.1.dev32}/verifiers/v1/harnesses/kimi_code/harness.py +0 -0
  357. {verifiers-0.3.1.dev25 → verifiers-0.3.1.dev32}/verifiers/v1/harnesses/mini_swe_agent/__init__.py +0 -0
  358. {verifiers-0.3.1.dev25 → verifiers-0.3.1.dev32}/verifiers/v1/harnesses/mini_swe_agent/harness.py +0 -0
  359. {verifiers-0.3.1.dev25 → verifiers-0.3.1.dev32}/verifiers/v1/harnesses/mini_swe_agent/program.py +0 -0
  360. {verifiers-0.3.1.dev25 → verifiers-0.3.1.dev32}/verifiers/v1/harnesses/node.py +0 -0
  361. {verifiers-0.3.1.dev25 → verifiers-0.3.1.dev32}/verifiers/v1/harnesses/null/__init__.py +0 -0
  362. {verifiers-0.3.1.dev25 → verifiers-0.3.1.dev32}/verifiers/v1/harnesses/null/harness.py +0 -0
  363. {verifiers-0.3.1.dev25 → verifiers-0.3.1.dev32}/verifiers/v1/harnesses/null/program.py +0 -0
  364. {verifiers-0.3.1.dev25 → verifiers-0.3.1.dev32}/verifiers/v1/harnesses/openclaw/__init__.py +0 -0
  365. {verifiers-0.3.1.dev25 → verifiers-0.3.1.dev32}/verifiers/v1/harnesses/openclaw/harness.py +0 -0
  366. {verifiers-0.3.1.dev25 → verifiers-0.3.1.dev32}/verifiers/v1/harnesses/pi/__init__.py +0 -0
  367. {verifiers-0.3.1.dev25 → verifiers-0.3.1.dev32}/verifiers/v1/harnesses/pi/harness.py +0 -0
  368. {verifiers-0.3.1.dev25 → verifiers-0.3.1.dev32}/verifiers/v1/harnesses/pool/__init__.py +0 -0
  369. {verifiers-0.3.1.dev25 → verifiers-0.3.1.dev32}/verifiers/v1/harnesses/pool/harness.py +0 -0
  370. {verifiers-0.3.1.dev25 → verifiers-0.3.1.dev32}/verifiers/v1/harnesses/rlm/__init__.py +0 -0
  371. {verifiers-0.3.1.dev25 → verifiers-0.3.1.dev32}/verifiers/v1/harnesses/rlm/harness.py +0 -0
  372. {verifiers-0.3.1.dev25 → verifiers-0.3.1.dev32}/verifiers/v1/harnesses/terminus_2/__init__.py +0 -0
  373. {verifiers-0.3.1.dev25 → verifiers-0.3.1.dev32}/verifiers/v1/harnesses/terminus_2/harness.py +0 -0
  374. {verifiers-0.3.1.dev25 → verifiers-0.3.1.dev32}/verifiers/v1/harnesses/terminus_2/program.py +0 -0
  375. {verifiers-0.3.1.dev25 → verifiers-0.3.1.dev32}/verifiers/v1/interception/__init__.py +0 -0
  376. {verifiers-0.3.1.dev25 → verifiers-0.3.1.dev32}/verifiers/v1/interception/base.py +0 -0
  377. {verifiers-0.3.1.dev25 → verifiers-0.3.1.dev32}/verifiers/v1/interception/pool.py +0 -0
  378. {verifiers-0.3.1.dev25 → verifiers-0.3.1.dev32}/verifiers/v1/interception/tunnel/__init__.py +0 -0
  379. {verifiers-0.3.1.dev25 → verifiers-0.3.1.dev32}/verifiers/v1/interception/tunnel/base.py +0 -0
  380. {verifiers-0.3.1.dev25 → verifiers-0.3.1.dev32}/verifiers/v1/interception/tunnel/custom.py +0 -0
  381. {verifiers-0.3.1.dev25 → verifiers-0.3.1.dev32}/verifiers/v1/judge.py +0 -0
  382. {verifiers-0.3.1.dev25 → verifiers-0.3.1.dev32}/verifiers/v1/judges/__init__.py +0 -0
  383. {verifiers-0.3.1.dev25 → verifiers-0.3.1.dev32}/verifiers/v1/judges/reference.py +0 -0
  384. {verifiers-0.3.1.dev25 → verifiers-0.3.1.dev32}/verifiers/v1/judges/reference.txt +0 -0
  385. {verifiers-0.3.1.dev25 → verifiers-0.3.1.dev32}/verifiers/v1/judges/rubric.py +0 -0
  386. {verifiers-0.3.1.dev25 → verifiers-0.3.1.dev32}/verifiers/v1/judges/rubric.txt +0 -0
  387. {verifiers-0.3.1.dev25 → verifiers-0.3.1.dev32}/verifiers/v1/mcp/__init__.py +0 -0
  388. {verifiers-0.3.1.dev25 → verifiers-0.3.1.dev32}/verifiers/v1/mcp/launch.py +0 -0
  389. {verifiers-0.3.1.dev25 → verifiers-0.3.1.dev32}/verifiers/v1/mcp/server.py +0 -0
  390. {verifiers-0.3.1.dev25 → verifiers-0.3.1.dev32}/verifiers/v1/mcp/toolset.py +0 -0
  391. {verifiers-0.3.1.dev25 → verifiers-0.3.1.dev32}/verifiers/v1/runtimes/__init__.py +0 -0
  392. {verifiers-0.3.1.dev25 → verifiers-0.3.1.dev32}/verifiers/v1/runtimes/base.py +0 -0
  393. {verifiers-0.3.1.dev25 → verifiers-0.3.1.dev32}/verifiers/v1/runtimes/docker/__init__.py +0 -0
  394. {verifiers-0.3.1.dev25 → verifiers-0.3.1.dev32}/verifiers/v1/runtimes/docker/egress.py +0 -0
  395. {verifiers-0.3.1.dev25 → verifiers-0.3.1.dev32}/verifiers/v1/runtimes/limiters.py +0 -0
  396. {verifiers-0.3.1.dev25 → verifiers-0.3.1.dev32}/verifiers/v1/runtimes/modal.py +0 -0
  397. {verifiers-0.3.1.dev25 → verifiers-0.3.1.dev32}/verifiers/v1/runtimes/subprocess.py +0 -0
  398. {verifiers-0.3.1.dev25 → verifiers-0.3.1.dev32}/verifiers/v1/serve/__init__.py +0 -0
  399. {verifiers-0.3.1.dev25 → verifiers-0.3.1.dev32}/verifiers/v1/serve/client.py +0 -0
  400. {verifiers-0.3.1.dev25 → verifiers-0.3.1.dev32}/verifiers/v1/serve/encoding.py +0 -0
  401. {verifiers-0.3.1.dev25 → verifiers-0.3.1.dev32}/verifiers/v1/serve/pool.py +0 -0
  402. {verifiers-0.3.1.dev25 → verifiers-0.3.1.dev32}/verifiers/v1/serve/server.py +0 -0
  403. {verifiers-0.3.1.dev25 → verifiers-0.3.1.dev32}/verifiers/v1/serve/types.py +0 -0
  404. {verifiers-0.3.1.dev25 → verifiers-0.3.1.dev32}/verifiers/v1/state.py +0 -0
  405. {verifiers-0.3.1.dev25 → verifiers-0.3.1.dev32}/verifiers/v1/task.py +0 -0
  406. {verifiers-0.3.1.dev25 → verifiers-0.3.1.dev32}/verifiers/v1/taskset.py +0 -0
  407. {verifiers-0.3.1.dev25 → verifiers-0.3.1.dev32}/verifiers/v1/tasksets/__init__.py +0 -0
  408. {verifiers-0.3.1.dev25 → verifiers-0.3.1.dev32}/verifiers/v1/tasksets/harbor/__init__.py +0 -0
  409. {verifiers-0.3.1.dev25 → verifiers-0.3.1.dev32}/verifiers/v1/tasksets/harbor/env.py +0 -0
  410. {verifiers-0.3.1.dev25 → verifiers-0.3.1.dev32}/verifiers/v1/tasksets/harbor/taskset.py +0 -0
  411. {verifiers-0.3.1.dev25 → verifiers-0.3.1.dev32}/verifiers/v1/tasksets/lean/__init__.py +0 -0
  412. {verifiers-0.3.1.dev25 → verifiers-0.3.1.dev32}/verifiers/v1/tasksets/lean/scoring.py +0 -0
  413. {verifiers-0.3.1.dev25 → verifiers-0.3.1.dev32}/verifiers/v1/tasksets/lean/taskset.py +0 -0
  414. {verifiers-0.3.1.dev25 → verifiers-0.3.1.dev32}/verifiers/v1/tasksets/nemo_gym/__init__.py +0 -0
  415. {verifiers-0.3.1.dev25 → verifiers-0.3.1.dev32}/verifiers/v1/tasksets/nemo_gym/response.py +0 -0
  416. {verifiers-0.3.1.dev25 → verifiers-0.3.1.dev32}/verifiers/v1/tasksets/nemo_gym/server.py +0 -0
  417. {verifiers-0.3.1.dev25 → verifiers-0.3.1.dev32}/verifiers/v1/tasksets/nemo_gym/toolset.py +0 -0
  418. {verifiers-0.3.1.dev25 → verifiers-0.3.1.dev32}/verifiers/v1/tasksets/openenv/__init__.py +0 -0
  419. {verifiers-0.3.1.dev25 → verifiers-0.3.1.dev32}/verifiers/v1/tasksets/openenv/taskset.py +0 -0
  420. {verifiers-0.3.1.dev25 → verifiers-0.3.1.dev32}/verifiers/v1/tasksets/textarena/__init__.py +0 -0
  421. {verifiers-0.3.1.dev25 → verifiers-0.3.1.dev32}/verifiers/v1/tasksets/textarena/taskset.py +0 -0
  422. {verifiers-0.3.1.dev25 → verifiers-0.3.1.dev32}/verifiers/v1/utils/__init__.py +0 -0
  423. {verifiers-0.3.1.dev25 → verifiers-0.3.1.dev32}/verifiers/v1/utils/aio.py +0 -0
  424. {verifiers-0.3.1.dev25 → verifiers-0.3.1.dev32}/verifiers/v1/utils/artifacts.py +0 -0
  425. {verifiers-0.3.1.dev25 → verifiers-0.3.1.dev32}/verifiers/v1/utils/compile.py +0 -0
  426. {verifiers-0.3.1.dev25 → verifiers-0.3.1.dev32}/verifiers/v1/utils/format.py +0 -0
  427. {verifiers-0.3.1.dev25 → verifiers-0.3.1.dev32}/verifiers/v1/utils/generic.py +0 -0
  428. {verifiers-0.3.1.dev25 → verifiers-0.3.1.dev32}/verifiers/v1/utils/git.py +0 -0
  429. {verifiers-0.3.1.dev25 → verifiers-0.3.1.dev32}/verifiers/v1/utils/image.py +0 -0
  430. {verifiers-0.3.1.dev25 → verifiers-0.3.1.dev32}/verifiers/v1/utils/install.py +0 -0
  431. {verifiers-0.3.1.dev25 → verifiers-0.3.1.dev32}/verifiers/v1/utils/install_utils.py +0 -0
  432. {verifiers-0.3.1.dev25 → verifiers-0.3.1.dev32}/verifiers/v1/utils/interrupt.py +0 -0
  433. {verifiers-0.3.1.dev25 → verifiers-0.3.1.dev32}/verifiers/v1/utils/loaders.py +0 -0
  434. {verifiers-0.3.1.dev25 → verifiers-0.3.1.dev32}/verifiers/v1/utils/logging.py +0 -0
  435. {verifiers-0.3.1.dev25 → verifiers-0.3.1.dev32}/verifiers/v1/utils/memory.py +0 -0
  436. {verifiers-0.3.1.dev25 → verifiers-0.3.1.dev32}/verifiers/v1/utils/paths.py +0 -0
  437. {verifiers-0.3.1.dev25 → verifiers-0.3.1.dev32}/verifiers/v1/utils/retries.py +0 -0
  438. {verifiers-0.3.1.dev25 → verifiers-0.3.1.dev32}/verifiers/v1/utils/score.py +0 -0
  439. {verifiers-0.3.1.dev25 → verifiers-0.3.1.dev32}/verifiers/v1/utils/version.py +0 -0
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: verifiers
3
- Version: 0.3.1.dev25
3
+ Version: 0.3.1.dev32
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
@@ -76,10 +76,23 @@ dev = [
76
76
  # from this repo. The built-in tasksets/harnesses ship inside verifiers (verifiers/v1/...).
77
77
  examples = [
78
78
  "compact",
79
- "gsm8k", "glossary", "deepwiki", "wiki-search", "code-golf",
80
- "proposer-solver", "reverse-text", "color-codeword",
81
- "wordle", "openenv-wordle", "alphabet-sort", "scratchpad",
79
+ "gsm8k",
80
+ "glossary",
81
+ "deepwiki",
82
+ "wiki-search",
83
+ "code-golf",
84
+ "proposer-solver",
85
+ "reverse-text",
86
+ "color-codeword",
87
+ "wordle",
88
+ "openenv-wordle",
89
+ "alphabet-sort",
90
+ "scratchpad",
82
91
  "kuhn-poker",
92
+ "interception",
93
+ "grayscale-interception",
94
+ "bash-interception",
95
+ "web-search-interception",
83
96
  ]
84
97
 
85
98
  [project.optional-dependencies]
@@ -164,6 +177,10 @@ color-codeword = { path = "environments/color_codeword", editable = true }
164
177
  alphabet-sort = { path = "environments/alphabet_sort", editable = true }
165
178
  scratchpad = { path = "environments/scratchpad", editable = true }
166
179
  kuhn-poker = { path = "environments/kuhn_poker", editable = true }
180
+ interception = { path = "environments/interception", editable = true }
181
+ grayscale-interception = { path = "environments/grayscale_interception", editable = true }
182
+ bash-interception = { path = "environments/bash_interception", editable = true }
183
+ web-search-interception = { path = "environments/web_search_interception", editable = true }
167
184
 
168
185
  [tool.uv.exclude-newer-package]
169
186
  # Bounded cutoffs for the explicitly requested tool upgrades.
@@ -5,6 +5,9 @@ from verifiers.v1.graph import MessageNode
5
5
  from verifiers.v1.types import AssistantMessage, UserMessage
6
6
 
7
7
  PLUGGED_FNS_PY = """
8
+ from verifiers.v1 import Trace
9
+
10
+
8
11
  async def reply_length(trace) -> float:
9
12
  return float(len(trace.last_reply or ""))
10
13
 
@@ -17,7 +20,7 @@ async def marker(trace) -> float:
17
20
  return 0.125
18
21
 
19
22
 
20
- async def two_turns(trace) -> bool:
23
+ async def two_turns(trace: Trace) -> bool:
21
24
  return trace.num_turns >= 2
22
25
  """
23
26
 
@@ -80,6 +80,7 @@ from verifiers.v1.trace import (
80
80
  Branch,
81
81
  Error,
82
82
  EvalRunInfo,
83
+ InterceptRecord,
83
84
  ModelCall,
84
85
  PolicyEvent,
85
86
  Reward,
@@ -103,6 +104,7 @@ from verifiers.v1.types import (
103
104
  Message,
104
105
  MessageContent,
105
106
  Messages,
107
+ Request,
106
108
  Response,
107
109
  Sampling,
108
110
  SamplingConfig,
@@ -121,7 +123,13 @@ from verifiers.v1.utils.artifacts import (
121
123
  collect,
122
124
  restore,
123
125
  )
124
- from verifiers.v1.utils.decorators import metric, reward, stop, tool
126
+ from verifiers.v1.utils.decorators import (
127
+ intercept,
128
+ metric,
129
+ reward,
130
+ stop,
131
+ tool,
132
+ )
125
133
  from verifiers.v1.utils.git import (
126
134
  PATCH_CAP_BYTES as PATCH_CAP_BYTES,
127
135
  )
@@ -178,6 +186,7 @@ __all__ = [ # noqa: RUF022 - grouped by public API area
178
186
  "Message",
179
187
  "MessageContent",
180
188
  "Messages",
189
+ "Request",
181
190
  "Response",
182
191
  "Sampling",
183
192
  "SamplingConfig",
@@ -220,10 +229,13 @@ __all__ = [ # noqa: RUF022 - grouped by public API area
220
229
  "AgentSpan",
221
230
  "Error",
222
231
  # decorators
232
+ "intercept",
223
233
  "stop",
224
234
  "tool",
225
235
  "metric",
226
236
  "reward",
237
+ # interception
238
+ "InterceptRecord",
227
239
  # errors
228
240
  "RolloutError",
229
241
  "EnvError",
@@ -465,15 +465,11 @@ class Agent:
465
465
  interaction = Interaction(run, gate=self._gate)
466
466
  async with self._gate or nullcontext():
467
467
  opened = await run.open()
468
- if not opened:
468
+ if not opened and (failure := run.failure) is not None:
469
469
  trace = await run.close()
470
470
  if trace.agent.runtime is not None:
471
471
  trace.agent.runtime.borrowed = runtime is not None
472
- if not opened:
473
- failure = run.failure
474
- if failure is None: # `open()` returning False always captures one.
475
- raise RuntimeError("rollout setup failed without a captured error")
476
- raise failure
472
+ raise failure
477
473
  try:
478
474
  yield interaction
479
475
  except Exception as e:
@@ -342,7 +342,9 @@ class TrainClient(Client):
342
342
  prompt = turn.prompt
343
343
  tools = parse_tools(body.get("tools"))
344
344
  else:
345
- prompt, tools = dialect.parse_request(body)
345
+ request = dialect.parse_request(body)
346
+ prompt = request.messages
347
+ tools = request.tools
346
348
  from renderers.client import generate
347
349
 
348
350
  wire_tools = [tool_to_wire(t) for t in tools] if tools else None
@@ -6,7 +6,7 @@ from pydantic_config import BaseConfig
6
6
  from verifiers.v1.clients import ClientConfig
7
7
  from verifiers.v1.configs.harness import HarnessConfig, WireHarnessConfig
8
8
  from verifiers.v1.configs.retries import RetryConfig
9
- from verifiers.v1.runtimes import RuntimeConfig, SubprocessConfig
9
+ from verifiers.v1.runtimes import PrimeConfig, RuntimeConfig
10
10
  from verifiers.v1.types import SamplingConfig
11
11
 
12
12
 
@@ -26,7 +26,7 @@ class TimeoutConfig(BaseConfig):
26
26
  class AgentConfig(BaseConfig):
27
27
  harness: SerializeAsAny[HarnessConfig] | None = None
28
28
  """The agent's program (None = the taskset's default harness)."""
29
- runtime: RuntimeConfig = SubprocessConfig()
29
+ runtime: RuntimeConfig = PrimeConfig()
30
30
  """Runtime for the harness program — the policy each run provisions its box
31
31
  from; tool servers choose their placement separately."""
32
32
 
@@ -8,14 +8,14 @@ from pydantic_config import BaseConfig
8
8
 
9
9
  from verifiers.v1.configs.cli.validate import CheckTimeoutConfig
10
10
  from verifiers.v1.configs.taskset import TasksetConfig
11
- from verifiers.v1.runtimes import DockerConfig, RuntimeConfig
11
+ from verifiers.v1.runtimes import PrimeConfig, RuntimeConfig
12
12
 
13
13
 
14
14
  class DebugConfig(BaseConfig):
15
15
  uuid: str = Field(default_factory=lambda: str(uuid4()), exclude=True)
16
16
  """Auto-generated run id, used as the default output directory leaf."""
17
17
  taskset: SerializeAsAny[TasksetConfig] = TasksetConfig()
18
- runtime: RuntimeConfig = DockerConfig()
18
+ runtime: RuntimeConfig = PrimeConfig()
19
19
  """Where each task's setup hook and debug action run."""
20
20
  command: str | None = None
21
21
  """Inline shell command executed as `sh -lc <command>` after setup."""
@@ -7,7 +7,7 @@ from pydantic import AliasChoices, Field, SerializeAsAny, model_validator
7
7
  from pydantic_config import BaseConfig
8
8
 
9
9
  from verifiers.v1.configs.taskset import TasksetConfig
10
- from verifiers.v1.runtimes import DockerConfig, RuntimeConfig
10
+ from verifiers.v1.runtimes import PrimeConfig, RuntimeConfig
11
11
 
12
12
 
13
13
  class CheckTimeoutConfig(BaseConfig):
@@ -23,7 +23,7 @@ class ValidateConfig(BaseConfig):
23
23
  """Auto-generated run id — the default output directory leaf. Excluded from the
24
24
  saved config so re-running it starts a fresh run."""
25
25
  taskset: SerializeAsAny[TasksetConfig] = TasksetConfig()
26
- runtime: RuntimeConfig = DockerConfig()
26
+ runtime: RuntimeConfig = PrimeConfig()
27
27
  """Where each task's validation hooks run."""
28
28
  timeout: CheckTimeoutConfig = CheckTimeoutConfig()
29
29
  only_setup: bool = False
@@ -18,7 +18,7 @@ from pydantic import Field, model_validator
18
18
  from pydantic_config import BaseConfig
19
19
  from renderers import RendererConfig
20
20
 
21
- from verifiers.v1.utils.prime_config import load_prime_config
21
+ from verifiers.v1.utils.prime import load_prime_config
22
22
 
23
23
  DEFAULT_PRIME_INFERENCE_URL = "https://api.pinference.ai/api/v1"
24
24
 
@@ -40,9 +40,9 @@ class TaskConfig(BaseConfig):
40
40
  """Judge plugins run after task rewards, set through `--env.taskset.task.judges`."""
41
41
 
42
42
  stops: dict[str, DecoratedFunctionConfig] = Field(default_factory=dict)
43
- """Stop conditions `(trace) -> bool` plugged by name, merged with the task's
44
- `@vf.stop` methods (a plugged function replaces a decorated one with the same
45
- name)."""
43
+ """Typed `Request`, `Response`, or `Trace` stop predicates plugged by name and
44
+ merged with the task's `@vf.stop` methods (a plugged function replaces a
45
+ decorated one with the same name)."""
46
46
  metrics: dict[str, DecoratedFunctionConfig] = Field(default_factory=dict)
47
47
  """Metrics `(task, trace, runtime) -> float` plugged by name, merged with the
48
48
  task's `@vf.metric` methods."""
@@ -30,6 +30,7 @@ from verifiers.v1.types import (
30
30
  ImageUrlContentPart,
31
31
  ImageUrlSource,
32
32
  Messages,
33
+ Request,
33
34
  Response,
34
35
  Sampling,
35
36
  SamplingConfig,
@@ -198,6 +199,37 @@ def mediate_content(value, path: str):
198
199
  return mediated, capabilities
199
200
 
200
201
 
202
+ def content_to_wire(content) -> str | list[dict]:
203
+ """Typed text/image content in Anthropic's native request shape."""
204
+ if isinstance(content, str):
205
+ return content
206
+ blocks = []
207
+ for part in content:
208
+ if isinstance(part, TextContentPart):
209
+ blocks.append({"type": "text", "text": part.text})
210
+ continue
211
+ metadata, separator, data = part.image_url.url.partition(",")
212
+ if separator and metadata.startswith("data:") and metadata.endswith(";base64"):
213
+ blocks.append(
214
+ {
215
+ "type": "image",
216
+ "source": {
217
+ "type": "base64",
218
+ "media_type": metadata[5:-7],
219
+ "data": data,
220
+ },
221
+ }
222
+ )
223
+ else:
224
+ blocks.append(
225
+ {
226
+ "type": "image",
227
+ "source": {"type": "url", "url": part.image_url.url},
228
+ }
229
+ )
230
+ return blocks
231
+
232
+
201
233
  def parse_messages(body: dict) -> Messages:
202
234
  """The request's top-level `system` + `messages` -> typed messages. Assistant turns fold
203
235
  their blocks into one message (thinking -> reasoning, tool_use -> tool calls); a user turn's
@@ -380,7 +412,9 @@ class AnthropicStreamParser(StreamParser):
380
412
  for index, parts in self.partial_json.items():
381
413
  self.blocks[index]["input"] = json.loads("".join(parts) or "{}")
382
414
  self.message["content"] = [self.blocks[index] for index in sorted(self.blocks)]
383
- return response_from_wire(self.validate_response(self.message))
415
+ response = response_from_wire(self.validate_response(self.message))
416
+ response.raw = self.message
417
+ return response
384
418
 
385
419
 
386
420
  class ModdedUsage(AnthropicUsage):
@@ -480,6 +514,12 @@ class AnthropicDialect(Dialect[MessageCreateParams, AnthropicMessage]):
480
514
  append_user_notice(mediated.setdefault("messages", []))
481
515
  return mediated, capabilities
482
516
 
517
+ def is_terminal_event(self, chunk: bytes) -> bool:
518
+ return any(
519
+ line.removeprefix(b"event:").strip() == b"message_stop"
520
+ for line in chunk.splitlines()
521
+ )
522
+
483
523
  def auth_headers(self, api_key: str) -> dict[str, str]:
484
524
  return {"x-api-key": api_key, "anthropic-version": "2023-06-01"}
485
525
 
@@ -493,9 +533,7 @@ class AnthropicDialect(Dialect[MessageCreateParams, AnthropicMessage]):
493
533
  "error": {"type": "invalid_request_error", "message": message},
494
534
  }
495
535
 
496
- def parse_request(
497
- self, body: MessageCreateParams
498
- ) -> tuple[Messages, list[Tool] | None]:
536
+ def parse_request(self, body: MessageCreateParams) -> Request:
499
537
  tools = [
500
538
  Tool(
501
539
  name=t["name"],
@@ -505,11 +543,104 @@ class AnthropicDialect(Dialect[MessageCreateParams, AnthropicMessage]):
505
543
  for t in body.get("tools") or []
506
544
  if "input_schema" in t # skip server tools (web_search etc.)
507
545
  ] or None
508
- return parse_messages(body), tools
546
+ return Request(messages=parse_messages(body), tools=tools)
509
547
 
510
548
  def parse_response(self, response: AnthropicMessage) -> Response:
511
549
  return response_from_wire(response)
512
550
 
551
+ def rewrite_request(self, body: dict, before: Request, after: Request) -> None:
552
+ original = [
553
+ m for m in before.messages if isinstance(m, (UserMessage, ToolMessage))
554
+ ]
555
+ rewritten = [
556
+ m for m in after.messages if isinstance(m, (UserMessage, ToolMessage))
557
+ ]
558
+ targets: list[tuple[dict, dict | None]] = []
559
+ for native in body.get("messages", []):
560
+ if native.get("role") == "assistant":
561
+ continue
562
+ content = native.get("content")
563
+ if isinstance(content, str):
564
+ targets.append((native, None))
565
+ continue
566
+ blocks = content or []
567
+ targets.extend(
568
+ (native, block)
569
+ for block in blocks
570
+ if block.get("type") == "tool_result"
571
+ )
572
+ if any(block.get("type") != "tool_result" for block in blocks):
573
+ targets.append((native, None))
574
+
575
+ for (native, block), old, new in zip(targets, original, rewritten, strict=True):
576
+ if old == new:
577
+ continue
578
+ if block is not None:
579
+ block["content"] = content_to_wire(new.content)
580
+ continue
581
+ replacement = content_to_wire(new.content)
582
+ if isinstance(native.get("content"), str):
583
+ native["content"] = replacement
584
+ continue
585
+ replacement = (
586
+ [{"type": "text", "text": replacement}]
587
+ if isinstance(replacement, str)
588
+ else replacement
589
+ )
590
+ blocks = native.get("content") or []
591
+ updated = []
592
+ inserted = False
593
+ for current in blocks:
594
+ if current.get("type") == "tool_result":
595
+ updated.append(current)
596
+ elif not inserted:
597
+ updated.extend(replacement)
598
+ inserted = True
599
+ native["content"] = updated
600
+
601
+ def rewrite_response(self, raw: dict, text: str) -> None:
602
+ raw["content"] = [{"type": "text", "text": text}]
603
+ raw["stop_reason"] = "end_turn"
604
+ raw["stop_sequence"] = None
605
+
606
+ def stream_events(self, raw: dict) -> list[bytes]:
607
+ def event(kind: str, payload: dict) -> bytes:
608
+ return f"event: {kind}\ndata: {json.dumps(payload)}\n\n".encode()
609
+
610
+ text = raw["content"][0]["text"]
611
+ head = {**raw, "content": [], "stop_reason": None, "stop_sequence": None}
612
+ if isinstance(usage := head.get("usage"), dict):
613
+ head["usage"] = {**usage, "output_tokens": 0}
614
+ return [
615
+ event("message_start", {"type": "message_start", "message": head}),
616
+ event(
617
+ "content_block_start",
618
+ {
619
+ "type": "content_block_start",
620
+ "index": 0,
621
+ "content_block": {"type": "text", "text": ""},
622
+ },
623
+ ),
624
+ event(
625
+ "content_block_delta",
626
+ {
627
+ "type": "content_block_delta",
628
+ "index": 0,
629
+ "delta": {"type": "text_delta", "text": text},
630
+ },
631
+ ),
632
+ event("content_block_stop", {"type": "content_block_stop", "index": 0}),
633
+ event(
634
+ "message_delta",
635
+ {
636
+ "type": "message_delta",
637
+ "delta": {"stop_reason": "end_turn", "stop_sequence": None},
638
+ "usage": raw.get("usage") or {},
639
+ },
640
+ ),
641
+ event("message_stop", {"type": "message_stop"}),
642
+ ]
643
+
513
644
  def stream_parser(self) -> StreamParser:
514
645
  return AnthropicStreamParser(self.validate_response)
515
646
 
@@ -20,7 +20,7 @@ from typing import ClassVar, Generic, TypeVar
20
20
  from pydantic import BaseModel
21
21
  from pydantic_core import from_json
22
22
 
23
- from verifiers.v1.types import Messages, Response, Sampling, SamplingConfig, Tool
23
+ from verifiers.v1.types import Request, Response, Sampling, SamplingConfig
24
24
 
25
25
  ReqT = TypeVar("ReqT")
26
26
  RespT = TypeVar("RespT", bound=BaseModel)
@@ -193,8 +193,8 @@ class Dialect(ABC, Generic[ReqT, RespT]):
193
193
  content. Returned paths never contain request values."""
194
194
 
195
195
  @abstractmethod
196
- def parse_request(self, body: ReqT) -> tuple[Messages, list[Tool] | None]:
197
- """The native request -> vf prompt + tools (for the trace)."""
196
+ def parse_request(self, body: ReqT) -> Request:
197
+ """The native request -> the typed model request."""
198
198
 
199
199
  def parse_sampling(self, body: ReqT) -> Sampling:
200
200
  """The native request's call settings -> the canonical `Sampling` (for the
@@ -212,6 +212,18 @@ class Dialect(ABC, Generic[ReqT, RespT]):
212
212
  """Validate a native response, normalizing provider-compatible extensions if needed."""
213
213
  return self.response_type.model_validate(raw)
214
214
 
215
+ @abstractmethod
216
+ def rewrite_request(self, body: ReqT, before: Request, after: Request) -> None:
217
+ """Patch rewritten user/tool messages into the native conversation."""
218
+
219
+ @abstractmethod
220
+ def rewrite_response(self, raw: dict, text: str) -> None:
221
+ """Replace the native assistant response with inert text."""
222
+
223
+ @abstractmethod
224
+ def stream_events(self, raw: dict) -> list[bytes]:
225
+ """Serialize a rewritten response as a minimal native SSE stream."""
226
+
215
227
  @abstractmethod
216
228
  def stream_parser(self) -> StreamParser:
217
229
  """Create the per-request incremental parser for a native SSE response."""
@@ -6,6 +6,7 @@ and responses (`parse_response`). Reasoning extraction mirrors the v0 chat clien
6
6
  read them in the same precedence (`reasoning` / `reasoning_content` / `reasoning_details`).
7
7
  """
8
8
 
9
+ import json
9
10
  import time
10
11
  from collections.abc import Mapping
11
12
  from dataclasses import dataclass
@@ -28,6 +29,7 @@ from verifiers.v1.types import (
28
29
  FinishReason,
29
30
  Message,
30
31
  Messages,
32
+ Request,
31
33
  Response,
32
34
  Sampling,
33
35
  SamplingConfig,
@@ -319,7 +321,9 @@ class ChatStreamParser(StreamParser):
319
321
  ],
320
322
  "usage": self.usage,
321
323
  }
322
- return response_from_wire(ModdedChatCompletion.model_validate(completion))
324
+ response = response_from_wire(ModdedChatCompletion.model_validate(completion))
325
+ response.raw = completion
326
+ return response
323
327
 
324
328
 
325
329
  class ChatDialect(Dialect[CompletionCreateParams, ChatCompletion]):
@@ -473,9 +477,9 @@ class ChatDialect(Dialect[CompletionCreateParams, ChatCompletion]):
473
477
  append_user_notice(mediated.setdefault("messages", []))
474
478
  return mediated, capabilities
475
479
 
476
- def parse_request(
477
- self, body: CompletionCreateParams
478
- ) -> tuple[Messages, list[Tool] | None]:
480
+ def parse_request(self, body: CompletionCreateParams) -> Request:
481
+ if body.get("n", 1) != 1:
482
+ raise ValueError("chat completions require n=1")
479
483
  messages: Messages = []
480
484
  tool_names: dict[str, str] = {}
481
485
  for raw in body.get("messages", []):
@@ -488,7 +492,7 @@ class ChatDialect(Dialect[CompletionCreateParams, ChatCompletion]):
488
492
  if isinstance(message, AssistantMessage):
489
493
  for call in message.tool_calls or []:
490
494
  tool_names[call.id] = call.name
491
- return messages, parse_tools(body.get("tools"))
495
+ return Request(messages=messages, tools=parse_tools(body.get("tools")))
492
496
 
493
497
  def parse_sampling(self, body: CompletionCreateParams) -> Sampling:
494
498
  settings = {k: v for k, v in body.items() if k in self.sampling_fields}
@@ -501,6 +505,41 @@ class ChatDialect(Dialect[CompletionCreateParams, ChatCompletion]):
501
505
  def parse_response(self, response: ChatCompletion) -> Response:
502
506
  return response_from_wire(response)
503
507
 
508
+ def rewrite_request(self, body: dict, before: Request, after: Request) -> None:
509
+ for native, original, rewritten in zip(
510
+ body.get("messages", []), before.messages, after.messages, strict=True
511
+ ):
512
+ if rewritten != original:
513
+ native["content"] = message_to_wire(rewritten)["content"]
514
+ if isinstance(rewritten, ToolMessage):
515
+ if rewritten.name is None:
516
+ native.pop("name", None)
517
+ else:
518
+ native["name"] = rewritten.name
519
+
520
+ def rewrite_response(self, raw: dict, text: str) -> None:
521
+ for choice in raw.get("choices") or []:
522
+ if isinstance(choice.get("message"), dict):
523
+ choice["message"] = {"role": "assistant", "content": text}
524
+ choice["finish_reason"] = "stop"
525
+ choice.pop("logprobs", None)
526
+
527
+ def stream_events(self, raw: dict) -> list[bytes]:
528
+ choice = (raw.get("choices") or [{}])[0]
529
+ chunk = {
530
+ **{key: value for key, value in raw.items() if key != "choices"},
531
+ "object": "chat.completion.chunk",
532
+ "choices": [
533
+ {
534
+ "index": 0,
535
+ "delta": choice.get("message")
536
+ or {"role": "assistant", "content": ""},
537
+ "finish_reason": choice.get("finish_reason"),
538
+ }
539
+ ],
540
+ }
541
+ return [f"data: {json.dumps(chunk)}\n\n".encode(), b"data: [DONE]\n\n"]
542
+
504
543
  def stream_parser(self) -> StreamParser:
505
544
  return ChatStreamParser()
506
545