verifiers 0.3.2.dev167__tar.gz → 0.3.2.dev168__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 (223) hide show
  1. {verifiers-0.3.2.dev167 → verifiers-0.3.2.dev168}/PKG-INFO +3 -1
  2. {verifiers-0.3.2.dev167 → verifiers-0.3.2.dev168}/pyproject.toml +6 -0
  3. {verifiers-0.3.2.dev167 → verifiers-0.3.2.dev168}/tests/v1/conftest.py +5 -4
  4. verifiers-0.3.2.dev168/tests/v1/test_configs.py +95 -0
  5. {verifiers-0.3.2.dev167 → verifiers-0.3.2.dev168}/tests/v1/test_e2e.py +19 -3
  6. {verifiers-0.3.2.dev167 → verifiers-0.3.2.dev168}/verifiers/v1/runtimes/__init__.py +9 -2
  7. verifiers-0.3.2.dev168/verifiers/v1/runtimes/e2b.py +711 -0
  8. verifiers-0.3.2.dev167/tests/v1/test_configs.py +0 -20
  9. {verifiers-0.3.2.dev167 → verifiers-0.3.2.dev168}/.gitignore +0 -0
  10. {verifiers-0.3.2.dev167 → verifiers-0.3.2.dev168}/LICENSE +0 -0
  11. {verifiers-0.3.2.dev167 → verifiers-0.3.2.dev168}/README.md +0 -0
  12. {verifiers-0.3.2.dev167 → verifiers-0.3.2.dev168}/tests/v1/fixtures/counter_tool_v1.py +0 -0
  13. {verifiers-0.3.2.dev167 → verifiers-0.3.2.dev168}/tests/v1/fixtures/duet_v1.py +0 -0
  14. {verifiers-0.3.2.dev167 → verifiers-0.3.2.dev168}/tests/v1/fixtures/echo_acp_resume_v1.py +0 -0
  15. {verifiers-0.3.2.dev167 → verifiers-0.3.2.dev168}/tests/v1/fixtures/echo_agentic_v1.py +0 -0
  16. {verifiers-0.3.2.dev167 → verifiers-0.3.2.dev168}/tests/v1/fixtures/echo_tool_v1.py +0 -0
  17. {verifiers-0.3.2.dev167 → verifiers-0.3.2.dev168}/tests/v1/fixtures/echo_user_sim_v1.py +0 -0
  18. {verifiers-0.3.2.dev167 → verifiers-0.3.2.dev168}/tests/v1/fixtures/echo_v1.py +0 -0
  19. {verifiers-0.3.2.dev167 → verifiers-0.3.2.dev168}/tests/v1/fixtures/pyproject.toml +0 -0
  20. {verifiers-0.3.2.dev167 → verifiers-0.3.2.dev168}/tests/v1/fixtures/tool_response_image_v1.py +0 -0
  21. {verifiers-0.3.2.dev167 → verifiers-0.3.2.dev168}/tests/v1/test_color_codeword_tasks.py +0 -0
  22. {verifiers-0.3.2.dev167 → verifiers-0.3.2.dev168}/tests/v1/test_envs.py +0 -0
  23. {verifiers-0.3.2.dev167 → verifiers-0.3.2.dev168}/tests/v1/test_graph.py +0 -0
  24. {verifiers-0.3.2.dev167 → verifiers-0.3.2.dev168}/tests/v1/test_judges.py +0 -0
  25. {verifiers-0.3.2.dev167 → verifiers-0.3.2.dev168}/tests/v1/test_platform_run.py +0 -0
  26. {verifiers-0.3.2.dev167 → verifiers-0.3.2.dev168}/tests/v1/test_scoring.py +0 -0
  27. {verifiers-0.3.2.dev167 → verifiers-0.3.2.dev168}/tests/v1/test_serve_delta.py +0 -0
  28. {verifiers-0.3.2.dev167 → verifiers-0.3.2.dev168}/tests/v1/test_taskset.py +0 -0
  29. {verifiers-0.3.2.dev167 → verifiers-0.3.2.dev168}/tests/v1/test_trace.py +0 -0
  30. {verifiers-0.3.2.dev167 → verifiers-0.3.2.dev168}/verifiers/__init__.py +0 -0
  31. {verifiers-0.3.2.dev167 → verifiers-0.3.2.dev168}/verifiers/v1/__init__.py +0 -0
  32. {verifiers-0.3.2.dev167 → verifiers-0.3.2.dev168}/verifiers/v1/acp/__init__.py +0 -0
  33. {verifiers-0.3.2.dev167 → verifiers-0.3.2.dev168}/verifiers/v1/acp/runner.py +0 -0
  34. {verifiers-0.3.2.dev167 → verifiers-0.3.2.dev168}/verifiers/v1/agent.py +0 -0
  35. {verifiers-0.3.2.dev167 → verifiers-0.3.2.dev168}/verifiers/v1/cli/__init__.py +0 -0
  36. {verifiers-0.3.2.dev167 → verifiers-0.3.2.dev168}/verifiers/v1/cli/dashboard/__init__.py +0 -0
  37. {verifiers-0.3.2.dev167 → verifiers-0.3.2.dev168}/verifiers/v1/cli/dashboard/base.py +0 -0
  38. {verifiers-0.3.2.dev167 → verifiers-0.3.2.dev168}/verifiers/v1/cli/dashboard/eval.py +0 -0
  39. {verifiers-0.3.2.dev167 → verifiers-0.3.2.dev168}/verifiers/v1/cli/dashboard/replay.py +0 -0
  40. {verifiers-0.3.2.dev167 → verifiers-0.3.2.dev168}/verifiers/v1/cli/dashboard/validate.py +0 -0
  41. {verifiers-0.3.2.dev167 → verifiers-0.3.2.dev168}/verifiers/v1/cli/debug.py +0 -0
  42. {verifiers-0.3.2.dev167 → verifiers-0.3.2.dev168}/verifiers/v1/cli/eval/__init__.py +0 -0
  43. {verifiers-0.3.2.dev167 → verifiers-0.3.2.dev168}/verifiers/v1/cli/eval/hint.py +0 -0
  44. {verifiers-0.3.2.dev167 → verifiers-0.3.2.dev168}/verifiers/v1/cli/eval/main.py +0 -0
  45. {verifiers-0.3.2.dev167 → verifiers-0.3.2.dev168}/verifiers/v1/cli/eval/resume.py +0 -0
  46. {verifiers-0.3.2.dev167 → verifiers-0.3.2.dev168}/verifiers/v1/cli/eval/runner.py +0 -0
  47. {verifiers-0.3.2.dev167 → verifiers-0.3.2.dev168}/verifiers/v1/cli/gepa.py +0 -0
  48. {verifiers-0.3.2.dev167 → verifiers-0.3.2.dev168}/verifiers/v1/cli/init.py +0 -0
  49. {verifiers-0.3.2.dev167 → verifiers-0.3.2.dev168}/verifiers/v1/cli/output.py +0 -0
  50. {verifiers-0.3.2.dev167 → verifiers-0.3.2.dev168}/verifiers/v1/cli/replay.py +0 -0
  51. {verifiers-0.3.2.dev167 → verifiers-0.3.2.dev168}/verifiers/v1/cli/resolve.py +0 -0
  52. {verifiers-0.3.2.dev167 → verifiers-0.3.2.dev168}/verifiers/v1/cli/resume.py +0 -0
  53. {verifiers-0.3.2.dev167 → verifiers-0.3.2.dev168}/verifiers/v1/cli/validate.py +0 -0
  54. {verifiers-0.3.2.dev167 → verifiers-0.3.2.dev168}/verifiers/v1/clients/__init__.py +0 -0
  55. {verifiers-0.3.2.dev167 → verifiers-0.3.2.dev168}/verifiers/v1/clients/base.py +0 -0
  56. {verifiers-0.3.2.dev167 → verifiers-0.3.2.dev168}/verifiers/v1/clients/client.py +0 -0
  57. {verifiers-0.3.2.dev167 → verifiers-0.3.2.dev168}/verifiers/v1/clients/eval.py +0 -0
  58. {verifiers-0.3.2.dev167 → verifiers-0.3.2.dev168}/verifiers/v1/clients/train.py +0 -0
  59. {verifiers-0.3.2.dev167 → verifiers-0.3.2.dev168}/verifiers/v1/configs/__init__.py +0 -0
  60. {verifiers-0.3.2.dev167 → verifiers-0.3.2.dev168}/verifiers/v1/configs/agent.py +0 -0
  61. {verifiers-0.3.2.dev167 → verifiers-0.3.2.dev168}/verifiers/v1/configs/cli/__init__.py +0 -0
  62. {verifiers-0.3.2.dev167 → verifiers-0.3.2.dev168}/verifiers/v1/configs/cli/debug.py +0 -0
  63. {verifiers-0.3.2.dev167 → verifiers-0.3.2.dev168}/verifiers/v1/configs/cli/env.py +0 -0
  64. {verifiers-0.3.2.dev167 → verifiers-0.3.2.dev168}/verifiers/v1/configs/cli/eval.py +0 -0
  65. {verifiers-0.3.2.dev167 → verifiers-0.3.2.dev168}/verifiers/v1/configs/cli/init.py +0 -0
  66. {verifiers-0.3.2.dev167 → verifiers-0.3.2.dev168}/verifiers/v1/configs/cli/replay.py +0 -0
  67. {verifiers-0.3.2.dev167 → verifiers-0.3.2.dev168}/verifiers/v1/configs/cli/validate.py +0 -0
  68. {verifiers-0.3.2.dev167 → verifiers-0.3.2.dev168}/verifiers/v1/configs/client.py +0 -0
  69. {verifiers-0.3.2.dev167 → verifiers-0.3.2.dev168}/verifiers/v1/configs/env.py +0 -0
  70. {verifiers-0.3.2.dev167 → verifiers-0.3.2.dev168}/verifiers/v1/configs/harness.py +0 -0
  71. {verifiers-0.3.2.dev167 → verifiers-0.3.2.dev168}/verifiers/v1/configs/judge.py +0 -0
  72. {verifiers-0.3.2.dev167 → verifiers-0.3.2.dev168}/verifiers/v1/configs/retries.py +0 -0
  73. {verifiers-0.3.2.dev167 → verifiers-0.3.2.dev168}/verifiers/v1/configs/runtime.py +0 -0
  74. {verifiers-0.3.2.dev167 → verifiers-0.3.2.dev168}/verifiers/v1/configs/select.py +0 -0
  75. {verifiers-0.3.2.dev167 → verifiers-0.3.2.dev168}/verifiers/v1/configs/serve.py +0 -0
  76. {verifiers-0.3.2.dev167 → verifiers-0.3.2.dev168}/verifiers/v1/configs/task.py +0 -0
  77. {verifiers-0.3.2.dev167 → verifiers-0.3.2.dev168}/verifiers/v1/configs/taskset.py +0 -0
  78. {verifiers-0.3.2.dev167 → verifiers-0.3.2.dev168}/verifiers/v1/dialects/__init__.py +0 -0
  79. {verifiers-0.3.2.dev167 → verifiers-0.3.2.dev168}/verifiers/v1/dialects/anthropic.py +0 -0
  80. {verifiers-0.3.2.dev167 → verifiers-0.3.2.dev168}/verifiers/v1/dialects/base.py +0 -0
  81. {verifiers-0.3.2.dev167 → verifiers-0.3.2.dev168}/verifiers/v1/dialects/chat.py +0 -0
  82. {verifiers-0.3.2.dev167 → verifiers-0.3.2.dev168}/verifiers/v1/dialects/responses.py +0 -0
  83. {verifiers-0.3.2.dev167 → verifiers-0.3.2.dev168}/verifiers/v1/env.py +0 -0
  84. {verifiers-0.3.2.dev167 → verifiers-0.3.2.dev168}/verifiers/v1/envs/__init__.py +0 -0
  85. {verifiers-0.3.2.dev167 → verifiers-0.3.2.dev168}/verifiers/v1/envs/agentic_judge/__init__.py +0 -0
  86. {verifiers-0.3.2.dev167 → verifiers-0.3.2.dev168}/verifiers/v1/envs/agentic_judge/env.py +0 -0
  87. {verifiers-0.3.2.dev167 → verifiers-0.3.2.dev168}/verifiers/v1/envs/best_of_n/__init__.py +0 -0
  88. {verifiers-0.3.2.dev167 → verifiers-0.3.2.dev168}/verifiers/v1/envs/best_of_n/env.py +0 -0
  89. {verifiers-0.3.2.dev167 → verifiers-0.3.2.dev168}/verifiers/v1/envs/isolated_verifier/__init__.py +0 -0
  90. {verifiers-0.3.2.dev167 → verifiers-0.3.2.dev168}/verifiers/v1/envs/isolated_verifier/env.py +0 -0
  91. {verifiers-0.3.2.dev167 → verifiers-0.3.2.dev168}/verifiers/v1/envs/shared_agentic_judge/__init__.py +0 -0
  92. {verifiers-0.3.2.dev167 → verifiers-0.3.2.dev168}/verifiers/v1/envs/single_agent/__init__.py +0 -0
  93. {verifiers-0.3.2.dev167 → verifiers-0.3.2.dev168}/verifiers/v1/envs/single_agent/env.py +0 -0
  94. {verifiers-0.3.2.dev167 → verifiers-0.3.2.dev168}/verifiers/v1/envs/user_sim/__init__.py +0 -0
  95. {verifiers-0.3.2.dev167 → verifiers-0.3.2.dev168}/verifiers/v1/envs/user_sim/env.py +0 -0
  96. {verifiers-0.3.2.dev167 → verifiers-0.3.2.dev168}/verifiers/v1/episode.py +0 -0
  97. {verifiers-0.3.2.dev167 → verifiers-0.3.2.dev168}/verifiers/v1/errors.py +0 -0
  98. {verifiers-0.3.2.dev167 → verifiers-0.3.2.dev168}/verifiers/v1/gepa/__init__.py +0 -0
  99. {verifiers-0.3.2.dev167 → verifiers-0.3.2.dev168}/verifiers/v1/gepa/adapter.py +0 -0
  100. {verifiers-0.3.2.dev167 → verifiers-0.3.2.dev168}/verifiers/v1/gepa/config.py +0 -0
  101. {verifiers-0.3.2.dev167 → verifiers-0.3.2.dev168}/verifiers/v1/gepa/dataset.py +0 -0
  102. {verifiers-0.3.2.dev167 → verifiers-0.3.2.dev168}/verifiers/v1/gepa/reflection.py +0 -0
  103. {verifiers-0.3.2.dev167 → verifiers-0.3.2.dev168}/verifiers/v1/gepa/runner.py +0 -0
  104. {verifiers-0.3.2.dev167 → verifiers-0.3.2.dev168}/verifiers/v1/graph.py +0 -0
  105. {verifiers-0.3.2.dev167 → verifiers-0.3.2.dev168}/verifiers/v1/harness.py +0 -0
  106. {verifiers-0.3.2.dev167 → verifiers-0.3.2.dev168}/verifiers/v1/harnesses/__init__.py +0 -0
  107. {verifiers-0.3.2.dev167 → verifiers-0.3.2.dev168}/verifiers/v1/harnesses/bash/__init__.py +0 -0
  108. {verifiers-0.3.2.dev167 → verifiers-0.3.2.dev168}/verifiers/v1/harnesses/bash/harness.py +0 -0
  109. {verifiers-0.3.2.dev167 → verifiers-0.3.2.dev168}/verifiers/v1/harnesses/browser_use/__init__.py +0 -0
  110. {verifiers-0.3.2.dev167 → verifiers-0.3.2.dev168}/verifiers/v1/harnesses/browser_use/harness.py +0 -0
  111. {verifiers-0.3.2.dev167 → verifiers-0.3.2.dev168}/verifiers/v1/harnesses/browser_use/program.py +0 -0
  112. {verifiers-0.3.2.dev167 → verifiers-0.3.2.dev168}/verifiers/v1/harnesses/claude_code/__init__.py +0 -0
  113. {verifiers-0.3.2.dev167 → verifiers-0.3.2.dev168}/verifiers/v1/harnesses/claude_code/harness.py +0 -0
  114. {verifiers-0.3.2.dev167 → verifiers-0.3.2.dev168}/verifiers/v1/harnesses/codex/__init__.py +0 -0
  115. {verifiers-0.3.2.dev167 → verifiers-0.3.2.dev168}/verifiers/v1/harnesses/codex/gate.mjs +0 -0
  116. {verifiers-0.3.2.dev167 → verifiers-0.3.2.dev168}/verifiers/v1/harnesses/codex/harness.py +0 -0
  117. {verifiers-0.3.2.dev167 → verifiers-0.3.2.dev168}/verifiers/v1/harnesses/hermes_agent/__init__.py +0 -0
  118. {verifiers-0.3.2.dev167 → verifiers-0.3.2.dev168}/verifiers/v1/harnesses/hermes_agent/harness.py +0 -0
  119. {verifiers-0.3.2.dev167 → verifiers-0.3.2.dev168}/verifiers/v1/harnesses/hermes_agent/program.py +0 -0
  120. {verifiers-0.3.2.dev167 → verifiers-0.3.2.dev168}/verifiers/v1/harnesses/kimi_code/__init__.py +0 -0
  121. {verifiers-0.3.2.dev167 → verifiers-0.3.2.dev168}/verifiers/v1/harnesses/kimi_code/harness.py +0 -0
  122. {verifiers-0.3.2.dev167 → verifiers-0.3.2.dev168}/verifiers/v1/harnesses/mini_swe_agent/__init__.py +0 -0
  123. {verifiers-0.3.2.dev167 → verifiers-0.3.2.dev168}/verifiers/v1/harnesses/mini_swe_agent/harness.py +0 -0
  124. {verifiers-0.3.2.dev167 → verifiers-0.3.2.dev168}/verifiers/v1/harnesses/mini_swe_agent/program.py +0 -0
  125. {verifiers-0.3.2.dev167 → verifiers-0.3.2.dev168}/verifiers/v1/harnesses/node.py +0 -0
  126. {verifiers-0.3.2.dev167 → verifiers-0.3.2.dev168}/verifiers/v1/harnesses/null/__init__.py +0 -0
  127. {verifiers-0.3.2.dev167 → verifiers-0.3.2.dev168}/verifiers/v1/harnesses/null/harness.py +0 -0
  128. {verifiers-0.3.2.dev167 → verifiers-0.3.2.dev168}/verifiers/v1/harnesses/openclaw/__init__.py +0 -0
  129. {verifiers-0.3.2.dev167 → verifiers-0.3.2.dev168}/verifiers/v1/harnesses/openclaw/harness.py +0 -0
  130. {verifiers-0.3.2.dev167 → verifiers-0.3.2.dev168}/verifiers/v1/harnesses/pi/__init__.py +0 -0
  131. {verifiers-0.3.2.dev167 → verifiers-0.3.2.dev168}/verifiers/v1/harnesses/pi/gate.mjs +0 -0
  132. {verifiers-0.3.2.dev167 → verifiers-0.3.2.dev168}/verifiers/v1/harnesses/pi/harness.py +0 -0
  133. {verifiers-0.3.2.dev167 → verifiers-0.3.2.dev168}/verifiers/v1/harnesses/prime_agent/__init__.py +0 -0
  134. {verifiers-0.3.2.dev167 → verifiers-0.3.2.dev168}/verifiers/v1/harnesses/prime_agent/harness.py +0 -0
  135. {verifiers-0.3.2.dev167 → verifiers-0.3.2.dev168}/verifiers/v1/harnesses/rlm/__init__.py +0 -0
  136. {verifiers-0.3.2.dev167 → verifiers-0.3.2.dev168}/verifiers/v1/harnesses/rlm/harness.py +0 -0
  137. {verifiers-0.3.2.dev167 → verifiers-0.3.2.dev168}/verifiers/v1/harnesses/terminus_2/__init__.py +0 -0
  138. {verifiers-0.3.2.dev167 → verifiers-0.3.2.dev168}/verifiers/v1/harnesses/terminus_2/harness.py +0 -0
  139. {verifiers-0.3.2.dev167 → verifiers-0.3.2.dev168}/verifiers/v1/harnesses/terminus_2/program.py +0 -0
  140. {verifiers-0.3.2.dev167 → verifiers-0.3.2.dev168}/verifiers/v1/harnesses/utils/__init__.py +0 -0
  141. {verifiers-0.3.2.dev167 → verifiers-0.3.2.dev168}/verifiers/v1/harnesses/utils/compaction.py +0 -0
  142. {verifiers-0.3.2.dev167 → verifiers-0.3.2.dev168}/verifiers/v1/harnesses/utils/core.py +0 -0
  143. {verifiers-0.3.2.dev167 → verifiers-0.3.2.dev168}/verifiers/v1/harnesses/utils/install.py +0 -0
  144. {verifiers-0.3.2.dev167 → verifiers-0.3.2.dev168}/verifiers/v1/harnesses/utils/launch.py +0 -0
  145. {verifiers-0.3.2.dev167 → verifiers-0.3.2.dev168}/verifiers/v1/harnesses/utils/mcp.py +0 -0
  146. {verifiers-0.3.2.dev167 → verifiers-0.3.2.dev168}/verifiers/v1/interception/__init__.py +0 -0
  147. {verifiers-0.3.2.dev167 → verifiers-0.3.2.dev168}/verifiers/v1/interception/base.py +0 -0
  148. {verifiers-0.3.2.dev167 → verifiers-0.3.2.dev168}/verifiers/v1/interception/pool.py +0 -0
  149. {verifiers-0.3.2.dev167 → verifiers-0.3.2.dev168}/verifiers/v1/interception/server.py +0 -0
  150. {verifiers-0.3.2.dev167 → verifiers-0.3.2.dev168}/verifiers/v1/interception/tunnel/__init__.py +0 -0
  151. {verifiers-0.3.2.dev167 → verifiers-0.3.2.dev168}/verifiers/v1/interception/tunnel/base.py +0 -0
  152. {verifiers-0.3.2.dev167 → verifiers-0.3.2.dev168}/verifiers/v1/interception/tunnel/custom.py +0 -0
  153. {verifiers-0.3.2.dev167 → verifiers-0.3.2.dev168}/verifiers/v1/interception/tunnel/prime.py +0 -0
  154. {verifiers-0.3.2.dev167 → verifiers-0.3.2.dev168}/verifiers/v1/judge.py +0 -0
  155. {verifiers-0.3.2.dev167 → verifiers-0.3.2.dev168}/verifiers/v1/judges/__init__.py +0 -0
  156. {verifiers-0.3.2.dev167 → verifiers-0.3.2.dev168}/verifiers/v1/judges/reference.py +0 -0
  157. {verifiers-0.3.2.dev167 → verifiers-0.3.2.dev168}/verifiers/v1/judges/reference.txt +0 -0
  158. {verifiers-0.3.2.dev167 → verifiers-0.3.2.dev168}/verifiers/v1/judges/rubric.py +0 -0
  159. {verifiers-0.3.2.dev167 → verifiers-0.3.2.dev168}/verifiers/v1/judges/rubric.txt +0 -0
  160. {verifiers-0.3.2.dev167 → verifiers-0.3.2.dev168}/verifiers/v1/mcp/__init__.py +0 -0
  161. {verifiers-0.3.2.dev167 → verifiers-0.3.2.dev168}/verifiers/v1/mcp/launch.py +0 -0
  162. {verifiers-0.3.2.dev167 → verifiers-0.3.2.dev168}/verifiers/v1/mcp/server.py +0 -0
  163. {verifiers-0.3.2.dev167 → verifiers-0.3.2.dev168}/verifiers/v1/mcp/toolset.py +0 -0
  164. {verifiers-0.3.2.dev167 → verifiers-0.3.2.dev168}/verifiers/v1/rollout.py +0 -0
  165. {verifiers-0.3.2.dev167 → verifiers-0.3.2.dev168}/verifiers/v1/runtimes/apptainer.py +0 -0
  166. {verifiers-0.3.2.dev167 → verifiers-0.3.2.dev168}/verifiers/v1/runtimes/base.py +0 -0
  167. {verifiers-0.3.2.dev167 → verifiers-0.3.2.dev168}/verifiers/v1/runtimes/container.py +0 -0
  168. {verifiers-0.3.2.dev167 → verifiers-0.3.2.dev168}/verifiers/v1/runtimes/docker/__init__.py +0 -0
  169. {verifiers-0.3.2.dev167 → verifiers-0.3.2.dev168}/verifiers/v1/runtimes/docker/egress.py +0 -0
  170. {verifiers-0.3.2.dev167 → verifiers-0.3.2.dev168}/verifiers/v1/runtimes/limiters.py +0 -0
  171. {verifiers-0.3.2.dev167 → verifiers-0.3.2.dev168}/verifiers/v1/runtimes/modal.py +0 -0
  172. {verifiers-0.3.2.dev167 → verifiers-0.3.2.dev168}/verifiers/v1/runtimes/prime.py +0 -0
  173. {verifiers-0.3.2.dev167 → verifiers-0.3.2.dev168}/verifiers/v1/runtimes/subprocess.py +0 -0
  174. {verifiers-0.3.2.dev167 → verifiers-0.3.2.dev168}/verifiers/v1/semantic.py +0 -0
  175. {verifiers-0.3.2.dev167 → verifiers-0.3.2.dev168}/verifiers/v1/serve/__init__.py +0 -0
  176. {verifiers-0.3.2.dev167 → verifiers-0.3.2.dev168}/verifiers/v1/serve/client.py +0 -0
  177. {verifiers-0.3.2.dev167 → verifiers-0.3.2.dev168}/verifiers/v1/serve/delta.py +0 -0
  178. {verifiers-0.3.2.dev167 → verifiers-0.3.2.dev168}/verifiers/v1/serve/encoding.py +0 -0
  179. {verifiers-0.3.2.dev167 → verifiers-0.3.2.dev168}/verifiers/v1/serve/pool.py +0 -0
  180. {verifiers-0.3.2.dev167 → verifiers-0.3.2.dev168}/verifiers/v1/serve/server.py +0 -0
  181. {verifiers-0.3.2.dev167 → verifiers-0.3.2.dev168}/verifiers/v1/serve/types.py +0 -0
  182. {verifiers-0.3.2.dev167 → verifiers-0.3.2.dev168}/verifiers/v1/session.py +0 -0
  183. {verifiers-0.3.2.dev167 → verifiers-0.3.2.dev168}/verifiers/v1/state.py +0 -0
  184. {verifiers-0.3.2.dev167 → verifiers-0.3.2.dev168}/verifiers/v1/task.py +0 -0
  185. {verifiers-0.3.2.dev167 → verifiers-0.3.2.dev168}/verifiers/v1/taskset.py +0 -0
  186. {verifiers-0.3.2.dev167 → verifiers-0.3.2.dev168}/verifiers/v1/tasksets/__init__.py +0 -0
  187. {verifiers-0.3.2.dev167 → verifiers-0.3.2.dev168}/verifiers/v1/tasksets/harbor/__init__.py +0 -0
  188. {verifiers-0.3.2.dev167 → verifiers-0.3.2.dev168}/verifiers/v1/tasksets/harbor/compose.py +0 -0
  189. {verifiers-0.3.2.dev167 → verifiers-0.3.2.dev168}/verifiers/v1/tasksets/harbor/env.py +0 -0
  190. {verifiers-0.3.2.dev167 → verifiers-0.3.2.dev168}/verifiers/v1/tasksets/harbor/taskset.py +0 -0
  191. {verifiers-0.3.2.dev167 → verifiers-0.3.2.dev168}/verifiers/v1/tasksets/harbor/toolset.py +0 -0
  192. {verifiers-0.3.2.dev167 → verifiers-0.3.2.dev168}/verifiers/v1/tasksets/nemo_gym/__init__.py +0 -0
  193. {verifiers-0.3.2.dev167 → verifiers-0.3.2.dev168}/verifiers/v1/tasksets/nemo_gym/response.py +0 -0
  194. {verifiers-0.3.2.dev167 → verifiers-0.3.2.dev168}/verifiers/v1/tasksets/nemo_gym/server.py +0 -0
  195. {verifiers-0.3.2.dev167 → verifiers-0.3.2.dev168}/verifiers/v1/tasksets/nemo_gym/taskset.py +0 -0
  196. {verifiers-0.3.2.dev167 → verifiers-0.3.2.dev168}/verifiers/v1/tasksets/nemo_gym/toolset.py +0 -0
  197. {verifiers-0.3.2.dev167 → verifiers-0.3.2.dev168}/verifiers/v1/tasksets/openenv/__init__.py +0 -0
  198. {verifiers-0.3.2.dev167 → verifiers-0.3.2.dev168}/verifiers/v1/tasksets/openenv/taskset.py +0 -0
  199. {verifiers-0.3.2.dev167 → verifiers-0.3.2.dev168}/verifiers/v1/tasksets/textarena/__init__.py +0 -0
  200. {verifiers-0.3.2.dev167 → verifiers-0.3.2.dev168}/verifiers/v1/tasksets/textarena/taskset.py +0 -0
  201. {verifiers-0.3.2.dev167 → verifiers-0.3.2.dev168}/verifiers/v1/trace.py +0 -0
  202. {verifiers-0.3.2.dev167 → verifiers-0.3.2.dev168}/verifiers/v1/types.py +0 -0
  203. {verifiers-0.3.2.dev167 → verifiers-0.3.2.dev168}/verifiers/v1/utils/__init__.py +0 -0
  204. {verifiers-0.3.2.dev167 → verifiers-0.3.2.dev168}/verifiers/v1/utils/aio.py +0 -0
  205. {verifiers-0.3.2.dev167 → verifiers-0.3.2.dev168}/verifiers/v1/utils/artifacts.py +0 -0
  206. {verifiers-0.3.2.dev167 → verifiers-0.3.2.dev168}/verifiers/v1/utils/compile.py +0 -0
  207. {verifiers-0.3.2.dev167 → verifiers-0.3.2.dev168}/verifiers/v1/utils/decorators.py +0 -0
  208. {verifiers-0.3.2.dev167 → verifiers-0.3.2.dev168}/verifiers/v1/utils/format.py +0 -0
  209. {verifiers-0.3.2.dev167 → verifiers-0.3.2.dev168}/verifiers/v1/utils/generic.py +0 -0
  210. {verifiers-0.3.2.dev167 → verifiers-0.3.2.dev168}/verifiers/v1/utils/git.py +0 -0
  211. {verifiers-0.3.2.dev167 → verifiers-0.3.2.dev168}/verifiers/v1/utils/image.py +0 -0
  212. {verifiers-0.3.2.dev167 → verifiers-0.3.2.dev168}/verifiers/v1/utils/interrupt.py +0 -0
  213. {verifiers-0.3.2.dev167 → verifiers-0.3.2.dev168}/verifiers/v1/utils/loaders.py +0 -0
  214. {verifiers-0.3.2.dev167 → verifiers-0.3.2.dev168}/verifiers/v1/utils/logging.py +0 -0
  215. {verifiers-0.3.2.dev167 → verifiers-0.3.2.dev168}/verifiers/v1/utils/memory.py +0 -0
  216. {verifiers-0.3.2.dev167 → verifiers-0.3.2.dev168}/verifiers/v1/utils/paths.py +0 -0
  217. {verifiers-0.3.2.dev167 → verifiers-0.3.2.dev168}/verifiers/v1/utils/platform.py +0 -0
  218. {verifiers-0.3.2.dev167 → verifiers-0.3.2.dev168}/verifiers/v1/utils/prime.py +0 -0
  219. {verifiers-0.3.2.dev167 → verifiers-0.3.2.dev168}/verifiers/v1/utils/retries.py +0 -0
  220. {verifiers-0.3.2.dev167 → verifiers-0.3.2.dev168}/verifiers/v1/utils/scope.py +0 -0
  221. {verifiers-0.3.2.dev167 → verifiers-0.3.2.dev168}/verifiers/v1/utils/score.py +0 -0
  222. {verifiers-0.3.2.dev167 → verifiers-0.3.2.dev168}/verifiers/v1/utils/trace_store.py +0 -0
  223. {verifiers-0.3.2.dev167 → verifiers-0.3.2.dev168}/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.dev167
