verifiers 0.3.1.dev23__tar.gz → 0.3.1.dev25__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 (437) hide show
  1. {verifiers-0.3.1.dev23 → verifiers-0.3.1.dev25}/PKG-INFO +1 -1
  2. {verifiers-0.3.1.dev23 → verifiers-0.3.1.dev25}/verifiers/v1/__init__.py +2 -0
  3. {verifiers-0.3.1.dev23 → verifiers-0.3.1.dev25}/verifiers/v1/agent.py +1 -1
  4. {verifiers-0.3.1.dev23 → verifiers-0.3.1.dev25}/verifiers/v1/clients/client.py +6 -9
  5. {verifiers-0.3.1.dev23 → verifiers-0.3.1.dev25}/verifiers/v1/clients/eval.py +3 -6
  6. {verifiers-0.3.1.dev23 → verifiers-0.3.1.dev25}/verifiers/v1/clients/train.py +3 -3
  7. verifiers-0.3.1.dev25/verifiers/v1/configs/runtime.py +66 -0
  8. {verifiers-0.3.1.dev23 → verifiers-0.3.1.dev25}/verifiers/v1/dialects/anthropic.py +207 -6
  9. {verifiers-0.3.1.dev23 → verifiers-0.3.1.dev25}/verifiers/v1/dialects/base.py +47 -2
  10. {verifiers-0.3.1.dev23 → verifiers-0.3.1.dev25}/verifiers/v1/dialects/chat.py +152 -9
  11. {verifiers-0.3.1.dev23 → verifiers-0.3.1.dev25}/verifiers/v1/dialects/responses.py +294 -6
  12. {verifiers-0.3.1.dev23 → verifiers-0.3.1.dev25}/verifiers/v1/interception/server.py +62 -17
  13. {verifiers-0.3.1.dev23 → verifiers-0.3.1.dev25}/verifiers/v1/mcp/launch.py +1 -1
  14. {verifiers-0.3.1.dev23 → verifiers-0.3.1.dev25}/verifiers/v1/rollout.py +18 -1
  15. {verifiers-0.3.1.dev23 → verifiers-0.3.1.dev25}/verifiers/v1/runtimes/__init__.py +1 -1
  16. {verifiers-0.3.1.dev23 → verifiers-0.3.1.dev25}/verifiers/v1/runtimes/base.py +7 -50
  17. {verifiers-0.3.1.dev23 → verifiers-0.3.1.dev25}/verifiers/v1/runtimes/docker/__init__.py +1 -1
  18. {verifiers-0.3.1.dev23 → verifiers-0.3.1.dev25}/verifiers/v1/runtimes/docker/egress.py +14 -27
  19. {verifiers-0.3.1.dev23 → verifiers-0.3.1.dev25}/verifiers/v1/runtimes/prime.py +1 -1
  20. {verifiers-0.3.1.dev23 → verifiers-0.3.1.dev25}/verifiers/v1/runtimes/subprocess.py +1 -0
  21. {verifiers-0.3.1.dev23 → verifiers-0.3.1.dev25}/verifiers/v1/serve/pool.py +1 -1
  22. {verifiers-0.3.1.dev23 → verifiers-0.3.1.dev25}/verifiers/v1/session.py +3 -0
  23. {verifiers-0.3.1.dev23 → verifiers-0.3.1.dev25}/verifiers/v1/task.py +3 -2
  24. {verifiers-0.3.1.dev23 → verifiers-0.3.1.dev25}/verifiers/v1/trace.py +12 -1
  25. {verifiers-0.3.1.dev23 → verifiers-0.3.1.dev25}/verifiers/v1/utils/compile.py +1 -1
  26. {verifiers-0.3.1.dev23 → verifiers-0.3.1.dev25}/.gitignore +0 -0
  27. {verifiers-0.3.1.dev23 → verifiers-0.3.1.dev25}/LICENSE +0 -0
  28. {verifiers-0.3.1.dev23 → verifiers-0.3.1.dev25}/README.md +0 -0
  29. {verifiers-0.3.1.dev23 → verifiers-0.3.1.dev25}/pyproject.toml +0 -0
  30. {verifiers-0.3.1.dev23 → verifiers-0.3.1.dev25}/tests/__init__.py +0 -0
  31. {verifiers-0.3.1.dev23 → verifiers-0.3.1.dev25}/tests/conftest.py +0 -0
  32. {verifiers-0.3.1.dev23 → verifiers-0.3.1.dev25}/tests/test_browser_env.py +0 -0
  33. {verifiers-0.3.1.dev23 → verifiers-0.3.1.dev25}/tests/test_build_script.py +0 -0
  34. {verifiers-0.3.1.dev23 → verifiers-0.3.1.dev25}/tests/test_cli_agent_env.py +0 -0
  35. {verifiers-0.3.1.dev23 → verifiers-0.3.1.dev25}/tests/test_client_auth_errors.py +0 -0
  36. {verifiers-0.3.1.dev23 → verifiers-0.3.1.dev25}/tests/test_client_config.py +0 -0
  37. {verifiers-0.3.1.dev23 → verifiers-0.3.1.dev25}/tests/test_client_multimodal_types.py +0 -0
  38. {verifiers-0.3.1.dev23 → verifiers-0.3.1.dev25}/tests/test_composable_env.py +0 -0
  39. {verifiers-0.3.1.dev23 → verifiers-0.3.1.dev25}/tests/test_context_token_metrics.py +0 -0
  40. {verifiers-0.3.1.dev23 → verifiers-0.3.1.dev25}/tests/test_decorator_ranks.py +0 -0
  41. {verifiers-0.3.1.dev23 → verifiers-0.3.1.dev25}/tests/test_endpoint_registry.py +0 -0
  42. {verifiers-0.3.1.dev23 → verifiers-0.3.1.dev25}/tests/test_env_group.py +0 -0
  43. {verifiers-0.3.1.dev23 → verifiers-0.3.1.dev25}/tests/test_env_server.py +0 -0
  44. {verifiers-0.3.1.dev23 → verifiers-0.3.1.dev25}/tests/test_environment.py +0 -0
  45. {verifiers-0.3.1.dev23 → verifiers-0.3.1.dev25}/tests/test_environment_extra.py +0 -0
  46. {verifiers-0.3.1.dev23 → verifiers-0.3.1.dev25}/tests/test_error_chain.py +0 -0
  47. {verifiers-0.3.1.dev23 → verifiers-0.3.1.dev25}/tests/test_eval_display.py +0 -0
  48. {verifiers-0.3.1.dev23 → verifiers-0.3.1.dev25}/tests/test_eval_utils.py +0 -0
  49. {verifiers-0.3.1.dev23 → verifiers-0.3.1.dev25}/tests/test_gepa_cli.py +0 -0
  50. {verifiers-0.3.1.dev23 → verifiers-0.3.1.dev25}/tests/test_gepa_utils.py +0 -0
  51. {verifiers-0.3.1.dev23 → verifiers-0.3.1.dev25}/tests/test_gym_env.py +0 -0
  52. {verifiers-0.3.1.dev23 → verifiers-0.3.1.dev25}/tests/test_harbor_env_mcp.py +0 -0
  53. {verifiers-0.3.1.dev23 → verifiers-0.3.1.dev25}/tests/test_imports.py +0 -0
  54. {verifiers-0.3.1.dev23 → verifiers-0.3.1.dev25}/tests/test_init_script.py +0 -0
  55. {verifiers-0.3.1.dev23 → verifiers-0.3.1.dev25}/tests/test_install_utils.py +0 -0
  56. {verifiers-0.3.1.dev23 → verifiers-0.3.1.dev25}/tests/test_interception_utils.py +0 -0
  57. {verifiers-0.3.1.dev23 → verifiers-0.3.1.dev25}/tests/test_logging.py +0 -0
  58. {verifiers-0.3.1.dev23 → verifiers-0.3.1.dev25}/tests/test_math_rubric.py +0 -0
  59. {verifiers-0.3.1.dev23 → verifiers-0.3.1.dev25}/tests/test_maybe_think_parser.py +0 -0
  60. {verifiers-0.3.1.dev23 → verifiers-0.3.1.dev25}/tests/test_message_utils.py +0 -0
  61. {verifiers-0.3.1.dev23 → verifiers-0.3.1.dev25}/tests/test_message_utils_multimodal.py +0 -0
  62. {verifiers-0.3.1.dev23 → verifiers-0.3.1.dev25}/tests/test_multiturn_env.py +0 -0
  63. {verifiers-0.3.1.dev23 → verifiers-0.3.1.dev25}/tests/test_nemorl_client.py +0 -0
  64. {verifiers-0.3.1.dev23 → verifiers-0.3.1.dev25}/tests/test_openai_chat_completions_token_client.py +0 -0
  65. {verifiers-0.3.1.dev23 → verifiers-0.3.1.dev25}/tests/test_openai_responses_client.py +0 -0
  66. {verifiers-0.3.1.dev23 → verifiers-0.3.1.dev25}/tests/test_opencode_rlm_env.py +0 -0
  67. {verifiers-0.3.1.dev23 → verifiers-0.3.1.dev25}/tests/test_openenv_client.py +0 -0
  68. {verifiers-0.3.1.dev23 → verifiers-0.3.1.dev25}/tests/test_parser.py +0 -0
  69. {verifiers-0.3.1.dev23 → verifiers-0.3.1.dev25}/tests/test_path_utils.py +0 -0
  70. {verifiers-0.3.1.dev23 → verifiers-0.3.1.dev25}/tests/test_per_turn_timing.py +0 -0
  71. {verifiers-0.3.1.dev23 → verifiers-0.3.1.dev25}/tests/test_pricing_utils.py +0 -0
  72. {verifiers-0.3.1.dev23 → verifiers-0.3.1.dev25}/tests/test_prime_plugin.py +0 -0
  73. {verifiers-0.3.1.dev23 → verifiers-0.3.1.dev25}/tests/test_renderer_client.py +0 -0
  74. {verifiers-0.3.1.dev23 → verifiers-0.3.1.dev25}/tests/test_renderer_e2e.py +0 -0
  75. {verifiers-0.3.1.dev23 → verifiers-0.3.1.dev25}/tests/test_rlm_composable_env.py +0 -0
  76. {verifiers-0.3.1.dev23 → verifiers-0.3.1.dev25}/tests/test_rubric.py +0 -0
  77. {verifiers-0.3.1.dev23 → verifiers-0.3.1.dev25}/tests/test_rubric_group.py +0 -0
  78. {verifiers-0.3.1.dev23 → verifiers-0.3.1.dev25}/tests/test_sandbox_debug_env.py +0 -0
  79. {verifiers-0.3.1.dev23 → verifiers-0.3.1.dev25}/tests/test_sandbox_env.py +0 -0
  80. {verifiers-0.3.1.dev23 → verifiers-0.3.1.dev25}/tests/test_sandbox_mixin.py +0 -0
  81. {verifiers-0.3.1.dev23 → verifiers-0.3.1.dev25}/tests/test_save_utils.py +0 -0
  82. {verifiers-0.3.1.dev23 → verifiers-0.3.1.dev25}/tests/test_setup_script.py +0 -0
  83. {verifiers-0.3.1.dev23 → verifiers-0.3.1.dev25}/tests/test_singleturn_env.py +0 -0
  84. {verifiers-0.3.1.dev23 → verifiers-0.3.1.dev25}/tests/test_stateful_tool_env.py +0 -0
  85. {verifiers-0.3.1.dev23 → verifiers-0.3.1.dev25}/tests/test_think_parser.py +0 -0
  86. {verifiers-0.3.1.dev23 → verifiers-0.3.1.dev25}/tests/test_tool_env.py +0 -0
  87. {verifiers-0.3.1.dev23 → verifiers-0.3.1.dev25}/tests/test_tool_utils.py +0 -0
  88. {verifiers-0.3.1.dev23 → verifiers-0.3.1.dev25}/tests/test_trajectory_processing.py +0 -0
  89. {verifiers-0.3.1.dev23 → verifiers-0.3.1.dev25}/tests/test_tui_info_formatting.py +0 -0
  90. {verifiers-0.3.1.dev23 → verifiers-0.3.1.dev25}/tests/test_types.py +0 -0
  91. {verifiers-0.3.1.dev23 → verifiers-0.3.1.dev25}/tests/test_xml_parser.py +0 -0
  92. {verifiers-0.3.1.dev23 → verifiers-0.3.1.dev25}/tests/v1/conftest.py +0 -0
  93. {verifiers-0.3.1.dev23 → verifiers-0.3.1.dev25}/tests/v1/fixtures/counter_tool_v1.py +0 -0
  94. {verifiers-0.3.1.dev23 → verifiers-0.3.1.dev25}/tests/v1/fixtures/duet_v1.py +0 -0
  95. {verifiers-0.3.1.dev23 → verifiers-0.3.1.dev25}/tests/v1/fixtures/echo_acp_resume_v1.py +0 -0
  96. {verifiers-0.3.1.dev23 → verifiers-0.3.1.dev25}/tests/v1/fixtures/echo_agentic_v1.py +0 -0
  97. {verifiers-0.3.1.dev23 → verifiers-0.3.1.dev25}/tests/v1/fixtures/echo_tool_v1.py +0 -0
  98. {verifiers-0.3.1.dev23 → verifiers-0.3.1.dev25}/tests/v1/fixtures/echo_user_sim_v1.py +0 -0
  99. {verifiers-0.3.1.dev23 → verifiers-0.3.1.dev25}/tests/v1/fixtures/echo_v1.py +0 -0
  100. {verifiers-0.3.1.dev23 → verifiers-0.3.1.dev25}/tests/v1/fixtures/pyproject.toml +0 -0
  101. {verifiers-0.3.1.dev23 → verifiers-0.3.1.dev25}/tests/v1/fixtures/tool_response_image_v1.py +0 -0
  102. {verifiers-0.3.1.dev23 → verifiers-0.3.1.dev25}/tests/v1/test_color_codeword_tasks.py +0 -0
  103. {verifiers-0.3.1.dev23 → verifiers-0.3.1.dev25}/tests/v1/test_configs.py +0 -0
  104. {verifiers-0.3.1.dev23 → verifiers-0.3.1.dev25}/tests/v1/test_e2e.py +0 -0
  105. {verifiers-0.3.1.dev23 → verifiers-0.3.1.dev25}/tests/v1/test_envs.py +0 -0
  106. {verifiers-0.3.1.dev23 → verifiers-0.3.1.dev25}/tests/v1/test_graph.py +0 -0
  107. {verifiers-0.3.1.dev23 → verifiers-0.3.1.dev25}/tests/v1/test_judges.py +0 -0
  108. {verifiers-0.3.1.dev23 → verifiers-0.3.1.dev25}/tests/v1/test_scoring.py +0 -0
  109. {verifiers-0.3.1.dev23 → verifiers-0.3.1.dev25}/tests/v1/test_taskset.py +0 -0
  110. {verifiers-0.3.1.dev23 → verifiers-0.3.1.dev25}/tests/v1/test_trace.py +0 -0
  111. {verifiers-0.3.1.dev23 → verifiers-0.3.1.dev25}/verifiers/__init__.py +0 -0
  112. {verifiers-0.3.1.dev23 → verifiers-0.3.1.dev25}/verifiers/cli/__init__.py +0 -0
  113. {verifiers-0.3.1.dev23 → verifiers-0.3.1.dev25}/verifiers/cli/commands/__init__.py +0 -0
  114. {verifiers-0.3.1.dev23 → verifiers-0.3.1.dev25}/verifiers/cli/commands/build.py +0 -0
  115. {verifiers-0.3.1.dev23 → verifiers-0.3.1.dev25}/verifiers/cli/commands/eval.py +0 -0
  116. {verifiers-0.3.1.dev23 → verifiers-0.3.1.dev25}/verifiers/cli/commands/gepa.py +0 -0
  117. {verifiers-0.3.1.dev23 → verifiers-0.3.1.dev25}/verifiers/cli/commands/init.py +0 -0
  118. {verifiers-0.3.1.dev23 → verifiers-0.3.1.dev25}/verifiers/cli/commands/install.py +0 -0
  119. {verifiers-0.3.1.dev23 → verifiers-0.3.1.dev25}/verifiers/cli/commands/setup.py +0 -0
  120. {verifiers-0.3.1.dev23 → verifiers-0.3.1.dev25}/verifiers/cli/plugins/__init__.py +0 -0
  121. {verifiers-0.3.1.dev23 → verifiers-0.3.1.dev25}/verifiers/cli/plugins/prime.py +0 -0
  122. {verifiers-0.3.1.dev23 → verifiers-0.3.1.dev25}/verifiers/cli/tui.py +0 -0
  123. {verifiers-0.3.1.dev23 → verifiers-0.3.1.dev25}/verifiers/legacy/__init__.py +0 -0
  124. {verifiers-0.3.1.dev23 → verifiers-0.3.1.dev25}/verifiers/legacy/clients/__init__.py +0 -0
  125. {verifiers-0.3.1.dev23 → verifiers-0.3.1.dev25}/verifiers/legacy/clients/anthropic_messages_client.py +0 -0
  126. {verifiers-0.3.1.dev23 → verifiers-0.3.1.dev25}/verifiers/legacy/clients/client.py +0 -0
  127. {verifiers-0.3.1.dev23 → verifiers-0.3.1.dev25}/verifiers/legacy/clients/nemorl_chat_completions_client.py +0 -0
  128. {verifiers-0.3.1.dev23 → verifiers-0.3.1.dev25}/verifiers/legacy/clients/openai_chat_completions_client.py +0 -0
  129. {verifiers-0.3.1.dev23 → verifiers-0.3.1.dev25}/verifiers/legacy/clients/openai_chat_completions_token_client.py +0 -0
  130. {verifiers-0.3.1.dev23 → verifiers-0.3.1.dev25}/verifiers/legacy/clients/openai_completions_client.py +0 -0
  131. {verifiers-0.3.1.dev23 → verifiers-0.3.1.dev25}/verifiers/legacy/clients/openai_responses_client.py +0 -0
  132. {verifiers-0.3.1.dev23 → verifiers-0.3.1.dev25}/verifiers/legacy/clients/renderer_client.py +0 -0
  133. {verifiers-0.3.1.dev23 → verifiers-0.3.1.dev25}/verifiers/legacy/decorators.py +0 -0
  134. {verifiers-0.3.1.dev23 → verifiers-0.3.1.dev25}/verifiers/legacy/envs/__init__.py +0 -0
  135. {verifiers-0.3.1.dev23 → verifiers-0.3.1.dev25}/verifiers/legacy/envs/env_group.py +0 -0
  136. {verifiers-0.3.1.dev23 → verifiers-0.3.1.dev25}/verifiers/legacy/envs/environment.py +0 -0
  137. {verifiers-0.3.1.dev23 → verifiers-0.3.1.dev25}/verifiers/legacy/envs/experimental/README.md +0 -0
  138. {verifiers-0.3.1.dev23 → verifiers-0.3.1.dev25}/verifiers/legacy/envs/experimental/__init__.py +0 -0
  139. {verifiers-0.3.1.dev23 → verifiers-0.3.1.dev25}/verifiers/legacy/envs/experimental/cli_agent_env.py +0 -0
  140. {verifiers-0.3.1.dev23 → verifiers-0.3.1.dev25}/verifiers/legacy/envs/experimental/composable/README.md +0 -0
  141. {verifiers-0.3.1.dev23 → verifiers-0.3.1.dev25}/verifiers/legacy/envs/experimental/composable/__init__.py +0 -0
  142. {verifiers-0.3.1.dev23 → verifiers-0.3.1.dev25}/verifiers/legacy/envs/experimental/composable/_filter.py +0 -0
  143. {verifiers-0.3.1.dev23 → verifiers-0.3.1.dev25}/verifiers/legacy/envs/experimental/composable/composable_env.py +0 -0
  144. {verifiers-0.3.1.dev23 → verifiers-0.3.1.dev25}/verifiers/legacy/envs/experimental/composable/harness.py +0 -0
  145. {verifiers-0.3.1.dev23 → verifiers-0.3.1.dev25}/verifiers/legacy/envs/experimental/composable/harnesses/__init__.py +0 -0
  146. {verifiers-0.3.1.dev23 → verifiers-0.3.1.dev25}/verifiers/legacy/envs/experimental/composable/harnesses/mini_swe_agent.py +0 -0
  147. {verifiers-0.3.1.dev23 → verifiers-0.3.1.dev25}/verifiers/legacy/envs/experimental/composable/harnesses/opencode.py +0 -0
  148. {verifiers-0.3.1.dev23 → verifiers-0.3.1.dev25}/verifiers/legacy/envs/experimental/composable/harnesses/prompt.txt +0 -0
  149. {verifiers-0.3.1.dev23 → verifiers-0.3.1.dev25}/verifiers/legacy/envs/experimental/composable/harnesses/rlm.py +0 -0
  150. {verifiers-0.3.1.dev23 → verifiers-0.3.1.dev25}/verifiers/legacy/envs/experimental/composable/sandbox_debug_env.py +0 -0
  151. {verifiers-0.3.1.dev23 → verifiers-0.3.1.dev25}/verifiers/legacy/envs/experimental/composable/swe_debug_env.py +0 -0
  152. {verifiers-0.3.1.dev23 → verifiers-0.3.1.dev25}/verifiers/legacy/envs/experimental/composable/task.py +0 -0
  153. {verifiers-0.3.1.dev23 → verifiers-0.3.1.dev25}/verifiers/legacy/envs/experimental/composable/tasksets/__init__.py +0 -0
  154. {verifiers-0.3.1.dev23 → verifiers-0.3.1.dev25}/verifiers/legacy/envs/experimental/composable/tasksets/cp/__init__.py +0 -0
  155. {verifiers-0.3.1.dev23 → verifiers-0.3.1.dev25}/verifiers/legacy/envs/experimental/composable/tasksets/cp/cp_task.py +0 -0
  156. {verifiers-0.3.1.dev23 → verifiers-0.3.1.dev25}/verifiers/legacy/envs/experimental/composable/tasksets/cp/test_utils.py +0 -0
  157. {verifiers-0.3.1.dev23 → verifiers-0.3.1.dev25}/verifiers/legacy/envs/experimental/composable/tasksets/harbor/__init__.py +0 -0
  158. {verifiers-0.3.1.dev23 → verifiers-0.3.1.dev25}/verifiers/legacy/envs/experimental/composable/tasksets/harbor/cli_gym.py +0 -0
  159. {verifiers-0.3.1.dev23 → verifiers-0.3.1.dev25}/verifiers/legacy/envs/experimental/composable/tasksets/harbor/harbor.py +0 -0
  160. {verifiers-0.3.1.dev23 → verifiers-0.3.1.dev25}/verifiers/legacy/envs/experimental/composable/tasksets/harbor/terminal_lego.py +0 -0
  161. {verifiers-0.3.1.dev23 → verifiers-0.3.1.dev25}/verifiers/legacy/envs/experimental/composable/tasksets/math/__init__.py +0 -0
  162. {verifiers-0.3.1.dev23 → verifiers-0.3.1.dev25}/verifiers/legacy/envs/experimental/composable/tasksets/math/math_task.py +0 -0
  163. {verifiers-0.3.1.dev23 → verifiers-0.3.1.dev25}/verifiers/legacy/envs/experimental/composable/tasksets/swe/README.md +0 -0
  164. {verifiers-0.3.1.dev23 → verifiers-0.3.1.dev25}/verifiers/legacy/envs/experimental/composable/tasksets/swe/__init__.py +0 -0
  165. {verifiers-0.3.1.dev23 → verifiers-0.3.1.dev25}/verifiers/legacy/envs/experimental/composable/tasksets/swe/multi_swe/__init__.py +0 -0
  166. {verifiers-0.3.1.dev23 → verifiers-0.3.1.dev25}/verifiers/legacy/envs/experimental/composable/tasksets/swe/multi_swe/extract_fix_patch.sh +0 -0
  167. {verifiers-0.3.1.dev23 → verifiers-0.3.1.dev25}/verifiers/legacy/envs/experimental/composable/tasksets/swe/multi_swe/taskset.py +0 -0
  168. {verifiers-0.3.1.dev23 → verifiers-0.3.1.dev25}/verifiers/legacy/envs/experimental/composable/tasksets/swe/openswe/__init__.py +0 -0
  169. {verifiers-0.3.1.dev23 → verifiers-0.3.1.dev25}/verifiers/legacy/envs/experimental/composable/tasksets/swe/openswe/taskset.py +0 -0
  170. {verifiers-0.3.1.dev23 → verifiers-0.3.1.dev25}/verifiers/legacy/envs/experimental/composable/tasksets/swe/r2e_gym/__init__.py +0 -0
  171. {verifiers-0.3.1.dev23 → verifiers-0.3.1.dev25}/verifiers/legacy/envs/experimental/composable/tasksets/swe/r2e_gym/log_parser.py +0 -0
  172. {verifiers-0.3.1.dev23 → verifiers-0.3.1.dev25}/verifiers/legacy/envs/experimental/composable/tasksets/swe/r2e_gym/taskset.py +0 -0
  173. {verifiers-0.3.1.dev23 → verifiers-0.3.1.dev25}/verifiers/legacy/envs/experimental/composable/tasksets/swe/scale_swe/__init__.py +0 -0
  174. {verifiers-0.3.1.dev23 → verifiers-0.3.1.dev25}/verifiers/legacy/envs/experimental/composable/tasksets/swe/scale_swe/taskset.py +0 -0
  175. {verifiers-0.3.1.dev23 → verifiers-0.3.1.dev25}/verifiers/legacy/envs/experimental/composable/tasksets/swe/shared/__init__.py +0 -0
  176. {verifiers-0.3.1.dev23 → verifiers-0.3.1.dev25}/verifiers/legacy/envs/experimental/composable/tasksets/swe/shared/test_patch.py +0 -0
  177. {verifiers-0.3.1.dev23 → verifiers-0.3.1.dev25}/verifiers/legacy/envs/experimental/composable/tasksets/swe/swe_bench/__init__.py +0 -0
  178. {verifiers-0.3.1.dev23 → verifiers-0.3.1.dev25}/verifiers/legacy/envs/experimental/composable/tasksets/swe/swe_bench/taskset.py +0 -0
  179. {verifiers-0.3.1.dev23 → verifiers-0.3.1.dev25}/verifiers/legacy/envs/experimental/composable/tasksets/swe/swe_lego/__init__.py +0 -0
  180. {verifiers-0.3.1.dev23 → verifiers-0.3.1.dev25}/verifiers/legacy/envs/experimental/composable/tasksets/swe/swe_lego/taskset.py +0 -0
  181. {verifiers-0.3.1.dev23 → verifiers-0.3.1.dev25}/verifiers/legacy/envs/experimental/composable/tasksets/swe/swe_rebench_v2/__init__.py +0 -0
  182. {verifiers-0.3.1.dev23 → verifiers-0.3.1.dev25}/verifiers/legacy/envs/experimental/composable/tasksets/swe/swe_rebench_v2/log_parsers.py +0 -0
  183. {verifiers-0.3.1.dev23 → verifiers-0.3.1.dev25}/verifiers/legacy/envs/experimental/composable/tasksets/swe/swe_rebench_v2/taskset.py +0 -0
  184. {verifiers-0.3.1.dev23 → verifiers-0.3.1.dev25}/verifiers/legacy/envs/experimental/composable/tasksets/swe/swe_smith/__init__.py +0 -0
  185. {verifiers-0.3.1.dev23 → verifiers-0.3.1.dev25}/verifiers/legacy/envs/experimental/composable/tasksets/swe/swe_smith/taskset.py +0 -0
  186. {verifiers-0.3.1.dev23 → verifiers-0.3.1.dev25}/verifiers/legacy/envs/experimental/composable/tasksets/swe/swe_tasksets.py +0 -0
  187. {verifiers-0.3.1.dev23 → verifiers-0.3.1.dev25}/verifiers/legacy/envs/experimental/gym_env.py +0 -0
  188. {verifiers-0.3.1.dev23 → verifiers-0.3.1.dev25}/verifiers/legacy/envs/experimental/harbor_env/__init__.py +0 -0
  189. {verifiers-0.3.1.dev23 → verifiers-0.3.1.dev25}/verifiers/legacy/envs/experimental/harbor_env/env.py +0 -0
  190. {verifiers-0.3.1.dev23 → verifiers-0.3.1.dev25}/verifiers/legacy/envs/experimental/harbor_env/mcp.py +0 -0
  191. {verifiers-0.3.1.dev23 → verifiers-0.3.1.dev25}/verifiers/legacy/envs/experimental/mcp_env.py +0 -0
  192. {verifiers-0.3.1.dev23 → verifiers-0.3.1.dev25}/verifiers/legacy/envs/experimental/opencode_env.py +0 -0
  193. {verifiers-0.3.1.dev23 → verifiers-0.3.1.dev25}/verifiers/legacy/envs/experimental/opencode_qa_env.py +0 -0
  194. {verifiers-0.3.1.dev23 → verifiers-0.3.1.dev25}/verifiers/legacy/envs/experimental/opencode_rlm_env.py +0 -0
  195. {verifiers-0.3.1.dev23 → verifiers-0.3.1.dev25}/verifiers/legacy/envs/experimental/sandbox_mixin.py +0 -0
  196. {verifiers-0.3.1.dev23 → verifiers-0.3.1.dev25}/verifiers/legacy/envs/experimental/utils/__init__.py +0 -0
  197. {verifiers-0.3.1.dev23 → verifiers-0.3.1.dev25}/verifiers/legacy/envs/experimental/utils/file_locks.py +0 -0
  198. {verifiers-0.3.1.dev23 → verifiers-0.3.1.dev25}/verifiers/legacy/envs/experimental/utils/git_checkout_cache.py +0 -0
  199. {verifiers-0.3.1.dev23 → verifiers-0.3.1.dev25}/verifiers/legacy/envs/integrations/README.md +0 -0
  200. {verifiers-0.3.1.dev23 → verifiers-0.3.1.dev25}/verifiers/legacy/envs/integrations/__init__.py +0 -0
  201. {verifiers-0.3.1.dev23 → verifiers-0.3.1.dev25}/verifiers/legacy/envs/integrations/browser_env/README.md +0 -0
  202. {verifiers-0.3.1.dev23 → verifiers-0.3.1.dev25}/verifiers/legacy/envs/integrations/browser_env/__init__.py +0 -0
  203. {verifiers-0.3.1.dev23 → verifiers-0.3.1.dev25}/verifiers/legacy/envs/integrations/browser_env/browser_env.py +0 -0
  204. {verifiers-0.3.1.dev23 → verifiers-0.3.1.dev25}/verifiers/legacy/envs/integrations/browser_env/modes/__init__.py +0 -0
  205. {verifiers-0.3.1.dev23 → verifiers-0.3.1.dev25}/verifiers/legacy/envs/integrations/browser_env/modes/base.py +0 -0
  206. {verifiers-0.3.1.dev23 → verifiers-0.3.1.dev25}/verifiers/legacy/envs/integrations/browser_env/modes/cua_mode.py +0 -0
  207. {verifiers-0.3.1.dev23 → verifiers-0.3.1.dev25}/verifiers/legacy/envs/integrations/browser_env/modes/dom_mode.py +0 -0
  208. {verifiers-0.3.1.dev23 → verifiers-0.3.1.dev25}/verifiers/legacy/envs/integrations/openenv_env.py +0 -0
  209. {verifiers-0.3.1.dev23 → verifiers-0.3.1.dev25}/verifiers/legacy/envs/integrations/reasoninggym_env.py +0 -0
  210. {verifiers-0.3.1.dev23 → verifiers-0.3.1.dev25}/verifiers/legacy/envs/integrations/textarena_env.py +0 -0
  211. {verifiers-0.3.1.dev23 → verifiers-0.3.1.dev25}/verifiers/legacy/envs/multiturn_env.py +0 -0
  212. {verifiers-0.3.1.dev23 → verifiers-0.3.1.dev25}/verifiers/legacy/envs/python_env.py +0 -0
  213. {verifiers-0.3.1.dev23 → verifiers-0.3.1.dev25}/verifiers/legacy/envs/sandbox_env.py +0 -0
  214. {verifiers-0.3.1.dev23 → verifiers-0.3.1.dev25}/verifiers/legacy/envs/singleturn_env.py +0 -0
  215. {verifiers-0.3.1.dev23 → verifiers-0.3.1.dev25}/verifiers/legacy/envs/stateful_tool_env.py +0 -0
  216. {verifiers-0.3.1.dev23 → verifiers-0.3.1.dev25}/verifiers/legacy/envs/tool_env.py +0 -0
  217. {verifiers-0.3.1.dev23 → verifiers-0.3.1.dev25}/verifiers/legacy/errors.py +0 -0
  218. {verifiers-0.3.1.dev23 → verifiers-0.3.1.dev25}/verifiers/legacy/gepa/__init__.py +0 -0
  219. {verifiers-0.3.1.dev23 → verifiers-0.3.1.dev25}/verifiers/legacy/gepa/adapter.py +0 -0
  220. {verifiers-0.3.1.dev23 → verifiers-0.3.1.dev25}/verifiers/legacy/gepa/config.py +0 -0
  221. {verifiers-0.3.1.dev23 → verifiers-0.3.1.dev25}/verifiers/legacy/gepa/display.py +0 -0
  222. {verifiers-0.3.1.dev23 → verifiers-0.3.1.dev25}/verifiers/legacy/gepa/gepa_utils.py +0 -0
  223. {verifiers-0.3.1.dev23 → verifiers-0.3.1.dev25}/verifiers/legacy/parsers/__init__.py +0 -0
  224. {verifiers-0.3.1.dev23 → verifiers-0.3.1.dev25}/verifiers/legacy/parsers/maybe_think_parser.py +0 -0
  225. {verifiers-0.3.1.dev23 → verifiers-0.3.1.dev25}/verifiers/legacy/parsers/parser.py +0 -0
  226. {verifiers-0.3.1.dev23 → verifiers-0.3.1.dev25}/verifiers/legacy/parsers/think_parser.py +0 -0
  227. {verifiers-0.3.1.dev23 → verifiers-0.3.1.dev25}/verifiers/legacy/parsers/xml_parser.py +0 -0
  228. {verifiers-0.3.1.dev23 → verifiers-0.3.1.dev25}/verifiers/legacy/rubrics/__init__.py +0 -0
  229. {verifiers-0.3.1.dev23 → verifiers-0.3.1.dev25}/verifiers/legacy/rubrics/experimental/hybrid_math_rubric.py +0 -0
  230. {verifiers-0.3.1.dev23 → verifiers-0.3.1.dev25}/verifiers/legacy/rubrics/judge_rubric.py +0 -0
  231. {verifiers-0.3.1.dev23 → verifiers-0.3.1.dev25}/verifiers/legacy/rubrics/math_rubric.py +0 -0
  232. {verifiers-0.3.1.dev23 → verifiers-0.3.1.dev25}/verifiers/legacy/rubrics/rubric.py +0 -0
  233. {verifiers-0.3.1.dev23 → verifiers-0.3.1.dev25}/verifiers/legacy/rubrics/rubric_group.py +0 -0
  234. {verifiers-0.3.1.dev23 → verifiers-0.3.1.dev25}/verifiers/legacy/scripts/__init__.py +0 -0
  235. {verifiers-0.3.1.dev23 → verifiers-0.3.1.dev25}/verifiers/legacy/scripts/build.py +0 -0
  236. {verifiers-0.3.1.dev23 → verifiers-0.3.1.dev25}/verifiers/legacy/scripts/eval.py +0 -0
  237. {verifiers-0.3.1.dev23 → verifiers-0.3.1.dev25}/verifiers/legacy/scripts/gepa.py +0 -0
  238. {verifiers-0.3.1.dev23 → verifiers-0.3.1.dev25}/verifiers/legacy/scripts/init.py +0 -0
  239. {verifiers-0.3.1.dev23 → verifiers-0.3.1.dev25}/verifiers/legacy/scripts/install.py +0 -0
  240. {verifiers-0.3.1.dev23 → verifiers-0.3.1.dev25}/verifiers/legacy/scripts/setup.py +0 -0
  241. {verifiers-0.3.1.dev23 → verifiers-0.3.1.dev25}/verifiers/legacy/scripts/tui.py +0 -0
  242. {verifiers-0.3.1.dev23 → verifiers-0.3.1.dev25}/verifiers/legacy/serve/__init__.py +0 -0
  243. {verifiers-0.3.1.dev23 → verifiers-0.3.1.dev25}/verifiers/legacy/serve/client/env_client.py +0 -0
  244. {verifiers-0.3.1.dev23 → verifiers-0.3.1.dev25}/verifiers/legacy/serve/client/zmq_env_client.py +0 -0
  245. {verifiers-0.3.1.dev23 → verifiers-0.3.1.dev25}/verifiers/legacy/serve/server/__init__.py +0 -0
  246. {verifiers-0.3.1.dev23 → verifiers-0.3.1.dev25}/verifiers/legacy/serve/server/env_router.py +0 -0
  247. {verifiers-0.3.1.dev23 → verifiers-0.3.1.dev25}/verifiers/legacy/serve/server/env_server.py +0 -0
  248. {verifiers-0.3.1.dev23 → verifiers-0.3.1.dev25}/verifiers/legacy/serve/server/env_worker.py +0 -0
  249. {verifiers-0.3.1.dev23 → verifiers-0.3.1.dev25}/verifiers/legacy/serve/server/zmq_env_server.py +0 -0
  250. {verifiers-0.3.1.dev23 → verifiers-0.3.1.dev25}/verifiers/legacy/serve/types.py +0 -0
  251. {verifiers-0.3.1.dev23 → verifiers-0.3.1.dev25}/verifiers/legacy/types.py +0 -0
  252. {verifiers-0.3.1.dev23 → verifiers-0.3.1.dev25}/verifiers/legacy/utils/__init__.py +0 -0
  253. {verifiers-0.3.1.dev23 → verifiers-0.3.1.dev25}/verifiers/legacy/utils/async_utils.py +0 -0
  254. {verifiers-0.3.1.dev23 → verifiers-0.3.1.dev25}/verifiers/legacy/utils/client_utils.py +0 -0
  255. {verifiers-0.3.1.dev23 → verifiers-0.3.1.dev25}/verifiers/legacy/utils/config_utils.py +0 -0
  256. {verifiers-0.3.1.dev23 → verifiers-0.3.1.dev25}/verifiers/legacy/utils/data_utils.py +0 -0
  257. {verifiers-0.3.1.dev23 → verifiers-0.3.1.dev25}/verifiers/legacy/utils/display_utils.py +0 -0
  258. {verifiers-0.3.1.dev23 → verifiers-0.3.1.dev25}/verifiers/legacy/utils/env_config_utils.py +0 -0
  259. {verifiers-0.3.1.dev23 → verifiers-0.3.1.dev25}/verifiers/legacy/utils/env_utils.py +0 -0
  260. {verifiers-0.3.1.dev23 → verifiers-0.3.1.dev25}/verifiers/legacy/utils/error_utils.py +0 -0
  261. {verifiers-0.3.1.dev23 → verifiers-0.3.1.dev25}/verifiers/legacy/utils/eval_display.py +0 -0
  262. {verifiers-0.3.1.dev23 → verifiers-0.3.1.dev25}/verifiers/legacy/utils/eval_utils.py +0 -0
  263. {verifiers-0.3.1.dev23 → verifiers-0.3.1.dev25}/verifiers/legacy/utils/heartbeat.py +0 -0
  264. {verifiers-0.3.1.dev23 → verifiers-0.3.1.dev25}/verifiers/legacy/utils/import_utils.py +0 -0
  265. {verifiers-0.3.1.dev23 → verifiers-0.3.1.dev25}/verifiers/legacy/utils/install_utils.py +0 -0
  266. {verifiers-0.3.1.dev23 → verifiers-0.3.1.dev25}/verifiers/legacy/utils/interception_utils.py +0 -0
  267. {verifiers-0.3.1.dev23 → verifiers-0.3.1.dev25}/verifiers/legacy/utils/logging_utils.py +0 -0
  268. {verifiers-0.3.1.dev23 → verifiers-0.3.1.dev25}/verifiers/legacy/utils/message_utils.py +0 -0
  269. {verifiers-0.3.1.dev23 → verifiers-0.3.1.dev25}/verifiers/legacy/utils/metric_utils.py +0 -0
  270. {verifiers-0.3.1.dev23 → verifiers-0.3.1.dev25}/verifiers/legacy/utils/path_utils.py +0 -0
  271. {verifiers-0.3.1.dev23 → verifiers-0.3.1.dev25}/verifiers/legacy/utils/pricing_utils.py +0 -0
  272. {verifiers-0.3.1.dev23 → verifiers-0.3.1.dev25}/verifiers/legacy/utils/process_utils.py +0 -0
  273. {verifiers-0.3.1.dev23 → verifiers-0.3.1.dev25}/verifiers/legacy/utils/response_utils.py +0 -0
  274. {verifiers-0.3.1.dev23 → verifiers-0.3.1.dev25}/verifiers/legacy/utils/save_utils.py +0 -0
  275. {verifiers-0.3.1.dev23 → verifiers-0.3.1.dev25}/verifiers/legacy/utils/serve_utils.py +0 -0
  276. {verifiers-0.3.1.dev23 → verifiers-0.3.1.dev25}/verifiers/legacy/utils/thread_utils.py +0 -0
  277. {verifiers-0.3.1.dev23 → verifiers-0.3.1.dev25}/verifiers/legacy/utils/threaded_sandbox_client.py +0 -0
  278. {verifiers-0.3.1.dev23 → verifiers-0.3.1.dev25}/verifiers/legacy/utils/tool_utils.py +0 -0
  279. {verifiers-0.3.1.dev23 → verifiers-0.3.1.dev25}/verifiers/legacy/utils/usage_utils.py +0 -0
  280. {verifiers-0.3.1.dev23 → verifiers-0.3.1.dev25}/verifiers/legacy/utils/version_utils.py +0 -0
  281. {verifiers-0.3.1.dev23 → verifiers-0.3.1.dev25}/verifiers/v1/acp/__init__.py +0 -0
  282. {verifiers-0.3.1.dev23 → verifiers-0.3.1.dev25}/verifiers/v1/acp/runner.py +0 -0
  283. {verifiers-0.3.1.dev23 → verifiers-0.3.1.dev25}/verifiers/v1/cli/__init__.py +0 -0
  284. {verifiers-0.3.1.dev23 → verifiers-0.3.1.dev25}/verifiers/v1/cli/dashboard/__init__.py +0 -0
  285. {verifiers-0.3.1.dev23 → verifiers-0.3.1.dev25}/verifiers/v1/cli/dashboard/base.py +0 -0
  286. {verifiers-0.3.1.dev23 → verifiers-0.3.1.dev25}/verifiers/v1/cli/dashboard/eval.py +0 -0
  287. {verifiers-0.3.1.dev23 → verifiers-0.3.1.dev25}/verifiers/v1/cli/dashboard/replay.py +0 -0
  288. {verifiers-0.3.1.dev23 → verifiers-0.3.1.dev25}/verifiers/v1/cli/dashboard/validate.py +0 -0
  289. {verifiers-0.3.1.dev23 → verifiers-0.3.1.dev25}/verifiers/v1/cli/debug.py +0 -0
  290. {verifiers-0.3.1.dev23 → verifiers-0.3.1.dev25}/verifiers/v1/cli/eval/__init__.py +0 -0
  291. {verifiers-0.3.1.dev23 → verifiers-0.3.1.dev25}/verifiers/v1/cli/eval/main.py +0 -0
  292. {verifiers-0.3.1.dev23 → verifiers-0.3.1.dev25}/verifiers/v1/cli/eval/resume.py +0 -0
  293. {verifiers-0.3.1.dev23 → verifiers-0.3.1.dev25}/verifiers/v1/cli/eval/runner.py +0 -0
  294. {verifiers-0.3.1.dev23 → verifiers-0.3.1.dev25}/verifiers/v1/cli/gepa.py +0 -0
  295. {verifiers-0.3.1.dev23 → verifiers-0.3.1.dev25}/verifiers/v1/cli/init.py +0 -0
  296. {verifiers-0.3.1.dev23 → verifiers-0.3.1.dev25}/verifiers/v1/cli/output.py +0 -0
  297. {verifiers-0.3.1.dev23 → verifiers-0.3.1.dev25}/verifiers/v1/cli/replay.py +0 -0
  298. {verifiers-0.3.1.dev23 → verifiers-0.3.1.dev25}/verifiers/v1/cli/resolve.py +0 -0
  299. {verifiers-0.3.1.dev23 → verifiers-0.3.1.dev25}/verifiers/v1/cli/resume.py +0 -0
  300. {verifiers-0.3.1.dev23 → verifiers-0.3.1.dev25}/verifiers/v1/cli/validate.py +0 -0
  301. {verifiers-0.3.1.dev23 → verifiers-0.3.1.dev25}/verifiers/v1/clients/__init__.py +0 -0
  302. {verifiers-0.3.1.dev23 → verifiers-0.3.1.dev25}/verifiers/v1/clients/base.py +0 -0
  303. {verifiers-0.3.1.dev23 → verifiers-0.3.1.dev25}/verifiers/v1/configs/__init__.py +0 -0
  304. {verifiers-0.3.1.dev23 → verifiers-0.3.1.dev25}/verifiers/v1/configs/agent.py +0 -0
  305. {verifiers-0.3.1.dev23 → verifiers-0.3.1.dev25}/verifiers/v1/configs/cli/__init__.py +0 -0
  306. {verifiers-0.3.1.dev23 → verifiers-0.3.1.dev25}/verifiers/v1/configs/cli/debug.py +0 -0
  307. {verifiers-0.3.1.dev23 → verifiers-0.3.1.dev25}/verifiers/v1/configs/cli/env.py +0 -0
  308. {verifiers-0.3.1.dev23 → verifiers-0.3.1.dev25}/verifiers/v1/configs/cli/eval.py +0 -0
  309. {verifiers-0.3.1.dev23 → verifiers-0.3.1.dev25}/verifiers/v1/configs/cli/init.py +0 -0
  310. {verifiers-0.3.1.dev23 → verifiers-0.3.1.dev25}/verifiers/v1/configs/cli/replay.py +0 -0
  311. {verifiers-0.3.1.dev23 → verifiers-0.3.1.dev25}/verifiers/v1/configs/cli/validate.py +0 -0
  312. {verifiers-0.3.1.dev23 → verifiers-0.3.1.dev25}/verifiers/v1/configs/client.py +0 -0
  313. {verifiers-0.3.1.dev23 → verifiers-0.3.1.dev25}/verifiers/v1/configs/env.py +0 -0
  314. {verifiers-0.3.1.dev23 → verifiers-0.3.1.dev25}/verifiers/v1/configs/harness.py +0 -0
  315. {verifiers-0.3.1.dev23 → verifiers-0.3.1.dev25}/verifiers/v1/configs/judge.py +0 -0
  316. {verifiers-0.3.1.dev23 → verifiers-0.3.1.dev25}/verifiers/v1/configs/retries.py +0 -0
  317. {verifiers-0.3.1.dev23 → verifiers-0.3.1.dev25}/verifiers/v1/configs/serve.py +0 -0
  318. {verifiers-0.3.1.dev23 → verifiers-0.3.1.dev25}/verifiers/v1/configs/task.py +0 -0
  319. {verifiers-0.3.1.dev23 → verifiers-0.3.1.dev25}/verifiers/v1/configs/taskset.py +0 -0
  320. {verifiers-0.3.1.dev23 → verifiers-0.3.1.dev25}/verifiers/v1/dialects/__init__.py +0 -0
  321. {verifiers-0.3.1.dev23 → verifiers-0.3.1.dev25}/verifiers/v1/env.py +0 -0
  322. {verifiers-0.3.1.dev23 → verifiers-0.3.1.dev25}/verifiers/v1/envs/__init__.py +0 -0
  323. {verifiers-0.3.1.dev23 → verifiers-0.3.1.dev25}/verifiers/v1/envs/agentic_judge/__init__.py +0 -0
  324. {verifiers-0.3.1.dev23 → verifiers-0.3.1.dev25}/verifiers/v1/envs/agentic_judge/env.py +0 -0
  325. {verifiers-0.3.1.dev23 → verifiers-0.3.1.dev25}/verifiers/v1/envs/best_of_n/__init__.py +0 -0
  326. {verifiers-0.3.1.dev23 → verifiers-0.3.1.dev25}/verifiers/v1/envs/best_of_n/env.py +0 -0
  327. {verifiers-0.3.1.dev23 → verifiers-0.3.1.dev25}/verifiers/v1/envs/shared_agentic_judge/__init__.py +0 -0
  328. {verifiers-0.3.1.dev23 → verifiers-0.3.1.dev25}/verifiers/v1/envs/single_agent/__init__.py +0 -0
  329. {verifiers-0.3.1.dev23 → verifiers-0.3.1.dev25}/verifiers/v1/envs/single_agent/env.py +0 -0
  330. {verifiers-0.3.1.dev23 → verifiers-0.3.1.dev25}/verifiers/v1/envs/user_sim/__init__.py +0 -0
  331. {verifiers-0.3.1.dev23 → verifiers-0.3.1.dev25}/verifiers/v1/envs/user_sim/env.py +0 -0
  332. {verifiers-0.3.1.dev23 → verifiers-0.3.1.dev25}/verifiers/v1/episode.py +0 -0
  333. {verifiers-0.3.1.dev23 → verifiers-0.3.1.dev25}/verifiers/v1/errors.py +0 -0
  334. {verifiers-0.3.1.dev23 → verifiers-0.3.1.dev25}/verifiers/v1/gepa/__init__.py +0 -0
  335. {verifiers-0.3.1.dev23 → verifiers-0.3.1.dev25}/verifiers/v1/gepa/adapter.py +0 -0
  336. {verifiers-0.3.1.dev23 → verifiers-0.3.1.dev25}/verifiers/v1/gepa/config.py +0 -0
  337. {verifiers-0.3.1.dev23 → verifiers-0.3.1.dev25}/verifiers/v1/gepa/dataset.py +0 -0
  338. {verifiers-0.3.1.dev23 → verifiers-0.3.1.dev25}/verifiers/v1/gepa/reflection.py +0 -0
  339. {verifiers-0.3.1.dev23 → verifiers-0.3.1.dev25}/verifiers/v1/gepa/runner.py +0 -0
  340. {verifiers-0.3.1.dev23 → verifiers-0.3.1.dev25}/verifiers/v1/graph.py +0 -0
  341. {verifiers-0.3.1.dev23 → verifiers-0.3.1.dev25}/verifiers/v1/harness.py +0 -0
  342. {verifiers-0.3.1.dev23 → verifiers-0.3.1.dev25}/verifiers/v1/harnesses/__init__.py +0 -0
  343. {verifiers-0.3.1.dev23 → verifiers-0.3.1.dev25}/verifiers/v1/harnesses/bash/__init__.py +0 -0
  344. {verifiers-0.3.1.dev23 → verifiers-0.3.1.dev25}/verifiers/v1/harnesses/bash/harness.py +0 -0
  345. {verifiers-0.3.1.dev23 → verifiers-0.3.1.dev25}/verifiers/v1/harnesses/bash/program.py +0 -0
  346. {verifiers-0.3.1.dev23 → verifiers-0.3.1.dev25}/verifiers/v1/harnesses/browser_use/__init__.py +0 -0
  347. {verifiers-0.3.1.dev23 → verifiers-0.3.1.dev25}/verifiers/v1/harnesses/browser_use/harness.py +0 -0
  348. {verifiers-0.3.1.dev23 → verifiers-0.3.1.dev25}/verifiers/v1/harnesses/browser_use/program.py +0 -0
  349. {verifiers-0.3.1.dev23 → verifiers-0.3.1.dev25}/verifiers/v1/harnesses/claude_code/__init__.py +0 -0
  350. {verifiers-0.3.1.dev23 → verifiers-0.3.1.dev25}/verifiers/v1/harnesses/claude_code/harness.py +0 -0
  351. {verifiers-0.3.1.dev23 → verifiers-0.3.1.dev25}/verifiers/v1/harnesses/codex/__init__.py +0 -0
  352. {verifiers-0.3.1.dev23 → verifiers-0.3.1.dev25}/verifiers/v1/harnesses/codex/harness.py +0 -0
  353. {verifiers-0.3.1.dev23 → verifiers-0.3.1.dev25}/verifiers/v1/harnesses/hermes_agent/__init__.py +0 -0
  354. {verifiers-0.3.1.dev23 → verifiers-0.3.1.dev25}/verifiers/v1/harnesses/hermes_agent/harness.py +0 -0
  355. {verifiers-0.3.1.dev23 → verifiers-0.3.1.dev25}/verifiers/v1/harnesses/hermes_agent/program.py +0 -0
  356. {verifiers-0.3.1.dev23 → verifiers-0.3.1.dev25}/verifiers/v1/harnesses/kimi_code/__init__.py +0 -0
  357. {verifiers-0.3.1.dev23 → verifiers-0.3.1.dev25}/verifiers/v1/harnesses/kimi_code/harness.py +0 -0
  358. {verifiers-0.3.1.dev23 → verifiers-0.3.1.dev25}/verifiers/v1/harnesses/mini_swe_agent/__init__.py +0 -0
  359. {verifiers-0.3.1.dev23 → verifiers-0.3.1.dev25}/verifiers/v1/harnesses/mini_swe_agent/harness.py +0 -0
  360. {verifiers-0.3.1.dev23 → verifiers-0.3.1.dev25}/verifiers/v1/harnesses/mini_swe_agent/program.py +0 -0
  361. {verifiers-0.3.1.dev23 → verifiers-0.3.1.dev25}/verifiers/v1/harnesses/node.py +0 -0
  362. {verifiers-0.3.1.dev23 → verifiers-0.3.1.dev25}/verifiers/v1/harnesses/null/__init__.py +0 -0
  363. {verifiers-0.3.1.dev23 → verifiers-0.3.1.dev25}/verifiers/v1/harnesses/null/harness.py +0 -0
  364. {verifiers-0.3.1.dev23 → verifiers-0.3.1.dev25}/verifiers/v1/harnesses/null/program.py +0 -0
  365. {verifiers-0.3.1.dev23 → verifiers-0.3.1.dev25}/verifiers/v1/harnesses/openclaw/__init__.py +0 -0
  366. {verifiers-0.3.1.dev23 → verifiers-0.3.1.dev25}/verifiers/v1/harnesses/openclaw/harness.py +0 -0
  367. {verifiers-0.3.1.dev23 → verifiers-0.3.1.dev25}/verifiers/v1/harnesses/pi/__init__.py +0 -0
  368. {verifiers-0.3.1.dev23 → verifiers-0.3.1.dev25}/verifiers/v1/harnesses/pi/harness.py +0 -0
  369. {verifiers-0.3.1.dev23 → verifiers-0.3.1.dev25}/verifiers/v1/harnesses/pool/__init__.py +0 -0
  370. {verifiers-0.3.1.dev23 → verifiers-0.3.1.dev25}/verifiers/v1/harnesses/pool/harness.py +0 -0
  371. {verifiers-0.3.1.dev23 → verifiers-0.3.1.dev25}/verifiers/v1/harnesses/rlm/__init__.py +0 -0
  372. {verifiers-0.3.1.dev23 → verifiers-0.3.1.dev25}/verifiers/v1/harnesses/rlm/harness.py +0 -0
  373. {verifiers-0.3.1.dev23 → verifiers-0.3.1.dev25}/verifiers/v1/harnesses/terminus_2/__init__.py +0 -0
  374. {verifiers-0.3.1.dev23 → verifiers-0.3.1.dev25}/verifiers/v1/harnesses/terminus_2/harness.py +0 -0
  375. {verifiers-0.3.1.dev23 → verifiers-0.3.1.dev25}/verifiers/v1/harnesses/terminus_2/program.py +0 -0
  376. {verifiers-0.3.1.dev23 → verifiers-0.3.1.dev25}/verifiers/v1/interception/__init__.py +0 -0
  377. {verifiers-0.3.1.dev23 → verifiers-0.3.1.dev25}/verifiers/v1/interception/base.py +0 -0
  378. {verifiers-0.3.1.dev23 → verifiers-0.3.1.dev25}/verifiers/v1/interception/pool.py +0 -0
  379. {verifiers-0.3.1.dev23 → verifiers-0.3.1.dev25}/verifiers/v1/interception/tunnel/__init__.py +0 -0
  380. {verifiers-0.3.1.dev23 → verifiers-0.3.1.dev25}/verifiers/v1/interception/tunnel/base.py +0 -0
  381. {verifiers-0.3.1.dev23 → verifiers-0.3.1.dev25}/verifiers/v1/interception/tunnel/custom.py +0 -0
  382. {verifiers-0.3.1.dev23 → verifiers-0.3.1.dev25}/verifiers/v1/interception/tunnel/prime.py +0 -0
  383. {verifiers-0.3.1.dev23 → verifiers-0.3.1.dev25}/verifiers/v1/judge.py +0 -0
  384. {verifiers-0.3.1.dev23 → verifiers-0.3.1.dev25}/verifiers/v1/judges/__init__.py +0 -0
  385. {verifiers-0.3.1.dev23 → verifiers-0.3.1.dev25}/verifiers/v1/judges/reference.py +0 -0
  386. {verifiers-0.3.1.dev23 → verifiers-0.3.1.dev25}/verifiers/v1/judges/reference.txt +0 -0
  387. {verifiers-0.3.1.dev23 → verifiers-0.3.1.dev25}/verifiers/v1/judges/rubric.py +0 -0
  388. {verifiers-0.3.1.dev23 → verifiers-0.3.1.dev25}/verifiers/v1/judges/rubric.txt +0 -0
  389. {verifiers-0.3.1.dev23 → verifiers-0.3.1.dev25}/verifiers/v1/mcp/__init__.py +0 -0
  390. {verifiers-0.3.1.dev23 → verifiers-0.3.1.dev25}/verifiers/v1/mcp/server.py +0 -0
  391. {verifiers-0.3.1.dev23 → verifiers-0.3.1.dev25}/verifiers/v1/mcp/toolset.py +0 -0
  392. {verifiers-0.3.1.dev23 → verifiers-0.3.1.dev25}/verifiers/v1/runtimes/limiters.py +0 -0
  393. {verifiers-0.3.1.dev23 → verifiers-0.3.1.dev25}/verifiers/v1/runtimes/modal.py +0 -0
  394. {verifiers-0.3.1.dev23 → verifiers-0.3.1.dev25}/verifiers/v1/serve/__init__.py +0 -0
  395. {verifiers-0.3.1.dev23 → verifiers-0.3.1.dev25}/verifiers/v1/serve/client.py +0 -0
  396. {verifiers-0.3.1.dev23 → verifiers-0.3.1.dev25}/verifiers/v1/serve/encoding.py +0 -0
  397. {verifiers-0.3.1.dev23 → verifiers-0.3.1.dev25}/verifiers/v1/serve/server.py +0 -0
  398. {verifiers-0.3.1.dev23 → verifiers-0.3.1.dev25}/verifiers/v1/serve/types.py +0 -0
  399. {verifiers-0.3.1.dev23 → verifiers-0.3.1.dev25}/verifiers/v1/state.py +0 -0
  400. {verifiers-0.3.1.dev23 → verifiers-0.3.1.dev25}/verifiers/v1/taskset.py +0 -0
  401. {verifiers-0.3.1.dev23 → verifiers-0.3.1.dev25}/verifiers/v1/tasksets/__init__.py +0 -0
  402. {verifiers-0.3.1.dev23 → verifiers-0.3.1.dev25}/verifiers/v1/tasksets/harbor/__init__.py +0 -0
  403. {verifiers-0.3.1.dev23 → verifiers-0.3.1.dev25}/verifiers/v1/tasksets/harbor/env.py +0 -0
  404. {verifiers-0.3.1.dev23 → verifiers-0.3.1.dev25}/verifiers/v1/tasksets/harbor/taskset.py +0 -0
  405. {verifiers-0.3.1.dev23 → verifiers-0.3.1.dev25}/verifiers/v1/tasksets/lean/__init__.py +0 -0
  406. {verifiers-0.3.1.dev23 → verifiers-0.3.1.dev25}/verifiers/v1/tasksets/lean/scoring.py +0 -0
  407. {verifiers-0.3.1.dev23 → verifiers-0.3.1.dev25}/verifiers/v1/tasksets/lean/taskset.py +0 -0
  408. {verifiers-0.3.1.dev23 → verifiers-0.3.1.dev25}/verifiers/v1/tasksets/nemo_gym/__init__.py +0 -0
  409. {verifiers-0.3.1.dev23 → verifiers-0.3.1.dev25}/verifiers/v1/tasksets/nemo_gym/response.py +0 -0
  410. {verifiers-0.3.1.dev23 → verifiers-0.3.1.dev25}/verifiers/v1/tasksets/nemo_gym/server.py +0 -0
  411. {verifiers-0.3.1.dev23 → verifiers-0.3.1.dev25}/verifiers/v1/tasksets/nemo_gym/taskset.py +0 -0
  412. {verifiers-0.3.1.dev23 → verifiers-0.3.1.dev25}/verifiers/v1/tasksets/nemo_gym/toolset.py +0 -0
  413. {verifiers-0.3.1.dev23 → verifiers-0.3.1.dev25}/verifiers/v1/tasksets/openenv/__init__.py +0 -0
  414. {verifiers-0.3.1.dev23 → verifiers-0.3.1.dev25}/verifiers/v1/tasksets/openenv/taskset.py +0 -0
  415. {verifiers-0.3.1.dev23 → verifiers-0.3.1.dev25}/verifiers/v1/tasksets/textarena/__init__.py +0 -0
  416. {verifiers-0.3.1.dev23 → verifiers-0.3.1.dev25}/verifiers/v1/tasksets/textarena/taskset.py +0 -0
  417. {verifiers-0.3.1.dev23 → verifiers-0.3.1.dev25}/verifiers/v1/types.py +0 -0
  418. {verifiers-0.3.1.dev23 → verifiers-0.3.1.dev25}/verifiers/v1/utils/__init__.py +0 -0
  419. {verifiers-0.3.1.dev23 → verifiers-0.3.1.dev25}/verifiers/v1/utils/aio.py +0 -0
  420. {verifiers-0.3.1.dev23 → verifiers-0.3.1.dev25}/verifiers/v1/utils/artifacts.py +0 -0
  421. {verifiers-0.3.1.dev23 → verifiers-0.3.1.dev25}/verifiers/v1/utils/decorators.py +0 -0
  422. {verifiers-0.3.1.dev23 → verifiers-0.3.1.dev25}/verifiers/v1/utils/format.py +0 -0
  423. {verifiers-0.3.1.dev23 → verifiers-0.3.1.dev25}/verifiers/v1/utils/generic.py +0 -0
  424. {verifiers-0.3.1.dev23 → verifiers-0.3.1.dev25}/verifiers/v1/utils/git.py +0 -0
  425. {verifiers-0.3.1.dev23 → verifiers-0.3.1.dev25}/verifiers/v1/utils/image.py +0 -0
  426. {verifiers-0.3.1.dev23 → verifiers-0.3.1.dev25}/verifiers/v1/utils/install.py +0 -0
  427. {verifiers-0.3.1.dev23 → verifiers-0.3.1.dev25}/verifiers/v1/utils/install_utils.py +0 -0
  428. {verifiers-0.3.1.dev23 → verifiers-0.3.1.dev25}/verifiers/v1/utils/interrupt.py +0 -0
  429. {verifiers-0.3.1.dev23 → verifiers-0.3.1.dev25}/verifiers/v1/utils/loaders.py +0 -0
  430. {verifiers-0.3.1.dev23 → verifiers-0.3.1.dev25}/verifiers/v1/utils/logging.py +0 -0
  431. {verifiers-0.3.1.dev23 → verifiers-0.3.1.dev25}/verifiers/v1/utils/memory.py +0 -0
  432. {verifiers-0.3.1.dev23 → verifiers-0.3.1.dev25}/verifiers/v1/utils/paths.py +0 -0
  433. {verifiers-0.3.1.dev23 → verifiers-0.3.1.dev25}/verifiers/v1/utils/platform.py +0 -0
  434. {verifiers-0.3.1.dev23 → verifiers-0.3.1.dev25}/verifiers/v1/utils/prime_config.py +0 -0
  435. {verifiers-0.3.1.dev23 → verifiers-0.3.1.dev25}/verifiers/v1/utils/retries.py +0 -0
  436. {verifiers-0.3.1.dev23 → verifiers-0.3.1.dev25}/verifiers/v1/utils/score.py +0 -0
  437. {verifiers-0.3.1.dev23 → verifiers-0.3.1.dev25}/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.dev23
