verifiers 0.4.1.dev9__tar.gz → 0.4.1.dev13__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 (259) hide show
  1. {verifiers-0.4.1.dev9 → verifiers-0.4.1.dev13}/PKG-INFO +1 -1
  2. verifiers-0.4.1.dev13/tests/integration/fixtures/network_policy_v1.py +80 -0
  3. verifiers-0.4.1.dev13/tests/integration/test_network_policy.py +68 -0
  4. {verifiers-0.4.1.dev9 → verifiers-0.4.1.dev13}/tests/unit/test_trace.py +25 -0
  5. {verifiers-0.4.1.dev9 → verifiers-0.4.1.dev13}/verifiers/v1/types.py +16 -1
  6. verifiers-0.4.1.dev9/tests/integration/fixtures/network_policy_v1.py +0 -88
  7. verifiers-0.4.1.dev9/tests/integration/test_network_policy.py +0 -28
  8. {verifiers-0.4.1.dev9 → verifiers-0.4.1.dev13}/.gitignore +0 -0
  9. {verifiers-0.4.1.dev9 → verifiers-0.4.1.dev13}/LICENSE +0 -0
  10. {verifiers-0.4.1.dev9 → verifiers-0.4.1.dev13}/README.md +0 -0
  11. {verifiers-0.4.1.dev9 → verifiers-0.4.1.dev13}/pyproject.toml +0 -0
  12. {verifiers-0.4.1.dev9 → verifiers-0.4.1.dev13}/tests/integration/conftest.py +0 -0
  13. {verifiers-0.4.1.dev9 → verifiers-0.4.1.dev13}/tests/integration/fixtures/agent_user_harness_v1.py +0 -0
  14. {verifiers-0.4.1.dev9 → verifiers-0.4.1.dev13}/tests/integration/fixtures/agent_user_v1.py +0 -0
  15. {verifiers-0.4.1.dev9 → verifiers-0.4.1.dev13}/tests/integration/fixtures/counter_tool_v1.py +0 -0
  16. {verifiers-0.4.1.dev9 → verifiers-0.4.1.dev13}/tests/integration/fixtures/duet_v1.py +0 -0
  17. {verifiers-0.4.1.dev9 → verifiers-0.4.1.dev13}/tests/integration/fixtures/echo_acp_resume_v1.py +0 -0
  18. {verifiers-0.4.1.dev9 → verifiers-0.4.1.dev13}/tests/integration/fixtures/echo_agentic_v1.py +0 -0
  19. {verifiers-0.4.1.dev9 → verifiers-0.4.1.dev13}/tests/integration/fixtures/echo_tool_v1.py +0 -0
  20. {verifiers-0.4.1.dev9 → verifiers-0.4.1.dev13}/tests/integration/fixtures/echo_user_sim_v1.py +0 -0
  21. {verifiers-0.4.1.dev9 → verifiers-0.4.1.dev13}/tests/integration/fixtures/echo_v1.py +0 -0
  22. {verifiers-0.4.1.dev9 → verifiers-0.4.1.dev13}/tests/integration/fixtures/pyproject.toml +0 -0
  23. {verifiers-0.4.1.dev9 → verifiers-0.4.1.dev13}/tests/integration/fixtures/skill_codeword_v1.py +0 -0
  24. {verifiers-0.4.1.dev9 → verifiers-0.4.1.dev13}/tests/integration/fixtures/skills/project-codeword/SKILL.md +0 -0
  25. {verifiers-0.4.1.dev9 → verifiers-0.4.1.dev13}/tests/integration/fixtures/tool_response_image_v1.py +0 -0
  26. {verifiers-0.4.1.dev9 → verifiers-0.4.1.dev13}/tests/integration/grid.py +0 -0
  27. {verifiers-0.4.1.dev9 → verifiers-0.4.1.dev13}/tests/integration/test_agent_user.py +0 -0
  28. {verifiers-0.4.1.dev9 → verifiers-0.4.1.dev13}/tests/integration/test_agentic_judge.py +0 -0
  29. {verifiers-0.4.1.dev9 → verifiers-0.4.1.dev13}/tests/integration/test_examples.py +0 -0
  30. {verifiers-0.4.1.dev9 → verifiers-0.4.1.dev13}/tests/integration/test_limits.py +0 -0
  31. {verifiers-0.4.1.dev9 → verifiers-0.4.1.dev13}/tests/integration/test_multi_agent.py +0 -0
  32. {verifiers-0.4.1.dev9 → verifiers-0.4.1.dev13}/tests/integration/test_multi_turn.py +0 -0
  33. {verifiers-0.4.1.dev9 → verifiers-0.4.1.dev13}/tests/integration/test_multi_turn_tool.py +0 -0
  34. {verifiers-0.4.1.dev9 → verifiers-0.4.1.dev13}/tests/integration/test_multimodal_tool.py +0 -0
  35. {verifiers-0.4.1.dev9 → verifiers-0.4.1.dev13}/tests/integration/test_resume_tool.py +0 -0
  36. {verifiers-0.4.1.dev9 → verifiers-0.4.1.dev13}/tests/integration/test_rubric_judge.py +0 -0
  37. {verifiers-0.4.1.dev9 → verifiers-0.4.1.dev13}/tests/integration/test_shared_tool.py +0 -0
  38. {verifiers-0.4.1.dev9 → verifiers-0.4.1.dev13}/tests/integration/test_single_turn.py +0 -0
  39. {verifiers-0.4.1.dev9 → verifiers-0.4.1.dev13}/tests/integration/test_skills.py +0 -0
  40. {verifiers-0.4.1.dev9 → verifiers-0.4.1.dev13}/tests/integration/test_stateful_tool.py +0 -0
  41. {verifiers-0.4.1.dev9 → verifiers-0.4.1.dev13}/tests/integration/test_user_echo.py +0 -0
  42. {verifiers-0.4.1.dev9 → verifiers-0.4.1.dev13}/tests/integration/test_user_sim.py +0 -0
  43. {verifiers-0.4.1.dev9 → verifiers-0.4.1.dev13}/tests/unit/cli/test_replay.py +0 -0
  44. {verifiers-0.4.1.dev9 → verifiers-0.4.1.dev13}/tests/unit/conftest.py +0 -0
  45. {verifiers-0.4.1.dev9 → verifiers-0.4.1.dev13}/tests/unit/harnesses/test_core.py +0 -0
  46. {verifiers-0.4.1.dev9 → verifiers-0.4.1.dev13}/tests/unit/harnesses/test_rlm.py +0 -0
  47. {verifiers-0.4.1.dev9 → verifiers-0.4.1.dev13}/tests/unit/interception/test_tunnel.py +0 -0
  48. {verifiers-0.4.1.dev9 → verifiers-0.4.1.dev13}/tests/unit/judges/conftest.py +0 -0
  49. {verifiers-0.4.1.dev9 → verifiers-0.4.1.dev13}/tests/unit/judges/test_judge.py +0 -0
  50. {verifiers-0.4.1.dev9 → verifiers-0.4.1.dev13}/tests/unit/judges/test_reference.py +0 -0
  51. {verifiers-0.4.1.dev9 → verifiers-0.4.1.dev13}/tests/unit/judges/test_rubric.py +0 -0
  52. {verifiers-0.4.1.dev9 → verifiers-0.4.1.dev13}/tests/unit/runtimes/test_e2b.py +0 -0
  53. {verifiers-0.4.1.dev9 → verifiers-0.4.1.dev13}/tests/unit/serve/test_client.py +0 -0
  54. {verifiers-0.4.1.dev9 → verifiers-0.4.1.dev13}/tests/unit/serve/test_delta.py +0 -0
  55. {verifiers-0.4.1.dev9 → verifiers-0.4.1.dev13}/tests/unit/serve/test_pool.py +0 -0
  56. {verifiers-0.4.1.dev9 → verifiers-0.4.1.dev13}/tests/unit/test_agent.py +0 -0
  57. {verifiers-0.4.1.dev9 → verifiers-0.4.1.dev13}/tests/unit/test_graph.py +0 -0
  58. {verifiers-0.4.1.dev9 → verifiers-0.4.1.dev13}/tests/unit/test_semantic.py +0 -0
  59. {verifiers-0.4.1.dev9 → verifiers-0.4.1.dev13}/tests/unit/test_task.py +0 -0
  60. {verifiers-0.4.1.dev9 → verifiers-0.4.1.dev13}/tests/unit/test_taskset.py +0 -0
  61. {verifiers-0.4.1.dev9 → verifiers-0.4.1.dev13}/tests/unit/utils/test_compile.py +0 -0
  62. {verifiers-0.4.1.dev9 → verifiers-0.4.1.dev13}/tests/unit/utils/test_loaders.py +0 -0
  63. {verifiers-0.4.1.dev9 → verifiers-0.4.1.dev13}/tests/unit/utils/test_platform.py +0 -0
  64. {verifiers-0.4.1.dev9 → verifiers-0.4.1.dev13}/tests/unit/utils/test_score.py +0 -0
  65. {verifiers-0.4.1.dev9 → verifiers-0.4.1.dev13}/verifiers/__init__.py +0 -0
  66. {verifiers-0.4.1.dev9 → verifiers-0.4.1.dev13}/verifiers/v1/__init__.py +0 -0
  67. {verifiers-0.4.1.dev9 → verifiers-0.4.1.dev13}/verifiers/v1/acp/__init__.py +0 -0
  68. {verifiers-0.4.1.dev9 → verifiers-0.4.1.dev13}/verifiers/v1/acp/runner.py +0 -0
  69. {verifiers-0.4.1.dev9 → verifiers-0.4.1.dev13}/verifiers/v1/agent.py +0 -0
  70. {verifiers-0.4.1.dev9 → verifiers-0.4.1.dev13}/verifiers/v1/cli/__init__.py +0 -0
  71. {verifiers-0.4.1.dev9 → verifiers-0.4.1.dev13}/verifiers/v1/cli/dashboard/__init__.py +0 -0
  72. {verifiers-0.4.1.dev9 → verifiers-0.4.1.dev13}/verifiers/v1/cli/dashboard/base.py +0 -0
  73. {verifiers-0.4.1.dev9 → verifiers-0.4.1.dev13}/verifiers/v1/cli/dashboard/eval.py +0 -0
  74. {verifiers-0.4.1.dev9 → verifiers-0.4.1.dev13}/verifiers/v1/cli/dashboard/replay.py +0 -0
  75. {verifiers-0.4.1.dev9 → verifiers-0.4.1.dev13}/verifiers/v1/cli/dashboard/validate.py +0 -0
  76. {verifiers-0.4.1.dev9 → verifiers-0.4.1.dev13}/verifiers/v1/cli/debug.py +0 -0
  77. {verifiers-0.4.1.dev9 → verifiers-0.4.1.dev13}/verifiers/v1/cli/eval/__init__.py +0 -0
  78. {verifiers-0.4.1.dev9 → verifiers-0.4.1.dev13}/verifiers/v1/cli/eval/hint.py +0 -0
  79. {verifiers-0.4.1.dev9 → verifiers-0.4.1.dev13}/verifiers/v1/cli/eval/main.py +0 -0
  80. {verifiers-0.4.1.dev9 → verifiers-0.4.1.dev13}/verifiers/v1/cli/eval/resume.py +0 -0
  81. {verifiers-0.4.1.dev9 → verifiers-0.4.1.dev13}/verifiers/v1/cli/eval/runner.py +0 -0
  82. {verifiers-0.4.1.dev9 → verifiers-0.4.1.dev13}/verifiers/v1/cli/gepa.py +0 -0
  83. {verifiers-0.4.1.dev9 → verifiers-0.4.1.dev13}/verifiers/v1/cli/output.py +0 -0
  84. {verifiers-0.4.1.dev9 → verifiers-0.4.1.dev13}/verifiers/v1/cli/replay.py +0 -0
  85. {verifiers-0.4.1.dev9 → verifiers-0.4.1.dev13}/verifiers/v1/cli/resolve.py +0 -0
  86. {verifiers-0.4.1.dev9 → verifiers-0.4.1.dev13}/verifiers/v1/cli/resume.py +0 -0
  87. {verifiers-0.4.1.dev9 → verifiers-0.4.1.dev13}/verifiers/v1/cli/validate.py +0 -0
  88. {verifiers-0.4.1.dev9 → verifiers-0.4.1.dev13}/verifiers/v1/clients/__init__.py +0 -0
  89. {verifiers-0.4.1.dev9 → verifiers-0.4.1.dev13}/verifiers/v1/clients/base.py +0 -0
  90. {verifiers-0.4.1.dev9 → verifiers-0.4.1.dev13}/verifiers/v1/clients/client.py +0 -0
  91. {verifiers-0.4.1.dev9 → verifiers-0.4.1.dev13}/verifiers/v1/clients/eval.py +0 -0
  92. {verifiers-0.4.1.dev9 → verifiers-0.4.1.dev13}/verifiers/v1/clients/train.py +0 -0
  93. {verifiers-0.4.1.dev9 → verifiers-0.4.1.dev13}/verifiers/v1/configs/__init__.py +0 -0
  94. {verifiers-0.4.1.dev9 → verifiers-0.4.1.dev13}/verifiers/v1/configs/agent.py +0 -0
  95. {verifiers-0.4.1.dev9 → verifiers-0.4.1.dev13}/verifiers/v1/configs/cli/__init__.py +0 -0
  96. {verifiers-0.4.1.dev9 → verifiers-0.4.1.dev13}/verifiers/v1/configs/cli/debug.py +0 -0
  97. {verifiers-0.4.1.dev9 → verifiers-0.4.1.dev13}/verifiers/v1/configs/cli/env.py +0 -0
  98. {verifiers-0.4.1.dev9 → verifiers-0.4.1.dev13}/verifiers/v1/configs/cli/eval.py +0 -0
  99. {verifiers-0.4.1.dev9 → verifiers-0.4.1.dev13}/verifiers/v1/configs/cli/replay.py +0 -0
  100. {verifiers-0.4.1.dev9 → verifiers-0.4.1.dev13}/verifiers/v1/configs/cli/validate.py +0 -0
  101. {verifiers-0.4.1.dev9 → verifiers-0.4.1.dev13}/verifiers/v1/configs/client.py +0 -0
  102. {verifiers-0.4.1.dev9 → verifiers-0.4.1.dev13}/verifiers/v1/configs/env.py +0 -0
  103. {verifiers-0.4.1.dev9 → verifiers-0.4.1.dev13}/verifiers/v1/configs/harness.py +0 -0
  104. {verifiers-0.4.1.dev9 → verifiers-0.4.1.dev13}/verifiers/v1/configs/judge.py +0 -0
  105. {verifiers-0.4.1.dev9 → verifiers-0.4.1.dev13}/verifiers/v1/configs/retries.py +0 -0
  106. {verifiers-0.4.1.dev9 → verifiers-0.4.1.dev13}/verifiers/v1/configs/runtime.py +0 -0
  107. {verifiers-0.4.1.dev9 → verifiers-0.4.1.dev13}/verifiers/v1/configs/select.py +0 -0
  108. {verifiers-0.4.1.dev9 → verifiers-0.4.1.dev13}/verifiers/v1/configs/serve.py +0 -0
  109. {verifiers-0.4.1.dev9 → verifiers-0.4.1.dev13}/verifiers/v1/configs/task.py +0 -0
  110. {verifiers-0.4.1.dev9 → verifiers-0.4.1.dev13}/verifiers/v1/configs/taskset.py +0 -0
  111. {verifiers-0.4.1.dev9 → verifiers-0.4.1.dev13}/verifiers/v1/dialects/__init__.py +0 -0
  112. {verifiers-0.4.1.dev9 → verifiers-0.4.1.dev13}/verifiers/v1/dialects/anthropic.py +0 -0
  113. {verifiers-0.4.1.dev9 → verifiers-0.4.1.dev13}/verifiers/v1/dialects/base.py +0 -0
  114. {verifiers-0.4.1.dev9 → verifiers-0.4.1.dev13}/verifiers/v1/dialects/chat.py +0 -0
  115. {verifiers-0.4.1.dev9 → verifiers-0.4.1.dev13}/verifiers/v1/dialects/responses.py +0 -0
  116. {verifiers-0.4.1.dev9 → verifiers-0.4.1.dev13}/verifiers/v1/env.py +0 -0
  117. {verifiers-0.4.1.dev9 → verifiers-0.4.1.dev13}/verifiers/v1/envs/__init__.py +0 -0
  118. {verifiers-0.4.1.dev9 → verifiers-0.4.1.dev13}/verifiers/v1/envs/agentic_judge/__init__.py +0 -0
  119. {verifiers-0.4.1.dev9 → verifiers-0.4.1.dev13}/verifiers/v1/envs/agentic_judge/env.py +0 -0
  120. {verifiers-0.4.1.dev9 → verifiers-0.4.1.dev13}/verifiers/v1/envs/best_of_n/__init__.py +0 -0
  121. {verifiers-0.4.1.dev9 → verifiers-0.4.1.dev13}/verifiers/v1/envs/best_of_n/env.py +0 -0
  122. {verifiers-0.4.1.dev9 → verifiers-0.4.1.dev13}/verifiers/v1/envs/isolated_verifier/__init__.py +0 -0
  123. {verifiers-0.4.1.dev9 → verifiers-0.4.1.dev13}/verifiers/v1/envs/isolated_verifier/env.py +0 -0
  124. {verifiers-0.4.1.dev9 → verifiers-0.4.1.dev13}/verifiers/v1/envs/shared_agentic_judge/__init__.py +0 -0
  125. {verifiers-0.4.1.dev9 → verifiers-0.4.1.dev13}/verifiers/v1/envs/single_agent/__init__.py +0 -0
  126. {verifiers-0.4.1.dev9 → verifiers-0.4.1.dev13}/verifiers/v1/envs/single_agent/env.py +0 -0
  127. {verifiers-0.4.1.dev9 → verifiers-0.4.1.dev13}/verifiers/v1/envs/user_sim/__init__.py +0 -0
  128. {verifiers-0.4.1.dev9 → verifiers-0.4.1.dev13}/verifiers/v1/envs/user_sim/env.py +0 -0
  129. {verifiers-0.4.1.dev9 → verifiers-0.4.1.dev13}/verifiers/v1/episode.py +0 -0
  130. {verifiers-0.4.1.dev9 → verifiers-0.4.1.dev13}/verifiers/v1/errors.py +0 -0
  131. {verifiers-0.4.1.dev9 → verifiers-0.4.1.dev13}/verifiers/v1/gepa/__init__.py +0 -0
  132. {verifiers-0.4.1.dev9 → verifiers-0.4.1.dev13}/verifiers/v1/gepa/adapter.py +0 -0
  133. {verifiers-0.4.1.dev9 → verifiers-0.4.1.dev13}/verifiers/v1/gepa/config.py +0 -0
  134. {verifiers-0.4.1.dev9 → verifiers-0.4.1.dev13}/verifiers/v1/gepa/dataset.py +0 -0
  135. {verifiers-0.4.1.dev9 → verifiers-0.4.1.dev13}/verifiers/v1/gepa/reflection.py +0 -0
  136. {verifiers-0.4.1.dev9 → verifiers-0.4.1.dev13}/verifiers/v1/gepa/runner.py +0 -0
  137. {verifiers-0.4.1.dev9 → verifiers-0.4.1.dev13}/verifiers/v1/graph.py +0 -0
  138. {verifiers-0.4.1.dev9 → verifiers-0.4.1.dev13}/verifiers/v1/harness.py +0 -0
  139. {verifiers-0.4.1.dev9 → verifiers-0.4.1.dev13}/verifiers/v1/harnesses/__init__.py +0 -0
  140. {verifiers-0.4.1.dev9 → verifiers-0.4.1.dev13}/verifiers/v1/harnesses/bash/__init__.py +0 -0
  141. {verifiers-0.4.1.dev9 → verifiers-0.4.1.dev13}/verifiers/v1/harnesses/bash/harness.py +0 -0
  142. {verifiers-0.4.1.dev9 → verifiers-0.4.1.dev13}/verifiers/v1/harnesses/browser_use/__init__.py +0 -0
  143. {verifiers-0.4.1.dev9 → verifiers-0.4.1.dev13}/verifiers/v1/harnesses/browser_use/harness.py +0 -0
  144. {verifiers-0.4.1.dev9 → verifiers-0.4.1.dev13}/verifiers/v1/harnesses/browser_use/program.py +0 -0
  145. {verifiers-0.4.1.dev9 → verifiers-0.4.1.dev13}/verifiers/v1/harnesses/claude_code/__init__.py +0 -0
  146. {verifiers-0.4.1.dev9 → verifiers-0.4.1.dev13}/verifiers/v1/harnesses/claude_code/harness.py +0 -0
  147. {verifiers-0.4.1.dev9 → verifiers-0.4.1.dev13}/verifiers/v1/harnesses/codex/__init__.py +0 -0
  148. {verifiers-0.4.1.dev9 → verifiers-0.4.1.dev13}/verifiers/v1/harnesses/codex/gate.mjs +0 -0
  149. {verifiers-0.4.1.dev9 → verifiers-0.4.1.dev13}/verifiers/v1/harnesses/codex/harness.py +0 -0
  150. {verifiers-0.4.1.dev9 → verifiers-0.4.1.dev13}/verifiers/v1/harnesses/hermes_agent/__init__.py +0 -0
  151. {verifiers-0.4.1.dev9 → verifiers-0.4.1.dev13}/verifiers/v1/harnesses/hermes_agent/harness.py +0 -0
  152. {verifiers-0.4.1.dev9 → verifiers-0.4.1.dev13}/verifiers/v1/harnesses/hermes_agent/program.py +0 -0
  153. {verifiers-0.4.1.dev9 → verifiers-0.4.1.dev13}/verifiers/v1/harnesses/kimi_code/__init__.py +0 -0
  154. {verifiers-0.4.1.dev9 → verifiers-0.4.1.dev13}/verifiers/v1/harnesses/kimi_code/harness.py +0 -0
  155. {verifiers-0.4.1.dev9 → verifiers-0.4.1.dev13}/verifiers/v1/harnesses/mini_swe_agent/__init__.py +0 -0
  156. {verifiers-0.4.1.dev9 → verifiers-0.4.1.dev13}/verifiers/v1/harnesses/mini_swe_agent/harness.py +0 -0
  157. {verifiers-0.4.1.dev9 → verifiers-0.4.1.dev13}/verifiers/v1/harnesses/mini_swe_agent/program.py +0 -0
  158. {verifiers-0.4.1.dev9 → verifiers-0.4.1.dev13}/verifiers/v1/harnesses/node.py +0 -0
  159. {verifiers-0.4.1.dev9 → verifiers-0.4.1.dev13}/verifiers/v1/harnesses/null/__init__.py +0 -0
  160. {verifiers-0.4.1.dev9 → verifiers-0.4.1.dev13}/verifiers/v1/harnesses/null/harness.py +0 -0
  161. {verifiers-0.4.1.dev9 → verifiers-0.4.1.dev13}/verifiers/v1/harnesses/openclaw/__init__.py +0 -0
  162. {verifiers-0.4.1.dev9 → verifiers-0.4.1.dev13}/verifiers/v1/harnesses/openclaw/harness.py +0 -0
  163. {verifiers-0.4.1.dev9 → verifiers-0.4.1.dev13}/verifiers/v1/harnesses/pi/__init__.py +0 -0
  164. {verifiers-0.4.1.dev9 → verifiers-0.4.1.dev13}/verifiers/v1/harnesses/pi/gate.mjs +0 -0
  165. {verifiers-0.4.1.dev9 → verifiers-0.4.1.dev13}/verifiers/v1/harnesses/pi/harness.py +0 -0
  166. {verifiers-0.4.1.dev9 → verifiers-0.4.1.dev13}/verifiers/v1/harnesses/prime_agent/__init__.py +0 -0
  167. {verifiers-0.4.1.dev9 → verifiers-0.4.1.dev13}/verifiers/v1/harnesses/prime_agent/harness.py +0 -0
  168. {verifiers-0.4.1.dev9 → verifiers-0.4.1.dev13}/verifiers/v1/harnesses/rlm/__init__.py +0 -0
  169. {verifiers-0.4.1.dev9 → verifiers-0.4.1.dev13}/verifiers/v1/harnesses/rlm/harness.py +0 -0
  170. {verifiers-0.4.1.dev9 → verifiers-0.4.1.dev13}/verifiers/v1/harnesses/terminus_2/__init__.py +0 -0
  171. {verifiers-0.4.1.dev9 → verifiers-0.4.1.dev13}/verifiers/v1/harnesses/terminus_2/harness.py +0 -0
  172. {verifiers-0.4.1.dev9 → verifiers-0.4.1.dev13}/verifiers/v1/harnesses/terminus_2/program.py +0 -0
  173. {verifiers-0.4.1.dev9 → verifiers-0.4.1.dev13}/verifiers/v1/harnesses/utils/__init__.py +0 -0
  174. {verifiers-0.4.1.dev9 → verifiers-0.4.1.dev13}/verifiers/v1/harnesses/utils/compaction.py +0 -0
  175. {verifiers-0.4.1.dev9 → verifiers-0.4.1.dev13}/verifiers/v1/harnesses/utils/core.py +0 -0
  176. {verifiers-0.4.1.dev9 → verifiers-0.4.1.dev13}/verifiers/v1/harnesses/utils/install.py +0 -0
  177. {verifiers-0.4.1.dev9 → verifiers-0.4.1.dev13}/verifiers/v1/harnesses/utils/launch.py +0 -0
  178. {verifiers-0.4.1.dev9 → verifiers-0.4.1.dev13}/verifiers/v1/harnesses/utils/mcp.py +0 -0
  179. {verifiers-0.4.1.dev9 → verifiers-0.4.1.dev13}/verifiers/v1/interception/__init__.py +0 -0
  180. {verifiers-0.4.1.dev9 → verifiers-0.4.1.dev13}/verifiers/v1/interception/base.py +0 -0
  181. {verifiers-0.4.1.dev9 → verifiers-0.4.1.dev13}/verifiers/v1/interception/pool.py +0 -0
  182. {verifiers-0.4.1.dev9 → verifiers-0.4.1.dev13}/verifiers/v1/interception/server.py +0 -0
  183. {verifiers-0.4.1.dev9 → verifiers-0.4.1.dev13}/verifiers/v1/interception/tunnel/__init__.py +0 -0
  184. {verifiers-0.4.1.dev9 → verifiers-0.4.1.dev13}/verifiers/v1/interception/tunnel/base.py +0 -0
  185. {verifiers-0.4.1.dev9 → verifiers-0.4.1.dev13}/verifiers/v1/interception/tunnel/custom.py +0 -0
  186. {verifiers-0.4.1.dev9 → verifiers-0.4.1.dev13}/verifiers/v1/interception/tunnel/prime.py +0 -0
  187. {verifiers-0.4.1.dev9 → verifiers-0.4.1.dev13}/verifiers/v1/judge.py +0 -0
  188. {verifiers-0.4.1.dev9 → verifiers-0.4.1.dev13}/verifiers/v1/judges/__init__.py +0 -0
  189. {verifiers-0.4.1.dev9 → verifiers-0.4.1.dev13}/verifiers/v1/judges/decision.py +0 -0
  190. {verifiers-0.4.1.dev9 → verifiers-0.4.1.dev13}/verifiers/v1/judges/reference.py +0 -0
  191. {verifiers-0.4.1.dev9 → verifiers-0.4.1.dev13}/verifiers/v1/judges/reference.txt +0 -0
  192. {verifiers-0.4.1.dev9 → verifiers-0.4.1.dev13}/verifiers/v1/judges/rubric.py +0 -0
  193. {verifiers-0.4.1.dev9 → verifiers-0.4.1.dev13}/verifiers/v1/judges/rubric.txt +0 -0
  194. {verifiers-0.4.1.dev9 → verifiers-0.4.1.dev13}/verifiers/v1/mcp/__init__.py +0 -0
  195. {verifiers-0.4.1.dev9 → verifiers-0.4.1.dev13}/verifiers/v1/mcp/launch.py +0 -0
  196. {verifiers-0.4.1.dev9 → verifiers-0.4.1.dev13}/verifiers/v1/mcp/server.py +0 -0
  197. {verifiers-0.4.1.dev9 → verifiers-0.4.1.dev13}/verifiers/v1/mcp/toolset.py +0 -0
  198. {verifiers-0.4.1.dev9 → verifiers-0.4.1.dev13}/verifiers/v1/rollout.py +0 -0
  199. {verifiers-0.4.1.dev9 → verifiers-0.4.1.dev13}/verifiers/v1/runtimes/__init__.py +0 -0
  200. {verifiers-0.4.1.dev9 → verifiers-0.4.1.dev13}/verifiers/v1/runtimes/apptainer.py +0 -0
  201. {verifiers-0.4.1.dev9 → verifiers-0.4.1.dev13}/verifiers/v1/runtimes/base.py +0 -0
  202. {verifiers-0.4.1.dev9 → verifiers-0.4.1.dev13}/verifiers/v1/runtimes/container.py +0 -0
  203. {verifiers-0.4.1.dev9 → verifiers-0.4.1.dev13}/verifiers/v1/runtimes/docker/__init__.py +0 -0
  204. {verifiers-0.4.1.dev9 → verifiers-0.4.1.dev13}/verifiers/v1/runtimes/docker/egress.py +0 -0
  205. {verifiers-0.4.1.dev9 → verifiers-0.4.1.dev13}/verifiers/v1/runtimes/e2b.py +0 -0
  206. {verifiers-0.4.1.dev9 → verifiers-0.4.1.dev13}/verifiers/v1/runtimes/limiters.py +0 -0
  207. {verifiers-0.4.1.dev9 → verifiers-0.4.1.dev13}/verifiers/v1/runtimes/modal.py +0 -0
  208. {verifiers-0.4.1.dev9 → verifiers-0.4.1.dev13}/verifiers/v1/runtimes/prime.py +0 -0
  209. {verifiers-0.4.1.dev9 → verifiers-0.4.1.dev13}/verifiers/v1/runtimes/subprocess.py +0 -0
  210. {verifiers-0.4.1.dev9 → verifiers-0.4.1.dev13}/verifiers/v1/semantic.py +0 -0
  211. {verifiers-0.4.1.dev9 → verifiers-0.4.1.dev13}/verifiers/v1/serve/__init__.py +0 -0
  212. {verifiers-0.4.1.dev9 → verifiers-0.4.1.dev13}/verifiers/v1/serve/client.py +0 -0
  213. {verifiers-0.4.1.dev9 → verifiers-0.4.1.dev13}/verifiers/v1/serve/delta.py +0 -0
  214. {verifiers-0.4.1.dev9 → verifiers-0.4.1.dev13}/verifiers/v1/serve/encoding.py +0 -0
  215. {verifiers-0.4.1.dev9 → verifiers-0.4.1.dev13}/verifiers/v1/serve/pool.py +0 -0
  216. {verifiers-0.4.1.dev9 → verifiers-0.4.1.dev13}/verifiers/v1/serve/server.py +0 -0
  217. {verifiers-0.4.1.dev9 → verifiers-0.4.1.dev13}/verifiers/v1/serve/types.py +0 -0
  218. {verifiers-0.4.1.dev9 → verifiers-0.4.1.dev13}/verifiers/v1/session.py +0 -0
  219. {verifiers-0.4.1.dev9 → verifiers-0.4.1.dev13}/verifiers/v1/state.py +0 -0
  220. {verifiers-0.4.1.dev9 → verifiers-0.4.1.dev13}/verifiers/v1/task.py +0 -0
  221. {verifiers-0.4.1.dev9 → verifiers-0.4.1.dev13}/verifiers/v1/taskset.py +0 -0
  222. {verifiers-0.4.1.dev9 → verifiers-0.4.1.dev13}/verifiers/v1/tasksets/__init__.py +0 -0
  223. {verifiers-0.4.1.dev9 → verifiers-0.4.1.dev13}/verifiers/v1/tasksets/harbor/__init__.py +0 -0
  224. {verifiers-0.4.1.dev9 → verifiers-0.4.1.dev13}/verifiers/v1/tasksets/harbor/compose.py +0 -0
  225. {verifiers-0.4.1.dev9 → verifiers-0.4.1.dev13}/verifiers/v1/tasksets/harbor/env.py +0 -0
  226. {verifiers-0.4.1.dev9 → verifiers-0.4.1.dev13}/verifiers/v1/tasksets/harbor/taskset.py +0 -0
  227. {verifiers-0.4.1.dev9 → verifiers-0.4.1.dev13}/verifiers/v1/tasksets/harbor/toolset.py +0 -0
  228. {verifiers-0.4.1.dev9 → verifiers-0.4.1.dev13}/verifiers/v1/tasksets/nemo_gym/__init__.py +0 -0
  229. {verifiers-0.4.1.dev9 → verifiers-0.4.1.dev13}/verifiers/v1/tasksets/nemo_gym/response.py +0 -0
  230. {verifiers-0.4.1.dev9 → verifiers-0.4.1.dev13}/verifiers/v1/tasksets/nemo_gym/server.py +0 -0
  231. {verifiers-0.4.1.dev9 → verifiers-0.4.1.dev13}/verifiers/v1/tasksets/nemo_gym/taskset.py +0 -0
  232. {verifiers-0.4.1.dev9 → verifiers-0.4.1.dev13}/verifiers/v1/tasksets/nemo_gym/toolset.py +0 -0
  233. {verifiers-0.4.1.dev9 → verifiers-0.4.1.dev13}/verifiers/v1/tasksets/openenv/__init__.py +0 -0
  234. {verifiers-0.4.1.dev9 → verifiers-0.4.1.dev13}/verifiers/v1/tasksets/openenv/taskset.py +0 -0
  235. {verifiers-0.4.1.dev9 → verifiers-0.4.1.dev13}/verifiers/v1/tasksets/textarena/__init__.py +0 -0
  236. {verifiers-0.4.1.dev9 → verifiers-0.4.1.dev13}/verifiers/v1/tasksets/textarena/taskset.py +0 -0
  237. {verifiers-0.4.1.dev9 → verifiers-0.4.1.dev13}/verifiers/v1/trace.py +0 -0
  238. {verifiers-0.4.1.dev9 → verifiers-0.4.1.dev13}/verifiers/v1/utils/__init__.py +0 -0
  239. {verifiers-0.4.1.dev9 → verifiers-0.4.1.dev13}/verifiers/v1/utils/aio.py +0 -0
  240. {verifiers-0.4.1.dev9 → verifiers-0.4.1.dev13}/verifiers/v1/utils/artifacts.py +0 -0
  241. {verifiers-0.4.1.dev9 → verifiers-0.4.1.dev13}/verifiers/v1/utils/compile.py +0 -0
  242. {verifiers-0.4.1.dev9 → verifiers-0.4.1.dev13}/verifiers/v1/utils/decorators.py +0 -0
  243. {verifiers-0.4.1.dev9 → verifiers-0.4.1.dev13}/verifiers/v1/utils/eval.py +0 -0
  244. {verifiers-0.4.1.dev9 → verifiers-0.4.1.dev13}/verifiers/v1/utils/format.py +0 -0
  245. {verifiers-0.4.1.dev9 → verifiers-0.4.1.dev13}/verifiers/v1/utils/generic.py +0 -0
  246. {verifiers-0.4.1.dev9 → verifiers-0.4.1.dev13}/verifiers/v1/utils/git.py +0 -0
  247. {verifiers-0.4.1.dev9 → verifiers-0.4.1.dev13}/verifiers/v1/utils/image.py +0 -0
  248. {verifiers-0.4.1.dev9 → verifiers-0.4.1.dev13}/verifiers/v1/utils/interrupt.py +0 -0
  249. {verifiers-0.4.1.dev9 → verifiers-0.4.1.dev13}/verifiers/v1/utils/loaders.py +0 -0
  250. {verifiers-0.4.1.dev9 → verifiers-0.4.1.dev13}/verifiers/v1/utils/logging.py +0 -0
  251. {verifiers-0.4.1.dev9 → verifiers-0.4.1.dev13}/verifiers/v1/utils/memory.py +0 -0
  252. {verifiers-0.4.1.dev9 → verifiers-0.4.1.dev13}/verifiers/v1/utils/paths.py +0 -0
  253. {verifiers-0.4.1.dev9 → verifiers-0.4.1.dev13}/verifiers/v1/utils/platform.py +0 -0
  254. {verifiers-0.4.1.dev9 → verifiers-0.4.1.dev13}/verifiers/v1/utils/prime.py +0 -0
  255. {verifiers-0.4.1.dev9 → verifiers-0.4.1.dev13}/verifiers/v1/utils/retries.py +0 -0
  256. {verifiers-0.4.1.dev9 → verifiers-0.4.1.dev13}/verifiers/v1/utils/scope.py +0 -0
  257. {verifiers-0.4.1.dev9 → verifiers-0.4.1.dev13}/verifiers/v1/utils/score.py +0 -0
  258. {verifiers-0.4.1.dev9 → verifiers-0.4.1.dev13}/verifiers/v1/utils/trace_store.py +0 -0
  259. {verifiers-0.4.1.dev9 → verifiers-0.4.1.dev13}/verifiers/v1/utils/version.py +0 -0
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.5
2
2
  Name: verifiers
