verifiers 0.3.1.dev9__tar.gz → 0.3.1.dev11__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 (438) hide show
  1. {verifiers-0.3.1.dev9 → verifiers-0.3.1.dev11}/PKG-INFO +1 -1
  2. verifiers-0.3.1.dev11/tests/v1/test_scoring.py +101 -0
  3. {verifiers-0.3.1.dev9 → verifiers-0.3.1.dev11}/verifiers/v1/__init__.py +9 -1
  4. verifiers-0.3.1.dev11/verifiers/v1/configs/task.py +64 -0
  5. {verifiers-0.3.1.dev9 → verifiers-0.3.1.dev11}/verifiers/v1/harnesses/openclaw/harness.py +3 -15
  6. {verifiers-0.3.1.dev9 → verifiers-0.3.1.dev11}/verifiers/v1/harnesses/pi/harness.py +4 -16
  7. {verifiers-0.3.1.dev9 → verifiers-0.3.1.dev11}/verifiers/v1/rollout.py +2 -4
  8. {verifiers-0.3.1.dev9 → verifiers-0.3.1.dev11}/verifiers/v1/task.py +23 -4
  9. {verifiers-0.3.1.dev9 → verifiers-0.3.1.dev11}/verifiers/v1/utils/loaders.py +58 -1
  10. verifiers-0.3.1.dev9/tests/v1/test_scoring.py +0 -31
  11. verifiers-0.3.1.dev9/verifiers/v1/configs/task.py +0 -32
  12. {verifiers-0.3.1.dev9 → verifiers-0.3.1.dev11}/.gitignore +0 -0
  13. {verifiers-0.3.1.dev9 → verifiers-0.3.1.dev11}/LICENSE +0 -0
  14. {verifiers-0.3.1.dev9 → verifiers-0.3.1.dev11}/README.md +0 -0
  15. {verifiers-0.3.1.dev9 → verifiers-0.3.1.dev11}/pyproject.toml +0 -0
  16. {verifiers-0.3.1.dev9 → verifiers-0.3.1.dev11}/tests/__init__.py +0 -0
  17. {verifiers-0.3.1.dev9 → verifiers-0.3.1.dev11}/tests/conftest.py +0 -0
  18. {verifiers-0.3.1.dev9 → verifiers-0.3.1.dev11}/tests/test_browser_env.py +0 -0
  19. {verifiers-0.3.1.dev9 → verifiers-0.3.1.dev11}/tests/test_build_script.py +0 -0
  20. {verifiers-0.3.1.dev9 → verifiers-0.3.1.dev11}/tests/test_cli_agent_env.py +0 -0
  21. {verifiers-0.3.1.dev9 → verifiers-0.3.1.dev11}/tests/test_client_auth_errors.py +0 -0
  22. {verifiers-0.3.1.dev9 → verifiers-0.3.1.dev11}/tests/test_client_config.py +0 -0
  23. {verifiers-0.3.1.dev9 → verifiers-0.3.1.dev11}/tests/test_client_multimodal_types.py +0 -0
  24. {verifiers-0.3.1.dev9 → verifiers-0.3.1.dev11}/tests/test_composable_env.py +0 -0
  25. {verifiers-0.3.1.dev9 → verifiers-0.3.1.dev11}/tests/test_context_token_metrics.py +0 -0
  26. {verifiers-0.3.1.dev9 → verifiers-0.3.1.dev11}/tests/test_decorator_ranks.py +0 -0
  27. {verifiers-0.3.1.dev9 → verifiers-0.3.1.dev11}/tests/test_endpoint_registry.py +0 -0
  28. {verifiers-0.3.1.dev9 → verifiers-0.3.1.dev11}/tests/test_env_group.py +0 -0
  29. {verifiers-0.3.1.dev9 → verifiers-0.3.1.dev11}/tests/test_env_server.py +0 -0
  30. {verifiers-0.3.1.dev9 → verifiers-0.3.1.dev11}/tests/test_environment.py +0 -0
  31. {verifiers-0.3.1.dev9 → verifiers-0.3.1.dev11}/tests/test_environment_extra.py +0 -0
  32. {verifiers-0.3.1.dev9 → verifiers-0.3.1.dev11}/tests/test_error_chain.py +0 -0
  33. {verifiers-0.3.1.dev9 → verifiers-0.3.1.dev11}/tests/test_eval_display.py +0 -0
  34. {verifiers-0.3.1.dev9 → verifiers-0.3.1.dev11}/tests/test_eval_utils.py +0 -0
  35. {verifiers-0.3.1.dev9 → verifiers-0.3.1.dev11}/tests/test_gepa_cli.py +0 -0
  36. {verifiers-0.3.1.dev9 → verifiers-0.3.1.dev11}/tests/test_gepa_utils.py +0 -0
  37. {verifiers-0.3.1.dev9 → verifiers-0.3.1.dev11}/tests/test_gym_env.py +0 -0
  38. {verifiers-0.3.1.dev9 → verifiers-0.3.1.dev11}/tests/test_harbor_env_mcp.py +0 -0
  39. {verifiers-0.3.1.dev9 → verifiers-0.3.1.dev11}/tests/test_imports.py +0 -0
  40. {verifiers-0.3.1.dev9 → verifiers-0.3.1.dev11}/tests/test_init_script.py +0 -0
  41. {verifiers-0.3.1.dev9 → verifiers-0.3.1.dev11}/tests/test_install_utils.py +0 -0
  42. {verifiers-0.3.1.dev9 → verifiers-0.3.1.dev11}/tests/test_interception_utils.py +0 -0
  43. {verifiers-0.3.1.dev9 → verifiers-0.3.1.dev11}/tests/test_logging.py +0 -0
  44. {verifiers-0.3.1.dev9 → verifiers-0.3.1.dev11}/tests/test_math_rubric.py +0 -0
  45. {verifiers-0.3.1.dev9 → verifiers-0.3.1.dev11}/tests/test_maybe_think_parser.py +0 -0
  46. {verifiers-0.3.1.dev9 → verifiers-0.3.1.dev11}/tests/test_message_utils.py +0 -0
  47. {verifiers-0.3.1.dev9 → verifiers-0.3.1.dev11}/tests/test_message_utils_multimodal.py +0 -0
  48. {verifiers-0.3.1.dev9 → verifiers-0.3.1.dev11}/tests/test_multiturn_env.py +0 -0
  49. {verifiers-0.3.1.dev9 → verifiers-0.3.1.dev11}/tests/test_nemorl_client.py +0 -0
  50. {verifiers-0.3.1.dev9 → verifiers-0.3.1.dev11}/tests/test_openai_chat_completions_token_client.py +0 -0
  51. {verifiers-0.3.1.dev9 → verifiers-0.3.1.dev11}/tests/test_openai_responses_client.py +0 -0
  52. {verifiers-0.3.1.dev9 → verifiers-0.3.1.dev11}/tests/test_opencode_rlm_env.py +0 -0
  53. {verifiers-0.3.1.dev9 → verifiers-0.3.1.dev11}/tests/test_openenv_client.py +0 -0
  54. {verifiers-0.3.1.dev9 → verifiers-0.3.1.dev11}/tests/test_parser.py +0 -0
  55. {verifiers-0.3.1.dev9 → verifiers-0.3.1.dev11}/tests/test_path_utils.py +0 -0
  56. {verifiers-0.3.1.dev9 → verifiers-0.3.1.dev11}/tests/test_per_turn_timing.py +0 -0
  57. {verifiers-0.3.1.dev9 → verifiers-0.3.1.dev11}/tests/test_pricing_utils.py +0 -0
  58. {verifiers-0.3.1.dev9 → verifiers-0.3.1.dev11}/tests/test_prime_plugin.py +0 -0
  59. {verifiers-0.3.1.dev9 → verifiers-0.3.1.dev11}/tests/test_renderer_client.py +0 -0
  60. {verifiers-0.3.1.dev9 → verifiers-0.3.1.dev11}/tests/test_renderer_e2e.py +0 -0
  61. {verifiers-0.3.1.dev9 → verifiers-0.3.1.dev11}/tests/test_rlm_composable_env.py +0 -0
  62. {verifiers-0.3.1.dev9 → verifiers-0.3.1.dev11}/tests/test_rubric.py +0 -0
  63. {verifiers-0.3.1.dev9 → verifiers-0.3.1.dev11}/tests/test_rubric_group.py +0 -0
  64. {verifiers-0.3.1.dev9 → verifiers-0.3.1.dev11}/tests/test_sandbox_debug_env.py +0 -0
  65. {verifiers-0.3.1.dev9 → verifiers-0.3.1.dev11}/tests/test_sandbox_env.py +0 -0
  66. {verifiers-0.3.1.dev9 → verifiers-0.3.1.dev11}/tests/test_sandbox_mixin.py +0 -0
  67. {verifiers-0.3.1.dev9 → verifiers-0.3.1.dev11}/tests/test_save_utils.py +0 -0
  68. {verifiers-0.3.1.dev9 → verifiers-0.3.1.dev11}/tests/test_setup_script.py +0 -0
  69. {verifiers-0.3.1.dev9 → verifiers-0.3.1.dev11}/tests/test_singleturn_env.py +0 -0
  70. {verifiers-0.3.1.dev9 → verifiers-0.3.1.dev11}/tests/test_stateful_tool_env.py +0 -0
  71. {verifiers-0.3.1.dev9 → verifiers-0.3.1.dev11}/tests/test_think_parser.py +0 -0
  72. {verifiers-0.3.1.dev9 → verifiers-0.3.1.dev11}/tests/test_tool_env.py +0 -0
  73. {verifiers-0.3.1.dev9 → verifiers-0.3.1.dev11}/tests/test_tool_utils.py +0 -0
  74. {verifiers-0.3.1.dev9 → verifiers-0.3.1.dev11}/tests/test_trajectory_processing.py +0 -0
  75. {verifiers-0.3.1.dev9 → verifiers-0.3.1.dev11}/tests/test_tui_info_formatting.py +0 -0
  76. {verifiers-0.3.1.dev9 → verifiers-0.3.1.dev11}/tests/test_types.py +0 -0
  77. {verifiers-0.3.1.dev9 → verifiers-0.3.1.dev11}/tests/test_xml_parser.py +0 -0
  78. {verifiers-0.3.1.dev9 → verifiers-0.3.1.dev11}/tests/v1/conftest.py +0 -0
  79. {verifiers-0.3.1.dev9 → verifiers-0.3.1.dev11}/tests/v1/fixtures/counter_tool_v1.py +0 -0
  80. {verifiers-0.3.1.dev9 → verifiers-0.3.1.dev11}/tests/v1/fixtures/duet_v1.py +0 -0
  81. {verifiers-0.3.1.dev9 → verifiers-0.3.1.dev11}/tests/v1/fixtures/echo_acp_resume_v1.py +0 -0
  82. {verifiers-0.3.1.dev9 → verifiers-0.3.1.dev11}/tests/v1/fixtures/echo_agentic_v1.py +0 -0
  83. {verifiers-0.3.1.dev9 → verifiers-0.3.1.dev11}/tests/v1/fixtures/echo_multi_v0.py +0 -0
  84. {verifiers-0.3.1.dev9 → verifiers-0.3.1.dev11}/tests/v1/fixtures/echo_tool_v1.py +0 -0
  85. {verifiers-0.3.1.dev9 → verifiers-0.3.1.dev11}/tests/v1/fixtures/echo_user_sim_v1.py +0 -0
  86. {verifiers-0.3.1.dev9 → verifiers-0.3.1.dev11}/tests/v1/fixtures/echo_v0.py +0 -0
  87. {verifiers-0.3.1.dev9 → verifiers-0.3.1.dev11}/tests/v1/fixtures/echo_v1.py +0 -0
  88. {verifiers-0.3.1.dev9 → verifiers-0.3.1.dev11}/tests/v1/fixtures/pyproject.toml +0 -0
  89. {verifiers-0.3.1.dev9 → verifiers-0.3.1.dev11}/tests/v1/fixtures/tool_response_image_v1.py +0 -0
  90. {verifiers-0.3.1.dev9 → verifiers-0.3.1.dev11}/tests/v1/test_color_codeword_tasks.py +0 -0
  91. {verifiers-0.3.1.dev9 → verifiers-0.3.1.dev11}/tests/v1/test_configs.py +0 -0
  92. {verifiers-0.3.1.dev9 → verifiers-0.3.1.dev11}/tests/v1/test_e2e.py +0 -0
  93. {verifiers-0.3.1.dev9 → verifiers-0.3.1.dev11}/tests/v1/test_envs.py +0 -0
  94. {verifiers-0.3.1.dev9 → verifiers-0.3.1.dev11}/tests/v1/test_graph.py +0 -0
  95. {verifiers-0.3.1.dev9 → verifiers-0.3.1.dev11}/tests/v1/test_judges.py +0 -0
  96. {verifiers-0.3.1.dev9 → verifiers-0.3.1.dev11}/tests/v1/test_legacy.py +0 -0
  97. {verifiers-0.3.1.dev9 → verifiers-0.3.1.dev11}/tests/v1/test_taskset.py +0 -0
  98. {verifiers-0.3.1.dev9 → verifiers-0.3.1.dev11}/tests/v1/test_trace.py +0 -0
  99. {verifiers-0.3.1.dev9 → verifiers-0.3.1.dev11}/verifiers/__init__.py +0 -0
  100. {verifiers-0.3.1.dev9 → verifiers-0.3.1.dev11}/verifiers/cli/__init__.py +0 -0
  101. {verifiers-0.3.1.dev9 → verifiers-0.3.1.dev11}/verifiers/cli/commands/__init__.py +0 -0
  102. {verifiers-0.3.1.dev9 → verifiers-0.3.1.dev11}/verifiers/cli/commands/build.py +0 -0
  103. {verifiers-0.3.1.dev9 → verifiers-0.3.1.dev11}/verifiers/cli/commands/eval.py +0 -0
  104. {verifiers-0.3.1.dev9 → verifiers-0.3.1.dev11}/verifiers/cli/commands/gepa.py +0 -0
  105. {verifiers-0.3.1.dev9 → verifiers-0.3.1.dev11}/verifiers/cli/commands/init.py +0 -0
  106. {verifiers-0.3.1.dev9 → verifiers-0.3.1.dev11}/verifiers/cli/commands/install.py +0 -0
  107. {verifiers-0.3.1.dev9 → verifiers-0.3.1.dev11}/verifiers/cli/commands/setup.py +0 -0
  108. {verifiers-0.3.1.dev9 → verifiers-0.3.1.dev11}/verifiers/cli/plugins/__init__.py +0 -0
  109. {verifiers-0.3.1.dev9 → verifiers-0.3.1.dev11}/verifiers/cli/plugins/prime.py +0 -0
  110. {verifiers-0.3.1.dev9 → verifiers-0.3.1.dev11}/verifiers/cli/tui.py +0 -0
  111. {verifiers-0.3.1.dev9 → verifiers-0.3.1.dev11}/verifiers/clients/__init__.py +0 -0
  112. {verifiers-0.3.1.dev9 → verifiers-0.3.1.dev11}/verifiers/clients/anthropic_messages_client.py +0 -0
  113. {verifiers-0.3.1.dev9 → verifiers-0.3.1.dev11}/verifiers/clients/client.py +0 -0
  114. {verifiers-0.3.1.dev9 → verifiers-0.3.1.dev11}/verifiers/clients/nemorl_chat_completions_client.py +0 -0
  115. {verifiers-0.3.1.dev9 → verifiers-0.3.1.dev11}/verifiers/clients/openai_chat_completions_client.py +0 -0
  116. {verifiers-0.3.1.dev9 → verifiers-0.3.1.dev11}/verifiers/clients/openai_chat_completions_token_client.py +0 -0
  117. {verifiers-0.3.1.dev9 → verifiers-0.3.1.dev11}/verifiers/clients/openai_completions_client.py +0 -0
  118. {verifiers-0.3.1.dev9 → verifiers-0.3.1.dev11}/verifiers/clients/openai_responses_client.py +0 -0
  119. {verifiers-0.3.1.dev9 → verifiers-0.3.1.dev11}/verifiers/clients/renderer_client.py +0 -0
  120. {verifiers-0.3.1.dev9 → verifiers-0.3.1.dev11}/verifiers/decorators.py +0 -0
  121. {verifiers-0.3.1.dev9 → verifiers-0.3.1.dev11}/verifiers/envs/__init__.py +0 -0
  122. {verifiers-0.3.1.dev9 → verifiers-0.3.1.dev11}/verifiers/envs/env_group.py +0 -0
  123. {verifiers-0.3.1.dev9 → verifiers-0.3.1.dev11}/verifiers/envs/environment.py +0 -0
  124. {verifiers-0.3.1.dev9 → verifiers-0.3.1.dev11}/verifiers/envs/experimental/README.md +0 -0
  125. {verifiers-0.3.1.dev9 → verifiers-0.3.1.dev11}/verifiers/envs/experimental/__init__.py +0 -0
  126. {verifiers-0.3.1.dev9 → verifiers-0.3.1.dev11}/verifiers/envs/experimental/cli_agent_env.py +0 -0
  127. {verifiers-0.3.1.dev9 → verifiers-0.3.1.dev11}/verifiers/envs/experimental/composable/README.md +0 -0
  128. {verifiers-0.3.1.dev9 → verifiers-0.3.1.dev11}/verifiers/envs/experimental/composable/__init__.py +0 -0
  129. {verifiers-0.3.1.dev9 → verifiers-0.3.1.dev11}/verifiers/envs/experimental/composable/_filter.py +0 -0
  130. {verifiers-0.3.1.dev9 → verifiers-0.3.1.dev11}/verifiers/envs/experimental/composable/composable_env.py +0 -0
  131. {verifiers-0.3.1.dev9 → verifiers-0.3.1.dev11}/verifiers/envs/experimental/composable/harness.py +0 -0
  132. {verifiers-0.3.1.dev9 → verifiers-0.3.1.dev11}/verifiers/envs/experimental/composable/harnesses/__init__.py +0 -0
  133. {verifiers-0.3.1.dev9 → verifiers-0.3.1.dev11}/verifiers/envs/experimental/composable/harnesses/mini_swe_agent.py +0 -0
  134. {verifiers-0.3.1.dev9 → verifiers-0.3.1.dev11}/verifiers/envs/experimental/composable/harnesses/opencode.py +0 -0
  135. {verifiers-0.3.1.dev9 → verifiers-0.3.1.dev11}/verifiers/envs/experimental/composable/harnesses/prompt.txt +0 -0
  136. {verifiers-0.3.1.dev9 → verifiers-0.3.1.dev11}/verifiers/envs/experimental/composable/harnesses/rlm.py +0 -0
  137. {verifiers-0.3.1.dev9 → verifiers-0.3.1.dev11}/verifiers/envs/experimental/composable/sandbox_debug_env.py +0 -0
  138. {verifiers-0.3.1.dev9 → verifiers-0.3.1.dev11}/verifiers/envs/experimental/composable/swe_debug_env.py +0 -0
  139. {verifiers-0.3.1.dev9 → verifiers-0.3.1.dev11}/verifiers/envs/experimental/composable/task.py +0 -0
  140. {verifiers-0.3.1.dev9 → verifiers-0.3.1.dev11}/verifiers/envs/experimental/composable/tasksets/__init__.py +0 -0
  141. {verifiers-0.3.1.dev9 → verifiers-0.3.1.dev11}/verifiers/envs/experimental/composable/tasksets/cp/__init__.py +0 -0
  142. {verifiers-0.3.1.dev9 → verifiers-0.3.1.dev11}/verifiers/envs/experimental/composable/tasksets/cp/cp_task.py +0 -0
  143. {verifiers-0.3.1.dev9 → verifiers-0.3.1.dev11}/verifiers/envs/experimental/composable/tasksets/cp/test_utils.py +0 -0
  144. {verifiers-0.3.1.dev9 → verifiers-0.3.1.dev11}/verifiers/envs/experimental/composable/tasksets/harbor/__init__.py +0 -0
  145. {verifiers-0.3.1.dev9 → verifiers-0.3.1.dev11}/verifiers/envs/experimental/composable/tasksets/harbor/cli_gym.py +0 -0
  146. {verifiers-0.3.1.dev9 → verifiers-0.3.1.dev11}/verifiers/envs/experimental/composable/tasksets/harbor/harbor.py +0 -0
  147. {verifiers-0.3.1.dev9 → verifiers-0.3.1.dev11}/verifiers/envs/experimental/composable/tasksets/harbor/terminal_lego.py +0 -0
  148. {verifiers-0.3.1.dev9 → verifiers-0.3.1.dev11}/verifiers/envs/experimental/composable/tasksets/math/__init__.py +0 -0
  149. {verifiers-0.3.1.dev9 → verifiers-0.3.1.dev11}/verifiers/envs/experimental/composable/tasksets/math/math_task.py +0 -0
  150. {verifiers-0.3.1.dev9 → verifiers-0.3.1.dev11}/verifiers/envs/experimental/composable/tasksets/swe/README.md +0 -0
  151. {verifiers-0.3.1.dev9 → verifiers-0.3.1.dev11}/verifiers/envs/experimental/composable/tasksets/swe/__init__.py +0 -0
  152. {verifiers-0.3.1.dev9 → verifiers-0.3.1.dev11}/verifiers/envs/experimental/composable/tasksets/swe/multi_swe/__init__.py +0 -0
  153. {verifiers-0.3.1.dev9 → verifiers-0.3.1.dev11}/verifiers/envs/experimental/composable/tasksets/swe/multi_swe/extract_fix_patch.sh +0 -0
  154. {verifiers-0.3.1.dev9 → verifiers-0.3.1.dev11}/verifiers/envs/experimental/composable/tasksets/swe/multi_swe/taskset.py +0 -0
  155. {verifiers-0.3.1.dev9 → verifiers-0.3.1.dev11}/verifiers/envs/experimental/composable/tasksets/swe/openswe/__init__.py +0 -0
  156. {verifiers-0.3.1.dev9 → verifiers-0.3.1.dev11}/verifiers/envs/experimental/composable/tasksets/swe/openswe/taskset.py +0 -0
  157. {verifiers-0.3.1.dev9 → verifiers-0.3.1.dev11}/verifiers/envs/experimental/composable/tasksets/swe/r2e_gym/__init__.py +0 -0
  158. {verifiers-0.3.1.dev9 → verifiers-0.3.1.dev11}/verifiers/envs/experimental/composable/tasksets/swe/r2e_gym/log_parser.py +0 -0
  159. {verifiers-0.3.1.dev9 → verifiers-0.3.1.dev11}/verifiers/envs/experimental/composable/tasksets/swe/r2e_gym/taskset.py +0 -0
  160. {verifiers-0.3.1.dev9 → verifiers-0.3.1.dev11}/verifiers/envs/experimental/composable/tasksets/swe/scale_swe/__init__.py +0 -0
  161. {verifiers-0.3.1.dev9 → verifiers-0.3.1.dev11}/verifiers/envs/experimental/composable/tasksets/swe/scale_swe/taskset.py +0 -0
  162. {verifiers-0.3.1.dev9 → verifiers-0.3.1.dev11}/verifiers/envs/experimental/composable/tasksets/swe/shared/__init__.py +0 -0
  163. {verifiers-0.3.1.dev9 → verifiers-0.3.1.dev11}/verifiers/envs/experimental/composable/tasksets/swe/shared/test_patch.py +0 -0
  164. {verifiers-0.3.1.dev9 → verifiers-0.3.1.dev11}/verifiers/envs/experimental/composable/tasksets/swe/swe_bench/__init__.py +0 -0
  165. {verifiers-0.3.1.dev9 → verifiers-0.3.1.dev11}/verifiers/envs/experimental/composable/tasksets/swe/swe_bench/taskset.py +0 -0
  166. {verifiers-0.3.1.dev9 → verifiers-0.3.1.dev11}/verifiers/envs/experimental/composable/tasksets/swe/swe_lego/__init__.py +0 -0
  167. {verifiers-0.3.1.dev9 → verifiers-0.3.1.dev11}/verifiers/envs/experimental/composable/tasksets/swe/swe_lego/taskset.py +0 -0
  168. {verifiers-0.3.1.dev9 → verifiers-0.3.1.dev11}/verifiers/envs/experimental/composable/tasksets/swe/swe_rebench_v2/__init__.py +0 -0
  169. {verifiers-0.3.1.dev9 → verifiers-0.3.1.dev11}/verifiers/envs/experimental/composable/tasksets/swe/swe_rebench_v2/log_parsers.py +0 -0
  170. {verifiers-0.3.1.dev9 → verifiers-0.3.1.dev11}/verifiers/envs/experimental/composable/tasksets/swe/swe_rebench_v2/taskset.py +0 -0
  171. {verifiers-0.3.1.dev9 → verifiers-0.3.1.dev11}/verifiers/envs/experimental/composable/tasksets/swe/swe_smith/__init__.py +0 -0
  172. {verifiers-0.3.1.dev9 → verifiers-0.3.1.dev11}/verifiers/envs/experimental/composable/tasksets/swe/swe_smith/taskset.py +0 -0
  173. {verifiers-0.3.1.dev9 → verifiers-0.3.1.dev11}/verifiers/envs/experimental/composable/tasksets/swe/swe_tasksets.py +0 -0
  174. {verifiers-0.3.1.dev9 → verifiers-0.3.1.dev11}/verifiers/envs/experimental/gym_env.py +0 -0
  175. {verifiers-0.3.1.dev9 → verifiers-0.3.1.dev11}/verifiers/envs/experimental/harbor_env/__init__.py +0 -0
  176. {verifiers-0.3.1.dev9 → verifiers-0.3.1.dev11}/verifiers/envs/experimental/harbor_env/env.py +0 -0
  177. {verifiers-0.3.1.dev9 → verifiers-0.3.1.dev11}/verifiers/envs/experimental/harbor_env/mcp.py +0 -0
  178. {verifiers-0.3.1.dev9 → verifiers-0.3.1.dev11}/verifiers/envs/experimental/mcp_env.py +0 -0
  179. {verifiers-0.3.1.dev9 → verifiers-0.3.1.dev11}/verifiers/envs/experimental/opencode_env.py +0 -0
  180. {verifiers-0.3.1.dev9 → verifiers-0.3.1.dev11}/verifiers/envs/experimental/opencode_qa_env.py +0 -0
  181. {verifiers-0.3.1.dev9 → verifiers-0.3.1.dev11}/verifiers/envs/experimental/opencode_rlm_env.py +0 -0
  182. {verifiers-0.3.1.dev9 → verifiers-0.3.1.dev11}/verifiers/envs/experimental/sandbox_mixin.py +0 -0
  183. {verifiers-0.3.1.dev9 → verifiers-0.3.1.dev11}/verifiers/envs/experimental/utils/__init__.py +0 -0
  184. {verifiers-0.3.1.dev9 → verifiers-0.3.1.dev11}/verifiers/envs/experimental/utils/file_locks.py +0 -0
  185. {verifiers-0.3.1.dev9 → verifiers-0.3.1.dev11}/verifiers/envs/experimental/utils/git_checkout_cache.py +0 -0
  186. {verifiers-0.3.1.dev9 → verifiers-0.3.1.dev11}/verifiers/envs/integrations/README.md +0 -0
  187. {verifiers-0.3.1.dev9 → verifiers-0.3.1.dev11}/verifiers/envs/integrations/__init__.py +0 -0
  188. {verifiers-0.3.1.dev9 → verifiers-0.3.1.dev11}/verifiers/envs/integrations/browser_env/README.md +0 -0
  189. {verifiers-0.3.1.dev9 → verifiers-0.3.1.dev11}/verifiers/envs/integrations/browser_env/__init__.py +0 -0
  190. {verifiers-0.3.1.dev9 → verifiers-0.3.1.dev11}/verifiers/envs/integrations/browser_env/browser_env.py +0 -0
  191. {verifiers-0.3.1.dev9 → verifiers-0.3.1.dev11}/verifiers/envs/integrations/browser_env/modes/__init__.py +0 -0
  192. {verifiers-0.3.1.dev9 → verifiers-0.3.1.dev11}/verifiers/envs/integrations/browser_env/modes/base.py +0 -0
  193. {verifiers-0.3.1.dev9 → verifiers-0.3.1.dev11}/verifiers/envs/integrations/browser_env/modes/cua_mode.py +0 -0
  194. {verifiers-0.3.1.dev9 → verifiers-0.3.1.dev11}/verifiers/envs/integrations/browser_env/modes/dom_mode.py +0 -0
  195. {verifiers-0.3.1.dev9 → verifiers-0.3.1.dev11}/verifiers/envs/integrations/openenv_env.py +0 -0
  196. {verifiers-0.3.1.dev9 → verifiers-0.3.1.dev11}/verifiers/envs/integrations/reasoninggym_env.py +0 -0
  197. {verifiers-0.3.1.dev9 → verifiers-0.3.1.dev11}/verifiers/envs/integrations/textarena_env.py +0 -0
  198. {verifiers-0.3.1.dev9 → verifiers-0.3.1.dev11}/verifiers/envs/multiturn_env.py +0 -0
  199. {verifiers-0.3.1.dev9 → verifiers-0.3.1.dev11}/verifiers/envs/python_env.py +0 -0
  200. {verifiers-0.3.1.dev9 → verifiers-0.3.1.dev11}/verifiers/envs/sandbox_env.py +0 -0
  201. {verifiers-0.3.1.dev9 → verifiers-0.3.1.dev11}/verifiers/envs/singleturn_env.py +0 -0
  202. {verifiers-0.3.1.dev9 → verifiers-0.3.1.dev11}/verifiers/envs/stateful_tool_env.py +0 -0
  203. {verifiers-0.3.1.dev9 → verifiers-0.3.1.dev11}/verifiers/envs/tool_env.py +0 -0
  204. {verifiers-0.3.1.dev9 → verifiers-0.3.1.dev11}/verifiers/errors.py +0 -0
  205. {verifiers-0.3.1.dev9 → verifiers-0.3.1.dev11}/verifiers/gepa/__init__.py +0 -0
  206. {verifiers-0.3.1.dev9 → verifiers-0.3.1.dev11}/verifiers/gepa/adapter.py +0 -0
  207. {verifiers-0.3.1.dev9 → verifiers-0.3.1.dev11}/verifiers/gepa/config.py +0 -0
  208. {verifiers-0.3.1.dev9 → verifiers-0.3.1.dev11}/verifiers/gepa/display.py +0 -0
  209. {verifiers-0.3.1.dev9 → verifiers-0.3.1.dev11}/verifiers/gepa/gepa_utils.py +0 -0
  210. {verifiers-0.3.1.dev9 → verifiers-0.3.1.dev11}/verifiers/parsers/__init__.py +0 -0
  211. {verifiers-0.3.1.dev9 → verifiers-0.3.1.dev11}/verifiers/parsers/maybe_think_parser.py +0 -0
  212. {verifiers-0.3.1.dev9 → verifiers-0.3.1.dev11}/verifiers/parsers/parser.py +0 -0
  213. {verifiers-0.3.1.dev9 → verifiers-0.3.1.dev11}/verifiers/parsers/think_parser.py +0 -0
  214. {verifiers-0.3.1.dev9 → verifiers-0.3.1.dev11}/verifiers/parsers/xml_parser.py +0 -0
  215. {verifiers-0.3.1.dev9 → verifiers-0.3.1.dev11}/verifiers/rubrics/__init__.py +0 -0
  216. {verifiers-0.3.1.dev9 → verifiers-0.3.1.dev11}/verifiers/rubrics/experimental/hybrid_math_rubric.py +0 -0
  217. {verifiers-0.3.1.dev9 → verifiers-0.3.1.dev11}/verifiers/rubrics/judge_rubric.py +0 -0
  218. {verifiers-0.3.1.dev9 → verifiers-0.3.1.dev11}/verifiers/rubrics/math_rubric.py +0 -0
  219. {verifiers-0.3.1.dev9 → verifiers-0.3.1.dev11}/verifiers/rubrics/rubric.py +0 -0
  220. {verifiers-0.3.1.dev9 → verifiers-0.3.1.dev11}/verifiers/rubrics/rubric_group.py +0 -0
  221. {verifiers-0.3.1.dev9 → verifiers-0.3.1.dev11}/verifiers/scripts/__init__.py +0 -0
  222. {verifiers-0.3.1.dev9 → verifiers-0.3.1.dev11}/verifiers/scripts/build.py +0 -0
  223. {verifiers-0.3.1.dev9 → verifiers-0.3.1.dev11}/verifiers/scripts/eval.py +0 -0
  224. {verifiers-0.3.1.dev9 → verifiers-0.3.1.dev11}/verifiers/scripts/gepa.py +0 -0
  225. {verifiers-0.3.1.dev9 → verifiers-0.3.1.dev11}/verifiers/scripts/init.py +0 -0
  226. {verifiers-0.3.1.dev9 → verifiers-0.3.1.dev11}/verifiers/scripts/install.py +0 -0
  227. {verifiers-0.3.1.dev9 → verifiers-0.3.1.dev11}/verifiers/scripts/setup.py +0 -0
  228. {verifiers-0.3.1.dev9 → verifiers-0.3.1.dev11}/verifiers/scripts/tui.py +0 -0
  229. {verifiers-0.3.1.dev9 → verifiers-0.3.1.dev11}/verifiers/serve/__init__.py +0 -0
  230. {verifiers-0.3.1.dev9 → verifiers-0.3.1.dev11}/verifiers/serve/client/env_client.py +0 -0
  231. {verifiers-0.3.1.dev9 → verifiers-0.3.1.dev11}/verifiers/serve/client/zmq_env_client.py +0 -0
  232. {verifiers-0.3.1.dev9 → verifiers-0.3.1.dev11}/verifiers/serve/server/__init__.py +0 -0
  233. {verifiers-0.3.1.dev9 → verifiers-0.3.1.dev11}/verifiers/serve/server/env_router.py +0 -0
  234. {verifiers-0.3.1.dev9 → verifiers-0.3.1.dev11}/verifiers/serve/server/env_server.py +0 -0
  235. {verifiers-0.3.1.dev9 → verifiers-0.3.1.dev11}/verifiers/serve/server/env_worker.py +0 -0
  236. {verifiers-0.3.1.dev9 → verifiers-0.3.1.dev11}/verifiers/serve/server/zmq_env_server.py +0 -0
  237. {verifiers-0.3.1.dev9 → verifiers-0.3.1.dev11}/verifiers/serve/types.py +0 -0
  238. {verifiers-0.3.1.dev9 → verifiers-0.3.1.dev11}/verifiers/types.py +0 -0
  239. {verifiers-0.3.1.dev9 → verifiers-0.3.1.dev11}/verifiers/utils/__init__.py +0 -0
  240. {verifiers-0.3.1.dev9 → verifiers-0.3.1.dev11}/verifiers/utils/async_utils.py +0 -0
  241. {verifiers-0.3.1.dev9 → verifiers-0.3.1.dev11}/verifiers/utils/client_utils.py +0 -0
  242. {verifiers-0.3.1.dev9 → verifiers-0.3.1.dev11}/verifiers/utils/config_utils.py +0 -0
  243. {verifiers-0.3.1.dev9 → verifiers-0.3.1.dev11}/verifiers/utils/data_utils.py +0 -0
  244. {verifiers-0.3.1.dev9 → verifiers-0.3.1.dev11}/verifiers/utils/display_utils.py +0 -0
  245. {verifiers-0.3.1.dev9 → verifiers-0.3.1.dev11}/verifiers/utils/env_config_utils.py +0 -0
  246. {verifiers-0.3.1.dev9 → verifiers-0.3.1.dev11}/verifiers/utils/env_utils.py +0 -0
  247. {verifiers-0.3.1.dev9 → verifiers-0.3.1.dev11}/verifiers/utils/error_utils.py +0 -0
  248. {verifiers-0.3.1.dev9 → verifiers-0.3.1.dev11}/verifiers/utils/eval_display.py +0 -0
  249. {verifiers-0.3.1.dev9 → verifiers-0.3.1.dev11}/verifiers/utils/eval_utils.py +0 -0
  250. {verifiers-0.3.1.dev9 → verifiers-0.3.1.dev11}/verifiers/utils/heartbeat.py +0 -0
  251. {verifiers-0.3.1.dev9 → verifiers-0.3.1.dev11}/verifiers/utils/import_utils.py +0 -0
  252. {verifiers-0.3.1.dev9 → verifiers-0.3.1.dev11}/verifiers/utils/install_utils.py +0 -0
  253. {verifiers-0.3.1.dev9 → verifiers-0.3.1.dev11}/verifiers/utils/interception_utils.py +0 -0
  254. {verifiers-0.3.1.dev9 → verifiers-0.3.1.dev11}/verifiers/utils/logging_utils.py +0 -0
  255. {verifiers-0.3.1.dev9 → verifiers-0.3.1.dev11}/verifiers/utils/message_utils.py +0 -0
  256. {verifiers-0.3.1.dev9 → verifiers-0.3.1.dev11}/verifiers/utils/metric_utils.py +0 -0
  257. {verifiers-0.3.1.dev9 → verifiers-0.3.1.dev11}/verifiers/utils/path_utils.py +0 -0
  258. {verifiers-0.3.1.dev9 → verifiers-0.3.1.dev11}/verifiers/utils/pricing_utils.py +0 -0
  259. {verifiers-0.3.1.dev9 → verifiers-0.3.1.dev11}/verifiers/utils/process_utils.py +0 -0
  260. {verifiers-0.3.1.dev9 → verifiers-0.3.1.dev11}/verifiers/utils/response_utils.py +0 -0
  261. {verifiers-0.3.1.dev9 → verifiers-0.3.1.dev11}/verifiers/utils/save_utils.py +0 -0
  262. {verifiers-0.3.1.dev9 → verifiers-0.3.1.dev11}/verifiers/utils/serve_utils.py +0 -0
  263. {verifiers-0.3.1.dev9 → verifiers-0.3.1.dev11}/verifiers/utils/thread_utils.py +0 -0
  264. {verifiers-0.3.1.dev9 → verifiers-0.3.1.dev11}/verifiers/utils/threaded_sandbox_client.py +0 -0
  265. {verifiers-0.3.1.dev9 → verifiers-0.3.1.dev11}/verifiers/utils/tool_utils.py +0 -0
  266. {verifiers-0.3.1.dev9 → verifiers-0.3.1.dev11}/verifiers/utils/usage_utils.py +0 -0
  267. {verifiers-0.3.1.dev9 → verifiers-0.3.1.dev11}/verifiers/utils/version_utils.py +0 -0
  268. {verifiers-0.3.1.dev9 → verifiers-0.3.1.dev11}/verifiers/v1/acp/__init__.py +0 -0
  269. {verifiers-0.3.1.dev9 → verifiers-0.3.1.dev11}/verifiers/v1/acp/runner.py +0 -0
  270. {verifiers-0.3.1.dev9 → verifiers-0.3.1.dev11}/verifiers/v1/agent.py +0 -0
  271. {verifiers-0.3.1.dev9 → verifiers-0.3.1.dev11}/verifiers/v1/cli/__init__.py +0 -0
  272. {verifiers-0.3.1.dev9 → verifiers-0.3.1.dev11}/verifiers/v1/cli/dashboard/__init__.py +0 -0
  273. {verifiers-0.3.1.dev9 → verifiers-0.3.1.dev11}/verifiers/v1/cli/dashboard/base.py +0 -0
  274. {verifiers-0.3.1.dev9 → verifiers-0.3.1.dev11}/verifiers/v1/cli/dashboard/eval.py +0 -0
  275. {verifiers-0.3.1.dev9 → verifiers-0.3.1.dev11}/verifiers/v1/cli/dashboard/replay.py +0 -0
  276. {verifiers-0.3.1.dev9 → verifiers-0.3.1.dev11}/verifiers/v1/cli/dashboard/validate.py +0 -0
  277. {verifiers-0.3.1.dev9 → verifiers-0.3.1.dev11}/verifiers/v1/cli/debug.py +0 -0
  278. {verifiers-0.3.1.dev9 → verifiers-0.3.1.dev11}/verifiers/v1/cli/eval/__init__.py +0 -0
  279. {verifiers-0.3.1.dev9 → verifiers-0.3.1.dev11}/verifiers/v1/cli/eval/main.py +0 -0
  280. {verifiers-0.3.1.dev9 → verifiers-0.3.1.dev11}/verifiers/v1/cli/eval/resume.py +0 -0
  281. {verifiers-0.3.1.dev9 → verifiers-0.3.1.dev11}/verifiers/v1/cli/eval/runner.py +0 -0
  282. {verifiers-0.3.1.dev9 → verifiers-0.3.1.dev11}/verifiers/v1/cli/gepa.py +0 -0
  283. {verifiers-0.3.1.dev9 → verifiers-0.3.1.dev11}/verifiers/v1/cli/init.py +0 -0
  284. {verifiers-0.3.1.dev9 → verifiers-0.3.1.dev11}/verifiers/v1/cli/output.py +0 -0
  285. {verifiers-0.3.1.dev9 → verifiers-0.3.1.dev11}/verifiers/v1/cli/replay.py +0 -0
  286. {verifiers-0.3.1.dev9 → verifiers-0.3.1.dev11}/verifiers/v1/cli/resolve.py +0 -0
  287. {verifiers-0.3.1.dev9 → verifiers-0.3.1.dev11}/verifiers/v1/cli/resume.py +0 -0
  288. {verifiers-0.3.1.dev9 → verifiers-0.3.1.dev11}/verifiers/v1/cli/validate.py +0 -0
  289. {verifiers-0.3.1.dev9 → verifiers-0.3.1.dev11}/verifiers/v1/clients/__init__.py +0 -0
  290. {verifiers-0.3.1.dev9 → verifiers-0.3.1.dev11}/verifiers/v1/clients/base.py +0 -0
  291. {verifiers-0.3.1.dev9 → verifiers-0.3.1.dev11}/verifiers/v1/clients/client.py +0 -0
  292. {verifiers-0.3.1.dev9 → verifiers-0.3.1.dev11}/verifiers/v1/clients/eval.py +0 -0
  293. {verifiers-0.3.1.dev9 → verifiers-0.3.1.dev11}/verifiers/v1/clients/train.py +0 -0
  294. {verifiers-0.3.1.dev9 → verifiers-0.3.1.dev11}/verifiers/v1/configs/__init__.py +0 -0
  295. {verifiers-0.3.1.dev9 → verifiers-0.3.1.dev11}/verifiers/v1/configs/agent.py +0 -0
  296. {verifiers-0.3.1.dev9 → verifiers-0.3.1.dev11}/verifiers/v1/configs/cli/__init__.py +0 -0
  297. {verifiers-0.3.1.dev9 → verifiers-0.3.1.dev11}/verifiers/v1/configs/cli/debug.py +0 -0
  298. {verifiers-0.3.1.dev9 → verifiers-0.3.1.dev11}/verifiers/v1/configs/cli/env.py +0 -0
  299. {verifiers-0.3.1.dev9 → verifiers-0.3.1.dev11}/verifiers/v1/configs/cli/eval.py +0 -0
  300. {verifiers-0.3.1.dev9 → verifiers-0.3.1.dev11}/verifiers/v1/configs/cli/init.py +0 -0
  301. {verifiers-0.3.1.dev9 → verifiers-0.3.1.dev11}/verifiers/v1/configs/cli/replay.py +0 -0
  302. {verifiers-0.3.1.dev9 → verifiers-0.3.1.dev11}/verifiers/v1/configs/cli/validate.py +0 -0
  303. {verifiers-0.3.1.dev9 → verifiers-0.3.1.dev11}/verifiers/v1/configs/client.py +0 -0
  304. {verifiers-0.3.1.dev9 → verifiers-0.3.1.dev11}/verifiers/v1/configs/env.py +0 -0
  305. {verifiers-0.3.1.dev9 → verifiers-0.3.1.dev11}/verifiers/v1/configs/harness.py +0 -0
  306. {verifiers-0.3.1.dev9 → verifiers-0.3.1.dev11}/verifiers/v1/configs/judge.py +0 -0
  307. {verifiers-0.3.1.dev9 → verifiers-0.3.1.dev11}/verifiers/v1/configs/legacy.py +0 -0
  308. {verifiers-0.3.1.dev9 → verifiers-0.3.1.dev11}/verifiers/v1/configs/retries.py +0 -0
  309. {verifiers-0.3.1.dev9 → verifiers-0.3.1.dev11}/verifiers/v1/configs/serve.py +0 -0
  310. {verifiers-0.3.1.dev9 → verifiers-0.3.1.dev11}/verifiers/v1/configs/taskset.py +0 -0
  311. {verifiers-0.3.1.dev9 → verifiers-0.3.1.dev11}/verifiers/v1/dialects/__init__.py +0 -0
  312. {verifiers-0.3.1.dev9 → verifiers-0.3.1.dev11}/verifiers/v1/dialects/anthropic.py +0 -0
  313. {verifiers-0.3.1.dev9 → verifiers-0.3.1.dev11}/verifiers/v1/dialects/base.py +0 -0
  314. {verifiers-0.3.1.dev9 → verifiers-0.3.1.dev11}/verifiers/v1/dialects/chat.py +0 -0
  315. {verifiers-0.3.1.dev9 → verifiers-0.3.1.dev11}/verifiers/v1/dialects/responses.py +0 -0
  316. {verifiers-0.3.1.dev9 → verifiers-0.3.1.dev11}/verifiers/v1/env.py +0 -0
  317. {verifiers-0.3.1.dev9 → verifiers-0.3.1.dev11}/verifiers/v1/envs/__init__.py +0 -0
  318. {verifiers-0.3.1.dev9 → verifiers-0.3.1.dev11}/verifiers/v1/envs/agentic_judge/__init__.py +0 -0
  319. {verifiers-0.3.1.dev9 → verifiers-0.3.1.dev11}/verifiers/v1/envs/agentic_judge/env.py +0 -0
  320. {verifiers-0.3.1.dev9 → verifiers-0.3.1.dev11}/verifiers/v1/envs/best_of_n/__init__.py +0 -0
  321. {verifiers-0.3.1.dev9 → verifiers-0.3.1.dev11}/verifiers/v1/envs/best_of_n/env.py +0 -0
  322. {verifiers-0.3.1.dev9 → verifiers-0.3.1.dev11}/verifiers/v1/envs/shared_agentic_judge/__init__.py +0 -0
  323. {verifiers-0.3.1.dev9 → verifiers-0.3.1.dev11}/verifiers/v1/envs/single_agent/__init__.py +0 -0
  324. {verifiers-0.3.1.dev9 → verifiers-0.3.1.dev11}/verifiers/v1/envs/single_agent/env.py +0 -0
  325. {verifiers-0.3.1.dev9 → verifiers-0.3.1.dev11}/verifiers/v1/envs/user_sim/__init__.py +0 -0
  326. {verifiers-0.3.1.dev9 → verifiers-0.3.1.dev11}/verifiers/v1/envs/user_sim/env.py +0 -0
  327. {verifiers-0.3.1.dev9 → verifiers-0.3.1.dev11}/verifiers/v1/episode.py +0 -0
  328. {verifiers-0.3.1.dev9 → verifiers-0.3.1.dev11}/verifiers/v1/errors.py +0 -0
  329. {verifiers-0.3.1.dev9 → verifiers-0.3.1.dev11}/verifiers/v1/gepa/__init__.py +0 -0
  330. {verifiers-0.3.1.dev9 → verifiers-0.3.1.dev11}/verifiers/v1/gepa/adapter.py +0 -0
  331. {verifiers-0.3.1.dev9 → verifiers-0.3.1.dev11}/verifiers/v1/gepa/config.py +0 -0
  332. {verifiers-0.3.1.dev9 → verifiers-0.3.1.dev11}/verifiers/v1/gepa/dataset.py +0 -0
  333. {verifiers-0.3.1.dev9 → verifiers-0.3.1.dev11}/verifiers/v1/gepa/reflection.py +0 -0
  334. {verifiers-0.3.1.dev9 → verifiers-0.3.1.dev11}/verifiers/v1/gepa/runner.py +0 -0
  335. {verifiers-0.3.1.dev9 → verifiers-0.3.1.dev11}/verifiers/v1/graph.py +0 -0
  336. {verifiers-0.3.1.dev9 → verifiers-0.3.1.dev11}/verifiers/v1/harness.py +0 -0
  337. {verifiers-0.3.1.dev9 → verifiers-0.3.1.dev11}/verifiers/v1/harnesses/__init__.py +0 -0
  338. {verifiers-0.3.1.dev9 → verifiers-0.3.1.dev11}/verifiers/v1/harnesses/bash/__init__.py +0 -0
  339. {verifiers-0.3.1.dev9 → verifiers-0.3.1.dev11}/verifiers/v1/harnesses/bash/harness.py +0 -0
  340. {verifiers-0.3.1.dev9 → verifiers-0.3.1.dev11}/verifiers/v1/harnesses/bash/program.py +0 -0
  341. {verifiers-0.3.1.dev9 → verifiers-0.3.1.dev11}/verifiers/v1/harnesses/browser_use/__init__.py +0 -0
  342. {verifiers-0.3.1.dev9 → verifiers-0.3.1.dev11}/verifiers/v1/harnesses/browser_use/harness.py +0 -0
  343. {verifiers-0.3.1.dev9 → verifiers-0.3.1.dev11}/verifiers/v1/harnesses/browser_use/program.py +0 -0
  344. {verifiers-0.3.1.dev9 → verifiers-0.3.1.dev11}/verifiers/v1/harnesses/claude_code/__init__.py +0 -0
  345. {verifiers-0.3.1.dev9 → verifiers-0.3.1.dev11}/verifiers/v1/harnesses/claude_code/harness.py +0 -0
  346. {verifiers-0.3.1.dev9 → verifiers-0.3.1.dev11}/verifiers/v1/harnesses/codex/__init__.py +0 -0
  347. {verifiers-0.3.1.dev9 → verifiers-0.3.1.dev11}/verifiers/v1/harnesses/codex/harness.py +0 -0
  348. {verifiers-0.3.1.dev9 → verifiers-0.3.1.dev11}/verifiers/v1/harnesses/hermes_agent/__init__.py +0 -0
  349. {verifiers-0.3.1.dev9 → verifiers-0.3.1.dev11}/verifiers/v1/harnesses/hermes_agent/harness.py +0 -0
  350. {verifiers-0.3.1.dev9 → verifiers-0.3.1.dev11}/verifiers/v1/harnesses/hermes_agent/program.py +0 -0
  351. {verifiers-0.3.1.dev9 → verifiers-0.3.1.dev11}/verifiers/v1/harnesses/kimi_code/__init__.py +0 -0
  352. {verifiers-0.3.1.dev9 → verifiers-0.3.1.dev11}/verifiers/v1/harnesses/kimi_code/harness.py +0 -0
  353. {verifiers-0.3.1.dev9 → verifiers-0.3.1.dev11}/verifiers/v1/harnesses/mini_swe_agent/__init__.py +0 -0
  354. {verifiers-0.3.1.dev9 → verifiers-0.3.1.dev11}/verifiers/v1/harnesses/mini_swe_agent/harness.py +0 -0
  355. {verifiers-0.3.1.dev9 → verifiers-0.3.1.dev11}/verifiers/v1/harnesses/mini_swe_agent/program.py +0 -0
  356. {verifiers-0.3.1.dev9 → verifiers-0.3.1.dev11}/verifiers/v1/harnesses/node.py +0 -0
  357. {verifiers-0.3.1.dev9 → verifiers-0.3.1.dev11}/verifiers/v1/harnesses/null/__init__.py +0 -0
  358. {verifiers-0.3.1.dev9 → verifiers-0.3.1.dev11}/verifiers/v1/harnesses/null/harness.py +0 -0
  359. {verifiers-0.3.1.dev9 → verifiers-0.3.1.dev11}/verifiers/v1/harnesses/null/program.py +0 -0
  360. {verifiers-0.3.1.dev9 → verifiers-0.3.1.dev11}/verifiers/v1/harnesses/openclaw/__init__.py +0 -0
  361. {verifiers-0.3.1.dev9 → verifiers-0.3.1.dev11}/verifiers/v1/harnesses/pi/__init__.py +0 -0
  362. {verifiers-0.3.1.dev9 → verifiers-0.3.1.dev11}/verifiers/v1/harnesses/pool/__init__.py +0 -0
  363. {verifiers-0.3.1.dev9 → verifiers-0.3.1.dev11}/verifiers/v1/harnesses/pool/harness.py +0 -0
  364. {verifiers-0.3.1.dev9 → verifiers-0.3.1.dev11}/verifiers/v1/harnesses/rlm/__init__.py +0 -0
  365. {verifiers-0.3.1.dev9 → verifiers-0.3.1.dev11}/verifiers/v1/harnesses/rlm/harness.py +0 -0
  366. {verifiers-0.3.1.dev9 → verifiers-0.3.1.dev11}/verifiers/v1/harnesses/terminus_2/__init__.py +0 -0
  367. {verifiers-0.3.1.dev9 → verifiers-0.3.1.dev11}/verifiers/v1/harnesses/terminus_2/harness.py +0 -0
  368. {verifiers-0.3.1.dev9 → verifiers-0.3.1.dev11}/verifiers/v1/harnesses/terminus_2/program.py +0 -0
  369. {verifiers-0.3.1.dev9 → verifiers-0.3.1.dev11}/verifiers/v1/interception/__init__.py +0 -0
  370. {verifiers-0.3.1.dev9 → verifiers-0.3.1.dev11}/verifiers/v1/interception/base.py +0 -0
  371. {verifiers-0.3.1.dev9 → verifiers-0.3.1.dev11}/verifiers/v1/interception/pool.py +0 -0
  372. {verifiers-0.3.1.dev9 → verifiers-0.3.1.dev11}/verifiers/v1/interception/server.py +0 -0
  373. {verifiers-0.3.1.dev9 → verifiers-0.3.1.dev11}/verifiers/v1/interception/tunnel/__init__.py +0 -0
  374. {verifiers-0.3.1.dev9 → verifiers-0.3.1.dev11}/verifiers/v1/interception/tunnel/base.py +0 -0
  375. {verifiers-0.3.1.dev9 → verifiers-0.3.1.dev11}/verifiers/v1/interception/tunnel/custom.py +0 -0
  376. {verifiers-0.3.1.dev9 → verifiers-0.3.1.dev11}/verifiers/v1/interception/tunnel/prime.py +0 -0
  377. {verifiers-0.3.1.dev9 → verifiers-0.3.1.dev11}/verifiers/v1/judge.py +0 -0
  378. {verifiers-0.3.1.dev9 → verifiers-0.3.1.dev11}/verifiers/v1/judges/__init__.py +0 -0
  379. {verifiers-0.3.1.dev9 → verifiers-0.3.1.dev11}/verifiers/v1/judges/reference.py +0 -0
  380. {verifiers-0.3.1.dev9 → verifiers-0.3.1.dev11}/verifiers/v1/judges/reference.txt +0 -0
  381. {verifiers-0.3.1.dev9 → verifiers-0.3.1.dev11}/verifiers/v1/judges/rubric.py +0 -0
  382. {verifiers-0.3.1.dev9 → verifiers-0.3.1.dev11}/verifiers/v1/judges/rubric.txt +0 -0
  383. {verifiers-0.3.1.dev9 → verifiers-0.3.1.dev11}/verifiers/v1/legacy.py +0 -0
  384. {verifiers-0.3.1.dev9 → verifiers-0.3.1.dev11}/verifiers/v1/mcp/__init__.py +0 -0
  385. {verifiers-0.3.1.dev9 → verifiers-0.3.1.dev11}/verifiers/v1/mcp/launch.py +0 -0
  386. {verifiers-0.3.1.dev9 → verifiers-0.3.1.dev11}/verifiers/v1/mcp/server.py +0 -0
  387. {verifiers-0.3.1.dev9 → verifiers-0.3.1.dev11}/verifiers/v1/mcp/toolset.py +0 -0
  388. {verifiers-0.3.1.dev9 → verifiers-0.3.1.dev11}/verifiers/v1/runtimes/__init__.py +0 -0
  389. {verifiers-0.3.1.dev9 → verifiers-0.3.1.dev11}/verifiers/v1/runtimes/base.py +0 -0
  390. {verifiers-0.3.1.dev9 → verifiers-0.3.1.dev11}/verifiers/v1/runtimes/docker/__init__.py +0 -0
  391. {verifiers-0.3.1.dev9 → verifiers-0.3.1.dev11}/verifiers/v1/runtimes/docker/egress.py +0 -0
  392. {verifiers-0.3.1.dev9 → verifiers-0.3.1.dev11}/verifiers/v1/runtimes/limiters.py +0 -0
  393. {verifiers-0.3.1.dev9 → verifiers-0.3.1.dev11}/verifiers/v1/runtimes/modal.py +0 -0
  394. {verifiers-0.3.1.dev9 → verifiers-0.3.1.dev11}/verifiers/v1/runtimes/prime.py +0 -0
  395. {verifiers-0.3.1.dev9 → verifiers-0.3.1.dev11}/verifiers/v1/runtimes/subprocess.py +0 -0
  396. {verifiers-0.3.1.dev9 → verifiers-0.3.1.dev11}/verifiers/v1/serve/__init__.py +0 -0
  397. {verifiers-0.3.1.dev9 → verifiers-0.3.1.dev11}/verifiers/v1/serve/client.py +0 -0
  398. {verifiers-0.3.1.dev9 → verifiers-0.3.1.dev11}/verifiers/v1/serve/pool.py +0 -0
  399. {verifiers-0.3.1.dev9 → verifiers-0.3.1.dev11}/verifiers/v1/serve/server.py +0 -0
  400. {verifiers-0.3.1.dev9 → verifiers-0.3.1.dev11}/verifiers/v1/serve/types.py +0 -0
  401. {verifiers-0.3.1.dev9 → verifiers-0.3.1.dev11}/verifiers/v1/session.py +0 -0
  402. {verifiers-0.3.1.dev9 → verifiers-0.3.1.dev11}/verifiers/v1/state.py +0 -0
  403. {verifiers-0.3.1.dev9 → verifiers-0.3.1.dev11}/verifiers/v1/taskset.py +0 -0
  404. {verifiers-0.3.1.dev9 → verifiers-0.3.1.dev11}/verifiers/v1/tasksets/__init__.py +0 -0
  405. {verifiers-0.3.1.dev9 → verifiers-0.3.1.dev11}/verifiers/v1/tasksets/harbor/__init__.py +0 -0
  406. {verifiers-0.3.1.dev9 → verifiers-0.3.1.dev11}/verifiers/v1/tasksets/harbor/env.py +0 -0
  407. {verifiers-0.3.1.dev9 → verifiers-0.3.1.dev11}/verifiers/v1/tasksets/harbor/taskset.py +0 -0
  408. {verifiers-0.3.1.dev9 → verifiers-0.3.1.dev11}/verifiers/v1/tasksets/lean/__init__.py +0 -0
  409. {verifiers-0.3.1.dev9 → verifiers-0.3.1.dev11}/verifiers/v1/tasksets/lean/scoring.py +0 -0
  410. {verifiers-0.3.1.dev9 → verifiers-0.3.1.dev11}/verifiers/v1/tasksets/lean/taskset.py +0 -0
  411. {verifiers-0.3.1.dev9 → verifiers-0.3.1.dev11}/verifiers/v1/tasksets/nemo_gym/__init__.py +0 -0
  412. {verifiers-0.3.1.dev9 → verifiers-0.3.1.dev11}/verifiers/v1/tasksets/nemo_gym/response.py +0 -0
  413. {verifiers-0.3.1.dev9 → verifiers-0.3.1.dev11}/verifiers/v1/tasksets/nemo_gym/server.py +0 -0
  414. {verifiers-0.3.1.dev9 → verifiers-0.3.1.dev11}/verifiers/v1/tasksets/nemo_gym/taskset.py +0 -0
  415. {verifiers-0.3.1.dev9 → verifiers-0.3.1.dev11}/verifiers/v1/tasksets/nemo_gym/toolset.py +0 -0
  416. {verifiers-0.3.1.dev9 → verifiers-0.3.1.dev11}/verifiers/v1/tasksets/openenv/__init__.py +0 -0
  417. {verifiers-0.3.1.dev9 → verifiers-0.3.1.dev11}/verifiers/v1/tasksets/openenv/taskset.py +0 -0
  418. {verifiers-0.3.1.dev9 → verifiers-0.3.1.dev11}/verifiers/v1/tasksets/textarena/__init__.py +0 -0
  419. {verifiers-0.3.1.dev9 → verifiers-0.3.1.dev11}/verifiers/v1/tasksets/textarena/taskset.py +0 -0
  420. {verifiers-0.3.1.dev9 → verifiers-0.3.1.dev11}/verifiers/v1/trace.py +0 -0
  421. {verifiers-0.3.1.dev9 → verifiers-0.3.1.dev11}/verifiers/v1/types.py +0 -0
  422. {verifiers-0.3.1.dev9 → verifiers-0.3.1.dev11}/verifiers/v1/utils/__init__.py +0 -0
  423. {verifiers-0.3.1.dev9 → verifiers-0.3.1.dev11}/verifiers/v1/utils/aio.py +0 -0
  424. {verifiers-0.3.1.dev9 → verifiers-0.3.1.dev11}/verifiers/v1/utils/artifacts.py +0 -0
  425. {verifiers-0.3.1.dev9 → verifiers-0.3.1.dev11}/verifiers/v1/utils/compile.py +0 -0
  426. {verifiers-0.3.1.dev9 → verifiers-0.3.1.dev11}/verifiers/v1/utils/decorators.py +0 -0
  427. {verifiers-0.3.1.dev9 → verifiers-0.3.1.dev11}/verifiers/v1/utils/format.py +0 -0
  428. {verifiers-0.3.1.dev9 → verifiers-0.3.1.dev11}/verifiers/v1/utils/generic.py +0 -0
  429. {verifiers-0.3.1.dev9 → verifiers-0.3.1.dev11}/verifiers/v1/utils/git.py +0 -0
  430. {verifiers-0.3.1.dev9 → verifiers-0.3.1.dev11}/verifiers/v1/utils/image.py +0 -0
  431. {verifiers-0.3.1.dev9 → verifiers-0.3.1.dev11}/verifiers/v1/utils/install.py +0 -0
  432. {verifiers-0.3.1.dev9 → verifiers-0.3.1.dev11}/verifiers/v1/utils/interrupt.py +0 -0
  433. {verifiers-0.3.1.dev9 → verifiers-0.3.1.dev11}/verifiers/v1/utils/logging.py +0 -0
  434. {verifiers-0.3.1.dev9 → verifiers-0.3.1.dev11}/verifiers/v1/utils/memory.py +0 -0
  435. {verifiers-0.3.1.dev9 → verifiers-0.3.1.dev11}/verifiers/v1/utils/platform.py +0 -0
  436. {verifiers-0.3.1.dev9 → verifiers-0.3.1.dev11}/verifiers/v1/utils/retries.py +0 -0
  437. {verifiers-0.3.1.dev9 → verifiers-0.3.1.dev11}/verifiers/v1/utils/score.py +0 -0
  438. {verifiers-0.3.1.dev9 → verifiers-0.3.1.dev11}/verifiers/v1/utils/version.py +0 -0
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: verifiers
3
- Version: 0.3.1.dev9
3
+ Version: 0.3.1.dev11
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,101 @@
1
+ import verifiers.v1 as vf
2
+ from verifiers.v1.graph import MessageNode
3
+ from verifiers.v1.types import AssistantMessage, UserMessage
4
+
5
+ PLUGGED_FNS_PY = """
6
+ async def reply_length(trace) -> float:
7
+ return float(len(trace.last_reply or ""))
8
+
9
+
10
+ async def exact_match(task, trace) -> float:
11
+ return float(task.answer in (trace.last_reply or ""))
12
+
13
+
14
+ async def marker(trace) -> float:
15
+ return 0.125
16
+
17
+
18
+ async def two_turns(trace) -> bool:
19
+ return trace.num_turns >= 2
20
+ """
21
+
22
+
23
+ class HookData(vf.TaskData):
24
+ answer: str = ""
25
+
26
+
27
+ class HookTask(vf.Task[HookData]):
28
+ @vf.stop
29
+ async def single_turn(self, trace: vf.Trace) -> bool:
30
+ return trace.num_turns >= 1
31
+
32
+ @vf.reward
33
+ async def lcs(self, trace: vf.Trace) -> float:
34
+ return 0.5
35
+
36
+
37
+ async def test_config_plugged_fns_merge_and_override(tmp_path) -> None:
38
+ fns = tmp_path / "fns.py"
39
+ fns.write_text(PLUGGED_FNS_PY)
40
+ config = vf.TaskConfig(
41
+ stops={"single_turn": vf.DecoratedFunctionConfig(fn=f"{fns}:two_turns")},
42
+ metrics={"reply_length": vf.DecoratedFunctionConfig(fn=f"{fns}:reply_length")},
43
+ rewards={
44
+ "exact_match": vf.RewardFunctionConfig(fn=f"{fns}:exact_match", weight=0.5),
45
+ "lcs": vf.RewardFunctionConfig(fn=f"{fns}:marker", weight=2.0),
46
+ },
47
+ )
48
+ task = HookTask(HookData(idx=0, prompt="abc", answer="cba"), config)
49
+ trace = vf.Trace(
50
+ agent=vf.AgentInfo(config=vf.AgentConfig()),
51
+ task=vf.TraceTask(type="HookTask", data=task.data),
52
+ nodes=[
53
+ MessageNode(parent=None, message=UserMessage(content="abc"), sampled=False),
54
+ MessageNode(
55
+ parent=0, message=AssistantMessage(content="cba"), sampled=True
56
+ ),
57
+ ],
58
+ )
59
+
60
+ # the plugged `single_turn` replaces the decorated one: no stop after one turn
61
+ (stop,) = task.hooks("stop")
62
+ assert stop.__name__ == "single_turn"
63
+ assert not await stop(trace)
64
+
65
+ await task.score(trace)
66
+ # `lcs` scored by the plugged marker (config wins the name clash), config weight
67
+ assert trace.rewards["lcs"].score == 0.125
68
+ assert trace.rewards["lcs"].weight == 2.0
69
+ assert trace.rewards["exact_match"].score == 1.0
70
+ assert trace.rewards["exact_match"].weight == 0.5
71
+ assert trace.metrics["reply_length"] == 3.0
72
+
73
+
74
+ def test_compare_stdout_results_accepts_token_equal_text() -> None:
75
+ assert vf.compare_stdout_results("hello world\n", "hello world\n")
76
+
77
+
78
+ def test_compare_stdout_results_keeps_numeric_tolerance() -> None:
79
+ assert vf.compare_stdout_results("1.0001 2.0\n", "1.0002 2.0009\n")
80
+
81
+
82
+ def test_parse_pytest_outcomes_strips_xfail_xpass_reasons() -> None:
83
+ output = (
84
+ "XFAIL tests/test_mod.py::test_xfail - known bug - still tracked\n"
85
+ "XPASS tests/test_mod.py::test_xpass - always xfail - unexpectedly passed\n"
86
+ "FAILED tests/test_mod.py::test_param[a - b] - assert left - right\n"
87
+ "PASSED tests/test_mod.py::test_ok"
88
+ )
89
+
90
+ assert vf.parse_pytest_outcomes(output) == {
91
+ "tests/test_mod.py::test_xfail": "XFAIL",
92
+ "tests/test_mod.py::test_xpass": "XPASS",
93
+ "tests/test_mod.py::test_param[a - b]": "FAILED",
94
+ "tests/test_mod.py::test_ok": "PASSED",
95
+ }
96
+
97
+
98
+ def test_parse_judge_choice_uses_first_choice_after_verdict_marker() -> None:
99
+ response = "Final Judgment: B because it is a better answer"
100
+
101
+ assert vf.parse_judge_choice(response, choices=("A", "B")) == "B"
@@ -26,7 +26,12 @@ from verifiers.v1.configs.serve import (
26
26
  StaticPoolConfig,
27
27
  pool_serve_kwargs,
28
28
  )
