verifiers 0.3.2.dev73__tar.gz → 0.3.2.dev75__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 (216) hide show
  1. {verifiers-0.3.2.dev73 → verifiers-0.3.2.dev75}/PKG-INFO +2 -2
  2. {verifiers-0.3.2.dev73 → verifiers-0.3.2.dev75}/pyproject.toml +1 -1
  3. verifiers-0.3.2.dev75/tests/v1/test_platform_run.py +104 -0
  4. {verifiers-0.3.2.dev73 → verifiers-0.3.2.dev75}/verifiers/v1/configs/cli/eval.py +14 -0
  5. {verifiers-0.3.2.dev73 → verifiers-0.3.2.dev75}/verifiers/v1/utils/platform.py +21 -7
  6. {verifiers-0.3.2.dev73 → verifiers-0.3.2.dev75}/.gitignore +0 -0
  7. {verifiers-0.3.2.dev73 → verifiers-0.3.2.dev75}/LICENSE +0 -0
  8. {verifiers-0.3.2.dev73 → verifiers-0.3.2.dev75}/README.md +0 -0
  9. {verifiers-0.3.2.dev73 → verifiers-0.3.2.dev75}/tests/v1/conftest.py +0 -0
  10. {verifiers-0.3.2.dev73 → verifiers-0.3.2.dev75}/tests/v1/fixtures/counter_tool_v1.py +0 -0
  11. {verifiers-0.3.2.dev73 → verifiers-0.3.2.dev75}/tests/v1/fixtures/duet_v1.py +0 -0
  12. {verifiers-0.3.2.dev73 → verifiers-0.3.2.dev75}/tests/v1/fixtures/echo_acp_resume_v1.py +0 -0
  13. {verifiers-0.3.2.dev73 → verifiers-0.3.2.dev75}/tests/v1/fixtures/echo_agentic_v1.py +0 -0
  14. {verifiers-0.3.2.dev73 → verifiers-0.3.2.dev75}/tests/v1/fixtures/echo_tool_v1.py +0 -0
  15. {verifiers-0.3.2.dev73 → verifiers-0.3.2.dev75}/tests/v1/fixtures/echo_user_sim_v1.py +0 -0
  16. {verifiers-0.3.2.dev73 → verifiers-0.3.2.dev75}/tests/v1/fixtures/echo_v1.py +0 -0
  17. {verifiers-0.3.2.dev73 → verifiers-0.3.2.dev75}/tests/v1/fixtures/pyproject.toml +0 -0
  18. {verifiers-0.3.2.dev73 → verifiers-0.3.2.dev75}/tests/v1/fixtures/tool_response_image_v1.py +0 -0
  19. {verifiers-0.3.2.dev73 → verifiers-0.3.2.dev75}/tests/v1/test_color_codeword_tasks.py +0 -0
  20. {verifiers-0.3.2.dev73 → verifiers-0.3.2.dev75}/tests/v1/test_configs.py +0 -0
  21. {verifiers-0.3.2.dev73 → verifiers-0.3.2.dev75}/tests/v1/test_e2e.py +0 -0
  22. {verifiers-0.3.2.dev73 → verifiers-0.3.2.dev75}/tests/v1/test_envs.py +0 -0
  23. {verifiers-0.3.2.dev73 → verifiers-0.3.2.dev75}/tests/v1/test_graph.py +0 -0
  24. {verifiers-0.3.2.dev73 → verifiers-0.3.2.dev75}/tests/v1/test_judges.py +0 -0
  25. {verifiers-0.3.2.dev73 → verifiers-0.3.2.dev75}/tests/v1/test_scoring.py +0 -0
  26. {verifiers-0.3.2.dev73 → verifiers-0.3.2.dev75}/tests/v1/test_taskset.py +0 -0
  27. {verifiers-0.3.2.dev73 → verifiers-0.3.2.dev75}/tests/v1/test_trace.py +0 -0
  28. {verifiers-0.3.2.dev73 → verifiers-0.3.2.dev75}/verifiers/__init__.py +0 -0
  29. {verifiers-0.3.2.dev73 → verifiers-0.3.2.dev75}/verifiers/cli/commands/init.py +0 -0
  30. {verifiers-0.3.2.dev73 → verifiers-0.3.2.dev75}/verifiers/v1/__init__.py +0 -0
  31. {verifiers-0.3.2.dev73 → verifiers-0.3.2.dev75}/verifiers/v1/acp/__init__.py +0 -0
  32. {verifiers-0.3.2.dev73 → verifiers-0.3.2.dev75}/verifiers/v1/acp/runner.py +0 -0
  33. {verifiers-0.3.2.dev73 → verifiers-0.3.2.dev75}/verifiers/v1/agent.py +0 -0
  34. {verifiers-0.3.2.dev73 → verifiers-0.3.2.dev75}/verifiers/v1/cli/__init__.py +0 -0
  35. {verifiers-0.3.2.dev73 → verifiers-0.3.2.dev75}/verifiers/v1/cli/dashboard/__init__.py +0 -0
  36. {verifiers-0.3.2.dev73 → verifiers-0.3.2.dev75}/verifiers/v1/cli/dashboard/base.py +0 -0
  37. {verifiers-0.3.2.dev73 → verifiers-0.3.2.dev75}/verifiers/v1/cli/dashboard/eval.py +0 -0
  38. {verifiers-0.3.2.dev73 → verifiers-0.3.2.dev75}/verifiers/v1/cli/dashboard/replay.py +0 -0
  39. {verifiers-0.3.2.dev73 → verifiers-0.3.2.dev75}/verifiers/v1/cli/dashboard/validate.py +0 -0
  40. {verifiers-0.3.2.dev73 → verifiers-0.3.2.dev75}/verifiers/v1/cli/debug.py +0 -0
  41. {verifiers-0.3.2.dev73 → verifiers-0.3.2.dev75}/verifiers/v1/cli/eval/__init__.py +0 -0
  42. {verifiers-0.3.2.dev73 → verifiers-0.3.2.dev75}/verifiers/v1/cli/eval/main.py +0 -0
  43. {verifiers-0.3.2.dev73 → verifiers-0.3.2.dev75}/verifiers/v1/cli/eval/resume.py +0 -0
  44. {verifiers-0.3.2.dev73 → verifiers-0.3.2.dev75}/verifiers/v1/cli/eval/runner.py +0 -0
  45. {verifiers-0.3.2.dev73 → verifiers-0.3.2.dev75}/verifiers/v1/cli/gepa.py +0 -0
  46. {verifiers-0.3.2.dev73 → verifiers-0.3.2.dev75}/verifiers/v1/cli/init.py +0 -0
  47. {verifiers-0.3.2.dev73 → verifiers-0.3.2.dev75}/verifiers/v1/cli/output.py +0 -0
  48. {verifiers-0.3.2.dev73 → verifiers-0.3.2.dev75}/verifiers/v1/cli/replay.py +0 -0
  49. {verifiers-0.3.2.dev73 → verifiers-0.3.2.dev75}/verifiers/v1/cli/resolve.py +0 -0
  50. {verifiers-0.3.2.dev73 → verifiers-0.3.2.dev75}/verifiers/v1/cli/resume.py +0 -0
  51. {verifiers-0.3.2.dev73 → verifiers-0.3.2.dev75}/verifiers/v1/cli/validate.py +0 -0
  52. {verifiers-0.3.2.dev73 → verifiers-0.3.2.dev75}/verifiers/v1/clients/__init__.py +0 -0
  53. {verifiers-0.3.2.dev73 → verifiers-0.3.2.dev75}/verifiers/v1/clients/base.py +0 -0
  54. {verifiers-0.3.2.dev73 → verifiers-0.3.2.dev75}/verifiers/v1/clients/client.py +0 -0
  55. {verifiers-0.3.2.dev73 → verifiers-0.3.2.dev75}/verifiers/v1/clients/eval.py +0 -0
  56. {verifiers-0.3.2.dev73 → verifiers-0.3.2.dev75}/verifiers/v1/clients/train.py +0 -0
  57. {verifiers-0.3.2.dev73 → verifiers-0.3.2.dev75}/verifiers/v1/configs/__init__.py +0 -0
  58. {verifiers-0.3.2.dev73 → verifiers-0.3.2.dev75}/verifiers/v1/configs/agent.py +0 -0
  59. {verifiers-0.3.2.dev73 → verifiers-0.3.2.dev75}/verifiers/v1/configs/cli/__init__.py +0 -0
  60. {verifiers-0.3.2.dev73 → verifiers-0.3.2.dev75}/verifiers/v1/configs/cli/debug.py +0 -0
  61. {verifiers-0.3.2.dev73 → verifiers-0.3.2.dev75}/verifiers/v1/configs/cli/env.py +0 -0
  62. {verifiers-0.3.2.dev73 → verifiers-0.3.2.dev75}/verifiers/v1/configs/cli/init.py +0 -0
  63. {verifiers-0.3.2.dev73 → verifiers-0.3.2.dev75}/verifiers/v1/configs/cli/replay.py +0 -0
  64. {verifiers-0.3.2.dev73 → verifiers-0.3.2.dev75}/verifiers/v1/configs/cli/validate.py +0 -0
  65. {verifiers-0.3.2.dev73 → verifiers-0.3.2.dev75}/verifiers/v1/configs/client.py +0 -0
  66. {verifiers-0.3.2.dev73 → verifiers-0.3.2.dev75}/verifiers/v1/configs/env.py +0 -0
  67. {verifiers-0.3.2.dev73 → verifiers-0.3.2.dev75}/verifiers/v1/configs/harness.py +0 -0
  68. {verifiers-0.3.2.dev73 → verifiers-0.3.2.dev75}/verifiers/v1/configs/judge.py +0 -0
  69. {verifiers-0.3.2.dev73 → verifiers-0.3.2.dev75}/verifiers/v1/configs/retries.py +0 -0
  70. {verifiers-0.3.2.dev73 → verifiers-0.3.2.dev75}/verifiers/v1/configs/runtime.py +0 -0
  71. {verifiers-0.3.2.dev73 → verifiers-0.3.2.dev75}/verifiers/v1/configs/serve.py +0 -0
  72. {verifiers-0.3.2.dev73 → verifiers-0.3.2.dev75}/verifiers/v1/configs/task.py +0 -0
  73. {verifiers-0.3.2.dev73 → verifiers-0.3.2.dev75}/verifiers/v1/configs/taskset.py +0 -0
  74. {verifiers-0.3.2.dev73 → verifiers-0.3.2.dev75}/verifiers/v1/dialects/__init__.py +0 -0
  75. {verifiers-0.3.2.dev73 → verifiers-0.3.2.dev75}/verifiers/v1/dialects/anthropic.py +0 -0
  76. {verifiers-0.3.2.dev73 → verifiers-0.3.2.dev75}/verifiers/v1/dialects/base.py +0 -0
  77. {verifiers-0.3.2.dev73 → verifiers-0.3.2.dev75}/verifiers/v1/dialects/chat.py +0 -0
  78. {verifiers-0.3.2.dev73 → verifiers-0.3.2.dev75}/verifiers/v1/dialects/responses.py +0 -0
  79. {verifiers-0.3.2.dev73 → verifiers-0.3.2.dev75}/verifiers/v1/env.py +0 -0
  80. {verifiers-0.3.2.dev73 → verifiers-0.3.2.dev75}/verifiers/v1/envs/__init__.py +0 -0
  81. {verifiers-0.3.2.dev73 → verifiers-0.3.2.dev75}/verifiers/v1/envs/agentic_judge/__init__.py +0 -0
  82. {verifiers-0.3.2.dev73 → verifiers-0.3.2.dev75}/verifiers/v1/envs/agentic_judge/env.py +0 -0
  83. {verifiers-0.3.2.dev73 → verifiers-0.3.2.dev75}/verifiers/v1/envs/best_of_n/__init__.py +0 -0
  84. {verifiers-0.3.2.dev73 → verifiers-0.3.2.dev75}/verifiers/v1/envs/best_of_n/env.py +0 -0
  85. {verifiers-0.3.2.dev73 → verifiers-0.3.2.dev75}/verifiers/v1/envs/isolated_verifier/__init__.py +0 -0
  86. {verifiers-0.3.2.dev73 → verifiers-0.3.2.dev75}/verifiers/v1/envs/isolated_verifier/env.py +0 -0
  87. {verifiers-0.3.2.dev73 → verifiers-0.3.2.dev75}/verifiers/v1/envs/shared_agentic_judge/__init__.py +0 -0
  88. {verifiers-0.3.2.dev73 → verifiers-0.3.2.dev75}/verifiers/v1/envs/single_agent/__init__.py +0 -0
  89. {verifiers-0.3.2.dev73 → verifiers-0.3.2.dev75}/verifiers/v1/envs/single_agent/env.py +0 -0
  90. {verifiers-0.3.2.dev73 → verifiers-0.3.2.dev75}/verifiers/v1/envs/user_sim/__init__.py +0 -0
  91. {verifiers-0.3.2.dev73 → verifiers-0.3.2.dev75}/verifiers/v1/envs/user_sim/env.py +0 -0
  92. {verifiers-0.3.2.dev73 → verifiers-0.3.2.dev75}/verifiers/v1/episode.py +0 -0
  93. {verifiers-0.3.2.dev73 → verifiers-0.3.2.dev75}/verifiers/v1/errors.py +0 -0
  94. {verifiers-0.3.2.dev73 → verifiers-0.3.2.dev75}/verifiers/v1/gepa/__init__.py +0 -0
  95. {verifiers-0.3.2.dev73 → verifiers-0.3.2.dev75}/verifiers/v1/gepa/adapter.py +0 -0
  96. {verifiers-0.3.2.dev73 → verifiers-0.3.2.dev75}/verifiers/v1/gepa/config.py +0 -0
  97. {verifiers-0.3.2.dev73 → verifiers-0.3.2.dev75}/verifiers/v1/gepa/dataset.py +0 -0
  98. {verifiers-0.3.2.dev73 → verifiers-0.3.2.dev75}/verifiers/v1/gepa/reflection.py +0 -0
  99. {verifiers-0.3.2.dev73 → verifiers-0.3.2.dev75}/verifiers/v1/gepa/runner.py +0 -0
  100. {verifiers-0.3.2.dev73 → verifiers-0.3.2.dev75}/verifiers/v1/graph.py +0 -0
  101. {verifiers-0.3.2.dev73 → verifiers-0.3.2.dev75}/verifiers/v1/harness.py +0 -0
  102. {verifiers-0.3.2.dev73 → verifiers-0.3.2.dev75}/verifiers/v1/harnesses/__init__.py +0 -0
  103. {verifiers-0.3.2.dev73 → verifiers-0.3.2.dev75}/verifiers/v1/harnesses/bash/__init__.py +0 -0
  104. {verifiers-0.3.2.dev73 → verifiers-0.3.2.dev75}/verifiers/v1/harnesses/bash/harness.py +0 -0
  105. {verifiers-0.3.2.dev73 → verifiers-0.3.2.dev75}/verifiers/v1/harnesses/browser_use/__init__.py +0 -0
  106. {verifiers-0.3.2.dev73 → verifiers-0.3.2.dev75}/verifiers/v1/harnesses/browser_use/harness.py +0 -0
  107. {verifiers-0.3.2.dev73 → verifiers-0.3.2.dev75}/verifiers/v1/harnesses/browser_use/program.py +0 -0
  108. {verifiers-0.3.2.dev73 → verifiers-0.3.2.dev75}/verifiers/v1/harnesses/claude_code/__init__.py +0 -0
  109. {verifiers-0.3.2.dev73 → verifiers-0.3.2.dev75}/verifiers/v1/harnesses/claude_code/harness.py +0 -0
  110. {verifiers-0.3.2.dev73 → verifiers-0.3.2.dev75}/verifiers/v1/harnesses/codex/__init__.py +0 -0
  111. {verifiers-0.3.2.dev73 → verifiers-0.3.2.dev75}/verifiers/v1/harnesses/codex/harness.py +0 -0
  112. {verifiers-0.3.2.dev73 → verifiers-0.3.2.dev75}/verifiers/v1/harnesses/hermes_agent/__init__.py +0 -0
  113. {verifiers-0.3.2.dev73 → verifiers-0.3.2.dev75}/verifiers/v1/harnesses/hermes_agent/harness.py +0 -0
  114. {verifiers-0.3.2.dev73 → verifiers-0.3.2.dev75}/verifiers/v1/harnesses/hermes_agent/program.py +0 -0
  115. {verifiers-0.3.2.dev73 → verifiers-0.3.2.dev75}/verifiers/v1/harnesses/kimi_code/__init__.py +0 -0
  116. {verifiers-0.3.2.dev73 → verifiers-0.3.2.dev75}/verifiers/v1/harnesses/kimi_code/harness.py +0 -0
  117. {verifiers-0.3.2.dev73 → verifiers-0.3.2.dev75}/verifiers/v1/harnesses/mini_swe_agent/__init__.py +0 -0
  118. {verifiers-0.3.2.dev73 → verifiers-0.3.2.dev75}/verifiers/v1/harnesses/mini_swe_agent/harness.py +0 -0
  119. {verifiers-0.3.2.dev73 → verifiers-0.3.2.dev75}/verifiers/v1/harnesses/mini_swe_agent/program.py +0 -0
  120. {verifiers-0.3.2.dev73 → verifiers-0.3.2.dev75}/verifiers/v1/harnesses/node.py +0 -0
  121. {verifiers-0.3.2.dev73 → verifiers-0.3.2.dev75}/verifiers/v1/harnesses/null/__init__.py +0 -0
  122. {verifiers-0.3.2.dev73 → verifiers-0.3.2.dev75}/verifiers/v1/harnesses/null/harness.py +0 -0
  123. {verifiers-0.3.2.dev73 → verifiers-0.3.2.dev75}/verifiers/v1/harnesses/openclaw/__init__.py +0 -0
  124. {verifiers-0.3.2.dev73 → verifiers-0.3.2.dev75}/verifiers/v1/harnesses/openclaw/harness.py +0 -0
  125. {verifiers-0.3.2.dev73 → verifiers-0.3.2.dev75}/verifiers/v1/harnesses/pi/__init__.py +0 -0
  126. {verifiers-0.3.2.dev73 → verifiers-0.3.2.dev75}/verifiers/v1/harnesses/pi/harness.py +0 -0
  127. {verifiers-0.3.2.dev73 → verifiers-0.3.2.dev75}/verifiers/v1/harnesses/pool/__init__.py +0 -0
  128. {verifiers-0.3.2.dev73 → verifiers-0.3.2.dev75}/verifiers/v1/harnesses/pool/harness.py +0 -0
  129. {verifiers-0.3.2.dev73 → verifiers-0.3.2.dev75}/verifiers/v1/harnesses/prime_agent/__init__.py +0 -0
  130. {verifiers-0.3.2.dev73 → verifiers-0.3.2.dev75}/verifiers/v1/harnesses/prime_agent/harness.py +0 -0
  131. {verifiers-0.3.2.dev73 → verifiers-0.3.2.dev75}/verifiers/v1/harnesses/rlm/__init__.py +0 -0
  132. {verifiers-0.3.2.dev73 → verifiers-0.3.2.dev75}/verifiers/v1/harnesses/rlm/harness.py +0 -0
  133. {verifiers-0.3.2.dev73 → verifiers-0.3.2.dev75}/verifiers/v1/harnesses/terminus_2/__init__.py +0 -0
  134. {verifiers-0.3.2.dev73 → verifiers-0.3.2.dev75}/verifiers/v1/harnesses/terminus_2/harness.py +0 -0
  135. {verifiers-0.3.2.dev73 → verifiers-0.3.2.dev75}/verifiers/v1/harnesses/terminus_2/program.py +0 -0
  136. {verifiers-0.3.2.dev73 → verifiers-0.3.2.dev75}/verifiers/v1/harnesses/utils/__init__.py +0 -0
  137. {verifiers-0.3.2.dev73 → verifiers-0.3.2.dev75}/verifiers/v1/harnesses/utils/compaction.py +0 -0
  138. {verifiers-0.3.2.dev73 → verifiers-0.3.2.dev75}/verifiers/v1/harnesses/utils/core.py +0 -0
  139. {verifiers-0.3.2.dev73 → verifiers-0.3.2.dev75}/verifiers/v1/harnesses/utils/install.py +0 -0
  140. {verifiers-0.3.2.dev73 → verifiers-0.3.2.dev75}/verifiers/v1/harnesses/utils/launch.py +0 -0
  141. {verifiers-0.3.2.dev73 → verifiers-0.3.2.dev75}/verifiers/v1/harnesses/utils/mcp.py +0 -0
  142. {verifiers-0.3.2.dev73 → verifiers-0.3.2.dev75}/verifiers/v1/interception/__init__.py +0 -0
  143. {verifiers-0.3.2.dev73 → verifiers-0.3.2.dev75}/verifiers/v1/interception/base.py +0 -0
  144. {verifiers-0.3.2.dev73 → verifiers-0.3.2.dev75}/verifiers/v1/interception/pool.py +0 -0
  145. {verifiers-0.3.2.dev73 → verifiers-0.3.2.dev75}/verifiers/v1/interception/server.py +0 -0
  146. {verifiers-0.3.2.dev73 → verifiers-0.3.2.dev75}/verifiers/v1/interception/tool.py +0 -0
  147. {verifiers-0.3.2.dev73 → verifiers-0.3.2.dev75}/verifiers/v1/interception/tunnel/__init__.py +0 -0
  148. {verifiers-0.3.2.dev73 → verifiers-0.3.2.dev75}/verifiers/v1/interception/tunnel/base.py +0 -0
  149. {verifiers-0.3.2.dev73 → verifiers-0.3.2.dev75}/verifiers/v1/interception/tunnel/custom.py +0 -0
  150. {verifiers-0.3.2.dev73 → verifiers-0.3.2.dev75}/verifiers/v1/interception/tunnel/prime.py +0 -0
  151. {verifiers-0.3.2.dev73 → verifiers-0.3.2.dev75}/verifiers/v1/judge.py +0 -0
  152. {verifiers-0.3.2.dev73 → verifiers-0.3.2.dev75}/verifiers/v1/judges/__init__.py +0 -0
  153. {verifiers-0.3.2.dev73 → verifiers-0.3.2.dev75}/verifiers/v1/judges/reference.py +0 -0
  154. {verifiers-0.3.2.dev73 → verifiers-0.3.2.dev75}/verifiers/v1/judges/reference.txt +0 -0
  155. {verifiers-0.3.2.dev73 → verifiers-0.3.2.dev75}/verifiers/v1/judges/rubric.py +0 -0
  156. {verifiers-0.3.2.dev73 → verifiers-0.3.2.dev75}/verifiers/v1/judges/rubric.txt +0 -0
  157. {verifiers-0.3.2.dev73 → verifiers-0.3.2.dev75}/verifiers/v1/mcp/__init__.py +0 -0
  158. {verifiers-0.3.2.dev73 → verifiers-0.3.2.dev75}/verifiers/v1/mcp/launch.py +0 -0
  159. {verifiers-0.3.2.dev73 → verifiers-0.3.2.dev75}/verifiers/v1/mcp/server.py +0 -0
  160. {verifiers-0.3.2.dev73 → verifiers-0.3.2.dev75}/verifiers/v1/mcp/toolset.py +0 -0
  161. {verifiers-0.3.2.dev73 → verifiers-0.3.2.dev75}/verifiers/v1/rollout.py +0 -0
  162. {verifiers-0.3.2.dev73 → verifiers-0.3.2.dev75}/verifiers/v1/runtimes/__init__.py +0 -0
  163. {verifiers-0.3.2.dev73 → verifiers-0.3.2.dev75}/verifiers/v1/runtimes/base.py +0 -0
  164. {verifiers-0.3.2.dev73 → verifiers-0.3.2.dev75}/verifiers/v1/runtimes/docker/__init__.py +0 -0
  165. {verifiers-0.3.2.dev73 → verifiers-0.3.2.dev75}/verifiers/v1/runtimes/docker/egress.py +0 -0
  166. {verifiers-0.3.2.dev73 → verifiers-0.3.2.dev75}/verifiers/v1/runtimes/limiters.py +0 -0
  167. {verifiers-0.3.2.dev73 → verifiers-0.3.2.dev75}/verifiers/v1/runtimes/modal.py +0 -0
  168. {verifiers-0.3.2.dev73 → verifiers-0.3.2.dev75}/verifiers/v1/runtimes/prime.py +0 -0
  169. {verifiers-0.3.2.dev73 → verifiers-0.3.2.dev75}/verifiers/v1/runtimes/subprocess.py +0 -0
  170. {verifiers-0.3.2.dev73 → verifiers-0.3.2.dev75}/verifiers/v1/semantic.py +0 -0
  171. {verifiers-0.3.2.dev73 → verifiers-0.3.2.dev75}/verifiers/v1/serve/__init__.py +0 -0
  172. {verifiers-0.3.2.dev73 → verifiers-0.3.2.dev75}/verifiers/v1/serve/client.py +0 -0
  173. {verifiers-0.3.2.dev73 → verifiers-0.3.2.dev75}/verifiers/v1/serve/encoding.py +0 -0
  174. {verifiers-0.3.2.dev73 → verifiers-0.3.2.dev75}/verifiers/v1/serve/pool.py +0 -0
  175. {verifiers-0.3.2.dev73 → verifiers-0.3.2.dev75}/verifiers/v1/serve/server.py +0 -0
  176. {verifiers-0.3.2.dev73 → verifiers-0.3.2.dev75}/verifiers/v1/serve/types.py +0 -0
  177. {verifiers-0.3.2.dev73 → verifiers-0.3.2.dev75}/verifiers/v1/session.py +0 -0
  178. {verifiers-0.3.2.dev73 → verifiers-0.3.2.dev75}/verifiers/v1/state.py +0 -0
  179. {verifiers-0.3.2.dev73 → verifiers-0.3.2.dev75}/verifiers/v1/task.py +0 -0
  180. {verifiers-0.3.2.dev73 → verifiers-0.3.2.dev75}/verifiers/v1/taskset.py +0 -0
  181. {verifiers-0.3.2.dev73 → verifiers-0.3.2.dev75}/verifiers/v1/tasksets/__init__.py +0 -0
  182. {verifiers-0.3.2.dev73 → verifiers-0.3.2.dev75}/verifiers/v1/tasksets/harbor/__init__.py +0 -0
  183. {verifiers-0.3.2.dev73 → verifiers-0.3.2.dev75}/verifiers/v1/tasksets/harbor/env.py +0 -0
  184. {verifiers-0.3.2.dev73 → verifiers-0.3.2.dev75}/verifiers/v1/tasksets/harbor/taskset.py +0 -0
  185. {verifiers-0.3.2.dev73 → verifiers-0.3.2.dev75}/verifiers/v1/tasksets/lean/__init__.py +0 -0
  186. {verifiers-0.3.2.dev73 → verifiers-0.3.2.dev75}/verifiers/v1/tasksets/lean/scoring.py +0 -0
  187. {verifiers-0.3.2.dev73 → verifiers-0.3.2.dev75}/verifiers/v1/tasksets/lean/taskset.py +0 -0
  188. {verifiers-0.3.2.dev73 → verifiers-0.3.2.dev75}/verifiers/v1/tasksets/nemo_gym/__init__.py +0 -0
  189. {verifiers-0.3.2.dev73 → verifiers-0.3.2.dev75}/verifiers/v1/tasksets/nemo_gym/response.py +0 -0
  190. {verifiers-0.3.2.dev73 → verifiers-0.3.2.dev75}/verifiers/v1/tasksets/nemo_gym/server.py +0 -0
  191. {verifiers-0.3.2.dev73 → verifiers-0.3.2.dev75}/verifiers/v1/tasksets/nemo_gym/taskset.py +0 -0
  192. {verifiers-0.3.2.dev73 → verifiers-0.3.2.dev75}/verifiers/v1/tasksets/nemo_gym/toolset.py +0 -0
  193. {verifiers-0.3.2.dev73 → verifiers-0.3.2.dev75}/verifiers/v1/tasksets/openenv/__init__.py +0 -0
  194. {verifiers-0.3.2.dev73 → verifiers-0.3.2.dev75}/verifiers/v1/tasksets/openenv/taskset.py +0 -0
  195. {verifiers-0.3.2.dev73 → verifiers-0.3.2.dev75}/verifiers/v1/tasksets/textarena/__init__.py +0 -0
  196. {verifiers-0.3.2.dev73 → verifiers-0.3.2.dev75}/verifiers/v1/tasksets/textarena/taskset.py +0 -0
  197. {verifiers-0.3.2.dev73 → verifiers-0.3.2.dev75}/verifiers/v1/trace.py +0 -0
  198. {verifiers-0.3.2.dev73 → verifiers-0.3.2.dev75}/verifiers/v1/types.py +0 -0
  199. {verifiers-0.3.2.dev73 → verifiers-0.3.2.dev75}/verifiers/v1/utils/__init__.py +0 -0
  200. {verifiers-0.3.2.dev73 → verifiers-0.3.2.dev75}/verifiers/v1/utils/aio.py +0 -0
  201. {verifiers-0.3.2.dev73 → verifiers-0.3.2.dev75}/verifiers/v1/utils/artifacts.py +0 -0
  202. {verifiers-0.3.2.dev73 → verifiers-0.3.2.dev75}/verifiers/v1/utils/compile.py +0 -0
  203. {verifiers-0.3.2.dev73 → verifiers-0.3.2.dev75}/verifiers/v1/utils/decorators.py +0 -0
  204. {verifiers-0.3.2.dev73 → verifiers-0.3.2.dev75}/verifiers/v1/utils/format.py +0 -0
  205. {verifiers-0.3.2.dev73 → verifiers-0.3.2.dev75}/verifiers/v1/utils/generic.py +0 -0
  206. {verifiers-0.3.2.dev73 → verifiers-0.3.2.dev75}/verifiers/v1/utils/git.py +0 -0
  207. {verifiers-0.3.2.dev73 → verifiers-0.3.2.dev75}/verifiers/v1/utils/image.py +0 -0
  208. {verifiers-0.3.2.dev73 → verifiers-0.3.2.dev75}/verifiers/v1/utils/interrupt.py +0 -0
  209. {verifiers-0.3.2.dev73 → verifiers-0.3.2.dev75}/verifiers/v1/utils/loaders.py +0 -0
  210. {verifiers-0.3.2.dev73 → verifiers-0.3.2.dev75}/verifiers/v1/utils/logging.py +0 -0
  211. {verifiers-0.3.2.dev73 → verifiers-0.3.2.dev75}/verifiers/v1/utils/memory.py +0 -0
  212. {verifiers-0.3.2.dev73 → verifiers-0.3.2.dev75}/verifiers/v1/utils/paths.py +0 -0
  213. {verifiers-0.3.2.dev73 → verifiers-0.3.2.dev75}/verifiers/v1/utils/prime.py +0 -0
  214. {verifiers-0.3.2.dev73 → verifiers-0.3.2.dev75}/verifiers/v1/utils/retries.py +0 -0
  215. {verifiers-0.3.2.dev73 → verifiers-0.3.2.dev75}/verifiers/v1/utils/score.py +0 -0
  216. {verifiers-0.3.2.dev73 → verifiers-0.3.2.dev75}/verifiers/v1/utils/version.py +0 -0
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.5
2
2
  Name: verifiers
