verifiers 0.1.15.dev441__tar.gz → 0.1.15.dev442__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 (400) hide show
  1. {verifiers-0.1.15.dev441 → verifiers-0.1.15.dev442}/PKG-INFO +1 -1
  2. {verifiers-0.1.15.dev441 → verifiers-0.1.15.dev442}/verifiers/v1/cli/dashboard/eval.py +11 -18
  3. verifiers-0.1.15.dev442/verifiers/v1/cli/eval/resume.py +119 -0
  4. {verifiers-0.1.15.dev441 → verifiers-0.1.15.dev442}/verifiers/v1/cli/eval/runner.py +16 -16
  5. verifiers-0.1.15.dev441/verifiers/v1/cli/eval/resume.py +0 -138
  6. {verifiers-0.1.15.dev441 → verifiers-0.1.15.dev442}/.gitignore +0 -0
  7. {verifiers-0.1.15.dev441 → verifiers-0.1.15.dev442}/LICENSE +0 -0
  8. {verifiers-0.1.15.dev441 → verifiers-0.1.15.dev442}/README.md +0 -0
  9. {verifiers-0.1.15.dev441 → verifiers-0.1.15.dev442}/pyproject.toml +0 -0
  10. {verifiers-0.1.15.dev441 → verifiers-0.1.15.dev442}/tests/AGENTS.md +0 -0
  11. {verifiers-0.1.15.dev441 → verifiers-0.1.15.dev442}/tests/__init__.py +0 -0
  12. {verifiers-0.1.15.dev441 → verifiers-0.1.15.dev442}/tests/conftest.py +0 -0
  13. {verifiers-0.1.15.dev441 → verifiers-0.1.15.dev442}/tests/test_browser_env.py +0 -0
  14. {verifiers-0.1.15.dev441 → verifiers-0.1.15.dev442}/tests/test_build_script.py +0 -0
  15. {verifiers-0.1.15.dev441 → verifiers-0.1.15.dev442}/tests/test_cli_agent_env.py +0 -0
  16. {verifiers-0.1.15.dev441 → verifiers-0.1.15.dev442}/tests/test_client_auth_errors.py +0 -0
  17. {verifiers-0.1.15.dev441 → verifiers-0.1.15.dev442}/tests/test_client_config.py +0 -0
  18. {verifiers-0.1.15.dev441 → verifiers-0.1.15.dev442}/tests/test_client_multimodal_types.py +0 -0
  19. {verifiers-0.1.15.dev441 → verifiers-0.1.15.dev442}/tests/test_composable_env.py +0 -0
  20. {verifiers-0.1.15.dev441 → verifiers-0.1.15.dev442}/tests/test_context_token_metrics.py +0 -0
  21. {verifiers-0.1.15.dev441 → verifiers-0.1.15.dev442}/tests/test_decorator_ranks.py +0 -0
  22. {verifiers-0.1.15.dev441 → verifiers-0.1.15.dev442}/tests/test_endpoint_registry.py +0 -0
  23. {verifiers-0.1.15.dev441 → verifiers-0.1.15.dev442}/tests/test_env_group.py +0 -0
  24. {verifiers-0.1.15.dev441 → verifiers-0.1.15.dev442}/tests/test_env_server.py +0 -0
  25. {verifiers-0.1.15.dev441 → verifiers-0.1.15.dev442}/tests/test_environment.py +0 -0
  26. {verifiers-0.1.15.dev441 → verifiers-0.1.15.dev442}/tests/test_environment_extra.py +0 -0
  27. {verifiers-0.1.15.dev441 → verifiers-0.1.15.dev442}/tests/test_envs.py +0 -0
  28. {verifiers-0.1.15.dev441 → verifiers-0.1.15.dev442}/tests/test_error_chain.py +0 -0
  29. {verifiers-0.1.15.dev441 → verifiers-0.1.15.dev442}/tests/test_eval_display.py +0 -0
  30. {verifiers-0.1.15.dev441 → verifiers-0.1.15.dev442}/tests/test_eval_utils.py +0 -0
  31. {verifiers-0.1.15.dev441 → verifiers-0.1.15.dev442}/tests/test_gepa_cli.py +0 -0
  32. {verifiers-0.1.15.dev441 → verifiers-0.1.15.dev442}/tests/test_gepa_utils.py +0 -0
  33. {verifiers-0.1.15.dev441 → verifiers-0.1.15.dev442}/tests/test_gym_env.py +0 -0
  34. {verifiers-0.1.15.dev441 → verifiers-0.1.15.dev442}/tests/test_harbor_env_mcp.py +0 -0
  35. {verifiers-0.1.15.dev441 → verifiers-0.1.15.dev442}/tests/test_imports.py +0 -0
  36. {verifiers-0.1.15.dev441 → verifiers-0.1.15.dev442}/tests/test_init_script.py +0 -0
  37. {verifiers-0.1.15.dev441 → verifiers-0.1.15.dev442}/tests/test_install_utils.py +0 -0
  38. {verifiers-0.1.15.dev441 → verifiers-0.1.15.dev442}/tests/test_interception_utils.py +0 -0
  39. {verifiers-0.1.15.dev441 → verifiers-0.1.15.dev442}/tests/test_logging.py +0 -0
  40. {verifiers-0.1.15.dev441 → verifiers-0.1.15.dev442}/tests/test_math_rubric.py +0 -0
  41. {verifiers-0.1.15.dev441 → verifiers-0.1.15.dev442}/tests/test_maybe_think_parser.py +0 -0
  42. {verifiers-0.1.15.dev441 → verifiers-0.1.15.dev442}/tests/test_message_utils.py +0 -0
  43. {verifiers-0.1.15.dev441 → verifiers-0.1.15.dev442}/tests/test_message_utils_multimodal.py +0 -0
  44. {verifiers-0.1.15.dev441 → verifiers-0.1.15.dev442}/tests/test_multiturn_env.py +0 -0
  45. {verifiers-0.1.15.dev441 → verifiers-0.1.15.dev442}/tests/test_nemorl_client.py +0 -0
  46. {verifiers-0.1.15.dev441 → verifiers-0.1.15.dev442}/tests/test_openai_chat_completions_token_client.py +0 -0
  47. {verifiers-0.1.15.dev441 → verifiers-0.1.15.dev442}/tests/test_openai_responses_client.py +0 -0
  48. {verifiers-0.1.15.dev441 → verifiers-0.1.15.dev442}/tests/test_opencode_rlm_env.py +0 -0
  49. {verifiers-0.1.15.dev441 → verifiers-0.1.15.dev442}/tests/test_openenv_client.py +0 -0
  50. {verifiers-0.1.15.dev441 → verifiers-0.1.15.dev442}/tests/test_parser.py +0 -0
  51. {verifiers-0.1.15.dev441 → verifiers-0.1.15.dev442}/tests/test_path_utils.py +0 -0
  52. {verifiers-0.1.15.dev441 → verifiers-0.1.15.dev442}/tests/test_per_turn_timing.py +0 -0
  53. {verifiers-0.1.15.dev441 → verifiers-0.1.15.dev442}/tests/test_pricing_utils.py +0 -0
  54. {verifiers-0.1.15.dev441 → verifiers-0.1.15.dev442}/tests/test_prime_plugin.py +0 -0
  55. {verifiers-0.1.15.dev441 → verifiers-0.1.15.dev442}/tests/test_renderer_client.py +0 -0
  56. {verifiers-0.1.15.dev441 → verifiers-0.1.15.dev442}/tests/test_renderer_e2e.py +0 -0
  57. {verifiers-0.1.15.dev441 → verifiers-0.1.15.dev442}/tests/test_rlm_composable_env.py +0 -0
  58. {verifiers-0.1.15.dev441 → verifiers-0.1.15.dev442}/tests/test_rubric.py +0 -0
  59. {verifiers-0.1.15.dev441 → verifiers-0.1.15.dev442}/tests/test_rubric_group.py +0 -0
  60. {verifiers-0.1.15.dev441 → verifiers-0.1.15.dev442}/tests/test_sandbox_debug_env.py +0 -0
  61. {verifiers-0.1.15.dev441 → verifiers-0.1.15.dev442}/tests/test_sandbox_env.py +0 -0
  62. {verifiers-0.1.15.dev441 → verifiers-0.1.15.dev442}/tests/test_sandbox_mixin.py +0 -0
  63. {verifiers-0.1.15.dev441 → verifiers-0.1.15.dev442}/tests/test_save_utils.py +0 -0
  64. {verifiers-0.1.15.dev441 → verifiers-0.1.15.dev442}/tests/test_setup_script.py +0 -0
  65. {verifiers-0.1.15.dev441 → verifiers-0.1.15.dev442}/tests/test_singleturn_env.py +0 -0
  66. {verifiers-0.1.15.dev441 → verifiers-0.1.15.dev442}/tests/test_stateful_tool_env.py +0 -0
  67. {verifiers-0.1.15.dev441 → verifiers-0.1.15.dev442}/tests/test_think_parser.py +0 -0
  68. {verifiers-0.1.15.dev441 → verifiers-0.1.15.dev442}/tests/test_tool_env.py +0 -0
  69. {verifiers-0.1.15.dev441 → verifiers-0.1.15.dev442}/tests/test_tool_utils.py +0 -0
  70. {verifiers-0.1.15.dev441 → verifiers-0.1.15.dev442}/tests/test_trajectory_processing.py +0 -0
  71. {verifiers-0.1.15.dev441 → verifiers-0.1.15.dev442}/tests/test_tui_info_formatting.py +0 -0
  72. {verifiers-0.1.15.dev441 → verifiers-0.1.15.dev442}/tests/test_types.py +0 -0
  73. {verifiers-0.1.15.dev441 → verifiers-0.1.15.dev442}/tests/test_wordle_env.py +0 -0
  74. {verifiers-0.1.15.dev441 → verifiers-0.1.15.dev442}/tests/test_xml_parser.py +0 -0
  75. {verifiers-0.1.15.dev441 → verifiers-0.1.15.dev442}/tests/v1/conftest.py +0 -0
  76. {verifiers-0.1.15.dev441 → verifiers-0.1.15.dev442}/tests/v1/fixtures/counter_tool_v1.py +0 -0
  77. {verifiers-0.1.15.dev441 → verifiers-0.1.15.dev442}/tests/v1/fixtures/echo_agentic_v1.py +0 -0
  78. {verifiers-0.1.15.dev441 → verifiers-0.1.15.dev442}/tests/v1/fixtures/echo_multi_v0.py +0 -0
  79. {verifiers-0.1.15.dev441 → verifiers-0.1.15.dev442}/tests/v1/fixtures/echo_tool_v1.py +0 -0
  80. {verifiers-0.1.15.dev441 → verifiers-0.1.15.dev442}/tests/v1/fixtures/echo_user_sim_v1.py +0 -0
  81. {verifiers-0.1.15.dev441 → verifiers-0.1.15.dev442}/tests/v1/fixtures/echo_v0.py +0 -0
  82. {verifiers-0.1.15.dev441 → verifiers-0.1.15.dev442}/tests/v1/fixtures/echo_v1.py +0 -0
  83. {verifiers-0.1.15.dev441 → verifiers-0.1.15.dev442}/tests/v1/fixtures/pyproject.toml +0 -0
  84. {verifiers-0.1.15.dev441 → verifiers-0.1.15.dev442}/tests/v1/fixtures/tool_response_image_v1.py +0 -0
  85. {verifiers-0.1.15.dev441 → verifiers-0.1.15.dev442}/tests/v1/test_color_codeword_tasks.py +0 -0
  86. {verifiers-0.1.15.dev441 → verifiers-0.1.15.dev442}/tests/v1/test_configs.py +0 -0
  87. {verifiers-0.1.15.dev441 → verifiers-0.1.15.dev442}/tests/v1/test_e2e.py +0 -0
  88. {verifiers-0.1.15.dev441 → verifiers-0.1.15.dev442}/tests/v1/test_envs.py +0 -0
  89. {verifiers-0.1.15.dev441 → verifiers-0.1.15.dev442}/tests/v1/test_graph.py +0 -0
  90. {verifiers-0.1.15.dev441 → verifiers-0.1.15.dev442}/tests/v1/test_judges.py +0 -0
  91. {verifiers-0.1.15.dev441 → verifiers-0.1.15.dev442}/tests/v1/test_legacy.py +0 -0
  92. {verifiers-0.1.15.dev441 → verifiers-0.1.15.dev442}/tests/v1/test_scoring.py +0 -0
  93. {verifiers-0.1.15.dev441 → verifiers-0.1.15.dev442}/tests/v1/test_trace.py +0 -0
  94. {verifiers-0.1.15.dev441 → verifiers-0.1.15.dev442}/verifiers/__init__.py +0 -0
  95. {verifiers-0.1.15.dev441 → verifiers-0.1.15.dev442}/verifiers/cli/__init__.py +0 -0
  96. {verifiers-0.1.15.dev441 → verifiers-0.1.15.dev442}/verifiers/cli/commands/__init__.py +0 -0
  97. {verifiers-0.1.15.dev441 → verifiers-0.1.15.dev442}/verifiers/cli/commands/build.py +0 -0
  98. {verifiers-0.1.15.dev441 → verifiers-0.1.15.dev442}/verifiers/cli/commands/eval.py +0 -0
  99. {verifiers-0.1.15.dev441 → verifiers-0.1.15.dev442}/verifiers/cli/commands/gepa.py +0 -0
  100. {verifiers-0.1.15.dev441 → verifiers-0.1.15.dev442}/verifiers/cli/commands/init.py +0 -0
  101. {verifiers-0.1.15.dev441 → verifiers-0.1.15.dev442}/verifiers/cli/commands/install.py +0 -0
  102. {verifiers-0.1.15.dev441 → verifiers-0.1.15.dev442}/verifiers/cli/commands/setup.py +0 -0
  103. {verifiers-0.1.15.dev441 → verifiers-0.1.15.dev442}/verifiers/cli/plugins/__init__.py +0 -0
  104. {verifiers-0.1.15.dev441 → verifiers-0.1.15.dev442}/verifiers/cli/plugins/prime.py +0 -0
  105. {verifiers-0.1.15.dev441 → verifiers-0.1.15.dev442}/verifiers/cli/tui.py +0 -0
  106. {verifiers-0.1.15.dev441 → verifiers-0.1.15.dev442}/verifiers/clients/__init__.py +0 -0
  107. {verifiers-0.1.15.dev441 → verifiers-0.1.15.dev442}/verifiers/clients/anthropic_messages_client.py +0 -0
  108. {verifiers-0.1.15.dev441 → verifiers-0.1.15.dev442}/verifiers/clients/client.py +0 -0
  109. {verifiers-0.1.15.dev441 → verifiers-0.1.15.dev442}/verifiers/clients/nemorl_chat_completions_client.py +0 -0
  110. {verifiers-0.1.15.dev441 → verifiers-0.1.15.dev442}/verifiers/clients/openai_chat_completions_client.py +0 -0
  111. {verifiers-0.1.15.dev441 → verifiers-0.1.15.dev442}/verifiers/clients/openai_chat_completions_token_client.py +0 -0
  112. {verifiers-0.1.15.dev441 → verifiers-0.1.15.dev442}/verifiers/clients/openai_completions_client.py +0 -0
  113. {verifiers-0.1.15.dev441 → verifiers-0.1.15.dev442}/verifiers/clients/openai_responses_client.py +0 -0
  114. {verifiers-0.1.15.dev441 → verifiers-0.1.15.dev442}/verifiers/clients/renderer_client.py +0 -0
  115. {verifiers-0.1.15.dev441 → verifiers-0.1.15.dev442}/verifiers/decorators.py +0 -0
  116. {verifiers-0.1.15.dev441 → verifiers-0.1.15.dev442}/verifiers/envs/AGENTS.md +0 -0
  117. {verifiers-0.1.15.dev441 → verifiers-0.1.15.dev442}/verifiers/envs/__init__.py +0 -0
  118. {verifiers-0.1.15.dev441 → verifiers-0.1.15.dev442}/verifiers/envs/env_group.py +0 -0
  119. {verifiers-0.1.15.dev441 → verifiers-0.1.15.dev442}/verifiers/envs/environment.py +0 -0
  120. {verifiers-0.1.15.dev441 → verifiers-0.1.15.dev442}/verifiers/envs/experimental/README.md +0 -0
  121. {verifiers-0.1.15.dev441 → verifiers-0.1.15.dev442}/verifiers/envs/experimental/__init__.py +0 -0
  122. {verifiers-0.1.15.dev441 → verifiers-0.1.15.dev442}/verifiers/envs/experimental/cli_agent_env.py +0 -0
  123. {verifiers-0.1.15.dev441 → verifiers-0.1.15.dev442}/verifiers/envs/experimental/composable/README.md +0 -0
  124. {verifiers-0.1.15.dev441 → verifiers-0.1.15.dev442}/verifiers/envs/experimental/composable/__init__.py +0 -0
  125. {verifiers-0.1.15.dev441 → verifiers-0.1.15.dev442}/verifiers/envs/experimental/composable/_filter.py +0 -0
  126. {verifiers-0.1.15.dev441 → verifiers-0.1.15.dev442}/verifiers/envs/experimental/composable/composable_env.py +0 -0
  127. {verifiers-0.1.15.dev441 → verifiers-0.1.15.dev442}/verifiers/envs/experimental/composable/harness.py +0 -0
  128. {verifiers-0.1.15.dev441 → verifiers-0.1.15.dev442}/verifiers/envs/experimental/composable/harnesses/__init__.py +0 -0
  129. {verifiers-0.1.15.dev441 → verifiers-0.1.15.dev442}/verifiers/envs/experimental/composable/harnesses/mini_swe_agent.py +0 -0
  130. {verifiers-0.1.15.dev441 → verifiers-0.1.15.dev442}/verifiers/envs/experimental/composable/harnesses/opencode.py +0 -0
  131. {verifiers-0.1.15.dev441 → verifiers-0.1.15.dev442}/verifiers/envs/experimental/composable/harnesses/prompt.txt +0 -0
  132. {verifiers-0.1.15.dev441 → verifiers-0.1.15.dev442}/verifiers/envs/experimental/composable/harnesses/rlm.py +0 -0
  133. {verifiers-0.1.15.dev441 → verifiers-0.1.15.dev442}/verifiers/envs/experimental/composable/sandbox_debug_env.py +0 -0
  134. {verifiers-0.1.15.dev441 → verifiers-0.1.15.dev442}/verifiers/envs/experimental/composable/swe_debug_env.py +0 -0
  135. {verifiers-0.1.15.dev441 → verifiers-0.1.15.dev442}/verifiers/envs/experimental/composable/task.py +0 -0
  136. {verifiers-0.1.15.dev441 → verifiers-0.1.15.dev442}/verifiers/envs/experimental/composable/tasksets/__init__.py +0 -0
  137. {verifiers-0.1.15.dev441 → verifiers-0.1.15.dev442}/verifiers/envs/experimental/composable/tasksets/cp/__init__.py +0 -0
  138. {verifiers-0.1.15.dev441 → verifiers-0.1.15.dev442}/verifiers/envs/experimental/composable/tasksets/cp/cp_task.py +0 -0
  139. {verifiers-0.1.15.dev441 → verifiers-0.1.15.dev442}/verifiers/envs/experimental/composable/tasksets/cp/test_utils.py +0 -0
  140. {verifiers-0.1.15.dev441 → verifiers-0.1.15.dev442}/verifiers/envs/experimental/composable/tasksets/harbor/__init__.py +0 -0
  141. {verifiers-0.1.15.dev441 → verifiers-0.1.15.dev442}/verifiers/envs/experimental/composable/tasksets/harbor/cli_gym.py +0 -0
  142. {verifiers-0.1.15.dev441 → verifiers-0.1.15.dev442}/verifiers/envs/experimental/composable/tasksets/harbor/harbor.py +0 -0
  143. {verifiers-0.1.15.dev441 → verifiers-0.1.15.dev442}/verifiers/envs/experimental/composable/tasksets/harbor/terminal_lego.py +0 -0
  144. {verifiers-0.1.15.dev441 → verifiers-0.1.15.dev442}/verifiers/envs/experimental/composable/tasksets/math/__init__.py +0 -0
  145. {verifiers-0.1.15.dev441 → verifiers-0.1.15.dev442}/verifiers/envs/experimental/composable/tasksets/math/math_task.py +0 -0
  146. {verifiers-0.1.15.dev441 → verifiers-0.1.15.dev442}/verifiers/envs/experimental/composable/tasksets/search/README.md +0 -0
  147. {verifiers-0.1.15.dev441 → verifiers-0.1.15.dev442}/verifiers/envs/experimental/composable/tasksets/search/__init__.py +0 -0
  148. {verifiers-0.1.15.dev441 → verifiers-0.1.15.dev442}/verifiers/envs/experimental/composable/tasksets/search/openseeker/README.md +0 -0
  149. {verifiers-0.1.15.dev441 → verifiers-0.1.15.dev442}/verifiers/envs/experimental/composable/tasksets/search/openseeker/__init__.py +0 -0
  150. {verifiers-0.1.15.dev441 → verifiers-0.1.15.dev442}/verifiers/envs/experimental/composable/tasksets/search/openseeker/taskset.py +0 -0
  151. {verifiers-0.1.15.dev441 → verifiers-0.1.15.dev442}/verifiers/envs/experimental/composable/tasksets/search/quest/README.md +0 -0
  152. {verifiers-0.1.15.dev441 → verifiers-0.1.15.dev442}/verifiers/envs/experimental/composable/tasksets/search/quest/__init__.py +0 -0
  153. {verifiers-0.1.15.dev441 → verifiers-0.1.15.dev442}/verifiers/envs/experimental/composable/tasksets/search/quest/obj_task_eval/__init__.py +0 -0
  154. {verifiers-0.1.15.dev441 → verifiers-0.1.15.dev442}/verifiers/envs/experimental/composable/tasksets/search/quest/obj_task_eval/api_tools/__init__.py +0 -0
  155. {verifiers-0.1.15.dev441 → verifiers-0.1.15.dev442}/verifiers/envs/experimental/composable/tasksets/search/quest/obj_task_eval/api_tools/tool_pdf.py +0 -0
  156. {verifiers-0.1.15.dev441 → verifiers-0.1.15.dev442}/verifiers/envs/experimental/composable/tasksets/search/quest/obj_task_eval/eval_toolkit.py +0 -0
  157. {verifiers-0.1.15.dev441 → verifiers-0.1.15.dev442}/verifiers/envs/experimental/composable/tasksets/search/quest/obj_task_eval/evaluator.py +0 -0
  158. {verifiers-0.1.15.dev441 → verifiers-0.1.15.dev442}/verifiers/envs/experimental/composable/tasksets/search/quest/obj_task_eval/llm_client/__init__.py +0 -0
  159. {verifiers-0.1.15.dev441 → verifiers-0.1.15.dev442}/verifiers/envs/experimental/composable/tasksets/search/quest/obj_task_eval/llm_client/base_client.py +0 -0
  160. {verifiers-0.1.15.dev441 → verifiers-0.1.15.dev442}/verifiers/envs/experimental/composable/tasksets/search/quest/obj_task_eval/prompts/__init__.py +0 -0
  161. {verifiers-0.1.15.dev441 → verifiers-0.1.15.dev442}/verifiers/envs/experimental/composable/tasksets/search/quest/obj_task_eval/prompts/cache_prompts.py +0 -0
  162. {verifiers-0.1.15.dev441 → verifiers-0.1.15.dev442}/verifiers/envs/experimental/composable/tasksets/search/quest/obj_task_eval/utils/__init__.py +0 -0
  163. {verifiers-0.1.15.dev441 → verifiers-0.1.15.dev442}/verifiers/envs/experimental/composable/tasksets/search/quest/obj_task_eval/utils/cache_filesys.py +0 -0
  164. {verifiers-0.1.15.dev441 → verifiers-0.1.15.dev442}/verifiers/envs/experimental/composable/tasksets/search/quest/obj_task_eval/utils/load_eval_script.py +0 -0
  165. {verifiers-0.1.15.dev441 → verifiers-0.1.15.dev442}/verifiers/envs/experimental/composable/tasksets/search/quest/obj_task_eval/utils/misc.py +0 -0
  166. {verifiers-0.1.15.dev441 → verifiers-0.1.15.dev442}/verifiers/envs/experimental/composable/tasksets/search/quest/obj_task_eval/utils/tool_visit.py +0 -0
  167. {verifiers-0.1.15.dev441 → verifiers-0.1.15.dev442}/verifiers/envs/experimental/composable/tasksets/search/quest/obj_task_eval/utils/url_tools.py +0 -0
  168. {verifiers-0.1.15.dev441 → verifiers-0.1.15.dev442}/verifiers/envs/experimental/composable/tasksets/search/quest/obj_task_eval/verification_tree.py +0 -0
  169. {verifiers-0.1.15.dev441 → verifiers-0.1.15.dev442}/verifiers/envs/experimental/composable/tasksets/search/quest/open_ended.py +0 -0
  170. {verifiers-0.1.15.dev441 → verifiers-0.1.15.dev442}/verifiers/envs/experimental/composable/tasksets/search/quest/taskset.py +0 -0
  171. {verifiers-0.1.15.dev441 → verifiers-0.1.15.dev442}/verifiers/envs/experimental/composable/tasksets/search/redsearcher/README.md +0 -0
  172. {verifiers-0.1.15.dev441 → verifiers-0.1.15.dev442}/verifiers/envs/experimental/composable/tasksets/search/redsearcher/__init__.py +0 -0
  173. {verifiers-0.1.15.dev441 → verifiers-0.1.15.dev442}/verifiers/envs/experimental/composable/tasksets/search/redsearcher/taskset.py +0 -0
  174. {verifiers-0.1.15.dev441 → verifiers-0.1.15.dev442}/verifiers/envs/experimental/composable/tasksets/search/search_tasksets.py +0 -0
  175. {verifiers-0.1.15.dev441 → verifiers-0.1.15.dev442}/verifiers/envs/experimental/composable/tasksets/swe/README.md +0 -0
  176. {verifiers-0.1.15.dev441 → verifiers-0.1.15.dev442}/verifiers/envs/experimental/composable/tasksets/swe/__init__.py +0 -0
  177. {verifiers-0.1.15.dev441 → verifiers-0.1.15.dev442}/verifiers/envs/experimental/composable/tasksets/swe/multi_swe/__init__.py +0 -0
  178. {verifiers-0.1.15.dev441 → verifiers-0.1.15.dev442}/verifiers/envs/experimental/composable/tasksets/swe/multi_swe/extract_fix_patch.sh +0 -0
  179. {verifiers-0.1.15.dev441 → verifiers-0.1.15.dev442}/verifiers/envs/experimental/composable/tasksets/swe/multi_swe/taskset.py +0 -0
  180. {verifiers-0.1.15.dev441 → verifiers-0.1.15.dev442}/verifiers/envs/experimental/composable/tasksets/swe/openswe/__init__.py +0 -0
  181. {verifiers-0.1.15.dev441 → verifiers-0.1.15.dev442}/verifiers/envs/experimental/composable/tasksets/swe/openswe/taskset.py +0 -0
  182. {verifiers-0.1.15.dev441 → verifiers-0.1.15.dev442}/verifiers/envs/experimental/composable/tasksets/swe/r2e_gym/__init__.py +0 -0
  183. {verifiers-0.1.15.dev441 → verifiers-0.1.15.dev442}/verifiers/envs/experimental/composable/tasksets/swe/r2e_gym/log_parser.py +0 -0
  184. {verifiers-0.1.15.dev441 → verifiers-0.1.15.dev442}/verifiers/envs/experimental/composable/tasksets/swe/r2e_gym/taskset.py +0 -0
  185. {verifiers-0.1.15.dev441 → verifiers-0.1.15.dev442}/verifiers/envs/experimental/composable/tasksets/swe/scale_swe/__init__.py +0 -0
  186. {verifiers-0.1.15.dev441 → verifiers-0.1.15.dev442}/verifiers/envs/experimental/composable/tasksets/swe/scale_swe/taskset.py +0 -0
  187. {verifiers-0.1.15.dev441 → verifiers-0.1.15.dev442}/verifiers/envs/experimental/composable/tasksets/swe/shared/__init__.py +0 -0
  188. {verifiers-0.1.15.dev441 → verifiers-0.1.15.dev442}/verifiers/envs/experimental/composable/tasksets/swe/shared/test_patch.py +0 -0
  189. {verifiers-0.1.15.dev441 → verifiers-0.1.15.dev442}/verifiers/envs/experimental/composable/tasksets/swe/swe_bench/__init__.py +0 -0
  190. {verifiers-0.1.15.dev441 → verifiers-0.1.15.dev442}/verifiers/envs/experimental/composable/tasksets/swe/swe_bench/taskset.py +0 -0
  191. {verifiers-0.1.15.dev441 → verifiers-0.1.15.dev442}/verifiers/envs/experimental/composable/tasksets/swe/swe_lego/__init__.py +0 -0
  192. {verifiers-0.1.15.dev441 → verifiers-0.1.15.dev442}/verifiers/envs/experimental/composable/tasksets/swe/swe_lego/taskset.py +0 -0
  193. {verifiers-0.1.15.dev441 → verifiers-0.1.15.dev442}/verifiers/envs/experimental/composable/tasksets/swe/swe_rebench_v2/__init__.py +0 -0
  194. {verifiers-0.1.15.dev441 → verifiers-0.1.15.dev442}/verifiers/envs/experimental/composable/tasksets/swe/swe_rebench_v2/log_parsers.py +0 -0
  195. {verifiers-0.1.15.dev441 → verifiers-0.1.15.dev442}/verifiers/envs/experimental/composable/tasksets/swe/swe_rebench_v2/taskset.py +0 -0
  196. {verifiers-0.1.15.dev441 → verifiers-0.1.15.dev442}/verifiers/envs/experimental/composable/tasksets/swe/swe_smith/__init__.py +0 -0
  197. {verifiers-0.1.15.dev441 → verifiers-0.1.15.dev442}/verifiers/envs/experimental/composable/tasksets/swe/swe_smith/taskset.py +0 -0
  198. {verifiers-0.1.15.dev441 → verifiers-0.1.15.dev442}/verifiers/envs/experimental/composable/tasksets/swe/swe_tasksets.py +0 -0
  199. {verifiers-0.1.15.dev441 → verifiers-0.1.15.dev442}/verifiers/envs/experimental/gym_env.py +0 -0
  200. {verifiers-0.1.15.dev441 → verifiers-0.1.15.dev442}/verifiers/envs/experimental/harbor_env/__init__.py +0 -0
  201. {verifiers-0.1.15.dev441 → verifiers-0.1.15.dev442}/verifiers/envs/experimental/harbor_env/env.py +0 -0
  202. {verifiers-0.1.15.dev441 → verifiers-0.1.15.dev442}/verifiers/envs/experimental/harbor_env/mcp.py +0 -0
  203. {verifiers-0.1.15.dev441 → verifiers-0.1.15.dev442}/verifiers/envs/experimental/mcp_env.py +0 -0
  204. {verifiers-0.1.15.dev441 → verifiers-0.1.15.dev442}/verifiers/envs/experimental/opencode_env.py +0 -0
  205. {verifiers-0.1.15.dev441 → verifiers-0.1.15.dev442}/verifiers/envs/experimental/opencode_qa_env.py +0 -0
  206. {verifiers-0.1.15.dev441 → verifiers-0.1.15.dev442}/verifiers/envs/experimental/opencode_rlm_env.py +0 -0
  207. {verifiers-0.1.15.dev441 → verifiers-0.1.15.dev442}/verifiers/envs/experimental/sandbox_mixin.py +0 -0
  208. {verifiers-0.1.15.dev441 → verifiers-0.1.15.dev442}/verifiers/envs/experimental/utils/__init__.py +0 -0
  209. {verifiers-0.1.15.dev441 → verifiers-0.1.15.dev442}/verifiers/envs/experimental/utils/file_locks.py +0 -0
  210. {verifiers-0.1.15.dev441 → verifiers-0.1.15.dev442}/verifiers/envs/experimental/utils/git_checkout_cache.py +0 -0
  211. {verifiers-0.1.15.dev441 → verifiers-0.1.15.dev442}/verifiers/envs/integrations/README.md +0 -0
  212. {verifiers-0.1.15.dev441 → verifiers-0.1.15.dev442}/verifiers/envs/integrations/__init__.py +0 -0
  213. {verifiers-0.1.15.dev441 → verifiers-0.1.15.dev442}/verifiers/envs/integrations/browser_env/README.md +0 -0
  214. {verifiers-0.1.15.dev441 → verifiers-0.1.15.dev442}/verifiers/envs/integrations/browser_env/__init__.py +0 -0
  215. {verifiers-0.1.15.dev441 → verifiers-0.1.15.dev442}/verifiers/envs/integrations/browser_env/browser_env.py +0 -0
  216. {verifiers-0.1.15.dev441 → verifiers-0.1.15.dev442}/verifiers/envs/integrations/browser_env/modes/__init__.py +0 -0
  217. {verifiers-0.1.15.dev441 → verifiers-0.1.15.dev442}/verifiers/envs/integrations/browser_env/modes/base.py +0 -0
  218. {verifiers-0.1.15.dev441 → verifiers-0.1.15.dev442}/verifiers/envs/integrations/browser_env/modes/cua_mode.py +0 -0
  219. {verifiers-0.1.15.dev441 → verifiers-0.1.15.dev442}/verifiers/envs/integrations/browser_env/modes/dom_mode.py +0 -0
  220. {verifiers-0.1.15.dev441 → verifiers-0.1.15.dev442}/verifiers/envs/integrations/openenv_env.py +0 -0
  221. {verifiers-0.1.15.dev441 → verifiers-0.1.15.dev442}/verifiers/envs/integrations/reasoninggym_env.py +0 -0
  222. {verifiers-0.1.15.dev441 → verifiers-0.1.15.dev442}/verifiers/envs/integrations/textarena_env.py +0 -0
  223. {verifiers-0.1.15.dev441 → verifiers-0.1.15.dev442}/verifiers/envs/multiturn_env.py +0 -0
  224. {verifiers-0.1.15.dev441 → verifiers-0.1.15.dev442}/verifiers/envs/python_env.py +0 -0
  225. {verifiers-0.1.15.dev441 → verifiers-0.1.15.dev442}/verifiers/envs/sandbox_env.py +0 -0
  226. {verifiers-0.1.15.dev441 → verifiers-0.1.15.dev442}/verifiers/envs/singleturn_env.py +0 -0
  227. {verifiers-0.1.15.dev441 → verifiers-0.1.15.dev442}/verifiers/envs/stateful_tool_env.py +0 -0
  228. {verifiers-0.1.15.dev441 → verifiers-0.1.15.dev442}/verifiers/envs/tool_env.py +0 -0
  229. {verifiers-0.1.15.dev441 → verifiers-0.1.15.dev442}/verifiers/errors.py +0 -0
  230. {verifiers-0.1.15.dev441 → verifiers-0.1.15.dev442}/verifiers/gepa/__init__.py +0 -0
  231. {verifiers-0.1.15.dev441 → verifiers-0.1.15.dev442}/verifiers/gepa/adapter.py +0 -0
  232. {verifiers-0.1.15.dev441 → verifiers-0.1.15.dev442}/verifiers/gepa/config.py +0 -0
  233. {verifiers-0.1.15.dev441 → verifiers-0.1.15.dev442}/verifiers/gepa/display.py +0 -0
  234. {verifiers-0.1.15.dev441 → verifiers-0.1.15.dev442}/verifiers/gepa/gepa_utils.py +0 -0
  235. {verifiers-0.1.15.dev441 → verifiers-0.1.15.dev442}/verifiers/parsers/__init__.py +0 -0
  236. {verifiers-0.1.15.dev441 → verifiers-0.1.15.dev442}/verifiers/parsers/maybe_think_parser.py +0 -0
  237. {verifiers-0.1.15.dev441 → verifiers-0.1.15.dev442}/verifiers/parsers/parser.py +0 -0
  238. {verifiers-0.1.15.dev441 → verifiers-0.1.15.dev442}/verifiers/parsers/think_parser.py +0 -0
  239. {verifiers-0.1.15.dev441 → verifiers-0.1.15.dev442}/verifiers/parsers/xml_parser.py +0 -0
  240. {verifiers-0.1.15.dev441 → verifiers-0.1.15.dev442}/verifiers/rubrics/__init__.py +0 -0
  241. {verifiers-0.1.15.dev441 → verifiers-0.1.15.dev442}/verifiers/rubrics/experimental/hybrid_math_rubric.py +0 -0
  242. {verifiers-0.1.15.dev441 → verifiers-0.1.15.dev442}/verifiers/rubrics/judge_rubric.py +0 -0
  243. {verifiers-0.1.15.dev441 → verifiers-0.1.15.dev442}/verifiers/rubrics/math_rubric.py +0 -0
  244. {verifiers-0.1.15.dev441 → verifiers-0.1.15.dev442}/verifiers/rubrics/rubric.py +0 -0
  245. {verifiers-0.1.15.dev441 → verifiers-0.1.15.dev442}/verifiers/rubrics/rubric_group.py +0 -0
  246. {verifiers-0.1.15.dev441 → verifiers-0.1.15.dev442}/verifiers/scripts/__init__.py +0 -0
  247. {verifiers-0.1.15.dev441 → verifiers-0.1.15.dev442}/verifiers/scripts/build.py +0 -0
  248. {verifiers-0.1.15.dev441 → verifiers-0.1.15.dev442}/verifiers/scripts/eval.py +0 -0
  249. {verifiers-0.1.15.dev441 → verifiers-0.1.15.dev442}/verifiers/scripts/gepa.py +0 -0
  250. {verifiers-0.1.15.dev441 → verifiers-0.1.15.dev442}/verifiers/scripts/init.py +0 -0
  251. {verifiers-0.1.15.dev441 → verifiers-0.1.15.dev442}/verifiers/scripts/install.py +0 -0
  252. {verifiers-0.1.15.dev441 → verifiers-0.1.15.dev442}/verifiers/scripts/setup.py +0 -0
  253. {verifiers-0.1.15.dev441 → verifiers-0.1.15.dev442}/verifiers/scripts/tui.py +0 -0
  254. {verifiers-0.1.15.dev441 → verifiers-0.1.15.dev442}/verifiers/serve/__init__.py +0 -0
  255. {verifiers-0.1.15.dev441 → verifiers-0.1.15.dev442}/verifiers/serve/client/env_client.py +0 -0
  256. {verifiers-0.1.15.dev441 → verifiers-0.1.15.dev442}/verifiers/serve/client/zmq_env_client.py +0 -0
  257. {verifiers-0.1.15.dev441 → verifiers-0.1.15.dev442}/verifiers/serve/server/__init__.py +0 -0
  258. {verifiers-0.1.15.dev441 → verifiers-0.1.15.dev442}/verifiers/serve/server/env_router.py +0 -0
  259. {verifiers-0.1.15.dev441 → verifiers-0.1.15.dev442}/verifiers/serve/server/env_server.py +0 -0
  260. {verifiers-0.1.15.dev441 → verifiers-0.1.15.dev442}/verifiers/serve/server/env_worker.py +0 -0
  261. {verifiers-0.1.15.dev441 → verifiers-0.1.15.dev442}/verifiers/serve/server/zmq_env_server.py +0 -0
  262. {verifiers-0.1.15.dev441 → verifiers-0.1.15.dev442}/verifiers/serve/types.py +0 -0
  263. {verifiers-0.1.15.dev441 → verifiers-0.1.15.dev442}/verifiers/types.py +0 -0
  264. {verifiers-0.1.15.dev441 → verifiers-0.1.15.dev442}/verifiers/utils/__init__.py +0 -0
  265. {verifiers-0.1.15.dev441 → verifiers-0.1.15.dev442}/verifiers/utils/async_utils.py +0 -0
  266. {verifiers-0.1.15.dev441 → verifiers-0.1.15.dev442}/verifiers/utils/client_utils.py +0 -0
  267. {verifiers-0.1.15.dev441 → verifiers-0.1.15.dev442}/verifiers/utils/config_utils.py +0 -0
  268. {verifiers-0.1.15.dev441 → verifiers-0.1.15.dev442}/verifiers/utils/data_utils.py +0 -0
  269. {verifiers-0.1.15.dev441 → verifiers-0.1.15.dev442}/verifiers/utils/display_utils.py +0 -0
  270. {verifiers-0.1.15.dev441 → verifiers-0.1.15.dev442}/verifiers/utils/env_config_utils.py +0 -0
  271. {verifiers-0.1.15.dev441 → verifiers-0.1.15.dev442}/verifiers/utils/env_utils.py +0 -0
  272. {verifiers-0.1.15.dev441 → verifiers-0.1.15.dev442}/verifiers/utils/error_utils.py +0 -0
  273. {verifiers-0.1.15.dev441 → verifiers-0.1.15.dev442}/verifiers/utils/eval_display.py +0 -0
  274. {verifiers-0.1.15.dev441 → verifiers-0.1.15.dev442}/verifiers/utils/eval_utils.py +0 -0
  275. {verifiers-0.1.15.dev441 → verifiers-0.1.15.dev442}/verifiers/utils/heartbeat.py +0 -0
  276. {verifiers-0.1.15.dev441 → verifiers-0.1.15.dev442}/verifiers/utils/import_utils.py +0 -0
  277. {verifiers-0.1.15.dev441 → verifiers-0.1.15.dev442}/verifiers/utils/install_utils.py +0 -0
  278. {verifiers-0.1.15.dev441 → verifiers-0.1.15.dev442}/verifiers/utils/interception_utils.py +0 -0
  279. {verifiers-0.1.15.dev441 → verifiers-0.1.15.dev442}/verifiers/utils/logging_utils.py +0 -0
  280. {verifiers-0.1.15.dev441 → verifiers-0.1.15.dev442}/verifiers/utils/message_utils.py +0 -0
  281. {verifiers-0.1.15.dev441 → verifiers-0.1.15.dev442}/verifiers/utils/metric_utils.py +0 -0
  282. {verifiers-0.1.15.dev441 → verifiers-0.1.15.dev442}/verifiers/utils/path_utils.py +0 -0
  283. {verifiers-0.1.15.dev441 → verifiers-0.1.15.dev442}/verifiers/utils/pricing_utils.py +0 -0
  284. {verifiers-0.1.15.dev441 → verifiers-0.1.15.dev442}/verifiers/utils/process_utils.py +0 -0
  285. {verifiers-0.1.15.dev441 → verifiers-0.1.15.dev442}/verifiers/utils/response_utils.py +0 -0
  286. {verifiers-0.1.15.dev441 → verifiers-0.1.15.dev442}/verifiers/utils/save_utils.py +0 -0
  287. {verifiers-0.1.15.dev441 → verifiers-0.1.15.dev442}/verifiers/utils/serve_utils.py +0 -0
  288. {verifiers-0.1.15.dev441 → verifiers-0.1.15.dev442}/verifiers/utils/thread_utils.py +0 -0
  289. {verifiers-0.1.15.dev441 → verifiers-0.1.15.dev442}/verifiers/utils/threaded_sandbox_client.py +0 -0
  290. {verifiers-0.1.15.dev441 → verifiers-0.1.15.dev442}/verifiers/utils/tool_utils.py +0 -0
  291. {verifiers-0.1.15.dev441 → verifiers-0.1.15.dev442}/verifiers/utils/usage_utils.py +0 -0
  292. {verifiers-0.1.15.dev441 → verifiers-0.1.15.dev442}/verifiers/utils/version_utils.py +0 -0
  293. {verifiers-0.1.15.dev441 → verifiers-0.1.15.dev442}/verifiers/v1/__init__.py +0 -0
  294. {verifiers-0.1.15.dev441 → verifiers-0.1.15.dev442}/verifiers/v1/cli/__init__.py +0 -0
  295. {verifiers-0.1.15.dev441 → verifiers-0.1.15.dev442}/verifiers/v1/cli/dashboard/__init__.py +0 -0
  296. {verifiers-0.1.15.dev441 → verifiers-0.1.15.dev442}/verifiers/v1/cli/dashboard/base.py +0 -0
  297. {verifiers-0.1.15.dev441 → verifiers-0.1.15.dev442}/verifiers/v1/cli/dashboard/replay.py +0 -0
  298. {verifiers-0.1.15.dev441 → verifiers-0.1.15.dev442}/verifiers/v1/cli/dashboard/validate.py +0 -0
  299. {verifiers-0.1.15.dev441 → verifiers-0.1.15.dev442}/verifiers/v1/cli/debug.py +0 -0
  300. {verifiers-0.1.15.dev441 → verifiers-0.1.15.dev442}/verifiers/v1/cli/eval/__init__.py +0 -0
  301. {verifiers-0.1.15.dev441 → verifiers-0.1.15.dev442}/verifiers/v1/cli/eval/main.py +0 -0
  302. {verifiers-0.1.15.dev441 → verifiers-0.1.15.dev442}/verifiers/v1/cli/init.py +0 -0
  303. {verifiers-0.1.15.dev441 → verifiers-0.1.15.dev442}/verifiers/v1/cli/output.py +0 -0
  304. {verifiers-0.1.15.dev441 → verifiers-0.1.15.dev442}/verifiers/v1/cli/replay.py +0 -0
  305. {verifiers-0.1.15.dev441 → verifiers-0.1.15.dev442}/verifiers/v1/cli/resolve.py +0 -0
  306. {verifiers-0.1.15.dev441 → verifiers-0.1.15.dev442}/verifiers/v1/cli/serve.py +0 -0
  307. {verifiers-0.1.15.dev441 → verifiers-0.1.15.dev442}/verifiers/v1/cli/validate.py +0 -0
  308. {verifiers-0.1.15.dev441 → verifiers-0.1.15.dev442}/verifiers/v1/clients/__init__.py +0 -0
  309. {verifiers-0.1.15.dev441 → verifiers-0.1.15.dev442}/verifiers/v1/clients/client.py +0 -0
  310. {verifiers-0.1.15.dev441 → verifiers-0.1.15.dev442}/verifiers/v1/clients/config.py +0 -0
  311. {verifiers-0.1.15.dev441 → verifiers-0.1.15.dev442}/verifiers/v1/clients/eval.py +0 -0
  312. {verifiers-0.1.15.dev441 → verifiers-0.1.15.dev442}/verifiers/v1/clients/train.py +0 -0
  313. {verifiers-0.1.15.dev441 → verifiers-0.1.15.dev442}/verifiers/v1/configs/__init__.py +0 -0
  314. {verifiers-0.1.15.dev441 → verifiers-0.1.15.dev442}/verifiers/v1/configs/debug.py +0 -0
  315. {verifiers-0.1.15.dev441 → verifiers-0.1.15.dev442}/verifiers/v1/configs/eval.py +0 -0
  316. {verifiers-0.1.15.dev441 → verifiers-0.1.15.dev442}/verifiers/v1/configs/init.py +0 -0
  317. {verifiers-0.1.15.dev441 → verifiers-0.1.15.dev442}/verifiers/v1/configs/replay.py +0 -0
  318. {verifiers-0.1.15.dev441 → verifiers-0.1.15.dev442}/verifiers/v1/configs/serve.py +0 -0
  319. {verifiers-0.1.15.dev441 → verifiers-0.1.15.dev442}/verifiers/v1/configs/validate.py +0 -0
  320. {verifiers-0.1.15.dev441 → verifiers-0.1.15.dev442}/verifiers/v1/decorators.py +0 -0
  321. {verifiers-0.1.15.dev441 → verifiers-0.1.15.dev442}/verifiers/v1/dialects/__init__.py +0 -0
  322. {verifiers-0.1.15.dev441 → verifiers-0.1.15.dev442}/verifiers/v1/dialects/anthropic.py +0 -0
  323. {verifiers-0.1.15.dev441 → verifiers-0.1.15.dev442}/verifiers/v1/dialects/base.py +0 -0
  324. {verifiers-0.1.15.dev441 → verifiers-0.1.15.dev442}/verifiers/v1/dialects/chat.py +0 -0
  325. {verifiers-0.1.15.dev441 → verifiers-0.1.15.dev442}/verifiers/v1/dialects/responses.py +0 -0
  326. {verifiers-0.1.15.dev441 → verifiers-0.1.15.dev442}/verifiers/v1/env.py +0 -0
  327. {verifiers-0.1.15.dev441 → verifiers-0.1.15.dev442}/verifiers/v1/episode.py +0 -0
  328. {verifiers-0.1.15.dev441 → verifiers-0.1.15.dev442}/verifiers/v1/errors.py +0 -0
  329. {verifiers-0.1.15.dev441 → verifiers-0.1.15.dev442}/verifiers/v1/graph.py +0 -0
  330. {verifiers-0.1.15.dev441 → verifiers-0.1.15.dev442}/verifiers/v1/harness.py +0 -0
  331. {verifiers-0.1.15.dev441 → verifiers-0.1.15.dev442}/verifiers/v1/harnesses/__init__.py +0 -0
  332. {verifiers-0.1.15.dev441 → verifiers-0.1.15.dev442}/verifiers/v1/harnesses/codex/__init__.py +0 -0
  333. {verifiers-0.1.15.dev441 → verifiers-0.1.15.dev442}/verifiers/v1/harnesses/codex/harness.py +0 -0
  334. {verifiers-0.1.15.dev441 → verifiers-0.1.15.dev442}/verifiers/v1/harnesses/default/__init__.py +0 -0
  335. {verifiers-0.1.15.dev441 → verifiers-0.1.15.dev442}/verifiers/v1/harnesses/default/harness.py +0 -0
  336. {verifiers-0.1.15.dev441 → verifiers-0.1.15.dev442}/verifiers/v1/harnesses/default/program.py +0 -0
  337. {verifiers-0.1.15.dev441 → verifiers-0.1.15.dev442}/verifiers/v1/harnesses/kimi_code/__init__.py +0 -0
  338. {verifiers-0.1.15.dev441 → verifiers-0.1.15.dev442}/verifiers/v1/harnesses/kimi_code/harness.py +0 -0
  339. {verifiers-0.1.15.dev441 → verifiers-0.1.15.dev442}/verifiers/v1/harnesses/mini_swe_agent/__init__.py +0 -0
  340. {verifiers-0.1.15.dev441 → verifiers-0.1.15.dev442}/verifiers/v1/harnesses/mini_swe_agent/harness.py +0 -0
  341. {verifiers-0.1.15.dev441 → verifiers-0.1.15.dev442}/verifiers/v1/harnesses/mini_swe_agent/program.py +0 -0
  342. {verifiers-0.1.15.dev441 → verifiers-0.1.15.dev442}/verifiers/v1/harnesses/null/__init__.py +0 -0
  343. {verifiers-0.1.15.dev441 → verifiers-0.1.15.dev442}/verifiers/v1/harnesses/null/harness.py +0 -0
  344. {verifiers-0.1.15.dev441 → verifiers-0.1.15.dev442}/verifiers/v1/harnesses/null/program.py +0 -0
  345. {verifiers-0.1.15.dev441 → verifiers-0.1.15.dev442}/verifiers/v1/harnesses/rlm/__init__.py +0 -0
  346. {verifiers-0.1.15.dev441 → verifiers-0.1.15.dev442}/verifiers/v1/harnesses/rlm/harness.py +0 -0
  347. {verifiers-0.1.15.dev441 → verifiers-0.1.15.dev442}/verifiers/v1/harnesses/terminus_2/__init__.py +0 -0
  348. {verifiers-0.1.15.dev441 → verifiers-0.1.15.dev442}/verifiers/v1/harnesses/terminus_2/harness.py +0 -0
  349. {verifiers-0.1.15.dev441 → verifiers-0.1.15.dev442}/verifiers/v1/harnesses/terminus_2/program.py +0 -0
  350. {verifiers-0.1.15.dev441 → verifiers-0.1.15.dev442}/verifiers/v1/interception/__init__.py +0 -0
  351. {verifiers-0.1.15.dev441 → verifiers-0.1.15.dev442}/verifiers/v1/interception/pool.py +0 -0
  352. {verifiers-0.1.15.dev441 → verifiers-0.1.15.dev442}/verifiers/v1/interception/server.py +0 -0
  353. {verifiers-0.1.15.dev441 → verifiers-0.1.15.dev442}/verifiers/v1/judge.py +0 -0
  354. {verifiers-0.1.15.dev441 → verifiers-0.1.15.dev442}/verifiers/v1/judges/__init__.py +0 -0
  355. {verifiers-0.1.15.dev441 → verifiers-0.1.15.dev442}/verifiers/v1/judges/reference.py +0 -0
  356. {verifiers-0.1.15.dev441 → verifiers-0.1.15.dev442}/verifiers/v1/judges/reference.txt +0 -0
  357. {verifiers-0.1.15.dev441 → verifiers-0.1.15.dev442}/verifiers/v1/judges/rubric.py +0 -0
  358. {verifiers-0.1.15.dev441 → verifiers-0.1.15.dev442}/verifiers/v1/judges/rubric.txt +0 -0
  359. {verifiers-0.1.15.dev441 → verifiers-0.1.15.dev442}/verifiers/v1/legacy.py +0 -0
  360. {verifiers-0.1.15.dev441 → verifiers-0.1.15.dev442}/verifiers/v1/loaders.py +0 -0
  361. {verifiers-0.1.15.dev441 → verifiers-0.1.15.dev442}/verifiers/v1/mcp/__init__.py +0 -0
  362. {verifiers-0.1.15.dev441 → verifiers-0.1.15.dev442}/verifiers/v1/mcp/launch.py +0 -0
  363. {verifiers-0.1.15.dev441 → verifiers-0.1.15.dev442}/verifiers/v1/mcp/server.py +0 -0
  364. {verifiers-0.1.15.dev441 → verifiers-0.1.15.dev442}/verifiers/v1/mcp/toolset.py +0 -0
  365. {verifiers-0.1.15.dev441 → verifiers-0.1.15.dev442}/verifiers/v1/mcp/user.py +0 -0
  366. {verifiers-0.1.15.dev441 → verifiers-0.1.15.dev442}/verifiers/v1/push.py +0 -0
  367. {verifiers-0.1.15.dev441 → verifiers-0.1.15.dev442}/verifiers/v1/retries.py +0 -0
  368. {verifiers-0.1.15.dev441 → verifiers-0.1.15.dev442}/verifiers/v1/rollout.py +0 -0
  369. {verifiers-0.1.15.dev441 → verifiers-0.1.15.dev442}/verifiers/v1/runtimes/__init__.py +0 -0
  370. {verifiers-0.1.15.dev441 → verifiers-0.1.15.dev442}/verifiers/v1/runtimes/base.py +0 -0
  371. {verifiers-0.1.15.dev441 → verifiers-0.1.15.dev442}/verifiers/v1/runtimes/docker.py +0 -0
  372. {verifiers-0.1.15.dev441 → verifiers-0.1.15.dev442}/verifiers/v1/runtimes/limiters.py +0 -0
  373. {verifiers-0.1.15.dev441 → verifiers-0.1.15.dev442}/verifiers/v1/runtimes/modal.py +0 -0
  374. {verifiers-0.1.15.dev441 → verifiers-0.1.15.dev442}/verifiers/v1/runtimes/prime.py +0 -0
  375. {verifiers-0.1.15.dev441 → verifiers-0.1.15.dev442}/verifiers/v1/runtimes/subprocess.py +0 -0
  376. {verifiers-0.1.15.dev441 → verifiers-0.1.15.dev442}/verifiers/v1/scoring.py +0 -0
  377. {verifiers-0.1.15.dev441 → verifiers-0.1.15.dev442}/verifiers/v1/serve/__init__.py +0 -0
  378. {verifiers-0.1.15.dev441 → verifiers-0.1.15.dev442}/verifiers/v1/serve/client.py +0 -0
  379. {verifiers-0.1.15.dev441 → verifiers-0.1.15.dev442}/verifiers/v1/serve/pool.py +0 -0
  380. {verifiers-0.1.15.dev441 → verifiers-0.1.15.dev442}/verifiers/v1/serve/server.py +0 -0
  381. {verifiers-0.1.15.dev441 → verifiers-0.1.15.dev442}/verifiers/v1/serve/types.py +0 -0
  382. {verifiers-0.1.15.dev441 → verifiers-0.1.15.dev442}/verifiers/v1/state.py +0 -0
  383. {verifiers-0.1.15.dev441 → verifiers-0.1.15.dev442}/verifiers/v1/task.py +0 -0
  384. {verifiers-0.1.15.dev441 → verifiers-0.1.15.dev442}/verifiers/v1/taskset.py +0 -0
  385. {verifiers-0.1.15.dev441 → verifiers-0.1.15.dev442}/verifiers/v1/tasksets/__init__.py +0 -0
  386. {verifiers-0.1.15.dev441 → verifiers-0.1.15.dev442}/verifiers/v1/tasksets/harbor/__init__.py +0 -0
  387. {verifiers-0.1.15.dev441 → verifiers-0.1.15.dev442}/verifiers/v1/tasksets/harbor/taskset.py +0 -0
  388. {verifiers-0.1.15.dev441 → verifiers-0.1.15.dev442}/verifiers/v1/tasksets/lean/__init__.py +0 -0
  389. {verifiers-0.1.15.dev441 → verifiers-0.1.15.dev442}/verifiers/v1/tasksets/lean/scoring.py +0 -0
  390. {verifiers-0.1.15.dev441 → verifiers-0.1.15.dev442}/verifiers/v1/tasksets/lean/taskset.py +0 -0
  391. {verifiers-0.1.15.dev441 → verifiers-0.1.15.dev442}/verifiers/v1/tasksets/textarena/__init__.py +0 -0
  392. {verifiers-0.1.15.dev441 → verifiers-0.1.15.dev442}/verifiers/v1/tasksets/textarena/taskset.py +0 -0
  393. {verifiers-0.1.15.dev441 → verifiers-0.1.15.dev442}/verifiers/v1/trace.py +0 -0
  394. {verifiers-0.1.15.dev441 → verifiers-0.1.15.dev442}/verifiers/v1/types.py +0 -0
  395. {verifiers-0.1.15.dev441 → verifiers-0.1.15.dev442}/verifiers/v1/utils/__init__.py +0 -0
  396. {verifiers-0.1.15.dev441 → verifiers-0.1.15.dev442}/verifiers/v1/utils/aio.py +0 -0
  397. {verifiers-0.1.15.dev441 → verifiers-0.1.15.dev442}/verifiers/v1/utils/format.py +0 -0
  398. {verifiers-0.1.15.dev441 → verifiers-0.1.15.dev442}/verifiers/v1/utils/install.py +0 -0
  399. {verifiers-0.1.15.dev441 → verifiers-0.1.15.dev442}/verifiers/v1/utils/logging.py +0 -0
  400. {verifiers-0.1.15.dev441 → verifiers-0.1.15.dev442}/verifiers/v1/utils/memory.py +0 -0
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: verifiers
3
- Version: 0.1.15.dev441
3
+ Version: 0.1.15.dev442
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
@@ -231,15 +231,11 @@ def Progress(
231
231
  rollouts: list[Rollout],
232
232
  start: float,
233
233
  page: tuple[int, int] | None = None,
234
- finished: list[Trace] | None = None,
235
234
  ) -> Group:
