verifiers 0.3.2.dev39__tar.gz → 0.3.2.dev40__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 (211) hide show
  1. {verifiers-0.3.2.dev39 → verifiers-0.3.2.dev40}/PKG-INFO +1 -1
  2. {verifiers-0.3.2.dev39 → verifiers-0.3.2.dev40}/tests/v1/test_e2e.py +22 -3
  3. {verifiers-0.3.2.dev39 → verifiers-0.3.2.dev40}/tests/v1/test_judges.py +62 -6
  4. {verifiers-0.3.2.dev39 → verifiers-0.3.2.dev40}/verifiers/v1/cli/replay.py +1 -1
  5. {verifiers-0.3.2.dev39 → verifiers-0.3.2.dev40}/verifiers/v1/judge.py +10 -2
  6. {verifiers-0.3.2.dev39 → verifiers-0.3.2.dev40}/verifiers/v1/judges/rubric.py +1 -1
  7. {verifiers-0.3.2.dev39 → verifiers-0.3.2.dev40}/verifiers/v1/trace.py +21 -2
  8. {verifiers-0.3.2.dev39 → verifiers-0.3.2.dev40}/.gitignore +0 -0
  9. {verifiers-0.3.2.dev39 → verifiers-0.3.2.dev40}/LICENSE +0 -0
  10. {verifiers-0.3.2.dev39 → verifiers-0.3.2.dev40}/README.md +0 -0
  11. {verifiers-0.3.2.dev39 → verifiers-0.3.2.dev40}/pyproject.toml +0 -0
  12. {verifiers-0.3.2.dev39 → verifiers-0.3.2.dev40}/tests/v1/conftest.py +0 -0
  13. {verifiers-0.3.2.dev39 → verifiers-0.3.2.dev40}/tests/v1/fixtures/counter_tool_v1.py +0 -0
  14. {verifiers-0.3.2.dev39 → verifiers-0.3.2.dev40}/tests/v1/fixtures/duet_v1.py +0 -0
  15. {verifiers-0.3.2.dev39 → verifiers-0.3.2.dev40}/tests/v1/fixtures/echo_acp_resume_v1.py +0 -0
  16. {verifiers-0.3.2.dev39 → verifiers-0.3.2.dev40}/tests/v1/fixtures/echo_agentic_v1.py +0 -0
  17. {verifiers-0.3.2.dev39 → verifiers-0.3.2.dev40}/tests/v1/fixtures/echo_tool_v1.py +0 -0
  18. {verifiers-0.3.2.dev39 → verifiers-0.3.2.dev40}/tests/v1/fixtures/echo_user_sim_v1.py +0 -0
  19. {verifiers-0.3.2.dev39 → verifiers-0.3.2.dev40}/tests/v1/fixtures/echo_v1.py +0 -0
  20. {verifiers-0.3.2.dev39 → verifiers-0.3.2.dev40}/tests/v1/fixtures/pyproject.toml +0 -0
  21. {verifiers-0.3.2.dev39 → verifiers-0.3.2.dev40}/tests/v1/fixtures/tool_response_image_v1.py +0 -0
  22. {verifiers-0.3.2.dev39 → verifiers-0.3.2.dev40}/tests/v1/test_color_codeword_tasks.py +0 -0
  23. {verifiers-0.3.2.dev39 → verifiers-0.3.2.dev40}/tests/v1/test_configs.py +0 -0
  24. {verifiers-0.3.2.dev39 → verifiers-0.3.2.dev40}/tests/v1/test_envs.py +0 -0
  25. {verifiers-0.3.2.dev39 → verifiers-0.3.2.dev40}/tests/v1/test_graph.py +0 -0
  26. {verifiers-0.3.2.dev39 → verifiers-0.3.2.dev40}/tests/v1/test_scoring.py +0 -0
  27. {verifiers-0.3.2.dev39 → verifiers-0.3.2.dev40}/tests/v1/test_taskset.py +0 -0
  28. {verifiers-0.3.2.dev39 → verifiers-0.3.2.dev40}/tests/v1/test_trace.py +0 -0
  29. {verifiers-0.3.2.dev39 → verifiers-0.3.2.dev40}/verifiers/__init__.py +0 -0
  30. {verifiers-0.3.2.dev39 → verifiers-0.3.2.dev40}/verifiers/v1/__init__.py +0 -0
  31. {verifiers-0.3.2.dev39 → verifiers-0.3.2.dev40}/verifiers/v1/acp/__init__.py +0 -0
  32. {verifiers-0.3.2.dev39 → verifiers-0.3.2.dev40}/verifiers/v1/acp/runner.py +0 -0
  33. {verifiers-0.3.2.dev39 → verifiers-0.3.2.dev40}/verifiers/v1/agent.py +0 -0
  34. {verifiers-0.3.2.dev39 → verifiers-0.3.2.dev40}/verifiers/v1/cli/__init__.py +0 -0
  35. {verifiers-0.3.2.dev39 → verifiers-0.3.2.dev40}/verifiers/v1/cli/dashboard/__init__.py +0 -0
  36. {verifiers-0.3.2.dev39 → verifiers-0.3.2.dev40}/verifiers/v1/cli/dashboard/base.py +0 -0
  37. {verifiers-0.3.2.dev39 → verifiers-0.3.2.dev40}/verifiers/v1/cli/dashboard/eval.py +0 -0
  38. {verifiers-0.3.2.dev39 → verifiers-0.3.2.dev40}/verifiers/v1/cli/dashboard/replay.py +0 -0
  39. {verifiers-0.3.2.dev39 → verifiers-0.3.2.dev40}/verifiers/v1/cli/dashboard/validate.py +0 -0
  40. {verifiers-0.3.2.dev39 → verifiers-0.3.2.dev40}/verifiers/v1/cli/debug.py +0 -0
  41. {verifiers-0.3.2.dev39 → verifiers-0.3.2.dev40}/verifiers/v1/cli/eval/__init__.py +0 -0
  42. {verifiers-0.3.2.dev39 → verifiers-0.3.2.dev40}/verifiers/v1/cli/eval/main.py +0 -0
  43. {verifiers-0.3.2.dev39 → verifiers-0.3.2.dev40}/verifiers/v1/cli/eval/resume.py +0 -0
  44. {verifiers-0.3.2.dev39 → verifiers-0.3.2.dev40}/verifiers/v1/cli/eval/runner.py +0 -0
  45. {verifiers-0.3.2.dev39 → verifiers-0.3.2.dev40}/verifiers/v1/cli/gepa.py +0 -0
  46. {verifiers-0.3.2.dev39 → verifiers-0.3.2.dev40}/verifiers/v1/cli/init.py +0 -0
  47. {verifiers-0.3.2.dev39 → verifiers-0.3.2.dev40}/verifiers/v1/cli/output.py +0 -0
  48. {verifiers-0.3.2.dev39 → verifiers-0.3.2.dev40}/verifiers/v1/cli/resolve.py +0 -0
  49. {verifiers-0.3.2.dev39 → verifiers-0.3.2.dev40}/verifiers/v1/cli/resume.py +0 -0
  50. {verifiers-0.3.2.dev39 → verifiers-0.3.2.dev40}/verifiers/v1/cli/validate.py +0 -0
  51. {verifiers-0.3.2.dev39 → verifiers-0.3.2.dev40}/verifiers/v1/clients/__init__.py +0 -0
  52. {verifiers-0.3.2.dev39 → verifiers-0.3.2.dev40}/verifiers/v1/clients/base.py +0 -0
  53. {verifiers-0.3.2.dev39 → verifiers-0.3.2.dev40}/verifiers/v1/clients/client.py +0 -0
  54. {verifiers-0.3.2.dev39 → verifiers-0.3.2.dev40}/verifiers/v1/clients/eval.py +0 -0
  55. {verifiers-0.3.2.dev39 → verifiers-0.3.2.dev40}/verifiers/v1/clients/train.py +0 -0
  56. {verifiers-0.3.2.dev39 → verifiers-0.3.2.dev40}/verifiers/v1/configs/__init__.py +0 -0
  57. {verifiers-0.3.2.dev39 → verifiers-0.3.2.dev40}/verifiers/v1/configs/agent.py +0 -0
  58. {verifiers-0.3.2.dev39 → verifiers-0.3.2.dev40}/verifiers/v1/configs/cli/__init__.py +0 -0
  59. {verifiers-0.3.2.dev39 → verifiers-0.3.2.dev40}/verifiers/v1/configs/cli/debug.py +0 -0
  60. {verifiers-0.3.2.dev39 → verifiers-0.3.2.dev40}/verifiers/v1/configs/cli/env.py +0 -0
  61. {verifiers-0.3.2.dev39 → verifiers-0.3.2.dev40}/verifiers/v1/configs/cli/eval.py +0 -0
  62. {verifiers-0.3.2.dev39 → verifiers-0.3.2.dev40}/verifiers/v1/configs/cli/init.py +0 -0
  63. {verifiers-0.3.2.dev39 → verifiers-0.3.2.dev40}/verifiers/v1/configs/cli/replay.py +0 -0
  64. {verifiers-0.3.2.dev39 → verifiers-0.3.2.dev40}/verifiers/v1/configs/cli/validate.py +0 -0
  65. {verifiers-0.3.2.dev39 → verifiers-0.3.2.dev40}/verifiers/v1/configs/client.py +0 -0
  66. {verifiers-0.3.2.dev39 → verifiers-0.3.2.dev40}/verifiers/v1/configs/env.py +0 -0
  67. {verifiers-0.3.2.dev39 → verifiers-0.3.2.dev40}/verifiers/v1/configs/harness.py +0 -0
  68. {verifiers-0.3.2.dev39 → verifiers-0.3.2.dev40}/verifiers/v1/configs/judge.py +0 -0
  69. {verifiers-0.3.2.dev39 → verifiers-0.3.2.dev40}/verifiers/v1/configs/retries.py +0 -0
  70. {verifiers-0.3.2.dev39 → verifiers-0.3.2.dev40}/verifiers/v1/configs/runtime.py +0 -0
  71. {verifiers-0.3.2.dev39 → verifiers-0.3.2.dev40}/verifiers/v1/configs/serve.py +0 -0
  72. {verifiers-0.3.2.dev39 → verifiers-0.3.2.dev40}/verifiers/v1/configs/task.py +0 -0
  73. {verifiers-0.3.2.dev39 → verifiers-0.3.2.dev40}/verifiers/v1/configs/taskset.py +0 -0
  74. {verifiers-0.3.2.dev39 → verifiers-0.3.2.dev40}/verifiers/v1/dialects/__init__.py +0 -0
  75. {verifiers-0.3.2.dev39 → verifiers-0.3.2.dev40}/verifiers/v1/dialects/anthropic.py +0 -0
  76. {verifiers-0.3.2.dev39 → verifiers-0.3.2.dev40}/verifiers/v1/dialects/base.py +0 -0
  77. {verifiers-0.3.2.dev39 → verifiers-0.3.2.dev40}/verifiers/v1/dialects/chat.py +0 -0
  78. {verifiers-0.3.2.dev39 → verifiers-0.3.2.dev40}/verifiers/v1/dialects/responses.py +0 -0
  79. {verifiers-0.3.2.dev39 → verifiers-0.3.2.dev40}/verifiers/v1/env.py +0 -0
  80. {verifiers-0.3.2.dev39 → verifiers-0.3.2.dev40}/verifiers/v1/envs/__init__.py +0 -0
  81. {verifiers-0.3.2.dev39 → verifiers-0.3.2.dev40}/verifiers/v1/envs/agentic_judge/__init__.py +0 -0
  82. {verifiers-0.3.2.dev39 → verifiers-0.3.2.dev40}/verifiers/v1/envs/agentic_judge/env.py +0 -0
  83. {verifiers-0.3.2.dev39 → verifiers-0.3.2.dev40}/verifiers/v1/envs/best_of_n/__init__.py +0 -0
  84. {verifiers-0.3.2.dev39 → verifiers-0.3.2.dev40}/verifiers/v1/envs/best_of_n/env.py +0 -0
  85. {verifiers-0.3.2.dev39 → verifiers-0.3.2.dev40}/verifiers/v1/envs/shared_agentic_judge/__init__.py +0 -0
  86. {verifiers-0.3.2.dev39 → verifiers-0.3.2.dev40}/verifiers/v1/envs/single_agent/__init__.py +0 -0
  87. {verifiers-0.3.2.dev39 → verifiers-0.3.2.dev40}/verifiers/v1/envs/single_agent/env.py +0 -0
  88. {verifiers-0.3.2.dev39 → verifiers-0.3.2.dev40}/verifiers/v1/envs/user_sim/__init__.py +0 -0
  89. {verifiers-0.3.2.dev39 → verifiers-0.3.2.dev40}/verifiers/v1/envs/user_sim/env.py +0 -0
  90. {verifiers-0.3.2.dev39 → verifiers-0.3.2.dev40}/verifiers/v1/episode.py +0 -0
  91. {verifiers-0.3.2.dev39 → verifiers-0.3.2.dev40}/verifiers/v1/errors.py +0 -0
  92. {verifiers-0.3.2.dev39 → verifiers-0.3.2.dev40}/verifiers/v1/gepa/__init__.py +0 -0
  93. {verifiers-0.3.2.dev39 → verifiers-0.3.2.dev40}/verifiers/v1/gepa/adapter.py +0 -0
  94. {verifiers-0.3.2.dev39 → verifiers-0.3.2.dev40}/verifiers/v1/gepa/config.py +0 -0
  95. {verifiers-0.3.2.dev39 → verifiers-0.3.2.dev40}/verifiers/v1/gepa/dataset.py +0 -0
  96. {verifiers-0.3.2.dev39 → verifiers-0.3.2.dev40}/verifiers/v1/gepa/reflection.py +0 -0
  97. {verifiers-0.3.2.dev39 → verifiers-0.3.2.dev40}/verifiers/v1/gepa/runner.py +0 -0
  98. {verifiers-0.3.2.dev39 → verifiers-0.3.2.dev40}/verifiers/v1/graph.py +0 -0
  99. {verifiers-0.3.2.dev39 → verifiers-0.3.2.dev40}/verifiers/v1/harness.py +0 -0
  100. {verifiers-0.3.2.dev39 → verifiers-0.3.2.dev40}/verifiers/v1/harnesses/__init__.py +0 -0
  101. {verifiers-0.3.2.dev39 → verifiers-0.3.2.dev40}/verifiers/v1/harnesses/bash/__init__.py +0 -0
  102. {verifiers-0.3.2.dev39 → verifiers-0.3.2.dev40}/verifiers/v1/harnesses/bash/harness.py +0 -0
  103. {verifiers-0.3.2.dev39 → verifiers-0.3.2.dev40}/verifiers/v1/harnesses/browser_use/__init__.py +0 -0
  104. {verifiers-0.3.2.dev39 → verifiers-0.3.2.dev40}/verifiers/v1/harnesses/browser_use/harness.py +0 -0
  105. {verifiers-0.3.2.dev39 → verifiers-0.3.2.dev40}/verifiers/v1/harnesses/browser_use/program.py +0 -0
  106. {verifiers-0.3.2.dev39 → verifiers-0.3.2.dev40}/verifiers/v1/harnesses/claude_code/__init__.py +0 -0
  107. {verifiers-0.3.2.dev39 → verifiers-0.3.2.dev40}/verifiers/v1/harnesses/claude_code/harness.py +0 -0
  108. {verifiers-0.3.2.dev39 → verifiers-0.3.2.dev40}/verifiers/v1/harnesses/codex/__init__.py +0 -0
  109. {verifiers-0.3.2.dev39 → verifiers-0.3.2.dev40}/verifiers/v1/harnesses/codex/harness.py +0 -0
  110. {verifiers-0.3.2.dev39 → verifiers-0.3.2.dev40}/verifiers/v1/harnesses/hermes_agent/__init__.py +0 -0
  111. {verifiers-0.3.2.dev39 → verifiers-0.3.2.dev40}/verifiers/v1/harnesses/hermes_agent/harness.py +0 -0
  112. {verifiers-0.3.2.dev39 → verifiers-0.3.2.dev40}/verifiers/v1/harnesses/hermes_agent/program.py +0 -0
  113. {verifiers-0.3.2.dev39 → verifiers-0.3.2.dev40}/verifiers/v1/harnesses/kimi_code/__init__.py +0 -0
  114. {verifiers-0.3.2.dev39 → verifiers-0.3.2.dev40}/verifiers/v1/harnesses/kimi_code/harness.py +0 -0
  115. {verifiers-0.3.2.dev39 → verifiers-0.3.2.dev40}/verifiers/v1/harnesses/mini_swe_agent/__init__.py +0 -0
  116. {verifiers-0.3.2.dev39 → verifiers-0.3.2.dev40}/verifiers/v1/harnesses/mini_swe_agent/harness.py +0 -0
  117. {verifiers-0.3.2.dev39 → verifiers-0.3.2.dev40}/verifiers/v1/harnesses/mini_swe_agent/program.py +0 -0
  118. {verifiers-0.3.2.dev39 → verifiers-0.3.2.dev40}/verifiers/v1/harnesses/node.py +0 -0
  119. {verifiers-0.3.2.dev39 → verifiers-0.3.2.dev40}/verifiers/v1/harnesses/null/__init__.py +0 -0
  120. {verifiers-0.3.2.dev39 → verifiers-0.3.2.dev40}/verifiers/v1/harnesses/null/harness.py +0 -0
  121. {verifiers-0.3.2.dev39 → verifiers-0.3.2.dev40}/verifiers/v1/harnesses/openclaw/__init__.py +0 -0
  122. {verifiers-0.3.2.dev39 → verifiers-0.3.2.dev40}/verifiers/v1/harnesses/openclaw/harness.py +0 -0
  123. {verifiers-0.3.2.dev39 → verifiers-0.3.2.dev40}/verifiers/v1/harnesses/pi/__init__.py +0 -0
  124. {verifiers-0.3.2.dev39 → verifiers-0.3.2.dev40}/verifiers/v1/harnesses/pi/harness.py +0 -0
  125. {verifiers-0.3.2.dev39 → verifiers-0.3.2.dev40}/verifiers/v1/harnesses/pool/__init__.py +0 -0
  126. {verifiers-0.3.2.dev39 → verifiers-0.3.2.dev40}/verifiers/v1/harnesses/pool/harness.py +0 -0
  127. {verifiers-0.3.2.dev39 → verifiers-0.3.2.dev40}/verifiers/v1/harnesses/prime_agent/__init__.py +0 -0
  128. {verifiers-0.3.2.dev39 → verifiers-0.3.2.dev40}/verifiers/v1/harnesses/prime_agent/harness.py +0 -0
  129. {verifiers-0.3.2.dev39 → verifiers-0.3.2.dev40}/verifiers/v1/harnesses/rlm/__init__.py +0 -0
  130. {verifiers-0.3.2.dev39 → verifiers-0.3.2.dev40}/verifiers/v1/harnesses/rlm/harness.py +0 -0
  131. {verifiers-0.3.2.dev39 → verifiers-0.3.2.dev40}/verifiers/v1/harnesses/terminus_2/__init__.py +0 -0
  132. {verifiers-0.3.2.dev39 → verifiers-0.3.2.dev40}/verifiers/v1/harnesses/terminus_2/harness.py +0 -0
  133. {verifiers-0.3.2.dev39 → verifiers-0.3.2.dev40}/verifiers/v1/harnesses/terminus_2/program.py +0 -0
  134. {verifiers-0.3.2.dev39 → verifiers-0.3.2.dev40}/verifiers/v1/harnesses/utils/__init__.py +0 -0
  135. {verifiers-0.3.2.dev39 → verifiers-0.3.2.dev40}/verifiers/v1/harnesses/utils/compaction.py +0 -0
  136. {verifiers-0.3.2.dev39 → verifiers-0.3.2.dev40}/verifiers/v1/harnesses/utils/core.py +0 -0
  137. {verifiers-0.3.2.dev39 → verifiers-0.3.2.dev40}/verifiers/v1/harnesses/utils/launch.py +0 -0
  138. {verifiers-0.3.2.dev39 → verifiers-0.3.2.dev40}/verifiers/v1/harnesses/utils/mcp.py +0 -0
  139. {verifiers-0.3.2.dev39 → verifiers-0.3.2.dev40}/verifiers/v1/interception/__init__.py +0 -0
  140. {verifiers-0.3.2.dev39 → verifiers-0.3.2.dev40}/verifiers/v1/interception/base.py +0 -0
  141. {verifiers-0.3.2.dev39 → verifiers-0.3.2.dev40}/verifiers/v1/interception/pool.py +0 -0
  142. {verifiers-0.3.2.dev39 → verifiers-0.3.2.dev40}/verifiers/v1/interception/server.py +0 -0
  143. {verifiers-0.3.2.dev39 → verifiers-0.3.2.dev40}/verifiers/v1/interception/tool.py +0 -0
  144. {verifiers-0.3.2.dev39 → verifiers-0.3.2.dev40}/verifiers/v1/interception/tunnel/__init__.py +0 -0
  145. {verifiers-0.3.2.dev39 → verifiers-0.3.2.dev40}/verifiers/v1/interception/tunnel/base.py +0 -0
  146. {verifiers-0.3.2.dev39 → verifiers-0.3.2.dev40}/verifiers/v1/interception/tunnel/custom.py +0 -0
  147. {verifiers-0.3.2.dev39 → verifiers-0.3.2.dev40}/verifiers/v1/interception/tunnel/prime.py +0 -0
  148. {verifiers-0.3.2.dev39 → verifiers-0.3.2.dev40}/verifiers/v1/judges/__init__.py +0 -0
  149. {verifiers-0.3.2.dev39 → verifiers-0.3.2.dev40}/verifiers/v1/judges/reference.py +0 -0
  150. {verifiers-0.3.2.dev39 → verifiers-0.3.2.dev40}/verifiers/v1/judges/reference.txt +0 -0
  151. {verifiers-0.3.2.dev39 → verifiers-0.3.2.dev40}/verifiers/v1/judges/rubric.txt +0 -0
  152. {verifiers-0.3.2.dev39 → verifiers-0.3.2.dev40}/verifiers/v1/mcp/__init__.py +0 -0
  153. {verifiers-0.3.2.dev39 → verifiers-0.3.2.dev40}/verifiers/v1/mcp/launch.py +0 -0
  154. {verifiers-0.3.2.dev39 → verifiers-0.3.2.dev40}/verifiers/v1/mcp/server.py +0 -0
  155. {verifiers-0.3.2.dev39 → verifiers-0.3.2.dev40}/verifiers/v1/mcp/toolset.py +0 -0
  156. {verifiers-0.3.2.dev39 → verifiers-0.3.2.dev40}/verifiers/v1/rollout.py +0 -0
  157. {verifiers-0.3.2.dev39 → verifiers-0.3.2.dev40}/verifiers/v1/runtimes/__init__.py +0 -0
  158. {verifiers-0.3.2.dev39 → verifiers-0.3.2.dev40}/verifiers/v1/runtimes/base.py +0 -0
  159. {verifiers-0.3.2.dev39 → verifiers-0.3.2.dev40}/verifiers/v1/runtimes/docker/__init__.py +0 -0
  160. {verifiers-0.3.2.dev39 → verifiers-0.3.2.dev40}/verifiers/v1/runtimes/docker/egress.py +0 -0
  161. {verifiers-0.3.2.dev39 → verifiers-0.3.2.dev40}/verifiers/v1/runtimes/limiters.py +0 -0
  162. {verifiers-0.3.2.dev39 → verifiers-0.3.2.dev40}/verifiers/v1/runtimes/modal.py +0 -0
  163. {verifiers-0.3.2.dev39 → verifiers-0.3.2.dev40}/verifiers/v1/runtimes/prime.py +0 -0
  164. {verifiers-0.3.2.dev39 → verifiers-0.3.2.dev40}/verifiers/v1/runtimes/subprocess.py +0 -0
  165. {verifiers-0.3.2.dev39 → verifiers-0.3.2.dev40}/verifiers/v1/semantic.py +0 -0
  166. {verifiers-0.3.2.dev39 → verifiers-0.3.2.dev40}/verifiers/v1/serve/__init__.py +0 -0
  167. {verifiers-0.3.2.dev39 → verifiers-0.3.2.dev40}/verifiers/v1/serve/client.py +0 -0
  168. {verifiers-0.3.2.dev39 → verifiers-0.3.2.dev40}/verifiers/v1/serve/encoding.py +0 -0
  169. {verifiers-0.3.2.dev39 → verifiers-0.3.2.dev40}/verifiers/v1/serve/pool.py +0 -0
  170. {verifiers-0.3.2.dev39 → verifiers-0.3.2.dev40}/verifiers/v1/serve/server.py +0 -0
  171. {verifiers-0.3.2.dev39 → verifiers-0.3.2.dev40}/verifiers/v1/serve/types.py +0 -0
  172. {verifiers-0.3.2.dev39 → verifiers-0.3.2.dev40}/verifiers/v1/session.py +0 -0
  173. {verifiers-0.3.2.dev39 → verifiers-0.3.2.dev40}/verifiers/v1/state.py +0 -0
  174. {verifiers-0.3.2.dev39 → verifiers-0.3.2.dev40}/verifiers/v1/task.py +0 -0
  175. {verifiers-0.3.2.dev39 → verifiers-0.3.2.dev40}/verifiers/v1/taskset.py +0 -0
  176. {verifiers-0.3.2.dev39 → verifiers-0.3.2.dev40}/verifiers/v1/tasksets/__init__.py +0 -0
  177. {verifiers-0.3.2.dev39 → verifiers-0.3.2.dev40}/verifiers/v1/tasksets/harbor/__init__.py +0 -0
  178. {verifiers-0.3.2.dev39 → verifiers-0.3.2.dev40}/verifiers/v1/tasksets/harbor/env.py +0 -0
  179. {verifiers-0.3.2.dev39 → verifiers-0.3.2.dev40}/verifiers/v1/tasksets/harbor/taskset.py +0 -0
  180. {verifiers-0.3.2.dev39 → verifiers-0.3.2.dev40}/verifiers/v1/tasksets/lean/__init__.py +0 -0
  181. {verifiers-0.3.2.dev39 → verifiers-0.3.2.dev40}/verifiers/v1/tasksets/lean/scoring.py +0 -0
  182. {verifiers-0.3.2.dev39 → verifiers-0.3.2.dev40}/verifiers/v1/tasksets/lean/taskset.py +0 -0
  183. {verifiers-0.3.2.dev39 → verifiers-0.3.2.dev40}/verifiers/v1/tasksets/nemo_gym/__init__.py +0 -0
  184. {verifiers-0.3.2.dev39 → verifiers-0.3.2.dev40}/verifiers/v1/tasksets/nemo_gym/response.py +0 -0
  185. {verifiers-0.3.2.dev39 → verifiers-0.3.2.dev40}/verifiers/v1/tasksets/nemo_gym/server.py +0 -0
  186. {verifiers-0.3.2.dev39 → verifiers-0.3.2.dev40}/verifiers/v1/tasksets/nemo_gym/taskset.py +0 -0
  187. {verifiers-0.3.2.dev39 → verifiers-0.3.2.dev40}/verifiers/v1/tasksets/nemo_gym/toolset.py +0 -0
  188. {verifiers-0.3.2.dev39 → verifiers-0.3.2.dev40}/verifiers/v1/tasksets/openenv/__init__.py +0 -0
  189. {verifiers-0.3.2.dev39 → verifiers-0.3.2.dev40}/verifiers/v1/tasksets/openenv/taskset.py +0 -0
  190. {verifiers-0.3.2.dev39 → verifiers-0.3.2.dev40}/verifiers/v1/tasksets/textarena/__init__.py +0 -0
  191. {verifiers-0.3.2.dev39 → verifiers-0.3.2.dev40}/verifiers/v1/tasksets/textarena/taskset.py +0 -0
  192. {verifiers-0.3.2.dev39 → verifiers-0.3.2.dev40}/verifiers/v1/types.py +0 -0
  193. {verifiers-0.3.2.dev39 → verifiers-0.3.2.dev40}/verifiers/v1/utils/__init__.py +0 -0
  194. {verifiers-0.3.2.dev39 → verifiers-0.3.2.dev40}/verifiers/v1/utils/aio.py +0 -0
  195. {verifiers-0.3.2.dev39 → verifiers-0.3.2.dev40}/verifiers/v1/utils/artifacts.py +0 -0
  196. {verifiers-0.3.2.dev39 → verifiers-0.3.2.dev40}/verifiers/v1/utils/compile.py +0 -0
  197. {verifiers-0.3.2.dev39 → verifiers-0.3.2.dev40}/verifiers/v1/utils/decorators.py +0 -0
  198. {verifiers-0.3.2.dev39 → verifiers-0.3.2.dev40}/verifiers/v1/utils/format.py +0 -0
  199. {verifiers-0.3.2.dev39 → verifiers-0.3.2.dev40}/verifiers/v1/utils/generic.py +0 -0
  200. {verifiers-0.3.2.dev39 → verifiers-0.3.2.dev40}/verifiers/v1/utils/git.py +0 -0
  201. {verifiers-0.3.2.dev39 → verifiers-0.3.2.dev40}/verifiers/v1/utils/image.py +0 -0
  202. {verifiers-0.3.2.dev39 → verifiers-0.3.2.dev40}/verifiers/v1/utils/interrupt.py +0 -0
  203. {verifiers-0.3.2.dev39 → verifiers-0.3.2.dev40}/verifiers/v1/utils/loaders.py +0 -0
  204. {verifiers-0.3.2.dev39 → verifiers-0.3.2.dev40}/verifiers/v1/utils/logging.py +0 -0
  205. {verifiers-0.3.2.dev39 → verifiers-0.3.2.dev40}/verifiers/v1/utils/memory.py +0 -0
  206. {verifiers-0.3.2.dev39 → verifiers-0.3.2.dev40}/verifiers/v1/utils/paths.py +0 -0
  207. {verifiers-0.3.2.dev39 → verifiers-0.3.2.dev40}/verifiers/v1/utils/platform.py +0 -0
  208. {verifiers-0.3.2.dev39 → verifiers-0.3.2.dev40}/verifiers/v1/utils/prime.py +0 -0
  209. {verifiers-0.3.2.dev39 → verifiers-0.3.2.dev40}/verifiers/v1/utils/retries.py +0 -0
  210. {verifiers-0.3.2.dev39 → verifiers-0.3.2.dev40}/verifiers/v1/utils/score.py +0 -0
  211. {verifiers-0.3.2.dev39 → verifiers-0.3.2.dev40}/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.dev39
