verifiers 0.1.15.dev435__tar.gz → 0.1.15.dev437__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 (404) hide show
  1. {verifiers-0.1.15.dev435 → verifiers-0.1.15.dev437}/PKG-INFO +1 -1
  2. {verifiers-0.1.15.dev435 → verifiers-0.1.15.dev437}/verifiers/v1/ARCHITECTURE.md +1 -1
  3. {verifiers-0.1.15.dev435 → verifiers-0.1.15.dev437}/verifiers/v1/GUIDE.md +4 -4
  4. {verifiers-0.1.15.dev435 → verifiers-0.1.15.dev437}/verifiers/v1/cli/dashboard/eval.py +40 -8
  5. {verifiers-0.1.15.dev435 → verifiers-0.1.15.dev437}/verifiers/v1/cli/eval/main.py +4 -0
  6. {verifiers-0.1.15.dev435 → verifiers-0.1.15.dev437}/verifiers/v1/cli/eval/resume.py +7 -7
  7. {verifiers-0.1.15.dev435 → verifiers-0.1.15.dev437}/verifiers/v1/cli/eval/runner.py +19 -3
  8. {verifiers-0.1.15.dev435 → verifiers-0.1.15.dev437}/verifiers/v1/cli/output.py +15 -11
  9. {verifiers-0.1.15.dev435 → verifiers-0.1.15.dev437}/verifiers/v1/cli/replay.py +8 -2
  10. {verifiers-0.1.15.dev435 → verifiers-0.1.15.dev437}/verifiers/v1/configs/debug.py +1 -1
  11. {verifiers-0.1.15.dev435 → verifiers-0.1.15.dev437}/verifiers/v1/configs/eval.py +5 -1
  12. {verifiers-0.1.15.dev435 → verifiers-0.1.15.dev437}/verifiers/v1/configs/replay.py +1 -1
  13. {verifiers-0.1.15.dev435 → verifiers-0.1.15.dev437}/verifiers/v1/legacy.py +1 -1
  14. verifiers-0.1.15.dev437/verifiers/v1/push.py +209 -0
  15. {verifiers-0.1.15.dev435 → verifiers-0.1.15.dev437}/verifiers/v1/state.py +1 -1
  16. {verifiers-0.1.15.dev435 → verifiers-0.1.15.dev437}/verifiers/v1/trace.py +3 -3
  17. {verifiers-0.1.15.dev435 → verifiers-0.1.15.dev437}/.gitignore +0 -0
  18. {verifiers-0.1.15.dev435 → verifiers-0.1.15.dev437}/LICENSE +0 -0
  19. {verifiers-0.1.15.dev435 → verifiers-0.1.15.dev437}/README.md +0 -0
  20. {verifiers-0.1.15.dev435 → verifiers-0.1.15.dev437}/pyproject.toml +0 -0
  21. {verifiers-0.1.15.dev435 → verifiers-0.1.15.dev437}/tests/AGENTS.md +0 -0
  22. {verifiers-0.1.15.dev435 → verifiers-0.1.15.dev437}/tests/README.md +0 -0
  23. {verifiers-0.1.15.dev435 → verifiers-0.1.15.dev437}/tests/__init__.py +0 -0
  24. {verifiers-0.1.15.dev435 → verifiers-0.1.15.dev437}/tests/conftest.py +0 -0
  25. {verifiers-0.1.15.dev435 → verifiers-0.1.15.dev437}/tests/test_browser_env.py +0 -0
  26. {verifiers-0.1.15.dev435 → verifiers-0.1.15.dev437}/tests/test_build_script.py +0 -0
  27. {verifiers-0.1.15.dev435 → verifiers-0.1.15.dev437}/tests/test_cli_agent_env.py +0 -0
  28. {verifiers-0.1.15.dev435 → verifiers-0.1.15.dev437}/tests/test_client_auth_errors.py +0 -0
  29. {verifiers-0.1.15.dev435 → verifiers-0.1.15.dev437}/tests/test_client_config.py +0 -0
  30. {verifiers-0.1.15.dev435 → verifiers-0.1.15.dev437}/tests/test_client_multimodal_types.py +0 -0
  31. {verifiers-0.1.15.dev435 → verifiers-0.1.15.dev437}/tests/test_composable_env.py +0 -0
  32. {verifiers-0.1.15.dev435 → verifiers-0.1.15.dev437}/tests/test_context_token_metrics.py +0 -0
  33. {verifiers-0.1.15.dev435 → verifiers-0.1.15.dev437}/tests/test_decorator_ranks.py +0 -0
  34. {verifiers-0.1.15.dev435 → verifiers-0.1.15.dev437}/tests/test_endpoint_registry.py +0 -0
  35. {verifiers-0.1.15.dev435 → verifiers-0.1.15.dev437}/tests/test_env_group.py +0 -0
  36. {verifiers-0.1.15.dev435 → verifiers-0.1.15.dev437}/tests/test_env_server.py +0 -0
  37. {verifiers-0.1.15.dev435 → verifiers-0.1.15.dev437}/tests/test_environment.py +0 -0
  38. {verifiers-0.1.15.dev435 → verifiers-0.1.15.dev437}/tests/test_environment_extra.py +0 -0
  39. {verifiers-0.1.15.dev435 → verifiers-0.1.15.dev437}/tests/test_envs.py +0 -0
  40. {verifiers-0.1.15.dev435 → verifiers-0.1.15.dev437}/tests/test_error_chain.py +0 -0
  41. {verifiers-0.1.15.dev435 → verifiers-0.1.15.dev437}/tests/test_eval_display.py +0 -0
  42. {verifiers-0.1.15.dev435 → verifiers-0.1.15.dev437}/tests/test_eval_utils.py +0 -0
  43. {verifiers-0.1.15.dev435 → verifiers-0.1.15.dev437}/tests/test_gepa_cli.py +0 -0
  44. {verifiers-0.1.15.dev435 → verifiers-0.1.15.dev437}/tests/test_gepa_utils.py +0 -0
  45. {verifiers-0.1.15.dev435 → verifiers-0.1.15.dev437}/tests/test_gym_env.py +0 -0
  46. {verifiers-0.1.15.dev435 → verifiers-0.1.15.dev437}/tests/test_harbor_env_mcp.py +0 -0
  47. {verifiers-0.1.15.dev435 → verifiers-0.1.15.dev437}/tests/test_imports.py +0 -0
  48. {verifiers-0.1.15.dev435 → verifiers-0.1.15.dev437}/tests/test_init_script.py +0 -0
  49. {verifiers-0.1.15.dev435 → verifiers-0.1.15.dev437}/tests/test_install_utils.py +0 -0
  50. {verifiers-0.1.15.dev435 → verifiers-0.1.15.dev437}/tests/test_interception_utils.py +0 -0
  51. {verifiers-0.1.15.dev435 → verifiers-0.1.15.dev437}/tests/test_logging.py +0 -0
  52. {verifiers-0.1.15.dev435 → verifiers-0.1.15.dev437}/tests/test_math_rubric.py +0 -0
  53. {verifiers-0.1.15.dev435 → verifiers-0.1.15.dev437}/tests/test_maybe_think_parser.py +0 -0
  54. {verifiers-0.1.15.dev435 → verifiers-0.1.15.dev437}/tests/test_message_utils.py +0 -0
  55. {verifiers-0.1.15.dev435 → verifiers-0.1.15.dev437}/tests/test_message_utils_multimodal.py +0 -0
  56. {verifiers-0.1.15.dev435 → verifiers-0.1.15.dev437}/tests/test_multiturn_env.py +0 -0
  57. {verifiers-0.1.15.dev435 → verifiers-0.1.15.dev437}/tests/test_nemorl_client.py +0 -0
  58. {verifiers-0.1.15.dev435 → verifiers-0.1.15.dev437}/tests/test_openai_chat_completions_token_client.py +0 -0
  59. {verifiers-0.1.15.dev435 → verifiers-0.1.15.dev437}/tests/test_openai_responses_client.py +0 -0
  60. {verifiers-0.1.15.dev435 → verifiers-0.1.15.dev437}/tests/test_opencode_rlm_env.py +0 -0
  61. {verifiers-0.1.15.dev435 → verifiers-0.1.15.dev437}/tests/test_openenv_client.py +0 -0
  62. {verifiers-0.1.15.dev435 → verifiers-0.1.15.dev437}/tests/test_parser.py +0 -0
  63. {verifiers-0.1.15.dev435 → verifiers-0.1.15.dev437}/tests/test_path_utils.py +0 -0
  64. {verifiers-0.1.15.dev435 → verifiers-0.1.15.dev437}/tests/test_per_turn_timing.py +0 -0
  65. {verifiers-0.1.15.dev435 → verifiers-0.1.15.dev437}/tests/test_pricing_utils.py +0 -0
  66. {verifiers-0.1.15.dev435 → verifiers-0.1.15.dev437}/tests/test_prime_plugin.py +0 -0
  67. {verifiers-0.1.15.dev435 → verifiers-0.1.15.dev437}/tests/test_renderer_client.py +0 -0
  68. {verifiers-0.1.15.dev435 → verifiers-0.1.15.dev437}/tests/test_renderer_e2e.py +0 -0
  69. {verifiers-0.1.15.dev435 → verifiers-0.1.15.dev437}/tests/test_rlm_composable_env.py +0 -0
  70. {verifiers-0.1.15.dev435 → verifiers-0.1.15.dev437}/tests/test_rubric.py +0 -0
  71. {verifiers-0.1.15.dev435 → verifiers-0.1.15.dev437}/tests/test_rubric_group.py +0 -0
  72. {verifiers-0.1.15.dev435 → verifiers-0.1.15.dev437}/tests/test_sandbox_debug_env.py +0 -0
  73. {verifiers-0.1.15.dev435 → verifiers-0.1.15.dev437}/tests/test_sandbox_env.py +0 -0
  74. {verifiers-0.1.15.dev435 → verifiers-0.1.15.dev437}/tests/test_sandbox_mixin.py +0 -0
  75. {verifiers-0.1.15.dev435 → verifiers-0.1.15.dev437}/tests/test_save_utils.py +0 -0
  76. {verifiers-0.1.15.dev435 → verifiers-0.1.15.dev437}/tests/test_setup_script.py +0 -0
  77. {verifiers-0.1.15.dev435 → verifiers-0.1.15.dev437}/tests/test_singleturn_env.py +0 -0
  78. {verifiers-0.1.15.dev435 → verifiers-0.1.15.dev437}/tests/test_stateful_tool_env.py +0 -0
  79. {verifiers-0.1.15.dev435 → verifiers-0.1.15.dev437}/tests/test_think_parser.py +0 -0
  80. {verifiers-0.1.15.dev435 → verifiers-0.1.15.dev437}/tests/test_tool_env.py +0 -0
  81. {verifiers-0.1.15.dev435 → verifiers-0.1.15.dev437}/tests/test_tool_utils.py +0 -0
  82. {verifiers-0.1.15.dev435 → verifiers-0.1.15.dev437}/tests/test_trajectory_processing.py +0 -0
  83. {verifiers-0.1.15.dev435 → verifiers-0.1.15.dev437}/tests/test_tui_info_formatting.py +0 -0
  84. {verifiers-0.1.15.dev435 → verifiers-0.1.15.dev437}/tests/test_types.py +0 -0
  85. {verifiers-0.1.15.dev435 → verifiers-0.1.15.dev437}/tests/test_wordle_env.py +0 -0
  86. {verifiers-0.1.15.dev435 → verifiers-0.1.15.dev437}/tests/test_xml_parser.py +0 -0
  87. {verifiers-0.1.15.dev435 → verifiers-0.1.15.dev437}/tests/v1/conftest.py +0 -0
  88. {verifiers-0.1.15.dev435 → verifiers-0.1.15.dev437}/tests/v1/fixtures/counter_tool_v1.py +0 -0
  89. {verifiers-0.1.15.dev435 → verifiers-0.1.15.dev437}/tests/v1/fixtures/echo_agentic_v1.py +0 -0
  90. {verifiers-0.1.15.dev435 → verifiers-0.1.15.dev437}/tests/v1/fixtures/echo_multi_v0.py +0 -0
  91. {verifiers-0.1.15.dev435 → verifiers-0.1.15.dev437}/tests/v1/fixtures/echo_tool_v1.py +0 -0
  92. {verifiers-0.1.15.dev435 → verifiers-0.1.15.dev437}/tests/v1/fixtures/echo_user_sim_v1.py +0 -0
  93. {verifiers-0.1.15.dev435 → verifiers-0.1.15.dev437}/tests/v1/fixtures/echo_v0.py +0 -0
  94. {verifiers-0.1.15.dev435 → verifiers-0.1.15.dev437}/tests/v1/fixtures/echo_v1.py +0 -0
  95. {verifiers-0.1.15.dev435 → verifiers-0.1.15.dev437}/tests/v1/fixtures/pyproject.toml +0 -0
  96. {verifiers-0.1.15.dev435 → verifiers-0.1.15.dev437}/tests/v1/fixtures/tool_response_image_v1.py +0 -0
  97. {verifiers-0.1.15.dev435 → verifiers-0.1.15.dev437}/tests/v1/test_color_codeword_tasks.py +0 -0
  98. {verifiers-0.1.15.dev435 → verifiers-0.1.15.dev437}/tests/v1/test_configs.py +0 -0
  99. {verifiers-0.1.15.dev435 → verifiers-0.1.15.dev437}/tests/v1/test_e2e.py +0 -0
  100. {verifiers-0.1.15.dev435 → verifiers-0.1.15.dev437}/tests/v1/test_envs.py +0 -0
  101. {verifiers-0.1.15.dev435 → verifiers-0.1.15.dev437}/tests/v1/test_graph.py +0 -0
  102. {verifiers-0.1.15.dev435 → verifiers-0.1.15.dev437}/tests/v1/test_judges.py +0 -0
  103. {verifiers-0.1.15.dev435 → verifiers-0.1.15.dev437}/tests/v1/test_legacy.py +0 -0
  104. {verifiers-0.1.15.dev435 → verifiers-0.1.15.dev437}/tests/v1/test_scoring.py +0 -0
  105. {verifiers-0.1.15.dev435 → verifiers-0.1.15.dev437}/tests/v1/test_trace.py +0 -0
  106. {verifiers-0.1.15.dev435 → verifiers-0.1.15.dev437}/verifiers/AGENTS.md +0 -0
  107. {verifiers-0.1.15.dev435 → verifiers-0.1.15.dev437}/verifiers/__init__.py +0 -0
  108. {verifiers-0.1.15.dev435 → verifiers-0.1.15.dev437}/verifiers/cli/__init__.py +0 -0
  109. {verifiers-0.1.15.dev435 → verifiers-0.1.15.dev437}/verifiers/cli/commands/__init__.py +0 -0
  110. {verifiers-0.1.15.dev435 → verifiers-0.1.15.dev437}/verifiers/cli/commands/build.py +0 -0
  111. {verifiers-0.1.15.dev435 → verifiers-0.1.15.dev437}/verifiers/cli/commands/eval.py +0 -0
  112. {verifiers-0.1.15.dev435 → verifiers-0.1.15.dev437}/verifiers/cli/commands/gepa.py +0 -0
  113. {verifiers-0.1.15.dev435 → verifiers-0.1.15.dev437}/verifiers/cli/commands/init.py +0 -0
  114. {verifiers-0.1.15.dev435 → verifiers-0.1.15.dev437}/verifiers/cli/commands/install.py +0 -0
  115. {verifiers-0.1.15.dev435 → verifiers-0.1.15.dev437}/verifiers/cli/commands/setup.py +0 -0
  116. {verifiers-0.1.15.dev435 → verifiers-0.1.15.dev437}/verifiers/cli/plugins/__init__.py +0 -0
  117. {verifiers-0.1.15.dev435 → verifiers-0.1.15.dev437}/verifiers/cli/plugins/prime.py +0 -0
  118. {verifiers-0.1.15.dev435 → verifiers-0.1.15.dev437}/verifiers/cli/tui.py +0 -0
  119. {verifiers-0.1.15.dev435 → verifiers-0.1.15.dev437}/verifiers/clients/__init__.py +0 -0
  120. {verifiers-0.1.15.dev435 → verifiers-0.1.15.dev437}/verifiers/clients/anthropic_messages_client.py +0 -0
  121. {verifiers-0.1.15.dev435 → verifiers-0.1.15.dev437}/verifiers/clients/client.py +0 -0
  122. {verifiers-0.1.15.dev435 → verifiers-0.1.15.dev437}/verifiers/clients/nemorl_chat_completions_client.py +0 -0
  123. {verifiers-0.1.15.dev435 → verifiers-0.1.15.dev437}/verifiers/clients/openai_chat_completions_client.py +0 -0
  124. {verifiers-0.1.15.dev435 → verifiers-0.1.15.dev437}/verifiers/clients/openai_chat_completions_token_client.py +0 -0
  125. {verifiers-0.1.15.dev435 → verifiers-0.1.15.dev437}/verifiers/clients/openai_completions_client.py +0 -0
  126. {verifiers-0.1.15.dev435 → verifiers-0.1.15.dev437}/verifiers/clients/openai_responses_client.py +0 -0
  127. {verifiers-0.1.15.dev435 → verifiers-0.1.15.dev437}/verifiers/clients/renderer_client.py +0 -0
  128. {verifiers-0.1.15.dev435 → verifiers-0.1.15.dev437}/verifiers/decorators.py +0 -0
  129. {verifiers-0.1.15.dev435 → verifiers-0.1.15.dev437}/verifiers/envs/AGENTS.md +0 -0
  130. {verifiers-0.1.15.dev435 → verifiers-0.1.15.dev437}/verifiers/envs/__init__.py +0 -0
  131. {verifiers-0.1.15.dev435 → verifiers-0.1.15.dev437}/verifiers/envs/env_group.py +0 -0
  132. {verifiers-0.1.15.dev435 → verifiers-0.1.15.dev437}/verifiers/envs/environment.py +0 -0
  133. {verifiers-0.1.15.dev435 → verifiers-0.1.15.dev437}/verifiers/envs/experimental/README.md +0 -0
  134. {verifiers-0.1.15.dev435 → verifiers-0.1.15.dev437}/verifiers/envs/experimental/__init__.py +0 -0
  135. {verifiers-0.1.15.dev435 → verifiers-0.1.15.dev437}/verifiers/envs/experimental/cli_agent_env.py +0 -0
  136. {verifiers-0.1.15.dev435 → verifiers-0.1.15.dev437}/verifiers/envs/experimental/composable/README.md +0 -0
  137. {verifiers-0.1.15.dev435 → verifiers-0.1.15.dev437}/verifiers/envs/experimental/composable/__init__.py +0 -0
  138. {verifiers-0.1.15.dev435 → verifiers-0.1.15.dev437}/verifiers/envs/experimental/composable/_filter.py +0 -0
  139. {verifiers-0.1.15.dev435 → verifiers-0.1.15.dev437}/verifiers/envs/experimental/composable/composable_env.py +0 -0
  140. {verifiers-0.1.15.dev435 → verifiers-0.1.15.dev437}/verifiers/envs/experimental/composable/harness.py +0 -0
  141. {verifiers-0.1.15.dev435 → verifiers-0.1.15.dev437}/verifiers/envs/experimental/composable/harnesses/__init__.py +0 -0
  142. {verifiers-0.1.15.dev435 → verifiers-0.1.15.dev437}/verifiers/envs/experimental/composable/harnesses/mini_swe_agent.py +0 -0
  143. {verifiers-0.1.15.dev435 → verifiers-0.1.15.dev437}/verifiers/envs/experimental/composable/harnesses/opencode.py +0 -0
  144. {verifiers-0.1.15.dev435 → verifiers-0.1.15.dev437}/verifiers/envs/experimental/composable/harnesses/prompt.txt +0 -0
  145. {verifiers-0.1.15.dev435 → verifiers-0.1.15.dev437}/verifiers/envs/experimental/composable/harnesses/rlm.py +0 -0
  146. {verifiers-0.1.15.dev435 → verifiers-0.1.15.dev437}/verifiers/envs/experimental/composable/sandbox_debug_env.py +0 -0
  147. {verifiers-0.1.15.dev435 → verifiers-0.1.15.dev437}/verifiers/envs/experimental/composable/swe_debug_env.py +0 -0
  148. {verifiers-0.1.15.dev435 → verifiers-0.1.15.dev437}/verifiers/envs/experimental/composable/task.py +0 -0
  149. {verifiers-0.1.15.dev435 → verifiers-0.1.15.dev437}/verifiers/envs/experimental/composable/tasksets/__init__.py +0 -0
  150. {verifiers-0.1.15.dev435 → verifiers-0.1.15.dev437}/verifiers/envs/experimental/composable/tasksets/cp/__init__.py +0 -0
  151. {verifiers-0.1.15.dev435 → verifiers-0.1.15.dev437}/verifiers/envs/experimental/composable/tasksets/cp/cp_task.py +0 -0
  152. {verifiers-0.1.15.dev435 → verifiers-0.1.15.dev437}/verifiers/envs/experimental/composable/tasksets/cp/test_utils.py +0 -0
  153. {verifiers-0.1.15.dev435 → verifiers-0.1.15.dev437}/verifiers/envs/experimental/composable/tasksets/harbor/__init__.py +0 -0
  154. {verifiers-0.1.15.dev435 → verifiers-0.1.15.dev437}/verifiers/envs/experimental/composable/tasksets/harbor/cli_gym.py +0 -0
  155. {verifiers-0.1.15.dev435 → verifiers-0.1.15.dev437}/verifiers/envs/experimental/composable/tasksets/harbor/harbor.py +0 -0
  156. {verifiers-0.1.15.dev435 → verifiers-0.1.15.dev437}/verifiers/envs/experimental/composable/tasksets/harbor/terminal_lego.py +0 -0
  157. {verifiers-0.1.15.dev435 → verifiers-0.1.15.dev437}/verifiers/envs/experimental/composable/tasksets/math/__init__.py +0 -0
  158. {verifiers-0.1.15.dev435 → verifiers-0.1.15.dev437}/verifiers/envs/experimental/composable/tasksets/math/math_task.py +0 -0
  159. {verifiers-0.1.15.dev435 → verifiers-0.1.15.dev437}/verifiers/envs/experimental/composable/tasksets/search/README.md +0 -0
  160. {verifiers-0.1.15.dev435 → verifiers-0.1.15.dev437}/verifiers/envs/experimental/composable/tasksets/search/__init__.py +0 -0
  161. {verifiers-0.1.15.dev435 → verifiers-0.1.15.dev437}/verifiers/envs/experimental/composable/tasksets/search/openseeker/README.md +0 -0
  162. {verifiers-0.1.15.dev435 → verifiers-0.1.15.dev437}/verifiers/envs/experimental/composable/tasksets/search/openseeker/__init__.py +0 -0
  163. {verifiers-0.1.15.dev435 → verifiers-0.1.15.dev437}/verifiers/envs/experimental/composable/tasksets/search/openseeker/taskset.py +0 -0
  164. {verifiers-0.1.15.dev435 → verifiers-0.1.15.dev437}/verifiers/envs/experimental/composable/tasksets/search/quest/README.md +0 -0
  165. {verifiers-0.1.15.dev435 → verifiers-0.1.15.dev437}/verifiers/envs/experimental/composable/tasksets/search/quest/__init__.py +0 -0
  166. {verifiers-0.1.15.dev435 → verifiers-0.1.15.dev437}/verifiers/envs/experimental/composable/tasksets/search/quest/obj_task_eval/__init__.py +0 -0
  167. {verifiers-0.1.15.dev435 → verifiers-0.1.15.dev437}/verifiers/envs/experimental/composable/tasksets/search/quest/obj_task_eval/api_tools/__init__.py +0 -0
  168. {verifiers-0.1.15.dev435 → verifiers-0.1.15.dev437}/verifiers/envs/experimental/composable/tasksets/search/quest/obj_task_eval/api_tools/tool_pdf.py +0 -0
  169. {verifiers-0.1.15.dev435 → verifiers-0.1.15.dev437}/verifiers/envs/experimental/composable/tasksets/search/quest/obj_task_eval/eval_toolkit.py +0 -0
  170. {verifiers-0.1.15.dev435 → verifiers-0.1.15.dev437}/verifiers/envs/experimental/composable/tasksets/search/quest/obj_task_eval/evaluator.py +0 -0
  171. {verifiers-0.1.15.dev435 → verifiers-0.1.15.dev437}/verifiers/envs/experimental/composable/tasksets/search/quest/obj_task_eval/llm_client/__init__.py +0 -0
  172. {verifiers-0.1.15.dev435 → verifiers-0.1.15.dev437}/verifiers/envs/experimental/composable/tasksets/search/quest/obj_task_eval/llm_client/base_client.py +0 -0
  173. {verifiers-0.1.15.dev435 → verifiers-0.1.15.dev437}/verifiers/envs/experimental/composable/tasksets/search/quest/obj_task_eval/prompts/__init__.py +0 -0
  174. {verifiers-0.1.15.dev435 → verifiers-0.1.15.dev437}/verifiers/envs/experimental/composable/tasksets/search/quest/obj_task_eval/prompts/cache_prompts.py +0 -0
  175. {verifiers-0.1.15.dev435 → verifiers-0.1.15.dev437}/verifiers/envs/experimental/composable/tasksets/search/quest/obj_task_eval/utils/__init__.py +0 -0
  176. {verifiers-0.1.15.dev435 → verifiers-0.1.15.dev437}/verifiers/envs/experimental/composable/tasksets/search/quest/obj_task_eval/utils/cache_filesys.py +0 -0
  177. {verifiers-0.1.15.dev435 → verifiers-0.1.15.dev437}/verifiers/envs/experimental/composable/tasksets/search/quest/obj_task_eval/utils/load_eval_script.py +0 -0
  178. {verifiers-0.1.15.dev435 → verifiers-0.1.15.dev437}/verifiers/envs/experimental/composable/tasksets/search/quest/obj_task_eval/utils/misc.py +0 -0
  179. {verifiers-0.1.15.dev435 → verifiers-0.1.15.dev437}/verifiers/envs/experimental/composable/tasksets/search/quest/obj_task_eval/utils/tool_visit.py +0 -0
  180. {verifiers-0.1.15.dev435 → verifiers-0.1.15.dev437}/verifiers/envs/experimental/composable/tasksets/search/quest/obj_task_eval/utils/url_tools.py +0 -0
  181. {verifiers-0.1.15.dev435 → verifiers-0.1.15.dev437}/verifiers/envs/experimental/composable/tasksets/search/quest/obj_task_eval/verification_tree.py +0 -0
  182. {verifiers-0.1.15.dev435 → verifiers-0.1.15.dev437}/verifiers/envs/experimental/composable/tasksets/search/quest/open_ended.py +0 -0
  183. {verifiers-0.1.15.dev435 → verifiers-0.1.15.dev437}/verifiers/envs/experimental/composable/tasksets/search/quest/taskset.py +0 -0
  184. {verifiers-0.1.15.dev435 → verifiers-0.1.15.dev437}/verifiers/envs/experimental/composable/tasksets/search/redsearcher/README.md +0 -0
  185. {verifiers-0.1.15.dev435 → verifiers-0.1.15.dev437}/verifiers/envs/experimental/composable/tasksets/search/redsearcher/__init__.py +0 -0
  186. {verifiers-0.1.15.dev435 → verifiers-0.1.15.dev437}/verifiers/envs/experimental/composable/tasksets/search/redsearcher/taskset.py +0 -0
  187. {verifiers-0.1.15.dev435 → verifiers-0.1.15.dev437}/verifiers/envs/experimental/composable/tasksets/search/search_tasksets.py +0 -0
  188. {verifiers-0.1.15.dev435 → verifiers-0.1.15.dev437}/verifiers/envs/experimental/composable/tasksets/swe/README.md +0 -0
  189. {verifiers-0.1.15.dev435 → verifiers-0.1.15.dev437}/verifiers/envs/experimental/composable/tasksets/swe/__init__.py +0 -0
  190. {verifiers-0.1.15.dev435 → verifiers-0.1.15.dev437}/verifiers/envs/experimental/composable/tasksets/swe/multi_swe/__init__.py +0 -0
  191. {verifiers-0.1.15.dev435 → verifiers-0.1.15.dev437}/verifiers/envs/experimental/composable/tasksets/swe/multi_swe/extract_fix_patch.sh +0 -0
  192. {verifiers-0.1.15.dev435 → verifiers-0.1.15.dev437}/verifiers/envs/experimental/composable/tasksets/swe/multi_swe/taskset.py +0 -0
  193. {verifiers-0.1.15.dev435 → verifiers-0.1.15.dev437}/verifiers/envs/experimental/composable/tasksets/swe/openswe/__init__.py +0 -0
  194. {verifiers-0.1.15.dev435 → verifiers-0.1.15.dev437}/verifiers/envs/experimental/composable/tasksets/swe/openswe/taskset.py +0 -0
  195. {verifiers-0.1.15.dev435 → verifiers-0.1.15.dev437}/verifiers/envs/experimental/composable/tasksets/swe/r2e_gym/__init__.py +0 -0
  196. {verifiers-0.1.15.dev435 → verifiers-0.1.15.dev437}/verifiers/envs/experimental/composable/tasksets/swe/r2e_gym/log_parser.py +0 -0
  197. {verifiers-0.1.15.dev435 → verifiers-0.1.15.dev437}/verifiers/envs/experimental/composable/tasksets/swe/r2e_gym/taskset.py +0 -0
  198. {verifiers-0.1.15.dev435 → verifiers-0.1.15.dev437}/verifiers/envs/experimental/composable/tasksets/swe/scale_swe/__init__.py +0 -0
  199. {verifiers-0.1.15.dev435 → verifiers-0.1.15.dev437}/verifiers/envs/experimental/composable/tasksets/swe/scale_swe/taskset.py +0 -0
  200. {verifiers-0.1.15.dev435 → verifiers-0.1.15.dev437}/verifiers/envs/experimental/composable/tasksets/swe/shared/__init__.py +0 -0
  201. {verifiers-0.1.15.dev435 → verifiers-0.1.15.dev437}/verifiers/envs/experimental/composable/tasksets/swe/shared/test_patch.py +0 -0
  202. {verifiers-0.1.15.dev435 → verifiers-0.1.15.dev437}/verifiers/envs/experimental/composable/tasksets/swe/swe_bench/__init__.py +0 -0
  203. {verifiers-0.1.15.dev435 → verifiers-0.1.15.dev437}/verifiers/envs/experimental/composable/tasksets/swe/swe_bench/taskset.py +0 -0
  204. {verifiers-0.1.15.dev435 → verifiers-0.1.15.dev437}/verifiers/envs/experimental/composable/tasksets/swe/swe_lego/__init__.py +0 -0
  205. {verifiers-0.1.15.dev435 → verifiers-0.1.15.dev437}/verifiers/envs/experimental/composable/tasksets/swe/swe_lego/taskset.py +0 -0
  206. {verifiers-0.1.15.dev435 → verifiers-0.1.15.dev437}/verifiers/envs/experimental/composable/tasksets/swe/swe_rebench_v2/__init__.py +0 -0
  207. {verifiers-0.1.15.dev435 → verifiers-0.1.15.dev437}/verifiers/envs/experimental/composable/tasksets/swe/swe_rebench_v2/log_parsers.py +0 -0
  208. {verifiers-0.1.15.dev435 → verifiers-0.1.15.dev437}/verifiers/envs/experimental/composable/tasksets/swe/swe_rebench_v2/taskset.py +0 -0
  209. {verifiers-0.1.15.dev435 → verifiers-0.1.15.dev437}/verifiers/envs/experimental/composable/tasksets/swe/swe_smith/__init__.py +0 -0
  210. {verifiers-0.1.15.dev435 → verifiers-0.1.15.dev437}/verifiers/envs/experimental/composable/tasksets/swe/swe_smith/taskset.py +0 -0
  211. {verifiers-0.1.15.dev435 → verifiers-0.1.15.dev437}/verifiers/envs/experimental/composable/tasksets/swe/swe_tasksets.py +0 -0
  212. {verifiers-0.1.15.dev435 → verifiers-0.1.15.dev437}/verifiers/envs/experimental/gym_env.py +0 -0
  213. {verifiers-0.1.15.dev435 → verifiers-0.1.15.dev437}/verifiers/envs/experimental/harbor_env/__init__.py +0 -0
  214. {verifiers-0.1.15.dev435 → verifiers-0.1.15.dev437}/verifiers/envs/experimental/harbor_env/env.py +0 -0
  215. {verifiers-0.1.15.dev435 → verifiers-0.1.15.dev437}/verifiers/envs/experimental/harbor_env/mcp.py +0 -0
  216. {verifiers-0.1.15.dev435 → verifiers-0.1.15.dev437}/verifiers/envs/experimental/mcp_env.py +0 -0
  217. {verifiers-0.1.15.dev435 → verifiers-0.1.15.dev437}/verifiers/envs/experimental/opencode_env.py +0 -0
  218. {verifiers-0.1.15.dev435 → verifiers-0.1.15.dev437}/verifiers/envs/experimental/opencode_qa_env.py +0 -0
  219. {verifiers-0.1.15.dev435 → verifiers-0.1.15.dev437}/verifiers/envs/experimental/opencode_rlm_env.py +0 -0
  220. {verifiers-0.1.15.dev435 → verifiers-0.1.15.dev437}/verifiers/envs/experimental/sandbox_mixin.py +0 -0
  221. {verifiers-0.1.15.dev435 → verifiers-0.1.15.dev437}/verifiers/envs/experimental/utils/__init__.py +0 -0
  222. {verifiers-0.1.15.dev435 → verifiers-0.1.15.dev437}/verifiers/envs/experimental/utils/file_locks.py +0 -0
  223. {verifiers-0.1.15.dev435 → verifiers-0.1.15.dev437}/verifiers/envs/experimental/utils/git_checkout_cache.py +0 -0
  224. {verifiers-0.1.15.dev435 → verifiers-0.1.15.dev437}/verifiers/envs/integrations/README.md +0 -0
  225. {verifiers-0.1.15.dev435 → verifiers-0.1.15.dev437}/verifiers/envs/integrations/__init__.py +0 -0
  226. {verifiers-0.1.15.dev435 → verifiers-0.1.15.dev437}/verifiers/envs/integrations/browser_env/README.md +0 -0
  227. {verifiers-0.1.15.dev435 → verifiers-0.1.15.dev437}/verifiers/envs/integrations/browser_env/__init__.py +0 -0
  228. {verifiers-0.1.15.dev435 → verifiers-0.1.15.dev437}/verifiers/envs/integrations/browser_env/browser_env.py +0 -0
  229. {verifiers-0.1.15.dev435 → verifiers-0.1.15.dev437}/verifiers/envs/integrations/browser_env/modes/__init__.py +0 -0
  230. {verifiers-0.1.15.dev435 → verifiers-0.1.15.dev437}/verifiers/envs/integrations/browser_env/modes/base.py +0 -0
  231. {verifiers-0.1.15.dev435 → verifiers-0.1.15.dev437}/verifiers/envs/integrations/browser_env/modes/cua_mode.py +0 -0
  232. {verifiers-0.1.15.dev435 → verifiers-0.1.15.dev437}/verifiers/envs/integrations/browser_env/modes/dom_mode.py +0 -0
  233. {verifiers-0.1.15.dev435 → verifiers-0.1.15.dev437}/verifiers/envs/integrations/openenv_env.py +0 -0
  234. {verifiers-0.1.15.dev435 → verifiers-0.1.15.dev437}/verifiers/envs/integrations/reasoninggym_env.py +0 -0
  235. {verifiers-0.1.15.dev435 → verifiers-0.1.15.dev437}/verifiers/envs/integrations/textarena_env.py +0 -0
  236. {verifiers-0.1.15.dev435 → verifiers-0.1.15.dev437}/verifiers/envs/multiturn_env.py +0 -0
  237. {verifiers-0.1.15.dev435 → verifiers-0.1.15.dev437}/verifiers/envs/python_env.py +0 -0
  238. {verifiers-0.1.15.dev435 → verifiers-0.1.15.dev437}/verifiers/envs/sandbox_env.py +0 -0
  239. {verifiers-0.1.15.dev435 → verifiers-0.1.15.dev437}/verifiers/envs/singleturn_env.py +0 -0
  240. {verifiers-0.1.15.dev435 → verifiers-0.1.15.dev437}/verifiers/envs/stateful_tool_env.py +0 -0
  241. {verifiers-0.1.15.dev435 → verifiers-0.1.15.dev437}/verifiers/envs/tool_env.py +0 -0
  242. {verifiers-0.1.15.dev435 → verifiers-0.1.15.dev437}/verifiers/errors.py +0 -0
  243. {verifiers-0.1.15.dev435 → verifiers-0.1.15.dev437}/verifiers/gepa/__init__.py +0 -0
  244. {verifiers-0.1.15.dev435 → verifiers-0.1.15.dev437}/verifiers/gepa/adapter.py +0 -0
  245. {verifiers-0.1.15.dev435 → verifiers-0.1.15.dev437}/verifiers/gepa/config.py +0 -0
  246. {verifiers-0.1.15.dev435 → verifiers-0.1.15.dev437}/verifiers/gepa/display.py +0 -0
  247. {verifiers-0.1.15.dev435 → verifiers-0.1.15.dev437}/verifiers/gepa/gepa_utils.py +0 -0
  248. {verifiers-0.1.15.dev435 → verifiers-0.1.15.dev437}/verifiers/parsers/__init__.py +0 -0
  249. {verifiers-0.1.15.dev435 → verifiers-0.1.15.dev437}/verifiers/parsers/maybe_think_parser.py +0 -0
  250. {verifiers-0.1.15.dev435 → verifiers-0.1.15.dev437}/verifiers/parsers/parser.py +0 -0
  251. {verifiers-0.1.15.dev435 → verifiers-0.1.15.dev437}/verifiers/parsers/think_parser.py +0 -0
  252. {verifiers-0.1.15.dev435 → verifiers-0.1.15.dev437}/verifiers/parsers/xml_parser.py +0 -0
  253. {verifiers-0.1.15.dev435 → verifiers-0.1.15.dev437}/verifiers/rubrics/__init__.py +0 -0
  254. {verifiers-0.1.15.dev435 → verifiers-0.1.15.dev437}/verifiers/rubrics/experimental/hybrid_math_rubric.py +0 -0
  255. {verifiers-0.1.15.dev435 → verifiers-0.1.15.dev437}/verifiers/rubrics/judge_rubric.py +0 -0
  256. {verifiers-0.1.15.dev435 → verifiers-0.1.15.dev437}/verifiers/rubrics/math_rubric.py +0 -0
  257. {verifiers-0.1.15.dev435 → verifiers-0.1.15.dev437}/verifiers/rubrics/rubric.py +0 -0
  258. {verifiers-0.1.15.dev435 → verifiers-0.1.15.dev437}/verifiers/rubrics/rubric_group.py +0 -0
  259. {verifiers-0.1.15.dev435 → verifiers-0.1.15.dev437}/verifiers/scripts/__init__.py +0 -0
  260. {verifiers-0.1.15.dev435 → verifiers-0.1.15.dev437}/verifiers/scripts/build.py +0 -0
  261. {verifiers-0.1.15.dev435 → verifiers-0.1.15.dev437}/verifiers/scripts/eval.py +0 -0
  262. {verifiers-0.1.15.dev435 → verifiers-0.1.15.dev437}/verifiers/scripts/gepa.py +0 -0
  263. {verifiers-0.1.15.dev435 → verifiers-0.1.15.dev437}/verifiers/scripts/init.py +0 -0
  264. {verifiers-0.1.15.dev435 → verifiers-0.1.15.dev437}/verifiers/scripts/install.py +0 -0
  265. {verifiers-0.1.15.dev435 → verifiers-0.1.15.dev437}/verifiers/scripts/setup.py +0 -0
  266. {verifiers-0.1.15.dev435 → verifiers-0.1.15.dev437}/verifiers/scripts/tui.py +0 -0
  267. {verifiers-0.1.15.dev435 → verifiers-0.1.15.dev437}/verifiers/serve/__init__.py +0 -0
  268. {verifiers-0.1.15.dev435 → verifiers-0.1.15.dev437}/verifiers/serve/client/env_client.py +0 -0
  269. {verifiers-0.1.15.dev435 → verifiers-0.1.15.dev437}/verifiers/serve/client/zmq_env_client.py +0 -0
  270. {verifiers-0.1.15.dev435 → verifiers-0.1.15.dev437}/verifiers/serve/server/__init__.py +0 -0
  271. {verifiers-0.1.15.dev435 → verifiers-0.1.15.dev437}/verifiers/serve/server/env_router.py +0 -0
  272. {verifiers-0.1.15.dev435 → verifiers-0.1.15.dev437}/verifiers/serve/server/env_server.py +0 -0
  273. {verifiers-0.1.15.dev435 → verifiers-0.1.15.dev437}/verifiers/serve/server/env_worker.py +0 -0
  274. {verifiers-0.1.15.dev435 → verifiers-0.1.15.dev437}/verifiers/serve/server/zmq_env_server.py +0 -0
  275. {verifiers-0.1.15.dev435 → verifiers-0.1.15.dev437}/verifiers/serve/types.py +0 -0
  276. {verifiers-0.1.15.dev435 → verifiers-0.1.15.dev437}/verifiers/types.py +0 -0
  277. {verifiers-0.1.15.dev435 → verifiers-0.1.15.dev437}/verifiers/utils/__init__.py +0 -0
  278. {verifiers-0.1.15.dev435 → verifiers-0.1.15.dev437}/verifiers/utils/async_utils.py +0 -0
  279. {verifiers-0.1.15.dev435 → verifiers-0.1.15.dev437}/verifiers/utils/client_utils.py +0 -0
  280. {verifiers-0.1.15.dev435 → verifiers-0.1.15.dev437}/verifiers/utils/config_utils.py +0 -0
  281. {verifiers-0.1.15.dev435 → verifiers-0.1.15.dev437}/verifiers/utils/data_utils.py +0 -0
  282. {verifiers-0.1.15.dev435 → verifiers-0.1.15.dev437}/verifiers/utils/display_utils.py +0 -0
  283. {verifiers-0.1.15.dev435 → verifiers-0.1.15.dev437}/verifiers/utils/env_config_utils.py +0 -0
  284. {verifiers-0.1.15.dev435 → verifiers-0.1.15.dev437}/verifiers/utils/env_utils.py +0 -0
  285. {verifiers-0.1.15.dev435 → verifiers-0.1.15.dev437}/verifiers/utils/error_utils.py +0 -0
  286. {verifiers-0.1.15.dev435 → verifiers-0.1.15.dev437}/verifiers/utils/eval_display.py +0 -0
  287. {verifiers-0.1.15.dev435 → verifiers-0.1.15.dev437}/verifiers/utils/eval_utils.py +0 -0
  288. {verifiers-0.1.15.dev435 → verifiers-0.1.15.dev437}/verifiers/utils/heartbeat.py +0 -0
  289. {verifiers-0.1.15.dev435 → verifiers-0.1.15.dev437}/verifiers/utils/import_utils.py +0 -0
  290. {verifiers-0.1.15.dev435 → verifiers-0.1.15.dev437}/verifiers/utils/install_utils.py +0 -0
  291. {verifiers-0.1.15.dev435 → verifiers-0.1.15.dev437}/verifiers/utils/interception_utils.py +0 -0
  292. {verifiers-0.1.15.dev435 → verifiers-0.1.15.dev437}/verifiers/utils/logging_utils.py +0 -0
  293. {verifiers-0.1.15.dev435 → verifiers-0.1.15.dev437}/verifiers/utils/message_utils.py +0 -0
  294. {verifiers-0.1.15.dev435 → verifiers-0.1.15.dev437}/verifiers/utils/metric_utils.py +0 -0
  295. {verifiers-0.1.15.dev435 → verifiers-0.1.15.dev437}/verifiers/utils/path_utils.py +0 -0
  296. {verifiers-0.1.15.dev435 → verifiers-0.1.15.dev437}/verifiers/utils/pricing_utils.py +0 -0
  297. {verifiers-0.1.15.dev435 → verifiers-0.1.15.dev437}/verifiers/utils/process_utils.py +0 -0
  298. {verifiers-0.1.15.dev435 → verifiers-0.1.15.dev437}/verifiers/utils/response_utils.py +0 -0
  299. {verifiers-0.1.15.dev435 → verifiers-0.1.15.dev437}/verifiers/utils/save_utils.py +0 -0
  300. {verifiers-0.1.15.dev435 → verifiers-0.1.15.dev437}/verifiers/utils/serve_utils.py +0 -0
  301. {verifiers-0.1.15.dev435 → verifiers-0.1.15.dev437}/verifiers/utils/thread_utils.py +0 -0
  302. {verifiers-0.1.15.dev435 → verifiers-0.1.15.dev437}/verifiers/utils/threaded_sandbox_client.py +0 -0
  303. {verifiers-0.1.15.dev435 → verifiers-0.1.15.dev437}/verifiers/utils/tool_utils.py +0 -0
  304. {verifiers-0.1.15.dev435 → verifiers-0.1.15.dev437}/verifiers/utils/usage_utils.py +0 -0
  305. {verifiers-0.1.15.dev435 → verifiers-0.1.15.dev437}/verifiers/utils/version_utils.py +0 -0
  306. {verifiers-0.1.15.dev435 → verifiers-0.1.15.dev437}/verifiers/v1/README.md +0 -0
  307. {verifiers-0.1.15.dev435 → verifiers-0.1.15.dev437}/verifiers/v1/__init__.py +0 -0
  308. {verifiers-0.1.15.dev435 → verifiers-0.1.15.dev437}/verifiers/v1/cli/__init__.py +0 -0
  309. {verifiers-0.1.15.dev435 → verifiers-0.1.15.dev437}/verifiers/v1/cli/dashboard/__init__.py +0 -0
  310. {verifiers-0.1.15.dev435 → verifiers-0.1.15.dev437}/verifiers/v1/cli/dashboard/base.py +0 -0
  311. {verifiers-0.1.15.dev435 → verifiers-0.1.15.dev437}/verifiers/v1/cli/dashboard/replay.py +0 -0
  312. {verifiers-0.1.15.dev435 → verifiers-0.1.15.dev437}/verifiers/v1/cli/dashboard/validate.py +0 -0
  313. {verifiers-0.1.15.dev435 → verifiers-0.1.15.dev437}/verifiers/v1/cli/debug.py +0 -0
  314. {verifiers-0.1.15.dev435 → verifiers-0.1.15.dev437}/verifiers/v1/cli/eval/__init__.py +0 -0
  315. {verifiers-0.1.15.dev435 → verifiers-0.1.15.dev437}/verifiers/v1/cli/init.py +0 -0
  316. {verifiers-0.1.15.dev435 → verifiers-0.1.15.dev437}/verifiers/v1/cli/resolve.py +0 -0
  317. {verifiers-0.1.15.dev435 → verifiers-0.1.15.dev437}/verifiers/v1/cli/serve.py +0 -0
  318. {verifiers-0.1.15.dev435 → verifiers-0.1.15.dev437}/verifiers/v1/cli/validate.py +0 -0
  319. {verifiers-0.1.15.dev435 → verifiers-0.1.15.dev437}/verifiers/v1/clients/__init__.py +0 -0
  320. {verifiers-0.1.15.dev435 → verifiers-0.1.15.dev437}/verifiers/v1/clients/client.py +0 -0
  321. {verifiers-0.1.15.dev435 → verifiers-0.1.15.dev437}/verifiers/v1/clients/config.py +0 -0
  322. {verifiers-0.1.15.dev435 → verifiers-0.1.15.dev437}/verifiers/v1/clients/eval.py +0 -0
  323. {verifiers-0.1.15.dev435 → verifiers-0.1.15.dev437}/verifiers/v1/clients/train.py +0 -0
  324. {verifiers-0.1.15.dev435 → verifiers-0.1.15.dev437}/verifiers/v1/configs/__init__.py +0 -0
  325. {verifiers-0.1.15.dev435 → verifiers-0.1.15.dev437}/verifiers/v1/configs/init.py +0 -0
  326. {verifiers-0.1.15.dev435 → verifiers-0.1.15.dev437}/verifiers/v1/configs/serve.py +0 -0
  327. {verifiers-0.1.15.dev435 → verifiers-0.1.15.dev437}/verifiers/v1/configs/validate.py +0 -0
  328. {verifiers-0.1.15.dev435 → verifiers-0.1.15.dev437}/verifiers/v1/decorators.py +0 -0
  329. {verifiers-0.1.15.dev435 → verifiers-0.1.15.dev437}/verifiers/v1/dialects/__init__.py +0 -0
  330. {verifiers-0.1.15.dev435 → verifiers-0.1.15.dev437}/verifiers/v1/dialects/anthropic.py +0 -0
  331. {verifiers-0.1.15.dev435 → verifiers-0.1.15.dev437}/verifiers/v1/dialects/base.py +0 -0
  332. {verifiers-0.1.15.dev435 → verifiers-0.1.15.dev437}/verifiers/v1/dialects/chat.py +0 -0
  333. {verifiers-0.1.15.dev435 → verifiers-0.1.15.dev437}/verifiers/v1/dialects/responses.py +0 -0
  334. {verifiers-0.1.15.dev435 → verifiers-0.1.15.dev437}/verifiers/v1/env.py +0 -0
  335. {verifiers-0.1.15.dev435 → verifiers-0.1.15.dev437}/verifiers/v1/episode.py +0 -0
  336. {verifiers-0.1.15.dev435 → verifiers-0.1.15.dev437}/verifiers/v1/errors.py +0 -0
  337. {verifiers-0.1.15.dev435 → verifiers-0.1.15.dev437}/verifiers/v1/graph.py +0 -0
  338. {verifiers-0.1.15.dev435 → verifiers-0.1.15.dev437}/verifiers/v1/harness.py +0 -0
  339. {verifiers-0.1.15.dev435 → verifiers-0.1.15.dev437}/verifiers/v1/harnesses/__init__.py +0 -0
  340. {verifiers-0.1.15.dev435 → verifiers-0.1.15.dev437}/verifiers/v1/harnesses/codex/__init__.py +0 -0
  341. {verifiers-0.1.15.dev435 → verifiers-0.1.15.dev437}/verifiers/v1/harnesses/codex/harness.py +0 -0
  342. {verifiers-0.1.15.dev435 → verifiers-0.1.15.dev437}/verifiers/v1/harnesses/default/__init__.py +0 -0
  343. {verifiers-0.1.15.dev435 → verifiers-0.1.15.dev437}/verifiers/v1/harnesses/default/harness.py +0 -0
  344. {verifiers-0.1.15.dev435 → verifiers-0.1.15.dev437}/verifiers/v1/harnesses/default/program.py +0 -0
  345. {verifiers-0.1.15.dev435 → verifiers-0.1.15.dev437}/verifiers/v1/harnesses/kimi_code/__init__.py +0 -0
  346. {verifiers-0.1.15.dev435 → verifiers-0.1.15.dev437}/verifiers/v1/harnesses/kimi_code/harness.py +0 -0
  347. {verifiers-0.1.15.dev435 → verifiers-0.1.15.dev437}/verifiers/v1/harnesses/mini_swe_agent/__init__.py +0 -0
  348. {verifiers-0.1.15.dev435 → verifiers-0.1.15.dev437}/verifiers/v1/harnesses/mini_swe_agent/harness.py +0 -0
  349. {verifiers-0.1.15.dev435 → verifiers-0.1.15.dev437}/verifiers/v1/harnesses/mini_swe_agent/program.py +0 -0
  350. {verifiers-0.1.15.dev435 → verifiers-0.1.15.dev437}/verifiers/v1/harnesses/null/__init__.py +0 -0
  351. {verifiers-0.1.15.dev435 → verifiers-0.1.15.dev437}/verifiers/v1/harnesses/null/harness.py +0 -0
  352. {verifiers-0.1.15.dev435 → verifiers-0.1.15.dev437}/verifiers/v1/harnesses/null/program.py +0 -0
  353. {verifiers-0.1.15.dev435 → verifiers-0.1.15.dev437}/verifiers/v1/harnesses/rlm/__init__.py +0 -0
  354. {verifiers-0.1.15.dev435 → verifiers-0.1.15.dev437}/verifiers/v1/harnesses/rlm/harness.py +0 -0
  355. {verifiers-0.1.15.dev435 → verifiers-0.1.15.dev437}/verifiers/v1/harnesses/terminus_2/__init__.py +0 -0
  356. {verifiers-0.1.15.dev435 → verifiers-0.1.15.dev437}/verifiers/v1/harnesses/terminus_2/harness.py +0 -0
  357. {verifiers-0.1.15.dev435 → verifiers-0.1.15.dev437}/verifiers/v1/harnesses/terminus_2/program.py +0 -0
  358. {verifiers-0.1.15.dev435 → verifiers-0.1.15.dev437}/verifiers/v1/interception/__init__.py +0 -0
  359. {verifiers-0.1.15.dev435 → verifiers-0.1.15.dev437}/verifiers/v1/interception/pool.py +0 -0
  360. {verifiers-0.1.15.dev435 → verifiers-0.1.15.dev437}/verifiers/v1/interception/server.py +0 -0
  361. {verifiers-0.1.15.dev435 → verifiers-0.1.15.dev437}/verifiers/v1/judge.py +0 -0
  362. {verifiers-0.1.15.dev435 → verifiers-0.1.15.dev437}/verifiers/v1/judges/__init__.py +0 -0
  363. {verifiers-0.1.15.dev435 → verifiers-0.1.15.dev437}/verifiers/v1/judges/reference.py +0 -0
  364. {verifiers-0.1.15.dev435 → verifiers-0.1.15.dev437}/verifiers/v1/judges/reference.txt +0 -0
  365. {verifiers-0.1.15.dev435 → verifiers-0.1.15.dev437}/verifiers/v1/judges/rubric.py +0 -0
  366. {verifiers-0.1.15.dev435 → verifiers-0.1.15.dev437}/verifiers/v1/judges/rubric.txt +0 -0
  367. {verifiers-0.1.15.dev435 → verifiers-0.1.15.dev437}/verifiers/v1/loaders.py +0 -0
  368. {verifiers-0.1.15.dev435 → verifiers-0.1.15.dev437}/verifiers/v1/mcp/__init__.py +0 -0
  369. {verifiers-0.1.15.dev435 → verifiers-0.1.15.dev437}/verifiers/v1/mcp/launch.py +0 -0
  370. {verifiers-0.1.15.dev435 → verifiers-0.1.15.dev437}/verifiers/v1/mcp/server.py +0 -0
  371. {verifiers-0.1.15.dev435 → verifiers-0.1.15.dev437}/verifiers/v1/mcp/toolset.py +0 -0
  372. {verifiers-0.1.15.dev435 → verifiers-0.1.15.dev437}/verifiers/v1/mcp/user.py +0 -0
  373. {verifiers-0.1.15.dev435 → verifiers-0.1.15.dev437}/verifiers/v1/retries.py +0 -0
  374. {verifiers-0.1.15.dev435 → verifiers-0.1.15.dev437}/verifiers/v1/rollout.py +0 -0
  375. {verifiers-0.1.15.dev435 → verifiers-0.1.15.dev437}/verifiers/v1/runtimes/__init__.py +0 -0
  376. {verifiers-0.1.15.dev435 → verifiers-0.1.15.dev437}/verifiers/v1/runtimes/base.py +0 -0
  377. {verifiers-0.1.15.dev435 → verifiers-0.1.15.dev437}/verifiers/v1/runtimes/docker.py +0 -0
  378. {verifiers-0.1.15.dev435 → verifiers-0.1.15.dev437}/verifiers/v1/runtimes/limiters.py +0 -0
  379. {verifiers-0.1.15.dev435 → verifiers-0.1.15.dev437}/verifiers/v1/runtimes/modal.py +0 -0
  380. {verifiers-0.1.15.dev435 → verifiers-0.1.15.dev437}/verifiers/v1/runtimes/prime.py +0 -0
  381. {verifiers-0.1.15.dev435 → verifiers-0.1.15.dev437}/verifiers/v1/runtimes/subprocess.py +0 -0
  382. {verifiers-0.1.15.dev435 → verifiers-0.1.15.dev437}/verifiers/v1/scoring.py +0 -0
  383. {verifiers-0.1.15.dev435 → verifiers-0.1.15.dev437}/verifiers/v1/serve/__init__.py +0 -0
  384. {verifiers-0.1.15.dev435 → verifiers-0.1.15.dev437}/verifiers/v1/serve/client.py +0 -0
  385. {verifiers-0.1.15.dev435 → verifiers-0.1.15.dev437}/verifiers/v1/serve/pool.py +0 -0
  386. {verifiers-0.1.15.dev435 → verifiers-0.1.15.dev437}/verifiers/v1/serve/server.py +0 -0
  387. {verifiers-0.1.15.dev435 → verifiers-0.1.15.dev437}/verifiers/v1/serve/types.py +0 -0
  388. {verifiers-0.1.15.dev435 → verifiers-0.1.15.dev437}/verifiers/v1/task.py +0 -0
  389. {verifiers-0.1.15.dev435 → verifiers-0.1.15.dev437}/verifiers/v1/taskset.py +0 -0
  390. {verifiers-0.1.15.dev435 → verifiers-0.1.15.dev437}/verifiers/v1/tasksets/__init__.py +0 -0
  391. {verifiers-0.1.15.dev435 → verifiers-0.1.15.dev437}/verifiers/v1/tasksets/harbor/__init__.py +0 -0
  392. {verifiers-0.1.15.dev435 → verifiers-0.1.15.dev437}/verifiers/v1/tasksets/harbor/taskset.py +0 -0
  393. {verifiers-0.1.15.dev435 → verifiers-0.1.15.dev437}/verifiers/v1/tasksets/lean/__init__.py +0 -0
  394. {verifiers-0.1.15.dev435 → verifiers-0.1.15.dev437}/verifiers/v1/tasksets/lean/scoring.py +0 -0
  395. {verifiers-0.1.15.dev435 → verifiers-0.1.15.dev437}/verifiers/v1/tasksets/lean/taskset.py +0 -0
  396. {verifiers-0.1.15.dev435 → verifiers-0.1.15.dev437}/verifiers/v1/tasksets/textarena/__init__.py +0 -0
  397. {verifiers-0.1.15.dev435 → verifiers-0.1.15.dev437}/verifiers/v1/tasksets/textarena/taskset.py +0 -0
  398. {verifiers-0.1.15.dev435 → verifiers-0.1.15.dev437}/verifiers/v1/types.py +0 -0
  399. {verifiers-0.1.15.dev435 → verifiers-0.1.15.dev437}/verifiers/v1/utils/__init__.py +0 -0
  400. {verifiers-0.1.15.dev435 → verifiers-0.1.15.dev437}/verifiers/v1/utils/aio.py +0 -0
  401. {verifiers-0.1.15.dev435 → verifiers-0.1.15.dev437}/verifiers/v1/utils/format.py +0 -0
  402. {verifiers-0.1.15.dev435 → verifiers-0.1.15.dev437}/verifiers/v1/utils/install.py +0 -0
  403. {verifiers-0.1.15.dev435 → verifiers-0.1.15.dev437}/verifiers/v1/utils/logging.py +0 -0
  404. {verifiers-0.1.15.dev435 → verifiers-0.1.15.dev437}/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.dev435