236
- # On resume, `finished` holds the kept on-disk rollouts (reloaded as finished traces); count
237
- # them alongside this session's so progress, reward, err, and the breakdown cover the whole
238
- # run. `rollouts` is only this session's (owed) work, so the total adds the kept ones back.
239
- done = (finished or []) + [
240
- r.trace for r in rollouts if r.phase == Phase.DONE
241
- ] # fully scored
242
- total = len(finished or []) + len(rollouts)
235
+ # On resume, `rollouts` includes the previous session's kept rollouts (as `Finished`), so
236
+ # progress, reward, err, and the breakdown cover the whole run, not just this session's.
237
+ done = [r.trace for r in rollouts if r.phase == Phase.DONE] # fully scored
238
+ total = len(rollouts)
243
239
  # Headline reward = mean over non-errored; when any errored, `format_mean` appends the
244
240
  # global avg (errored count as 0) in parens. `err` is the share that errored.
245
241
  reward = format_mean(done, lambda t: t.reward)
@@ -594,7 +590,6 @@ def _render(
594
590
  config: EvalConfig,
595
591
  start: float,
596
592
  pager: Pager,
597
- finished: list[Trace] | None = None,
598
593
  push: "PushState | None" = None,
599
594
  ) -> Group:
600
595
  now = time.time()