3
+ Version: 0.3.1.dev25
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
@@ -81,6 +81,7 @@ from verifiers.v1.trace import (
81
81
  Error,
82
82
  EvalRunInfo,
83
83
  ModelCall,
84
+ PolicyEvent,
84
85
  Reward,
85
86
  RunInfo,
86
87
  TimeSpan,
@@ -204,6 +205,7 @@ __all__ = [ # noqa: RUF022 - grouped by public API area
204
205
  "RunInfo",
205
206
  "EvalRunInfo",
206
207
  "ModelCall",
208
+ "PolicyEvent",
207
209
  "TrainRunInfo",
208
210
  "VersionInfo",
209
211
  "State",
@@ -19,13 +19,13 @@ from verifiers.v1.clients import (
19
19
  ModelContext,
20
20
  )
21
21
  from verifiers.v1.configs.agent import AgentConfig, TimeoutConfig
22
+ from verifiers.v1.configs.runtime import NetworkPolicyConfig
22
23
  from verifiers.v1.dialects import parse_message
23
24
  from verifiers.v1.harness import Harness
24
25
  from verifiers.v1.interception import Interception, InterceptionServer
25
26
  from verifiers.v1.mcp import SharedToolServer
26
27
  from verifiers.v1.rollout import Rollout, RolloutTimeouts
27
28
  from verifiers.v1.runtimes import (
28
- NetworkPolicyConfig,
29
29
  Runtime,
30
30
  RuntimeConfig,
31
31
  SubprocessConfig,
@@ -33,14 +33,14 @@ class Client(ABC):
33
33
  self,
34
34
  dialect: Dialect,
35
35
  body: dict,
36
- model: str,
37
- sampling_args: SamplingConfig,
36
+ sampling: SamplingConfig,
38
37
  session_id: str | None = None,
39
38
  turn: PendingTurn | None = None,
40
39
  headers: Mapping[str, str] | None = None,
41
40
  ) -> Response:
42
- """Run one completion -> a vf `Response`. The eval client forwards the native JSON
43
- and parses a copy via `dialect`; the train client renders `body` to token ids.
41
+ """Run one completion -> a vf `Response`. `body` is the final effective native
42
+ request after overrides and policy mediation: the eval client forwards it unchanged,
43
+ while the train client renders it to token ids using the resolved `sampling` config.
44
44
  `session_id` is the rollout's trace id (sent as `SESSION_ID_HEADER`); `turn` is the
45
45
  graph-resolved prompt prefix, used by train clients for renderer bridging."""
46
46
 
@@ -48,14 +48,11 @@ class Client(ABC):
48
48
  self,
49
49
  dialect: Dialect,
50
50
  body: dict,
51
- model: str,
52
- sampling_args: SamplingConfig,
53
51
  session_id: str | None = None,
54
52
  headers: Mapping[str, str] | None = None,
55
53
  ) -> RelayReply:
56
- """Stream a (possibly SSE) response back, relaying the provider's bytes — the proxy's
57
- path for a streaming request. Only the relay (eval) client supports it; the renderer
58
- generates and cannot stream."""
54
+ """Stream a response for the final effective `body`, relaying the provider's bytes.
55
+ Only the relay (eval) client supports it; the renderer generates and cannot stream."""
59
56
  raise NotImplementedError(f"{type(self).__name__} does not support streaming")
60
57
 
61
58
  async def relay_aux(
@@ -70,15 +70,14 @@ class EvalClient(Client):
70
70
  self,
71
71
  dialect: Dialect,
72
72
  body: dict,
73
- model: str,
74
- sampling_args: SamplingConfig,
73
+ sampling: SamplingConfig,
75
74
  session_id: str | None = None,
76
75
  turn: PendingTurn | None = None,
77
76
  headers: Mapping[str, str] | None = None,
78
77
  ) -> Response:
79
78
  resp = await self._request(
80
79
  join_url(self.base_url, dialect.upstream_path),
81
- dialect.apply_overrides(body, model, sampling_args),
80
+ body,
82
81
  self._headers(dialect, headers, session_id),
83
82
  )
84
83
  # A corrupted response (e.g. an HTML error page or a truncated body on a
@@ -164,8 +163,6 @@ class EvalClient(Client):
164
163
  self,
165
164
  dialect: Dialect,
166
165
  body: dict,
167
- model: str,
168
- sampling_args: SamplingConfig,
169
166
  session_id: str | None = None,
170
167
  headers: Mapping[str, str] | None = None,
171
168
  ) -> RelayReply:
@@ -173,7 +170,7 @@ class EvalClient(Client):
173
170
  # between them. Error responses are mapped before any event is handed back.
174
171
  resp = await self._request(
175
172
  join_url(self.base_url, dialect.upstream_path),
176
- dialect.apply_overrides(body, model, sampling_args),
173
+ body,
177
174
  self._headers(dialect, headers, session_id),
178
175
  stream=True,
179
176
  )
@@ -319,8 +319,7 @@ class TrainClient(Client):
319
319
  self,
320
320
  dialect: Dialect,
321
321
  body: dict,
322
- model: str,
323
- sampling_args: SamplingConfig,
322
+ sampling: SamplingConfig,
324
323
  session_id: str | None = None,
325
324
  turn: PendingTurn | None = None,
326
325
  headers: Mapping[str, str] | None = None,
@@ -353,7 +352,8 @@ class TrainClient(Client):
353
352
  prompt_ids: list[int] | None = None
354
353
  multi_modal_data = None
355
354
  prompt_attribution: RenderedTokens | None = None
356
- raw_sampling = sampling_args.model_dump(exclude_none=True)
355
+ model = body["model"]
356
+ raw_sampling = sampling.model_dump(exclude_none=True)
357
357
  sampling_params: dict[str, Any] = dict(
358
358
  raw_sampling.pop("extra_body", None) or {}
359
359
  )
@@ -0,0 +1,66 @@
1
+ """Shared configuration for execution-time network policy."""
2
+
3
+ from fnmatch import fnmatchcase
4
+ from typing import Self
5
+ from urllib.parse import urlsplit
6
+
7
+ from pydantic import Field, model_validator
8
+ from pydantic_config import BaseConfig
9
+
10
+
11
+ def network_rule_matches(rule: str, scheme: str, host: str, port: int) -> bool:
12
+ """Match a network-policy host pattern or URL origin. Paths are ignored."""
13
+ value = rule.lower().rstrip("/")
14
+ try:
15
+ parsed = urlsplit(value if "://" in value else f"//{value}")
16
+ rule_port = parsed.port
17
+ except ValueError:
18
+ return False
19
+ pattern = (parsed.hostname or "").rstrip(".")
20
+ if not pattern or (parsed.scheme and parsed.scheme != scheme):
21
+ return False
22
+ if parsed.scheme and rule_port is None:
23
+ rule_port = 443 if parsed.scheme == "https" else 80
24
+ if rule_port is not None and rule_port != port:
25
+ return False
26
+ host = host.lower().rstrip(".")
27
+ return fnmatchcase(host, pattern) or (
28
+ pattern.startswith("*.") and host == pattern[2:]
29
+ )
30
+
31
+
32
+ class NetworkPolicyConfig(BaseConfig):
33
+ """Shared execution-time policy surface for runtimes that support it."""
34
+
35
+ allow: list[str] = Field(default_factory=lambda: ["*"])
36
+ """Destinations allowed during execution; `*` is unrestricted and `[]` is
37
+ framework-only."""
38
+ block: list[str] = Field(default_factory=list)
39
+ """Destinations denied during execution; any `*` makes the policy framework-only."""
40
+
41
+ @model_validator(mode="after")
42
+ def validate_network_policy(self) -> Self:
43
+ if not self.allow or "*" in self.block:
44
+ # Empty allowlists and wildcard blocks both mean framework-only access.
45
+ self.allow = []
46
+ self.block = ["*"]
47
+ elif self.allow != ["*"] and self.block:
48
+ raise ValueError(
49
+ "non-empty concrete allow and block egress lists are mutually exclusive"
50
+ )
51
+ return self
52
+
53
+ @property
54
+ def network_restricted(self) -> bool:
55
+ return "*" not in self.allow or bool(self.block)
56
+
57
+ def with_task_network_policy(self, allow: list[str], block: list[str]) -> Self:
58
+ values = self.model_dump()
59
+ if "*" in allow:
60
+ allow = self.allow
61
+ elif "*" not in self.allow:
62
+ # Rules are opaque: guessing overlap between different globs could widen the policy.
63
+ runtime_allow = set(self.allow)
64
+ allow = [rule for rule in allow if rule in runtime_allow]
65
+ block = list(dict.fromkeys([*block, *self.block]))
66
+ return type(self).model_validate({**values, "allow": allow, "block": block})
@@ -7,13 +7,22 @@ trace. `count_tokens` is relayed as native JSON (an `aux_route`), never recorded
7
7
  """
8
8
 
9
9
  import json
10
+ import re
10
11
  from collections.abc import Callable, Mapping
11
12
  from dataclasses import dataclass, field
13
+ from typing import cast
12
14
 
13
15
  from anthropic.types import Message as AnthropicMessage
16
+ from anthropic.types import MessageCreateParams
14
17
  from anthropic.types import Usage as AnthropicUsage
15
18
 
16
- from verifiers.v1.dialects.base import Dialect, StreamParser, parse_sse_event
19
+ from verifiers.v1.dialects.base import (
20
+ Dialect,
21
+ StreamParser,
22
+ append_user_notice,
23
+ blocked_url,
24
+ parse_sse_event,
25
+ )
17
26
  from verifiers.v1.types import (
18
27
  AssistantMessage,
19
28
  ContentPart,
@@ -42,6 +51,54 @@ STOP_REASONS = {
42
51
  }
43
52
  # Claude may reorder mixed thinking block types between a response and its replay.
44
53
  THINKING = ("redacted_thinking", "thinking")
54
+ # These versioned tool families return calls to the harness; every other typed tool may execute
55
+ # at the provider. Anchoring the pattern keeps new versions client-side without treating an
56
+ # arbitrary dated provider tool as safe.
57
+ _CLIENT_TOOL_TYPE = re.compile(r"(?:bash|text_editor|computer|memory)_\d{8}").fullmatch
58
+ _CONTENT_WRAPPERS = (
59
+ "tool_result",
60
+ "code_execution_tool_result",
61
+ "bash_code_execution_tool_result",
62
+ "text_editor_code_execution_tool_result",
63
+ "web_search_tool_result",
64
+ "web_fetch_tool_result",
65
+ "tool_search_tool_result",
66
+ "mcp_tool_result",
67
+ "advisor_tool_result",
68
+ "code_execution_result",
69
+ "bash_code_execution_result",
70
+ "encrypted_code_execution_result",
71
+ "web_fetch_result",
72
+ )
73
+ _SAFE_CONTENT_TYPES = (
74
+ "text",
75
+ "image",
76
+ "document",
77
+ "tool_reference",
78
+ "thinking",
79
+ "redacted_thinking",
80
+ "tool_use",
81
+ "search_result",
82
+ "server_tool_use",
83
+ "mid_conv_system",
84
+ "compaction",
85
+ "fallback",
86
+ "mcp_tool_use",
87
+ "web_search_result",
88
+ "web_search_tool_result_error",
89
+ "web_fetch_tool_result_error",
90
+ "tool_search_tool_search_result",
91
+ "tool_search_tool_result_error",
92
+ "code_execution_tool_result_error",
93
+ "bash_code_execution_tool_result_error",
94
+ "text_editor_code_execution_tool_result_error",
95
+ "text_editor_code_execution_create_result",
96
+ "text_editor_code_execution_str_replace_result",
97
+ "text_editor_code_execution_view_result",
98
+ "advisor_result",
99
+ "advisor_redacted_result",
100
+ "advisor_tool_result_error",
101
+ )
45
102
 
46
103
 
47
104
  def parse_content(content) -> str | list[ContentPart]:
@@ -68,6 +125,79 @@ def parse_content(content) -> str | list[ContentPart]:
68
125
  return parts
69
126
 
70
127
 
128
+ def blocked_content_path(value, path: str) -> str | None:
129
+ if isinstance(value, list):
130
+ for index, item in enumerate(value):
131
+ if blocked := blocked_content_path(item, f"{path}[{index}]"):
132
+ return blocked
133
+ return None
134
+ if not isinstance(value, dict):
135
+ return None
136
+
137
+ kind = value.get("type")
138
+ caller = value.get("caller")
139
+ if caller is not None and not (
140
+ isinstance(caller, dict) and caller.get("type") == "direct"
141
+ ):
142
+ return f"{path}.caller.type"
143
+ if kind in ("image", "document"):
144
+ source_path = f"{path}.source"
145
+ source = value.get("source") or {}
146
+ if not isinstance(source, dict):
147
+ return source_path
148
+ source_kind = source.get("type")
149
+ if source_kind == "content":
150
+ return blocked_content_path(source.get("content"), f"{source_path}.content")
151
+ if source_kind == "url":
152
+ url = source.get("url")
153
+ if not isinstance(url, str) or blocked_url(url):
154
+ return f"{source_path}.url"
155
+ if source_kind == "file":
156
+ return (
157
+ f"{source_path}.file_id"
158
+ if source.get("file_id")
159
+ else f"{source_path}.type"
160
+ )
161
+ if source_kind not in ("base64", "text", "url"):
162
+ return f"{source_path}.type"
163
+
164
+ if kind in (
165
+ "container_upload",
166
+ "code_execution_output",
167
+ "bash_code_execution_output",
168
+ ) and value.get("file_id"):
169
+ return f"{path}.file_id"
170
+ if kind in _CONTENT_WRAPPERS:
171
+ return blocked_content_path(value.get("content"), f"{path}.content")
172
+ return None if kind in _SAFE_CONTENT_TYPES else f"{path}.type"
173
+
174
+
175
+ def mediate_content(value, path: str):
176
+ if not isinstance(value, list):
177
+ blocked = blocked_content_path(value, path)
178
+ return ("", [blocked]) if blocked else (value, [])
179
+
180
+ mediated = []
181
+ capabilities = []
182
+ for index, block in enumerate(value):
183
+ item_path = f"{path}[{index}]"
184
+ if isinstance(block, dict) and block.get("type") in _CONTENT_WRAPPERS:
185
+ if blocked := blocked_content_path({**block, "content": []}, item_path):
186
+ capabilities.append(blocked)
187
+ continue
188
+ content, removed = mediate_content(
189
+ block.get("content"), f"{item_path}.content"
190
+ )
191
+ if removed:
192
+ block["content"] = content or ""
193
+ capabilities.extend(removed)
194
+ elif blocked := blocked_content_path(block, item_path):
195
+ capabilities.append(blocked)
196
+ continue
197
+ mediated.append(block)
198
+ return mediated, capabilities
199
+
200
+
71
201
  def parse_messages(body: dict) -> Messages:
72
202
  """The request's top-level `system` + `messages` -> typed messages. Assistant turns fold
73
203
  their blocks into one message (thinking -> reasoning, tool_use -> tool calls); a user turn's
@@ -265,7 +395,7 @@ class ModdedAnthropicMessage(AnthropicMessage):
265
395
  usage: ModdedUsage # type: ignore[assignment]
266
396
 
267
397
 
268
- class AnthropicDialect(Dialect[dict, AnthropicMessage]):
398
+ class AnthropicDialect(Dialect[MessageCreateParams, AnthropicMessage]):
269
399
  sampling_fields = frozenset(
270
400
  {
271
401
  "temperature",
@@ -283,6 +413,73 @@ class AnthropicDialect(Dialect[dict, AnthropicMessage]):
283
413
  upstream_path = "/v1/messages"
284
414
  response_type = ModdedAnthropicMessage
285
415
 
416
+ def mediate_external_capabilities(
417
+ self, body: MessageCreateParams
418
+ ) -> tuple[MessageCreateParams, list[str]]:
419
+ mediated = body
420
+ capabilities: list[str] = []
421
+
422
+ for key in ("container", "mcp_servers"):
423
+ if mediated.pop(key, None):
424
+ capabilities.append(key)
425
+
426
+ system, removed = mediate_content(mediated.get("system"), "system")
427
+ capabilities.extend(removed)
428
+ if removed:
429
+ if system:
430
+ mediated["system"] = system
431
+ else:
432
+ mediated.pop("system")
433
+
434
+ for message_index, message in enumerate(mediated.get("messages") or []):
435
+ if not isinstance(message, dict):
436
+ continue
437
+ content, removed = mediate_content(
438
+ message.get("content"), f"messages[{message_index}].content"
439
+ )
440
+ capabilities.extend(removed)
441
+ if removed:
442
+ message["content"] = content or ""
443
+
444
+ raw_tools = mediated.get("tools")
445
+ tool_items = raw_tools if isinstance(raw_tools, list) else []
446
+ if raw_tools is not None and not isinstance(raw_tools, list):
447
+ capabilities.append("tools")
448
+ tools = []
449
+ for index, tool in enumerate(tool_items):
450
+ kind = tool.get("type") if isinstance(tool, dict) else None
451
+ if isinstance(tool, dict) and (
452
+ (isinstance(kind, str) and _CLIENT_TOOL_TYPE(kind))
453
+ or (kind in (None, "custom") and "input_schema" in tool)
454
+ ):
455
+ tools.append(tool)
456
+ continue
457
+ capabilities.append(f"tools[{index}].type")
458
+ if "tools" in mediated:
459
+ mediated["tools"] = tools
460
+
461
+ choice = mediated.get("tool_choice")
462
+ valid_choice = choice is None
463
+ if isinstance(choice, dict):
464
+ kind = choice.get("type")
465
+ valid_choice = (
466
+ kind == "none"
467
+ or bool(tools)
468
+ and (
469
+ kind in ("auto", "any")
470
+ or kind == "tool"
471
+ and any(tool.get("name") == choice.get("name") for tool in tools)
472
+ )
473
+ )
474
+ if not valid_choice:
475
+ capabilities.append(
476
+ "tool_choice.type" if isinstance(choice, dict) else "tool_choice"
477
+ )
478
+ mediated.pop("tool_choice", None)
479
+
480
+ append_user_notice(mediated.setdefault("messages", []))
481
+ return mediated, capabilities
482
+
286
483
  def auth_headers(self, api_key: str) -> dict[str, str]:
287
484
  return {"x-api-key": api_key, "anthropic-version": "2023-06-01"}
288
485
 
@@ -296,7 +493,9 @@ class AnthropicDialect(Dialect[dict, AnthropicMessage]):
296
493
  "error": {"type": "invalid_request_error", "message": message},
297
494
  }
298
495
 
299
- def parse_request(self, body: dict) -> tuple[Messages, list[Tool] | None]:
496
+ def parse_request(
497
+ self, body: MessageCreateParams
498
+ ) -> tuple[Messages, list[Tool] | None]:
300
499
  tools = [
301
500
  Tool(
302
501
  name=t["name"],
@@ -314,7 +513,7 @@ class AnthropicDialect(Dialect[dict, AnthropicMessage]):
314
513
  def stream_parser(self) -> StreamParser:
315
514
  return AnthropicStreamParser(self.validate_response)
316
515
 
317
- def parse_sampling(self, body: dict) -> Sampling:
516
+ def parse_sampling(self, body: MessageCreateParams) -> Sampling:
318
517
  settings = {k: v for k, v in body.items() if k in self.sampling_fields}
319
518
  # Lift `output_config.effort` (where `apply_overrides` puts the eval's
320
519
  # reasoning effort) onto the typed knob; keep any other output-config keys.
@@ -328,7 +527,9 @@ class AnthropicDialect(Dialect[dict, AnthropicMessage]):
328
527
  settings.pop("output_config")
329
528
  return Sampling.model_validate(settings)
330
529
 
331
- def apply_overrides(self, body: dict, model: str, sampling: SamplingConfig) -> dict:
530
+ def apply_overrides(
531
+ self, body: MessageCreateParams, model: str, sampling: SamplingConfig
532
+ ) -> MessageCreateParams:
332
533
  # Preserve native fields except the eval's model + sampling. `temperature`/`top_p` are
333
534
  # authoritative (always dropped, the eval's applied if set); `max_tokens` is required by
334
535
  # the API, so the program's is kept unless the eval sets one.
@@ -350,4 +551,4 @@ class AnthropicDialect(Dialect[dict, AnthropicMessage]):
350
551
  for k, v in body.items()
351
552
  if k not in ("temperature", "top_p") and k not in overrides
352
553
  }
353
- return {**steered, **overrides}
554
+ return cast(MessageCreateParams, {**steered, **overrides})
@@ -27,6 +27,45 @@ RespT = TypeVar("RespT", bound=BaseModel)
27
27
 
28
28
  logger = logging.getLogger(__name__)
29
29
 
30
+ PROVIDER_CAPABILITY_POLICY_CODE = "provider_capability_unavailable"
31
+ CAPABILITY_NOTICE = (
32
+ "Network protocol blocked fetching a resource. Continue without those capabilities; "
33
+ "use local tools or inline data already present in the conversation, and do not retry "
34
+ "the blocked provider-side operation."
35
+ )
36
+
37
+
38
+ def blocked_url(value: str) -> bool:
39
+ """Whether a provider-resolved resource is not inline data."""
40
+ return not value.lower().startswith("data:")
41
+
42
+
43
+ def append_user_notice(
44
+ messages: list,
45
+ *,
46
+ text_type: str = "text",
47
+ message_type: str | None = None,
48
+ ) -> None:
49
+ """Add stable restricted-network context to the earliest user input."""
50
+ part = {"type": text_type, "text": CAPABILITY_NOTICE}
51
+ for message in messages:
52
+ if not isinstance(message, dict) or message.get("role") != "user":
53
+ continue
54
+ content = message.get("content")
55
+ if isinstance(content, list):
56
+ message["content"] = [*content, part]
57
+ elif isinstance(content, str):
58
+ message["content"] = (
59
+ f"{content}\n\n{CAPABILITY_NOTICE}" if content else CAPABILITY_NOTICE
60
+ )
61
+ else:
62
+ message["content"] = [part]
63
+ return
64
+ message = {"role": "user", "content": [part]}
65
+ if message_type is not None:
66
+ message["type"] = message_type
67
+ messages.append(message)
68
+
30
69
 
31
70
  def is_sse_done_event(raw: bytes) -> bool:
32
71
  """Whether one complete SSE event carries the DONE sentinel."""
@@ -147,6 +186,12 @@ class Dialect(ABC, Generic[ReqT, RespT]):
147
186
  """An error payload in this format's error shape (OpenAI by default)."""
148
187
  return {"error": {"message": message, "type": "invalid_request_error"}}
149
188
 
189
+ @abstractmethod
190
+ def mediate_external_capabilities(self, body: ReqT) -> tuple[ReqT, list[str]]:
191
+ """Remove provider-side capabilities during restricted execution. Implementations add
192
+ the same policy context on every call because the agent does not retain injected request
193
+ content. Returned paths never contain request values."""
194
+
150
195
  @abstractmethod
151
196
  def parse_request(self, body: ReqT) -> tuple[Messages, list[Tool] | None]:
152
197
  """The native request -> vf prompt + tools (for the trace)."""
@@ -174,5 +219,5 @@ class Dialect(ABC, Generic[ReqT, RespT]):
174
219
  @abstractmethod
175
220
  def apply_overrides(self, body: ReqT, model: str, sampling: SamplingConfig) -> ReqT:
176
221
  """Return `body` with the eval's `model` + `sampling` imposed in this protocol's shape —
177
- the only field mutation the proxy makes to the native JSON object. Model overlays;
178
- sampling is authoritative (the program's sampling keys are dropped, the eval's applied)."""
222
+ model overlays; sampling is authoritative (the program's sampling keys are dropped, the
223
+ eval's applied). Capability mediation may subsequently remove restricted fields."""