verifiers 0.2.2.dev42__tar.gz → 0.2.2.dev43__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 (422) hide show
  1. {verifiers-0.2.2.dev42 → verifiers-0.2.2.dev43}/PKG-INFO +1 -1
  2. {verifiers-0.2.2.dev42 → verifiers-0.2.2.dev43}/tests/v1/conftest.py +3 -4
  3. {verifiers-0.2.2.dev42 → verifiers-0.2.2.dev43}/verifiers/v1/__init__.py +12 -7
  4. {verifiers-0.2.2.dev42 → verifiers-0.2.2.dev43}/verifiers/v1/agent.py +9 -8
  5. {verifiers-0.2.2.dev42 → verifiers-0.2.2.dev43}/verifiers/v1/cli/dashboard/eval.py +1 -1
  6. {verifiers-0.2.2.dev42 → verifiers-0.2.2.dev43}/verifiers/v1/cli/eval/main.py +9 -7
  7. {verifiers-0.2.2.dev42 → verifiers-0.2.2.dev43}/verifiers/v1/cli/eval/runner.py +12 -7
  8. {verifiers-0.2.2.dev42 → verifiers-0.2.2.dev43}/verifiers/v1/cli/serve.py +17 -14
  9. verifiers-0.2.2.dev43/verifiers/v1/configs/cli/env.py +60 -0
  10. {verifiers-0.2.2.dev42 → verifiers-0.2.2.dev43}/verifiers/v1/configs/cli/eval.py +66 -6
  11. verifiers-0.2.2.dev43/verifiers/v1/configs/cli/serve.py +62 -0
  12. {verifiers-0.2.2.dev42 → verifiers-0.2.2.dev43}/verifiers/v1/configs/env.py +11 -4
  13. verifiers-0.2.2.dev43/verifiers/v1/configs/legacy.py +24 -0
  14. verifiers-0.2.2.dev43/verifiers/v1/configs/serve.py +63 -0
  15. {verifiers-0.2.2.dev42 → verifiers-0.2.2.dev43}/verifiers/v1/env.py +24 -16
  16. {verifiers-0.2.2.dev42 → verifiers-0.2.2.dev43}/verifiers/v1/gepa/config.py +3 -3
  17. {verifiers-0.2.2.dev42 → verifiers-0.2.2.dev43}/verifiers/v1/legacy.py +12 -6
  18. {verifiers-0.2.2.dev42 → verifiers-0.2.2.dev43}/verifiers/v1/push.py +1 -1
  19. {verifiers-0.2.2.dev42 → verifiers-0.2.2.dev43}/verifiers/v1/serve/pool.py +8 -6
  20. {verifiers-0.2.2.dev42 → verifiers-0.2.2.dev43}/verifiers/v1/serve/server.py +8 -6
  21. verifiers-0.2.2.dev42/verifiers/v1/configs/cli/env.py +0 -167
  22. verifiers-0.2.2.dev42/verifiers/v1/configs/cli/serve.py +0 -16
  23. {verifiers-0.2.2.dev42 → verifiers-0.2.2.dev43}/.gitignore +0 -0
  24. {verifiers-0.2.2.dev42 → verifiers-0.2.2.dev43}/LICENSE +0 -0
  25. {verifiers-0.2.2.dev42 → verifiers-0.2.2.dev43}/README.md +0 -0
  26. {verifiers-0.2.2.dev42 → verifiers-0.2.2.dev43}/pyproject.toml +0 -0
  27. {verifiers-0.2.2.dev42 → verifiers-0.2.2.dev43}/tests/__init__.py +0 -0
  28. {verifiers-0.2.2.dev42 → verifiers-0.2.2.dev43}/tests/conftest.py +0 -0
  29. {verifiers-0.2.2.dev42 → verifiers-0.2.2.dev43}/tests/test_browser_env.py +0 -0
  30. {verifiers-0.2.2.dev42 → verifiers-0.2.2.dev43}/tests/test_build_script.py +0 -0
  31. {verifiers-0.2.2.dev42 → verifiers-0.2.2.dev43}/tests/test_cli_agent_env.py +0 -0
  32. {verifiers-0.2.2.dev42 → verifiers-0.2.2.dev43}/tests/test_client_auth_errors.py +0 -0
  33. {verifiers-0.2.2.dev42 → verifiers-0.2.2.dev43}/tests/test_client_config.py +0 -0
  34. {verifiers-0.2.2.dev42 → verifiers-0.2.2.dev43}/tests/test_client_multimodal_types.py +0 -0
  35. {verifiers-0.2.2.dev42 → verifiers-0.2.2.dev43}/tests/test_composable_env.py +0 -0
  36. {verifiers-0.2.2.dev42 → verifiers-0.2.2.dev43}/tests/test_context_token_metrics.py +0 -0
  37. {verifiers-0.2.2.dev42 → verifiers-0.2.2.dev43}/tests/test_decorator_ranks.py +0 -0
  38. {verifiers-0.2.2.dev42 → verifiers-0.2.2.dev43}/tests/test_endpoint_registry.py +0 -0
  39. {verifiers-0.2.2.dev42 → verifiers-0.2.2.dev43}/tests/test_env_group.py +0 -0
  40. {verifiers-0.2.2.dev42 → verifiers-0.2.2.dev43}/tests/test_env_server.py +0 -0
  41. {verifiers-0.2.2.dev42 → verifiers-0.2.2.dev43}/tests/test_environment.py +0 -0
  42. {verifiers-0.2.2.dev42 → verifiers-0.2.2.dev43}/tests/test_environment_extra.py +0 -0
  43. {verifiers-0.2.2.dev42 → verifiers-0.2.2.dev43}/tests/test_error_chain.py +0 -0
  44. {verifiers-0.2.2.dev42 → verifiers-0.2.2.dev43}/tests/test_eval_display.py +0 -0
  45. {verifiers-0.2.2.dev42 → verifiers-0.2.2.dev43}/tests/test_eval_utils.py +0 -0
  46. {verifiers-0.2.2.dev42 → verifiers-0.2.2.dev43}/tests/test_gepa_cli.py +0 -0
  47. {verifiers-0.2.2.dev42 → verifiers-0.2.2.dev43}/tests/test_gepa_utils.py +0 -0
  48. {verifiers-0.2.2.dev42 → verifiers-0.2.2.dev43}/tests/test_gym_env.py +0 -0
  49. {verifiers-0.2.2.dev42 → verifiers-0.2.2.dev43}/tests/test_harbor_env_mcp.py +0 -0
  50. {verifiers-0.2.2.dev42 → verifiers-0.2.2.dev43}/tests/test_imports.py +0 -0
  51. {verifiers-0.2.2.dev42 → verifiers-0.2.2.dev43}/tests/test_init_script.py +0 -0
  52. {verifiers-0.2.2.dev42 → verifiers-0.2.2.dev43}/tests/test_install_utils.py +0 -0
  53. {verifiers-0.2.2.dev42 → verifiers-0.2.2.dev43}/tests/test_interception_utils.py +0 -0
  54. {verifiers-0.2.2.dev42 → verifiers-0.2.2.dev43}/tests/test_logging.py +0 -0
  55. {verifiers-0.2.2.dev42 → verifiers-0.2.2.dev43}/tests/test_math_rubric.py +0 -0
  56. {verifiers-0.2.2.dev42 → verifiers-0.2.2.dev43}/tests/test_maybe_think_parser.py +0 -0
  57. {verifiers-0.2.2.dev42 → verifiers-0.2.2.dev43}/tests/test_message_utils.py +0 -0
  58. {verifiers-0.2.2.dev42 → verifiers-0.2.2.dev43}/tests/test_message_utils_multimodal.py +0 -0
  59. {verifiers-0.2.2.dev42 → verifiers-0.2.2.dev43}/tests/test_multiturn_env.py +0 -0
  60. {verifiers-0.2.2.dev42 → verifiers-0.2.2.dev43}/tests/test_nemorl_client.py +0 -0
  61. {verifiers-0.2.2.dev42 → verifiers-0.2.2.dev43}/tests/test_openai_chat_completions_token_client.py +0 -0
  62. {verifiers-0.2.2.dev42 → verifiers-0.2.2.dev43}/tests/test_openai_responses_client.py +0 -0
  63. {verifiers-0.2.2.dev42 → verifiers-0.2.2.dev43}/tests/test_opencode_rlm_env.py +0 -0
  64. {verifiers-0.2.2.dev42 → verifiers-0.2.2.dev43}/tests/test_openenv_client.py +0 -0
  65. {verifiers-0.2.2.dev42 → verifiers-0.2.2.dev43}/tests/test_parser.py +0 -0
  66. {verifiers-0.2.2.dev42 → verifiers-0.2.2.dev43}/tests/test_path_utils.py +0 -0
  67. {verifiers-0.2.2.dev42 → verifiers-0.2.2.dev43}/tests/test_per_turn_timing.py +0 -0
  68. {verifiers-0.2.2.dev42 → verifiers-0.2.2.dev43}/tests/test_pricing_utils.py +0 -0
  69. {verifiers-0.2.2.dev42 → verifiers-0.2.2.dev43}/tests/test_prime_plugin.py +0 -0
  70. {verifiers-0.2.2.dev42 → verifiers-0.2.2.dev43}/tests/test_renderer_client.py +0 -0
  71. {verifiers-0.2.2.dev42 → verifiers-0.2.2.dev43}/tests/test_renderer_e2e.py +0 -0
  72. {verifiers-0.2.2.dev42 → verifiers-0.2.2.dev43}/tests/test_rlm_composable_env.py +0 -0
  73. {verifiers-0.2.2.dev42 → verifiers-0.2.2.dev43}/tests/test_rubric.py +0 -0
  74. {verifiers-0.2.2.dev42 → verifiers-0.2.2.dev43}/tests/test_rubric_group.py +0 -0
  75. {verifiers-0.2.2.dev42 → verifiers-0.2.2.dev43}/tests/test_sandbox_debug_env.py +0 -0
  76. {verifiers-0.2.2.dev42 → verifiers-0.2.2.dev43}/tests/test_sandbox_env.py +0 -0
  77. {verifiers-0.2.2.dev42 → verifiers-0.2.2.dev43}/tests/test_sandbox_mixin.py +0 -0
  78. {verifiers-0.2.2.dev42 → verifiers-0.2.2.dev43}/tests/test_save_utils.py +0 -0
  79. {verifiers-0.2.2.dev42 → verifiers-0.2.2.dev43}/tests/test_setup_script.py +0 -0
  80. {verifiers-0.2.2.dev42 → verifiers-0.2.2.dev43}/tests/test_singleturn_env.py +0 -0
  81. {verifiers-0.2.2.dev42 → verifiers-0.2.2.dev43}/tests/test_stateful_tool_env.py +0 -0
  82. {verifiers-0.2.2.dev42 → verifiers-0.2.2.dev43}/tests/test_think_parser.py +0 -0
  83. {verifiers-0.2.2.dev42 → verifiers-0.2.2.dev43}/tests/test_tool_env.py +0 -0
  84. {verifiers-0.2.2.dev42 → verifiers-0.2.2.dev43}/tests/test_tool_utils.py +0 -0
  85. {verifiers-0.2.2.dev42 → verifiers-0.2.2.dev43}/tests/test_trajectory_processing.py +0 -0
  86. {verifiers-0.2.2.dev42 → verifiers-0.2.2.dev43}/tests/test_tui_info_formatting.py +0 -0
  87. {verifiers-0.2.2.dev42 → verifiers-0.2.2.dev43}/tests/test_types.py +0 -0
  88. {verifiers-0.2.2.dev42 → verifiers-0.2.2.dev43}/tests/test_xml_parser.py +0 -0
  89. {verifiers-0.2.2.dev42 → verifiers-0.2.2.dev43}/tests/v1/fixtures/counter_tool_v1.py +0 -0
  90. {verifiers-0.2.2.dev42 → verifiers-0.2.2.dev43}/tests/v1/fixtures/duet_v1.py +0 -0
  91. {verifiers-0.2.2.dev42 → verifiers-0.2.2.dev43}/tests/v1/fixtures/echo_acp_resume_v1.py +0 -0
  92. {verifiers-0.2.2.dev42 → verifiers-0.2.2.dev43}/tests/v1/fixtures/echo_agentic_v1.py +0 -0
  93. {verifiers-0.2.2.dev42 → verifiers-0.2.2.dev43}/tests/v1/fixtures/echo_multi_v0.py +0 -0
  94. {verifiers-0.2.2.dev42 → verifiers-0.2.2.dev43}/tests/v1/fixtures/echo_tool_v1.py +0 -0
  95. {verifiers-0.2.2.dev42 → verifiers-0.2.2.dev43}/tests/v1/fixtures/echo_user_sim_v1.py +0 -0
  96. {verifiers-0.2.2.dev42 → verifiers-0.2.2.dev43}/tests/v1/fixtures/echo_v0.py +0 -0
  97. {verifiers-0.2.2.dev42 → verifiers-0.2.2.dev43}/tests/v1/fixtures/echo_v1.py +0 -0
  98. {verifiers-0.2.2.dev42 → verifiers-0.2.2.dev43}/tests/v1/fixtures/pyproject.toml +0 -0
  99. {verifiers-0.2.2.dev42 → verifiers-0.2.2.dev43}/tests/v1/fixtures/tool_response_image_v1.py +0 -0
  100. {verifiers-0.2.2.dev42 → verifiers-0.2.2.dev43}/tests/v1/test_color_codeword_tasks.py +0 -0
  101. {verifiers-0.2.2.dev42 → verifiers-0.2.2.dev43}/tests/v1/test_configs.py +0 -0
  102. {verifiers-0.2.2.dev42 → verifiers-0.2.2.dev43}/tests/v1/test_e2e.py +0 -0
  103. {verifiers-0.2.2.dev42 → verifiers-0.2.2.dev43}/tests/v1/test_envs.py +0 -0
  104. {verifiers-0.2.2.dev42 → verifiers-0.2.2.dev43}/tests/v1/test_graph.py +0 -0
  105. {verifiers-0.2.2.dev42 → verifiers-0.2.2.dev43}/tests/v1/test_judges.py +0 -0
  106. {verifiers-0.2.2.dev42 → verifiers-0.2.2.dev43}/tests/v1/test_legacy.py +0 -0
  107. {verifiers-0.2.2.dev42 → verifiers-0.2.2.dev43}/tests/v1/test_scoring.py +0 -0
  108. {verifiers-0.2.2.dev42 → verifiers-0.2.2.dev43}/tests/v1/test_taskset.py +0 -0
  109. {verifiers-0.2.2.dev42 → verifiers-0.2.2.dev43}/tests/v1/test_trace.py +0 -0
  110. {verifiers-0.2.2.dev42 → verifiers-0.2.2.dev43}/verifiers/__init__.py +0 -0
  111. {verifiers-0.2.2.dev42 → verifiers-0.2.2.dev43}/verifiers/cli/__init__.py +0 -0
  112. {verifiers-0.2.2.dev42 → verifiers-0.2.2.dev43}/verifiers/cli/commands/__init__.py +0 -0
  113. {verifiers-0.2.2.dev42 → verifiers-0.2.2.dev43}/verifiers/cli/commands/build.py +0 -0
  114. {verifiers-0.2.2.dev42 → verifiers-0.2.2.dev43}/verifiers/cli/commands/eval.py +0 -0
  115. {verifiers-0.2.2.dev42 → verifiers-0.2.2.dev43}/verifiers/cli/commands/gepa.py +0 -0
  116. {verifiers-0.2.2.dev42 → verifiers-0.2.2.dev43}/verifiers/cli/commands/init.py +0 -0
  117. {verifiers-0.2.2.dev42 → verifiers-0.2.2.dev43}/verifiers/cli/commands/install.py +0 -0
  118. {verifiers-0.2.2.dev42 → verifiers-0.2.2.dev43}/verifiers/cli/commands/setup.py +0 -0
  119. {verifiers-0.2.2.dev42 → verifiers-0.2.2.dev43}/verifiers/cli/plugins/__init__.py +0 -0
  120. {verifiers-0.2.2.dev42 → verifiers-0.2.2.dev43}/verifiers/cli/plugins/prime.py +0 -0
  121. {verifiers-0.2.2.dev42 → verifiers-0.2.2.dev43}/verifiers/cli/tui.py +0 -0
  122. {verifiers-0.2.2.dev42 → verifiers-0.2.2.dev43}/verifiers/clients/__init__.py +0 -0
  123. {verifiers-0.2.2.dev42 → verifiers-0.2.2.dev43}/verifiers/clients/anthropic_messages_client.py +0 -0
  124. {verifiers-0.2.2.dev42 → verifiers-0.2.2.dev43}/verifiers/clients/client.py +0 -0
  125. {verifiers-0.2.2.dev42 → verifiers-0.2.2.dev43}/verifiers/clients/nemorl_chat_completions_client.py +0 -0
  126. {verifiers-0.2.2.dev42 → verifiers-0.2.2.dev43}/verifiers/clients/openai_chat_completions_client.py +0 -0
  127. {verifiers-0.2.2.dev42 → verifiers-0.2.2.dev43}/verifiers/clients/openai_chat_completions_token_client.py +0 -0
  128. {verifiers-0.2.2.dev42 → verifiers-0.2.2.dev43}/verifiers/clients/openai_completions_client.py +0 -0
  129. {verifiers-0.2.2.dev42 → verifiers-0.2.2.dev43}/verifiers/clients/openai_responses_client.py +0 -0
  130. {verifiers-0.2.2.dev42 → verifiers-0.2.2.dev43}/verifiers/clients/renderer_client.py +0 -0
  131. {verifiers-0.2.2.dev42 → verifiers-0.2.2.dev43}/verifiers/decorators.py +0 -0
  132. {verifiers-0.2.2.dev42 → verifiers-0.2.2.dev43}/verifiers/envs/__init__.py +0 -0
  133. {verifiers-0.2.2.dev42 → verifiers-0.2.2.dev43}/verifiers/envs/env_group.py +0 -0
  134. {verifiers-0.2.2.dev42 → verifiers-0.2.2.dev43}/verifiers/envs/environment.py +0 -0
  135. {verifiers-0.2.2.dev42 → verifiers-0.2.2.dev43}/verifiers/envs/experimental/README.md +0 -0
  136. {verifiers-0.2.2.dev42 → verifiers-0.2.2.dev43}/verifiers/envs/experimental/__init__.py +0 -0
  137. {verifiers-0.2.2.dev42 → verifiers-0.2.2.dev43}/verifiers/envs/experimental/cli_agent_env.py +0 -0
  138. {verifiers-0.2.2.dev42 → verifiers-0.2.2.dev43}/verifiers/envs/experimental/composable/README.md +0 -0
  139. {verifiers-0.2.2.dev42 → verifiers-0.2.2.dev43}/verifiers/envs/experimental/composable/__init__.py +0 -0
  140. {verifiers-0.2.2.dev42 → verifiers-0.2.2.dev43}/verifiers/envs/experimental/composable/_filter.py +0 -0
  141. {verifiers-0.2.2.dev42 → verifiers-0.2.2.dev43}/verifiers/envs/experimental/composable/composable_env.py +0 -0
  142. {verifiers-0.2.2.dev42 → verifiers-0.2.2.dev43}/verifiers/envs/experimental/composable/harness.py +0 -0
  143. {verifiers-0.2.2.dev42 → verifiers-0.2.2.dev43}/verifiers/envs/experimental/composable/harnesses/__init__.py +0 -0
  144. {verifiers-0.2.2.dev42 → verifiers-0.2.2.dev43}/verifiers/envs/experimental/composable/harnesses/mini_swe_agent.py +0 -0
  145. {verifiers-0.2.2.dev42 → verifiers-0.2.2.dev43}/verifiers/envs/experimental/composable/harnesses/opencode.py +0 -0
  146. {verifiers-0.2.2.dev42 → verifiers-0.2.2.dev43}/verifiers/envs/experimental/composable/harnesses/prompt.txt +0 -0
  147. {verifiers-0.2.2.dev42 → verifiers-0.2.2.dev43}/verifiers/envs/experimental/composable/harnesses/rlm.py +0 -0
  148. {verifiers-0.2.2.dev42 → verifiers-0.2.2.dev43}/verifiers/envs/experimental/composable/sandbox_debug_env.py +0 -0
  149. {verifiers-0.2.2.dev42 → verifiers-0.2.2.dev43}/verifiers/envs/experimental/composable/swe_debug_env.py +0 -0
  150. {verifiers-0.2.2.dev42 → verifiers-0.2.2.dev43}/verifiers/envs/experimental/composable/task.py +0 -0
  151. {verifiers-0.2.2.dev42 → verifiers-0.2.2.dev43}/verifiers/envs/experimental/composable/tasksets/__init__.py +0 -0
  152. {verifiers-0.2.2.dev42 → verifiers-0.2.2.dev43}/verifiers/envs/experimental/composable/tasksets/cp/__init__.py +0 -0
  153. {verifiers-0.2.2.dev42 → verifiers-0.2.2.dev43}/verifiers/envs/experimental/composable/tasksets/cp/cp_task.py +0 -0
  154. {verifiers-0.2.2.dev42 → verifiers-0.2.2.dev43}/verifiers/envs/experimental/composable/tasksets/cp/test_utils.py +0 -0
  155. {verifiers-0.2.2.dev42 → verifiers-0.2.2.dev43}/verifiers/envs/experimental/composable/tasksets/harbor/__init__.py +0 -0
  156. {verifiers-0.2.2.dev42 → verifiers-0.2.2.dev43}/verifiers/envs/experimental/composable/tasksets/harbor/cli_gym.py +0 -0
  157. {verifiers-0.2.2.dev42 → verifiers-0.2.2.dev43}/verifiers/envs/experimental/composable/tasksets/harbor/harbor.py +0 -0
  158. {verifiers-0.2.2.dev42 → verifiers-0.2.2.dev43}/verifiers/envs/experimental/composable/tasksets/harbor/terminal_lego.py +0 -0
  159. {verifiers-0.2.2.dev42 → verifiers-0.2.2.dev43}/verifiers/envs/experimental/composable/tasksets/math/__init__.py +0 -0
  160. {verifiers-0.2.2.dev42 → verifiers-0.2.2.dev43}/verifiers/envs/experimental/composable/tasksets/math/math_task.py +0 -0
  161. {verifiers-0.2.2.dev42 → verifiers-0.2.2.dev43}/verifiers/envs/experimental/composable/tasksets/swe/README.md +0 -0
  162. {verifiers-0.2.2.dev42 → verifiers-0.2.2.dev43}/verifiers/envs/experimental/composable/tasksets/swe/__init__.py +0 -0
  163. {verifiers-0.2.2.dev42 → verifiers-0.2.2.dev43}/verifiers/envs/experimental/composable/tasksets/swe/multi_swe/__init__.py +0 -0
  164. {verifiers-0.2.2.dev42 → verifiers-0.2.2.dev43}/verifiers/envs/experimental/composable/tasksets/swe/multi_swe/extract_fix_patch.sh +0 -0
  165. {verifiers-0.2.2.dev42 → verifiers-0.2.2.dev43}/verifiers/envs/experimental/composable/tasksets/swe/multi_swe/taskset.py +0 -0
  166. {verifiers-0.2.2.dev42 → verifiers-0.2.2.dev43}/verifiers/envs/experimental/composable/tasksets/swe/openswe/__init__.py +0 -0
  167. {verifiers-0.2.2.dev42 → verifiers-0.2.2.dev43}/verifiers/envs/experimental/composable/tasksets/swe/openswe/taskset.py +0 -0
  168. {verifiers-0.2.2.dev42 → verifiers-0.2.2.dev43}/verifiers/envs/experimental/composable/tasksets/swe/r2e_gym/__init__.py +0 -0
  169. {verifiers-0.2.2.dev42 → verifiers-0.2.2.dev43}/verifiers/envs/experimental/composable/tasksets/swe/r2e_gym/log_parser.py +0 -0
  170. {verifiers-0.2.2.dev42 → verifiers-0.2.2.dev43}/verifiers/envs/experimental/composable/tasksets/swe/r2e_gym/taskset.py +0 -0
  171. {verifiers-0.2.2.dev42 → verifiers-0.2.2.dev43}/verifiers/envs/experimental/composable/tasksets/swe/scale_swe/__init__.py +0 -0
  172. {verifiers-0.2.2.dev42 → verifiers-0.2.2.dev43}/verifiers/envs/experimental/composable/tasksets/swe/scale_swe/taskset.py +0 -0
  173. {verifiers-0.2.2.dev42 → verifiers-0.2.2.dev43}/verifiers/envs/experimental/composable/tasksets/swe/shared/__init__.py +0 -0
  174. {verifiers-0.2.2.dev42 → verifiers-0.2.2.dev43}/verifiers/envs/experimental/composable/tasksets/swe/shared/test_patch.py +0 -0
  175. {verifiers-0.2.2.dev42 → verifiers-0.2.2.dev43}/verifiers/envs/experimental/composable/tasksets/swe/swe_bench/__init__.py +0 -0
  176. {verifiers-0.2.2.dev42 → verifiers-0.2.2.dev43}/verifiers/envs/experimental/composable/tasksets/swe/swe_bench/taskset.py +0 -0
  177. {verifiers-0.2.2.dev42 → verifiers-0.2.2.dev43}/verifiers/envs/experimental/composable/tasksets/swe/swe_lego/__init__.py +0 -0
  178. {verifiers-0.2.2.dev42 → verifiers-0.2.2.dev43}/verifiers/envs/experimental/composable/tasksets/swe/swe_lego/taskset.py +0 -0
  179. {verifiers-0.2.2.dev42 → verifiers-0.2.2.dev43}/verifiers/envs/experimental/composable/tasksets/swe/swe_rebench_v2/__init__.py +0 -0
  180. {verifiers-0.2.2.dev42 → verifiers-0.2.2.dev43}/verifiers/envs/experimental/composable/tasksets/swe/swe_rebench_v2/log_parsers.py +0 -0
  181. {verifiers-0.2.2.dev42 → verifiers-0.2.2.dev43}/verifiers/envs/experimental/composable/tasksets/swe/swe_rebench_v2/taskset.py +0 -0
  182. {verifiers-0.2.2.dev42 → verifiers-0.2.2.dev43}/verifiers/envs/experimental/composable/tasksets/swe/swe_smith/__init__.py +0 -0
  183. {verifiers-0.2.2.dev42 → verifiers-0.2.2.dev43}/verifiers/envs/experimental/composable/tasksets/swe/swe_smith/taskset.py +0 -0
  184. {verifiers-0.2.2.dev42 → verifiers-0.2.2.dev43}/verifiers/envs/experimental/composable/tasksets/swe/swe_tasksets.py +0 -0
  185. {verifiers-0.2.2.dev42 → verifiers-0.2.2.dev43}/verifiers/envs/experimental/gym_env.py +0 -0
  186. {verifiers-0.2.2.dev42 → verifiers-0.2.2.dev43}/verifiers/envs/experimental/harbor_env/__init__.py +0 -0
  187. {verifiers-0.2.2.dev42 → verifiers-0.2.2.dev43}/verifiers/envs/experimental/harbor_env/env.py +0 -0
  188. {verifiers-0.2.2.dev42 → verifiers-0.2.2.dev43}/verifiers/envs/experimental/harbor_env/mcp.py +0 -0
  189. {verifiers-0.2.2.dev42 → verifiers-0.2.2.dev43}/verifiers/envs/experimental/mcp_env.py +0 -0
  190. {verifiers-0.2.2.dev42 → verifiers-0.2.2.dev43}/verifiers/envs/experimental/opencode_env.py +0 -0
  191. {verifiers-0.2.2.dev42 → verifiers-0.2.2.dev43}/verifiers/envs/experimental/opencode_qa_env.py +0 -0
  192. {verifiers-0.2.2.dev42 → verifiers-0.2.2.dev43}/verifiers/envs/experimental/opencode_rlm_env.py +0 -0
  193. {verifiers-0.2.2.dev42 → verifiers-0.2.2.dev43}/verifiers/envs/experimental/sandbox_mixin.py +0 -0
  194. {verifiers-0.2.2.dev42 → verifiers-0.2.2.dev43}/verifiers/envs/experimental/utils/__init__.py +0 -0
  195. {verifiers-0.2.2.dev42 → verifiers-0.2.2.dev43}/verifiers/envs/experimental/utils/file_locks.py +0 -0
  196. {verifiers-0.2.2.dev42 → verifiers-0.2.2.dev43}/verifiers/envs/experimental/utils/git_checkout_cache.py +0 -0
  197. {verifiers-0.2.2.dev42 → verifiers-0.2.2.dev43}/verifiers/envs/integrations/README.md +0 -0
  198. {verifiers-0.2.2.dev42 → verifiers-0.2.2.dev43}/verifiers/envs/integrations/__init__.py +0 -0
  199. {verifiers-0.2.2.dev42 → verifiers-0.2.2.dev43}/verifiers/envs/integrations/browser_env/README.md +0 -0
  200. {verifiers-0.2.2.dev42 → verifiers-0.2.2.dev43}/verifiers/envs/integrations/browser_env/__init__.py +0 -0
  201. {verifiers-0.2.2.dev42 → verifiers-0.2.2.dev43}/verifiers/envs/integrations/browser_env/browser_env.py +0 -0
  202. {verifiers-0.2.2.dev42 → verifiers-0.2.2.dev43}/verifiers/envs/integrations/browser_env/modes/__init__.py +0 -0
  203. {verifiers-0.2.2.dev42 → verifiers-0.2.2.dev43}/verifiers/envs/integrations/browser_env/modes/base.py +0 -0
  204. {verifiers-0.2.2.dev42 → verifiers-0.2.2.dev43}/verifiers/envs/integrations/browser_env/modes/cua_mode.py +0 -0
  205. {verifiers-0.2.2.dev42 → verifiers-0.2.2.dev43}/verifiers/envs/integrations/browser_env/modes/dom_mode.py +0 -0
  206. {verifiers-0.2.2.dev42 → verifiers-0.2.2.dev43}/verifiers/envs/integrations/openenv_env.py +0 -0
  207. {verifiers-0.2.2.dev42 → verifiers-0.2.2.dev43}/verifiers/envs/integrations/reasoninggym_env.py +0 -0
  208. {verifiers-0.2.2.dev42 → verifiers-0.2.2.dev43}/verifiers/envs/integrations/textarena_env.py +0 -0
  209. {verifiers-0.2.2.dev42 → verifiers-0.2.2.dev43}/verifiers/envs/multiturn_env.py +0 -0
  210. {verifiers-0.2.2.dev42 → verifiers-0.2.2.dev43}/verifiers/envs/python_env.py +0 -0
  211. {verifiers-0.2.2.dev42 → verifiers-0.2.2.dev43}/verifiers/envs/sandbox_env.py +0 -0
  212. {verifiers-0.2.2.dev42 → verifiers-0.2.2.dev43}/verifiers/envs/singleturn_env.py +0 -0
  213. {verifiers-0.2.2.dev42 → verifiers-0.2.2.dev43}/verifiers/envs/stateful_tool_env.py +0 -0
  214. {verifiers-0.2.2.dev42 → verifiers-0.2.2.dev43}/verifiers/envs/tool_env.py +0 -0
  215. {verifiers-0.2.2.dev42 → verifiers-0.2.2.dev43}/verifiers/errors.py +0 -0
  216. {verifiers-0.2.2.dev42 → verifiers-0.2.2.dev43}/verifiers/gepa/__init__.py +0 -0
  217. {verifiers-0.2.2.dev42 → verifiers-0.2.2.dev43}/verifiers/gepa/adapter.py +0 -0
  218. {verifiers-0.2.2.dev42 → verifiers-0.2.2.dev43}/verifiers/gepa/config.py +0 -0
  219. {verifiers-0.2.2.dev42 → verifiers-0.2.2.dev43}/verifiers/gepa/display.py +0 -0
  220. {verifiers-0.2.2.dev42 → verifiers-0.2.2.dev43}/verifiers/gepa/gepa_utils.py +0 -0
  221. {verifiers-0.2.2.dev42 → verifiers-0.2.2.dev43}/verifiers/parsers/__init__.py +0 -0
  222. {verifiers-0.2.2.dev42 → verifiers-0.2.2.dev43}/verifiers/parsers/maybe_think_parser.py +0 -0
  223. {verifiers-0.2.2.dev42 → verifiers-0.2.2.dev43}/verifiers/parsers/parser.py +0 -0
  224. {verifiers-0.2.2.dev42 → verifiers-0.2.2.dev43}/verifiers/parsers/think_parser.py +0 -0
  225. {verifiers-0.2.2.dev42 → verifiers-0.2.2.dev43}/verifiers/parsers/xml_parser.py +0 -0
  226. {verifiers-0.2.2.dev42 → verifiers-0.2.2.dev43}/verifiers/rubrics/__init__.py +0 -0
  227. {verifiers-0.2.2.dev42 → verifiers-0.2.2.dev43}/verifiers/rubrics/experimental/hybrid_math_rubric.py +0 -0
  228. {verifiers-0.2.2.dev42 → verifiers-0.2.2.dev43}/verifiers/rubrics/judge_rubric.py +0 -0
  229. {verifiers-0.2.2.dev42 → verifiers-0.2.2.dev43}/verifiers/rubrics/math_rubric.py +0 -0
  230. {verifiers-0.2.2.dev42 → verifiers-0.2.2.dev43}/verifiers/rubrics/rubric.py +0 -0
  231. {verifiers-0.2.2.dev42 → verifiers-0.2.2.dev43}/verifiers/rubrics/rubric_group.py +0 -0
  232. {verifiers-0.2.2.dev42 → verifiers-0.2.2.dev43}/verifiers/scripts/__init__.py +0 -0
  233. {verifiers-0.2.2.dev42 → verifiers-0.2.2.dev43}/verifiers/scripts/build.py +0 -0
  234. {verifiers-0.2.2.dev42 → verifiers-0.2.2.dev43}/verifiers/scripts/eval.py +0 -0
  235. {verifiers-0.2.2.dev42 → verifiers-0.2.2.dev43}/verifiers/scripts/gepa.py +0 -0
  236. {verifiers-0.2.2.dev42 → verifiers-0.2.2.dev43}/verifiers/scripts/init.py +0 -0
  237. {verifiers-0.2.2.dev42 → verifiers-0.2.2.dev43}/verifiers/scripts/install.py +0 -0
  238. {verifiers-0.2.2.dev42 → verifiers-0.2.2.dev43}/verifiers/scripts/setup.py +0 -0
  239. {verifiers-0.2.2.dev42 → verifiers-0.2.2.dev43}/verifiers/scripts/tui.py +0 -0
  240. {verifiers-0.2.2.dev42 → verifiers-0.2.2.dev43}/verifiers/serve/__init__.py +0 -0
  241. {verifiers-0.2.2.dev42 → verifiers-0.2.2.dev43}/verifiers/serve/client/env_client.py +0 -0
  242. {verifiers-0.2.2.dev42 → verifiers-0.2.2.dev43}/verifiers/serve/client/zmq_env_client.py +0 -0
  243. {verifiers-0.2.2.dev42 → verifiers-0.2.2.dev43}/verifiers/serve/server/__init__.py +0 -0
  244. {verifiers-0.2.2.dev42 → verifiers-0.2.2.dev43}/verifiers/serve/server/env_router.py +0 -0
  245. {verifiers-0.2.2.dev42 → verifiers-0.2.2.dev43}/verifiers/serve/server/env_server.py +0 -0
  246. {verifiers-0.2.2.dev42 → verifiers-0.2.2.dev43}/verifiers/serve/server/env_worker.py +0 -0
  247. {verifiers-0.2.2.dev42 → verifiers-0.2.2.dev43}/verifiers/serve/server/zmq_env_server.py +0 -0
  248. {verifiers-0.2.2.dev42 → verifiers-0.2.2.dev43}/verifiers/serve/types.py +0 -0
  249. {verifiers-0.2.2.dev42 → verifiers-0.2.2.dev43}/verifiers/types.py +0 -0
  250. {verifiers-0.2.2.dev42 → verifiers-0.2.2.dev43}/verifiers/utils/__init__.py +0 -0
  251. {verifiers-0.2.2.dev42 → verifiers-0.2.2.dev43}/verifiers/utils/async_utils.py +0 -0
  252. {verifiers-0.2.2.dev42 → verifiers-0.2.2.dev43}/verifiers/utils/client_utils.py +0 -0
  253. {verifiers-0.2.2.dev42 → verifiers-0.2.2.dev43}/verifiers/utils/config_utils.py +0 -0
  254. {verifiers-0.2.2.dev42 → verifiers-0.2.2.dev43}/verifiers/utils/data_utils.py +0 -0
  255. {verifiers-0.2.2.dev42 → verifiers-0.2.2.dev43}/verifiers/utils/display_utils.py +0 -0
  256. {verifiers-0.2.2.dev42 → verifiers-0.2.2.dev43}/verifiers/utils/env_config_utils.py +0 -0
  257. {verifiers-0.2.2.dev42 → verifiers-0.2.2.dev43}/verifiers/utils/env_utils.py +0 -0
  258. {verifiers-0.2.2.dev42 → verifiers-0.2.2.dev43}/verifiers/utils/error_utils.py +0 -0
  259. {verifiers-0.2.2.dev42 → verifiers-0.2.2.dev43}/verifiers/utils/eval_display.py +0 -0
  260. {verifiers-0.2.2.dev42 → verifiers-0.2.2.dev43}/verifiers/utils/eval_utils.py +0 -0
  261. {verifiers-0.2.2.dev42 → verifiers-0.2.2.dev43}/verifiers/utils/heartbeat.py +0 -0
  262. {verifiers-0.2.2.dev42 → verifiers-0.2.2.dev43}/verifiers/utils/import_utils.py +0 -0
  263. {verifiers-0.2.2.dev42 → verifiers-0.2.2.dev43}/verifiers/utils/install_utils.py +0 -0
  264. {verifiers-0.2.2.dev42 → verifiers-0.2.2.dev43}/verifiers/utils/interception_utils.py +0 -0
  265. {verifiers-0.2.2.dev42 → verifiers-0.2.2.dev43}/verifiers/utils/logging_utils.py +0 -0
  266. {verifiers-0.2.2.dev42 → verifiers-0.2.2.dev43}/verifiers/utils/message_utils.py +0 -0
  267. {verifiers-0.2.2.dev42 → verifiers-0.2.2.dev43}/verifiers/utils/metric_utils.py +0 -0
  268. {verifiers-0.2.2.dev42 → verifiers-0.2.2.dev43}/verifiers/utils/path_utils.py +0 -0
  269. {verifiers-0.2.2.dev42 → verifiers-0.2.2.dev43}/verifiers/utils/pricing_utils.py +0 -0
  270. {verifiers-0.2.2.dev42 → verifiers-0.2.2.dev43}/verifiers/utils/process_utils.py +0 -0
  271. {verifiers-0.2.2.dev42 → verifiers-0.2.2.dev43}/verifiers/utils/response_utils.py +0 -0
  272. {verifiers-0.2.2.dev42 → verifiers-0.2.2.dev43}/verifiers/utils/save_utils.py +0 -0
  273. {verifiers-0.2.2.dev42 → verifiers-0.2.2.dev43}/verifiers/utils/serve_utils.py +0 -0
  274. {verifiers-0.2.2.dev42 → verifiers-0.2.2.dev43}/verifiers/utils/thread_utils.py +0 -0
  275. {verifiers-0.2.2.dev42 → verifiers-0.2.2.dev43}/verifiers/utils/threaded_sandbox_client.py +0 -0
  276. {verifiers-0.2.2.dev42 → verifiers-0.2.2.dev43}/verifiers/utils/tool_utils.py +0 -0
  277. {verifiers-0.2.2.dev42 → verifiers-0.2.2.dev43}/verifiers/utils/usage_utils.py +0 -0
  278. {verifiers-0.2.2.dev42 → verifiers-0.2.2.dev43}/verifiers/utils/version_utils.py +0 -0
  279. {verifiers-0.2.2.dev42 → verifiers-0.2.2.dev43}/verifiers/v1/acp/__init__.py +0 -0
  280. {verifiers-0.2.2.dev42 → verifiers-0.2.2.dev43}/verifiers/v1/acp/_runner.py +0 -0
  281. {verifiers-0.2.2.dev42 → verifiers-0.2.2.dev43}/verifiers/v1/cli/__init__.py +0 -0
  282. {verifiers-0.2.2.dev42 → verifiers-0.2.2.dev43}/verifiers/v1/cli/dashboard/__init__.py +0 -0
  283. {verifiers-0.2.2.dev42 → verifiers-0.2.2.dev43}/verifiers/v1/cli/dashboard/base.py +0 -0
  284. {verifiers-0.2.2.dev42 → verifiers-0.2.2.dev43}/verifiers/v1/cli/dashboard/replay.py +0 -0
  285. {verifiers-0.2.2.dev42 → verifiers-0.2.2.dev43}/verifiers/v1/cli/dashboard/validate.py +0 -0
  286. {verifiers-0.2.2.dev42 → verifiers-0.2.2.dev43}/verifiers/v1/cli/debug.py +0 -0
  287. {verifiers-0.2.2.dev42 → verifiers-0.2.2.dev43}/verifiers/v1/cli/eval/__init__.py +0 -0
  288. {verifiers-0.2.2.dev42 → verifiers-0.2.2.dev43}/verifiers/v1/cli/eval/resume.py +0 -0
  289. {verifiers-0.2.2.dev42 → verifiers-0.2.2.dev43}/verifiers/v1/cli/gepa.py +0 -0
  290. {verifiers-0.2.2.dev42 → verifiers-0.2.2.dev43}/verifiers/v1/cli/init.py +0 -0
  291. {verifiers-0.2.2.dev42 → verifiers-0.2.2.dev43}/verifiers/v1/cli/output.py +0 -0
  292. {verifiers-0.2.2.dev42 → verifiers-0.2.2.dev43}/verifiers/v1/cli/replay.py +0 -0
  293. {verifiers-0.2.2.dev42 → verifiers-0.2.2.dev43}/verifiers/v1/cli/resolve.py +0 -0
  294. {verifiers-0.2.2.dev42 → verifiers-0.2.2.dev43}/verifiers/v1/cli/validate.py +0 -0
  295. {verifiers-0.2.2.dev42 → verifiers-0.2.2.dev43}/verifiers/v1/clients/__init__.py +0 -0
  296. {verifiers-0.2.2.dev42 → verifiers-0.2.2.dev43}/verifiers/v1/clients/client.py +0 -0
  297. {verifiers-0.2.2.dev42 → verifiers-0.2.2.dev43}/verifiers/v1/clients/config.py +0 -0
  298. {verifiers-0.2.2.dev42 → verifiers-0.2.2.dev43}/verifiers/v1/clients/eval.py +0 -0
  299. {verifiers-0.2.2.dev42 → verifiers-0.2.2.dev43}/verifiers/v1/clients/train.py +0 -0
  300. {verifiers-0.2.2.dev42 → verifiers-0.2.2.dev43}/verifiers/v1/configs/__init__.py +0 -0
  301. {verifiers-0.2.2.dev42 → verifiers-0.2.2.dev43}/verifiers/v1/configs/agent.py +0 -0
  302. {verifiers-0.2.2.dev42 → verifiers-0.2.2.dev43}/verifiers/v1/configs/cli/__init__.py +0 -0
  303. {verifiers-0.2.2.dev42 → verifiers-0.2.2.dev43}/verifiers/v1/configs/cli/debug.py +0 -0
  304. {verifiers-0.2.2.dev42 → verifiers-0.2.2.dev43}/verifiers/v1/configs/cli/init.py +0 -0
  305. {verifiers-0.2.2.dev42 → verifiers-0.2.2.dev43}/verifiers/v1/configs/cli/replay.py +0 -0
  306. {verifiers-0.2.2.dev42 → verifiers-0.2.2.dev43}/verifiers/v1/configs/cli/validate.py +0 -0
  307. {verifiers-0.2.2.dev42 → verifiers-0.2.2.dev43}/verifiers/v1/configs/harness.py +0 -0
  308. {verifiers-0.2.2.dev42 → verifiers-0.2.2.dev43}/verifiers/v1/configs/judge.py +0 -0
  309. {verifiers-0.2.2.dev42 → verifiers-0.2.2.dev43}/verifiers/v1/configs/retries.py +0 -0
  310. {verifiers-0.2.2.dev42 → verifiers-0.2.2.dev43}/verifiers/v1/configs/task.py +0 -0
  311. {verifiers-0.2.2.dev42 → verifiers-0.2.2.dev43}/verifiers/v1/configs/taskset.py +0 -0
  312. {verifiers-0.2.2.dev42 → verifiers-0.2.2.dev43}/verifiers/v1/decorators.py +0 -0
  313. {verifiers-0.2.2.dev42 → verifiers-0.2.2.dev43}/verifiers/v1/dialects/__init__.py +0 -0
  314. {verifiers-0.2.2.dev42 → verifiers-0.2.2.dev43}/verifiers/v1/dialects/anthropic.py +0 -0
  315. {verifiers-0.2.2.dev42 → verifiers-0.2.2.dev43}/verifiers/v1/dialects/base.py +0 -0
  316. {verifiers-0.2.2.dev42 → verifiers-0.2.2.dev43}/verifiers/v1/dialects/chat.py +0 -0
  317. {verifiers-0.2.2.dev42 → verifiers-0.2.2.dev43}/verifiers/v1/dialects/responses.py +0 -0
  318. {verifiers-0.2.2.dev42 → verifiers-0.2.2.dev43}/verifiers/v1/envs/__init__.py +0 -0
  319. {verifiers-0.2.2.dev42 → verifiers-0.2.2.dev43}/verifiers/v1/envs/agentic_judge/__init__.py +0 -0
  320. {verifiers-0.2.2.dev42 → verifiers-0.2.2.dev43}/verifiers/v1/envs/agentic_judge/env.py +0 -0
  321. {verifiers-0.2.2.dev42 → verifiers-0.2.2.dev43}/verifiers/v1/envs/best_of_n/__init__.py +0 -0
  322. {verifiers-0.2.2.dev42 → verifiers-0.2.2.dev43}/verifiers/v1/envs/best_of_n/env.py +0 -0
  323. {verifiers-0.2.2.dev42 → verifiers-0.2.2.dev43}/verifiers/v1/envs/single_agent/__init__.py +0 -0
  324. {verifiers-0.2.2.dev42 → verifiers-0.2.2.dev43}/verifiers/v1/envs/single_agent/env.py +0 -0
  325. {verifiers-0.2.2.dev42 → verifiers-0.2.2.dev43}/verifiers/v1/envs/user_sim/__init__.py +0 -0
  326. {verifiers-0.2.2.dev42 → verifiers-0.2.2.dev43}/verifiers/v1/envs/user_sim/env.py +0 -0
  327. {verifiers-0.2.2.dev42 → verifiers-0.2.2.dev43}/verifiers/v1/episode.py +0 -0
  328. {verifiers-0.2.2.dev42 → verifiers-0.2.2.dev43}/verifiers/v1/errors.py +0 -0
  329. {verifiers-0.2.2.dev42 → verifiers-0.2.2.dev43}/verifiers/v1/gepa/__init__.py +0 -0
  330. {verifiers-0.2.2.dev42 → verifiers-0.2.2.dev43}/verifiers/v1/gepa/adapter.py +0 -0
  331. {verifiers-0.2.2.dev42 → verifiers-0.2.2.dev43}/verifiers/v1/gepa/dataset.py +0 -0
  332. {verifiers-0.2.2.dev42 → verifiers-0.2.2.dev43}/verifiers/v1/gepa/reflection.py +0 -0
  333. {verifiers-0.2.2.dev42 → verifiers-0.2.2.dev43}/verifiers/v1/gepa/runner.py +0 -0
  334. {verifiers-0.2.2.dev42 → verifiers-0.2.2.dev43}/verifiers/v1/graph.py +0 -0
  335. {verifiers-0.2.2.dev42 → verifiers-0.2.2.dev43}/verifiers/v1/harness.py +0 -0
  336. {verifiers-0.2.2.dev42 → verifiers-0.2.2.dev43}/verifiers/v1/harnesses/__init__.py +0 -0
  337. {verifiers-0.2.2.dev42 → verifiers-0.2.2.dev43}/verifiers/v1/harnesses/bash/__init__.py +0 -0
  338. {verifiers-0.2.2.dev42 → verifiers-0.2.2.dev43}/verifiers/v1/harnesses/bash/harness.py +0 -0
  339. {verifiers-0.2.2.dev42 → verifiers-0.2.2.dev43}/verifiers/v1/harnesses/bash/program.py +0 -0
  340. {verifiers-0.2.2.dev42 → verifiers-0.2.2.dev43}/verifiers/v1/harnesses/claude_code/__init__.py +0 -0
  341. {verifiers-0.2.2.dev42 → verifiers-0.2.2.dev43}/verifiers/v1/harnesses/claude_code/harness.py +0 -0
  342. {verifiers-0.2.2.dev42 → verifiers-0.2.2.dev43}/verifiers/v1/harnesses/codex/__init__.py +0 -0
  343. {verifiers-0.2.2.dev42 → verifiers-0.2.2.dev43}/verifiers/v1/harnesses/codex/harness.py +0 -0
  344. {verifiers-0.2.2.dev42 → verifiers-0.2.2.dev43}/verifiers/v1/harnesses/kimi_code/__init__.py +0 -0
  345. {verifiers-0.2.2.dev42 → verifiers-0.2.2.dev43}/verifiers/v1/harnesses/kimi_code/harness.py +0 -0
  346. {verifiers-0.2.2.dev42 → verifiers-0.2.2.dev43}/verifiers/v1/harnesses/mini_swe_agent/__init__.py +0 -0
  347. {verifiers-0.2.2.dev42 → verifiers-0.2.2.dev43}/verifiers/v1/harnesses/mini_swe_agent/harness.py +0 -0
  348. {verifiers-0.2.2.dev42 → verifiers-0.2.2.dev43}/verifiers/v1/harnesses/mini_swe_agent/program.py +0 -0
  349. {verifiers-0.2.2.dev42 → verifiers-0.2.2.dev43}/verifiers/v1/harnesses/null/__init__.py +0 -0
  350. {verifiers-0.2.2.dev42 → verifiers-0.2.2.dev43}/verifiers/v1/harnesses/null/harness.py +0 -0
  351. {verifiers-0.2.2.dev42 → verifiers-0.2.2.dev43}/verifiers/v1/harnesses/null/program.py +0 -0
  352. {verifiers-0.2.2.dev42 → verifiers-0.2.2.dev43}/verifiers/v1/harnesses/pi/__init__.py +0 -0
  353. {verifiers-0.2.2.dev42 → verifiers-0.2.2.dev43}/verifiers/v1/harnesses/pi/harness.py +0 -0
  354. {verifiers-0.2.2.dev42 → verifiers-0.2.2.dev43}/verifiers/v1/harnesses/pool/__init__.py +0 -0
  355. {verifiers-0.2.2.dev42 → verifiers-0.2.2.dev43}/verifiers/v1/harnesses/pool/harness.py +0 -0
  356. {verifiers-0.2.2.dev42 → verifiers-0.2.2.dev43}/verifiers/v1/harnesses/rlm/__init__.py +0 -0
  357. {verifiers-0.2.2.dev42 → verifiers-0.2.2.dev43}/verifiers/v1/harnesses/rlm/harness.py +0 -0
  358. {verifiers-0.2.2.dev42 → verifiers-0.2.2.dev43}/verifiers/v1/harnesses/terminus_2/__init__.py +0 -0
  359. {verifiers-0.2.2.dev42 → verifiers-0.2.2.dev43}/verifiers/v1/harnesses/terminus_2/harness.py +0 -0
  360. {verifiers-0.2.2.dev42 → verifiers-0.2.2.dev43}/verifiers/v1/harnesses/terminus_2/program.py +0 -0
  361. {verifiers-0.2.2.dev42 → verifiers-0.2.2.dev43}/verifiers/v1/interception/__init__.py +0 -0
  362. {verifiers-0.2.2.dev42 → verifiers-0.2.2.dev43}/verifiers/v1/interception/base.py +0 -0
  363. {verifiers-0.2.2.dev42 → verifiers-0.2.2.dev43}/verifiers/v1/interception/pool.py +0 -0
  364. {verifiers-0.2.2.dev42 → verifiers-0.2.2.dev43}/verifiers/v1/interception/server.py +0 -0
  365. {verifiers-0.2.2.dev42 → verifiers-0.2.2.dev43}/verifiers/v1/interception/tunnel/__init__.py +0 -0
  366. {verifiers-0.2.2.dev42 → verifiers-0.2.2.dev43}/verifiers/v1/interception/tunnel/base.py +0 -0
  367. {verifiers-0.2.2.dev42 → verifiers-0.2.2.dev43}/verifiers/v1/interception/tunnel/custom.py +0 -0
  368. {verifiers-0.2.2.dev42 → verifiers-0.2.2.dev43}/verifiers/v1/interception/tunnel/prime.py +0 -0
  369. {verifiers-0.2.2.dev42 → verifiers-0.2.2.dev43}/verifiers/v1/judge.py +0 -0
  370. {verifiers-0.2.2.dev42 → verifiers-0.2.2.dev43}/verifiers/v1/judges/__init__.py +0 -0
  371. {verifiers-0.2.2.dev42 → verifiers-0.2.2.dev43}/verifiers/v1/judges/reference.py +0 -0
  372. {verifiers-0.2.2.dev42 → verifiers-0.2.2.dev43}/verifiers/v1/judges/reference.txt +0 -0
  373. {verifiers-0.2.2.dev42 → verifiers-0.2.2.dev43}/verifiers/v1/judges/rubric.py +0 -0
  374. {verifiers-0.2.2.dev42 → verifiers-0.2.2.dev43}/verifiers/v1/judges/rubric.txt +0 -0
  375. {verifiers-0.2.2.dev42 → verifiers-0.2.2.dev43}/verifiers/v1/loaders.py +0 -0
  376. {verifiers-0.2.2.dev42 → verifiers-0.2.2.dev43}/verifiers/v1/mcp/__init__.py +0 -0
  377. {verifiers-0.2.2.dev42 → verifiers-0.2.2.dev43}/verifiers/v1/mcp/launch.py +0 -0
  378. {verifiers-0.2.2.dev42 → verifiers-0.2.2.dev43}/verifiers/v1/mcp/server.py +0 -0
  379. {verifiers-0.2.2.dev42 → verifiers-0.2.2.dev43}/verifiers/v1/mcp/toolset.py +0 -0
  380. {verifiers-0.2.2.dev42 → verifiers-0.2.2.dev43}/verifiers/v1/retries.py +0 -0
  381. {verifiers-0.2.2.dev42 → verifiers-0.2.2.dev43}/verifiers/v1/rollout.py +0 -0
  382. {verifiers-0.2.2.dev42 → verifiers-0.2.2.dev43}/verifiers/v1/runtimes/__init__.py +0 -0
  383. {verifiers-0.2.2.dev42 → verifiers-0.2.2.dev43}/verifiers/v1/runtimes/base.py +0 -0
  384. {verifiers-0.2.2.dev42 → verifiers-0.2.2.dev43}/verifiers/v1/runtimes/docker/__init__.py +0 -0
  385. {verifiers-0.2.2.dev42 → verifiers-0.2.2.dev43}/verifiers/v1/runtimes/docker/egress.py +0 -0
  386. {verifiers-0.2.2.dev42 → verifiers-0.2.2.dev43}/verifiers/v1/runtimes/limiters.py +0 -0
  387. {verifiers-0.2.2.dev42 → verifiers-0.2.2.dev43}/verifiers/v1/runtimes/modal.py +0 -0
  388. {verifiers-0.2.2.dev42 → verifiers-0.2.2.dev43}/verifiers/v1/runtimes/prime.py +0 -0
  389. {verifiers-0.2.2.dev42 → verifiers-0.2.2.dev43}/verifiers/v1/runtimes/subprocess.py +0 -0
  390. {verifiers-0.2.2.dev42 → verifiers-0.2.2.dev43}/verifiers/v1/scoring.py +0 -0
  391. {verifiers-0.2.2.dev42 → verifiers-0.2.2.dev43}/verifiers/v1/serve/__init__.py +0 -0
  392. {verifiers-0.2.2.dev42 → verifiers-0.2.2.dev43}/verifiers/v1/serve/client.py +0 -0
  393. {verifiers-0.2.2.dev42 → verifiers-0.2.2.dev43}/verifiers/v1/serve/types.py +0 -0
  394. {verifiers-0.2.2.dev42 → verifiers-0.2.2.dev43}/verifiers/v1/session.py +0 -0
  395. {verifiers-0.2.2.dev42 → verifiers-0.2.2.dev43}/verifiers/v1/state.py +0 -0
  396. {verifiers-0.2.2.dev42 → verifiers-0.2.2.dev43}/verifiers/v1/task.py +0 -0
  397. {verifiers-0.2.2.dev42 → verifiers-0.2.2.dev43}/verifiers/v1/taskset.py +0 -0
  398. {verifiers-0.2.2.dev42 → verifiers-0.2.2.dev43}/verifiers/v1/tasksets/__init__.py +0 -0
  399. {verifiers-0.2.2.dev42 → verifiers-0.2.2.dev43}/verifiers/v1/tasksets/harbor/__init__.py +0 -0
  400. {verifiers-0.2.2.dev42 → verifiers-0.2.2.dev43}/verifiers/v1/tasksets/harbor/taskset.py +0 -0
  401. {verifiers-0.2.2.dev42 → verifiers-0.2.2.dev43}/verifiers/v1/tasksets/lean/__init__.py +0 -0
  402. {verifiers-0.2.2.dev42 → verifiers-0.2.2.dev43}/verifiers/v1/tasksets/lean/scoring.py +0 -0
  403. {verifiers-0.2.2.dev42 → verifiers-0.2.2.dev43}/verifiers/v1/tasksets/lean/taskset.py +0 -0
  404. {verifiers-0.2.2.dev42 → verifiers-0.2.2.dev43}/verifiers/v1/tasksets/openenv/__init__.py +0 -0
  405. {verifiers-0.2.2.dev42 → verifiers-0.2.2.dev43}/verifiers/v1/tasksets/openenv/taskset.py +0 -0
  406. {verifiers-0.2.2.dev42 → verifiers-0.2.2.dev43}/verifiers/v1/tasksets/textarena/__init__.py +0 -0
  407. {verifiers-0.2.2.dev42 → verifiers-0.2.2.dev43}/verifiers/v1/tasksets/textarena/taskset.py +0 -0
  408. {verifiers-0.2.2.dev42 → verifiers-0.2.2.dev43}/verifiers/v1/trace.py +0 -0
  409. {verifiers-0.2.2.dev42 → verifiers-0.2.2.dev43}/verifiers/v1/types.py +0 -0
  410. {verifiers-0.2.2.dev42 → verifiers-0.2.2.dev43}/verifiers/v1/utils/__init__.py +0 -0
  411. {verifiers-0.2.2.dev42 → verifiers-0.2.2.dev43}/verifiers/v1/utils/aio.py +0 -0
  412. {verifiers-0.2.2.dev42 → verifiers-0.2.2.dev43}/verifiers/v1/utils/compile.py +0 -0
  413. {verifiers-0.2.2.dev42 → verifiers-0.2.2.dev43}/verifiers/v1/utils/format.py +0 -0
  414. {verifiers-0.2.2.dev42 → verifiers-0.2.2.dev43}/verifiers/v1/utils/generic.py +0 -0
  415. {verifiers-0.2.2.dev42 → verifiers-0.2.2.dev43}/verifiers/v1/utils/git.py +0 -0
  416. {verifiers-0.2.2.dev42 → verifiers-0.2.2.dev43}/verifiers/v1/utils/image.py +0 -0
  417. {verifiers-0.2.2.dev42 → verifiers-0.2.2.dev43}/verifiers/v1/utils/install.py +0 -0
  418. {verifiers-0.2.2.dev42 → verifiers-0.2.2.dev43}/verifiers/v1/utils/interrupt.py +0 -0
  419. {verifiers-0.2.2.dev42 → verifiers-0.2.2.dev43}/verifiers/v1/utils/logging.py +0 -0
  420. {verifiers-0.2.2.dev42 → verifiers-0.2.2.dev43}/verifiers/v1/utils/memory.py +0 -0
  421. {verifiers-0.2.2.dev42 → verifiers-0.2.2.dev43}/verifiers/v1/utils/sampling.py +0 -0
  422. {verifiers-0.2.2.dev42 → verifiers-0.2.2.dev43}/verifiers/v1/utils/version.py +0 -0
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: verifiers
3
- Version: 0.2.2.dev42
3
+ Version: 0.2.2.dev43
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
@@ -180,7 +180,7 @@ def _eval_config(
180
180
  },