3
+ Version: 0.3.2.dev40
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
@@ -404,7 +404,7 @@ async def test_rubric_judge(run_v1, tmp_path):
404
404
  assert trace.ok
405
405
  assert trace.rewards["rubric"].score > 0 # the judge's verdict landed in the reward
406
406
  assert trace.metrics["rubric/always_yes"] == 1.0
407
- assert trace.info["judge"] # the call was recorded onto the trace
407
+ assert trace.info["judge_calls"] # the call was recorded onto the trace
408
408
 
409
409
 
410
410
  @pytest.mark.e2e
@@ -701,11 +701,29 @@ async def test_replay_round_trip(run_v1, tmp_path):
701
701
  assert source.ok
702
702
  assert "lcs" in source.rewards
703
703
 
704
+ # Replay must not mix the source run's judge transcript into newly computed
705
+ # judge calls. Seed a saved call directly because this task scores without a
706
+ # judge; cleanup happens before task scoring and therefore does not inspect it.
707
+ import json
708
+
709
+ stream = run_dir / "traces.jsonl"
710
+ record = json.loads(stream.read_text())
711
+ record["traces"][0]["info"]["judge_calls"] = [
712
+ {
713
+ "name": "source-judge",
714
+ "request": {"model": "source-model", "messages": []},
715
+ "response": {
716
+ "message": {"role": "assistant", "content": "stale"},
717
+ "parsed": None,
718
+ "usage": None,
719
+ },
720
+ }
721
+ ]
722
+ stream.write_text(json.dumps(record) + "\n")
723
+
704
724
  async def replay(source_dir: Path, out: Path):
