verifiers 0.1.15.dev423__tar.gz → 0.1.15.dev425__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 (416) hide show
  1. {verifiers-0.1.15.dev423 → verifiers-0.1.15.dev425}/PKG-INFO +1 -1
  2. {verifiers-0.1.15.dev423 → verifiers-0.1.15.dev425}/pyproject.toml +1 -0
  3. {verifiers-0.1.15.dev423 → verifiers-0.1.15.dev425}/verifiers/v1/__init__.py +2 -2
  4. verifiers-0.1.15.dev425/verifiers/v1/cli/dashboard/replay.py +96 -0
  5. {verifiers-0.1.15.dev423 → verifiers-0.1.15.dev425}/verifiers/v1/cli/eval/runner.py +2 -2
  6. {verifiers-0.1.15.dev423 → verifiers-0.1.15.dev425}/verifiers/v1/cli/init.py +1 -1
  7. {verifiers-0.1.15.dev423 → verifiers-0.1.15.dev425}/verifiers/v1/cli/output.py +15 -0
  8. verifiers-0.1.15.dev425/verifiers/v1/cli/replay.py +183 -0
  9. {verifiers-0.1.15.dev423 → verifiers-0.1.15.dev425}/verifiers/v1/clients/__init__.py +2 -2
  10. {verifiers-0.1.15.dev423 → verifiers-0.1.15.dev425}/verifiers/v1/clients/client.py +3 -3
  11. verifiers-0.1.15.dev425/verifiers/v1/configs/replay.py +67 -0
  12. {verifiers-0.1.15.dev423 → verifiers-0.1.15.dev425}/verifiers/v1/env.py +2 -2
  13. {verifiers-0.1.15.dev423 → verifiers-0.1.15.dev425}/verifiers/v1/harness.py +3 -3
  14. {verifiers-0.1.15.dev423 → verifiers-0.1.15.dev425}/verifiers/v1/harnesses/codex/harness.py +2 -2
  15. {verifiers-0.1.15.dev423 → verifiers-0.1.15.dev425}/verifiers/v1/harnesses/default/harness.py +2 -2
  16. {verifiers-0.1.15.dev423 → verifiers-0.1.15.dev425}/verifiers/v1/harnesses/kimi_code/harness.py +2 -2
  17. {verifiers-0.1.15.dev423 → verifiers-0.1.15.dev425}/verifiers/v1/harnesses/mini_swe_agent/harness.py +2 -2
  18. {verifiers-0.1.15.dev423 → verifiers-0.1.15.dev425}/verifiers/v1/harnesses/null/harness.py +2 -2
  19. {verifiers-0.1.15.dev423 → verifiers-0.1.15.dev425}/verifiers/v1/harnesses/rlm/harness.py +2 -2
  20. {verifiers-0.1.15.dev423 → verifiers-0.1.15.dev425}/verifiers/v1/harnesses/terminus_2/harness.py +2 -2
  21. {verifiers-0.1.15.dev423 → verifiers-0.1.15.dev425}/verifiers/v1/interception/server.py +2 -2
  22. {verifiers-0.1.15.dev423 → verifiers-0.1.15.dev425}/verifiers/v1/rollout.py +2 -2
  23. {verifiers-0.1.15.dev423 → verifiers-0.1.15.dev425}/verifiers/v1/serve/server.py +4 -4
  24. {verifiers-0.1.15.dev423 → verifiers-0.1.15.dev425}/verifiers/v1/taskset.py +46 -6
  25. {verifiers-0.1.15.dev423 → verifiers-0.1.15.dev425}/.gitignore +0 -0
  26. {verifiers-0.1.15.dev423 → verifiers-0.1.15.dev425}/LICENSE +0 -0
  27. {verifiers-0.1.15.dev423 → verifiers-0.1.15.dev425}/README.md +0 -0
  28. {verifiers-0.1.15.dev423 → verifiers-0.1.15.dev425}/tests/AGENTS.md +0 -0
  29. {verifiers-0.1.15.dev423 → verifiers-0.1.15.dev425}/tests/README.md +0 -0
  30. {verifiers-0.1.15.dev423 → verifiers-0.1.15.dev425}/tests/__init__.py +0 -0
  31. {verifiers-0.1.15.dev423 → verifiers-0.1.15.dev425}/tests/conftest.py +0 -0
  32. {verifiers-0.1.15.dev423 → verifiers-0.1.15.dev425}/tests/test_browser_env.py +0 -0
  33. {verifiers-0.1.15.dev423 → verifiers-0.1.15.dev425}/tests/test_build_script.py +0 -0
  34. {verifiers-0.1.15.dev423 → verifiers-0.1.15.dev425}/tests/test_cli_agent_env.py +0 -0
  35. {verifiers-0.1.15.dev423 → verifiers-0.1.15.dev425}/tests/test_client_auth_errors.py +0 -0
  36. {verifiers-0.1.15.dev423 → verifiers-0.1.15.dev425}/tests/test_client_config.py +0 -0
  37. {verifiers-0.1.15.dev423 → verifiers-0.1.15.dev425}/tests/test_client_multimodal_types.py +0 -0
  38. {verifiers-0.1.15.dev423 → verifiers-0.1.15.dev425}/tests/test_composable_env.py +0 -0
  39. {verifiers-0.1.15.dev423 → verifiers-0.1.15.dev425}/tests/test_context_token_metrics.py +0 -0
  40. {verifiers-0.1.15.dev423 → verifiers-0.1.15.dev425}/tests/test_decorator_ranks.py +0 -0
  41. {verifiers-0.1.15.dev423 → verifiers-0.1.15.dev425}/tests/test_endpoint_registry.py +0 -0
  42. {verifiers-0.1.15.dev423 → verifiers-0.1.15.dev425}/tests/test_env_group.py +0 -0
  43. {verifiers-0.1.15.dev423 → verifiers-0.1.15.dev425}/tests/test_env_server.py +0 -0
  44. {verifiers-0.1.15.dev423 → verifiers-0.1.15.dev425}/tests/test_environment.py +0 -0
  45. {verifiers-0.1.15.dev423 → verifiers-0.1.15.dev425}/tests/test_environment_extra.py +0 -0
  46. {verifiers-0.1.15.dev423 → verifiers-0.1.15.dev425}/tests/test_envs.py +0 -0
  47. {verifiers-0.1.15.dev423 → verifiers-0.1.15.dev425}/tests/test_error_chain.py +0 -0
  48. {verifiers-0.1.15.dev423 → verifiers-0.1.15.dev425}/tests/test_eval_display.py +0 -0
  49. {verifiers-0.1.15.dev423 → verifiers-0.1.15.dev425}/tests/test_eval_utils.py +0 -0
  50. {verifiers-0.1.15.dev423 → verifiers-0.1.15.dev425}/tests/test_gepa_cli.py +0 -0
  51. {verifiers-0.1.15.dev423 → verifiers-0.1.15.dev425}/tests/test_gepa_utils.py +0 -0
  52. {verifiers-0.1.15.dev423 → verifiers-0.1.15.dev425}/tests/test_gym_env.py +0 -0
  53. {verifiers-0.1.15.dev423 → verifiers-0.1.15.dev425}/tests/test_harbor_env_mcp.py +0 -0
  54. {verifiers-0.1.15.dev423 → verifiers-0.1.15.dev425}/tests/test_imports.py +0 -0
  55. {verifiers-0.1.15.dev423 → verifiers-0.1.15.dev425}/tests/test_init_script.py +0 -0
  56. {verifiers-0.1.15.dev423 → verifiers-0.1.15.dev425}/tests/test_install_utils.py +0 -0
  57. {verifiers-0.1.15.dev423 → verifiers-0.1.15.dev425}/tests/test_interception_utils.py +0 -0
  58. {verifiers-0.1.15.dev423 → verifiers-0.1.15.dev425}/tests/test_logging.py +0 -0
  59. {verifiers-0.1.15.dev423 → verifiers-0.1.15.dev425}/tests/test_math_rubric.py +0 -0
  60. {verifiers-0.1.15.dev423 → verifiers-0.1.15.dev425}/tests/test_maybe_think_parser.py +0 -0
  61. {verifiers-0.1.15.dev423 → verifiers-0.1.15.dev425}/tests/test_message_utils.py +0 -0
  62. {verifiers-0.1.15.dev423 → verifiers-0.1.15.dev425}/tests/test_message_utils_multimodal.py +0 -0
  63. {verifiers-0.1.15.dev423 → verifiers-0.1.15.dev425}/tests/test_multiturn_env.py +0 -0
  64. {verifiers-0.1.15.dev423 → verifiers-0.1.15.dev425}/tests/test_nemorl_client.py +0 -0
  65. {verifiers-0.1.15.dev423 → verifiers-0.1.15.dev425}/tests/test_openai_chat_completions_token_client.py +0 -0
  66. {verifiers-0.1.15.dev423 → verifiers-0.1.15.dev425}/tests/test_openai_responses_client.py +0 -0
  67. {verifiers-0.1.15.dev423 → verifiers-0.1.15.dev425}/tests/test_opencode_rlm_env.py +0 -0
  68. {verifiers-0.1.15.dev423 → verifiers-0.1.15.dev425}/tests/test_openenv_client.py +0 -0
  69. {verifiers-0.1.15.dev423 → verifiers-0.1.15.dev425}/tests/test_parser.py +0 -0
  70. {verifiers-0.1.15.dev423 → verifiers-0.1.15.dev425}/tests/test_path_utils.py +0 -0
  71. {verifiers-0.1.15.dev423 → verifiers-0.1.15.dev425}/tests/test_per_turn_timing.py +0 -0
  72. {verifiers-0.1.15.dev423 → verifiers-0.1.15.dev425}/tests/test_pricing_utils.py +0 -0
  73. {verifiers-0.1.15.dev423 → verifiers-0.1.15.dev425}/tests/test_prime_plugin.py +0 -0
  74. {verifiers-0.1.15.dev423 → verifiers-0.1.15.dev425}/tests/test_renderer_client.py +0 -0
  75. {verifiers-0.1.15.dev423 → verifiers-0.1.15.dev425}/tests/test_renderer_e2e.py +0 -0
  76. {verifiers-0.1.15.dev423 → verifiers-0.1.15.dev425}/tests/test_rlm_composable_env.py +0 -0
  77. {verifiers-0.1.15.dev423 → verifiers-0.1.15.dev425}/tests/test_rubric.py +0 -0
  78. {verifiers-0.1.15.dev423 → verifiers-0.1.15.dev425}/tests/test_rubric_group.py +0 -0
  79. {verifiers-0.1.15.dev423 → verifiers-0.1.15.dev425}/tests/test_sandbox_debug_env.py +0 -0
  80. {verifiers-0.1.15.dev423 → verifiers-0.1.15.dev425}/tests/test_sandbox_env.py +0 -0
  81. {verifiers-0.1.15.dev423 → verifiers-0.1.15.dev425}/tests/test_sandbox_mixin.py +0 -0
  82. {verifiers-0.1.15.dev423 → verifiers-0.1.15.dev425}/tests/test_save_utils.py +0 -0
  83. {verifiers-0.1.15.dev423 → verifiers-0.1.15.dev425}/tests/test_setup_script.py +0 -0
  84. {verifiers-0.1.15.dev423 → verifiers-0.1.15.dev425}/tests/test_singleturn_env.py +0 -0
  85. {verifiers-0.1.15.dev423 → verifiers-0.1.15.dev425}/tests/test_stateful_tool_env.py +0 -0
  86. {verifiers-0.1.15.dev423 → verifiers-0.1.15.dev425}/tests/test_think_parser.py +0 -0
  87. {verifiers-0.1.15.dev423 → verifiers-0.1.15.dev425}/tests/test_tool_env.py +0 -0
  88. {verifiers-0.1.15.dev423 → verifiers-0.1.15.dev425}/tests/test_tool_utils.py +0 -0
  89. {verifiers-0.1.15.dev423 → verifiers-0.1.15.dev425}/tests/test_trajectory_processing.py +0 -0
  90. {verifiers-0.1.15.dev423 → verifiers-0.1.15.dev425}/tests/test_tui_info_formatting.py +0 -0
  91. {verifiers-0.1.15.dev423 → verifiers-0.1.15.dev425}/tests/test_types.py +0 -0
  92. {verifiers-0.1.15.dev423 → verifiers-0.1.15.dev425}/tests/test_wordle_env.py +0 -0
  93. {verifiers-0.1.15.dev423 → verifiers-0.1.15.dev425}/tests/test_xml_parser.py +0 -0
  94. {verifiers-0.1.15.dev423 → verifiers-0.1.15.dev425}/tests/v1/conftest.py +0 -0
  95. {verifiers-0.1.15.dev423 → verifiers-0.1.15.dev425}/tests/v1/fixtures/counter_tool_v1.py +0 -0
  96. {verifiers-0.1.15.dev423 → verifiers-0.1.15.dev425}/tests/v1/fixtures/echo_agentic_v1.py +0 -0
  97. {verifiers-0.1.15.dev423 → verifiers-0.1.15.dev425}/tests/v1/fixtures/echo_multi_v0.py +0 -0
  98. {verifiers-0.1.15.dev423 → verifiers-0.1.15.dev425}/tests/v1/fixtures/echo_tool_v1.py +0 -0
  99. {verifiers-0.1.15.dev423 → verifiers-0.1.15.dev425}/tests/v1/fixtures/echo_user_sim_v1.py +0 -0
  100. {verifiers-0.1.15.dev423 → verifiers-0.1.15.dev425}/tests/v1/fixtures/echo_v0.py +0 -0
  101. {verifiers-0.1.15.dev423 → verifiers-0.1.15.dev425}/tests/v1/fixtures/echo_v1.py +0 -0
  102. {verifiers-0.1.15.dev423 → verifiers-0.1.15.dev425}/tests/v1/fixtures/pyproject.toml +0 -0
  103. {verifiers-0.1.15.dev423 → verifiers-0.1.15.dev425}/tests/v1/fixtures/tool_response_image_v1.py +0 -0
  104. {verifiers-0.1.15.dev423 → verifiers-0.1.15.dev425}/tests/v1/test_color_codeword_tasks.py +0 -0
  105. {verifiers-0.1.15.dev423 → verifiers-0.1.15.dev425}/tests/v1/test_configs.py +0 -0
  106. {verifiers-0.1.15.dev423 → verifiers-0.1.15.dev425}/tests/v1/test_e2e.py +0 -0
  107. {verifiers-0.1.15.dev423 → verifiers-0.1.15.dev425}/tests/v1/test_envs.py +0 -0
  108. {verifiers-0.1.15.dev423 → verifiers-0.1.15.dev425}/tests/v1/test_graph.py +0 -0
  109. {verifiers-0.1.15.dev423 → verifiers-0.1.15.dev425}/tests/v1/test_judges.py +0 -0
  110. {verifiers-0.1.15.dev423 → verifiers-0.1.15.dev425}/tests/v1/test_legacy.py +0 -0
  111. {verifiers-0.1.15.dev423 → verifiers-0.1.15.dev425}/tests/v1/test_scoring.py +0 -0
  112. {verifiers-0.1.15.dev423 → verifiers-0.1.15.dev425}/tests/v1/test_trace.py +0 -0
  113. {verifiers-0.1.15.dev423 → verifiers-0.1.15.dev425}/verifiers/AGENTS.md +0 -0
  114. {verifiers-0.1.15.dev423 → verifiers-0.1.15.dev425}/verifiers/__init__.py +0 -0
  115. {verifiers-0.1.15.dev423 → verifiers-0.1.15.dev425}/verifiers/cli/__init__.py +0 -0
  116. {verifiers-0.1.15.dev423 → verifiers-0.1.15.dev425}/verifiers/cli/commands/__init__.py +0 -0
  117. {verifiers-0.1.15.dev423 → verifiers-0.1.15.dev425}/verifiers/cli/commands/build.py +0 -0
  118. {verifiers-0.1.15.dev423 → verifiers-0.1.15.dev425}/verifiers/cli/commands/eval.py +0 -0
  119. {verifiers-0.1.15.dev423 → verifiers-0.1.15.dev425}/verifiers/cli/commands/gepa.py +0 -0
  120. {verifiers-0.1.15.dev423 → verifiers-0.1.15.dev425}/verifiers/cli/commands/init.py +0 -0
  121. {verifiers-0.1.15.dev423 → verifiers-0.1.15.dev425}/verifiers/cli/commands/install.py +0 -0
  122. {verifiers-0.1.15.dev423 → verifiers-0.1.15.dev425}/verifiers/cli/commands/setup.py +0 -0
  123. {verifiers-0.1.15.dev423 → verifiers-0.1.15.dev425}/verifiers/cli/plugins/__init__.py +0 -0
  124. {verifiers-0.1.15.dev423 → verifiers-0.1.15.dev425}/verifiers/cli/plugins/prime.py +0 -0
  125. {verifiers-0.1.15.dev423 → verifiers-0.1.15.dev425}/verifiers/cli/tui.py +0 -0
  126. {verifiers-0.1.15.dev423 → verifiers-0.1.15.dev425}/verifiers/clients/__init__.py +0 -0
  127. {verifiers-0.1.15.dev423 → verifiers-0.1.15.dev425}/verifiers/clients/anthropic_messages_client.py +0 -0
  128. {verifiers-0.1.15.dev423 → verifiers-0.1.15.dev425}/verifiers/clients/client.py +0 -0
  129. {verifiers-0.1.15.dev423 → verifiers-0.1.15.dev425}/verifiers/clients/nemorl_chat_completions_client.py +0 -0
  130. {verifiers-0.1.15.dev423 → verifiers-0.1.15.dev425}/verifiers/clients/openai_chat_completions_client.py +0 -0
  131. {verifiers-0.1.15.dev423 → verifiers-0.1.15.dev425}/verifiers/clients/openai_chat_completions_token_client.py +0 -0
  132. {verifiers-0.1.15.dev423 → verifiers-0.1.15.dev425}/verifiers/clients/openai_completions_client.py +0 -0
  133. {verifiers-0.1.15.dev423 → verifiers-0.1.15.dev425}/verifiers/clients/openai_responses_client.py +0 -0
  134. {verifiers-0.1.15.dev423 → verifiers-0.1.15.dev425}/verifiers/clients/renderer_client.py +0 -0
  135. {verifiers-0.1.15.dev423 → verifiers-0.1.15.dev425}/verifiers/decorators.py +0 -0
  136. {verifiers-0.1.15.dev423 → verifiers-0.1.15.dev425}/verifiers/envs/AGENTS.md +0 -0
  137. {verifiers-0.1.15.dev423 → verifiers-0.1.15.dev425}/verifiers/envs/__init__.py +0 -0
  138. {verifiers-0.1.15.dev423 → verifiers-0.1.15.dev425}/verifiers/envs/env_group.py +0 -0
  139. {verifiers-0.1.15.dev423 → verifiers-0.1.15.dev425}/verifiers/envs/environment.py +0 -0
  140. {verifiers-0.1.15.dev423 → verifiers-0.1.15.dev425}/verifiers/envs/experimental/README.md +0 -0
  141. {verifiers-0.1.15.dev423 → verifiers-0.1.15.dev425}/verifiers/envs/experimental/__init__.py +0 -0
  142. {verifiers-0.1.15.dev423 → verifiers-0.1.15.dev425}/verifiers/envs/experimental/cli_agent_env.py +0 -0
  143. {verifiers-0.1.15.dev423 → verifiers-0.1.15.dev425}/verifiers/envs/experimental/composable/README.md +0 -0
  144. {verifiers-0.1.15.dev423 → verifiers-0.1.15.dev425}/verifiers/envs/experimental/composable/__init__.py +0 -0
  145. {verifiers-0.1.15.dev423 → verifiers-0.1.15.dev425}/verifiers/envs/experimental/composable/_filter.py +0 -0
  146. {verifiers-0.1.15.dev423 → verifiers-0.1.15.dev425}/verifiers/envs/experimental/composable/composable_env.py +0 -0
  147. {verifiers-0.1.15.dev423 → verifiers-0.1.15.dev425}/verifiers/envs/experimental/composable/harness.py +0 -0
  148. {verifiers-0.1.15.dev423 → verifiers-0.1.15.dev425}/verifiers/envs/experimental/composable/harnesses/__init__.py +0 -0
  149. {verifiers-0.1.15.dev423 → verifiers-0.1.15.dev425}/verifiers/envs/experimental/composable/harnesses/mini_swe_agent.py +0 -0
  150. {verifiers-0.1.15.dev423 → verifiers-0.1.15.dev425}/verifiers/envs/experimental/composable/harnesses/opencode.py +0 -0
  151. {verifiers-0.1.15.dev423 → verifiers-0.1.15.dev425}/verifiers/envs/experimental/composable/harnesses/prompt.txt +0 -0
  152. {verifiers-0.1.15.dev423 → verifiers-0.1.15.dev425}/verifiers/envs/experimental/composable/harnesses/rlm.py +0 -0
  153. {verifiers-0.1.15.dev423 → verifiers-0.1.15.dev425}/verifiers/envs/experimental/composable/sandbox_debug_env.py +0 -0
  154. {verifiers-0.1.15.dev423 → verifiers-0.1.15.dev425}/verifiers/envs/experimental/composable/swe_debug_env.py +0 -0
  155. {verifiers-0.1.15.dev423 → verifiers-0.1.15.dev425}/verifiers/envs/experimental/composable/task.py +0 -0
  156. {verifiers-0.1.15.dev423 → verifiers-0.1.15.dev425}/verifiers/envs/experimental/composable/tasksets/__init__.py +0 -0
  157. {verifiers-0.1.15.dev423 → verifiers-0.1.15.dev425}/verifiers/envs/experimental/composable/tasksets/cp/__init__.py +0 -0
  158. {verifiers-0.1.15.dev423 → verifiers-0.1.15.dev425}/verifiers/envs/experimental/composable/tasksets/cp/cp_task.py +0 -0
  159. {verifiers-0.1.15.dev423 → verifiers-0.1.15.dev425}/verifiers/envs/experimental/composable/tasksets/cp/test_utils.py +0 -0
  160. {verifiers-0.1.15.dev423 → verifiers-0.1.15.dev425}/verifiers/envs/experimental/composable/tasksets/harbor/__init__.py +0 -0
  161. {verifiers-0.1.15.dev423 → verifiers-0.1.15.dev425}/verifiers/envs/experimental/composable/tasksets/harbor/cli_gym.py +0 -0
  162. {verifiers-0.1.15.dev423 → verifiers-0.1.15.dev425}/verifiers/envs/experimental/composable/tasksets/harbor/harbor.py +0 -0
  163. {verifiers-0.1.15.dev423 → verifiers-0.1.15.dev425}/verifiers/envs/experimental/composable/tasksets/harbor/terminal_lego.py +0 -0
  164. {verifiers-0.1.15.dev423 → verifiers-0.1.15.dev425}/verifiers/envs/experimental/composable/tasksets/math/__init__.py +0 -0
  165. {verifiers-0.1.15.dev423 → verifiers-0.1.15.dev425}/verifiers/envs/experimental/composable/tasksets/math/math_task.py +0 -0
  166. {verifiers-0.1.15.dev423 → verifiers-0.1.15.dev425}/verifiers/envs/experimental/composable/tasksets/search/README.md +0 -0
  167. {verifiers-0.1.15.dev423 → verifiers-0.1.15.dev425}/verifiers/envs/experimental/composable/tasksets/search/__init__.py +0 -0
  168. {verifiers-0.1.15.dev423 → verifiers-0.1.15.dev425}/verifiers/envs/experimental/composable/tasksets/search/openseeker/README.md +0 -0
  169. {verifiers-0.1.15.dev423 → verifiers-0.1.15.dev425}/verifiers/envs/experimental/composable/tasksets/search/openseeker/__init__.py +0 -0
  170. {verifiers-0.1.15.dev423 → verifiers-0.1.15.dev425}/verifiers/envs/experimental/composable/tasksets/search/openseeker/taskset.py +0 -0
  171. {verifiers-0.1.15.dev423 → verifiers-0.1.15.dev425}/verifiers/envs/experimental/composable/tasksets/search/quest/README.md +0 -0
  172. {verifiers-0.1.15.dev423 → verifiers-0.1.15.dev425}/verifiers/envs/experimental/composable/tasksets/search/quest/__init__.py +0 -0
  173. {verifiers-0.1.15.dev423 → verifiers-0.1.15.dev425}/verifiers/envs/experimental/composable/tasksets/search/quest/obj_task_eval/__init__.py +0 -0
  174. {verifiers-0.1.15.dev423 → verifiers-0.1.15.dev425}/verifiers/envs/experimental/composable/tasksets/search/quest/obj_task_eval/api_tools/__init__.py +0 -0
  175. {verifiers-0.1.15.dev423 → verifiers-0.1.15.dev425}/verifiers/envs/experimental/composable/tasksets/search/quest/obj_task_eval/api_tools/tool_pdf.py +0 -0
  176. {verifiers-0.1.15.dev423 → verifiers-0.1.15.dev425}/verifiers/envs/experimental/composable/tasksets/search/quest/obj_task_eval/eval_toolkit.py +0 -0
  177. {verifiers-0.1.15.dev423 → verifiers-0.1.15.dev425}/verifiers/envs/experimental/composable/tasksets/search/quest/obj_task_eval/evaluator.py +0 -0
  178. {verifiers-0.1.15.dev423 → verifiers-0.1.15.dev425}/verifiers/envs/experimental/composable/tasksets/search/quest/obj_task_eval/llm_client/__init__.py +0 -0
  179. {verifiers-0.1.15.dev423 → verifiers-0.1.15.dev425}/verifiers/envs/experimental/composable/tasksets/search/quest/obj_task_eval/llm_client/base_client.py +0 -0
  180. {verifiers-0.1.15.dev423 → verifiers-0.1.15.dev425}/verifiers/envs/experimental/composable/tasksets/search/quest/obj_task_eval/prompts/__init__.py +0 -0
  181. {verifiers-0.1.15.dev423 → verifiers-0.1.15.dev425}/verifiers/envs/experimental/composable/tasksets/search/quest/obj_task_eval/prompts/cache_prompts.py +0 -0
  182. {verifiers-0.1.15.dev423 → verifiers-0.1.15.dev425}/verifiers/envs/experimental/composable/tasksets/search/quest/obj_task_eval/utils/__init__.py +0 -0
  183. {verifiers-0.1.15.dev423 → verifiers-0.1.15.dev425}/verifiers/envs/experimental/composable/tasksets/search/quest/obj_task_eval/utils/cache_filesys.py +0 -0
  184. {verifiers-0.1.15.dev423 → verifiers-0.1.15.dev425}/verifiers/envs/experimental/composable/tasksets/search/quest/obj_task_eval/utils/load_eval_script.py +0 -0
  185. {verifiers-0.1.15.dev423 → verifiers-0.1.15.dev425}/verifiers/envs/experimental/composable/tasksets/search/quest/obj_task_eval/utils/misc.py +0 -0
  186. {verifiers-0.1.15.dev423 → verifiers-0.1.15.dev425}/verifiers/envs/experimental/composable/tasksets/search/quest/obj_task_eval/utils/tool_visit.py +0 -0
  187. {verifiers-0.1.15.dev423 → verifiers-0.1.15.dev425}/verifiers/envs/experimental/composable/tasksets/search/quest/obj_task_eval/utils/url_tools.py +0 -0
  188. {verifiers-0.1.15.dev423 → verifiers-0.1.15.dev425}/verifiers/envs/experimental/composable/tasksets/search/quest/obj_task_eval/verification_tree.py +0 -0
  189. {verifiers-0.1.15.dev423 → verifiers-0.1.15.dev425}/verifiers/envs/experimental/composable/tasksets/search/quest/open_ended.py +0 -0
  190. {verifiers-0.1.15.dev423 → verifiers-0.1.15.dev425}/verifiers/envs/experimental/composable/tasksets/search/quest/taskset.py +0 -0
  191. {verifiers-0.1.15.dev423 → verifiers-0.1.15.dev425}/verifiers/envs/experimental/composable/tasksets/search/redsearcher/README.md +0 -0
  192. {verifiers-0.1.15.dev423 → verifiers-0.1.15.dev425}/verifiers/envs/experimental/composable/tasksets/search/redsearcher/__init__.py +0 -0
  193. {verifiers-0.1.15.dev423 → verifiers-0.1.15.dev425}/verifiers/envs/experimental/composable/tasksets/search/redsearcher/taskset.py +0 -0
  194. {verifiers-0.1.15.dev423 → verifiers-0.1.15.dev425}/verifiers/envs/experimental/composable/tasksets/search/search_tasksets.py +0 -0
  195. {verifiers-0.1.15.dev423 → verifiers-0.1.15.dev425}/verifiers/envs/experimental/composable/tasksets/swe/README.md +0 -0
  196. {verifiers-0.1.15.dev423 → verifiers-0.1.15.dev425}/verifiers/envs/experimental/composable/tasksets/swe/__init__.py +0 -0
  197. {verifiers-0.1.15.dev423 → verifiers-0.1.15.dev425}/verifiers/envs/experimental/composable/tasksets/swe/multi_swe/__init__.py +0 -0
  198. {verifiers-0.1.15.dev423 → verifiers-0.1.15.dev425}/verifiers/envs/experimental/composable/tasksets/swe/multi_swe/extract_fix_patch.sh +0 -0
  199. {verifiers-0.1.15.dev423 → verifiers-0.1.15.dev425}/verifiers/envs/experimental/composable/tasksets/swe/multi_swe/taskset.py +0 -0
  200. {verifiers-0.1.15.dev423 → verifiers-0.1.15.dev425}/verifiers/envs/experimental/composable/tasksets/swe/openswe/__init__.py +0 -0
  201. {verifiers-0.1.15.dev423 → verifiers-0.1.15.dev425}/verifiers/envs/experimental/composable/tasksets/swe/openswe/taskset.py +0 -0
  202. {verifiers-0.1.15.dev423 → verifiers-0.1.15.dev425}/verifiers/envs/experimental/composable/tasksets/swe/r2e_gym/__init__.py +0 -0
  203. {verifiers-0.1.15.dev423 → verifiers-0.1.15.dev425}/verifiers/envs/experimental/composable/tasksets/swe/r2e_gym/log_parser.py +0 -0
  204. {verifiers-0.1.15.dev423 → verifiers-0.1.15.dev425}/verifiers/envs/experimental/composable/tasksets/swe/r2e_gym/taskset.py +0 -0
  205. {verifiers-0.1.15.dev423 → verifiers-0.1.15.dev425}/verifiers/envs/experimental/composable/tasksets/swe/scale_swe/__init__.py +0 -0
  206. {verifiers-0.1.15.dev423 → verifiers-0.1.15.dev425}/verifiers/envs/experimental/composable/tasksets/swe/scale_swe/taskset.py +0 -0
  207. {verifiers-0.1.15.dev423 → verifiers-0.1.15.dev425}/verifiers/envs/experimental/composable/tasksets/swe/shared/__init__.py +0 -0
  208. {verifiers-0.1.15.dev423 → verifiers-0.1.15.dev425}/verifiers/envs/experimental/composable/tasksets/swe/shared/test_patch.py +0 -0
  209. {verifiers-0.1.15.dev423 → verifiers-0.1.15.dev425}/verifiers/envs/experimental/composable/tasksets/swe/swe_bench/__init__.py +0 -0
  210. {verifiers-0.1.15.dev423 → verifiers-0.1.15.dev425}/verifiers/envs/experimental/composable/tasksets/swe/swe_bench/taskset.py +0 -0
  211. {verifiers-0.1.15.dev423 → verifiers-0.1.15.dev425}/verifiers/envs/experimental/composable/tasksets/swe/swe_lego/__init__.py +0 -0
  212. {verifiers-0.1.15.dev423 → verifiers-0.1.15.dev425}/verifiers/envs/experimental/composable/tasksets/swe/swe_lego/taskset.py +0 -0
  213. {verifiers-0.1.15.dev423 → verifiers-0.1.15.dev425}/verifiers/envs/experimental/composable/tasksets/swe/swe_rebench_v2/__init__.py +0 -0
  214. {verifiers-0.1.15.dev423 → verifiers-0.1.15.dev425}/verifiers/envs/experimental/composable/tasksets/swe/swe_rebench_v2/log_parsers.py +0 -0
  215. {verifiers-0.1.15.dev423 → verifiers-0.1.15.dev425}/verifiers/envs/experimental/composable/tasksets/swe/swe_rebench_v2/taskset.py +0 -0
  216. {verifiers-0.1.15.dev423 → verifiers-0.1.15.dev425}/verifiers/envs/experimental/composable/tasksets/swe/swe_smith/__init__.py +0 -0
  217. {verifiers-0.1.15.dev423 → verifiers-0.1.15.dev425}/verifiers/envs/experimental/composable/tasksets/swe/swe_smith/taskset.py +0 -0
  218. {verifiers-0.1.15.dev423 → verifiers-0.1.15.dev425}/verifiers/envs/experimental/composable/tasksets/swe/swe_tasksets.py +0 -0
  219. {verifiers-0.1.15.dev423 → verifiers-0.1.15.dev425}/verifiers/envs/experimental/gym_env.py +0 -0
  220. {verifiers-0.1.15.dev423 → verifiers-0.1.15.dev425}/verifiers/envs/experimental/harbor_env/__init__.py +0 -0
  221. {verifiers-0.1.15.dev423 → verifiers-0.1.15.dev425}/verifiers/envs/experimental/harbor_env/env.py +0 -0
  222. {verifiers-0.1.15.dev423 → verifiers-0.1.15.dev425}/verifiers/envs/experimental/harbor_env/mcp.py +0 -0
  223. {verifiers-0.1.15.dev423 → verifiers-0.1.15.dev425}/verifiers/envs/experimental/mcp_env.py +0 -0
  224. {verifiers-0.1.15.dev423 → verifiers-0.1.15.dev425}/verifiers/envs/experimental/opencode_env.py +0 -0
  225. {verifiers-0.1.15.dev423 → verifiers-0.1.15.dev425}/verifiers/envs/experimental/opencode_qa_env.py +0 -0
  226. {verifiers-0.1.15.dev423 → verifiers-0.1.15.dev425}/verifiers/envs/experimental/opencode_rlm_env.py +0 -0
  227. {verifiers-0.1.15.dev423 → verifiers-0.1.15.dev425}/verifiers/envs/experimental/sandbox_mixin.py +0 -0
  228. {verifiers-0.1.15.dev423 → verifiers-0.1.15.dev425}/verifiers/envs/experimental/utils/__init__.py +0 -0
  229. {verifiers-0.1.15.dev423 → verifiers-0.1.15.dev425}/verifiers/envs/experimental/utils/file_locks.py +0 -0
  230. {verifiers-0.1.15.dev423 → verifiers-0.1.15.dev425}/verifiers/envs/experimental/utils/git_checkout_cache.py +0 -0
  231. {verifiers-0.1.15.dev423 → verifiers-0.1.15.dev425}/verifiers/envs/integrations/README.md +0 -0
  232. {verifiers-0.1.15.dev423 → verifiers-0.1.15.dev425}/verifiers/envs/integrations/__init__.py +0 -0
  233. {verifiers-0.1.15.dev423 → verifiers-0.1.15.dev425}/verifiers/envs/integrations/browser_env/README.md +0 -0
  234. {verifiers-0.1.15.dev423 → verifiers-0.1.15.dev425}/verifiers/envs/integrations/browser_env/__init__.py +0 -0
  235. {verifiers-0.1.15.dev423 → verifiers-0.1.15.dev425}/verifiers/envs/integrations/browser_env/browser_env.py +0 -0
  236. {verifiers-0.1.15.dev423 → verifiers-0.1.15.dev425}/verifiers/envs/integrations/browser_env/modes/__init__.py +0 -0
  237. {verifiers-0.1.15.dev423 → verifiers-0.1.15.dev425}/verifiers/envs/integrations/browser_env/modes/base.py +0 -0
  238. {verifiers-0.1.15.dev423 → verifiers-0.1.15.dev425}/verifiers/envs/integrations/browser_env/modes/cua_mode.py +0 -0
  239. {verifiers-0.1.15.dev423 → verifiers-0.1.15.dev425}/verifiers/envs/integrations/browser_env/modes/dom_mode.py +0 -0
  240. {verifiers-0.1.15.dev423 → verifiers-0.1.15.dev425}/verifiers/envs/integrations/openenv_env.py +0 -0
  241. {verifiers-0.1.15.dev423 → verifiers-0.1.15.dev425}/verifiers/envs/integrations/reasoninggym_env.py +0 -0
  242. {verifiers-0.1.15.dev423 → verifiers-0.1.15.dev425}/verifiers/envs/integrations/textarena_env.py +0 -0
  243. {verifiers-0.1.15.dev423 → verifiers-0.1.15.dev425}/verifiers/envs/multiturn_env.py +0 -0
  244. {verifiers-0.1.15.dev423 → verifiers-0.1.15.dev425}/verifiers/envs/python_env.py +0 -0
  245. {verifiers-0.1.15.dev423 → verifiers-0.1.15.dev425}/verifiers/envs/sandbox_env.py +0 -0
  246. {verifiers-0.1.15.dev423 → verifiers-0.1.15.dev425}/verifiers/envs/singleturn_env.py +0 -0
  247. {verifiers-0.1.15.dev423 → verifiers-0.1.15.dev425}/verifiers/envs/stateful_tool_env.py +0 -0
  248. {verifiers-0.1.15.dev423 → verifiers-0.1.15.dev425}/verifiers/envs/tool_env.py +0 -0
  249. {verifiers-0.1.15.dev423 → verifiers-0.1.15.dev425}/verifiers/errors.py +0 -0
  250. {verifiers-0.1.15.dev423 → verifiers-0.1.15.dev425}/verifiers/gepa/__init__.py +0 -0
  251. {verifiers-0.1.15.dev423 → verifiers-0.1.15.dev425}/verifiers/gepa/adapter.py +0 -0
  252. {verifiers-0.1.15.dev423 → verifiers-0.1.15.dev425}/verifiers/gepa/config.py +0 -0
  253. {verifiers-0.1.15.dev423 → verifiers-0.1.15.dev425}/verifiers/gepa/display.py +0 -0
  254. {verifiers-0.1.15.dev423 → verifiers-0.1.15.dev425}/verifiers/gepa/gepa_utils.py +0 -0
  255. {verifiers-0.1.15.dev423 → verifiers-0.1.15.dev425}/verifiers/parsers/__init__.py +0 -0
  256. {verifiers-0.1.15.dev423 → verifiers-0.1.15.dev425}/verifiers/parsers/maybe_think_parser.py +0 -0
  257. {verifiers-0.1.15.dev423 → verifiers-0.1.15.dev425}/verifiers/parsers/parser.py +0 -0
  258. {verifiers-0.1.15.dev423 → verifiers-0.1.15.dev425}/verifiers/parsers/think_parser.py +0 -0
  259. {verifiers-0.1.15.dev423 → verifiers-0.1.15.dev425}/verifiers/parsers/xml_parser.py +0 -0
  260. {verifiers-0.1.15.dev423 → verifiers-0.1.15.dev425}/verifiers/rl/README.md +0 -0
  261. {verifiers-0.1.15.dev423 → verifiers-0.1.15.dev425}/verifiers/rl/__init__.py +0 -0
  262. {verifiers-0.1.15.dev423 → verifiers-0.1.15.dev425}/verifiers/rl/inference/__init__.py +0 -0
  263. {verifiers-0.1.15.dev423 → verifiers-0.1.15.dev425}/verifiers/rl/inference/client.py +0 -0
  264. {verifiers-0.1.15.dev423 → verifiers-0.1.15.dev425}/verifiers/rl/inference/server.py +0 -0
  265. {verifiers-0.1.15.dev423 → verifiers-0.1.15.dev425}/verifiers/rl/trainer/__init__.py +0 -0
  266. {verifiers-0.1.15.dev423 → verifiers-0.1.15.dev425}/verifiers/rl/trainer/config.py +0 -0
  267. {verifiers-0.1.15.dev423 → verifiers-0.1.15.dev425}/verifiers/rl/trainer/orchestrator.py +0 -0
  268. {verifiers-0.1.15.dev423 → verifiers-0.1.15.dev425}/verifiers/rl/trainer/trainer.py +0 -0
  269. {verifiers-0.1.15.dev423 → verifiers-0.1.15.dev425}/verifiers/rl/trainer/utils.py +0 -0
  270. {verifiers-0.1.15.dev423 → verifiers-0.1.15.dev425}/verifiers/rubrics/__init__.py +0 -0
  271. {verifiers-0.1.15.dev423 → verifiers-0.1.15.dev425}/verifiers/rubrics/experimental/hybrid_math_rubric.py +0 -0
  272. {verifiers-0.1.15.dev423 → verifiers-0.1.15.dev425}/verifiers/rubrics/judge_rubric.py +0 -0
  273. {verifiers-0.1.15.dev423 → verifiers-0.1.15.dev425}/verifiers/rubrics/math_rubric.py +0 -0
  274. {verifiers-0.1.15.dev423 → verifiers-0.1.15.dev425}/verifiers/rubrics/rubric.py +0 -0
  275. {verifiers-0.1.15.dev423 → verifiers-0.1.15.dev425}/verifiers/rubrics/rubric_group.py +0 -0
  276. {verifiers-0.1.15.dev423 → verifiers-0.1.15.dev425}/verifiers/scripts/__init__.py +0 -0
  277. {verifiers-0.1.15.dev423 → verifiers-0.1.15.dev425}/verifiers/scripts/build.py +0 -0
  278. {verifiers-0.1.15.dev423 → verifiers-0.1.15.dev425}/verifiers/scripts/eval.py +0 -0
  279. {verifiers-0.1.15.dev423 → verifiers-0.1.15.dev425}/verifiers/scripts/gepa.py +0 -0
  280. {verifiers-0.1.15.dev423 → verifiers-0.1.15.dev425}/verifiers/scripts/init.py +0 -0
  281. {verifiers-0.1.15.dev423 → verifiers-0.1.15.dev425}/verifiers/scripts/install.py +0 -0
  282. {verifiers-0.1.15.dev423 → verifiers-0.1.15.dev425}/verifiers/scripts/rl.py +0 -0
  283. {verifiers-0.1.15.dev423 → verifiers-0.1.15.dev425}/verifiers/scripts/setup.py +0 -0
  284. {verifiers-0.1.15.dev423 → verifiers-0.1.15.dev425}/verifiers/scripts/train.py +0 -0
  285. {verifiers-0.1.15.dev423 → verifiers-0.1.15.dev425}/verifiers/scripts/tui.py +0 -0
  286. {verifiers-0.1.15.dev423 → verifiers-0.1.15.dev425}/verifiers/scripts/vllm.py +0 -0
  287. {verifiers-0.1.15.dev423 → verifiers-0.1.15.dev425}/verifiers/serve/__init__.py +0 -0
  288. {verifiers-0.1.15.dev423 → verifiers-0.1.15.dev425}/verifiers/serve/client/env_client.py +0 -0
  289. {verifiers-0.1.15.dev423 → verifiers-0.1.15.dev425}/verifiers/serve/client/zmq_env_client.py +0 -0
  290. {verifiers-0.1.15.dev423 → verifiers-0.1.15.dev425}/verifiers/serve/server/__init__.py +0 -0
  291. {verifiers-0.1.15.dev423 → verifiers-0.1.15.dev425}/verifiers/serve/server/env_router.py +0 -0
  292. {verifiers-0.1.15.dev423 → verifiers-0.1.15.dev425}/verifiers/serve/server/env_server.py +0 -0
  293. {verifiers-0.1.15.dev423 → verifiers-0.1.15.dev425}/verifiers/serve/server/env_worker.py +0 -0
  294. {verifiers-0.1.15.dev423 → verifiers-0.1.15.dev425}/verifiers/serve/server/zmq_env_server.py +0 -0
  295. {verifiers-0.1.15.dev423 → verifiers-0.1.15.dev425}/verifiers/serve/types.py +0 -0
  296. {verifiers-0.1.15.dev423 → verifiers-0.1.15.dev425}/verifiers/types.py +0 -0
  297. {verifiers-0.1.15.dev423 → verifiers-0.1.15.dev425}/verifiers/utils/__init__.py +0 -0
  298. {verifiers-0.1.15.dev423 → verifiers-0.1.15.dev425}/verifiers/utils/async_utils.py +0 -0
  299. {verifiers-0.1.15.dev423 → verifiers-0.1.15.dev425}/verifiers/utils/client_utils.py +0 -0
  300. {verifiers-0.1.15.dev423 → verifiers-0.1.15.dev425}/verifiers/utils/config_utils.py +0 -0
  301. {verifiers-0.1.15.dev423 → verifiers-0.1.15.dev425}/verifiers/utils/data_utils.py +0 -0
  302. {verifiers-0.1.15.dev423 → verifiers-0.1.15.dev425}/verifiers/utils/display_utils.py +0 -0
  303. {verifiers-0.1.15.dev423 → verifiers-0.1.15.dev425}/verifiers/utils/env_config_utils.py +0 -0
  304. {verifiers-0.1.15.dev423 → verifiers-0.1.15.dev425}/verifiers/utils/env_utils.py +0 -0
  305. {verifiers-0.1.15.dev423 → verifiers-0.1.15.dev425}/verifiers/utils/error_utils.py +0 -0
  306. {verifiers-0.1.15.dev423 → verifiers-0.1.15.dev425}/verifiers/utils/eval_display.py +0 -0
  307. {verifiers-0.1.15.dev423 → verifiers-0.1.15.dev425}/verifiers/utils/eval_utils.py +0 -0
  308. {verifiers-0.1.15.dev423 → verifiers-0.1.15.dev425}/verifiers/utils/heartbeat.py +0 -0
  309. {verifiers-0.1.15.dev423 → verifiers-0.1.15.dev425}/verifiers/utils/import_utils.py +0 -0
  310. {verifiers-0.1.15.dev423 → verifiers-0.1.15.dev425}/verifiers/utils/install_utils.py +0 -0
  311. {verifiers-0.1.15.dev423 → verifiers-0.1.15.dev425}/verifiers/utils/interception_utils.py +0 -0
  312. {verifiers-0.1.15.dev423 → verifiers-0.1.15.dev425}/verifiers/utils/logging_utils.py +0 -0
  313. {verifiers-0.1.15.dev423 → verifiers-0.1.15.dev425}/verifiers/utils/message_utils.py +0 -0
  314. {verifiers-0.1.15.dev423 → verifiers-0.1.15.dev425}/verifiers/utils/metric_utils.py +0 -0
  315. {verifiers-0.1.15.dev423 → verifiers-0.1.15.dev425}/verifiers/utils/path_utils.py +0 -0
  316. {verifiers-0.1.15.dev423 → verifiers-0.1.15.dev425}/verifiers/utils/pricing_utils.py +0 -0
  317. {verifiers-0.1.15.dev423 → verifiers-0.1.15.dev425}/verifiers/utils/process_utils.py +0 -0
  318. {verifiers-0.1.15.dev423 → verifiers-0.1.15.dev425}/verifiers/utils/response_utils.py +0 -0
  319. {verifiers-0.1.15.dev423 → verifiers-0.1.15.dev425}/verifiers/utils/save_utils.py +0 -0
  320. {verifiers-0.1.15.dev423 → verifiers-0.1.15.dev425}/verifiers/utils/serve_utils.py +0 -0
  321. {verifiers-0.1.15.dev423 → verifiers-0.1.15.dev425}/verifiers/utils/thread_utils.py +0 -0
  322. {verifiers-0.1.15.dev423 → verifiers-0.1.15.dev425}/verifiers/utils/threaded_sandbox_client.py +0 -0
  323. {verifiers-0.1.15.dev423 → verifiers-0.1.15.dev425}/verifiers/utils/tool_utils.py +0 -0
  324. {verifiers-0.1.15.dev423 → verifiers-0.1.15.dev425}/verifiers/utils/usage_utils.py +0 -0
  325. {verifiers-0.1.15.dev423 → verifiers-0.1.15.dev425}/verifiers/utils/version_utils.py +0 -0
  326. {verifiers-0.1.15.dev423 → verifiers-0.1.15.dev425}/verifiers/v1/ARCHITECTURE.md +0 -0
  327. {verifiers-0.1.15.dev423 → verifiers-0.1.15.dev425}/verifiers/v1/GUIDE.md +0 -0
  328. {verifiers-0.1.15.dev423 → verifiers-0.1.15.dev425}/verifiers/v1/README.md +0 -0
  329. {verifiers-0.1.15.dev423 → verifiers-0.1.15.dev425}/verifiers/v1/cli/__init__.py +0 -0
  330. {verifiers-0.1.15.dev423 → verifiers-0.1.15.dev425}/verifiers/v1/cli/dashboard/__init__.py +0 -0
  331. {verifiers-0.1.15.dev423 → verifiers-0.1.15.dev425}/verifiers/v1/cli/dashboard/base.py +0 -0
  332. {verifiers-0.1.15.dev423 → verifiers-0.1.15.dev425}/verifiers/v1/cli/dashboard/eval.py +0 -0
  333. {verifiers-0.1.15.dev423 → verifiers-0.1.15.dev425}/verifiers/v1/cli/dashboard/validate.py +0 -0
  334. {verifiers-0.1.15.dev423 → verifiers-0.1.15.dev425}/verifiers/v1/cli/debug.py +0 -0
  335. {verifiers-0.1.15.dev423 → verifiers-0.1.15.dev425}/verifiers/v1/cli/eval/__init__.py +0 -0
  336. {verifiers-0.1.15.dev423 → verifiers-0.1.15.dev425}/verifiers/v1/cli/eval/main.py +0 -0
  337. {verifiers-0.1.15.dev423 → verifiers-0.1.15.dev425}/verifiers/v1/cli/eval/resume.py +0 -0
  338. {verifiers-0.1.15.dev423 → verifiers-0.1.15.dev425}/verifiers/v1/cli/resolve.py +0 -0
  339. {verifiers-0.1.15.dev423 → verifiers-0.1.15.dev425}/verifiers/v1/cli/serve.py +0 -0
  340. {verifiers-0.1.15.dev423 → verifiers-0.1.15.dev425}/verifiers/v1/cli/validate.py +0 -0
  341. {verifiers-0.1.15.dev423 → verifiers-0.1.15.dev425}/verifiers/v1/clients/config.py +0 -0
  342. {verifiers-0.1.15.dev423 → verifiers-0.1.15.dev425}/verifiers/v1/clients/eval.py +0 -0
  343. {verifiers-0.1.15.dev423 → verifiers-0.1.15.dev425}/verifiers/v1/clients/train.py +0 -0
  344. {verifiers-0.1.15.dev423 → verifiers-0.1.15.dev425}/verifiers/v1/configs/__init__.py +0 -0
  345. {verifiers-0.1.15.dev423 → verifiers-0.1.15.dev425}/verifiers/v1/configs/debug.py +0 -0
  346. {verifiers-0.1.15.dev423 → verifiers-0.1.15.dev425}/verifiers/v1/configs/eval.py +0 -0
  347. {verifiers-0.1.15.dev423 → verifiers-0.1.15.dev425}/verifiers/v1/configs/init.py +0 -0
  348. {verifiers-0.1.15.dev423 → verifiers-0.1.15.dev425}/verifiers/v1/configs/serve.py +0 -0
  349. {verifiers-0.1.15.dev423 → verifiers-0.1.15.dev425}/verifiers/v1/configs/validate.py +0 -0
  350. {verifiers-0.1.15.dev423 → verifiers-0.1.15.dev425}/verifiers/v1/decorators.py +0 -0
  351. {verifiers-0.1.15.dev423 → verifiers-0.1.15.dev425}/verifiers/v1/dialects/__init__.py +0 -0
  352. {verifiers-0.1.15.dev423 → verifiers-0.1.15.dev425}/verifiers/v1/dialects/anthropic.py +0 -0
  353. {verifiers-0.1.15.dev423 → verifiers-0.1.15.dev425}/verifiers/v1/dialects/base.py +0 -0
  354. {verifiers-0.1.15.dev423 → verifiers-0.1.15.dev425}/verifiers/v1/dialects/chat.py +0 -0
  355. {verifiers-0.1.15.dev423 → verifiers-0.1.15.dev425}/verifiers/v1/dialects/responses.py +0 -0
  356. {verifiers-0.1.15.dev423 → verifiers-0.1.15.dev425}/verifiers/v1/episode.py +0 -0
  357. {verifiers-0.1.15.dev423 → verifiers-0.1.15.dev425}/verifiers/v1/errors.py +0 -0
  358. {verifiers-0.1.15.dev423 → verifiers-0.1.15.dev425}/verifiers/v1/graph.py +0 -0
  359. {verifiers-0.1.15.dev423 → verifiers-0.1.15.dev425}/verifiers/v1/harnesses/__init__.py +0 -0
  360. {verifiers-0.1.15.dev423 → verifiers-0.1.15.dev425}/verifiers/v1/harnesses/codex/__init__.py +0 -0
  361. {verifiers-0.1.15.dev423 → verifiers-0.1.15.dev425}/verifiers/v1/harnesses/default/__init__.py +0 -0
  362. {verifiers-0.1.15.dev423 → verifiers-0.1.15.dev425}/verifiers/v1/harnesses/default/program.py +0 -0
  363. {verifiers-0.1.15.dev423 → verifiers-0.1.15.dev425}/verifiers/v1/harnesses/kimi_code/__init__.py +0 -0
  364. {verifiers-0.1.15.dev423 → verifiers-0.1.15.dev425}/verifiers/v1/harnesses/mini_swe_agent/__init__.py +0 -0
  365. {verifiers-0.1.15.dev423 → verifiers-0.1.15.dev425}/verifiers/v1/harnesses/mini_swe_agent/program.py +0 -0
  366. {verifiers-0.1.15.dev423 → verifiers-0.1.15.dev425}/verifiers/v1/harnesses/null/__init__.py +0 -0
  367. {verifiers-0.1.15.dev423 → verifiers-0.1.15.dev425}/verifiers/v1/harnesses/null/program.py +0 -0
  368. {verifiers-0.1.15.dev423 → verifiers-0.1.15.dev425}/verifiers/v1/harnesses/rlm/__init__.py +0 -0
  369. {verifiers-0.1.15.dev423 → verifiers-0.1.15.dev425}/verifiers/v1/harnesses/terminus_2/__init__.py +0 -0
  370. {verifiers-0.1.15.dev423 → verifiers-0.1.15.dev425}/verifiers/v1/harnesses/terminus_2/program.py +0 -0
  371. {verifiers-0.1.15.dev423 → verifiers-0.1.15.dev425}/verifiers/v1/interception/__init__.py +0 -0
  372. {verifiers-0.1.15.dev423 → verifiers-0.1.15.dev425}/verifiers/v1/interception/pool.py +0 -0
  373. {verifiers-0.1.15.dev423 → verifiers-0.1.15.dev425}/verifiers/v1/judge.py +0 -0
  374. {verifiers-0.1.15.dev423 → verifiers-0.1.15.dev425}/verifiers/v1/judges/__init__.py +0 -0
  375. {verifiers-0.1.15.dev423 → verifiers-0.1.15.dev425}/verifiers/v1/judges/reference.py +0 -0
  376. {verifiers-0.1.15.dev423 → verifiers-0.1.15.dev425}/verifiers/v1/judges/reference.txt +0 -0
  377. {verifiers-0.1.15.dev423 → verifiers-0.1.15.dev425}/verifiers/v1/judges/rubric.py +0 -0
  378. {verifiers-0.1.15.dev423 → verifiers-0.1.15.dev425}/verifiers/v1/judges/rubric.txt +0 -0
  379. {verifiers-0.1.15.dev423 → verifiers-0.1.15.dev425}/verifiers/v1/legacy.py +0 -0
  380. {verifiers-0.1.15.dev423 → verifiers-0.1.15.dev425}/verifiers/v1/loaders.py +0 -0
  381. {verifiers-0.1.15.dev423 → verifiers-0.1.15.dev425}/verifiers/v1/mcp/__init__.py +0 -0
  382. {verifiers-0.1.15.dev423 → verifiers-0.1.15.dev425}/verifiers/v1/mcp/launch.py +0 -0
  383. {verifiers-0.1.15.dev423 → verifiers-0.1.15.dev425}/verifiers/v1/mcp/server.py +0 -0
  384. {verifiers-0.1.15.dev423 → verifiers-0.1.15.dev425}/verifiers/v1/mcp/toolset.py +0 -0
  385. {verifiers-0.1.15.dev423 → verifiers-0.1.15.dev425}/verifiers/v1/mcp/user.py +0 -0
  386. {verifiers-0.1.15.dev423 → verifiers-0.1.15.dev425}/verifiers/v1/retries.py +0 -0
  387. {verifiers-0.1.15.dev423 → verifiers-0.1.15.dev425}/verifiers/v1/runtimes/__init__.py +0 -0
  388. {verifiers-0.1.15.dev423 → verifiers-0.1.15.dev425}/verifiers/v1/runtimes/base.py +0 -0
  389. {verifiers-0.1.15.dev423 → verifiers-0.1.15.dev425}/verifiers/v1/runtimes/docker.py +0 -0
  390. {verifiers-0.1.15.dev423 → verifiers-0.1.15.dev425}/verifiers/v1/runtimes/limiters.py +0 -0
  391. {verifiers-0.1.15.dev423 → verifiers-0.1.15.dev425}/verifiers/v1/runtimes/modal.py +0 -0
  392. {verifiers-0.1.15.dev423 → verifiers-0.1.15.dev425}/verifiers/v1/runtimes/prime.py +0 -0
  393. {verifiers-0.1.15.dev423 → verifiers-0.1.15.dev425}/verifiers/v1/runtimes/subprocess.py +0 -0
  394. {verifiers-0.1.15.dev423 → verifiers-0.1.15.dev425}/verifiers/v1/scoring.py +0 -0
  395. {verifiers-0.1.15.dev423 → verifiers-0.1.15.dev425}/verifiers/v1/serve/__init__.py +0 -0
  396. {verifiers-0.1.15.dev423 → verifiers-0.1.15.dev425}/verifiers/v1/serve/client.py +0 -0
  397. {verifiers-0.1.15.dev423 → verifiers-0.1.15.dev425}/verifiers/v1/serve/pool.py +0 -0
  398. {verifiers-0.1.15.dev423 → verifiers-0.1.15.dev425}/verifiers/v1/serve/types.py +0 -0
  399. {verifiers-0.1.15.dev423 → verifiers-0.1.15.dev425}/verifiers/v1/state.py +0 -0
  400. {verifiers-0.1.15.dev423 → verifiers-0.1.15.dev425}/verifiers/v1/task.py +0 -0
  401. {verifiers-0.1.15.dev423 → verifiers-0.1.15.dev425}/verifiers/v1/tasksets/__init__.py +0 -0
  402. {verifiers-0.1.15.dev423 → verifiers-0.1.15.dev425}/verifiers/v1/tasksets/harbor/__init__.py +0 -0
  403. {verifiers-0.1.15.dev423 → verifiers-0.1.15.dev425}/verifiers/v1/tasksets/harbor/taskset.py +0 -0
  404. {verifiers-0.1.15.dev423 → verifiers-0.1.15.dev425}/verifiers/v1/tasksets/lean/__init__.py +0 -0
  405. {verifiers-0.1.15.dev423 → verifiers-0.1.15.dev425}/verifiers/v1/tasksets/lean/scoring.py +0 -0
  406. {verifiers-0.1.15.dev423 → verifiers-0.1.15.dev425}/verifiers/v1/tasksets/lean/taskset.py +0 -0
  407. {verifiers-0.1.15.dev423 → verifiers-0.1.15.dev425}/verifiers/v1/tasksets/textarena/__init__.py +0 -0
  408. {verifiers-0.1.15.dev423 → verifiers-0.1.15.dev425}/verifiers/v1/tasksets/textarena/taskset.py +0 -0
  409. {verifiers-0.1.15.dev423 → verifiers-0.1.15.dev425}/verifiers/v1/trace.py +0 -0
  410. {verifiers-0.1.15.dev423 → verifiers-0.1.15.dev425}/verifiers/v1/types.py +0 -0
  411. {verifiers-0.1.15.dev423 → verifiers-0.1.15.dev425}/verifiers/v1/utils/__init__.py +0 -0
  412. {verifiers-0.1.15.dev423 → verifiers-0.1.15.dev425}/verifiers/v1/utils/aio.py +0 -0
  413. {verifiers-0.1.15.dev423 → verifiers-0.1.15.dev425}/verifiers/v1/utils/format.py +0 -0
  414. {verifiers-0.1.15.dev423 → verifiers-0.1.15.dev425}/verifiers/v1/utils/install.py +0 -0
  415. {verifiers-0.1.15.dev423 → verifiers-0.1.15.dev425}/verifiers/v1/utils/logging.py +0 -0
  416. {verifiers-0.1.15.dev423 → verifiers-0.1.15.dev425}/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.dev423
