verifiers 0.3.2.dev149__tar.gz → 0.3.2.dev150__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 (220) hide show
  1. {verifiers-0.3.2.dev149 → verifiers-0.3.2.dev150}/PKG-INFO +1 -1
  2. {verifiers-0.3.2.dev149 → verifiers-0.3.2.dev150}/tests/v1/test_graph.py +86 -0
  3. {verifiers-0.3.2.dev149 → verifiers-0.3.2.dev150}/verifiers/v1/clients/train.py +35 -21
  4. {verifiers-0.3.2.dev149 → verifiers-0.3.2.dev150}/verifiers/v1/graph.py +198 -160
  5. {verifiers-0.3.2.dev149 → verifiers-0.3.2.dev150}/verifiers/v1/trace.py +4 -23
  6. {verifiers-0.3.2.dev149 → verifiers-0.3.2.dev150}/verifiers/v1/types.py +9 -4
  7. {verifiers-0.3.2.dev149 → verifiers-0.3.2.dev150}/.gitignore +0 -0
  8. {verifiers-0.3.2.dev149 → verifiers-0.3.2.dev150}/LICENSE +0 -0
  9. {verifiers-0.3.2.dev149 → verifiers-0.3.2.dev150}/README.md +0 -0
  10. {verifiers-0.3.2.dev149 → verifiers-0.3.2.dev150}/pyproject.toml +0 -0
  11. {verifiers-0.3.2.dev149 → verifiers-0.3.2.dev150}/tests/v1/conftest.py +0 -0
  12. {verifiers-0.3.2.dev149 → verifiers-0.3.2.dev150}/tests/v1/fixtures/counter_tool_v1.py +0 -0
  13. {verifiers-0.3.2.dev149 → verifiers-0.3.2.dev150}/tests/v1/fixtures/duet_v1.py +0 -0
  14. {verifiers-0.3.2.dev149 → verifiers-0.3.2.dev150}/tests/v1/fixtures/echo_acp_resume_v1.py +0 -0
  15. {verifiers-0.3.2.dev149 → verifiers-0.3.2.dev150}/tests/v1/fixtures/echo_agentic_v1.py +0 -0
  16. {verifiers-0.3.2.dev149 → verifiers-0.3.2.dev150}/tests/v1/fixtures/echo_tool_v1.py +0 -0
  17. {verifiers-0.3.2.dev149 → verifiers-0.3.2.dev150}/tests/v1/fixtures/echo_user_sim_v1.py +0 -0
  18. {verifiers-0.3.2.dev149 → verifiers-0.3.2.dev150}/tests/v1/fixtures/echo_v1.py +0 -0
  19. {verifiers-0.3.2.dev149 → verifiers-0.3.2.dev150}/tests/v1/fixtures/pyproject.toml +0 -0
  20. {verifiers-0.3.2.dev149 → verifiers-0.3.2.dev150}/tests/v1/fixtures/tool_response_image_v1.py +0 -0
  21. {verifiers-0.3.2.dev149 → verifiers-0.3.2.dev150}/tests/v1/test_color_codeword_tasks.py +0 -0
  22. {verifiers-0.3.2.dev149 → verifiers-0.3.2.dev150}/tests/v1/test_configs.py +0 -0
  23. {verifiers-0.3.2.dev149 → verifiers-0.3.2.dev150}/tests/v1/test_e2e.py +0 -0
  24. {verifiers-0.3.2.dev149 → verifiers-0.3.2.dev150}/tests/v1/test_envs.py +0 -0
  25. {verifiers-0.3.2.dev149 → verifiers-0.3.2.dev150}/tests/v1/test_judges.py +0 -0
  26. {verifiers-0.3.2.dev149 → verifiers-0.3.2.dev150}/tests/v1/test_platform_run.py +0 -0
  27. {verifiers-0.3.2.dev149 → verifiers-0.3.2.dev150}/tests/v1/test_scoring.py +0 -0
  28. {verifiers-0.3.2.dev149 → verifiers-0.3.2.dev150}/tests/v1/test_serve_delta.py +0 -0
  29. {verifiers-0.3.2.dev149 → verifiers-0.3.2.dev150}/tests/v1/test_taskset.py +0 -0
  30. {verifiers-0.3.2.dev149 → verifiers-0.3.2.dev150}/tests/v1/test_trace.py +0 -0
  31. {verifiers-0.3.2.dev149 → verifiers-0.3.2.dev150}/verifiers/__init__.py +0 -0
  32. {verifiers-0.3.2.dev149 → verifiers-0.3.2.dev150}/verifiers/v1/__init__.py +0 -0
  33. {verifiers-0.3.2.dev149 → verifiers-0.3.2.dev150}/verifiers/v1/acp/__init__.py +0 -0
  34. {verifiers-0.3.2.dev149 → verifiers-0.3.2.dev150}/verifiers/v1/acp/runner.py +0 -0
  35. {verifiers-0.3.2.dev149 → verifiers-0.3.2.dev150}/verifiers/v1/agent.py +0 -0
  36. {verifiers-0.3.2.dev149 → verifiers-0.3.2.dev150}/verifiers/v1/cli/__init__.py +0 -0
  37. {verifiers-0.3.2.dev149 → verifiers-0.3.2.dev150}/verifiers/v1/cli/dashboard/__init__.py +0 -0
  38. {verifiers-0.3.2.dev149 → verifiers-0.3.2.dev150}/verifiers/v1/cli/dashboard/base.py +0 -0
  39. {verifiers-0.3.2.dev149 → verifiers-0.3.2.dev150}/verifiers/v1/cli/dashboard/eval.py +0 -0
  40. {verifiers-0.3.2.dev149 → verifiers-0.3.2.dev150}/verifiers/v1/cli/dashboard/replay.py +0 -0
  41. {verifiers-0.3.2.dev149 → verifiers-0.3.2.dev150}/verifiers/v1/cli/dashboard/validate.py +0 -0
  42. {verifiers-0.3.2.dev149 → verifiers-0.3.2.dev150}/verifiers/v1/cli/debug.py +0 -0
  43. {verifiers-0.3.2.dev149 → verifiers-0.3.2.dev150}/verifiers/v1/cli/eval/__init__.py +0 -0
  44. {verifiers-0.3.2.dev149 → verifiers-0.3.2.dev150}/verifiers/v1/cli/eval/hint.py +0 -0
  45. {verifiers-0.3.2.dev149 → verifiers-0.3.2.dev150}/verifiers/v1/cli/eval/main.py +0 -0
  46. {verifiers-0.3.2.dev149 → verifiers-0.3.2.dev150}/verifiers/v1/cli/eval/resume.py +0 -0
  47. {verifiers-0.3.2.dev149 → verifiers-0.3.2.dev150}/verifiers/v1/cli/eval/runner.py +0 -0
  48. {verifiers-0.3.2.dev149 → verifiers-0.3.2.dev150}/verifiers/v1/cli/gepa.py +0 -0
  49. {verifiers-0.3.2.dev149 → verifiers-0.3.2.dev150}/verifiers/v1/cli/init.py +0 -0
  50. {verifiers-0.3.2.dev149 → verifiers-0.3.2.dev150}/verifiers/v1/cli/output.py +0 -0
  51. {verifiers-0.3.2.dev149 → verifiers-0.3.2.dev150}/verifiers/v1/cli/replay.py +0 -0
  52. {verifiers-0.3.2.dev149 → verifiers-0.3.2.dev150}/verifiers/v1/cli/resolve.py +0 -0
  53. {verifiers-0.3.2.dev149 → verifiers-0.3.2.dev150}/verifiers/v1/cli/resume.py +0 -0
  54. {verifiers-0.3.2.dev149 → verifiers-0.3.2.dev150}/verifiers/v1/cli/validate.py +0 -0
  55. {verifiers-0.3.2.dev149 → verifiers-0.3.2.dev150}/verifiers/v1/clients/__init__.py +0 -0
  56. {verifiers-0.3.2.dev149 → verifiers-0.3.2.dev150}/verifiers/v1/clients/base.py +0 -0
  57. {verifiers-0.3.2.dev149 → verifiers-0.3.2.dev150}/verifiers/v1/clients/client.py +0 -0
  58. {verifiers-0.3.2.dev149 → verifiers-0.3.2.dev150}/verifiers/v1/clients/eval.py +0 -0
  59. {verifiers-0.3.2.dev149 → verifiers-0.3.2.dev150}/verifiers/v1/configs/__init__.py +0 -0
  60. {verifiers-0.3.2.dev149 → verifiers-0.3.2.dev150}/verifiers/v1/configs/agent.py +0 -0
  61. {verifiers-0.3.2.dev149 → verifiers-0.3.2.dev150}/verifiers/v1/configs/cli/__init__.py +0 -0
  62. {verifiers-0.3.2.dev149 → verifiers-0.3.2.dev150}/verifiers/v1/configs/cli/debug.py +0 -0
  63. {verifiers-0.3.2.dev149 → verifiers-0.3.2.dev150}/verifiers/v1/configs/cli/env.py +0 -0
  64. {verifiers-0.3.2.dev149 → verifiers-0.3.2.dev150}/verifiers/v1/configs/cli/eval.py +0 -0
  65. {verifiers-0.3.2.dev149 → verifiers-0.3.2.dev150}/verifiers/v1/configs/cli/init.py +0 -0
  66. {verifiers-0.3.2.dev149 → verifiers-0.3.2.dev150}/verifiers/v1/configs/cli/replay.py +0 -0
  67. {verifiers-0.3.2.dev149 → verifiers-0.3.2.dev150}/verifiers/v1/configs/cli/validate.py +0 -0
  68. {verifiers-0.3.2.dev149 → verifiers-0.3.2.dev150}/verifiers/v1/configs/client.py +0 -0
  69. {verifiers-0.3.2.dev149 → verifiers-0.3.2.dev150}/verifiers/v1/configs/env.py +0 -0
  70. {verifiers-0.3.2.dev149 → verifiers-0.3.2.dev150}/verifiers/v1/configs/harness.py +0 -0
  71. {verifiers-0.3.2.dev149 → verifiers-0.3.2.dev150}/verifiers/v1/configs/judge.py +0 -0
  72. {verifiers-0.3.2.dev149 → verifiers-0.3.2.dev150}/verifiers/v1/configs/retries.py +0 -0
  73. {verifiers-0.3.2.dev149 → verifiers-0.3.2.dev150}/verifiers/v1/configs/runtime.py +0 -0
  74. {verifiers-0.3.2.dev149 → verifiers-0.3.2.dev150}/verifiers/v1/configs/serve.py +0 -0
  75. {verifiers-0.3.2.dev149 → verifiers-0.3.2.dev150}/verifiers/v1/configs/task.py +0 -0
  76. {verifiers-0.3.2.dev149 → verifiers-0.3.2.dev150}/verifiers/v1/configs/taskset.py +0 -0
  77. {verifiers-0.3.2.dev149 → verifiers-0.3.2.dev150}/verifiers/v1/dialects/__init__.py +0 -0
  78. {verifiers-0.3.2.dev149 → verifiers-0.3.2.dev150}/verifiers/v1/dialects/anthropic.py +0 -0
  79. {verifiers-0.3.2.dev149 → verifiers-0.3.2.dev150}/verifiers/v1/dialects/base.py +0 -0
  80. {verifiers-0.3.2.dev149 → verifiers-0.3.2.dev150}/verifiers/v1/dialects/chat.py +0 -0
  81. {verifiers-0.3.2.dev149 → verifiers-0.3.2.dev150}/verifiers/v1/dialects/responses.py +0 -0
  82. {verifiers-0.3.2.dev149 → verifiers-0.3.2.dev150}/verifiers/v1/env.py +0 -0
  83. {verifiers-0.3.2.dev149 → verifiers-0.3.2.dev150}/verifiers/v1/envs/__init__.py +0 -0
  84. {verifiers-0.3.2.dev149 → verifiers-0.3.2.dev150}/verifiers/v1/envs/agentic_judge/__init__.py +0 -0
  85. {verifiers-0.3.2.dev149 → verifiers-0.3.2.dev150}/verifiers/v1/envs/agentic_judge/env.py +0 -0
  86. {verifiers-0.3.2.dev149 → verifiers-0.3.2.dev150}/verifiers/v1/envs/best_of_n/__init__.py +0 -0
  87. {verifiers-0.3.2.dev149 → verifiers-0.3.2.dev150}/verifiers/v1/envs/best_of_n/env.py +0 -0
  88. {verifiers-0.3.2.dev149 → verifiers-0.3.2.dev150}/verifiers/v1/envs/isolated_verifier/__init__.py +0 -0
  89. {verifiers-0.3.2.dev149 → verifiers-0.3.2.dev150}/verifiers/v1/envs/isolated_verifier/env.py +0 -0
  90. {verifiers-0.3.2.dev149 → verifiers-0.3.2.dev150}/verifiers/v1/envs/shared_agentic_judge/__init__.py +0 -0
  91. {verifiers-0.3.2.dev149 → verifiers-0.3.2.dev150}/verifiers/v1/envs/single_agent/__init__.py +0 -0
  92. {verifiers-0.3.2.dev149 → verifiers-0.3.2.dev150}/verifiers/v1/envs/single_agent/env.py +0 -0
  93. {verifiers-0.3.2.dev149 → verifiers-0.3.2.dev150}/verifiers/v1/envs/user_sim/__init__.py +0 -0
  94. {verifiers-0.3.2.dev149 → verifiers-0.3.2.dev150}/verifiers/v1/envs/user_sim/env.py +0 -0
  95. {verifiers-0.3.2.dev149 → verifiers-0.3.2.dev150}/verifiers/v1/episode.py +0 -0
  96. {verifiers-0.3.2.dev149 → verifiers-0.3.2.dev150}/verifiers/v1/errors.py +0 -0
  97. {verifiers-0.3.2.dev149 → verifiers-0.3.2.dev150}/verifiers/v1/gepa/__init__.py +0 -0
  98. {verifiers-0.3.2.dev149 → verifiers-0.3.2.dev150}/verifiers/v1/gepa/adapter.py +0 -0
  99. {verifiers-0.3.2.dev149 → verifiers-0.3.2.dev150}/verifiers/v1/gepa/config.py +0 -0
  100. {verifiers-0.3.2.dev149 → verifiers-0.3.2.dev150}/verifiers/v1/gepa/dataset.py +0 -0
  101. {verifiers-0.3.2.dev149 → verifiers-0.3.2.dev150}/verifiers/v1/gepa/reflection.py +0 -0
  102. {verifiers-0.3.2.dev149 → verifiers-0.3.2.dev150}/verifiers/v1/gepa/runner.py +0 -0
  103. {verifiers-0.3.2.dev149 → verifiers-0.3.2.dev150}/verifiers/v1/harness.py +0 -0
  104. {verifiers-0.3.2.dev149 → verifiers-0.3.2.dev150}/verifiers/v1/harnesses/__init__.py +0 -0
  105. {verifiers-0.3.2.dev149 → verifiers-0.3.2.dev150}/verifiers/v1/harnesses/bash/__init__.py +0 -0
  106. {verifiers-0.3.2.dev149 → verifiers-0.3.2.dev150}/verifiers/v1/harnesses/bash/harness.py +0 -0
  107. {verifiers-0.3.2.dev149 → verifiers-0.3.2.dev150}/verifiers/v1/harnesses/browser_use/__init__.py +0 -0
  108. {verifiers-0.3.2.dev149 → verifiers-0.3.2.dev150}/verifiers/v1/harnesses/browser_use/harness.py +0 -0
  109. {verifiers-0.3.2.dev149 → verifiers-0.3.2.dev150}/verifiers/v1/harnesses/browser_use/program.py +0 -0
  110. {verifiers-0.3.2.dev149 → verifiers-0.3.2.dev150}/verifiers/v1/harnesses/claude_code/__init__.py +0 -0
  111. {verifiers-0.3.2.dev149 → verifiers-0.3.2.dev150}/verifiers/v1/harnesses/claude_code/harness.py +0 -0
  112. {verifiers-0.3.2.dev149 → verifiers-0.3.2.dev150}/verifiers/v1/harnesses/codex/__init__.py +0 -0
  113. {verifiers-0.3.2.dev149 → verifiers-0.3.2.dev150}/verifiers/v1/harnesses/codex/gate.mjs +0 -0
  114. {verifiers-0.3.2.dev149 → verifiers-0.3.2.dev150}/verifiers/v1/harnesses/codex/harness.py +0 -0
  115. {verifiers-0.3.2.dev149 → verifiers-0.3.2.dev150}/verifiers/v1/harnesses/hermes_agent/__init__.py +0 -0
  116. {verifiers-0.3.2.dev149 → verifiers-0.3.2.dev150}/verifiers/v1/harnesses/hermes_agent/harness.py +0 -0
  117. {verifiers-0.3.2.dev149 → verifiers-0.3.2.dev150}/verifiers/v1/harnesses/hermes_agent/program.py +0 -0
  118. {verifiers-0.3.2.dev149 → verifiers-0.3.2.dev150}/verifiers/v1/harnesses/kimi_code/__init__.py +0 -0
  119. {verifiers-0.3.2.dev149 → verifiers-0.3.2.dev150}/verifiers/v1/harnesses/kimi_code/harness.py +0 -0
  120. {verifiers-0.3.2.dev149 → verifiers-0.3.2.dev150}/verifiers/v1/harnesses/mini_swe_agent/__init__.py +0 -0
  121. {verifiers-0.3.2.dev149 → verifiers-0.3.2.dev150}/verifiers/v1/harnesses/mini_swe_agent/harness.py +0 -0
  122. {verifiers-0.3.2.dev149 → verifiers-0.3.2.dev150}/verifiers/v1/harnesses/mini_swe_agent/program.py +0 -0
  123. {verifiers-0.3.2.dev149 → verifiers-0.3.2.dev150}/verifiers/v1/harnesses/node.py +0 -0
  124. {verifiers-0.3.2.dev149 → verifiers-0.3.2.dev150}/verifiers/v1/harnesses/null/__init__.py +0 -0
  125. {verifiers-0.3.2.dev149 → verifiers-0.3.2.dev150}/verifiers/v1/harnesses/null/harness.py +0 -0
  126. {verifiers-0.3.2.dev149 → verifiers-0.3.2.dev150}/verifiers/v1/harnesses/openclaw/__init__.py +0 -0
  127. {verifiers-0.3.2.dev149 → verifiers-0.3.2.dev150}/verifiers/v1/harnesses/openclaw/harness.py +0 -0
  128. {verifiers-0.3.2.dev149 → verifiers-0.3.2.dev150}/verifiers/v1/harnesses/pi/__init__.py +0 -0
  129. {verifiers-0.3.2.dev149 → verifiers-0.3.2.dev150}/verifiers/v1/harnesses/pi/gate.mjs +0 -0
  130. {verifiers-0.3.2.dev149 → verifiers-0.3.2.dev150}/verifiers/v1/harnesses/pi/harness.py +0 -0
  131. {verifiers-0.3.2.dev149 → verifiers-0.3.2.dev150}/verifiers/v1/harnesses/prime_agent/__init__.py +0 -0
  132. {verifiers-0.3.2.dev149 → verifiers-0.3.2.dev150}/verifiers/v1/harnesses/prime_agent/harness.py +0 -0
  133. {verifiers-0.3.2.dev149 → verifiers-0.3.2.dev150}/verifiers/v1/harnesses/rlm/__init__.py +0 -0
  134. {verifiers-0.3.2.dev149 → verifiers-0.3.2.dev150}/verifiers/v1/harnesses/rlm/harness.py +0 -0
  135. {verifiers-0.3.2.dev149 → verifiers-0.3.2.dev150}/verifiers/v1/harnesses/terminus_2/__init__.py +0 -0
  136. {verifiers-0.3.2.dev149 → verifiers-0.3.2.dev150}/verifiers/v1/harnesses/terminus_2/harness.py +0 -0
  137. {verifiers-0.3.2.dev149 → verifiers-0.3.2.dev150}/verifiers/v1/harnesses/terminus_2/program.py +0 -0
  138. {verifiers-0.3.2.dev149 → verifiers-0.3.2.dev150}/verifiers/v1/harnesses/utils/__init__.py +0 -0
  139. {verifiers-0.3.2.dev149 → verifiers-0.3.2.dev150}/verifiers/v1/harnesses/utils/compaction.py +0 -0
  140. {verifiers-0.3.2.dev149 → verifiers-0.3.2.dev150}/verifiers/v1/harnesses/utils/core.py +0 -0
  141. {verifiers-0.3.2.dev149 → verifiers-0.3.2.dev150}/verifiers/v1/harnesses/utils/install.py +0 -0
  142. {verifiers-0.3.2.dev149 → verifiers-0.3.2.dev150}/verifiers/v1/harnesses/utils/launch.py +0 -0
  143. {verifiers-0.3.2.dev149 → verifiers-0.3.2.dev150}/verifiers/v1/harnesses/utils/mcp.py +0 -0
  144. {verifiers-0.3.2.dev149 → verifiers-0.3.2.dev150}/verifiers/v1/interception/__init__.py +0 -0
  145. {verifiers-0.3.2.dev149 → verifiers-0.3.2.dev150}/verifiers/v1/interception/base.py +0 -0
  146. {verifiers-0.3.2.dev149 → verifiers-0.3.2.dev150}/verifiers/v1/interception/pool.py +0 -0
  147. {verifiers-0.3.2.dev149 → verifiers-0.3.2.dev150}/verifiers/v1/interception/server.py +0 -0
  148. {verifiers-0.3.2.dev149 → verifiers-0.3.2.dev150}/verifiers/v1/interception/tunnel/__init__.py +0 -0
  149. {verifiers-0.3.2.dev149 → verifiers-0.3.2.dev150}/verifiers/v1/interception/tunnel/base.py +0 -0
  150. {verifiers-0.3.2.dev149 → verifiers-0.3.2.dev150}/verifiers/v1/interception/tunnel/custom.py +0 -0
  151. {verifiers-0.3.2.dev149 → verifiers-0.3.2.dev150}/verifiers/v1/interception/tunnel/prime.py +0 -0
  152. {verifiers-0.3.2.dev149 → verifiers-0.3.2.dev150}/verifiers/v1/judge.py +0 -0
  153. {verifiers-0.3.2.dev149 → verifiers-0.3.2.dev150}/verifiers/v1/judges/__init__.py +0 -0
  154. {verifiers-0.3.2.dev149 → verifiers-0.3.2.dev150}/verifiers/v1/judges/reference.py +0 -0
  155. {verifiers-0.3.2.dev149 → verifiers-0.3.2.dev150}/verifiers/v1/judges/reference.txt +0 -0
  156. {verifiers-0.3.2.dev149 → verifiers-0.3.2.dev150}/verifiers/v1/judges/rubric.py +0 -0
  157. {verifiers-0.3.2.dev149 → verifiers-0.3.2.dev150}/verifiers/v1/judges/rubric.txt +0 -0
  158. {verifiers-0.3.2.dev149 → verifiers-0.3.2.dev150}/verifiers/v1/mcp/__init__.py +0 -0
  159. {verifiers-0.3.2.dev149 → verifiers-0.3.2.dev150}/verifiers/v1/mcp/launch.py +0 -0
  160. {verifiers-0.3.2.dev149 → verifiers-0.3.2.dev150}/verifiers/v1/mcp/server.py +0 -0
  161. {verifiers-0.3.2.dev149 → verifiers-0.3.2.dev150}/verifiers/v1/mcp/toolset.py +0 -0
  162. {verifiers-0.3.2.dev149 → verifiers-0.3.2.dev150}/verifiers/v1/rollout.py +0 -0
  163. {verifiers-0.3.2.dev149 → verifiers-0.3.2.dev150}/verifiers/v1/runtimes/__init__.py +0 -0
  164. {verifiers-0.3.2.dev149 → verifiers-0.3.2.dev150}/verifiers/v1/runtimes/apptainer.py +0 -0
  165. {verifiers-0.3.2.dev149 → verifiers-0.3.2.dev150}/verifiers/v1/runtimes/base.py +0 -0
  166. {verifiers-0.3.2.dev149 → verifiers-0.3.2.dev150}/verifiers/v1/runtimes/container.py +0 -0
  167. {verifiers-0.3.2.dev149 → verifiers-0.3.2.dev150}/verifiers/v1/runtimes/docker/__init__.py +0 -0
  168. {verifiers-0.3.2.dev149 → verifiers-0.3.2.dev150}/verifiers/v1/runtimes/docker/egress.py +0 -0
  169. {verifiers-0.3.2.dev149 → verifiers-0.3.2.dev150}/verifiers/v1/runtimes/limiters.py +0 -0
  170. {verifiers-0.3.2.dev149 → verifiers-0.3.2.dev150}/verifiers/v1/runtimes/modal.py +0 -0
  171. {verifiers-0.3.2.dev149 → verifiers-0.3.2.dev150}/verifiers/v1/runtimes/prime.py +0 -0
  172. {verifiers-0.3.2.dev149 → verifiers-0.3.2.dev150}/verifiers/v1/runtimes/subprocess.py +0 -0
  173. {verifiers-0.3.2.dev149 → verifiers-0.3.2.dev150}/verifiers/v1/semantic.py +0 -0
  174. {verifiers-0.3.2.dev149 → verifiers-0.3.2.dev150}/verifiers/v1/serve/__init__.py +0 -0
  175. {verifiers-0.3.2.dev149 → verifiers-0.3.2.dev150}/verifiers/v1/serve/client.py +0 -0
  176. {verifiers-0.3.2.dev149 → verifiers-0.3.2.dev150}/verifiers/v1/serve/delta.py +0 -0
  177. {verifiers-0.3.2.dev149 → verifiers-0.3.2.dev150}/verifiers/v1/serve/encoding.py +0 -0
  178. {verifiers-0.3.2.dev149 → verifiers-0.3.2.dev150}/verifiers/v1/serve/pool.py +0 -0
  179. {verifiers-0.3.2.dev149 → verifiers-0.3.2.dev150}/verifiers/v1/serve/server.py +0 -0
  180. {verifiers-0.3.2.dev149 → verifiers-0.3.2.dev150}/verifiers/v1/serve/types.py +0 -0
  181. {verifiers-0.3.2.dev149 → verifiers-0.3.2.dev150}/verifiers/v1/session.py +0 -0
  182. {verifiers-0.3.2.dev149 → verifiers-0.3.2.dev150}/verifiers/v1/state.py +0 -0
  183. {verifiers-0.3.2.dev149 → verifiers-0.3.2.dev150}/verifiers/v1/task.py +0 -0
  184. {verifiers-0.3.2.dev149 → verifiers-0.3.2.dev150}/verifiers/v1/taskset.py +0 -0
  185. {verifiers-0.3.2.dev149 → verifiers-0.3.2.dev150}/verifiers/v1/tasksets/__init__.py +0 -0
  186. {verifiers-0.3.2.dev149 → verifiers-0.3.2.dev150}/verifiers/v1/tasksets/harbor/__init__.py +0 -0
  187. {verifiers-0.3.2.dev149 → verifiers-0.3.2.dev150}/verifiers/v1/tasksets/harbor/compose.py +0 -0
  188. {verifiers-0.3.2.dev149 → verifiers-0.3.2.dev150}/verifiers/v1/tasksets/harbor/env.py +0 -0
  189. {verifiers-0.3.2.dev149 → verifiers-0.3.2.dev150}/verifiers/v1/tasksets/harbor/taskset.py +0 -0
  190. {verifiers-0.3.2.dev149 → verifiers-0.3.2.dev150}/verifiers/v1/tasksets/harbor/toolset.py +0 -0
  191. {verifiers-0.3.2.dev149 → verifiers-0.3.2.dev150}/verifiers/v1/tasksets/nemo_gym/__init__.py +0 -0
  192. {verifiers-0.3.2.dev149 → verifiers-0.3.2.dev150}/verifiers/v1/tasksets/nemo_gym/response.py +0 -0
  193. {verifiers-0.3.2.dev149 → verifiers-0.3.2.dev150}/verifiers/v1/tasksets/nemo_gym/server.py +0 -0
  194. {verifiers-0.3.2.dev149 → verifiers-0.3.2.dev150}/verifiers/v1/tasksets/nemo_gym/taskset.py +0 -0
  195. {verifiers-0.3.2.dev149 → verifiers-0.3.2.dev150}/verifiers/v1/tasksets/nemo_gym/toolset.py +0 -0
  196. {verifiers-0.3.2.dev149 → verifiers-0.3.2.dev150}/verifiers/v1/tasksets/openenv/__init__.py +0 -0
  197. {verifiers-0.3.2.dev149 → verifiers-0.3.2.dev150}/verifiers/v1/tasksets/openenv/taskset.py +0 -0
  198. {verifiers-0.3.2.dev149 → verifiers-0.3.2.dev150}/verifiers/v1/tasksets/textarena/__init__.py +0 -0
  199. {verifiers-0.3.2.dev149 → verifiers-0.3.2.dev150}/verifiers/v1/tasksets/textarena/taskset.py +0 -0
  200. {verifiers-0.3.2.dev149 → verifiers-0.3.2.dev150}/verifiers/v1/utils/__init__.py +0 -0
  201. {verifiers-0.3.2.dev149 → verifiers-0.3.2.dev150}/verifiers/v1/utils/aio.py +0 -0
  202. {verifiers-0.3.2.dev149 → verifiers-0.3.2.dev150}/verifiers/v1/utils/artifacts.py +0 -0
  203. {verifiers-0.3.2.dev149 → verifiers-0.3.2.dev150}/verifiers/v1/utils/compile.py +0 -0
  204. {verifiers-0.3.2.dev149 → verifiers-0.3.2.dev150}/verifiers/v1/utils/decorators.py +0 -0
  205. {verifiers-0.3.2.dev149 → verifiers-0.3.2.dev150}/verifiers/v1/utils/format.py +0 -0
  206. {verifiers-0.3.2.dev149 → verifiers-0.3.2.dev150}/verifiers/v1/utils/generic.py +0 -0
  207. {verifiers-0.3.2.dev149 → verifiers-0.3.2.dev150}/verifiers/v1/utils/git.py +0 -0
  208. {verifiers-0.3.2.dev149 → verifiers-0.3.2.dev150}/verifiers/v1/utils/image.py +0 -0
  209. {verifiers-0.3.2.dev149 → verifiers-0.3.2.dev150}/verifiers/v1/utils/interrupt.py +0 -0
  210. {verifiers-0.3.2.dev149 → verifiers-0.3.2.dev150}/verifiers/v1/utils/loaders.py +0 -0
  211. {verifiers-0.3.2.dev149 → verifiers-0.3.2.dev150}/verifiers/v1/utils/logging.py +0 -0
  212. {verifiers-0.3.2.dev149 → verifiers-0.3.2.dev150}/verifiers/v1/utils/memory.py +0 -0
  213. {verifiers-0.3.2.dev149 → verifiers-0.3.2.dev150}/verifiers/v1/utils/paths.py +0 -0
  214. {verifiers-0.3.2.dev149 → verifiers-0.3.2.dev150}/verifiers/v1/utils/platform.py +0 -0
  215. {verifiers-0.3.2.dev149 → verifiers-0.3.2.dev150}/verifiers/v1/utils/prime.py +0 -0
  216. {verifiers-0.3.2.dev149 → verifiers-0.3.2.dev150}/verifiers/v1/utils/retries.py +0 -0
  217. {verifiers-0.3.2.dev149 → verifiers-0.3.2.dev150}/verifiers/v1/utils/scope.py +0 -0
  218. {verifiers-0.3.2.dev149 → verifiers-0.3.2.dev150}/verifiers/v1/utils/score.py +0 -0
  219. {verifiers-0.3.2.dev149 → verifiers-0.3.2.dev150}/verifiers/v1/utils/trace_store.py +0 -0
  220. {verifiers-0.3.2.dev149 → verifiers-0.3.2.dev150}/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.dev149
