verifiers 0.4.1.dev33__tar.gz → 0.4.1.dev35__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 (271) hide show
  1. {verifiers-0.4.1.dev33 → verifiers-0.4.1.dev35}/PKG-INFO +1 -1
  2. {verifiers-0.4.1.dev33 → verifiers-0.4.1.dev35}/verifiers/v1/tasksets/harbor/taskset.py +1 -3
  3. {verifiers-0.4.1.dev33 → verifiers-0.4.1.dev35}/verifiers/v1/utils/artifacts.py +120 -2
  4. {verifiers-0.4.1.dev33 → verifiers-0.4.1.dev35}/verifiers/v1/utils/trace_store.py +13 -0
  5. {verifiers-0.4.1.dev33 → verifiers-0.4.1.dev35}/.gitignore +0 -0
  6. {verifiers-0.4.1.dev33 → verifiers-0.4.1.dev35}/LICENSE +0 -0
  7. {verifiers-0.4.1.dev33 → verifiers-0.4.1.dev35}/README.md +0 -0
  8. {verifiers-0.4.1.dev33 → verifiers-0.4.1.dev35}/pyproject.toml +0 -0
  9. {verifiers-0.4.1.dev33 → verifiers-0.4.1.dev35}/tests/integration/conftest.py +0 -0
  10. {verifiers-0.4.1.dev33 → verifiers-0.4.1.dev35}/tests/integration/fixtures/agent_user_harness_v1.py +0 -0
  11. {verifiers-0.4.1.dev33 → verifiers-0.4.1.dev35}/tests/integration/fixtures/agent_user_v1.py +0 -0
  12. {verifiers-0.4.1.dev33 → verifiers-0.4.1.dev35}/tests/integration/fixtures/counter_tool_v1.py +0 -0
  13. {verifiers-0.4.1.dev33 → verifiers-0.4.1.dev35}/tests/integration/fixtures/duet_v1.py +0 -0
  14. {verifiers-0.4.1.dev33 → verifiers-0.4.1.dev35}/tests/integration/fixtures/echo_acp_resume_v1.py +0 -0
  15. {verifiers-0.4.1.dev33 → verifiers-0.4.1.dev35}/tests/integration/fixtures/echo_agentic_v1.py +0 -0
  16. {verifiers-0.4.1.dev33 → verifiers-0.4.1.dev35}/tests/integration/fixtures/echo_tool_compose/docker-compose.yaml +0 -0
  17. {verifiers-0.4.1.dev33 → verifiers-0.4.1.dev35}/tests/integration/fixtures/echo_tool_v1.py +0 -0
  18. {verifiers-0.4.1.dev33 → verifiers-0.4.1.dev35}/tests/integration/fixtures/echo_user_sim_v1.py +0 -0
  19. {verifiers-0.4.1.dev33 → verifiers-0.4.1.dev35}/tests/integration/fixtures/echo_v1.py +0 -0
  20. {verifiers-0.4.1.dev33 → verifiers-0.4.1.dev35}/tests/integration/fixtures/network_policy_v1.py +0 -0
  21. {verifiers-0.4.1.dev33 → verifiers-0.4.1.dev35}/tests/integration/fixtures/pyproject.toml +0 -0
  22. {verifiers-0.4.1.dev33 → verifiers-0.4.1.dev35}/tests/integration/fixtures/skill_codeword_v1.py +0 -0
  23. {verifiers-0.4.1.dev33 → verifiers-0.4.1.dev35}/tests/integration/fixtures/skills/project-codeword/SKILL.md +0 -0
  24. {verifiers-0.4.1.dev33 → verifiers-0.4.1.dev35}/tests/integration/fixtures/tool_response_image_v1.py +0 -0
  25. {verifiers-0.4.1.dev33 → verifiers-0.4.1.dev35}/tests/integration/grid.py +0 -0
  26. {verifiers-0.4.1.dev33 → verifiers-0.4.1.dev35}/tests/integration/test_agent_user.py +0 -0
  27. {verifiers-0.4.1.dev33 → verifiers-0.4.1.dev35}/tests/integration/test_agentic_judge.py +0 -0
  28. {verifiers-0.4.1.dev33 → verifiers-0.4.1.dev35}/tests/integration/test_compose_scoring.py +0 -0
  29. {verifiers-0.4.1.dev33 → verifiers-0.4.1.dev35}/tests/integration/test_examples.py +0 -0
  30. {verifiers-0.4.1.dev33 → verifiers-0.4.1.dev35}/tests/integration/test_limits.py +0 -0
  31. {verifiers-0.4.1.dev33 → verifiers-0.4.1.dev35}/tests/integration/test_multi_agent.py +0 -0
  32. {verifiers-0.4.1.dev33 → verifiers-0.4.1.dev35}/tests/integration/test_multi_turn.py +0 -0
  33. {verifiers-0.4.1.dev33 → verifiers-0.4.1.dev35}/tests/integration/test_multi_turn_tool.py +0 -0
  34. {verifiers-0.4.1.dev33 → verifiers-0.4.1.dev35}/tests/integration/test_multimodal_tool.py +0 -0
  35. {verifiers-0.4.1.dev33 → verifiers-0.4.1.dev35}/tests/integration/test_network_policy.py +0 -0
  36. {verifiers-0.4.1.dev33 → verifiers-0.4.1.dev35}/tests/integration/test_resume_tool.py +0 -0
  37. {verifiers-0.4.1.dev33 → verifiers-0.4.1.dev35}/tests/integration/test_rubric_judge.py +0 -0
  38. {verifiers-0.4.1.dev33 → verifiers-0.4.1.dev35}/tests/integration/test_sampling.py +0 -0
  39. {verifiers-0.4.1.dev33 → verifiers-0.4.1.dev35}/tests/integration/test_shared_tool.py +0 -0
  40. {verifiers-0.4.1.dev33 → verifiers-0.4.1.dev35}/tests/integration/test_single_turn.py +0 -0
  41. {verifiers-0.4.1.dev33 → verifiers-0.4.1.dev35}/tests/integration/test_skills.py +0 -0
  42. {verifiers-0.4.1.dev33 → verifiers-0.4.1.dev35}/tests/integration/test_stateful_tool.py +0 -0
  43. {verifiers-0.4.1.dev33 → verifiers-0.4.1.dev35}/tests/integration/test_user_echo.py +0 -0
  44. {verifiers-0.4.1.dev33 → verifiers-0.4.1.dev35}/tests/integration/test_user_sim.py +0 -0
  45. {verifiers-0.4.1.dev33 → verifiers-0.4.1.dev35}/tests/unit/cli/test_replay.py +0 -0
  46. {verifiers-0.4.1.dev33 → verifiers-0.4.1.dev35}/tests/unit/conftest.py +0 -0
  47. {verifiers-0.4.1.dev33 → verifiers-0.4.1.dev35}/tests/unit/harnesses/test_core.py +0 -0
  48. {verifiers-0.4.1.dev33 → verifiers-0.4.1.dev35}/tests/unit/harnesses/test_rlm.py +0 -0
  49. {verifiers-0.4.1.dev33 → verifiers-0.4.1.dev35}/tests/unit/interception/test_tunnel.py +0 -0
  50. {verifiers-0.4.1.dev33 → verifiers-0.4.1.dev35}/tests/unit/judges/conftest.py +0 -0
  51. {verifiers-0.4.1.dev33 → verifiers-0.4.1.dev35}/tests/unit/judges/test_judge.py +0 -0
  52. {verifiers-0.4.1.dev33 → verifiers-0.4.1.dev35}/tests/unit/judges/test_reference.py +0 -0
  53. {verifiers-0.4.1.dev33 → verifiers-0.4.1.dev35}/tests/unit/judges/test_rubric.py +0 -0
  54. {verifiers-0.4.1.dev33 → verifiers-0.4.1.dev35}/tests/unit/runtimes/test_e2b.py +0 -0
  55. {verifiers-0.4.1.dev33 → verifiers-0.4.1.dev35}/tests/unit/serve/test_client.py +0 -0
  56. {verifiers-0.4.1.dev33 → verifiers-0.4.1.dev35}/tests/unit/serve/test_delta.py +0 -0
  57. {verifiers-0.4.1.dev33 → verifiers-0.4.1.dev35}/tests/unit/serve/test_pool.py +0 -0
  58. {verifiers-0.4.1.dev33 → verifiers-0.4.1.dev35}/tests/unit/test_agent.py +0 -0
  59. {verifiers-0.4.1.dev33 → verifiers-0.4.1.dev35}/tests/unit/test_dialects.py +0 -0
  60. {verifiers-0.4.1.dev33 → verifiers-0.4.1.dev35}/tests/unit/test_graph.py +0 -0
  61. {verifiers-0.4.1.dev33 → verifiers-0.4.1.dev35}/tests/unit/test_semantic.py +0 -0
  62. {verifiers-0.4.1.dev33 → verifiers-0.4.1.dev35}/tests/unit/test_task.py +0 -0
  63. {verifiers-0.4.1.dev33 → verifiers-0.4.1.dev35}/tests/unit/test_taskset.py +0 -0
  64. {verifiers-0.4.1.dev33 → verifiers-0.4.1.dev35}/tests/unit/test_trace.py +0 -0
  65. {verifiers-0.4.1.dev33 → verifiers-0.4.1.dev35}/tests/unit/utils/test_compile.py +0 -0
  66. {verifiers-0.4.1.dev33 → verifiers-0.4.1.dev35}/tests/unit/utils/test_loaders.py +0 -0
  67. {verifiers-0.4.1.dev33 → verifiers-0.4.1.dev35}/tests/unit/utils/test_platform.py +0 -0
  68. {verifiers-0.4.1.dev33 → verifiers-0.4.1.dev35}/tests/unit/utils/test_score.py +0 -0
  69. {verifiers-0.4.1.dev33 → verifiers-0.4.1.dev35}/verifiers/__init__.py +0 -0
  70. {verifiers-0.4.1.dev33 → verifiers-0.4.1.dev35}/verifiers/v1/__init__.py +0 -0
  71. {verifiers-0.4.1.dev33 → verifiers-0.4.1.dev35}/verifiers/v1/acp/__init__.py +0 -0
  72. {verifiers-0.4.1.dev33 → verifiers-0.4.1.dev35}/verifiers/v1/acp/runner.py +0 -0
  73. {verifiers-0.4.1.dev33 → verifiers-0.4.1.dev35}/verifiers/v1/agent.py +0 -0
  74. {verifiers-0.4.1.dev33 → verifiers-0.4.1.dev35}/verifiers/v1/cli/__init__.py +0 -0
  75. {verifiers-0.4.1.dev33 → verifiers-0.4.1.dev35}/verifiers/v1/cli/dashboard/__init__.py +0 -0
  76. {verifiers-0.4.1.dev33 → verifiers-0.4.1.dev35}/verifiers/v1/cli/dashboard/base.py +0 -0
  77. {verifiers-0.4.1.dev33 → verifiers-0.4.1.dev35}/verifiers/v1/cli/dashboard/eval.py +0 -0
  78. {verifiers-0.4.1.dev33 → verifiers-0.4.1.dev35}/verifiers/v1/cli/dashboard/replay.py +0 -0
  79. {verifiers-0.4.1.dev33 → verifiers-0.4.1.dev35}/verifiers/v1/cli/dashboard/validate.py +0 -0
  80. {verifiers-0.4.1.dev33 → verifiers-0.4.1.dev35}/verifiers/v1/cli/debug.py +0 -0
  81. {verifiers-0.4.1.dev33 → verifiers-0.4.1.dev35}/verifiers/v1/cli/eval/__init__.py +0 -0
  82. {verifiers-0.4.1.dev33 → verifiers-0.4.1.dev35}/verifiers/v1/cli/eval/hint.py +0 -0
  83. {verifiers-0.4.1.dev33 → verifiers-0.4.1.dev35}/verifiers/v1/cli/eval/main.py +0 -0
  84. {verifiers-0.4.1.dev33 → verifiers-0.4.1.dev35}/verifiers/v1/cli/eval/resume.py +0 -0
  85. {verifiers-0.4.1.dev33 → verifiers-0.4.1.dev35}/verifiers/v1/cli/eval/runner.py +0 -0
  86. {verifiers-0.4.1.dev33 → verifiers-0.4.1.dev35}/verifiers/v1/cli/gepa.py +0 -0
  87. {verifiers-0.4.1.dev33 → verifiers-0.4.1.dev35}/verifiers/v1/cli/output.py +0 -0
  88. {verifiers-0.4.1.dev33 → verifiers-0.4.1.dev35}/verifiers/v1/cli/replay.py +0 -0
  89. {verifiers-0.4.1.dev33 → verifiers-0.4.1.dev35}/verifiers/v1/cli/resolve.py +0 -0
  90. {verifiers-0.4.1.dev33 → verifiers-0.4.1.dev35}/verifiers/v1/cli/resume.py +0 -0
  91. {verifiers-0.4.1.dev33 → verifiers-0.4.1.dev35}/verifiers/v1/cli/validate.py +0 -0
  92. {verifiers-0.4.1.dev33 → verifiers-0.4.1.dev35}/verifiers/v1/clients/__init__.py +0 -0
  93. {verifiers-0.4.1.dev33 → verifiers-0.4.1.dev35}/verifiers/v1/clients/base.py +0 -0
  94. {verifiers-0.4.1.dev33 → verifiers-0.4.1.dev35}/verifiers/v1/clients/client.py +0 -0
  95. {verifiers-0.4.1.dev33 → verifiers-0.4.1.dev35}/verifiers/v1/clients/eval.py +0 -0
  96. {verifiers-0.4.1.dev33 → verifiers-0.4.1.dev35}/verifiers/v1/clients/train.py +0 -0
  97. {verifiers-0.4.1.dev33 → verifiers-0.4.1.dev35}/verifiers/v1/configs/__init__.py +0 -0
  98. {verifiers-0.4.1.dev33 → verifiers-0.4.1.dev35}/verifiers/v1/configs/agent.py +0 -0
  99. {verifiers-0.4.1.dev33 → verifiers-0.4.1.dev35}/verifiers/v1/configs/cli/__init__.py +0 -0
  100. {verifiers-0.4.1.dev33 → verifiers-0.4.1.dev35}/verifiers/v1/configs/cli/debug.py +0 -0
  101. {verifiers-0.4.1.dev33 → verifiers-0.4.1.dev35}/verifiers/v1/configs/cli/env.py +0 -0
  102. {verifiers-0.4.1.dev33 → verifiers-0.4.1.dev35}/verifiers/v1/configs/cli/eval.py +0 -0
  103. {verifiers-0.4.1.dev33 → verifiers-0.4.1.dev35}/verifiers/v1/configs/cli/replay.py +0 -0
  104. {verifiers-0.4.1.dev33 → verifiers-0.4.1.dev35}/verifiers/v1/configs/cli/validate.py +0 -0
  105. {verifiers-0.4.1.dev33 → verifiers-0.4.1.dev35}/verifiers/v1/configs/client.py +0 -0
  106. {verifiers-0.4.1.dev33 → verifiers-0.4.1.dev35}/verifiers/v1/configs/env.py +0 -0
  107. {verifiers-0.4.1.dev33 → verifiers-0.4.1.dev35}/verifiers/v1/configs/harness.py +0 -0
  108. {verifiers-0.4.1.dev33 → verifiers-0.4.1.dev35}/verifiers/v1/configs/judge.py +0 -0
  109. {verifiers-0.4.1.dev33 → verifiers-0.4.1.dev35}/verifiers/v1/configs/retries.py +0 -0
  110. {verifiers-0.4.1.dev33 → verifiers-0.4.1.dev35}/verifiers/v1/configs/runtime.py +0 -0
  111. {verifiers-0.4.1.dev33 → verifiers-0.4.1.dev35}/verifiers/v1/configs/scoring.py +0 -0
  112. {verifiers-0.4.1.dev33 → verifiers-0.4.1.dev35}/verifiers/v1/configs/select.py +0 -0
  113. {verifiers-0.4.1.dev33 → verifiers-0.4.1.dev35}/verifiers/v1/configs/serve.py +0 -0
  114. {verifiers-0.4.1.dev33 → verifiers-0.4.1.dev35}/verifiers/v1/configs/task.py +0 -0
  115. {verifiers-0.4.1.dev33 → verifiers-0.4.1.dev35}/verifiers/v1/configs/taskset.py +0 -0
  116. {verifiers-0.4.1.dev33 → verifiers-0.4.1.dev35}/verifiers/v1/dialects/__init__.py +0 -0
  117. {verifiers-0.4.1.dev33 → verifiers-0.4.1.dev35}/verifiers/v1/dialects/anthropic.py +0 -0
  118. {verifiers-0.4.1.dev33 → verifiers-0.4.1.dev35}/verifiers/v1/dialects/base.py +0 -0
  119. {verifiers-0.4.1.dev33 → verifiers-0.4.1.dev35}/verifiers/v1/dialects/chat.py +0 -0
  120. {verifiers-0.4.1.dev33 → verifiers-0.4.1.dev35}/verifiers/v1/dialects/responses.py +0 -0
  121. {verifiers-0.4.1.dev33 → verifiers-0.4.1.dev35}/verifiers/v1/env.py +0 -0
  122. {verifiers-0.4.1.dev33 → verifiers-0.4.1.dev35}/verifiers/v1/envs/__init__.py +0 -0
  123. {verifiers-0.4.1.dev33 → verifiers-0.4.1.dev35}/verifiers/v1/envs/agentic_judge/__init__.py +0 -0
  124. {verifiers-0.4.1.dev33 → verifiers-0.4.1.dev35}/verifiers/v1/envs/agentic_judge/env.py +0 -0
  125. {verifiers-0.4.1.dev33 → verifiers-0.4.1.dev35}/verifiers/v1/envs/best_of_n/__init__.py +0 -0
  126. {verifiers-0.4.1.dev33 → verifiers-0.4.1.dev35}/verifiers/v1/envs/best_of_n/env.py +0 -0
  127. {verifiers-0.4.1.dev33 → verifiers-0.4.1.dev35}/verifiers/v1/envs/single_agent/__init__.py +0 -0
  128. {verifiers-0.4.1.dev33 → verifiers-0.4.1.dev35}/verifiers/v1/envs/single_agent/env.py +0 -0
  129. {verifiers-0.4.1.dev33 → verifiers-0.4.1.dev35}/verifiers/v1/envs/user_sim/__init__.py +0 -0
  130. {verifiers-0.4.1.dev33 → verifiers-0.4.1.dev35}/verifiers/v1/envs/user_sim/env.py +0 -0
  131. {verifiers-0.4.1.dev33 → verifiers-0.4.1.dev35}/verifiers/v1/episode.py +0 -0
  132. {verifiers-0.4.1.dev33 → verifiers-0.4.1.dev35}/verifiers/v1/errors.py +0 -0
  133. {verifiers-0.4.1.dev33 → verifiers-0.4.1.dev35}/verifiers/v1/gepa/__init__.py +0 -0
  134. {verifiers-0.4.1.dev33 → verifiers-0.4.1.dev35}/verifiers/v1/gepa/adapter.py +0 -0
  135. {verifiers-0.4.1.dev33 → verifiers-0.4.1.dev35}/verifiers/v1/gepa/config.py +0 -0
  136. {verifiers-0.4.1.dev33 → verifiers-0.4.1.dev35}/verifiers/v1/gepa/dataset.py +0 -0
  137. {verifiers-0.4.1.dev33 → verifiers-0.4.1.dev35}/verifiers/v1/gepa/reflection.py +0 -0
  138. {verifiers-0.4.1.dev33 → verifiers-0.4.1.dev35}/verifiers/v1/gepa/runner.py +0 -0
  139. {verifiers-0.4.1.dev33 → verifiers-0.4.1.dev35}/verifiers/v1/grading.py +0 -0
  140. {verifiers-0.4.1.dev33 → verifiers-0.4.1.dev35}/verifiers/v1/graph.py +0 -0
  141. {verifiers-0.4.1.dev33 → verifiers-0.4.1.dev35}/verifiers/v1/harness.py +0 -0
  142. {verifiers-0.4.1.dev33 → verifiers-0.4.1.dev35}/verifiers/v1/harnesses/__init__.py +0 -0
  143. {verifiers-0.4.1.dev33 → verifiers-0.4.1.dev35}/verifiers/v1/harnesses/bash/__init__.py +0 -0
  144. {verifiers-0.4.1.dev33 → verifiers-0.4.1.dev35}/verifiers/v1/harnesses/bash/harness.py +0 -0
  145. {verifiers-0.4.1.dev33 → verifiers-0.4.1.dev35}/verifiers/v1/harnesses/browser_use/__init__.py +0 -0
  146. {verifiers-0.4.1.dev33 → verifiers-0.4.1.dev35}/verifiers/v1/harnesses/browser_use/harness.py +0 -0
  147. {verifiers-0.4.1.dev33 → verifiers-0.4.1.dev35}/verifiers/v1/harnesses/browser_use/program.py +0 -0
  148. {verifiers-0.4.1.dev33 → verifiers-0.4.1.dev35}/verifiers/v1/harnesses/claude_code/__init__.py +0 -0
  149. {verifiers-0.4.1.dev33 → verifiers-0.4.1.dev35}/verifiers/v1/harnesses/claude_code/harness.py +0 -0
  150. {verifiers-0.4.1.dev33 → verifiers-0.4.1.dev35}/verifiers/v1/harnesses/codex/__init__.py +0 -0
  151. {verifiers-0.4.1.dev33 → verifiers-0.4.1.dev35}/verifiers/v1/harnesses/codex/gate.mjs +0 -0
  152. {verifiers-0.4.1.dev33 → verifiers-0.4.1.dev35}/verifiers/v1/harnesses/codex/harness.py +0 -0
  153. {verifiers-0.4.1.dev33 → verifiers-0.4.1.dev35}/verifiers/v1/harnesses/deepseek/__init__.py +0 -0
  154. {verifiers-0.4.1.dev33 → verifiers-0.4.1.dev35}/verifiers/v1/harnesses/deepseek/gate.mjs +0 -0
  155. {verifiers-0.4.1.dev33 → verifiers-0.4.1.dev35}/verifiers/v1/harnesses/deepseek/harness.py +0 -0
  156. {verifiers-0.4.1.dev33 → verifiers-0.4.1.dev35}/verifiers/v1/harnesses/deepseek/usage.mjs +0 -0
  157. {verifiers-0.4.1.dev33 → verifiers-0.4.1.dev35}/verifiers/v1/harnesses/hermes_agent/__init__.py +0 -0
  158. {verifiers-0.4.1.dev33 → verifiers-0.4.1.dev35}/verifiers/v1/harnesses/hermes_agent/harness.py +0 -0
  159. {verifiers-0.4.1.dev33 → verifiers-0.4.1.dev35}/verifiers/v1/harnesses/hermes_agent/program.py +0 -0
  160. {verifiers-0.4.1.dev33 → verifiers-0.4.1.dev35}/verifiers/v1/harnesses/kimi_code/__init__.py +0 -0
  161. {verifiers-0.4.1.dev33 → verifiers-0.4.1.dev35}/verifiers/v1/harnesses/kimi_code/harness.py +0 -0
  162. {verifiers-0.4.1.dev33 → verifiers-0.4.1.dev35}/verifiers/v1/harnesses/mini_swe_agent/__init__.py +0 -0
  163. {verifiers-0.4.1.dev33 → verifiers-0.4.1.dev35}/verifiers/v1/harnesses/mini_swe_agent/harness.py +0 -0
  164. {verifiers-0.4.1.dev33 → verifiers-0.4.1.dev35}/verifiers/v1/harnesses/mini_swe_agent/program.py +0 -0
  165. {verifiers-0.4.1.dev33 → verifiers-0.4.1.dev35}/verifiers/v1/harnesses/node.py +0 -0
  166. {verifiers-0.4.1.dev33 → verifiers-0.4.1.dev35}/verifiers/v1/harnesses/null/__init__.py +0 -0
  167. {verifiers-0.4.1.dev33 → verifiers-0.4.1.dev35}/verifiers/v1/harnesses/null/harness.py +0 -0
  168. {verifiers-0.4.1.dev33 → verifiers-0.4.1.dev35}/verifiers/v1/harnesses/openclaw/__init__.py +0 -0
  169. {verifiers-0.4.1.dev33 → verifiers-0.4.1.dev35}/verifiers/v1/harnesses/openclaw/harness.py +0 -0
  170. {verifiers-0.4.1.dev33 → verifiers-0.4.1.dev35}/verifiers/v1/harnesses/opencode/__init__.py +0 -0
  171. {verifiers-0.4.1.dev33 → verifiers-0.4.1.dev35}/verifiers/v1/harnesses/opencode/harness.py +0 -0
  172. {verifiers-0.4.1.dev33 → verifiers-0.4.1.dev35}/verifiers/v1/harnesses/opencode/mcp-ready.js +0 -0
  173. {verifiers-0.4.1.dev33 → verifiers-0.4.1.dev35}/verifiers/v1/harnesses/pi/__init__.py +0 -0
  174. {verifiers-0.4.1.dev33 → verifiers-0.4.1.dev35}/verifiers/v1/harnesses/pi/gate.mjs +0 -0
  175. {verifiers-0.4.1.dev33 → verifiers-0.4.1.dev35}/verifiers/v1/harnesses/pi/harness.py +0 -0
  176. {verifiers-0.4.1.dev33 → verifiers-0.4.1.dev35}/verifiers/v1/harnesses/prime_agent/__init__.py +0 -0
  177. {verifiers-0.4.1.dev33 → verifiers-0.4.1.dev35}/verifiers/v1/harnesses/prime_agent/harness.py +0 -0
  178. {verifiers-0.4.1.dev33 → verifiers-0.4.1.dev35}/verifiers/v1/harnesses/rlm/__init__.py +0 -0
  179. {verifiers-0.4.1.dev33 → verifiers-0.4.1.dev35}/verifiers/v1/harnesses/rlm/harness.py +0 -0
  180. {verifiers-0.4.1.dev33 → verifiers-0.4.1.dev35}/verifiers/v1/harnesses/terminus_2/__init__.py +0 -0
  181. {verifiers-0.4.1.dev33 → verifiers-0.4.1.dev35}/verifiers/v1/harnesses/terminus_2/harness.py +0 -0
  182. {verifiers-0.4.1.dev33 → verifiers-0.4.1.dev35}/verifiers/v1/harnesses/terminus_2/program.py +0 -0
  183. {verifiers-0.4.1.dev33 → verifiers-0.4.1.dev35}/verifiers/v1/harnesses/utils/__init__.py +0 -0
  184. {verifiers-0.4.1.dev33 → verifiers-0.4.1.dev35}/verifiers/v1/harnesses/utils/compaction.py +0 -0
  185. {verifiers-0.4.1.dev33 → verifiers-0.4.1.dev35}/verifiers/v1/harnesses/utils/core.py +0 -0
  186. {verifiers-0.4.1.dev33 → verifiers-0.4.1.dev35}/verifiers/v1/harnesses/utils/install.py +0 -0
  187. {verifiers-0.4.1.dev33 → verifiers-0.4.1.dev35}/verifiers/v1/harnesses/utils/launch.py +0 -0
  188. {verifiers-0.4.1.dev33 → verifiers-0.4.1.dev35}/verifiers/v1/harnesses/utils/mcp.py +0 -0
  189. {verifiers-0.4.1.dev33 → verifiers-0.4.1.dev35}/verifiers/v1/harnesses/utils/replay.py +0 -0
  190. {verifiers-0.4.1.dev33 → verifiers-0.4.1.dev35}/verifiers/v1/interception/__init__.py +0 -0
  191. {verifiers-0.4.1.dev33 → verifiers-0.4.1.dev35}/verifiers/v1/interception/base.py +0 -0
  192. {verifiers-0.4.1.dev33 → verifiers-0.4.1.dev35}/verifiers/v1/interception/pool.py +0 -0
  193. {verifiers-0.4.1.dev33 → verifiers-0.4.1.dev35}/verifiers/v1/interception/server.py +0 -0
  194. {verifiers-0.4.1.dev33 → verifiers-0.4.1.dev35}/verifiers/v1/interception/tunnel/__init__.py +0 -0
  195. {verifiers-0.4.1.dev33 → verifiers-0.4.1.dev35}/verifiers/v1/interception/tunnel/base.py +0 -0
  196. {verifiers-0.4.1.dev33 → verifiers-0.4.1.dev35}/verifiers/v1/interception/tunnel/custom.py +0 -0
  197. {verifiers-0.4.1.dev33 → verifiers-0.4.1.dev35}/verifiers/v1/interception/tunnel/prime.py +0 -0
  198. {verifiers-0.4.1.dev33 → verifiers-0.4.1.dev35}/verifiers/v1/judge.py +0 -0
  199. {verifiers-0.4.1.dev33 → verifiers-0.4.1.dev35}/verifiers/v1/judges/__init__.py +0 -0
  200. {verifiers-0.4.1.dev33 → verifiers-0.4.1.dev35}/verifiers/v1/judges/decision.py +0 -0
  201. {verifiers-0.4.1.dev33 → verifiers-0.4.1.dev35}/verifiers/v1/judges/reference.py +0 -0
  202. {verifiers-0.4.1.dev33 → verifiers-0.4.1.dev35}/verifiers/v1/judges/reference.txt +0 -0
  203. {verifiers-0.4.1.dev33 → verifiers-0.4.1.dev35}/verifiers/v1/judges/rubric.py +0 -0
  204. {verifiers-0.4.1.dev33 → verifiers-0.4.1.dev35}/verifiers/v1/judges/rubric.txt +0 -0
  205. {verifiers-0.4.1.dev33 → verifiers-0.4.1.dev35}/verifiers/v1/mcp/__init__.py +0 -0
  206. {verifiers-0.4.1.dev33 → verifiers-0.4.1.dev35}/verifiers/v1/mcp/launch.py +0 -0
  207. {verifiers-0.4.1.dev33 → verifiers-0.4.1.dev35}/verifiers/v1/mcp/server.py +0 -0
  208. {verifiers-0.4.1.dev33 → verifiers-0.4.1.dev35}/verifiers/v1/mcp/toolset.py +0 -0
  209. {verifiers-0.4.1.dev33 → verifiers-0.4.1.dev35}/verifiers/v1/rollout.py +0 -0
  210. {verifiers-0.4.1.dev33 → verifiers-0.4.1.dev35}/verifiers/v1/runtimes/__init__.py +0 -0
  211. {verifiers-0.4.1.dev33 → verifiers-0.4.1.dev35}/verifiers/v1/runtimes/apptainer.py +0 -0
  212. {verifiers-0.4.1.dev33 → verifiers-0.4.1.dev35}/verifiers/v1/runtimes/base.py +0 -0
  213. {verifiers-0.4.1.dev33 → verifiers-0.4.1.dev35}/verifiers/v1/runtimes/compose.py +0 -0
  214. {verifiers-0.4.1.dev33 → verifiers-0.4.1.dev35}/verifiers/v1/runtimes/container.py +0 -0
  215. {verifiers-0.4.1.dev33 → verifiers-0.4.1.dev35}/verifiers/v1/runtimes/deployment.py +0 -0
  216. {verifiers-0.4.1.dev33 → verifiers-0.4.1.dev35}/verifiers/v1/runtimes/docker/__init__.py +0 -0
  217. {verifiers-0.4.1.dev33 → verifiers-0.4.1.dev35}/verifiers/v1/runtimes/docker/egress.py +0 -0
  218. {verifiers-0.4.1.dev33 → verifiers-0.4.1.dev35}/verifiers/v1/runtimes/e2b.py +0 -0
  219. {verifiers-0.4.1.dev33 → verifiers-0.4.1.dev35}/verifiers/v1/runtimes/limiters.py +0 -0
  220. {verifiers-0.4.1.dev33 → verifiers-0.4.1.dev35}/verifiers/v1/runtimes/modal.py +0 -0
  221. {verifiers-0.4.1.dev33 → verifiers-0.4.1.dev35}/verifiers/v1/runtimes/prime.py +0 -0
  222. {verifiers-0.4.1.dev33 → verifiers-0.4.1.dev35}/verifiers/v1/runtimes/runtime.py +0 -0
  223. {verifiers-0.4.1.dev33 → verifiers-0.4.1.dev35}/verifiers/v1/runtimes/strategies.py +0 -0
  224. {verifiers-0.4.1.dev33 → verifiers-0.4.1.dev35}/verifiers/v1/runtimes/subprocess.py +0 -0
  225. {verifiers-0.4.1.dev33 → verifiers-0.4.1.dev35}/verifiers/v1/semantic.py +0 -0
  226. {verifiers-0.4.1.dev33 → verifiers-0.4.1.dev35}/verifiers/v1/serve/__init__.py +0 -0
  227. {verifiers-0.4.1.dev33 → verifiers-0.4.1.dev35}/verifiers/v1/serve/client.py +0 -0
  228. {verifiers-0.4.1.dev33 → verifiers-0.4.1.dev35}/verifiers/v1/serve/delta.py +0 -0
  229. {verifiers-0.4.1.dev33 → verifiers-0.4.1.dev35}/verifiers/v1/serve/encoding.py +0 -0
  230. {verifiers-0.4.1.dev33 → verifiers-0.4.1.dev35}/verifiers/v1/serve/pool.py +0 -0
  231. {verifiers-0.4.1.dev33 → verifiers-0.4.1.dev35}/verifiers/v1/serve/server.py +0 -0
  232. {verifiers-0.4.1.dev33 → verifiers-0.4.1.dev35}/verifiers/v1/serve/types.py +0 -0
  233. {verifiers-0.4.1.dev33 → verifiers-0.4.1.dev35}/verifiers/v1/session.py +0 -0
  234. {verifiers-0.4.1.dev33 → verifiers-0.4.1.dev35}/verifiers/v1/state.py +0 -0
  235. {verifiers-0.4.1.dev33 → verifiers-0.4.1.dev35}/verifiers/v1/task.py +0 -0
  236. {verifiers-0.4.1.dev33 → verifiers-0.4.1.dev35}/verifiers/v1/taskset.py +0 -0
  237. {verifiers-0.4.1.dev33 → verifiers-0.4.1.dev35}/verifiers/v1/tasksets/__init__.py +0 -0
  238. {verifiers-0.4.1.dev33 → verifiers-0.4.1.dev35}/verifiers/v1/tasksets/harbor/__init__.py +0 -0
  239. {verifiers-0.4.1.dev33 → verifiers-0.4.1.dev35}/verifiers/v1/tasksets/harbor/toolset.py +0 -0
  240. {verifiers-0.4.1.dev33 → verifiers-0.4.1.dev35}/verifiers/v1/tasksets/nemo_gym/__init__.py +0 -0
  241. {verifiers-0.4.1.dev33 → verifiers-0.4.1.dev35}/verifiers/v1/tasksets/nemo_gym/response.py +0 -0
  242. {verifiers-0.4.1.dev33 → verifiers-0.4.1.dev35}/verifiers/v1/tasksets/nemo_gym/server.py +0 -0
  243. {verifiers-0.4.1.dev33 → verifiers-0.4.1.dev35}/verifiers/v1/tasksets/nemo_gym/taskset.py +0 -0
  244. {verifiers-0.4.1.dev33 → verifiers-0.4.1.dev35}/verifiers/v1/tasksets/nemo_gym/toolset.py +0 -0
  245. {verifiers-0.4.1.dev33 → verifiers-0.4.1.dev35}/verifiers/v1/tasksets/openenv/__init__.py +0 -0
  246. {verifiers-0.4.1.dev33 → verifiers-0.4.1.dev35}/verifiers/v1/tasksets/openenv/taskset.py +0 -0
  247. {verifiers-0.4.1.dev33 → verifiers-0.4.1.dev35}/verifiers/v1/tasksets/textarena/__init__.py +0 -0
  248. {verifiers-0.4.1.dev33 → verifiers-0.4.1.dev35}/verifiers/v1/tasksets/textarena/taskset.py +0 -0
  249. {verifiers-0.4.1.dev33 → verifiers-0.4.1.dev35}/verifiers/v1/trace.py +0 -0
  250. {verifiers-0.4.1.dev33 → verifiers-0.4.1.dev35}/verifiers/v1/types.py +0 -0
  251. {verifiers-0.4.1.dev33 → verifiers-0.4.1.dev35}/verifiers/v1/utils/__init__.py +0 -0
  252. {verifiers-0.4.1.dev33 → verifiers-0.4.1.dev35}/verifiers/v1/utils/aio.py +0 -0
  253. {verifiers-0.4.1.dev33 → verifiers-0.4.1.dev35}/verifiers/v1/utils/compile.py +0 -0
  254. {verifiers-0.4.1.dev33 → verifiers-0.4.1.dev35}/verifiers/v1/utils/decorators.py +0 -0
  255. {verifiers-0.4.1.dev33 → verifiers-0.4.1.dev35}/verifiers/v1/utils/env.py +0 -0
  256. {verifiers-0.4.1.dev33 → verifiers-0.4.1.dev35}/verifiers/v1/utils/eval.py +0 -0
  257. {verifiers-0.4.1.dev33 → verifiers-0.4.1.dev35}/verifiers/v1/utils/format.py +0 -0
  258. {verifiers-0.4.1.dev33 → verifiers-0.4.1.dev35}/verifiers/v1/utils/generic.py +0 -0
  259. {verifiers-0.4.1.dev33 → verifiers-0.4.1.dev35}/verifiers/v1/utils/git.py +0 -0
  260. {verifiers-0.4.1.dev33 → verifiers-0.4.1.dev35}/verifiers/v1/utils/image.py +0 -0
  261. {verifiers-0.4.1.dev33 → verifiers-0.4.1.dev35}/verifiers/v1/utils/interrupt.py +0 -0
  262. {verifiers-0.4.1.dev33 → verifiers-0.4.1.dev35}/verifiers/v1/utils/loaders.py +0 -0
  263. {verifiers-0.4.1.dev33 → verifiers-0.4.1.dev35}/verifiers/v1/utils/logging.py +0 -0
  264. {verifiers-0.4.1.dev33 → verifiers-0.4.1.dev35}/verifiers/v1/utils/memory.py +0 -0
  265. {verifiers-0.4.1.dev33 → verifiers-0.4.1.dev35}/verifiers/v1/utils/paths.py +0 -0
  266. {verifiers-0.4.1.dev33 → verifiers-0.4.1.dev35}/verifiers/v1/utils/platform.py +0 -0
  267. {verifiers-0.4.1.dev33 → verifiers-0.4.1.dev35}/verifiers/v1/utils/prime.py +0 -0
  268. {verifiers-0.4.1.dev33 → verifiers-0.4.1.dev35}/verifiers/v1/utils/retries.py +0 -0
  269. {verifiers-0.4.1.dev33 → verifiers-0.4.1.dev35}/verifiers/v1/utils/scope.py +0 -0
  270. {verifiers-0.4.1.dev33 → verifiers-0.4.1.dev35}/verifiers/v1/utils/score.py +0 -0
  271. {verifiers-0.4.1.dev33 → verifiers-0.4.1.dev35}/verifiers/v1/utils/version.py +0 -0
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.5
2
2
  Name: verifiers