3
- Version: 0.3.2.dev73
3
+ Version: 0.3.2.dev75
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
@@ -35,7 +35,7 @@ Requires-Dist: msgpack>=1.1.2
35
35
  Requires-Dist: numpy>=2.1.0
36
36
  Requires-Dist: openai<3.0.0,>=2.54.0
37
37
  Requires-Dist: prime-pydantic-config[toml]>=0.4.3
38
- Requires-Dist: prime-runs>=0.1.1
38
+ Requires-Dist: prime-runs>=0.1.2
39
39
  Requires-Dist: prime-sandboxes>=0.2.39
40
40
  Requires-Dist: prime-tunnel>=0.1.8
41
41
  Requires-Dist: pydantic>=2.12.3
@@ -34,7 +34,7 @@ dependencies = [
34
34
  "openai>=2.54.0,<3.0.0",
35
35
  "prime-tunnel>=0.1.8",
36
36
  "prime-sandboxes>=0.2.39",
37
- "prime-runs>=0.1.1",
37
+ "prime-runs>=0.1.2",
38
38
  "pydantic>=2.12.3",
39
39
  "rich>=11.0.0",
40
40
  "tenacity>=8.5.0",
@@ -0,0 +1,104 @@
1
+ """`open_run`: the eval's run on the platform, and `run.attach` for hosted evaluations."""
2
+
3
+ import prime_runs as pr
4
+ import pytest
5
+
6
+ from verifiers.v1.configs.cli.eval import EvalConfig
7
+ from verifiers.v1.utils import platform
8
+ from verifiers.v1.utils.platform import PushState, open_run
9
+
10
+
11
+ class _FakeRun:
12
+ """Stands in for `pr.Run`: an id, a URL, nothing else the tests reach for."""
13
+
14
+ def __init__(self, run_id: str, mode: str) -> None:
15
+ self.id = run_id
16
+ self.mode = mode
17
+ self.url = (
18
+ None if mode == "disabled" else f"https://app.example/evaluations/{run_id}"
19
+ )
20
+ self.finished = False
21
+
22
+
23
+ @pytest.fixture
24
+ def init_calls(monkeypatch):
25
+ """Record every `pr.init` call; the fake returns a run keyed by the attach id."""
26
+ calls: list[dict] = []
27
+
28
+ def fake_init(**kwargs):
29
+ calls.append(kwargs)
30
+ return _FakeRun(kwargs.get("id") or "eval-created", kwargs["mode"])
31
+
32
+ monkeypatch.setattr(platform.pr, "init", fake_init)
33
+ monkeypatch.delenv(pr.MODE_ENV, raising=False)
34
+ return calls
35
+
36
+
37
+ def test_attach_needs_push():
38
+ with pytest.raises(ValueError, match="needs push"):
39
+ EvalConfig(run={"attach": "eval-hosted"}, push=False)
40
+
41
+
42
+ def test_a_run_without_attach_is_created_on_the_platform(init_calls):
43
+ config = EvalConfig(push=True)
44
+ state = PushState()
45
+
46
+ run = open_run(config, state, num_examples=3)
47
+
48
+ assert init_calls[0]["mode"] == "online"
49
+ assert init_calls[0]["id"] is None
50
+ assert run.id == config.run.id == "eval-created"
51
+
52
+
53
+ def test_attach_hands_the_launchers_id_to_the_sdk(init_calls):
54
+ config = EvalConfig(run={"attach": "eval-hosted"})
55
+ state = PushState()
56
+
57
+ run = open_run(config, state, num_examples=3)
58
+
59
+ assert init_calls[0]["mode"] == "online"
60
+ assert init_calls[0]["id"] == "eval-hosted"
61
+ # The launcher's id is the run's one id: traces and the run dir carry it too.
62
+ assert run.id == config.run.id == "eval-hosted"
63
+ assert state.error is None
64
+
65
+
66
+ def test_a_failed_attach_fails_the_eval_instead_of_falling_back(monkeypatch):
67
+ def refuse(**kwargs):
68
+ raise pr.UnauthorizedError("bad key")
69
+
70
+ monkeypatch.setattr(platform.pr, "init", refuse)
71
+ monkeypatch.delenv(pr.MODE_ENV, raising=False)
72
+ config = EvalConfig(run={"attach": "eval-hosted"})
73
+
74
+ with pytest.raises(RuntimeError, match="could not attach to run 'eval-hosted'"):
75
+ open_run(config, PushState(), num_examples=3)
76
+
77
+
78
+ def test_a_failed_open_without_attach_still_falls_back_to_a_local_run(monkeypatch):
79
+ calls: list[dict] = []
80
+
81
+ def flaky(**kwargs):
82
+ calls.append(kwargs)
83
+ if kwargs["mode"] == "online":
84
+ raise pr.UnauthorizedError("bad key")
85
+ return _FakeRun("local-run", kwargs["mode"])
86
+
87
+ monkeypatch.setattr(platform.pr, "init", flaky)
88
+ monkeypatch.delenv(pr.MODE_ENV, raising=False)
89
+ state = PushState()
90
+
91
+ run = open_run(EvalConfig(push=True), state, num_examples=3)
92
+
93
+ assert [call["mode"] for call in calls] == ["online", "disabled"]
94
+ assert run.mode == "disabled"
95
+ assert state.error is not None and "UnauthorizedError" in state.error
96
+
97
+
98
+ def test_the_sdk_kill_switch_refuses_an_attach(init_calls, monkeypatch):
99
+ monkeypatch.setenv(pr.MODE_ENV, "disabled")
100
+ config = EvalConfig(run={"attach": "eval-hosted"})
101
+
102
+ with pytest.raises(RuntimeError, match="PRIME_RUNS_MODE=disabled"):
103
+ open_run(config, PushState(), num_examples=3)
104
+ assert init_calls == []
@@ -48,6 +48,12 @@ class RunConfig(BaseConfig):
48
48
  """Run directory name — the run writes to `output_dir / dir`. Defaults to `run.name`;
49
49
  set it only when the directory should differ from the display name."""
50
50
 
51
+ attach: str | None = None
52
+ """Stream into a run the launcher already created on the platform instead of opening a
53
+ new one — its evaluation id. Hosted evaluations pass the sandbox's `$EVALUATION_ID`
54
+ here; the platform owns that run's record and status, and a run that cannot be
55
+ attached to is an error rather than a local fallback. Requires `push`."""
56
+
51
57
  _id: str | None = PrivateAttr(default=None)
52
58
 
53
59
  @property
@@ -145,3 +151,11 @@ class EvalConfig(BaseConfig):
145
151
  if self.run.dir is None:
146
152
  self.run.dir = self.run.name
147
153
  return self
154
+
155
+ @model_validator(mode="after")
156
+ def attach_needs_push(self):
157
+ if self.run.attach and not self.push:
158
+ raise ValueError(
159
+ "run.attach names a run on the platform, so it needs push (drop --no-push)"
160
+ )
161
+ return self
@@ -45,7 +45,10 @@ class PushState:
45
45
  def open_run(config: EvalConfig, state: PushState, *, num_examples: int) -> pr.Run:
46
46
  """Open the run this eval streams into, before the first rollout, and give the
47
47
  config the run's id. A run that cannot be opened is logged and replaced by a
48
- disabled one; the eval goes on."""
48
+ disabled one; the eval goes on. With `run.attach` the run already exists on the
49
+ platform (a hosted evaluation's launcher created it and is waiting on it), so
50
+ there is no local fallback: failing to attach fails the eval."""
51
+ attach = config.run.attach
49
52
  identity: dict[str, Any] = {
50
53
  "name": config.run.name,
51
54
  # Resolved by name via the hub's get-or-create; no taskset, nothing to attach to.
@@ -61,12 +64,23 @@ def open_run(config: EvalConfig, state: PushState, *, num_examples: int) -> pr.R
61
64
  },
62
65
  }
63
66
  if config.push and os.getenv(pr.MODE_ENV, "").strip().lower() == "disabled":
67
+ if attach:
68
+ raise RuntimeError(
69
+ f"run.attach={attach!r} names a run on the platform, but "
70
+ f"{pr.MODE_ENV}=disabled would keep this eval local"
71
+ )
64
72
  # The SDK's own kill switch; the explicit `mode="online"` below would override it.
65
73
  logger.info("--push: %s=disabled; running without a platform run", pr.MODE_ENV)
66
74
  elif config.push:
67
75
  try:
68
- state.run = pr.init(mode="online", **identity)
69
- except Exception as e: # noqa: BLE001 - a failed upload must not fail the eval
76
+ state.run = pr.init(mode="online", id=attach, **identity)
77
+ except Exception as e:
78
+ if attach:
79
+ # The launcher's run would sit at running until it times out; a local
80
+ # run nobody reads is not a substitute.
81
+ raise RuntimeError(
82
+ f"--run.attach: could not attach to run {attach!r} ({type(e).__name__}: {e})"
83
+ ) from e
70
84
  logger.warning(
71
85
  "--push: could not open the run (%s: %s); running without it",
72
86
  type(e).__name__,
@@ -152,13 +166,13 @@ def _close(
152
166
 
153
167
 
154
168
  def _losses(run: pr.Run) -> str | None:
155
- """What the uploader could not store, or `None`. A sink that switched itself off
156
- quietly (Prime Traces outside the beta) is not a loss and is not counted here."""
157
- parts = [
169
+ """What the run could not finish or store, or `None`."""
170
+ parts = list(run.errors)
171
+ parts.extend(
158
172
  f"{count} record(s) not stored by the {sink} sink"
159
173
  for sink, count in sorted(run.failed_records.items())
160
174
  if count
161
- ]
175
+ )
162
176
  if run.dropped_records:
163
177
  parts.append(f"{run.dropped_records} record(s) never queued (uploader overrun)")
164
178
  return "; ".join(parts) or None
File without changes