29
- from verifiers.v1.configs.task import TaskConfig
29
+ from verifiers.v1.configs.task import (
30
+ DecoratedFunctionConfig,
31
+ FunctionConfig,
32
+ RewardFunctionConfig,
33
+ TaskConfig,
34
+ )
30
35
  from verifiers.v1.configs.taskset import TasksetConfig
31
36
  from verifiers.v1.env import Env
32
37
  from verifiers.v1.envs.single_agent import SingleAgentEnv, SingleAgentEnvConfig
@@ -240,6 +245,9 @@ __all__ = [ # noqa: RUF022 - grouped by public API area
240
245
  "Taskset",
241
246
  "TaskConfig",
242
247
  "TasksetConfig",
248
+ "FunctionConfig",
249
+ "DecoratedFunctionConfig",
250
+ "RewardFunctionConfig",
243
251
  "BaseConfig",
244
252
  "Harness",
245
253
  "HarnessSession",
@@ -0,0 +1,64 @@
1
+ """Run-time task knobs (`--env.taskset.task.*`), read by `Task` behavior."""
2
+
3
+ from __future__ import annotations
4
+
5
+ from pydantic import Field, FiniteFloat, model_validator
6
+ from pydantic_config import BaseConfig
7
+
8
+ from verifiers.v1.configs.judge import Judges, check_judges, resolve_judges
9
+
10
+
11
+ class FunctionConfig(BaseConfig):
12
+ """A function plugged in by import path."""
13
+
14
+ fn: str
15
+ """Import path to the function: `pkg.module.function`, `pkg.module:function`,
16
+ or `path/to/file.py:function`."""
17
+
18
+
19
+ class DecoratedFunctionConfig(FunctionConfig):
20
+ """A plugged function standing in for a decorated task method."""
21
+
22
+ priority: int = 0
23
+ """Execution order, like the decorator's — higher runs first, ties break by name."""
24
+
25
+
26
+ class RewardFunctionConfig(DecoratedFunctionConfig):
27
+ """A plugged function standing in for a `@vf.reward` task method."""
28
+
29
+ weight: FiniteFloat = 1.0
30
+
31
+
32
+ class TaskConfig(BaseConfig):
33
+ """Run-time knobs read by `Task` behavior.
34
+
35
+ Subclass for server placement, judge, or scoring settings. Every field needs a
36
+ default because constructing a task without a config builds the declared config type.
37
+ Load-time dataset settings belong on `TasksetConfig` instead.
38
+ """
39
+
40
+ judges: Judges = Field(default_factory=list)
41
+ """Judge plugins run after task rewards, set through `--env.taskset.task.judges`."""
42
+
43
+ stops: dict[str, DecoratedFunctionConfig] = Field(default_factory=dict)
44
+ """Stop conditions `(trace) -> bool` plugged by name, merged with the task's
45
+ `@vf.stop` methods (a plugged function replaces a decorated one with the same
46
+ name)."""
47
+ metrics: dict[str, DecoratedFunctionConfig] = Field(default_factory=dict)
48
+ """Metrics `(task, trace, runtime) -> float` plugged by name, merged with the
49
+ task's `@vf.metric` methods."""
50
+ rewards: dict[str, RewardFunctionConfig] = Field(default_factory=dict)
51
+ """Weighted rewards `(task, trace, runtime) -> float` plugged by name, merged with
52
+ the task's `@vf.reward` methods."""
53
+
54
+ @model_validator(mode="before")
55
+ @classmethod
56
+ def _resolve_judges(cls, data):
57
+ if isinstance(data, dict) and data.get("judges"):
58
+ data["judges"] = resolve_judges(data["judges"])
59
+ return data
60
+
61
+ @model_validator(mode="after")
62
+ def _check_judges(self) -> TaskConfig:
63
+ check_judges(self.judges)
64
+ return self
@@ -117,8 +117,7 @@ class OpenClawHarness(Harness[OpenClawHarnessConfig]):
117
117
  data: TaskData,
118
118
  ) -> ProgramResult:
119
119
  system_prompt, prompt = self.resolve_prompt(data)
120
- # Opt-in via sampling: OpenClaw redacts persisted encrypted reasoning, so resumed sessions 400 replaying it.
121
- reasoning = ctx.sampling.reasoning_effort not in (None, "none")
120
+ provider, _ = ctx.model.split("/", 1)
122
121
  directory = OPENCLAW_DIR.format(version=self.config.version)
123
122
  state_dir = f".vf-openclaw/{trace.id}"
124
123
  config_path = f"{state_dir}/openclaw.json"
@@ -130,7 +129,7 @@ class OpenClawHarness(Harness[OpenClawHarnessConfig]):
130
129
  "workspace": ".",
131
130
  "skipBootstrap": True,
132
131
  "sandbox": {"mode": "off"},
133
- "model": {"primary": f"intercept/{ctx.model}"},
132
+ "model": {"primary": ctx.model},
134
133
  }
135
134
  },
136
135
  "tools": {
@@ -140,21 +139,10 @@ class OpenClawHarness(Harness[OpenClawHarnessConfig]):
140
139
  "deny": self.config.disabled_tools or [],
141
140
  },
142
141
  "models": {
143
- "mode": "replace",
144
142
  "providers": {
145
- "intercept": {
143
+ provider: {
146
144
  "baseUrl": endpoint,
147
145
  "apiKey": "${OPENCLAW_INTERCEPT_KEY}",
148
- "api": "openai-responses",
149
- "authHeader": True,
150
- "models": [
151
- {
152
- "id": ctx.model,
153
- "name": ctx.model,
154
- "reasoning": reasoning,
155
- "input": ["text", "image"],
156
- }
157
- ],
158
146
  }
159
147
  },
160
148
  },
@@ -17,7 +17,6 @@ from verifiers.v1.trace import Trace
17
17
 
18
18
  logger = logging.getLogger(__name__)
19
19
 
20
- PROVIDER = "intercept"
21
20
  KEY_VAR = "PI_INTERCEPT_KEY"
22
21
  HOME_VAR = "VF_PI_ORIGINAL_HOME"
23
22
 
@@ -143,23 +142,12 @@ class PiHarness(Harness[PiHarnessConfig]):
143
142
  ) -> ProgramResult:
