verifiers 0.3.2.dev95__tar.gz → 0.3.2.dev96__tar.gz

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (215) hide show
  1. {verifiers-0.3.2.dev95 → verifiers-0.3.2.dev96}/PKG-INFO +1 -1
  2. {verifiers-0.3.2.dev95 → verifiers-0.3.2.dev96}/tests/v1/test_e2e.py +74 -0
  3. {verifiers-0.3.2.dev95 → verifiers-0.3.2.dev96}/verifiers/v1/harnesses/utils/core.py +64 -3
  4. {verifiers-0.3.2.dev95 → verifiers-0.3.2.dev96}/.gitignore +0 -0
  5. {verifiers-0.3.2.dev95 → verifiers-0.3.2.dev96}/LICENSE +0 -0
  6. {verifiers-0.3.2.dev95 → verifiers-0.3.2.dev96}/README.md +0 -0
  7. {verifiers-0.3.2.dev95 → verifiers-0.3.2.dev96}/pyproject.toml +0 -0
  8. {verifiers-0.3.2.dev95 → verifiers-0.3.2.dev96}/tests/v1/conftest.py +0 -0
  9. {verifiers-0.3.2.dev95 → verifiers-0.3.2.dev96}/tests/v1/fixtures/counter_tool_v1.py +0 -0
  10. {verifiers-0.3.2.dev95 → verifiers-0.3.2.dev96}/tests/v1/fixtures/duet_v1.py +0 -0
  11. {verifiers-0.3.2.dev95 → verifiers-0.3.2.dev96}/tests/v1/fixtures/echo_acp_resume_v1.py +0 -0
  12. {verifiers-0.3.2.dev95 → verifiers-0.3.2.dev96}/tests/v1/fixtures/echo_agentic_v1.py +0 -0
  13. {verifiers-0.3.2.dev95 → verifiers-0.3.2.dev96}/tests/v1/fixtures/echo_tool_v1.py +0 -0
  14. {verifiers-0.3.2.dev95 → verifiers-0.3.2.dev96}/tests/v1/fixtures/echo_user_sim_v1.py +0 -0
  15. {verifiers-0.3.2.dev95 → verifiers-0.3.2.dev96}/tests/v1/fixtures/echo_v1.py +0 -0
  16. {verifiers-0.3.2.dev95 → verifiers-0.3.2.dev96}/tests/v1/fixtures/pyproject.toml +0 -0
  17. {verifiers-0.3.2.dev95 → verifiers-0.3.2.dev96}/tests/v1/fixtures/tool_response_image_v1.py +0 -0
  18. {verifiers-0.3.2.dev95 → verifiers-0.3.2.dev96}/tests/v1/test_color_codeword_tasks.py +0 -0
  19. {verifiers-0.3.2.dev95 → verifiers-0.3.2.dev96}/tests/v1/test_configs.py +0 -0
  20. {verifiers-0.3.2.dev95 → verifiers-0.3.2.dev96}/tests/v1/test_envs.py +0 -0
  21. {verifiers-0.3.2.dev95 → verifiers-0.3.2.dev96}/tests/v1/test_graph.py +0 -0
  22. {verifiers-0.3.2.dev95 → verifiers-0.3.2.dev96}/tests/v1/test_judges.py +0 -0
  23. {verifiers-0.3.2.dev95 → verifiers-0.3.2.dev96}/tests/v1/test_platform_run.py +0 -0
  24. {verifiers-0.3.2.dev95 → verifiers-0.3.2.dev96}/tests/v1/test_scoring.py +0 -0
  25. {verifiers-0.3.2.dev95 → verifiers-0.3.2.dev96}/tests/v1/test_taskset.py +0 -0
  26. {verifiers-0.3.2.dev95 → verifiers-0.3.2.dev96}/tests/v1/test_trace.py +0 -0
  27. {verifiers-0.3.2.dev95 → verifiers-0.3.2.dev96}/verifiers/__init__.py +0 -0
  28. {verifiers-0.3.2.dev95 → verifiers-0.3.2.dev96}/verifiers/cli/commands/init.py +0 -0
  29. {verifiers-0.3.2.dev95 → verifiers-0.3.2.dev96}/verifiers/v1/__init__.py +0 -0
  30. {verifiers-0.3.2.dev95 → verifiers-0.3.2.dev96}/verifiers/v1/acp/__init__.py +0 -0
  31. {verifiers-0.3.2.dev95 → verifiers-0.3.2.dev96}/verifiers/v1/acp/runner.py +0 -0
  32. {verifiers-0.3.2.dev95 → verifiers-0.3.2.dev96}/verifiers/v1/agent.py +0 -0
  33. {verifiers-0.3.2.dev95 → verifiers-0.3.2.dev96}/verifiers/v1/cli/__init__.py +0 -0
  34. {verifiers-0.3.2.dev95 → verifiers-0.3.2.dev96}/verifiers/v1/cli/dashboard/__init__.py +0 -0
  35. {verifiers-0.3.2.dev95 → verifiers-0.3.2.dev96}/verifiers/v1/cli/dashboard/base.py +0 -0
  36. {verifiers-0.3.2.dev95 → verifiers-0.3.2.dev96}/verifiers/v1/cli/dashboard/eval.py +0 -0
  37. {verifiers-0.3.2.dev95 → verifiers-0.3.2.dev96}/verifiers/v1/cli/dashboard/replay.py +0 -0
  38. {verifiers-0.3.2.dev95 → verifiers-0.3.2.dev96}/verifiers/v1/cli/dashboard/validate.py +0 -0
  39. {verifiers-0.3.2.dev95 → verifiers-0.3.2.dev96}/verifiers/v1/cli/debug.py +0 -0
  40. {verifiers-0.3.2.dev95 → verifiers-0.3.2.dev96}/verifiers/v1/cli/eval/__init__.py +0 -0
  41. {verifiers-0.3.2.dev95 → verifiers-0.3.2.dev96}/verifiers/v1/cli/eval/main.py +0 -0
  42. {verifiers-0.3.2.dev95 → verifiers-0.3.2.dev96}/verifiers/v1/cli/eval/resume.py +0 -0
  43. {verifiers-0.3.2.dev95 → verifiers-0.3.2.dev96}/verifiers/v1/cli/eval/runner.py +0 -0
  44. {verifiers-0.3.2.dev95 → verifiers-0.3.2.dev96}/verifiers/v1/cli/gepa.py +0 -0
  45. {verifiers-0.3.2.dev95 → verifiers-0.3.2.dev96}/verifiers/v1/cli/init.py +0 -0
  46. {verifiers-0.3.2.dev95 → verifiers-0.3.2.dev96}/verifiers/v1/cli/output.py +0 -0
  47. {verifiers-0.3.2.dev95 → verifiers-0.3.2.dev96}/verifiers/v1/cli/replay.py +0 -0
  48. {verifiers-0.3.2.dev95 → verifiers-0.3.2.dev96}/verifiers/v1/cli/resolve.py +0 -0
  49. {verifiers-0.3.2.dev95 → verifiers-0.3.2.dev96}/verifiers/v1/cli/resume.py +0 -0
  50. {verifiers-0.3.2.dev95 → verifiers-0.3.2.dev96}/verifiers/v1/cli/validate.py +0 -0
  51. {verifiers-0.3.2.dev95 → verifiers-0.3.2.dev96}/verifiers/v1/clients/__init__.py +0 -0
  52. {verifiers-0.3.2.dev95 → verifiers-0.3.2.dev96}/verifiers/v1/clients/base.py +0 -0
  53. {verifiers-0.3.2.dev95 → verifiers-0.3.2.dev96}/verifiers/v1/clients/client.py +0 -0
  54. {verifiers-0.3.2.dev95 → verifiers-0.3.2.dev96}/verifiers/v1/clients/eval.py +0 -0
  55. {verifiers-0.3.2.dev95 → verifiers-0.3.2.dev96}/verifiers/v1/clients/train.py +0 -0
  56. {verifiers-0.3.2.dev95 → verifiers-0.3.2.dev96}/verifiers/v1/configs/__init__.py +0 -0
  57. {verifiers-0.3.2.dev95 → verifiers-0.3.2.dev96}/verifiers/v1/configs/agent.py +0 -0
  58. {verifiers-0.3.2.dev95 → verifiers-0.3.2.dev96}/verifiers/v1/configs/cli/__init__.py +0 -0
  59. {verifiers-0.3.2.dev95 → verifiers-0.3.2.dev96}/verifiers/v1/configs/cli/debug.py +0 -0
  60. {verifiers-0.3.2.dev95 → verifiers-0.3.2.dev96}/verifiers/v1/configs/cli/env.py +0 -0
  61. {verifiers-0.3.2.dev95 → verifiers-0.3.2.dev96}/verifiers/v1/configs/cli/eval.py +0 -0
  62. {verifiers-0.3.2.dev95 → verifiers-0.3.2.dev96}/verifiers/v1/configs/cli/init.py +0 -0
  63. {verifiers-0.3.2.dev95 → verifiers-0.3.2.dev96}/verifiers/v1/configs/cli/replay.py +0 -0
  64. {verifiers-0.3.2.dev95 → verifiers-0.3.2.dev96}/verifiers/v1/configs/cli/validate.py +0 -0
  65. {verifiers-0.3.2.dev95 → verifiers-0.3.2.dev96}/verifiers/v1/configs/client.py +0 -0
  66. {verifiers-0.3.2.dev95 → verifiers-0.3.2.dev96}/verifiers/v1/configs/env.py +0 -0
  67. {verifiers-0.3.2.dev95 → verifiers-0.3.2.dev96}/verifiers/v1/configs/harness.py +0 -0
  68. {verifiers-0.3.2.dev95 → verifiers-0.3.2.dev96}/verifiers/v1/configs/judge.py +0 -0
  69. {verifiers-0.3.2.dev95 → verifiers-0.3.2.dev96}/verifiers/v1/configs/retries.py +0 -0
  70. {verifiers-0.3.2.dev95 → verifiers-0.3.2.dev96}/verifiers/v1/configs/runtime.py +0 -0
  71. {verifiers-0.3.2.dev95 → verifiers-0.3.2.dev96}/verifiers/v1/configs/serve.py +0 -0
  72. {verifiers-0.3.2.dev95 → verifiers-0.3.2.dev96}/verifiers/v1/configs/task.py +0 -0
  73. {verifiers-0.3.2.dev95 → verifiers-0.3.2.dev96}/verifiers/v1/configs/taskset.py +0 -0
  74. {verifiers-0.3.2.dev95 → verifiers-0.3.2.dev96}/verifiers/v1/dialects/__init__.py +0 -0
  75. {verifiers-0.3.2.dev95 → verifiers-0.3.2.dev96}/verifiers/v1/dialects/anthropic.py +0 -0
  76. {verifiers-0.3.2.dev95 → verifiers-0.3.2.dev96}/verifiers/v1/dialects/base.py +0 -0
  77. {verifiers-0.3.2.dev95 → verifiers-0.3.2.dev96}/verifiers/v1/dialects/chat.py +0 -0
  78. {verifiers-0.3.2.dev95 → verifiers-0.3.2.dev96}/verifiers/v1/dialects/responses.py +0 -0
  79. {verifiers-0.3.2.dev95 → verifiers-0.3.2.dev96}/verifiers/v1/env.py +0 -0
  80. {verifiers-0.3.2.dev95 → verifiers-0.3.2.dev96}/verifiers/v1/envs/__init__.py +0 -0
  81. {verifiers-0.3.2.dev95 → verifiers-0.3.2.dev96}/verifiers/v1/envs/agentic_judge/__init__.py +0 -0
  82. {verifiers-0.3.2.dev95 → verifiers-0.3.2.dev96}/verifiers/v1/envs/agentic_judge/env.py +0 -0
  83. {verifiers-0.3.2.dev95 → verifiers-0.3.2.dev96}/verifiers/v1/envs/best_of_n/__init__.py +0 -0
  84. {verifiers-0.3.2.dev95 → verifiers-0.3.2.dev96}/verifiers/v1/envs/best_of_n/env.py +0 -0
  85. {verifiers-0.3.2.dev95 → verifiers-0.3.2.dev96}/verifiers/v1/envs/isolated_verifier/__init__.py +0 -0
  86. {verifiers-0.3.2.dev95 → verifiers-0.3.2.dev96}/verifiers/v1/envs/isolated_verifier/env.py +0 -0
  87. {verifiers-0.3.2.dev95 → verifiers-0.3.2.dev96}/verifiers/v1/envs/shared_agentic_judge/__init__.py +0 -0
  88. {verifiers-0.3.2.dev95 → verifiers-0.3.2.dev96}/verifiers/v1/envs/single_agent/__init__.py +0 -0
  89. {verifiers-0.3.2.dev95 → verifiers-0.3.2.dev96}/verifiers/v1/envs/single_agent/env.py +0 -0
  90. {verifiers-0.3.2.dev95 → verifiers-0.3.2.dev96}/verifiers/v1/envs/user_sim/__init__.py +0 -0
  91. {verifiers-0.3.2.dev95 → verifiers-0.3.2.dev96}/verifiers/v1/envs/user_sim/env.py +0 -0
  92. {verifiers-0.3.2.dev95 → verifiers-0.3.2.dev96}/verifiers/v1/episode.py +0 -0
  93. {verifiers-0.3.2.dev95 → verifiers-0.3.2.dev96}/verifiers/v1/errors.py +0 -0
  94. {verifiers-0.3.2.dev95 → verifiers-0.3.2.dev96}/verifiers/v1/gepa/__init__.py +0 -0
  95. {verifiers-0.3.2.dev95 → verifiers-0.3.2.dev96}/verifiers/v1/gepa/adapter.py +0 -0
  96. {verifiers-0.3.2.dev95 → verifiers-0.3.2.dev96}/verifiers/v1/gepa/config.py +0 -0
  97. {verifiers-0.3.2.dev95 → verifiers-0.3.2.dev96}/verifiers/v1/gepa/dataset.py +0 -0
  98. {verifiers-0.3.2.dev95 → verifiers-0.3.2.dev96}/verifiers/v1/gepa/reflection.py +0 -0
  99. {verifiers-0.3.2.dev95 → verifiers-0.3.2.dev96}/verifiers/v1/gepa/runner.py +0 -0
  100. {verifiers-0.3.2.dev95 → verifiers-0.3.2.dev96}/verifiers/v1/graph.py +0 -0
  101. {verifiers-0.3.2.dev95 → verifiers-0.3.2.dev96}/verifiers/v1/harness.py +0 -0
  102. {verifiers-0.3.2.dev95 → verifiers-0.3.2.dev96}/verifiers/v1/harnesses/__init__.py +0 -0
  103. {verifiers-0.3.2.dev95 → verifiers-0.3.2.dev96}/verifiers/v1/harnesses/bash/__init__.py +0 -0
  104. {verifiers-0.3.2.dev95 → verifiers-0.3.2.dev96}/verifiers/v1/harnesses/bash/harness.py +0 -0
  105. {verifiers-0.3.2.dev95 → verifiers-0.3.2.dev96}/verifiers/v1/harnesses/browser_use/__init__.py +0 -0
  106. {verifiers-0.3.2.dev95 → verifiers-0.3.2.dev96}/verifiers/v1/harnesses/browser_use/harness.py +0 -0
  107. {verifiers-0.3.2.dev95 → verifiers-0.3.2.dev96}/verifiers/v1/harnesses/browser_use/program.py +0 -0
  108. {verifiers-0.3.2.dev95 → verifiers-0.3.2.dev96}/verifiers/v1/harnesses/claude_code/__init__.py +0 -0
  109. {verifiers-0.3.2.dev95 → verifiers-0.3.2.dev96}/verifiers/v1/harnesses/claude_code/harness.py +0 -0
  110. {verifiers-0.3.2.dev95 → verifiers-0.3.2.dev96}/verifiers/v1/harnesses/codex/__init__.py +0 -0
  111. {verifiers-0.3.2.dev95 → verifiers-0.3.2.dev96}/verifiers/v1/harnesses/codex/harness.py +0 -0
  112. {verifiers-0.3.2.dev95 → verifiers-0.3.2.dev96}/verifiers/v1/harnesses/hermes_agent/__init__.py +0 -0
  113. {verifiers-0.3.2.dev95 → verifiers-0.3.2.dev96}/verifiers/v1/harnesses/hermes_agent/harness.py +0 -0
  114. {verifiers-0.3.2.dev95 → verifiers-0.3.2.dev96}/verifiers/v1/harnesses/hermes_agent/program.py +0 -0
  115. {verifiers-0.3.2.dev95 → verifiers-0.3.2.dev96}/verifiers/v1/harnesses/kimi_code/__init__.py +0 -0
  116. {verifiers-0.3.2.dev95 → verifiers-0.3.2.dev96}/verifiers/v1/harnesses/kimi_code/harness.py +0 -0
  117. {verifiers-0.3.2.dev95 → verifiers-0.3.2.dev96}/verifiers/v1/harnesses/mini_swe_agent/__init__.py +0 -0
  118. {verifiers-0.3.2.dev95 → verifiers-0.3.2.dev96}/verifiers/v1/harnesses/mini_swe_agent/harness.py +0 -0
  119. {verifiers-0.3.2.dev95 → verifiers-0.3.2.dev96}/verifiers/v1/harnesses/mini_swe_agent/program.py +0 -0
  120. {verifiers-0.3.2.dev95 → verifiers-0.3.2.dev96}/verifiers/v1/harnesses/node.py +0 -0
  121. {verifiers-0.3.2.dev95 → verifiers-0.3.2.dev96}/verifiers/v1/harnesses/null/__init__.py +0 -0
  122. {verifiers-0.3.2.dev95 → verifiers-0.3.2.dev96}/verifiers/v1/harnesses/null/harness.py +0 -0
  123. {verifiers-0.3.2.dev95 → verifiers-0.3.2.dev96}/verifiers/v1/harnesses/openclaw/__init__.py +0 -0
  124. {verifiers-0.3.2.dev95 → verifiers-0.3.2.dev96}/verifiers/v1/harnesses/openclaw/harness.py +0 -0
  125. {verifiers-0.3.2.dev95 → verifiers-0.3.2.dev96}/verifiers/v1/harnesses/pi/__init__.py +0 -0
  126. {verifiers-0.3.2.dev95 → verifiers-0.3.2.dev96}/verifiers/v1/harnesses/pi/harness.py +0 -0
  127. {verifiers-0.3.2.dev95 → verifiers-0.3.2.dev96}/verifiers/v1/harnesses/prime_agent/__init__.py +0 -0
  128. {verifiers-0.3.2.dev95 → verifiers-0.3.2.dev96}/verifiers/v1/harnesses/prime_agent/harness.py +0 -0
  129. {verifiers-0.3.2.dev95 → verifiers-0.3.2.dev96}/verifiers/v1/harnesses/rlm/__init__.py +0 -0
  130. {verifiers-0.3.2.dev95 → verifiers-0.3.2.dev96}/verifiers/v1/harnesses/rlm/harness.py +0 -0
  131. {verifiers-0.3.2.dev95 → verifiers-0.3.2.dev96}/verifiers/v1/harnesses/terminus_2/__init__.py +0 -0
  132. {verifiers-0.3.2.dev95 → verifiers-0.3.2.dev96}/verifiers/v1/harnesses/terminus_2/harness.py +0 -0
  133. {verifiers-0.3.2.dev95 → verifiers-0.3.2.dev96}/verifiers/v1/harnesses/terminus_2/program.py +0 -0
  134. {verifiers-0.3.2.dev95 → verifiers-0.3.2.dev96}/verifiers/v1/harnesses/utils/__init__.py +0 -0
  135. {verifiers-0.3.2.dev95 → verifiers-0.3.2.dev96}/verifiers/v1/harnesses/utils/compaction.py +0 -0
  136. {verifiers-0.3.2.dev95 → verifiers-0.3.2.dev96}/verifiers/v1/harnesses/utils/install.py +0 -0
  137. {verifiers-0.3.2.dev95 → verifiers-0.3.2.dev96}/verifiers/v1/harnesses/utils/launch.py +0 -0
  138. {verifiers-0.3.2.dev95 → verifiers-0.3.2.dev96}/verifiers/v1/harnesses/utils/mcp.py +0 -0
  139. {verifiers-0.3.2.dev95 → verifiers-0.3.2.dev96}/verifiers/v1/interception/__init__.py +0 -0
  140. {verifiers-0.3.2.dev95 → verifiers-0.3.2.dev96}/verifiers/v1/interception/base.py +0 -0
  141. {verifiers-0.3.2.dev95 → verifiers-0.3.2.dev96}/verifiers/v1/interception/pool.py +0 -0
  142. {verifiers-0.3.2.dev95 → verifiers-0.3.2.dev96}/verifiers/v1/interception/server.py +0 -0
  143. {verifiers-0.3.2.dev95 → verifiers-0.3.2.dev96}/verifiers/v1/interception/tool.py +0 -0
  144. {verifiers-0.3.2.dev95 → verifiers-0.3.2.dev96}/verifiers/v1/interception/tunnel/__init__.py +0 -0
  145. {verifiers-0.3.2.dev95 → verifiers-0.3.2.dev96}/verifiers/v1/interception/tunnel/base.py +0 -0
  146. {verifiers-0.3.2.dev95 → verifiers-0.3.2.dev96}/verifiers/v1/interception/tunnel/custom.py +0 -0
  147. {verifiers-0.3.2.dev95 → verifiers-0.3.2.dev96}/verifiers/v1/interception/tunnel/prime.py +0 -0
  148. {verifiers-0.3.2.dev95 → verifiers-0.3.2.dev96}/verifiers/v1/judge.py +0 -0
  149. {verifiers-0.3.2.dev95 → verifiers-0.3.2.dev96}/verifiers/v1/judges/__init__.py +0 -0
  150. {verifiers-0.3.2.dev95 → verifiers-0.3.2.dev96}/verifiers/v1/judges/reference.py +0 -0
  151. {verifiers-0.3.2.dev95 → verifiers-0.3.2.dev96}/verifiers/v1/judges/reference.txt +0 -0
  152. {verifiers-0.3.2.dev95 → verifiers-0.3.2.dev96}/verifiers/v1/judges/rubric.py +0 -0
  153. {verifiers-0.3.2.dev95 → verifiers-0.3.2.dev96}/verifiers/v1/judges/rubric.txt +0 -0
  154. {verifiers-0.3.2.dev95 → verifiers-0.3.2.dev96}/verifiers/v1/mcp/__init__.py +0 -0
  155. {verifiers-0.3.2.dev95 → verifiers-0.3.2.dev96}/verifiers/v1/mcp/launch.py +0 -0
  156. {verifiers-0.3.2.dev95 → verifiers-0.3.2.dev96}/verifiers/v1/mcp/server.py +0 -0
  157. {verifiers-0.3.2.dev95 → verifiers-0.3.2.dev96}/verifiers/v1/mcp/toolset.py +0 -0
  158. {verifiers-0.3.2.dev95 → verifiers-0.3.2.dev96}/verifiers/v1/rollout.py +0 -0
  159. {verifiers-0.3.2.dev95 → verifiers-0.3.2.dev96}/verifiers/v1/runtimes/__init__.py +0 -0
  160. {verifiers-0.3.2.dev95 → verifiers-0.3.2.dev96}/verifiers/v1/runtimes/base.py +0 -0
  161. {verifiers-0.3.2.dev95 → verifiers-0.3.2.dev96}/verifiers/v1/runtimes/docker/__init__.py +0 -0
  162. {verifiers-0.3.2.dev95 → verifiers-0.3.2.dev96}/verifiers/v1/runtimes/docker/egress.py +0 -0
  163. {verifiers-0.3.2.dev95 → verifiers-0.3.2.dev96}/verifiers/v1/runtimes/limiters.py +0 -0
  164. {verifiers-0.3.2.dev95 → verifiers-0.3.2.dev96}/verifiers/v1/runtimes/modal.py +0 -0
  165. {verifiers-0.3.2.dev95 → verifiers-0.3.2.dev96}/verifiers/v1/runtimes/prime.py +0 -0
  166. {verifiers-0.3.2.dev95 → verifiers-0.3.2.dev96}/verifiers/v1/runtimes/subprocess.py +0 -0
  167. {verifiers-0.3.2.dev95 → verifiers-0.3.2.dev96}/verifiers/v1/semantic.py +0 -0
  168. {verifiers-0.3.2.dev95 → verifiers-0.3.2.dev96}/verifiers/v1/serve/__init__.py +0 -0
  169. {verifiers-0.3.2.dev95 → verifiers-0.3.2.dev96}/verifiers/v1/serve/client.py +0 -0
  170. {verifiers-0.3.2.dev95 → verifiers-0.3.2.dev96}/verifiers/v1/serve/encoding.py +0 -0
  171. {verifiers-0.3.2.dev95 → verifiers-0.3.2.dev96}/verifiers/v1/serve/pool.py +0 -0
  172. {verifiers-0.3.2.dev95 → verifiers-0.3.2.dev96}/verifiers/v1/serve/server.py +0 -0
  173. {verifiers-0.3.2.dev95 → verifiers-0.3.2.dev96}/verifiers/v1/serve/types.py +0 -0
  174. {verifiers-0.3.2.dev95 → verifiers-0.3.2.dev96}/verifiers/v1/session.py +0 -0
  175. {verifiers-0.3.2.dev95 → verifiers-0.3.2.dev96}/verifiers/v1/state.py +0 -0
  176. {verifiers-0.3.2.dev95 → verifiers-0.3.2.dev96}/verifiers/v1/task.py +0 -0
  177. {verifiers-0.3.2.dev95 → verifiers-0.3.2.dev96}/verifiers/v1/taskset.py +0 -0
  178. {verifiers-0.3.2.dev95 → verifiers-0.3.2.dev96}/verifiers/v1/tasksets/__init__.py +0 -0
  179. {verifiers-0.3.2.dev95 → verifiers-0.3.2.dev96}/verifiers/v1/tasksets/harbor/__init__.py +0 -0
  180. {verifiers-0.3.2.dev95 → verifiers-0.3.2.dev96}/verifiers/v1/tasksets/harbor/env.py +0 -0
  181. {verifiers-0.3.2.dev95 → verifiers-0.3.2.dev96}/verifiers/v1/tasksets/harbor/taskset.py +0 -0
  182. {verifiers-0.3.2.dev95 → verifiers-0.3.2.dev96}/verifiers/v1/tasksets/harbor/toolset.py +0 -0
  183. {verifiers-0.3.2.dev95 → verifiers-0.3.2.dev96}/verifiers/v1/tasksets/lean/__init__.py +0 -0
  184. {verifiers-0.3.2.dev95 → verifiers-0.3.2.dev96}/verifiers/v1/tasksets/lean/scoring.py +0 -0
  185. {verifiers-0.3.2.dev95 → verifiers-0.3.2.dev96}/verifiers/v1/tasksets/lean/taskset.py +0 -0
  186. {verifiers-0.3.2.dev95 → verifiers-0.3.2.dev96}/verifiers/v1/tasksets/nemo_gym/__init__.py +0 -0
  187. {verifiers-0.3.2.dev95 → verifiers-0.3.2.dev96}/verifiers/v1/tasksets/nemo_gym/response.py +0 -0
  188. {verifiers-0.3.2.dev95 → verifiers-0.3.2.dev96}/verifiers/v1/tasksets/nemo_gym/server.py +0 -0
  189. {verifiers-0.3.2.dev95 → verifiers-0.3.2.dev96}/verifiers/v1/tasksets/nemo_gym/taskset.py +0 -0
  190. {verifiers-0.3.2.dev95 → verifiers-0.3.2.dev96}/verifiers/v1/tasksets/nemo_gym/toolset.py +0 -0
  191. {verifiers-0.3.2.dev95 → verifiers-0.3.2.dev96}/verifiers/v1/tasksets/openenv/__init__.py +0 -0
  192. {verifiers-0.3.2.dev95 → verifiers-0.3.2.dev96}/verifiers/v1/tasksets/openenv/taskset.py +0 -0
  193. {verifiers-0.3.2.dev95 → verifiers-0.3.2.dev96}/verifiers/v1/tasksets/textarena/__init__.py +0 -0
  194. {verifiers-0.3.2.dev95 → verifiers-0.3.2.dev96}/verifiers/v1/tasksets/textarena/taskset.py +0 -0
  195. {verifiers-0.3.2.dev95 → verifiers-0.3.2.dev96}/verifiers/v1/trace.py +0 -0
  196. {verifiers-0.3.2.dev95 → verifiers-0.3.2.dev96}/verifiers/v1/types.py +0 -0
  197. {verifiers-0.3.2.dev95 → verifiers-0.3.2.dev96}/verifiers/v1/utils/__init__.py +0 -0
  198. {verifiers-0.3.2.dev95 → verifiers-0.3.2.dev96}/verifiers/v1/utils/aio.py +0 -0
  199. {verifiers-0.3.2.dev95 → verifiers-0.3.2.dev96}/verifiers/v1/utils/artifacts.py +0 -0
  200. {verifiers-0.3.2.dev95 → verifiers-0.3.2.dev96}/verifiers/v1/utils/compile.py +0 -0
  201. {verifiers-0.3.2.dev95 → verifiers-0.3.2.dev96}/verifiers/v1/utils/decorators.py +0 -0
  202. {verifiers-0.3.2.dev95 → verifiers-0.3.2.dev96}/verifiers/v1/utils/format.py +0 -0
  203. {verifiers-0.3.2.dev95 → verifiers-0.3.2.dev96}/verifiers/v1/utils/generic.py +0 -0
  204. {verifiers-0.3.2.dev95 → verifiers-0.3.2.dev96}/verifiers/v1/utils/git.py +0 -0
  205. {verifiers-0.3.2.dev95 → verifiers-0.3.2.dev96}/verifiers/v1/utils/image.py +0 -0
  206. {verifiers-0.3.2.dev95 → verifiers-0.3.2.dev96}/verifiers/v1/utils/interrupt.py +0 -0
  207. {verifiers-0.3.2.dev95 → verifiers-0.3.2.dev96}/verifiers/v1/utils/loaders.py +0 -0
  208. {verifiers-0.3.2.dev95 → verifiers-0.3.2.dev96}/verifiers/v1/utils/logging.py +0 -0
  209. {verifiers-0.3.2.dev95 → verifiers-0.3.2.dev96}/verifiers/v1/utils/memory.py +0 -0
  210. {verifiers-0.3.2.dev95 → verifiers-0.3.2.dev96}/verifiers/v1/utils/paths.py +0 -0
  211. {verifiers-0.3.2.dev95 → verifiers-0.3.2.dev96}/verifiers/v1/utils/platform.py +0 -0
  212. {verifiers-0.3.2.dev95 → verifiers-0.3.2.dev96}/verifiers/v1/utils/prime.py +0 -0
  213. {verifiers-0.3.2.dev95 → verifiers-0.3.2.dev96}/verifiers/v1/utils/retries.py +0 -0
  214. {verifiers-0.3.2.dev95 → verifiers-0.3.2.dev96}/verifiers/v1/utils/score.py +0 -0
  215. {verifiers-0.3.2.dev95 → verifiers-0.3.2.dev96}/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.dev95
