verifiers 0.3.2.dev195__tar.gz → 0.3.2.dev199__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 (227) hide show
  1. {verifiers-0.3.2.dev195 → verifiers-0.3.2.dev199}/PKG-INFO +2 -2
  2. {verifiers-0.3.2.dev195 → verifiers-0.3.2.dev199}/pyproject.toml +2 -2
  3. {verifiers-0.3.2.dev195 → verifiers-0.3.2.dev199}/verifiers/v1/tasksets/harbor/taskset.py +76 -46
  4. {verifiers-0.3.2.dev195 → verifiers-0.3.2.dev199}/.gitignore +0 -0
  5. {verifiers-0.3.2.dev195 → verifiers-0.3.2.dev199}/LICENSE +0 -0
  6. {verifiers-0.3.2.dev195 → verifiers-0.3.2.dev199}/README.md +0 -0
  7. {verifiers-0.3.2.dev195 → verifiers-0.3.2.dev199}/tests/v1/conftest.py +0 -0
  8. {verifiers-0.3.2.dev195 → verifiers-0.3.2.dev199}/tests/v1/fixtures/agent_user_v1.py +0 -0
  9. {verifiers-0.3.2.dev195 → verifiers-0.3.2.dev199}/tests/v1/fixtures/counter_tool_v1.py +0 -0
  10. {verifiers-0.3.2.dev195 → verifiers-0.3.2.dev199}/tests/v1/fixtures/delivery_behaviors.py +0 -0
  11. {verifiers-0.3.2.dev195 → verifiers-0.3.2.dev199}/tests/v1/fixtures/duet_v1.py +0 -0
  12. {verifiers-0.3.2.dev195 → verifiers-0.3.2.dev199}/tests/v1/fixtures/echo_acp_resume_v1.py +0 -0
  13. {verifiers-0.3.2.dev195 → verifiers-0.3.2.dev199}/tests/v1/fixtures/echo_agentic_v1.py +0 -0
  14. {verifiers-0.3.2.dev195 → verifiers-0.3.2.dev199}/tests/v1/fixtures/echo_tool_v1.py +0 -0
  15. {verifiers-0.3.2.dev195 → verifiers-0.3.2.dev199}/tests/v1/fixtures/echo_user_sim_v1.py +0 -0
  16. {verifiers-0.3.2.dev195 → verifiers-0.3.2.dev199}/tests/v1/fixtures/echo_v1.py +0 -0
  17. {verifiers-0.3.2.dev195 → verifiers-0.3.2.dev199}/tests/v1/fixtures/pyproject.toml +0 -0
  18. {verifiers-0.3.2.dev195 → verifiers-0.3.2.dev199}/tests/v1/fixtures/tool_response_image_v1.py +0 -0
  19. {verifiers-0.3.2.dev195 → verifiers-0.3.2.dev199}/tests/v1/test_color_codeword_tasks.py +0 -0
  20. {verifiers-0.3.2.dev195 → verifiers-0.3.2.dev199}/tests/v1/test_configs.py +0 -0
  21. {verifiers-0.3.2.dev195 → verifiers-0.3.2.dev199}/tests/v1/test_delivery_behaviors.py +0 -0
  22. {verifiers-0.3.2.dev195 → verifiers-0.3.2.dev199}/tests/v1/test_e2e.py +0 -0
  23. {verifiers-0.3.2.dev195 → verifiers-0.3.2.dev199}/tests/v1/test_envs.py +0 -0
  24. {verifiers-0.3.2.dev195 → verifiers-0.3.2.dev199}/tests/v1/test_graph.py +0 -0
  25. {verifiers-0.3.2.dev195 → verifiers-0.3.2.dev199}/tests/v1/test_judges.py +0 -0
  26. {verifiers-0.3.2.dev195 → verifiers-0.3.2.dev199}/tests/v1/test_platform_run.py +0 -0
  27. {verifiers-0.3.2.dev195 → verifiers-0.3.2.dev199}/tests/v1/test_scoring.py +0 -0
  28. {verifiers-0.3.2.dev195 → verifiers-0.3.2.dev199}/tests/v1/test_serve_delta.py +0 -0
  29. {verifiers-0.3.2.dev195 → verifiers-0.3.2.dev199}/tests/v1/test_taskset.py +0 -0
  30. {verifiers-0.3.2.dev195 → verifiers-0.3.2.dev199}/tests/v1/test_trace.py +0 -0
  31. {verifiers-0.3.2.dev195 → verifiers-0.3.2.dev199}/verifiers/__init__.py +0 -0
  32. {verifiers-0.3.2.dev195 → verifiers-0.3.2.dev199}/verifiers/v1/__init__.py +0 -0
  33. {verifiers-0.3.2.dev195 → verifiers-0.3.2.dev199}/verifiers/v1/acp/__init__.py +0 -0
  34. {verifiers-0.3.2.dev195 → verifiers-0.3.2.dev199}/verifiers/v1/acp/runner.py +0 -0
  35. {verifiers-0.3.2.dev195 → verifiers-0.3.2.dev199}/verifiers/v1/agent.py +0 -0
  36. {verifiers-0.3.2.dev195 → verifiers-0.3.2.dev199}/verifiers/v1/cli/__init__.py +0 -0
  37. {verifiers-0.3.2.dev195 → verifiers-0.3.2.dev199}/verifiers/v1/cli/dashboard/__init__.py +0 -0
  38. {verifiers-0.3.2.dev195 → verifiers-0.3.2.dev199}/verifiers/v1/cli/dashboard/base.py +0 -0
  39. {verifiers-0.3.2.dev195 → verifiers-0.3.2.dev199}/verifiers/v1/cli/dashboard/eval.py +0 -0
  40. {verifiers-0.3.2.dev195 → verifiers-0.3.2.dev199}/verifiers/v1/cli/dashboard/replay.py +0 -0
  41. {verifiers-0.3.2.dev195 → verifiers-0.3.2.dev199}/verifiers/v1/cli/dashboard/validate.py +0 -0
  42. {verifiers-0.3.2.dev195 → verifiers-0.3.2.dev199}/verifiers/v1/cli/debug.py +0 -0
  43. {verifiers-0.3.2.dev195 → verifiers-0.3.2.dev199}/verifiers/v1/cli/eval/__init__.py +0 -0
  44. {verifiers-0.3.2.dev195 → verifiers-0.3.2.dev199}/verifiers/v1/cli/eval/hint.py +0 -0
  45. {verifiers-0.3.2.dev195 → verifiers-0.3.2.dev199}/verifiers/v1/cli/eval/main.py +0 -0
  46. {verifiers-0.3.2.dev195 → verifiers-0.3.2.dev199}/verifiers/v1/cli/eval/resume.py +0 -0
  47. {verifiers-0.3.2.dev195 → verifiers-0.3.2.dev199}/verifiers/v1/cli/eval/runner.py +0 -0
  48. {verifiers-0.3.2.dev195 → verifiers-0.3.2.dev199}/verifiers/v1/cli/gepa.py +0 -0
  49. {verifiers-0.3.2.dev195 → verifiers-0.3.2.dev199}/verifiers/v1/cli/init.py +0 -0
  50. {verifiers-0.3.2.dev195 → verifiers-0.3.2.dev199}/verifiers/v1/cli/output.py +0 -0
  51. {verifiers-0.3.2.dev195 → verifiers-0.3.2.dev199}/verifiers/v1/cli/replay.py +0 -0
  52. {verifiers-0.3.2.dev195 → verifiers-0.3.2.dev199}/verifiers/v1/cli/resolve.py +0 -0
  53. {verifiers-0.3.2.dev195 → verifiers-0.3.2.dev199}/verifiers/v1/cli/resume.py +0 -0
  54. {verifiers-0.3.2.dev195 → verifiers-0.3.2.dev199}/verifiers/v1/cli/validate.py +0 -0
  55. {verifiers-0.3.2.dev195 → verifiers-0.3.2.dev199}/verifiers/v1/clients/__init__.py +0 -0
  56. {verifiers-0.3.2.dev195 → verifiers-0.3.2.dev199}/verifiers/v1/clients/base.py +0 -0
  57. {verifiers-0.3.2.dev195 → verifiers-0.3.2.dev199}/verifiers/v1/clients/client.py +0 -0
  58. {verifiers-0.3.2.dev195 → verifiers-0.3.2.dev199}/verifiers/v1/clients/eval.py +0 -0
  59. {verifiers-0.3.2.dev195 → verifiers-0.3.2.dev199}/verifiers/v1/clients/train.py +0 -0
  60. {verifiers-0.3.2.dev195 → verifiers-0.3.2.dev199}/verifiers/v1/configs/__init__.py +0 -0
  61. {verifiers-0.3.2.dev195 → verifiers-0.3.2.dev199}/verifiers/v1/configs/agent.py +0 -0
  62. {verifiers-0.3.2.dev195 → verifiers-0.3.2.dev199}/verifiers/v1/configs/cli/__init__.py +0 -0
  63. {verifiers-0.3.2.dev195 → verifiers-0.3.2.dev199}/verifiers/v1/configs/cli/debug.py +0 -0
  64. {verifiers-0.3.2.dev195 → verifiers-0.3.2.dev199}/verifiers/v1/configs/cli/env.py +0 -0
  65. {verifiers-0.3.2.dev195 → verifiers-0.3.2.dev199}/verifiers/v1/configs/cli/eval.py +0 -0
  66. {verifiers-0.3.2.dev195 → verifiers-0.3.2.dev199}/verifiers/v1/configs/cli/init.py +0 -0
  67. {verifiers-0.3.2.dev195 → verifiers-0.3.2.dev199}/verifiers/v1/configs/cli/replay.py +0 -0
  68. {verifiers-0.3.2.dev195 → verifiers-0.3.2.dev199}/verifiers/v1/configs/cli/validate.py +0 -0
  69. {verifiers-0.3.2.dev195 → verifiers-0.3.2.dev199}/verifiers/v1/configs/client.py +0 -0
  70. {verifiers-0.3.2.dev195 → verifiers-0.3.2.dev199}/verifiers/v1/configs/env.py +0 -0
  71. {verifiers-0.3.2.dev195 → verifiers-0.3.2.dev199}/verifiers/v1/configs/harness.py +0 -0
  72. {verifiers-0.3.2.dev195 → verifiers-0.3.2.dev199}/verifiers/v1/configs/judge.py +0 -0
  73. {verifiers-0.3.2.dev195 → verifiers-0.3.2.dev199}/verifiers/v1/configs/retries.py +0 -0
  74. {verifiers-0.3.2.dev195 → verifiers-0.3.2.dev199}/verifiers/v1/configs/runtime.py +0 -0
  75. {verifiers-0.3.2.dev195 → verifiers-0.3.2.dev199}/verifiers/v1/configs/select.py +0 -0
  76. {verifiers-0.3.2.dev195 → verifiers-0.3.2.dev199}/verifiers/v1/configs/serve.py +0 -0
  77. {verifiers-0.3.2.dev195 → verifiers-0.3.2.dev199}/verifiers/v1/configs/task.py +0 -0
  78. {verifiers-0.3.2.dev195 → verifiers-0.3.2.dev199}/verifiers/v1/configs/taskset.py +0 -0
  79. {verifiers-0.3.2.dev195 → verifiers-0.3.2.dev199}/verifiers/v1/dialects/__init__.py +0 -0
  80. {verifiers-0.3.2.dev195 → verifiers-0.3.2.dev199}/verifiers/v1/dialects/anthropic.py +0 -0
  81. {verifiers-0.3.2.dev195 → verifiers-0.3.2.dev199}/verifiers/v1/dialects/base.py +0 -0
  82. {verifiers-0.3.2.dev195 → verifiers-0.3.2.dev199}/verifiers/v1/dialects/chat.py +0 -0
  83. {verifiers-0.3.2.dev195 → verifiers-0.3.2.dev199}/verifiers/v1/dialects/responses.py +0 -0
  84. {verifiers-0.3.2.dev195 → verifiers-0.3.2.dev199}/verifiers/v1/env.py +0 -0
  85. {verifiers-0.3.2.dev195 → verifiers-0.3.2.dev199}/verifiers/v1/envs/__init__.py +0 -0
  86. {verifiers-0.3.2.dev195 → verifiers-0.3.2.dev199}/verifiers/v1/envs/agentic_judge/__init__.py +0 -0
  87. {verifiers-0.3.2.dev195 → verifiers-0.3.2.dev199}/verifiers/v1/envs/agentic_judge/env.py +0 -0
  88. {verifiers-0.3.2.dev195 → verifiers-0.3.2.dev199}/verifiers/v1/envs/best_of_n/__init__.py +0 -0
  89. {verifiers-0.3.2.dev195 → verifiers-0.3.2.dev199}/verifiers/v1/envs/best_of_n/env.py +0 -0
  90. {verifiers-0.3.2.dev195 → verifiers-0.3.2.dev199}/verifiers/v1/envs/isolated_verifier/__init__.py +0 -0
  91. {verifiers-0.3.2.dev195 → verifiers-0.3.2.dev199}/verifiers/v1/envs/isolated_verifier/env.py +0 -0
  92. {verifiers-0.3.2.dev195 → verifiers-0.3.2.dev199}/verifiers/v1/envs/shared_agentic_judge/__init__.py +0 -0
  93. {verifiers-0.3.2.dev195 → verifiers-0.3.2.dev199}/verifiers/v1/envs/single_agent/__init__.py +0 -0
  94. {verifiers-0.3.2.dev195 → verifiers-0.3.2.dev199}/verifiers/v1/envs/single_agent/env.py +0 -0
  95. {verifiers-0.3.2.dev195 → verifiers-0.3.2.dev199}/verifiers/v1/envs/user_sim/__init__.py +0 -0
  96. {verifiers-0.3.2.dev195 → verifiers-0.3.2.dev199}/verifiers/v1/envs/user_sim/env.py +0 -0
  97. {verifiers-0.3.2.dev195 → verifiers-0.3.2.dev199}/verifiers/v1/episode.py +0 -0
  98. {verifiers-0.3.2.dev195 → verifiers-0.3.2.dev199}/verifiers/v1/errors.py +0 -0
  99. {verifiers-0.3.2.dev195 → verifiers-0.3.2.dev199}/verifiers/v1/gepa/__init__.py +0 -0
  100. {verifiers-0.3.2.dev195 → verifiers-0.3.2.dev199}/verifiers/v1/gepa/adapter.py +0 -0
  101. {verifiers-0.3.2.dev195 → verifiers-0.3.2.dev199}/verifiers/v1/gepa/config.py +0 -0
  102. {verifiers-0.3.2.dev195 → verifiers-0.3.2.dev199}/verifiers/v1/gepa/dataset.py +0 -0
  103. {verifiers-0.3.2.dev195 → verifiers-0.3.2.dev199}/verifiers/v1/gepa/reflection.py +0 -0
  104. {verifiers-0.3.2.dev195 → verifiers-0.3.2.dev199}/verifiers/v1/gepa/runner.py +0 -0
  105. {verifiers-0.3.2.dev195 → verifiers-0.3.2.dev199}/verifiers/v1/graph.py +0 -0
  106. {verifiers-0.3.2.dev195 → verifiers-0.3.2.dev199}/verifiers/v1/harness.py +0 -0
  107. {verifiers-0.3.2.dev195 → verifiers-0.3.2.dev199}/verifiers/v1/harnesses/__init__.py +0 -0
  108. {verifiers-0.3.2.dev195 → verifiers-0.3.2.dev199}/verifiers/v1/harnesses/bash/__init__.py +0 -0
  109. {verifiers-0.3.2.dev195 → verifiers-0.3.2.dev199}/verifiers/v1/harnesses/bash/harness.py +0 -0
  110. {verifiers-0.3.2.dev195 → verifiers-0.3.2.dev199}/verifiers/v1/harnesses/browser_use/__init__.py +0 -0
  111. {verifiers-0.3.2.dev195 → verifiers-0.3.2.dev199}/verifiers/v1/harnesses/browser_use/harness.py +0 -0
  112. {verifiers-0.3.2.dev195 → verifiers-0.3.2.dev199}/verifiers/v1/harnesses/browser_use/program.py +0 -0
  113. {verifiers-0.3.2.dev195 → verifiers-0.3.2.dev199}/verifiers/v1/harnesses/claude_code/__init__.py +0 -0
  114. {verifiers-0.3.2.dev195 → verifiers-0.3.2.dev199}/verifiers/v1/harnesses/claude_code/harness.py +0 -0
  115. {verifiers-0.3.2.dev195 → verifiers-0.3.2.dev199}/verifiers/v1/harnesses/codex/__init__.py +0 -0
  116. {verifiers-0.3.2.dev195 → verifiers-0.3.2.dev199}/verifiers/v1/harnesses/codex/gate.mjs +0 -0
  117. {verifiers-0.3.2.dev195 → verifiers-0.3.2.dev199}/verifiers/v1/harnesses/codex/harness.py +0 -0
  118. {verifiers-0.3.2.dev195 → verifiers-0.3.2.dev199}/verifiers/v1/harnesses/hermes_agent/__init__.py +0 -0
  119. {verifiers-0.3.2.dev195 → verifiers-0.3.2.dev199}/verifiers/v1/harnesses/hermes_agent/harness.py +0 -0
  120. {verifiers-0.3.2.dev195 → verifiers-0.3.2.dev199}/verifiers/v1/harnesses/hermes_agent/program.py +0 -0
  121. {verifiers-0.3.2.dev195 → verifiers-0.3.2.dev199}/verifiers/v1/harnesses/kimi_code/__init__.py +0 -0
  122. {verifiers-0.3.2.dev195 → verifiers-0.3.2.dev199}/verifiers/v1/harnesses/kimi_code/harness.py +0 -0
  123. {verifiers-0.3.2.dev195 → verifiers-0.3.2.dev199}/verifiers/v1/harnesses/mini_swe_agent/__init__.py +0 -0
  124. {verifiers-0.3.2.dev195 → verifiers-0.3.2.dev199}/verifiers/v1/harnesses/mini_swe_agent/harness.py +0 -0
  125. {verifiers-0.3.2.dev195 → verifiers-0.3.2.dev199}/verifiers/v1/harnesses/mini_swe_agent/program.py +0 -0
  126. {verifiers-0.3.2.dev195 → verifiers-0.3.2.dev199}/verifiers/v1/harnesses/node.py +0 -0
  127. {verifiers-0.3.2.dev195 → verifiers-0.3.2.dev199}/verifiers/v1/harnesses/null/__init__.py +0 -0
  128. {verifiers-0.3.2.dev195 → verifiers-0.3.2.dev199}/verifiers/v1/harnesses/null/harness.py +0 -0
  129. {verifiers-0.3.2.dev195 → verifiers-0.3.2.dev199}/verifiers/v1/harnesses/openclaw/__init__.py +0 -0
  130. {verifiers-0.3.2.dev195 → verifiers-0.3.2.dev199}/verifiers/v1/harnesses/openclaw/harness.py +0 -0
  131. {verifiers-0.3.2.dev195 → verifiers-0.3.2.dev199}/verifiers/v1/harnesses/pi/__init__.py +0 -0
  132. {verifiers-0.3.2.dev195 → verifiers-0.3.2.dev199}/verifiers/v1/harnesses/pi/gate.mjs +0 -0
  133. {verifiers-0.3.2.dev195 → verifiers-0.3.2.dev199}/verifiers/v1/harnesses/pi/harness.py +0 -0
  134. {verifiers-0.3.2.dev195 → verifiers-0.3.2.dev199}/verifiers/v1/harnesses/prime_agent/__init__.py +0 -0
  135. {verifiers-0.3.2.dev195 → verifiers-0.3.2.dev199}/verifiers/v1/harnesses/prime_agent/harness.py +0 -0
  136. {verifiers-0.3.2.dev195 → verifiers-0.3.2.dev199}/verifiers/v1/harnesses/rlm/__init__.py +0 -0
  137. {verifiers-0.3.2.dev195 → verifiers-0.3.2.dev199}/verifiers/v1/harnesses/rlm/harness.py +0 -0
  138. {verifiers-0.3.2.dev195 → verifiers-0.3.2.dev199}/verifiers/v1/harnesses/terminus_2/__init__.py +0 -0
  139. {verifiers-0.3.2.dev195 → verifiers-0.3.2.dev199}/verifiers/v1/harnesses/terminus_2/harness.py +0 -0
  140. {verifiers-0.3.2.dev195 → verifiers-0.3.2.dev199}/verifiers/v1/harnesses/terminus_2/program.py +0 -0
  141. {verifiers-0.3.2.dev195 → verifiers-0.3.2.dev199}/verifiers/v1/harnesses/utils/__init__.py +0 -0
  142. {verifiers-0.3.2.dev195 → verifiers-0.3.2.dev199}/verifiers/v1/harnesses/utils/compaction.py +0 -0
  143. {verifiers-0.3.2.dev195 → verifiers-0.3.2.dev199}/verifiers/v1/harnesses/utils/core.py +0 -0
  144. {verifiers-0.3.2.dev195 → verifiers-0.3.2.dev199}/verifiers/v1/harnesses/utils/install.py +0 -0
  145. {verifiers-0.3.2.dev195 → verifiers-0.3.2.dev199}/verifiers/v1/harnesses/utils/launch.py +0 -0
  146. {verifiers-0.3.2.dev195 → verifiers-0.3.2.dev199}/verifiers/v1/harnesses/utils/mcp.py +0 -0
  147. {verifiers-0.3.2.dev195 → verifiers-0.3.2.dev199}/verifiers/v1/interception/__init__.py +0 -0
  148. {verifiers-0.3.2.dev195 → verifiers-0.3.2.dev199}/verifiers/v1/interception/base.py +0 -0
  149. {verifiers-0.3.2.dev195 → verifiers-0.3.2.dev199}/verifiers/v1/interception/pool.py +0 -0
  150. {verifiers-0.3.2.dev195 → verifiers-0.3.2.dev199}/verifiers/v1/interception/server.py +0 -0
  151. {verifiers-0.3.2.dev195 → verifiers-0.3.2.dev199}/verifiers/v1/interception/tunnel/__init__.py +0 -0
  152. {verifiers-0.3.2.dev195 → verifiers-0.3.2.dev199}/verifiers/v1/interception/tunnel/base.py +0 -0
  153. {verifiers-0.3.2.dev195 → verifiers-0.3.2.dev199}/verifiers/v1/interception/tunnel/custom.py +0 -0
  154. {verifiers-0.3.2.dev195 → verifiers-0.3.2.dev199}/verifiers/v1/interception/tunnel/prime.py +0 -0
  155. {verifiers-0.3.2.dev195 → verifiers-0.3.2.dev199}/verifiers/v1/judge.py +0 -0
  156. {verifiers-0.3.2.dev195 → verifiers-0.3.2.dev199}/verifiers/v1/judges/__init__.py +0 -0
  157. {verifiers-0.3.2.dev195 → verifiers-0.3.2.dev199}/verifiers/v1/judges/decision.py +0 -0
  158. {verifiers-0.3.2.dev195 → verifiers-0.3.2.dev199}/verifiers/v1/judges/reference.py +0 -0
  159. {verifiers-0.3.2.dev195 → verifiers-0.3.2.dev199}/verifiers/v1/judges/reference.txt +0 -0
  160. {verifiers-0.3.2.dev195 → verifiers-0.3.2.dev199}/verifiers/v1/judges/rubric.py +0 -0
  161. {verifiers-0.3.2.dev195 → verifiers-0.3.2.dev199}/verifiers/v1/judges/rubric.txt +0 -0
  162. {verifiers-0.3.2.dev195 → verifiers-0.3.2.dev199}/verifiers/v1/mcp/__init__.py +0 -0
  163. {verifiers-0.3.2.dev195 → verifiers-0.3.2.dev199}/verifiers/v1/mcp/launch.py +0 -0
  164. {verifiers-0.3.2.dev195 → verifiers-0.3.2.dev199}/verifiers/v1/mcp/server.py +0 -0
  165. {verifiers-0.3.2.dev195 → verifiers-0.3.2.dev199}/verifiers/v1/mcp/toolset.py +0 -0
  166. {verifiers-0.3.2.dev195 → verifiers-0.3.2.dev199}/verifiers/v1/rollout.py +0 -0
  167. {verifiers-0.3.2.dev195 → verifiers-0.3.2.dev199}/verifiers/v1/runtimes/__init__.py +0 -0
  168. {verifiers-0.3.2.dev195 → verifiers-0.3.2.dev199}/verifiers/v1/runtimes/apptainer.py +0 -0
  169. {verifiers-0.3.2.dev195 → verifiers-0.3.2.dev199}/verifiers/v1/runtimes/base.py +0 -0
  170. {verifiers-0.3.2.dev195 → verifiers-0.3.2.dev199}/verifiers/v1/runtimes/container.py +0 -0
  171. {verifiers-0.3.2.dev195 → verifiers-0.3.2.dev199}/verifiers/v1/runtimes/docker/__init__.py +0 -0
  172. {verifiers-0.3.2.dev195 → verifiers-0.3.2.dev199}/verifiers/v1/runtimes/docker/egress.py +0 -0
  173. {verifiers-0.3.2.dev195 → verifiers-0.3.2.dev199}/verifiers/v1/runtimes/e2b.py +0 -0
  174. {verifiers-0.3.2.dev195 → verifiers-0.3.2.dev199}/verifiers/v1/runtimes/limiters.py +0 -0
  175. {verifiers-0.3.2.dev195 → verifiers-0.3.2.dev199}/verifiers/v1/runtimes/modal.py +0 -0
  176. {verifiers-0.3.2.dev195 → verifiers-0.3.2.dev199}/verifiers/v1/runtimes/prime.py +0 -0
  177. {verifiers-0.3.2.dev195 → verifiers-0.3.2.dev199}/verifiers/v1/runtimes/subprocess.py +0 -0
  178. {verifiers-0.3.2.dev195 → verifiers-0.3.2.dev199}/verifiers/v1/semantic.py +0 -0
  179. {verifiers-0.3.2.dev195 → verifiers-0.3.2.dev199}/verifiers/v1/serve/__init__.py +0 -0
  180. {verifiers-0.3.2.dev195 → verifiers-0.3.2.dev199}/verifiers/v1/serve/client.py +0 -0
  181. {verifiers-0.3.2.dev195 → verifiers-0.3.2.dev199}/verifiers/v1/serve/delta.py +0 -0
  182. {verifiers-0.3.2.dev195 → verifiers-0.3.2.dev199}/verifiers/v1/serve/encoding.py +0 -0
  183. {verifiers-0.3.2.dev195 → verifiers-0.3.2.dev199}/verifiers/v1/serve/pool.py +0 -0
  184. {verifiers-0.3.2.dev195 → verifiers-0.3.2.dev199}/verifiers/v1/serve/server.py +0 -0
  185. {verifiers-0.3.2.dev195 → verifiers-0.3.2.dev199}/verifiers/v1/serve/types.py +0 -0
  186. {verifiers-0.3.2.dev195 → verifiers-0.3.2.dev199}/verifiers/v1/session.py +0 -0
  187. {verifiers-0.3.2.dev195 → verifiers-0.3.2.dev199}/verifiers/v1/state.py +0 -0
  188. {verifiers-0.3.2.dev195 → verifiers-0.3.2.dev199}/verifiers/v1/task.py +0 -0
  189. {verifiers-0.3.2.dev195 → verifiers-0.3.2.dev199}/verifiers/v1/taskset.py +0 -0
  190. {verifiers-0.3.2.dev195 → verifiers-0.3.2.dev199}/verifiers/v1/tasksets/__init__.py +0 -0
  191. {verifiers-0.3.2.dev195 → verifiers-0.3.2.dev199}/verifiers/v1/tasksets/harbor/__init__.py +0 -0
  192. {verifiers-0.3.2.dev195 → verifiers-0.3.2.dev199}/verifiers/v1/tasksets/harbor/compose.py +0 -0
  193. {verifiers-0.3.2.dev195 → verifiers-0.3.2.dev199}/verifiers/v1/tasksets/harbor/env.py +0 -0
  194. {verifiers-0.3.2.dev195 → verifiers-0.3.2.dev199}/verifiers/v1/tasksets/harbor/toolset.py +0 -0
  195. {verifiers-0.3.2.dev195 → verifiers-0.3.2.dev199}/verifiers/v1/tasksets/nemo_gym/__init__.py +0 -0
  196. {verifiers-0.3.2.dev195 → verifiers-0.3.2.dev199}/verifiers/v1/tasksets/nemo_gym/response.py +0 -0
  197. {verifiers-0.3.2.dev195 → verifiers-0.3.2.dev199}/verifiers/v1/tasksets/nemo_gym/server.py +0 -0
  198. {verifiers-0.3.2.dev195 → verifiers-0.3.2.dev199}/verifiers/v1/tasksets/nemo_gym/taskset.py +0 -0
  199. {verifiers-0.3.2.dev195 → verifiers-0.3.2.dev199}/verifiers/v1/tasksets/nemo_gym/toolset.py +0 -0
  200. {verifiers-0.3.2.dev195 → verifiers-0.3.2.dev199}/verifiers/v1/tasksets/openenv/__init__.py +0 -0
  201. {verifiers-0.3.2.dev195 → verifiers-0.3.2.dev199}/verifiers/v1/tasksets/openenv/taskset.py +0 -0
  202. {verifiers-0.3.2.dev195 → verifiers-0.3.2.dev199}/verifiers/v1/tasksets/textarena/__init__.py +0 -0
  203. {verifiers-0.3.2.dev195 → verifiers-0.3.2.dev199}/verifiers/v1/tasksets/textarena/taskset.py +0 -0
  204. {verifiers-0.3.2.dev195 → verifiers-0.3.2.dev199}/verifiers/v1/trace.py +0 -0
  205. {verifiers-0.3.2.dev195 → verifiers-0.3.2.dev199}/verifiers/v1/types.py +0 -0
  206. {verifiers-0.3.2.dev195 → verifiers-0.3.2.dev199}/verifiers/v1/utils/__init__.py +0 -0
  207. {verifiers-0.3.2.dev195 → verifiers-0.3.2.dev199}/verifiers/v1/utils/aio.py +0 -0
  208. {verifiers-0.3.2.dev195 → verifiers-0.3.2.dev199}/verifiers/v1/utils/artifacts.py +0 -0
  209. {verifiers-0.3.2.dev195 → verifiers-0.3.2.dev199}/verifiers/v1/utils/compile.py +0 -0
  210. {verifiers-0.3.2.dev195 → verifiers-0.3.2.dev199}/verifiers/v1/utils/decorators.py +0 -0
  211. {verifiers-0.3.2.dev195 → verifiers-0.3.2.dev199}/verifiers/v1/utils/eval.py +0 -0
  212. {verifiers-0.3.2.dev195 → verifiers-0.3.2.dev199}/verifiers/v1/utils/format.py +0 -0
  213. {verifiers-0.3.2.dev195 → verifiers-0.3.2.dev199}/verifiers/v1/utils/generic.py +0 -0
  214. {verifiers-0.3.2.dev195 → verifiers-0.3.2.dev199}/verifiers/v1/utils/git.py +0 -0
  215. {verifiers-0.3.2.dev195 → verifiers-0.3.2.dev199}/verifiers/v1/utils/image.py +0 -0
  216. {verifiers-0.3.2.dev195 → verifiers-0.3.2.dev199}/verifiers/v1/utils/interrupt.py +0 -0
  217. {verifiers-0.3.2.dev195 → verifiers-0.3.2.dev199}/verifiers/v1/utils/loaders.py +0 -0
  218. {verifiers-0.3.2.dev195 → verifiers-0.3.2.dev199}/verifiers/v1/utils/logging.py +0 -0
  219. {verifiers-0.3.2.dev195 → verifiers-0.3.2.dev199}/verifiers/v1/utils/memory.py +0 -0
  220. {verifiers-0.3.2.dev195 → verifiers-0.3.2.dev199}/verifiers/v1/utils/paths.py +0 -0
  221. {verifiers-0.3.2.dev195 → verifiers-0.3.2.dev199}/verifiers/v1/utils/platform.py +0 -0
  222. {verifiers-0.3.2.dev195 → verifiers-0.3.2.dev199}/verifiers/v1/utils/prime.py +0 -0
  223. {verifiers-0.3.2.dev195 → verifiers-0.3.2.dev199}/verifiers/v1/utils/retries.py +0 -0
  224. {verifiers-0.3.2.dev195 → verifiers-0.3.2.dev199}/verifiers/v1/utils/scope.py +0 -0
  225. {verifiers-0.3.2.dev195 → verifiers-0.3.2.dev199}/verifiers/v1/utils/score.py +0 -0
  226. {verifiers-0.3.2.dev195 → verifiers-0.3.2.dev199}/verifiers/v1/utils/trace_store.py +0 -0
  227. {verifiers-0.3.2.dev195 → verifiers-0.3.2.dev199}/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.dev195
