verifiers 0.2.2.dev112__tar.gz → 0.3.1__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 (464) hide show
  1. {verifiers-0.2.2.dev112 → verifiers-0.3.1}/PKG-INFO +6 -6
  2. {verifiers-0.2.2.dev112 → verifiers-0.3.1}/pyproject.toml +53 -29
  3. {verifiers-0.2.2.dev112 → verifiers-0.3.1}/tests/test_imports.py +3 -2
  4. {verifiers-0.2.2.dev112 → verifiers-0.3.1}/tests/v1/conftest.py +33 -57
  5. {verifiers-0.2.2.dev112 → verifiers-0.3.1}/tests/v1/fixtures/counter_tool_v1.py +3 -3
  6. {verifiers-0.2.2.dev112 → verifiers-0.3.1}/tests/v1/fixtures/echo_acp_resume_v1.py +3 -2
  7. {verifiers-0.2.2.dev112 → verifiers-0.3.1}/tests/v1/fixtures/echo_tool_v1.py +3 -2
  8. {verifiers-0.2.2.dev112 → verifiers-0.3.1}/tests/v1/fixtures/echo_v1.py +4 -0
  9. {verifiers-0.2.2.dev112 → verifiers-0.3.1}/tests/v1/fixtures/tool_response_image_v1.py +3 -3
  10. {verifiers-0.2.2.dev112 → verifiers-0.3.1}/tests/v1/test_color_codeword_tasks.py +1 -1
  11. {verifiers-0.2.2.dev112 → verifiers-0.3.1}/tests/v1/test_configs.py +1 -2
  12. {verifiers-0.2.2.dev112 → verifiers-0.3.1}/tests/v1/test_e2e.py +42 -16
  13. {verifiers-0.2.2.dev112 → verifiers-0.3.1}/tests/v1/test_envs.py +12 -10
  14. {verifiers-0.2.2.dev112 → verifiers-0.3.1}/tests/v1/test_judges.py +2 -2
  15. verifiers-0.3.1/tests/v1/test_scoring.py +119 -0
  16. {verifiers-0.2.2.dev112 → verifiers-0.3.1}/tests/v1/test_taskset.py +3 -1
  17. {verifiers-0.2.2.dev112 → verifiers-0.3.1}/tests/v1/test_trace.py +7 -1
  18. verifiers-0.3.1/verifiers/__init__.py +152 -0
  19. {verifiers-0.2.2.dev112 → verifiers-0.3.1}/verifiers/cli/commands/build.py +1 -1
  20. {verifiers-0.2.2.dev112 → verifiers-0.3.1}/verifiers/cli/commands/eval.py +1 -1
  21. {verifiers-0.2.2.dev112 → verifiers-0.3.1}/verifiers/cli/commands/gepa.py +1 -1
  22. {verifiers-0.2.2.dev112 → verifiers-0.3.1}/verifiers/cli/commands/init.py +1 -1
  23. {verifiers-0.2.2.dev112 → verifiers-0.3.1}/verifiers/cli/commands/install.py +1 -1
  24. {verifiers-0.2.2.dev112 → verifiers-0.3.1}/verifiers/cli/commands/setup.py +1 -1
  25. {verifiers-0.2.2.dev112 → verifiers-0.3.1}/verifiers/cli/tui.py +1 -1
  26. {verifiers-0.2.2.dev112/verifiers → verifiers-0.3.1/verifiers/legacy}/__init__.py +26 -26
  27. {verifiers-0.2.2.dev112/verifiers → verifiers-0.3.1/verifiers/legacy}/clients/__init__.py +13 -11
  28. {verifiers-0.2.2.dev112/verifiers → verifiers-0.3.1/verifiers/legacy}/clients/anthropic_messages_client.py +4 -4
  29. {verifiers-0.2.2.dev112/verifiers → verifiers-0.3.1/verifiers/legacy}/clients/client.py +2 -2
  30. {verifiers-0.2.2.dev112/verifiers → verifiers-0.3.1/verifiers/legacy}/clients/nemorl_chat_completions_client.py +2 -2
  31. {verifiers-0.2.2.dev112/verifiers → verifiers-0.3.1/verifiers/legacy}/clients/openai_chat_completions_client.py +4 -4
  32. {verifiers-0.2.2.dev112/verifiers → verifiers-0.3.1/verifiers/legacy}/clients/openai_chat_completions_token_client.py +3 -3
  33. {verifiers-0.2.2.dev112/verifiers → verifiers-0.3.1/verifiers/legacy}/clients/openai_completions_client.py +5 -5
  34. {verifiers-0.2.2.dev112/verifiers → verifiers-0.3.1/verifiers/legacy}/clients/openai_responses_client.py +5 -5
  35. {verifiers-0.2.2.dev112/verifiers → verifiers-0.3.1/verifiers/legacy}/clients/renderer_client.py +5 -5
  36. {verifiers-0.2.2.dev112/verifiers → verifiers-0.3.1/verifiers/legacy}/envs/env_group.py +5 -5
  37. {verifiers-0.2.2.dev112/verifiers → verifiers-0.3.1/verifiers/legacy}/envs/environment.py +20 -20
  38. verifiers-0.3.1/verifiers/legacy/envs/experimental/__init__.py +36 -0
  39. {verifiers-0.2.2.dev112/verifiers → verifiers-0.3.1/verifiers/legacy}/envs/experimental/cli_agent_env.py +7 -7
  40. verifiers-0.3.1/verifiers/legacy/envs/experimental/composable/__init__.py +29 -0
  41. {verifiers-0.2.2.dev112/verifiers → verifiers-0.3.1/verifiers/legacy}/envs/experimental/composable/composable_env.py +8 -8
  42. {verifiers-0.2.2.dev112/verifiers → verifiers-0.3.1/verifiers/legacy}/envs/experimental/composable/harness.py +2 -2
  43. {verifiers-0.2.2.dev112/verifiers → verifiers-0.3.1/verifiers/legacy}/envs/experimental/composable/harnesses/__init__.py +3 -3
  44. {verifiers-0.2.2.dev112/verifiers → verifiers-0.3.1/verifiers/legacy}/envs/experimental/composable/harnesses/mini_swe_agent.py +1 -1
  45. {verifiers-0.2.2.dev112/verifiers → verifiers-0.3.1/verifiers/legacy}/envs/experimental/composable/harnesses/opencode.py +3 -3
  46. {verifiers-0.2.2.dev112/verifiers → verifiers-0.3.1/verifiers/legacy}/envs/experimental/composable/harnesses/rlm.py +4 -4
  47. {verifiers-0.2.2.dev112/verifiers → verifiers-0.3.1/verifiers/legacy}/envs/experimental/composable/sandbox_debug_env.py +3 -3
  48. {verifiers-0.2.2.dev112/verifiers → verifiers-0.3.1/verifiers/legacy}/envs/experimental/composable/task.py +5 -5
  49. {verifiers-0.2.2.dev112/verifiers → verifiers-0.3.1/verifiers/legacy}/envs/experimental/composable/tasksets/__init__.py +8 -6
  50. {verifiers-0.2.2.dev112/verifiers → verifiers-0.3.1/verifiers/legacy}/envs/experimental/composable/tasksets/cp/cp_task.py +3 -3
  51. {verifiers-0.2.2.dev112/verifiers → verifiers-0.3.1/verifiers/legacy}/envs/experimental/composable/tasksets/harbor/cli_gym.py +3 -3
  52. {verifiers-0.2.2.dev112/verifiers → verifiers-0.3.1/verifiers/legacy}/envs/experimental/composable/tasksets/harbor/harbor.py +2 -2
  53. {verifiers-0.2.2.dev112/verifiers → verifiers-0.3.1/verifiers/legacy}/envs/experimental/composable/tasksets/harbor/terminal_lego.py +2 -2
  54. {verifiers-0.2.2.dev112/verifiers → verifiers-0.3.1/verifiers/legacy}/envs/experimental/composable/tasksets/math/math_task.py +7 -5
  55. {verifiers-0.2.2.dev112/verifiers → verifiers-0.3.1/verifiers/legacy}/envs/experimental/composable/tasksets/swe/multi_swe/taskset.py +2 -2
  56. {verifiers-0.2.2.dev112/verifiers → verifiers-0.3.1/verifiers/legacy}/envs/experimental/composable/tasksets/swe/openswe/taskset.py +2 -2
  57. {verifiers-0.2.2.dev112/verifiers → verifiers-0.3.1/verifiers/legacy}/envs/experimental/composable/tasksets/swe/r2e_gym/taskset.py +2 -2
  58. {verifiers-0.2.2.dev112/verifiers → verifiers-0.3.1/verifiers/legacy}/envs/experimental/composable/tasksets/swe/scale_swe/taskset.py +2 -2
  59. {verifiers-0.2.2.dev112/verifiers → verifiers-0.3.1/verifiers/legacy}/envs/experimental/composable/tasksets/swe/swe_bench/taskset.py +2 -2
  60. {verifiers-0.2.2.dev112/verifiers → verifiers-0.3.1/verifiers/legacy}/envs/experimental/composable/tasksets/swe/swe_lego/taskset.py +3 -3
  61. {verifiers-0.2.2.dev112/verifiers → verifiers-0.3.1/verifiers/legacy}/envs/experimental/composable/tasksets/swe/swe_rebench_v2/taskset.py +3 -3
  62. {verifiers-0.2.2.dev112/verifiers → verifiers-0.3.1/verifiers/legacy}/envs/experimental/composable/tasksets/swe/swe_smith/taskset.py +2 -2
  63. {verifiers-0.2.2.dev112/verifiers → verifiers-0.3.1/verifiers/legacy}/envs/experimental/composable/tasksets/swe/swe_tasksets.py +10 -10
  64. {verifiers-0.2.2.dev112/verifiers → verifiers-0.3.1/verifiers/legacy}/envs/experimental/gym_env.py +3 -3
  65. {verifiers-0.2.2.dev112/verifiers → verifiers-0.3.1/verifiers/legacy}/envs/experimental/harbor_env/env.py +2 -2
  66. {verifiers-0.2.2.dev112/verifiers → verifiers-0.3.1/verifiers/legacy}/envs/experimental/harbor_env/mcp.py +1 -1
  67. {verifiers-0.2.2.dev112/verifiers → verifiers-0.3.1/verifiers/legacy}/envs/experimental/mcp_env.py +2 -2
  68. {verifiers-0.2.2.dev112/verifiers → verifiers-0.3.1/verifiers/legacy}/envs/experimental/opencode_env.py +5 -5
  69. {verifiers-0.2.2.dev112/verifiers → verifiers-0.3.1/verifiers/legacy}/envs/experimental/opencode_qa_env.py +2 -2
  70. {verifiers-0.2.2.dev112/verifiers → verifiers-0.3.1/verifiers/legacy}/envs/experimental/opencode_rlm_env.py +8 -5
  71. {verifiers-0.2.2.dev112/verifiers → verifiers-0.3.1/verifiers/legacy}/envs/experimental/sandbox_mixin.py +4 -4
  72. {verifiers-0.2.2.dev112/verifiers → verifiers-0.3.1/verifiers/legacy}/envs/experimental/utils/__init__.py +2 -2
  73. {verifiers-0.2.2.dev112/verifiers → verifiers-0.3.1/verifiers/legacy}/envs/experimental/utils/git_checkout_cache.py +2 -2
  74. {verifiers-0.2.2.dev112/verifiers → verifiers-0.3.1/verifiers/legacy}/envs/integrations/browser_env/__init__.py +1 -1
  75. {verifiers-0.2.2.dev112/verifiers → verifiers-0.3.1/verifiers/legacy}/envs/integrations/browser_env/browser_env.py +1 -1
  76. {verifiers-0.2.2.dev112/verifiers → verifiers-0.3.1/verifiers/legacy}/envs/integrations/browser_env/modes/base.py +1 -1
  77. {verifiers-0.2.2.dev112/verifiers → verifiers-0.3.1/verifiers/legacy}/envs/integrations/browser_env/modes/cua_mode.py +3 -1
  78. {verifiers-0.2.2.dev112/verifiers → verifiers-0.3.1/verifiers/legacy}/envs/integrations/browser_env/modes/dom_mode.py +1 -1
  79. {verifiers-0.2.2.dev112/verifiers → verifiers-0.3.1/verifiers/legacy}/envs/integrations/openenv_env.py +4 -4
  80. {verifiers-0.2.2.dev112/verifiers → verifiers-0.3.1/verifiers/legacy}/envs/integrations/reasoninggym_env.py +1 -1
  81. {verifiers-0.2.2.dev112/verifiers → verifiers-0.3.1/verifiers/legacy}/envs/integrations/textarena_env.py +1 -1
  82. {verifiers-0.2.2.dev112/verifiers → verifiers-0.3.1/verifiers/legacy}/envs/multiturn_env.py +5 -5
  83. {verifiers-0.2.2.dev112/verifiers → verifiers-0.3.1/verifiers/legacy}/envs/python_env.py +2 -2
  84. {verifiers-0.2.2.dev112/verifiers → verifiers-0.3.1/verifiers/legacy}/envs/sandbox_env.py +2 -2
  85. {verifiers-0.2.2.dev112/verifiers → verifiers-0.3.1/verifiers/legacy}/envs/singleturn_env.py +1 -1
  86. {verifiers-0.2.2.dev112/verifiers → verifiers-0.3.1/verifiers/legacy}/envs/stateful_tool_env.py +3 -3
  87. {verifiers-0.2.2.dev112/verifiers → verifiers-0.3.1/verifiers/legacy}/envs/tool_env.py +4 -4
  88. verifiers-0.3.1/verifiers/legacy/gepa/__init__.py +14 -0
  89. {verifiers-0.2.2.dev112/verifiers → verifiers-0.3.1/verifiers/legacy}/gepa/adapter.py +7 -7
  90. {verifiers-0.2.2.dev112/verifiers → verifiers-0.3.1/verifiers/legacy}/gepa/config.py +1 -1
  91. {verifiers-0.2.2.dev112/verifiers → verifiers-0.3.1/verifiers/legacy}/gepa/display.py +1 -1
  92. {verifiers-0.2.2.dev112/verifiers → verifiers-0.3.1/verifiers/legacy}/gepa/gepa_utils.py +1 -0
  93. {verifiers-0.2.2.dev112/verifiers → verifiers-0.3.1/verifiers/legacy}/parsers/maybe_think_parser.py +1 -1
  94. {verifiers-0.2.2.dev112/verifiers → verifiers-0.3.1/verifiers/legacy}/parsers/parser.py +1 -1
  95. {verifiers-0.2.2.dev112/verifiers → verifiers-0.3.1/verifiers/legacy}/parsers/think_parser.py +2 -2
  96. {verifiers-0.2.2.dev112/verifiers → verifiers-0.3.1/verifiers/legacy}/parsers/xml_parser.py +2 -2
  97. {verifiers-0.2.2.dev112/verifiers → verifiers-0.3.1/verifiers/legacy}/rubrics/experimental/hybrid_math_rubric.py +5 -5
  98. {verifiers-0.2.2.dev112/verifiers → verifiers-0.3.1/verifiers/legacy}/rubrics/judge_rubric.py +4 -4
  99. {verifiers-0.2.2.dev112/verifiers → verifiers-0.3.1/verifiers/legacy}/rubrics/math_rubric.py +6 -6
  100. {verifiers-0.2.2.dev112/verifiers → verifiers-0.3.1/verifiers/legacy}/rubrics/rubric.py +5 -5
  101. {verifiers-0.2.2.dev112/verifiers → verifiers-0.3.1/verifiers/legacy}/rubrics/rubric_group.py +2 -2
  102. {verifiers-0.2.2.dev112/verifiers → verifiers-0.3.1/verifiers/legacy}/scripts/eval.py +6 -6
  103. {verifiers-0.2.2.dev112/verifiers → verifiers-0.3.1/verifiers/legacy}/scripts/gepa.py +11 -11
  104. {verifiers-0.2.2.dev112/verifiers → verifiers-0.3.1/verifiers/legacy}/scripts/init.py +2 -2
  105. {verifiers-0.2.2.dev112/verifiers → verifiers-0.3.1/verifiers/legacy}/scripts/install.py +1 -1
  106. {verifiers-0.2.2.dev112/verifiers → verifiers-0.3.1/verifiers/legacy}/serve/__init__.py +7 -7
  107. {verifiers-0.2.2.dev112/verifiers → verifiers-0.3.1/verifiers/legacy}/serve/client/env_client.py +3 -3
  108. {verifiers-0.2.2.dev112/verifiers → verifiers-0.3.1/verifiers/legacy}/serve/client/zmq_env_client.py +4 -4
  109. verifiers-0.3.1/verifiers/legacy/serve/server/__init__.py +11 -0
  110. {verifiers-0.2.2.dev112/verifiers → verifiers-0.3.1/verifiers/legacy}/serve/server/env_router.py +5 -5
  111. {verifiers-0.2.2.dev112/verifiers → verifiers-0.3.1/verifiers/legacy}/serve/server/env_server.py +6 -6
  112. {verifiers-0.2.2.dev112/verifiers → verifiers-0.3.1/verifiers/legacy}/serve/server/env_worker.py +9 -9
  113. {verifiers-0.2.2.dev112/verifiers → verifiers-0.3.1/verifiers/legacy}/serve/server/zmq_env_server.py +1 -1
  114. {verifiers-0.2.2.dev112/verifiers → verifiers-0.3.1/verifiers/legacy}/serve/types.py +1 -1
  115. {verifiers-0.2.2.dev112/verifiers → verifiers-0.3.1/verifiers/legacy}/types.py +3 -3
  116. {verifiers-0.2.2.dev112/verifiers → verifiers-0.3.1/verifiers/legacy}/utils/async_utils.py +5 -5
  117. {verifiers-0.2.2.dev112/verifiers → verifiers-0.3.1/verifiers/legacy}/utils/client_utils.py +2 -2
  118. {verifiers-0.2.2.dev112/verifiers → verifiers-0.3.1/verifiers/legacy}/utils/display_utils.py +1 -1
  119. {verifiers-0.2.2.dev112/verifiers → verifiers-0.3.1/verifiers/legacy}/utils/env_utils.py +3 -3
  120. {verifiers-0.2.2.dev112/verifiers → verifiers-0.3.1/verifiers/legacy}/utils/error_utils.py +2 -2
  121. {verifiers-0.2.2.dev112/verifiers → verifiers-0.3.1/verifiers/legacy}/utils/eval_display.py +6 -6
  122. {verifiers-0.2.2.dev112/verifiers → verifiers-0.3.1/verifiers/legacy}/utils/eval_utils.py +17 -14
  123. {verifiers-0.2.2.dev112/verifiers → verifiers-0.3.1/verifiers/legacy}/utils/interception_utils.py +6 -4
  124. {verifiers-0.2.2.dev112/verifiers → verifiers-0.3.1/verifiers/legacy}/utils/logging_utils.py +4 -4
  125. {verifiers-0.2.2.dev112/verifiers → verifiers-0.3.1/verifiers/legacy}/utils/message_utils.py +2 -2
  126. {verifiers-0.2.2.dev112/verifiers → verifiers-0.3.1/verifiers/legacy}/utils/metric_utils.py +1 -1
  127. {verifiers-0.2.2.dev112/verifiers → verifiers-0.3.1/verifiers/legacy}/utils/path_utils.py +1 -1
  128. {verifiers-0.2.2.dev112/verifiers → verifiers-0.3.1/verifiers/legacy}/utils/pricing_utils.py +1 -1
  129. {verifiers-0.2.2.dev112/verifiers → verifiers-0.3.1/verifiers/legacy}/utils/process_utils.py +0 -13
  130. {verifiers-0.2.2.dev112/verifiers → verifiers-0.3.1/verifiers/legacy}/utils/response_utils.py +1 -1
  131. {verifiers-0.2.2.dev112/verifiers → verifiers-0.3.1/verifiers/legacy}/utils/save_utils.py +10 -8
  132. {verifiers-0.2.2.dev112/verifiers → verifiers-0.3.1/verifiers/legacy}/utils/threaded_sandbox_client.py +1 -1
  133. {verifiers-0.2.2.dev112/verifiers → verifiers-0.3.1/verifiers/legacy}/utils/tool_utils.py +1 -1
  134. {verifiers-0.2.2.dev112/verifiers → verifiers-0.3.1/verifiers/legacy}/utils/usage_utils.py +1 -1
  135. {verifiers-0.2.2.dev112/verifiers → verifiers-0.3.1/verifiers/legacy}/utils/version_utils.py +1 -1
  136. {verifiers-0.2.2.dev112 → verifiers-0.3.1}/verifiers/v1/__init__.py +44 -10
  137. {verifiers-0.2.2.dev112 → verifiers-0.3.1}/verifiers/v1/acp/__init__.py +114 -139
  138. {verifiers-0.2.2.dev112 → verifiers-0.3.1}/verifiers/v1/acp/runner.py +31 -195
  139. {verifiers-0.2.2.dev112 → verifiers-0.3.1}/verifiers/v1/agent.py +15 -13
  140. {verifiers-0.2.2.dev112 → verifiers-0.3.1}/verifiers/v1/cli/dashboard/eval.py +112 -35
  141. {verifiers-0.2.2.dev112 → verifiers-0.3.1}/verifiers/v1/cli/dashboard/replay.py +3 -7
  142. {verifiers-0.2.2.dev112 → verifiers-0.3.1}/verifiers/v1/cli/debug.py +7 -3
  143. verifiers-0.3.1/verifiers/v1/cli/eval/main.py +148 -0
  144. verifiers-0.3.1/verifiers/v1/cli/eval/resume.py +89 -0
  145. verifiers-0.3.1/verifiers/v1/cli/eval/runner.py +249 -0
  146. {verifiers-0.2.2.dev112 → verifiers-0.3.1}/verifiers/v1/cli/gepa.py +15 -9
  147. {verifiers-0.2.2.dev112 → verifiers-0.3.1}/verifiers/v1/cli/init.py +13 -40
  148. verifiers-0.3.1/verifiers/v1/cli/output.py +208 -0
  149. {verifiers-0.2.2.dev112 → verifiers-0.3.1}/verifiers/v1/cli/replay.py +15 -16
  150. {verifiers-0.2.2.dev112 → verifiers-0.3.1}/verifiers/v1/cli/resolve.py +2 -2
  151. verifiers-0.3.1/verifiers/v1/cli/resume.py +15 -0
  152. {verifiers-0.2.2.dev112 → verifiers-0.3.1}/verifiers/v1/cli/validate.py +59 -105
  153. {verifiers-0.2.2.dev112 → verifiers-0.3.1}/verifiers/v1/clients/base.py +3 -2
  154. {verifiers-0.2.2.dev112 → verifiers-0.3.1}/verifiers/v1/clients/client.py +6 -9
  155. {verifiers-0.2.2.dev112 → verifiers-0.3.1}/verifiers/v1/clients/eval.py +5 -6
  156. {verifiers-0.2.2.dev112 → verifiers-0.3.1}/verifiers/v1/clients/train.py +23 -13
  157. {verifiers-0.2.2.dev112 → verifiers-0.3.1}/verifiers/v1/configs/agent.py +2 -2
  158. verifiers-0.3.1/verifiers/v1/configs/cli/__init__.py +1 -0
  159. {verifiers-0.2.2.dev112 → verifiers-0.3.1}/verifiers/v1/configs/cli/debug.py +3 -3
  160. {verifiers-0.2.2.dev112 → verifiers-0.3.1}/verifiers/v1/configs/cli/env.py +3 -4
  161. verifiers-0.3.1/verifiers/v1/configs/cli/eval.py +137 -0
  162. {verifiers-0.2.2.dev112 → verifiers-0.3.1}/verifiers/v1/configs/cli/init.py +1 -3
  163. {verifiers-0.2.2.dev112 → verifiers-0.3.1}/verifiers/v1/configs/cli/replay.py +3 -2
  164. {verifiers-0.2.2.dev112 → verifiers-0.3.1}/verifiers/v1/configs/cli/validate.py +27 -12
  165. {verifiers-0.2.2.dev112 → verifiers-0.3.1}/verifiers/v1/configs/client.py +1 -1
  166. {verifiers-0.2.2.dev112 → verifiers-0.3.1}/verifiers/v1/configs/env.py +3 -4
  167. {verifiers-0.2.2.dev112 → verifiers-0.3.1}/verifiers/v1/configs/harness.py +2 -3
  168. {verifiers-0.2.2.dev112 → verifiers-0.3.1}/verifiers/v1/configs/judge.py +3 -4
  169. verifiers-0.3.1/verifiers/v1/configs/runtime.py +72 -0
  170. {verifiers-0.2.2.dev112 → verifiers-0.3.1}/verifiers/v1/configs/serve.py +4 -2
  171. verifiers-0.3.1/verifiers/v1/configs/task.py +63 -0
  172. {verifiers-0.2.2.dev112 → verifiers-0.3.1}/verifiers/v1/configs/taskset.py +2 -3
  173. {verifiers-0.2.2.dev112 → verifiers-0.3.1}/verifiers/v1/dialects/__init__.py +0 -2
  174. verifiers-0.3.1/verifiers/v1/dialects/anthropic.py +711 -0
  175. {verifiers-0.2.2.dev112 → verifiers-0.3.1}/verifiers/v1/dialects/base.py +153 -38
  176. verifiers-0.3.1/verifiers/v1/dialects/chat.py +576 -0
  177. verifiers-0.3.1/verifiers/v1/dialects/responses.py +765 -0
  178. {verifiers-0.2.2.dev112 → verifiers-0.3.1}/verifiers/v1/env.py +15 -4
  179. {verifiers-0.2.2.dev112 → verifiers-0.3.1}/verifiers/v1/episode.py +85 -8
  180. {verifiers-0.2.2.dev112 → verifiers-0.3.1}/verifiers/v1/gepa/config.py +18 -10
  181. {verifiers-0.2.2.dev112 → verifiers-0.3.1}/verifiers/v1/gepa/dataset.py +3 -3
  182. {verifiers-0.2.2.dev112 → verifiers-0.3.1}/verifiers/v1/gepa/runner.py +2 -2
  183. {verifiers-0.2.2.dev112 → verifiers-0.3.1}/verifiers/v1/graph.py +26 -1
  184. {verifiers-0.2.2.dev112 → verifiers-0.3.1}/verifiers/v1/harness.py +29 -3
  185. {verifiers-0.2.2.dev112 → verifiers-0.3.1}/verifiers/v1/harnesses/bash/harness.py +5 -1
  186. {verifiers-0.2.2.dev112 → verifiers-0.3.1}/verifiers/v1/harnesses/bash/program.py +84 -43
  187. {verifiers-0.2.2.dev112 → verifiers-0.3.1}/verifiers/v1/harnesses/claude_code/harness.py +17 -74
  188. {verifiers-0.2.2.dev112 → verifiers-0.3.1}/verifiers/v1/harnesses/codex/harness.py +23 -74
  189. verifiers-0.3.1/verifiers/v1/harnesses/hermes_agent/harness.py +103 -0
  190. verifiers-0.3.1/verifiers/v1/harnesses/hermes_agent/program.py +19 -0
  191. verifiers-0.3.1/verifiers/v1/harnesses/kimi_code/harness.py +131 -0
  192. {verifiers-0.2.2.dev112 → verifiers-0.3.1}/verifiers/v1/harnesses/mini_swe_agent/program.py +1 -1
  193. verifiers-0.3.1/verifiers/v1/harnesses/openclaw/harness.py +240 -0
  194. {verifiers-0.2.2.dev112 → verifiers-0.3.1}/verifiers/v1/harnesses/pi/harness.py +57 -84
  195. {verifiers-0.2.2.dev112 → verifiers-0.3.1}/verifiers/v1/harnesses/pool/harness.py +10 -16
  196. {verifiers-0.2.2.dev112 → verifiers-0.3.1}/verifiers/v1/harnesses/rlm/harness.py +12 -45
  197. {verifiers-0.2.2.dev112 → verifiers-0.3.1}/verifiers/v1/harnesses/terminus_2/harness.py +1 -1
  198. {verifiers-0.2.2.dev112 → verifiers-0.3.1}/verifiers/v1/interception/server.py +348 -115
  199. verifiers-0.3.1/verifiers/v1/interception/tool.py +12 -0
  200. {verifiers-0.2.2.dev112 → verifiers-0.3.1}/verifiers/v1/interception/tunnel/prime.py +5 -0
  201. {verifiers-0.2.2.dev112 → verifiers-0.3.1}/verifiers/v1/mcp/launch.py +8 -3
  202. {verifiers-0.2.2.dev112 → verifiers-0.3.1}/verifiers/v1/rollout.py +122 -13
  203. {verifiers-0.2.2.dev112 → verifiers-0.3.1}/verifiers/v1/runtimes/__init__.py +12 -3
  204. {verifiers-0.2.2.dev112 → verifiers-0.3.1}/verifiers/v1/runtimes/base.py +16 -45
  205. {verifiers-0.2.2.dev112 → verifiers-0.3.1}/verifiers/v1/runtimes/docker/__init__.py +15 -11
  206. {verifiers-0.2.2.dev112 → verifiers-0.3.1}/verifiers/v1/runtimes/docker/egress.py +35 -41
  207. {verifiers-0.2.2.dev112 → verifiers-0.3.1}/verifiers/v1/runtimes/limiters.py +1 -1
  208. {verifiers-0.2.2.dev112 → verifiers-0.3.1}/verifiers/v1/runtimes/modal.py +3 -2
  209. {verifiers-0.2.2.dev112 → verifiers-0.3.1}/verifiers/v1/runtimes/prime.py +99 -45
  210. {verifiers-0.2.2.dev112 → verifiers-0.3.1}/verifiers/v1/runtimes/subprocess.py +7 -5
  211. {verifiers-0.2.2.dev112 → verifiers-0.3.1}/verifiers/v1/serve/__init__.py +0 -8
  212. {verifiers-0.2.2.dev112 → verifiers-0.3.1}/verifiers/v1/serve/client.py +38 -36
  213. verifiers-0.3.1/verifiers/v1/serve/encoding.py +65 -0
  214. {verifiers-0.2.2.dev112 → verifiers-0.3.1}/verifiers/v1/serve/pool.py +54 -43
  215. {verifiers-0.2.2.dev112 → verifiers-0.3.1}/verifiers/v1/serve/server.py +30 -42
  216. verifiers-0.3.1/verifiers/v1/serve/types.py +57 -0
  217. verifiers-0.3.1/verifiers/v1/session.py +402 -0
  218. {verifiers-0.2.2.dev112 → verifiers-0.3.1}/verifiers/v1/task.py +54 -6
  219. {verifiers-0.2.2.dev112 → verifiers-0.3.1}/verifiers/v1/tasksets/harbor/env.py +4 -1
  220. {verifiers-0.2.2.dev112 → verifiers-0.3.1}/verifiers/v1/tasksets/harbor/taskset.py +72 -24
  221. {verifiers-0.2.2.dev112 → verifiers-0.3.1}/verifiers/v1/tasksets/nemo_gym/response.py +12 -4
  222. {verifiers-0.2.2.dev112 → verifiers-0.3.1}/verifiers/v1/tasksets/nemo_gym/taskset.py +2 -2
  223. {verifiers-0.2.2.dev112 → verifiers-0.3.1}/verifiers/v1/trace.py +118 -31
  224. {verifiers-0.2.2.dev112 → verifiers-0.3.1}/verifiers/v1/types.py +28 -12
  225. {verifiers-0.2.2.dev112 → verifiers-0.3.1}/verifiers/v1/utils/compile.py +10 -9
  226. {verifiers-0.2.2.dev112 → verifiers-0.3.1}/verifiers/v1/utils/decorators.py +21 -4
  227. {verifiers-0.2.2.dev112 → verifiers-0.3.1}/verifiers/v1/utils/loaders.py +85 -22
  228. {verifiers-0.2.2.dev112 → verifiers-0.3.1}/verifiers/v1/utils/logging.py +4 -0
  229. verifiers-0.3.1/verifiers/v1/utils/paths.py +13 -0
  230. {verifiers-0.2.2.dev112 → verifiers-0.3.1}/verifiers/v1/utils/platform.py +62 -34
  231. verifiers-0.3.1/verifiers/v1/utils/prime.py +29 -0
  232. verifiers-0.2.2.dev112/tests/v1/fixtures/echo_multi_v0.py +0 -54
  233. verifiers-0.2.2.dev112/tests/v1/fixtures/echo_v0.py +0 -33
  234. verifiers-0.2.2.dev112/tests/v1/test_legacy.py +0 -44
  235. verifiers-0.2.2.dev112/tests/v1/test_scoring.py +0 -31
  236. verifiers-0.2.2.dev112/verifiers/envs/experimental/__init__.py +0 -36
  237. verifiers-0.2.2.dev112/verifiers/envs/experimental/composable/__init__.py +0 -29
  238. verifiers-0.2.2.dev112/verifiers/gepa/__init__.py +0 -14
  239. verifiers-0.2.2.dev112/verifiers/serve/server/__init__.py +0 -11
  240. verifiers-0.2.2.dev112/verifiers/v1/cli/eval/main.py +0 -130
  241. verifiers-0.2.2.dev112/verifiers/v1/cli/eval/resume.py +0 -131
  242. verifiers-0.2.2.dev112/verifiers/v1/cli/eval/runner.py +0 -295
  243. verifiers-0.2.2.dev112/verifiers/v1/cli/output.py +0 -138
  244. verifiers-0.2.2.dev112/verifiers/v1/cli/resume.py +0 -42
  245. verifiers-0.2.2.dev112/verifiers/v1/configs/cli/__init__.py +0 -8
  246. verifiers-0.2.2.dev112/verifiers/v1/configs/cli/eval.py +0 -142
  247. verifiers-0.2.2.dev112/verifiers/v1/configs/legacy.py +0 -24
  248. verifiers-0.2.2.dev112/verifiers/v1/configs/task.py +0 -32
  249. verifiers-0.2.2.dev112/verifiers/v1/dialects/anthropic.py +0 -344
  250. verifiers-0.2.2.dev112/verifiers/v1/dialects/chat.py +0 -357
  251. verifiers-0.2.2.dev112/verifiers/v1/dialects/responses.py +0 -357
  252. verifiers-0.2.2.dev112/verifiers/v1/harnesses/hermes_agent/harness.py +0 -140
  253. verifiers-0.2.2.dev112/verifiers/v1/harnesses/hermes_agent/program.py +0 -10
  254. verifiers-0.2.2.dev112/verifiers/v1/harnesses/kimi_code/harness.py +0 -135
  255. verifiers-0.2.2.dev112/verifiers/v1/harnesses/openclaw/harness.py +0 -352
  256. verifiers-0.2.2.dev112/verifiers/v1/legacy.py +0 -580
  257. verifiers-0.2.2.dev112/verifiers/v1/serve/types.py +0 -86
  258. verifiers-0.2.2.dev112/verifiers/v1/session.py +0 -144
  259. verifiers-0.2.2.dev112/verifiers/v1/utils/install.py +0 -39
  260. {verifiers-0.2.2.dev112 → verifiers-0.3.1}/.gitignore +0 -0
  261. {verifiers-0.2.2.dev112 → verifiers-0.3.1}/LICENSE +0 -0
  262. {verifiers-0.2.2.dev112 → verifiers-0.3.1}/README.md +0 -0
  263. {verifiers-0.2.2.dev112 → verifiers-0.3.1}/tests/__init__.py +0 -0
  264. {verifiers-0.2.2.dev112 → verifiers-0.3.1}/tests/conftest.py +0 -0
  265. {verifiers-0.2.2.dev112 → verifiers-0.3.1}/tests/test_browser_env.py +0 -0
  266. {verifiers-0.2.2.dev112 → verifiers-0.3.1}/tests/test_build_script.py +0 -0
  267. {verifiers-0.2.2.dev112 → verifiers-0.3.1}/tests/test_cli_agent_env.py +0 -0
  268. {verifiers-0.2.2.dev112 → verifiers-0.3.1}/tests/test_client_auth_errors.py +0 -0
  269. {verifiers-0.2.2.dev112 → verifiers-0.3.1}/tests/test_client_config.py +0 -0
  270. {verifiers-0.2.2.dev112 → verifiers-0.3.1}/tests/test_client_multimodal_types.py +0 -0
  271. {verifiers-0.2.2.dev112 → verifiers-0.3.1}/tests/test_composable_env.py +0 -0
  272. {verifiers-0.2.2.dev112 → verifiers-0.3.1}/tests/test_context_token_metrics.py +0 -0
  273. {verifiers-0.2.2.dev112 → verifiers-0.3.1}/tests/test_decorator_ranks.py +0 -0
  274. {verifiers-0.2.2.dev112 → verifiers-0.3.1}/tests/test_endpoint_registry.py +0 -0
  275. {verifiers-0.2.2.dev112 → verifiers-0.3.1}/tests/test_env_group.py +0 -0
  276. {verifiers-0.2.2.dev112 → verifiers-0.3.1}/tests/test_env_server.py +0 -0
  277. {verifiers-0.2.2.dev112 → verifiers-0.3.1}/tests/test_environment.py +0 -0
  278. {verifiers-0.2.2.dev112 → verifiers-0.3.1}/tests/test_environment_extra.py +0 -0
  279. {verifiers-0.2.2.dev112 → verifiers-0.3.1}/tests/test_error_chain.py +0 -0
  280. {verifiers-0.2.2.dev112 → verifiers-0.3.1}/tests/test_eval_display.py +0 -0
  281. {verifiers-0.2.2.dev112 → verifiers-0.3.1}/tests/test_eval_utils.py +0 -0
  282. {verifiers-0.2.2.dev112 → verifiers-0.3.1}/tests/test_gepa_cli.py +0 -0
  283. {verifiers-0.2.2.dev112 → verifiers-0.3.1}/tests/test_gepa_utils.py +0 -0
  284. {verifiers-0.2.2.dev112 → verifiers-0.3.1}/tests/test_gym_env.py +0 -0
  285. {verifiers-0.2.2.dev112 → verifiers-0.3.1}/tests/test_harbor_env_mcp.py +0 -0
  286. {verifiers-0.2.2.dev112 → verifiers-0.3.1}/tests/test_init_script.py +0 -0
  287. {verifiers-0.2.2.dev112 → verifiers-0.3.1}/tests/test_install_utils.py +0 -0
  288. {verifiers-0.2.2.dev112 → verifiers-0.3.1}/tests/test_interception_utils.py +0 -0
  289. {verifiers-0.2.2.dev112 → verifiers-0.3.1}/tests/test_logging.py +0 -0
  290. {verifiers-0.2.2.dev112 → verifiers-0.3.1}/tests/test_math_rubric.py +0 -0
  291. {verifiers-0.2.2.dev112 → verifiers-0.3.1}/tests/test_maybe_think_parser.py +0 -0
  292. {verifiers-0.2.2.dev112 → verifiers-0.3.1}/tests/test_message_utils.py +0 -0
  293. {verifiers-0.2.2.dev112 → verifiers-0.3.1}/tests/test_message_utils_multimodal.py +0 -0
  294. {verifiers-0.2.2.dev112 → verifiers-0.3.1}/tests/test_multiturn_env.py +0 -0
  295. {verifiers-0.2.2.dev112 → verifiers-0.3.1}/tests/test_nemorl_client.py +0 -0
  296. {verifiers-0.2.2.dev112 → verifiers-0.3.1}/tests/test_openai_chat_completions_token_client.py +0 -0
  297. {verifiers-0.2.2.dev112 → verifiers-0.3.1}/tests/test_openai_responses_client.py +0 -0
  298. {verifiers-0.2.2.dev112 → verifiers-0.3.1}/tests/test_opencode_rlm_env.py +0 -0
  299. {verifiers-0.2.2.dev112 → verifiers-0.3.1}/tests/test_openenv_client.py +0 -0
  300. {verifiers-0.2.2.dev112 → verifiers-0.3.1}/tests/test_parser.py +0 -0
  301. {verifiers-0.2.2.dev112 → verifiers-0.3.1}/tests/test_path_utils.py +0 -0
  302. {verifiers-0.2.2.dev112 → verifiers-0.3.1}/tests/test_per_turn_timing.py +0 -0
  303. {verifiers-0.2.2.dev112 → verifiers-0.3.1}/tests/test_pricing_utils.py +0 -0
  304. {verifiers-0.2.2.dev112 → verifiers-0.3.1}/tests/test_prime_plugin.py +0 -0
  305. {verifiers-0.2.2.dev112 → verifiers-0.3.1}/tests/test_renderer_client.py +0 -0
  306. {verifiers-0.2.2.dev112 → verifiers-0.3.1}/tests/test_renderer_e2e.py +0 -0
  307. {verifiers-0.2.2.dev112 → verifiers-0.3.1}/tests/test_rlm_composable_env.py +0 -0
  308. {verifiers-0.2.2.dev112 → verifiers-0.3.1}/tests/test_rubric.py +0 -0
  309. {verifiers-0.2.2.dev112 → verifiers-0.3.1}/tests/test_rubric_group.py +0 -0
  310. {verifiers-0.2.2.dev112 → verifiers-0.3.1}/tests/test_sandbox_debug_env.py +0 -0
  311. {verifiers-0.2.2.dev112 → verifiers-0.3.1}/tests/test_sandbox_env.py +0 -0
  312. {verifiers-0.2.2.dev112 → verifiers-0.3.1}/tests/test_sandbox_mixin.py +0 -0
  313. {verifiers-0.2.2.dev112 → verifiers-0.3.1}/tests/test_save_utils.py +0 -0
  314. {verifiers-0.2.2.dev112 → verifiers-0.3.1}/tests/test_setup_script.py +0 -0
  315. {verifiers-0.2.2.dev112 → verifiers-0.3.1}/tests/test_singleturn_env.py +0 -0
  316. {verifiers-0.2.2.dev112 → verifiers-0.3.1}/tests/test_stateful_tool_env.py +0 -0
  317. {verifiers-0.2.2.dev112 → verifiers-0.3.1}/tests/test_think_parser.py +0 -0
  318. {verifiers-0.2.2.dev112 → verifiers-0.3.1}/tests/test_tool_env.py +0 -0
  319. {verifiers-0.2.2.dev112 → verifiers-0.3.1}/tests/test_tool_utils.py +0 -0
  320. {verifiers-0.2.2.dev112 → verifiers-0.3.1}/tests/test_trajectory_processing.py +0 -0
  321. {verifiers-0.2.2.dev112 → verifiers-0.3.1}/tests/test_tui_info_formatting.py +0 -0
  322. {verifiers-0.2.2.dev112 → verifiers-0.3.1}/tests/test_types.py +0 -0
  323. {verifiers-0.2.2.dev112 → verifiers-0.3.1}/tests/test_xml_parser.py +0 -0
  324. {verifiers-0.2.2.dev112 → verifiers-0.3.1}/tests/v1/fixtures/duet_v1.py +0 -0
  325. {verifiers-0.2.2.dev112 → verifiers-0.3.1}/tests/v1/fixtures/echo_agentic_v1.py +0 -0
  326. {verifiers-0.2.2.dev112 → verifiers-0.3.1}/tests/v1/fixtures/echo_user_sim_v1.py +0 -0
  327. {verifiers-0.2.2.dev112 → verifiers-0.3.1}/tests/v1/fixtures/pyproject.toml +0 -0
  328. {verifiers-0.2.2.dev112 → verifiers-0.3.1}/tests/v1/test_graph.py +0 -0
  329. {verifiers-0.2.2.dev112 → verifiers-0.3.1}/verifiers/cli/__init__.py +0 -0
  330. {verifiers-0.2.2.dev112 → verifiers-0.3.1}/verifiers/cli/commands/__init__.py +0 -0
  331. {verifiers-0.2.2.dev112 → verifiers-0.3.1}/verifiers/cli/plugins/__init__.py +0 -0
  332. {verifiers-0.2.2.dev112 → verifiers-0.3.1}/verifiers/cli/plugins/prime.py +0 -0
  333. {verifiers-0.2.2.dev112/verifiers → verifiers-0.3.1/verifiers/legacy}/decorators.py +0 -0
  334. {verifiers-0.2.2.dev112/verifiers → verifiers-0.3.1/verifiers/legacy}/envs/__init__.py +0 -0
  335. {verifiers-0.2.2.dev112/verifiers → verifiers-0.3.1/verifiers/legacy}/envs/experimental/README.md +0 -0
  336. {verifiers-0.2.2.dev112/verifiers → verifiers-0.3.1/verifiers/legacy}/envs/experimental/composable/README.md +0 -0
  337. {verifiers-0.2.2.dev112/verifiers → verifiers-0.3.1/verifiers/legacy}/envs/experimental/composable/_filter.py +0 -0
  338. {verifiers-0.2.2.dev112/verifiers → verifiers-0.3.1/verifiers/legacy}/envs/experimental/composable/harnesses/prompt.txt +0 -0
  339. {verifiers-0.2.2.dev112/verifiers → verifiers-0.3.1/verifiers/legacy}/envs/experimental/composable/swe_debug_env.py +0 -0
  340. {verifiers-0.2.2.dev112/verifiers → verifiers-0.3.1/verifiers/legacy}/envs/experimental/composable/tasksets/cp/__init__.py +0 -0
  341. {verifiers-0.2.2.dev112/verifiers → verifiers-0.3.1/verifiers/legacy}/envs/experimental/composable/tasksets/cp/test_utils.py +0 -0
  342. {verifiers-0.2.2.dev112/verifiers → verifiers-0.3.1/verifiers/legacy}/envs/experimental/composable/tasksets/harbor/__init__.py +0 -0
  343. {verifiers-0.2.2.dev112/verifiers → verifiers-0.3.1/verifiers/legacy}/envs/experimental/composable/tasksets/math/__init__.py +0 -0
  344. {verifiers-0.2.2.dev112/verifiers → verifiers-0.3.1/verifiers/legacy}/envs/experimental/composable/tasksets/swe/README.md +0 -0
  345. {verifiers-0.2.2.dev112/verifiers → verifiers-0.3.1/verifiers/legacy}/envs/experimental/composable/tasksets/swe/__init__.py +0 -0
  346. {verifiers-0.2.2.dev112/verifiers → verifiers-0.3.1/verifiers/legacy}/envs/experimental/composable/tasksets/swe/multi_swe/__init__.py +0 -0
  347. {verifiers-0.2.2.dev112/verifiers → verifiers-0.3.1/verifiers/legacy}/envs/experimental/composable/tasksets/swe/multi_swe/extract_fix_patch.sh +0 -0
  348. {verifiers-0.2.2.dev112/verifiers → verifiers-0.3.1/verifiers/legacy}/envs/experimental/composable/tasksets/swe/openswe/__init__.py +0 -0
  349. {verifiers-0.2.2.dev112/verifiers → verifiers-0.3.1/verifiers/legacy}/envs/experimental/composable/tasksets/swe/r2e_gym/__init__.py +0 -0
  350. {verifiers-0.2.2.dev112/verifiers → verifiers-0.3.1/verifiers/legacy}/envs/experimental/composable/tasksets/swe/r2e_gym/log_parser.py +0 -0
  351. {verifiers-0.2.2.dev112/verifiers → verifiers-0.3.1/verifiers/legacy}/envs/experimental/composable/tasksets/swe/scale_swe/__init__.py +0 -0
  352. {verifiers-0.2.2.dev112/verifiers → verifiers-0.3.1/verifiers/legacy}/envs/experimental/composable/tasksets/swe/shared/__init__.py +0 -0
  353. {verifiers-0.2.2.dev112/verifiers → verifiers-0.3.1/verifiers/legacy}/envs/experimental/composable/tasksets/swe/shared/test_patch.py +0 -0
  354. {verifiers-0.2.2.dev112/verifiers → verifiers-0.3.1/verifiers/legacy}/envs/experimental/composable/tasksets/swe/swe_bench/__init__.py +0 -0
  355. {verifiers-0.2.2.dev112/verifiers → verifiers-0.3.1/verifiers/legacy}/envs/experimental/composable/tasksets/swe/swe_lego/__init__.py +0 -0
  356. {verifiers-0.2.2.dev112/verifiers → verifiers-0.3.1/verifiers/legacy}/envs/experimental/composable/tasksets/swe/swe_rebench_v2/__init__.py +0 -0
  357. {verifiers-0.2.2.dev112/verifiers → verifiers-0.3.1/verifiers/legacy}/envs/experimental/composable/tasksets/swe/swe_rebench_v2/log_parsers.py +0 -0
  358. {verifiers-0.2.2.dev112/verifiers → verifiers-0.3.1/verifiers/legacy}/envs/experimental/composable/tasksets/swe/swe_smith/__init__.py +0 -0
  359. {verifiers-0.2.2.dev112/verifiers → verifiers-0.3.1/verifiers/legacy}/envs/experimental/harbor_env/__init__.py +0 -0
  360. {verifiers-0.2.2.dev112/verifiers → verifiers-0.3.1/verifiers/legacy}/envs/experimental/utils/file_locks.py +0 -0
  361. {verifiers-0.2.2.dev112/verifiers → verifiers-0.3.1/verifiers/legacy}/envs/integrations/README.md +0 -0
  362. {verifiers-0.2.2.dev112/verifiers → verifiers-0.3.1/verifiers/legacy}/envs/integrations/__init__.py +0 -0
  363. {verifiers-0.2.2.dev112/verifiers → verifiers-0.3.1/verifiers/legacy}/envs/integrations/browser_env/README.md +0 -0
  364. {verifiers-0.2.2.dev112/verifiers → verifiers-0.3.1/verifiers/legacy}/envs/integrations/browser_env/modes/__init__.py +0 -0
  365. {verifiers-0.2.2.dev112/verifiers → verifiers-0.3.1/verifiers/legacy}/errors.py +0 -0
  366. {verifiers-0.2.2.dev112/verifiers → verifiers-0.3.1/verifiers/legacy}/parsers/__init__.py +0 -0
  367. {verifiers-0.2.2.dev112/verifiers → verifiers-0.3.1/verifiers/legacy}/rubrics/__init__.py +0 -0
  368. {verifiers-0.2.2.dev112/verifiers → verifiers-0.3.1/verifiers/legacy}/scripts/__init__.py +0 -0
  369. {verifiers-0.2.2.dev112/verifiers → verifiers-0.3.1/verifiers/legacy}/scripts/build.py +0 -0
  370. {verifiers-0.2.2.dev112/verifiers → verifiers-0.3.1/verifiers/legacy}/scripts/setup.py +0 -0
  371. {verifiers-0.2.2.dev112/verifiers → verifiers-0.3.1/verifiers/legacy}/scripts/tui.py +0 -0
  372. {verifiers-0.2.2.dev112/verifiers → verifiers-0.3.1/verifiers/legacy}/utils/__init__.py +0 -0
  373. {verifiers-0.2.2.dev112/verifiers → verifiers-0.3.1/verifiers/legacy}/utils/config_utils.py +0 -0
  374. {verifiers-0.2.2.dev112/verifiers → verifiers-0.3.1/verifiers/legacy}/utils/data_utils.py +0 -0
  375. {verifiers-0.2.2.dev112/verifiers → verifiers-0.3.1/verifiers/legacy}/utils/env_config_utils.py +0 -0
  376. {verifiers-0.2.2.dev112/verifiers → verifiers-0.3.1/verifiers/legacy}/utils/heartbeat.py +0 -0
  377. {verifiers-0.2.2.dev112/verifiers → verifiers-0.3.1/verifiers/legacy}/utils/import_utils.py +0 -0
  378. {verifiers-0.2.2.dev112/verifiers → verifiers-0.3.1/verifiers/legacy}/utils/install_utils.py +0 -0
  379. {verifiers-0.2.2.dev112/verifiers → verifiers-0.3.1/verifiers/legacy}/utils/serve_utils.py +0 -0
  380. {verifiers-0.2.2.dev112/verifiers → verifiers-0.3.1/verifiers/legacy}/utils/thread_utils.py +0 -0
  381. {verifiers-0.2.2.dev112 → verifiers-0.3.1}/verifiers/v1/cli/__init__.py +0 -0
  382. {verifiers-0.2.2.dev112 → verifiers-0.3.1}/verifiers/v1/cli/dashboard/__init__.py +0 -0
  383. {verifiers-0.2.2.dev112 → verifiers-0.3.1}/verifiers/v1/cli/dashboard/base.py +0 -0
  384. {verifiers-0.2.2.dev112 → verifiers-0.3.1}/verifiers/v1/cli/dashboard/validate.py +0 -0
  385. {verifiers-0.2.2.dev112 → verifiers-0.3.1}/verifiers/v1/cli/eval/__init__.py +0 -0
  386. {verifiers-0.2.2.dev112 → verifiers-0.3.1}/verifiers/v1/clients/__init__.py +0 -0
  387. {verifiers-0.2.2.dev112 → verifiers-0.3.1}/verifiers/v1/configs/__init__.py +0 -0
  388. {verifiers-0.2.2.dev112 → verifiers-0.3.1}/verifiers/v1/configs/retries.py +0 -0
  389. {verifiers-0.2.2.dev112 → verifiers-0.3.1}/verifiers/v1/envs/__init__.py +0 -0
  390. {verifiers-0.2.2.dev112 → verifiers-0.3.1}/verifiers/v1/envs/agentic_judge/__init__.py +0 -0
  391. {verifiers-0.2.2.dev112 → verifiers-0.3.1}/verifiers/v1/envs/agentic_judge/env.py +0 -0
  392. {verifiers-0.2.2.dev112 → verifiers-0.3.1}/verifiers/v1/envs/best_of_n/__init__.py +0 -0
  393. {verifiers-0.2.2.dev112 → verifiers-0.3.1}/verifiers/v1/envs/best_of_n/env.py +0 -0
  394. {verifiers-0.2.2.dev112 → verifiers-0.3.1}/verifiers/v1/envs/shared_agentic_judge/__init__.py +0 -0
  395. {verifiers-0.2.2.dev112 → verifiers-0.3.1}/verifiers/v1/envs/single_agent/__init__.py +0 -0
  396. {verifiers-0.2.2.dev112 → verifiers-0.3.1}/verifiers/v1/envs/single_agent/env.py +0 -0
  397. {verifiers-0.2.2.dev112 → verifiers-0.3.1}/verifiers/v1/envs/user_sim/__init__.py +0 -0
  398. {verifiers-0.2.2.dev112 → verifiers-0.3.1}/verifiers/v1/envs/user_sim/env.py +0 -0
  399. {verifiers-0.2.2.dev112 → verifiers-0.3.1}/verifiers/v1/errors.py +0 -0
  400. {verifiers-0.2.2.dev112 → verifiers-0.3.1}/verifiers/v1/gepa/__init__.py +0 -0
  401. {verifiers-0.2.2.dev112 → verifiers-0.3.1}/verifiers/v1/gepa/adapter.py +0 -0
  402. {verifiers-0.2.2.dev112 → verifiers-0.3.1}/verifiers/v1/gepa/reflection.py +0 -0
  403. {verifiers-0.2.2.dev112 → verifiers-0.3.1}/verifiers/v1/harnesses/__init__.py +0 -0
  404. {verifiers-0.2.2.dev112 → verifiers-0.3.1}/verifiers/v1/harnesses/bash/__init__.py +0 -0
  405. {verifiers-0.2.2.dev112 → verifiers-0.3.1}/verifiers/v1/harnesses/browser_use/__init__.py +0 -0
  406. {verifiers-0.2.2.dev112 → verifiers-0.3.1}/verifiers/v1/harnesses/browser_use/harness.py +0 -0
  407. {verifiers-0.2.2.dev112 → verifiers-0.3.1}/verifiers/v1/harnesses/browser_use/program.py +0 -0
  408. {verifiers-0.2.2.dev112 → verifiers-0.3.1}/verifiers/v1/harnesses/claude_code/__init__.py +0 -0
  409. {verifiers-0.2.2.dev112 → verifiers-0.3.1}/verifiers/v1/harnesses/codex/__init__.py +0 -0
  410. {verifiers-0.2.2.dev112 → verifiers-0.3.1}/verifiers/v1/harnesses/hermes_agent/__init__.py +0 -0
  411. {verifiers-0.2.2.dev112 → verifiers-0.3.1}/verifiers/v1/harnesses/kimi_code/__init__.py +0 -0
  412. {verifiers-0.2.2.dev112 → verifiers-0.3.1}/verifiers/v1/harnesses/mini_swe_agent/__init__.py +0 -0
  413. {verifiers-0.2.2.dev112 → verifiers-0.3.1}/verifiers/v1/harnesses/mini_swe_agent/harness.py +0 -0
  414. {verifiers-0.2.2.dev112 → verifiers-0.3.1}/verifiers/v1/harnesses/node.py +0 -0
  415. {verifiers-0.2.2.dev112 → verifiers-0.3.1}/verifiers/v1/harnesses/null/__init__.py +0 -0
  416. {verifiers-0.2.2.dev112 → verifiers-0.3.1}/verifiers/v1/harnesses/null/harness.py +0 -0
  417. {verifiers-0.2.2.dev112 → verifiers-0.3.1}/verifiers/v1/harnesses/null/program.py +0 -0
  418. {verifiers-0.2.2.dev112 → verifiers-0.3.1}/verifiers/v1/harnesses/openclaw/__init__.py +0 -0
  419. {verifiers-0.2.2.dev112 → verifiers-0.3.1}/verifiers/v1/harnesses/pi/__init__.py +0 -0
  420. {verifiers-0.2.2.dev112 → verifiers-0.3.1}/verifiers/v1/harnesses/pool/__init__.py +0 -0
  421. {verifiers-0.2.2.dev112 → verifiers-0.3.1}/verifiers/v1/harnesses/rlm/__init__.py +0 -0
  422. {verifiers-0.2.2.dev112 → verifiers-0.3.1}/verifiers/v1/harnesses/terminus_2/__init__.py +0 -0
  423. {verifiers-0.2.2.dev112 → verifiers-0.3.1}/verifiers/v1/harnesses/terminus_2/program.py +0 -0
  424. {verifiers-0.2.2.dev112 → verifiers-0.3.1}/verifiers/v1/interception/__init__.py +0 -0
  425. {verifiers-0.2.2.dev112 → verifiers-0.3.1}/verifiers/v1/interception/base.py +0 -0
  426. {verifiers-0.2.2.dev112 → verifiers-0.3.1}/verifiers/v1/interception/pool.py +0 -0
  427. {verifiers-0.2.2.dev112 → verifiers-0.3.1}/verifiers/v1/interception/tunnel/__init__.py +0 -0
  428. {verifiers-0.2.2.dev112 → verifiers-0.3.1}/verifiers/v1/interception/tunnel/base.py +0 -0
  429. {verifiers-0.2.2.dev112 → verifiers-0.3.1}/verifiers/v1/interception/tunnel/custom.py +0 -0
  430. {verifiers-0.2.2.dev112 → verifiers-0.3.1}/verifiers/v1/judge.py +0 -0
  431. {verifiers-0.2.2.dev112 → verifiers-0.3.1}/verifiers/v1/judges/__init__.py +0 -0
  432. {verifiers-0.2.2.dev112 → verifiers-0.3.1}/verifiers/v1/judges/reference.py +0 -0
  433. {verifiers-0.2.2.dev112 → verifiers-0.3.1}/verifiers/v1/judges/reference.txt +0 -0
  434. {verifiers-0.2.2.dev112 → verifiers-0.3.1}/verifiers/v1/judges/rubric.py +0 -0
  435. {verifiers-0.2.2.dev112 → verifiers-0.3.1}/verifiers/v1/judges/rubric.txt +0 -0
  436. {verifiers-0.2.2.dev112 → verifiers-0.3.1}/verifiers/v1/mcp/__init__.py +0 -0
  437. {verifiers-0.2.2.dev112 → verifiers-0.3.1}/verifiers/v1/mcp/server.py +0 -0
  438. {verifiers-0.2.2.dev112 → verifiers-0.3.1}/verifiers/v1/mcp/toolset.py +0 -0
  439. {verifiers-0.2.2.dev112 → verifiers-0.3.1}/verifiers/v1/state.py +0 -0
  440. {verifiers-0.2.2.dev112 → verifiers-0.3.1}/verifiers/v1/taskset.py +0 -0
  441. {verifiers-0.2.2.dev112 → verifiers-0.3.1}/verifiers/v1/tasksets/__init__.py +0 -0
  442. {verifiers-0.2.2.dev112 → verifiers-0.3.1}/verifiers/v1/tasksets/harbor/__init__.py +0 -0
  443. {verifiers-0.2.2.dev112 → verifiers-0.3.1}/verifiers/v1/tasksets/lean/__init__.py +0 -0
  444. {verifiers-0.2.2.dev112 → verifiers-0.3.1}/verifiers/v1/tasksets/lean/scoring.py +0 -0
  445. {verifiers-0.2.2.dev112 → verifiers-0.3.1}/verifiers/v1/tasksets/lean/taskset.py +0 -0
  446. {verifiers-0.2.2.dev112 → verifiers-0.3.1}/verifiers/v1/tasksets/nemo_gym/__init__.py +0 -0
  447. {verifiers-0.2.2.dev112 → verifiers-0.3.1}/verifiers/v1/tasksets/nemo_gym/server.py +0 -0
  448. {verifiers-0.2.2.dev112 → verifiers-0.3.1}/verifiers/v1/tasksets/nemo_gym/toolset.py +0 -0
  449. {verifiers-0.2.2.dev112 → verifiers-0.3.1}/verifiers/v1/tasksets/openenv/__init__.py +0 -0
  450. {verifiers-0.2.2.dev112 → verifiers-0.3.1}/verifiers/v1/tasksets/openenv/taskset.py +0 -0
  451. {verifiers-0.2.2.dev112 → verifiers-0.3.1}/verifiers/v1/tasksets/textarena/__init__.py +0 -0
  452. {verifiers-0.2.2.dev112 → verifiers-0.3.1}/verifiers/v1/tasksets/textarena/taskset.py +0 -0
  453. {verifiers-0.2.2.dev112 → verifiers-0.3.1}/verifiers/v1/utils/__init__.py +0 -0
  454. {verifiers-0.2.2.dev112 → verifiers-0.3.1}/verifiers/v1/utils/aio.py +0 -0
  455. {verifiers-0.2.2.dev112 → verifiers-0.3.1}/verifiers/v1/utils/artifacts.py +0 -0
  456. {verifiers-0.2.2.dev112 → verifiers-0.3.1}/verifiers/v1/utils/format.py +0 -0
  457. {verifiers-0.2.2.dev112 → verifiers-0.3.1}/verifiers/v1/utils/generic.py +0 -0
  458. {verifiers-0.2.2.dev112 → verifiers-0.3.1}/verifiers/v1/utils/git.py +0 -0
  459. {verifiers-0.2.2.dev112 → verifiers-0.3.1}/verifiers/v1/utils/image.py +0 -0
  460. {verifiers-0.2.2.dev112 → verifiers-0.3.1}/verifiers/v1/utils/interrupt.py +0 -0
  461. {verifiers-0.2.2.dev112 → verifiers-0.3.1}/verifiers/v1/utils/memory.py +0 -0
  462. {verifiers-0.2.2.dev112 → verifiers-0.3.1}/verifiers/v1/utils/retries.py +0 -0
  463. {verifiers-0.2.2.dev112 → verifiers-0.3.1}/verifiers/v1/utils/score.py +0 -0
  464. {verifiers-0.2.2.dev112 → verifiers-0.3.1}/verifiers/v1/utils/version.py +0 -0
