verifiers 0.2.2.dev52__tar.gz → 0.2.2.dev54__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 (422) hide show
  1. {verifiers-0.2.2.dev52 → verifiers-0.2.2.dev54}/PKG-INFO +1 -1
  2. {verifiers-0.2.2.dev52 → verifiers-0.2.2.dev54}/tests/v1/test_e2e.py +8 -7
  3. {verifiers-0.2.2.dev52 → verifiers-0.2.2.dev54}/verifiers/v1/__init__.py +13 -4
  4. verifiers-0.2.2.dev54/verifiers/v1/artifacts.py +142 -0
  5. {verifiers-0.2.2.dev52 → verifiers-0.2.2.dev54}/verifiers/v1/cli/dashboard/eval.py +29 -42
  6. {verifiers-0.2.2.dev52 → verifiers-0.2.2.dev54}/verifiers/v1/cli/debug.py +6 -6
  7. {verifiers-0.2.2.dev52 → verifiers-0.2.2.dev54}/verifiers/v1/cli/replay.py +1 -1
  8. {verifiers-0.2.2.dev52 → verifiers-0.2.2.dev54}/verifiers/v1/env.py +2 -2
  9. {verifiers-0.2.2.dev52 → verifiers-0.2.2.dev54}/verifiers/v1/envs/agentic_judge/__init__.py +2 -0
  10. {verifiers-0.2.2.dev52 → verifiers-0.2.2.dev54}/verifiers/v1/envs/agentic_judge/env.py +122 -55
  11. verifiers-0.2.2.dev54/verifiers/v1/episode.py +83 -0
  12. {verifiers-0.2.2.dev52 → verifiers-0.2.2.dev54}/verifiers/v1/graph.py +3 -4
  13. {verifiers-0.2.2.dev52 → verifiers-0.2.2.dev54}/verifiers/v1/judge.py +3 -4
  14. {verifiers-0.2.2.dev52 → verifiers-0.2.2.dev54}/verifiers/v1/judges/rubric.py +5 -5
  15. {verifiers-0.2.2.dev52 → verifiers-0.2.2.dev54}/verifiers/v1/legacy.py +4 -3
  16. {verifiers-0.2.2.dev52 → verifiers-0.2.2.dev54}/verifiers/v1/rollout.py +5 -5
  17. {verifiers-0.2.2.dev52 → verifiers-0.2.2.dev54}/verifiers/v1/state.py +4 -4
  18. {verifiers-0.2.2.dev52 → verifiers-0.2.2.dev54}/verifiers/v1/task.py +11 -5
  19. {verifiers-0.2.2.dev52 → verifiers-0.2.2.dev54}/verifiers/v1/tasksets/harbor/taskset.py +101 -3
  20. {verifiers-0.2.2.dev52 → verifiers-0.2.2.dev54}/verifiers/v1/trace.py +22 -23
  21. {verifiers-0.2.2.dev52 → verifiers-0.2.2.dev54}/verifiers/v1/types.py +13 -17
  22. {verifiers-0.2.2.dev52 → verifiers-0.2.2.dev54}/verifiers/v1/utils/git.py +74 -9
  23. verifiers-0.2.2.dev52/verifiers/v1/episode.py +0 -55
  24. {verifiers-0.2.2.dev52 → verifiers-0.2.2.dev54}/.gitignore +0 -0
  25. {verifiers-0.2.2.dev52 → verifiers-0.2.2.dev54}/LICENSE +0 -0
  26. {verifiers-0.2.2.dev52 → verifiers-0.2.2.dev54}/README.md +0 -0
  27. {verifiers-0.2.2.dev52 → verifiers-0.2.2.dev54}/pyproject.toml +0 -0
  28. {verifiers-0.2.2.dev52 → verifiers-0.2.2.dev54}/tests/__init__.py +0 -0
  29. {verifiers-0.2.2.dev52 → verifiers-0.2.2.dev54}/tests/conftest.py +0 -0
  30. {verifiers-0.2.2.dev52 → verifiers-0.2.2.dev54}/tests/test_browser_env.py +0 -0
  31. {verifiers-0.2.2.dev52 → verifiers-0.2.2.dev54}/tests/test_build_script.py +0 -0
  32. {verifiers-0.2.2.dev52 → verifiers-0.2.2.dev54}/tests/test_cli_agent_env.py +0 -0
  33. {verifiers-0.2.2.dev52 → verifiers-0.2.2.dev54}/tests/test_client_auth_errors.py +0 -0
  34. {verifiers-0.2.2.dev52 → verifiers-0.2.2.dev54}/tests/test_client_config.py +0 -0
  35. {verifiers-0.2.2.dev52 → verifiers-0.2.2.dev54}/tests/test_client_multimodal_types.py +0 -0
  36. {verifiers-0.2.2.dev52 → verifiers-0.2.2.dev54}/tests/test_composable_env.py +0 -0
  37. {verifiers-0.2.2.dev52 → verifiers-0.2.2.dev54}/tests/test_context_token_metrics.py +0 -0
  38. {verifiers-0.2.2.dev52 → verifiers-0.2.2.dev54}/tests/test_decorator_ranks.py +0 -0
  39. {verifiers-0.2.2.dev52 → verifiers-0.2.2.dev54}/tests/test_endpoint_registry.py +0 -0
  40. {verifiers-0.2.2.dev52 → verifiers-0.2.2.dev54}/tests/test_env_group.py +0 -0
  41. {verifiers-0.2.2.dev52 → verifiers-0.2.2.dev54}/tests/test_env_server.py +0 -0
  42. {verifiers-0.2.2.dev52 → verifiers-0.2.2.dev54}/tests/test_environment.py +0 -0
  43. {verifiers-0.2.2.dev52 → verifiers-0.2.2.dev54}/tests/test_environment_extra.py +0 -0
  44. {verifiers-0.2.2.dev52 → verifiers-0.2.2.dev54}/tests/test_error_chain.py +0 -0
  45. {verifiers-0.2.2.dev52 → verifiers-0.2.2.dev54}/tests/test_eval_display.py +0 -0
  46. {verifiers-0.2.2.dev52 → verifiers-0.2.2.dev54}/tests/test_eval_utils.py +0 -0
  47. {verifiers-0.2.2.dev52 → verifiers-0.2.2.dev54}/tests/test_gepa_cli.py +0 -0
  48. {verifiers-0.2.2.dev52 → verifiers-0.2.2.dev54}/tests/test_gepa_utils.py +0 -0
  49. {verifiers-0.2.2.dev52 → verifiers-0.2.2.dev54}/tests/test_gym_env.py +0 -0
  50. {verifiers-0.2.2.dev52 → verifiers-0.2.2.dev54}/tests/test_harbor_env_mcp.py +0 -0
  51. {verifiers-0.2.2.dev52 → verifiers-0.2.2.dev54}/tests/test_imports.py +0 -0
  52. {verifiers-0.2.2.dev52 → verifiers-0.2.2.dev54}/tests/test_init_script.py +0 -0
  53. {verifiers-0.2.2.dev52 → verifiers-0.2.2.dev54}/tests/test_install_utils.py +0 -0
  54. {verifiers-0.2.2.dev52 → verifiers-0.2.2.dev54}/tests/test_interception_utils.py +0 -0
  55. {verifiers-0.2.2.dev52 → verifiers-0.2.2.dev54}/tests/test_logging.py +0 -0
  56. {verifiers-0.2.2.dev52 → verifiers-0.2.2.dev54}/tests/test_math_rubric.py +0 -0
  57. {verifiers-0.2.2.dev52 → verifiers-0.2.2.dev54}/tests/test_maybe_think_parser.py +0 -0
  58. {verifiers-0.2.2.dev52 → verifiers-0.2.2.dev54}/tests/test_message_utils.py +0 -0
  59. {verifiers-0.2.2.dev52 → verifiers-0.2.2.dev54}/tests/test_message_utils_multimodal.py +0 -0
  60. {verifiers-0.2.2.dev52 → verifiers-0.2.2.dev54}/tests/test_multiturn_env.py +0 -0
  61. {verifiers-0.2.2.dev52 → verifiers-0.2.2.dev54}/tests/test_nemorl_client.py +0 -0
  62. {verifiers-0.2.2.dev52 → verifiers-0.2.2.dev54}/tests/test_openai_chat_completions_token_client.py +0 -0
  63. {verifiers-0.2.2.dev52 → verifiers-0.2.2.dev54}/tests/test_openai_responses_client.py +0 -0
  64. {verifiers-0.2.2.dev52 → verifiers-0.2.2.dev54}/tests/test_opencode_rlm_env.py +0 -0
  65. {verifiers-0.2.2.dev52 → verifiers-0.2.2.dev54}/tests/test_openenv_client.py +0 -0
  66. {verifiers-0.2.2.dev52 → verifiers-0.2.2.dev54}/tests/test_parser.py +0 -0
  67. {verifiers-0.2.2.dev52 → verifiers-0.2.2.dev54}/tests/test_path_utils.py +0 -0
  68. {verifiers-0.2.2.dev52 → verifiers-0.2.2.dev54}/tests/test_per_turn_timing.py +0 -0
  69. {verifiers-0.2.2.dev52 → verifiers-0.2.2.dev54}/tests/test_pricing_utils.py +0 -0
  70. {verifiers-0.2.2.dev52 → verifiers-0.2.2.dev54}/tests/test_prime_plugin.py +0 -0
  71. {verifiers-0.2.2.dev52 → verifiers-0.2.2.dev54}/tests/test_renderer_client.py +0 -0
  72. {verifiers-0.2.2.dev52 → verifiers-0.2.2.dev54}/tests/test_renderer_e2e.py +0 -0
  73. {verifiers-0.2.2.dev52 → verifiers-0.2.2.dev54}/tests/test_rlm_composable_env.py +0 -0
  74. {verifiers-0.2.2.dev52 → verifiers-0.2.2.dev54}/tests/test_rubric.py +0 -0
  75. {verifiers-0.2.2.dev52 → verifiers-0.2.2.dev54}/tests/test_rubric_group.py +0 -0
  76. {verifiers-0.2.2.dev52 → verifiers-0.2.2.dev54}/tests/test_sandbox_debug_env.py +0 -0
  77. {verifiers-0.2.2.dev52 → verifiers-0.2.2.dev54}/tests/test_sandbox_env.py +0 -0
  78. {verifiers-0.2.2.dev52 → verifiers-0.2.2.dev54}/tests/test_sandbox_mixin.py +0 -0
  79. {verifiers-0.2.2.dev52 → verifiers-0.2.2.dev54}/tests/test_save_utils.py +0 -0
  80. {verifiers-0.2.2.dev52 → verifiers-0.2.2.dev54}/tests/test_setup_script.py +0 -0
  81. {verifiers-0.2.2.dev52 → verifiers-0.2.2.dev54}/tests/test_singleturn_env.py +0 -0
  82. {verifiers-0.2.2.dev52 → verifiers-0.2.2.dev54}/tests/test_stateful_tool_env.py +0 -0
  83. {verifiers-0.2.2.dev52 → verifiers-0.2.2.dev54}/tests/test_think_parser.py +0 -0
  84. {verifiers-0.2.2.dev52 → verifiers-0.2.2.dev54}/tests/test_tool_env.py +0 -0
  85. {verifiers-0.2.2.dev52 → verifiers-0.2.2.dev54}/tests/test_tool_utils.py +0 -0
  86. {verifiers-0.2.2.dev52 → verifiers-0.2.2.dev54}/tests/test_trajectory_processing.py +0 -0
  87. {verifiers-0.2.2.dev52 → verifiers-0.2.2.dev54}/tests/test_tui_info_formatting.py +0 -0
  88. {verifiers-0.2.2.dev52 → verifiers-0.2.2.dev54}/tests/test_types.py +0 -0
  89. {verifiers-0.2.2.dev52 → verifiers-0.2.2.dev54}/tests/test_xml_parser.py +0 -0
  90. {verifiers-0.2.2.dev52 → verifiers-0.2.2.dev54}/tests/v1/conftest.py +0 -0
  91. {verifiers-0.2.2.dev52 → verifiers-0.2.2.dev54}/tests/v1/fixtures/counter_tool_v1.py +0 -0
  92. {verifiers-0.2.2.dev52 → verifiers-0.2.2.dev54}/tests/v1/fixtures/duet_v1.py +0 -0
  93. {verifiers-0.2.2.dev52 → verifiers-0.2.2.dev54}/tests/v1/fixtures/echo_acp_resume_v1.py +0 -0
  94. {verifiers-0.2.2.dev52 → verifiers-0.2.2.dev54}/tests/v1/fixtures/echo_agentic_v1.py +0 -0
  95. {verifiers-0.2.2.dev52 → verifiers-0.2.2.dev54}/tests/v1/fixtures/echo_multi_v0.py +0 -0
  96. {verifiers-0.2.2.dev52 → verifiers-0.2.2.dev54}/tests/v1/fixtures/echo_tool_v1.py +0 -0
  97. {verifiers-0.2.2.dev52 → verifiers-0.2.2.dev54}/tests/v1/fixtures/echo_user_sim_v1.py +0 -0
  98. {verifiers-0.2.2.dev52 → verifiers-0.2.2.dev54}/tests/v1/fixtures/echo_v0.py +0 -0
  99. {verifiers-0.2.2.dev52 → verifiers-0.2.2.dev54}/tests/v1/fixtures/echo_v1.py +0 -0
  100. {verifiers-0.2.2.dev52 → verifiers-0.2.2.dev54}/tests/v1/fixtures/pyproject.toml +0 -0
  101. {verifiers-0.2.2.dev52 → verifiers-0.2.2.dev54}/tests/v1/fixtures/tool_response_image_v1.py +0 -0
  102. {verifiers-0.2.2.dev52 → verifiers-0.2.2.dev54}/tests/v1/test_color_codeword_tasks.py +0 -0
  103. {verifiers-0.2.2.dev52 → verifiers-0.2.2.dev54}/tests/v1/test_configs.py +0 -0
  104. {verifiers-0.2.2.dev52 → verifiers-0.2.2.dev54}/tests/v1/test_envs.py +0 -0
  105. {verifiers-0.2.2.dev52 → verifiers-0.2.2.dev54}/tests/v1/test_graph.py +0 -0
  106. {verifiers-0.2.2.dev52 → verifiers-0.2.2.dev54}/tests/v1/test_judges.py +0 -0
  107. {verifiers-0.2.2.dev52 → verifiers-0.2.2.dev54}/tests/v1/test_legacy.py +0 -0
  108. {verifiers-0.2.2.dev52 → verifiers-0.2.2.dev54}/tests/v1/test_scoring.py +0 -0
  109. {verifiers-0.2.2.dev52 → verifiers-0.2.2.dev54}/tests/v1/test_taskset.py +0 -0
  110. {verifiers-0.2.2.dev52 → verifiers-0.2.2.dev54}/tests/v1/test_trace.py +0 -0
  111. {verifiers-0.2.2.dev52 → verifiers-0.2.2.dev54}/verifiers/__init__.py +0 -0
  112. {verifiers-0.2.2.dev52 → verifiers-0.2.2.dev54}/verifiers/cli/__init__.py +0 -0
  113. {verifiers-0.2.2.dev52 → verifiers-0.2.2.dev54}/verifiers/cli/commands/__init__.py +0 -0
  114. {verifiers-0.2.2.dev52 → verifiers-0.2.2.dev54}/verifiers/cli/commands/build.py +0 -0
  115. {verifiers-0.2.2.dev52 → verifiers-0.2.2.dev54}/verifiers/cli/commands/eval.py +0 -0
  116. {verifiers-0.2.2.dev52 → verifiers-0.2.2.dev54}/verifiers/cli/commands/gepa.py +0 -0
  117. {verifiers-0.2.2.dev52 → verifiers-0.2.2.dev54}/verifiers/cli/commands/init.py +0 -0
  118. {verifiers-0.2.2.dev52 → verifiers-0.2.2.dev54}/verifiers/cli/commands/install.py +0 -0
  119. {verifiers-0.2.2.dev52 → verifiers-0.2.2.dev54}/verifiers/cli/commands/setup.py +0 -0
  120. {verifiers-0.2.2.dev52 → verifiers-0.2.2.dev54}/verifiers/cli/plugins/__init__.py +0 -0
  121. {verifiers-0.2.2.dev52 → verifiers-0.2.2.dev54}/verifiers/cli/plugins/prime.py +0 -0
  122. {verifiers-0.2.2.dev52 → verifiers-0.2.2.dev54}/verifiers/cli/tui.py +0 -0
  123. {verifiers-0.2.2.dev52 → verifiers-0.2.2.dev54}/verifiers/clients/__init__.py +0 -0
  124. {verifiers-0.2.2.dev52 → verifiers-0.2.2.dev54}/verifiers/clients/anthropic_messages_client.py +0 -0
  125. {verifiers-0.2.2.dev52 → verifiers-0.2.2.dev54}/verifiers/clients/client.py +0 -0
  126. {verifiers-0.2.2.dev52 → verifiers-0.2.2.dev54}/verifiers/clients/nemorl_chat_completions_client.py +0 -0
  127. {verifiers-0.2.2.dev52 → verifiers-0.2.2.dev54}/verifiers/clients/openai_chat_completions_client.py +0 -0
  128. {verifiers-0.2.2.dev52 → verifiers-0.2.2.dev54}/verifiers/clients/openai_chat_completions_token_client.py +0 -0
  129. {verifiers-0.2.2.dev52 → verifiers-0.2.2.dev54}/verifiers/clients/openai_completions_client.py +0 -0
  130. {verifiers-0.2.2.dev52 → verifiers-0.2.2.dev54}/verifiers/clients/openai_responses_client.py +0 -0
  131. {verifiers-0.2.2.dev52 → verifiers-0.2.2.dev54}/verifiers/clients/renderer_client.py +0 -0
  132. {verifiers-0.2.2.dev52 → verifiers-0.2.2.dev54}/verifiers/decorators.py +0 -0
  133. {verifiers-0.2.2.dev52 → verifiers-0.2.2.dev54}/verifiers/envs/__init__.py +0 -0
  134. {verifiers-0.2.2.dev52 → verifiers-0.2.2.dev54}/verifiers/envs/env_group.py +0 -0
  135. {verifiers-0.2.2.dev52 → verifiers-0.2.2.dev54}/verifiers/envs/environment.py +0 -0
  136. {verifiers-0.2.2.dev52 → verifiers-0.2.2.dev54}/verifiers/envs/experimental/README.md +0 -0
  137. {verifiers-0.2.2.dev52 → verifiers-0.2.2.dev54}/verifiers/envs/experimental/__init__.py +0 -0
  138. {verifiers-0.2.2.dev52 → verifiers-0.2.2.dev54}/verifiers/envs/experimental/cli_agent_env.py +0 -0
  139. {verifiers-0.2.2.dev52 → verifiers-0.2.2.dev54}/verifiers/envs/experimental/composable/README.md +0 -0
  140. {verifiers-0.2.2.dev52 → verifiers-0.2.2.dev54}/verifiers/envs/experimental/composable/__init__.py +0 -0
  141. {verifiers-0.2.2.dev52 → verifiers-0.2.2.dev54}/verifiers/envs/experimental/composable/_filter.py +0 -0
  142. {verifiers-0.2.2.dev52 → verifiers-0.2.2.dev54}/verifiers/envs/experimental/composable/composable_env.py +0 -0
  143. {verifiers-0.2.2.dev52 → verifiers-0.2.2.dev54}/verifiers/envs/experimental/composable/harness.py +0 -0
  144. {verifiers-0.2.2.dev52 → verifiers-0.2.2.dev54}/verifiers/envs/experimental/composable/harnesses/__init__.py +0 -0
  145. {verifiers-0.2.2.dev52 → verifiers-0.2.2.dev54}/verifiers/envs/experimental/composable/harnesses/mini_swe_agent.py +0 -0
  146. {verifiers-0.2.2.dev52 → verifiers-0.2.2.dev54}/verifiers/envs/experimental/composable/harnesses/opencode.py +0 -0
  147. {verifiers-0.2.2.dev52 → verifiers-0.2.2.dev54}/verifiers/envs/experimental/composable/harnesses/prompt.txt +0 -0
  148. {verifiers-0.2.2.dev52 → verifiers-0.2.2.dev54}/verifiers/envs/experimental/composable/harnesses/rlm.py +0 -0
  149. {verifiers-0.2.2.dev52 → verifiers-0.2.2.dev54}/verifiers/envs/experimental/composable/sandbox_debug_env.py +0 -0
  150. {verifiers-0.2.2.dev52 → verifiers-0.2.2.dev54}/verifiers/envs/experimental/composable/swe_debug_env.py +0 -0
  151. {verifiers-0.2.2.dev52 → verifiers-0.2.2.dev54}/verifiers/envs/experimental/composable/task.py +0 -0
  152. {verifiers-0.2.2.dev52 → verifiers-0.2.2.dev54}/verifiers/envs/experimental/composable/tasksets/__init__.py +0 -0
  153. {verifiers-0.2.2.dev52 → verifiers-0.2.2.dev54}/verifiers/envs/experimental/composable/tasksets/cp/__init__.py +0 -0
  154. {verifiers-0.2.2.dev52 → verifiers-0.2.2.dev54}/verifiers/envs/experimental/composable/tasksets/cp/cp_task.py +0 -0
  155. {verifiers-0.2.2.dev52 → verifiers-0.2.2.dev54}/verifiers/envs/experimental/composable/tasksets/cp/test_utils.py +0 -0
  156. {verifiers-0.2.2.dev52 → verifiers-0.2.2.dev54}/verifiers/envs/experimental/composable/tasksets/harbor/__init__.py +0 -0
  157. {verifiers-0.2.2.dev52 → verifiers-0.2.2.dev54}/verifiers/envs/experimental/composable/tasksets/harbor/cli_gym.py +0 -0
  158. {verifiers-0.2.2.dev52 → verifiers-0.2.2.dev54}/verifiers/envs/experimental/composable/tasksets/harbor/harbor.py +0 -0
  159. {verifiers-0.2.2.dev52 → verifiers-0.2.2.dev54}/verifiers/envs/experimental/composable/tasksets/harbor/terminal_lego.py +0 -0
  160. {verifiers-0.2.2.dev52 → verifiers-0.2.2.dev54}/verifiers/envs/experimental/composable/tasksets/math/__init__.py +0 -0
  161. {verifiers-0.2.2.dev52 → verifiers-0.2.2.dev54}/verifiers/envs/experimental/composable/tasksets/math/math_task.py +0 -0
  162. {verifiers-0.2.2.dev52 → verifiers-0.2.2.dev54}/verifiers/envs/experimental/composable/tasksets/swe/README.md +0 -0
  163. {verifiers-0.2.2.dev52 → verifiers-0.2.2.dev54}/verifiers/envs/experimental/composable/tasksets/swe/__init__.py +0 -0
  164. {verifiers-0.2.2.dev52 → verifiers-0.2.2.dev54}/verifiers/envs/experimental/composable/tasksets/swe/multi_swe/__init__.py +0 -0
  165. {verifiers-0.2.2.dev52 → verifiers-0.2.2.dev54}/verifiers/envs/experimental/composable/tasksets/swe/multi_swe/extract_fix_patch.sh +0 -0
  166. {verifiers-0.2.2.dev52 → verifiers-0.2.2.dev54}/verifiers/envs/experimental/composable/tasksets/swe/multi_swe/taskset.py +0 -0
  167. {verifiers-0.2.2.dev52 → verifiers-0.2.2.dev54}/verifiers/envs/experimental/composable/tasksets/swe/openswe/__init__.py +0 -0
  168. {verifiers-0.2.2.dev52 → verifiers-0.2.2.dev54}/verifiers/envs/experimental/composable/tasksets/swe/openswe/taskset.py +0 -0
  169. {verifiers-0.2.2.dev52 → verifiers-0.2.2.dev54}/verifiers/envs/experimental/composable/tasksets/swe/r2e_gym/__init__.py +0 -0
  170. {verifiers-0.2.2.dev52 → verifiers-0.2.2.dev54}/verifiers/envs/experimental/composable/tasksets/swe/r2e_gym/log_parser.py +0 -0
  171. {verifiers-0.2.2.dev52 → verifiers-0.2.2.dev54}/verifiers/envs/experimental/composable/tasksets/swe/r2e_gym/taskset.py +0 -0
  172. {verifiers-0.2.2.dev52 → verifiers-0.2.2.dev54}/verifiers/envs/experimental/composable/tasksets/swe/scale_swe/__init__.py +0 -0
  173. {verifiers-0.2.2.dev52 → verifiers-0.2.2.dev54}/verifiers/envs/experimental/composable/tasksets/swe/scale_swe/taskset.py +0 -0
  174. {verifiers-0.2.2.dev52 → verifiers-0.2.2.dev54}/verifiers/envs/experimental/composable/tasksets/swe/shared/__init__.py +0 -0
  175. {verifiers-0.2.2.dev52 → verifiers-0.2.2.dev54}/verifiers/envs/experimental/composable/tasksets/swe/shared/test_patch.py +0 -0
  176. {verifiers-0.2.2.dev52 → verifiers-0.2.2.dev54}/verifiers/envs/experimental/composable/tasksets/swe/swe_bench/__init__.py +0 -0
  177. {verifiers-0.2.2.dev52 → verifiers-0.2.2.dev54}/verifiers/envs/experimental/composable/tasksets/swe/swe_bench/taskset.py +0 -0
  178. {verifiers-0.2.2.dev52 → verifiers-0.2.2.dev54}/verifiers/envs/experimental/composable/tasksets/swe/swe_lego/__init__.py +0 -0
  179. {verifiers-0.2.2.dev52 → verifiers-0.2.2.dev54}/verifiers/envs/experimental/composable/tasksets/swe/swe_lego/taskset.py +0 -0
  180. {verifiers-0.2.2.dev52 → verifiers-0.2.2.dev54}/verifiers/envs/experimental/composable/tasksets/swe/swe_rebench_v2/__init__.py +0 -0
  181. {verifiers-0.2.2.dev52 → verifiers-0.2.2.dev54}/verifiers/envs/experimental/composable/tasksets/swe/swe_rebench_v2/log_parsers.py +0 -0
  182. {verifiers-0.2.2.dev52 → verifiers-0.2.2.dev54}/verifiers/envs/experimental/composable/tasksets/swe/swe_rebench_v2/taskset.py +0 -0
  183. {verifiers-0.2.2.dev52 → verifiers-0.2.2.dev54}/verifiers/envs/experimental/composable/tasksets/swe/swe_smith/__init__.py +0 -0
  184. {verifiers-0.2.2.dev52 → verifiers-0.2.2.dev54}/verifiers/envs/experimental/composable/tasksets/swe/swe_smith/taskset.py +0 -0
  185. {verifiers-0.2.2.dev52 → verifiers-0.2.2.dev54}/verifiers/envs/experimental/composable/tasksets/swe/swe_tasksets.py +0 -0
  186. {verifiers-0.2.2.dev52 → verifiers-0.2.2.dev54}/verifiers/envs/experimental/gym_env.py +0 -0
  187. {verifiers-0.2.2.dev52 → verifiers-0.2.2.dev54}/verifiers/envs/experimental/harbor_env/__init__.py +0 -0
  188. {verifiers-0.2.2.dev52 → verifiers-0.2.2.dev54}/verifiers/envs/experimental/harbor_env/env.py +0 -0
  189. {verifiers-0.2.2.dev52 → verifiers-0.2.2.dev54}/verifiers/envs/experimental/harbor_env/mcp.py +0 -0
  190. {verifiers-0.2.2.dev52 → verifiers-0.2.2.dev54}/verifiers/envs/experimental/mcp_env.py +0 -0
  191. {verifiers-0.2.2.dev52 → verifiers-0.2.2.dev54}/verifiers/envs/experimental/opencode_env.py +0 -0
  192. {verifiers-0.2.2.dev52 → verifiers-0.2.2.dev54}/verifiers/envs/experimental/opencode_qa_env.py +0 -0
  193. {verifiers-0.2.2.dev52 → verifiers-0.2.2.dev54}/verifiers/envs/experimental/opencode_rlm_env.py +0 -0
  194. {verifiers-0.2.2.dev52 → verifiers-0.2.2.dev54}/verifiers/envs/experimental/sandbox_mixin.py +0 -0
  195. {verifiers-0.2.2.dev52 → verifiers-0.2.2.dev54}/verifiers/envs/experimental/utils/__init__.py +0 -0
  196. {verifiers-0.2.2.dev52 → verifiers-0.2.2.dev54}/verifiers/envs/experimental/utils/file_locks.py +0 -0
  197. {verifiers-0.2.2.dev52 → verifiers-0.2.2.dev54}/verifiers/envs/experimental/utils/git_checkout_cache.py +0 -0
  198. {verifiers-0.2.2.dev52 → verifiers-0.2.2.dev54}/verifiers/envs/integrations/README.md +0 -0
  199. {verifiers-0.2.2.dev52 → verifiers-0.2.2.dev54}/verifiers/envs/integrations/__init__.py +0 -0
  200. {verifiers-0.2.2.dev52 → verifiers-0.2.2.dev54}/verifiers/envs/integrations/browser_env/README.md +0 -0
  201. {verifiers-0.2.2.dev52 → verifiers-0.2.2.dev54}/verifiers/envs/integrations/browser_env/__init__.py +0 -0
  202. {verifiers-0.2.2.dev52 → verifiers-0.2.2.dev54}/verifiers/envs/integrations/browser_env/browser_env.py +0 -0
  203. {verifiers-0.2.2.dev52 → verifiers-0.2.2.dev54}/verifiers/envs/integrations/browser_env/modes/__init__.py +0 -0
  204. {verifiers-0.2.2.dev52 → verifiers-0.2.2.dev54}/verifiers/envs/integrations/browser_env/modes/base.py +0 -0
  205. {verifiers-0.2.2.dev52 → verifiers-0.2.2.dev54}/verifiers/envs/integrations/browser_env/modes/cua_mode.py +0 -0
  206. {verifiers-0.2.2.dev52 → verifiers-0.2.2.dev54}/verifiers/envs/integrations/browser_env/modes/dom_mode.py +0 -0
  207. {verifiers-0.2.2.dev52 → verifiers-0.2.2.dev54}/verifiers/envs/integrations/openenv_env.py +0 -0
  208. {verifiers-0.2.2.dev52 → verifiers-0.2.2.dev54}/verifiers/envs/integrations/reasoninggym_env.py +0 -0
  209. {verifiers-0.2.2.dev52 → verifiers-0.2.2.dev54}/verifiers/envs/integrations/textarena_env.py +0 -0
  210. {verifiers-0.2.2.dev52 → verifiers-0.2.2.dev54}/verifiers/envs/multiturn_env.py +0 -0
  211. {verifiers-0.2.2.dev52 → verifiers-0.2.2.dev54}/verifiers/envs/python_env.py +0 -0
  212. {verifiers-0.2.2.dev52 → verifiers-0.2.2.dev54}/verifiers/envs/sandbox_env.py +0 -0
  213. {verifiers-0.2.2.dev52 → verifiers-0.2.2.dev54}/verifiers/envs/singleturn_env.py +0 -0
  214. {verifiers-0.2.2.dev52 → verifiers-0.2.2.dev54}/verifiers/envs/stateful_tool_env.py +0 -0
  215. {verifiers-0.2.2.dev52 → verifiers-0.2.2.dev54}/verifiers/envs/tool_env.py +0 -0
  216. {verifiers-0.2.2.dev52 → verifiers-0.2.2.dev54}/verifiers/errors.py +0 -0
  217. {verifiers-0.2.2.dev52 → verifiers-0.2.2.dev54}/verifiers/gepa/__init__.py +0 -0
  218. {verifiers-0.2.2.dev52 → verifiers-0.2.2.dev54}/verifiers/gepa/adapter.py +0 -0
  219. {verifiers-0.2.2.dev52 → verifiers-0.2.2.dev54}/verifiers/gepa/config.py +0 -0
  220. {verifiers-0.2.2.dev52 → verifiers-0.2.2.dev54}/verifiers/gepa/display.py +0 -0
  221. {verifiers-0.2.2.dev52 → verifiers-0.2.2.dev54}/verifiers/gepa/gepa_utils.py +0 -0
  222. {verifiers-0.2.2.dev52 → verifiers-0.2.2.dev54}/verifiers/parsers/__init__.py +0 -0
  223. {verifiers-0.2.2.dev52 → verifiers-0.2.2.dev54}/verifiers/parsers/maybe_think_parser.py +0 -0
  224. {verifiers-0.2.2.dev52 → verifiers-0.2.2.dev54}/verifiers/parsers/parser.py +0 -0
  225. {verifiers-0.2.2.dev52 → verifiers-0.2.2.dev54}/verifiers/parsers/think_parser.py +0 -0
  226. {verifiers-0.2.2.dev52 → verifiers-0.2.2.dev54}/verifiers/parsers/xml_parser.py +0 -0
  227. {verifiers-0.2.2.dev52 → verifiers-0.2.2.dev54}/verifiers/rubrics/__init__.py +0 -0
  228. {verifiers-0.2.2.dev52 → verifiers-0.2.2.dev54}/verifiers/rubrics/experimental/hybrid_math_rubric.py +0 -0
  229. {verifiers-0.2.2.dev52 → verifiers-0.2.2.dev54}/verifiers/rubrics/judge_rubric.py +0 -0
  230. {verifiers-0.2.2.dev52 → verifiers-0.2.2.dev54}/verifiers/rubrics/math_rubric.py +0 -0
  231. {verifiers-0.2.2.dev52 → verifiers-0.2.2.dev54}/verifiers/rubrics/rubric.py +0 -0
  232. {verifiers-0.2.2.dev52 → verifiers-0.2.2.dev54}/verifiers/rubrics/rubric_group.py +0 -0
  233. {verifiers-0.2.2.dev52 → verifiers-0.2.2.dev54}/verifiers/scripts/__init__.py +0 -0
  234. {verifiers-0.2.2.dev52 → verifiers-0.2.2.dev54}/verifiers/scripts/build.py +0 -0
  235. {verifiers-0.2.2.dev52 → verifiers-0.2.2.dev54}/verifiers/scripts/eval.py +0 -0
  236. {verifiers-0.2.2.dev52 → verifiers-0.2.2.dev54}/verifiers/scripts/gepa.py +0 -0
  237. {verifiers-0.2.2.dev52 → verifiers-0.2.2.dev54}/verifiers/scripts/init.py +0 -0
  238. {verifiers-0.2.2.dev52 → verifiers-0.2.2.dev54}/verifiers/scripts/install.py +0 -0
  239. {verifiers-0.2.2.dev52 → verifiers-0.2.2.dev54}/verifiers/scripts/setup.py +0 -0
  240. {verifiers-0.2.2.dev52 → verifiers-0.2.2.dev54}/verifiers/scripts/tui.py +0 -0
  241. {verifiers-0.2.2.dev52 → verifiers-0.2.2.dev54}/verifiers/serve/__init__.py +0 -0
  242. {verifiers-0.2.2.dev52 → verifiers-0.2.2.dev54}/verifiers/serve/client/env_client.py +0 -0
  243. {verifiers-0.2.2.dev52 → verifiers-0.2.2.dev54}/verifiers/serve/client/zmq_env_client.py +0 -0
  244. {verifiers-0.2.2.dev52 → verifiers-0.2.2.dev54}/verifiers/serve/server/__init__.py +0 -0
  245. {verifiers-0.2.2.dev52 → verifiers-0.2.2.dev54}/verifiers/serve/server/env_router.py +0 -0
  246. {verifiers-0.2.2.dev52 → verifiers-0.2.2.dev54}/verifiers/serve/server/env_server.py +0 -0
  247. {verifiers-0.2.2.dev52 → verifiers-0.2.2.dev54}/verifiers/serve/server/env_worker.py +0 -0
  248. {verifiers-0.2.2.dev52 → verifiers-0.2.2.dev54}/verifiers/serve/server/zmq_env_server.py +0 -0
  249. {verifiers-0.2.2.dev52 → verifiers-0.2.2.dev54}/verifiers/serve/types.py +0 -0
  250. {verifiers-0.2.2.dev52 → verifiers-0.2.2.dev54}/verifiers/types.py +0 -0
  251. {verifiers-0.2.2.dev52 → verifiers-0.2.2.dev54}/verifiers/utils/__init__.py +0 -0
  252. {verifiers-0.2.2.dev52 → verifiers-0.2.2.dev54}/verifiers/utils/async_utils.py +0 -0
  253. {verifiers-0.2.2.dev52 → verifiers-0.2.2.dev54}/verifiers/utils/client_utils.py +0 -0
  254. {verifiers-0.2.2.dev52 → verifiers-0.2.2.dev54}/verifiers/utils/config_utils.py +0 -0
  255. {verifiers-0.2.2.dev52 → verifiers-0.2.2.dev54}/verifiers/utils/data_utils.py +0 -0
  256. {verifiers-0.2.2.dev52 → verifiers-0.2.2.dev54}/verifiers/utils/display_utils.py +0 -0
  257. {verifiers-0.2.2.dev52 → verifiers-0.2.2.dev54}/verifiers/utils/env_config_utils.py +0 -0
  258. {verifiers-0.2.2.dev52 → verifiers-0.2.2.dev54}/verifiers/utils/env_utils.py +0 -0
  259. {verifiers-0.2.2.dev52 → verifiers-0.2.2.dev54}/verifiers/utils/error_utils.py +0 -0
  260. {verifiers-0.2.2.dev52 → verifiers-0.2.2.dev54}/verifiers/utils/eval_display.py +0 -0
  261. {verifiers-0.2.2.dev52 → verifiers-0.2.2.dev54}/verifiers/utils/eval_utils.py +0 -0
  262. {verifiers-0.2.2.dev52 → verifiers-0.2.2.dev54}/verifiers/utils/heartbeat.py +0 -0
  263. {verifiers-0.2.2.dev52 → verifiers-0.2.2.dev54}/verifiers/utils/import_utils.py +0 -0
  264. {verifiers-0.2.2.dev52 → verifiers-0.2.2.dev54}/verifiers/utils/install_utils.py +0 -0
  265. {verifiers-0.2.2.dev52 → verifiers-0.2.2.dev54}/verifiers/utils/interception_utils.py +0 -0
  266. {verifiers-0.2.2.dev52 → verifiers-0.2.2.dev54}/verifiers/utils/logging_utils.py +0 -0
  267. {verifiers-0.2.2.dev52 → verifiers-0.2.2.dev54}/verifiers/utils/message_utils.py +0 -0
  268. {verifiers-0.2.2.dev52 → verifiers-0.2.2.dev54}/verifiers/utils/metric_utils.py +0 -0
  269. {verifiers-0.2.2.dev52 → verifiers-0.2.2.dev54}/verifiers/utils/path_utils.py +0 -0
  270. {verifiers-0.2.2.dev52 → verifiers-0.2.2.dev54}/verifiers/utils/pricing_utils.py +0 -0
  271. {verifiers-0.2.2.dev52 → verifiers-0.2.2.dev54}/verifiers/utils/process_utils.py +0 -0
  272. {verifiers-0.2.2.dev52 → verifiers-0.2.2.dev54}/verifiers/utils/response_utils.py +0 -0
  273. {verifiers-0.2.2.dev52 → verifiers-0.2.2.dev54}/verifiers/utils/save_utils.py +0 -0
  274. {verifiers-0.2.2.dev52 → verifiers-0.2.2.dev54}/verifiers/utils/serve_utils.py +0 -0
  275. {verifiers-0.2.2.dev52 → verifiers-0.2.2.dev54}/verifiers/utils/thread_utils.py +0 -0
  276. {verifiers-0.2.2.dev52 → verifiers-0.2.2.dev54}/verifiers/utils/threaded_sandbox_client.py +0 -0
  277. {verifiers-0.2.2.dev52 → verifiers-0.2.2.dev54}/verifiers/utils/tool_utils.py +0 -0
  278. {verifiers-0.2.2.dev52 → verifiers-0.2.2.dev54}/verifiers/utils/usage_utils.py +0 -0
  279. {verifiers-0.2.2.dev52 → verifiers-0.2.2.dev54}/verifiers/utils/version_utils.py +0 -0
  280. {verifiers-0.2.2.dev52 → verifiers-0.2.2.dev54}/verifiers/v1/acp/__init__.py +0 -0
  281. {verifiers-0.2.2.dev52 → verifiers-0.2.2.dev54}/verifiers/v1/acp/_runner.py +0 -0
  282. {verifiers-0.2.2.dev52 → verifiers-0.2.2.dev54}/verifiers/v1/agent.py +0 -0
  283. {verifiers-0.2.2.dev52 → verifiers-0.2.2.dev54}/verifiers/v1/cli/__init__.py +0 -0
  284. {verifiers-0.2.2.dev52 → verifiers-0.2.2.dev54}/verifiers/v1/cli/dashboard/__init__.py +0 -0
  285. {verifiers-0.2.2.dev52 → verifiers-0.2.2.dev54}/verifiers/v1/cli/dashboard/base.py +0 -0
  286. {verifiers-0.2.2.dev52 → verifiers-0.2.2.dev54}/verifiers/v1/cli/dashboard/replay.py +0 -0
  287. {verifiers-0.2.2.dev52 → verifiers-0.2.2.dev54}/verifiers/v1/cli/dashboard/validate.py +0 -0
  288. {verifiers-0.2.2.dev52 → verifiers-0.2.2.dev54}/verifiers/v1/cli/eval/__init__.py +0 -0
  289. {verifiers-0.2.2.dev52 → verifiers-0.2.2.dev54}/verifiers/v1/cli/eval/main.py +0 -0
  290. {verifiers-0.2.2.dev52 → verifiers-0.2.2.dev54}/verifiers/v1/cli/eval/resume.py +0 -0
  291. {verifiers-0.2.2.dev52 → verifiers-0.2.2.dev54}/verifiers/v1/cli/eval/runner.py +0 -0
  292. {verifiers-0.2.2.dev52 → verifiers-0.2.2.dev54}/verifiers/v1/cli/gepa.py +0 -0
  293. {verifiers-0.2.2.dev52 → verifiers-0.2.2.dev54}/verifiers/v1/cli/init.py +0 -0
  294. {verifiers-0.2.2.dev52 → verifiers-0.2.2.dev54}/verifiers/v1/cli/output.py +0 -0
  295. {verifiers-0.2.2.dev52 → verifiers-0.2.2.dev54}/verifiers/v1/cli/resolve.py +0 -0
  296. {verifiers-0.2.2.dev52 → verifiers-0.2.2.dev54}/verifiers/v1/cli/serve.py +0 -0
  297. {verifiers-0.2.2.dev52 → verifiers-0.2.2.dev54}/verifiers/v1/cli/validate.py +0 -0
  298. {verifiers-0.2.2.dev52 → verifiers-0.2.2.dev54}/verifiers/v1/clients/__init__.py +0 -0
  299. {verifiers-0.2.2.dev52 → verifiers-0.2.2.dev54}/verifiers/v1/clients/client.py +0 -0
  300. {verifiers-0.2.2.dev52 → verifiers-0.2.2.dev54}/verifiers/v1/clients/config.py +0 -0
  301. {verifiers-0.2.2.dev52 → verifiers-0.2.2.dev54}/verifiers/v1/clients/eval.py +0 -0
  302. {verifiers-0.2.2.dev52 → verifiers-0.2.2.dev54}/verifiers/v1/clients/train.py +0 -0
  303. {verifiers-0.2.2.dev52 → verifiers-0.2.2.dev54}/verifiers/v1/configs/__init__.py +0 -0
  304. {verifiers-0.2.2.dev52 → verifiers-0.2.2.dev54}/verifiers/v1/configs/agent.py +0 -0
  305. {verifiers-0.2.2.dev52 → verifiers-0.2.2.dev54}/verifiers/v1/configs/cli/__init__.py +0 -0
  306. {verifiers-0.2.2.dev52 → verifiers-0.2.2.dev54}/verifiers/v1/configs/cli/debug.py +0 -0
  307. {verifiers-0.2.2.dev52 → verifiers-0.2.2.dev54}/verifiers/v1/configs/cli/env.py +0 -0
  308. {verifiers-0.2.2.dev52 → verifiers-0.2.2.dev54}/verifiers/v1/configs/cli/eval.py +0 -0
  309. {verifiers-0.2.2.dev52 → verifiers-0.2.2.dev54}/verifiers/v1/configs/cli/init.py +0 -0
  310. {verifiers-0.2.2.dev52 → verifiers-0.2.2.dev54}/verifiers/v1/configs/cli/replay.py +0 -0
  311. {verifiers-0.2.2.dev52 → verifiers-0.2.2.dev54}/verifiers/v1/configs/cli/serve.py +0 -0
  312. {verifiers-0.2.2.dev52 → verifiers-0.2.2.dev54}/verifiers/v1/configs/cli/validate.py +0 -0
  313. {verifiers-0.2.2.dev52 → verifiers-0.2.2.dev54}/verifiers/v1/configs/env.py +0 -0
  314. {verifiers-0.2.2.dev52 → verifiers-0.2.2.dev54}/verifiers/v1/configs/harness.py +0 -0
  315. {verifiers-0.2.2.dev52 → verifiers-0.2.2.dev54}/verifiers/v1/configs/judge.py +0 -0
  316. {verifiers-0.2.2.dev52 → verifiers-0.2.2.dev54}/verifiers/v1/configs/legacy.py +0 -0
  317. {verifiers-0.2.2.dev52 → verifiers-0.2.2.dev54}/verifiers/v1/configs/retries.py +0 -0
  318. {verifiers-0.2.2.dev52 → verifiers-0.2.2.dev54}/verifiers/v1/configs/serve.py +0 -0
  319. {verifiers-0.2.2.dev52 → verifiers-0.2.2.dev54}/verifiers/v1/configs/task.py +0 -0
  320. {verifiers-0.2.2.dev52 → verifiers-0.2.2.dev54}/verifiers/v1/configs/taskset.py +0 -0
  321. {verifiers-0.2.2.dev52 → verifiers-0.2.2.dev54}/verifiers/v1/decorators.py +0 -0
  322. {verifiers-0.2.2.dev52 → verifiers-0.2.2.dev54}/verifiers/v1/dialects/__init__.py +0 -0
  323. {verifiers-0.2.2.dev52 → verifiers-0.2.2.dev54}/verifiers/v1/dialects/anthropic.py +0 -0
  324. {verifiers-0.2.2.dev52 → verifiers-0.2.2.dev54}/verifiers/v1/dialects/base.py +0 -0
  325. {verifiers-0.2.2.dev52 → verifiers-0.2.2.dev54}/verifiers/v1/dialects/chat.py +0 -0
  326. {verifiers-0.2.2.dev52 → verifiers-0.2.2.dev54}/verifiers/v1/dialects/responses.py +0 -0
  327. {verifiers-0.2.2.dev52 → verifiers-0.2.2.dev54}/verifiers/v1/envs/__init__.py +0 -0
  328. {verifiers-0.2.2.dev52 → verifiers-0.2.2.dev54}/verifiers/v1/envs/best_of_n/__init__.py +0 -0
  329. {verifiers-0.2.2.dev52 → verifiers-0.2.2.dev54}/verifiers/v1/envs/best_of_n/env.py +0 -0
  330. {verifiers-0.2.2.dev52 → verifiers-0.2.2.dev54}/verifiers/v1/envs/single_agent/__init__.py +0 -0
  331. {verifiers-0.2.2.dev52 → verifiers-0.2.2.dev54}/verifiers/v1/envs/single_agent/env.py +0 -0
  332. {verifiers-0.2.2.dev52 → verifiers-0.2.2.dev54}/verifiers/v1/envs/user_sim/__init__.py +0 -0
  333. {verifiers-0.2.2.dev52 → verifiers-0.2.2.dev54}/verifiers/v1/envs/user_sim/env.py +0 -0
  334. {verifiers-0.2.2.dev52 → verifiers-0.2.2.dev54}/verifiers/v1/errors.py +0 -0
  335. {verifiers-0.2.2.dev52 → verifiers-0.2.2.dev54}/verifiers/v1/gepa/__init__.py +0 -0
  336. {verifiers-0.2.2.dev52 → verifiers-0.2.2.dev54}/verifiers/v1/gepa/adapter.py +0 -0
  337. {verifiers-0.2.2.dev52 → verifiers-0.2.2.dev54}/verifiers/v1/gepa/config.py +0 -0
  338. {verifiers-0.2.2.dev52 → verifiers-0.2.2.dev54}/verifiers/v1/gepa/dataset.py +0 -0
  339. {verifiers-0.2.2.dev52 → verifiers-0.2.2.dev54}/verifiers/v1/gepa/reflection.py +0 -0
  340. {verifiers-0.2.2.dev52 → verifiers-0.2.2.dev54}/verifiers/v1/gepa/runner.py +0 -0
  341. {verifiers-0.2.2.dev52 → verifiers-0.2.2.dev54}/verifiers/v1/harness.py +0 -0
  342. {verifiers-0.2.2.dev52 → verifiers-0.2.2.dev54}/verifiers/v1/harnesses/__init__.py +0 -0
  343. {verifiers-0.2.2.dev52 → verifiers-0.2.2.dev54}/verifiers/v1/harnesses/bash/__init__.py +0 -0
  344. {verifiers-0.2.2.dev52 → verifiers-0.2.2.dev54}/verifiers/v1/harnesses/bash/harness.py +0 -0
  345. {verifiers-0.2.2.dev52 → verifiers-0.2.2.dev54}/verifiers/v1/harnesses/bash/program.py +0 -0
  346. {verifiers-0.2.2.dev52 → verifiers-0.2.2.dev54}/verifiers/v1/harnesses/claude_code/__init__.py +0 -0
  347. {verifiers-0.2.2.dev52 → verifiers-0.2.2.dev54}/verifiers/v1/harnesses/claude_code/harness.py +0 -0
  348. {verifiers-0.2.2.dev52 → verifiers-0.2.2.dev54}/verifiers/v1/harnesses/codex/__init__.py +0 -0
  349. {verifiers-0.2.2.dev52 → verifiers-0.2.2.dev54}/verifiers/v1/harnesses/codex/harness.py +0 -0
  350. {verifiers-0.2.2.dev52 → verifiers-0.2.2.dev54}/verifiers/v1/harnesses/kimi_code/__init__.py +0 -0
  351. {verifiers-0.2.2.dev52 → verifiers-0.2.2.dev54}/verifiers/v1/harnesses/kimi_code/harness.py +0 -0
  352. {verifiers-0.2.2.dev52 → verifiers-0.2.2.dev54}/verifiers/v1/harnesses/mini_swe_agent/__init__.py +0 -0
  353. {verifiers-0.2.2.dev52 → verifiers-0.2.2.dev54}/verifiers/v1/harnesses/mini_swe_agent/harness.py +0 -0
  354. {verifiers-0.2.2.dev52 → verifiers-0.2.2.dev54}/verifiers/v1/harnesses/mini_swe_agent/program.py +0 -0
  355. {verifiers-0.2.2.dev52 → verifiers-0.2.2.dev54}/verifiers/v1/harnesses/null/__init__.py +0 -0
  356. {verifiers-0.2.2.dev52 → verifiers-0.2.2.dev54}/verifiers/v1/harnesses/null/harness.py +0 -0
  357. {verifiers-0.2.2.dev52 → verifiers-0.2.2.dev54}/verifiers/v1/harnesses/null/program.py +0 -0
  358. {verifiers-0.2.2.dev52 → verifiers-0.2.2.dev54}/verifiers/v1/harnesses/pi/__init__.py +0 -0
  359. {verifiers-0.2.2.dev52 → verifiers-0.2.2.dev54}/verifiers/v1/harnesses/pi/harness.py +0 -0
  360. {verifiers-0.2.2.dev52 → verifiers-0.2.2.dev54}/verifiers/v1/harnesses/pool/__init__.py +0 -0
  361. {verifiers-0.2.2.dev52 → verifiers-0.2.2.dev54}/verifiers/v1/harnesses/pool/harness.py +0 -0
  362. {verifiers-0.2.2.dev52 → verifiers-0.2.2.dev54}/verifiers/v1/harnesses/rlm/__init__.py +0 -0
  363. {verifiers-0.2.2.dev52 → verifiers-0.2.2.dev54}/verifiers/v1/harnesses/rlm/harness.py +0 -0
  364. {verifiers-0.2.2.dev52 → verifiers-0.2.2.dev54}/verifiers/v1/harnesses/terminus_2/__init__.py +0 -0
  365. {verifiers-0.2.2.dev52 → verifiers-0.2.2.dev54}/verifiers/v1/harnesses/terminus_2/harness.py +0 -0
  366. {verifiers-0.2.2.dev52 → verifiers-0.2.2.dev54}/verifiers/v1/harnesses/terminus_2/program.py +0 -0
  367. {verifiers-0.2.2.dev52 → verifiers-0.2.2.dev54}/verifiers/v1/interception/__init__.py +0 -0
  368. {verifiers-0.2.2.dev52 → verifiers-0.2.2.dev54}/verifiers/v1/interception/base.py +0 -0
  369. {verifiers-0.2.2.dev52 → verifiers-0.2.2.dev54}/verifiers/v1/interception/pool.py +0 -0
  370. {verifiers-0.2.2.dev52 → verifiers-0.2.2.dev54}/verifiers/v1/interception/server.py +0 -0
  371. {verifiers-0.2.2.dev52 → verifiers-0.2.2.dev54}/verifiers/v1/interception/tunnel/__init__.py +0 -0
  372. {verifiers-0.2.2.dev52 → verifiers-0.2.2.dev54}/verifiers/v1/interception/tunnel/base.py +0 -0
  373. {verifiers-0.2.2.dev52 → verifiers-0.2.2.dev54}/verifiers/v1/interception/tunnel/custom.py +0 -0
  374. {verifiers-0.2.2.dev52 → verifiers-0.2.2.dev54}/verifiers/v1/interception/tunnel/prime.py +0 -0
  375. {verifiers-0.2.2.dev52 → verifiers-0.2.2.dev54}/verifiers/v1/judges/__init__.py +0 -0
  376. {verifiers-0.2.2.dev52 → verifiers-0.2.2.dev54}/verifiers/v1/judges/reference.py +0 -0
  377. {verifiers-0.2.2.dev52 → verifiers-0.2.2.dev54}/verifiers/v1/judges/reference.txt +0 -0
  378. {verifiers-0.2.2.dev52 → verifiers-0.2.2.dev54}/verifiers/v1/judges/rubric.txt +0 -0
  379. {verifiers-0.2.2.dev52 → verifiers-0.2.2.dev54}/verifiers/v1/loaders.py +0 -0
  380. {verifiers-0.2.2.dev52 → verifiers-0.2.2.dev54}/verifiers/v1/mcp/__init__.py +0 -0
  381. {verifiers-0.2.2.dev52 → verifiers-0.2.2.dev54}/verifiers/v1/mcp/launch.py +0 -0
  382. {verifiers-0.2.2.dev52 → verifiers-0.2.2.dev54}/verifiers/v1/mcp/server.py +0 -0
  383. {verifiers-0.2.2.dev52 → verifiers-0.2.2.dev54}/verifiers/v1/mcp/toolset.py +0 -0
  384. {verifiers-0.2.2.dev52 → verifiers-0.2.2.dev54}/verifiers/v1/push.py +0 -0
  385. {verifiers-0.2.2.dev52 → verifiers-0.2.2.dev54}/verifiers/v1/retries.py +0 -0
  386. {verifiers-0.2.2.dev52 → verifiers-0.2.2.dev54}/verifiers/v1/runtimes/__init__.py +0 -0
  387. {verifiers-0.2.2.dev52 → verifiers-0.2.2.dev54}/verifiers/v1/runtimes/base.py +0 -0
  388. {verifiers-0.2.2.dev52 → verifiers-0.2.2.dev54}/verifiers/v1/runtimes/docker/__init__.py +0 -0
  389. {verifiers-0.2.2.dev52 → verifiers-0.2.2.dev54}/verifiers/v1/runtimes/docker/egress.py +0 -0
  390. {verifiers-0.2.2.dev52 → verifiers-0.2.2.dev54}/verifiers/v1/runtimes/limiters.py +0 -0
  391. {verifiers-0.2.2.dev52 → verifiers-0.2.2.dev54}/verifiers/v1/runtimes/modal.py +0 -0
  392. {verifiers-0.2.2.dev52 → verifiers-0.2.2.dev54}/verifiers/v1/runtimes/prime.py +0 -0
  393. {verifiers-0.2.2.dev52 → verifiers-0.2.2.dev54}/verifiers/v1/runtimes/subprocess.py +0 -0
  394. {verifiers-0.2.2.dev52 → verifiers-0.2.2.dev54}/verifiers/v1/scoring.py +0 -0
  395. {verifiers-0.2.2.dev52 → verifiers-0.2.2.dev54}/verifiers/v1/serve/__init__.py +0 -0
  396. {verifiers-0.2.2.dev52 → verifiers-0.2.2.dev54}/verifiers/v1/serve/client.py +0 -0
  397. {verifiers-0.2.2.dev52 → verifiers-0.2.2.dev54}/verifiers/v1/serve/pool.py +0 -0
  398. {verifiers-0.2.2.dev52 → verifiers-0.2.2.dev54}/verifiers/v1/serve/server.py +0 -0
  399. {verifiers-0.2.2.dev52 → verifiers-0.2.2.dev54}/verifiers/v1/serve/types.py +0 -0
  400. {verifiers-0.2.2.dev52 → verifiers-0.2.2.dev54}/verifiers/v1/session.py +0 -0
  401. {verifiers-0.2.2.dev52 → verifiers-0.2.2.dev54}/verifiers/v1/taskset.py +0 -0
  402. {verifiers-0.2.2.dev52 → verifiers-0.2.2.dev54}/verifiers/v1/tasksets/__init__.py +0 -0
  403. {verifiers-0.2.2.dev52 → verifiers-0.2.2.dev54}/verifiers/v1/tasksets/harbor/__init__.py +0 -0
  404. {verifiers-0.2.2.dev52 → verifiers-0.2.2.dev54}/verifiers/v1/tasksets/lean/__init__.py +0 -0
  405. {verifiers-0.2.2.dev52 → verifiers-0.2.2.dev54}/verifiers/v1/tasksets/lean/scoring.py +0 -0
  406. {verifiers-0.2.2.dev52 → verifiers-0.2.2.dev54}/verifiers/v1/tasksets/lean/taskset.py +0 -0
  407. {verifiers-0.2.2.dev52 → verifiers-0.2.2.dev54}/verifiers/v1/tasksets/openenv/__init__.py +0 -0
  408. {verifiers-0.2.2.dev52 → verifiers-0.2.2.dev54}/verifiers/v1/tasksets/openenv/taskset.py +0 -0
  409. {verifiers-0.2.2.dev52 → verifiers-0.2.2.dev54}/verifiers/v1/tasksets/textarena/__init__.py +0 -0
  410. {verifiers-0.2.2.dev52 → verifiers-0.2.2.dev54}/verifiers/v1/tasksets/textarena/taskset.py +0 -0
  411. {verifiers-0.2.2.dev52 → verifiers-0.2.2.dev54}/verifiers/v1/utils/__init__.py +0 -0
  412. {verifiers-0.2.2.dev52 → verifiers-0.2.2.dev54}/verifiers/v1/utils/aio.py +0 -0
  413. {verifiers-0.2.2.dev52 → verifiers-0.2.2.dev54}/verifiers/v1/utils/compile.py +0 -0
  414. {verifiers-0.2.2.dev52 → verifiers-0.2.2.dev54}/verifiers/v1/utils/format.py +0 -0
  415. {verifiers-0.2.2.dev52 → verifiers-0.2.2.dev54}/verifiers/v1/utils/generic.py +0 -0
  416. {verifiers-0.2.2.dev52 → verifiers-0.2.2.dev54}/verifiers/v1/utils/image.py +0 -0
  417. {verifiers-0.2.2.dev52 → verifiers-0.2.2.dev54}/verifiers/v1/utils/install.py +0 -0
  418. {verifiers-0.2.2.dev52 → verifiers-0.2.2.dev54}/verifiers/v1/utils/interrupt.py +0 -0
  419. {verifiers-0.2.2.dev52 → verifiers-0.2.2.dev54}/verifiers/v1/utils/logging.py +0 -0
  420. {verifiers-0.2.2.dev52 → verifiers-0.2.2.dev54}/verifiers/v1/utils/memory.py +0 -0
  421. {verifiers-0.2.2.dev52 → verifiers-0.2.2.dev54}/verifiers/v1/utils/sampling.py +0 -0
  422. {verifiers-0.2.2.dev52 → verifiers-0.2.2.dev54}/verifiers/v1/utils/version.py +0 -0
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: verifiers
3
- Version: 0.2.2.dev52
3
+ Version: 0.2.2.dev54
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
@@ -335,6 +335,7 @@ async def test_agentic(run_v1, harness, harness_runtime, tmp_path):
335
335
  runtime={"type": harness_runtime},