144
143
  system_prompt, prompt = self.resolve_prompt(data)
145
144
  agent_dir = f".vf-pi-agent-{trace.id}"
146
- reasoning = ctx.sampling.reasoning_effort not in (
147
- None,
148
- "none",
149
- ) or ctx.model.rsplit("/", 1)[-1].startswith(("gpt-5", "o1", "o3", "o4"))
145
+ provider, model = ctx.model.split("/", 1)
150
146
  models = {
151
147
  "providers": {
152
- PROVIDER: {
148
+ provider: {
153
149
  "baseUrl": endpoint,
154
- "api": "openai-completions",
155
150
  "apiKey": f"${KEY_VAR}",
156
- "models": [
157
- {
158
- "id": ctx.model,
159
- "reasoning": reasoning,
160
- "input": ["text", "image"],
161
- }
162
- ],
163
151
  }
164
152
  }
165
153
  }
@@ -202,9 +190,9 @@ class PiHarness(Harness[PiHarnessConfig]):
202
190
  PI_BIN,
203
191
  "--no-approve",
204
192
  "--provider",
205
- PROVIDER,
193
+ provider,
206
194
  "--model",
207
- ctx.model,
195
+ model,
208
196
  *mcp_args,
209
197
  *skill_args,
210
198
  ]
