verifiers 0.3.2.dev200__tar.gz → 0.3.2.dev204__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 (228) hide show
  1. {verifiers-0.3.2.dev200 → verifiers-0.3.2.dev204}/PKG-INFO +2 -2
  2. {verifiers-0.3.2.dev200 → verifiers-0.3.2.dev204}/pyproject.toml +1 -1
  3. verifiers-0.3.2.dev204/tests/v1/test_tunnel_watchdog.py +71 -0
  4. {verifiers-0.3.2.dev200 → verifiers-0.3.2.dev204}/verifiers/v1/interception/tunnel/prime.py +56 -5
  5. {verifiers-0.3.2.dev200 → verifiers-0.3.2.dev204}/.gitignore +0 -0
  6. {verifiers-0.3.2.dev200 → verifiers-0.3.2.dev204}/LICENSE +0 -0
  7. {verifiers-0.3.2.dev200 → verifiers-0.3.2.dev204}/README.md +0 -0
  8. {verifiers-0.3.2.dev200 → verifiers-0.3.2.dev204}/tests/v1/conftest.py +0 -0
  9. {verifiers-0.3.2.dev200 → verifiers-0.3.2.dev204}/tests/v1/fixtures/agent_user_v1.py +0 -0
  10. {verifiers-0.3.2.dev200 → verifiers-0.3.2.dev204}/tests/v1/fixtures/counter_tool_v1.py +0 -0
  11. {verifiers-0.3.2.dev200 → verifiers-0.3.2.dev204}/tests/v1/fixtures/delivery_behaviors.py +0 -0
  12. {verifiers-0.3.2.dev200 → verifiers-0.3.2.dev204}/tests/v1/fixtures/duet_v1.py +0 -0
  13. {verifiers-0.3.2.dev200 → verifiers-0.3.2.dev204}/tests/v1/fixtures/echo_acp_resume_v1.py +0 -0
  14. {verifiers-0.3.2.dev200 → verifiers-0.3.2.dev204}/tests/v1/fixtures/echo_agentic_v1.py +0 -0
  15. {verifiers-0.3.2.dev200 → verifiers-0.3.2.dev204}/tests/v1/fixtures/echo_tool_v1.py +0 -0
  16. {verifiers-0.3.2.dev200 → verifiers-0.3.2.dev204}/tests/v1/fixtures/echo_user_sim_v1.py +0 -0
  17. {verifiers-0.3.2.dev200 → verifiers-0.3.2.dev204}/tests/v1/fixtures/echo_v1.py +0 -0
  18. {verifiers-0.3.2.dev200 → verifiers-0.3.2.dev204}/tests/v1/fixtures/pyproject.toml +0 -0
  19. {verifiers-0.3.2.dev200 → verifiers-0.3.2.dev204}/tests/v1/fixtures/tool_response_image_v1.py +0 -0
  20. {verifiers-0.3.2.dev200 → verifiers-0.3.2.dev204}/tests/v1/test_color_codeword_tasks.py +0 -0
  21. {verifiers-0.3.2.dev200 → verifiers-0.3.2.dev204}/tests/v1/test_configs.py +0 -0
  22. {verifiers-0.3.2.dev200 → verifiers-0.3.2.dev204}/tests/v1/test_delivery_behaviors.py +0 -0
  23. {verifiers-0.3.2.dev200 → verifiers-0.3.2.dev204}/tests/v1/test_e2e.py +0 -0
  24. {verifiers-0.3.2.dev200 → verifiers-0.3.2.dev204}/tests/v1/test_envs.py +0 -0
  25. {verifiers-0.3.2.dev200 → verifiers-0.3.2.dev204}/tests/v1/test_graph.py +0 -0
  26. {verifiers-0.3.2.dev200 → verifiers-0.3.2.dev204}/tests/v1/test_judges.py +0 -0
  27. {verifiers-0.3.2.dev200 → verifiers-0.3.2.dev204}/tests/v1/test_platform_run.py +0 -0
  28. {verifiers-0.3.2.dev200 → verifiers-0.3.2.dev204}/tests/v1/test_scoring.py +0 -0
  29. {verifiers-0.3.2.dev200 → verifiers-0.3.2.dev204}/tests/v1/test_serve_delta.py +0 -0
  30. {verifiers-0.3.2.dev200 → verifiers-0.3.2.dev204}/tests/v1/test_taskset.py +0 -0
  31. {verifiers-0.3.2.dev200 → verifiers-0.3.2.dev204}/tests/v1/test_trace.py +0 -0
  32. {verifiers-0.3.2.dev200 → verifiers-0.3.2.dev204}/verifiers/__init__.py +0 -0
  33. {verifiers-0.3.2.dev200 → verifiers-0.3.2.dev204}/verifiers/v1/__init__.py +0 -0
  34. {verifiers-0.3.2.dev200 → verifiers-0.3.2.dev204}/verifiers/v1/acp/__init__.py +0 -0
  35. {verifiers-0.3.2.dev200 → verifiers-0.3.2.dev204}/verifiers/v1/acp/runner.py +0 -0
  36. {verifiers-0.3.2.dev200 → verifiers-0.3.2.dev204}/verifiers/v1/agent.py +0 -0
  37. {verifiers-0.3.2.dev200 → verifiers-0.3.2.dev204}/verifiers/v1/cli/__init__.py +0 -0
  38. {verifiers-0.3.2.dev200 → verifiers-0.3.2.dev204}/verifiers/v1/cli/dashboard/__init__.py +0 -0
  39. {verifiers-0.3.2.dev200 → verifiers-0.3.2.dev204}/verifiers/v1/cli/dashboard/base.py +0 -0
  40. {verifiers-0.3.2.dev200 → verifiers-0.3.2.dev204}/verifiers/v1/cli/dashboard/eval.py +0 -0
  41. {verifiers-0.3.2.dev200 → verifiers-0.3.2.dev204}/verifiers/v1/cli/dashboard/replay.py +0 -0
  42. {verifiers-0.3.2.dev200 → verifiers-0.3.2.dev204}/verifiers/v1/cli/dashboard/validate.py +0 -0
  43. {verifiers-0.3.2.dev200 → verifiers-0.3.2.dev204}/verifiers/v1/cli/debug.py +0 -0
  44. {verifiers-0.3.2.dev200 → verifiers-0.3.2.dev204}/verifiers/v1/cli/eval/__init__.py +0 -0
  45. {verifiers-0.3.2.dev200 → verifiers-0.3.2.dev204}/verifiers/v1/cli/eval/hint.py +0 -0
  46. {verifiers-0.3.2.dev200 → verifiers-0.3.2.dev204}/verifiers/v1/cli/eval/main.py +0 -0
  47. {verifiers-0.3.2.dev200 → verifiers-0.3.2.dev204}/verifiers/v1/cli/eval/resume.py +0 -0
  48. {verifiers-0.3.2.dev200 → verifiers-0.3.2.dev204}/verifiers/v1/cli/eval/runner.py +0 -0
  49. {verifiers-0.3.2.dev200 → verifiers-0.3.2.dev204}/verifiers/v1/cli/gepa.py +0 -0
  50. {verifiers-0.3.2.dev200 → verifiers-0.3.2.dev204}/verifiers/v1/cli/init.py +0 -0
  51. {verifiers-0.3.2.dev200 → verifiers-0.3.2.dev204}/verifiers/v1/cli/output.py +0 -0
  52. {verifiers-0.3.2.dev200 → verifiers-0.3.2.dev204}/verifiers/v1/cli/replay.py +0 -0
  53. {verifiers-0.3.2.dev200 → verifiers-0.3.2.dev204}/verifiers/v1/cli/resolve.py +0 -0
  54. {verifiers-0.3.2.dev200 → verifiers-0.3.2.dev204}/verifiers/v1/cli/resume.py +0 -0
  55. {verifiers-0.3.2.dev200 → verifiers-0.3.2.dev204}/verifiers/v1/cli/validate.py +0 -0
  56. {verifiers-0.3.2.dev200 → verifiers-0.3.2.dev204}/verifiers/v1/clients/__init__.py +0 -0
  57. {verifiers-0.3.2.dev200 → verifiers-0.3.2.dev204}/verifiers/v1/clients/base.py +0 -0
  58. {verifiers-0.3.2.dev200 → verifiers-0.3.2.dev204}/verifiers/v1/clients/client.py +0 -0
  59. {verifiers-0.3.2.dev200 → verifiers-0.3.2.dev204}/verifiers/v1/clients/eval.py +0 -0
  60. {verifiers-0.3.2.dev200 → verifiers-0.3.2.dev204}/verifiers/v1/clients/train.py +0 -0
  61. {verifiers-0.3.2.dev200 → verifiers-0.3.2.dev204}/verifiers/v1/configs/__init__.py +0 -0
  62. {verifiers-0.3.2.dev200 → verifiers-0.3.2.dev204}/verifiers/v1/configs/agent.py +0 -0
  63. {verifiers-0.3.2.dev200 → verifiers-0.3.2.dev204}/verifiers/v1/configs/cli/__init__.py +0 -0
  64. {verifiers-0.3.2.dev200 → verifiers-0.3.2.dev204}/verifiers/v1/configs/cli/debug.py +0 -0
  65. {verifiers-0.3.2.dev200 → verifiers-0.3.2.dev204}/verifiers/v1/configs/cli/env.py +0 -0
  66. {verifiers-0.3.2.dev200 → verifiers-0.3.2.dev204}/verifiers/v1/configs/cli/eval.py +0 -0
  67. {verifiers-0.3.2.dev200 → verifiers-0.3.2.dev204}/verifiers/v1/configs/cli/init.py +0 -0
  68. {verifiers-0.3.2.dev200 → verifiers-0.3.2.dev204}/verifiers/v1/configs/cli/replay.py +0 -0
  69. {verifiers-0.3.2.dev200 → verifiers-0.3.2.dev204}/verifiers/v1/configs/cli/validate.py +0 -0
  70. {verifiers-0.3.2.dev200 → verifiers-0.3.2.dev204}/verifiers/v1/configs/client.py +0 -0
  71. {verifiers-0.3.2.dev200 → verifiers-0.3.2.dev204}/verifiers/v1/configs/env.py +0 -0
  72. {verifiers-0.3.2.dev200 → verifiers-0.3.2.dev204}/verifiers/v1/configs/harness.py +0 -0
  73. {verifiers-0.3.2.dev200 → verifiers-0.3.2.dev204}/verifiers/v1/configs/judge.py +0 -0
  74. {verifiers-0.3.2.dev200 → verifiers-0.3.2.dev204}/verifiers/v1/configs/retries.py +0 -0
  75. {verifiers-0.3.2.dev200 → verifiers-0.3.2.dev204}/verifiers/v1/configs/runtime.py +0 -0
  76. {verifiers-0.3.2.dev200 → verifiers-0.3.2.dev204}/verifiers/v1/configs/select.py +0 -0
  77. {verifiers-0.3.2.dev200 → verifiers-0.3.2.dev204}/verifiers/v1/configs/serve.py +0 -0
  78. {verifiers-0.3.2.dev200 → verifiers-0.3.2.dev204}/verifiers/v1/configs/task.py +0 -0
  79. {verifiers-0.3.2.dev200 → verifiers-0.3.2.dev204}/verifiers/v1/configs/taskset.py +0 -0
  80. {verifiers-0.3.2.dev200 → verifiers-0.3.2.dev204}/verifiers/v1/dialects/__init__.py +0 -0
  81. {verifiers-0.3.2.dev200 → verifiers-0.3.2.dev204}/verifiers/v1/dialects/anthropic.py +0 -0
  82. {verifiers-0.3.2.dev200 → verifiers-0.3.2.dev204}/verifiers/v1/dialects/base.py +0 -0
  83. {verifiers-0.3.2.dev200 → verifiers-0.3.2.dev204}/verifiers/v1/dialects/chat.py +0 -0
  84. {verifiers-0.3.2.dev200 → verifiers-0.3.2.dev204}/verifiers/v1/dialects/responses.py +0 -0
  85. {verifiers-0.3.2.dev200 → verifiers-0.3.2.dev204}/verifiers/v1/env.py +0 -0
  86. {verifiers-0.3.2.dev200 → verifiers-0.3.2.dev204}/verifiers/v1/envs/__init__.py +0 -0
  87. {verifiers-0.3.2.dev200 → verifiers-0.3.2.dev204}/verifiers/v1/envs/agentic_judge/__init__.py +0 -0
  88. {verifiers-0.3.2.dev200 → verifiers-0.3.2.dev204}/verifiers/v1/envs/agentic_judge/env.py +0 -0
  89. {verifiers-0.3.2.dev200 → verifiers-0.3.2.dev204}/verifiers/v1/envs/best_of_n/__init__.py +0 -0
  90. {verifiers-0.3.2.dev200 → verifiers-0.3.2.dev204}/verifiers/v1/envs/best_of_n/env.py +0 -0
  91. {verifiers-0.3.2.dev200 → verifiers-0.3.2.dev204}/verifiers/v1/envs/isolated_verifier/__init__.py +0 -0
  92. {verifiers-0.3.2.dev200 → verifiers-0.3.2.dev204}/verifiers/v1/envs/isolated_verifier/env.py +0 -0
  93. {verifiers-0.3.2.dev200 → verifiers-0.3.2.dev204}/verifiers/v1/envs/shared_agentic_judge/__init__.py +0 -0
  94. {verifiers-0.3.2.dev200 → verifiers-0.3.2.dev204}/verifiers/v1/envs/single_agent/__init__.py +0 -0
  95. {verifiers-0.3.2.dev200 → verifiers-0.3.2.dev204}/verifiers/v1/envs/single_agent/env.py +0 -0
  96. {verifiers-0.3.2.dev200 → verifiers-0.3.2.dev204}/verifiers/v1/envs/user_sim/__init__.py +0 -0
  97. {verifiers-0.3.2.dev200 → verifiers-0.3.2.dev204}/verifiers/v1/envs/user_sim/env.py +0 -0
  98. {verifiers-0.3.2.dev200 → verifiers-0.3.2.dev204}/verifiers/v1/episode.py +0 -0
  99. {verifiers-0.3.2.dev200 → verifiers-0.3.2.dev204}/verifiers/v1/errors.py +0 -0
  100. {verifiers-0.3.2.dev200 → verifiers-0.3.2.dev204}/verifiers/v1/gepa/__init__.py +0 -0
  101. {verifiers-0.3.2.dev200 → verifiers-0.3.2.dev204}/verifiers/v1/gepa/adapter.py +0 -0
  102. {verifiers-0.3.2.dev200 → verifiers-0.3.2.dev204}/verifiers/v1/gepa/config.py +0 -0
  103. {verifiers-0.3.2.dev200 → verifiers-0.3.2.dev204}/verifiers/v1/gepa/dataset.py +0 -0
  104. {verifiers-0.3.2.dev200 → verifiers-0.3.2.dev204}/verifiers/v1/gepa/reflection.py +0 -0
  105. {verifiers-0.3.2.dev200 → verifiers-0.3.2.dev204}/verifiers/v1/gepa/runner.py +0 -0
  106. {verifiers-0.3.2.dev200 → verifiers-0.3.2.dev204}/verifiers/v1/graph.py +0 -0
  107. {verifiers-0.3.2.dev200 → verifiers-0.3.2.dev204}/verifiers/v1/harness.py +0 -0
  108. {verifiers-0.3.2.dev200 → verifiers-0.3.2.dev204}/verifiers/v1/harnesses/__init__.py +0 -0
  109. {verifiers-0.3.2.dev200 → verifiers-0.3.2.dev204}/verifiers/v1/harnesses/bash/__init__.py +0 -0
  110. {verifiers-0.3.2.dev200 → verifiers-0.3.2.dev204}/verifiers/v1/harnesses/bash/harness.py +0 -0
  111. {verifiers-0.3.2.dev200 → verifiers-0.3.2.dev204}/verifiers/v1/harnesses/browser_use/__init__.py +0 -0
  112. {verifiers-0.3.2.dev200 → verifiers-0.3.2.dev204}/verifiers/v1/harnesses/browser_use/harness.py +0 -0
  113. {verifiers-0.3.2.dev200 → verifiers-0.3.2.dev204}/verifiers/v1/harnesses/browser_use/program.py +0 -0
  114. {verifiers-0.3.2.dev200 → verifiers-0.3.2.dev204}/verifiers/v1/harnesses/claude_code/__init__.py +0 -0
  115. {verifiers-0.3.2.dev200 → verifiers-0.3.2.dev204}/verifiers/v1/harnesses/claude_code/harness.py +0 -0
  116. {verifiers-0.3.2.dev200 → verifiers-0.3.2.dev204}/verifiers/v1/harnesses/codex/__init__.py +0 -0
  117. {verifiers-0.3.2.dev200 → verifiers-0.3.2.dev204}/verifiers/v1/harnesses/codex/gate.mjs +0 -0
  118. {verifiers-0.3.2.dev200 → verifiers-0.3.2.dev204}/verifiers/v1/harnesses/codex/harness.py +0 -0
  119. {verifiers-0.3.2.dev200 → verifiers-0.3.2.dev204}/verifiers/v1/harnesses/hermes_agent/__init__.py +0 -0
  120. {verifiers-0.3.2.dev200 → verifiers-0.3.2.dev204}/verifiers/v1/harnesses/hermes_agent/harness.py +0 -0
  121. {verifiers-0.3.2.dev200 → verifiers-0.3.2.dev204}/verifiers/v1/harnesses/hermes_agent/program.py +0 -0
  122. {verifiers-0.3.2.dev200 → verifiers-0.3.2.dev204}/verifiers/v1/harnesses/kimi_code/__init__.py +0 -0
  123. {verifiers-0.3.2.dev200 → verifiers-0.3.2.dev204}/verifiers/v1/harnesses/kimi_code/harness.py +0 -0
  124. {verifiers-0.3.2.dev200 → verifiers-0.3.2.dev204}/verifiers/v1/harnesses/mini_swe_agent/__init__.py +0 -0
  125. {verifiers-0.3.2.dev200 → verifiers-0.3.2.dev204}/verifiers/v1/harnesses/mini_swe_agent/harness.py +0 -0
  126. {verifiers-0.3.2.dev200 → verifiers-0.3.2.dev204}/verifiers/v1/harnesses/mini_swe_agent/program.py +0 -0
  127. {verifiers-0.3.2.dev200 → verifiers-0.3.2.dev204}/verifiers/v1/harnesses/node.py +0 -0
  128. {verifiers-0.3.2.dev200 → verifiers-0.3.2.dev204}/verifiers/v1/harnesses/null/__init__.py +0 -0
  129. {verifiers-0.3.2.dev200 → verifiers-0.3.2.dev204}/verifiers/v1/harnesses/null/harness.py +0 -0
  130. {verifiers-0.3.2.dev200 → verifiers-0.3.2.dev204}/verifiers/v1/harnesses/openclaw/__init__.py +0 -0
  131. {verifiers-0.3.2.dev200 → verifiers-0.3.2.dev204}/verifiers/v1/harnesses/openclaw/harness.py +0 -0
  132. {verifiers-0.3.2.dev200 → verifiers-0.3.2.dev204}/verifiers/v1/harnesses/pi/__init__.py +0 -0
  133. {verifiers-0.3.2.dev200 → verifiers-0.3.2.dev204}/verifiers/v1/harnesses/pi/gate.mjs +0 -0
  134. {verifiers-0.3.2.dev200 → verifiers-0.3.2.dev204}/verifiers/v1/harnesses/pi/harness.py +0 -0
  135. {verifiers-0.3.2.dev200 → verifiers-0.3.2.dev204}/verifiers/v1/harnesses/prime_agent/__init__.py +0 -0
  136. {verifiers-0.3.2.dev200 → verifiers-0.3.2.dev204}/verifiers/v1/harnesses/prime_agent/harness.py +0 -0
  137. {verifiers-0.3.2.dev200 → verifiers-0.3.2.dev204}/verifiers/v1/harnesses/rlm/__init__.py +0 -0
  138. {verifiers-0.3.2.dev200 → verifiers-0.3.2.dev204}/verifiers/v1/harnesses/rlm/harness.py +0 -0
  139. {verifiers-0.3.2.dev200 → verifiers-0.3.2.dev204}/verifiers/v1/harnesses/terminus_2/__init__.py +0 -0
  140. {verifiers-0.3.2.dev200 → verifiers-0.3.2.dev204}/verifiers/v1/harnesses/terminus_2/harness.py +0 -0
  141. {verifiers-0.3.2.dev200 → verifiers-0.3.2.dev204}/verifiers/v1/harnesses/terminus_2/program.py +0 -0
  142. {verifiers-0.3.2.dev200 → verifiers-0.3.2.dev204}/verifiers/v1/harnesses/utils/__init__.py +0 -0
  143. {verifiers-0.3.2.dev200 → verifiers-0.3.2.dev204}/verifiers/v1/harnesses/utils/compaction.py +0 -0
  144. {verifiers-0.3.2.dev200 → verifiers-0.3.2.dev204}/verifiers/v1/harnesses/utils/core.py +0 -0
  145. {verifiers-0.3.2.dev200 → verifiers-0.3.2.dev204}/verifiers/v1/harnesses/utils/install.py +0 -0
  146. {verifiers-0.3.2.dev200 → verifiers-0.3.2.dev204}/verifiers/v1/harnesses/utils/launch.py +0 -0
  147. {verifiers-0.3.2.dev200 → verifiers-0.3.2.dev204}/verifiers/v1/harnesses/utils/mcp.py +0 -0
  148. {verifiers-0.3.2.dev200 → verifiers-0.3.2.dev204}/verifiers/v1/interception/__init__.py +0 -0
  149. {verifiers-0.3.2.dev200 → verifiers-0.3.2.dev204}/verifiers/v1/interception/base.py +0 -0
  150. {verifiers-0.3.2.dev200 → verifiers-0.3.2.dev204}/verifiers/v1/interception/pool.py +0 -0
  151. {verifiers-0.3.2.dev200 → verifiers-0.3.2.dev204}/verifiers/v1/interception/server.py +0 -0
  152. {verifiers-0.3.2.dev200 → verifiers-0.3.2.dev204}/verifiers/v1/interception/tunnel/__init__.py +0 -0
  153. {verifiers-0.3.2.dev200 → verifiers-0.3.2.dev204}/verifiers/v1/interception/tunnel/base.py +0 -0
  154. {verifiers-0.3.2.dev200 → verifiers-0.3.2.dev204}/verifiers/v1/interception/tunnel/custom.py +0 -0
  155. {verifiers-0.3.2.dev200 → verifiers-0.3.2.dev204}/verifiers/v1/judge.py +0 -0
  156. {verifiers-0.3.2.dev200 → verifiers-0.3.2.dev204}/verifiers/v1/judges/__init__.py +0 -0
  157. {verifiers-0.3.2.dev200 → verifiers-0.3.2.dev204}/verifiers/v1/judges/decision.py +0 -0
  158. {verifiers-0.3.2.dev200 → verifiers-0.3.2.dev204}/verifiers/v1/judges/reference.py +0 -0
  159. {verifiers-0.3.2.dev200 → verifiers-0.3.2.dev204}/verifiers/v1/judges/reference.txt +0 -0
  160. {verifiers-0.3.2.dev200 → verifiers-0.3.2.dev204}/verifiers/v1/judges/rubric.py +0 -0
  161. {verifiers-0.3.2.dev200 → verifiers-0.3.2.dev204}/verifiers/v1/judges/rubric.txt +0 -0
  162. {verifiers-0.3.2.dev200 → verifiers-0.3.2.dev204}/verifiers/v1/mcp/__init__.py +0 -0
  163. {verifiers-0.3.2.dev200 → verifiers-0.3.2.dev204}/verifiers/v1/mcp/launch.py +0 -0
  164. {verifiers-0.3.2.dev200 → verifiers-0.3.2.dev204}/verifiers/v1/mcp/server.py +0 -0
  165. {verifiers-0.3.2.dev200 → verifiers-0.3.2.dev204}/verifiers/v1/mcp/toolset.py +0 -0
  166. {verifiers-0.3.2.dev200 → verifiers-0.3.2.dev204}/verifiers/v1/rollout.py +0 -0
  167. {verifiers-0.3.2.dev200 → verifiers-0.3.2.dev204}/verifiers/v1/runtimes/__init__.py +0 -0
  168. {verifiers-0.3.2.dev200 → verifiers-0.3.2.dev204}/verifiers/v1/runtimes/apptainer.py +0 -0
  169. {verifiers-0.3.2.dev200 → verifiers-0.3.2.dev204}/verifiers/v1/runtimes/base.py +0 -0
  170. {verifiers-0.3.2.dev200 → verifiers-0.3.2.dev204}/verifiers/v1/runtimes/container.py +0 -0
  171. {verifiers-0.3.2.dev200 → verifiers-0.3.2.dev204}/verifiers/v1/runtimes/docker/__init__.py +0 -0
  172. {verifiers-0.3.2.dev200 → verifiers-0.3.2.dev204}/verifiers/v1/runtimes/docker/egress.py +0 -0
  173. {verifiers-0.3.2.dev200 → verifiers-0.3.2.dev204}/verifiers/v1/runtimes/e2b.py +0 -0
  174. {verifiers-0.3.2.dev200 → verifiers-0.3.2.dev204}/verifiers/v1/runtimes/limiters.py +0 -0
  175. {verifiers-0.3.2.dev200 → verifiers-0.3.2.dev204}/verifiers/v1/runtimes/modal.py +0 -0
  176. {verifiers-0.3.2.dev200 → verifiers-0.3.2.dev204}/verifiers/v1/runtimes/prime.py +0 -0
  177. {verifiers-0.3.2.dev200 → verifiers-0.3.2.dev204}/verifiers/v1/runtimes/subprocess.py +0 -0
  178. {verifiers-0.3.2.dev200 → verifiers-0.3.2.dev204}/verifiers/v1/semantic.py +0 -0
  179. {verifiers-0.3.2.dev200 → verifiers-0.3.2.dev204}/verifiers/v1/serve/__init__.py +0 -0
  180. {verifiers-0.3.2.dev200 → verifiers-0.3.2.dev204}/verifiers/v1/serve/client.py +0 -0
  181. {verifiers-0.3.2.dev200 → verifiers-0.3.2.dev204}/verifiers/v1/serve/delta.py +0 -0
  182. {verifiers-0.3.2.dev200 → verifiers-0.3.2.dev204}/verifiers/v1/serve/encoding.py +0 -0
  183. {verifiers-0.3.2.dev200 → verifiers-0.3.2.dev204}/verifiers/v1/serve/pool.py +0 -0
  184. {verifiers-0.3.2.dev200 → verifiers-0.3.2.dev204}/verifiers/v1/serve/server.py +0 -0
  185. {verifiers-0.3.2.dev200 → verifiers-0.3.2.dev204}/verifiers/v1/serve/types.py +0 -0
  186. {verifiers-0.3.2.dev200 → verifiers-0.3.2.dev204}/verifiers/v1/session.py +0 -0
  187. {verifiers-0.3.2.dev200 → verifiers-0.3.2.dev204}/verifiers/v1/state.py +0 -0
  188. {verifiers-0.3.2.dev200 → verifiers-0.3.2.dev204}/verifiers/v1/task.py +0 -0
  189. {verifiers-0.3.2.dev200 → verifiers-0.3.2.dev204}/verifiers/v1/taskset.py +0 -0
  190. {verifiers-0.3.2.dev200 → verifiers-0.3.2.dev204}/verifiers/v1/tasksets/__init__.py +0 -0
  191. {verifiers-0.3.2.dev200 → verifiers-0.3.2.dev204}/verifiers/v1/tasksets/harbor/__init__.py +0 -0
  192. {verifiers-0.3.2.dev200 → verifiers-0.3.2.dev204}/verifiers/v1/tasksets/harbor/compose.py +0 -0
  193. {verifiers-0.3.2.dev200 → verifiers-0.3.2.dev204}/verifiers/v1/tasksets/harbor/env.py +0 -0
  194. {verifiers-0.3.2.dev200 → verifiers-0.3.2.dev204}/verifiers/v1/tasksets/harbor/taskset.py +0 -0
  195. {verifiers-0.3.2.dev200 → verifiers-0.3.2.dev204}/verifiers/v1/tasksets/harbor/toolset.py +0 -0
  196. {verifiers-0.3.2.dev200 → verifiers-0.3.2.dev204}/verifiers/v1/tasksets/nemo_gym/__init__.py +0 -0
  197. {verifiers-0.3.2.dev200 → verifiers-0.3.2.dev204}/verifiers/v1/tasksets/nemo_gym/response.py +0 -0
  198. {verifiers-0.3.2.dev200 → verifiers-0.3.2.dev204}/verifiers/v1/tasksets/nemo_gym/server.py +0 -0
  199. {verifiers-0.3.2.dev200 → verifiers-0.3.2.dev204}/verifiers/v1/tasksets/nemo_gym/taskset.py +0 -0
  200. {verifiers-0.3.2.dev200 → verifiers-0.3.2.dev204}/verifiers/v1/tasksets/nemo_gym/toolset.py +0 -0
  201. {verifiers-0.3.2.dev200 → verifiers-0.3.2.dev204}/verifiers/v1/tasksets/openenv/__init__.py +0 -0
  202. {verifiers-0.3.2.dev200 → verifiers-0.3.2.dev204}/verifiers/v1/tasksets/openenv/taskset.py +0 -0
  203. {verifiers-0.3.2.dev200 → verifiers-0.3.2.dev204}/verifiers/v1/tasksets/textarena/__init__.py +0 -0
  204. {verifiers-0.3.2.dev200 → verifiers-0.3.2.dev204}/verifiers/v1/tasksets/textarena/taskset.py +0 -0
  205. {verifiers-0.3.2.dev200 → verifiers-0.3.2.dev204}/verifiers/v1/trace.py +0 -0
  206. {verifiers-0.3.2.dev200 → verifiers-0.3.2.dev204}/verifiers/v1/types.py +0 -0
  207. {verifiers-0.3.2.dev200 → verifiers-0.3.2.dev204}/verifiers/v1/utils/__init__.py +0 -0
  208. {verifiers-0.3.2.dev200 → verifiers-0.3.2.dev204}/verifiers/v1/utils/aio.py +0 -0
  209. {verifiers-0.3.2.dev200 → verifiers-0.3.2.dev204}/verifiers/v1/utils/artifacts.py +0 -0
  210. {verifiers-0.3.2.dev200 → verifiers-0.3.2.dev204}/verifiers/v1/utils/compile.py +0 -0
  211. {verifiers-0.3.2.dev200 → verifiers-0.3.2.dev204}/verifiers/v1/utils/decorators.py +0 -0
  212. {verifiers-0.3.2.dev200 → verifiers-0.3.2.dev204}/verifiers/v1/utils/eval.py +0 -0
  213. {verifiers-0.3.2.dev200 → verifiers-0.3.2.dev204}/verifiers/v1/utils/format.py +0 -0
  214. {verifiers-0.3.2.dev200 → verifiers-0.3.2.dev204}/verifiers/v1/utils/generic.py +0 -0
  215. {verifiers-0.3.2.dev200 → verifiers-0.3.2.dev204}/verifiers/v1/utils/git.py +0 -0
  216. {verifiers-0.3.2.dev200 → verifiers-0.3.2.dev204}/verifiers/v1/utils/image.py +0 -0
  217. {verifiers-0.3.2.dev200 → verifiers-0.3.2.dev204}/verifiers/v1/utils/interrupt.py +0 -0
  218. {verifiers-0.3.2.dev200 → verifiers-0.3.2.dev204}/verifiers/v1/utils/loaders.py +0 -0
  219. {verifiers-0.3.2.dev200 → verifiers-0.3.2.dev204}/verifiers/v1/utils/logging.py +0 -0
  220. {verifiers-0.3.2.dev200 → verifiers-0.3.2.dev204}/verifiers/v1/utils/memory.py +0 -0
  221. {verifiers-0.3.2.dev200 → verifiers-0.3.2.dev204}/verifiers/v1/utils/paths.py +0 -0
  222. {verifiers-0.3.2.dev200 → verifiers-0.3.2.dev204}/verifiers/v1/utils/platform.py +0 -0
  223. {verifiers-0.3.2.dev200 → verifiers-0.3.2.dev204}/verifiers/v1/utils/prime.py +0 -0
  224. {verifiers-0.3.2.dev200 → verifiers-0.3.2.dev204}/verifiers/v1/utils/retries.py +0 -0
  225. {verifiers-0.3.2.dev200 → verifiers-0.3.2.dev204}/verifiers/v1/utils/scope.py +0 -0
  226. {verifiers-0.3.2.dev200 → verifiers-0.3.2.dev204}/verifiers/v1/utils/score.py +0 -0
  227. {verifiers-0.3.2.dev200 → verifiers-0.3.2.dev204}/verifiers/v1/utils/trace_store.py +0 -0
  228. {verifiers-0.3.2.dev200 → verifiers-0.3.2.dev204}/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.dev200