3
+ Version: 0.3.2.dev96
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
@@ -18,6 +18,80 @@ def pair(a: str, b: str, id: str, *extra_marks):
18
18
  return pytest.param(a, b, marks=[*marks, *extra_marks], id=id)
19
19
 
20
20
 
21
+ @pytest.mark.asyncio
22
+ async def test_chat_harness_preserves_streamed_reasoning():
23
+ import json
24
+
25
+ import httpx
26
+ from openai import AsyncOpenAI
27
+
28
+ from verifiers.v1.harnesses.utils.core import chat
29
+
30
+ def chunk(text: str, finish_reason: str | None = None) -> dict:
31
+ return {
32
+ "id": "chatcmpl-test",
33
+ "object": "chat.completion.chunk",
34
+ "created": 0,
35
+ "model": "test-model",
36
+ "choices": [
37
+ {
38
+ "index": 0,
39
+ "delta": {
40
+ "role": "assistant",
41
+ "reasoning": text,
42
+ "reasoning_content": text,
43
+ "reasoning_details": [
44
+ {
45
+ "type": "reasoning.text",
46
+ "index": 0,
47
+ "id": "r1",
48
+ "format": "unknown",
49
+ "signature": "sig",
50
+ "text": text,
51
+ }
52
+ ],
53
+ },
54
+ "finish_reason": finish_reason,
55
+ }
56
+ ],
57
+ }
58
+
59
+ events = [chunk("Plan: "), chunk("call ls", "stop")]
60
+ content = "".join(f"data: {json.dumps(event)}\n\n" for event in events)
61
+ content += "data: [DONE]\n\n"
62
+
63
+ async def respond(request: httpx.Request) -> httpx.Response:
64
+ return httpx.Response(
65
+ 200,
66
+ content=content,
67
+ headers={"content-type": "text/event-stream"},
68
+ request=request,
69
+ )
70
+
71
+ async with httpx.AsyncClient(transport=httpx.MockTransport(respond)) as http_client:
72
+ client = AsyncOpenAI(
73
+ api_key="test",
74
+ base_url="https://example.test/v1",
75
+ http_client=http_client,
76
+ )
77
+ completion = await chat(client, "test-model", [], [])
78
+
79
+ message = completion.choices[0].message.model_dump(exclude_none=True)
80
+ assert message["role"] == "assistant"
81
+ assert message["reasoning"] == "Plan: call ls"
82
+ assert message["reasoning_content"] == "Plan: call ls"
83
+ assert message["reasoning_details"] == [
84
+ {
85
+ "type": "reasoning.text",
86
+ "index": 0,
87
+ "id": "r1",
88
+ "format": "unknown",
89
+ "signature": "sig",
90
+ "text": "Plan: call ls",
91
+ }
92
+ ]
93
+
94
+
21
95
  # harness x harness runtime: every harness once, both local runtimes hit (subprocess