@@ -30,7 +30,7 @@ from verifiers.v1.state import state_cls
30
30
  from verifiers.v1.task import Task
31
31
  from verifiers.v1.trace import AgentInfo, Trace, TraceTask
32
32
  from verifiers.v1.types import Messages
33
- from verifiers.v1.utils.decorators import discover_decorated, invoke
33
+ from verifiers.v1.utils.decorators import invoke
34
34
 
35
35
  logger = logging.getLogger(__name__)
36
36
 
@@ -91,9 +91,7 @@ class Rollout:
91
91
  )
92
92
  if on_trace is not None:
93
93
  on_trace(self.trace)
94
- self._session = RolloutSession(
95
- ctx, self.trace, discover_decorated(task, "stop"), limits
96
- )
94
+ self._session = RolloutSession(ctx, self.trace, task.hooks("stop"), limits)
97
95
  self._stack = AsyncExitStack()
98
96
  self._failed = False
99
97
  self._failure: Exception | None = None
@@ -12,8 +12,8 @@ from __future__ import annotations
12
12
  import copy
13
13
  import inspect
14
14
  import logging
15
- from collections.abc import Mapping
16
- from typing import TYPE_CHECKING, ClassVar, Generic, Self
15
+ from collections.abc import Callable, Mapping
16
+ from typing import TYPE_CHECKING, Any, ClassVar, Generic, Self
17
17
 