3
- Version: 0.4.1.dev33
3
+ Version: 0.4.1.dev35
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
@@ -830,12 +830,10 @@ def parse_verifier_extras(
830
830
 
831
831
  artifacts: list[HarborArtifact] = []
832
832
  for entry in normalize_artifact_entries(parsed.artifacts):
833
- # `destination` positions a file in Harbor's host trial directory. Verifiers has
834
- # no such directory (the trace is the record) and Harbor never lets destination
835
- # affect verifier-side placement, so it cannot change any grading outcome.
836
833
  artifacts.append(
837
834
  HarborArtifact(
838
835
  source=entry.source,
836
+ destination=entry.destination,
839
837
  service=effective_artifact_service(entry),
840
838
  exclude=list(entry.exclude or []),
841
839
  required=False,
@@ -3,14 +3,17 @@
3
3
  from __future__ import annotations
4
4
 
5
5
  import io
6
+ import json
6
7
  import logging
7
8
  import shlex
9
+ import shutil
8
10
  import tarfile
11
+ import tempfile
9
12
  import uuid
10
- from pathlib import PurePosixPath
13
+ from pathlib import Path, PurePosixPath
11
14
  from typing import TYPE_CHECKING
12
15
 
13
- from pydantic import BaseModel, Field
16
+ from pydantic import BaseModel, Field, field_validator
14
17
 
15
18
  if TYPE_CHECKING:
16
19
  from verifiers.v1.runtimes import Runtime
@@ -29,10 +32,31 @@ class Artifact(BaseModel):
29
32
  """One path to restore at the same location in another runtime."""
30
33
 
31
34
  source: str
35
+ destination: str | None = None
36
+ """Saved path relative to the trace's artifact directory; grading uses `source`."""
32
37
  exclude: list[str] = Field(default_factory=list)
33
38
  """`tar --exclude` patterns, applied when `source` is a directory."""
34
39
  required: bool = True
35
40
 
41
+ @field_validator("destination")
42
+ @classmethod
43
+ def validate_destination(cls, value: str | None) -> str | None:
44
+ if not value:
45
+ return None
46
+ path = PurePosixPath(value)
47
+ if (
48
+ path.is_absolute()
49
+ or not path.parts
50
+ or ".." in path.parts
51
+ or "\\" in value
52
+ or path.parts[0] == "manifest.json"
53
+ ):
54
+ raise ValueError(
55
+ "artifact destination must be a relative path without '..' or "
56
+ "backslashes, outside the reserved manifest.json path"
57
+ )
58
+ return str(path)
59
+
36
60
 
37
61
  async def collect(
38
62
  runtime: Runtime,
@@ -136,6 +160,100 @@ async def collect(
136
160
  return collected
137
161
 
138
162
 
163
+ def save_artifacts(
164
+ directory: Path,
165
+ collected: dict[str, bytes | None],
166
+ artifacts: list[Artifact],
167
+ *,
168
+ workdir: str = "/",
169
+ ) -> None:
170
+ """Save collected files at their declared destinations, with a manifest.
171
+
172
+ Unpack each validated archive in isolation before moving its files into the
173
+ saved tree. Failed or conflicting entries are recorded without losing the
174
+ completed trace. Source-mirrored directories may merge: collection splits
175
+ nested declarations out of the implicit convention sweep.
176
+ """
177
+ declared = {str(PurePosixPath(workdir) / a.source): a for a in artifacts}
178
+ manifest: list[dict] = []
179
+ claims: list[tuple[PurePosixPath, bool]] = []
180
+ directory.parent.mkdir(parents=True, exist_ok=True)
181
+ with tempfile.TemporaryDirectory(dir=directory.parent) as temporary:
182
+ saved = Path(temporary) / "artifacts"
183
+ saved.mkdir()
184
+ (saved / "manifest.json").touch()
185
+ for source, archive in collected.items():
186
+ artifact = declared.get(source, Artifact(source=source))
187
+ destination = artifact.destination or artifact.source.lstrip("/")
188
+ entry = {
189
+ "source": source,
190
+ "service": getattr(artifact, "service", "main"),
191
+ "destination": destination,
192
+ "status": "empty",
193
+ }
194
+ manifest.append(entry)
195
+ try:
196
+ _validate_restore(source, archive)
197
+ Artifact.validate_destination(artifact.destination)
198
+ target = PurePosixPath(destination)
199
+ entry["destination"] = str(target)
200
+ if archive is None:
201
+ continue
202
+ with tarfile.open(fileobj=io.BytesIO(archive), mode="r:") as tar:
203
+ members = tar.getmembers()
204
+ if not members:
205
+ continue
206
+ root = PurePosixPath(source).relative_to("/")
207
+ paths = [
208
+ saved / target / PurePosixPath(member.name).relative_to(root)
209
+ for member in members
210
+ ]
211
+ # Explicit renames claim a whole subtree. Source-mirrored
212
+ # entries may share directories, but never overwrite files.
213
+ if any(
214
+ (artifact.destination or renamed)
215
+ and (
216
+ target.is_relative_to(prior) or prior.is_relative_to(target)
217
+ )
218
+ for prior, renamed in claims
219
+ ) or any(
220
+ path.is_symlink()
221
+ or (path.exists() and not (member.isdir() and path.is_dir()))
222
+ or any(
223
+ parent.is_symlink()
224
+ or (parent.exists() and not parent.is_dir())
225
+ for parent in path.parents
226
+ if parent.is_relative_to(saved)
227
+ )
228
+ for member, path in zip(members, paths, strict=True)
229
+ ):
230
+ entry["status"] = "skipped"
231
+ entry["error"] = (
232
+ "destination overlaps a previously saved artifact"
233
+ )
234
+ logger.warning("artifact %r: %s", source, entry["error"])
235
+ continue
236
+ with tempfile.TemporaryDirectory(dir=temporary) as unpacked:
237
+ tar.extractall(unpacked, filter="data")
238
+ for member, path in zip(members, paths, strict=True):
239
+ if member.isdir():
240
+ path.mkdir(parents=True, exist_ok=True)
241
+ else:
242
+ path.parent.mkdir(parents=True, exist_ok=True)
243
+ (Path(unpacked) / member.name).replace(path)
244
+ claims.append((target, artifact.destination is not None))
245
+ entry["status"] = "ok"
246
+ except (OSError, ValueError, RuntimeError, tarfile.TarError) as exc:
247
+ entry.update(status="failed", error=str(exc))
248
+ logger.warning("failed to save artifact %r: %s", source, exc)
249
+ (saved / "manifest.json").write_text(json.dumps(manifest, indent=2) + "\n")
250
+ if directory.is_symlink():
251
+ raise ValueError(f"artifact directory must not be a symlink: {directory}")
252
+ if directory.exists():
253
+ shutil.rmtree(directory)
254
+ saved.replace(directory)
255
+
256
+
139
257
  async def restore(runtime: Runtime, collected: dict[str, bytes | None]) -> None:
140
258
  """Extract `collected` in `runtime` at the original absolute paths.
141
259
 
@@ -14,6 +14,7 @@ from verifiers.v1.state import StateT
14
14
  from verifiers.v1.task import DataT
15
15
  from verifiers.v1.trace import AgentConfigT, Trace
16
16
  from verifiers.v1.utils.aio import run_shielded
17
+ from verifiers.v1.utils.artifacts import save_artifacts
17
18
 
18
19
  TRACES_FILE = "traces.jsonl"
19
20
  type_adapter = cache(TypeAdapter)
@@ -25,6 +26,18 @@ def write_episode(
25
26
  """Serialize and append one rollout episode in the worker thread."""
26
27
  # Preserve fields declared by typed Trace subclasses nested in the episode.
27
28
  data = type_adapter(type(episode)).dump_json(episode, exclude_none=True)
29
+ for trace in episode.traces:
30
+ if trace.state.artifacts:
31
+ if trace.id == ".." or Path(trace.id).parts != (trace.id,):
32
+ raise ValueError(
33
+ f"trace ID must be a single path component: {trace.id!r}"
34
+ )
35
+ save_artifacts(
36
+ results_dir / "artifacts" / trace.id,
37
+ trace.state.artifacts,
38
+ trace.task.data.artifacts,
39
+ workdir=getattr(trace.agent.runtime, "workdir", None) or "/",
40
+ )
28
41
  with (results_dir / TRACES_FILE).open("ab") as f:
29
42
  f.write(data + b"\n")
30
43
 
File without changes