22
96
  # only carries the in-house loops — the rest NEEDS_CONTAINER), one remote row per
23
97
  # provider. codex/claude-code are excluded here (unreliable on a no-op echo chat
@@ -181,6 +181,57 @@ def run_edit(path: str, old_str: str, new_str: str) -> str:
181
181
  return f"Edited {path}"
182
182
 
183
183
 
184
+ _STREAMED_MESSAGE_FIELDS = (
185
+ "role",
186
+ "reasoning",
187
+ "reasoning_content",
188
+ "reasoning_details",
189
+ )
190
+
191
+
192
+ def _accumulate_streamed_message(accumulated: dict, delta: dict) -> None:
193
+ """Accumulate message fields whose stream semantics differ from the SDK defaults."""
194
+ if role := delta.get("role"):
195
+ accumulated["role"] = role
196
+
197
+ for field_name in ("reasoning", "reasoning_content"):
198
+ if value := delta.get(field_name):
199
+ accumulated[field_name] = accumulated.get(field_name, "") + value
200
+
201
+ delta_details = delta.get("reasoning_details") or []
202
+ if not delta_details:
203
+ return
204
+ reasoning_details = accumulated.setdefault("reasoning_details", [])
205
+ for detail in delta_details:
206
+ previous = reasoning_details[-1] if reasoning_details else {}
207
+ detail_type = detail.get("type")
208
+ content_field = {
209
+ "reasoning.summary": "summary",
210
+ "reasoning.text": "text",
211
+ }.get(detail_type)
212
+ if (
213
+ content_field
214
+ and detail_type == previous.get("type")
215
+ and all(
216
+ previous.get(field_name) is None
217
+ or detail.get(field_name) is None
218
+ or previous[field_name] == detail[field_name]
219
+ for field_name in ("id", "index", "format")
220
+ )
221
+ ):
222
+ previous[content_field] = (previous.get(content_field) or "") + (
223
+ detail.get(content_field) or ""
224
+ )
225
+ for field_name in ("id", "index", "signature", "format"):
226
+ if (
227
+ previous.get(field_name) is None
228
+ and detail.get(field_name) is not None
229
+ ):
230
+ previous[field_name] = detail[field_name]
231
+ else:
232
+ reasoning_details.append(dict(detail))
233
+
234
+
184
235
  async def chat(
185
236
  client: AsyncOpenAI,
186
237
  model: str,
@@ -201,9 +252,18 @@ async def chat(
201
252
  raw_stream=raw_stream, response_format=omit, input_tools=[]
202
253
  ) as response:
203
254
  completion = None
255
+ message_overrides: dict[int, dict] = {}
204
256
  async for event in response:
205
257
  if event.type == "chunk":
206
258
  completion = event.snapshot
259
+ for choice in event.chunk.choices:
260
+ delta = choice.delta.model_dump(exclude_none=True)
261
+ if any(
262
+ delta.get(field_name) for field_name in _STREAMED_MESSAGE_FIELDS
263
+ ):
264
+ _accumulate_streamed_message(
265
+ message_overrides.setdefault(choice.index, {}), delta
266
+ )
207
267
  if (
208
268
  completion is None
209
269
  or not completion.choices
@@ -211,9 +271,10 @@ async def chat(
211
271
  ):
212
272
  raise RuntimeError("model stream ended before a completion finished")
213
273
  for choice in completion.choices:
214
- # Some providers repeat the role in each delta. The SDK concatenates
215
- # these strings, but the role is metadata, not incremental content.
216
- choice.message.role = "assistant"
274
+ overrides = message_overrides.setdefault(choice.index, {})
275
+ overrides.setdefault("role", "assistant")
276
+ for field_name, value in overrides.items():
277
+ setattr(choice.message, field_name, value)
217
278
  return completion
218
279
 
219
280
 
File without changes