3
+ Version: 0.1.15.dev425
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
@@ -167,6 +167,7 @@ vf-eval = "verifiers.scripts.eval:main"
167
167
  eval = "verifiers.v1.cli.eval.main:main"
168
168
  validate = "verifiers.v1.cli.validate:main"
169
169
  debug = "verifiers.v1.cli.debug:main"
170
+ replay = "verifiers.v1.cli.replay:main"
170
171
  serve = "verifiers.v1.cli.serve:main"
171
172
  init = "verifiers.v1.cli.init:main"
172
173
  vf-gepa = "verifiers.scripts.gepa:main"
@@ -12,7 +12,7 @@ from verifiers.v1.clients import (
12
12
  BaseClientConfig,
13
13
  Client,
14
14
  ClientConfig,
15
- RolloutContext,
15
+ ModelContext,
16
16
  resolve_client,
17
17
  )
18
18
  from verifiers.v1.decorators import group_reward, metric, reward, stop, tool
@@ -188,7 +188,7 @@ __all__ = [
188
188
  "BaseConfig",
189
189
  "Harness",
190
190
  "HarnessConfig",
191
- "RolloutContext",
191
+ "ModelContext",
192
192
  "Runtime",
193
193
  "RuntimeConfig",
194
194
  "ProgramResult",
@@ -0,0 +1,96 @@
1
+ """Live dashboard for `replay` — one row per trace being re-scored (pending → running → its
2
+ outcome), mirroring the validate view. Reuses `TaskProgress` and `live_view`."""
3
+
4
+ import contextlib
5
+ import time
6
+ from dataclasses import dataclass
7
+
8
+ from rich.console import Group
9
+ from rich.markup import escape
10
+ from rich.progress_bar import ProgressBar
11
+ from rich.rule import Rule
12
+ from rich.table import Table
13
+ from rich.text import Text
14
+
15
+ from verifiers.v1.cli.dashboard.base import live_view
16
+ from verifiers.v1.cli.dashboard.validate import TaskProgress
17
+ from verifiers.v1.utils.format import format_time
18
+
19
+
20
+ @dataclass
21
+ class ReplayProgress(TaskProgress):
22
+ """`TaskProgress` plus the re-score `detail` shown per row: the final reward when scored, or
23
+ the exception type when it errored."""
24
+
25
+ detail: str = ""
26
+
27
+
28
+ # Colors mirror the eval dashboard for shared states: pending=dim, running=cyan, scored=green
29
+ # (eval's "success"), error=red. `skipped` is replay-only (a rollout that errored → copied through).
30
+ _STYLE = {
31
+ "pending": "dim",
32
+ "running": "cyan",
33
+ "scored": "green",
34
+ "skipped": "blue",
35
+ "error": "red",
36
+ }
37
+ _MARK_WIDTH = max(len(state) for state in _STYLE)
38
+ _MARK = {state: escape(f"[{state:<{_MARK_WIDTH}}]") for state in _STYLE}
39
+ _DONE = ("scored", "error", "skipped")
40
+
41
+
42
+ def _render(
43
+ states: list[TaskProgress], taskset_name: str, source: str, out: str, start: float
44
+ ) -> Group:
45
+ done = [s for s in states if s.state in _DONE]
46
+ scored = sum(1 for s in done if s.state == "scored")
47
+ skipped = sum(1 for s in done if s.state == "skipped")
48
+ overview = Table.grid(padding=(0, 2))
49
+ overview.add_column(style="dim")
50
+ overview.add_column()
51
+ overview.add_row("replay", f"{taskset_name} · {source}")
52
+ overview.add_row("output", out)
53
+
54
+ stats = (
55
+ f" {len(done)}/{len(states)} · {format_time(time.time() - start)} · "
56
+ f"scored {scored} · failed {len(done) - scored - skipped} · skipped {skipped}"
57
+ )
58
+ progress = Table.grid()
59
+ progress.add_column()
60
+ progress.add_column()
61
+ progress.add_row(
62
+ ProgressBar(total=len(states) or 1, completed=len(done), width=32), Text(stats)
63
+ )
64
+
65
+ now = time.time()
66
+ rows = Table.grid(expand=True, padding=(0, 1))
67
+ rows.add_column(ratio=1, no_wrap=True)
68
+ rows.add_column(justify="right", no_wrap=True)
69
+ rows.add_column(justify="right", no_wrap=True)
70
+ for s in states:
71
+ if s.state == "pending": # show only in-flight/done rows (like eval/validate)
72
+ continue
73
+ label = f"name={s.name[:40]}" if s.name else f"idx={s.idx}"
74
+ parts = [
75
+ p
76
+ for p in (s.state if s.state in _DONE else "", getattr(s, "detail", ""))
77
+ if p
78
+ ]
79
+ result = " ".join(parts) + " ·" if parts else ""
80
+ elapsed = format_time((s.end or now) - s.start) if s.start else ""
81
+ rows.add_row(
82
+ f"{_MARK[s.state]} {label}",
83
+ result,
84
+ elapsed,
85
+ style=_STYLE[s.state],
86
+ )
87
+ return Group(overview, progress, Rule(style="dim"), rows)
88
+
89
+
90
+ @contextlib.asynccontextmanager
91
+ async def replay_dashboard(
92
+ states: list[TaskProgress], taskset_name: str, source: str, out: str, start: float
93
+ ):
94
+ """Refresh the live replay view until the `with` block exits, then a final frame."""
95
+ async with live_view(lambda: _render(states, taskset_name, source, out, start)):
96
+ yield
@@ -6,7 +6,7 @@ import logging
6
6
  import random
7
7
  import time
8
8
 
9
- from verifiers.v1.clients import RolloutContext, resolve_client
9
+ from verifiers.v1.clients import ModelContext, resolve_client
10
10
  from verifiers.v1.configs.eval import EvalConfig
11
11
  from verifiers.v1.cli.eval import resume
12
12
  from verifiers.v1.cli.dashboard import dashboard
@@ -29,7 +29,7 @@ async def run_eval(env: Environment, config: EvalConfig) -> list[Trace]:
29
29
  if config.shuffle:
30
30
  random.Random(_SHUFFLE_SEED).shuffle(tasks)
31
31
  tasks = tasks if config.num_tasks is None else tasks[: config.num_tasks]
32
- ctx = RolloutContext(client=client, model=config.model, sampling=config.sampling)
32
+ ctx = ModelContext(client=client, model=config.model, sampling=config.sampling)
33
33
  # One episode of `num_rollouts` rollouts per task; the shared semaphore bounds total
34
34
  # concurrent rollouts (across episodes), so group rewards still see their whole episode.
35
35
  semaphore = (
@@ -192,7 +192,7 @@ class {prefix}Harness(vf.Harness[{prefix}HarnessConfig]):
192
192
 
193
193
  async def launch(
194
194
  self,
195
- ctx: vf.RolloutContext,
195
+ ctx: vf.ModelContext,
196
196
  trace: vf.Trace,
197
197
  runtime: vf.Runtime,
198
198
  endpoint: str,
@@ -12,6 +12,7 @@ durable as they land rather than only at the end.
12
12
  """
13
13
 
14
14
  import asyncio
15
+ import json
15
16
  from pathlib import Path
16
17
 
17
18
  import tomli_w
@@ -58,6 +59,20 @@ def write_trace(results_dir: Path, trace: Trace) -> None:
58
59
  f.write(data + b"\n")
59
60
 
60
61
 
62
+ def read_traces(results_dir: Path, trace_type: type) -> list[Trace]:
63
+ """Load a run's saved traces from `results.jsonl`, typed as `trace_type` — the inverse of
64
+ `write_trace`. Used by `replay` to re-score finished rollouts (pass the taskset's typed
65
+ `Trace[...]`, or `Trace[WireTask, ...]` to read any taskset's traces without importing it).
66
+ Streams line-by-line so a large (multi-GB) results file isn't loaded into memory at once."""
67
+ adapter = TypeAdapter(trace_type)
68
+ traces: list[Trace] = []
69
+ with (results_dir / "results.jsonl").open(encoding="utf-8") as f:
70
+ for line in f:
71
+ if line.strip():
72
+ traces.append(adapter.validate_python(json.loads(line)))
73
+ return traces
74
+
75
+
61
76
  async def append_trace(results_dir: Path, trace: Trace, lock: asyncio.Lock) -> None:
62
77
  """Append one finished trace without blocking the event loop. The run's shared lock
63
78
  preserves whole-line ordering, and awaiting the worker preserves per-trace durability."""
@@ -0,0 +1,183 @@
1
+ """The replay entrypoint: `uv run replay <output-dir> [options] [@ file.toml]`.
2
+
3
+ Offline sibling of `eval`: loads a finished run's saved traces and re-runs **scoring only**, no
4
+ runtime. The run's own `config.toml` is the base; CLI flags / `@ file.toml` layer on top (e.g. a
5
+ different judge model). Signals needing a `runtime` (in-sandbox verifiers like a SWE `solved`
6
+ reward) are skipped and left as the source recorded them; config-plugged judges and trace-only
7
+ `@reward`/`@metric`s re-run. Rollouts that errored during generation (`stop_condition == "error"`)
8
+ were never scored by eval, so they're copied through unchanged rather than re-scored on a broken
9
+ transcript. `--num-rescores`/`-r` re-scores each trace N times to sample judge variance. Results go
10
+ to a fresh output dir, so the source run is never overwritten.
11
+ """
12
+
13
+ import asyncio
14
+ import contextlib
15
+ import logging
16
+ import signal
17
+ import sys
18
+ import time
19
+ import tomllib
20
+ from pathlib import Path
21
+
22
+ from pydantic_config import cli
23
+
24
+ import verifiers.v1 as vf
25
+ from verifiers.v1.cli.dashboard.replay import ReplayProgress, replay_dashboard
26
+ from verifiers.v1.cli.output import append_trace, read_traces, save_config, write_config
27
+ from verifiers.v1.configs.replay import ReplayConfig
28
+ from verifiers.v1.state import state_cls
29
+ from verifiers.v1.task import WireTask
30
+ from verifiers.v1.trace import Trace
31
+ from verifiers.v1.utils.logging import setup_logging
32
+
33
+ logger = logging.getLogger(__name__)
34
+
35
+ USAGE = (
36
+ "usage: uv run replay <output-dir> [options] [@ file.toml]\n"
37
+ " re-score a finished run's saved traces (judges + trace-only signals; no runtime)"
38
+ )
39
+
40
+
41
+ def _narrow(config_path: Path) -> type[ReplayConfig]:
42
+ """`ReplayConfig` with `taskset` narrowed to the saved run's taskset type, so the `cli()`
43
+ parse stays typed and CLI overrides of taskset fields validate (mirrors eval/validate)."""
44
+ data = tomllib.loads(config_path.read_text())
45
+ taskset_id = (data.get("taskset") or {}).get("id")
46
+ if not taskset_id:
47
+ return ReplayConfig
48
+ ftype = vf.taskset_config_type(taskset_id)
49
+ return type(
50
+ "ReplayConfig",
51
+ (ReplayConfig,),
52
+ {"__annotations__": {"taskset": ftype}, "taskset": ftype(id=taskset_id)},
53
+ )
54
+
55
+
56
+ def output_dir(config: ReplayConfig) -> Path:
57
+ """Where a replay writes: `--output-dir`, else a fresh `outputs/<taskset>--replay/<uuid>`."""
58
+ return config.output_dir or Path("outputs") / f"{config.name}--replay" / config.uuid
59
+
60
+
61
+ async def run_replay(config: ReplayConfig, source: Path, out: Path) -> list[Trace]:
62
+ logger.debug("replay config:\n%s", config.model_dump_json(indent=2))
63
+ taskset = vf.load_taskset(config.taskset)
64
+ # `WireTask` reads any taskset's saved task without a runtime or its Task type (see WireTask).
65
+ traces = read_traces(source, Trace[WireTask, state_cls(type(taskset))])
66
+ if config.num_traces is not None:
67
+ traces = traces[: config.num_traces]
68
+ # `num_rescores` re-scores each trace that many times, each on its own copy.
69
+ work = [t.model_copy(deep=True) for t in traces for _ in range(config.num_rescores)]
70
+
71
+ save_config(config, out)
72
+ logger.info(
73
+ "replay: re-scoring %d trace(s) x%d from %s -> %s",
74
+ len(traces),
75
+ config.num_rescores,
76
+ source,
77
+ out,
78
+ )
79
+ start = time.time()
80
+
81
+ sem = asyncio.Semaphore(config.max_concurrent) if config.max_concurrent else None
82
+ states = [ReplayProgress(idx=t.task.idx, name=t.task.name) for t in work]
83
+ lock = asyncio.Lock()
84
+
85
+ async def rescore(trace: Trace, st: ReplayProgress) -> None:
86
+ async with sem or contextlib.nullcontext():
87
+ st.start = time.time()
88
+ # A rollout that errored during generation was never scored by eval (its scoring phase
89
+ # never ran), so re-scoring would grade a broken/partial transcript. Copy it through
90
+ # unchanged, mirroring eval. A *scoring* error leaves `stop_condition` as the
91
+ # generation outcome, so those still re-score (the offline-recovery case).
92
+ if trace.stop_condition == "error":
93
+ st.state, st.detail, st.end = "skipped", "rollout errored", time.time()
94
+ else:
95
+ st.state = "running"
96
+ # Clear prior scores so a changed/removed judge leaves no stale (double-summed) entry.
97
+ if isinstance(trace.info, dict):
98
+ trace.info.pop("judge", None)
99
+ trace.rewards, trace.metrics, trace.extra_usage = {}, {}, []
100
+ try:
101
+ await taskset.score(trace)
102
+ st.state, st.detail = "scored", f"reward {trace.reward:.3f}"
103
+ except Exception as exc:
104
+ st.state, st.detail = "error", type(exc).__name__
105
+ trace.capture_error(
106
+ exc
107
+ ) # record the re-scoring failure on the trace
108
+ if not config.rich:
109
+ logger.warning(
110
+ "replay: scoring failed for task %s",
111
+ trace.task.idx,
112
+ exc_info=True,
113
+ )
114
+ st.end = time.time()
115
+ if not config.rich:
116
+ logger.info(
117
+ "idx=%s %s (%.1fs)", trace.task.idx, st.state, st.end - st.start
118
+ )
119
+ # Persist as each trace finishes (like eval), so an interrupted replay keeps its progress.
120
+ await append_trace(out, trace, lock)
121
+
122
+ display = (
123
+ replay_dashboard(states, config.name, str(source), str(out), start)
124
+ if config.rich
125
+ else contextlib.nullcontext()
126
+ )
127
+ async with display:
128
+ await asyncio.gather(*(rescore(t, s) for t, s in zip(work, states)))
129
+ logger.info("replay: done in %.1fs -> %s", time.time() - start, out)
130
+ return work
131
+
132
+
133
+ def main(argv: list[str] | None = None) -> None:
134
+ argv = list(sys.argv[1:]) if argv is None else list(argv)
135
+ if not argv or any(a in ("-h", "--help") for a in argv):
136
+ print(USAGE)
137
+ sys.argv = [sys.argv[0], "--help"]
138
+ cli(ReplayConfig) # full, typed pydantic-config option help
139
+ return
140
+ source = Path(argv.pop(0)) # the finished run dir to replay
141
+ config_path = source / "config.toml"
142
+ if not config_path.exists():
143
+ raise SystemExit(f"{USAGE}\nno config.toml in {source}")
144
+
145
+ # The saved run's config is the base; user flags / @ file.toml layer on top.
146
+ layered = ["@", str(config_path), *argv]
147
+ config_type = _narrow(config_path)
148
+ sys.argv = [sys.argv[0], *layered]
149
+ config = cli(config_type)
150
+ # Honor a user-set output_dir (via -o or an @ file); drop the *source* run's own output_dir
151
+ # so a replay always writes to a fresh dir and never back over the run it re-scores.
152
+ source_out = (tomllib.loads(config_path.read_text())).get("output_dir")
153
+ if config.output_dir is None or str(config.output_dir) == str(source_out):
154
+ config = config.model_copy(update={"output_dir": None})
155
+
156
+ out = output_dir(config)
157
+ if (
158
+ out.resolve() == source.resolve()
159
+ ): # never write back over the run being replayed
160
+ raise SystemExit(
161
+ f"replay: --output-dir must differ from the source run ({source}); "
162
+ "refusing to overwrite it"
163
+ )
164
+ level = "DEBUG" if config.verbose else "INFO"
165
+ if config.dry_run: # resolve + validate, write the config, and exit (no re-scoring)
166
+ setup_logging(level)
167
+ logger.info("wrote config to %s", write_config(config, out))
168
+ return
169
+
170
+ log_file = str(
171
+ out / "replay.log"
172
+ ) # tee the run's logs to its output dir, like eval
173
+ if config.rich: # the dashboard owns the screen, so keep logs off the console
174
+ setup_logging(level, log_file=log_file, console=False)
175
+ logging.lastResort = None
176
+ else:
177
+ setup_logging(level, log_file=log_file, console=True)
178
+ signal.signal(signal.SIGTERM, lambda *_: (_ for _ in ()).throw(KeyboardInterrupt()))
179
+ asyncio.run(run_replay(config, source, out))
180
+
181
+
182
+ if __name__ == "__main__":
183
+ main()
@@ -1,6 +1,6 @@
1
1
  """The client abstraction and its OpenAI-compatible + renderer implementations."""
2
2
 
3
- from verifiers.v1.clients.client import Client, RolloutContext
3
+ from verifiers.v1.clients.client import Client, ModelContext
4
4
  from verifiers.v1.clients.config import (
5
5
  BaseClientConfig,
6
6
  ClientConfig,
@@ -13,7 +13,7 @@ from verifiers.v1.clients.train import TrainClient
13
13
 
14
14
  __all__ = [
15
15
  "Client",
16
- "RolloutContext",
16
+ "ModelContext",
17
17
  "BaseClientConfig",
18
18
  "ClientConfig",
19
19
  "EvalClientConfig",
@@ -77,9 +77,9 @@ class Client(ABC):
77
77
 
78
78
 
79
79
  @dataclass(frozen=True)
80
- class RolloutContext:
81
- """The collaborators a single rollout needs (client + model + sampling), bundled
82
- so harnesses hold no rollout state. Built by the Environment."""
80
+ class ModelContext:
81
+ """The model-side collaborators a harness talks to (client + model + sampling),
82
+ bundled so harnesses hold no rollout state. Built by the Environment."""
83
83
 
84
84
  model: str
85
85
  client: Client
@@ -0,0 +1,67 @@
1
+ """The `ReplayConfig`: the config the `replay` CLI parses.
2
+
3
+ Replay re-scores a finished run's saved traces with no runtime, so it needs only a subset of
4
+ `EvalConfig` — the taskset (with its plugged judges) and a few run knobs. It carries no harness,
5
+ runtime, model, sampling, or pool. Its base is the replayed run's own `config.toml` (a full
6
+ `EvalConfig`), so `model_config` ignores the eval-only fields rather than rejecting them; CLI
7
+ flags / `@ file.toml` then layer overrides (e.g. re-judge with different judge settings).
8
+ """
9
+
10
+ from pathlib import Path
11
+ from uuid import uuid4
12
+
13
+ from pydantic import AliasChoices, ConfigDict, Field, SerializeAsAny, model_validator
14
+ from pydantic_config import BaseConfig
15
+
16
+ from verifiers.v1.taskset import TasksetConfig
17
+
18
+
19
+ class ReplayConfig(BaseConfig):
20
+ """A taskset (with its config-plugged judges) plus replay run knobs. The saved run's
21
+ `config.toml` is the base; its eval-only fields (harness, runtime, model, sampling, pool, …)
22
+ are ignored here — replay only re-runs scoring from the trace."""
23
+
24
+ model_config = ConfigDict(extra="ignore")
25
+
26
+ uuid: str = Field(default_factory=lambda: str(uuid4()), exclude=True)
27
+ """Auto-generated run id — the leaf of the output dir, so replays never overwrite."""
28
+ taskset: SerializeAsAny[TasksetConfig] = TasksetConfig()
29
+ """The taskset, selected by `--taskset.id` (narrowed to its config type). Its
30
+ `taskset.judges` are what replay re-runs; override them via `@ file.toml` / dotted flags."""
31
+ num_traces: int | None = Field(
32
+ None, validation_alias=AliasChoices("num_traces", "n")
33
+ )
34
+ """How many saved traces to re-score (None = all)."""
35
+ num_rescores: int = Field(1, validation_alias=AliasChoices("num_rescores", "r"))
36
+ """Re-score each selected trace this many times — e.g. to measure judge variance across
37
+ repeated gradings of the same trace. Named distinctly from eval's `num_rollouts` so the
38
+ replayed run's own `num_rollouts` (in the base `config.toml`) is ignored, not inherited."""
39
+ max_concurrent: int | None = Field(
40
+ 128, validation_alias=AliasChoices("max_concurrent", "c")
41
+ )
42
+ """Max traces re-scored (judge calls) in flight at once."""
43
+ verbose: bool = Field(False, validation_alias=AliasChoices("verbose", "v"))
44
+ """Log at debug level instead of the default info."""
45
+ dry_run: bool = False
46
+ """Resolve + validate the config and write it to the output dir, then exit (no re-scoring)."""
47
+ rich: bool = True
48
+ """Show a live dashboard (one row per trace) instead of per-trace log lines."""
49
+ output_dir: Path | None = Field(
50
+ None, validation_alias=AliasChoices("output_dir", "o")
51
+ )
52
+ """Where to write the re-scored run (config.toml + results.jsonl). None = a fresh per-run
53
+ dir under `outputs/<taskset>--replay/<uuid>` (so a replay never overwrites the source run)."""
54
+
55
+ @property
56
+ def name(self) -> str:
57
+ return self.taskset.name
58
+
59
+ @model_validator(mode="before")
60
+ @classmethod
61
+ def _resolve_taskset(cls, data):
62
+ """Narrow the generic `taskset` to its specific config type by `id` (mirrors
63
+ `ValidateConfig`), so `taskset.judges` and other taskset fields validate typed."""
64
+ from verifiers.v1.loaders import narrow_plugin_field, taskset_config_type
65
+
66
+ narrow_plugin_field(data, "taskset", taskset_config_type)
67
+ return data
@@ -19,7 +19,7 @@ from pydantic import Field, SerializeAsAny, model_validator
19
19
  from pydantic_config import BaseConfig
20
20
 
21
21
  from verifiers.v1.harness import HarnessConfig
22
- from verifiers.v1.clients import RolloutContext
22
+ from verifiers.v1.clients import ModelContext
23
23
  from verifiers.v1.decorators import discover_decorated
24
24
  from verifiers.v1.episode import Episode
25
25
  from verifiers.v1.types import ID
@@ -300,7 +300,7 @@ class Environment:
300
300
  self.harness.config.runtime, task, self._warned_resources
301
301
  )
302
302
 
303
- def episode(self, task: Task, ctx: RolloutContext, n: int = 1) -> Episode:
303
+ def episode(self, task: Task, ctx: ModelContext, n: int = 1) -> Episode:
304
304
  """Resolve `task` into a runnable episode of `n` rollouts: pick its runtime
305
305
  (image + resources) and its timeouts (cli/toml > task > default, None = no limit),
306
306
  build one `Rollout` per sample sharing them, and wrap them in an `Episode` (which
@@ -16,7 +16,7 @@ from typing import ClassVar, Generic, TypeVar
16
16
  from pydantic import Field
17
17
  from pydantic_config import BaseConfig
18
18
 
19
- from verifiers.v1.clients import RolloutContext
19
+ from verifiers.v1.clients import ModelContext
20
20
  from verifiers.v1.decorators import discover_decorated, invoke
21
21
  from verifiers.v1.errors import HarnessError, boundary
22
22
  from verifiers.v1.utils.install import env_name
@@ -131,7 +131,7 @@ class Harness(ABC, Generic[ConfigT]):
131
131
 
132
132
  async def run(
133
133
  self,
134
- ctx: RolloutContext,
134
+ ctx: ModelContext,
135
135
  trace: Trace,
136
136
  runtime: Runtime,
137
137
  endpoint: str,
@@ -176,7 +176,7 @@ class Harness(ABC, Generic[ConfigT]):
176
176
  @abstractmethod
177
177
  async def launch(
178
178
  self,
179
- ctx: RolloutContext,
179
+ ctx: ModelContext,
180
180
  trace: Trace,
181
181
  runtime: Runtime,
182
182
  endpoint: str,
@@ -10,7 +10,7 @@ session secret) is read from an env var.
10
10
  import logging
11
11
  import shlex
12
12
 
13
- from verifiers.v1.clients import RolloutContext
13
+ from verifiers.v1.clients import ModelContext
14
14
  from verifiers.v1.harness import Harness, HarnessConfig
15
15
  from verifiers.v1.runtimes import ProgramResult, Runtime
16
16
  from verifiers.v1.trace import Trace
@@ -65,7 +65,7 @@ class CodexHarness(Harness[CodexHarnessConfig]):
65
65
 
66
66
  async def launch(
67
67
  self,
68
- ctx: RolloutContext,
68
+ ctx: ModelContext,
69
69
  trace: Trace,
70
70
  runtime: Runtime,
71
71
  endpoint: str,
@@ -14,7 +14,7 @@ import os
14
14
  from pathlib import Path
15
15
 
16
16
  from verifiers.v1.harness import Harness, HarnessConfig
17
- from verifiers.v1.clients import RolloutContext
17
+ from verifiers.v1.clients import ModelContext
18
18
  from verifiers.v1.dialects.chat import message_to_wire
19
19
  from verifiers.v1.runtimes import ProgramResult, Runtime
20
20
  from verifiers.v1.trace import Trace
@@ -61,7 +61,7 @@ class DefaultHarness(Harness[DefaultHarnessConfig]):
61
61
 
62
62
  async def launch(
63
63
  self,
64
- ctx: RolloutContext,
64
+ ctx: ModelContext,
65
65
  trace: Trace,
66
66
  runtime: Runtime,
67
67
  endpoint: str,
@@ -9,7 +9,7 @@ import json
9
9
  import logging
10
10
  import shlex
11
11
 
12
- from verifiers.v1.clients import RolloutContext
12
+ from verifiers.v1.clients import ModelContext
13
13
  from verifiers.v1.harness import Harness, HarnessConfig
14
14
  from verifiers.v1.runtimes import ProgramResult, Runtime
15
15
  from verifiers.v1.trace import Trace
@@ -64,7 +64,7 @@ class KimiCodeHarness(Harness[KimiCodeHarnessConfig]):
64
64
 
65
65
  async def launch(
66
66
  self,
67
- ctx: RolloutContext,
67
+ ctx: ModelContext,
68
68
  trace: Trace,
69
69
  runtime: Runtime,
70
70
  endpoint: str,
@@ -2,7 +2,7 @@
2
2
 
3
3
  from pathlib import Path
4
4
 
5
- from verifiers.v1.clients import RolloutContext
5
+ from verifiers.v1.clients import ModelContext
6
6
  from verifiers.v1.harness import Harness, HarnessConfig
7
7
  from verifiers.v1.runtimes import ProgramResult, Runtime
8
8
  from verifiers.v1.trace import Trace
@@ -27,7 +27,7 @@ class MiniSWEAgentHarness(Harness[MiniSWEAgentHarnessConfig]):
27
27
 
28
28
  async def launch(
29
29
  self,
30
- ctx: RolloutContext,
30
+ ctx: ModelContext,
31
31
  trace: Trace,
32
32
  runtime: Runtime,
33
33
  endpoint: str,
@@ -11,7 +11,7 @@ import json
11
11
  from pathlib import Path
12
12
 
13
13
  from verifiers.v1.harness import Harness, HarnessConfig
14
- from verifiers.v1.clients import RolloutContext
14
+ from verifiers.v1.clients import ModelContext
15
15
  from verifiers.v1.dialects.chat import message_to_wire
16
16
  from verifiers.v1.runtimes import ProgramResult, Runtime
17
17
  from verifiers.v1.trace import Trace
@@ -35,7 +35,7 @@ class NullHarness(Harness[NullHarnessConfig]):
35
35
 
36
36
  async def launch(
37
37
  self,
38
- ctx: RolloutContext,
38
+ ctx: ModelContext,
39
39
  trace: Trace,
40
40
  runtime: Runtime,
41
41
  endpoint: str,
@@ -18,7 +18,7 @@ from typing import Literal
18
18
  from pydantic import model_validator
19
19
 
20
20
  from verifiers.v1.harness import Harness, HarnessConfig
21
- from verifiers.v1.clients import RolloutContext
21
+ from verifiers.v1.clients import ModelContext
22
22
  from verifiers.v1.decorators import metric
23
23
  from verifiers.v1.runtimes import ProgramResult, Runtime
24
24
  from verifiers.v1.trace import Trace
@@ -115,7 +115,7 @@ class RLMHarness(Harness[RLMHarnessConfig]):
115
115
 
116
116
  async def launch(
117
117
  self,
118
- ctx: RolloutContext,
118
+ ctx: ModelContext,
119
119
  trace: Trace,
120
120
  runtime: Runtime,
121
121
  endpoint: str,
@@ -3,7 +3,7 @@
3
3
  import logging
4
4
  from pathlib import Path
5
5
 
6
- from verifiers.v1.clients import RolloutContext
6
+ from verifiers.v1.clients import ModelContext
7
7
  from verifiers.v1.harness import Harness, HarnessConfig
8
8
  from verifiers.v1.runtimes import ProgramResult, Runtime
9
9
  from verifiers.v1.trace import Trace
@@ -39,7 +39,7 @@ class Terminus2Harness(Harness[Terminus2HarnessConfig]):
39
39
 
40
40
  async def launch(
41
41
  self,
42
- ctx: RolloutContext,
42
+ ctx: ModelContext,
43
43
  trace: Trace,
44
44
  runtime: Runtime,
45
45
  endpoint: str,