181
181
  rich=False,
182
182
  output_dir=output_dir,
183
- **({"pool": pool} if pool else {}),
183
+ **({"serve": {"pool": pool}} if pool else {}),
184
184
  **({"model": model} if model else {}),
185
185
  )
186
186
 
@@ -237,7 +237,7 @@ async def live_ctx():
237
237
 
238
238
  @pytest.fixture
239
239
  def run_v0():
240
- """Run a legacy v0 env through the v1 bridge (the eval CLI's `--id` path)."""
240
+ """Run a legacy v0 env through the v1 bridge (the eval CLI's `--legacy.id` path)."""
241
241
  from verifiers.v1.legacy import run_legacy_eval
242
242
 
243
243
  async def _run(
@@ -249,8 +249,7 @@ def run_v0():
249
249
  args: dict | None = None,
250
250
  ) -> list[Trace]:
251
251
  config = EvalConfig(
252
- id=env_id,
253
- args=args or {},
252
+ legacy={"id": env_id, "args": args or {}},
254
253
  num_tasks=1,
255
254
  num_rollouts=n,
256
255
  sampling={"max_tokens": max_tokens, "temperature": 0},
@@ -14,16 +14,18 @@ from verifiers.v1.clients import (
14
14
  resolve_client,
15
15
  )
16
16
  from verifiers.v1.configs.agent import AgentConfig
17
- from verifiers.v1.configs.cli.env import (
18
- ElasticPoolConfig,
19
- EnvServerConfig,
20
- StaticPoolConfig,
21
- pool_serve_kwargs,
22
- )
17
+ from verifiers.v1.configs.cli.env import narrowed_env_annotation, resolve_env_field
23
18
  from verifiers.v1.configs.env import EnvConfig, default_agent_harness
24
19
  from verifiers.v1.configs.harness import HarnessConfig
25
20
  from verifiers.v1.configs.judge import JudgeConfig, Judges
21
+ from verifiers.v1.configs.legacy import LegacyEnvConfig
26
22
  from verifiers.v1.configs.retries import RetryConfig
23
+ from verifiers.v1.configs.serve import (
24
+ ElasticPoolConfig,
25
+ ServingConfig,
26
+ StaticPoolConfig,
27
+ pool_serve_kwargs,
28
+ )
27
29
  from verifiers.v1.configs.task import TaskConfig
28
30
  from verifiers.v1.configs.taskset import TasksetConfig
29
31
  from verifiers.v1.decorators import metric, reward, stop, tool
@@ -248,7 +250,10 @@ __all__ = [ # noqa: RUF022 - grouped by public API area
248
250
  "Env",
249
251
  "SingleAgentEnv",
250
252
  "EnvConfig",
251
- "EnvServerConfig",
253
+ "ServingConfig",
254
+ "LegacyEnvConfig",
255
+ "resolve_env_field",
256
+ "narrowed_env_annotation",
252
257
  "SingleAgentEnvConfig",
253
258
  "AgentConfig",
254
259
  "StaticPoolConfig",
@@ -276,9 +276,9 @@ class Agent:
276
276
  max_total_tokens=config.max_total_tokens,
277
277
  )
278
278
  self.timeout = config.timeout
279
- # Env episode agents replace this with the eval concurrency semaphore.
280
- # Interactions acquire it only around active lifecycle work, never while
281
- # awaiting the caller between segments.
279
+ # Env episode agents replace this with the episode's agent semaphore
280
+ # (`--env.max-concurrent-agents`). Interactions acquire it only around active
281
+ # lifecycle work, never while awaiting the caller between segments.
282
282
  self._gate: asyncio.Semaphore | None = None
283
283
  # Env-owned standing, not config: `Env.setup` marks fixed agents
284
284
  # untrainable and traces are stamped from here; inert outside an env.
@@ -578,9 +578,9 @@ class _EpisodeAgent(Agent):
578
578
  bundle of references — expensive resources are env-owned and borrowed, so no
579
579
  state spans concurrent episodes): traces get their agent standing the moment