705
725
  # The CLI's layering, minus the argv plumbing: the saved run's config is the base
706
726
  # (`ReplayConfig` ignores its eval-only keys), the source's output_dir is dropped.
707
- import json
708
-
709
727
  data = json.loads(saved_config_path(source_dir).read_text())
710
728
  data.pop("output_dir", None)
711
729
  config = ReplayConfig(**{**data, "rich": False})
@@ -720,6 +738,7 @@ async def test_replay_round_trip(run_v1, tmp_path):
720
738
  # and recomputed the same value.
721
739
  assert replayed.rewards.keys() == source.rewards.keys()
722
740
  assert replayed.reward == pytest.approx(source.reward)
741
+ assert "judge_calls" not in replayed.info
723
742
  # The wire task keeps its taskset-specific fields in the replay's own output.
724
743
  raw = (tmp_path / "replay2" / "traces.jsonl").read_text()
725
744
  assert '"answer"' in raw
@@ -92,7 +92,20 @@ def fake_judge_model(monkeypatch):
92
92
  if parse is not None:
93
93
  response.parsed = parse(response)
94
94
  if trace is not None:
95
- trace.record_judge(response)
95
+ from verifiers.v1.dialects.chat import message_to_wire
96
+
97
+ wire = (
98
+ [{"role": "user", "content": messages}]
99
+ if isinstance(messages, str)
100
+ else [message_to_wire(message) for message in messages]
101
+ )
102
+ kwargs = {"model": self.config.model, "messages": wire}
103
+ kwargs.update(sampling)
104
+ trace.record_judge_call(
105
+ name=self.reward_name,
106
+ request={"model": kwargs["model"], "messages": kwargs["messages"]},
107
+ response=response,
108
+ )
96
109
  return response