3
- Version: 0.4.1.dev9
3
+ Version: 0.4.1.dev13
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
@@ -0,0 +1,80 @@
1
+ """network-policy-v1: the agent runs an egress probe under the task's network policy.
2
+
3
+ One task per policy the task data can declare: `open` (the default), `off` (an empty
4
+ allowlist), `block` (blocks `example.com`) and `allow` (allows only `pypi.org`). Setup
5
+ stages a probe script while egress is still open; the prompt asks the model to run it.
6
+ The probe fetches both hosts and records which ones it reached, so the reward is 1 only
7
+ if the policy held: each host answered exactly when the policy permits it. A harness
8
+ without a shell writes no report and scores 0. Needs a runtime with network policy
9
+ support; the integration test runs it on prime.
10
+ """
11
+
12
+ import json
13
+
14
+ import verifiers.v1 as vf
15
+ from verifiers.v1.runtimes import Runtime
16
+
17
+ __all__ = ["NetworkPolicyTaskset"]
18
+
19
+ BLOCKED = "example.com"
20
+ ALLOWED = "pypi.org"
21
+ PROBE_PATH = "/tmp/network-probe.py"
22
+ REPORT = "/tmp/network-probe.json"
23
+
24
+ # What each task's policy lets through, keyed by task name.
25
+ EXPECTED = {
26
+ "open": {"blocked": "ok", "allowed": "ok"},
27
+ "off": {"blocked": "denied", "allowed": "denied"},
28
+ "block": {"blocked": "denied", "allowed": "ok"},
29
+ "allow": {"blocked": "denied", "allowed": "ok"},
30
+ }
31
+
32
+ # Any HTTP answer, error status included, means the destination was reachable; a
33
+ # refused connection, a proxy refusal, a DNS failure, or a timeout means it was not.
34
+ PROBE = f"""
35
+ import json, urllib.error, urllib.request
36
+ report = {{}}
37
+ for name, url in {{"blocked": "https://{BLOCKED}", "allowed": "https://{ALLOWED}/simple/"}}.items():
38
+ try:
39
+ urllib.request.urlopen(url, timeout=15)
40
+ report[name] = "ok"
41
+ except urllib.error.HTTPError:
42
+ report[name] = "ok"
43
+ except Exception:
44
+ report[name] = "denied"
45
+ open({REPORT!r}, "w").write(json.dumps(report))
46
+ print(json.dumps(report))
47
+ """
48
+
49
+
50
+ class NetworkPolicyTask(vf.Task):
51
+ async def setup(self, trace: vf.Trace, runtime: Runtime) -> None:
52
+ await runtime.write(PROBE_PATH, PROBE.encode())
53
+
54
+ @vf.reward(weight=1.0)
55
+ async def policy_held(self, trace: vf.Trace, runtime: Runtime) -> float:
56
+ result = await runtime.run(["cat", REPORT], {})
57
+ report = json.loads(result.stdout) if result.exit_code == 0 else None
58
+ trace.info["network_report"] = report
59
+ return float(report == EXPECTED[self.data.name])
60
+
61
+
62
+ class NetworkPolicyTaskset(vf.Taskset[NetworkPolicyTask, vf.TasksetConfig]):
63
+ def load(self) -> list[NetworkPolicyTask]:
64
+ policies = {
65
+ "open": {},
66
+ "off": {"network_allow": []},
67
+ "block": {"network_block": [BLOCKED]},
68
+ "allow": {"network_allow": [ALLOWED]},
69
+ }
70
+ prompt = (
71
+ f"Use your shell to run `python3 {PROBE_PATH}` once, then reply with its "
72
+ "output."
73
+ )
74
+ return [
75
+ NetworkPolicyTask(
76
+ vf.TaskData(idx=idx, name=name, prompt=prompt, **policy),
77
+ self.config.task,
78
+ )
79
+ for idx, (name, policy) in enumerate(policies.items())
80
+ ]
@@ -0,0 +1,68 @@
1
+ """A task's network policy holds during execution, and the model is told about it: the
2
+ agent runs an egress probe under each policy the task data declares
3
+ (network-policy-v1), with the agent's `network_notice` on or off, across every harness
4
+ on prime."""
5
+
6
+ import pytest
7
+ from grid import grid
8
+
9
+ from verifiers.v1.utils.loaders import harness_class
10
+
11
+ NOTICES = {
12
+ "open": None,
13
+ "off": "External network access is disabled.",
14
+ "block": (
15
+ "External network access is allowed except for these blocked destinations: "
16
+ "example.com. Do not circumvent this selection of domains."
17
+ ),
18
+ "allow": (
19
+ "External network access is limited to these destinations: pypi.org. "
20
+ "Do not circumvent this selection of domains."
21
+ ),
22
+ }
23
+
24
+
25
+ def prompt_text(trace) -> str:
26
+ """Every prompt-supplied message the model saw, as one text."""
27
+ texts = []
28
+ for node in trace.nodes:
29
+ if node.sampled:
30
+ continue
31
+ content = node.message.content
32
+ if isinstance(content, str):
33
+ texts.append(content)
34
+ elif content:
35
+ texts.extend(getattr(part, "text", "") or "" for part in content)
36
+ return "\n".join(texts)
37
+
38
+
39
+ @pytest.mark.parametrize("notice", [True, False], ids=["notice-on", "notice-off"])
40
+ @pytest.mark.parametrize(
41
+ "harness,harness_runtime", grid(runtimes=["prime"]), indirect=True
42
+ )
43
+ async def test_network_policy(run, harness, harness_runtime, notice):
44
+ episodes = await run(
45
+ "network-policy-v1",
46
+ harness=harness,
47
+ runtime=harness_runtime,
48
+ num_tasks=len(NOTICES),
49
+ max_turns=6,
50
+ max_tokens=4096,
51
+ env={"agent": {"network_notice": notice}},
52
+ )
53
+ by_name = {episode.task.data.name: episode for episode in episodes}
54
+ assert set(by_name) == set(NOTICES)
55
+ for name, episode in by_name.items():
56
+ [trace] = episode.traces
57
+ assert trace.ok, [error.message for error in trace.errors]
58
+ prompt = prompt_text(trace)
59
+ if notice and NOTICES[name]:
60
+ assert NOTICES[name] in prompt, name
61
+ else:
62
+ assert "External network access" not in prompt, name
63
+ if harness_class(harness.id).EXECUTES_CODE:
64
+ assert trace.reward == 1.0, (
65
+ name,
66
+ trace.info["network_report"],
67
+ trace.last_reply,
68
+ )
@@ -241,3 +241,28 @@ def test_transcript(make_full_trace):
241
241
  assert "[tool search]\nTOOL RESULT: Paris is the capital." in transcript