@@ -1,6 +1,6 @@
1
- Metadata-Version: 2.4
1
+ Metadata-Version: 2.5
2
2
  Name: verifiers
3
- Version: 0.2.2.dev112
3
+ Version: 0.3.1
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
@@ -34,12 +34,12 @@ Requires-Dist: msgpack>=1.1.2
34
34
  Requires-Dist: numpy>=2.1.0
35
35
  Requires-Dist: openai-agents>=0.8.2
36
36
  Requires-Dist: openai>=2.9.0
37
- Requires-Dist: prime-pydantic-config[toml]>=0.4.2
38
- Requires-Dist: prime-sandboxes>=0.2.35
37
+ Requires-Dist: prime-pydantic-config[toml]>=0.4.3
38
+ Requires-Dist: prime-sandboxes>=0.2.39
39
39
  Requires-Dist: prime-tunnel>=0.1.8
40
40
  Requires-Dist: pydantic>=2.12.3
41
41
  Requires-Dist: pyzmq>=27.1.0
42
- Requires-Dist: renderers>=0.1.9
42
+ Requires-Dist: renderers>=0.1.10
43
43
  Requires-Dist: requests
44
44
  Requires-Dist: rich>=11.0.0
45
45
  Requires-Dist: setproctitle>=1.3.0