97
110
 
98
111
  monkeypatch.setattr(Judge, "complete", fake_complete)
@@ -225,7 +238,43 @@ async def test_reference_score(fake_judge_model):
225
238
  assert (
226
239
  "Capital of France?" in fake_judge_model[0]
227
240
  ) # the task prompt is in the judge prompt
228
- assert len(trace.info["judge"]) == 1 # the call is recorded onto the trace
241
+ assert len(trace.info["judge_calls"]) == 1 # the call is recorded onto the trace
242
+ judge_record = trace.info["judge_calls"][0]
243
+ assert judge_record["name"] == "reference"
244
+ assert judge_record["request"]["model"] == "openai/gpt-5.4-nano"
245
+ assert "Capital of France?" in judge_record["request"]["messages"][0]["content"]
246
+ assert judge_record["response"]["message"] == {
247
+ "role": "assistant",
248
+ "content": "yes",
249
+ "reasoning_content": None,
250
+ "tool_calls": None,
251
+ "provider_state": None,
252
+ }
253
+ assert judge_record["response"]["parsed"] == 1.0
254
+
255
+ request_messages = [{"role": "user", "content": "original"}]
256
+ request = {
257
+ "model": "openai/gpt-5.4-nano",
258
+ "messages": request_messages,
259
+ }
260
+ trace.record_judge_call(
261
+ name="snapshot",
262
+ request=request,
263
+ response=JudgeResponse(text="yes"),
264
+ )
265
+ request_messages[0]["content"] = "mutated"
266
+ assert (
267
+ trace.info["judge_calls"][-1]["request"]["messages"][0]["content"] == "original"
268
+ )
269
+
270
+ override_trace = make_trace()
271
+ await vf.ReferenceJudge().complete(
272
+ "Judge this response.", trace=override_trace, model="openai/gpt-5.4-mini"
273
+ )
274
+ assert (
275
+ override_trace.info["judge_calls"][0]["request"]["model"]
276
+ == "openai/gpt-5.4-mini"
277
+ )
229
278
 