3
+ Version: 0.3.2.dev199
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
@@ -49,7 +49,7 @@ Requires-Dist: uvicorn>=0.52.0
49
49
  Provides-Extra: e2b
50
50
  Requires-Dist: e2b<3,>=2.35.0; extra == 'e2b'
51
51
  Provides-Extra: harbor
52
- Requires-Dist: harbor==0.21.0; (python_full_version >= '3.12') and extra == 'harbor'
52
+ Requires-Dist: harbor==0.24.0; (python_full_version >= '3.12') and extra == 'harbor'
53
53
  Provides-Extra: modal
54
54
  Requires-Dist: modal>=1.5.4; extra == 'modal'
55
55
  Provides-Extra: openenv
@@ -95,7 +95,7 @@ ta = [
95
95
  ]
96
96
  harbor = [
97
97
  # Harbor currently publishes Python 3.12+ packages; keep core verifiers installable on 3.11.
98
- "harbor==0.21.0 ; python_full_version >= '3.12'",
98
+ "harbor==0.24.0 ; python_full_version >= '3.12'",
99
99
  ]
100
100
  modal = [
101
101
  "modal>=1.5.4",
@@ -143,7 +143,7 @@ web-search-interception = { path = "environments/web_search_interception", edita
143
143
  # Bounded cutoffs for the explicitly requested tool upgrades.
144
144
  # Full UTC timestamps: bare dates resolve to local-tz midnight and churn the
145
145
  # lockfile across timezones.
146
- harbor = "2026-08-11T00:00:00Z"
146
+ harbor = "2026-10-08T00:00:00Z"
147
147
  ruff = "2026-07-28T00:00:00Z"
148
148
  ty = "2026-07-28T00:00:00Z"
149
149
  # PrimeIntellect-published on PyPI (trusted publisher)
@@ -10,9 +10,9 @@ grades that box (see ``env.py``). Either way the score lands in
10
10
  A pullable ``[environment].docker_image`` becomes ``TaskData.image``. Verifiers does
11
11
  not build Dockerfile-only environments, so those are rejected unless ``ignore_dockerfile``
12
12
  deliberately uses the harness runtime image. Tasks without an environment also use that
13
- image unless ``require_image`` is set. The same rule applies to a declared
14
- ``[verifier.environment]``: it needs a pullable ``docker_image``, since Harbor would
15
- otherwise build the verifier image from ``tests/Dockerfile``.
13
+ image unless ``require_image`` is set. Separate verifiers prefer their own image
14
+ or tests build definition, then fall back to the agent environment. Unsupported verifier builds are rejected unless
15
+ ``ignore_dockerfile`` explicitly selects the fallback image.
16
16
  """
17
17
 
18
18
  import asyncio
@@ -28,7 +28,6 @@ import time
28
28
  from collections.abc import Iterator
29
29
  from functools import lru_cache
30
30
  from pathlib import Path, PurePosixPath
31
- from typing import Annotated
32
31
 
33
32
  from pydantic import BaseModel, ConfigDict, Field, TypeAdapter, ValidationError
34
33
 
@@ -50,12 +49,18 @@ HARBOR_INSTALL_HINT = "uv sync --python 3.12 --extra harbor"
50
49
  REWARD_JSON = "/logs/verifier/reward.json"
51
50
  MAX_REWARD_BYTES = 1024 * 1024
52
51
  REWARD_JSON_ADAPTER = TypeAdapter(
53
- float | Annotated[dict[str, float], Field(min_length=1)],
52
+ dict[str, float],
54
53
  config=ConfigDict(strict=True, allow_inf_nan=False),
55
54
  )
56
55
 
56
+ REWARD_SCALAR_ADAPTER = TypeAdapter(
57
+ float, config=ConfigDict(strict=True, allow_inf_nan=False)
58
+ )
59
+
57
60
 
58
61
  class HarborTaskConfig(TaskConfig):
62
+ reward_key: str = Field("reward", min_length=1)
63
+ """Named verifier value used as the training reward; other values remain metrics."""
59
64
  mcp_servers: list[dict] = Field(default_factory=list)
60
65
  """Task-declared connections, bound from HarborData during construction."""
61
66
 
@@ -380,44 +385,57 @@ class HarborTask(Task[HarborData, State, HarborTaskConfig]):
380
385
  ["bash", "/tests/test.sh"], resolve_env(self.data.verifier_env)
381
386
  )
382
387
  scores = await self.read_reward_json(runtime)
383
- if scores is not None:
384
- if isinstance(scores, dict) and "reward" in scores:
385
- trace.record_metrics(
386
- {key: value for key, value in scores.items() if key != "reward"}
387
- )
388
- return {"reward": scores["reward"]}
389
- return scores
390
- try:
391
- reward = (
392
- (
393
- await runtime.read(
394
- "/logs/verifier/reward.txt", max_bytes=MAX_REWARD_BYTES
388
+ if scores is None:
389
+ try:
390
+ value = (
391
+ (
392
+ await runtime.read(
393
+ "/logs/verifier/reward.txt", max_bytes=MAX_REWARD_BYTES
394
+ )
395
395
  )
396
+ .decode()
397
+ .strip()
396
398
  )
397
- .decode()
398
- .strip()
399
- )
400
- return REWARD_JSON_ADAPTER.validate_python(float(reward))
401
- except (SandboxError, OSError, ValueError) as exc:
399
+ scores = {"reward": REWARD_SCALAR_ADAPTER.validate_python(float(value))}
400
+ except (SandboxError, OSError, ValueError) as exc:
401
+ raise TaskError(
402
+ "Harbor verifier produced no reward.json and no valid reward.txt "
403
+ f"(exit {result.exit_code}): "
404
+ f"{(result.stderr or result.stdout).strip()[-500:]}"
405
+ ) from exc
406
+ key = self.config.reward_key
407
+ if key not in scores:
402
408
  raise TaskError(
403
- "Harbor verifier produced no valid reward.json or reward.txt "
404
- f"(exit {result.exit_code}): "
405
- f"{(result.stderr or result.stdout).strip()[-500:]}"
406
- ) from exc
409
+ f"Harbor verifier reward key {key!r} is missing; "
410
+ f"available keys: {sorted(scores)}. "
411
+ "Set task.reward_key to select a named verifier reward."
412
+ )
413
+ trace.record_metrics(
414
+ {name: value for name, value in scores.items() if name != key}
415
+ )
416
+ return {key: scores[key]}
407
417
 
408
- async def read_reward_json(
409
- self, runtime: Runtime
410
- ) -> float | dict[str, float] | None:
411
- """Read Harbor's scalar or keyed JSON reward, if it is valid.
418
+ async def read_reward_json(self, runtime: Runtime) -> dict[str, float] | None:
419
+ """JSON takes precedence whenever present; invalid or unreadable JSON fails.
412
420
 
413
- Bounded: this is a grading input, and nothing guarantees its size.
421
+ Only absence permits text fallback. Reads remain bounded at the source.
414
422
  """
423
+ exists = await runtime.run(
424
+ ["sh", "-c", 'test -e "$1" || test -L "$1"', "vf-reward", REWARD_JSON], {}
425
+ )
426
+ if exists.exit_code == 1:
427
+ return None
428
+ if exists.exit_code:
429
+ raise TaskError(f"Cannot inspect Harbor reward file {REWARD_JSON}")
415
430
  try:
416
431
  return REWARD_JSON_ADAPTER.validate_json(
417
432
  await runtime.read(REWARD_JSON, max_bytes=MAX_REWARD_BYTES)
418
433
  )
419
- except (SandboxError, OSError, ValidationError):
420
- return None
434
+ except (SandboxError, OSError, ValidationError) as exc:
435
+ raise TaskError(
436
+ "Harbor verifier produced invalid or unreadable reward.json; "
437
+ "expected an object of finite numeric rewards"
438
+ ) from exc
421
439
 
422
440
 
423
441
  def verifier_box_data(data: HarborData) -> HarborData:
@@ -442,7 +460,7 @@ def verifier_box_data(data: HarborData) -> HarborData:
442
460
  "workdir": data.workdir if fresh else verifier.workdir,
443
461
  "resources": data.resources if fresh else verifier.resources,
444
462
  "upload_environment": data.upload_environment
445
- if fresh and data.verifier_image is None
463
+ if data.verifier_image is None
446
464
  else False,
447
465
  "env": dict(verifier.env),
448
466
  "healthcheck": verifier.healthcheck,
@@ -580,7 +598,7 @@ def resolve_image(
580
598
 
581
599
  ``None`` keeps the harness image for the solver, or the solver image for a
582
600
  separate verifier. A declared verifier environment without an image implies
583
- a build from tests/Dockerfile, even if that file is absent.
601
+ a dedicated build only when the resolved definition contains one.
584
602
  """
585
603
  if image:
586
604
  return image
@@ -593,6 +611,8 @@ def resolve_image(
593
611
  return None
594
612
  section = "verifier.environment" if verifier else "environment"
595
613
  dockerfile = "tests/Dockerfile" if verifier else "environment/Dockerfile"
614
+ if verifier and not (task_dir / dockerfile).is_file():
615
+ dockerfile = "tests/docker-compose.yaml"
596
616
  if verifier or (task_dir / dockerfile).exists():
597
617
  if ignore_dockerfile:
598
618
  if verifier:
@@ -624,9 +644,15 @@ def parse_task(task_dir: Path, idx: int, harbor_config: HarborConfig) -> HarborD
624
644
  from harbor.environments.definition import should_upload_environment_dir
625
645
  from harbor.models.task.config import NetworkMode
626
646
  from harbor.models.task.task import Task as HarborModelTask
647
+ from harbor.models.task.verifier_mode import resolve_verifier_environment_definition
627
648
 
628
649
  harbor_task = HarborModelTask(task_dir)
629
650
  parsed = harbor_task.config
651
+ if parsed.steps:
652
+ raise ValueError(
653
+ f"{task_dir.name}: multi-step Harbor tasks are not supported; "
654
+ "select single-step tasks with --taskset.tasks"
655
+ )
630
656
  artifacts, hooks, verifier = parse_verifier_extras(task_dir, parsed, harbor_config)
631
657
  environment = parsed.environment
632
658
  image = resolve_image(
@@ -635,15 +661,20 @@ def parse_task(task_dir: Path, idx: int, harbor_config: HarborConfig) -> HarborD
635
661
  harbor_config.require_image,
636
662
  harbor_config.ignore_dockerfile,
637
663
  )
664
+ definition = (
665
+ resolve_verifier_environment_definition(parsed, harbor_task.paths)
666
+ if verifier is not None
667
+ else None
668
+ )
638
669
  verifier_image = (
639
670
  resolve_image(
640
671
  task_dir,
641
- parsed.verifier.environment.docker_image,
672
+ definition.config.docker_image,
642
673
  require_image=True,
643
674
  ignore_dockerfile=harbor_config.ignore_dockerfile,
644
675
  verifier=True,
645
676
  )
646
- if verifier is not None and parsed.verifier.environment is not None
677
+ if definition is not None and definition.bundled_tests
647
678
  else None
648
679
  )
649
680
  environment_dir = task_dir / "environment"
@@ -784,14 +815,15 @@ def parse_verifier_environment(
784
815
  Harbor resolves `[verifier.environment]` if declared, else a deep copy of
785
816
  `[environment]` — so a mode-only `separate` lands on the task's own image and needs
786
817
  nothing but a second box. A declared environment is the case that can name a
787
- different image, and the case that can name none at all: there Harbor builds
788
- `tests/Dockerfile`, which verifiers never does.
818
+ different image or only override resources. Image selection is resolved separately
819
+ by Harbor: verifier image, tests build definition, then the agent environment.
789
820
  """
790
821
  from harbor.models.task.config import NetworkMode, TaskOS
822
+ from harbor.models.task.paths import TaskPaths
791
823
  from harbor.models.task.verifier_mode import (
792
824
  VerifierEnvironmentMode,
793
- resolve_effective_verifier_env_config,
794
825
  resolve_task_verifier_mode,
826
+ resolve_verifier_environment_definition,
795
827
  )
796
828
 
797
829
  if resolve_task_verifier_mode(parsed) != VerifierEnvironmentMode.SEPARATE:
@@ -804,9 +836,10 @@ def parse_verifier_environment(
804
836
  )
805
837
  return None
806
838
 
807
- environment = resolve_effective_verifier_env_config(parsed, None)
808
- if environment is None: # unreachable while the mode is SEPARATE
839
+ definition = resolve_verifier_environment_definition(parsed, TaskPaths(task_dir))
840
+ if definition is None: # unreachable while the mode is SEPARATE
809
841
  raise ValueError(f"{task_dir.name}: separate verifier resolved no environment")
842
+ environment = definition.config
810
843
  declared = parsed.verifier.environment is not None
811
844
  unsupported = [field for field in ("tpu",) if getattr(environment, field, None)]
812
845
  if environment.os != TaskOS.LINUX or unsupported:
@@ -866,10 +899,7 @@ class HarborTaskset(Taskset[HarborTask, HarborConfig]):
866
899
  task_dirs = [
867
900
  toml_path.parent
868
901
  for toml_path in sorted(root.rglob("task.toml"))
869
- if (toml_path.parent / "instruction.md").is_file()
870
- and (
871
- self.config.tasks is None or toml_path.parent.name in self.config.tasks
872
- )
902
+ if (self.config.tasks is None or toml_path.parent.name in self.config.tasks)
873
903
  ]
874
904
  if not task_dirs:
875
905
  raise ValueError(f"no harbor tasks found in {root}")