@@ -51,7 +51,7 @@ Provides-Extra: browser
51
51
  Requires-Dist: python-dotenv>=1.0.0; extra == 'browser'
52
52
  Requires-Dist: stagehand>=3.4.0; extra == 'browser'
53
53
  Provides-Extra: harbor
54
- Requires-Dist: harbor==0.20.0; (python_version >= '3.12') and extra == 'harbor'
54
+ Requires-Dist: harbor==0.21.0; (python_full_version >= '3.12') and extra == 'harbor'
55
55
  Provides-Extra: modal
56
56
  Requires-Dist: modal>=1.4.0; extra == 'modal'
57
57
  Provides-Extra: nemo-gym
@@ -35,7 +35,7 @@ dependencies = [
35
35
  "openai>=2.9.0",
36
36
  "openai-agents>=0.8.2",
37
37
  "prime-tunnel>=0.1.8",
38
- "prime-sandboxes>=0.2.35",
38
+ "prime-sandboxes>=0.2.39",
39
39
  "pydantic>=2.12.3",
40
40
  "requests",
41
41
  "rich>=11.0.0",
@@ -47,11 +47,11 @@ dependencies = [
47
47
  "setproctitle>=1.3.0",
48
48
  "httpx>=0.27.0",
49
49
  "aiohttp>=3.9.0",
50
- "prime-pydantic-config[toml]>=0.4.2",
50
+ "prime-pydantic-config[toml]>=0.4.3",
51
51
  "uvloop>=0.21.0; sys_platform != 'win32' and sys_platform != 'cygwin' and platform_python_implementation != 'PyPy'",
52
52
  "loguru>=0.7.0",
53
53
  "tomli-w>=1.0.0",
54
- "renderers>=0.1.9",
54
+ "renderers>=0.1.10",
55
55
  "typing_extensions>=4.12.2",
56
56
  ]
57
57
 
@@ -76,10 +76,23 @@ dev = [
76
76
  # from this repo. The built-in tasksets/harnesses ship inside verifiers (verifiers/v1/...).
77
77
  examples = [
78
78
  "compact",
79
- "gsm8k-v1", "glossary-v1", "deepwiki-v1", "wiki-search-v1", "code-golf-v1",
80
- "proposer-solver-v1", "reverse-text-v1", "color-codeword-v1",
81
- "wordle-v1", "openenv-wordle-v1", "alphabet-sort-v1", "scratchpad-v1",
82
- "kuhn-poker-v1",
79
+ "gsm8k",
80
+ "glossary",
81
+ "deepwiki",
82
+ "wiki-search",
83
+ "code-golf",
84
+ "proposer-solver",
85
+ "reverse-text",
86
+ "color-codeword",
87
+ "wordle",
88
+ "openenv-wordle",
89
+ "alphabet-sort",
90
+ "scratchpad",
91
+ "kuhn-poker",
92
+ "interception",
93
+ "grayscale-interception",
94
+ "bash-interception",
95
+ "web-search-interception",
83
96
  ]
84
97
 
85
98
  [project.optional-dependencies]
@@ -96,7 +109,7 @@ browser = [
96
109
  ]
97
110
  harbor = [
98
111
  # Harbor currently publishes Python 3.12+ packages; keep core verifiers installable on 3.11.
99
- "harbor==0.20.0; python_version >= '3.12'",
112
+ "harbor==0.21.0 ; python_full_version >= '3.12'",
100
113
  ]
101
114
  modal = [
102
115
  "modal>=1.4.0",
@@ -151,24 +164,29 @@ default = true
151
164
 
152
165
  [tool.uv.sources]
153
166
  compact = { path = "environments/compact", editable = true }
154
- glossary-v1 = { path = "environments/glossary_v1", editable = true }
155
- deepwiki-v1 = { path = "environments/deepwiki_v1", editable = true }
156
- wiki-search-v1 = { path = "environments/wiki_search_v1", editable = true }
157
- gsm8k-v1 = { path = "environments/gsm8k_v1", editable = true }
158
- code-golf-v1 = { path = "environments/code_golf_v1", editable = true }
159
- proposer-solver-v1 = { path = "environments/proposer_solver_v1", editable = true }
160
- reverse-text-v1 = { path = "environments/reverse_text_v1", editable = true }
161
- wordle-v1 = { path = "environments/wordle_v1", editable = true }
162
- openenv-wordle-v1 = { path = "environments/openenv_wordle_v1", editable = true }
163
- color-codeword-v1 = { path = "environments/color_codeword_v1", editable = true }
164
- alphabet-sort-v1 = { path = "environments/alphabet_sort_v1", editable = true }
165
- scratchpad-v1 = { path = "environments/scratchpad_v1", editable = true }
166
- kuhn-poker-v1 = { path = "environments/kuhn_poker_v1", editable = true }
167
+ glossary = { path = "environments/glossary", editable = true }
168
+ deepwiki = { path = "environments/deepwiki", editable = true }
169
+ wiki-search = { path = "environments/wiki_search", editable = true }
170
+ gsm8k = { path = "environments/gsm8k", editable = true }
171
+ code-golf = { path = "environments/code_golf", editable = true }
172
+ proposer-solver = { path = "environments/proposer_solver", editable = true }
173
+ reverse-text = { path = "environments/reverse_text", editable = true }
174
+ wordle = { path = "environments/wordle", editable = true }
175
+ openenv-wordle = { path = "environments/openenv_wordle", editable = true }
176
+ color-codeword = { path = "environments/color_codeword", editable = true }
177
+ alphabet-sort = { path = "environments/alphabet_sort", editable = true }
178
+ scratchpad = { path = "environments/scratchpad", editable = true }
179
+ kuhn-poker = { path = "environments/kuhn_poker", editable = true }
180
+ interception = { path = "environments/interception", editable = true }
181
+ grayscale-interception = { path = "environments/grayscale_interception", editable = true }
182
+ bash-interception = { path = "environments/bash_interception", editable = true }
183
+ web-search-interception = { path = "environments/web_search_interception", editable = true }
167
184
 
168
185
  [tool.uv.exclude-newer-package]
169
186
  # Bounded cutoffs for the explicitly requested tool upgrades.
170
187
  # Full UTC timestamps: bare dates resolve to local-tz midnight and churn the
171
188
  # lockfile across timezones.
189
+ harbor = "2026-08-11T00:00:00Z"
172
190
  ruff = "2026-07-28T00:00:00Z"
173
191
  ty = "2026-07-28T00:00:00Z"
174
192
  # PrimeIntellect-published on PyPI (trusted publisher)
@@ -178,19 +196,19 @@ prime-pydantic-config = false
178
196
  renderers = false
179
197
 
180
198
  [project.scripts]
181
- vf-eval = "verifiers.scripts.eval:main"
182
199
  eval = "verifiers.v1.cli.eval.main:main"
183
200
  validate = "verifiers.v1.cli.validate:main"
184
201
  debug = "verifiers.v1.cli.debug:main"
185
202
  replay = "verifiers.v1.cli.replay:main"
186
203
  init = "verifiers.v1.cli.init:main"
187
204
  gepa = "verifiers.v1.cli.gepa:main"
188
- vf-gepa = "verifiers.scripts.gepa:main"
189
- vf-init = "verifiers.scripts.init:main"
190
- vf-install = "verifiers.scripts.install:main"
191
- vf-setup = "verifiers.scripts.setup:main"
192
- vf-build = "verifiers.scripts.build:main"
193
- vf-tui = "verifiers.scripts.tui:main"
205
+ vf-eval = "verifiers.legacy.scripts.eval:main"
206
+ vf-gepa = "verifiers.legacy.scripts.gepa:main"
207
+ vf-init = "verifiers.legacy.scripts.init:main"
208
+ vf-install = "verifiers.legacy.scripts.install:main"
209
+ vf-setup = "verifiers.legacy.scripts.setup:main"
210
+ vf-build = "verifiers.legacy.scripts.build:main"
211
+ vf-tui = "verifiers.legacy.scripts.tui:main"
194
212
 
195
213
  # hatchling configuration
196
214
  [tool.hatch.version]
@@ -238,6 +256,12 @@ Documentation = "https://github.com/primeintellect-ai/verifiers"
238
256
  Repository = "https://github.com/primeintellect-ai/verifiers.git"
239
257
  Issues = "https://github.com/primeintellect-ai/verifiers/issues"
240
258
 
259
+ [tool.ruff.lint.isort]
260
+ # The legacy tree answers at both verifiers.* and verifiers.legacy.* (the
261
+ # package-root alias); path probing would classify the moved submodules as
262
+ # third-party, so pin the whole namespace first-party.
263
+ known-first-party = ["verifiers"]
264
+
241
265
  [tool.pytest.ini_options]
242
266
  minversion = "7.0"
243
267
  testpaths = ["tests"]
@@ -300,7 +324,7 @@ redundant-cast = "ignore"
300
324
  exclude = ["environments", "verifiers/v1"]
301
325
 
302
326
  [[tool.ty.overrides]]
303
- include = ["verifiers/envs/experimental/composable/tasksets/**"]
327
+ include = ["verifiers/legacy/envs/experimental/composable/tasksets/**"]
304
328
 
305
329
  [tool.ty.overrides.rules]
306
330
  unresolved-import = "ignore"
@@ -50,8 +50,9 @@ class TestImports:
50
50
 
51
51
  def test_lazy_imports_work(self):
52
52
  """Test that lazy imports work correctly."""
53
- # Dynamically detect lazy imports by checking verifiers module
54
- lazy_imports = getattr(verifiers, "_LAZY_IMPORTS", {})
53
+ # The lazy table lives on the legacy package; the root forwards its names.
54
+ lazy_imports = verifiers.legacy._LAZY_IMPORTS
55
+ assert lazy_imports, "legacy lazy-import table is empty"
55
56
 
56
57
  for name in lazy_imports.keys():
57
58
  assert name in verifiers.__all__, f"Lazy import {name} not in __all__"
@@ -5,8 +5,7 @@ settings that still exercise the path, then assert on the resulting `Trace`(s)
5
5
  not unit tests of individual components. They need a model API key (`PRIME_API_KEY`);
6
6
  without one the `e2e`-marked tests skip (config parsing still runs).
7
7
 
8
- `run_v1` / `run_v0` mirror the eval CLI's two paths (`run_eval` for a v1 taskset,
9
- `run_legacy_eval` for a v0 env). Placement coverage (harness x harness runtime x tool
8
+ `run_v1` mirrors the eval CLI's in-process path (`run_eval` with `--no-serve`). Placement coverage (harness x harness runtime x tool
10
9
  server runtime) is PAIRWISE, not a full cross product: each test carries a curated list of
11
10
  combinations (in test_e2e.py) that hits every axis value and the cross-boundary pairs with
12
11
  distinct networking. The full cross bought flake exposure and CI minutes, not coverage — add
@@ -41,14 +40,14 @@ import pytest
41
40
  import verifiers.v1 as vf
42
41
  from verifiers.v1.cli.eval.runner import run_eval
43
42
  from verifiers.v1.configs.cli.eval import EvalConfig
43
+ from verifiers.v1.configs.harness import HarnessConfig
44
44
  from verifiers.v1.trace import Trace
45
- from verifiers.v1.utils.loaders import load_environment
45
+ from verifiers.v1.utils.loaders import harness_config_type
46
46
 
47
47
  CI_MODEL = "openai/gpt-5.6-luna"
48
48
 
49
- # Fixture tasksets/envs (echo-v1, echo-agentic-v1, echo-v0, echo-multi-v0) live in
50
- # tests/v1/fixtures, added to the path via `pythonpath` in pyproject so the v1 loader and the
51
- # v0 legacy bridge both resolve them by id (no install).
49
+ # Fixture tasksets (echo-v1, echo-agentic-v1) live in tests/v1/fixtures, added to the
50
+ # path via `pythonpath` in pyproject so the loader resolves them by id (no install).
52
51
 
53
52
  # The placement fixtures translate one parametrized value each; the combinations live on
54
53
  # the tests (`indirect=True`), so coverage is a visible, curated list — never an implicit
@@ -76,15 +75,16 @@ def tool_runtime(request) -> dict:
76
75
  # dependencies at rollout.
77
76
  # `compact` (an example harness) and `terminus-2` (drives the host tmux) are excluded from e2e.
78
77
  @pytest.fixture
79
- def harness(request) -> str:
80
- return request.param
78
+ def harness(request) -> HarnessConfig:
79
+ config = {"id": request.param} if isinstance(request.param, str) else request.param
80
+ return harness_config_type(config["id"]).model_validate(config)
81
81
 
82
82
 
83
83
  def pytest_configure(config) -> None:
84
84
  """Self-launching tool servers run `python -m <module>` in a fresh subprocess, which
85
85
  inherits `PYTHONPATH` but not pytest's in-process `pythonpath`. Put the fixture dir on
86
86
  `PYTHONPATH` so a fixture server module (e.g. `tool_response_image_v1`)
87
- resolves there too — an installed example package (e.g. `glossary_v1`) already would."""
87
+ resolves there too — an installed example package (e.g. `glossary`) already would."""
88
88
  fixtures = str(Path(__file__).parent / "fixtures")
89
89
  existing = os.environ.get("PYTHONPATH", "")
90
90
  if fixtures not in existing.split(os.pathsep):
@@ -121,7 +121,7 @@ def _eval_config(
121
121
  taskset: str,
122
122
  *,
123
123
  output_dir: Path,
124
- harness: str | None = "null",
124
+ harness: str | HarnessConfig | None = "null",
125
125
  n: int = 1,
126
126
  num_tasks: int = 1,
127
127
  max_tokens: int = 2048,
@@ -132,6 +132,7 @@ def _eval_config(
132
132
  env: dict | None = None,
133
133
  pool: dict | None = None,
134
134
  reasoning_effort: str | None = None,
135
+ server: bool = False,
135
136
  ) -> EvalConfig:
136
137
  """Build the smallest `EvalConfig` that still exercises the path, shared by the in-process
137
138
  (`run_v1`) and env-server (`run_v1_server`) fixtures. `taskset_overrides` merges onto the
@@ -145,11 +146,17 @@ def _eval_config(
145
146
  env_cfg = dict(env or {})
146
147
  _configure_prime_runtimes(taskset_cfg)
147
148
  if harness:
148
- env_cfg.setdefault("agent", {})["harness"] = {"id": harness}
149
+ env_cfg.setdefault("agent", {})["harness"] = (
150
+ harness_config_type(harness)(id=harness)
151
+ if isinstance(harness, str)
152
+ else harness
153
+ )
149
154
  if runtime:
150
155
  runtime_cfg = dict(runtime)
151
156
  _configure_prime_runtimes(runtime_cfg)
152
157
  env_cfg.setdefault("agent", {})["runtime"] = runtime_cfg
158
+ retries = {"max_retries": 2, "include": ["ProviderError", "HarnessError"]}
159
+ env_cfg.setdefault("retries", retries)
153
160
  # Per-run caps live on the seats: resolve the env's declared roles and cap
154
161
  # each one (a test's own seat dict wins over the shared defaults).
155
162
  config_cls = vf.env_config_type(taskset, env_cfg.get("id", ""))
@@ -163,11 +170,8 @@ def _eval_config(
163
170
  seat_cfg.setdefault("max_turns", max_turns)
164
171
  seat_cfg.setdefault("max_output_tokens", max_tokens)
165
172
  seat_cfg.setdefault("timeout", {"rollout": rollout_timeout, "scoring": 60})
166
- # Flake resilience: retries are per-agent now (flat RetryConfig).
167
- seat_cfg.setdefault(
168
- "retries",
169
- {"max_retries": 2, "include": ["ProviderError", "HarnessError"]},
170
- )
173
+ # Agent runs retry locally; interactions retry with their whole episode.
174
+ seat_cfg.setdefault("retries", retries)
171
175
  return EvalConfig(
172
176
  env={
173
177
  "taskset": taskset_cfg,
@@ -179,21 +183,22 @@ def _eval_config(
179
183
  "max_tokens": max_tokens,
180
184
  "reasoning_effort": reasoning_effort,
181
185
  },
182
- rich=False,
183
- output_dir=output_dir,
184
- **({"serve": {"pool": pool}} if pool else {}),
186
+ rich=None,
187
+ serve=({"pool": pool} if pool else {}) if server else None,
188
+ output_dir=output_dir.parent,
189
+ run={"dir": output_dir.name},
185
190
  model=CI_MODEL,
186
191
  )
187
192
 
188
193
 
189
194
  @pytest.fixture
190
195
  def run_v1():
191
- """Run a v1 taskset end-to-end in-process (`run_eval`, the `--rich` CLI path) and return
196
+ """Run a v1 taskset end-to-end in-process (`run_eval` with `--no-serve`) and return
192
197
  its traces."""
193
198
 
194
199
  async def _run(taskset: str, **kwargs) -> list[Trace]:
195
200
  config = _eval_config(taskset, **kwargs)
196
- records = await run_eval(load_environment(config.env), config)
201
+ records = await run_eval(config)
197
202
  # The runner answers durability envelopes; the tests assert on traces.
198
203
  return [t for r in records for t in r.traces]
199
204
 
@@ -202,17 +207,16 @@ def run_v1():
202
207
 
203
208
  @pytest.fixture
204
209
  def run_v1_server():
205
- """Run a v1 taskset through the env-server worker pool (`run_eval_server`) the path a
206
- `--server` CLI run and prime-rl training both take. Spawns the broker + a worker, so it's
207
- the only fixture that exercises serving resources (shared tool servers, interception pool)
208
- being stood up by the *server* rather than the in-process runner. Pinned to a single static
209
- worker for determinism."""
210
- from verifiers.v1.cli.eval.runner import run_eval_server
210
+ """Run a v1 taskset through the env-server worker pool (`run_eval`'s default path)
211
+ the path a CLI run and prime-rl training both take. Spawns the broker + a worker, so
212
+ it's the only fixture that exercises serving resources (shared tool servers,
213
+ interception pool) being stood up by the *server* rather than the in-process runner.
214
+ Pinned to a single static worker for determinism."""
211
215
 
212
216
  async def _run(taskset: str, **kwargs) -> list[Trace]:
213
217
  kwargs.setdefault("pool", {"type": "static", "num_workers": 1})
214
- config = _eval_config(taskset, **kwargs)
215
- records = await run_eval_server(config)
218
+ config = _eval_config(taskset, server=True, **kwargs)
219
+ records = await run_eval(config)
216
220
  return [t for r in records for t in r.traces]
217
221
 
218
222
  return _run
@@ -231,31 +235,3 @@ async def live_ctx():
231
235
  client=EvalClientConfig(),
232
236
  sampling=SamplingConfig(max_tokens=2048),
233
237
  )
234
-
235
-
236
- @pytest.fixture
237
- def run_v0():
238
- """Run a legacy v0 env through the v1 bridge (the eval CLI's `--legacy.id` path)."""
239
- from verifiers.v1.legacy import run_legacy_eval
240
-
241
- async def _run(
242
- env_id: str,
243
- *,
244
- output_dir: Path,
245
- n: int = 1,
246
- max_tokens: int = 2048,
247
- args: dict | None = None,
248
- ) -> list[Trace]:
249
- config = EvalConfig(
250
- legacy={"id": env_id, "args": args or {}},
251
- model=CI_MODEL,
252
- num_tasks=1,
253
- num_rollouts=n,
254
- sampling={"max_tokens": max_tokens},
255
- rich=False,
256
- output_dir=output_dir,
257
- )
258
- records = await run_legacy_eval(config)
259
- return [t for r in records for t in r.traces]
260
-
261
- return _run
@@ -44,9 +44,9 @@ class CounterTaskset(vf.Taskset[CounterTask, CounterConfig]):
44
44
  vf.TaskData(
45
45
  idx=0,
46
46
  prompt=(
47
- f"Call the `counter_bump` tool {TARGET} times, one call per turn — wait "
48
- "for each result before the next. After the last result, reply with "
49
- "<answer>done</answer>."
47
+ f"Call the `bump` tool from the `counter` MCP server {TARGET} times, "
48
+ "one call per turn — wait for each result before the next. After the "
49
+ "last result, reply with <answer>done</answer>."
50
50
  ),
51
51
  ),
52
52
  self.config.task,
@@ -59,8 +59,9 @@ class ACPResumeEnv(vf.SingleAgentEnv):
59
59
  if not first.terminated:
60
60
  segments.append(
61
61
  await interaction.turn(
62
- "Call `resume_recall` with the codeword from my previous "
63
- "message, then reply with exactly the tool result."
62
+ "Call the `recall` tool from the `resume` MCP server with the "
63
+ "codeword from my previous message, then reply with exactly the "
64
+ "tool result."
64
65
  )
65
66
  )
66
67
  interaction.trace.info["acp_segments"] = [
@@ -18,7 +18,7 @@ ECHO_TOKEN = "ok-7f3" # the tool stamps this; only a real tool call can surface
18
18
 
19
19
 
20
20
  class EchoToolset(vf.Toolset[vf.ToolsetConfig]):
21
- TOOL_PREFIX = "echo" # the model sees `echo_back` (matches the prompt)
21
+ TOOL_PREFIX = "echo"
22
22
 
23
23
  @vf.tool
24
24
  def back(self, message: str) -> str:
@@ -53,7 +53,8 @@ class EchoToolTaskset(vf.Taskset[EchoToolTask, EchoToolConfig]):
53
53
  vf.TaskData(
54
54
  idx=0,
55
55
  prompt=(
56
- f'Call the `echo_back` tool with the message "{PHRASE}", then reply '
56
+ f"Call the `back` tool from the `echo` MCP server with the message "
57
+ f'"{PHRASE}", then reply '
57
58
  "with exactly what it returns inside <answer></answer> tags."
58
59
  ),
59
60
  ),
@@ -30,6 +30,10 @@ class EchoData(vf.TaskData):
30
30
 
31
31
 
32
32
  class EchoTask(vf.Task[EchoData]):
33
+ @property
34
+ def key(self) -> str:
35
+ return f"echo:{self.data.answer}"
36
+
33
37
  @vf.stop
34
38
  async def single_turn(self, trace: vf.Trace) -> bool:
35
39
  return trace.num_turns >= 1
@@ -13,7 +13,7 @@ SYSTEM = "Call the requested tool before answering."
13
13
 
14
14
 
15
15
  class VisionToolset(vf.Toolset[vf.ToolsetConfig]):
16
- TOOL_PREFIX = "vision" # the model sees `vision_snapshot`
16
+ TOOL_PREFIX = "vision"
17
17
 
18
18
  @vf.tool
19
19
  def snapshot(self) -> list:
@@ -60,8 +60,8 @@ class ToolResponseImageTaskset(
60
60
  vf.TaskData(
61
61
  idx=0,
62
62
  prompt=(
63
- "Call the `vision_snapshot` tool exactly once. After it returns, "
64
- "reply with exactly `done`."
63
+ "Call the `snapshot` tool from the `vision` MCP server exactly once. "
64
+ "After it returns, reply with exactly `done`."
65
65
  ),
66
66
  system_prompt=SYSTEM,
67
67
  ),
@@ -1,4 +1,4 @@
1
- from color_codeword_v1 import taskset
1
+ from color_codeword import taskset
2
2
 
3
3
 
4
4
  def test_color_images_are_rendered_once(monkeypatch) -> None:
@@ -23,5 +23,4 @@ CONFIGS = sorted(
23
23
  @pytest.mark.parametrize("path", CONFIGS, ids=lambda p: p.name)
24
24
  def test_eval_config_parses(path: Path) -> None:
25
25
  config = EvalConfig.model_validate(tomllib.load(path.open("rb")))
26
- # resolved to a v1 taskset or a v0 env id
27
- assert config.env.taskset.id or config.id
26
+ assert config.env.taskset.id
@@ -23,7 +23,12 @@ CHAT_PLACEMENTS = [
23
23
  pair("null", "subprocess", "null-harness-in-subprocess"),
24
24
  pair("bash", "docker", "bash-harness-in-docker"),
25
25
  pair("rlm", "docker", "rlm-harness-in-docker"),
26
- pair("kimi-code", "docker", "kimi-code-harness-in-docker"),
26
+ pytest.param(
27
+ {"id": "kimi-code", "transport": "responses"},
28
+ "docker",
29
+ marks=[mark.kimi_code, mark.docker],
30
+ id="kimi-code-responses-harness-in-docker",
31
+ ),
27
32
  pair("bash", "prime", "bash-harness-in-prime"),
28
33
  pair("bash", "modal", "bash-harness-in-modal"),
29
34
  ]
@@ -34,7 +39,12 @@ CHAT_PLACEMENTS = [
34
39
  AGENTIC_PLACEMENTS = [
35
40
  pair("bash", "subprocess", "bash-harness-in-subprocess"),
36
41
  pair("rlm", "docker", "rlm-harness-in-docker"),
37
- pair("kimi-code", "docker", "kimi-code-harness-in-docker"),
42
+ pytest.param(
43
+ {"id": "kimi-code", "transport": "responses"},
44
+ "docker",
45
+ marks=[mark.kimi_code, mark.docker],
46
+ id="kimi-code-responses-harness-in-docker",
47
+ ),
38
48
  pair("codex", "docker", "codex-harness-in-docker"),
39
49
  pair("claude-code", "docker", "claude-code-harness-in-docker"),
40
50
  pair("hermes-agent", "docker", "hermes-agent-harness-in-docker"),
@@ -59,8 +69,18 @@ ACP_RESUME_PLACEMENTS = [
59
69
  pair("claude-code", "docker", "claude-code-acp-in-docker"),
60
70
  pair("hermes-agent", "docker", "hermes-agent-acp-in-docker"),
61
71
  pair("rlm", "docker", "rlm-acp-in-docker"),
62
- pair("kimi-code", "docker", "kimi-code-acp-in-docker"),
63
- pair("pi", "docker", "pi-acp-in-docker"),
72
+ pytest.param(
73
+ {"id": "kimi-code", "transport": "responses"},
74
+ "docker",
75
+ marks=[mark.kimi_code, mark.docker],
76
+ id="kimi-code-responses-acp-in-docker",
77
+ ),
78
+ pytest.param(
79
+ {"id": "pi", "transport": "responses"},
80
+ "docker",
81
+ marks=[mark.pi, mark.docker],
82
+ id="pi-responses-acp-in-docker",
83
+ ),
64
84
  pair("pool", "docker", "pool-acp-in-docker"),
65
85
  pair("openclaw", "docker", "openclaw-acp-in-docker"),
66
86
  pair("pool", "prime", "pool-acp-in-prime"),
@@ -116,6 +136,8 @@ async def test_single_turn(run_v1, harness, harness_runtime, tmp_path):
116
136
  assert trace.num_turns == 1
117
137
  assert trace.stop_condition == "agent_completed"
118
138
  assert trace.reward == 1.0
139
+ assert trace.task.key == f"echo:{trace.task.data.answer}"
140
+ assert trace.task.hash is not None
119
141
  # The seat's resolved identity rides the trace (policy metadata for trainers).
120
142
  assert trace.agent is not None
121
143
  assert trace.agent.config.sampling.max_tokens == 2048
@@ -235,11 +257,14 @@ async def test_acp_resume_with_tool(run_v1, harness, harness_runtime, tmp_path):
235
257
  assert len(segments) == 2
236
258
  assert segments[0]["terminated"] is False
237
259
  assert segments[1]["terminated"] is False
260
+ # Kimi Code is broken upstream: its Responses adapter drops message `phase` on replay.
261
+ if harness.id != "kimi-code":
262
+ assert trace.num_branches == 1
238
263
  # Native MCP tools need not appear in the intercepted model request that
239
264
  # populates trace.tools; the ACP transcript is the source of truth for use.
240
265
  assert "tool" in segments[1]["roles"]
241
266
  assert segments[1]["tool_outputs"]
242
- if harness == "rlm":
267
+ if harness.id == "rlm":
243
268
  assert "turns_since_last_compaction" in trace.metrics
244
269
 
245
270
 
@@ -263,10 +288,10 @@ async def test_tool(run_v1, harness_runtime, tool_runtime, tmp_path):
263
288
  assert trace.ok
264
289
  assert trace.num_turns >= 2 # tool call + answer
265
290
  assert trace.reward == 1.0
266
- # The interception server captured the advertised tools onto the trace (for tool-use SFT):
267
- # the null harness offered the task's MCP tool as `echo_back`, schema included.
291
+ # The interception server captured the harness's advertised name and schema. Harnesses
292
+ # may qualify the same raw MCP tool differently, so the test checks its stable suffix.
268
293
  assert trace.tools
269
- (echo_tool,) = [t for t in trace.tools if t.name == "echo_back"]
294
+ (echo_tool,) = [tool for tool in trace.tools if tool.name.endswith("back")]
270
295
  assert "message" in echo_tool.parameters.get("properties", {})
271
296
 
272
297
 
@@ -301,7 +326,7 @@ async def test_shared_tool_isolation(
301
326
  ):
302
327
  """A shared writable tool isolates state across concurrent rollouts and runtimes."""
303
328
  traces = await run_v1_server(
304
- "scratchpad-v1",
329
+ "scratchpad",
305
330
  harness="null",
306
331
  runtime={"type": harness_runtime},
307
332
  output_dir=tmp_path,
@@ -574,9 +599,9 @@ async def test_env_id_user_sim_with_tools(run_v1, tmp_path):
574
599
  assert assistant.task.data.prompt is None # the scenario stayed off the wire
575
600
  assert user.num_turns >= 1 # the modeled user actually drove the exchange
576
601
  assert assistant.rewards["echoed"].score == 1.0 # the tool ran, mid-conversation
577
- # The tool was advertised to the masked chat exactly as to any run.
602
+ # The tool was advertised to the masked chat, regardless of harness qualification.
578
603
  assert assistant.tools
579
- assert any(tool.name == "echo_back" for tool in assistant.tools)
604
+ assert any(tool.name.endswith("back") for tool in assistant.tools)
580
605
 
581
606
 
582
607
  @pytest.mark.e2e
@@ -584,7 +609,7 @@ async def test_kuhn_poker_self_play(run_v1, tmp_path):
584
609
  """The turn-coupled proof env: one Kuhn poker hand, both seats live interactions
585
610
  of the run's own model (self-play), refereed host-side, paid out zero-sum."""
586
611
  traces = await run_v1(
587
- "kuhn-poker-v1",
612
+ "kuhn-poker",
588
613
  harness=None, # both seats pin the null harness themselves
589
614
  output_dir=tmp_path,
590
615
  max_turns=8,
@@ -637,16 +662,15 @@ async def test_replay_round_trip(run_v1, tmp_path):
637
662
  typed rebuild fails and the trace-only `@reward` silently stops running (the
638
663
  wire-narrowing regression). Trace-only rewards are deterministic given the transcript,
639
664
  so all three generations must agree."""
640
- import tomllib
641
665
  from pathlib import Path
642
666
 
643
- from verifiers.v1.cli.output import CONFIG_FILE
667
+ from verifiers.v1.cli.output import saved_config_path
644
668
  from verifiers.v1.cli.replay import run_replay
645
669
  from verifiers.v1.configs.cli.replay import ReplayConfig
646
670
 
647
671
  run_dir = tmp_path / "run"
648
672
  (source,) = await run_v1(
649
- "reverse-text-v1",
673
+ "reverse-text",
650
674
  harness="null",
651
675
  runtime={"type": "subprocess"},
652
676
  output_dir=run_dir,
@@ -658,7 +682,9 @@ async def test_replay_round_trip(run_v1, tmp_path):
658
682
  async def replay(source_dir: Path, out: Path):
659
683
  # The CLI's layering, minus the argv plumbing: the saved run's config is the base
660
684
  # (`ReplayConfig` ignores its eval-only keys), the source's output_dir is dropped.
661
- data = tomllib.loads((source_dir / CONFIG_FILE).read_text())
685
+ import json
686
+
687
+ data = json.loads(saved_config_path(source_dir).read_text())
662
688
  data.pop("output_dir", None)
663
689
  config = ReplayConfig(**{**data, "rich": False})
664
690
  (trace,) = await run_replay(config, source_dir, out)