230
279
  trace = make_trace(reply="It is Rome.")
231
280
  assert await vf.ReferenceJudge().score(trace.task.data, trace) == 0.0
@@ -446,7 +495,14 @@ async def test_error_attribution(monkeypatch, tmp_path):
446
495
  return response
447
496
  finally:
448
497
  if trace is not None:
449
- trace.record_judge(response)
498
+ trace.record_judge_call(
499
+ name=self.reward_name,
500
+ request={
501
+ "model": self.config.model,
502
+ "messages": [{"role": "user", "content": messages}],
503
+ },
504
+ response=response,
505
+ )
450
506
 
451
507
  monkeypatch.setattr(Judge, "complete", gibberish_judge)
452
508
  taskset = JudgedTaskset(
@@ -463,7 +519,7 @@ async def test_error_attribution(monkeypatch, tmp_path):
463
519
  trace, runtime=None
464
520
  )
465
521
  assert trace.rewards["reference"] is None # seeded: expected but never scored
466
- assert len(trace.info["judge"]) == 1 # the billed call is still recorded
522
+ assert len(trace.info["judge_calls"]) == 1 # the billed call is still recorded
467
523
 
468
524
 
469
525
  # --- rubric --------------------------------------------------------------------------------
@@ -542,7 +598,7 @@ async def test_rubric_score(tmp_path, fake_judge_model):
542
598
  trace = make_trace()
