verifiers 0.2.1.dev50__tar.gz → 0.2.1.dev52__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.2.1.dev50 → verifiers-0.2.1.dev52}/PKG-INFO +1 -1
  2. verifiers-0.2.1.dev50/verifiers/envs/experimental/composable/tasksets/search/README.md +0 -42
  3. verifiers-0.2.1.dev50/verifiers/envs/experimental/composable/tasksets/search/__init__.py +0 -15
  4. verifiers-0.2.1.dev50/verifiers/envs/experimental/composable/tasksets/search/openseeker/README.md +0 -46
  5. verifiers-0.2.1.dev50/verifiers/envs/experimental/composable/tasksets/search/openseeker/__init__.py +0 -5
  6. verifiers-0.2.1.dev50/verifiers/envs/experimental/composable/tasksets/search/openseeker/taskset.py +0 -564
  7. verifiers-0.2.1.dev50/verifiers/envs/experimental/composable/tasksets/search/quest/README.md +0 -66
  8. verifiers-0.2.1.dev50/verifiers/envs/experimental/composable/tasksets/search/quest/__init__.py +0 -5
  9. verifiers-0.2.1.dev50/verifiers/envs/experimental/composable/tasksets/search/quest/obj_task_eval/__init__.py +0 -17
  10. verifiers-0.2.1.dev50/verifiers/envs/experimental/composable/tasksets/search/quest/obj_task_eval/api_tools/__init__.py +0 -5
  11. verifiers-0.2.1.dev50/verifiers/envs/experimental/composable/tasksets/search/quest/obj_task_eval/api_tools/tool_pdf.py +0 -284
  12. verifiers-0.2.1.dev50/verifiers/envs/experimental/composable/tasksets/search/quest/obj_task_eval/eval_toolkit.py +0 -1119
  13. verifiers-0.2.1.dev50/verifiers/envs/experimental/composable/tasksets/search/quest/obj_task_eval/evaluator.py +0 -1271
  14. verifiers-0.2.1.dev50/verifiers/envs/experimental/composable/tasksets/search/quest/obj_task_eval/llm_client/__init__.py +0 -5
  15. verifiers-0.2.1.dev50/verifiers/envs/experimental/composable/tasksets/search/quest/obj_task_eval/llm_client/base_client.py +0 -15
  16. verifiers-0.2.1.dev50/verifiers/envs/experimental/composable/tasksets/search/quest/obj_task_eval/prompts/__init__.py +0 -4
  17. verifiers-0.2.1.dev50/verifiers/envs/experimental/composable/tasksets/search/quest/obj_task_eval/prompts/cache_prompts.py +0 -15
  18. verifiers-0.2.1.dev50/verifiers/envs/experimental/composable/tasksets/search/quest/obj_task_eval/utils/__init__.py +0 -7
  19. verifiers-0.2.1.dev50/verifiers/envs/experimental/composable/tasksets/search/quest/obj_task_eval/utils/cache_filesys.py +0 -45
  20. verifiers-0.2.1.dev50/verifiers/envs/experimental/composable/tasksets/search/quest/obj_task_eval/utils/load_eval_script.py +0 -107
  21. verifiers-0.2.1.dev50/verifiers/envs/experimental/composable/tasksets/search/quest/obj_task_eval/utils/misc.py +0 -106
  22. verifiers-0.2.1.dev50/verifiers/envs/experimental/composable/tasksets/search/quest/obj_task_eval/utils/tool_visit.py +0 -69
  23. verifiers-0.2.1.dev50/verifiers/envs/experimental/composable/tasksets/search/quest/obj_task_eval/utils/url_tools.py +0 -27
  24. verifiers-0.2.1.dev50/verifiers/envs/experimental/composable/tasksets/search/quest/obj_task_eval/verification_tree.py +0 -153
  25. verifiers-0.2.1.dev50/verifiers/envs/experimental/composable/tasksets/search/quest/open_ended.py +0 -329
  26. verifiers-0.2.1.dev50/verifiers/envs/experimental/composable/tasksets/search/quest/taskset.py +0 -763
  27. verifiers-0.2.1.dev50/verifiers/envs/experimental/composable/tasksets/search/redsearcher/README.md +0 -38
  28. verifiers-0.2.1.dev50/verifiers/envs/experimental/composable/tasksets/search/redsearcher/__init__.py +0 -5
  29. verifiers-0.2.1.dev50/verifiers/envs/experimental/composable/tasksets/search/redsearcher/taskset.py +0 -594
  30. verifiers-0.2.1.dev50/verifiers/envs/experimental/composable/tasksets/search/search_tasksets.py +0 -46
  31. {verifiers-0.2.1.dev50 → verifiers-0.2.1.dev52}/.gitignore +0 -0
  32. {verifiers-0.2.1.dev50 → verifiers-0.2.1.dev52}/LICENSE +0 -0
  33. {verifiers-0.2.1.dev50 → verifiers-0.2.1.dev52}/README.md +0 -0
  34. {verifiers-0.2.1.dev50 → verifiers-0.2.1.dev52}/pyproject.toml +0 -0
  35. {verifiers-0.2.1.dev50 → verifiers-0.2.1.dev52}/tests/AGENTS.md +0 -0
  36. {verifiers-0.2.1.dev50 → verifiers-0.2.1.dev52}/tests/__init__.py +0 -0
  37. {verifiers-0.2.1.dev50 → verifiers-0.2.1.dev52}/tests/conftest.py +0 -0
  38. {verifiers-0.2.1.dev50 → verifiers-0.2.1.dev52}/tests/test_browser_env.py +0 -0
  39. {verifiers-0.2.1.dev50 → verifiers-0.2.1.dev52}/tests/test_build_script.py +0 -0
  40. {verifiers-0.2.1.dev50 → verifiers-0.2.1.dev52}/tests/test_cli_agent_env.py +0 -0
  41. {verifiers-0.2.1.dev50 → verifiers-0.2.1.dev52}/tests/test_client_auth_errors.py +0 -0
  42. {verifiers-0.2.1.dev50 → verifiers-0.2.1.dev52}/tests/test_client_config.py +0 -0
  43. {verifiers-0.2.1.dev50 → verifiers-0.2.1.dev52}/tests/test_client_multimodal_types.py +0 -0
  44. {verifiers-0.2.1.dev50 → verifiers-0.2.1.dev52}/tests/test_composable_env.py +0 -0
  45. {verifiers-0.2.1.dev50 → verifiers-0.2.1.dev52}/tests/test_context_token_metrics.py +0 -0
  46. {verifiers-0.2.1.dev50 → verifiers-0.2.1.dev52}/tests/test_decorator_ranks.py +0 -0
  47. {verifiers-0.2.1.dev50 → verifiers-0.2.1.dev52}/tests/test_endpoint_registry.py +0 -0
  48. {verifiers-0.2.1.dev50 → verifiers-0.2.1.dev52}/tests/test_env_group.py +0 -0
  49. {verifiers-0.2.1.dev50 → verifiers-0.2.1.dev52}/tests/test_env_server.py +0 -0
  50. {verifiers-0.2.1.dev50 → verifiers-0.2.1.dev52}/tests/test_environment.py +0 -0
  51. {verifiers-0.2.1.dev50 → verifiers-0.2.1.dev52}/tests/test_environment_extra.py +0 -0
  52. {verifiers-0.2.1.dev50 → verifiers-0.2.1.dev52}/tests/test_envs.py +0 -0
  53. {verifiers-0.2.1.dev50 → verifiers-0.2.1.dev52}/tests/test_error_chain.py +0 -0
  54. {verifiers-0.2.1.dev50 → verifiers-0.2.1.dev52}/tests/test_eval_display.py +0 -0
  55. {verifiers-0.2.1.dev50 → verifiers-0.2.1.dev52}/tests/test_eval_utils.py +0 -0
  56. {verifiers-0.2.1.dev50 → verifiers-0.2.1.dev52}/tests/test_gepa_cli.py +0 -0
  57. {verifiers-0.2.1.dev50 → verifiers-0.2.1.dev52}/tests/test_gepa_utils.py +0 -0
  58. {verifiers-0.2.1.dev50 → verifiers-0.2.1.dev52}/tests/test_gym_env.py +0 -0
  59. {verifiers-0.2.1.dev50 → verifiers-0.2.1.dev52}/tests/test_harbor_env_mcp.py +0 -0
  60. {verifiers-0.2.1.dev50 → verifiers-0.2.1.dev52}/tests/test_imports.py +0 -0
  61. {verifiers-0.2.1.dev50 → verifiers-0.2.1.dev52}/tests/test_init_script.py +0 -0
  62. {verifiers-0.2.1.dev50 → verifiers-0.2.1.dev52}/tests/test_install_utils.py +0 -0
  63. {verifiers-0.2.1.dev50 → verifiers-0.2.1.dev52}/tests/test_interception_utils.py +0 -0
  64. {verifiers-0.2.1.dev50 → verifiers-0.2.1.dev52}/tests/test_logging.py +0 -0
  65. {verifiers-0.2.1.dev50 → verifiers-0.2.1.dev52}/tests/test_math_rubric.py +0 -0
  66. {verifiers-0.2.1.dev50 → verifiers-0.2.1.dev52}/tests/test_maybe_think_parser.py +0 -0
  67. {verifiers-0.2.1.dev50 → verifiers-0.2.1.dev52}/tests/test_message_utils.py +0 -0
  68. {verifiers-0.2.1.dev50 → verifiers-0.2.1.dev52}/tests/test_message_utils_multimodal.py +0 -0
  69. {verifiers-0.2.1.dev50 → verifiers-0.2.1.dev52}/tests/test_multiturn_env.py +0 -0
  70. {verifiers-0.2.1.dev50 → verifiers-0.2.1.dev52}/tests/test_nemorl_client.py +0 -0
  71. {verifiers-0.2.1.dev50 → verifiers-0.2.1.dev52}/tests/test_openai_chat_completions_token_client.py +0 -0
  72. {verifiers-0.2.1.dev50 → verifiers-0.2.1.dev52}/tests/test_openai_responses_client.py +0 -0
  73. {verifiers-0.2.1.dev50 → verifiers-0.2.1.dev52}/tests/test_opencode_rlm_env.py +0 -0
  74. {verifiers-0.2.1.dev50 → verifiers-0.2.1.dev52}/tests/test_openenv_client.py +0 -0
  75. {verifiers-0.2.1.dev50 → verifiers-0.2.1.dev52}/tests/test_parser.py +0 -0
  76. {verifiers-0.2.1.dev50 → verifiers-0.2.1.dev52}/tests/test_path_utils.py +0 -0
  77. {verifiers-0.2.1.dev50 → verifiers-0.2.1.dev52}/tests/test_per_turn_timing.py +0 -0
  78. {verifiers-0.2.1.dev50 → verifiers-0.2.1.dev52}/tests/test_pricing_utils.py +0 -0
  79. {verifiers-0.2.1.dev50 → verifiers-0.2.1.dev52}/tests/test_prime_plugin.py +0 -0
  80. {verifiers-0.2.1.dev50 → verifiers-0.2.1.dev52}/tests/test_renderer_client.py +0 -0
  81. {verifiers-0.2.1.dev50 → verifiers-0.2.1.dev52}/tests/test_renderer_e2e.py +0 -0
  82. {verifiers-0.2.1.dev50 → verifiers-0.2.1.dev52}/tests/test_rlm_composable_env.py +0 -0
  83. {verifiers-0.2.1.dev50 → verifiers-0.2.1.dev52}/tests/test_rubric.py +0 -0
  84. {verifiers-0.2.1.dev50 → verifiers-0.2.1.dev52}/tests/test_rubric_group.py +0 -0
  85. {verifiers-0.2.1.dev50 → verifiers-0.2.1.dev52}/tests/test_sandbox_debug_env.py +0 -0
  86. {verifiers-0.2.1.dev50 → verifiers-0.2.1.dev52}/tests/test_sandbox_env.py +0 -0
  87. {verifiers-0.2.1.dev50 → verifiers-0.2.1.dev52}/tests/test_sandbox_mixin.py +0 -0
  88. {verifiers-0.2.1.dev50 → verifiers-0.2.1.dev52}/tests/test_save_utils.py +0 -0
  89. {verifiers-0.2.1.dev50 → verifiers-0.2.1.dev52}/tests/test_setup_script.py +0 -0
  90. {verifiers-0.2.1.dev50 → verifiers-0.2.1.dev52}/tests/test_singleturn_env.py +0 -0
  91. {verifiers-0.2.1.dev50 → verifiers-0.2.1.dev52}/tests/test_stateful_tool_env.py +0 -0
  92. {verifiers-0.2.1.dev50 → verifiers-0.2.1.dev52}/tests/test_think_parser.py +0 -0
  93. {verifiers-0.2.1.dev50 → verifiers-0.2.1.dev52}/tests/test_tool_env.py +0 -0
  94. {verifiers-0.2.1.dev50 → verifiers-0.2.1.dev52}/tests/test_tool_utils.py +0 -0
  95. {verifiers-0.2.1.dev50 → verifiers-0.2.1.dev52}/tests/test_trajectory_processing.py +0 -0
  96. {verifiers-0.2.1.dev50 → verifiers-0.2.1.dev52}/tests/test_tui_info_formatting.py +0 -0
  97. {verifiers-0.2.1.dev50 → verifiers-0.2.1.dev52}/tests/test_types.py +0 -0
  98. {verifiers-0.2.1.dev50 → verifiers-0.2.1.dev52}/tests/test_wordle_env.py +0 -0
  99. {verifiers-0.2.1.dev50 → verifiers-0.2.1.dev52}/tests/test_xml_parser.py +0 -0
  100. {verifiers-0.2.1.dev50 → verifiers-0.2.1.dev52}/tests/v1/conftest.py +0 -0
  101. {verifiers-0.2.1.dev50 → verifiers-0.2.1.dev52}/tests/v1/fixtures/counter_tool_v1.py +0 -0
  102. {verifiers-0.2.1.dev50 → verifiers-0.2.1.dev52}/tests/v1/fixtures/echo_agentic_v1.py +0 -0
  103. {verifiers-0.2.1.dev50 → verifiers-0.2.1.dev52}/tests/v1/fixtures/echo_multi_v0.py +0 -0
  104. {verifiers-0.2.1.dev50 → verifiers-0.2.1.dev52}/tests/v1/fixtures/echo_tool_v1.py +0 -0
  105. {verifiers-0.2.1.dev50 → verifiers-0.2.1.dev52}/tests/v1/fixtures/echo_user_sim_v1.py +0 -0
  106. {verifiers-0.2.1.dev50 → verifiers-0.2.1.dev52}/tests/v1/fixtures/echo_v0.py +0 -0
  107. {verifiers-0.2.1.dev50 → verifiers-0.2.1.dev52}/tests/v1/fixtures/echo_v1.py +0 -0
  108. {verifiers-0.2.1.dev50 → verifiers-0.2.1.dev52}/tests/v1/fixtures/pyproject.toml +0 -0
  109. {verifiers-0.2.1.dev50 → verifiers-0.2.1.dev52}/tests/v1/fixtures/tool_response_image_v1.py +0 -0
  110. {verifiers-0.2.1.dev50 → verifiers-0.2.1.dev52}/tests/v1/test_color_codeword_tasks.py +0 -0
  111. {verifiers-0.2.1.dev50 → verifiers-0.2.1.dev52}/tests/v1/test_configs.py +0 -0
  112. {verifiers-0.2.1.dev50 → verifiers-0.2.1.dev52}/tests/v1/test_e2e.py +0 -0
  113. {verifiers-0.2.1.dev50 → verifiers-0.2.1.dev52}/tests/v1/test_envs.py +0 -0
  114. {verifiers-0.2.1.dev50 → verifiers-0.2.1.dev52}/tests/v1/test_graph.py +0 -0
  115. {verifiers-0.2.1.dev50 → verifiers-0.2.1.dev52}/tests/v1/test_judges.py +0 -0
  116. {verifiers-0.2.1.dev50 → verifiers-0.2.1.dev52}/tests/v1/test_legacy.py +0 -0
  117. {verifiers-0.2.1.dev50 → verifiers-0.2.1.dev52}/tests/v1/test_scoring.py +0 -0
  118. {verifiers-0.2.1.dev50 → verifiers-0.2.1.dev52}/tests/v1/test_taskset.py +0 -0
  119. {verifiers-0.2.1.dev50 → verifiers-0.2.1.dev52}/tests/v1/test_trace.py +0 -0
  120. {verifiers-0.2.1.dev50 → verifiers-0.2.1.dev52}/verifiers/__init__.py +0 -0
  121. {verifiers-0.2.1.dev50 → verifiers-0.2.1.dev52}/verifiers/cli/__init__.py +0 -0
  122. {verifiers-0.2.1.dev50 → verifiers-0.2.1.dev52}/verifiers/cli/commands/__init__.py +0 -0
  123. {verifiers-0.2.1.dev50 → verifiers-0.2.1.dev52}/verifiers/cli/commands/build.py +0 -0
  124. {verifiers-0.2.1.dev50 → verifiers-0.2.1.dev52}/verifiers/cli/commands/eval.py +0 -0
  125. {verifiers-0.2.1.dev50 → verifiers-0.2.1.dev52}/verifiers/cli/commands/gepa.py +0 -0
  126. {verifiers-0.2.1.dev50 → verifiers-0.2.1.dev52}/verifiers/cli/commands/init.py +0 -0
  127. {verifiers-0.2.1.dev50 → verifiers-0.2.1.dev52}/verifiers/cli/commands/install.py +0 -0
  128. {verifiers-0.2.1.dev50 → verifiers-0.2.1.dev52}/verifiers/cli/commands/setup.py +0 -0
  129. {verifiers-0.2.1.dev50 → verifiers-0.2.1.dev52}/verifiers/cli/plugins/__init__.py +0 -0
  130. {verifiers-0.2.1.dev50 → verifiers-0.2.1.dev52}/verifiers/cli/plugins/prime.py +0 -0
  131. {verifiers-0.2.1.dev50 → verifiers-0.2.1.dev52}/verifiers/cli/tui.py +0 -0
  132. {verifiers-0.2.1.dev50 → verifiers-0.2.1.dev52}/verifiers/clients/__init__.py +0 -0
  133. {verifiers-0.2.1.dev50 → verifiers-0.2.1.dev52}/verifiers/clients/anthropic_messages_client.py +0 -0
  134. {verifiers-0.2.1.dev50 → verifiers-0.2.1.dev52}/verifiers/clients/client.py +0 -0
  135. {verifiers-0.2.1.dev50 → verifiers-0.2.1.dev52}/verifiers/clients/nemorl_chat_completions_client.py +0 -0
  136. {verifiers-0.2.1.dev50 → verifiers-0.2.1.dev52}/verifiers/clients/openai_chat_completions_client.py +0 -0
  137. {verifiers-0.2.1.dev50 → verifiers-0.2.1.dev52}/verifiers/clients/openai_chat_completions_token_client.py +0 -0
  138. {verifiers-0.2.1.dev50 → verifiers-0.2.1.dev52}/verifiers/clients/openai_completions_client.py +0 -0
  139. {verifiers-0.2.1.dev50 → verifiers-0.2.1.dev52}/verifiers/clients/openai_responses_client.py +0 -0
  140. {verifiers-0.2.1.dev50 → verifiers-0.2.1.dev52}/verifiers/clients/renderer_client.py +0 -0
  141. {verifiers-0.2.1.dev50 → verifiers-0.2.1.dev52}/verifiers/decorators.py +0 -0
  142. {verifiers-0.2.1.dev50 → verifiers-0.2.1.dev52}/verifiers/envs/AGENTS.md +0 -0
  143. {verifiers-0.2.1.dev50 → verifiers-0.2.1.dev52}/verifiers/envs/__init__.py +0 -0
  144. {verifiers-0.2.1.dev50 → verifiers-0.2.1.dev52}/verifiers/envs/env_group.py +0 -0
  145. {verifiers-0.2.1.dev50 → verifiers-0.2.1.dev52}/verifiers/envs/environment.py +0 -0
  146. {verifiers-0.2.1.dev50 → verifiers-0.2.1.dev52}/verifiers/envs/experimental/README.md +0 -0
  147. {verifiers-0.2.1.dev50 → verifiers-0.2.1.dev52}/verifiers/envs/experimental/__init__.py +0 -0
  148. {verifiers-0.2.1.dev50 → verifiers-0.2.1.dev52}/verifiers/envs/experimental/cli_agent_env.py +0 -0
  149. {verifiers-0.2.1.dev50 → verifiers-0.2.1.dev52}/verifiers/envs/experimental/composable/README.md +0 -0
  150. {verifiers-0.2.1.dev50 → verifiers-0.2.1.dev52}/verifiers/envs/experimental/composable/__init__.py +0 -0
  151. {verifiers-0.2.1.dev50 → verifiers-0.2.1.dev52}/verifiers/envs/experimental/composable/_filter.py +0 -0
  152. {verifiers-0.2.1.dev50 → verifiers-0.2.1.dev52}/verifiers/envs/experimental/composable/composable_env.py +0 -0
  153. {verifiers-0.2.1.dev50 → verifiers-0.2.1.dev52}/verifiers/envs/experimental/composable/harness.py +0 -0
  154. {verifiers-0.2.1.dev50 → verifiers-0.2.1.dev52}/verifiers/envs/experimental/composable/harnesses/__init__.py +0 -0
  155. {verifiers-0.2.1.dev50 → verifiers-0.2.1.dev52}/verifiers/envs/experimental/composable/harnesses/mini_swe_agent.py +0 -0
  156. {verifiers-0.2.1.dev50 → verifiers-0.2.1.dev52}/verifiers/envs/experimental/composable/harnesses/opencode.py +0 -0
  157. {verifiers-0.2.1.dev50 → verifiers-0.2.1.dev52}/verifiers/envs/experimental/composable/harnesses/prompt.txt +0 -0
  158. {verifiers-0.2.1.dev50 → verifiers-0.2.1.dev52}/verifiers/envs/experimental/composable/harnesses/rlm.py +0 -0
  159. {verifiers-0.2.1.dev50 → verifiers-0.2.1.dev52}/verifiers/envs/experimental/composable/sandbox_debug_env.py +0 -0
  160. {verifiers-0.2.1.dev50 → verifiers-0.2.1.dev52}/verifiers/envs/experimental/composable/swe_debug_env.py +0 -0
  161. {verifiers-0.2.1.dev50 → verifiers-0.2.1.dev52}/verifiers/envs/experimental/composable/task.py +0 -0
  162. {verifiers-0.2.1.dev50 → verifiers-0.2.1.dev52}/verifiers/envs/experimental/composable/tasksets/__init__.py +0 -0
  163. {verifiers-0.2.1.dev50 → verifiers-0.2.1.dev52}/verifiers/envs/experimental/composable/tasksets/cp/__init__.py +0 -0
  164. {verifiers-0.2.1.dev50 → verifiers-0.2.1.dev52}/verifiers/envs/experimental/composable/tasksets/cp/cp_task.py +0 -0
  165. {verifiers-0.2.1.dev50 → verifiers-0.2.1.dev52}/verifiers/envs/experimental/composable/tasksets/cp/test_utils.py +0 -0
  166. {verifiers-0.2.1.dev50 → verifiers-0.2.1.dev52}/verifiers/envs/experimental/composable/tasksets/harbor/__init__.py +0 -0
  167. {verifiers-0.2.1.dev50 → verifiers-0.2.1.dev52}/verifiers/envs/experimental/composable/tasksets/harbor/cli_gym.py +0 -0
  168. {verifiers-0.2.1.dev50 → verifiers-0.2.1.dev52}/verifiers/envs/experimental/composable/tasksets/harbor/harbor.py +0 -0
  169. {verifiers-0.2.1.dev50 → verifiers-0.2.1.dev52}/verifiers/envs/experimental/composable/tasksets/harbor/terminal_lego.py +0 -0
  170. {verifiers-0.2.1.dev50 → verifiers-0.2.1.dev52}/verifiers/envs/experimental/composable/tasksets/math/__init__.py +0 -0
  171. {verifiers-0.2.1.dev50 → verifiers-0.2.1.dev52}/verifiers/envs/experimental/composable/tasksets/math/math_task.py +0 -0
  172. {verifiers-0.2.1.dev50 → verifiers-0.2.1.dev52}/verifiers/envs/experimental/composable/tasksets/swe/README.md +0 -0
  173. {verifiers-0.2.1.dev50 → verifiers-0.2.1.dev52}/verifiers/envs/experimental/composable/tasksets/swe/__init__.py +0 -0
  174. {verifiers-0.2.1.dev50 → verifiers-0.2.1.dev52}/verifiers/envs/experimental/composable/tasksets/swe/multi_swe/__init__.py +0 -0
  175. {verifiers-0.2.1.dev50 → verifiers-0.2.1.dev52}/verifiers/envs/experimental/composable/tasksets/swe/multi_swe/extract_fix_patch.sh +0 -0
  176. {verifiers-0.2.1.dev50 → verifiers-0.2.1.dev52}/verifiers/envs/experimental/composable/tasksets/swe/multi_swe/taskset.py +0 -0
  177. {verifiers-0.2.1.dev50 → verifiers-0.2.1.dev52}/verifiers/envs/experimental/composable/tasksets/swe/openswe/__init__.py +0 -0
  178. {verifiers-0.2.1.dev50 → verifiers-0.2.1.dev52}/verifiers/envs/experimental/composable/tasksets/swe/openswe/taskset.py +0 -0
  179. {verifiers-0.2.1.dev50 → verifiers-0.2.1.dev52}/verifiers/envs/experimental/composable/tasksets/swe/r2e_gym/__init__.py +0 -0
  180. {verifiers-0.2.1.dev50 → verifiers-0.2.1.dev52}/verifiers/envs/experimental/composable/tasksets/swe/r2e_gym/log_parser.py +0 -0
  181. {verifiers-0.2.1.dev50 → verifiers-0.2.1.dev52}/verifiers/envs/experimental/composable/tasksets/swe/r2e_gym/taskset.py +0 -0
  182. {verifiers-0.2.1.dev50 → verifiers-0.2.1.dev52}/verifiers/envs/experimental/composable/tasksets/swe/scale_swe/__init__.py +0 -0
  183. {verifiers-0.2.1.dev50 → verifiers-0.2.1.dev52}/verifiers/envs/experimental/composable/tasksets/swe/scale_swe/taskset.py +0 -0
  184. {verifiers-0.2.1.dev50 → verifiers-0.2.1.dev52}/verifiers/envs/experimental/composable/tasksets/swe/shared/__init__.py +0 -0
  185. {verifiers-0.2.1.dev50 → verifiers-0.2.1.dev52}/verifiers/envs/experimental/composable/tasksets/swe/shared/test_patch.py +0 -0
  186. {verifiers-0.2.1.dev50 → verifiers-0.2.1.dev52}/verifiers/envs/experimental/composable/tasksets/swe/swe_bench/__init__.py +0 -0
  187. {verifiers-0.2.1.dev50 → verifiers-0.2.1.dev52}/verifiers/envs/experimental/composable/tasksets/swe/swe_bench/taskset.py +0 -0
  188. {verifiers-0.2.1.dev50 → verifiers-0.2.1.dev52}/verifiers/envs/experimental/composable/tasksets/swe/swe_lego/__init__.py +0 -0
  189. {verifiers-0.2.1.dev50 → verifiers-0.2.1.dev52}/verifiers/envs/experimental/composable/tasksets/swe/swe_lego/taskset.py +0 -0
  190. {verifiers-0.2.1.dev50 → verifiers-0.2.1.dev52}/verifiers/envs/experimental/composable/tasksets/swe/swe_rebench_v2/__init__.py +0 -0
  191. {verifiers-0.2.1.dev50 → verifiers-0.2.1.dev52}/verifiers/envs/experimental/composable/tasksets/swe/swe_rebench_v2/log_parsers.py +0 -0
  192. {verifiers-0.2.1.dev50 → verifiers-0.2.1.dev52}/verifiers/envs/experimental/composable/tasksets/swe/swe_rebench_v2/taskset.py +0 -0
  193. {verifiers-0.2.1.dev50 → verifiers-0.2.1.dev52}/verifiers/envs/experimental/composable/tasksets/swe/swe_smith/__init__.py +0 -0
  194. {verifiers-0.2.1.dev50 → verifiers-0.2.1.dev52}/verifiers/envs/experimental/composable/tasksets/swe/swe_smith/taskset.py +0 -0
  195. {verifiers-0.2.1.dev50 → verifiers-0.2.1.dev52}/verifiers/envs/experimental/composable/tasksets/swe/swe_tasksets.py +0 -0
  196. {verifiers-0.2.1.dev50 → verifiers-0.2.1.dev52}/verifiers/envs/experimental/gym_env.py +0 -0
  197. {verifiers-0.2.1.dev50 → verifiers-0.2.1.dev52}/verifiers/envs/experimental/harbor_env/__init__.py +0 -0
  198. {verifiers-0.2.1.dev50 → verifiers-0.2.1.dev52}/verifiers/envs/experimental/harbor_env/env.py +0 -0
  199. {verifiers-0.2.1.dev50 → verifiers-0.2.1.dev52}/verifiers/envs/experimental/harbor_env/mcp.py +0 -0
  200. {verifiers-0.2.1.dev50 → verifiers-0.2.1.dev52}/verifiers/envs/experimental/mcp_env.py +0 -0
  201. {verifiers-0.2.1.dev50 → verifiers-0.2.1.dev52}/verifiers/envs/experimental/opencode_env.py +0 -0
  202. {verifiers-0.2.1.dev50 → verifiers-0.2.1.dev52}/verifiers/envs/experimental/opencode_qa_env.py +0 -0
  203. {verifiers-0.2.1.dev50 → verifiers-0.2.1.dev52}/verifiers/envs/experimental/opencode_rlm_env.py +0 -0
  204. {verifiers-0.2.1.dev50 → verifiers-0.2.1.dev52}/verifiers/envs/experimental/sandbox_mixin.py +0 -0
  205. {verifiers-0.2.1.dev50 → verifiers-0.2.1.dev52}/verifiers/envs/experimental/utils/__init__.py +0 -0
  206. {verifiers-0.2.1.dev50 → verifiers-0.2.1.dev52}/verifiers/envs/experimental/utils/file_locks.py +0 -0
  207. {verifiers-0.2.1.dev50 → verifiers-0.2.1.dev52}/verifiers/envs/experimental/utils/git_checkout_cache.py +0 -0
  208. {verifiers-0.2.1.dev50 → verifiers-0.2.1.dev52}/verifiers/envs/integrations/README.md +0 -0
  209. {verifiers-0.2.1.dev50 → verifiers-0.2.1.dev52}/verifiers/envs/integrations/__init__.py +0 -0
  210. {verifiers-0.2.1.dev50 → verifiers-0.2.1.dev52}/verifiers/envs/integrations/browser_env/README.md +0 -0
  211. {verifiers-0.2.1.dev50 → verifiers-0.2.1.dev52}/verifiers/envs/integrations/browser_env/__init__.py +0 -0
  212. {verifiers-0.2.1.dev50 → verifiers-0.2.1.dev52}/verifiers/envs/integrations/browser_env/browser_env.py +0 -0
  213. {verifiers-0.2.1.dev50 → verifiers-0.2.1.dev52}/verifiers/envs/integrations/browser_env/modes/__init__.py +0 -0
  214. {verifiers-0.2.1.dev50 → verifiers-0.2.1.dev52}/verifiers/envs/integrations/browser_env/modes/base.py +0 -0
  215. {verifiers-0.2.1.dev50 → verifiers-0.2.1.dev52}/verifiers/envs/integrations/browser_env/modes/cua_mode.py +0 -0
  216. {verifiers-0.2.1.dev50 → verifiers-0.2.1.dev52}/verifiers/envs/integrations/browser_env/modes/dom_mode.py +0 -0
  217. {verifiers-0.2.1.dev50 → verifiers-0.2.1.dev52}/verifiers/envs/integrations/openenv_env.py +0 -0
  218. {verifiers-0.2.1.dev50 → verifiers-0.2.1.dev52}/verifiers/envs/integrations/reasoninggym_env.py +0 -0
  219. {verifiers-0.2.1.dev50 → verifiers-0.2.1.dev52}/verifiers/envs/integrations/textarena_env.py +0 -0
  220. {verifiers-0.2.1.dev50 → verifiers-0.2.1.dev52}/verifiers/envs/multiturn_env.py +0 -0
  221. {verifiers-0.2.1.dev50 → verifiers-0.2.1.dev52}/verifiers/envs/python_env.py +0 -0
  222. {verifiers-0.2.1.dev50 → verifiers-0.2.1.dev52}/verifiers/envs/sandbox_env.py +0 -0
  223. {verifiers-0.2.1.dev50 → verifiers-0.2.1.dev52}/verifiers/envs/singleturn_env.py +0 -0
  224. {verifiers-0.2.1.dev50 → verifiers-0.2.1.dev52}/verifiers/envs/stateful_tool_env.py +0 -0
  225. {verifiers-0.2.1.dev50 → verifiers-0.2.1.dev52}/verifiers/envs/tool_env.py +0 -0
  226. {verifiers-0.2.1.dev50 → verifiers-0.2.1.dev52}/verifiers/errors.py +0 -0
  227. {verifiers-0.2.1.dev50 → verifiers-0.2.1.dev52}/verifiers/gepa/__init__.py +0 -0
  228. {verifiers-0.2.1.dev50 → verifiers-0.2.1.dev52}/verifiers/gepa/adapter.py +0 -0
  229. {verifiers-0.2.1.dev50 → verifiers-0.2.1.dev52}/verifiers/gepa/config.py +0 -0
  230. {verifiers-0.2.1.dev50 → verifiers-0.2.1.dev52}/verifiers/gepa/display.py +0 -0
  231. {verifiers-0.2.1.dev50 → verifiers-0.2.1.dev52}/verifiers/gepa/gepa_utils.py +0 -0
  232. {verifiers-0.2.1.dev50 → verifiers-0.2.1.dev52}/verifiers/parsers/__init__.py +0 -0
  233. {verifiers-0.2.1.dev50 → verifiers-0.2.1.dev52}/verifiers/parsers/maybe_think_parser.py +0 -0
  234. {verifiers-0.2.1.dev50 → verifiers-0.2.1.dev52}/verifiers/parsers/parser.py +0 -0
  235. {verifiers-0.2.1.dev50 → verifiers-0.2.1.dev52}/verifiers/parsers/think_parser.py +0 -0
  236. {verifiers-0.2.1.dev50 → verifiers-0.2.1.dev52}/verifiers/parsers/xml_parser.py +0 -0
  237. {verifiers-0.2.1.dev50 → verifiers-0.2.1.dev52}/verifiers/rubrics/__init__.py +0 -0
  238. {verifiers-0.2.1.dev50 → verifiers-0.2.1.dev52}/verifiers/rubrics/experimental/hybrid_math_rubric.py +0 -0
  239. {verifiers-0.2.1.dev50 → verifiers-0.2.1.dev52}/verifiers/rubrics/judge_rubric.py +0 -0
  240. {verifiers-0.2.1.dev50 → verifiers-0.2.1.dev52}/verifiers/rubrics/math_rubric.py +0 -0
  241. {verifiers-0.2.1.dev50 → verifiers-0.2.1.dev52}/verifiers/rubrics/rubric.py +0 -0
  242. {verifiers-0.2.1.dev50 → verifiers-0.2.1.dev52}/verifiers/rubrics/rubric_group.py +0 -0
  243. {verifiers-0.2.1.dev50 → verifiers-0.2.1.dev52}/verifiers/scripts/__init__.py +0 -0
  244. {verifiers-0.2.1.dev50 → verifiers-0.2.1.dev52}/verifiers/scripts/build.py +0 -0
  245. {verifiers-0.2.1.dev50 → verifiers-0.2.1.dev52}/verifiers/scripts/eval.py +0 -0
  246. {verifiers-0.2.1.dev50 → verifiers-0.2.1.dev52}/verifiers/scripts/gepa.py +0 -0
  247. {verifiers-0.2.1.dev50 → verifiers-0.2.1.dev52}/verifiers/scripts/init.py +0 -0
  248. {verifiers-0.2.1.dev50 → verifiers-0.2.1.dev52}/verifiers/scripts/install.py +0 -0
  249. {verifiers-0.2.1.dev50 → verifiers-0.2.1.dev52}/verifiers/scripts/setup.py +0 -0
  250. {verifiers-0.2.1.dev50 → verifiers-0.2.1.dev52}/verifiers/scripts/tui.py +0 -0
  251. {verifiers-0.2.1.dev50 → verifiers-0.2.1.dev52}/verifiers/serve/__init__.py +0 -0
  252. {verifiers-0.2.1.dev50 → verifiers-0.2.1.dev52}/verifiers/serve/client/env_client.py +0 -0
  253. {verifiers-0.2.1.dev50 → verifiers-0.2.1.dev52}/verifiers/serve/client/zmq_env_client.py +0 -0
  254. {verifiers-0.2.1.dev50 → verifiers-0.2.1.dev52}/verifiers/serve/server/__init__.py +0 -0
  255. {verifiers-0.2.1.dev50 → verifiers-0.2.1.dev52}/verifiers/serve/server/env_router.py +0 -0
  256. {verifiers-0.2.1.dev50 → verifiers-0.2.1.dev52}/verifiers/serve/server/env_server.py +0 -0
  257. {verifiers-0.2.1.dev50 → verifiers-0.2.1.dev52}/verifiers/serve/server/env_worker.py +0 -0
  258. {verifiers-0.2.1.dev50 → verifiers-0.2.1.dev52}/verifiers/serve/server/zmq_env_server.py +0 -0
  259. {verifiers-0.2.1.dev50 → verifiers-0.2.1.dev52}/verifiers/serve/types.py +0 -0
  260. {verifiers-0.2.1.dev50 → verifiers-0.2.1.dev52}/verifiers/types.py +0 -0
  261. {verifiers-0.2.1.dev50 → verifiers-0.2.1.dev52}/verifiers/utils/__init__.py +0 -0
  262. {verifiers-0.2.1.dev50 → verifiers-0.2.1.dev52}/verifiers/utils/async_utils.py +0 -0
  263. {verifiers-0.2.1.dev50 → verifiers-0.2.1.dev52}/verifiers/utils/client_utils.py +0 -0
  264. {verifiers-0.2.1.dev50 → verifiers-0.2.1.dev52}/verifiers/utils/config_utils.py +0 -0
  265. {verifiers-0.2.1.dev50 → verifiers-0.2.1.dev52}/verifiers/utils/data_utils.py +0 -0
  266. {verifiers-0.2.1.dev50 → verifiers-0.2.1.dev52}/verifiers/utils/display_utils.py +0 -0
  267. {verifiers-0.2.1.dev50 → verifiers-0.2.1.dev52}/verifiers/utils/env_config_utils.py +0 -0
  268. {verifiers-0.2.1.dev50 → verifiers-0.2.1.dev52}/verifiers/utils/env_utils.py +0 -0
  269. {verifiers-0.2.1.dev50 → verifiers-0.2.1.dev52}/verifiers/utils/error_utils.py +0 -0
  270. {verifiers-0.2.1.dev50 → verifiers-0.2.1.dev52}/verifiers/utils/eval_display.py +0 -0
  271. {verifiers-0.2.1.dev50 → verifiers-0.2.1.dev52}/verifiers/utils/eval_utils.py +0 -0
  272. {verifiers-0.2.1.dev50 → verifiers-0.2.1.dev52}/verifiers/utils/heartbeat.py +0 -0
  273. {verifiers-0.2.1.dev50 → verifiers-0.2.1.dev52}/verifiers/utils/import_utils.py +0 -0
  274. {verifiers-0.2.1.dev50 → verifiers-0.2.1.dev52}/verifiers/utils/install_utils.py +0 -0
  275. {verifiers-0.2.1.dev50 → verifiers-0.2.1.dev52}/verifiers/utils/interception_utils.py +0 -0
  276. {verifiers-0.2.1.dev50 → verifiers-0.2.1.dev52}/verifiers/utils/logging_utils.py +0 -0
  277. {verifiers-0.2.1.dev50 → verifiers-0.2.1.dev52}/verifiers/utils/message_utils.py +0 -0
  278. {verifiers-0.2.1.dev50 → verifiers-0.2.1.dev52}/verifiers/utils/metric_utils.py +0 -0
  279. {verifiers-0.2.1.dev50 → verifiers-0.2.1.dev52}/verifiers/utils/path_utils.py +0 -0
  280. {verifiers-0.2.1.dev50 → verifiers-0.2.1.dev52}/verifiers/utils/pricing_utils.py +0 -0
  281. {verifiers-0.2.1.dev50 → verifiers-0.2.1.dev52}/verifiers/utils/process_utils.py +0 -0
  282. {verifiers-0.2.1.dev50 → verifiers-0.2.1.dev52}/verifiers/utils/response_utils.py +0 -0
  283. {verifiers-0.2.1.dev50 → verifiers-0.2.1.dev52}/verifiers/utils/save_utils.py +0 -0
  284. {verifiers-0.2.1.dev50 → verifiers-0.2.1.dev52}/verifiers/utils/serve_utils.py +0 -0
  285. {verifiers-0.2.1.dev50 → verifiers-0.2.1.dev52}/verifiers/utils/thread_utils.py +0 -0
  286. {verifiers-0.2.1.dev50 → verifiers-0.2.1.dev52}/verifiers/utils/threaded_sandbox_client.py +0 -0
  287. {verifiers-0.2.1.dev50 → verifiers-0.2.1.dev52}/verifiers/utils/tool_utils.py +0 -0
  288. {verifiers-0.2.1.dev50 → verifiers-0.2.1.dev52}/verifiers/utils/usage_utils.py +0 -0
  289. {verifiers-0.2.1.dev50 → verifiers-0.2.1.dev52}/verifiers/utils/version_utils.py +0 -0
  290. {verifiers-0.2.1.dev50 → verifiers-0.2.1.dev52}/verifiers/v1/__init__.py +0 -0
  291. {verifiers-0.2.1.dev50 → verifiers-0.2.1.dev52}/verifiers/v1/cli/__init__.py +0 -0
  292. {verifiers-0.2.1.dev50 → verifiers-0.2.1.dev52}/verifiers/v1/cli/dashboard/__init__.py +0 -0
  293. {verifiers-0.2.1.dev50 → verifiers-0.2.1.dev52}/verifiers/v1/cli/dashboard/base.py +0 -0
  294. {verifiers-0.2.1.dev50 → verifiers-0.2.1.dev52}/verifiers/v1/cli/dashboard/eval.py +0 -0
  295. {verifiers-0.2.1.dev50 → verifiers-0.2.1.dev52}/verifiers/v1/cli/dashboard/replay.py +0 -0
  296. {verifiers-0.2.1.dev50 → verifiers-0.2.1.dev52}/verifiers/v1/cli/dashboard/validate.py +0 -0
  297. {verifiers-0.2.1.dev50 → verifiers-0.2.1.dev52}/verifiers/v1/cli/debug.py +0 -0
  298. {verifiers-0.2.1.dev50 → verifiers-0.2.1.dev52}/verifiers/v1/cli/eval/__init__.py +0 -0
  299. {verifiers-0.2.1.dev50 → verifiers-0.2.1.dev52}/verifiers/v1/cli/eval/main.py +0 -0
  300. {verifiers-0.2.1.dev50 → verifiers-0.2.1.dev52}/verifiers/v1/cli/eval/resume.py +0 -0
  301. {verifiers-0.2.1.dev50 → verifiers-0.2.1.dev52}/verifiers/v1/cli/eval/runner.py +0 -0
  302. {verifiers-0.2.1.dev50 → verifiers-0.2.1.dev52}/verifiers/v1/cli/gepa.py +0 -0
  303. {verifiers-0.2.1.dev50 → verifiers-0.2.1.dev52}/verifiers/v1/cli/init.py +0 -0
  304. {verifiers-0.2.1.dev50 → verifiers-0.2.1.dev52}/verifiers/v1/cli/output.py +0 -0
  305. {verifiers-0.2.1.dev50 → verifiers-0.2.1.dev52}/verifiers/v1/cli/replay.py +0 -0
  306. {verifiers-0.2.1.dev50 → verifiers-0.2.1.dev52}/verifiers/v1/cli/resolve.py +0 -0
  307. {verifiers-0.2.1.dev50 → verifiers-0.2.1.dev52}/verifiers/v1/cli/serve.py +0 -0
  308. {verifiers-0.2.1.dev50 → verifiers-0.2.1.dev52}/verifiers/v1/cli/validate.py +0 -0
  309. {verifiers-0.2.1.dev50 → verifiers-0.2.1.dev52}/verifiers/v1/clients/__init__.py +0 -0
  310. {verifiers-0.2.1.dev50 → verifiers-0.2.1.dev52}/verifiers/v1/clients/client.py +0 -0
  311. {verifiers-0.2.1.dev50 → verifiers-0.2.1.dev52}/verifiers/v1/clients/config.py +0 -0
  312. {verifiers-0.2.1.dev50 → verifiers-0.2.1.dev52}/verifiers/v1/clients/eval.py +0 -0
  313. {verifiers-0.2.1.dev50 → verifiers-0.2.1.dev52}/verifiers/v1/clients/train.py +0 -0
  314. {verifiers-0.2.1.dev50 → verifiers-0.2.1.dev52}/verifiers/v1/configs/__init__.py +0 -0
  315. {verifiers-0.2.1.dev50 → verifiers-0.2.1.dev52}/verifiers/v1/configs/debug.py +0 -0
  316. {verifiers-0.2.1.dev50 → verifiers-0.2.1.dev52}/verifiers/v1/configs/eval.py +0 -0
  317. {verifiers-0.2.1.dev50 → verifiers-0.2.1.dev52}/verifiers/v1/configs/init.py +0 -0
  318. {verifiers-0.2.1.dev50 → verifiers-0.2.1.dev52}/verifiers/v1/configs/replay.py +0 -0
  319. {verifiers-0.2.1.dev50 → verifiers-0.2.1.dev52}/verifiers/v1/configs/serve.py +0 -0
  320. {verifiers-0.2.1.dev50 → verifiers-0.2.1.dev52}/verifiers/v1/configs/validate.py +0 -0
  321. {verifiers-0.2.1.dev50 → verifiers-0.2.1.dev52}/verifiers/v1/decorators.py +0 -0
  322. {verifiers-0.2.1.dev50 → verifiers-0.2.1.dev52}/verifiers/v1/dialects/__init__.py +0 -0
  323. {verifiers-0.2.1.dev50 → verifiers-0.2.1.dev52}/verifiers/v1/dialects/anthropic.py +0 -0
  324. {verifiers-0.2.1.dev50 → verifiers-0.2.1.dev52}/verifiers/v1/dialects/base.py +0 -0
  325. {verifiers-0.2.1.dev50 → verifiers-0.2.1.dev52}/verifiers/v1/dialects/chat.py +0 -0
  326. {verifiers-0.2.1.dev50 → verifiers-0.2.1.dev52}/verifiers/v1/dialects/responses.py +0 -0
  327. {verifiers-0.2.1.dev50 → verifiers-0.2.1.dev52}/verifiers/v1/env.py +0 -0
  328. {verifiers-0.2.1.dev50 → verifiers-0.2.1.dev52}/verifiers/v1/episode.py +0 -0
  329. {verifiers-0.2.1.dev50 → verifiers-0.2.1.dev52}/verifiers/v1/errors.py +0 -0
  330. {verifiers-0.2.1.dev50 → verifiers-0.2.1.dev52}/verifiers/v1/gepa/__init__.py +0 -0
  331. {verifiers-0.2.1.dev50 → verifiers-0.2.1.dev52}/verifiers/v1/gepa/adapter.py +0 -0
  332. {verifiers-0.2.1.dev50 → verifiers-0.2.1.dev52}/verifiers/v1/gepa/config.py +0 -0
  333. {verifiers-0.2.1.dev50 → verifiers-0.2.1.dev52}/verifiers/v1/gepa/dataset.py +0 -0
  334. {verifiers-0.2.1.dev50 → verifiers-0.2.1.dev52}/verifiers/v1/gepa/reflection.py +0 -0
  335. {verifiers-0.2.1.dev50 → verifiers-0.2.1.dev52}/verifiers/v1/gepa/runner.py +0 -0
  336. {verifiers-0.2.1.dev50 → verifiers-0.2.1.dev52}/verifiers/v1/graph.py +0 -0
  337. {verifiers-0.2.1.dev50 → verifiers-0.2.1.dev52}/verifiers/v1/harness.py +0 -0
  338. {verifiers-0.2.1.dev50 → verifiers-0.2.1.dev52}/verifiers/v1/harnesses/__init__.py +0 -0
  339. {verifiers-0.2.1.dev50 → verifiers-0.2.1.dev52}/verifiers/v1/harnesses/claude_code/__init__.py +0 -0
  340. {verifiers-0.2.1.dev50 → verifiers-0.2.1.dev52}/verifiers/v1/harnesses/claude_code/harness.py +0 -0
  341. {verifiers-0.2.1.dev50 → verifiers-0.2.1.dev52}/verifiers/v1/harnesses/codex/__init__.py +0 -0
  342. {verifiers-0.2.1.dev50 → verifiers-0.2.1.dev52}/verifiers/v1/harnesses/codex/harness.py +0 -0
  343. {verifiers-0.2.1.dev50 → verifiers-0.2.1.dev52}/verifiers/v1/harnesses/default/__init__.py +0 -0
  344. {verifiers-0.2.1.dev50 → verifiers-0.2.1.dev52}/verifiers/v1/harnesses/default/harness.py +0 -0
  345. {verifiers-0.2.1.dev50 → verifiers-0.2.1.dev52}/verifiers/v1/harnesses/default/program.py +0 -0
  346. {verifiers-0.2.1.dev50 → verifiers-0.2.1.dev52}/verifiers/v1/harnesses/kimi_code/__init__.py +0 -0
  347. {verifiers-0.2.1.dev50 → verifiers-0.2.1.dev52}/verifiers/v1/harnesses/kimi_code/harness.py +0 -0
  348. {verifiers-0.2.1.dev50 → verifiers-0.2.1.dev52}/verifiers/v1/harnesses/mini_swe_agent/__init__.py +0 -0
  349. {verifiers-0.2.1.dev50 → verifiers-0.2.1.dev52}/verifiers/v1/harnesses/mini_swe_agent/harness.py +0 -0
  350. {verifiers-0.2.1.dev50 → verifiers-0.2.1.dev52}/verifiers/v1/harnesses/mini_swe_agent/program.py +0 -0
  351. {verifiers-0.2.1.dev50 → verifiers-0.2.1.dev52}/verifiers/v1/harnesses/null/__init__.py +0 -0
  352. {verifiers-0.2.1.dev50 → verifiers-0.2.1.dev52}/verifiers/v1/harnesses/null/harness.py +0 -0
  353. {verifiers-0.2.1.dev50 → verifiers-0.2.1.dev52}/verifiers/v1/harnesses/null/program.py +0 -0
  354. {verifiers-0.2.1.dev50 → verifiers-0.2.1.dev52}/verifiers/v1/harnesses/pi/__init__.py +0 -0
  355. {verifiers-0.2.1.dev50 → verifiers-0.2.1.dev52}/verifiers/v1/harnesses/pi/harness.py +0 -0
  356. {verifiers-0.2.1.dev50 → verifiers-0.2.1.dev52}/verifiers/v1/harnesses/rlm/__init__.py +0 -0
  357. {verifiers-0.2.1.dev50 → verifiers-0.2.1.dev52}/verifiers/v1/harnesses/rlm/harness.py +0 -0
  358. {verifiers-0.2.1.dev50 → verifiers-0.2.1.dev52}/verifiers/v1/harnesses/terminus_2/__init__.py +0 -0
  359. {verifiers-0.2.1.dev50 → verifiers-0.2.1.dev52}/verifiers/v1/harnesses/terminus_2/harness.py +0 -0
  360. {verifiers-0.2.1.dev50 → verifiers-0.2.1.dev52}/verifiers/v1/harnesses/terminus_2/program.py +0 -0
  361. {verifiers-0.2.1.dev50 → verifiers-0.2.1.dev52}/verifiers/v1/interception/__init__.py +0 -0
  362. {verifiers-0.2.1.dev50 → verifiers-0.2.1.dev52}/verifiers/v1/interception/base.py +0 -0
  363. {verifiers-0.2.1.dev50 → verifiers-0.2.1.dev52}/verifiers/v1/interception/pool.py +0 -0
  364. {verifiers-0.2.1.dev50 → verifiers-0.2.1.dev52}/verifiers/v1/interception/server.py +0 -0
  365. {verifiers-0.2.1.dev50 → verifiers-0.2.1.dev52}/verifiers/v1/interception/tunnel/__init__.py +0 -0
  366. {verifiers-0.2.1.dev50 → verifiers-0.2.1.dev52}/verifiers/v1/interception/tunnel/base.py +0 -0
  367. {verifiers-0.2.1.dev50 → verifiers-0.2.1.dev52}/verifiers/v1/interception/tunnel/custom.py +0 -0
  368. {verifiers-0.2.1.dev50 → verifiers-0.2.1.dev52}/verifiers/v1/interception/tunnel/prime.py +0 -0
  369. {verifiers-0.2.1.dev50 → verifiers-0.2.1.dev52}/verifiers/v1/judge.py +0 -0
  370. {verifiers-0.2.1.dev50 → verifiers-0.2.1.dev52}/verifiers/v1/judges/__init__.py +0 -0
  371. {verifiers-0.2.1.dev50 → verifiers-0.2.1.dev52}/verifiers/v1/judges/reference.py +0 -0
  372. {verifiers-0.2.1.dev50 → verifiers-0.2.1.dev52}/verifiers/v1/judges/reference.txt +0 -0
  373. {verifiers-0.2.1.dev50 → verifiers-0.2.1.dev52}/verifiers/v1/judges/rubric.py +0 -0
  374. {verifiers-0.2.1.dev50 → verifiers-0.2.1.dev52}/verifiers/v1/judges/rubric.txt +0 -0
  375. {verifiers-0.2.1.dev50 → verifiers-0.2.1.dev52}/verifiers/v1/legacy.py +0 -0
  376. {verifiers-0.2.1.dev50 → verifiers-0.2.1.dev52}/verifiers/v1/loaders.py +0 -0
  377. {verifiers-0.2.1.dev50 → verifiers-0.2.1.dev52}/verifiers/v1/mcp/__init__.py +0 -0
  378. {verifiers-0.2.1.dev50 → verifiers-0.2.1.dev52}/verifiers/v1/mcp/launch.py +0 -0
  379. {verifiers-0.2.1.dev50 → verifiers-0.2.1.dev52}/verifiers/v1/mcp/server.py +0 -0
  380. {verifiers-0.2.1.dev50 → verifiers-0.2.1.dev52}/verifiers/v1/mcp/toolset.py +0 -0
  381. {verifiers-0.2.1.dev50 → verifiers-0.2.1.dev52}/verifiers/v1/mcp/user.py +0 -0
  382. {verifiers-0.2.1.dev50 → verifiers-0.2.1.dev52}/verifiers/v1/push.py +0 -0
  383. {verifiers-0.2.1.dev50 → verifiers-0.2.1.dev52}/verifiers/v1/retries.py +0 -0
  384. {verifiers-0.2.1.dev50 → verifiers-0.2.1.dev52}/verifiers/v1/rollout.py +0 -0
  385. {verifiers-0.2.1.dev50 → verifiers-0.2.1.dev52}/verifiers/v1/runtimes/__init__.py +0 -0
  386. {verifiers-0.2.1.dev50 → verifiers-0.2.1.dev52}/verifiers/v1/runtimes/base.py +0 -0
  387. {verifiers-0.2.1.dev50 → verifiers-0.2.1.dev52}/verifiers/v1/runtimes/docker.py +0 -0
  388. {verifiers-0.2.1.dev50 → verifiers-0.2.1.dev52}/verifiers/v1/runtimes/limiters.py +0 -0
  389. {verifiers-0.2.1.dev50 → verifiers-0.2.1.dev52}/verifiers/v1/runtimes/modal.py +0 -0
  390. {verifiers-0.2.1.dev50 → verifiers-0.2.1.dev52}/verifiers/v1/runtimes/prime.py +0 -0
  391. {verifiers-0.2.1.dev50 → verifiers-0.2.1.dev52}/verifiers/v1/runtimes/subprocess.py +0 -0
  392. {verifiers-0.2.1.dev50 → verifiers-0.2.1.dev52}/verifiers/v1/scoring.py +0 -0
  393. {verifiers-0.2.1.dev50 → verifiers-0.2.1.dev52}/verifiers/v1/serve/__init__.py +0 -0
  394. {verifiers-0.2.1.dev50 → verifiers-0.2.1.dev52}/verifiers/v1/serve/client.py +0 -0
  395. {verifiers-0.2.1.dev50 → verifiers-0.2.1.dev52}/verifiers/v1/serve/pool.py +0 -0
  396. {verifiers-0.2.1.dev50 → verifiers-0.2.1.dev52}/verifiers/v1/serve/server.py +0 -0
  397. {verifiers-0.2.1.dev50 → verifiers-0.2.1.dev52}/verifiers/v1/serve/types.py +0 -0
  398. {verifiers-0.2.1.dev50 → verifiers-0.2.1.dev52}/verifiers/v1/session.py +0 -0
  399. {verifiers-0.2.1.dev50 → verifiers-0.2.1.dev52}/verifiers/v1/state.py +0 -0
  400. {verifiers-0.2.1.dev50 → verifiers-0.2.1.dev52}/verifiers/v1/task.py +0 -0
  401. {verifiers-0.2.1.dev50 → verifiers-0.2.1.dev52}/verifiers/v1/taskset.py +0 -0
  402. {verifiers-0.2.1.dev50 → verifiers-0.2.1.dev52}/verifiers/v1/tasksets/__init__.py +0 -0
  403. {verifiers-0.2.1.dev50 → verifiers-0.2.1.dev52}/verifiers/v1/tasksets/harbor/__init__.py +0 -0
  404. {verifiers-0.2.1.dev50 → verifiers-0.2.1.dev52}/verifiers/v1/tasksets/harbor/taskset.py +0 -0
  405. {verifiers-0.2.1.dev50 → verifiers-0.2.1.dev52}/verifiers/v1/tasksets/lean/__init__.py +0 -0
  406. {verifiers-0.2.1.dev50 → verifiers-0.2.1.dev52}/verifiers/v1/tasksets/lean/scoring.py +0 -0
  407. {verifiers-0.2.1.dev50 → verifiers-0.2.1.dev52}/verifiers/v1/tasksets/lean/taskset.py +0 -0
  408. {verifiers-0.2.1.dev50 → verifiers-0.2.1.dev52}/verifiers/v1/tasksets/textarena/__init__.py +0 -0
  409. {verifiers-0.2.1.dev50 → verifiers-0.2.1.dev52}/verifiers/v1/tasksets/textarena/taskset.py +0 -0
  410. {verifiers-0.2.1.dev50 → verifiers-0.2.1.dev52}/verifiers/v1/trace.py +0 -0
  411. {verifiers-0.2.1.dev50 → verifiers-0.2.1.dev52}/verifiers/v1/types.py +0 -0
  412. {verifiers-0.2.1.dev50 → verifiers-0.2.1.dev52}/verifiers/v1/utils/__init__.py +0 -0
  413. {verifiers-0.2.1.dev50 → verifiers-0.2.1.dev52}/verifiers/v1/utils/aio.py +0 -0
  414. {verifiers-0.2.1.dev50 → verifiers-0.2.1.dev52}/verifiers/v1/utils/format.py +0 -0
  415. {verifiers-0.2.1.dev50 → verifiers-0.2.1.dev52}/verifiers/v1/utils/generic.py +0 -0
  416. {verifiers-0.2.1.dev50 → verifiers-0.2.1.dev52}/verifiers/v1/utils/image.py +0 -0
  417. {verifiers-0.2.1.dev50 → verifiers-0.2.1.dev52}/verifiers/v1/utils/install.py +0 -0
  418. {verifiers-0.2.1.dev50 → verifiers-0.2.1.dev52}/verifiers/v1/utils/interrupt.py +0 -0
  419. {verifiers-0.2.1.dev50 → verifiers-0.2.1.dev52}/verifiers/v1/utils/logging.py +0 -0
  420. {verifiers-0.2.1.dev50 → verifiers-0.2.1.dev52}/verifiers/v1/utils/memory.py +0 -0
  421. {verifiers-0.2.1.dev50 → verifiers-0.2.1.dev52}/verifiers/v1/utils/sampling.py +0 -0
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: verifiers
3
- Version: 0.2.1.dev50
3
+ Version: 0.2.1.dev52
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
@@ -1,42 +0,0 @@
1
- # Search Tasksets
2
-
3
- Composable search/research tasksets for agents that solve live information-seeking tasks in a sandbox.
4
-
5
- The search family is intentionally backend-oriented, mirroring the SWE taskset pattern while keeping the task contract research-centric: each task expects a single final answer rather than a code patch. Agents may use web/search tools, browser helpers, or other sandbox resources provided by the paired environment.
6
-
7
- ## Backends
8
-
9
- | Backend | Source | Default dataset | Status |
10
- |---|---|---|---|
11
- | `openseeker` | [PolarSeeker/OpenSeeker](https://github.com/PolarSeeker/OpenSeeker) | [`PolarSeeker/OpenSeeker-v1-Data`](https://huggingface.co/datasets/PolarSeeker/OpenSeeker-v1-Data) | Binary semantic answer judge |
12
- | `quest` | [OSU-NLP-Group/QUEST](https://github.com/OSU-NLP-Group/QUEST) | [`osunlp/QUEST-RL-Data`](https://huggingface.co/datasets/osunlp/QUEST-RL-Data) | Objective tasks supported |
13
- | `redsearcher` | [RedSearchAgent/REDSearcher](https://github.com/RedSearchAgent/REDSearcher) | [`Zchu/REDSearcher_RL_1K`](https://huggingface.co/datasets/Zchu/REDSearcher_RL_1K) | Text RL query set supported |
14
-
15
- ## Usage
16
-
17
- ```python
18
- from verifiers.envs.experimental.composable.tasksets.search import make_search_taskset
19
-
20
- taskset = make_search_taskset(backend="openseeker")
21
- taskset = make_search_taskset(backend="quest", category="objective")
22
- redsearcher = make_search_taskset(
23
- backend="redsearcher",
24
- filter_fn="lambda x: x['info']['difficulty'] == 'easy'",
25
- )
26
- ```
27
-
28
- `make_search_taskset()` dispatches by backend name. Unknown backends raise `ValueError` with the available backend list.
29
-
30
- ## Output Contract
31
-
32
- Search tasksets should define their own output contract. The `quest`, `openseeker`, and `redsearcher` backends expect the agent to write one final researched response to `/task/answer.txt`, including supporting URLs/citations when available. Scratch reasoning, tool traces, and logs should not be written as the final answer.
33
-
34
- ## Error Handling
35
-
36
- Search tasksets should use the framework error taxonomy for infrastructure failures:
37
-
38
- - `vf.SandboxError` for sandbox setup, command, or lifecycle failures.
39
- - `vf.ModelError` for judge/model provider failures.
40
- - `vf.InfraError` for dataset, evaluator, or external runtime failures.
41
-
42
- Incorrect answers should not set `state["error"]`; they should score normally, often as `0.0`.
@@ -1,15 +0,0 @@
1
- """Composable search/research tasksets."""
2
-
3
- from .search_tasksets import (
4
- make_openseeker_taskset,
5
- make_quest_taskset,
6
- make_redsearcher_taskset,
7
- make_search_taskset,
8
- )
9
-
10
- __all__ = [
11
- "make_openseeker_taskset",
12
- "make_quest_taskset",
13
- "make_redsearcher_taskset",
14
- "make_search_taskset",
15
- ]
@@ -1,46 +0,0 @@
1
- # OpenSeeker Search Taskset
2
-
3
- Composable search taskset for [`PolarSeeker/OpenSeeker-v1-Data`](https://huggingface.co/datasets/PolarSeeker/OpenSeeker-v1-Data), the OpenSeeker v1 release associated with arXiv `2603.15594`.
4
-
5
- OpenSeeker v1 data contains synthesized deep-search QA pairs plus trajectories generated with `search` and `visit` tools. The public OpenSeeker evaluator scores only the final answer: it sends the question, gold answer, and model response to an LLM judge and expects `A` for correct or `B` for incorrect. This backend preserves that binary semantic answer-judge contract.
6
-
7
- By default, the taskset uses the full dataset. Use the shared `filter_fn`
8
- argument for row subsets such as source trajectory quality or tool-call count.
9
- The `trajectory_correctness` metadata describes the stored OpenSeeker source
10
- trajectory, not the validity of the question or gold answer.
11
-
12
- ## Usage
13
-
14
- ```python
15
- from verifiers.envs.experimental.composable.tasksets.search import make_search_taskset
16
-
17
- taskset = make_search_taskset(backend="openseeker")
18
-
19
- correct_source_trajectories = make_search_taskset(
20
- backend="openseeker",
21
- filter_fn="lambda x: x['info']['trajectory_correctness'] == 'Correct'",
22
- )
23
-
24
- shorter_source_trajectories = make_search_taskset(
25
- backend="openseeker",
26
- filter_fn="lambda x: (x['info']['number_of_tool_calls'] or 0) <= 20",
27
- )
28
- ```
29
-
30
- ## Arguments
31
-
32
- | Argument | Default | Description |
33
- |---|---:|---|
34
- | `dataset_name` | `PolarSeeker/OpenSeeker-v1-Data` | Hugging Face dataset name. |
35
- | `split` | `train` | Dataset split. |
36
- | `filter_fn` | `None` | Optional composable taskset filter over normalized rows. |
37
- | `include_trajectory` | `False` | Include the large source trajectory in task metadata. |
38
- | `answer_file` | `/task/answer.txt` | Final answer path in the sandbox. |
39
- | `judge_model` | `openai/gpt-5.4-mini` | OpenAI-compatible model used for binary answer judging. |
40
- | `judge_base_url` | `https://api.pinference.ai/api/v1` | Judge API base URL. |
41
- | `judge_api_key_var` | `PRIME_API_KEY` | Env var containing the judge API key. |
42
- | `judge_sampling_args` | `None` | Extra sampling args for judge calls. |
43
-
44
- ## Output Contract
45
-
46
- Agents should write one final answer to `/task/answer.txt`. The answer should directly satisfy the question and may include supporting URLs/citations. The judge ignores citation verification and evaluates whether the final response semantically contains the gold answer without contradictions.
@@ -1,5 +0,0 @@
1
- """OpenSeeker search taskset."""
2
-
3
- from .taskset import OpenSeekerRubric, OpenSeekerTaskSet
4
-
5
- __all__ = ["OpenSeekerRubric", "OpenSeekerTaskSet"]
@@ -1,564 +0,0 @@
1
- """OpenSeeker composable search taskset.
2
-
3
- This ports PolarSeeker/OpenSeeker-v1-Data into the composable search taskset
4
- family. OpenSeeker's public evaluator scores final answer semantics against a
5
- gold answer with a binary LLM judge, so this backend preserves that contract
6
- rather than introducing QUEST-style URL-backed verification.
7
- """
8
-
9
- import asyncio
10
- import logging
11
- import math
12
- import os
13
- import re
14
- from typing import Any, NoReturn
15
-
16
- import verifiers as vf
17
- from datasets import Dataset, load_dataset
18
- from openai import (
19
- APIConnectionError,
20
- APIResponseValidationError,
21
- APITimeoutError,
22
- APIStatusError,
23
- AsyncOpenAI,
24
- AuthenticationError,
25
- BadRequestError,
26
- ConflictError,
27
- ContentFilterFinishReasonError,
28
- InternalServerError,
29
- LengthFinishReasonError,
30
- NotFoundError,
31
- PermissionDeniedError,
32
- RateLimitError,
33
- UnprocessableEntityError,
34
- )
35
- from verifiers.envs.experimental.composable import SandboxSpec, SandboxTaskSet
36
- from verifiers.types import ClientConfig
37
- from verifiers.utils.client_utils import setup_openai_client
38
-
39
- logger = logging.getLogger(__name__)
40
-
41
- DEFAULT_DATASET_NAME = "PolarSeeker/OpenSeeker-v1-Data"
42
- DEFAULT_SPLIT = "train"
43
- DEFAULT_ANSWER_FILE = "/task/answer.txt"
44
- DEFAULT_WORKDIR = "/workspace"
45
- DEFAULT_JUDGE_BASE_URL = "https://api.pinference.ai/api/v1"
46
- DEFAULT_JUDGE_API_KEY_VAR = "PRIME_API_KEY"
47
- DEFAULT_JUDGE_MODEL = "openai/gpt-5.4-mini"
48
- DEFAULT_SANDBOX_IMAGE = "python:3.11-slim"
49
-
50
- JUDGE_PROMPT_BC_EN = """
51
- Based on the given question, standard answer, and model-predicted answer, evaluate whether the model's response is correct. Your task is to classify the result as: [CORRECT] or [INCORRECT].
52
-
53
- First, we'll list examples for each category, then you'll evaluate a new question's predicted answer.
54
- Here are examples of [CORRECT] responses:
55
- ```
56
- Question: What are the names of Barack Obama's children?
57
- Standard Answer: Malia Obama and Sasha Obama
58
- Model Prediction 1: Malia Obama and Sasha Obama
59
- Model Prediction 2: Malia and Sasha
60
- Model Prediction 3: Most would say Malia and Sasha, but I'm not sure, I should verify
61
- Model Prediction 4: Barack Obama has two daughters, Malia Ann and Natasha Marian, commonly known as Malia Obama and Sasha Obama.
62
- ```
63
- These responses are all [CORRECT] because they:
64
- - Fully include the important information from the standard answer.
65
- - Don't contain any information that contradicts the standard answer.
66
- - Focus only on semantic content; language, capitalization, punctuation, grammar, and order aren't important.
67
- - Vague statements or guesses are acceptable as long as they include the standard answer and don't contain incorrect information or contradictions.
68
-
69
- Here are examples of [INCORRECT] responses:
70
- ```
71
- Question: What are the names of Barack Obama's children?
72
- Standard Answer: Malia Obama and Sasha Obama
73
- Model Prediction 1: Malia
74
- Model Prediction 2: Malia, Sasha and Susan or Sasha Obama or Malia Obama, or Natasha Marian, or Einstein
75
- Model Prediction 3: While I don't know their exact names, I can tell you Barack Obama has two children.
76
- Model Prediction 4: You might be thinking of Betsy and Olivia. But you should verify the details with the latest references. Is that the correct answer?
77
- Model Prediction 5: Barack Obama's children
78
- ```
79
- These responses are all [INCORRECT] because they:
80
- - Contain factual statements that contradict the standard answer.
81
- - Are empty or merely repeat the question.
82
- - Enumerate multiple answers or repeat the answer.
83
-
84
- Pay special attention to the following:
85
- - The standard answer may contain responses to multiple aspects of the question, and within the same aspect, there might be different descriptions, all of which are correct and are given in the same bracket, connected by commas. For example, for the question "What is the name of ByteDance's AI model?", the standard answer is "[[Doubao, Skylark]]":
86
- - Predicted answers "Doubao", "Doubao, Skylark", "Skylark", etc. are all [CORRECT].
87
- - For standard answers containing responses to different aspects, the model needs to provide answers to all aspects to be considered correct; otherwise, it's directly judged as [INCORRECT]. There is no [PARTIALLY CORRECT] output option. These answers will be given in different brackets. For example, for the question "Who are the members of TFBOYS?", the standard answer is "[[Wang Junkai][Wang Yuan][Yi Yangqianxi]]":
88
- - Predicted answers like "Wang Junkai, Wang Yuan, Yi Yangqianxi" that include all answers are [CORRECT].
89
- - Predicted answers like "Wang Junkai, Yi Yangqianxi" that don't include all answers are [INCORRECT].
90
-
91
- Also note the following points:
92
- - For questions with numerical standard answers, the predicted answer should match the standard answer. For example, for the question "What is the total length in meters of the Huangpu River Bridge on the Jinshan Railway?", the standard answer is "3518.17":
93
- - Predicted answers "3518", "3518.1", "3518.17" are all [CORRECT].
94
- - Predicted answers "3520" and "3600" are [INCORRECT].
95
- - If the model prediction doesn't directly answer the question, attempts to circumvent or fails to directly provide the standard answer, it's considered an [INCORRECT] answer.
96
- - For example, for the question "Who is JJ Lin's wife?", with the standard answer "Ding Wenqi", model predictions like "JJ Lin's wife", "JJ Lin's wife should be excellent", "JJ Lin's wife might be a public figure" are all [INCORRECT].
97
- - If the standard answer contains more information than the question asks for, the predicted answer only needs to include the information mentioned in the question.
98
- - For example, for the question "What is the main chemical component of magnesite?", with the standard answer "Magnesium carbonate (MgCO3)", "Magnesium carbonate" or "MgCO3" are both considered [CORRECT].
99
- - If information omitted in the predicted answer can be clearly inferred from the question, it's considered correct.
100
- - For example, for the question "The Nuragic ruins of Barumini were listed as a World Cultural Heritage by UNESCO in 1997, so where is this site located?", with the standard answer "Sardinia, Italy", the predicted answer "Sardinia" is considered [CORRECT].
101
- - If it's clear that different translations of a name refer to the same person, it's considered correct.
102
- - For example, if the standard answer is "Robinson", answers like "Lubinson" or "Lubinsun" are both correct.
103
- - You should focus more on the match between the standard answer and the model prediction, rather than whether the standard answer itself is correct.
104
-
105
- Below is a new question example. Please reply with only [CORRECT] or [INCORRECT], without apologies or corrections to your own errors, just evaluate the answer.
106
- ```
107
- Question: {question}
108
- Standard Answer: {correct_answer}
109
- Predicted Answer: {response}
110
- ```
111
-
112
- Evaluate this new question's predicted answer as one of the following:
113
- A. [CORRECT]
114
- B. [INCORRECT]
115
-
116
- Return only the option representing [CORRECT] or [INCORRECT], i.e., just return A or B, without adding any other text.
117
- """.strip()
118
-
119
- _LABEL_RE = re.compile(r"^\s*([AB])\b")
120
- _CONTEXT_LENGTH_ERROR_PHRASES = (
121
- "this model's maximum context length is",
122
- "is longer than the model's context length",
123
- "is longer than the maximum model length",
124
- "exceeds the model's context length",
125
- "exceed the configured limit",
126
- "exceeds the configured limit",
127
- "exceeded model",
128
- "prompt_too_long",
129
- "context length",
130
- "maximum model length",
131
- )
132
- _OPENSEEKER_JUDGE_ERROR_TYPES = (
133
- APIConnectionError,
134
- APIResponseValidationError,
135
- APITimeoutError,
136
- APIStatusError,
137
- AuthenticationError,
138
- BadRequestError,
139
- ConflictError,
140
- ContentFilterFinishReasonError,
141
- InternalServerError,
142
- LengthFinishReasonError,
143
- NotFoundError,
144
- PermissionDeniedError,
145
- RateLimitError,
146
- UnprocessableEntityError,
147
- )
148
-
149
-
150
- def _is_context_length_error(exc: BadRequestError) -> bool:
151
- response = getattr(exc, "response", None)
152
- response_text = getattr(response, "text", "") or ""
153
- error_text = f"{response_text}\n{exc}".lower()
154
- return any(phrase in error_text for phrase in _CONTEXT_LENGTH_ERROR_PHRASES)
155
-
156
-
157
- def _raise_openseeker_judge_error(exc: Exception, *, model: str) -> NoReturn:
158
- if isinstance(exc, BadRequestError) and _is_context_length_error(exc):
159
- raise vf.OverlongPromptError(
160
- f"OpenSeeker judge prompt exceeded model context for {model}: {exc}"
161
- ) from exc
162
- if isinstance(
163
- exc,
164
- (
165
- APIConnectionError,
166
- APITimeoutError,
167
- RateLimitError,
168
- InternalServerError,
169
- ConflictError,
170
- ),
171
- ):
172
- raise vf.InfraError(
173
- f"OpenSeeker judge transient request failed for {model}: {exc}"
174
- ) from exc
175
- if isinstance(exc, APIResponseValidationError):
176
- raise vf.InvalidModelResponseError(
177
- f"OpenSeeker judge SDK response validation failed for {model}: {exc}"
178
- ) from exc
179
- if isinstance(exc, LengthFinishReasonError):
180
- raise vf.InvalidModelResponseError(
181
- f"OpenSeeker judge stopped due to length for {model}: {exc}"
182
- ) from exc
183
- if isinstance(
184
- exc,
185
- (
186
- AuthenticationError,
187
- PermissionDeniedError,
188
- NotFoundError,
189
- UnprocessableEntityError,
190
- ContentFilterFinishReasonError,
191
- BadRequestError,
192
- APIStatusError,
193
- ),
194
- ):
195
- raise vf.ModelError(
196
- f"OpenSeeker judge request failed for {model}: {exc}"
197
- ) from exc
198
- raise AssertionError(
199
- f"Unhandled OpenSeeker judge exception type: {type(exc).__name__}"
200
- ) from exc
201
-
202
-
203
- def _single_choice(response: Any) -> Any:
204
- if response is None:
205
- raise vf.EmptyModelResponseError("OpenSeeker judge returned no response")
206
- choices = getattr(response, "choices", None)
207
- if choices is None:
208
- raise vf.EmptyModelResponseError(
209
- "OpenSeeker judge returned no response choices"
210
- )
211
- if len(choices) != 1:
212
- raise vf.InvalidModelResponseError(
213
- f"OpenSeeker judge returned {len(choices)} choices, expected 1"
214
- )
215
- return choices[0]
216
-
217
-
218
- def _merge_sampling_args(sampling_args: dict[str, Any]) -> dict[str, Any]:
219
- request_kwargs: dict[str, Any] = {
220
- "temperature": 0.0,
221
- "extra_body": {"skip_special_tokens": False},
222
- }
223
- for key, value in sampling_args.items():
224
- if (
225
- key == "extra_body"
226
- and isinstance(value, dict)
227
- and isinstance(request_kwargs.get("extra_body"), dict)
228
- ):
229
- request_kwargs["extra_body"] = {
230
- **request_kwargs["extra_body"],
231
- **value,
232
- }
233
- continue
234
- request_kwargs[key] = value
235
- return request_kwargs
236
-
237
-
238
- def _parse_judge_label(raw: str | None) -> int | None:
239
- if raw is None:
240
- return None
241
- text = str(raw).strip()
242
- match = _LABEL_RE.match(text)
243
- if match:
244
- return 1 if match.group(1) == "A" else 0
245
- if "</think>" in text:
246
- after_tag = text.split("</think>", 1)[-1].strip()
247
- match = _LABEL_RE.match(after_tag)
248
- if match:
249
- return 1 if match.group(1) == "A" else 0
250
- return None
251
-
252
-
253
- def _completion_text(state: vf.State) -> str:
254
- completion = state.get("completion")
255
- if isinstance(completion, str):
256
- return completion.strip()
257
- if not isinstance(completion, list):
258
- return ""
259
- parts: list[str] = []
260
- for message in completion:
261
- role = None
262
- content = None
263
- if isinstance(message, dict):
264
- role = message.get("role")
265
- content = message.get("content")
266
- else:
267
- role = getattr(message, "role", None)
268
- content = getattr(message, "content", None)
269
- if role == "assistant" and isinstance(content, str) and content.strip():
270
- parts.append(content.strip())
271
- return "\n\n".join(parts).strip()
272
-
273
-
274
- class OpenSeekerTaskSet(SandboxTaskSet):
275
- """OpenSeeker v1 search/research taskset."""
276
-
277
- default_workdir = DEFAULT_WORKDIR
278
-
279
- def __init__(
280
- self,
281
- dataset_name: str = DEFAULT_DATASET_NAME,
282
- split: str = DEFAULT_SPLIT,
283
- include_trajectory: bool = False,
284
- filter_fn: str | None = None,
285
- ds_keep_in_memory: bool | None = False,
286
- ds_num_proc: int | None = None,
287
- sandbox_image: str = DEFAULT_SANDBOX_IMAGE,
288
- sandbox_cpu_cores: int = 2,
289
- sandbox_memory_gb: int = 2,
290
- sandbox_disk_size_gb: int = 5,
291
- sandbox_timeout_minutes: int | None = None,
292
- answer_file: str = DEFAULT_ANSWER_FILE,
293
- judge_model: str = DEFAULT_JUDGE_MODEL,
294
- judge_base_url: str | None = DEFAULT_JUDGE_BASE_URL,
295
- judge_api_key_var: str = DEFAULT_JUDGE_API_KEY_VAR,
296
- judge_sampling_args: dict[str, Any] | None = None,
297
- ) -> None:
298
- self.dataset_name = dataset_name
299
- self.split = split
300
- self.include_trajectory = include_trajectory
301
- self.ds_keep_in_memory = ds_keep_in_memory
302
- self.ds_num_proc = ds_num_proc
303
- self.answer_file = answer_file
304
- self._sandbox_spec = SandboxSpec(
305
- image=sandbox_image,
306
- cpu_cores=sandbox_cpu_cores,
307
- memory_gb=sandbox_memory_gb,
308
- disk_size_gb=sandbox_disk_size_gb,
309
- timeout_minutes=sandbox_timeout_minutes,
310
- )
311
- self._judge_model = judge_model
312
- self._judge_base_url = judge_base_url
313
- self._judge_api_key_var = judge_api_key_var
314
- self._judge_sampling_args = dict(judge_sampling_args or {})
315
- super().__init__(
316
- dataset=self._build_dataset,
317
- name="search/openseeker",
318
- filter_fn=filter_fn,
319
- )
320
-
321
- def _build_dataset(self) -> Dataset:
322
- raw = load_dataset(
323
- self.dataset_name,
324
- split=self.split,
325
- keep_in_memory=self.ds_keep_in_memory,
326
- num_proc=self.ds_num_proc,
327
- )
328
- columns = [
329
- "question",
330
- "answer",
331
- "number of tool calls",
332
- "trajectory correctness",
333
- ]
334
- if self.include_trajectory:
335
- columns.append("trajectory")
336
- raw = raw.select_columns([col for col in columns if col in raw.column_names])
337
-
338
- rows: list[dict[str, Any]] = []
339
- for row_index, row in enumerate(raw):
340
- correctness = row.get("trajectory correctness")
341
- tool_calls = row.get("number of tool calls")
342
- if not isinstance(tool_calls, int):
343
- tool_calls = None
344
- question = str(row.get("question") or "").strip()
345
- answer = str(row.get("answer") or "").strip()
346
- if not question or not answer:
347
- continue
348
- info: dict[str, Any] = {
349
- "question": question,
350
- "answer": answer,
351
- "source_dataset": self.dataset_name,
352
- "split": self.split,
353
- "row_index": row_index,
354
- "number_of_tool_calls": tool_calls,
355
- "trajectory_correctness": correctness,
356
- "answer_file": self.answer_file,
357
- }
358
- if self.include_trajectory:
359
- info["trajectory"] = row.get("trajectory")
360
- rows.append({"question": question, "answer": answer, "info": info})
361
- return Dataset.from_list(rows)
362
-
363
- def get_instruction(self, info: dict) -> str:
364
- question = str(info.get("question") or "")
365
- return (
366
- f"{question}\n\n"
367
- f"When you have the final response, write it to {self.answer_file} using a tool call, "
368
- "then stop. The task is incomplete unless that file exists. Provide the requested answer "
369
- "directly, include supporting URLs/citations when useful, and do not include scratch "
370
- "reasoning or tool traces."
371
- )
372
-
373
- def get_sandbox_spec(self, info: dict) -> SandboxSpec:
374
- return self._sandbox_spec
375
-
376
- def get_workdir(self, info: dict) -> str:
377
- return self.default_workdir
378
-
379
- def get_env_vars(self) -> dict[str, str]:
380
- env_vars: dict[str, str] = {}
381
- value = os.environ.get("SERPER_API_KEY")
382
- if value:
383
- env_vars["SERPER_API_KEY"] = value
384
- return env_vars
385
-
386
- async def setup(self, state: vf.State) -> None:
387
- sandbox_client = state["sandbox_client"]
388
- sandbox_id = state["sandbox_id"]
389
- await sandbox_client.execute_command(
390
- sandbox_id, f"mkdir -p {self.default_workdir} /task", timeout=10
391
- )
392
-
393
- def get_rubric(self) -> vf.Rubric:
394
- return OpenSeekerRubric(
395
- answer_file=self.answer_file,
396
- judge_model=self._judge_model,
397
- judge_base_url=self._judge_base_url,
398
- judge_api_key_var=self._judge_api_key_var,
399
- judge_sampling_args=self._judge_sampling_args,
400
- )
401
-
402
-
403
- class OpenSeekerRubric(vf.Rubric):
404
- """Scores OpenSeeker answers with the upstream binary semantic judge prompt."""
405
-
406
- def __init__(
407
- self,
408
- *,
409
- answer_file: str = DEFAULT_ANSWER_FILE,
410
- judge_model: str = DEFAULT_JUDGE_MODEL,
411
- judge_base_url: str | None = DEFAULT_JUDGE_BASE_URL,
412
- judge_api_key_var: str = DEFAULT_JUDGE_API_KEY_VAR,
413
- judge_sampling_args: dict[str, Any] | None = None,
414
- ) -> None:
415
- super().__init__()
416
- self.answer_file = answer_file
417
- self.judge_model = judge_model
418
- self.judge_base_url = judge_base_url
419
- self.judge_api_key_var = judge_api_key_var
420
- self.judge_sampling_args = dict(judge_sampling_args or {})
421
- self._client: AsyncOpenAI | None = None
422
- self.add_reward_func(self.answer_reward, weight=1.0)
423
-
424
- async def _answer_score_for_state(self, state: vf.State) -> float:
425
- if state.get("error") is not None:
426
- return 0.0
427
- try:
428
- return await self.answer_reward(state)
429
- except vf.Error as exc:
430
- state["error"] = exc
431
- return 0.0
432
-
433
- async def score_rollout(self, state: vf.State) -> None:
434
- score = await self._answer_score_for_state(state)
435
- state["reward"] = score
436
- state["metrics"] = {"openseeker_reward": score}
437
-
438
- async def score_group(self, states: list[vf.State]) -> None:
439
- if not states:
440
- logger.warning("No states to score")
441
- return
442
- scores = await asyncio.gather(
443
- *(self._answer_score_for_state(state) for state in states)
444
- )
445
- avg_score = sum(scores) / len(scores)
446
- for state, score in zip(states, scores):
447
- state["reward"] = score
448
- state["advantage"] = score - avg_score
449
- for turn in state.get("trajectory", []):
450
- if isinstance(turn, dict):
451
- if turn.get("advantage") is None:
452
- turn["advantage"] = state["advantage"]
453
- if turn.get("reward") is None:
454
- turn["reward"] = state["reward"]
455
- state["metrics"] = {"openseeker_reward": score}
456
-
457
- async def answer_reward(self, state: vf.State, **_: Any) -> float:
458
- sandbox_client = state.get("sandbox_client")
459
- sandbox_id = state.get("sandbox_id")
460
- if not sandbox_client or not sandbox_id:
461
- raise vf.SandboxError("OpenSeeker scoring requires a live sandbox")
462
- try:
463
- result = await sandbox_client.execute_command(
464
- sandbox_id,
465
- f"cat {self.answer_file} 2>/dev/null || true",
466
- working_dir=None,
467
- )
468
- except Exception as exc:
469
- raise vf.SandboxError(
470
- f"Failed to read OpenSeeker answer file {self.answer_file}"
471
- ) from exc
472
- answer = (result.stdout or "").strip()
473
- answer_source = "answer_file"
474
- if not answer:
475
- answer = _completion_text(state)
476
- answer_source = "completion_fallback" if answer else "missing"
477
- state["openseeker_answer"] = answer
478
- state["openseeker_answer_source"] = answer_source
479
- if not answer:
480
- state["openseeker_eval_error"] = "empty_answer"
481
- return 0.0
482
-
483
- info = state.get("info") or {}
484
- question = str(info.get("question") or "").strip()
485
- gold_answer = str(info.get("answer") or "").strip()
486
- if not question or not gold_answer:
487
- raise vf.InfraError(
488
- "OpenSeeker task is missing question or answer metadata"
489
- )
490
- state["openseeker_gold_answer"] = gold_answer
491
- state["openseeker_question"] = question
492
-
493
- raw = await self._judge(
494
- question=question, correct_answer=gold_answer, response=answer
495
- )
496
- label = _parse_judge_label(raw)
497
- state["openseeker_judge_raw"] = raw
498
- state["openseeker_judge_label"] = label
499
- if label is None:
500
- raise vf.InvalidModelResponseError(
501
- f"OpenSeeker judge returned an invalid label: {raw!r}"
502
- )
503
- score = float(label)
504
- if not math.isfinite(score):
505
- score = 0.0
506
- score = max(0.0, min(1.0, score))
507
- state["openseeker_final_score"] = score
508
- return score
509
-
510
- async def _judge(self, *, question: str, correct_answer: str, response: str) -> str:
511
- client = self._get_client()
512
- prompt = JUDGE_PROMPT_BC_EN.format(
513
- question=question,
514
- correct_answer=correct_answer,
515
- response=response,
516
- )
517
- request_kwargs = _merge_sampling_args(self.judge_sampling_args)
518
- try:
519
- completion = await client.chat.completions.create(
520
- model=self.judge_model,
521
- messages=[
522
- {"role": "system", "content": "Judge the response objectively."},
523
- {"role": "user", "content": prompt},
524
- ],
525
- **request_kwargs,
526
- )
527
- except _OPENSEEKER_JUDGE_ERROR_TYPES as exc:
528
- _raise_openseeker_judge_error(exc, model=self.judge_model)
529
- choice = _single_choice(completion)
530
- content = choice.message.content
531
- if content is None:
532
- raise vf.EmptyModelResponseError(
533
- f"OpenSeeker judge returned no text content for {self.judge_model}"
534
- )
535
- return content.strip()
536
-
537
- def _get_client(self) -> AsyncOpenAI:
538
- if self._client is not None:
539
- return self._client
540
- api_base_url = self.judge_base_url or "https://api.openai.com/v1"
541
- self._client = setup_openai_client(
542
- ClientConfig(
543
- api_key_var=self.judge_api_key_var,
544
- api_base_url=api_base_url,
545
- timeout=1200.0,
546
- )
547
- )
548
- return self._client
549
-
550
- @vf.cleanup
551
- async def cleanup(self, state: vf.State) -> None:
552
- sandbox_client = state.get("sandbox_client")
553
- sandbox_id = state.get("sandbox_id")
554
- if sandbox_client and sandbox_id:
555
- try:
556
- await sandbox_client.delete(sandbox_id)
557
- except Exception:
558
- pass
559
-
560
- @vf.teardown
561
- async def teardown(self) -> None:
562
- if self._client is not None:
563
- await self._client.close()
564
- self._client = None