3
+ Version: 0.1.15.dev437
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
@@ -69,7 +69,7 @@ several. A branch *is* a training sample: concatenating its nodes' `token_ids` r
69
69
  end to end: each surviving context window is just another root→leaf path.
70
70
 
71
71
  `Trace.to_record()` (`trace.py`) is the JSON record dump (`model_dump(mode="json")`) for
72
- `results.jsonl` / W&B tables, minus the per-node training tensors (`MessageNode.multi_modal_data`,
72
+ `traces.jsonl` / W&B tables, minus the per-node training tensors (`MessageNode.multi_modal_data`,
73
73
  `routed_experts`, via `_NODE_DUMP_EXCLUDE`): those hold raw numpy bytes that can't round-trip JSON
74
74
  (the dump raises `UnicodeDecodeError` on real expert ids) and bloat every line. Computed views
75
75
  (`reward`, `branches`, `num_turns`, per-span `duration`) are pydantic properties, so they're never
@@ -369,7 +369,7 @@ Good to know:
369
369
  - **What lands on the trace:** the weighted verdict in `trace.rewards[<reward key>]`; rubric's
370
370
  raw per-criterion verdicts in `trace.metrics`; every call's `JudgeResponse` in
371
371
  `trace.info["judge"]` with its tokens + cost in `trace.extra_usage` (shown as `+judge` in the
372
- dashboard). All persisted to `results.jsonl`.
372
+ dashboard). All persisted to `traces.jsonl`.
373
373
 