543
599
  assert await judge.score(trace.task.data, trace) == 0.75
544
600
  assert trace.metrics == {"rubric/mentions_paris": 1.0, "rubric/is_polite": 0.0}
545
- assert len(trace.info["judge"]) == 1 # one call for the whole rubric
601
+ assert len(trace.info["judge_calls"]) == 1 # one call for the whole rubric
546
602
 
547
603
 
548
604
  async def test_rubric_verdict_mismatch_raises(tmp_path, monkeypatch):
@@ -652,7 +708,7 @@ async def test_task_score_runs_plugged_judges(tmp_path, fake_judge_model):
652
708
  trace.rewards["quality"].score == 0.75
653
709
  ) # the rubric's aggregate, under its `name`
654
710
  assert (
655
- len(trace.info["judge"]) == 2
711
+ len(trace.info["judge_calls"]) == 2
656
712
  ) # every judge call recorded (rubric = one call)
657
713
 
658
714
 
@@ -156,7 +156,7 @@ async def run_replay(config: ReplayConfig, source: Path, out: Path) -> list[Trac
156
156
  else:
157
157
  st.state = "running"
158
158
  # Clear the recorded scores; only offline-recomputable ones come back.
159
- trace.info.pop("judge", None)
159
+ trace.info.pop("judge_calls", None)
160
160
  trace.rewards, trace.metrics, trace.extra_usage = {}, {}, []
161
161
  # The declared Task for a rebuilt row, the base Task for the
162
162
  # WireTaskData fallback.
@@ -32,7 +32,8 @@ in which case `JudgeResponse.parsed` is the validated pydantic object.
32
32
  A judge is cheap to construct (the HTTP client is opened per call, inside `complete`, and
33
33
  closed when the call returns), so build it where you use it.
34
34
 
35
- Passing `trace=` records the call onto it — a typed record appended to `trace.info["judge"]` and
35
+ Passing `trace=` records the call onto it — a request/response record appended to
36
+ `trace.info["judge_calls"]` and
36
37
  the call's tokens + cost added to `trace.extra_usage` (kept separate from the agent's `trace.usage`),
