verifiers 0.1.15.dev442__tar.gz → 0.1.15.dev443__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 (421) hide show
  1. {verifiers-0.1.15.dev442 → verifiers-0.1.15.dev443}/PKG-INFO +1 -1
  2. {verifiers-0.1.15.dev442 → verifiers-0.1.15.dev443}/pyproject.toml +0 -1
  3. {verifiers-0.1.15.dev442 → verifiers-0.1.15.dev443}/tests/v1/conftest.py +5 -10
  4. verifiers-0.1.15.dev443/tests/v1/fixtures/counter_tool_v1.py +59 -0
  5. {verifiers-0.1.15.dev442 → verifiers-0.1.15.dev443}/tests/v1/fixtures/echo_agentic_v1.py +21 -18
  6. {verifiers-0.1.15.dev442 → verifiers-0.1.15.dev443}/tests/v1/fixtures/echo_tool_v1.py +29 -27
  7. {verifiers-0.1.15.dev442 → verifiers-0.1.15.dev443}/tests/v1/fixtures/echo_user_sim_v1.py +29 -28
  8. {verifiers-0.1.15.dev442 → verifiers-0.1.15.dev443}/tests/v1/fixtures/echo_v1.py +22 -17
  9. {verifiers-0.1.15.dev442 → verifiers-0.1.15.dev443}/tests/v1/fixtures/tool_response_image_v1.py +18 -18
  10. {verifiers-0.1.15.dev442 → verifiers-0.1.15.dev443}/tests/v1/test_color_codeword_tasks.py +1 -1
  11. {verifiers-0.1.15.dev442 → verifiers-0.1.15.dev443}/tests/v1/test_e2e.py +66 -58
  12. {verifiers-0.1.15.dev442 → verifiers-0.1.15.dev443}/tests/v1/test_envs.py +1 -1
  13. {verifiers-0.1.15.dev442 → verifiers-0.1.15.dev443}/tests/v1/test_graph.py +16 -8
  14. {verifiers-0.1.15.dev442 → verifiers-0.1.15.dev443}/tests/v1/test_judges.py +69 -65
  15. {verifiers-0.1.15.dev442 → verifiers-0.1.15.dev443}/tests/v1/test_trace.py +14 -10
  16. {verifiers-0.1.15.dev442 → verifiers-0.1.15.dev443}/verifiers/v1/__init__.py +18 -9
  17. verifiers-0.1.15.dev443/verifiers/v1/cli/__init__.py +1 -0
  18. {verifiers-0.1.15.dev442 → verifiers-0.1.15.dev443}/verifiers/v1/cli/dashboard/__init__.py +1 -1
  19. {verifiers-0.1.15.dev442 → verifiers-0.1.15.dev443}/verifiers/v1/cli/dashboard/base.py +2 -11
  20. {verifiers-0.1.15.dev442 → verifiers-0.1.15.dev443}/verifiers/v1/cli/dashboard/eval.py +5 -46
  21. {verifiers-0.1.15.dev442 → verifiers-0.1.15.dev443}/verifiers/v1/cli/dashboard/replay.py +1 -5
  22. {verifiers-0.1.15.dev442 → verifiers-0.1.15.dev443}/verifiers/v1/cli/dashboard/validate.py +1 -11
  23. {verifiers-0.1.15.dev442 → verifiers-0.1.15.dev443}/verifiers/v1/cli/debug.py +23 -14
  24. verifiers-0.1.15.dev443/verifiers/v1/cli/eval/__init__.py +1 -0
  25. {verifiers-0.1.15.dev442 → verifiers-0.1.15.dev443}/verifiers/v1/cli/eval/main.py +1 -11
  26. {verifiers-0.1.15.dev442 → verifiers-0.1.15.dev443}/verifiers/v1/cli/eval/resume.py +3 -6
  27. {verifiers-0.1.15.dev442 → verifiers-0.1.15.dev443}/verifiers/v1/cli/eval/runner.py +21 -25
  28. {verifiers-0.1.15.dev442 → verifiers-0.1.15.dev443}/verifiers/v1/cli/init.py +52 -55
  29. {verifiers-0.1.15.dev442 → verifiers-0.1.15.dev443}/verifiers/v1/cli/output.py +3 -3
  30. verifiers-0.1.15.dev443/verifiers/v1/cli/replay.py +229 -0
  31. {verifiers-0.1.15.dev442 → verifiers-0.1.15.dev443}/verifiers/v1/cli/serve.py +1 -7
  32. {verifiers-0.1.15.dev442 → verifiers-0.1.15.dev443}/verifiers/v1/cli/validate.py +47 -52
  33. {verifiers-0.1.15.dev442 → verifiers-0.1.15.dev443}/verifiers/v1/clients/client.py +4 -9
  34. {verifiers-0.1.15.dev442 → verifiers-0.1.15.dev443}/verifiers/v1/clients/eval.py +2 -1
  35. {verifiers-0.1.15.dev442 → verifiers-0.1.15.dev443}/verifiers/v1/clients/train.py +0 -1
  36. {verifiers-0.1.15.dev442 → verifiers-0.1.15.dev443}/verifiers/v1/configs/debug.py +0 -5
  37. {verifiers-0.1.15.dev442 → verifiers-0.1.15.dev443}/verifiers/v1/configs/eval.py +6 -11
  38. {verifiers-0.1.15.dev442 → verifiers-0.1.15.dev443}/verifiers/v1/configs/init.py +3 -12
  39. {verifiers-0.1.15.dev442 → verifiers-0.1.15.dev443}/verifiers/v1/configs/replay.py +3 -15
  40. {verifiers-0.1.15.dev442 → verifiers-0.1.15.dev443}/verifiers/v1/configs/serve.py +1 -7
  41. verifiers-0.1.15.dev443/verifiers/v1/configs/validate.py +59 -0
  42. {verifiers-0.1.15.dev442 → verifiers-0.1.15.dev443}/verifiers/v1/decorators.py +24 -44
  43. {verifiers-0.1.15.dev442 → verifiers-0.1.15.dev443}/verifiers/v1/dialects/__init__.py +1 -6
  44. {verifiers-0.1.15.dev442 → verifiers-0.1.15.dev443}/verifiers/v1/dialects/anthropic.py +3 -5
  45. {verifiers-0.1.15.dev442 → verifiers-0.1.15.dev443}/verifiers/v1/dialects/base.py +4 -4
  46. {verifiers-0.1.15.dev442 → verifiers-0.1.15.dev443}/verifiers/v1/dialects/chat.py +3 -7
  47. {verifiers-0.1.15.dev442 → verifiers-0.1.15.dev443}/verifiers/v1/dialects/responses.py +4 -4
  48. {verifiers-0.1.15.dev442 → verifiers-0.1.15.dev443}/verifiers/v1/env.py +79 -100
  49. verifiers-0.1.15.dev443/verifiers/v1/episode.py +55 -0
  50. {verifiers-0.1.15.dev442 → verifiers-0.1.15.dev443}/verifiers/v1/errors.py +4 -4
  51. {verifiers-0.1.15.dev442 → verifiers-0.1.15.dev443}/verifiers/v1/graph.py +1 -9
  52. {verifiers-0.1.15.dev442 → verifiers-0.1.15.dev443}/verifiers/v1/harness.py +14 -60
  53. {verifiers-0.1.15.dev442 → verifiers-0.1.15.dev443}/verifiers/v1/harnesses/__init__.py +0 -4
  54. {verifiers-0.1.15.dev442 → verifiers-0.1.15.dev443}/verifiers/v1/harnesses/codex/harness.py +13 -9
  55. verifiers-0.1.15.dev443/verifiers/v1/harnesses/default/__init__.py +6 -0
  56. {verifiers-0.1.15.dev442 → verifiers-0.1.15.dev443}/verifiers/v1/harnesses/default/harness.py +1 -15
  57. {verifiers-0.1.15.dev442 → verifiers-0.1.15.dev443}/verifiers/v1/harnesses/default/program.py +1 -13
  58. {verifiers-0.1.15.dev442 → verifiers-0.1.15.dev443}/verifiers/v1/harnesses/kimi_code/harness.py +2 -9
  59. {verifiers-0.1.15.dev442 → verifiers-0.1.15.dev443}/verifiers/v1/harnesses/mini_swe_agent/harness.py +1 -5
  60. verifiers-0.1.15.dev443/verifiers/v1/harnesses/null/__init__.py +3 -0
  61. {verifiers-0.1.15.dev442 → verifiers-0.1.15.dev443}/verifiers/v1/harnesses/null/harness.py +2 -12
  62. {verifiers-0.1.15.dev442 → verifiers-0.1.15.dev443}/verifiers/v1/harnesses/null/program.py +1 -11
  63. {verifiers-0.1.15.dev442 → verifiers-0.1.15.dev443}/verifiers/v1/harnesses/rlm/harness.py +3 -14
  64. {verifiers-0.1.15.dev442 → verifiers-0.1.15.dev443}/verifiers/v1/harnesses/terminus_2/harness.py +1 -5
  65. {verifiers-0.1.15.dev442 → verifiers-0.1.15.dev443}/verifiers/v1/interception/__init__.py +1 -6
  66. {verifiers-0.1.15.dev442 → verifiers-0.1.15.dev443}/verifiers/v1/interception/server.py +17 -38
  67. verifiers-0.1.15.dev443/verifiers/v1/judge.py +275 -0
  68. verifiers-0.1.15.dev443/verifiers/v1/judges/__init__.py +12 -0
  69. {verifiers-0.1.15.dev442 → verifiers-0.1.15.dev443}/verifiers/v1/judges/reference.py +6 -23
  70. {verifiers-0.1.15.dev442 → verifiers-0.1.15.dev443}/verifiers/v1/judges/rubric.py +12 -70
  71. {verifiers-0.1.15.dev442 → verifiers-0.1.15.dev443}/verifiers/v1/legacy.py +13 -17
  72. verifiers-0.1.15.dev443/verifiers/v1/loaders.py +147 -0
  73. verifiers-0.1.15.dev443/verifiers/v1/mcp/__init__.py +30 -0
  74. verifiers-0.1.15.dev443/verifiers/v1/mcp/launch.py +485 -0
  75. verifiers-0.1.15.dev443/verifiers/v1/mcp/server.py +302 -0
  76. verifiers-0.1.15.dev443/verifiers/v1/mcp/toolset.py +34 -0
  77. verifiers-0.1.15.dev443/verifiers/v1/mcp/user.py +52 -0
  78. {verifiers-0.1.15.dev442 → verifiers-0.1.15.dev443}/verifiers/v1/push.py +5 -9
  79. {verifiers-0.1.15.dev442 → verifiers-0.1.15.dev443}/verifiers/v1/rollout.py +42 -98
  80. {verifiers-0.1.15.dev442 → verifiers-0.1.15.dev443}/verifiers/v1/runtimes/__init__.py +1 -11
  81. {verifiers-0.1.15.dev442 → verifiers-0.1.15.dev443}/verifiers/v1/runtimes/base.py +10 -63
  82. {verifiers-0.1.15.dev442 → verifiers-0.1.15.dev443}/verifiers/v1/runtimes/docker.py +3 -10
  83. {verifiers-0.1.15.dev442 → verifiers-0.1.15.dev443}/verifiers/v1/runtimes/modal.py +3 -6
  84. {verifiers-0.1.15.dev442 → verifiers-0.1.15.dev443}/verifiers/v1/runtimes/prime.py +4 -8
  85. {verifiers-0.1.15.dev442 → verifiers-0.1.15.dev443}/verifiers/v1/runtimes/subprocess.py +6 -19
  86. {verifiers-0.1.15.dev442 → verifiers-0.1.15.dev443}/verifiers/v1/scoring.py +1 -1
  87. {verifiers-0.1.15.dev442 → verifiers-0.1.15.dev443}/verifiers/v1/serve/__init__.py +1 -6
  88. {verifiers-0.1.15.dev442 → verifiers-0.1.15.dev443}/verifiers/v1/serve/client.py +7 -7
  89. {verifiers-0.1.15.dev442 → verifiers-0.1.15.dev443}/verifiers/v1/serve/server.py +9 -35
  90. {verifiers-0.1.15.dev442 → verifiers-0.1.15.dev443}/verifiers/v1/serve/types.py +10 -16
  91. verifiers-0.1.15.dev443/verifiers/v1/state.py +23 -0
  92. verifiers-0.1.15.dev443/verifiers/v1/task.py +333 -0
  93. verifiers-0.1.15.dev443/verifiers/v1/taskset.py +74 -0
  94. {verifiers-0.1.15.dev442 → verifiers-0.1.15.dev443}/verifiers/v1/tasksets/__init__.py +1 -5
  95. {verifiers-0.1.15.dev442 → verifiers-0.1.15.dev443}/verifiers/v1/tasksets/harbor/__init__.py +2 -1
  96. {verifiers-0.1.15.dev442 → verifiers-0.1.15.dev443}/verifiers/v1/tasksets/harbor/taskset.py +65 -77
  97. {verifiers-0.1.15.dev442 → verifiers-0.1.15.dev443}/verifiers/v1/tasksets/lean/__init__.py +2 -0
  98. {verifiers-0.1.15.dev442 → verifiers-0.1.15.dev443}/verifiers/v1/tasksets/lean/taskset.py +119 -155
  99. {verifiers-0.1.15.dev442 → verifiers-0.1.15.dev443}/verifiers/v1/tasksets/textarena/__init__.py +4 -0
  100. verifiers-0.1.15.dev443/verifiers/v1/tasksets/textarena/taskset.py +149 -0
  101. {verifiers-0.1.15.dev442 → verifiers-0.1.15.dev443}/verifiers/v1/trace.py +48 -137
  102. {verifiers-0.1.15.dev442 → verifiers-0.1.15.dev443}/verifiers/v1/types.py +12 -86
  103. verifiers-0.1.15.dev443/verifiers/v1/utils/__init__.py +1 -0
  104. verifiers-0.1.15.dev443/verifiers/v1/utils/generic.py +19 -0
  105. {verifiers-0.1.15.dev442 → verifiers-0.1.15.dev443}/verifiers/v1/utils/install.py +1 -5
  106. verifiers-0.1.15.dev442/tests/v1/fixtures/counter_tool_v1.py +0 -67
  107. verifiers-0.1.15.dev442/verifiers/v1/cli/__init__.py +0 -3
  108. verifiers-0.1.15.dev442/verifiers/v1/cli/eval/__init__.py +0 -1
  109. verifiers-0.1.15.dev442/verifiers/v1/cli/replay.py +0 -189
  110. verifiers-0.1.15.dev442/verifiers/v1/configs/validate.py +0 -84
  111. verifiers-0.1.15.dev442/verifiers/v1/episode.py +0 -79
  112. verifiers-0.1.15.dev442/verifiers/v1/harnesses/default/__init__.py +0 -11
  113. verifiers-0.1.15.dev442/verifiers/v1/harnesses/null/__init__.py +0 -7
  114. verifiers-0.1.15.dev442/verifiers/v1/judge.py +0 -316
  115. verifiers-0.1.15.dev442/verifiers/v1/judges/__init__.py +0 -18
  116. verifiers-0.1.15.dev442/verifiers/v1/loaders.py +0 -201
  117. verifiers-0.1.15.dev442/verifiers/v1/mcp/__init__.py +0 -34
  118. verifiers-0.1.15.dev442/verifiers/v1/mcp/launch.py +0 -542
  119. verifiers-0.1.15.dev442/verifiers/v1/mcp/server.py +0 -401
  120. verifiers-0.1.15.dev442/verifiers/v1/mcp/toolset.py +0 -90
  121. verifiers-0.1.15.dev442/verifiers/v1/mcp/user.py +0 -89
  122. verifiers-0.1.15.dev442/verifiers/v1/state.py +0 -46
  123. verifiers-0.1.15.dev442/verifiers/v1/task.py +0 -108
  124. verifiers-0.1.15.dev442/verifiers/v1/taskset.py +0 -286
  125. verifiers-0.1.15.dev442/verifiers/v1/tasksets/textarena/taskset.py +0 -182
  126. verifiers-0.1.15.dev442/verifiers/v1/utils/__init__.py +0 -3
  127. {verifiers-0.1.15.dev442 → verifiers-0.1.15.dev443}/.gitignore +0 -0
  128. {verifiers-0.1.15.dev442 → verifiers-0.1.15.dev443}/LICENSE +0 -0
  129. {verifiers-0.1.15.dev442 → verifiers-0.1.15.dev443}/README.md +0 -0
  130. {verifiers-0.1.15.dev442 → verifiers-0.1.15.dev443}/tests/AGENTS.md +0 -0
  131. {verifiers-0.1.15.dev442 → verifiers-0.1.15.dev443}/tests/__init__.py +0 -0
  132. {verifiers-0.1.15.dev442 → verifiers-0.1.15.dev443}/tests/conftest.py +0 -0
  133. {verifiers-0.1.15.dev442 → verifiers-0.1.15.dev443}/tests/test_browser_env.py +0 -0
  134. {verifiers-0.1.15.dev442 → verifiers-0.1.15.dev443}/tests/test_build_script.py +0 -0
  135. {verifiers-0.1.15.dev442 → verifiers-0.1.15.dev443}/tests/test_cli_agent_env.py +0 -0
  136. {verifiers-0.1.15.dev442 → verifiers-0.1.15.dev443}/tests/test_client_auth_errors.py +0 -0
  137. {verifiers-0.1.15.dev442 → verifiers-0.1.15.dev443}/tests/test_client_config.py +0 -0
  138. {verifiers-0.1.15.dev442 → verifiers-0.1.15.dev443}/tests/test_client_multimodal_types.py +0 -0
  139. {verifiers-0.1.15.dev442 → verifiers-0.1.15.dev443}/tests/test_composable_env.py +0 -0
  140. {verifiers-0.1.15.dev442 → verifiers-0.1.15.dev443}/tests/test_context_token_metrics.py +0 -0
  141. {verifiers-0.1.15.dev442 → verifiers-0.1.15.dev443}/tests/test_decorator_ranks.py +0 -0
  142. {verifiers-0.1.15.dev442 → verifiers-0.1.15.dev443}/tests/test_endpoint_registry.py +0 -0
  143. {verifiers-0.1.15.dev442 → verifiers-0.1.15.dev443}/tests/test_env_group.py +0 -0
  144. {verifiers-0.1.15.dev442 → verifiers-0.1.15.dev443}/tests/test_env_server.py +0 -0
  145. {verifiers-0.1.15.dev442 → verifiers-0.1.15.dev443}/tests/test_environment.py +0 -0
  146. {verifiers-0.1.15.dev442 → verifiers-0.1.15.dev443}/tests/test_environment_extra.py +0 -0
  147. {verifiers-0.1.15.dev442 → verifiers-0.1.15.dev443}/tests/test_envs.py +0 -0
  148. {verifiers-0.1.15.dev442 → verifiers-0.1.15.dev443}/tests/test_error_chain.py +0 -0
  149. {verifiers-0.1.15.dev442 → verifiers-0.1.15.dev443}/tests/test_eval_display.py +0 -0
  150. {verifiers-0.1.15.dev442 → verifiers-0.1.15.dev443}/tests/test_eval_utils.py +0 -0
  151. {verifiers-0.1.15.dev442 → verifiers-0.1.15.dev443}/tests/test_gepa_cli.py +0 -0
  152. {verifiers-0.1.15.dev442 → verifiers-0.1.15.dev443}/tests/test_gepa_utils.py +0 -0
  153. {verifiers-0.1.15.dev442 → verifiers-0.1.15.dev443}/tests/test_gym_env.py +0 -0
  154. {verifiers-0.1.15.dev442 → verifiers-0.1.15.dev443}/tests/test_harbor_env_mcp.py +0 -0
  155. {verifiers-0.1.15.dev442 → verifiers-0.1.15.dev443}/tests/test_imports.py +0 -0
  156. {verifiers-0.1.15.dev442 → verifiers-0.1.15.dev443}/tests/test_init_script.py +0 -0
  157. {verifiers-0.1.15.dev442 → verifiers-0.1.15.dev443}/tests/test_install_utils.py +0 -0
  158. {verifiers-0.1.15.dev442 → verifiers-0.1.15.dev443}/tests/test_interception_utils.py +0 -0
  159. {verifiers-0.1.15.dev442 → verifiers-0.1.15.dev443}/tests/test_logging.py +0 -0
  160. {verifiers-0.1.15.dev442 → verifiers-0.1.15.dev443}/tests/test_math_rubric.py +0 -0
  161. {verifiers-0.1.15.dev442 → verifiers-0.1.15.dev443}/tests/test_maybe_think_parser.py +0 -0
  162. {verifiers-0.1.15.dev442 → verifiers-0.1.15.dev443}/tests/test_message_utils.py +0 -0
  163. {verifiers-0.1.15.dev442 → verifiers-0.1.15.dev443}/tests/test_message_utils_multimodal.py +0 -0
  164. {verifiers-0.1.15.dev442 → verifiers-0.1.15.dev443}/tests/test_multiturn_env.py +0 -0
  165. {verifiers-0.1.15.dev442 → verifiers-0.1.15.dev443}/tests/test_nemorl_client.py +0 -0
  166. {verifiers-0.1.15.dev442 → verifiers-0.1.15.dev443}/tests/test_openai_chat_completions_token_client.py +0 -0
  167. {verifiers-0.1.15.dev442 → verifiers-0.1.15.dev443}/tests/test_openai_responses_client.py +0 -0
  168. {verifiers-0.1.15.dev442 → verifiers-0.1.15.dev443}/tests/test_opencode_rlm_env.py +0 -0
  169. {verifiers-0.1.15.dev442 → verifiers-0.1.15.dev443}/tests/test_openenv_client.py +0 -0
  170. {verifiers-0.1.15.dev442 → verifiers-0.1.15.dev443}/tests/test_parser.py +0 -0
  171. {verifiers-0.1.15.dev442 → verifiers-0.1.15.dev443}/tests/test_path_utils.py +0 -0
  172. {verifiers-0.1.15.dev442 → verifiers-0.1.15.dev443}/tests/test_per_turn_timing.py +0 -0
  173. {verifiers-0.1.15.dev442 → verifiers-0.1.15.dev443}/tests/test_pricing_utils.py +0 -0
  174. {verifiers-0.1.15.dev442 → verifiers-0.1.15.dev443}/tests/test_prime_plugin.py +0 -0
  175. {verifiers-0.1.15.dev442 → verifiers-0.1.15.dev443}/tests/test_renderer_client.py +0 -0
  176. {verifiers-0.1.15.dev442 → verifiers-0.1.15.dev443}/tests/test_renderer_e2e.py +0 -0
  177. {verifiers-0.1.15.dev442 → verifiers-0.1.15.dev443}/tests/test_rlm_composable_env.py +0 -0
  178. {verifiers-0.1.15.dev442 → verifiers-0.1.15.dev443}/tests/test_rubric.py +0 -0
  179. {verifiers-0.1.15.dev442 → verifiers-0.1.15.dev443}/tests/test_rubric_group.py +0 -0
  180. {verifiers-0.1.15.dev442 → verifiers-0.1.15.dev443}/tests/test_sandbox_debug_env.py +0 -0
  181. {verifiers-0.1.15.dev442 → verifiers-0.1.15.dev443}/tests/test_sandbox_env.py +0 -0
  182. {verifiers-0.1.15.dev442 → verifiers-0.1.15.dev443}/tests/test_sandbox_mixin.py +0 -0
  183. {verifiers-0.1.15.dev442 → verifiers-0.1.15.dev443}/tests/test_save_utils.py +0 -0
  184. {verifiers-0.1.15.dev442 → verifiers-0.1.15.dev443}/tests/test_setup_script.py +0 -0
  185. {verifiers-0.1.15.dev442 → verifiers-0.1.15.dev443}/tests/test_singleturn_env.py +0 -0
  186. {verifiers-0.1.15.dev442 → verifiers-0.1.15.dev443}/tests/test_stateful_tool_env.py +0 -0
  187. {verifiers-0.1.15.dev442 → verifiers-0.1.15.dev443}/tests/test_think_parser.py +0 -0
  188. {verifiers-0.1.15.dev442 → verifiers-0.1.15.dev443}/tests/test_tool_env.py +0 -0
  189. {verifiers-0.1.15.dev442 → verifiers-0.1.15.dev443}/tests/test_tool_utils.py +0 -0
  190. {verifiers-0.1.15.dev442 → verifiers-0.1.15.dev443}/tests/test_trajectory_processing.py +0 -0
  191. {verifiers-0.1.15.dev442 → verifiers-0.1.15.dev443}/tests/test_tui_info_formatting.py +0 -0
  192. {verifiers-0.1.15.dev442 → verifiers-0.1.15.dev443}/tests/test_types.py +0 -0
  193. {verifiers-0.1.15.dev442 → verifiers-0.1.15.dev443}/tests/test_wordle_env.py +0 -0
  194. {verifiers-0.1.15.dev442 → verifiers-0.1.15.dev443}/tests/test_xml_parser.py +0 -0
  195. {verifiers-0.1.15.dev442 → verifiers-0.1.15.dev443}/tests/v1/fixtures/echo_multi_v0.py +0 -0
  196. {verifiers-0.1.15.dev442 → verifiers-0.1.15.dev443}/tests/v1/fixtures/echo_v0.py +0 -0
  197. {verifiers-0.1.15.dev442 → verifiers-0.1.15.dev443}/tests/v1/fixtures/pyproject.toml +0 -0
  198. {verifiers-0.1.15.dev442 → verifiers-0.1.15.dev443}/tests/v1/test_configs.py +0 -0
  199. {verifiers-0.1.15.dev442 → verifiers-0.1.15.dev443}/tests/v1/test_legacy.py +0 -0
  200. {verifiers-0.1.15.dev442 → verifiers-0.1.15.dev443}/tests/v1/test_scoring.py +0 -0
  201. {verifiers-0.1.15.dev442 → verifiers-0.1.15.dev443}/verifiers/__init__.py +0 -0
  202. {verifiers-0.1.15.dev442 → verifiers-0.1.15.dev443}/verifiers/cli/__init__.py +0 -0
  203. {verifiers-0.1.15.dev442 → verifiers-0.1.15.dev443}/verifiers/cli/commands/__init__.py +0 -0
  204. {verifiers-0.1.15.dev442 → verifiers-0.1.15.dev443}/verifiers/cli/commands/build.py +0 -0
  205. {verifiers-0.1.15.dev442 → verifiers-0.1.15.dev443}/verifiers/cli/commands/eval.py +0 -0
  206. {verifiers-0.1.15.dev442 → verifiers-0.1.15.dev443}/verifiers/cli/commands/gepa.py +0 -0
  207. {verifiers-0.1.15.dev442 → verifiers-0.1.15.dev443}/verifiers/cli/commands/init.py +0 -0
  208. {verifiers-0.1.15.dev442 → verifiers-0.1.15.dev443}/verifiers/cli/commands/install.py +0 -0
  209. {verifiers-0.1.15.dev442 → verifiers-0.1.15.dev443}/verifiers/cli/commands/setup.py +0 -0
  210. {verifiers-0.1.15.dev442 → verifiers-0.1.15.dev443}/verifiers/cli/plugins/__init__.py +0 -0
  211. {verifiers-0.1.15.dev442 → verifiers-0.1.15.dev443}/verifiers/cli/plugins/prime.py +0 -0
  212. {verifiers-0.1.15.dev442 → verifiers-0.1.15.dev443}/verifiers/cli/tui.py +0 -0
  213. {verifiers-0.1.15.dev442 → verifiers-0.1.15.dev443}/verifiers/clients/__init__.py +0 -0
  214. {verifiers-0.1.15.dev442 → verifiers-0.1.15.dev443}/verifiers/clients/anthropic_messages_client.py +0 -0
  215. {verifiers-0.1.15.dev442 → verifiers-0.1.15.dev443}/verifiers/clients/client.py +0 -0
  216. {verifiers-0.1.15.dev442 → verifiers-0.1.15.dev443}/verifiers/clients/nemorl_chat_completions_client.py +0 -0
  217. {verifiers-0.1.15.dev442 → verifiers-0.1.15.dev443}/verifiers/clients/openai_chat_completions_client.py +0 -0
  218. {verifiers-0.1.15.dev442 → verifiers-0.1.15.dev443}/verifiers/clients/openai_chat_completions_token_client.py +0 -0
  219. {verifiers-0.1.15.dev442 → verifiers-0.1.15.dev443}/verifiers/clients/openai_completions_client.py +0 -0
  220. {verifiers-0.1.15.dev442 → verifiers-0.1.15.dev443}/verifiers/clients/openai_responses_client.py +0 -0
  221. {verifiers-0.1.15.dev442 → verifiers-0.1.15.dev443}/verifiers/clients/renderer_client.py +0 -0
  222. {verifiers-0.1.15.dev442 → verifiers-0.1.15.dev443}/verifiers/decorators.py +0 -0
  223. {verifiers-0.1.15.dev442 → verifiers-0.1.15.dev443}/verifiers/envs/AGENTS.md +0 -0
  224. {verifiers-0.1.15.dev442 → verifiers-0.1.15.dev443}/verifiers/envs/__init__.py +0 -0
  225. {verifiers-0.1.15.dev442 → verifiers-0.1.15.dev443}/verifiers/envs/env_group.py +0 -0
  226. {verifiers-0.1.15.dev442 → verifiers-0.1.15.dev443}/verifiers/envs/environment.py +0 -0
  227. {verifiers-0.1.15.dev442 → verifiers-0.1.15.dev443}/verifiers/envs/experimental/README.md +0 -0
  228. {verifiers-0.1.15.dev442 → verifiers-0.1.15.dev443}/verifiers/envs/experimental/__init__.py +0 -0
  229. {verifiers-0.1.15.dev442 → verifiers-0.1.15.dev443}/verifiers/envs/experimental/cli_agent_env.py +0 -0
  230. {verifiers-0.1.15.dev442 → verifiers-0.1.15.dev443}/verifiers/envs/experimental/composable/README.md +0 -0
  231. {verifiers-0.1.15.dev442 → verifiers-0.1.15.dev443}/verifiers/envs/experimental/composable/__init__.py +0 -0
  232. {verifiers-0.1.15.dev442 → verifiers-0.1.15.dev443}/verifiers/envs/experimental/composable/_filter.py +0 -0
  233. {verifiers-0.1.15.dev442 → verifiers-0.1.15.dev443}/verifiers/envs/experimental/composable/composable_env.py +0 -0
  234. {verifiers-0.1.15.dev442 → verifiers-0.1.15.dev443}/verifiers/envs/experimental/composable/harness.py +0 -0
  235. {verifiers-0.1.15.dev442 → verifiers-0.1.15.dev443}/verifiers/envs/experimental/composable/harnesses/__init__.py +0 -0
  236. {verifiers-0.1.15.dev442 → verifiers-0.1.15.dev443}/verifiers/envs/experimental/composable/harnesses/mini_swe_agent.py +0 -0
  237. {verifiers-0.1.15.dev442 → verifiers-0.1.15.dev443}/verifiers/envs/experimental/composable/harnesses/opencode.py +0 -0
  238. {verifiers-0.1.15.dev442 → verifiers-0.1.15.dev443}/verifiers/envs/experimental/composable/harnesses/prompt.txt +0 -0
  239. {verifiers-0.1.15.dev442 → verifiers-0.1.15.dev443}/verifiers/envs/experimental/composable/harnesses/rlm.py +0 -0
  240. {verifiers-0.1.15.dev442 → verifiers-0.1.15.dev443}/verifiers/envs/experimental/composable/sandbox_debug_env.py +0 -0
  241. {verifiers-0.1.15.dev442 → verifiers-0.1.15.dev443}/verifiers/envs/experimental/composable/swe_debug_env.py +0 -0
  242. {verifiers-0.1.15.dev442 → verifiers-0.1.15.dev443}/verifiers/envs/experimental/composable/task.py +0 -0
  243. {verifiers-0.1.15.dev442 → verifiers-0.1.15.dev443}/verifiers/envs/experimental/composable/tasksets/__init__.py +0 -0
  244. {verifiers-0.1.15.dev442 → verifiers-0.1.15.dev443}/verifiers/envs/experimental/composable/tasksets/cp/__init__.py +0 -0
  245. {verifiers-0.1.15.dev442 → verifiers-0.1.15.dev443}/verifiers/envs/experimental/composable/tasksets/cp/cp_task.py +0 -0
  246. {verifiers-0.1.15.dev442 → verifiers-0.1.15.dev443}/verifiers/envs/experimental/composable/tasksets/cp/test_utils.py +0 -0
  247. {verifiers-0.1.15.dev442 → verifiers-0.1.15.dev443}/verifiers/envs/experimental/composable/tasksets/harbor/__init__.py +0 -0
  248. {verifiers-0.1.15.dev442 → verifiers-0.1.15.dev443}/verifiers/envs/experimental/composable/tasksets/harbor/cli_gym.py +0 -0
  249. {verifiers-0.1.15.dev442 → verifiers-0.1.15.dev443}/verifiers/envs/experimental/composable/tasksets/harbor/harbor.py +0 -0
  250. {verifiers-0.1.15.dev442 → verifiers-0.1.15.dev443}/verifiers/envs/experimental/composable/tasksets/harbor/terminal_lego.py +0 -0
  251. {verifiers-0.1.15.dev442 → verifiers-0.1.15.dev443}/verifiers/envs/experimental/composable/tasksets/math/__init__.py +0 -0
  252. {verifiers-0.1.15.dev442 → verifiers-0.1.15.dev443}/verifiers/envs/experimental/composable/tasksets/math/math_task.py +0 -0
  253. {verifiers-0.1.15.dev442 → verifiers-0.1.15.dev443}/verifiers/envs/experimental/composable/tasksets/search/README.md +0 -0
  254. {verifiers-0.1.15.dev442 → verifiers-0.1.15.dev443}/verifiers/envs/experimental/composable/tasksets/search/__init__.py +0 -0
  255. {verifiers-0.1.15.dev442 → verifiers-0.1.15.dev443}/verifiers/envs/experimental/composable/tasksets/search/openseeker/README.md +0 -0
  256. {verifiers-0.1.15.dev442 → verifiers-0.1.15.dev443}/verifiers/envs/experimental/composable/tasksets/search/openseeker/__init__.py +0 -0
  257. {verifiers-0.1.15.dev442 → verifiers-0.1.15.dev443}/verifiers/envs/experimental/composable/tasksets/search/openseeker/taskset.py +0 -0
  258. {verifiers-0.1.15.dev442 → verifiers-0.1.15.dev443}/verifiers/envs/experimental/composable/tasksets/search/quest/README.md +0 -0
  259. {verifiers-0.1.15.dev442 → verifiers-0.1.15.dev443}/verifiers/envs/experimental/composable/tasksets/search/quest/__init__.py +0 -0
  260. {verifiers-0.1.15.dev442 → verifiers-0.1.15.dev443}/verifiers/envs/experimental/composable/tasksets/search/quest/obj_task_eval/__init__.py +0 -0
  261. {verifiers-0.1.15.dev442 → verifiers-0.1.15.dev443}/verifiers/envs/experimental/composable/tasksets/search/quest/obj_task_eval/api_tools/__init__.py +0 -0
  262. {verifiers-0.1.15.dev442 → verifiers-0.1.15.dev443}/verifiers/envs/experimental/composable/tasksets/search/quest/obj_task_eval/api_tools/tool_pdf.py +0 -0
  263. {verifiers-0.1.15.dev442 → verifiers-0.1.15.dev443}/verifiers/envs/experimental/composable/tasksets/search/quest/obj_task_eval/eval_toolkit.py +0 -0
  264. {verifiers-0.1.15.dev442 → verifiers-0.1.15.dev443}/verifiers/envs/experimental/composable/tasksets/search/quest/obj_task_eval/evaluator.py +0 -0
  265. {verifiers-0.1.15.dev442 → verifiers-0.1.15.dev443}/verifiers/envs/experimental/composable/tasksets/search/quest/obj_task_eval/llm_client/__init__.py +0 -0
  266. {verifiers-0.1.15.dev442 → verifiers-0.1.15.dev443}/verifiers/envs/experimental/composable/tasksets/search/quest/obj_task_eval/llm_client/base_client.py +0 -0
  267. {verifiers-0.1.15.dev442 → verifiers-0.1.15.dev443}/verifiers/envs/experimental/composable/tasksets/search/quest/obj_task_eval/prompts/__init__.py +0 -0
  268. {verifiers-0.1.15.dev442 → verifiers-0.1.15.dev443}/verifiers/envs/experimental/composable/tasksets/search/quest/obj_task_eval/prompts/cache_prompts.py +0 -0
  269. {verifiers-0.1.15.dev442 → verifiers-0.1.15.dev443}/verifiers/envs/experimental/composable/tasksets/search/quest/obj_task_eval/utils/__init__.py +0 -0
  270. {verifiers-0.1.15.dev442 → verifiers-0.1.15.dev443}/verifiers/envs/experimental/composable/tasksets/search/quest/obj_task_eval/utils/cache_filesys.py +0 -0
  271. {verifiers-0.1.15.dev442 → verifiers-0.1.15.dev443}/verifiers/envs/experimental/composable/tasksets/search/quest/obj_task_eval/utils/load_eval_script.py +0 -0
  272. {verifiers-0.1.15.dev442 → verifiers-0.1.15.dev443}/verifiers/envs/experimental/composable/tasksets/search/quest/obj_task_eval/utils/misc.py +0 -0
  273. {verifiers-0.1.15.dev442 → verifiers-0.1.15.dev443}/verifiers/envs/experimental/composable/tasksets/search/quest/obj_task_eval/utils/tool_visit.py +0 -0
  274. {verifiers-0.1.15.dev442 → verifiers-0.1.15.dev443}/verifiers/envs/experimental/composable/tasksets/search/quest/obj_task_eval/utils/url_tools.py +0 -0
  275. {verifiers-0.1.15.dev442 → verifiers-0.1.15.dev443}/verifiers/envs/experimental/composable/tasksets/search/quest/obj_task_eval/verification_tree.py +0 -0
  276. {verifiers-0.1.15.dev442 → verifiers-0.1.15.dev443}/verifiers/envs/experimental/composable/tasksets/search/quest/open_ended.py +0 -0
  277. {verifiers-0.1.15.dev442 → verifiers-0.1.15.dev443}/verifiers/envs/experimental/composable/tasksets/search/quest/taskset.py +0 -0
  278. {verifiers-0.1.15.dev442 → verifiers-0.1.15.dev443}/verifiers/envs/experimental/composable/tasksets/search/redsearcher/README.md +0 -0
  279. {verifiers-0.1.15.dev442 → verifiers-0.1.15.dev443}/verifiers/envs/experimental/composable/tasksets/search/redsearcher/__init__.py +0 -0
  280. {verifiers-0.1.15.dev442 → verifiers-0.1.15.dev443}/verifiers/envs/experimental/composable/tasksets/search/redsearcher/taskset.py +0 -0
  281. {verifiers-0.1.15.dev442 → verifiers-0.1.15.dev443}/verifiers/envs/experimental/composable/tasksets/search/search_tasksets.py +0 -0
  282. {verifiers-0.1.15.dev442 → verifiers-0.1.15.dev443}/verifiers/envs/experimental/composable/tasksets/swe/README.md +0 -0
  283. {verifiers-0.1.15.dev442 → verifiers-0.1.15.dev443}/verifiers/envs/experimental/composable/tasksets/swe/__init__.py +0 -0
  284. {verifiers-0.1.15.dev442 → verifiers-0.1.15.dev443}/verifiers/envs/experimental/composable/tasksets/swe/multi_swe/__init__.py +0 -0
  285. {verifiers-0.1.15.dev442 → verifiers-0.1.15.dev443}/verifiers/envs/experimental/composable/tasksets/swe/multi_swe/extract_fix_patch.sh +0 -0
  286. {verifiers-0.1.15.dev442 → verifiers-0.1.15.dev443}/verifiers/envs/experimental/composable/tasksets/swe/multi_swe/taskset.py +0 -0
  287. {verifiers-0.1.15.dev442 → verifiers-0.1.15.dev443}/verifiers/envs/experimental/composable/tasksets/swe/openswe/__init__.py +0 -0
  288. {verifiers-0.1.15.dev442 → verifiers-0.1.15.dev443}/verifiers/envs/experimental/composable/tasksets/swe/openswe/taskset.py +0 -0
  289. {verifiers-0.1.15.dev442 → verifiers-0.1.15.dev443}/verifiers/envs/experimental/composable/tasksets/swe/r2e_gym/__init__.py +0 -0
  290. {verifiers-0.1.15.dev442 → verifiers-0.1.15.dev443}/verifiers/envs/experimental/composable/tasksets/swe/r2e_gym/log_parser.py +0 -0
  291. {verifiers-0.1.15.dev442 → verifiers-0.1.15.dev443}/verifiers/envs/experimental/composable/tasksets/swe/r2e_gym/taskset.py +0 -0
  292. {verifiers-0.1.15.dev442 → verifiers-0.1.15.dev443}/verifiers/envs/experimental/composable/tasksets/swe/scale_swe/__init__.py +0 -0
  293. {verifiers-0.1.15.dev442 → verifiers-0.1.15.dev443}/verifiers/envs/experimental/composable/tasksets/swe/scale_swe/taskset.py +0 -0
  294. {verifiers-0.1.15.dev442 → verifiers-0.1.15.dev443}/verifiers/envs/experimental/composable/tasksets/swe/shared/__init__.py +0 -0
  295. {verifiers-0.1.15.dev442 → verifiers-0.1.15.dev443}/verifiers/envs/experimental/composable/tasksets/swe/shared/test_patch.py +0 -0
  296. {verifiers-0.1.15.dev442 → verifiers-0.1.15.dev443}/verifiers/envs/experimental/composable/tasksets/swe/swe_bench/__init__.py +0 -0
  297. {verifiers-0.1.15.dev442 → verifiers-0.1.15.dev443}/verifiers/envs/experimental/composable/tasksets/swe/swe_bench/taskset.py +0 -0
  298. {verifiers-0.1.15.dev442 → verifiers-0.1.15.dev443}/verifiers/envs/experimental/composable/tasksets/swe/swe_lego/__init__.py +0 -0
  299. {verifiers-0.1.15.dev442 → verifiers-0.1.15.dev443}/verifiers/envs/experimental/composable/tasksets/swe/swe_lego/taskset.py +0 -0
  300. {verifiers-0.1.15.dev442 → verifiers-0.1.15.dev443}/verifiers/envs/experimental/composable/tasksets/swe/swe_rebench_v2/__init__.py +0 -0
  301. {verifiers-0.1.15.dev442 → verifiers-0.1.15.dev443}/verifiers/envs/experimental/composable/tasksets/swe/swe_rebench_v2/log_parsers.py +0 -0
  302. {verifiers-0.1.15.dev442 → verifiers-0.1.15.dev443}/verifiers/envs/experimental/composable/tasksets/swe/swe_rebench_v2/taskset.py +0 -0
  303. {verifiers-0.1.15.dev442 → verifiers-0.1.15.dev443}/verifiers/envs/experimental/composable/tasksets/swe/swe_smith/__init__.py +0 -0
  304. {verifiers-0.1.15.dev442 → verifiers-0.1.15.dev443}/verifiers/envs/experimental/composable/tasksets/swe/swe_smith/taskset.py +0 -0
  305. {verifiers-0.1.15.dev442 → verifiers-0.1.15.dev443}/verifiers/envs/experimental/composable/tasksets/swe/swe_tasksets.py +0 -0
  306. {verifiers-0.1.15.dev442 → verifiers-0.1.15.dev443}/verifiers/envs/experimental/gym_env.py +0 -0
  307. {verifiers-0.1.15.dev442 → verifiers-0.1.15.dev443}/verifiers/envs/experimental/harbor_env/__init__.py +0 -0
  308. {verifiers-0.1.15.dev442 → verifiers-0.1.15.dev443}/verifiers/envs/experimental/harbor_env/env.py +0 -0
  309. {verifiers-0.1.15.dev442 → verifiers-0.1.15.dev443}/verifiers/envs/experimental/harbor_env/mcp.py +0 -0
  310. {verifiers-0.1.15.dev442 → verifiers-0.1.15.dev443}/verifiers/envs/experimental/mcp_env.py +0 -0
  311. {verifiers-0.1.15.dev442 → verifiers-0.1.15.dev443}/verifiers/envs/experimental/opencode_env.py +0 -0
  312. {verifiers-0.1.15.dev442 → verifiers-0.1.15.dev443}/verifiers/envs/experimental/opencode_qa_env.py +0 -0
  313. {verifiers-0.1.15.dev442 → verifiers-0.1.15.dev443}/verifiers/envs/experimental/opencode_rlm_env.py +0 -0
  314. {verifiers-0.1.15.dev442 → verifiers-0.1.15.dev443}/verifiers/envs/experimental/sandbox_mixin.py +0 -0
  315. {verifiers-0.1.15.dev442 → verifiers-0.1.15.dev443}/verifiers/envs/experimental/utils/__init__.py +0 -0
  316. {verifiers-0.1.15.dev442 → verifiers-0.1.15.dev443}/verifiers/envs/experimental/utils/file_locks.py +0 -0
  317. {verifiers-0.1.15.dev442 → verifiers-0.1.15.dev443}/verifiers/envs/experimental/utils/git_checkout_cache.py +0 -0
  318. {verifiers-0.1.15.dev442 → verifiers-0.1.15.dev443}/verifiers/envs/integrations/README.md +0 -0
  319. {verifiers-0.1.15.dev442 → verifiers-0.1.15.dev443}/verifiers/envs/integrations/__init__.py +0 -0
  320. {verifiers-0.1.15.dev442 → verifiers-0.1.15.dev443}/verifiers/envs/integrations/browser_env/README.md +0 -0
  321. {verifiers-0.1.15.dev442 → verifiers-0.1.15.dev443}/verifiers/envs/integrations/browser_env/__init__.py +0 -0
  322. {verifiers-0.1.15.dev442 → verifiers-0.1.15.dev443}/verifiers/envs/integrations/browser_env/browser_env.py +0 -0
  323. {verifiers-0.1.15.dev442 → verifiers-0.1.15.dev443}/verifiers/envs/integrations/browser_env/modes/__init__.py +0 -0
  324. {verifiers-0.1.15.dev442 → verifiers-0.1.15.dev443}/verifiers/envs/integrations/browser_env/modes/base.py +0 -0
  325. {verifiers-0.1.15.dev442 → verifiers-0.1.15.dev443}/verifiers/envs/integrations/browser_env/modes/cua_mode.py +0 -0
  326. {verifiers-0.1.15.dev442 → verifiers-0.1.15.dev443}/verifiers/envs/integrations/browser_env/modes/dom_mode.py +0 -0
  327. {verifiers-0.1.15.dev442 → verifiers-0.1.15.dev443}/verifiers/envs/integrations/openenv_env.py +0 -0
  328. {verifiers-0.1.15.dev442 → verifiers-0.1.15.dev443}/verifiers/envs/integrations/reasoninggym_env.py +0 -0
  329. {verifiers-0.1.15.dev442 → verifiers-0.1.15.dev443}/verifiers/envs/integrations/textarena_env.py +0 -0
  330. {verifiers-0.1.15.dev442 → verifiers-0.1.15.dev443}/verifiers/envs/multiturn_env.py +0 -0
  331. {verifiers-0.1.15.dev442 → verifiers-0.1.15.dev443}/verifiers/envs/python_env.py +0 -0
  332. {verifiers-0.1.15.dev442 → verifiers-0.1.15.dev443}/verifiers/envs/sandbox_env.py +0 -0
  333. {verifiers-0.1.15.dev442 → verifiers-0.1.15.dev443}/verifiers/envs/singleturn_env.py +0 -0
  334. {verifiers-0.1.15.dev442 → verifiers-0.1.15.dev443}/verifiers/envs/stateful_tool_env.py +0 -0
  335. {verifiers-0.1.15.dev442 → verifiers-0.1.15.dev443}/verifiers/envs/tool_env.py +0 -0
  336. {verifiers-0.1.15.dev442 → verifiers-0.1.15.dev443}/verifiers/errors.py +0 -0
  337. {verifiers-0.1.15.dev442 → verifiers-0.1.15.dev443}/verifiers/gepa/__init__.py +0 -0
  338. {verifiers-0.1.15.dev442 → verifiers-0.1.15.dev443}/verifiers/gepa/adapter.py +0 -0
  339. {verifiers-0.1.15.dev442 → verifiers-0.1.15.dev443}/verifiers/gepa/config.py +0 -0
  340. {verifiers-0.1.15.dev442 → verifiers-0.1.15.dev443}/verifiers/gepa/display.py +0 -0
  341. {verifiers-0.1.15.dev442 → verifiers-0.1.15.dev443}/verifiers/gepa/gepa_utils.py +0 -0
  342. {verifiers-0.1.15.dev442 → verifiers-0.1.15.dev443}/verifiers/parsers/__init__.py +0 -0
  343. {verifiers-0.1.15.dev442 → verifiers-0.1.15.dev443}/verifiers/parsers/maybe_think_parser.py +0 -0
  344. {verifiers-0.1.15.dev442 → verifiers-0.1.15.dev443}/verifiers/parsers/parser.py +0 -0
  345. {verifiers-0.1.15.dev442 → verifiers-0.1.15.dev443}/verifiers/parsers/think_parser.py +0 -0
  346. {verifiers-0.1.15.dev442 → verifiers-0.1.15.dev443}/verifiers/parsers/xml_parser.py +0 -0
  347. {verifiers-0.1.15.dev442 → verifiers-0.1.15.dev443}/verifiers/rubrics/__init__.py +0 -0
  348. {verifiers-0.1.15.dev442 → verifiers-0.1.15.dev443}/verifiers/rubrics/experimental/hybrid_math_rubric.py +0 -0
  349. {verifiers-0.1.15.dev442 → verifiers-0.1.15.dev443}/verifiers/rubrics/judge_rubric.py +0 -0
  350. {verifiers-0.1.15.dev442 → verifiers-0.1.15.dev443}/verifiers/rubrics/math_rubric.py +0 -0
  351. {verifiers-0.1.15.dev442 → verifiers-0.1.15.dev443}/verifiers/rubrics/rubric.py +0 -0
  352. {verifiers-0.1.15.dev442 → verifiers-0.1.15.dev443}/verifiers/rubrics/rubric_group.py +0 -0
  353. {verifiers-0.1.15.dev442 → verifiers-0.1.15.dev443}/verifiers/scripts/__init__.py +0 -0
  354. {verifiers-0.1.15.dev442 → verifiers-0.1.15.dev443}/verifiers/scripts/build.py +0 -0
  355. {verifiers-0.1.15.dev442 → verifiers-0.1.15.dev443}/verifiers/scripts/eval.py +0 -0
  356. {verifiers-0.1.15.dev442 → verifiers-0.1.15.dev443}/verifiers/scripts/gepa.py +0 -0
  357. {verifiers-0.1.15.dev442 → verifiers-0.1.15.dev443}/verifiers/scripts/init.py +0 -0
  358. {verifiers-0.1.15.dev442 → verifiers-0.1.15.dev443}/verifiers/scripts/install.py +0 -0
  359. {verifiers-0.1.15.dev442 → verifiers-0.1.15.dev443}/verifiers/scripts/setup.py +0 -0
  360. {verifiers-0.1.15.dev442 → verifiers-0.1.15.dev443}/verifiers/scripts/tui.py +0 -0
  361. {verifiers-0.1.15.dev442 → verifiers-0.1.15.dev443}/verifiers/serve/__init__.py +0 -0
  362. {verifiers-0.1.15.dev442 → verifiers-0.1.15.dev443}/verifiers/serve/client/env_client.py +0 -0
  363. {verifiers-0.1.15.dev442 → verifiers-0.1.15.dev443}/verifiers/serve/client/zmq_env_client.py +0 -0
  364. {verifiers-0.1.15.dev442 → verifiers-0.1.15.dev443}/verifiers/serve/server/__init__.py +0 -0
  365. {verifiers-0.1.15.dev442 → verifiers-0.1.15.dev443}/verifiers/serve/server/env_router.py +0 -0
  366. {verifiers-0.1.15.dev442 → verifiers-0.1.15.dev443}/verifiers/serve/server/env_server.py +0 -0
  367. {verifiers-0.1.15.dev442 → verifiers-0.1.15.dev443}/verifiers/serve/server/env_worker.py +0 -0
  368. {verifiers-0.1.15.dev442 → verifiers-0.1.15.dev443}/verifiers/serve/server/zmq_env_server.py +0 -0
  369. {verifiers-0.1.15.dev442 → verifiers-0.1.15.dev443}/verifiers/serve/types.py +0 -0
  370. {verifiers-0.1.15.dev442 → verifiers-0.1.15.dev443}/verifiers/types.py +0 -0
  371. {verifiers-0.1.15.dev442 → verifiers-0.1.15.dev443}/verifiers/utils/__init__.py +0 -0
  372. {verifiers-0.1.15.dev442 → verifiers-0.1.15.dev443}/verifiers/utils/async_utils.py +0 -0
  373. {verifiers-0.1.15.dev442 → verifiers-0.1.15.dev443}/verifiers/utils/client_utils.py +0 -0
  374. {verifiers-0.1.15.dev442 → verifiers-0.1.15.dev443}/verifiers/utils/config_utils.py +0 -0
  375. {verifiers-0.1.15.dev442 → verifiers-0.1.15.dev443}/verifiers/utils/data_utils.py +0 -0
  376. {verifiers-0.1.15.dev442 → verifiers-0.1.15.dev443}/verifiers/utils/display_utils.py +0 -0
  377. {verifiers-0.1.15.dev442 → verifiers-0.1.15.dev443}/verifiers/utils/env_config_utils.py +0 -0
  378. {verifiers-0.1.15.dev442 → verifiers-0.1.15.dev443}/verifiers/utils/env_utils.py +0 -0
  379. {verifiers-0.1.15.dev442 → verifiers-0.1.15.dev443}/verifiers/utils/error_utils.py +0 -0
  380. {verifiers-0.1.15.dev442 → verifiers-0.1.15.dev443}/verifiers/utils/eval_display.py +0 -0
  381. {verifiers-0.1.15.dev442 → verifiers-0.1.15.dev443}/verifiers/utils/eval_utils.py +0 -0
  382. {verifiers-0.1.15.dev442 → verifiers-0.1.15.dev443}/verifiers/utils/heartbeat.py +0 -0
  383. {verifiers-0.1.15.dev442 → verifiers-0.1.15.dev443}/verifiers/utils/import_utils.py +0 -0
  384. {verifiers-0.1.15.dev442 → verifiers-0.1.15.dev443}/verifiers/utils/install_utils.py +0 -0
  385. {verifiers-0.1.15.dev442 → verifiers-0.1.15.dev443}/verifiers/utils/interception_utils.py +0 -0
  386. {verifiers-0.1.15.dev442 → verifiers-0.1.15.dev443}/verifiers/utils/logging_utils.py +0 -0
  387. {verifiers-0.1.15.dev442 → verifiers-0.1.15.dev443}/verifiers/utils/message_utils.py +0 -0
  388. {verifiers-0.1.15.dev442 → verifiers-0.1.15.dev443}/verifiers/utils/metric_utils.py +0 -0
  389. {verifiers-0.1.15.dev442 → verifiers-0.1.15.dev443}/verifiers/utils/path_utils.py +0 -0
  390. {verifiers-0.1.15.dev442 → verifiers-0.1.15.dev443}/verifiers/utils/pricing_utils.py +0 -0
  391. {verifiers-0.1.15.dev442 → verifiers-0.1.15.dev443}/verifiers/utils/process_utils.py +0 -0
  392. {verifiers-0.1.15.dev442 → verifiers-0.1.15.dev443}/verifiers/utils/response_utils.py +0 -0
  393. {verifiers-0.1.15.dev442 → verifiers-0.1.15.dev443}/verifiers/utils/save_utils.py +0 -0
  394. {verifiers-0.1.15.dev442 → verifiers-0.1.15.dev443}/verifiers/utils/serve_utils.py +0 -0
  395. {verifiers-0.1.15.dev442 → verifiers-0.1.15.dev443}/verifiers/utils/thread_utils.py +0 -0
  396. {verifiers-0.1.15.dev442 → verifiers-0.1.15.dev443}/verifiers/utils/threaded_sandbox_client.py +0 -0
  397. {verifiers-0.1.15.dev442 → verifiers-0.1.15.dev443}/verifiers/utils/tool_utils.py +0 -0
  398. {verifiers-0.1.15.dev442 → verifiers-0.1.15.dev443}/verifiers/utils/usage_utils.py +0 -0
  399. {verifiers-0.1.15.dev442 → verifiers-0.1.15.dev443}/verifiers/utils/version_utils.py +0 -0
  400. {verifiers-0.1.15.dev442 → verifiers-0.1.15.dev443}/verifiers/v1/cli/resolve.py +0 -0
  401. {verifiers-0.1.15.dev442 → verifiers-0.1.15.dev443}/verifiers/v1/clients/__init__.py +0 -0
  402. {verifiers-0.1.15.dev442 → verifiers-0.1.15.dev443}/verifiers/v1/clients/config.py +0 -0
  403. {verifiers-0.1.15.dev442 → verifiers-0.1.15.dev443}/verifiers/v1/configs/__init__.py +0 -0
  404. {verifiers-0.1.15.dev442 → verifiers-0.1.15.dev443}/verifiers/v1/harnesses/codex/__init__.py +0 -0
  405. {verifiers-0.1.15.dev442 → verifiers-0.1.15.dev443}/verifiers/v1/harnesses/kimi_code/__init__.py +0 -0
  406. {verifiers-0.1.15.dev442 → verifiers-0.1.15.dev443}/verifiers/v1/harnesses/mini_swe_agent/__init__.py +0 -0
  407. {verifiers-0.1.15.dev442 → verifiers-0.1.15.dev443}/verifiers/v1/harnesses/mini_swe_agent/program.py +0 -0
  408. {verifiers-0.1.15.dev442 → verifiers-0.1.15.dev443}/verifiers/v1/harnesses/rlm/__init__.py +0 -0
  409. {verifiers-0.1.15.dev442 → verifiers-0.1.15.dev443}/verifiers/v1/harnesses/terminus_2/__init__.py +0 -0
  410. {verifiers-0.1.15.dev442 → verifiers-0.1.15.dev443}/verifiers/v1/harnesses/terminus_2/program.py +0 -0
  411. {verifiers-0.1.15.dev442 → verifiers-0.1.15.dev443}/verifiers/v1/interception/pool.py +0 -0
  412. {verifiers-0.1.15.dev442 → verifiers-0.1.15.dev443}/verifiers/v1/judges/reference.txt +0 -0
  413. {verifiers-0.1.15.dev442 → verifiers-0.1.15.dev443}/verifiers/v1/judges/rubric.txt +0 -0
  414. {verifiers-0.1.15.dev442 → verifiers-0.1.15.dev443}/verifiers/v1/retries.py +0 -0
  415. {verifiers-0.1.15.dev442 → verifiers-0.1.15.dev443}/verifiers/v1/runtimes/limiters.py +0 -0
  416. {verifiers-0.1.15.dev442 → verifiers-0.1.15.dev443}/verifiers/v1/serve/pool.py +0 -0
  417. {verifiers-0.1.15.dev442 → verifiers-0.1.15.dev443}/verifiers/v1/tasksets/lean/scoring.py +0 -0
  418. {verifiers-0.1.15.dev442 → verifiers-0.1.15.dev443}/verifiers/v1/utils/aio.py +0 -0
  419. {verifiers-0.1.15.dev442 → verifiers-0.1.15.dev443}/verifiers/v1/utils/format.py +0 -0
  420. {verifiers-0.1.15.dev442 → verifiers-0.1.15.dev443}/verifiers/v1/utils/logging.py +0 -0
  421. {verifiers-0.1.15.dev442 → verifiers-0.1.15.dev443}/verifiers/v1/utils/memory.py +0 -0
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: verifiers
3
- Version: 0.1.15.dev442
3
+ Version: 0.1.15.dev443
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
@@ -247,7 +247,6 @@ markers = [
247
247
  "prime: v1 e2e cases touching the prime runtime (real sandbox + tunnel; local-only, excluded in CI)",
248
248
  "modal: v1 e2e cases touching the modal runtime (local-only setup; excluded in CI)",
249
249
  "colocated: v1 e2e cases with a user/tool server colocated in the harness runtime",
250
- "shared: v1 e2e cases with a shared (one-per-eval) tool server",
251
250
  "null: v1 e2e cases on the null harness",
252
251
  "default: v1 e2e cases on the default harness",
253
252
  "rlm: v1 e2e cases on the rlm harness",
@@ -19,7 +19,7 @@ Every matrix value carries a pytest mark, so subsets select with `-m`:
19
19
  uv run pytest tests/v1 -n auto -m prime # only prime (real sandboxes; local)
20
20
  uv run pytest tests/v1 -n auto -m modal # only modal (needs local setup)
21
21
 
22
- Marks: runtimes `subprocess` / `docker` / `prime` / `modal`, placements `colocated` / `shared`,
22
+ Marks: runtimes `subprocess` / `docker` / `prime` / `modal`, placement `colocated`,
23
23
  harnesses `null` / `default` / `rlm` / `kimi_code` / `codex`. A mark is applied per axis, so it
24
24
  selects every case touching that value on ANY axis; for one exact combination use `-k` on the test
25
25
  id (e.g. `-k "harness-in-docker-with-tool-in-subprocess"`). prime/modal provision real remote
@@ -75,19 +75,16 @@ USER_RUNTIMES = [
75
75
 
76
76
  @pytest.fixture(params=USER_RUNTIMES)
77
77
  def user_runtime(request) -> dict:
78
- """A `taskset.user` override placing the user simulator: `colocated` (inside the harness's
78
+ """A `taskset.task.user` override placing the user simulator: `colocated` (inside the harness's
79
79
  runtime) or its own runtime, by type."""
80
80
  if request.param == "colocated":
81
81
  return {"colocated": True}
82
82
  return {"colocated": False, "runtime": {"type": request.param}}
83
83
 
84
84
 
85
- # The tool server's runtime: inside the harness's runtime (`colocated`), shared once per eval, or its
86
- # own runtime per rollout; this fans the tool test across all of them, each carrying its
87
- # placement/runtime mark (colocated/shared use the host subprocess runtime).
85
+ # Task-scoped and shared tool tests both use these runtime placements.
88
86
  TOOL_RUNTIMES = [
89
87
  pytest.param("colocated", marks=pytest.mark.colocated, id="with-tool-colocated"),
90
- pytest.param("shared", marks=pytest.mark.shared, id="with-tool-shared"),
91
88
  pytest.param(
92
89
  "subprocess", marks=pytest.mark.subprocess, id="with-tool-in-subprocess"
93
90
  ),
@@ -99,12 +96,10 @@ TOOL_RUNTIMES = [
99
96
 
100
97
  @pytest.fixture(params=TOOL_RUNTIMES)
101
98
  def tool_runtime(request) -> dict:
102
- """A `taskset.tools` override placing the tool server: `colocated` (inside the harness's
103
- runtime), `shared` (one instance for the whole eval), or its own runtime, by type."""
99
+ """A `taskset.task.tools` override placing the tool server: `colocated` (inside the harness's
100
+ runtime) or its own runtime, by type."""
104
101
  if request.param == "colocated":
105
102
  return {"colocated": True}
106
- if request.param == "shared":
107
- return {"shared": True}
108
103
  return {"runtime": {"type": request.param}}
109
104
 
110
105
 
@@ -0,0 +1,59 @@
1
+ """Task-scoped counter tool with typed rollout state."""
2
+
3
+ import verifiers.v1 as vf
4
+
5
+ TARGET = 3
6
+
7
+
8
+ class CounterState(vf.State):
9
+ count: int = 0
10
+
11
+
12
+ class CounterToolset(vf.Toolset[vf.ToolsetConfig, CounterState]):
13
+ TOOL_PREFIX = "counter"
14
+
15
+ @vf.tool
16
+ def bump(self) -> str:
17
+ """Increment the shared counter and return its new value."""
18
+ self.state.count += 1
19
+ return f"count={self.state.count}"
20
+
21
+
22
+ class CounterTaskConfig(vf.TaskConfig):
23
+ tools: vf.ToolsetConfig = vf.ToolsetConfig()
24
+
25
+
26
+ class CounterTask(vf.Task[vf.TaskData, CounterState, CounterTaskConfig]):
27
+ tools = (CounterToolset,)
28
+
29
+ @vf.reward(weight=1.0)
30
+ async def counted(self, trace: vf.Trace) -> float:
31
+ return float(trace.state.count >= 2)
32
+
33
+
34
+ class CounterConfig(vf.TasksetConfig):
35
+ task: CounterTaskConfig = CounterTaskConfig()
36
+
37
+
38
+ class CounterTaskset(vf.Taskset[CounterTask, CounterConfig]):
39
+ def load(self) -> list[CounterTask]:
40
+ return [
41
+ CounterTask(
42
+ vf.TaskData(
43
+ idx=0,
44
+ prompt=(
45
+ f"Call the `counter_bump` tool {TARGET} times, one call per turn — wait "
46
+ "for each result before the next. After the last result, reply with "
47
+ "<answer>done</answer>."
48
+ ),
49
+ ),
50
+ self.config.task,
51
+ )
52
+ ]
53
+
54
+
55
+ __all__ = ["CounterTaskset"]
56
+
57
+
58
+ if __name__ == "__main__":
59
+ CounterToolset.run()
@@ -25,39 +25,42 @@ def lenient_match(answer: str, text: str) -> bool:
25
25
  return _key(answer) in _key(text)
26
26
 
27
27
 
28
- class EchoAgenticTask(vf.Task):
28
+ class EchoAgenticData(vf.TaskData):
29
29
  answer: str
30
30
  """The phrase the model should write into the file."""
31
31
 
32
32
 
33
+ class EchoAgenticTask(vf.Task[EchoAgenticData]):
34
+ @vf.reward(weight=1.0)
35
+ async def wrote_phrase(self, runtime: Runtime) -> float:
36
+ try:
37
+ content = (await runtime.read(TARGET)).decode(errors="replace")
38
+ except (SandboxError, OSError, ValueError):
39
+ return 0.0 # the model never wrote the file
40
+ return float(lenient_match(self.data.answer, content))
41
+
42
+
33
43
  class EchoAgenticConfig(vf.TasksetConfig):
34
44
  phrase: str = "hello world"
35
45
 
36
46
 
37
47
  class EchoAgenticTaskset(vf.Taskset[EchoAgenticTask, EchoAgenticConfig]):
38
- def load_tasks(self) -> list[EchoAgenticTask]:
48
+ def load(self) -> list[EchoAgenticTask]:
39
49
  phrase = self.config.phrase
40
50
  return [
41
51
  EchoAgenticTask(
42
- idx=0,
43
- prompt=(
44
- f"Use the bash tool to write exactly the text '{phrase}' to a file named "
45
- f"{TARGET} in the current directory, then finish."
52
+ EchoAgenticData(
53
+ idx=0,
54
+ prompt=(
55
+ f"Use the bash tool to write exactly the text '{phrase}' to a file "
56
+ f"named {TARGET} in the current directory, then finish."
57
+ ),
58
+ system_prompt=SYSTEM,
59
+ answer=phrase,
46
60
  ),
47
- system_prompt=SYSTEM,
48
- answer=phrase,
61
+ self.config.task,
49
62
  )
50
63
  ]
51
64
 
52
- @vf.reward(weight=1.0)
53
- async def wrote_phrase(
54
- self, task: EchoAgenticTask, trace: vf.Trace, runtime: Runtime
55
- ) -> float:
56
- try:
57
- content = (await runtime.read(TARGET)).decode(errors="replace")
58
- except (SandboxError, OSError, ValueError):
59
- return 0.0 # the model never wrote the file
60
- return float(lenient_match(task.answer, content))
61
-
62
65
 
63
66
  __all__ = ["EchoAgenticTaskset"]
@@ -1,12 +1,12 @@
1
1
  """echo (v1, MCP tool): retrieve a stamped echo from a `vf.Toolset`, then report it.
2
2
 
3
- The v1 tool fixture for the e2e matrix. The taskset declares an `EchoToolset` (`vf.Toolset`)
4
- with one `@vf.tool` method whose placement is CLI-tunable (`--taskset.tools.colocated`,
5
- `--taskset.tools.shared`, `--taskset.tools.runtime.type`): it runs colocated in the harness's
6
- runtime, shared once per eval, or in its own runtime, and the harness must reach it wherever it
7
- lives. The tool stamps its output with a token the prompt never reveals, so the reward is
8
- 1.0 only if the model actually called the tool — trivial when the infra works, impossible when
9
- it doesn't. The tool is task-agnostic, so it works in `shared` placement too.
3
+ The v1 tool fixture for the e2e matrix. The task declares an `EchoToolset` (`vf.Toolset`)
4
+ with one `@vf.tool` method whose placement is CLI-tunable (`--taskset.task.tools.colocated`,
5
+ `--taskset.task.tools.runtime.type`): it runs colocated in the harness's runtime or in its
6
+ own runtime, and the harness must reach it wherever it lives. The tool stamps its output
7
+ with a token the prompt never reveals, so the reward is 1.0 only if the model actually
8
+ called the tool — trivial when the infra works, impossible when it doesn't. The tool is
9
+ task-agnostic, so it would also serve taskset-scoped (`Taskset.tools`).
10
10
  """
11
11
 
12
12
  import verifiers.v1 as vf
@@ -24,38 +24,40 @@ class EchoToolset(vf.Toolset[vf.ToolsetConfig]):
24
24
  return f"{message} [{ECHO_TOKEN}]"
25
25
 
26
26
 
27
- class EchoToolTask(vf.Task):
28
- pass
27
+ class EchoToolTaskConfig(vf.TaskConfig):
28
+ tools: vf.ToolsetConfig = vf.ToolsetConfig()
29
+
30
+
31
+ class EchoToolTask(vf.Task[vf.TaskData, vf.State, EchoToolTaskConfig]):
32
+ tools = (EchoToolset,)
33
+
34
+ @vf.reward(weight=1.0)
35
+ async def echoed(self, trace: vf.Trace) -> float:
36
+ # The stamped token reaches the answer only if the model called the MCP tool.
37
+ last = trace.assistant_messages[-1].content if trace.assistant_messages else ""
38
+ last = (last or "").lower()
39
+ return float(PHRASE in last and ECHO_TOKEN in last)
29
40
 
30
41
 
31
42
  class EchoToolConfig(vf.TasksetConfig):
32
- tools: vf.ToolsetConfig = vf.ToolsetConfig()
43
+ task: EchoToolTaskConfig = EchoToolTaskConfig()
33
44
 
34
45
 
35
46
  class EchoToolTaskset(vf.Taskset[EchoToolTask, EchoToolConfig]):
36
- def load_tasks(self) -> list[EchoToolTask]:
47
+ def load(self) -> list[EchoToolTask]:
37
48
  return [
38
49
  EchoToolTask(
39
- idx=0,
40
- prompt=(
41
- f'Call the `echo_back` tool with the message "{PHRASE}", then reply '
42
- "with exactly what it returns inside <answer></answer> tags."
50
+ vf.TaskData(
51
+ idx=0,
52
+ prompt=(
53
+ f'Call the `echo_back` tool with the message "{PHRASE}", then reply '
54
+ "with exactly what it returns inside <answer></answer> tags."
55
+ ),
43
56
  ),
57
+ self.config.task,
44
58
  )
45
59
  ]
46
60
 
47
- def tools(self, task: EchoToolTask) -> list[vf.Toolset]:
48
- return [EchoToolset(self.config.tools)]
49
-
50
- @vf.reward(weight=1.0)
51
- async def echoed(
52
- self, task: EchoToolTask, trace: vf.Trace, runtime: vf.Runtime
53
- ) -> float:
54
- # The stamped token reaches the answer only if the model called the MCP tool.
55
- last = trace.assistant_messages[-1].content if trace.assistant_messages else ""
56
- last = (last or "").lower()
57
- return float(PHRASE in last and ECHO_TOKEN in last)
58
-
59
61
 
60
62
  __all__ = ["EchoToolTaskset"]
61
63
 
@@ -1,11 +1,4 @@
1
- """echo (v1, user simulator): echo a phrase per turn, driven by a `vf.User` simulator.
2
-
3
- The v1 user-sim fixture for the e2e matrix. The user simulator is a `vf.User` class whose
4
- placement is CLI-tunable (`--taskset.user.colocated`, `--taskset.user.runtime.type`): it runs
5
- either inside the harness's runtime (`colocated`) or in its own runtime (the default), and
6
- either way the framework drives it and reaches it from wherever the harness runs. A user-sim is
7
- a task tool, so this needs a tool-supporting harness.
8
- """
1
+ """Multi-turn echo task driven by a `vf.User` simulator."""
9
2
 
10
3
  import verifiers.v1 as vf
11
4
 
@@ -17,13 +10,13 @@ def _key(text: str) -> str:
17
10
  return "".join(c for c in text.casefold() if c.isalnum())
18
11
 
19
12
 
20
- class EchoUserSimTask(vf.Task):
21
- phrases: list[str]
13
+ class EchoUserSimTaskConfig(vf.TaskConfig):
14
+ user: vf.UserConfig = vf.UserConfig()
22
15
 
23
16
 
24
17
  class EchoUserSimConfig(vf.TasksetConfig):
25
18
  phrases: list[str] = PHRASES
26
- user: vf.UserConfig = vf.UserConfig()
19
+ task: EchoUserSimTaskConfig = EchoUserSimTaskConfig()
27
20
 
28
21
 
29
22
  class EchoUserSimState(vf.State):
@@ -45,36 +38,44 @@ class EchoUserSimUser(vf.User[vf.UserConfig, EchoUserSimState]):
45
38
  return [{"role": "user", "content": self.phrases[self.turns]}]
46
39
 
47
40
 
48
- class EchoUserSimTaskset(
49
- vf.Taskset[EchoUserSimTask, EchoUserSimConfig, EchoUserSimState]
41
+ class EchoUserSimData(vf.TaskData):
42
+ phrases: list[str]
43
+
44
+
45
+ class EchoUserSimTask(
46
+ vf.Task[EchoUserSimData, EchoUserSimState, EchoUserSimTaskConfig]
50
47
  ):
48
+ user = EchoUserSimUser
49
+
51
50
  @vf.stop
52
51
  async def user_finished(self, trace: vf.Trace) -> bool:
53
52
  return trace.state.user_finished
54
53
 
55
- def load_tasks(self) -> list[EchoUserSimTask]:
56
- return [
57
- EchoUserSimTask(
58
- idx=0,
59
- prompt=self.config.phrases[0],
60
- system_prompt=SYSTEM,
61
- phrases=self.config.phrases,
62
- )
63
- ]
64
-
65
- def user(self, task: EchoUserSimTask) -> vf.User:
66
- return EchoUserSimUser(self.config.user)
67
-
68
54
  @vf.reward(weight=1.0)
69
- async def echoed(self, task: EchoUserSimTask, trace: vf.Trace) -> float:
55
+ async def echoed(self, trace: vf.Trace) -> float:
70
56
  replies = [m.content for m in trace.assistant_messages]
71
- phrases = task.phrases
57
+ phrases = self.data.phrases
72
58
  if len(replies) < len(phrases):
73
59
  return 0.0
74
60
  matched = sum(_key(p) in _key(r or "") for r, p in zip(replies, phrases))
75
61
  return matched / len(phrases)
76
62
 
77
63
 
64
+ class EchoUserSimTaskset(vf.Taskset[EchoUserSimTask, EchoUserSimConfig]):
65
+ def load(self) -> list[EchoUserSimTask]:
66
+ return [
67
+ EchoUserSimTask(
68
+ EchoUserSimData(
69
+ idx=0,
70
+ prompt=self.config.phrases[0],
71
+ system_prompt=SYSTEM,
72
+ phrases=self.config.phrases,
73
+ ),
74
+ self.config.task,
75
+ )
76
+ ]
77
+
78
+
78
79
  __all__ = ["EchoUserSimTaskset"]
79
80
 
80
81
 
@@ -22,40 +22,45 @@ def lenient_match(answer: str, text: str) -> bool:
22
22
  return _key(answer) in _key(text)
23
23
 
24
24
 
25
- class EchoTask(vf.Task):
25
+ class EchoData(vf.TaskData):
26
26
  answer: str
27
27
  """The phrase the model should echo back."""
28
28
 
29
29
 
30
+ class EchoTask(vf.Task[EchoData]):
31
+ @vf.stop
32
+ async def single_turn(self, trace: vf.Trace) -> bool:
33
+ return trace.num_turns >= 1
34
+
35
+ @vf.reward(weight=1.0)
36
+ async def echoed(self, trace: vf.Trace) -> float:
37
+ reply = trace.assistant_messages[-1].content if trace.assistant_messages else ""
38
+ return float(lenient_match(self.data.answer, reply or ""))
39
+
40
+
30
41
  class EchoConfig(vf.TasksetConfig):
31
42
  phrases: list[str] = ["hello world", "ping", "verifiers"]
32
43
 
33
44
 
34
45
  class EchoTaskset(vf.Taskset[EchoTask, EchoConfig]):
35
- def load_tasks(self) -> list[EchoTask]:
46
+ def load(self) -> list[EchoTask]:
36
47
  return [
37
48
  # Keep coding-agent harnesses on the direct-response path instead of
38
49
  # spending this single-turn smoke task on a tool call.
39
50
  EchoTask(
40
- idx=i,
41
- prompt=(
42
- "Do not call tools or execute code. Reply immediately and include "
43
- f"this exact phrase in your final response: {phrase}"
51
+ EchoData(
52
+ idx=i,
53
+ prompt=(
54
+ "Do not call tools or execute code. Reply immediately and include "
55
+ f"this exact phrase in your final response: {phrase}"
56
+ ),
57
+ system_prompt=SYSTEM,
58
+ answer=phrase,
44
59
  ),
45
- system_prompt=SYSTEM,
46
- answer=phrase,
60
+ self.config.task,
47
61
  )
48
62
  for i, phrase in enumerate(self.config.phrases)
49
63
  ]
50
64
 
51
- @vf.stop
52
- async def single_turn(self, trace: vf.Trace) -> bool:
53
- return trace.num_turns >= 1
54
-
55
- @vf.reward(weight=1.0)
56
- async def echoed(self, task: EchoTask, trace: vf.Trace) -> float:
57
- reply = trace.assistant_messages[-1].content if trace.assistant_messages else ""
58
- return float(lenient_match(task.answer, reply or ""))
59
-
60
65
 
61
66
  __all__ = ["EchoTaskset"]
@@ -27,24 +27,7 @@ class VisionToolset(vf.Toolset[vf.ToolsetConfig]):
27
27
 
28
28
 
29
29
  class ToolResponseImageTask(vf.Task):
30
- pass
31
-
32
-
33
- class ToolResponseImageTaskset(vf.Taskset[ToolResponseImageTask, vf.TasksetConfig]):
34
- def load_tasks(self) -> list[ToolResponseImageTask]:
35
- return [
36
- ToolResponseImageTask(
37
- idx=0,
38
- prompt=(
39
- "Call the `vision_snapshot` tool exactly once. After it returns, "
40
- "reply with exactly `done`."
41
- ),
42
- system_prompt=SYSTEM,
43
- )
44
- ]
45
-
46
- def tools(self, task: ToolResponseImageTask) -> list[vf.Toolset]:
47
- return [VisionToolset(vf.ToolsetConfig())]
30
+ tools = (VisionToolset,)
48
31
 
49
32
  @vf.reward(weight=1.0)
50
33
  async def preserved_image_tool_result(self, trace: vf.Trace) -> float:
@@ -56,6 +39,23 @@ class ToolResponseImageTaskset(vf.Taskset[ToolResponseImageTask, vf.TasksetConfi
56
39
  return 0.0
57
40
 
58
41
 
42
+ class ToolResponseImageTaskset(vf.Taskset[ToolResponseImageTask, vf.TasksetConfig]):
43
+ def load(self) -> list[ToolResponseImageTask]:
44
+ return [
45
+ ToolResponseImageTask(
46
+ vf.TaskData(
47
+ idx=0,
48
+ prompt=(
49
+ "Call the `vision_snapshot` tool exactly once. After it returns, "
50
+ "reply with exactly `done`."
51
+ ),
52
+ system_prompt=SYSTEM,
53
+ ),
54
+ self.config.task,
55
+ )
56
+ ]
57
+
58
+
59
59
  __all__ = ["ToolResponseImageTaskset"]
60
60
 
61
61
 
@@ -12,7 +12,7 @@ def test_color_images_are_rendered_once(monkeypatch) -> None:
12
12
  monkeypatch.setattr(taskset, "color_data_url", counted)
13
13
  tasks = taskset.ColorCodewordTaskset(
14
14
  taskset.ColorCodewordConfig(num_examples=100)
15
- ).load_tasks()
15
+ ).load()
16
16
 
17
17
  assert len(tasks) == 100
18
18
  assert calls == list(taskset.COLOR_MAP)