@@ -606,7 +601,7 @@ def _render(
606
601
  # rows fill what's left; page through them (timer / arrows) when they'd overflow (else rich
607
602
  # truncates).
608
603
  footer = _push_footer(push)
609
- top = Group(header, Progress(rollouts, start, finished=finished), Rule(style="dim"))
604
+ top = Group(header, Progress(rollouts, start), Rule(style="dim"))
610
605
  reserved = len(_CONSOLE.render_lines(top))
611
606
  if footer is not None:
612
607
  reserved += len(_CONSOLE.render_lines(footer))
@@ -616,7 +611,6 @@ def _render(
616
611
  rollouts,
617
612
  start,
618
613
  page=(index + 1, count) if count > 1 else None,
619
- finished=finished,
620
614
  )
621
615
  parts = [
622
616
  header,
@@ -634,18 +628,17 @@ async def dashboard(
634
628
  rollouts: list[Rollout],
635
629
  config: EvalConfig,
636
630
  start: float,
637
- finished: list[Trace] | None = None,
638
631
  push: "PushState | None" = None,
639
632
  ):
640
633
  """Refresh the live eval view until the `with` block exits, then a final frame. Left/right
641
- arrows page through rollout rows when they overflow the screen. On resume, `finished` carries
642
- the kept on-disk rollouts (reloaded as finished traces) so the counts and scores cover the
643
- whole run, not just this session's re-run rollouts. `push` is the shared `--push` status the
644
- view renders as a line under the rollouts once the upload starts (dim -> white URL / red error),
645
- updated by the caller as the inline upload runs and lands."""
634
+ arrows page through rollout rows when they overflow the screen. On resume, `rollouts`
635
+ includes the previous session's kept rollouts (as finished ones), so the rows, counts, and
636
+ scores cover the whole run, not just this session's re-run rollouts. `push` is the shared
637
+ `--push` status the view renders as a line under the rollouts once the upload starts (dim ->
638
+ white URL / red error), updated by the caller as the inline upload runs and lands."""
646
639
  pager = Pager()
647
640
  async with live_view(
648
- lambda: _render(rollouts, config, start, pager, finished, push),
641
+ lambda: _render(rollouts, config, start, pager, push),
649
642
  on_key=pager.on_key,
650
643
  ):
651
644
  yield
@@ -0,0 +1,119 @@
1
+ """Resume an interrupted eval: reload its finished rollouts and run only the rest.
2
+
3
+ A run writes `config.toml` + `traces.jsonl` into its output dir. `--resume <dir>` reloads
4
+ that config verbatim (so it takes no other flags) and writes back into the same dir. `load`
5
+ brings the good saved rollouts back into memory and re-runs only what's still owed: the
6
+ *missing* rollouts (never written — the run was interrupted) and the *errored* ones (written
7
+ with an error; dropped and redone). The loaded traces rejoin the run everywhere — counted,
8
+ displayed, pushed, and printed alongside this session's — so a resumed run picks up exactly
9
+ where the interrupted one stopped. A group-scored taskset is resumed a whole task at a time
10
+ (its rollouts are scored together), so any task that isn't fully complete is redone from
11
+ scratch.
12
+ """
13
+
14
+ import json
15
+ import tomllib
16
+ from collections import defaultdict
17
+ from pathlib import Path
18
+
19
+ from pydantic_core import from_json
20
+
21
+ from verifiers.v1.cli.output import CONFIG_FILE, TRACES_FILE
22
+ from verifiers.v1.configs.eval import EvalConfig
23
+ from verifiers.v1.rollout import Phase, Rollout
24
+ from verifiers.v1.trace import Trace, WireTrace
25
+
26
+
27
+ def split_resume(argv: list[str]) -> tuple[Path | None, list[str]]:
28
+ """Pull `--resume <dir>` / `--resume=<dir>` out of argv, returning (dir, the other args).
29
+ The caller rejects any leftover args, since resume re-runs the saved config verbatim."""
30
+ for i, arg in enumerate(argv):
31
+ if arg == "--resume":
32
+ if i + 1 >= len(argv):
33
+ raise SystemExit(
34
+ "--resume needs an output dir: uv run eval --resume <dir>"
35
+ )
36
+ return Path(argv[i + 1]), argv[:i] + argv[i + 2 :]
37
+ if arg.startswith("--resume="):
38
+ return Path(arg.split("=", 1)[1]), argv[:i] + argv[i + 1 :]
39
+ return None, argv
40
+
41
+
42
+ def load_resume_config(resume_dir: Path) -> EvalConfig:
43
+ """Rebuild the run's `EvalConfig` from its saved `config.toml`, pointed back at its own
44
+ output dir so the resumed rollouts append to the same `traces.jsonl`."""
45
+ config_path = resume_dir / CONFIG_FILE
46
+ if not config_path.exists():
47
+ raise SystemExit(
48
+ f"--resume: no config.toml in {resume_dir} - not an eval output dir"
49
+ )
50
+ config = EvalConfig.model_validate(tomllib.loads(config_path.read_text()))
51
+ config.resume = resume_dir
52
+ config.output_dir = resume_dir
53
+ return config
54
+
55
+
56
+ class Finished(Rollout):
57
+ """A finished rollout reloaded from a previous session (see `load`): carries just the
58
+ surface the dashboard reads (`trace`/`task`/`phase`/`runtime`), so a resumed run's kept
59
+ rollouts render exactly like this session's."""
60
+
61
+ def __init__(self, trace: Trace) -> None:
62
+ self.trace = trace
63
+ self.task = trace.task
64
+ self.phase = Phase.DONE
65
+ self.runtime = None
66
+
67
+
68
+ def load(
69
+ resume_dir: Path, selected_idxs: list[int], num_rollouts: int, group: bool
70
+ ) -> tuple[list[Trace], dict[int, int]]:
71
+ """Load the good saved rollouts back into memory as finished traces and diff them against
72
+ the run's target (`num_rollouts` per selected task): returns (the kept traces, rollouts
73
+ owed per task idx). An errored trace is dropped and re-run; a group-scored task is kept
74
+ only if fully complete, else its whole group is redone. Rewrites `traces.jsonl` to just
75
+ the kept rows — verbatim, via a temp file + atomic rename, so an interrupted resume can't
76
+ corrupt the prior good results — and the resumed rollouts then append. `WireTrace` reads
77
+ any taskset's saved traces without importing it."""
78
+ path = resume_dir / TRACES_FILE
79
+ selected = set(selected_idxs)
80
+ good: dict[int, list[bytes]] = defaultdict(list)
81
+ if path.exists():
82
+ with path.open("rb") as results:
83
+ for line in results:
84
+ if not line.strip():
85
+ continue
86
+ try:
87
+ row = from_json(line)
88
+ except ValueError:
89
+ row = json.loads(line)
90
+ idx = row["task"]["idx"]
91
+ if (
92
+ idx in selected
93
+ and not row.get("errors")
94
+ and len(good[idx]) < num_rollouts
95
+ ):
96
+ good[idx].append(line if line.endswith(b"\n") else line + b"\n")
97
+ keep: list[bytes] = []
98
+ owed: dict[int, int] = {}
99
+ for idx in selected_idxs:
100
+ rows = good.get(idx, [])
101
+ if group and len(rows) < num_rollouts:
102
+ owed[idx] = num_rollouts # re-run the whole group; keep none of it
103
+ continue
104
+ keep.extend(rows)
105
+ if missing := num_rollouts - len(rows):
106
+ owed[idx] = missing
107
+ tmp = path.with_suffix(".jsonl.tmp")
108
+ tmp.write_bytes(b"".join(keep))
109
+ tmp.replace(path)
110
+ return [WireTrace.model_validate_json(line) for line in keep], owed
111
+
112
+
113
+ def nothing_to_resume_msg(resume_dir: Path, num_tasks: int, num_rollouts: int) -> str:
114
+ """The message shown (and then exit 0 - the run is already complete) when every selected
115
+ rollout already completed without error."""
116
+ return (
117
+ f"nothing to resume in {resume_dir}: all {num_tasks}x{num_rollouts} rollouts "
118
+ f"already completed without error"
119
+ )
@@ -37,26 +37,22 @@ async def run_eval(env: Environment, config: EvalConfig) -> list[Trace]:
37
37
  )
38
38
  out = output_path(config)
39
39
  # Write config.toml up front, then persist each trace as it completes (so the results are
40
- # durable mid-run, not only at the end). On resume, keep the saved config + good traces and
41
- # run only the owed rollouts. One lock serializes worker-thread appends from concurrent
42
- # rollouts while keeping large trace serialization off the event loop.
40
+ # durable mid-run, not only at the end). One lock serializes worker-thread appends from
41
+ # concurrent rollouts while keeping large trace serialization off the event loop.
43
42
  owed: dict[str, int] | None = None
44
- # On resume, the kept (good) on-disk rollouts, reloaded as finished traces so the live
45
- # dashboard counts the whole run (progress, reward, err, usage/time) rather than only this
46
- # session's re-run rollouts. Only the --rich dashboard reads them, so skip the load otherwise.
43
+ # On resume, the kept (good) on-disk rollouts rejoin the run as finished traces: displayed,
44
+ # returned, pushed, and printed alongside this session's, with only the owed rollouts re-run
45
+ # so the resumed run is indistinguishable from one that was never interrupted.
47
46
  finished: list[Trace] = []
48
47
  if config.resume is not None:
49
48
  group = bool(discover_decorated(env.taskset, "group_reward"))
50
- keep, owed = resume.plan(
49
+ finished, owed = resume.load(
51
50
  out, [t.idx for t in tasks], config.num_rollouts, group
52
51
  )
53
52
  if not owed: # already complete - report it and exit successfully
54
53
  print(resume.nothing_to_resume_msg(out, len(tasks), config.num_rollouts))
55
54
  raise SystemExit(0)
56
55
  tasks = [task for task in tasks if owed.get(task.idx)]
57
- resume.rewrite_results(out, keep)
58
- if config.rich:
59
- finished = resume.load_kept(out, env.taskset)
60
56
  logger.info(
61
57
  "resuming %s: %d task(s), %d rollout(s) owed",
62
58
  out,
@@ -88,7 +84,9 @@ async def run_eval(env: Environment, config: EvalConfig) -> list[Trace]:
88
84
  env.episode(task, ctx, n=owed[task.idx] if owed else config.num_rollouts)
89
85
  for task in tasks
90
86
  ]
91
- rollouts = [rollout for episode in episodes for rollout in episode.rollouts]
87
+ rollouts = [resume.Finished(trace) for trace in finished] + [
88
+ rollout for episode in episodes for rollout in episode.rollouts
89
+ ]
92
90
  # --push in the live dashboard: share a status the dashboard renders as a line under the
93
91
  # rollouts once the run finishes and the upload begins (dim -> green URL / red error), and
94
92
  # do the upload inline below so it resolves on screen. Only the rich path has a dashboard;
@@ -99,7 +97,7 @@ async def run_eval(env: Environment, config: EvalConfig) -> list[Trace]:
99
97
 
100
98
  push_state = PushState()
101
99
  display = (
102
- dashboard(rollouts, config, start, finished=finished, push=push_state)
100
+ dashboard(rollouts, config, start, push=push_state)
103
101
  if config.rich
104
102
  else contextlib.nullcontext()
105
103
  )
@@ -107,7 +105,9 @@ async def run_eval(env: Environment, config: EvalConfig) -> list[Trace]:
107
105
  results = await asyncio.gather(
108
106
  *(episode.run(semaphore, on_complete) for episode in episodes)
109
107
  )
110
- traces = [trace for episode_traces in results for trace in episode_traces]
108
+ traces = finished + [
109
+ trace for episode_traces in results for trace in episode_traces
110
+ ]
111
111
  if (
112
112
  push_state is not None
113
113
  ): # upload off the event loop so the view keeps refreshing
@@ -178,14 +178,14 @@ async def run_eval_server(config: EvalConfig) -> list[Trace]:
178
178
  if config.num_tasks is not None:
179
179
  idxs = idxs[: config.num_tasks]
180
180
  out = output_path(config)
181
+ finished: list[Trace] = []
181
182
  if config.resume is not None:
182
- keep, owed = resume.plan(
183
+ finished, owed = resume.load(
183
184
  out, idxs, config.num_rollouts, info.requires_group_scoring
184
185
  )
185
186
  if not owed: # already complete - report it and exit successfully
186
187
  print(resume.nothing_to_resume_msg(out, len(idxs), config.num_rollouts))
187
188
  raise SystemExit(0)
188
- resume.rewrite_results(out, keep)
189
189
  idxs = [idx for idx in idxs if owed.get(idx)]
190
190
  logger.info(
191
191
  "resuming %s: %d task(s), %d rollout(s) owed",
@@ -248,7 +248,7 @@ async def run_eval_server(config: EvalConfig) -> list[Trace]:
248
248
  units = [run_rollout_unit(i) for i in idxs for _ in range(owed[i])]
249
249
  results = await asyncio.gather(*units)
250
250
  await client.close()
251
- return [trace for unit_traces in results for trace in unit_traces]
251
+ return finished + [trace for unit_traces in results for trace in unit_traces]
252
252
  finally:
253
253
  proc.terminate()
254
254
  with contextlib.suppress(Exception):
@@ -1,138 +0,0 @@
1
- """Resume an interrupted eval: re-run only the rollouts a previous run didn't finish.
2
-
3
- A run writes `config.toml` + `traces.jsonl` into its output dir. `--resume <dir>` reloads
4
- that config verbatim (so it takes no other flags) and writes back into the same dir, running
5
- only the rollouts still owed: the *missing* ones (never written — the run was interrupted) and
6
- the *errored* ones (written with an error). Good rollouts are kept; errored ones are dropped
7
- and redone. A group-scored taskset is resumed a whole task at a time (its rollouts are scored
8
- together), so any task that isn't fully complete is redone from scratch.
9
- """
10
-
11
- import json
12
- import tomllib
13
- from collections import defaultdict
14
- from collections.abc import Iterator
15
- from pathlib import Path
16
-
17
- from pydantic_core import from_json
18
-
19
- from verifiers.v1.cli.output import CONFIG_FILE, TRACES_FILE, read_traces
20
- from verifiers.v1.configs.eval import EvalConfig
21
- from verifiers.v1.state import state_cls
22
- from verifiers.v1.task import WireTask
23
- from verifiers.v1.taskset import Taskset
24
- from verifiers.v1.trace import Trace
25
-
26
-
27
- def split_resume(argv: list[str]) -> tuple[Path | None, list[str]]:
28
- """Pull `--resume <dir>` / `--resume=<dir>` out of argv, returning (dir, the other args).
29
- The caller rejects any leftover args, since resume re-runs the saved config verbatim."""
30
- for i, arg in enumerate(argv):
31
- if arg == "--resume":
32
- if i + 1 >= len(argv):
33
- raise SystemExit(
34
- "--resume needs an output dir: uv run eval --resume <dir>"
35
- )
36
- return Path(argv[i + 1]), argv[:i] + argv[i + 2 :]
37
- if arg.startswith("--resume="):
38
- return Path(arg.split("=", 1)[1]), argv[:i] + argv[i + 1 :]
39
- return None, argv
40
-
41
-
42
- def load_resume_config(resume_dir: Path) -> EvalConfig:
43
- """Rebuild the run's `EvalConfig` from its saved `config.toml`, pointed back at its own
44
- output dir so the resumed rollouts append to the same `traces.jsonl`."""
45
- config_path = resume_dir / CONFIG_FILE
46
- if not config_path.exists():
47
- raise SystemExit(
48
- f"--resume: no config.toml in {resume_dir} - not an eval output dir"
49
- )
50
- config = EvalConfig.model_validate(tomllib.loads(config_path.read_text()))
51
- config.resume = resume_dir
52
- config.output_dir = resume_dir
53
- return config
54
-
55
-
56
- def _read_results(results_path: Path) -> Iterator[tuple[int, int, bool]]:
57
- """Stream `(file reference, task idx, errored)` without retaining decoded traces."""
58
- if not results_path.exists():
59
- return
60
- with results_path.open("rb") as results:
61
- while True:
62
- offset = results.tell()
63
- line = results.readline()
64
- if not line:
65
- break
66
- if line.strip():
67
- try:
68
- row = from_json(line)
69
- except ValueError:
70
- row = json.loads(line)
71
- yield offset, row["task"]["idx"], bool(row.get("errors"))
72
-
73
-
74
- def plan(
75
- resume_dir: Path, selected_idxs: list[int], num_rollouts: int, group: bool
76
- ) -> tuple[list[int], dict[int, int]]:
77
- """Diff the saved results against the run's target (`num_rollouts` per selected task).
78
- Returns (byte offsets of rows to keep, rollouts owed per task idx). An errored trace is
79
- dropped and re-run; a group-scored task is kept only if fully complete, else its whole group
80
- is redone."""
81
- # Retain only the offsets resume can reuse; trace payloads stay on disk.
82
- selected = set(selected_idxs)
83
- by_idx: dict[int, list[int]] = defaultdict(list)
84
- for offset, idx, errored in _read_results(resume_dir / TRACES_FILE):
85
- if idx in selected and not errored and len(by_idx[idx]) < num_rollouts:
86
- by_idx[idx].append(offset)
87
- keep: list[int] = []
88
- owed: dict[int, int] = {}
89
- for idx in selected_idxs:
90
- good = by_idx.get(idx, [])
91
- if group:
92
- if len(good) >= num_rollouts:
93
- keep.extend(good)
94
- else:
95
- owed[idx] = num_rollouts # re-run the whole group; keep none of it
96
- else:
97
- keep.extend(good)
98
- missing = num_rollouts - len(good)
99
- if missing:
100
- owed[idx] = missing
101
- return keep, owed
102
-
103
-
104
- def rewrite_results(resume_dir: Path, keep: list[int]) -> None:
105
- """Replace `traces.jsonl` with just the kept (good) traces; resumed rollouts append. Via a
106
- temp file + atomic rename, so an interrupted resume can't corrupt the prior good results."""
107
- path = resume_dir / TRACES_FILE
108
- tmp = path.with_suffix(".jsonl.tmp")
109
- if not keep:
110
- tmp.write_bytes(b"")
111
- tmp.replace(path)
112
- return
113
- # Re-read retained rows by offset while building the atomic replacement.
114
- with path.open("rb") as results, tmp.open("wb") as output:
115
- for offset in keep:
116
- results.seek(offset)
117
- raw = results.readline()
118
- output.write(raw)
119
- if not raw.endswith(b"\n"):
120
- output.write(b"\n")
121
- tmp.replace(path)
122
-
123
-
124
- def load_kept(resume_dir: Path, taskset: Taskset) -> list[Trace]:
125
- """Reload the kept (good) traces as finished `Trace`s, so a resumed run's live dashboard counts
126
- them toward the whole run (progress, reward, err, and the usage/time breakdown). Call *after*
127
- `rewrite_results`, which leaves only the kept rows on disk. `WireTask` reads any taskset's saved
128
- task without a runtime or its `Task` type (mirrors `replay`)."""
129
- return read_traces(resume_dir, Trace[WireTask, state_cls(type(taskset))])
130
-
131
-
132
- def nothing_to_resume_msg(resume_dir: Path, num_tasks: int, num_rollouts: int) -> str:
133
- """The message shown (and then exit 0 - the run is already complete) when every selected
134
- rollout already completed without error."""
135
- return (
136
- f"nothing to resume in {resume_dir}: all {num_tasks}x{num_rollouts} rollouts "
137
- f"already completed without error"
138
- )