verifiers 0.3.2.dev63__tar.gz → 0.3.2.dev65__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 (215) hide show
  1. {verifiers-0.3.2.dev63 → verifiers-0.3.2.dev65}/PKG-INFO +1 -1
  2. {verifiers-0.3.2.dev63 → verifiers-0.3.2.dev65}/verifiers/v1/cli/dashboard/eval.py +50 -15
  3. {verifiers-0.3.2.dev63 → verifiers-0.3.2.dev65}/verifiers/v1/mcp/launch.py +28 -26
  4. {verifiers-0.3.2.dev63 → verifiers-0.3.2.dev65}/verifiers/v1/runtimes/base.py +2 -0
  5. {verifiers-0.3.2.dev63 → verifiers-0.3.2.dev65}/.gitignore +0 -0
  6. {verifiers-0.3.2.dev63 → verifiers-0.3.2.dev65}/LICENSE +0 -0
  7. {verifiers-0.3.2.dev63 → verifiers-0.3.2.dev65}/README.md +0 -0
  8. {verifiers-0.3.2.dev63 → verifiers-0.3.2.dev65}/pyproject.toml +0 -0
  9. {verifiers-0.3.2.dev63 → verifiers-0.3.2.dev65}/tests/v1/conftest.py +0 -0
  10. {verifiers-0.3.2.dev63 → verifiers-0.3.2.dev65}/tests/v1/fixtures/counter_tool_v1.py +0 -0
  11. {verifiers-0.3.2.dev63 → verifiers-0.3.2.dev65}/tests/v1/fixtures/duet_v1.py +0 -0
  12. {verifiers-0.3.2.dev63 → verifiers-0.3.2.dev65}/tests/v1/fixtures/echo_acp_resume_v1.py +0 -0
  13. {verifiers-0.3.2.dev63 → verifiers-0.3.2.dev65}/tests/v1/fixtures/echo_agentic_v1.py +0 -0
  14. {verifiers-0.3.2.dev63 → verifiers-0.3.2.dev65}/tests/v1/fixtures/echo_tool_v1.py +0 -0
  15. {verifiers-0.3.2.dev63 → verifiers-0.3.2.dev65}/tests/v1/fixtures/echo_user_sim_v1.py +0 -0
  16. {verifiers-0.3.2.dev63 → verifiers-0.3.2.dev65}/tests/v1/fixtures/echo_v1.py +0 -0
  17. {verifiers-0.3.2.dev63 → verifiers-0.3.2.dev65}/tests/v1/fixtures/pyproject.toml +0 -0
  18. {verifiers-0.3.2.dev63 → verifiers-0.3.2.dev65}/tests/v1/fixtures/tool_response_image_v1.py +0 -0
  19. {verifiers-0.3.2.dev63 → verifiers-0.3.2.dev65}/tests/v1/test_color_codeword_tasks.py +0 -0
  20. {verifiers-0.3.2.dev63 → verifiers-0.3.2.dev65}/tests/v1/test_configs.py +0 -0
  21. {verifiers-0.3.2.dev63 → verifiers-0.3.2.dev65}/tests/v1/test_e2e.py +0 -0
  22. {verifiers-0.3.2.dev63 → verifiers-0.3.2.dev65}/tests/v1/test_envs.py +0 -0
  23. {verifiers-0.3.2.dev63 → verifiers-0.3.2.dev65}/tests/v1/test_graph.py +0 -0
  24. {verifiers-0.3.2.dev63 → verifiers-0.3.2.dev65}/tests/v1/test_judges.py +0 -0
  25. {verifiers-0.3.2.dev63 → verifiers-0.3.2.dev65}/tests/v1/test_scoring.py +0 -0
  26. {verifiers-0.3.2.dev63 → verifiers-0.3.2.dev65}/tests/v1/test_taskset.py +0 -0
  27. {verifiers-0.3.2.dev63 → verifiers-0.3.2.dev65}/tests/v1/test_trace.py +0 -0
  28. {verifiers-0.3.2.dev63 → verifiers-0.3.2.dev65}/verifiers/__init__.py +0 -0
  29. {verifiers-0.3.2.dev63 → verifiers-0.3.2.dev65}/verifiers/cli/commands/init.py +0 -0
  30. {verifiers-0.3.2.dev63 → verifiers-0.3.2.dev65}/verifiers/v1/__init__.py +0 -0
  31. {verifiers-0.3.2.dev63 → verifiers-0.3.2.dev65}/verifiers/v1/acp/__init__.py +0 -0
  32. {verifiers-0.3.2.dev63 → verifiers-0.3.2.dev65}/verifiers/v1/acp/runner.py +0 -0
  33. {verifiers-0.3.2.dev63 → verifiers-0.3.2.dev65}/verifiers/v1/agent.py +0 -0
  34. {verifiers-0.3.2.dev63 → verifiers-0.3.2.dev65}/verifiers/v1/cli/__init__.py +0 -0
  35. {verifiers-0.3.2.dev63 → verifiers-0.3.2.dev65}/verifiers/v1/cli/dashboard/__init__.py +0 -0
  36. {verifiers-0.3.2.dev63 → verifiers-0.3.2.dev65}/verifiers/v1/cli/dashboard/base.py +0 -0
  37. {verifiers-0.3.2.dev63 → verifiers-0.3.2.dev65}/verifiers/v1/cli/dashboard/replay.py +0 -0
  38. {verifiers-0.3.2.dev63 → verifiers-0.3.2.dev65}/verifiers/v1/cli/dashboard/validate.py +0 -0
  39. {verifiers-0.3.2.dev63 → verifiers-0.3.2.dev65}/verifiers/v1/cli/debug.py +0 -0
  40. {verifiers-0.3.2.dev63 → verifiers-0.3.2.dev65}/verifiers/v1/cli/eval/__init__.py +0 -0
  41. {verifiers-0.3.2.dev63 → verifiers-0.3.2.dev65}/verifiers/v1/cli/eval/main.py +0 -0
  42. {verifiers-0.3.2.dev63 → verifiers-0.3.2.dev65}/verifiers/v1/cli/eval/resume.py +0 -0
  43. {verifiers-0.3.2.dev63 → verifiers-0.3.2.dev65}/verifiers/v1/cli/eval/runner.py +0 -0
  44. {verifiers-0.3.2.dev63 → verifiers-0.3.2.dev65}/verifiers/v1/cli/gepa.py +0 -0
  45. {verifiers-0.3.2.dev63 → verifiers-0.3.2.dev65}/verifiers/v1/cli/init.py +0 -0
  46. {verifiers-0.3.2.dev63 → verifiers-0.3.2.dev65}/verifiers/v1/cli/output.py +0 -0
  47. {verifiers-0.3.2.dev63 → verifiers-0.3.2.dev65}/verifiers/v1/cli/replay.py +0 -0
  48. {verifiers-0.3.2.dev63 → verifiers-0.3.2.dev65}/verifiers/v1/cli/resolve.py +0 -0
  49. {verifiers-0.3.2.dev63 → verifiers-0.3.2.dev65}/verifiers/v1/cli/resume.py +0 -0
  50. {verifiers-0.3.2.dev63 → verifiers-0.3.2.dev65}/verifiers/v1/cli/validate.py +0 -0
  51. {verifiers-0.3.2.dev63 → verifiers-0.3.2.dev65}/verifiers/v1/clients/__init__.py +0 -0
  52. {verifiers-0.3.2.dev63 → verifiers-0.3.2.dev65}/verifiers/v1/clients/base.py +0 -0
  53. {verifiers-0.3.2.dev63 → verifiers-0.3.2.dev65}/verifiers/v1/clients/client.py +0 -0
  54. {verifiers-0.3.2.dev63 → verifiers-0.3.2.dev65}/verifiers/v1/clients/eval.py +0 -0
  55. {verifiers-0.3.2.dev63 → verifiers-0.3.2.dev65}/verifiers/v1/clients/train.py +0 -0
  56. {verifiers-0.3.2.dev63 → verifiers-0.3.2.dev65}/verifiers/v1/configs/__init__.py +0 -0
  57. {verifiers-0.3.2.dev63 → verifiers-0.3.2.dev65}/verifiers/v1/configs/agent.py +0 -0
  58. {verifiers-0.3.2.dev63 → verifiers-0.3.2.dev65}/verifiers/v1/configs/cli/__init__.py +0 -0
  59. {verifiers-0.3.2.dev63 → verifiers-0.3.2.dev65}/verifiers/v1/configs/cli/debug.py +0 -0
  60. {verifiers-0.3.2.dev63 → verifiers-0.3.2.dev65}/verifiers/v1/configs/cli/env.py +0 -0
  61. {verifiers-0.3.2.dev63 → verifiers-0.3.2.dev65}/verifiers/v1/configs/cli/eval.py +0 -0
  62. {verifiers-0.3.2.dev63 → verifiers-0.3.2.dev65}/verifiers/v1/configs/cli/init.py +0 -0
  63. {verifiers-0.3.2.dev63 → verifiers-0.3.2.dev65}/verifiers/v1/configs/cli/replay.py +0 -0
  64. {verifiers-0.3.2.dev63 → verifiers-0.3.2.dev65}/verifiers/v1/configs/cli/validate.py +0 -0
  65. {verifiers-0.3.2.dev63 → verifiers-0.3.2.dev65}/verifiers/v1/configs/client.py +0 -0
  66. {verifiers-0.3.2.dev63 → verifiers-0.3.2.dev65}/verifiers/v1/configs/env.py +0 -0
  67. {verifiers-0.3.2.dev63 → verifiers-0.3.2.dev65}/verifiers/v1/configs/harness.py +0 -0
  68. {verifiers-0.3.2.dev63 → verifiers-0.3.2.dev65}/verifiers/v1/configs/judge.py +0 -0
  69. {verifiers-0.3.2.dev63 → verifiers-0.3.2.dev65}/verifiers/v1/configs/retries.py +0 -0
  70. {verifiers-0.3.2.dev63 → verifiers-0.3.2.dev65}/verifiers/v1/configs/runtime.py +0 -0
  71. {verifiers-0.3.2.dev63 → verifiers-0.3.2.dev65}/verifiers/v1/configs/serve.py +0 -0
  72. {verifiers-0.3.2.dev63 → verifiers-0.3.2.dev65}/verifiers/v1/configs/task.py +0 -0
  73. {verifiers-0.3.2.dev63 → verifiers-0.3.2.dev65}/verifiers/v1/configs/taskset.py +0 -0
  74. {verifiers-0.3.2.dev63 → verifiers-0.3.2.dev65}/verifiers/v1/dialects/__init__.py +0 -0
  75. {verifiers-0.3.2.dev63 → verifiers-0.3.2.dev65}/verifiers/v1/dialects/anthropic.py +0 -0
  76. {verifiers-0.3.2.dev63 → verifiers-0.3.2.dev65}/verifiers/v1/dialects/base.py +0 -0
  77. {verifiers-0.3.2.dev63 → verifiers-0.3.2.dev65}/verifiers/v1/dialects/chat.py +0 -0
  78. {verifiers-0.3.2.dev63 → verifiers-0.3.2.dev65}/verifiers/v1/dialects/responses.py +0 -0
  79. {verifiers-0.3.2.dev63 → verifiers-0.3.2.dev65}/verifiers/v1/env.py +0 -0
  80. {verifiers-0.3.2.dev63 → verifiers-0.3.2.dev65}/verifiers/v1/envs/__init__.py +0 -0
  81. {verifiers-0.3.2.dev63 → verifiers-0.3.2.dev65}/verifiers/v1/envs/agentic_judge/__init__.py +0 -0
  82. {verifiers-0.3.2.dev63 → verifiers-0.3.2.dev65}/verifiers/v1/envs/agentic_judge/env.py +0 -0
  83. {verifiers-0.3.2.dev63 → verifiers-0.3.2.dev65}/verifiers/v1/envs/best_of_n/__init__.py +0 -0
  84. {verifiers-0.3.2.dev63 → verifiers-0.3.2.dev65}/verifiers/v1/envs/best_of_n/env.py +0 -0
  85. {verifiers-0.3.2.dev63 → verifiers-0.3.2.dev65}/verifiers/v1/envs/isolated_verifier/__init__.py +0 -0
  86. {verifiers-0.3.2.dev63 → verifiers-0.3.2.dev65}/verifiers/v1/envs/isolated_verifier/env.py +0 -0
  87. {verifiers-0.3.2.dev63 → verifiers-0.3.2.dev65}/verifiers/v1/envs/shared_agentic_judge/__init__.py +0 -0
  88. {verifiers-0.3.2.dev63 → verifiers-0.3.2.dev65}/verifiers/v1/envs/single_agent/__init__.py +0 -0
  89. {verifiers-0.3.2.dev63 → verifiers-0.3.2.dev65}/verifiers/v1/envs/single_agent/env.py +0 -0
  90. {verifiers-0.3.2.dev63 → verifiers-0.3.2.dev65}/verifiers/v1/envs/user_sim/__init__.py +0 -0
  91. {verifiers-0.3.2.dev63 → verifiers-0.3.2.dev65}/verifiers/v1/envs/user_sim/env.py +0 -0
  92. {verifiers-0.3.2.dev63 → verifiers-0.3.2.dev65}/verifiers/v1/episode.py +0 -0
  93. {verifiers-0.3.2.dev63 → verifiers-0.3.2.dev65}/verifiers/v1/errors.py +0 -0
  94. {verifiers-0.3.2.dev63 → verifiers-0.3.2.dev65}/verifiers/v1/gepa/__init__.py +0 -0
  95. {verifiers-0.3.2.dev63 → verifiers-0.3.2.dev65}/verifiers/v1/gepa/adapter.py +0 -0
  96. {verifiers-0.3.2.dev63 → verifiers-0.3.2.dev65}/verifiers/v1/gepa/config.py +0 -0
  97. {verifiers-0.3.2.dev63 → verifiers-0.3.2.dev65}/verifiers/v1/gepa/dataset.py +0 -0
  98. {verifiers-0.3.2.dev63 → verifiers-0.3.2.dev65}/verifiers/v1/gepa/reflection.py +0 -0
  99. {verifiers-0.3.2.dev63 → verifiers-0.3.2.dev65}/verifiers/v1/gepa/runner.py +0 -0
  100. {verifiers-0.3.2.dev63 → verifiers-0.3.2.dev65}/verifiers/v1/graph.py +0 -0
  101. {verifiers-0.3.2.dev63 → verifiers-0.3.2.dev65}/verifiers/v1/harness.py +0 -0
  102. {verifiers-0.3.2.dev63 → verifiers-0.3.2.dev65}/verifiers/v1/harnesses/__init__.py +0 -0
  103. {verifiers-0.3.2.dev63 → verifiers-0.3.2.dev65}/verifiers/v1/harnesses/bash/__init__.py +0 -0
  104. {verifiers-0.3.2.dev63 → verifiers-0.3.2.dev65}/verifiers/v1/harnesses/bash/harness.py +0 -0
  105. {verifiers-0.3.2.dev63 → verifiers-0.3.2.dev65}/verifiers/v1/harnesses/browser_use/__init__.py +0 -0
  106. {verifiers-0.3.2.dev63 → verifiers-0.3.2.dev65}/verifiers/v1/harnesses/browser_use/harness.py +0 -0
  107. {verifiers-0.3.2.dev63 → verifiers-0.3.2.dev65}/verifiers/v1/harnesses/browser_use/program.py +0 -0
  108. {verifiers-0.3.2.dev63 → verifiers-0.3.2.dev65}/verifiers/v1/harnesses/claude_code/__init__.py +0 -0
  109. {verifiers-0.3.2.dev63 → verifiers-0.3.2.dev65}/verifiers/v1/harnesses/claude_code/harness.py +0 -0
  110. {verifiers-0.3.2.dev63 → verifiers-0.3.2.dev65}/verifiers/v1/harnesses/codex/__init__.py +0 -0
  111. {verifiers-0.3.2.dev63 → verifiers-0.3.2.dev65}/verifiers/v1/harnesses/codex/harness.py +0 -0
  112. {verifiers-0.3.2.dev63 → verifiers-0.3.2.dev65}/verifiers/v1/harnesses/hermes_agent/__init__.py +0 -0
  113. {verifiers-0.3.2.dev63 → verifiers-0.3.2.dev65}/verifiers/v1/harnesses/hermes_agent/harness.py +0 -0
  114. {verifiers-0.3.2.dev63 → verifiers-0.3.2.dev65}/verifiers/v1/harnesses/hermes_agent/program.py +0 -0
  115. {verifiers-0.3.2.dev63 → verifiers-0.3.2.dev65}/verifiers/v1/harnesses/kimi_code/__init__.py +0 -0
  116. {verifiers-0.3.2.dev63 → verifiers-0.3.2.dev65}/verifiers/v1/harnesses/kimi_code/harness.py +0 -0
  117. {verifiers-0.3.2.dev63 → verifiers-0.3.2.dev65}/verifiers/v1/harnesses/mini_swe_agent/__init__.py +0 -0
  118. {verifiers-0.3.2.dev63 → verifiers-0.3.2.dev65}/verifiers/v1/harnesses/mini_swe_agent/harness.py +0 -0
  119. {verifiers-0.3.2.dev63 → verifiers-0.3.2.dev65}/verifiers/v1/harnesses/mini_swe_agent/program.py +0 -0
  120. {verifiers-0.3.2.dev63 → verifiers-0.3.2.dev65}/verifiers/v1/harnesses/node.py +0 -0
  121. {verifiers-0.3.2.dev63 → verifiers-0.3.2.dev65}/verifiers/v1/harnesses/null/__init__.py +0 -0
  122. {verifiers-0.3.2.dev63 → verifiers-0.3.2.dev65}/verifiers/v1/harnesses/null/harness.py +0 -0
  123. {verifiers-0.3.2.dev63 → verifiers-0.3.2.dev65}/verifiers/v1/harnesses/openclaw/__init__.py +0 -0
  124. {verifiers-0.3.2.dev63 → verifiers-0.3.2.dev65}/verifiers/v1/harnesses/openclaw/harness.py +0 -0
  125. {verifiers-0.3.2.dev63 → verifiers-0.3.2.dev65}/verifiers/v1/harnesses/pi/__init__.py +0 -0
  126. {verifiers-0.3.2.dev63 → verifiers-0.3.2.dev65}/verifiers/v1/harnesses/pi/harness.py +0 -0
  127. {verifiers-0.3.2.dev63 → verifiers-0.3.2.dev65}/verifiers/v1/harnesses/pool/__init__.py +0 -0
  128. {verifiers-0.3.2.dev63 → verifiers-0.3.2.dev65}/verifiers/v1/harnesses/pool/harness.py +0 -0
  129. {verifiers-0.3.2.dev63 → verifiers-0.3.2.dev65}/verifiers/v1/harnesses/prime_agent/__init__.py +0 -0
  130. {verifiers-0.3.2.dev63 → verifiers-0.3.2.dev65}/verifiers/v1/harnesses/prime_agent/harness.py +0 -0
  131. {verifiers-0.3.2.dev63 → verifiers-0.3.2.dev65}/verifiers/v1/harnesses/rlm/__init__.py +0 -0
  132. {verifiers-0.3.2.dev63 → verifiers-0.3.2.dev65}/verifiers/v1/harnesses/rlm/harness.py +0 -0
  133. {verifiers-0.3.2.dev63 → verifiers-0.3.2.dev65}/verifiers/v1/harnesses/terminus_2/__init__.py +0 -0
  134. {verifiers-0.3.2.dev63 → verifiers-0.3.2.dev65}/verifiers/v1/harnesses/terminus_2/harness.py +0 -0
  135. {verifiers-0.3.2.dev63 → verifiers-0.3.2.dev65}/verifiers/v1/harnesses/terminus_2/program.py +0 -0
  136. {verifiers-0.3.2.dev63 → verifiers-0.3.2.dev65}/verifiers/v1/harnesses/utils/__init__.py +0 -0
  137. {verifiers-0.3.2.dev63 → verifiers-0.3.2.dev65}/verifiers/v1/harnesses/utils/compaction.py +0 -0
  138. {verifiers-0.3.2.dev63 → verifiers-0.3.2.dev65}/verifiers/v1/harnesses/utils/core.py +0 -0
  139. {verifiers-0.3.2.dev63 → verifiers-0.3.2.dev65}/verifiers/v1/harnesses/utils/install.py +0 -0
  140. {verifiers-0.3.2.dev63 → verifiers-0.3.2.dev65}/verifiers/v1/harnesses/utils/launch.py +0 -0
  141. {verifiers-0.3.2.dev63 → verifiers-0.3.2.dev65}/verifiers/v1/harnesses/utils/mcp.py +0 -0
  142. {verifiers-0.3.2.dev63 → verifiers-0.3.2.dev65}/verifiers/v1/interception/__init__.py +0 -0
  143. {verifiers-0.3.2.dev63 → verifiers-0.3.2.dev65}/verifiers/v1/interception/base.py +0 -0
  144. {verifiers-0.3.2.dev63 → verifiers-0.3.2.dev65}/verifiers/v1/interception/pool.py +0 -0
  145. {verifiers-0.3.2.dev63 → verifiers-0.3.2.dev65}/verifiers/v1/interception/server.py +0 -0
  146. {verifiers-0.3.2.dev63 → verifiers-0.3.2.dev65}/verifiers/v1/interception/tool.py +0 -0
  147. {verifiers-0.3.2.dev63 → verifiers-0.3.2.dev65}/verifiers/v1/interception/tunnel/__init__.py +0 -0
  148. {verifiers-0.3.2.dev63 → verifiers-0.3.2.dev65}/verifiers/v1/interception/tunnel/base.py +0 -0
  149. {verifiers-0.3.2.dev63 → verifiers-0.3.2.dev65}/verifiers/v1/interception/tunnel/custom.py +0 -0
  150. {verifiers-0.3.2.dev63 → verifiers-0.3.2.dev65}/verifiers/v1/interception/tunnel/prime.py +0 -0
  151. {verifiers-0.3.2.dev63 → verifiers-0.3.2.dev65}/verifiers/v1/judge.py +0 -0
  152. {verifiers-0.3.2.dev63 → verifiers-0.3.2.dev65}/verifiers/v1/judges/__init__.py +0 -0
  153. {verifiers-0.3.2.dev63 → verifiers-0.3.2.dev65}/verifiers/v1/judges/reference.py +0 -0
  154. {verifiers-0.3.2.dev63 → verifiers-0.3.2.dev65}/verifiers/v1/judges/reference.txt +0 -0
  155. {verifiers-0.3.2.dev63 → verifiers-0.3.2.dev65}/verifiers/v1/judges/rubric.py +0 -0
  156. {verifiers-0.3.2.dev63 → verifiers-0.3.2.dev65}/verifiers/v1/judges/rubric.txt +0 -0
  157. {verifiers-0.3.2.dev63 → verifiers-0.3.2.dev65}/verifiers/v1/mcp/__init__.py +0 -0
  158. {verifiers-0.3.2.dev63 → verifiers-0.3.2.dev65}/verifiers/v1/mcp/server.py +0 -0
  159. {verifiers-0.3.2.dev63 → verifiers-0.3.2.dev65}/verifiers/v1/mcp/toolset.py +0 -0
  160. {verifiers-0.3.2.dev63 → verifiers-0.3.2.dev65}/verifiers/v1/rollout.py +0 -0
  161. {verifiers-0.3.2.dev63 → verifiers-0.3.2.dev65}/verifiers/v1/runtimes/__init__.py +0 -0
  162. {verifiers-0.3.2.dev63 → verifiers-0.3.2.dev65}/verifiers/v1/runtimes/docker/__init__.py +0 -0
  163. {verifiers-0.3.2.dev63 → verifiers-0.3.2.dev65}/verifiers/v1/runtimes/docker/egress.py +0 -0
  164. {verifiers-0.3.2.dev63 → verifiers-0.3.2.dev65}/verifiers/v1/runtimes/limiters.py +0 -0
  165. {verifiers-0.3.2.dev63 → verifiers-0.3.2.dev65}/verifiers/v1/runtimes/modal.py +0 -0
  166. {verifiers-0.3.2.dev63 → verifiers-0.3.2.dev65}/verifiers/v1/runtimes/prime.py +0 -0
  167. {verifiers-0.3.2.dev63 → verifiers-0.3.2.dev65}/verifiers/v1/runtimes/subprocess.py +0 -0
  168. {verifiers-0.3.2.dev63 → verifiers-0.3.2.dev65}/verifiers/v1/semantic.py +0 -0
  169. {verifiers-0.3.2.dev63 → verifiers-0.3.2.dev65}/verifiers/v1/serve/__init__.py +0 -0
  170. {verifiers-0.3.2.dev63 → verifiers-0.3.2.dev65}/verifiers/v1/serve/client.py +0 -0
  171. {verifiers-0.3.2.dev63 → verifiers-0.3.2.dev65}/verifiers/v1/serve/encoding.py +0 -0
  172. {verifiers-0.3.2.dev63 → verifiers-0.3.2.dev65}/verifiers/v1/serve/pool.py +0 -0
  173. {verifiers-0.3.2.dev63 → verifiers-0.3.2.dev65}/verifiers/v1/serve/server.py +0 -0
  174. {verifiers-0.3.2.dev63 → verifiers-0.3.2.dev65}/verifiers/v1/serve/types.py +0 -0
  175. {verifiers-0.3.2.dev63 → verifiers-0.3.2.dev65}/verifiers/v1/session.py +0 -0
  176. {verifiers-0.3.2.dev63 → verifiers-0.3.2.dev65}/verifiers/v1/state.py +0 -0
  177. {verifiers-0.3.2.dev63 → verifiers-0.3.2.dev65}/verifiers/v1/task.py +0 -0
  178. {verifiers-0.3.2.dev63 → verifiers-0.3.2.dev65}/verifiers/v1/taskset.py +0 -0
  179. {verifiers-0.3.2.dev63 → verifiers-0.3.2.dev65}/verifiers/v1/tasksets/__init__.py +0 -0
  180. {verifiers-0.3.2.dev63 → verifiers-0.3.2.dev65}/verifiers/v1/tasksets/harbor/__init__.py +0 -0
  181. {verifiers-0.3.2.dev63 → verifiers-0.3.2.dev65}/verifiers/v1/tasksets/harbor/env.py +0 -0
  182. {verifiers-0.3.2.dev63 → verifiers-0.3.2.dev65}/verifiers/v1/tasksets/harbor/taskset.py +0 -0
  183. {verifiers-0.3.2.dev63 → verifiers-0.3.2.dev65}/verifiers/v1/tasksets/lean/__init__.py +0 -0
  184. {verifiers-0.3.2.dev63 → verifiers-0.3.2.dev65}/verifiers/v1/tasksets/lean/scoring.py +0 -0
  185. {verifiers-0.3.2.dev63 → verifiers-0.3.2.dev65}/verifiers/v1/tasksets/lean/taskset.py +0 -0
  186. {verifiers-0.3.2.dev63 → verifiers-0.3.2.dev65}/verifiers/v1/tasksets/nemo_gym/__init__.py +0 -0
  187. {verifiers-0.3.2.dev63 → verifiers-0.3.2.dev65}/verifiers/v1/tasksets/nemo_gym/response.py +0 -0
  188. {verifiers-0.3.2.dev63 → verifiers-0.3.2.dev65}/verifiers/v1/tasksets/nemo_gym/server.py +0 -0
  189. {verifiers-0.3.2.dev63 → verifiers-0.3.2.dev65}/verifiers/v1/tasksets/nemo_gym/taskset.py +0 -0
  190. {verifiers-0.3.2.dev63 → verifiers-0.3.2.dev65}/verifiers/v1/tasksets/nemo_gym/toolset.py +0 -0
  191. {verifiers-0.3.2.dev63 → verifiers-0.3.2.dev65}/verifiers/v1/tasksets/openenv/__init__.py +0 -0
  192. {verifiers-0.3.2.dev63 → verifiers-0.3.2.dev65}/verifiers/v1/tasksets/openenv/taskset.py +0 -0
  193. {verifiers-0.3.2.dev63 → verifiers-0.3.2.dev65}/verifiers/v1/tasksets/textarena/__init__.py +0 -0
  194. {verifiers-0.3.2.dev63 → verifiers-0.3.2.dev65}/verifiers/v1/tasksets/textarena/taskset.py +0 -0
  195. {verifiers-0.3.2.dev63 → verifiers-0.3.2.dev65}/verifiers/v1/trace.py +0 -0
  196. {verifiers-0.3.2.dev63 → verifiers-0.3.2.dev65}/verifiers/v1/types.py +0 -0
  197. {verifiers-0.3.2.dev63 → verifiers-0.3.2.dev65}/verifiers/v1/utils/__init__.py +0 -0
  198. {verifiers-0.3.2.dev63 → verifiers-0.3.2.dev65}/verifiers/v1/utils/aio.py +0 -0
  199. {verifiers-0.3.2.dev63 → verifiers-0.3.2.dev65}/verifiers/v1/utils/artifacts.py +0 -0
  200. {verifiers-0.3.2.dev63 → verifiers-0.3.2.dev65}/verifiers/v1/utils/compile.py +0 -0
  201. {verifiers-0.3.2.dev63 → verifiers-0.3.2.dev65}/verifiers/v1/utils/decorators.py +0 -0
  202. {verifiers-0.3.2.dev63 → verifiers-0.3.2.dev65}/verifiers/v1/utils/format.py +0 -0
  203. {verifiers-0.3.2.dev63 → verifiers-0.3.2.dev65}/verifiers/v1/utils/generic.py +0 -0
  204. {verifiers-0.3.2.dev63 → verifiers-0.3.2.dev65}/verifiers/v1/utils/git.py +0 -0
  205. {verifiers-0.3.2.dev63 → verifiers-0.3.2.dev65}/verifiers/v1/utils/image.py +0 -0
  206. {verifiers-0.3.2.dev63 → verifiers-0.3.2.dev65}/verifiers/v1/utils/interrupt.py +0 -0
  207. {verifiers-0.3.2.dev63 → verifiers-0.3.2.dev65}/verifiers/v1/utils/loaders.py +0 -0
  208. {verifiers-0.3.2.dev63 → verifiers-0.3.2.dev65}/verifiers/v1/utils/logging.py +0 -0
  209. {verifiers-0.3.2.dev63 → verifiers-0.3.2.dev65}/verifiers/v1/utils/memory.py +0 -0
  210. {verifiers-0.3.2.dev63 → verifiers-0.3.2.dev65}/verifiers/v1/utils/paths.py +0 -0
  211. {verifiers-0.3.2.dev63 → verifiers-0.3.2.dev65}/verifiers/v1/utils/platform.py +0 -0
  212. {verifiers-0.3.2.dev63 → verifiers-0.3.2.dev65}/verifiers/v1/utils/prime.py +0 -0
  213. {verifiers-0.3.2.dev63 → verifiers-0.3.2.dev65}/verifiers/v1/utils/retries.py +0 -0
  214. {verifiers-0.3.2.dev63 → verifiers-0.3.2.dev65}/verifiers/v1/utils/score.py +0 -0
  215. {verifiers-0.3.2.dev63 → verifiers-0.3.2.dev65}/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.dev63
