verifiers 0.1.15.dev434__tar.gz → 0.1.15.dev436__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.dev434 → verifiers-0.1.15.dev436}/PKG-INFO +1 -1
  2. {verifiers-0.1.15.dev434 → verifiers-0.1.15.dev436}/verifiers/v1/cli/dashboard/eval.py +40 -8
  3. {verifiers-0.1.15.dev434 → verifiers-0.1.15.dev436}/verifiers/v1/cli/eval/main.py +4 -0
  4. {verifiers-0.1.15.dev434 → verifiers-0.1.15.dev436}/verifiers/v1/cli/eval/runner.py +18 -2
  5. {verifiers-0.1.15.dev434 → verifiers-0.1.15.dev436}/verifiers/v1/clients/eval.py +15 -2
  6. {verifiers-0.1.15.dev434 → verifiers-0.1.15.dev436}/verifiers/v1/configs/eval.py +4 -0
  7. verifiers-0.1.15.dev436/verifiers/v1/push.py +209 -0
  8. {verifiers-0.1.15.dev434 → verifiers-0.1.15.dev436}/.gitignore +0 -0
  9. {verifiers-0.1.15.dev434 → verifiers-0.1.15.dev436}/LICENSE +0 -0
  10. {verifiers-0.1.15.dev434 → verifiers-0.1.15.dev436}/README.md +0 -0
  11. {verifiers-0.1.15.dev434 → verifiers-0.1.15.dev436}/pyproject.toml +0 -0
  12. {verifiers-0.1.15.dev434 → verifiers-0.1.15.dev436}/tests/AGENTS.md +0 -0
  13. {verifiers-0.1.15.dev434 → verifiers-0.1.15.dev436}/tests/README.md +0 -0
  14. {verifiers-0.1.15.dev434 → verifiers-0.1.15.dev436}/tests/__init__.py +0 -0
  15. {verifiers-0.1.15.dev434 → verifiers-0.1.15.dev436}/tests/conftest.py +0 -0
  16. {verifiers-0.1.15.dev434 → verifiers-0.1.15.dev436}/tests/test_browser_env.py +0 -0
  17. {verifiers-0.1.15.dev434 → verifiers-0.1.15.dev436}/tests/test_build_script.py +0 -0
  18. {verifiers-0.1.15.dev434 → verifiers-0.1.15.dev436}/tests/test_cli_agent_env.py +0 -0
  19. {verifiers-0.1.15.dev434 → verifiers-0.1.15.dev436}/tests/test_client_auth_errors.py +0 -0
  20. {verifiers-0.1.15.dev434 → verifiers-0.1.15.dev436}/tests/test_client_config.py +0 -0
  21. {verifiers-0.1.15.dev434 → verifiers-0.1.15.dev436}/tests/test_client_multimodal_types.py +0 -0
  22. {verifiers-0.1.15.dev434 → verifiers-0.1.15.dev436}/tests/test_composable_env.py +0 -0
  23. {verifiers-0.1.15.dev434 → verifiers-0.1.15.dev436}/tests/test_context_token_metrics.py +0 -0
  24. {verifiers-0.1.15.dev434 → verifiers-0.1.15.dev436}/tests/test_decorator_ranks.py +0 -0
  25. {verifiers-0.1.15.dev434 → verifiers-0.1.15.dev436}/tests/test_endpoint_registry.py +0 -0
  26. {verifiers-0.1.15.dev434 → verifiers-0.1.15.dev436}/tests/test_env_group.py +0 -0
  27. {verifiers-0.1.15.dev434 → verifiers-0.1.15.dev436}/tests/test_env_server.py +0 -0
  28. {verifiers-0.1.15.dev434 → verifiers-0.1.15.dev436}/tests/test_environment.py +0 -0
  29. {verifiers-0.1.15.dev434 → verifiers-0.1.15.dev436}/tests/test_environment_extra.py +0 -0
  30. {verifiers-0.1.15.dev434 → verifiers-0.1.15.dev436}/tests/test_envs.py +0 -0
  31. {verifiers-0.1.15.dev434 → verifiers-0.1.15.dev436}/tests/test_error_chain.py +0 -0
  32. {verifiers-0.1.15.dev434 → verifiers-0.1.15.dev436}/tests/test_eval_display.py +0 -0
  33. {verifiers-0.1.15.dev434 → verifiers-0.1.15.dev436}/tests/test_eval_utils.py +0 -0
  34. {verifiers-0.1.15.dev434 → verifiers-0.1.15.dev436}/tests/test_gepa_cli.py +0 -0
  35. {verifiers-0.1.15.dev434 → verifiers-0.1.15.dev436}/tests/test_gepa_utils.py +0 -0
  36. {verifiers-0.1.15.dev434 → verifiers-0.1.15.dev436}/tests/test_gym_env.py +0 -0
  37. {verifiers-0.1.15.dev434 → verifiers-0.1.15.dev436}/tests/test_harbor_env_mcp.py +0 -0
  38. {verifiers-0.1.15.dev434 → verifiers-0.1.15.dev436}/tests/test_imports.py +0 -0
  39. {verifiers-0.1.15.dev434 → verifiers-0.1.15.dev436}/tests/test_init_script.py +0 -0
  40. {verifiers-0.1.15.dev434 → verifiers-0.1.15.dev436}/tests/test_install_utils.py +0 -0
  41. {verifiers-0.1.15.dev434 → verifiers-0.1.15.dev436}/tests/test_interception_utils.py +0 -0
  42. {verifiers-0.1.15.dev434 → verifiers-0.1.15.dev436}/tests/test_logging.py +0 -0
  43. {verifiers-0.1.15.dev434 → verifiers-0.1.15.dev436}/tests/test_math_rubric.py +0 -0
  44. {verifiers-0.1.15.dev434 → verifiers-0.1.15.dev436}/tests/test_maybe_think_parser.py +0 -0
  45. {verifiers-0.1.15.dev434 → verifiers-0.1.15.dev436}/tests/test_message_utils.py +0 -0
  46. {verifiers-0.1.15.dev434 → verifiers-0.1.15.dev436}/tests/test_message_utils_multimodal.py +0 -0
  47. {verifiers-0.1.15.dev434 → verifiers-0.1.15.dev436}/tests/test_multiturn_env.py +0 -0
  48. {verifiers-0.1.15.dev434 → verifiers-0.1.15.dev436}/tests/test_nemorl_client.py +0 -0
  49. {verifiers-0.1.15.dev434 → verifiers-0.1.15.dev436}/tests/test_openai_chat_completions_token_client.py +0 -0
  50. {verifiers-0.1.15.dev434 → verifiers-0.1.15.dev436}/tests/test_openai_responses_client.py +0 -0
  51. {verifiers-0.1.15.dev434 → verifiers-0.1.15.dev436}/tests/test_opencode_rlm_env.py +0 -0
  52. {verifiers-0.1.15.dev434 → verifiers-0.1.15.dev436}/tests/test_openenv_client.py +0 -0
  53. {verifiers-0.1.15.dev434 → verifiers-0.1.15.dev436}/tests/test_parser.py +0 -0
  54. {verifiers-0.1.15.dev434 → verifiers-0.1.15.dev436}/tests/test_path_utils.py +0 -0
  55. {verifiers-0.1.15.dev434 → verifiers-0.1.15.dev436}/tests/test_per_turn_timing.py +0 -0
  56. {verifiers-0.1.15.dev434 → verifiers-0.1.15.dev436}/tests/test_pricing_utils.py +0 -0
  57. {verifiers-0.1.15.dev434 → verifiers-0.1.15.dev436}/tests/test_prime_plugin.py +0 -0
  58. {verifiers-0.1.15.dev434 → verifiers-0.1.15.dev436}/tests/test_renderer_client.py +0 -0
  59. {verifiers-0.1.15.dev434 → verifiers-0.1.15.dev436}/tests/test_renderer_e2e.py +0 -0
  60. {verifiers-0.1.15.dev434 → verifiers-0.1.15.dev436}/tests/test_rlm_composable_env.py +0 -0
  61. {verifiers-0.1.15.dev434 → verifiers-0.1.15.dev436}/tests/test_rubric.py +0 -0
  62. {verifiers-0.1.15.dev434 → verifiers-0.1.15.dev436}/tests/test_rubric_group.py +0 -0
  63. {verifiers-0.1.15.dev434 → verifiers-0.1.15.dev436}/tests/test_sandbox_debug_env.py +0 -0
  64. {verifiers-0.1.15.dev434 → verifiers-0.1.15.dev436}/tests/test_sandbox_env.py +0 -0
  65. {verifiers-0.1.15.dev434 → verifiers-0.1.15.dev436}/tests/test_sandbox_mixin.py +0 -0
  66. {verifiers-0.1.15.dev434 → verifiers-0.1.15.dev436}/tests/test_save_utils.py +0 -0
  67. {verifiers-0.1.15.dev434 → verifiers-0.1.15.dev436}/tests/test_setup_script.py +0 -0
  68. {verifiers-0.1.15.dev434 → verifiers-0.1.15.dev436}/tests/test_singleturn_env.py +0 -0
  69. {verifiers-0.1.15.dev434 → verifiers-0.1.15.dev436}/tests/test_stateful_tool_env.py +0 -0
  70. {verifiers-0.1.15.dev434 → verifiers-0.1.15.dev436}/tests/test_think_parser.py +0 -0
  71. {verifiers-0.1.15.dev434 → verifiers-0.1.15.dev436}/tests/test_tool_env.py +0 -0
  72. {verifiers-0.1.15.dev434 → verifiers-0.1.15.dev436}/tests/test_tool_utils.py +0 -0
  73. {verifiers-0.1.15.dev434 → verifiers-0.1.15.dev436}/tests/test_trajectory_processing.py +0 -0
  74. {verifiers-0.1.15.dev434 → verifiers-0.1.15.dev436}/tests/test_tui_info_formatting.py +0 -0
  75. {verifiers-0.1.15.dev434 → verifiers-0.1.15.dev436}/tests/test_types.py +0 -0
  76. {verifiers-0.1.15.dev434 → verifiers-0.1.15.dev436}/tests/test_wordle_env.py +0 -0
  77. {verifiers-0.1.15.dev434 → verifiers-0.1.15.dev436}/tests/test_xml_parser.py +0 -0
  78. {verifiers-0.1.15.dev434 → verifiers-0.1.15.dev436}/tests/v1/conftest.py +0 -0
  79. {verifiers-0.1.15.dev434 → verifiers-0.1.15.dev436}/tests/v1/fixtures/counter_tool_v1.py +0 -0
  80. {verifiers-0.1.15.dev434 → verifiers-0.1.15.dev436}/tests/v1/fixtures/echo_agentic_v1.py +0 -0
  81. {verifiers-0.1.15.dev434 → verifiers-0.1.15.dev436}/tests/v1/fixtures/echo_multi_v0.py +0 -0
  82. {verifiers-0.1.15.dev434 → verifiers-0.1.15.dev436}/tests/v1/fixtures/echo_tool_v1.py +0 -0
  83. {verifiers-0.1.15.dev434 → verifiers-0.1.15.dev436}/tests/v1/fixtures/echo_user_sim_v1.py +0 -0
  84. {verifiers-0.1.15.dev434 → verifiers-0.1.15.dev436}/tests/v1/fixtures/echo_v0.py +0 -0
  85. {verifiers-0.1.15.dev434 → verifiers-0.1.15.dev436}/tests/v1/fixtures/echo_v1.py +0 -0
  86. {verifiers-0.1.15.dev434 → verifiers-0.1.15.dev436}/tests/v1/fixtures/pyproject.toml +0 -0
  87. {verifiers-0.1.15.dev434 → verifiers-0.1.15.dev436}/tests/v1/fixtures/tool_response_image_v1.py +0 -0
  88. {verifiers-0.1.15.dev434 → verifiers-0.1.15.dev436}/tests/v1/test_color_codeword_tasks.py +0 -0
  89. {verifiers-0.1.15.dev434 → verifiers-0.1.15.dev436}/tests/v1/test_configs.py +0 -0
  90. {verifiers-0.1.15.dev434 → verifiers-0.1.15.dev436}/tests/v1/test_e2e.py +0 -0
  91. {verifiers-0.1.15.dev434 → verifiers-0.1.15.dev436}/tests/v1/test_envs.py +0 -0
  92. {verifiers-0.1.15.dev434 → verifiers-0.1.15.dev436}/tests/v1/test_graph.py +0 -0
  93. {verifiers-0.1.15.dev434 → verifiers-0.1.15.dev436}/tests/v1/test_judges.py +0 -0
  94. {verifiers-0.1.15.dev434 → verifiers-0.1.15.dev436}/tests/v1/test_legacy.py +0 -0
  95. {verifiers-0.1.15.dev434 → verifiers-0.1.15.dev436}/tests/v1/test_scoring.py +0 -0
  96. {verifiers-0.1.15.dev434 → verifiers-0.1.15.dev436}/tests/v1/test_trace.py +0 -0
  97. {verifiers-0.1.15.dev434 → verifiers-0.1.15.dev436}/verifiers/AGENTS.md +0 -0
  98. {verifiers-0.1.15.dev434 → verifiers-0.1.15.dev436}/verifiers/__init__.py +0 -0
  99. {verifiers-0.1.15.dev434 → verifiers-0.1.15.dev436}/verifiers/cli/__init__.py +0 -0
  100. {verifiers-0.1.15.dev434 → verifiers-0.1.15.dev436}/verifiers/cli/commands/__init__.py +0 -0
  101. {verifiers-0.1.15.dev434 → verifiers-0.1.15.dev436}/verifiers/cli/commands/build.py +0 -0
  102. {verifiers-0.1.15.dev434 → verifiers-0.1.15.dev436}/verifiers/cli/commands/eval.py +0 -0
  103. {verifiers-0.1.15.dev434 → verifiers-0.1.15.dev436}/verifiers/cli/commands/gepa.py +0 -0
  104. {verifiers-0.1.15.dev434 → verifiers-0.1.15.dev436}/verifiers/cli/commands/init.py +0 -0
  105. {verifiers-0.1.15.dev434 → verifiers-0.1.15.dev436}/verifiers/cli/commands/install.py +0 -0
  106. {verifiers-0.1.15.dev434 → verifiers-0.1.15.dev436}/verifiers/cli/commands/setup.py +0 -0
  107. {verifiers-0.1.15.dev434 → verifiers-0.1.15.dev436}/verifiers/cli/plugins/__init__.py +0 -0
  108. {verifiers-0.1.15.dev434 → verifiers-0.1.15.dev436}/verifiers/cli/plugins/prime.py +0 -0
  109. {verifiers-0.1.15.dev434 → verifiers-0.1.15.dev436}/verifiers/cli/tui.py +0 -0
  110. {verifiers-0.1.15.dev434 → verifiers-0.1.15.dev436}/verifiers/clients/__init__.py +0 -0
  111. {verifiers-0.1.15.dev434 → verifiers-0.1.15.dev436}/verifiers/clients/anthropic_messages_client.py +0 -0
  112. {verifiers-0.1.15.dev434 → verifiers-0.1.15.dev436}/verifiers/clients/client.py +0 -0
  113. {verifiers-0.1.15.dev434 → verifiers-0.1.15.dev436}/verifiers/clients/nemorl_chat_completions_client.py +0 -0
  114. {verifiers-0.1.15.dev434 → verifiers-0.1.15.dev436}/verifiers/clients/openai_chat_completions_client.py +0 -0
  115. {verifiers-0.1.15.dev434 → verifiers-0.1.15.dev436}/verifiers/clients/openai_chat_completions_token_client.py +0 -0
  116. {verifiers-0.1.15.dev434 → verifiers-0.1.15.dev436}/verifiers/clients/openai_completions_client.py +0 -0
  117. {verifiers-0.1.15.dev434 → verifiers-0.1.15.dev436}/verifiers/clients/openai_responses_client.py +0 -0
  118. {verifiers-0.1.15.dev434 → verifiers-0.1.15.dev436}/verifiers/clients/renderer_client.py +0 -0
  119. {verifiers-0.1.15.dev434 → verifiers-0.1.15.dev436}/verifiers/decorators.py +0 -0
  120. {verifiers-0.1.15.dev434 → verifiers-0.1.15.dev436}/verifiers/envs/AGENTS.md +0 -0
  121. {verifiers-0.1.15.dev434 → verifiers-0.1.15.dev436}/verifiers/envs/__init__.py +0 -0
  122. {verifiers-0.1.15.dev434 → verifiers-0.1.15.dev436}/verifiers/envs/env_group.py +0 -0
  123. {verifiers-0.1.15.dev434 → verifiers-0.1.15.dev436}/verifiers/envs/environment.py +0 -0
  124. {verifiers-0.1.15.dev434 → verifiers-0.1.15.dev436}/verifiers/envs/experimental/README.md +0 -0
  125. {verifiers-0.1.15.dev434 → verifiers-0.1.15.dev436}/verifiers/envs/experimental/__init__.py +0 -0
  126. {verifiers-0.1.15.dev434 → verifiers-0.1.15.dev436}/verifiers/envs/experimental/cli_agent_env.py +0 -0
  127. {verifiers-0.1.15.dev434 → verifiers-0.1.15.dev436}/verifiers/envs/experimental/composable/README.md +0 -0
  128. {verifiers-0.1.15.dev434 → verifiers-0.1.15.dev436}/verifiers/envs/experimental/composable/__init__.py +0 -0
  129. {verifiers-0.1.15.dev434 → verifiers-0.1.15.dev436}/verifiers/envs/experimental/composable/_filter.py +0 -0
  130. {verifiers-0.1.15.dev434 → verifiers-0.1.15.dev436}/verifiers/envs/experimental/composable/composable_env.py +0 -0
  131. {verifiers-0.1.15.dev434 → verifiers-0.1.15.dev436}/verifiers/envs/experimental/composable/harness.py +0 -0
  132. {verifiers-0.1.15.dev434 → verifiers-0.1.15.dev436}/verifiers/envs/experimental/composable/harnesses/__init__.py +0 -0
  133. {verifiers-0.1.15.dev434 → verifiers-0.1.15.dev436}/verifiers/envs/experimental/composable/harnesses/mini_swe_agent.py +0 -0
  134. {verifiers-0.1.15.dev434 → verifiers-0.1.15.dev436}/verifiers/envs/experimental/composable/harnesses/opencode.py +0 -0
  135. {verifiers-0.1.15.dev434 → verifiers-0.1.15.dev436}/verifiers/envs/experimental/composable/harnesses/prompt.txt +0 -0
  136. {verifiers-0.1.15.dev434 → verifiers-0.1.15.dev436}/verifiers/envs/experimental/composable/harnesses/rlm.py +0 -0
  137. {verifiers-0.1.15.dev434 → verifiers-0.1.15.dev436}/verifiers/envs/experimental/composable/sandbox_debug_env.py +0 -0
  138. {verifiers-0.1.15.dev434 → verifiers-0.1.15.dev436}/verifiers/envs/experimental/composable/swe_debug_env.py +0 -0
  139. {verifiers-0.1.15.dev434 → verifiers-0.1.15.dev436}/verifiers/envs/experimental/composable/task.py +0 -0
  140. {verifiers-0.1.15.dev434 → verifiers-0.1.15.dev436}/verifiers/envs/experimental/composable/tasksets/__init__.py +0 -0
  141. {verifiers-0.1.15.dev434 → verifiers-0.1.15.dev436}/verifiers/envs/experimental/composable/tasksets/cp/__init__.py +0 -0
  142. {verifiers-0.1.15.dev434 → verifiers-0.1.15.dev436}/verifiers/envs/experimental/composable/tasksets/cp/cp_task.py +0 -0
  143. {verifiers-0.1.15.dev434 → verifiers-0.1.15.dev436}/verifiers/envs/experimental/composable/tasksets/cp/test_utils.py +0 -0
  144. {verifiers-0.1.15.dev434 → verifiers-0.1.15.dev436}/verifiers/envs/experimental/composable/tasksets/harbor/__init__.py +0 -0
  145. {verifiers-0.1.15.dev434 → verifiers-0.1.15.dev436}/verifiers/envs/experimental/composable/tasksets/harbor/cli_gym.py +0 -0
  146. {verifiers-0.1.15.dev434 → verifiers-0.1.15.dev436}/verifiers/envs/experimental/composable/tasksets/harbor/harbor.py +0 -0
  147. {verifiers-0.1.15.dev434 → verifiers-0.1.15.dev436}/verifiers/envs/experimental/composable/tasksets/harbor/terminal_lego.py +0 -0
  148. {verifiers-0.1.15.dev434 → verifiers-0.1.15.dev436}/verifiers/envs/experimental/composable/tasksets/math/__init__.py +0 -0
  149. {verifiers-0.1.15.dev434 → verifiers-0.1.15.dev436}/verifiers/envs/experimental/composable/tasksets/math/math_task.py +0 -0
  150. {verifiers-0.1.15.dev434 → verifiers-0.1.15.dev436}/verifiers/envs/experimental/composable/tasksets/search/README.md +0 -0
  151. {verifiers-0.1.15.dev434 → verifiers-0.1.15.dev436}/verifiers/envs/experimental/composable/tasksets/search/__init__.py +0 -0
  152. {verifiers-0.1.15.dev434 → verifiers-0.1.15.dev436}/verifiers/envs/experimental/composable/tasksets/search/openseeker/README.md +0 -0
  153. {verifiers-0.1.15.dev434 → verifiers-0.1.15.dev436}/verifiers/envs/experimental/composable/tasksets/search/openseeker/__init__.py +0 -0
  154. {verifiers-0.1.15.dev434 → verifiers-0.1.15.dev436}/verifiers/envs/experimental/composable/tasksets/search/openseeker/taskset.py +0 -0
  155. {verifiers-0.1.15.dev434 → verifiers-0.1.15.dev436}/verifiers/envs/experimental/composable/tasksets/search/quest/README.md +0 -0
  156. {verifiers-0.1.15.dev434 → verifiers-0.1.15.dev436}/verifiers/envs/experimental/composable/tasksets/search/quest/__init__.py +0 -0
  157. {verifiers-0.1.15.dev434 → verifiers-0.1.15.dev436}/verifiers/envs/experimental/composable/tasksets/search/quest/obj_task_eval/__init__.py +0 -0
  158. {verifiers-0.1.15.dev434 → verifiers-0.1.15.dev436}/verifiers/envs/experimental/composable/tasksets/search/quest/obj_task_eval/api_tools/__init__.py +0 -0
  159. {verifiers-0.1.15.dev434 → verifiers-0.1.15.dev436}/verifiers/envs/experimental/composable/tasksets/search/quest/obj_task_eval/api_tools/tool_pdf.py +0 -0
  160. {verifiers-0.1.15.dev434 → verifiers-0.1.15.dev436}/verifiers/envs/experimental/composable/tasksets/search/quest/obj_task_eval/eval_toolkit.py +0 -0
  161. {verifiers-0.1.15.dev434 → verifiers-0.1.15.dev436}/verifiers/envs/experimental/composable/tasksets/search/quest/obj_task_eval/evaluator.py +0 -0
  162. {verifiers-0.1.15.dev434 → verifiers-0.1.15.dev436}/verifiers/envs/experimental/composable/tasksets/search/quest/obj_task_eval/llm_client/__init__.py +0 -0
  163. {verifiers-0.1.15.dev434 → verifiers-0.1.15.dev436}/verifiers/envs/experimental/composable/tasksets/search/quest/obj_task_eval/llm_client/base_client.py +0 -0
  164. {verifiers-0.1.15.dev434 → verifiers-0.1.15.dev436}/verifiers/envs/experimental/composable/tasksets/search/quest/obj_task_eval/prompts/__init__.py +0 -0
  165. {verifiers-0.1.15.dev434 → verifiers-0.1.15.dev436}/verifiers/envs/experimental/composable/tasksets/search/quest/obj_task_eval/prompts/cache_prompts.py +0 -0
  166. {verifiers-0.1.15.dev434 → verifiers-0.1.15.dev436}/verifiers/envs/experimental/composable/tasksets/search/quest/obj_task_eval/utils/__init__.py +0 -0
  167. {verifiers-0.1.15.dev434 → verifiers-0.1.15.dev436}/verifiers/envs/experimental/composable/tasksets/search/quest/obj_task_eval/utils/cache_filesys.py +0 -0
  168. {verifiers-0.1.15.dev434 → verifiers-0.1.15.dev436}/verifiers/envs/experimental/composable/tasksets/search/quest/obj_task_eval/utils/load_eval_script.py +0 -0
  169. {verifiers-0.1.15.dev434 → verifiers-0.1.15.dev436}/verifiers/envs/experimental/composable/tasksets/search/quest/obj_task_eval/utils/misc.py +0 -0
  170. {verifiers-0.1.15.dev434 → verifiers-0.1.15.dev436}/verifiers/envs/experimental/composable/tasksets/search/quest/obj_task_eval/utils/tool_visit.py +0 -0
  171. {verifiers-0.1.15.dev434 → verifiers-0.1.15.dev436}/verifiers/envs/experimental/composable/tasksets/search/quest/obj_task_eval/utils/url_tools.py +0 -0
  172. {verifiers-0.1.15.dev434 → verifiers-0.1.15.dev436}/verifiers/envs/experimental/composable/tasksets/search/quest/obj_task_eval/verification_tree.py +0 -0
  173. {verifiers-0.1.15.dev434 → verifiers-0.1.15.dev436}/verifiers/envs/experimental/composable/tasksets/search/quest/open_ended.py +0 -0
  174. {verifiers-0.1.15.dev434 → verifiers-0.1.15.dev436}/verifiers/envs/experimental/composable/tasksets/search/quest/taskset.py +0 -0
  175. {verifiers-0.1.15.dev434 → verifiers-0.1.15.dev436}/verifiers/envs/experimental/composable/tasksets/search/redsearcher/README.md +0 -0
  176. {verifiers-0.1.15.dev434 → verifiers-0.1.15.dev436}/verifiers/envs/experimental/composable/tasksets/search/redsearcher/__init__.py +0 -0
  177. {verifiers-0.1.15.dev434 → verifiers-0.1.15.dev436}/verifiers/envs/experimental/composable/tasksets/search/redsearcher/taskset.py +0 -0
  178. {verifiers-0.1.15.dev434 → verifiers-0.1.15.dev436}/verifiers/envs/experimental/composable/tasksets/search/search_tasksets.py +0 -0
  179. {verifiers-0.1.15.dev434 → verifiers-0.1.15.dev436}/verifiers/envs/experimental/composable/tasksets/swe/README.md +0 -0
  180. {verifiers-0.1.15.dev434 → verifiers-0.1.15.dev436}/verifiers/envs/experimental/composable/tasksets/swe/__init__.py +0 -0
  181. {verifiers-0.1.15.dev434 → verifiers-0.1.15.dev436}/verifiers/envs/experimental/composable/tasksets/swe/multi_swe/__init__.py +0 -0
  182. {verifiers-0.1.15.dev434 → verifiers-0.1.15.dev436}/verifiers/envs/experimental/composable/tasksets/swe/multi_swe/extract_fix_patch.sh +0 -0
  183. {verifiers-0.1.15.dev434 → verifiers-0.1.15.dev436}/verifiers/envs/experimental/composable/tasksets/swe/multi_swe/taskset.py +0 -0
  184. {verifiers-0.1.15.dev434 → verifiers-0.1.15.dev436}/verifiers/envs/experimental/composable/tasksets/swe/openswe/__init__.py +0 -0
  185. {verifiers-0.1.15.dev434 → verifiers-0.1.15.dev436}/verifiers/envs/experimental/composable/tasksets/swe/openswe/taskset.py +0 -0
  186. {verifiers-0.1.15.dev434 → verifiers-0.1.15.dev436}/verifiers/envs/experimental/composable/tasksets/swe/r2e_gym/__init__.py +0 -0
  187. {verifiers-0.1.15.dev434 → verifiers-0.1.15.dev436}/verifiers/envs/experimental/composable/tasksets/swe/r2e_gym/log_parser.py +0 -0
  188. {verifiers-0.1.15.dev434 → verifiers-0.1.15.dev436}/verifiers/envs/experimental/composable/tasksets/swe/r2e_gym/taskset.py +0 -0
  189. {verifiers-0.1.15.dev434 → verifiers-0.1.15.dev436}/verifiers/envs/experimental/composable/tasksets/swe/scale_swe/__init__.py +0 -0
  190. {verifiers-0.1.15.dev434 → verifiers-0.1.15.dev436}/verifiers/envs/experimental/composable/tasksets/swe/scale_swe/taskset.py +0 -0
  191. {verifiers-0.1.15.dev434 → verifiers-0.1.15.dev436}/verifiers/envs/experimental/composable/tasksets/swe/shared/__init__.py +0 -0
  192. {verifiers-0.1.15.dev434 → verifiers-0.1.15.dev436}/verifiers/envs/experimental/composable/tasksets/swe/shared/test_patch.py +0 -0
  193. {verifiers-0.1.15.dev434 → verifiers-0.1.15.dev436}/verifiers/envs/experimental/composable/tasksets/swe/swe_bench/__init__.py +0 -0
  194. {verifiers-0.1.15.dev434 → verifiers-0.1.15.dev436}/verifiers/envs/experimental/composable/tasksets/swe/swe_bench/taskset.py +0 -0
  195. {verifiers-0.1.15.dev434 → verifiers-0.1.15.dev436}/verifiers/envs/experimental/composable/tasksets/swe/swe_lego/__init__.py +0 -0
  196. {verifiers-0.1.15.dev434 → verifiers-0.1.15.dev436}/verifiers/envs/experimental/composable/tasksets/swe/swe_lego/taskset.py +0 -0
  197. {verifiers-0.1.15.dev434 → verifiers-0.1.15.dev436}/verifiers/envs/experimental/composable/tasksets/swe/swe_rebench_v2/__init__.py +0 -0
  198. {verifiers-0.1.15.dev434 → verifiers-0.1.15.dev436}/verifiers/envs/experimental/composable/tasksets/swe/swe_rebench_v2/log_parsers.py +0 -0
  199. {verifiers-0.1.15.dev434 → verifiers-0.1.15.dev436}/verifiers/envs/experimental/composable/tasksets/swe/swe_rebench_v2/taskset.py +0 -0
  200. {verifiers-0.1.15.dev434 → verifiers-0.1.15.dev436}/verifiers/envs/experimental/composable/tasksets/swe/swe_smith/__init__.py +0 -0
  201. {verifiers-0.1.15.dev434 → verifiers-0.1.15.dev436}/verifiers/envs/experimental/composable/tasksets/swe/swe_smith/taskset.py +0 -0
  202. {verifiers-0.1.15.dev434 → verifiers-0.1.15.dev436}/verifiers/envs/experimental/composable/tasksets/swe/swe_tasksets.py +0 -0
  203. {verifiers-0.1.15.dev434 → verifiers-0.1.15.dev436}/verifiers/envs/experimental/gym_env.py +0 -0
  204. {verifiers-0.1.15.dev434 → verifiers-0.1.15.dev436}/verifiers/envs/experimental/harbor_env/__init__.py +0 -0
  205. {verifiers-0.1.15.dev434 → verifiers-0.1.15.dev436}/verifiers/envs/experimental/harbor_env/env.py +0 -0
  206. {verifiers-0.1.15.dev434 → verifiers-0.1.15.dev436}/verifiers/envs/experimental/harbor_env/mcp.py +0 -0
  207. {verifiers-0.1.15.dev434 → verifiers-0.1.15.dev436}/verifiers/envs/experimental/mcp_env.py +0 -0
  208. {verifiers-0.1.15.dev434 → verifiers-0.1.15.dev436}/verifiers/envs/experimental/opencode_env.py +0 -0
  209. {verifiers-0.1.15.dev434 → verifiers-0.1.15.dev436}/verifiers/envs/experimental/opencode_qa_env.py +0 -0
  210. {verifiers-0.1.15.dev434 → verifiers-0.1.15.dev436}/verifiers/envs/experimental/opencode_rlm_env.py +0 -0
  211. {verifiers-0.1.15.dev434 → verifiers-0.1.15.dev436}/verifiers/envs/experimental/sandbox_mixin.py +0 -0
  212. {verifiers-0.1.15.dev434 → verifiers-0.1.15.dev436}/verifiers/envs/experimental/utils/__init__.py +0 -0
  213. {verifiers-0.1.15.dev434 → verifiers-0.1.15.dev436}/verifiers/envs/experimental/utils/file_locks.py +0 -0
  214. {verifiers-0.1.15.dev434 → verifiers-0.1.15.dev436}/verifiers/envs/experimental/utils/git_checkout_cache.py +0 -0
  215. {verifiers-0.1.15.dev434 → verifiers-0.1.15.dev436}/verifiers/envs/integrations/README.md +0 -0
  216. {verifiers-0.1.15.dev434 → verifiers-0.1.15.dev436}/verifiers/envs/integrations/__init__.py +0 -0
  217. {verifiers-0.1.15.dev434 → verifiers-0.1.15.dev436}/verifiers/envs/integrations/browser_env/README.md +0 -0
  218. {verifiers-0.1.15.dev434 → verifiers-0.1.15.dev436}/verifiers/envs/integrations/browser_env/__init__.py +0 -0
  219. {verifiers-0.1.15.dev434 → verifiers-0.1.15.dev436}/verifiers/envs/integrations/browser_env/browser_env.py +0 -0
  220. {verifiers-0.1.15.dev434 → verifiers-0.1.15.dev436}/verifiers/envs/integrations/browser_env/modes/__init__.py +0 -0
  221. {verifiers-0.1.15.dev434 → verifiers-0.1.15.dev436}/verifiers/envs/integrations/browser_env/modes/base.py +0 -0
  222. {verifiers-0.1.15.dev434 → verifiers-0.1.15.dev436}/verifiers/envs/integrations/browser_env/modes/cua_mode.py +0 -0
  223. {verifiers-0.1.15.dev434 → verifiers-0.1.15.dev436}/verifiers/envs/integrations/browser_env/modes/dom_mode.py +0 -0
  224. {verifiers-0.1.15.dev434 → verifiers-0.1.15.dev436}/verifiers/envs/integrations/openenv_env.py +0 -0
  225. {verifiers-0.1.15.dev434 → verifiers-0.1.15.dev436}/verifiers/envs/integrations/reasoninggym_env.py +0 -0
  226. {verifiers-0.1.15.dev434 → verifiers-0.1.15.dev436}/verifiers/envs/integrations/textarena_env.py +0 -0
  227. {verifiers-0.1.15.dev434 → verifiers-0.1.15.dev436}/verifiers/envs/multiturn_env.py +0 -0
  228. {verifiers-0.1.15.dev434 → verifiers-0.1.15.dev436}/verifiers/envs/python_env.py +0 -0
  229. {verifiers-0.1.15.dev434 → verifiers-0.1.15.dev436}/verifiers/envs/sandbox_env.py +0 -0
  230. {verifiers-0.1.15.dev434 → verifiers-0.1.15.dev436}/verifiers/envs/singleturn_env.py +0 -0
  231. {verifiers-0.1.15.dev434 → verifiers-0.1.15.dev436}/verifiers/envs/stateful_tool_env.py +0 -0
  232. {verifiers-0.1.15.dev434 → verifiers-0.1.15.dev436}/verifiers/envs/tool_env.py +0 -0
  233. {verifiers-0.1.15.dev434 → verifiers-0.1.15.dev436}/verifiers/errors.py +0 -0
  234. {verifiers-0.1.15.dev434 → verifiers-0.1.15.dev436}/verifiers/gepa/__init__.py +0 -0
  235. {verifiers-0.1.15.dev434 → verifiers-0.1.15.dev436}/verifiers/gepa/adapter.py +0 -0
  236. {verifiers-0.1.15.dev434 → verifiers-0.1.15.dev436}/verifiers/gepa/config.py +0 -0
  237. {verifiers-0.1.15.dev434 → verifiers-0.1.15.dev436}/verifiers/gepa/display.py +0 -0
  238. {verifiers-0.1.15.dev434 → verifiers-0.1.15.dev436}/verifiers/gepa/gepa_utils.py +0 -0
  239. {verifiers-0.1.15.dev434 → verifiers-0.1.15.dev436}/verifiers/parsers/__init__.py +0 -0
  240. {verifiers-0.1.15.dev434 → verifiers-0.1.15.dev436}/verifiers/parsers/maybe_think_parser.py +0 -0
  241. {verifiers-0.1.15.dev434 → verifiers-0.1.15.dev436}/verifiers/parsers/parser.py +0 -0
  242. {verifiers-0.1.15.dev434 → verifiers-0.1.15.dev436}/verifiers/parsers/think_parser.py +0 -0
  243. {verifiers-0.1.15.dev434 → verifiers-0.1.15.dev436}/verifiers/parsers/xml_parser.py +0 -0
  244. {verifiers-0.1.15.dev434 → verifiers-0.1.15.dev436}/verifiers/rubrics/__init__.py +0 -0
  245. {verifiers-0.1.15.dev434 → verifiers-0.1.15.dev436}/verifiers/rubrics/experimental/hybrid_math_rubric.py +0 -0
  246. {verifiers-0.1.15.dev434 → verifiers-0.1.15.dev436}/verifiers/rubrics/judge_rubric.py +0 -0
  247. {verifiers-0.1.15.dev434 → verifiers-0.1.15.dev436}/verifiers/rubrics/math_rubric.py +0 -0
  248. {verifiers-0.1.15.dev434 → verifiers-0.1.15.dev436}/verifiers/rubrics/rubric.py +0 -0
  249. {verifiers-0.1.15.dev434 → verifiers-0.1.15.dev436}/verifiers/rubrics/rubric_group.py +0 -0
  250. {verifiers-0.1.15.dev434 → verifiers-0.1.15.dev436}/verifiers/scripts/__init__.py +0 -0
  251. {verifiers-0.1.15.dev434 → verifiers-0.1.15.dev436}/verifiers/scripts/build.py +0 -0
  252. {verifiers-0.1.15.dev434 → verifiers-0.1.15.dev436}/verifiers/scripts/eval.py +0 -0
  253. {verifiers-0.1.15.dev434 → verifiers-0.1.15.dev436}/verifiers/scripts/gepa.py +0 -0
  254. {verifiers-0.1.15.dev434 → verifiers-0.1.15.dev436}/verifiers/scripts/init.py +0 -0
  255. {verifiers-0.1.15.dev434 → verifiers-0.1.15.dev436}/verifiers/scripts/install.py +0 -0
  256. {verifiers-0.1.15.dev434 → verifiers-0.1.15.dev436}/verifiers/scripts/setup.py +0 -0
  257. {verifiers-0.1.15.dev434 → verifiers-0.1.15.dev436}/verifiers/scripts/tui.py +0 -0
  258. {verifiers-0.1.15.dev434 → verifiers-0.1.15.dev436}/verifiers/serve/__init__.py +0 -0
  259. {verifiers-0.1.15.dev434 → verifiers-0.1.15.dev436}/verifiers/serve/client/env_client.py +0 -0
  260. {verifiers-0.1.15.dev434 → verifiers-0.1.15.dev436}/verifiers/serve/client/zmq_env_client.py +0 -0
  261. {verifiers-0.1.15.dev434 → verifiers-0.1.15.dev436}/verifiers/serve/server/__init__.py +0 -0
  262. {verifiers-0.1.15.dev434 → verifiers-0.1.15.dev436}/verifiers/serve/server/env_router.py +0 -0
  263. {verifiers-0.1.15.dev434 → verifiers-0.1.15.dev436}/verifiers/serve/server/env_server.py +0 -0
  264. {verifiers-0.1.15.dev434 → verifiers-0.1.15.dev436}/verifiers/serve/server/env_worker.py +0 -0
  265. {verifiers-0.1.15.dev434 → verifiers-0.1.15.dev436}/verifiers/serve/server/zmq_env_server.py +0 -0
  266. {verifiers-0.1.15.dev434 → verifiers-0.1.15.dev436}/verifiers/serve/types.py +0 -0
  267. {verifiers-0.1.15.dev434 → verifiers-0.1.15.dev436}/verifiers/types.py +0 -0
  268. {verifiers-0.1.15.dev434 → verifiers-0.1.15.dev436}/verifiers/utils/__init__.py +0 -0
  269. {verifiers-0.1.15.dev434 → verifiers-0.1.15.dev436}/verifiers/utils/async_utils.py +0 -0
  270. {verifiers-0.1.15.dev434 → verifiers-0.1.15.dev436}/verifiers/utils/client_utils.py +0 -0
  271. {verifiers-0.1.15.dev434 → verifiers-0.1.15.dev436}/verifiers/utils/config_utils.py +0 -0
  272. {verifiers-0.1.15.dev434 → verifiers-0.1.15.dev436}/verifiers/utils/data_utils.py +0 -0
  273. {verifiers-0.1.15.dev434 → verifiers-0.1.15.dev436}/verifiers/utils/display_utils.py +0 -0
  274. {verifiers-0.1.15.dev434 → verifiers-0.1.15.dev436}/verifiers/utils/env_config_utils.py +0 -0
  275. {verifiers-0.1.15.dev434 → verifiers-0.1.15.dev436}/verifiers/utils/env_utils.py +0 -0
  276. {verifiers-0.1.15.dev434 → verifiers-0.1.15.dev436}/verifiers/utils/error_utils.py +0 -0
  277. {verifiers-0.1.15.dev434 → verifiers-0.1.15.dev436}/verifiers/utils/eval_display.py +0 -0
  278. {verifiers-0.1.15.dev434 → verifiers-0.1.15.dev436}/verifiers/utils/eval_utils.py +0 -0
  279. {verifiers-0.1.15.dev434 → verifiers-0.1.15.dev436}/verifiers/utils/heartbeat.py +0 -0
  280. {verifiers-0.1.15.dev434 → verifiers-0.1.15.dev436}/verifiers/utils/import_utils.py +0 -0
  281. {verifiers-0.1.15.dev434 → verifiers-0.1.15.dev436}/verifiers/utils/install_utils.py +0 -0
  282. {verifiers-0.1.15.dev434 → verifiers-0.1.15.dev436}/verifiers/utils/interception_utils.py +0 -0
  283. {verifiers-0.1.15.dev434 → verifiers-0.1.15.dev436}/verifiers/utils/logging_utils.py +0 -0
  284. {verifiers-0.1.15.dev434 → verifiers-0.1.15.dev436}/verifiers/utils/message_utils.py +0 -0
  285. {verifiers-0.1.15.dev434 → verifiers-0.1.15.dev436}/verifiers/utils/metric_utils.py +0 -0
  286. {verifiers-0.1.15.dev434 → verifiers-0.1.15.dev436}/verifiers/utils/path_utils.py +0 -0
  287. {verifiers-0.1.15.dev434 → verifiers-0.1.15.dev436}/verifiers/utils/pricing_utils.py +0 -0
  288. {verifiers-0.1.15.dev434 → verifiers-0.1.15.dev436}/verifiers/utils/process_utils.py +0 -0
  289. {verifiers-0.1.15.dev434 → verifiers-0.1.15.dev436}/verifiers/utils/response_utils.py +0 -0
  290. {verifiers-0.1.15.dev434 → verifiers-0.1.15.dev436}/verifiers/utils/save_utils.py +0 -0
  291. {verifiers-0.1.15.dev434 → verifiers-0.1.15.dev436}/verifiers/utils/serve_utils.py +0 -0
  292. {verifiers-0.1.15.dev434 → verifiers-0.1.15.dev436}/verifiers/utils/thread_utils.py +0 -0
  293. {verifiers-0.1.15.dev434 → verifiers-0.1.15.dev436}/verifiers/utils/threaded_sandbox_client.py +0 -0
  294. {verifiers-0.1.15.dev434 → verifiers-0.1.15.dev436}/verifiers/utils/tool_utils.py +0 -0
  295. {verifiers-0.1.15.dev434 → verifiers-0.1.15.dev436}/verifiers/utils/usage_utils.py +0 -0
  296. {verifiers-0.1.15.dev434 → verifiers-0.1.15.dev436}/verifiers/utils/version_utils.py +0 -0
  297. {verifiers-0.1.15.dev434 → verifiers-0.1.15.dev436}/verifiers/v1/ARCHITECTURE.md +0 -0
  298. {verifiers-0.1.15.dev434 → verifiers-0.1.15.dev436}/verifiers/v1/GUIDE.md +0 -0
  299. {verifiers-0.1.15.dev434 → verifiers-0.1.15.dev436}/verifiers/v1/README.md +0 -0
  300. {verifiers-0.1.15.dev434 → verifiers-0.1.15.dev436}/verifiers/v1/__init__.py +0 -0
  301. {verifiers-0.1.15.dev434 → verifiers-0.1.15.dev436}/verifiers/v1/cli/__init__.py +0 -0
  302. {verifiers-0.1.15.dev434 → verifiers-0.1.15.dev436}/verifiers/v1/cli/dashboard/__init__.py +0 -0
  303. {verifiers-0.1.15.dev434 → verifiers-0.1.15.dev436}/verifiers/v1/cli/dashboard/base.py +0 -0
  304. {verifiers-0.1.15.dev434 → verifiers-0.1.15.dev436}/verifiers/v1/cli/dashboard/replay.py +0 -0
  305. {verifiers-0.1.15.dev434 → verifiers-0.1.15.dev436}/verifiers/v1/cli/dashboard/validate.py +0 -0
  306. {verifiers-0.1.15.dev434 → verifiers-0.1.15.dev436}/verifiers/v1/cli/debug.py +0 -0
  307. {verifiers-0.1.15.dev434 → verifiers-0.1.15.dev436}/verifiers/v1/cli/eval/__init__.py +0 -0
  308. {verifiers-0.1.15.dev434 → verifiers-0.1.15.dev436}/verifiers/v1/cli/eval/resume.py +0 -0
  309. {verifiers-0.1.15.dev434 → verifiers-0.1.15.dev436}/verifiers/v1/cli/init.py +0 -0
  310. {verifiers-0.1.15.dev434 → verifiers-0.1.15.dev436}/verifiers/v1/cli/output.py +0 -0
  311. {verifiers-0.1.15.dev434 → verifiers-0.1.15.dev436}/verifiers/v1/cli/replay.py +0 -0
  312. {verifiers-0.1.15.dev434 → verifiers-0.1.15.dev436}/verifiers/v1/cli/resolve.py +0 -0
  313. {verifiers-0.1.15.dev434 → verifiers-0.1.15.dev436}/verifiers/v1/cli/serve.py +0 -0
  314. {verifiers-0.1.15.dev434 → verifiers-0.1.15.dev436}/verifiers/v1/cli/validate.py +0 -0
  315. {verifiers-0.1.15.dev434 → verifiers-0.1.15.dev436}/verifiers/v1/clients/__init__.py +0 -0
  316. {verifiers-0.1.15.dev434 → verifiers-0.1.15.dev436}/verifiers/v1/clients/client.py +0 -0
  317. {verifiers-0.1.15.dev434 → verifiers-0.1.15.dev436}/verifiers/v1/clients/config.py +0 -0
  318. {verifiers-0.1.15.dev434 → verifiers-0.1.15.dev436}/verifiers/v1/clients/train.py +0 -0
  319. {verifiers-0.1.15.dev434 → verifiers-0.1.15.dev436}/verifiers/v1/configs/__init__.py +0 -0
  320. {verifiers-0.1.15.dev434 → verifiers-0.1.15.dev436}/verifiers/v1/configs/debug.py +0 -0
  321. {verifiers-0.1.15.dev434 → verifiers-0.1.15.dev436}/verifiers/v1/configs/init.py +0 -0
  322. {verifiers-0.1.15.dev434 → verifiers-0.1.15.dev436}/verifiers/v1/configs/replay.py +0 -0
  323. {verifiers-0.1.15.dev434 → verifiers-0.1.15.dev436}/verifiers/v1/configs/serve.py +0 -0
  324. {verifiers-0.1.15.dev434 → verifiers-0.1.15.dev436}/verifiers/v1/configs/validate.py +0 -0
  325. {verifiers-0.1.15.dev434 → verifiers-0.1.15.dev436}/verifiers/v1/decorators.py +0 -0
  326. {verifiers-0.1.15.dev434 → verifiers-0.1.15.dev436}/verifiers/v1/dialects/__init__.py +0 -0
  327. {verifiers-0.1.15.dev434 → verifiers-0.1.15.dev436}/verifiers/v1/dialects/anthropic.py +0 -0
  328. {verifiers-0.1.15.dev434 → verifiers-0.1.15.dev436}/verifiers/v1/dialects/base.py +0 -0
  329. {verifiers-0.1.15.dev434 → verifiers-0.1.15.dev436}/verifiers/v1/dialects/chat.py +0 -0
  330. {verifiers-0.1.15.dev434 → verifiers-0.1.15.dev436}/verifiers/v1/dialects/responses.py +0 -0
  331. {verifiers-0.1.15.dev434 → verifiers-0.1.15.dev436}/verifiers/v1/env.py +0 -0
  332. {verifiers-0.1.15.dev434 → verifiers-0.1.15.dev436}/verifiers/v1/episode.py +0 -0
  333. {verifiers-0.1.15.dev434 → verifiers-0.1.15.dev436}/verifiers/v1/errors.py +0 -0
  334. {verifiers-0.1.15.dev434 → verifiers-0.1.15.dev436}/verifiers/v1/graph.py +0 -0
  335. {verifiers-0.1.15.dev434 → verifiers-0.1.15.dev436}/verifiers/v1/harness.py +0 -0
  336. {verifiers-0.1.15.dev434 → verifiers-0.1.15.dev436}/verifiers/v1/harnesses/__init__.py +0 -0
  337. {verifiers-0.1.15.dev434 → verifiers-0.1.15.dev436}/verifiers/v1/harnesses/codex/__init__.py +0 -0
  338. {verifiers-0.1.15.dev434 → verifiers-0.1.15.dev436}/verifiers/v1/harnesses/codex/harness.py +0 -0
  339. {verifiers-0.1.15.dev434 → verifiers-0.1.15.dev436}/verifiers/v1/harnesses/default/__init__.py +0 -0
  340. {verifiers-0.1.15.dev434 → verifiers-0.1.15.dev436}/verifiers/v1/harnesses/default/harness.py +0 -0
  341. {verifiers-0.1.15.dev434 → verifiers-0.1.15.dev436}/verifiers/v1/harnesses/default/program.py +0 -0
  342. {verifiers-0.1.15.dev434 → verifiers-0.1.15.dev436}/verifiers/v1/harnesses/kimi_code/__init__.py +0 -0
  343. {verifiers-0.1.15.dev434 → verifiers-0.1.15.dev436}/verifiers/v1/harnesses/kimi_code/harness.py +0 -0
  344. {verifiers-0.1.15.dev434 → verifiers-0.1.15.dev436}/verifiers/v1/harnesses/mini_swe_agent/__init__.py +0 -0
  345. {verifiers-0.1.15.dev434 → verifiers-0.1.15.dev436}/verifiers/v1/harnesses/mini_swe_agent/harness.py +0 -0
  346. {verifiers-0.1.15.dev434 → verifiers-0.1.15.dev436}/verifiers/v1/harnesses/mini_swe_agent/program.py +0 -0
  347. {verifiers-0.1.15.dev434 → verifiers-0.1.15.dev436}/verifiers/v1/harnesses/null/__init__.py +0 -0
  348. {verifiers-0.1.15.dev434 → verifiers-0.1.15.dev436}/verifiers/v1/harnesses/null/harness.py +0 -0
  349. {verifiers-0.1.15.dev434 → verifiers-0.1.15.dev436}/verifiers/v1/harnesses/null/program.py +0 -0
  350. {verifiers-0.1.15.dev434 → verifiers-0.1.15.dev436}/verifiers/v1/harnesses/rlm/__init__.py +0 -0
  351. {verifiers-0.1.15.dev434 → verifiers-0.1.15.dev436}/verifiers/v1/harnesses/rlm/harness.py +0 -0
  352. {verifiers-0.1.15.dev434 → verifiers-0.1.15.dev436}/verifiers/v1/harnesses/terminus_2/__init__.py +0 -0
  353. {verifiers-0.1.15.dev434 → verifiers-0.1.15.dev436}/verifiers/v1/harnesses/terminus_2/harness.py +0 -0
  354. {verifiers-0.1.15.dev434 → verifiers-0.1.15.dev436}/verifiers/v1/harnesses/terminus_2/program.py +0 -0
  355. {verifiers-0.1.15.dev434 → verifiers-0.1.15.dev436}/verifiers/v1/interception/__init__.py +0 -0
  356. {verifiers-0.1.15.dev434 → verifiers-0.1.15.dev436}/verifiers/v1/interception/pool.py +0 -0
  357. {verifiers-0.1.15.dev434 → verifiers-0.1.15.dev436}/verifiers/v1/interception/server.py +0 -0
  358. {verifiers-0.1.15.dev434 → verifiers-0.1.15.dev436}/verifiers/v1/judge.py +0 -0
  359. {verifiers-0.1.15.dev434 → verifiers-0.1.15.dev436}/verifiers/v1/judges/__init__.py +0 -0
  360. {verifiers-0.1.15.dev434 → verifiers-0.1.15.dev436}/verifiers/v1/judges/reference.py +0 -0
  361. {verifiers-0.1.15.dev434 → verifiers-0.1.15.dev436}/verifiers/v1/judges/reference.txt +0 -0
  362. {verifiers-0.1.15.dev434 → verifiers-0.1.15.dev436}/verifiers/v1/judges/rubric.py +0 -0
  363. {verifiers-0.1.15.dev434 → verifiers-0.1.15.dev436}/verifiers/v1/judges/rubric.txt +0 -0
  364. {verifiers-0.1.15.dev434 → verifiers-0.1.15.dev436}/verifiers/v1/legacy.py +0 -0
  365. {verifiers-0.1.15.dev434 → verifiers-0.1.15.dev436}/verifiers/v1/loaders.py +0 -0
  366. {verifiers-0.1.15.dev434 → verifiers-0.1.15.dev436}/verifiers/v1/mcp/__init__.py +0 -0
  367. {verifiers-0.1.15.dev434 → verifiers-0.1.15.dev436}/verifiers/v1/mcp/launch.py +0 -0
  368. {verifiers-0.1.15.dev434 → verifiers-0.1.15.dev436}/verifiers/v1/mcp/server.py +0 -0
  369. {verifiers-0.1.15.dev434 → verifiers-0.1.15.dev436}/verifiers/v1/mcp/toolset.py +0 -0
  370. {verifiers-0.1.15.dev434 → verifiers-0.1.15.dev436}/verifiers/v1/mcp/user.py +0 -0
  371. {verifiers-0.1.15.dev434 → verifiers-0.1.15.dev436}/verifiers/v1/retries.py +0 -0
  372. {verifiers-0.1.15.dev434 → verifiers-0.1.15.dev436}/verifiers/v1/rollout.py +0 -0
  373. {verifiers-0.1.15.dev434 → verifiers-0.1.15.dev436}/verifiers/v1/runtimes/__init__.py +0 -0
  374. {verifiers-0.1.15.dev434 → verifiers-0.1.15.dev436}/verifiers/v1/runtimes/base.py +0 -0
  375. {verifiers-0.1.15.dev434 → verifiers-0.1.15.dev436}/verifiers/v1/runtimes/docker.py +0 -0
  376. {verifiers-0.1.15.dev434 → verifiers-0.1.15.dev436}/verifiers/v1/runtimes/limiters.py +0 -0
  377. {verifiers-0.1.15.dev434 → verifiers-0.1.15.dev436}/verifiers/v1/runtimes/modal.py +0 -0
  378. {verifiers-0.1.15.dev434 → verifiers-0.1.15.dev436}/verifiers/v1/runtimes/prime.py +0 -0
  379. {verifiers-0.1.15.dev434 → verifiers-0.1.15.dev436}/verifiers/v1/runtimes/subprocess.py +0 -0
  380. {verifiers-0.1.15.dev434 → verifiers-0.1.15.dev436}/verifiers/v1/scoring.py +0 -0
  381. {verifiers-0.1.15.dev434 → verifiers-0.1.15.dev436}/verifiers/v1/serve/__init__.py +0 -0
  382. {verifiers-0.1.15.dev434 → verifiers-0.1.15.dev436}/verifiers/v1/serve/client.py +0 -0
  383. {verifiers-0.1.15.dev434 → verifiers-0.1.15.dev436}/verifiers/v1/serve/pool.py +0 -0
  384. {verifiers-0.1.15.dev434 → verifiers-0.1.15.dev436}/verifiers/v1/serve/server.py +0 -0
  385. {verifiers-0.1.15.dev434 → verifiers-0.1.15.dev436}/verifiers/v1/serve/types.py +0 -0
  386. {verifiers-0.1.15.dev434 → verifiers-0.1.15.dev436}/verifiers/v1/state.py +0 -0
  387. {verifiers-0.1.15.dev434 → verifiers-0.1.15.dev436}/verifiers/v1/task.py +0 -0
  388. {verifiers-0.1.15.dev434 → verifiers-0.1.15.dev436}/verifiers/v1/taskset.py +0 -0
  389. {verifiers-0.1.15.dev434 → verifiers-0.1.15.dev436}/verifiers/v1/tasksets/__init__.py +0 -0
  390. {verifiers-0.1.15.dev434 → verifiers-0.1.15.dev436}/verifiers/v1/tasksets/harbor/__init__.py +0 -0
  391. {verifiers-0.1.15.dev434 → verifiers-0.1.15.dev436}/verifiers/v1/tasksets/harbor/taskset.py +0 -0
  392. {verifiers-0.1.15.dev434 → verifiers-0.1.15.dev436}/verifiers/v1/tasksets/lean/__init__.py +0 -0
  393. {verifiers-0.1.15.dev434 → verifiers-0.1.15.dev436}/verifiers/v1/tasksets/lean/scoring.py +0 -0
  394. {verifiers-0.1.15.dev434 → verifiers-0.1.15.dev436}/verifiers/v1/tasksets/lean/taskset.py +0 -0
  395. {verifiers-0.1.15.dev434 → verifiers-0.1.15.dev436}/verifiers/v1/tasksets/textarena/__init__.py +0 -0
  396. {verifiers-0.1.15.dev434 → verifiers-0.1.15.dev436}/verifiers/v1/tasksets/textarena/taskset.py +0 -0
  397. {verifiers-0.1.15.dev434 → verifiers-0.1.15.dev436}/verifiers/v1/trace.py +0 -0
  398. {verifiers-0.1.15.dev434 → verifiers-0.1.15.dev436}/verifiers/v1/types.py +0 -0
  399. {verifiers-0.1.15.dev434 → verifiers-0.1.15.dev436}/verifiers/v1/utils/__init__.py +0 -0
  400. {verifiers-0.1.15.dev434 → verifiers-0.1.15.dev436}/verifiers/v1/utils/aio.py +0 -0
  401. {verifiers-0.1.15.dev434 → verifiers-0.1.15.dev436}/verifiers/v1/utils/format.py +0 -0
  402. {verifiers-0.1.15.dev434 → verifiers-0.1.15.dev436}/verifiers/v1/utils/install.py +0 -0
  403. {verifiers-0.1.15.dev434 → verifiers-0.1.15.dev436}/verifiers/v1/utils/logging.py +0 -0
  404. {verifiers-0.1.15.dev434 → verifiers-0.1.15.dev436}/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.dev434