374
374
  Writing your own pluggable judge is the same recipe as any plugin: a package exporting a `Judge`
375
375
  subclass via `__all__` that implements `score` — declare any subset of `task` / `trace` / `runtime`
@@ -468,7 +468,7 @@ class SWETaskset(vf.Taskset[SWETask, SWEConfig]):
468
468
  `trace.info` is a free-form, **JSON-serializable** dict for per-rollout artifacts that are neither a
469
469
  reward nor a metric — the diff above, captured logs, command output, file paths. Write to it from
470
470
  `finalize` or a `@reward`/`@metric` by assigning into the dict; it is persisted with the trace
471
- (dumped to `results.jsonl` and sent over the wire), so every value must be JSON-serializable — a
471
+ (dumped to `traces.jsonl` and sent over the wire), so every value must be JSON-serializable — a
472
472
  non-serializable value fails the trace dump rather than being silently dropped.
473
473
 
474
474
  ```python
@@ -815,7 +815,7 @@ client-side so each node carries the exact `token_ids` / `mask` / `logprobs` (th
815
815
  — point it at a vLLM engine with `--client.base-url`.
816
816
 
817
817
  **What it writes** (into `--output-dir`, default `outputs/<taskset>--<model>--<harness>/<uuid>`):
818
- `config.toml` (the resolved config, re-runnable via `@ config.toml`), `results.jsonl` (one full
818
+ `config.toml` (the resolved config, re-runnable via `@ config.toml`), `traces.jsonl` (one full
819
819
  trace per line, appended as each rollout finishes — durable mid-run), and `eval.log`.
820
820
 
821
821
  **`--dry-run`** writes `config.toml` and exits (resolve + validate, no run). **`--resume