18
18
  from pydantic import BaseModel, ConfigDict, Field
19
19
  from typing_extensions import TypeVar
@@ -164,8 +164,8 @@ class Task(Generic[DataT, StateT, ConfigT]):
164
164
  available["runtime"] = runtime
165
165
 
166
166
  async with boundary(TaskError, f"task {type(self).__name__} scoring"):
167
- metrics = discover_decorated(self, "metric")
168
- rewards = discover_decorated(self, "reward")
167
+ metrics = self.hooks("metric")
168
+ rewards = self.hooks("reward")
169
169
  if runtime is None:
170
170
  skipped = [
171
171
  fn.__name__ for fn in (*metrics, *rewards) if requires_runtime(fn)
@@ -231,6 +231,25 @@ class Task(Generic[DataT, StateT, ConfigT]):
231
231
 
232
232
  return [load_judge(config) for config in self.config.judges]
233
233
 
234
+ def hooks(self, attr: str) -> list[Callable[..., Any]]:
235
+ """The task's `@vf.<attr>` methods merged with the config-plugged functions —
236
+ a plugged function replaces a decorated method with the same name — sorted by
237
+ descending priority then name."""
238
+ from verifiers.v1.utils.loaders import load_plugged_fn
239
+
240
+ plugged = {
241
+ "stop": self.config.stops,
242
+ "metric": self.config.metrics,
243
+ "reward": self.config.rewards,
244
+ }[attr]
245
+ merged = {fn.__name__: fn for fn in discover_decorated(self, attr)}
246
+ merged |= {
247
+ name: load_plugged_fn(name, spec, attr) for name, spec in plugged.items()
248
+ }
249
+ fns = list(merged.values())
250
+ fns.sort(key=lambda fn: (-getattr(fn, f"{attr}_priority", 0), fn.__name__))
251
+ return fns
252
+
234
253
  @classmethod
235
254
  def toolsets(cls, config: ConfigT) -> list[Toolset]:
236
255
  """Tool servers launched per rollout, each constructed with its config off
@@ -1,11 +1,14 @@
1
- """Resolve taskset, harness, judge, and environment plugins."""
1
+ """Resolve taskset, harness, judge, hook, and environment plugins."""
2
2
 
3
3
  import contextvars
4
+ import functools
4
5
  import importlib
5
6
  import importlib.util
6
7
  import pkgutil
7
8
  from collections.abc import Callable
9
+ from pathlib import Path
8
10
  from types import ModuleType
11
+ from typing import Any
9
12
 
10
13
  from pydantic import ValidationError
11
14
  from pydantic_config import BaseConfig
@@ -13,6 +16,7 @@ from pydantic_config import BaseConfig
13
16
  from verifiers.v1.configs.env import EnvConfig
14
17
  from verifiers.v1.configs.harness import HarnessConfig
15
18
  from verifiers.v1.configs.judge import JudgeConfig
19
+ from verifiers.v1.configs.task import DecoratedFunctionConfig, RewardFunctionConfig
16
20
  from verifiers.v1.configs.taskset import TasksetConfig
17
21
  from verifiers.v1.env import Env
18
22
  from verifiers.v1.envs.single_agent import SingleAgentEnv
@@ -205,6 +209,59 @@ def load_judge(config: JudgeConfig) -> Judge:
205
209
  return judge_class(config.id)(config)
206
210
 
207
211
 
212
+ @functools.cache
213
+ def file_module(path: str) -> ModuleType:
214
+ """Import a standalone `.py` file, cached by path so repeated plugged-fn loads
215
+ share one module object."""
216
+ resolved = Path(path).resolve()
217
+ spec = importlib.util.spec_from_file_location(resolved.stem, resolved)
218
+ if spec is None or spec.loader is None:
219
+ raise ImportError(f"cannot import module from {path!r}")
220
+ module = importlib.util.module_from_spec(spec)
221
+ spec.loader.exec_module(module)
222
+ return module
223
+
224
+
225
+ def plugged_fn(path: str) -> Callable[..., Any]:
226
+ """Resolve a plugged function's import path: `pkg.module.function`,
227
+ `pkg.module:function`, or `path/to/file.py:function`."""
228
+ module_path, _, attr = path.rpartition(":")
229
+ if not module_path:
230
+ module_path, _, attr = path.rpartition(".")
231
+ if not module_path or not attr:
232
+ raise ValueError(
233
+ f"fn {path!r} must be `pkg.module.function`, `pkg.module:function`, "
234
+ "or `path/to/file.py:function`"
235
+ )
236
+ if module_path.endswith(".py"):
237
+ module = file_module(module_path)
238
+ else:
239
+ module = importlib.import_module(module_path)
240
+ fn = getattr(module, attr, None)
241
+ if not callable(fn):
242
+ raise TypeError(f"fn {path!r} is not a function (got {fn!r})")
243
+ return fn
244
+
245
+
246
+ def load_plugged_fn(
247
+ name: str, config: DecoratedFunctionConfig, attr: str
248
+ ) -> Callable[..., Any]:
249
+ """Build a task hook from a config entry: the imported async function wrapped
250
+ under the plugged `name`, tagged like its `@vf.<attr>` equivalent."""
251
+ fn = plugged_fn(config.fn)
252
+
253
+ @functools.wraps(fn)
254
+ def plugged(*args: Any, **kwargs: Any) -> Any:
255
+ return fn(*args, **kwargs)
256
+
257
+ plugged.__name__ = name
258
+ setattr(plugged, attr, True)
259
+ setattr(plugged, f"{attr}_priority", config.priority)
260
+ if isinstance(config, RewardFunctionConfig):
261
+ plugged._vf_weight = config.weight
262
+ return plugged
263
+
264
+
208
265
  def taskset_config_type(taskset_id: str) -> type[TasksetConfig]:
209
266
  """Resolve the taskset's config specialization through its MRO."""
210
267
  return (
@@ -1,31 +0,0 @@
1
- import verifiers.v1 as vf
2
-
3
-
4
- def test_compare_stdout_results_accepts_token_equal_text() -> None:
5
- assert vf.compare_stdout_results("hello world\n", "hello world\n")
6
-
7
-
8
- def test_compare_stdout_results_keeps_numeric_tolerance() -> None:
9
- assert vf.compare_stdout_results("1.0001 2.0\n", "1.0002 2.0009\n")
10
-
11
-
12
- def test_parse_pytest_outcomes_strips_xfail_xpass_reasons() -> None:
13
- output = (
14
- "XFAIL tests/test_mod.py::test_xfail - known bug - still tracked\n"
15
- "XPASS tests/test_mod.py::test_xpass - always xfail - unexpectedly passed\n"
16
- "FAILED tests/test_mod.py::test_param[a - b] - assert left - right\n"
17
- "PASSED tests/test_mod.py::test_ok"
18
- )
19
-
20
- assert vf.parse_pytest_outcomes(output) == {
21
- "tests/test_mod.py::test_xfail": "XFAIL",
22
- "tests/test_mod.py::test_xpass": "XPASS",
23
- "tests/test_mod.py::test_param[a - b]": "FAILED",
24
- "tests/test_mod.py::test_ok": "PASSED",
25
- }
26
-
27
-
28
- def test_parse_judge_choice_uses_first_choice_after_verdict_marker() -> None:
29
- response = "Final Judgment: B because it is a better answer"
30
-
31
- assert vf.parse_judge_choice(response, choices=("A", "B")) == "B"
@@ -1,32 +0,0 @@
1
- """Run-time task knobs (`--env.taskset.task.*`), read by `Task` behavior."""
2
-
3
- from __future__ import annotations
4
-
5
- from pydantic import Field, model_validator
6
- from pydantic_config import BaseConfig
7
-
8
- from verifiers.v1.configs.judge import Judges, check_judges, resolve_judges
9
-
10
-
11
- class TaskConfig(BaseConfig):
12
- """Run-time knobs read by `Task` behavior.
13
-
14
- Subclass for server placement, judge, or scoring settings. Every field needs a
15
- default because constructing a task without a config builds the declared config type.
16
- Load-time dataset settings belong on `TasksetConfig` instead.
17
- """
18
-
19
- judges: Judges = Field(default_factory=list)
20
- """Judge plugins run after task rewards, set through `--env.taskset.task.judges`."""
21
-
22
- @model_validator(mode="before")
23
- @classmethod
24
- def _resolve_judges(cls, data):
25
- if isinstance(data, dict) and data.get("judges"):
26
- data["judges"] = resolve_judges(data["judges"])
27
- return data
28
-
29
- @model_validator(mode="after")
30
- def _check_judges(self) -> TaskConfig:
31
- check_judges(self.judges)
32
- return self
File without changes