37
38
  so judge behaviour and spend are no longer invisible. The record lands even if the judge refuses, an
38
39
  empty structured output comes back, or `parse` raises (the request was already billed). Omit `trace`
@@ -210,7 +211,14 @@ class Judge(Generic[ParsedT, ConfigT]):
210
211
  return response
211
212
  finally:
212
213
  if trace is not None and response is not None:
213
- trace.record_judge(response)
214
+ trace.record_judge_call(
215
+ name=self.reward_name,
216
+ request={
217
+ "model": kwargs["model"],
218
+ "messages": kwargs["messages"],
219
+ },
220
+ response=response,
221
+ )
214
222
 
215
223
  async def evaluate(
216
224
  self, *, trace: Trace | None = None, **fields: Any
@@ -24,7 +24,7 @@ RUBRIC_PROMPT = (Path(__file__).resolve().parent / "rubric.txt").read_text(
24
24
 
25
25
  # Appended to the prompt when `structured_output` is off, so the reply is JSON we can parse. Each
26
26
  # criterion carries a one-sentence `reason` written *before* the verdict (chain-of-thought), so the
27
- # verdict follows from it and the reasoning is auditable in `trace.info["judge"]`.
27
+ # verdict follows from it and the reasoning is auditable in `trace.info["judge_calls"]`.
28
28
  JSON_SUFFIX = (
29
29
  "\n\nRespond with ONLY a JSON object and nothing else, in exactly this shape:\n"
30
30
  '{"verdicts": [{"name": "<criterion name>", "reason": "<one sentence citing specific '
@@ -1,5 +1,6 @@
1
1
  from __future__ import annotations
2
2
 
3
+ import copy
3
4
  import time
4
5
  import traceback
5
6
  import uuid
@@ -672,8 +673,26 @@ class Trace(BaseModel, Generic[DataT, StateT, AgentConfigT]):
672
673
  reward = Reward(score=float(value), weight=float(weight))
673
674
  self.rewards[name] = reward
674
675
 
675
- def record_judge(self, response: JudgeResponse) -> None:
676
- self.info.setdefault("judge", []).append(response.model_dump())
676
+ def record_judge_call(
677
+ self,
678
+ *,
679
+ name: str,
680
+ request: Mapping[str, Any],
681
+ response: JudgeResponse,
682
+ ) -> None:
683
+ """Record one complete judge request/response exchange."""
684
+ response_record = response.model_dump()
685
+ message = AssistantMessage(content=response_record.pop("text"))
686
+ self.info.setdefault("judge_calls", []).append(
687
+ {
688
+ "name": name,
689
+ "request": copy.deepcopy(dict(request)),
690
+ "response": {
691
+ "message": message.model_dump(),
692
+ **response_record,
693
+ },
694
+ }
695
+ )
677
696
  if response.usage is not None:
678
697
  self.extra_usage.append(response.usage)
679
698
 
File without changes