@@ -869,7 +869,7 @@ uv run debug swebench-v1 -n 1 --runtime.type prime --script-path ./inspect.sh
869
869
  | `--runtime.type` | `docker` | runtime for setup + the debug action |
870
870
  | `--timeout.setup` / `--timeout.total` | None | per-task wall-clock caps for `setup` and the debug action |
871
871
  | `-n`/`--num-tasks`, `-s`/`--shuffle`, `-c`/`--max-concurrent` (128) | | task selection + concurrency |
872
- | `-o`/`--output-dir` | fresh debug run dir | where `config.toml` and `results.jsonl` are written |
872
+ | `-o`/`--output-dir` | fresh debug run dir | where `config.toml` and `traces.jsonl` are written |
873
873
 
874
874
  Each saved trace has command/script metadata, exit status, elapsed time, timeout/error fields,
875
875
  and the full stdout/stderr under `trace.info["debug"]`.
@@ -13,6 +13,7 @@ overview + progress sit on top, above a rule.
13
13
 
14
14
  import contextlib
15
15
  import time
16
+ from typing import TYPE_CHECKING
16
17
 
17
18
  from pydantic import BaseModel
18
19
  from rich.console import Console, Group
@@ -36,6 +37,9 @@ from verifiers.v1.utils.format import (
36
37
  )