3
+ Version: 0.1.15.dev436
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
@@ -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))
@@ -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
 
@@ -16,6 +16,7 @@ from collections.abc import Mapping
16
16
  import re
17
17
 
18
18
  import httpx
19
+ from pydantic import ValidationError
19
20
  from pydantic_core import from_json, to_json
20
21
 
21
22
  from verifiers.v1.clients.client import SESSION_ID_HEADER, Client, RelayReply
@@ -95,8 +96,18 @@ class EvalClient(Client):
95
96
  dialect.apply_overrides(body, model, sampling_args),
96
97
  self._headers(dialect, headers, session_id),
97
98
  )
98
- raw = from_json(resp.content)
99
- response = dialect.parse_response(dialect.validate_response(raw))
99
+ # A corrupted response (e.g. an HTML error page or a truncated body on a
100
+ # flaky tunnel) surfaces as a JSON parse failure or a schema validation
101
+ # failure — map these to a retryable 502 so the harness SDK retries the
102
+ # call instead of crashing the whole rollout on one bad response.
103
+ try:
104
+ raw = from_json(resp.content)
105
+ response = dialect.parse_response(dialect.validate_response(raw))
106
+ except (ValueError, ValidationError) as e:
107
+ raise model_error(
108
+ f"malformed upstream response: {type(e).__name__}: {e}",
109
+ status_code=502,
110
+ ) from e
100
111
  response.raw = raw # the program gets the provider's bytes back 1:1
101
112
  return response
102
113
 
@@ -145,6 +156,8 @@ class EvalClient(Client):
145
156
  raise model_error(str(e), status_code=504) from e
146
157
  except httpx.HTTPError as e:
147
158
  raise model_error(str(e), status_code=503) from e
159
+ except ConnectionResetError as e:
160
+ raise model_error(str(e), status_code=503) from e
148
161
  if not stream:
149
162
  try:
150
163
  response.raise_for_status()
@@ -54,6 +54,10 @@ 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
  )
@@ -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)