3
+ Version: 0.3.2.dev168
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
@@ -46,6 +46,8 @@ Requires-Dist: tenacity>=8.5.0
46
46
  Requires-Dist: tomli-w>=1.0.0
47
47
  Requires-Dist: typing-extensions>=4.12.2
48
48
  Requires-Dist: uvicorn>=0.52.0
49
+ Provides-Extra: e2b
50
+ Requires-Dist: e2b<3,>=2.35.0; extra == 'e2b'
49
51
  Provides-Extra: harbor
50
52
  Requires-Dist: harbor==0.21.0; (python_full_version >= '3.12') and extra == 'harbor'
51
53
  Provides-Extra: modal
@@ -100,6 +100,11 @@ harbor = [
100
100
  modal = [
101
101
  "modal>=1.5.4",
102
102
  ]
103
+ e2b = [
104
+ # <3: the runtime swaps the SDK command handle's private stream decoders for
105
+ # byte-accurate live output (see runtimes/e2b.py _byte_handle).
106
+ "e2b>=2.35.0,<3",
107
+ ]
103
108
  openenv = [
104
109
  "openenv>=0.4.1",
105
110
  ]
@@ -228,6 +233,7 @@ markers = [
228
233
  "apptainer: v1 e2e cases touching the apptainer runtime",
229
234
  "prime: v1 e2e cases touching the prime runtime (real sandbox + tunnel; local-only, excluded in CI)",
230
235
  "modal: v1 e2e cases touching the modal runtime (local-only setup; excluded in CI)",
236
+ "e2b: v1 e2e cases touching the e2b runtime (real sandbox; local-only, excluded in CI)",
231
237
  "colocated: v1 e2e cases with a user/tool server colocated in the harness runtime",
232
238
  "null: v1 e2e cases on the null harness",
233
239
  "bash: v1 e2e cases on the bash harness",
@@ -16,20 +16,21 @@ one without `indirect=True` fails loudly.
16
16
 
17
17
  Every combination carries its axes' pytest marks, so subsets select with `-m`:
18
18
 
19
- uv run pytest tests/v1 -n auto # everything (needs modal setup)
19
+ uv run pytest tests/v1 -n auto # everything (needs remote setup)
20
20
  uv run pytest tests/v1 -n auto -m "not e2e" # deterministic CI matrix
21
- uv run pytest tests/v1 -n auto -m "e2e and not prime and not modal" # live CI job
21
+ uv run pytest tests/v1 -n auto -m "e2e and not prime and not modal and not e2b" # live CI job
22
22
  uv run pytest tests/v1 -n auto -m docker # any case touching the docker runtime
23
23
  uv run pytest tests/v1 -n auto -m bash # only the bash harness
24
24
  uv run pytest tests/v1 -n auto -m prime # only prime (real sandboxes; local)
25
25
  uv run pytest tests/v1 -n auto -m modal # only modal (needs local setup)
26
+ uv run pytest tests/v1 -n auto -m e2b # only e2b (real sandboxes; local)
26
27
 
27
- Marks: runtimes `subprocess` / `docker` / `podman` / `apptainer` / `prime` / `modal`, placement `colocated`,
28
+ Marks: runtimes `subprocess` / `docker` / `podman` / `apptainer` / `prime` / `modal` / `e2b`, placement `colocated`,
28
29
  harnesses `null` / `bash` / `rlm` / `kimi_code` / `pi` / `openclaw` / `codex` /
29
30
  `claude_code` / `hermes_agent`.
30
31
  A mark is applied per axis, so it selects every case touching that value on ANY axis; for one exact
31
32
  combination use `-k` on the test id (e.g. `-k "harness-in-docker-with-tool-in-subprocess"`).
32
- prime/modal provision real remote sandboxes (slow, infra-flaky, need setup), so they're local-only.
33
+ prime/modal/e2b provision real remote sandboxes (slow, infra-flaky, need setup), so they're local-only.
33
34
  CI runs deterministic tests across the Python matrix and the remaining live E2Es once.
34
35
  """
35
36
 
@@ -0,0 +1,95 @@
1
+ """Every checked-in v1 eval config parses.
2
+
3
+ Mirrors prime-rl's config test: glob the configs and assert each validates into its config
4
+ type. The root `configs/*.toml` are the `uv run vf-eval @ <file>` v1 configs (EvalConfig).
5
+ """
6
+
7
+ import tomllib
8
+ from pathlib import Path
9
+
10
+ import pytest
11
+
12
+ from verifiers.v1.configs.cli.eval import EvalConfig
13
+ from verifiers.v1.runtimes import E2BConfig
14
+ from verifiers.v1.runtimes.e2b import _egress_update
15
+
16
+ CONFIGS = sorted((Path(__file__).resolve().parents[2] / "configs").glob("*.toml"))
17
+
18
+
19
+ @pytest.mark.parametrize("path", CONFIGS, ids=lambda p: p.name)
20
+ def test_eval_config_parses(path: Path) -> None:
21
+ config = EvalConfig.model_validate(tomllib.load(path.open("rb")))
22
+ assert config.env.taskset.id
23
+
24
+
25
+ @pytest.mark.parametrize(
26
+ "rule",
27
+ [
28
+ "",
29
+ "https://api.example.com",
30
+ "example.com:8443",
31
+ "example.com/path",
32
+ "user@example.com",
33
+ "10.0.0.0/99",
34
+ "example..com",
35
+ ],
36
+ )
37
+ def test_e2b_config_rejects_unenforceable_egress_rules(rule: str) -> None:
38
+ with pytest.raises(ValueError, match="allow rules"):
39
+ E2BConfig(allow=[rule])
40
+
41
+
42
+ @pytest.mark.parametrize("rule", ["api.example.com", "*.example.com"])
43
+ def test_e2b_config_rejects_hostname_block_rules(rule: str) -> None:
44
+ with pytest.raises(ValueError, match="block rules must be IP addresses or CIDR"):
45
+ E2BConfig(block=[rule])
46
+
47
+
48
+ @pytest.mark.parametrize(
49
+ "rule",
50
+ [
51
+ "api.example.com",
52
+ "*.example.com",
53
+ "10.0.0.1",
54
+ "10.0.0.0/24",
55
+ "2001:db8::1",
56
+ "2001:db8::/32",
57
+ ],
58
+ )
59
+ def test_e2b_config_accepts_supported_egress_rules(rule: str) -> None:
60
+ assert E2BConfig(allow=[rule]).allow == [rule]
61
+
62
+
63
+ @pytest.mark.parametrize(
64
+ "rule", ["10.0.0.1", "10.0.0.0/24", "2001:db8::1", "2001:db8::/32"]
65
+ )
66
+ def test_e2b_config_accepts_supported_block_rules(rule: str) -> None:
67
+ assert E2BConfig(block=[rule]).block == [rule]
68
+
69
+
70
+ def test_e2b_egress_update_states_the_complete_policy() -> None:
71
+ # The security-critical policy table: whether a "restricted" sandbox actually
72
+ # gets a deny-everything floor, with framework routes kept reachable. No e2e
73
+ # placement runs network-restricted, so this table is pinned here.
74
+ routes = ["https://tunnel.example.com/intercept"]
75
+
76
+ unrestricted = _egress_update(E2BConfig(), None)
77
+ assert unrestricted == {"allow_internet_access": True}
78
+
79
+ blocklist = _egress_update(E2BConfig(block=["203.0.113.0/24"]), routes)
80
+ assert blocklist == {"deny_out": ["203.0.113.0/24"]}
81
+
82
+ allowlist = _egress_update(E2BConfig(allow=["api.example.com"]), routes)
83
+ assert allowlist == {
84
+ "allow_out": ["tunnel.example.com", "api.example.com"],
85
+ "deny_out": ["0.0.0.0/0"],
86
+ }
87
+
88
+ framework_only = _egress_update(E2BConfig(allow=[]), routes)
89
+ assert framework_only == {
90
+ "allow_out": ["tunnel.example.com"],
91
+ "deny_out": ["0.0.0.0/0"],
92
+ }
93
+
94
+ no_routes = _egress_update(E2BConfig(allow=[]), [])
95
+ assert no_routes == {"allow_internet_access": False}
@@ -2,8 +2,8 @@
2
2
 
3
3
  Placement coverage is pairwise (see tests/v1/conftest.py): each list below names the
4
4
  combinations a test runs — every axis value at least once plus the cross-boundary pairs
5
- with distinct networking — instead of fanning the full cross product. prime/modal rows
6
- are local-only (their marks are excluded in CI)."""
5
+ with distinct networking — instead of fanning the full cross product. prime/modal/e2b
6
+ rows are local-only (their marks are excluded in CI)."""
7
7
 
8
8
  import shutil
9
9
  import subprocess
@@ -142,6 +142,7 @@ CHAT_PLACEMENTS = [
142
142
  ),
143
143
  pair("bash", "prime", "bash-harness-in-prime"),
144
144
  pair("bash", "modal", "bash-harness-in-modal"),
145
+ pair("bash", "e2b", "bash-harness-in-e2b"),
145
146
  ]
146
147
 
147
148
  # harness x harness runtime for the shell task: every coding agent once (null is a chat
@@ -176,6 +177,7 @@ AGENTIC_PLACEMENTS = [
176
177
  marks=[mark.bash, mark.modal],
177
178
  id="bash-harness-in-modal-framework-only",
178
179
  ),
180
+ pair("bash", "e2b", "bash-harness-in-e2b"),
179
181
  ]
180
182
 
181
183
  # The scripted user runs in the eval process itself (no placement axis); the harness
@@ -185,6 +187,7 @@ USER_RUNTIMES = [
185
187
  pytest.param("docker", marks=[mark.docker], id="harness-in-docker"),
186
188
  pytest.param("prime", marks=[mark.prime], id="harness-in-prime"),
187
189
  pytest.param("modal", marks=[mark.modal], id="harness-in-modal"),
190
+ pytest.param("e2b", marks=[mark.e2b], id="harness-in-e2b"),
188
191
  ]
189
192
 
190
193
  # ACP-backed harnesses: each must preserve an exchange across interaction segments and
@@ -218,6 +221,13 @@ ACP_RESUME_PLACEMENTS = [
218
221
  ),
219
222
  pair("openclaw", "docker", "openclaw-acp-in-docker"),
220
223
  pair("rlm", "prime", "rlm-acp-in-prime-vm"),
224
+ # Give RLM 2 GB for ACP session startup.
225
+ pytest.param(
226
+ "rlm",
227
+ {"type": "e2b", "memory": 2.0},
228
+ marks=[mark.rlm, mark.e2b],
229
+ id="rlm-acp-in-e2b",
230
+ ),
221
231
  pytest.param(
222
232
  "prime-agent",
223
233
  "prime",
@@ -247,6 +257,8 @@ TOOL_PLACEMENTS = [
247
257
  pair("prime", "colocated", "harness-in-prime-with-tool-colocated"),
248
258
  pair("modal", "colocated", "harness-in-modal-with-tool-colocated"),
249
259
  pair("subprocess", "modal", "harness-in-subprocess-with-tool-in-modal"),
260
+ pair("e2b", "colocated", "harness-in-e2b-with-tool-colocated"),
261
+ pair("subprocess", "e2b", "harness-in-subprocess-with-tool-in-e2b"),
250
262
  ]
251
263
 
252
264
  # The state channel rides the same reachability as TOOL_PLACEMENTS; cover each axis
@@ -256,6 +268,7 @@ TOOL_STATE_PLACEMENTS = [
256
268
  pair("docker", "subprocess", "harness-in-docker-with-tool-in-subprocess"),
257
269
  pair("subprocess", "docker", "harness-in-subprocess-with-tool-in-docker"),
258
270
  pair("modal", "colocated", "harness-in-modal-with-tool-colocated"),
271
+ pair("e2b", "colocated", "harness-in-e2b-with-tool-colocated"),
259
272
  ]
260
273
 
261
274
  # Shared servers always run in their own runtime (colocation is per-rollout, shared is
@@ -265,6 +278,7 @@ SHARED_TOOL_PLACEMENTS = [
265
278
  pair("docker", "docker", "harness-in-docker-with-tool-in-docker"),
266
279
  pair("subprocess", "docker", "harness-in-subprocess-with-tool-in-docker"),
267
280
  pair("modal", "modal", "harness-in-modal-with-tool-in-modal"),
281
+ pair("e2b", "e2b", "harness-in-e2b-with-tool-in-e2b"),
268
282
  ]
269
283
 
270
284
 
@@ -389,7 +403,9 @@ async def test_acp_resume_with_tool(run_v1, harness, harness_runtime, tmp_path):
389
403
  (trace,) = await run_v1(
390
404
  "echo-acp-resume-v1",
391
405
  harness=harness,
392
- runtime={"type": harness_runtime},
406
+ runtime=harness_runtime
407
+ if isinstance(harness_runtime, dict)
408
+ else {"type": harness_runtime},
393
409
  output_dir=tmp_path,
394
410
  max_turns=8,
395
411
  max_tokens=8192,
@@ -25,6 +25,7 @@ from verifiers.v1.runtimes.docker import (
25
25
  PodmanRuntime,
26
26
  PodmanRuntimeInfo,
27
27
  )
28
+ from verifiers.v1.runtimes.e2b import E2BConfig, E2BRuntime, E2BRuntimeInfo
28
29
  from verifiers.v1.runtimes.modal import ModalConfig, ModalRuntime, ModalRuntimeInfo
29
30
  from verifiers.v1.runtimes.prime import (
30
31
  PrimeConfig,
@@ -44,7 +45,8 @@ RuntimeConfig = Annotated[
44
45
  | PodmanConfig
45
46
  | ApptainerConfig
46
47
  | PrimeConfig
47
- | ModalConfig,
48
+ | ModalConfig
49
+ | E2BConfig,
48
50
  Field(discriminator="type"),
49
51
  ]
50
52
 
@@ -54,7 +56,8 @@ RuntimeInfo = Annotated[
54
56
  | PodmanRuntimeInfo
55
57
  | ApptainerRuntimeInfo
56
58
  | PrimeRuntimeInfo
57
- | ModalRuntimeInfo,
59
+ | ModalRuntimeInfo
60
+ | E2BRuntimeInfo,
58
61
  Field(discriminator="type"),
59
62
  ]
60
63
 
@@ -67,6 +70,7 @@ def _runtime_cls(config: RuntimeConfig) -> type[Runtime]:
67
70
  "apptainer": ApptainerRuntime,
68
71
  "prime": PrimeRuntime,
69
72
  "modal": ModalRuntime,
73
+ "e2b": E2BRuntime,
70
74
  }[config.type]
71
75
 
72
76
 
@@ -109,6 +113,9 @@ __all__ = [
109
113
  "DockerConfig",
110
114
  "DockerRuntime",
111
115
  "DockerRuntimeInfo",
116
+ "E2BConfig",
117
+ "E2BRuntime",
118
+ "E2BRuntimeInfo",
112
119
  "ModalConfig",
113
120
  "ModalRuntime",
114
121
  "ModalRuntimeInfo",