37
38
  from verifiers.utils.pricing_utils import format_cost_usd
38
39
 
40
+ if TYPE_CHECKING:
41
+ from verifiers.v1.push import PushState
42
+
39
43
  # For sizing pages to the terminal: detects the real terminal height/width each access (the live
40
44
  # view writes to the same terminal). Reused so we don't rebuild it every refresh tick.
41
45
  _CONSOLE = Console()
@@ -208,6 +212,21 @@ def Overview(config: EvalConfig) -> Table:
208
212
  return grid
209
213
 
210
214
 
215
+ def _push_footer(push: "PushState | None") -> Group | None:
216
+ """The `--push` status line under the rollouts, shown once the run finishes and the upload
217
+ begins: dim `Pushing traces...` while it runs, then white `Traces pushed (<url>)` or red
218
+ `Trace push failed (<err>)`. `None` (no line) until the upload starts and when `--push` is off."""
219
+ if push is None or not push.started:
220
+ return None
221
+ if not push.done:
222
+ line = Text("Pushing traces...", style="dim")
223
+ elif push.url:
224
+ line = Text(f"Traces pushed ({push.url})", style="white", overflow="fold")
225
+ else:
226
+ line = Text(f"Trace push failed ({push.error})", style="red", overflow="fold")
227
+ return Group(Rule(style="dim"), line)
228
+
229
+
211
230
  def Progress(
212
231
  rollouts: list[Rollout],
213
232
  start: float,
@@ -576,16 +595,22 @@ def _render(
576
595
  start: float,
577
596
  pager: Pager,
578
597
  finished: list[Trace] | None = None,
598
+ push: "PushState | None" = None,
579
599
  ) -> Group:
580
600
  now = time.time()
581
601
  warning = _warning(config)
582
602
  # `{warning}\n\n{overview}` — the caution sits at the very top, blank line, then the overview.
583
603
  header = Group(warning, Text(""), Overview(config)) if warning else Overview(config)
584
- # Measure the fixed top (header + progress + rule) so the rollout rows fill the rest of the
585
- # screen; page through them (timer, or the left/right arrows) when they'd overflow (rich would
586
- # otherwise truncate).
604
+ # The --push status line appears under the rollouts once the upload starts (None during the run
605
+ # / when off). Measure the fixed top (header + progress + rule) and the footer so the rollout
606
+ # rows fill what's left; page through them (timer / arrows) when they'd overflow (else rich
607
+ # truncates).
608
+ footer = _push_footer(push)
587
609
  top = Group(header, Progress(rollouts, start, finished=finished), Rule(style="dim"))
588
- rows_per_page = max(1, _CONSOLE.size.height - len(_CONSOLE.render_lines(top)) - 1)
610
+ reserved = len(_CONSOLE.render_lines(top))
611
+ if footer is not None:
612
+ reserved += len(_CONSOLE.render_lines(footer))
613
+ rows_per_page = max(1, _CONSOLE.size.height - reserved - 1)
589
614
  page_groups, index, count = _paginate(_groups(rollouts), rows_per_page, pager, now)
590
615
  progress = Progress(
591
616
  rollouts,
@@ -593,12 +618,15 @@ def _render(
593
618
  page=(index + 1, count) if count > 1 else None,
594
619
  finished=finished,
595
620
  )
596
- return Group(
621
+ parts = [
597
622
  header,
598
623
  progress,
599
624
  Rule(style="dim"),
600
625
  Rows(page_groups, now, config.harness.runtime.type),
601
- )
626
+ ]
627
+ if footer is not None:
628
+ parts.append(footer)
629
+ return Group(*parts)
602
630
 
603
631
 
604
632
  @contextlib.asynccontextmanager
@@ -607,13 +635,17 @@ async def dashboard(
607
635
  config: EvalConfig,
608
636
  start: float,
609
637
  finished: list[Trace] | None = None,
638
+ push: "PushState | None" = None,
610
639
  ):
611
640
  """Refresh the live eval view until the `with` block exits, then a final frame. Left/right
612
641
  arrows page through rollout rows when they overflow the screen. On resume, `finished` carries
613
642
  the kept on-disk rollouts (reloaded as finished traces) so the counts and scores cover the
614
- whole run, not just this session's re-run rollouts."""
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."""
615
646
  pager = Pager()
616
647
  async with live_view(
617
- lambda: _render(rollouts, config, start, pager, finished), on_key=pager.on_key
648
+ lambda: _render(rollouts, config, start, pager, finished, push),
649
+ on_key=pager.on_key,
618
650
  ):
619
651
  yield
@@ -105,6 +105,10 @@ def main(argv: list[str] | None = None) -> None:
105
105
  else: # in-process (default), with or without the live dashboard
106
106
  env = vf.Environment(config)
107
107
  traces = asyncio.run(run_eval(env, config))
108
+ if config.push and not rich:
109
+ from verifiers.v1.push import push_traces
110
+
111
+ push_traces(traces, config)
108
112
  if not rich: # --rich is the whole output; otherwise dump each trace as JSON
109
113
  for trace in traces:
110
114
  print(trace.model_dump_json(indent=2, exclude_none=True))
@@ -1,6 +1,6 @@
1
1
  """Resume an interrupted eval: re-run only the rollouts a previous run didn't finish.
2
2
 
3
- A run writes `config.toml` + `results.jsonl` into its output dir. `--resume <dir>` reloads
3
+ A run writes `config.toml` + `traces.jsonl` into its output dir. `--resume <dir>` reloads
4
4
  that config verbatim (so it takes no other flags) and writes back into the same dir, running
5
5
  only the rollouts still owed: the *missing* ones (never written — the run was interrupted) and
6
6
  the *errored* ones (written with an error). Good rollouts are kept; errored ones are dropped
@@ -16,7 +16,7 @@ from pathlib import Path
16
16
 
17
17
  from pydantic_core import from_json
18
18
 
19
- from verifiers.v1.cli.output import read_traces
19
+ from verifiers.v1.cli.output import CONFIG_FILE, TRACES_FILE, read_traces
20
20
  from verifiers.v1.configs.eval import EvalConfig
21
21
  from verifiers.v1.state import state_cls
22
22
  from verifiers.v1.task import WireTask
@@ -41,8 +41,8 @@ def split_resume(argv: list[str]) -> tuple[Path | None, list[str]]:
41
41
 
42
42
  def load_resume_config(resume_dir: Path) -> EvalConfig:
43
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 `results.jsonl`."""
45
- config_path = resume_dir / "config.toml"
44
+ output dir so the resumed rollouts append to the same `traces.jsonl`."""
45
+ config_path = resume_dir / CONFIG_FILE
46
46
  if not config_path.exists():
47
47
  raise SystemExit(
48
48
  f"--resume: no config.toml in {resume_dir} - not an eval output dir"
@@ -81,7 +81,7 @@ def plan(
81
81
  # Retain only the offsets resume can reuse; trace payloads stay on disk.
82
82
  selected = set(selected_idxs)
83
83
  by_idx: dict[int, list[int]] = defaultdict(list)
84
- for offset, idx, errored in _read_results(resume_dir / "results.jsonl"):
84
+ for offset, idx, errored in _read_results(resume_dir / TRACES_FILE):
85
85
  if idx in selected and not errored and len(by_idx[idx]) < num_rollouts:
86
86
  by_idx[idx].append(offset)
87
87
  keep: list[int] = []
@@ -102,9 +102,9 @@ def plan(
102
102
 
103
103
 
104
104
  def rewrite_results(resume_dir: Path, keep: list[int]) -> None:
105
- """Replace `results.jsonl` with just the kept (good) traces; resumed rollouts append. Via a
105
+ """Replace `traces.jsonl` with just the kept (good) traces; resumed rollouts append. Via a
106
106
  temp file + atomic rename, so an interrupted resume can't corrupt the prior good results."""
107
- path = resume_dir / "results.jsonl"
107
+ path = resume_dir / TRACES_FILE
108
108
  tmp = path.with_suffix(".jsonl.tmp")
109
109
  if not keep:
110
110
  tmp.write_bytes(b"")
@@ -89,8 +89,17 @@ async def run_eval(env: Environment, config: EvalConfig) -> list[Trace]:
89
89
  for task in tasks
90
90
  ]
91
91
  rollouts = [rollout for episode in episodes for rollout in episode.rollouts]
92
+ # --push in the live dashboard: share a status the dashboard renders as a line under the
93
+ # rollouts once the run finishes and the upload begins (dim -> green URL / red error), and
94
+ # do the upload inline below so it resolves on screen. Only the rich path has a dashboard;
95
+ # every other path uploads (+ logs the URL) from `main`.
96
+ push_state = None
97
+ if config.push and config.rich:
98
+ from verifiers.v1.push import PushState
99
+
100
+ push_state = PushState()
92
101
  display = (
93
- dashboard(rollouts, config, start, finished=finished)
102
+ dashboard(rollouts, config, start, finished=finished, push=push_state)
94
103
  if config.rich
95
104
  else contextlib.nullcontext()
96
105
  )
@@ -98,7 +107,14 @@ async def run_eval(env: Environment, config: EvalConfig) -> list[Trace]:
98
107
  results = await asyncio.gather(
99
108
  *(episode.run(semaphore, on_complete) for episode in episodes)
100
109
  )
101
- traces = [trace for episode_traces in results for trace in episode_traces]
110
+ traces = [trace for episode_traces in results for trace in episode_traces]
111
+ if (
112
+ push_state is not None
113
+ ): # upload off the event loop so the view keeps refreshing
114
+ from verifiers.v1.push import push_traces
115
+
116
+ push_state.started = True
117
+ await asyncio.to_thread(push_traces, traces, config, push_state)
102
118
  await client.close()
103
119
  return traces
104
120
 
@@ -107,7 +123,7 @@ async def run_eval_server(config: EvalConfig) -> list[Trace]:
107
123
  """Eval through the env-server worker pool (`--num-workers > 0`). Spawns the pool
108
124
  (works for v1 and the v0 bridge), then drives rollouts by task idx over an
109
125
  `EnvClient` — the same path prime-rl trains through, so it exercises the
110
- router + workers end-to-end. Output matches `run_eval` (config.toml + results.jsonl)."""
126
+ router + workers end-to-end. Output matches `run_eval` (config.toml + traces.jsonl)."""
111
127
  import multiprocessing as mp
112
128
  from functools import partial
113
129
 
@@ -1,4 +1,4 @@
1
- """On-disk output: results.jsonl (one full trace per line) + config.toml.
1
+ """On-disk output: traces.jsonl (one full trace per line) + config.toml.
2
2
 
3
3
  The trace is the full data dump — written verbatim, consumed by the platform
4
4
  (visualization) and prime-rl (training). config.toml is the run's resolved EvalConfig,
@@ -7,7 +7,7 @@ its own output. Aggregates (avg reward, etc.) are cheap to recompute from result
7
7
  they aren't stored.
8
8
 
9
9
  The runner writes `config.toml` once up front (`save_config`) and then appends each
10
- trace to `results.jsonl` as it completes (`append_trace`), so a long run's results are
10
+ trace to `traces.jsonl` as it completes (`append_trace`), so a long run's results are
11
11
  durable as they land rather than only at the end.
12
12
  """
13
13
 
@@ -22,6 +22,12 @@ from verifiers.v1.configs.eval import EvalConfig
22
22
  from verifiers.v1.trace import Trace
23
23
  from verifiers.v1.utils.aio import run_shielded
24
24
 
25
+ TRACES_FILE = "traces.jsonl"
26
+ """Filename each run's full per-rollout traces are written to (one JSON trace per line)."""
27
+
28
+ CONFIG_FILE = "config.toml"
29
+ """Filename a run's resolved config is written to (re-runnable via `@ config.toml`)."""
30
+
25
31
 
26
32
  def output_path(config: EvalConfig) -> Path:
27
33
  """Where this run writes: `outputs/<taskset>--<model>--<harness>/<uuid>` (or the explicit
@@ -38,35 +44,33 @@ def write_config(config: BaseModel, results_dir: Path) -> Path:
38
44
  nulls TOML can't represent."""
39
45
  results_dir.mkdir(parents=True, exist_ok=True)
40
46
  toml = tomli_w.dumps(config.model_dump(mode="json", exclude_none=True))
41
- config_path = results_dir / "config.toml"
47
+ config_path = results_dir / CONFIG_FILE
42
48
  config_path.write_text(toml)
43
49
  return config_path
44
50
 
45
51
 
46
52
  def save_config(config: BaseModel, results_dir: Path) -> None:
47
53
  """Set up the run's output dir: write `config.toml` and start a fresh (empty)
48
- `results.jsonl`. Call once up front, before traces start landing."""
54
+ `traces.jsonl`. Call once up front, before traces start landing."""
49
55
  write_config(config, results_dir)
50
- (results_dir / "results.jsonl").write_text(
51
- ""
52
- ) # fresh; appended to as traces complete
56
+ (results_dir / TRACES_FILE).write_text("") # fresh; appended to as traces complete
53
57
 
54
58
 
55
59
  def write_trace(results_dir: Path, trace: Trace) -> None:
56
60
  """Serialize and append one trace in the worker thread."""
57
61
  data = TypeAdapter(type(trace)).dump_json(trace, exclude_none=True)
58
- with (results_dir / "results.jsonl").open("ab") as f:
62
+ with (results_dir / TRACES_FILE).open("ab") as f:
59
63
  f.write(data + b"\n")
60
64
 
61
65
 
62
66
  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
67
+ """Load a run's saved traces from `traces.jsonl`, typed as `trace_type` — the inverse of
64
68
  `write_trace`. Used by `replay` to re-score finished rollouts (pass the taskset's typed
65
69
  `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."""
70
+ Streams line-by-line so a large (multi-GB) traces file isn't loaded into memory at once."""
67
71
  adapter = TypeAdapter(trace_type)
68
72
  traces: list[Trace] = []
69
- with (results_dir / "results.jsonl").open(encoding="utf-8") as f:
73
+ with (results_dir / TRACES_FILE).open(encoding="utf-8") as f:
70
74
  for line in f:
71
75
  if line.strip():
72
76
  traces.append(adapter.validate_python(json.loads(line)))
@@ -23,7 +23,13 @@ from pydantic_config import cli
23
23
 
24
24
  import verifiers.v1 as vf
25
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
26
+ from verifiers.v1.cli.output import (
27
+ CONFIG_FILE,
28
+ append_trace,
29
+ read_traces,
30
+ save_config,
31
+ write_config,
32
+ )
27
33
  from verifiers.v1.configs.replay import ReplayConfig
28
34
  from verifiers.v1.state import state_cls
29
35
  from verifiers.v1.task import WireTask
@@ -138,7 +144,7 @@ def main(argv: list[str] | None = None) -> None:
138
144
  cli(ReplayConfig) # full, typed pydantic-config option help
139
145
  return
140
146
  source = Path(argv.pop(0)) # the finished run dir to replay
141
- config_path = source / "config.toml"
147
+ config_path = source / CONFIG_FILE
142
148
  if not config_path.exists():
143
149
  raise SystemExit(f"{USAGE}\nno config.toml in {source}")
144
150
 
@@ -46,7 +46,7 @@ class DebugConfig(BaseConfig):
46
46
  output_dir: Path | None = Field(
47
47
  None, validation_alias=AliasChoices("output_dir", "o")
48
48
  )
49
- """Where to write `config.toml` and `results.jsonl`. None = a fresh per-run dir."""
49
+ """Where to write `config.toml` and `traces.jsonl`. None = a fresh per-run dir."""
50
50
 
51
51
  @property
52
52
  def name(self) -> str:
@@ -54,10 +54,14 @@ class EvalConfig(EnvServerConfig):
54
54
  server: bool = False
55
55
  """Drive rollouts through the env-server worker pool (sized by `--pool.*`) instead of
56
56
  in-process — the path prime-rl trains through. Incompatible with `--rich`."""
57
+ push: bool = True
58
+ """Upload the finished run to the Prime Intellect platform (the private Evaluations
59
+ tab) at the end of the eval. On by default; disable with `--no-push`. Needs
60
+ `$PRIME_API_KEY` or `prime login`."""
57
61
  output_dir: Path | None = Field(
58
62
  None, validation_alias=AliasChoices("output_dir", "o")
59
63
  )
60
- """Where to write the run (config.toml + results.jsonl). None = a fresh per-run dir
64
+ """Where to write the run (config.toml + traces.jsonl). None = a fresh per-run dir
61
65
  under `outputs/<env>--<model>--<harness>/<uuid>` (so runs never overwrite each other)."""
62
66
  resume: Path | None = Field(None, exclude=True)
63
67
  """Set by `--resume <dir>`: re-run only the rollouts a previous run left missing or
@@ -49,7 +49,7 @@ class ReplayConfig(BaseConfig):
49
49
  output_dir: Path | None = Field(
50
50
  None, validation_alias=AliasChoices("output_dir", "o")
51
51
  )
52
- """Where to write the re-scored run (config.toml + results.jsonl). None = a fresh per-run
52
+ """Where to write the re-scored run (config.toml + traces.jsonl). None = a fresh per-run
53
53
  dir under `outputs/<taskset>--replay/<uuid>` (so a replay never overwrites the source run)."""
54
54
 
55
55
  @property
@@ -435,7 +435,7 @@ async def run_legacy_eval(config) -> list[Trace]:
435
435
 
436
436
  Loads the v0 env, runs `num_rollouts` per task with bounded concurrency, maps each v0
437
437
  `RolloutOutput` to a v1 `Trace` (`rollout_output_to_trace`), persists results as they
438
- land (the same `results.jsonl` / `config.toml` a native run writes), and returns the
438
+ land (the same `traces.jsonl` / `config.toml` a native run writes), and returns the
439
439
  traces. The v0 env is run directly (`env.run_rollout`, no env server), so this needs no
440
440
  runtime / interception server. All v0 specifics live here; the CLI only branches on
441
441
  `config.is_legacy`."""
@@ -0,0 +1,209 @@
1
+ """Push a finished eval run to the Prime Intellect platform (`uv run eval`, `--no-push` to skip).
2
+
3
+ On by default. Converts each in-memory v1 `Trace` to the platform's (v0) eval-sample schema
4
+ (`trace_to_sample`) and uploads the run over the `/evaluations/` API (create -> push samples ->
5
+ finalize) — the same contract
6
+ `prime eval push` uploads a saved run through, done inline at the end of a run rather than
7
+ later from disk. Auth + base URL come from `$PRIME_API_KEY` / `~/.prime/config.json`
8
+ (written by `prime login`), like the rest of the CLI.
9
+ """
10
+
11
+ import logging
12
+ import os
13
+ from dataclasses import dataclass
14
+ from typing import Any
15
+
16
+ import httpx
17
+
18
+ from verifiers.utils.client_utils import load_prime_config
19
+ from verifiers.v1.configs.eval import EvalConfig
20
+ from verifiers.v1.trace import Trace
21
+
22
+ logger = logging.getLogger(__name__)
23
+
24
+ DEFAULT_API_URL = "https://api.primeintellect.ai"
25
+ DEFAULT_FRONTEND_URL = "https://app.primeintellect.ai"
26
+
27
+
28
+ @dataclass
29
+ class PushState:
30
+ """Live status of the push, shared with the v1 `--rich` dashboard so it can show a status line
31
+ under the rollouts once the run finishes and the upload begins: dim while uploading, then the
32
+ viewer URL (green) or the error (red). `started` flips true when the upload begins (the caller
33
+ sets it), `done` when it returns; `url` is set on success and `error` on a skip/failure. No line
34
+ is shown until `started`. Populated by `push_traces` (pass the state in)."""
35
+
36
+ started: bool = False
37
+ done: bool = False
38
+ url: str | None = None
39
+ error: str | None = None
40
+
41
+
42
+ def trace_to_sample(trace: Trace, rollout_number: int = 1) -> dict[str, Any]:
43
+ """One rollout -> the platform's sample dict (the "old" v0 eval-sample format).
44
+
45
+ The conversation is the unit — no prompt/completion split (meaningless mid-branch):
46
+ `completion` is the final branch's messages and `trajectory` carries one message list per
47
+ branch. `rollout_number` is this rollout's 1-based index within its task's group (callers that
48
+ don't group rollouts can leave it at the default)."""
49
+
50
+ def dump(messages):
51
+ return [m.model_dump(mode="json", exclude_none=True) for m in messages]
52
+
53
+ task = trace.task.model_dump(mode="json", exclude_none=True)
54
+ branches = trace.branches
55
+ sample = {
56
+ "sample_id": trace.id,
57
+ "example_id": trace.task.idx,
58
+ "rollout_number": rollout_number,
59
+ "task": task,
60
+ "prompt": [],
61
+ "completion": dump(branches[-1].messages) if branches else [],
62
+ "answer": task.get("answer"),
63
+ "reward": trace.reward,
64
+ "timing": trace.timing.model_dump(mode="json", exclude_none=True),
65
+ "is_completed": trace.is_completed,
66
+ "is_truncated": trace.is_truncated,
67
+ "metrics": trace.metrics,
68
+ "error": trace.error.model_dump(mode="json", exclude_none=True)
69
+ if trace.error
70
+ else None,
71
+ "stop_condition": trace.stop_condition,
72
+ "trajectory": [
73
+ {
74
+ "messages": dump(branch.messages),
75
+ "num_input_tokens": branch.num_input_tokens,
76
+ "num_output_tokens": branch.num_output_tokens,
77
+ }
78
+ for branch in branches
79
+ ],
80
+ "token_usage": trace.usage.model_dump(mode="json", exclude_none=True)
81
+ if trace.usage
82
+ else None,
83
+ "info": dict(trace.info) or None,
84
+ }
85
+ # Flatten each sub-reward onto the sample as a top-level key, the way v0's `state_to_output`
86
+ # does. Env metrics stay in the nested `metrics` field.
87
+ for name, value in trace.rewards.items():
88
+ sample.setdefault(name, value)
89
+ return sample
90
+
91
+
92
+ def _creds() -> tuple[str | None, str, str, str | None]:
93
+ """(api_key, api_base, frontend_url, team_id) from env vars / `~/.prime/config.json`."""
94
+ cfg = load_prime_config()
95
+ api_key = os.getenv("PRIME_API_KEY") or cfg.get("api_key")
96
+ base = (
97
+ os.getenv("PRIME_API_BASE_URL")
98
+ or os.getenv("PRIME_BASE_URL")
99
+ or cfg.get("base_url")
100
+ or DEFAULT_API_URL
101
+ )
102
+ base = base.rstrip("/").removesuffix("/api/v1")
103
+ frontend = (
104
+ os.getenv("PRIME_FRONTEND_URL")
105
+ or cfg.get("frontend_url")
106
+ or DEFAULT_FRONTEND_URL
107
+ )
108
+ team_id = os.getenv("PRIME_TEAM_ID") or cfg.get("team_id")
109
+ return api_key, base, frontend, team_id
110
+
111
+
112
+ def push_traces(
113
+ traces: list[Trace], config: EvalConfig, state: "PushState | None" = None
114
+ ) -> str | None:
115
+ """Upload a finished run to the platform; return the viewer URL (None if skipped/failed).
116
+
117
+ Resolves the env (get-or-create) by name so a local run uploads without a prior
118
+ `prime env push`, then create evaluation -> push samples -> finalize. When `state` is given
119
+ (the v1 `--rich` path), record the outcome on it (`url` on success, `error` on skip/failure,
120
+ `done` when finished) so the dashboard's status line resolves."""
121
+
122
+ def finish(url: str | None = None, error: str | None = None) -> str | None:
123
+ if state is not None:
124
+ state.url = url
125
+ state.error = error
126
+ state.done = True
127
+ return url
128
+
129
+ api_key, base, frontend, team_id = _creds()
130
+ if not api_key:
131
+ logger.warning(
132
+ "--push: no PRIME_API_KEY (set it or run `prime login`); skipping upload"
133
+ )
134
+ return finish(error="no PRIME_API_KEY (run `prime login`)")
135
+
136
+ def compute_metrics() -> dict[str, Any]:
137
+ """Run-level aggregates as v0's `GenerateMetadata`: `avg_reward` (mean over all traces),
138
+ `avg_metrics` (each sub-reward and env-metric averaged over the traces that recorded it),
139
+ and `avg_error` (errored fraction) — what the overview renders."""
140
+ sums: dict[str, float] = {}
141
+ counts: dict[str, int] = {}
142
+ for trace in traces:
143
+ for name, value in {**trace.rewards, **trace.metrics}.items():
144
+ sums[name] = sums.get(name, 0.0) + value
145
+ counts[name] = counts.get(name, 0) + 1
146
+ n = len(traces)
147
+ return {
148
+ "avg_reward": sum(t.reward for t in traces) / n if n else 0.0,
149
+ "avg_metrics": {name: sums[name] / counts[name] for name in sums},
150
+ "avg_error": sum(t.has_error for t in traces) / n if n else 0.0,
151
+ }
152
+
153
+ env_name = config.taskset.id or config.id
154
+ metrics = compute_metrics()
155
+ counts: dict[int, int] = {}
156
+ samples = []
157
+ for trace in traces:
158
+ counts[trace.task.idx] = counts.get(trace.task.idx, 0) + 1
159
+ samples.append(trace_to_sample(trace, counts[trace.task.idx]))
160
+
161
+ metadata = {
162
+ "framework": "verifiers",
163
+ "run_id": config.uuid,
164
+ "model": config.model,
165
+ "num_examples": len(counts),
166
+ "rollouts_per_example": config.num_rollouts,
167
+ **metrics,
168
+ }
169
+
170
+ team = {"team_id": team_id} if team_id else {}
171
+ api = f"{base}/api/v1"
172
+ headers = {"Authorization": f"Bearer {api_key}", "Content-Type": "application/json"}
173
+ # The run is already done and its results saved; a network blip or platform error here must
174
+ # not crash the run (or, on the non-rich path, swallow the final per-trace output that prints
175
+ # after this) — log and skip the upload instead.
176
+ try:
177
+ with httpx.Client(headers=headers, timeout=300.0) as client:
178
+
179
+ def post(path: str, body: dict) -> dict:
180
+ resp = client.post(f"{api}{path}", json=body)
181
+ resp.raise_for_status()
182
+ return resp.json()
183
+
184
+ env_id = post("/environmentshub/resolve", {"name": env_name, **team})[
185
+ "data"
186
+ ]["id"]
187
+ eval_id = post(
188
+ "/evaluations/",
189
+ {
190
+ "name": f"{env_name}--{config.model}--{config.uuid[:8]}",
191
+ "environments": [{"id": env_id}],
192
+ "model_name": config.model,
193
+ "dataset": env_name,
194
+ "framework": "verifiers",
195
+ "metadata": metadata,
196
+ "metrics": metrics,
197
+ "tags": [],
198
+ **team,
199
+ },
200
+ )["evaluation_id"]
201
+ post(f"/evaluations/{eval_id}/samples", {"samples": samples})
202
+ post(f"/evaluations/{eval_id}/finalize", {"metrics": metrics})
203
+ except Exception as e:
204
+ logger.warning("--push: upload failed (%s: %s); skipping", type(e).__name__, e)
205
+ return finish(error=f"{type(e).__name__}: {e}")
206
+
207
+ url = f"{frontend}/dashboard/evaluations/{eval_id}"
208
+ logger.info("--push: uploaded %d samples -> %s", len(samples), url)
209
+ return finish(url=url)
@@ -3,7 +3,7 @@
3
3
  `Trace.state` is a typed, mutable `State` that a rollout's tool servers (`@vf.tool`) and user
4
4
  simulator (`respond`) read+write as `self.state` (synced over the interception server per call), and
5
5
  that `@reward`/`@metric`/`finalize` read+write directly off the trace. Unlike `Trace.info` — the
6
- free-form artifact bag persisted to `results.jsonl` — `state` is transient runtime scratch (counters,
6
+ free-form artifact bag persisted to `traces.jsonl` — `state` is transient runtime scratch (counters,
7
7
  game progress, an end-of-trajectory flag): never written to disk or sent over the wire.
8
8
 
9
9
  The base `State` is empty — the framework holds no opinion about its contents. Subclass it to declare
@@ -2,7 +2,7 @@
2
2
 
3
3
  A `Trace[TaskT]` carries the typed task plus everything produced during a
4
4
  rollout (conversation, per-turn responses, reward, metrics, timing, error). It is
5
- the canonical full data dump — written to disk (`results.jsonl`) and consumed by
5
+ the canonical full data dump — written to disk (`traces.jsonl`) and consumed by
6
6
  the platform (visualization) and prime-rl (training). Environments subclass it to
7
7
  add typed scratch/result fields. The rollout mutates it directly; this replaces
8
8
  v1's 600-line `dict`-subclass `State` and its dual "contract version" machinery.
@@ -234,7 +234,7 @@ class Trace(StrictBaseModel, Generic[TaskT, StateT]):
234
234
  a reward nor a metric — anything an author wants to scrape off the live runtime and persist
235
235
  with the trace (captured logs, command output, container/runtime state, artifact paths).
236
236
  Populate it from the runtime in `finalize` (or a `@reward`/`@metric`) by assigning into the
237
- dict (`trace.info["build_log"] = ...`); it round-trips through the wire to `results.jsonl`.
237
+ dict (`trace.info["build_log"] = ...`); it round-trips through the wire to `traces.jsonl`.
238
238
  Use `metrics` for numbers that aggregate, this for everything else. Values must be
239
239
  JSON-serializable — a non-serializable value fails the trace dump rather than being dropped."""
240
240
  state: StateT = Field(default_factory=State, exclude=True)
@@ -464,7 +464,7 @@ class Trace(StrictBaseModel, Generic[TaskT, StateT]):
464
464
  self.stop("error")
465
465
 
466
466
  def to_record(self) -> dict[str, Any]:
467
- """A JSON-serializable record of this rollout for `results.jsonl` / W&B tables.
467
+ """A JSON-serializable record of this rollout for `traces.jsonl` / W&B tables.
468
468
 
469
469
  `model_dump(mode="json")` minus the per-node training tensors (`_NODE_DUMP_EXCLUDE`):
470
470
  those carry raw numpy bytes that JSON can't encode (the plain dump raises