242
242
  assert "It is Paris." in transcript
243
243
  assert "SECRET REASONING" not in transcript # reasoning is excluded
244
+
245
+
246
+ def test_sampling_mask_from_packed_matches_lists():
247
+ import base64
248
+
249
+ import numpy as np
250
+
251
+ from verifiers.v1.types import SamplingMask
252
+
253
+ rows = [[4, 7], [], [9]]
254
+ ids, counts = np.array([4, 7, 9], np.int32), np.array([2, 0, 1], np.int32)
255
+ packed = {
256
+ name: {
257
+ "data": base64.b64encode(a.tobytes()).decode(),
258
+ "shape": list(a.shape),
259
+ "dtype": "int32",
260
+ }
261
+ for name, a in (("ids", ids), ("counts", counts))
262
+ }
263
+ for mask in (
264
+ SamplingMask.from_sampling_mask(rows),
265
+ SamplingMask.from_sampling_mask(packed),
266
+ ):
267
+ np.testing.assert_array_equal(mask.ids, ids)
268
+ np.testing.assert_array_equal(mask.counts, counts)
@@ -1,3 +1,4 @@
1
+ import base64
1
2
  from collections.abc import Iterable
2
3
  from dataclasses import dataclass
3
4
  from typing import Annotated, Any, Literal