3
+ Version: 0.3.2.dev65
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
@@ -295,9 +295,22 @@ def _push_footer(push: "PushState | None") -> Group | None:
295
295
  return Group(Rule(style="dim"), line)
296
296
 
297
297
 
298
+ class TraceStats:
299
+ """Resource totals for a dashboard frame, retained once the episode is final."""
300
+
301
+ def __init__(self, trace: Trace) -> None:
302
+ self.num_input_tokens = trace.num_input_tokens
303
+ self.num_output_tokens = trace.num_output_tokens
304
+ self.num_turns = trace.num_turns
305
+ self.num_branches = trace.num_branches
306
+ self.usage = trace.usage
307
+ self.judge_usage = Usage.aggregate(trace.extra_usage)
308
+
309
+
298
310
  def Progress(
299
311
  slots: list[RunSlot],
300
312
  start: float,
313
+ completed: dict[str, TraceStats],
301
314
  page: tuple[int, int] | None = None,
302
315
  ) -> Group:
303
316
  # On resume, `slots` includes the previous session's kept rollouts (as finished slots), so
@@ -332,7 +345,7 @@ def Progress(
332
345
  ProgressBar(total=total or 1, completed=len(done)),
333
346
  Text(stats),
334
347
  )
335
- breakdown = _breakdown(scored, done_traces)
348
+ breakdown = _breakdown(scored, done_traces, completed)
336
349
  return Group(row, breakdown) if breakdown is not None else Group(row)