580
580
  they're created, finished ones land in `completed` (the episode's traces),
581
- each run takes the eval's gate. The taskset's shared tool servers ride only
582
- its own tasks — on an env-minted task they'd wrongly put MCP in play
583
- (`tools=` overrides)."""
581
+ each run takes one of the episode's agent permits. The taskset's shared tool
582
+ servers ride only its own tasks — on an env-minted task they'd wrongly put MCP
583
+ in play (`tools=` overrides)."""
584
584
 
585
585
  def __init__(
586
586
  self,
@@ -664,8 +664,9 @@ class _EpisodeAgent(Agent):
664
664
  """The agent's `interaction`, with every trace stamped with its standing
665
665
  at mint and captured in `completed` at close — an interaction driven from
666
666
  `Env.run` stays crash-safe. Setup, each active segment, and close acquire
667
- the eval gate independently; the interaction holds no permit while awaiting
668
- its caller, so peer interactions can interleave even at concurrency one."""
667
+ an agent permit independently; the interaction holds no permit while awaiting
668
+ its caller, so peer interactions still interleave where an episode plays one
669
+ agent at a time."""
669
670
  trace: Trace | None = None
670
671
 
671
672
  def remember(current: Trace) -> None:
@@ -95,7 +95,7 @@ def _limits(config: EvalConfig) -> list[str]:
95
95
  toks.append(f"{label}≤{v}")
96
96
  turns = _seat_value(config, lambda spec: spec.max_turns)
97
97
  return [
98
- f"≤{config.max_concurrent} concurrent"
98
+ f"≤{config.max_concurrent} episodes"
99
99
  if config.max_concurrent
100
100
  else "no concurrency cap",
101
101
  "per-seat turn caps"
@@ -24,7 +24,7 @@ from verifiers.v1.utils.logging import setup_logging
24
24
  logger = logging.getLogger(__name__)
25
25
 
26
26
  USAGE = (
27
- "usage: uv run eval [<taskset-id>] [--env.id <id>] [--id <env-id> (legacy)] [options] [@ file.toml]\n"
27
+ "usage: uv run eval [<taskset-id>] [--env.id <id>] [--legacy.id <env-id> (v0)] [options] [@ file.toml]\n"
28
28
  " uv run eval --resume <output-dir> (re-run a previous run's missing/errored rollouts)"
29
29
  )
30
30
 
@@ -49,12 +49,14 @@ def main(argv: list[str] | None = None) -> None:
49
49
  )
50
50
  config = load_resume_config(resume_dir)
51
51
  else:
52
- legacy_id = any(a == "--id" or a.startswith("--id=") for a in argv) # v0 env id
53
- # An env-block flag (or a retired flat axis) skips the usage gate so the
54
- # typed parse renders its did-you-mean / pointer to the new flags instead
55
- # of a bare usage line.
52
+ legacy_id = any(
53
+ a == "--legacy.id" or a.startswith("--legacy.id=") for a in argv
54
+ )
55
+ # An env-block flag (or a since-moved flat axis) skips the usage gate so the
56
+ # typed parse renders its did-you-mean instead of a bare usage line.
56
57
  typed_axis = any(
57
- a.startswith(("--env.", "--taskset.", "--harness.")) for a in argv
58
+ a.startswith(("--env.", "--taskset.", "--harness.", "--serve."))
59
+ for a in argv
58
60
  )
59
61
  if (
60
62
  not extract_id(argv, "env.taskset")
@@ -64,7 +66,7 @@ def main(argv: list[str] | None = None) -> None:
64
66
  ):
65
67
  raise SystemExit(
66
68
  USAGE
67
- ) # need a taskset (positional / --env.taskset.id), a legacy --id, or a @ file.toml
69
+ ) # need a taskset (positional / --env.taskset.id), a v0 --legacy.id, or a @ file.toml
68
70
 
69
71
  with plugin_errors():
70
72
  config_type = narrow_config(EvalConfig, argv)
@@ -107,19 +107,24 @@ async def run_eval_server(config: EvalConfig) -> list[Episode]:
107
107
  import multiprocessing as mp
108
108
  from functools import partial
109
109
 
110
- from verifiers.v1.configs.cli.env import pool_serve_kwargs
110
+ from verifiers.v1.configs.serve import pool_serve_kwargs
111
111
  from verifiers.v1.serve import EnvClient, env_config_data, serve_env
112
112
  from verifiers.v1.utils.logging import setup_logging
113
113
 
114
114
  legacy = config.is_legacy
115
115
  server_kwargs = (
116
116
  {
117
- "env_id": config.id,
118
- "env_args": config.args,
119
- "extra_env_kwargs": config.extra_env_kwargs,
117
+ "env_id": config.legacy.id,
118
+ "env_args": config.legacy.args,
119
+ "extra_env_kwargs": config.legacy.extra_env_kwargs,
120
120
  }
121
121
  if legacy
122
- else {"config_data": env_config_data(config.env)} # picklable across the spawn
122
+ else {
123
+ "config_data": env_config_data(config.env), # picklable across the spawn
124
+ # `-c` seeds each worker's episode bound unless `[serve]` pins one — so a
125
+ # pool carries `workers * bound` episodes, as `multiplex` implies.
126
+ "max_concurrent": config.worker_max_concurrent,
127
+ }
123
128
  )
124
129
  tasks = []
125
130
  if not legacy:
@@ -142,7 +147,7 @@ async def run_eval_server(config: EvalConfig) -> list[Episode]:
142
147
  proc = mpctx.Process(
143
148
  target=serve_env,
144
149
  kwargs=dict(
145
- **pool_serve_kwargs(config.pool),
150
+ **pool_serve_kwargs(config.serve.pool),
146
151
  legacy=legacy,
147
152
  address="tcp://127.0.0.1:0",
148
153
  address_queue=address_queue,
@@ -210,7 +215,7 @@ async def run_eval_server(config: EvalConfig) -> list[Episode]:
210
215
  "running %dx%d rollouts via the env-server %s pool on %s",
211
216
  len(plan),
212
217
  config.num_rollouts,
213
- config.pool.type,
218
+ config.serve.pool.type,
214
219
  config.model,
215
220
  )
216
221
  logger.info("results: %s", out)
@@ -12,12 +12,12 @@ from verifiers.v1.cli.resolve import (
12
12
  references_config_file,
13
13
  with_positional_taskset,
14
14
  )
15
- from verifiers.v1.configs.cli.env import pool_serve_kwargs
16
15
  from verifiers.v1.configs.cli.serve import ServeConfig
16
+ from verifiers.v1.configs.serve import pool_serve_kwargs
17
17
  from verifiers.v1.serve import serve_env
18
18
  from verifiers.v1.utils.logging import setup_logging
19
19
 
20
- USAGE = "usage: uv run serve [<taskset-id>] [--env.id <id>] [--id <env-id> (legacy)] [options] [@ file.toml]"
20
+ USAGE = "usage: uv run serve [<taskset-id>] [--env.id <id>] [--legacy.id <env-id> (v0)] [options] [@ file.toml]"
21
21
 
22
22
 
23
23
  def main(argv: list[str] | None = None) -> None:
@@ -29,11 +29,12 @@ def main(argv: list[str] | None = None) -> None:
29
29
  with plugin_errors():
30
30
  cli(narrow_config(ServeConfig, argv))
31
31
  return
32
- legacy_id = any(a == "--id" or a.startswith("--id=") for a in argv) # v0 env id
33
- # An env-block flag (or a retired flat axis) skips the usage gate so the typed
34
- # parse renders its did-you-mean / pointer to the new flags instead of a bare
35
- # usage line.
36
- typed_axis = any(a.startswith(("--env.", "--taskset.", "--harness.")) for a in argv)
32
+ legacy_id = any(a == "--legacy.id" or a.startswith("--legacy.id=") for a in argv)
33
+ # An env-block flag (or a since-moved flat axis) skips the usage gate so the typed
34
+ # parse renders its did-you-mean instead of a bare usage line.
35
+ typed_axis = any(
36
+ a.startswith(("--env.", "--taskset.", "--harness.", "--serve.")) for a in argv
37
+ )
37
38
  if (
38
39
  not extract_id(argv, "env.taskset")
39
40
  and not legacy_id
@@ -42,7 +43,7 @@ def main(argv: list[str] | None = None) -> None:
42
43
  ):
43
44
  raise SystemExit(
44
45
  USAGE
45
- ) # need a taskset (positional / --env.taskset.id), a legacy --id, or @ file.toml
46
+ ) # need a taskset (positional / --env.taskset.id), a v0 --legacy.id, or @ file.toml
46
47
 
47
48
  with plugin_errors():
48
49
  config_type = narrow_config(ServeConfig, argv)
@@ -60,17 +61,19 @@ def main(argv: list[str] | None = None) -> None:
60
61
  # in each one.
61
62
  server_kwargs = (
62
63
  {
63
- "env_id": config.id,
64
- "env_args": config.args,
65
- "extra_env_kwargs": config.extra_env_kwargs,
64
+ "env_id": config.legacy.id,
65
+ "env_args": config.legacy.args,
66
+ "extra_env_kwargs": config.legacy.extra_env_kwargs,
66
67
  }
67
68
  if config.is_legacy
68
- else {"config": config.env}
69
+ # `--serve.max-concurrent` is each v1 worker's episode bound; the legacy
70
+ # bridge has never had one.
71
+ else {"config": config.env, "max_concurrent": config.serve.max_concurrent}
69
72
  )
70
73
  serve_env(
71
- **pool_serve_kwargs(config.pool),
74
+ **pool_serve_kwargs(config.serve.pool),
72
75
  legacy=config.is_legacy,
73
- address=config.address,
76
+ address=config.serve.address,
74
77
  log_setup=partial(setup_logging, level),
75
78
  **server_kwargs,
76
79
  )
@@ -0,0 +1,60 @@
1
+ """Run-config plumbing around the `[env]` block: narrowing the `env` field of every
2
+ config that owns one, and the retired keys such a config refuses.
3
+
4
+ A run composes the blocks it needs — `[env]` (what runs, `configs/env.py`),
5
+ `[serve]` (how it's hosted, `configs/serve.py`), `[legacy]` (the v0 bridge,
6
+ `configs/legacy.py`) — plus its own fields. Nothing here is a base class: the eval
7
+ CLI, the `serve` CLI, GEPA and a trainer each declare their blocks and call these.
8
+
9
+ Declare the env field as `SerializeAsAny[EnvConfig] = Field(default_factory=
10
+ single_agent_env_config)`. The `SerializeAsAny` is load-bearing: pydantic serializes
11
+ by declared type, so a plain `EnvConfig` silently drops a narrowed subclass's agents
12
+ and knobs from `model_dump()` — the env-server wire's payload."""
13
+
14
+ from pydantic import ValidationError
15
+ from pydantic_config import BaseConfig
16
+
17
+ from verifiers.v1.configs.env import EnvConfig
18
+ from verifiers.v1.utils.generic import prefix_validation_error
19
+
20
+
21
+ def resolve_env_field(data: dict, narrowed: "type[EnvConfig] | None" = None) -> dict:
22
+ """Shared `mode="before"` body for every run config owning an `env` field: narrow
23
+ `env` to the concrete env's config class. `narrowed` is the annotation the CLI
24
+ pre-resolved (`narrow_config`) — its id is authoritative, so validate against it
25
+ directly."""
26
+ if not isinstance(data, dict):
27
+ return data
28
+ raw = data.get("env")
29
+ if raw is None:
30
+ return data
31
+ try:
32
+ if narrowed is not None:
33
+ if not isinstance(raw, narrowed):
34
+ data["env"] = narrowed.model_validate(
35
+ raw.model_dump() if isinstance(raw, BaseConfig) else raw
36
+ )
37
+ return data
38
+ from verifiers.v1.loaders import resolve_env_config
39
+
40
+ data["env"] = resolve_env_config(raw)
41
+ except ValidationError as e:
42
+ # Validating here (inside the owner's mode="before" validator) would
43
+ # surface the errors without their `env` segment — the CLI would render
44
+ # `--agent.model` for the `--env.agent.model` the user typed.
45
+ raise prefix_validation_error(e, ("env",)) from None
46
+ return data
47
+
48
+
49
+ def narrowed_env_annotation(cls) -> "type[EnvConfig] | None":
50
+ """The env field's annotation when the CLI pre-narrowed it (`narrow_config`
51
+ swaps in a concrete subclass). The base declaration reads as `EnvConfig` itself
52
+ (SerializeAsAny unwraps), so only a proper subclass counts."""
53
+ annotation = cls.model_fields["env"].annotation
54
+ if (
55
+ isinstance(annotation, type)
56
+ and issubclass(annotation, EnvConfig)
57
+ and annotation is not EnvConfig
58
+ ):
59
+ return annotation
60
+ return None
@@ -3,14 +3,27 @@
3
3
  from pathlib import Path
4
4
  from uuid import uuid4
5
5
 
6
- from pydantic import AliasChoices, Field, model_validator
6
+ from pydantic import AliasChoices, Field, SerializeAsAny, model_validator
7
+ from pydantic_config import BaseConfig
7
8
 
8
9
  from verifiers.v1.clients import ClientConfig, EvalClientConfig
9
- from verifiers.v1.configs.cli.env import EnvServerConfig
10
+ from verifiers.v1.configs.cli.env import narrowed_env_annotation, resolve_env_field
11
+ from verifiers.v1.configs.env import EnvConfig
12
+ from verifiers.v1.configs.legacy import LegacyEnvConfig
13
+ from verifiers.v1.configs.serve import ServingConfig
14
+ from verifiers.v1.envs.single_agent import SingleAgentEnvConfig
10
15
  from verifiers.v1.types import SamplingConfig
11
16
 
12
17
 
13
- class EvalConfig(EnvServerConfig):
18
+ class EvalConfig(BaseConfig):
19
+ env: SerializeAsAny[EnvConfig] = SingleAgentEnvConfig()
20
+ """The environment — which env, its seed taskset, each agent, its knobs. Narrowed to
21
+ the selected env's config class by the env id, else the taskset id."""
22
+ serve: ServingConfig = ServingConfig()
23
+ """How the env is hosted under `--server`: the worker pool, each worker's episode
24
+ bound. Ignored by an in-process run."""
25
+ legacy: LegacyEnvConfig = LegacyEnvConfig()
26
+ """A classic (v0) environment to evaluate through the bridge instead of `[env]`."""
14
27
  uuid: str = Field(default_factory=lambda: str(uuid4()), exclude=True)
15
28
  """Auto-generated run id — the leaf of the output dir, so runs never overwrite.
16
29
  Excluded from the saved config so re-running `@ config.toml` lands in a fresh dir."""
@@ -37,9 +50,12 @@ class EvalConfig(EnvServerConfig):
37
50
  shuffle: bool = Field(False, validation_alias=AliasChoices("shuffle", "s"))
38
51
  """Shuffle tasks before taking the first `num_tasks`."""
39
52
  max_concurrent: int | None = Field(
40
- 128, validation_alias=AliasChoices("max_concurrent", "c")
53
+ 128, ge=1, validation_alias=AliasChoices("max_concurrent", "c")
41
54
  )
42
- """Max rollouts in flight at once."""
55
+ """Episodes in flight at once, `None` for no limit. An episode plays its agents one
56
+ at a time, so this is the live agent runs too — until `--env.max-concurrent-agents`
57
+ says otherwise. Under `--server` it seeds each worker's bound, unless
58
+ `--serve.max-concurrent` pins one."""
43
59
  verbose: bool = Field(False, validation_alias=AliasChoices("verbose", "v"))
44
60
  """Log at debug level instead of the default info."""
45
61
  dry_run: bool = Field(False, exclude=True)
@@ -49,7 +65,7 @@ class EvalConfig(EnvServerConfig):
49
65
  """Show a live dashboard instead of per-rollout logs (in-process only; an unset
50
66
  `rich` defaults off under `--server`)."""
51
67
  server: bool = False
52
- """Drive rollouts through the env-server worker pool (sized by `--pool.*`) instead of
68
+ """Drive rollouts through the env-server worker pool (sized by `[serve]`) instead of
53
69
  in-process — the path prime-rl trains through. Incompatible with `--rich`."""
54
70
  push: bool = True
55
71
  """Upload the finished run to the Prime Intellect platform (the private Evaluations
@@ -80,3 +96,47 @@ class EvalConfig(EnvServerConfig):
80
96
  "`--server`; drop `--rich`."
81
97
  )
82
98
  return self
99
+
100
+ @property
101
+ def is_legacy(self) -> bool:
102
+ """Whether this run goes through the v0 bridge: a legacy id and no v1 taskset."""
103
+ return self.legacy.id is not None and not self.env.taskset.id
104
+
105
+ @property
106
+ def env_id(self) -> str:
107
+ """The run's identifier: the v1 env's, else the v0 env id."""
108
+ return self.env.env_id or self.legacy.id or ""
109
+
110
+ @property
111
+ def worker_max_concurrent(self) -> int | None:
112
+ """A served worker's episode bound: its own pin, else the run's `--max-concurrent`."""
113
+ return (
114
+ self.serve.max_concurrent
115
+ if self.serve.max_concurrent is not None
116
+ else self.max_concurrent
117
+ )
118
+
119
+ @model_validator(mode="after")
120
+ def _refuse_mixed_run(self):
121
+ # A v0 id next to any v1 env identity leaves one of the two going nowhere, and
122
+ # which one depends on `is_legacy`: a taskset makes it False, so the v0 env never
123
+ # loads; a bare `--env.id` leaves it True, so the v0 env runs under the v1 name.
124
+ if self.legacy.id is None or not self.env.env_id:
125
+ return self
126
+ if self.env.taskset.id:
127
+ raise ValueError(
128
+ f"--legacy.id {self.legacy.id!r} is a classic (v0) env and can't combine "
129
+ f"with the v1 taskset {self.env.taskset.id!r}. Pairing a reusable env with "
130
+ f"a taskset is --env.id {self.legacy.id!r} (TOML: id under [env]); to run "
131
+ "the v0 env instead, drop the taskset."
132
+ )
133
+ raise ValueError(
134
+ f"--legacy.id {self.legacy.id!r} is a classic (v0) env and can't combine with "
135
+ f"the v1 env --env.id {self.env.id!r}: the v0 env is what would run, stamped "
136
+ "with the v1 env's name. Keep whichever one you meant to run."
137
+ )
138
+
139
+ @model_validator(mode="before")
140
+ @classmethod
141
+ def _resolve_env(cls, data):
142
+ return resolve_env_field(data, narrowed_env_annotation(cls))
@@ -0,0 +1,62 @@
1
+ """Environment-server CLI configuration."""
2
+
3
+ from pydantic import AliasChoices, Field, SerializeAsAny, model_validator
4
+ from pydantic_config import BaseConfig
5
+
6
+ from verifiers.v1.configs.cli.env import narrowed_env_annotation, resolve_env_field
7
+ from verifiers.v1.configs.env import EnvConfig
8
+ from verifiers.v1.configs.legacy import LegacyEnvConfig
9
+ from verifiers.v1.configs.serve import ServingConfig
10
+ from verifiers.v1.envs.single_agent import SingleAgentEnvConfig
11
+
12
+
13
+ class ServeConfig(BaseConfig):
14
+ """`uv run serve`: what to serve (`[env]`, or `[legacy]` for a classic v0 env) and
15
+ how it's hosted (`[serve]`)."""
16
+
17
+ env: SerializeAsAny[EnvConfig] = SingleAgentEnvConfig()
18
+ """The environment — which env, its seed taskset, each agent, its knobs. Narrowed to
19
+ the selected env's config class by the env id, else the taskset id."""
20
+ serve: ServingConfig = ServingConfig()
21
+ """How it's served: the worker pool, the bind address, each worker's episode bound."""
22
+ legacy: LegacyEnvConfig = LegacyEnvConfig()
23
+ """A classic (v0) environment to serve through the bridge instead of `[env]`."""
24
+ verbose: bool = Field(False, validation_alias=AliasChoices("verbose", "v"))
25
+ """Log at debug level instead of info."""
26
+ dry_run: bool = False
27
+ """Resolve + validate the config and dump it, then exit."""
28
+
29
+ @property
30
+ def is_legacy(self) -> bool:
31
+ """Whether this run goes through the v0 bridge: a legacy id and no v1 taskset."""
32
+ return self.legacy.id is not None and not self.env.taskset.id
33
+
34
+ @property
35
+ def env_id(self) -> str:
36
+ """The run's identifier: the v1 env's, else the v0 env id."""
37
+ return self.env.env_id or self.legacy.id or ""
38
+
39
+ @model_validator(mode="after")
40
+ def _refuse_mixed_run(self):
41
+ # A v0 id next to any v1 env identity leaves one of the two going nowhere, and
42
+ # which one depends on `is_legacy`: a taskset makes it False, so the v0 env never
43
+ # loads; a bare `--env.id` leaves it True, so the v0 env runs under the v1 name.
44
+ if self.legacy.id is None or not self.env.env_id:
45
+ return self
46
+ if self.env.taskset.id:
47
+ raise ValueError(
48
+ f"--legacy.id {self.legacy.id!r} is a classic (v0) env and can't combine "
49
+ f"with the v1 taskset {self.env.taskset.id!r}. Pairing a reusable env with "
50
+ f"a taskset is --env.id {self.legacy.id!r} (TOML: id under [env]); to run "
51
+ "the v0 env instead, drop the taskset."
52
+ )
53
+ raise ValueError(
54
+ f"--legacy.id {self.legacy.id!r} is a classic (v0) env and can't combine with "
55
+ f"the v1 env --env.id {self.env.id!r}: the v0 env is what would run, stamped "
56
+ "with the v1 env's name. Keep whichever one you meant to run."
57
+ )
58
+
59
+ @model_validator(mode="before")
60
+ @classmethod
61
+ def _resolve_env(cls, data):
62
+ return resolve_env_field(data, narrowed_env_annotation(cls))
@@ -3,7 +3,7 @@ each role as an `AgentConfig` field, and the env-level knobs."""
3
3
 
4
4
  from typing import get_args
5
5
 
6
- from pydantic import SerializeAsAny, model_validator
6
+ from pydantic import Field, SerializeAsAny, model_validator
7
7
  from pydantic_config import BaseConfig
8
8
 
9
9
  from verifiers.v1.configs.agent import AgentConfig
@@ -48,9 +48,16 @@ class EnvConfig(BaseConfig):
48
48
  retries: RetryConfig = RetryConfig()
49
49
  """Whole-EPISODE retries — the coarse fallback for faults no agent owns; a
50
50
  retried episode reruns whole (a half-played sibling context isn't reproducible)."""
51
- max_concurrent: int | None = None
52
- """Bounds concurrent agent runs on a SERVED env, per worker (None = no limit);
53
- the in-process eval CLI gates with its run-level `--max-concurrent` instead."""
51
+ max_concurrent_agents: int | None = Field(1, ge=1)
52
+ """How many of ONE episode's agent runs may be active at once (None = no limit).
53
+ One at a time by default, so the bound above — `--max-concurrent` episodes, a
54
+ dispatched training episode — is also one live agent run, whatever `run()` fans
55
+ out to internally. Raise it where per-episode latency matters and the
56
+ multiplication is wanted: `--env.max-concurrent-agents None` plays an episode's
57
+ `best-of-n` attempts together, so `-c` episodes carry `-c * n` live runs. Not
58
+ spelled `max_concurrent`: that key used to bound a served worker's agent runs
59
+ across episodes, and taking it as this one silently multiplies it by the episodes
60
+ in flight."""
54
61
  interception: InterceptionConfig = ElasticInterceptionPoolConfig()
55
62
  """The interception shape: `elastic` (default), `server`, or `static`."""
56
63
 
@@ -0,0 +1,24 @@
1
+ """The `[legacy]` block: running a classic (v0) environment through the bridge.
2
+
3
+ Quarantined in its own block, not mixed into `[env]` — a v0 env is a different
4
+ thing to run, not a variant of a v1 env's config."""
5
+
6
+ from pydantic import Field
7
+ from pydantic_config import BaseConfig
8
+
9
+ from verifiers.v1.types import ID
10
+
11
+
12
+ class LegacyEnvConfig(BaseConfig):
13
+ """A classic (v0) `verifiers` environment, loaded via `verifiers.load_environment`
14
+ and run through the legacy bridge. Set `id` *instead of* a v1 `env.taskset`."""
15
+
16
+ id: ID | None = None
17
+ """v0 env id: `name`, `org/name`, or `org/name@version` — installed from the hub on
18
+ demand."""
19
+ args: dict = Field(default_factory=dict)
20
+ """Construction kwargs forwarded to `load_environment(id, **args)`."""
21
+ extra_env_kwargs: dict = Field(default_factory=dict)
22
+ """Post-load kwargs applied via `env.set_kwargs(**extra_env_kwargs)` (e.g.
23
+ `max_total_completion_tokens`, `max_seq_len`, `timeout_seconds`) — typically
24
+ auto-populated by a trainer, distinct from the `args` passed at construction."""
@@ -0,0 +1,63 @@
1
+ """How an env is served: the worker pool, where it binds, and each worker's bound.
2
+
3
+ Serving is its own axis. `[env]` says what runs; this says how it's hosted, so an
4
+ eval, a `serve` process, and a trainer configure it identically instead of each
5
+ flattening pool knobs onto its own config."""
6
+
7
+ from typing import Annotated, Literal
8
+
9
+ from pydantic import Field
10
+ from pydantic_config import BaseConfig
11
+
12
+
13
+ class StaticPoolConfig(BaseConfig):
14
+ """Fixed env-server pool: pre-spawn `num_workers` workers up front."""
15
+
16
+ type: Literal["static"] = "static"
17
+ num_workers: int = Field(4, ge=1)
18
+ """Worker processes to pre-spawn (1 = a single in-process server, no pool)."""
19
+
20
+
21
+ class ElasticPoolConfig(BaseConfig):
22
+ """Elastic env-server pool: start at one worker and scale up on demand."""
23
+
24
+ type: Literal["elastic"] = "elastic"
25
+ max_workers: int | None = None
26
+ """Upper bound on workers (None = unbounded)."""
27
+ multiplex: int = Field(128, ge=1)
28
+ """Episodes per worker for the scale-up trigger: add a worker once in-flight episodes
29
+ reach 90% of `workers * multiplex`."""
30
+
31
+
32
+ # Discriminated on `type` so the CLI selects with `--serve.pool.type static|elastic`.
33
+ PoolConfig = Annotated[
34
+ StaticPoolConfig | ElasticPoolConfig, Field(discriminator="type")
35
+ ]
36
+
37
+
38
+ class ServingConfig(BaseConfig):
39
+ """The `[serve]` block: the worker pool, the ZMQ address, and each worker's
40
+ episode bound. Read by whoever hosts the env — the `serve` CLI, a server-backed
41
+ eval, a trainer's orchestrator."""
42
+
43
+ pool: PoolConfig = Field(default_factory=ElasticPoolConfig)
44
+ """Worker-pool sizing. `elastic` (default) starts at one worker and scales up on
45
+ demand; `static` pre-spawns a fixed `num_workers`."""
46
+ address: str = "tcp://127.0.0.1:5000"
47
+ """ZMQ address the ROUTER binds (and clients connect to)."""
48
+ max_concurrent: int | None = Field(None, ge=1)
49
+ """Episodes in flight per worker (None = take the run's own bound, e.g. an eval's
50
+ `--max-concurrent`). Pin it to hold a worker below what the run asks for; how many
51
+ agent runs one episode carries is the env's own
52
+ (`--env.max-concurrent-agents`, one at a time by default)."""
53
+
54
+
55
+ def pool_serve_kwargs(pool: StaticPoolConfig | ElasticPoolConfig) -> dict:
56
+ """Unpack a pool config into `serve_env` kwargs (`max_workers` / `multiplex` / `elastic`)."""
57
+ if isinstance(pool, ElasticPoolConfig):
58
+ return {
59
+ "max_workers": pool.max_workers,
60
+ "multiplex": pool.multiplex,
61
+ "elastic": True,
62
+ }
63
+ return {"max_workers": pool.num_workers, "elastic": False}