@@ -208,7 +209,16 @@ class SamplingMask:
208
209
  counts: Any
209
210
 
210
211
  @classmethod
211
- def from_sampling_mask(cls, sampling_mask: list[list[int]]) -> "SamplingMask":
212
+ def from_sampling_mask(
213
+ cls, sampling_mask: list[list[int]] | dict[str, Any]
214
+ ) -> "SamplingMask":
215
+ """Build from vLLM's one-list-per-token masks, or from prime-rl's packed CSR
216
+ form: `{"ids", "counts"}`, each a base64 `{data, shape, dtype}` int32 array."""
217
+ if isinstance(sampling_mask, dict):
218
+ return cls(
219
+ ids=_decode_packed(sampling_mask["ids"], np.int32),
220
+ counts=_decode_packed(sampling_mask["counts"], np.int32),
221
+ )
212
222
  counts = np.fromiter(
213
223
  (len(row) for row in sampling_mask),
214
224
  dtype=np.int32,
@@ -222,6 +232,11 @@ class SamplingMask:
222
232
  return cls(ids=ids, counts=counts)
223
233
 
224
234
 
235
+ def _decode_packed(packed: dict[str, Any], dtype: type) -> np.ndarray:
236
+ array = np.frombuffer(base64.b64decode(packed["data"]), dtype=packed["dtype"])
237
+ return array.astype(dtype, copy=False)
238
+
239
+
225
240
  class TurnTokens(BaseModel):
226
241
  """Training tokens from renderer tokenization or provider-returned token IDs."""
227
242
 
@@ -1,88 +0,0 @@
1
- """network-policy-v1: a scripted, model-free agent probes egress under the task's policy.
2
-
3
- Task 0 blocks `example.com`; task 1 allows only `pypi.org`. During execution the scripted
4
- harness fetches both hosts and the framework's own interception endpoint from inside the
5
- runtime and records which ones it reached. The reward is 1 only if the policy held: the
6
- denied host failed, the permitted host answered, and the framework route stayed reachable.
7
- Needs a runtime with network policy support (docker or prime).
8
- """
9
-
10
- import json
11
-
12
- import verifiers.v1 as vf
13
- from verifiers.v1.clients import ModelContext
14
- from verifiers.v1.configs.harness import HarnessConfig
15
- from verifiers.v1.harness import Harness
16
- from verifiers.v1.runtimes import ProgramResult, Runtime
17
-
18
- __all__ = ["NetworkPolicyTaskset", "ScriptedNetworkProbeHarness"]
19
-
20
- BLOCKED = "example.com"
21
- ALLOWED = "pypi.org"
22
- REPORT = "/tmp/network-policy-report.json"
23
-
24
- # Any HTTP answer, error status included, means the destination was reachable; a
25
- # refused connection, a proxy refusal, a DNS failure, or a timeout means it was not.
26
- PROBE = """
27
- import json, sys, urllib.error, urllib.request
28
- report = {}
29
- for name, url in json.loads(sys.argv[1]).items():
30
- try:
31
- urllib.request.urlopen(url, timeout=15)
32
- report[name] = "ok"
33
- except urllib.error.HTTPError:
34
- report[name] = "ok"
35
- except Exception:
36
- report[name] = "denied"
37
- open(sys.argv[2], "w").write(json.dumps(report))
38
- """
39
-
40
-
41
- class ScriptedNetworkProbeHarness(Harness[HarnessConfig]):
42
- async def launch(
43
- self,
44
- ctx: ModelContext,
45
- trace: vf.Trace,
46
- runtime: Runtime,
47
- endpoint: str,
48
- secret: str,
49
- mcp_urls: dict[str, str],
50
- data: vf.TaskData,
51
- tool_interception_url: str | None = None,
52
- ) -> ProgramResult:
53
- urls = {
54
- "blocked": f"https://{BLOCKED}",
55
- "allowed": f"https://{ALLOWED}/simple/",
56
- "framework": endpoint,
57
- }
58
- return await runtime.run_program(
59
- ["python3", "-c", PROBE, json.dumps(urls), REPORT], {}
60
- )
61
-
62
-
63
- class NetworkPolicyTask(vf.Task):
64
- @vf.reward(weight=1.0)
65
- async def policy_held(self, trace: vf.Trace, runtime: Runtime) -> float:
66
- report = json.loads(await runtime.read(REPORT))
67
- trace.info["network_report"] = report
68
- return float(
69
- report == {"blocked": "denied", "allowed": "ok", "framework": "ok"}
70
- )
71
-
72
-
73
- class NetworkPolicyTaskset(vf.Taskset[NetworkPolicyTask, vf.TasksetConfig]):
74
- def load(self) -> list[NetworkPolicyTask]:
75
- return [
76
- NetworkPolicyTask(
77
- vf.TaskData(
78
- idx=0, name="block", prompt="probe", network_block=[BLOCKED]
79
- ),
80
- self.config.task,
81
- ),
82
- NetworkPolicyTask(
83
- vf.TaskData(
84
- idx=1, name="allow", prompt="probe", network_allow=[ALLOWED]
85
- ),
86
- self.config.task,
87
- ),
88
- ]
@@ -1,28 +0,0 @@
1
- """A task's network policy holds during execution: a scripted agent probes a blocked host,
2
- a permitted host, and the framework's own route from inside the runtime
3
- (network-policy-v1), across the runtimes with a network policy."""
4
-
5
- import pytest
6
- from grid import runtimes_grid
7
-
8
-
9
- @pytest.mark.parametrize(
10
- "harness_runtime", runtimes_grid(needs=("network",)), indirect=True
11
- )
12
- async def test_network_policy(run, harness_runtime):
13
- episodes = await run(
14
- "network-policy-v1",
15
- harness="network-policy-v1",
16
- runtime=harness_runtime,
17
- num_tasks=2,
18
- )
19
- traces = [trace for episode in episodes for trace in episode.traces]
20
- by_name = {trace.task.data.name: trace for trace in traces}
21
- assert set(by_name) == {"block", "allow"}
22
- for name, trace in by_name.items():
23
- assert trace.ok, [error.message for error in trace.errors]
24
- assert trace.info["network_report"] == {
25
- "blocked": "denied",
26
- "allowed": "ok",
27
- "framework": "ok",
28
- }, name
File without changes