337
350
 
338
351
 
@@ -362,7 +375,9 @@ def _score(trace: Trace, source: str, name: str) -> float:
362
375
  return value if value is not None else 0.0
363
376
 
364
377
 
365
- def _breakdown(scored: list[Trace], done: list[Trace]) -> Table | None:
378
+ def _breakdown(
379
+ scored: list[Trace], done: list[Trace], completed: dict[str, TraceStats]
380
+ ) -> Table | None:
366
381
  """Score rows read the policy view (`scored` — trainable traces); with several
367
382
  roles in play they split per role, each role averaging over its OWN traces (no
368
383
  dilution, so the split covers every role — an untrainable seat's received
@@ -401,9 +416,10 @@ def _breakdown(scored: list[Trace], done: list[Trace]) -> Table | None:
401
416
  phase_count: dict[str, int] = {}
402
417
  model_secs = harness_secs = 0.0
403
418
  for trace in done:
404
- total_in += trace.num_input_tokens
405
- total_out += trace.num_output_tokens
406
- usage = trace.usage
419
+ stats = completed[trace.id]
420
+ total_in += stats.num_input_tokens
421
+ total_out += stats.num_output_tokens
422
+ usage = stats.usage
407
423
  if usage is not None:
408
424
  if usage.cached_input_tokens is not None:
409
425
  total_cached += usage.cached_input_tokens
@@ -415,7 +431,7 @@ def _breakdown(scored: list[Trace], done: list[Trace]) -> Table | None:
415
431
  total_cost += usage.cost
416
432
  have_cost = True
417
433
  # Judge / auxiliary scoring calls (off the message graph) shown separately from the agent's.
418
- judge = Usage.aggregate(trace.extra_usage)
434
+ judge = stats.judge_usage
419
435
  if judge is not None:
420
436
  total_judge_in += judge.input_tokens
421
437
  total_judge_out += judge.completion_tokens
@@ -530,7 +546,12 @@ def _brace(i: int, size: int) -> str:
530
546
  return "╭" if i == 0 else "╰" if i == size - 1 else "│"
531
547
 
532
548
 
533
- def Rows(groups: list[list[RunSlot]], now: float, runtime_type: str) -> Table:
549
+ def Rows(
550
+ groups: list[list[RunSlot]],
551
+ now: float,
552
+ runtime_type: str,
553
+ completed: dict[str, TraceStats],
554
+ ) -> Table:
534
555
  # (brace, state, left sections, result, time); a slot contributes one row per live
535
556
  # trace (a multi-agent episode shows each role's trace), braced per task.
536
557
  rows: list[tuple[str, str, list[str], str, str]] = []
@@ -596,7 +617,8 @@ def Rows(groups: list[list[RunSlot]], now: float, runtime_type: str) -> Table:
596
617
  runtime = f"{rt.type}({rt.id})" if rt.id else rt.type
597
618
  else:
598
619
  runtime = runtime_type
599
- turns = t.num_turns
620
+ stats = completed[t.id] if slot.done else TraceStats(t)
621
+ turns = stats.num_turns
600
622
  start = t.timing.boot.start or t.timing.setup.start
601
623
  end = (
602
624
  t.timing.scoring.end
@@ -611,9 +633,9 @@ def Rows(groups: list[list[RunSlot]], now: float, runtime_type: str) -> Table:
611
633
  )
612
634
  or now
613
635
  )
614
- prompt, completion = t.num_input_tokens, t.num_output_tokens
615
- nbranches = t.num_branches
616
- usage = t.usage
636
+ prompt, completion = stats.num_input_tokens, stats.num_output_tokens
637
+ nbranches = stats.num_branches
638
+ usage = stats.usage
617
639
  cached = usage.cached_input_tokens if usage else None
618
640
  reasoning = usage.reasoning_tokens if usage else None
619
641
  cost = usage.cost if usage else None
@@ -786,16 +808,26 @@ def _render(
786
808
  pager: Pager,
787
809
  header: Group | Table,
788
810
  runtime_type: str,
811
+ completed: dict[str, TraceStats],
789
812
  push: "PushState | None" = None,
790
813
  tail: LogTail | None = None,
791
814
  ) -> Group:
792
815
  now = time.time()
816
+ # A trace can finish before other agents and env scoring update the episode.
817
+ # Only done slots are final; resumed episodes enter the view already done.
818
+ completed.update(
819
+ (trace.id, TraceStats(trace))
820
+ for slot in slots
821
+ if slot.done
822
+ for trace in slot.traces
823
+ if trace.id not in completed
824
+ )
793
825
  # The --push status line (and, on Ctrl-C, the cleanup notice) appear under the rollouts. Measure
794
826
  # the fixed top (header + progress + rule) and the footer so the rollout rows fill what's left;
795
827
  # page through them (timer / arrows) when they'd overflow (else rich truncates).
796
828
  footers = [f for f in (_push_footer(push), _interrupt_footer()) if f is not None]
797
829
  footer = Group(*footers) if footers else None
798
- progress = Progress(slots, start)
830
+ progress = Progress(slots, start, completed)
799
831
  top = Group(header, progress, Rule(style="dim"))
800
832
  reserved = len(_CONSOLE.render_lines(top))
801
833
  if footer is not None:
@@ -813,12 +845,12 @@ def _render(
813
845
  return Group(*parts)
814
846
  page_groups, index, count = _paginate(_groups(slots), rows_per_page, pager, now)
815
847
  if count > 1:
816
- progress = Progress(slots, start, page=(index + 1, count))
848
+ progress = Progress(slots, start, completed, page=(index + 1, count))
817
849
  parts = [
818
850
  header,
819
851
  progress,
820
852
  Rule(style="dim"),
821
- Rows(page_groups, now, runtime_type),
853
+ Rows(page_groups, now, runtime_type, completed),
822
854
  ]
823
855
  if footer is not None:
824
856
  parts.append(footer)
@@ -833,6 +865,7 @@ async def dashboard(
833
865
  push: "PushState | None" = None,
834
866
  ):
835
867
  pager = Pager()
868
+ completed: dict[str, TraceStats] = {}
836
869
  warning = _warning(config)
837
870
  header = Group(warning, Text(""), Overview(config)) if warning else Overview(config)
838
871
  runtime_type = (
@@ -850,7 +883,9 @@ async def dashboard(
850
883
  else None
851
884
  )
852
885
  async with live_view(
853
- lambda: _render(slots, start, pager, header, runtime_type, push, tail),
886
+ lambda: _render(
887
+ slots, start, pager, header, runtime_type, completed, push, tail
888
+ ),
854
889
  on_key=None if tail is not None else pager.on_key,
855
890
  ):
856
891
  yield
@@ -32,6 +32,7 @@ from verifiers.v1.runtimes import (
32
32
  )
33
33
  from verifiers.v1.runtimes.base import _ENSURE_UV
34
34
  from verifiers.v1.state import State
35
+ from verifiers.v1.utils.aio import run_shielded
35
36
 
36
37
  if TYPE_CHECKING:
37
38
  from verifiers.v1.mcp.toolset import Toolset
@@ -188,35 +189,36 @@ async def _install_in_sandbox(server: ServerBase, runtime: Runtime) -> str:
188
189
  root = str(PurePosixPath(workdir) / ".vf-src")
189
190
  temp = str(PurePosixPath(workdir) / ".vf-tmp")
190
191
  cache = str(PurePosixPath(workdir) / ".vf-uv-cache")
191
- vf, env = _verifiers_root(), Path(source_dir)
192
- vf_name, vf_data = await _cached_sdist(vf)
193
- if env == vf:
194
- env_name, env_data = vf_name, vf_data
195
- else:
196
- env_name, env_data = await _cached_sdist(env)
197
- vf_remote = f"{root}/{vf_name}"
198
- env_remote = f"{root}/{env_name}"
199
- await runtime.write(vf_remote, vf_data)
200
- if env_remote != vf_remote:
201
- await runtime.write(env_remote, env_data)
202
192
  venv = str(PurePosixPath(workdir) / ".vf-venv")
203
193
  root_q, temp_q, cache_q, venv_q = map(shlex.quote, (root, temp, cache, venv))
204
- vf_source = shlex.quote(vf_remote)
205
- env_source = shlex.quote(env_remote)
206
- setup = (
207
- f"set -e; mkdir -p {root_q} {temp_q} {cache_q}; "
208
- f"export TMPDIR={temp_q} UV_CACHE_DIR={cache_q}; "
209
- f"{_ENSURE_UV}; "
210
- f"uv venv {venv_q} && "
211
- f"uv pip install --python {venv_q} {vf_source} && "
212
- f"uv pip install --python {venv_q} {env_source}"
213
- )
214
- result = await runtime.run(["sh", "-c", setup], {})
215
- if result.exit_code != 0:
216
- raise ToolsetError(
217
- f"server {server.server_name!r} install failed in runtime: "
218
- f"{(result.stderr or result.stdout).strip()[-2000:]}"
194
+ # Colocated servers and borrowed views install into one physical environment.
195
+ # Serialize its mutations and only remember sources after a successful install.
196
+ async with runtime._mcp_install_lock:
197
+ sources = dict.fromkeys((str(_verifiers_root()), source_dir))
198
+ pending = [source for source in sources if source not in runtime._mcp_sources]
199
+ if not pending:
200
+ return f"{venv}/bin/python"
201
+ setup = (
202
+ f"set -e; mkdir -p {root_q} {temp_q} {cache_q}; "
203
+ f"export TMPDIR={temp_q} UV_CACHE_DIR={cache_q}; "
204
+ 'export PATH="$HOME/.local/bin:$PATH"; '
219
205
  )
206
+ if not runtime._mcp_sources:
207
+ # Failed installs can leave the venv behind; retain it when retrying.
208
+ setup += f"{_ENSURE_UV}; uv venv --allow-existing {venv_q}; "
209
+ # Drain remote writes and installs before cancellation releases the lock.
210
+ for source in pending:
211
+ name, data = await _cached_sdist(Path(source))
212
+ remote = f"{root}/{name}"
213
+ await run_shielded(runtime.write(remote, data))
214
+ setup += f"uv pip install --python {venv_q} {shlex.quote(remote)}; "
215
+ result = await run_shielded(runtime.run(["sh", "-c", setup], {}))
216
+ if result.exit_code != 0:
217
+ raise ToolsetError(
218
+ f"server {server.server_name!r} install failed in runtime: "
219
+ f"{(result.stderr or result.stdout).strip()[-2000:]}"
220
+ )
221
+ runtime._mcp_sources.update(pending)
220
222
  return f"{venv}/bin/python"
221
223
 
222
224
 
@@ -155,6 +155,8 @@ class Runtime(ABC):
155
155
  self.env: dict[str, str] = {}
156
156
  self._uv_interpreters: dict[str, str] = {}
157
157
  self._uv_script_locks: dict[str, asyncio.Lock] = {}
158
+ self._mcp_sources: set[str] = set()
159
+ self._mcp_install_lock = asyncio.Lock()
158
160
  self._setup_claimed = False
159
161
  self.stopped = False
160
162
  """Whether teardown has begun (set by `stop`). A stopped runtime is dead: a rollout
File without changes