3
+ Version: 0.3.2.dev204
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
@@ -37,7 +37,7 @@ Requires-Dist: openai<3.0.0,>=2.54.0
37
37
  Requires-Dist: prime-pydantic-config[toml]>=0.4.3
38
38
  Requires-Dist: prime-runs>=0.1.4
39
39
  Requires-Dist: prime-sandboxes>=0.4.2
40
- Requires-Dist: prime-tunnel>=0.1.12
40
+ Requires-Dist: prime-tunnel>=0.1.13
41
41
  Requires-Dist: pydantic>=2.12.3
42
42
  Requires-Dist: pyzmq>=27.1.0
43
43
  Requires-Dist: renderers[multimodal]>=0.1.12.dev2
@@ -32,7 +32,7 @@ dependencies = [
32
32
  "numpy>=2.1.0",
33
33
  "math-verify>=0.8.0",
34
34
  "openai>=2.54.0,<3.0.0",
35
- "prime-tunnel>=0.1.12",
35
+ "prime-tunnel>=0.1.13",
36
36
  "prime-sandboxes>=0.4.2",
37
37
  "prime-runs>=0.1.4",
38
38
  "pydantic>=2.12.3",
@@ -0,0 +1,71 @@
1
+ """The prime tunnel watchdog restarts frpc when the tunnel service has the tunnel
2
+ disconnected or frpc has exited, and leaves it alone otherwise."""
3
+
4
+ import asyncio
5
+ from types import SimpleNamespace
6
+
7
+ import pytest
8
+
9
+ from verifiers.v1.interception.tunnel import prime
10
+
11
+ pytestmark = pytest.mark.asyncio
12
+
13
+
14
+ class FakeClient:
15
+ def __init__(self, statuses, running=True):
16
+ self.statuses = list(statuses)
17
+ self.is_running = running
18
+ self.tunnel_id = "t-0-test"
19
+ self._client = self
20
+ self.restarts = 0
21
+
22
+ async def restart(self):
23
+ self.restarts += 1
24
+ self.is_running = True
25
+
26
+ async def get_tunnel(self, tunnel_id):
27
+ status = self.statuses.pop(0) if self.statuses else "connected"
28
+ if isinstance(status, Exception):
29
+ raise status
30
+ return None if status is None else SimpleNamespace(status=status)
31
+
32
+
33
+ async def watch(client, checks, monkeypatch):
34
+ """Run the watchdog for about `checks` checks; how many restarts it made."""
35
+ monkeypatch.setattr(prime, "CHECK_SECONDS", 0.01)
36
+ task = asyncio.create_task(prime._watch(client, "https://t"))
37
+ await asyncio.sleep(0.0125 * checks)
38
+ task.cancel()
39
+ await asyncio.wait({task})
40
+ return client.restarts
41
+
42
+
43
+ async def test_connected_is_left_alone(monkeypatch):
44
+ assert await watch(FakeClient(["connected"] * 10), 8, monkeypatch) == 0
45
+
46
+
47
+ async def test_one_disconnected_check_is_not_enough(monkeypatch):
48
+ client = FakeClient(["disconnected", "connected"] * 5)
49
+ assert await watch(client, 8, monkeypatch) == 0
50
+
51
+
52
+ async def test_disconnected_twice_restarts_once(monkeypatch):
53
+ client = FakeClient(["disconnected", "disconnected"])
54
+ assert await watch(client, 8, monkeypatch) == 1
55
+
56
+
57
+ async def test_exited_frpc_restarts_without_asking(monkeypatch):
58
+ client = FakeClient([RuntimeError("api down")] * 10, running=False)
59
+ assert await watch(client, 4, monkeypatch) == 1
60
+
61
+
62
+ async def test_unreachable_service_is_no_verdict(monkeypatch):
63
+ client = FakeClient([RuntimeError("api down")] * 10)
64
+ assert await watch(client, 8, monkeypatch) == 0
65
+
66
+
67
+ async def test_gone_registration_stops_watching(monkeypatch):
68
+ client = FakeClient([None])
69
+ monkeypatch.setattr(prime, "CHECK_SECONDS", 0.01)
70
+ await asyncio.wait_for(prime._watch(client, "https://t"), 1)
71
+ assert client.restarts == 0
@@ -6,8 +6,9 @@ pool scales with."""
6
6
  import asyncio
7
7
  import contextlib
8
8
  import logging
9
+ import random
9
10
  from collections.abc import AsyncIterator
10
- from typing import Literal
11
+ from typing import TYPE_CHECKING, Literal
11
12
 
12
13
  from verifiers.v1.interception.tunnel.base import BaseTunnelConfig, Tunnel
13
14
  from verifiers.v1.runtimes.limiters import CreationLimiter
@@ -15,6 +16,9 @@ from verifiers.v1.utils.aio import run_shielded
15
16
  from verifiers.v1.utils.prime import ensure_prime_auth
16
17
  from verifiers.v1.utils.scope import run_scope
17
18
 
19
+ if TYPE_CHECKING:
20
+ from prime_tunnel import Tunnel as TunnelClient
21
+
18
22
  logger = logging.getLogger(__name__)
19
23
 
20
24
 
@@ -40,6 +44,45 @@ def tunnel_limiter() -> CreationLimiter:
40
44
  return CreationLimiter("prime-tunnel", run_scope(), _TUNNELS_PER_MIN / 60)
41
45
 
42
46
 
47
+ # How often a held tunnel's state is checked with the tunnel service. The service marks a
48
+ # tunnel disconnected about a minute after its frpc stops answering; two such checks in a
49
+ # row restart frpc.
50
+ CHECK_SECONDS = 20
51
+
52
+
53
+ async def _watch(client: "TunnelClient", url: str) -> None:
54
+ """Keep a held tunnel up. A tunnel service hiccup can leave frpc running while the
55
+ service has it disconnected for good, and every request to the URL then hangs or
56
+ 404s; frpc can also exit. Either way, restart it."""
57
+ strikes = 0
58
+ while True:
59
+ await asyncio.sleep(CHECK_SECONDS * random.uniform(0.75, 1.25))
60
+ if client.is_running:
61
+ try:
62
+ info = await client._client.get_tunnel(client.tunnel_id)
63
+ except Exception as e: # noqa: BLE001 - the service is unreachable: no verdict
64
+ logger.debug("tunnel %s: state check failed: %s", url, e)
65
+ continue
66
+ if info is None:
67
+ logger.error("tunnel %s: registration gone; cannot repair", url)
68
+ return
69
+ strikes = strikes + 1 if info.status == "disconnected" else 0
70
+ if strikes < 2:
71
+ continue
72
+ logger.warning(
73
+ "tunnel %s: %s; restarting frpc",
74
+ url,
75
+ "disconnected" if client.is_running else "frpc exited",
76
+ )
77
+ try:
78
+ await client.restart()
79
+ except Exception as e: # noqa: BLE001 - tried again on the next check
80
+ logger.warning("tunnel %s: frpc restart failed: %s", url, e)
81
+ else:
82
+ logger.warning("tunnel %s: back up", url)
83
+ strikes = 0
84
+
85
+
43
86
  class PrimeTunnelConfig(BaseTunnelConfig):
44
87
  """Expose the host interception port via `prime_tunnel` (frpc). No fields — the tunnel
45
88
  service mints a fresh public URL per exposed port."""
@@ -57,7 +100,8 @@ class PrimeTunnel(Tunnel[PrimeTunnelConfig]):
57
100
  """Bridge the host `port` to a public URL via prime_tunnel (frpc). Tunnel creation
58
101
  is network-bound and rate-capped (512/min, run-wide via the shared
59
102
  `tunnel_limiter`), so transient failures are retried; a terminal one raises
60
- `TunnelError`. The tunnel is torn down on exit."""
103
+ `TunnelError`. While held, frpc is restarted if the tunnel goes down. The tunnel is
104
+ torn down on exit."""
61
105
  from prime_tunnel import Tunnel as TunnelClient
62
106
 
63
107
  from verifiers.v1.errors import TunnelError
@@ -72,10 +116,17 @@ class PrimeTunnel(Tunnel[PrimeTunnelConfig]):
72
116
  url = str(await client.start()).rstrip("/")
73
117
  except Exception as e:
74
118
  raise TunnelError(f"{label} failed: {e}") from e
119
+ watch = asyncio.create_task(_watch(client, url))
120
+
121
+ async def close() -> None:
122
+ watch.cancel() # first, so it can't start a new frpc after the stop
123
+ await asyncio.wait({watch})
124
+ await asyncio.to_thread(client.sync_stop)
125
+
75
126
  try:
76
127
  yield url
77
128
  finally:
78
- # Run the synchronous stop to completion even under cancellation (`run_shielded`
79
- # re-raises the cancellation after); tunnel-stop failures are best-effort.
129
+ # Run the stop to completion even under cancellation (`run_shielded` re-raises
130
+ # the cancellation after); tunnel-stop failures are best-effort.
80
131
  with contextlib.suppress(Exception):
81
- await run_shielded(asyncio.to_thread(client.sync_stop))
132
+ await run_shielded(close())