3
+ Version: 0.3.2.dev150
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
@@ -539,6 +539,92 @@ def test_renderer_level_break_forks_by_token_id():
539
539
  ]
540
540
 
541
541
 
542
+ def test_expanded_prompt_is_attributed_while_bridge_uses_logical_tokens():
543
+ trace = vf.Trace(
544
+ agent=vf.AgentInfo(config=vf.AgentConfig()),
545
+ task=vf.TraceTask(type="Task", data=vf.TaskData(idx=0, prompt="x")),
546
+ )
547
+ user = vf.UserMessage(content="image")
548
+ assistant = vf.AssistantMessage(content="looked")
549
+ assert graph.MessageNode(message=user, token_ids=[9]).logical_ids == [9]
550
+ assert (
551
+ graph.MessageNode(
552
+ message=user, token_ids=[9], renderer_token_ids=[]
553
+ ).logical_ids
554
+ == []
555
+ )
556
+ graph.prepare_turn(trace, [user]).commit(
557
+ vf.Response(
558
+ id="a",
559
+ created=0,
560
+ model="t",
561
+ message=assistant,
562
+ finish_reason="stop",
563
+ tokens=TurnTokens(
564
+ prompt_ids=[1, 9, 9, 3],
565
+ renderer_prompt_ids=[1, 9, 3],
566
+ completion_ids=[4],
567
+ message_spans=[(0, 2)],
568
+ is_content=[False, True, False],
569
+ mm_placeholders=[(1, 2)],
570
+ mm_token_type_id_map={9: 1},
571
+ ),
572
+ )
573
+ )
574
+
575
+ assert trace.branches[0].token_ids == [1, 9, 9, 3, 4]
576
+ assert trace.branches[0].mm_token_type_ids == [0, 1, 1, 0, 0]
577
+ assert trace.nodes[0].token_ids == [1, 9, 9]
578
+ assert trace.nodes[0].is_content == [False, True, True]
579
+ turn = graph.prepare_turn(trace, [user, assistant, vf.UserMessage(content="next")])
580
+ assert turn.previous_renderer_token_ids() == ([1, 9, 3], [4])
581
+
582
+ with pytest.raises(ValueError, match="exactly extend"):
583
+ turn.commit(
584
+ vf.Response(
585
+ id="b",
586
+ created=0,
587
+ model="t",
588
+ message=vf.AssistantMessage(content="bad"),
589
+ finish_reason="stop",
590
+ tokens=TurnTokens(
591
+ prompt_ids=[1, 9, 8, 3, 4, 5],
592
+ renderer_prompt_ids=[1, 9, 3, 4, 5],
593
+ bridged=True,
594
+ completion_ids=[6],
595
+ message_spans=[None, None, (4, 5)],
596
+ ),
597
+ )
598
+ )
599
+
600
+ tool = vf.ToolMessage(content="result", tool_call_id="call_0")
601
+ graph.prepare_turn(trace, [user, assistant, tool]).commit(
602
+ vf.Response(
603
+ id="b",
604
+ created=0,
605
+ model="t",
606
+ message=vf.AssistantMessage(content="done"),
607
+ finish_reason="stop",
608
+ tokens=TurnTokens(
609
+ prompt_ids=[1, 9, 9, 3, 4, 5, 6, 7],
610
+ renderer_prompt_ids=[1, 9, 3, 4, 5, 6, 7],
611
+ bridged=True,
612
+ completion_ids=[8],
613
+ message_spans=[None, None, (4, 6)],
614
+ is_content=[False, True, False, True, False, True, False],
615
+ mm_placeholders=[(1, 2)],
616
+ mm_token_type_id_map={9: 1},
617
+ ),
618
+ )
619
+ )
620
+
621
+ tool_node = trace.nodes[-2]
622
+ assert tool_node.message == tool
623
+ assert tool_node.token_ids == [5, 6]
624
+ assert tool_node.renderer_token_ids == [5, 6]
625
+ assert tool_node.is_content == [False, True]
626
+
627
+
542
628
  def test_prompt_supplied_assistant_messages_are_not_sampled_turns():