336
336
  output_dir=tmp_path,
337
337
  max_turns=10,
338
+ max_tokens=8192,
338
339
  )
339
340
  assert trace.ok
340
341
  assert trace.num_turns >= 1 # ran a command, then finished
@@ -366,7 +367,7 @@ async def test_multi_agent_env(run_v1, tmp_path):
366
367
  # agent info (completion order — the gathered seats land in either order).
367
368
  (line,) = (tmp_path / "traces.jsonl").read_text().splitlines()
368
369
  row = json.loads(line)
369
- assert row["env"] == "duet-v1"
370
+ assert row["env"] == {"id": "duet-v1"}
370
371
  by_name = {t["agent"]["name"]: t for t in row["traces"]}
371
372
  assert set(by_name) == {"a", "b"}
372
373
  assert by_name["a"]["agent"]["trainable"] is True
@@ -405,18 +406,18 @@ async def test_env_id_agentic_judge(run_v1, tmp_path):
405
406
  policy.write_text("Check EMPIRICALLY that the agent echoed the word back.")
406
407
  traces = await run_v1(
407
408
  "echo-v1",
408
- harness=None, # seats pin their own harness; there is no run-level one
409
+ harness=None,
409
410
  env={
410
411
  "id": "agentic-judge",
411
- # The solver owns the shared box, so the container is pinned here.
412
412
  "solver": {"harness": {"id": "bash"}, "runtime": {"type": "docker"}},
413
- # The judge reads the trace and reasons before it writes the
414
- # verdict file; the shared 2048-token run cap truncates it mid-audit.
415
413
  "judge": {
416
414
  "harness": {"id": "bash"},
417
415
  "max_output_tokens": 8192,
418
416
  },
419
- "task": {"prompt": str(policy)},
417
+ "task": {
418
+ "prompt": {"path": str(policy)},
419
+ "hint": "Do not rely on README.md",
420
+ },
420
421
  "score": {"task_weight": 0.5},
421
422
  },
422
423
  output_dir=tmp_path,
@@ -431,7 +432,7 @@ async def test_env_id_agentic_judge(run_v1, tmp_path):
431
432
  # The task's own reward keeps its raw score; the rescale lands on the weight.
432
433
  assert solver.rewards["echoed"].score == 1.0
433
434
  assert solver.rewards["echoed"].weight == 0.5
434
- assert isinstance(judge.info.get("verdict"), dict) # scraped off the box
435
+ assert isinstance(judge.info.get("verdict"), dict)
435
436
  assert 0.0 <= solver.rewards["judge"].score <= 1.0
436
437
 
437
438
 
@@ -4,6 +4,12 @@ from pydantic_config import BaseConfig
4
4
 
5
5
  from verifiers.v1.acp import ACP
6
6
  from verifiers.v1.agent import Agent, Agents, Interaction, Segment, make_agent
7
+ from verifiers.v1.artifacts import (
8
+ ARTIFACTS_DIR,
9
+ Artifact,
10
+ collect,
11
+ restore,
12
+ )
7
13
  from verifiers.v1.clients import (
8
14
  BaseClientConfig,
9
15
  Client,
@@ -109,10 +115,10 @@ from verifiers.v1.taskset import Taskset
109
115
  from verifiers.v1.trace import (
110
116
  TRACE_VERSION,
111
117
  AgentInfo,
118
+ AgentSpan,
112
119
  Branch,
113
120
  Error,
114
121
  EvalRunInfo,
115
- GenerationSpan,
116
122
  ModelCall,
117
123
  Reward,
118
124
  RunInfo,
@@ -138,7 +144,6 @@ from verifiers.v1.types import (
138
144
  Response,
139
145
  Sampling,
140
146
  SamplingConfig,
141
- StrictBaseModel,
142
147
  SystemMessage,
143
148
  TextContentPart,
144
149
  Tool,
@@ -171,7 +176,6 @@ __all__ = [ # noqa: RUF022 - grouped by public API area
171
176
  "Response",
172
177
  "Sampling",
173
178
  "SamplingConfig",
174
- "StrictBaseModel",
175
179
  "SystemMessage",
176
180
  "TextContentPart",
177
181
  "Tool",
@@ -207,7 +211,7 @@ __all__ = [ # noqa: RUF022 - grouped by public API area
207
211
  "Timing",
208
212
  "TimeSpan",
209
213
  "TimeSplit",
210
- "GenerationSpan",
214
+ "AgentSpan",
211
215
  "Error",
212
216
  # decorators
213
217
  "stop",
@@ -297,6 +301,11 @@ __all__ = [ # noqa: RUF022 - grouped by public API area
297
301
  "PATCH_CAP_BYTES",
298
302
  "capture_patch",
299
303
  "resolve_head",
304
+ # grading artifacts
305
+ "ARTIFACTS_DIR",
306
+ "Artifact",
307
+ "collect",
308
+ "restore",
300
309
  # scoring
301
310
  "compare_stdout_results",
302
311
  "extract_boxed_answer",
@@ -0,0 +1,142 @@
1
+ """Artifact collection and restoration across runtimes."""
2
+
3
+ from __future__ import annotations
4
+
5
+ import logging
6
+ import shlex
7
+ import uuid
8
+ from pathlib import PurePosixPath
9
+ from typing import TYPE_CHECKING
10
+
11
+ from pydantic import BaseModel, Field
12
+
13
+ if TYPE_CHECKING:
14
+ from verifiers.v1.runtimes import Runtime
15
+
16
+ logger = logging.getLogger(__name__)
17
+
18
+ ARTIFACTS_DIR = "/logs/artifacts"
19
+ """Implicit artifact directory; tasks that write here need no declaration."""
20
+
21
+ MAX_ARTIFACT_BYTES = 32 * 1024 * 1024
22
+ """Ceiling per collection. Sized for a delta, not a tree: the grading box boots from the
23
+ agent's image, so the repo is already there and only its output has to travel."""
24
+
25
+
26
+ class Artifact(BaseModel):
27
+ """One path to restore at the same location in another runtime."""
28
+
29
+ source: str
30
+ exclude: list[str] = Field(default_factory=list)
31
+ """`tar --exclude` patterns, applied when `source` is a directory."""
32
+
33
+
34
+ async def collect(
35
+ runtime: Runtime, artifacts: list[Artifact] | None = None
36
+ ) -> dict[str, bytes]:
37
+ """Tar the convention dir and every declared path out of `runtime`.
38
+
39
+ Keyed by source path; the values are tar archives. Insertion order is the order
40
+ they were declared, and a path cannot be collected twice.
41
+
42
+ A declared source that is missing raises: it was declared because grading needs it,
43
+ and grading a partial state scores the rollout wrong rather than failing it. The
44
+ implicit convention sweep is exempt — most tasks never write there.
45
+
46
+ Each source is archived separately so its exclude patterns stay local.
47
+ """
48
+ # Resolve relative sources against the runtime workdir. Joining also normalises
49
+ # `/work/` to `/work`, so one tree cannot key two entries (the source is both the
50
+ # dict key and `restore`'s rm -rf target).
51
+ workdir = PurePosixPath(getattr(runtime.config, "workdir", "") or "/")
52
+ declared = [
53
+ a.model_copy(update={"source": str(workdir / a.source)})
54
+ for a in artifacts or []
55
+ ]
56
+ convention = PurePosixPath(ARTIFACTS_DIR)
57
+ sweep = not any(
58
+ (p := PurePosixPath(a.source)) == convention
59
+ or p.is_relative_to(convention)
60
+ or convention.is_relative_to(p)
61
+ for a in declared
62
+ )
63
+ entries = ([Artifact(source=ARTIFACTS_DIR)] if sweep else []) + declared
64
+
65
+ collected: dict[str, bytes] = {}
66
+ budget = MAX_ARTIFACT_BYTES
67
+ for artifact in entries:
68
+ source = artifact.source
69
+ if (await runtime.run(["test", "-e", source], {})).exit_code != 0:
70
+ if sweep and source == ARTIFACTS_DIR:
71
+ continue
72
+ raise RuntimeError(
73
+ f"declared artifact {source!r} does not exist in the runtime"
74
+ )
75
+ archive = await _tar_out(runtime, artifact, budget)
76
+ budget -= len(archive)
77
+ collected[source] = archive
78
+
79
+ logger.debug("collected artifact roots: %s", list(collected))
80
+ return collected
81
+
82
+
83
+ async def restore(runtime: Runtime, collected: dict[str, bytes]) -> None:
84
+ """Extract `collected` in `runtime` at the original absolute paths."""
85
+ if not collected:
86
+ return
87
+ # Restoring into the subprocess runtime would extract absolute paths onto the
88
+ # developer's filesystem, so refuse it before any archive reaches the host.
89
+ if getattr(runtime.config, "type", None) == "subprocess":
90
+ raise RuntimeError(
91
+ "refusing to restore artifacts into the subprocess runtime: extraction "
92
+ "writes to absolute paths on the host. Grade in a container."
93
+ )
94
+ # Clear every root up front, not per entry: a later nested root would otherwise
95
+ # delete content an earlier one just restored. Clearing also drops any file or
96
+ # symlink the image left at the target.
97
+ roots = " ".join(shlex.quote(root) for root in collected)
98
+ await _run(runtime, f"rm -rf -- {roots}", "clear artifact roots")
99
+ for root, archive in collected.items():
100
+ path = f"/tmp/vf-artifact-{uuid.uuid4().hex}.tar"
101
+ await runtime.write(path, archive)
102
+ await _run(
103
+ runtime,
104
+ f"tar -xf {shlex.quote(path)} -C / && rm -f {shlex.quote(path)}",
105
+ f"restore artifact {root!r}",
106
+ )
107
+
108
+
109
+ async def _tar_out(runtime: Runtime, artifact: Artifact, budget: int) -> bytes:
110
+ path = f"/tmp/vf-artifact-{uuid.uuid4().hex}.tar"
111
+ excludes = " ".join(f"--exclude={shlex.quote(p)}" for p in artifact.exclude)
112
+ try:
113
+ await _run(
114
+ runtime,
115
+ f"tar -cf {shlex.quote(path)} -C / {excludes} -- "
116
+ f"{shlex.quote(artifact.source.lstrip('/'))}",
117
+ f"collect artifact {artifact.source!r}",
118
+ )
119
+ # Size it in the box: an oversized collection is refused before it reaches host
120
+ # memory, not after.
121
+ sized = await runtime.run(["sh", "-c", f"wc -c < {shlex.quote(path)}"], {})
122
+ if (raw := sized.stdout.strip()).isdigit() and int(raw) > budget:
123
+ raise RuntimeError(
124
+ f"artifact {artifact.source!r} takes the collection over the "
125
+ f"{MAX_ARTIFACT_BYTES} byte limit. The grading box boots from the "
126
+ "agent's image, so only the delta needs to travel — narrow the source "
127
+ "or add `exclude` patterns."
128
+ )
129
+ return await runtime.read(path)
130
+ finally:
131
+ # Best-effort: the box is about to be destroyed and the name is unique per call.
132
+ try:
133
+ await runtime.run(["rm", "-f", path], {})
134
+ except Exception:
135
+ logger.debug("failed to remove %s", path, exc_info=True)
136
+
137
+
138
+ async def _run(runtime: Runtime, command: str, action: str) -> None:
139
+ result = await runtime.run(["sh", "-c", command], {})
140
+ if result.exit_code:
141
+ detail = (result.stderr or result.stdout).strip()[-500:]
142
+ raise RuntimeError(f"failed to {action}: {detail}")
@@ -393,18 +393,19 @@ def _breakdown(scored: list[Trace], done: list[Trace]) -> Table | None:
393
393
  phase_count: dict[str, int] = {}
394
394
  model_secs = harness_secs = 0.0
395
395
  for trace in done:
396
- prompt, completion, cached, reasoning, _ = _tokens(trace)
397
- total_in += prompt
398
- total_out += completion
399
- if cached is not None:
400
- total_cached += cached
401
- have_cached = True
402
- if reasoning is not None:
403
- total_reasoning += reasoning
404
- have_reasoning = True
405
- if trace.usage is not None and trace.usage.cost is not None:
406
- total_cost += trace.usage.cost
407
- have_cost = True
396
+ total_in += trace.num_input_tokens
397
+ total_out += trace.num_output_tokens
398
+ usage = trace.usage
399
+ if usage is not None:
400
+ if usage.cached_input_tokens is not None:
401
+ total_cached += usage.cached_input_tokens
402
+ have_cached = True
403
+ if usage.reasoning_tokens is not None:
404
+ total_reasoning += usage.reasoning_tokens
405
+ have_reasoning = True
406
+ if usage.cost is not None:
407
+ total_cost += usage.cost
408
+ have_cost = True
408
409
  # Judge / auxiliary scoring calls (off the message graph) shown separately from the agent's.
409
410
  judge = Usage.aggregate(trace.extra_usage)
410
411
  if judge is not None:
@@ -413,13 +414,13 @@ def _breakdown(scored: list[Trace], done: list[Trace]) -> Table | None:
413
414
  if judge.cost is not None:
414
415
  total_judge_cost += judge.cost
415
416
  have_judge = True
416
- for phase in ("boot", "setup", "generation", "finalize", "scoring"):
417
+ for phase in ("boot", "setup", "agent", "finalize", "scoring"):
417
418
  span = getattr(trace.timing, phase)
418
419
  if span.end: # phase was timed for this rollout
419
420
  phase_secs[phase] = phase_secs.get(phase, 0.0) + span.duration
420
421
  phase_count[phase] = phase_count.get(phase, 0) + 1
421
- model_secs += trace.timing.generation.model.duration
422
- harness_secs += trace.timing.generation.harness.duration
422
+ model_secs += trace.timing.agent.model.duration
423
+ harness_secs += trace.timing.agent.harness.duration
423
424
  if (
424
425
  total_in
425
426
  or total_out
@@ -448,12 +449,12 @@ def _breakdown(scored: list[Trace], done: list[Trace]) -> Table | None:
448
449
  usage.append(cost)
449
450
  grid.add_row("usage", " · ".join(usage))
450
451
  time_segments = []
451
- for phase in ("boot", "setup", "generation", "finalize", "scoring"):
452
+ for phase in ("boot", "setup", "agent", "finalize", "scoring"):
452
453
  count = phase_count.get(phase)
453
454
  if not count:
454
455
  continue
455
456
  segment = f"{phase} {format_time(phase_secs[phase] / count)}"
456
- if phase == "generation":
457
+ if phase == "agent":
457
458
  segment += (
458
459
  f" (model {format_time(model_secs / count)}"
459
460
  f" + harness {format_time(harness_secs / count)})"
@@ -464,26 +465,6 @@ def _breakdown(scored: list[Trace], done: list[Trace]) -> Table | None:
464
465
  return grid if grid.row_count else None
465
466
 
466
467
 
467
- def _tokens(trace: Trace) -> tuple[int, int, int | None, int | None, int]:
468
- """Input/output tokens summed across all branches: per branch, output is every assistant
469
- (completion) token generated across its turns and input is the fed-in tokens counted once
470
- (system + user + tool) — the final sequence minus everything the model generated. A rollout
471
- yields one training sample per branch (a linear trace is a single branch; compaction and
472
- subagents add more), so the totals sum them — matching `Trace.num_input_tokens` /
473
- `Trace.num_output_tokens`, whose sum is `num_total_tokens`.
474
-
475
- Both counts come from provider-reported usage. Returns the branch count from the same derived
476
- view so each dashboard tick materializes it once."""
477
- usage = trace.usage
478
- cached = usage.cached_input_tokens if usage else None
479
- reasoning = usage.reasoning_tokens if usage else None
480
- branches = trace.branches
481
- nbranches = len(branches)
482
- prompt = sum(b.num_input_tokens for b in branches)
483
- completion = sum(b.num_output_tokens for b in branches)
484
- return prompt, completion, cached, reasoning, nbranches
485
-
486
-
487
468
  def _stage(trace: Trace) -> str:
488
469
  """The stage a live (not-yet-done) rollout is in, derived from its trace's timing
489
470
  spans — the engine opens and closes each span exactly at the stage transitions, so
@@ -495,7 +476,7 @@ def _stage(trace: Trace) -> str:
495
476
  for stage, span in (
496
477
  ("scoring", trace.timing.scoring),
497
478
  ("finalize", trace.timing.finalize),
498
- ("running", trace.timing.generation),
479
+ ("running", trace.timing.agent),
499
480
  ("setup", trace.timing.setup),
500
481
  ("boot", trace.timing.boot),
501
482
  ):
@@ -551,7 +532,9 @@ def Rows(groups: list[list[RunSlot]], now: float, runtime_type: str) -> Table:
551
532
  base = f"name={task.name[:32]}" if task.name else f"idx={task.idx}"
552
533
  if not slot.traces:
553
534
  if slot.done: # the env's rollout() itself failed before any trace
554
- error = slot.episode.error if slot.episode is not None else None
535
+ error = (
536
+ slot.episode.last_error if slot.episode is not None else None
537
+ )
555
538
  group_rows.append(
556
539
  (
557
540
  "error",
@@ -602,7 +585,7 @@ def Rows(groups: list[list[RunSlot]], now: float, runtime_type: str) -> Table:
602
585
  end = (
603
586
  t.timing.scoring.end
604
587
  or t.timing.finalize.end
605
- or t.timing.generation.end
588
+ or t.timing.agent.end
606
589
  # a rollout that errored in boot/setup has only that span's end — freeze there
607
590
  # once done, else (still running) the timer would grow off `now` forever
608
591
  or (
@@ -612,8 +595,12 @@ def Rows(groups: list[list[RunSlot]], now: float, runtime_type: str) -> Table:
612
595
  )
613
596
  or now
614
597
  )
615
- prompt, completion, cached, reasoning, nbranches = _tokens(t)
616
- cost = t.usage.cost if t.usage else None
598
+ prompt, completion = t.num_input_tokens, t.num_output_tokens
599
+ nbranches = t.num_branches
600
+ usage = t.usage
601
+ cached = usage.cached_input_tokens if usage else None
602
+ reasoning = usage.reasoning_tokens if usage else None
603
+ cost = usage.cost if usage else None
617
604
  tokens = ""
618
605
  if prompt or completion:
619
606
  tokens = f"{format_count(prompt)}/{format_count(completion)} tokens"
@@ -123,16 +123,16 @@ def record_debug_error(
123
123
  action_timeout: float | None,
124
124
  ) -> None:
125
125
  now = time.time()
126
- for span in (trace.timing.boot, trace.timing.setup, trace.timing.generation):
126
+ for span in (trace.timing.boot, trace.timing.setup, trace.timing.agent):
127
127
  if span.start and not span.end:
128
128
  span.end = now
129
- in_action = bool(trace.timing.generation.start)
129
+ in_action = bool(trace.timing.agent.start)
130
130
  stage = (
131
131
  "debug action" if in_action else "setup" if trace.timing.setup.start else "boot"
132
132
  )
133
133
  timeout = action_timeout if in_action else setup_timeout
134
134
  error_start = (
135
- trace.timing.generation.start
135
+ trace.timing.agent.start
136
136
  if in_action
137
137
  else trace.timing.setup.start or trace.timing.boot.start
138
138
  )
@@ -234,9 +234,9 @@ async def debug_task(task: Task, config: DebugConfig) -> tuple[Trace, bool]:
234
234
  await runtime.prepare_execution([])
235
235
  trace.timing.setup.end = time.time()
236
236
 
237
- trace.timing.generation.start = time.time()
237
+ trace.timing.agent.start = time.time()
238
238
  debug.update(await run_action(runtime, config))
239
- trace.timing.generation.end = time.time()
239
+ trace.timing.agent.end = time.time()
240
240
  if not debug.get("ok"):
241
241
  record_action_failure(trace, debug)
242
242
  trace.stop(str(debug["reason"]))
@@ -246,7 +246,7 @@ async def debug_task(task: Task, config: DebugConfig) -> tuple[Trace, bool]:
246
246
  except Exception as e: # noqa: BLE001 - persist any framework failure on the trace
247
247
  record_debug_error(trace, debug, e, setup_timeout, config.timeout.total)
248
248
  finally:
249
- trace.split_generation()
249
+ trace.split_agent_time()
250
250
  trace.info["debug"] = debug
251
251
  try:
252
252
  await runtime.stop()
@@ -84,7 +84,7 @@ async def run_replay(config: ReplayConfig, source: Path, out: Path) -> list[Trac
84
84
  episodes = read_episodes(
85
85
  source, Trace[WireTaskData, state_cls(task_cls), WireAgentConfig]
86
86
  )
87
- sourced = [(trace, e.env) for e in episodes for trace in e.traces]
87
+ sourced = [(trace, e.env.id) for e in episodes for trace in e.traces]
88
88
  if config.num_traces is not None:
89
89
  sourced = sourced[: config.num_traces]
90
90
  traces = [trace for trace, _ in sourced]
@@ -20,7 +20,7 @@ from verifiers.v1.configs.env import (
20
20
  _declared_agent_configs,
21
21
  default_agent_harness,
22
22
  )
23
- from verifiers.v1.episode import Episode
23
+ from verifiers.v1.episode import EnvInfo, Episode
24
24
  from verifiers.v1.errors import EnvError, boundary
25
25
  from verifiers.v1.harness import Harness, HarnessConfig
26
26
  from verifiers.v1.interception import (
@@ -257,7 +257,7 @@ class Env(ABC, Generic[ConfigT]):
257
257
  completed subset, its exception on the episode's `errors`. `on_trace` observes
258
258
  each agent-run's trace at mint; `on_discard` its abandonment (a per-agent
259
259
  retry mints a replacement)."""
260
- episode = Episode(env=self.config.env_id)
260
+ episode = Episode(env=EnvInfo(id=self.config.env_id))
261
261
  agents = self._episode_agents(ctx, episode.traces, on_trace, on_discard)
262
262
  try:
263
263
  async with asyncio.timeout(self.config.timeout.episode):
@@ -4,6 +4,7 @@ from verifiers.v1.envs.agentic_judge.env import (
4
4
  Criterion,
5
5
  JudgeTaskConfig,
6
6
  ScoreConfig,
7
+ TextFile,
7
8
  )
8
9
 
9
10
  __all__ = [
@@ -12,4 +13,5 @@ __all__ = [
12
13
  "Criterion",
13
14
  "JudgeTaskConfig",
14
15
  "ScoreConfig",
16
+ "TextFile",
15
17
  ]