543
629
  task = vf.TaskData(idx=0, prompt="few-shot")
544
630
  trace = vf.Trace(
@@ -140,6 +140,16 @@ def response_from_generate(
140
140
  message_spans = bridged_turn.prompt_message_spans(attribution)
141
141
  else:
142
142
  message_spans = attribution.message_token_spans()
143
+ raw_mm_placeholders = result.get("mm_placeholders")
144
+ mm_placeholders = (
145
+ sorted(
146
+ (placeholder["offset"], placeholder["length"])
147
+ for ranges in raw_mm_placeholders.values()
148
+ for placeholder in ranges
149
+ )
150
+ if raw_mm_placeholders is not None
151
+ else None
152
+ )
143
153
  return Response(
144
154
  id=result.get("request_id", ""),
145
155
  created=0,
@@ -159,11 +169,13 @@ def response_from_generate(
159
169
  # million-token contexts synchronously on the event loop.
160
170
  tokens=TurnTokens.model_construct(
161
171
  prompt_ids=prompt_ids,
172
+ renderer_prompt_ids=result.get("renderer_prompt_ids"),
173
+ bridged=bridged_turn is not None,
162
174
  completion_ids=completion_ids,
163
175
  completion_logprobs=result.get("completion_logprobs") or [],
164
176
  message_spans=message_spans,
165
177
  is_content=attribution.is_content if attribution is not None else None,
166
- multi_modal_data=result.get("multi_modal_data"),
178
+ mm_placeholders=mm_placeholders,
167
179
  mm_token_type_id_map=mm_token_type_id_map,
168
180
  routed_experts=result.get("routed_experts"),
169
181
  sampling_mask=SamplingMask.from_sampling_mask(mask)
@@ -358,11 +370,9 @@ class TrainClient(Client):
358
370
  from renderers.client import generate
359
371
 
360
372
  wire_tools = [tool_to_wire(t) for t in tools] if tools else None
361
- wire_messages = (
362
- [message_to_wire(m) for m in turn.tail] if turn is not None else []
363
- )
373
+ wire_messages = [message_to_wire(m) for m in prompt]
374
+ wire_tail = [message_to_wire(m) for m in turn.tail] if turn is not None else []
364
375
  prompt_ids: list[int] | None = None
365
- multi_modal_data = None
366
376
  prompt_attribution: RenderedTokens | None = None
367
377
  model = body["model"]
368
378
  sampling_params = sampling.wire_args()
@@ -381,14 +391,18 @@ class TrainClient(Client):
381
391
  mm_token_type_id_map = (
382
392
  renderer.mm_token_type_id_map if is_multimodal(renderer) else None
383
393
  )
384
- # Only build the (O(context)) previous-turn token ids once the cheap guards pass — a
385
- # multimodal prompt or a tail that isn't a clean `[tool*, user?]` extension can't bridge.
386
- can_bridge = (
387
- turn is not None
388
- and not _has_multimodal_content(prompt)
389
- and _is_valid_incremental_tail(wire_messages)
390
- )
391
- previous_ids = turn.previous_token_ids() if can_bridge else None
394
+ has_images = _has_multimodal_content(prompt)
395
+ process_multimodal = not has_images
396
+ if has_images and not getattr(
397
+ renderer, "supports_process_multimodal", False
398
+ ):
399
+ raise NotImplementedError(
400
+ f"{type(renderer).__name__} does not support process_multimodal=False"
401
+ )
402
+ render_kwargs = {} if process_multimodal else {"process_multimodal": False}
403
+ # Only build the O(context) previous token stream for a bridgeable tail.
404
+ can_bridge = turn is not None and _is_valid_incremental_tail(wire_tail)
405
+ previous_ids = turn.previous_renderer_token_ids() if can_bridge else None
392
406
  if previous_ids is not None:
393
407
  previous_prompt_ids, previous_completion_ids = previous_ids
394
408
 
@@ -396,33 +410,33 @@ class TrainClient(Client):
396
410
  return renderer.bridge_to_next_turn(
397
411
  previous_prompt_ids,
398
412
  previous_completion_ids,
399
- wire_messages,
413
+ wire_tail,
400
414
  tools=wire_tools,
415
+ **render_kwargs,
401
416
  )
402
417
 
403
418
  bridged = await slot.run(bridge)
404
419
  if bridged is not None:
405
420
  prompt_ids = bridged.token_ids
406
- multi_modal_data = bridged.multi_modal_data
407
421
  prompt_attribution = bridged
408
422
  bridged_turn = turn
409
423
  sampling_params["routed_experts_prompt_start"] = max(
410
- len(previous_prompt_ids) + len(previous_completion_ids) - 1,
411
- 0,
424
+ turn.path_len - 1, 0
412
425
  )
413
426
 
414
427
  # Render here (encode-side, so through the slot) rather than inside `generate`:
415
428
  # handed prebuilt prompt_ids, generate's own renderer touches are decode-side
416
429
  # and stop-id reads, safe on a bare renderer without lock or thread hop.
417
430
  if prompt_ids is None:
418
- wire_messages = [message_to_wire(m) for m in prompt]
419
431
  rendered = await slot.run(
420
432
  lambda: renderer.render(
421
- wire_messages, tools=wire_tools, add_generation_prompt=True
433
+ wire_messages,
434
+ tools=wire_tools,
435
+ add_generation_prompt=True,
436
+ **render_kwargs,
422
437
  )
423
438
  )
424
439
  prompt_ids = rendered.token_ids
425
- multi_modal_data = rendered.multi_modal_data
426
440
  prompt_attribution = rendered
427
441
 
428
442
  try:
@@ -432,10 +446,10 @@ class TrainClient(Client):
432
446
  messages=wire_messages,
433
447
  model=model,
434
448
  prompt_ids=prompt_ids,
435
- multi_modal_data=multi_modal_data,
436
449
  prompt_attribution=prompt_attribution,
437
450
  tools=wire_tools,
438
451
  sampling_params=sampling_params,
452
+ process_multimodal=process_multimodal,
439
453
  cache_salt=cache_salt,
440
454
  extra_headers={SESSION_ID_HEADER: session_id}
441
455
  if session_id