verifiers 0.2.2.dev53__tar.gz → 0.2.2.dev55__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.dev53 → verifiers-0.2.2.dev55}/PKG-INFO +1 -1
  2. {verifiers-0.2.2.dev53 → verifiers-0.2.2.dev55}/tests/v1/test_e2e.py +1 -1
  3. {verifiers-0.2.2.dev53 → verifiers-0.2.2.dev55}/verifiers/v1/__init__.py +2 -4
  4. {verifiers-0.2.2.dev53 → verifiers-0.2.2.dev55}/verifiers/v1/artifacts.py +2 -4
  5. {verifiers-0.2.2.dev53 → verifiers-0.2.2.dev55}/verifiers/v1/cli/dashboard/eval.py +29 -42
  6. {verifiers-0.2.2.dev53 → verifiers-0.2.2.dev55}/verifiers/v1/cli/debug.py +6 -6
  7. {verifiers-0.2.2.dev53 → verifiers-0.2.2.dev55}/verifiers/v1/cli/replay.py +3 -3
  8. {verifiers-0.2.2.dev53 → verifiers-0.2.2.dev55}/verifiers/v1/env.py +2 -2
  9. {verifiers-0.2.2.dev53 → verifiers-0.2.2.dev55}/verifiers/v1/envs/agentic_judge/env.py +2 -3
  10. verifiers-0.2.2.dev55/verifiers/v1/episode.py +83 -0
  11. {verifiers-0.2.2.dev53 → verifiers-0.2.2.dev55}/verifiers/v1/graph.py +3 -4
  12. {verifiers-0.2.2.dev53 → verifiers-0.2.2.dev55}/verifiers/v1/judge.py +3 -4
  13. {verifiers-0.2.2.dev53 → verifiers-0.2.2.dev55}/verifiers/v1/judges/rubric.py +5 -5
  14. {verifiers-0.2.2.dev53 → verifiers-0.2.2.dev55}/verifiers/v1/legacy.py +4 -3
  15. {verifiers-0.2.2.dev53 → verifiers-0.2.2.dev55}/verifiers/v1/rollout.py +5 -5
  16. {verifiers-0.2.2.dev53 → verifiers-0.2.2.dev55}/verifiers/v1/serve/server.py +2 -2
  17. {verifiers-0.2.2.dev53 → verifiers-0.2.2.dev55}/verifiers/v1/state.py +2 -3
  18. {verifiers-0.2.2.dev53 → verifiers-0.2.2.dev55}/verifiers/v1/task.py +56 -80
  19. {verifiers-0.2.2.dev53 → verifiers-0.2.2.dev55}/verifiers/v1/taskset.py +0 -2
  20. {verifiers-0.2.2.dev53 → verifiers-0.2.2.dev55}/verifiers/v1/tasksets/harbor/taskset.py +3 -4
  21. {verifiers-0.2.2.dev53 → verifiers-0.2.2.dev55}/verifiers/v1/trace.py +22 -23
  22. {verifiers-0.2.2.dev53 → verifiers-0.2.2.dev55}/verifiers/v1/types.py +13 -17
  23. verifiers-0.2.2.dev53/verifiers/v1/episode.py +0 -55
  24. {verifiers-0.2.2.dev53 → verifiers-0.2.2.dev55}/.gitignore +0 -0
  25. {verifiers-0.2.2.dev53 → verifiers-0.2.2.dev55}/LICENSE +0 -0
  26. {verifiers-0.2.2.dev53 → verifiers-0.2.2.dev55}/README.md +0 -0
  27. {verifiers-0.2.2.dev53 → verifiers-0.2.2.dev55}/pyproject.toml +0 -0
  28. {verifiers-0.2.2.dev53 → verifiers-0.2.2.dev55}/tests/__init__.py +0 -0
  29. {verifiers-0.2.2.dev53 → verifiers-0.2.2.dev55}/tests/conftest.py +0 -0
  30. {verifiers-0.2.2.dev53 → verifiers-0.2.2.dev55}/tests/test_browser_env.py +0 -0
  31. {verifiers-0.2.2.dev53 → verifiers-0.2.2.dev55}/tests/test_build_script.py +0 -0
  32. {verifiers-0.2.2.dev53 → verifiers-0.2.2.dev55}/tests/test_cli_agent_env.py +0 -0
  33. {verifiers-0.2.2.dev53 → verifiers-0.2.2.dev55}/tests/test_client_auth_errors.py +0 -0
  34. {verifiers-0.2.2.dev53 → verifiers-0.2.2.dev55}/tests/test_client_config.py +0 -0
  35. {verifiers-0.2.2.dev53 → verifiers-0.2.2.dev55}/tests/test_client_multimodal_types.py +0 -0
  36. {verifiers-0.2.2.dev53 → verifiers-0.2.2.dev55}/tests/test_composable_env.py +0 -0
  37. {verifiers-0.2.2.dev53 → verifiers-0.2.2.dev55}/tests/test_context_token_metrics.py +0 -0
  38. {verifiers-0.2.2.dev53 → verifiers-0.2.2.dev55}/tests/test_decorator_ranks.py +0 -0
  39. {verifiers-0.2.2.dev53 → verifiers-0.2.2.dev55}/tests/test_endpoint_registry.py +0 -0
  40. {verifiers-0.2.2.dev53 → verifiers-0.2.2.dev55}/tests/test_env_group.py +0 -0
  41. {verifiers-0.2.2.dev53 → verifiers-0.2.2.dev55}/tests/test_env_server.py +0 -0
  42. {verifiers-0.2.2.dev53 → verifiers-0.2.2.dev55}/tests/test_environment.py +0 -0
  43. {verifiers-0.2.2.dev53 → verifiers-0.2.2.dev55}/tests/test_environment_extra.py +0 -0
  44. {verifiers-0.2.2.dev53 → verifiers-0.2.2.dev55}/tests/test_error_chain.py +0 -0
  45. {verifiers-0.2.2.dev53 → verifiers-0.2.2.dev55}/tests/test_eval_display.py +0 -0
  46. {verifiers-0.2.2.dev53 → verifiers-0.2.2.dev55}/tests/test_eval_utils.py +0 -0
  47. {verifiers-0.2.2.dev53 → verifiers-0.2.2.dev55}/tests/test_gepa_cli.py +0 -0
  48. {verifiers-0.2.2.dev53 → verifiers-0.2.2.dev55}/tests/test_gepa_utils.py +0 -0
  49. {verifiers-0.2.2.dev53 → verifiers-0.2.2.dev55}/tests/test_gym_env.py +0 -0
  50. {verifiers-0.2.2.dev53 → verifiers-0.2.2.dev55}/tests/test_harbor_env_mcp.py +0 -0
  51. {verifiers-0.2.2.dev53 → verifiers-0.2.2.dev55}/tests/test_imports.py +0 -0
  52. {verifiers-0.2.2.dev53 → verifiers-0.2.2.dev55}/tests/test_init_script.py +0 -0
  53. {verifiers-0.2.2.dev53 → verifiers-0.2.2.dev55}/tests/test_install_utils.py +0 -0
  54. {verifiers-0.2.2.dev53 → verifiers-0.2.2.dev55}/tests/test_interception_utils.py +0 -0
  55. {verifiers-0.2.2.dev53 → verifiers-0.2.2.dev55}/tests/test_logging.py +0 -0
  56. {verifiers-0.2.2.dev53 → verifiers-0.2.2.dev55}/tests/test_math_rubric.py +0 -0
  57. {verifiers-0.2.2.dev53 → verifiers-0.2.2.dev55}/tests/test_maybe_think_parser.py +0 -0
  58. {verifiers-0.2.2.dev53 → verifiers-0.2.2.dev55}/tests/test_message_utils.py +0 -0
  59. {verifiers-0.2.2.dev53 → verifiers-0.2.2.dev55}/tests/test_message_utils_multimodal.py +0 -0
  60. {verifiers-0.2.2.dev53 → verifiers-0.2.2.dev55}/tests/test_multiturn_env.py +0 -0
  61. {verifiers-0.2.2.dev53 → verifiers-0.2.2.dev55}/tests/test_nemorl_client.py +0 -0
  62. {verifiers-0.2.2.dev53 → verifiers-0.2.2.dev55}/tests/test_openai_chat_completions_token_client.py +0 -0
  63. {verifiers-0.2.2.dev53 → verifiers-0.2.2.dev55}/tests/test_openai_responses_client.py +0 -0
  64. {verifiers-0.2.2.dev53 → verifiers-0.2.2.dev55}/tests/test_opencode_rlm_env.py +0 -0
  65. {verifiers-0.2.2.dev53 → verifiers-0.2.2.dev55}/tests/test_openenv_client.py +0 -0
  66. {verifiers-0.2.2.dev53 → verifiers-0.2.2.dev55}/tests/test_parser.py +0 -0
  67. {verifiers-0.2.2.dev53 → verifiers-0.2.2.dev55}/tests/test_path_utils.py +0 -0
  68. {verifiers-0.2.2.dev53 → verifiers-0.2.2.dev55}/tests/test_per_turn_timing.py +0 -0
  69. {verifiers-0.2.2.dev53 → verifiers-0.2.2.dev55}/tests/test_pricing_utils.py +0 -0
  70. {verifiers-0.2.2.dev53 → verifiers-0.2.2.dev55}/tests/test_prime_plugin.py +0 -0
  71. {verifiers-0.2.2.dev53 → verifiers-0.2.2.dev55}/tests/test_renderer_client.py +0 -0
  72. {verifiers-0.2.2.dev53 → verifiers-0.2.2.dev55}/tests/test_renderer_e2e.py +0 -0
  73. {verifiers-0.2.2.dev53 → verifiers-0.2.2.dev55}/tests/test_rlm_composable_env.py +0 -0
  74. {verifiers-0.2.2.dev53 → verifiers-0.2.2.dev55}/tests/test_rubric.py +0 -0
  75. {verifiers-0.2.2.dev53 → verifiers-0.2.2.dev55}/tests/test_rubric_group.py +0 -0
  76. {verifiers-0.2.2.dev53 → verifiers-0.2.2.dev55}/tests/test_sandbox_debug_env.py +0 -0
  77. {verifiers-0.2.2.dev53 → verifiers-0.2.2.dev55}/tests/test_sandbox_env.py +0 -0
  78. {verifiers-0.2.2.dev53 → verifiers-0.2.2.dev55}/tests/test_sandbox_mixin.py +0 -0
  79. {verifiers-0.2.2.dev53 → verifiers-0.2.2.dev55}/tests/test_save_utils.py +0 -0
  80. {verifiers-0.2.2.dev53 → verifiers-0.2.2.dev55}/tests/test_setup_script.py +0 -0
  81. {verifiers-0.2.2.dev53 → verifiers-0.2.2.dev55}/tests/test_singleturn_env.py +0 -0
  82. {verifiers-0.2.2.dev53 → verifiers-0.2.2.dev55}/tests/test_stateful_tool_env.py +0 -0
  83. {verifiers-0.2.2.dev53 → verifiers-0.2.2.dev55}/tests/test_think_parser.py +0 -0
  84. {verifiers-0.2.2.dev53 → verifiers-0.2.2.dev55}/tests/test_tool_env.py +0 -0
  85. {verifiers-0.2.2.dev53 → verifiers-0.2.2.dev55}/tests/test_tool_utils.py +0 -0
  86. {verifiers-0.2.2.dev53 → verifiers-0.2.2.dev55}/tests/test_trajectory_processing.py +0 -0
  87. {verifiers-0.2.2.dev53 → verifiers-0.2.2.dev55}/tests/test_tui_info_formatting.py +0 -0
  88. {verifiers-0.2.2.dev53 → verifiers-0.2.2.dev55}/tests/test_types.py +0 -0
  89. {verifiers-0.2.2.dev53 → verifiers-0.2.2.dev55}/tests/test_xml_parser.py +0 -0
  90. {verifiers-0.2.2.dev53 → verifiers-0.2.2.dev55}/tests/v1/conftest.py +0 -0
  91. {verifiers-0.2.2.dev53 → verifiers-0.2.2.dev55}/tests/v1/fixtures/counter_tool_v1.py +0 -0
  92. {verifiers-0.2.2.dev53 → verifiers-0.2.2.dev55}/tests/v1/fixtures/duet_v1.py +0 -0
  93. {verifiers-0.2.2.dev53 → verifiers-0.2.2.dev55}/tests/v1/fixtures/echo_acp_resume_v1.py +0 -0
  94. {verifiers-0.2.2.dev53 → verifiers-0.2.2.dev55}/tests/v1/fixtures/echo_agentic_v1.py +0 -0
  95. {verifiers-0.2.2.dev53 → verifiers-0.2.2.dev55}/tests/v1/fixtures/echo_multi_v0.py +0 -0
  96. {verifiers-0.2.2.dev53 → verifiers-0.2.2.dev55}/tests/v1/fixtures/echo_tool_v1.py +0 -0
  97. {verifiers-0.2.2.dev53 → verifiers-0.2.2.dev55}/tests/v1/fixtures/echo_user_sim_v1.py +0 -0
  98. {verifiers-0.2.2.dev53 → verifiers-0.2.2.dev55}/tests/v1/fixtures/echo_v0.py +0 -0
  99. {verifiers-0.2.2.dev53 → verifiers-0.2.2.dev55}/tests/v1/fixtures/echo_v1.py +0 -0
  100. {verifiers-0.2.2.dev53 → verifiers-0.2.2.dev55}/tests/v1/fixtures/pyproject.toml +0 -0
  101. {verifiers-0.2.2.dev53 → verifiers-0.2.2.dev55}/tests/v1/fixtures/tool_response_image_v1.py +0 -0
  102. {verifiers-0.2.2.dev53 → verifiers-0.2.2.dev55}/tests/v1/test_color_codeword_tasks.py +0 -0
  103. {verifiers-0.2.2.dev53 → verifiers-0.2.2.dev55}/tests/v1/test_configs.py +0 -0
  104. {verifiers-0.2.2.dev53 → verifiers-0.2.2.dev55}/tests/v1/test_envs.py +0 -0
  105. {verifiers-0.2.2.dev53 → verifiers-0.2.2.dev55}/tests/v1/test_graph.py +0 -0
  106. {verifiers-0.2.2.dev53 → verifiers-0.2.2.dev55}/tests/v1/test_judges.py +0 -0
  107. {verifiers-0.2.2.dev53 → verifiers-0.2.2.dev55}/tests/v1/test_legacy.py +0 -0
  108. {verifiers-0.2.2.dev53 → verifiers-0.2.2.dev55}/tests/v1/test_scoring.py +0 -0
  109. {verifiers-0.2.2.dev53 → verifiers-0.2.2.dev55}/tests/v1/test_taskset.py +0 -0
  110. {verifiers-0.2.2.dev53 → verifiers-0.2.2.dev55}/tests/v1/test_trace.py +0 -0
  111. {verifiers-0.2.2.dev53 → verifiers-0.2.2.dev55}/verifiers/__init__.py +0 -0
  112. {verifiers-0.2.2.dev53 → verifiers-0.2.2.dev55}/verifiers/cli/__init__.py +0 -0
  113. {verifiers-0.2.2.dev53 → verifiers-0.2.2.dev55}/verifiers/cli/commands/__init__.py +0 -0
  114. {verifiers-0.2.2.dev53 → verifiers-0.2.2.dev55}/verifiers/cli/commands/build.py +0 -0
  115. {verifiers-0.2.2.dev53 → verifiers-0.2.2.dev55}/verifiers/cli/commands/eval.py +0 -0
  116. {verifiers-0.2.2.dev53 → verifiers-0.2.2.dev55}/verifiers/cli/commands/gepa.py +0 -0
  117. {verifiers-0.2.2.dev53 → verifiers-0.2.2.dev55}/verifiers/cli/commands/init.py +0 -0
  118. {verifiers-0.2.2.dev53 → verifiers-0.2.2.dev55}/verifiers/cli/commands/install.py +0 -0
  119. {verifiers-0.2.2.dev53 → verifiers-0.2.2.dev55}/verifiers/cli/commands/setup.py +0 -0
  120. {verifiers-0.2.2.dev53 → verifiers-0.2.2.dev55}/verifiers/cli/plugins/__init__.py +0 -0
  121. {verifiers-0.2.2.dev53 → verifiers-0.2.2.dev55}/verifiers/cli/plugins/prime.py +0 -0
  122. {verifiers-0.2.2.dev53 → verifiers-0.2.2.dev55}/verifiers/cli/tui.py +0 -0
  123. {verifiers-0.2.2.dev53 → verifiers-0.2.2.dev55}/verifiers/clients/__init__.py +0 -0
  124. {verifiers-0.2.2.dev53 → verifiers-0.2.2.dev55}/verifiers/clients/anthropic_messages_client.py +0 -0
  125. {verifiers-0.2.2.dev53 → verifiers-0.2.2.dev55}/verifiers/clients/client.py +0 -0
  126. {verifiers-0.2.2.dev53 → verifiers-0.2.2.dev55}/verifiers/clients/nemorl_chat_completions_client.py +0 -0
  127. {verifiers-0.2.2.dev53 → verifiers-0.2.2.dev55}/verifiers/clients/openai_chat_completions_client.py +0 -0
  128. {verifiers-0.2.2.dev53 → verifiers-0.2.2.dev55}/verifiers/clients/openai_chat_completions_token_client.py +0 -0
  129. {verifiers-0.2.2.dev53 → verifiers-0.2.2.dev55}/verifiers/clients/openai_completions_client.py +0 -0
  130. {verifiers-0.2.2.dev53 → verifiers-0.2.2.dev55}/verifiers/clients/openai_responses_client.py +0 -0
  131. {verifiers-0.2.2.dev53 → verifiers-0.2.2.dev55}/verifiers/clients/renderer_client.py +0 -0
  132. {verifiers-0.2.2.dev53 → verifiers-0.2.2.dev55}/verifiers/decorators.py +0 -0
  133. {verifiers-0.2.2.dev53 → verifiers-0.2.2.dev55}/verifiers/envs/__init__.py +0 -0
  134. {verifiers-0.2.2.dev53 → verifiers-0.2.2.dev55}/verifiers/envs/env_group.py +0 -0
  135. {verifiers-0.2.2.dev53 → verifiers-0.2.2.dev55}/verifiers/envs/environment.py +0 -0
  136. {verifiers-0.2.2.dev53 → verifiers-0.2.2.dev55}/verifiers/envs/experimental/README.md +0 -0
  137. {verifiers-0.2.2.dev53 → verifiers-0.2.2.dev55}/verifiers/envs/experimental/__init__.py +0 -0
  138. {verifiers-0.2.2.dev53 → verifiers-0.2.2.dev55}/verifiers/envs/experimental/cli_agent_env.py +0 -0
  139. {verifiers-0.2.2.dev53 → verifiers-0.2.2.dev55}/verifiers/envs/experimental/composable/README.md +0 -0
  140. {verifiers-0.2.2.dev53 → verifiers-0.2.2.dev55}/verifiers/envs/experimental/composable/__init__.py +0 -0
  141. {verifiers-0.2.2.dev53 → verifiers-0.2.2.dev55}/verifiers/envs/experimental/composable/_filter.py +0 -0
  142. {verifiers-0.2.2.dev53 → verifiers-0.2.2.dev55}/verifiers/envs/experimental/composable/composable_env.py +0 -0
  143. {verifiers-0.2.2.dev53 → verifiers-0.2.2.dev55}/verifiers/envs/experimental/composable/harness.py +0 -0
  144. {verifiers-0.2.2.dev53 → verifiers-0.2.2.dev55}/verifiers/envs/experimental/composable/harnesses/__init__.py +0 -0
  145. {verifiers-0.2.2.dev53 → verifiers-0.2.2.dev55}/verifiers/envs/experimental/composable/harnesses/mini_swe_agent.py +0 -0
  146. {verifiers-0.2.2.dev53 → verifiers-0.2.2.dev55}/verifiers/envs/experimental/composable/harnesses/opencode.py +0 -0
  147. {verifiers-0.2.2.dev53 → verifiers-0.2.2.dev55}/verifiers/envs/experimental/composable/harnesses/prompt.txt +0 -0
  148. {verifiers-0.2.2.dev53 → verifiers-0.2.2.dev55}/verifiers/envs/experimental/composable/harnesses/rlm.py +0 -0
  149. {verifiers-0.2.2.dev53 → verifiers-0.2.2.dev55}/verifiers/envs/experimental/composable/sandbox_debug_env.py +0 -0
  150. {verifiers-0.2.2.dev53 → verifiers-0.2.2.dev55}/verifiers/envs/experimental/composable/swe_debug_env.py +0 -0
  151. {verifiers-0.2.2.dev53 → verifiers-0.2.2.dev55}/verifiers/envs/experimental/composable/task.py +0 -0
  152. {verifiers-0.2.2.dev53 → verifiers-0.2.2.dev55}/verifiers/envs/experimental/composable/tasksets/__init__.py +0 -0
  153. {verifiers-0.2.2.dev53 → verifiers-0.2.2.dev55}/verifiers/envs/experimental/composable/tasksets/cp/__init__.py +0 -0
  154. {verifiers-0.2.2.dev53 → verifiers-0.2.2.dev55}/verifiers/envs/experimental/composable/tasksets/cp/cp_task.py +0 -0
  155. {verifiers-0.2.2.dev53 → verifiers-0.2.2.dev55}/verifiers/envs/experimental/composable/tasksets/cp/test_utils.py +0 -0
  156. {verifiers-0.2.2.dev53 → verifiers-0.2.2.dev55}/verifiers/envs/experimental/composable/tasksets/harbor/__init__.py +0 -0
  157. {verifiers-0.2.2.dev53 → verifiers-0.2.2.dev55}/verifiers/envs/experimental/composable/tasksets/harbor/cli_gym.py +0 -0
  158. {verifiers-0.2.2.dev53 → verifiers-0.2.2.dev55}/verifiers/envs/experimental/composable/tasksets/harbor/harbor.py +0 -0
  159. {verifiers-0.2.2.dev53 → verifiers-0.2.2.dev55}/verifiers/envs/experimental/composable/tasksets/harbor/terminal_lego.py +0 -0
  160. {verifiers-0.2.2.dev53 → verifiers-0.2.2.dev55}/verifiers/envs/experimental/composable/tasksets/math/__init__.py +0 -0
  161. {verifiers-0.2.2.dev53 → verifiers-0.2.2.dev55}/verifiers/envs/experimental/composable/tasksets/math/math_task.py +0 -0
  162. {verifiers-0.2.2.dev53 → verifiers-0.2.2.dev55}/verifiers/envs/experimental/composable/tasksets/swe/README.md +0 -0
  163. {verifiers-0.2.2.dev53 → verifiers-0.2.2.dev55}/verifiers/envs/experimental/composable/tasksets/swe/__init__.py +0 -0
  164. {verifiers-0.2.2.dev53 → verifiers-0.2.2.dev55}/verifiers/envs/experimental/composable/tasksets/swe/multi_swe/__init__.py +0 -0
  165. {verifiers-0.2.2.dev53 → verifiers-0.2.2.dev55}/verifiers/envs/experimental/composable/tasksets/swe/multi_swe/extract_fix_patch.sh +0 -0
  166. {verifiers-0.2.2.dev53 → verifiers-0.2.2.dev55}/verifiers/envs/experimental/composable/tasksets/swe/multi_swe/taskset.py +0 -0
  167. {verifiers-0.2.2.dev53 → verifiers-0.2.2.dev55}/verifiers/envs/experimental/composable/tasksets/swe/openswe/__init__.py +0 -0
  168. {verifiers-0.2.2.dev53 → verifiers-0.2.2.dev55}/verifiers/envs/experimental/composable/tasksets/swe/openswe/taskset.py +0 -0
  169. {verifiers-0.2.2.dev53 → verifiers-0.2.2.dev55}/verifiers/envs/experimental/composable/tasksets/swe/r2e_gym/__init__.py +0 -0
  170. {verifiers-0.2.2.dev53 → verifiers-0.2.2.dev55}/verifiers/envs/experimental/composable/tasksets/swe/r2e_gym/log_parser.py +0 -0
  171. {verifiers-0.2.2.dev53 → verifiers-0.2.2.dev55}/verifiers/envs/experimental/composable/tasksets/swe/r2e_gym/taskset.py +0 -0
  172. {verifiers-0.2.2.dev53 → verifiers-0.2.2.dev55}/verifiers/envs/experimental/composable/tasksets/swe/scale_swe/__init__.py +0 -0
  173. {verifiers-0.2.2.dev53 → verifiers-0.2.2.dev55}/verifiers/envs/experimental/composable/tasksets/swe/scale_swe/taskset.py +0 -0
  174. {verifiers-0.2.2.dev53 → verifiers-0.2.2.dev55}/verifiers/envs/experimental/composable/tasksets/swe/shared/__init__.py +0 -0
  175. {verifiers-0.2.2.dev53 → verifiers-0.2.2.dev55}/verifiers/envs/experimental/composable/tasksets/swe/shared/test_patch.py +0 -0
  176. {verifiers-0.2.2.dev53 → verifiers-0.2.2.dev55}/verifiers/envs/experimental/composable/tasksets/swe/swe_bench/__init__.py +0 -0
  177. {verifiers-0.2.2.dev53 → verifiers-0.2.2.dev55}/verifiers/envs/experimental/composable/tasksets/swe/swe_bench/taskset.py +0 -0
  178. {verifiers-0.2.2.dev53 → verifiers-0.2.2.dev55}/verifiers/envs/experimental/composable/tasksets/swe/swe_lego/__init__.py +0 -0
  179. {verifiers-0.2.2.dev53 → verifiers-0.2.2.dev55}/verifiers/envs/experimental/composable/tasksets/swe/swe_lego/taskset.py +0 -0
  180. {verifiers-0.2.2.dev53 → verifiers-0.2.2.dev55}/verifiers/envs/experimental/composable/tasksets/swe/swe_rebench_v2/__init__.py +0 -0
  181. {verifiers-0.2.2.dev53 → verifiers-0.2.2.dev55}/verifiers/envs/experimental/composable/tasksets/swe/swe_rebench_v2/log_parsers.py +0 -0
  182. {verifiers-0.2.2.dev53 → verifiers-0.2.2.dev55}/verifiers/envs/experimental/composable/tasksets/swe/swe_rebench_v2/taskset.py +0 -0
  183. {verifiers-0.2.2.dev53 → verifiers-0.2.2.dev55}/verifiers/envs/experimental/composable/tasksets/swe/swe_smith/__init__.py +0 -0
  184. {verifiers-0.2.2.dev53 → verifiers-0.2.2.dev55}/verifiers/envs/experimental/composable/tasksets/swe/swe_smith/taskset.py +0 -0
  185. {verifiers-0.2.2.dev53 → verifiers-0.2.2.dev55}/verifiers/envs/experimental/composable/tasksets/swe/swe_tasksets.py +0 -0
  186. {verifiers-0.2.2.dev53 → verifiers-0.2.2.dev55}/verifiers/envs/experimental/gym_env.py +0 -0
  187. {verifiers-0.2.2.dev53 → verifiers-0.2.2.dev55}/verifiers/envs/experimental/harbor_env/__init__.py +0 -0
  188. {verifiers-0.2.2.dev53 → verifiers-0.2.2.dev55}/verifiers/envs/experimental/harbor_env/env.py +0 -0
  189. {verifiers-0.2.2.dev53 → verifiers-0.2.2.dev55}/verifiers/envs/experimental/harbor_env/mcp.py +0 -0
  190. {verifiers-0.2.2.dev53 → verifiers-0.2.2.dev55}/verifiers/envs/experimental/mcp_env.py +0 -0
  191. {verifiers-0.2.2.dev53 → verifiers-0.2.2.dev55}/verifiers/envs/experimental/opencode_env.py +0 -0
  192. {verifiers-0.2.2.dev53 → verifiers-0.2.2.dev55}/verifiers/envs/experimental/opencode_qa_env.py +0 -0
  193. {verifiers-0.2.2.dev53 → verifiers-0.2.2.dev55}/verifiers/envs/experimental/opencode_rlm_env.py +0 -0
  194. {verifiers-0.2.2.dev53 → verifiers-0.2.2.dev55}/verifiers/envs/experimental/sandbox_mixin.py +0 -0
  195. {verifiers-0.2.2.dev53 → verifiers-0.2.2.dev55}/verifiers/envs/experimental/utils/__init__.py +0 -0
  196. {verifiers-0.2.2.dev53 → verifiers-0.2.2.dev55}/verifiers/envs/experimental/utils/file_locks.py +0 -0
  197. {verifiers-0.2.2.dev53 → verifiers-0.2.2.dev55}/verifiers/envs/experimental/utils/git_checkout_cache.py +0 -0
  198. {verifiers-0.2.2.dev53 → verifiers-0.2.2.dev55}/verifiers/envs/integrations/README.md +0 -0
  199. {verifiers-0.2.2.dev53 → verifiers-0.2.2.dev55}/verifiers/envs/integrations/__init__.py +0 -0
  200. {verifiers-0.2.2.dev53 → verifiers-0.2.2.dev55}/verifiers/envs/integrations/browser_env/README.md +0 -0
  201. {verifiers-0.2.2.dev53 → verifiers-0.2.2.dev55}/verifiers/envs/integrations/browser_env/__init__.py +0 -0
  202. {verifiers-0.2.2.dev53 → verifiers-0.2.2.dev55}/verifiers/envs/integrations/browser_env/browser_env.py +0 -0
  203. {verifiers-0.2.2.dev53 → verifiers-0.2.2.dev55}/verifiers/envs/integrations/browser_env/modes/__init__.py +0 -0
  204. {verifiers-0.2.2.dev53 → verifiers-0.2.2.dev55}/verifiers/envs/integrations/browser_env/modes/base.py +0 -0
  205. {verifiers-0.2.2.dev53 → verifiers-0.2.2.dev55}/verifiers/envs/integrations/browser_env/modes/cua_mode.py +0 -0
  206. {verifiers-0.2.2.dev53 → verifiers-0.2.2.dev55}/verifiers/envs/integrations/browser_env/modes/dom_mode.py +0 -0
  207. {verifiers-0.2.2.dev53 → verifiers-0.2.2.dev55}/verifiers/envs/integrations/openenv_env.py +0 -0
  208. {verifiers-0.2.2.dev53 → verifiers-0.2.2.dev55}/verifiers/envs/integrations/reasoninggym_env.py +0 -0
  209. {verifiers-0.2.2.dev53 → verifiers-0.2.2.dev55}/verifiers/envs/integrations/textarena_env.py +0 -0
  210. {verifiers-0.2.2.dev53 → verifiers-0.2.2.dev55}/verifiers/envs/multiturn_env.py +0 -0
  211. {verifiers-0.2.2.dev53 → verifiers-0.2.2.dev55}/verifiers/envs/python_env.py +0 -0
  212. {verifiers-0.2.2.dev53 → verifiers-0.2.2.dev55}/verifiers/envs/sandbox_env.py +0 -0
  213. {verifiers-0.2.2.dev53 → verifiers-0.2.2.dev55}/verifiers/envs/singleturn_env.py +0 -0
  214. {verifiers-0.2.2.dev53 → verifiers-0.2.2.dev55}/verifiers/envs/stateful_tool_env.py +0 -0
  215. {verifiers-0.2.2.dev53 → verifiers-0.2.2.dev55}/verifiers/envs/tool_env.py +0 -0
  216. {verifiers-0.2.2.dev53 → verifiers-0.2.2.dev55}/verifiers/errors.py +0 -0
  217. {verifiers-0.2.2.dev53 → verifiers-0.2.2.dev55}/verifiers/gepa/__init__.py +0 -0
  218. {verifiers-0.2.2.dev53 → verifiers-0.2.2.dev55}/verifiers/gepa/adapter.py +0 -0
  219. {verifiers-0.2.2.dev53 → verifiers-0.2.2.dev55}/verifiers/gepa/config.py +0 -0
  220. {verifiers-0.2.2.dev53 → verifiers-0.2.2.dev55}/verifiers/gepa/display.py +0 -0
  221. {verifiers-0.2.2.dev53 → verifiers-0.2.2.dev55}/verifiers/gepa/gepa_utils.py +0 -0
  222. {verifiers-0.2.2.dev53 → verifiers-0.2.2.dev55}/verifiers/parsers/__init__.py +0 -0
  223. {verifiers-0.2.2.dev53 → verifiers-0.2.2.dev55}/verifiers/parsers/maybe_think_parser.py +0 -0
  224. {verifiers-0.2.2.dev53 → verifiers-0.2.2.dev55}/verifiers/parsers/parser.py +0 -0
  225. {verifiers-0.2.2.dev53 → verifiers-0.2.2.dev55}/verifiers/parsers/think_parser.py +0 -0
  226. {verifiers-0.2.2.dev53 → verifiers-0.2.2.dev55}/verifiers/parsers/xml_parser.py +0 -0
  227. {verifiers-0.2.2.dev53 → verifiers-0.2.2.dev55}/verifiers/rubrics/__init__.py +0 -0
  228. {verifiers-0.2.2.dev53 → verifiers-0.2.2.dev55}/verifiers/rubrics/experimental/hybrid_math_rubric.py +0 -0
  229. {verifiers-0.2.2.dev53 → verifiers-0.2.2.dev55}/verifiers/rubrics/judge_rubric.py +0 -0
  230. {verifiers-0.2.2.dev53 → verifiers-0.2.2.dev55}/verifiers/rubrics/math_rubric.py +0 -0
  231. {verifiers-0.2.2.dev53 → verifiers-0.2.2.dev55}/verifiers/rubrics/rubric.py +0 -0
  232. {verifiers-0.2.2.dev53 → verifiers-0.2.2.dev55}/verifiers/rubrics/rubric_group.py +0 -0
  233. {verifiers-0.2.2.dev53 → verifiers-0.2.2.dev55}/verifiers/scripts/__init__.py +0 -0
  234. {verifiers-0.2.2.dev53 → verifiers-0.2.2.dev55}/verifiers/scripts/build.py +0 -0
  235. {verifiers-0.2.2.dev53 → verifiers-0.2.2.dev55}/verifiers/scripts/eval.py +0 -0
  236. {verifiers-0.2.2.dev53 → verifiers-0.2.2.dev55}/verifiers/scripts/gepa.py +0 -0
  237. {verifiers-0.2.2.dev53 → verifiers-0.2.2.dev55}/verifiers/scripts/init.py +0 -0
  238. {verifiers-0.2.2.dev53 → verifiers-0.2.2.dev55}/verifiers/scripts/install.py +0 -0
  239. {verifiers-0.2.2.dev53 → verifiers-0.2.2.dev55}/verifiers/scripts/setup.py +0 -0
  240. {verifiers-0.2.2.dev53 → verifiers-0.2.2.dev55}/verifiers/scripts/tui.py +0 -0
  241. {verifiers-0.2.2.dev53 → verifiers-0.2.2.dev55}/verifiers/serve/__init__.py +0 -0
  242. {verifiers-0.2.2.dev53 → verifiers-0.2.2.dev55}/verifiers/serve/client/env_client.py +0 -0
  243. {verifiers-0.2.2.dev53 → verifiers-0.2.2.dev55}/verifiers/serve/client/zmq_env_client.py +0 -0
  244. {verifiers-0.2.2.dev53 → verifiers-0.2.2.dev55}/verifiers/serve/server/__init__.py +0 -0
  245. {verifiers-0.2.2.dev53 → verifiers-0.2.2.dev55}/verifiers/serve/server/env_router.py +0 -0
  246. {verifiers-0.2.2.dev53 → verifiers-0.2.2.dev55}/verifiers/serve/server/env_server.py +0 -0
  247. {verifiers-0.2.2.dev53 → verifiers-0.2.2.dev55}/verifiers/serve/server/env_worker.py +0 -0
  248. {verifiers-0.2.2.dev53 → verifiers-0.2.2.dev55}/verifiers/serve/server/zmq_env_server.py +0 -0
  249. {verifiers-0.2.2.dev53 → verifiers-0.2.2.dev55}/verifiers/serve/types.py +0 -0
  250. {verifiers-0.2.2.dev53 → verifiers-0.2.2.dev55}/verifiers/types.py +0 -0
  251. {verifiers-0.2.2.dev53 → verifiers-0.2.2.dev55}/verifiers/utils/__init__.py +0 -0
  252. {verifiers-0.2.2.dev53 → verifiers-0.2.2.dev55}/verifiers/utils/async_utils.py +0 -0
  253. {verifiers-0.2.2.dev53 → verifiers-0.2.2.dev55}/verifiers/utils/client_utils.py +0 -0
  254. {verifiers-0.2.2.dev53 → verifiers-0.2.2.dev55}/verifiers/utils/config_utils.py +0 -0
  255. {verifiers-0.2.2.dev53 → verifiers-0.2.2.dev55}/verifiers/utils/data_utils.py +0 -0
  256. {verifiers-0.2.2.dev53 → verifiers-0.2.2.dev55}/verifiers/utils/display_utils.py +0 -0
  257. {verifiers-0.2.2.dev53 → verifiers-0.2.2.dev55}/verifiers/utils/env_config_utils.py +0 -0
  258. {verifiers-0.2.2.dev53 → verifiers-0.2.2.dev55}/verifiers/utils/env_utils.py +0 -0
  259. {verifiers-0.2.2.dev53 → verifiers-0.2.2.dev55}/verifiers/utils/error_utils.py +0 -0
  260. {verifiers-0.2.2.dev53 → verifiers-0.2.2.dev55}/verifiers/utils/eval_display.py +0 -0
  261. {verifiers-0.2.2.dev53 → verifiers-0.2.2.dev55}/verifiers/utils/eval_utils.py +0 -0
  262. {verifiers-0.2.2.dev53 → verifiers-0.2.2.dev55}/verifiers/utils/heartbeat.py +0 -0
  263. {verifiers-0.2.2.dev53 → verifiers-0.2.2.dev55}/verifiers/utils/import_utils.py +0 -0
  264. {verifiers-0.2.2.dev53 → verifiers-0.2.2.dev55}/verifiers/utils/install_utils.py +0 -0
  265. {verifiers-0.2.2.dev53 → verifiers-0.2.2.dev55}/verifiers/utils/interception_utils.py +0 -0
  266. {verifiers-0.2.2.dev53 → verifiers-0.2.2.dev55}/verifiers/utils/logging_utils.py +0 -0
  267. {verifiers-0.2.2.dev53 → verifiers-0.2.2.dev55}/verifiers/utils/message_utils.py +0 -0
  268. {verifiers-0.2.2.dev53 → verifiers-0.2.2.dev55}/verifiers/utils/metric_utils.py +0 -0
  269. {verifiers-0.2.2.dev53 → verifiers-0.2.2.dev55}/verifiers/utils/path_utils.py +0 -0
  270. {verifiers-0.2.2.dev53 → verifiers-0.2.2.dev55}/verifiers/utils/pricing_utils.py +0 -0
  271. {verifiers-0.2.2.dev53 → verifiers-0.2.2.dev55}/verifiers/utils/process_utils.py +0 -0
  272. {verifiers-0.2.2.dev53 → verifiers-0.2.2.dev55}/verifiers/utils/response_utils.py +0 -0
  273. {verifiers-0.2.2.dev53 → verifiers-0.2.2.dev55}/verifiers/utils/save_utils.py +0 -0
  274. {verifiers-0.2.2.dev53 → verifiers-0.2.2.dev55}/verifiers/utils/serve_utils.py +0 -0
  275. {verifiers-0.2.2.dev53 → verifiers-0.2.2.dev55}/verifiers/utils/thread_utils.py +0 -0
  276. {verifiers-0.2.2.dev53 → verifiers-0.2.2.dev55}/verifiers/utils/threaded_sandbox_client.py +0 -0
  277. {verifiers-0.2.2.dev53 → verifiers-0.2.2.dev55}/verifiers/utils/tool_utils.py +0 -0
  278. {verifiers-0.2.2.dev53 → verifiers-0.2.2.dev55}/verifiers/utils/usage_utils.py +0 -0
  279. {verifiers-0.2.2.dev53 → verifiers-0.2.2.dev55}/verifiers/utils/version_utils.py +0 -0
  280. {verifiers-0.2.2.dev53 → verifiers-0.2.2.dev55}/verifiers/v1/acp/__init__.py +0 -0
  281. {verifiers-0.2.2.dev53 → verifiers-0.2.2.dev55}/verifiers/v1/acp/_runner.py +0 -0
  282. {verifiers-0.2.2.dev53 → verifiers-0.2.2.dev55}/verifiers/v1/agent.py +0 -0
  283. {verifiers-0.2.2.dev53 → verifiers-0.2.2.dev55}/verifiers/v1/cli/__init__.py +0 -0
  284. {verifiers-0.2.2.dev53 → verifiers-0.2.2.dev55}/verifiers/v1/cli/dashboard/__init__.py +0 -0
  285. {verifiers-0.2.2.dev53 → verifiers-0.2.2.dev55}/verifiers/v1/cli/dashboard/base.py +0 -0
  286. {verifiers-0.2.2.dev53 → verifiers-0.2.2.dev55}/verifiers/v1/cli/dashboard/replay.py +0 -0
  287. {verifiers-0.2.2.dev53 → verifiers-0.2.2.dev55}/verifiers/v1/cli/dashboard/validate.py +0 -0
  288. {verifiers-0.2.2.dev53 → verifiers-0.2.2.dev55}/verifiers/v1/cli/eval/__init__.py +0 -0
  289. {verifiers-0.2.2.dev53 → verifiers-0.2.2.dev55}/verifiers/v1/cli/eval/main.py +0 -0
  290. {verifiers-0.2.2.dev53 → verifiers-0.2.2.dev55}/verifiers/v1/cli/eval/resume.py +0 -0
  291. {verifiers-0.2.2.dev53 → verifiers-0.2.2.dev55}/verifiers/v1/cli/eval/runner.py +0 -0
  292. {verifiers-0.2.2.dev53 → verifiers-0.2.2.dev55}/verifiers/v1/cli/gepa.py +0 -0
  293. {verifiers-0.2.2.dev53 → verifiers-0.2.2.dev55}/verifiers/v1/cli/init.py +0 -0
  294. {verifiers-0.2.2.dev53 → verifiers-0.2.2.dev55}/verifiers/v1/cli/output.py +0 -0
  295. {verifiers-0.2.2.dev53 → verifiers-0.2.2.dev55}/verifiers/v1/cli/resolve.py +0 -0
  296. {verifiers-0.2.2.dev53 → verifiers-0.2.2.dev55}/verifiers/v1/cli/serve.py +0 -0
  297. {verifiers-0.2.2.dev53 → verifiers-0.2.2.dev55}/verifiers/v1/cli/validate.py +0 -0
  298. {verifiers-0.2.2.dev53 → verifiers-0.2.2.dev55}/verifiers/v1/clients/__init__.py +0 -0
  299. {verifiers-0.2.2.dev53 → verifiers-0.2.2.dev55}/verifiers/v1/clients/client.py +0 -0
  300. {verifiers-0.2.2.dev53 → verifiers-0.2.2.dev55}/verifiers/v1/clients/config.py +0 -0
  301. {verifiers-0.2.2.dev53 → verifiers-0.2.2.dev55}/verifiers/v1/clients/eval.py +0 -0
  302. {verifiers-0.2.2.dev53 → verifiers-0.2.2.dev55}/verifiers/v1/clients/train.py +0 -0
  303. {verifiers-0.2.2.dev53 → verifiers-0.2.2.dev55}/verifiers/v1/configs/__init__.py +0 -0
  304. {verifiers-0.2.2.dev53 → verifiers-0.2.2.dev55}/verifiers/v1/configs/agent.py +0 -0
  305. {verifiers-0.2.2.dev53 → verifiers-0.2.2.dev55}/verifiers/v1/configs/cli/__init__.py +0 -0
  306. {verifiers-0.2.2.dev53 → verifiers-0.2.2.dev55}/verifiers/v1/configs/cli/debug.py +0 -0
  307. {verifiers-0.2.2.dev53 → verifiers-0.2.2.dev55}/verifiers/v1/configs/cli/env.py +0 -0
  308. {verifiers-0.2.2.dev53 → verifiers-0.2.2.dev55}/verifiers/v1/configs/cli/eval.py +0 -0
  309. {verifiers-0.2.2.dev53 → verifiers-0.2.2.dev55}/verifiers/v1/configs/cli/init.py +0 -0
  310. {verifiers-0.2.2.dev53 → verifiers-0.2.2.dev55}/verifiers/v1/configs/cli/replay.py +0 -0
  311. {verifiers-0.2.2.dev53 → verifiers-0.2.2.dev55}/verifiers/v1/configs/cli/serve.py +0 -0
  312. {verifiers-0.2.2.dev53 → verifiers-0.2.2.dev55}/verifiers/v1/configs/cli/validate.py +0 -0
  313. {verifiers-0.2.2.dev53 → verifiers-0.2.2.dev55}/verifiers/v1/configs/env.py +0 -0
  314. {verifiers-0.2.2.dev53 → verifiers-0.2.2.dev55}/verifiers/v1/configs/harness.py +0 -0
  315. {verifiers-0.2.2.dev53 → verifiers-0.2.2.dev55}/verifiers/v1/configs/judge.py +0 -0
  316. {verifiers-0.2.2.dev53 → verifiers-0.2.2.dev55}/verifiers/v1/configs/legacy.py +0 -0
  317. {verifiers-0.2.2.dev53 → verifiers-0.2.2.dev55}/verifiers/v1/configs/retries.py +0 -0
  318. {verifiers-0.2.2.dev53 → verifiers-0.2.2.dev55}/verifiers/v1/configs/serve.py +0 -0
  319. {verifiers-0.2.2.dev53 → verifiers-0.2.2.dev55}/verifiers/v1/configs/task.py +0 -0
  320. {verifiers-0.2.2.dev53 → verifiers-0.2.2.dev55}/verifiers/v1/configs/taskset.py +0 -0
  321. {verifiers-0.2.2.dev53 → verifiers-0.2.2.dev55}/verifiers/v1/decorators.py +0 -0
  322. {verifiers-0.2.2.dev53 → verifiers-0.2.2.dev55}/verifiers/v1/dialects/__init__.py +0 -0
  323. {verifiers-0.2.2.dev53 → verifiers-0.2.2.dev55}/verifiers/v1/dialects/anthropic.py +0 -0
  324. {verifiers-0.2.2.dev53 → verifiers-0.2.2.dev55}/verifiers/v1/dialects/base.py +0 -0
  325. {verifiers-0.2.2.dev53 → verifiers-0.2.2.dev55}/verifiers/v1/dialects/chat.py +0 -0
  326. {verifiers-0.2.2.dev53 → verifiers-0.2.2.dev55}/verifiers/v1/dialects/responses.py +0 -0
  327. {verifiers-0.2.2.dev53 → verifiers-0.2.2.dev55}/verifiers/v1/envs/__init__.py +0 -0
  328. {verifiers-0.2.2.dev53 → verifiers-0.2.2.dev55}/verifiers/v1/envs/agentic_judge/__init__.py +0 -0
  329. {verifiers-0.2.2.dev53 → verifiers-0.2.2.dev55}/verifiers/v1/envs/best_of_n/__init__.py +0 -0
  330. {verifiers-0.2.2.dev53 → verifiers-0.2.2.dev55}/verifiers/v1/envs/best_of_n/env.py +0 -0
  331. {verifiers-0.2.2.dev53 → verifiers-0.2.2.dev55}/verifiers/v1/envs/single_agent/__init__.py +0 -0
  332. {verifiers-0.2.2.dev53 → verifiers-0.2.2.dev55}/verifiers/v1/envs/single_agent/env.py +0 -0
  333. {verifiers-0.2.2.dev53 → verifiers-0.2.2.dev55}/verifiers/v1/envs/user_sim/__init__.py +0 -0
  334. {verifiers-0.2.2.dev53 → verifiers-0.2.2.dev55}/verifiers/v1/envs/user_sim/env.py +0 -0
  335. {verifiers-0.2.2.dev53 → verifiers-0.2.2.dev55}/verifiers/v1/errors.py +0 -0
  336. {verifiers-0.2.2.dev53 → verifiers-0.2.2.dev55}/verifiers/v1/gepa/__init__.py +0 -0
  337. {verifiers-0.2.2.dev53 → verifiers-0.2.2.dev55}/verifiers/v1/gepa/adapter.py +0 -0
  338. {verifiers-0.2.2.dev53 → verifiers-0.2.2.dev55}/verifiers/v1/gepa/config.py +0 -0
  339. {verifiers-0.2.2.dev53 → verifiers-0.2.2.dev55}/verifiers/v1/gepa/dataset.py +0 -0
  340. {verifiers-0.2.2.dev53 → verifiers-0.2.2.dev55}/verifiers/v1/gepa/reflection.py +0 -0
  341. {verifiers-0.2.2.dev53 → verifiers-0.2.2.dev55}/verifiers/v1/gepa/runner.py +0 -0
  342. {verifiers-0.2.2.dev53 → verifiers-0.2.2.dev55}/verifiers/v1/harness.py +0 -0
  343. {verifiers-0.2.2.dev53 → verifiers-0.2.2.dev55}/verifiers/v1/harnesses/__init__.py +0 -0
  344. {verifiers-0.2.2.dev53 → verifiers-0.2.2.dev55}/verifiers/v1/harnesses/bash/__init__.py +0 -0
  345. {verifiers-0.2.2.dev53 → verifiers-0.2.2.dev55}/verifiers/v1/harnesses/bash/harness.py +0 -0
  346. {verifiers-0.2.2.dev53 → verifiers-0.2.2.dev55}/verifiers/v1/harnesses/bash/program.py +0 -0
  347. {verifiers-0.2.2.dev53 → verifiers-0.2.2.dev55}/verifiers/v1/harnesses/claude_code/__init__.py +0 -0
  348. {verifiers-0.2.2.dev53 → verifiers-0.2.2.dev55}/verifiers/v1/harnesses/claude_code/harness.py +0 -0
  349. {verifiers-0.2.2.dev53 → verifiers-0.2.2.dev55}/verifiers/v1/harnesses/codex/__init__.py +0 -0
  350. {verifiers-0.2.2.dev53 → verifiers-0.2.2.dev55}/verifiers/v1/harnesses/codex/harness.py +0 -0
  351. {verifiers-0.2.2.dev53 → verifiers-0.2.2.dev55}/verifiers/v1/harnesses/kimi_code/__init__.py +0 -0
  352. {verifiers-0.2.2.dev53 → verifiers-0.2.2.dev55}/verifiers/v1/harnesses/kimi_code/harness.py +0 -0
  353. {verifiers-0.2.2.dev53 → verifiers-0.2.2.dev55}/verifiers/v1/harnesses/mini_swe_agent/__init__.py +0 -0
  354. {verifiers-0.2.2.dev53 → verifiers-0.2.2.dev55}/verifiers/v1/harnesses/mini_swe_agent/harness.py +0 -0
  355. {verifiers-0.2.2.dev53 → verifiers-0.2.2.dev55}/verifiers/v1/harnesses/mini_swe_agent/program.py +0 -0
  356. {verifiers-0.2.2.dev53 → verifiers-0.2.2.dev55}/verifiers/v1/harnesses/null/__init__.py +0 -0
  357. {verifiers-0.2.2.dev53 → verifiers-0.2.2.dev55}/verifiers/v1/harnesses/null/harness.py +0 -0
  358. {verifiers-0.2.2.dev53 → verifiers-0.2.2.dev55}/verifiers/v1/harnesses/null/program.py +0 -0
  359. {verifiers-0.2.2.dev53 → verifiers-0.2.2.dev55}/verifiers/v1/harnesses/pi/__init__.py +0 -0
  360. {verifiers-0.2.2.dev53 → verifiers-0.2.2.dev55}/verifiers/v1/harnesses/pi/harness.py +0 -0
  361. {verifiers-0.2.2.dev53 → verifiers-0.2.2.dev55}/verifiers/v1/harnesses/pool/__init__.py +0 -0
  362. {verifiers-0.2.2.dev53 → verifiers-0.2.2.dev55}/verifiers/v1/harnesses/pool/harness.py +0 -0
  363. {verifiers-0.2.2.dev53 → verifiers-0.2.2.dev55}/verifiers/v1/harnesses/rlm/__init__.py +0 -0
  364. {verifiers-0.2.2.dev53 → verifiers-0.2.2.dev55}/verifiers/v1/harnesses/rlm/harness.py +0 -0
  365. {verifiers-0.2.2.dev53 → verifiers-0.2.2.dev55}/verifiers/v1/harnesses/terminus_2/__init__.py +0 -0
  366. {verifiers-0.2.2.dev53 → verifiers-0.2.2.dev55}/verifiers/v1/harnesses/terminus_2/harness.py +0 -0
  367. {verifiers-0.2.2.dev53 → verifiers-0.2.2.dev55}/verifiers/v1/harnesses/terminus_2/program.py +0 -0
  368. {verifiers-0.2.2.dev53 → verifiers-0.2.2.dev55}/verifiers/v1/interception/__init__.py +0 -0
  369. {verifiers-0.2.2.dev53 → verifiers-0.2.2.dev55}/verifiers/v1/interception/base.py +0 -0
  370. {verifiers-0.2.2.dev53 → verifiers-0.2.2.dev55}/verifiers/v1/interception/pool.py +0 -0
  371. {verifiers-0.2.2.dev53 → verifiers-0.2.2.dev55}/verifiers/v1/interception/server.py +0 -0
  372. {verifiers-0.2.2.dev53 → verifiers-0.2.2.dev55}/verifiers/v1/interception/tunnel/__init__.py +0 -0
  373. {verifiers-0.2.2.dev53 → verifiers-0.2.2.dev55}/verifiers/v1/interception/tunnel/base.py +0 -0
  374. {verifiers-0.2.2.dev53 → verifiers-0.2.2.dev55}/verifiers/v1/interception/tunnel/custom.py +0 -0
  375. {verifiers-0.2.2.dev53 → verifiers-0.2.2.dev55}/verifiers/v1/interception/tunnel/prime.py +0 -0
  376. {verifiers-0.2.2.dev53 → verifiers-0.2.2.dev55}/verifiers/v1/judges/__init__.py +0 -0
  377. {verifiers-0.2.2.dev53 → verifiers-0.2.2.dev55}/verifiers/v1/judges/reference.py +0 -0
  378. {verifiers-0.2.2.dev53 → verifiers-0.2.2.dev55}/verifiers/v1/judges/reference.txt +0 -0
  379. {verifiers-0.2.2.dev53 → verifiers-0.2.2.dev55}/verifiers/v1/judges/rubric.txt +0 -0
  380. {verifiers-0.2.2.dev53 → verifiers-0.2.2.dev55}/verifiers/v1/loaders.py +0 -0
  381. {verifiers-0.2.2.dev53 → verifiers-0.2.2.dev55}/verifiers/v1/mcp/__init__.py +0 -0
  382. {verifiers-0.2.2.dev53 → verifiers-0.2.2.dev55}/verifiers/v1/mcp/launch.py +0 -0
  383. {verifiers-0.2.2.dev53 → verifiers-0.2.2.dev55}/verifiers/v1/mcp/server.py +0 -0
  384. {verifiers-0.2.2.dev53 → verifiers-0.2.2.dev55}/verifiers/v1/mcp/toolset.py +0 -0
  385. {verifiers-0.2.2.dev53 → verifiers-0.2.2.dev55}/verifiers/v1/push.py +0 -0
  386. {verifiers-0.2.2.dev53 → verifiers-0.2.2.dev55}/verifiers/v1/retries.py +0 -0
  387. {verifiers-0.2.2.dev53 → verifiers-0.2.2.dev55}/verifiers/v1/runtimes/__init__.py +0 -0
  388. {verifiers-0.2.2.dev53 → verifiers-0.2.2.dev55}/verifiers/v1/runtimes/base.py +0 -0
  389. {verifiers-0.2.2.dev53 → verifiers-0.2.2.dev55}/verifiers/v1/runtimes/docker/__init__.py +0 -0
  390. {verifiers-0.2.2.dev53 → verifiers-0.2.2.dev55}/verifiers/v1/runtimes/docker/egress.py +0 -0
  391. {verifiers-0.2.2.dev53 → verifiers-0.2.2.dev55}/verifiers/v1/runtimes/limiters.py +0 -0
  392. {verifiers-0.2.2.dev53 → verifiers-0.2.2.dev55}/verifiers/v1/runtimes/modal.py +0 -0
  393. {verifiers-0.2.2.dev53 → verifiers-0.2.2.dev55}/verifiers/v1/runtimes/prime.py +0 -0
  394. {verifiers-0.2.2.dev53 → verifiers-0.2.2.dev55}/verifiers/v1/runtimes/subprocess.py +0 -0
  395. {verifiers-0.2.2.dev53 → verifiers-0.2.2.dev55}/verifiers/v1/scoring.py +0 -0
  396. {verifiers-0.2.2.dev53 → verifiers-0.2.2.dev55}/verifiers/v1/serve/__init__.py +0 -0
  397. {verifiers-0.2.2.dev53 → verifiers-0.2.2.dev55}/verifiers/v1/serve/client.py +0 -0
  398. {verifiers-0.2.2.dev53 → verifiers-0.2.2.dev55}/verifiers/v1/serve/pool.py +0 -0
  399. {verifiers-0.2.2.dev53 → verifiers-0.2.2.dev55}/verifiers/v1/serve/types.py +0 -0
  400. {verifiers-0.2.2.dev53 → verifiers-0.2.2.dev55}/verifiers/v1/session.py +0 -0
  401. {verifiers-0.2.2.dev53 → verifiers-0.2.2.dev55}/verifiers/v1/tasksets/__init__.py +0 -0
  402. {verifiers-0.2.2.dev53 → verifiers-0.2.2.dev55}/verifiers/v1/tasksets/harbor/__init__.py +0 -0
  403. {verifiers-0.2.2.dev53 → verifiers-0.2.2.dev55}/verifiers/v1/tasksets/lean/__init__.py +0 -0
  404. {verifiers-0.2.2.dev53 → verifiers-0.2.2.dev55}/verifiers/v1/tasksets/lean/scoring.py +0 -0
  405. {verifiers-0.2.2.dev53 → verifiers-0.2.2.dev55}/verifiers/v1/tasksets/lean/taskset.py +0 -0
  406. {verifiers-0.2.2.dev53 → verifiers-0.2.2.dev55}/verifiers/v1/tasksets/openenv/__init__.py +0 -0
  407. {verifiers-0.2.2.dev53 → verifiers-0.2.2.dev55}/verifiers/v1/tasksets/openenv/taskset.py +0 -0
  408. {verifiers-0.2.2.dev53 → verifiers-0.2.2.dev55}/verifiers/v1/tasksets/textarena/__init__.py +0 -0
  409. {verifiers-0.2.2.dev53 → verifiers-0.2.2.dev55}/verifiers/v1/tasksets/textarena/taskset.py +0 -0
  410. {verifiers-0.2.2.dev53 → verifiers-0.2.2.dev55}/verifiers/v1/utils/__init__.py +0 -0
  411. {verifiers-0.2.2.dev53 → verifiers-0.2.2.dev55}/verifiers/v1/utils/aio.py +0 -0
  412. {verifiers-0.2.2.dev53 → verifiers-0.2.2.dev55}/verifiers/v1/utils/compile.py +0 -0
  413. {verifiers-0.2.2.dev53 → verifiers-0.2.2.dev55}/verifiers/v1/utils/format.py +0 -0
  414. {verifiers-0.2.2.dev53 → verifiers-0.2.2.dev55}/verifiers/v1/utils/generic.py +0 -0
  415. {verifiers-0.2.2.dev53 → verifiers-0.2.2.dev55}/verifiers/v1/utils/git.py +0 -0
  416. {verifiers-0.2.2.dev53 → verifiers-0.2.2.dev55}/verifiers/v1/utils/image.py +0 -0
  417. {verifiers-0.2.2.dev53 → verifiers-0.2.2.dev55}/verifiers/v1/utils/install.py +0 -0
  418. {verifiers-0.2.2.dev53 → verifiers-0.2.2.dev55}/verifiers/v1/utils/interrupt.py +0 -0
  419. {verifiers-0.2.2.dev53 → verifiers-0.2.2.dev55}/verifiers/v1/utils/logging.py +0 -0
  420. {verifiers-0.2.2.dev53 → verifiers-0.2.2.dev55}/verifiers/v1/utils/memory.py +0 -0
  421. {verifiers-0.2.2.dev53 → verifiers-0.2.2.dev55}/verifiers/v1/utils/sampling.py +0 -0
  422. {verifiers-0.2.2.dev53 → verifiers-0.2.2.dev55}/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.dev53
3
+ Version: 0.2.2.dev55
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
@@ -367,7 +367,7 @@ async def test_multi_agent_env(run_v1, tmp_path):
367
367
  # agent info (completion order — the gathered seats land in either order).
368
368
  (line,) = (tmp_path / "traces.jsonl").read_text().splitlines()
369
369
  row = json.loads(line)
370
- assert row["env"] == "duet-v1"
370
+ assert row["env"] == {"id": "duet-v1"}
371
371
  by_name = {t["agent"]["name"]: t for t in row["traces"]}
372
372
  assert set(by_name) == {"a", "b"}
373
373
  assert by_name["a"]["agent"]["trainable"] is True
@@ -115,10 +115,10 @@ from verifiers.v1.taskset import Taskset
115
115
  from verifiers.v1.trace import (
116
116
  TRACE_VERSION,
117
117
  AgentInfo,
118
+ AgentSpan,
118
119
  Branch,
119
120
  Error,
120
121
  EvalRunInfo,
121
- GenerationSpan,
122
122
  ModelCall,
123
123
  Reward,
124
124
  RunInfo,
@@ -144,7 +144,6 @@ from verifiers.v1.types import (
144
144
  Response,
145
145
  Sampling,
146
146
  SamplingConfig,
147
- StrictBaseModel,
148
147
  SystemMessage,
149
148
  TextContentPart,
150
149
  Tool,
@@ -177,7 +176,6 @@ __all__ = [ # noqa: RUF022 - grouped by public API area
177
176
  "Response",
178
177
  "Sampling",
179
178
  "SamplingConfig",
180
- "StrictBaseModel",
181
179
  "SystemMessage",
182
180
  "TextContentPart",
183
181
  "Tool",
@@ -213,7 +211,7 @@ __all__ = [ # noqa: RUF022 - grouped by public API area
213
211
  "Timing",
214
212
  "TimeSpan",
215
213
  "TimeSplit",
216
- "GenerationSpan",
214
+ "AgentSpan",
217
215
  "Error",
218
216
  # decorators
219
217
  "stop",
@@ -8,9 +8,7 @@ import uuid
8
8
  from pathlib import PurePosixPath
9
9
  from typing import TYPE_CHECKING
10
10
 
11
- from pydantic import Field
12
-
13
- from verifiers.v1.types import StrictBaseModel
11
+ from pydantic import BaseModel, Field
14
12
 
15
13
  if TYPE_CHECKING:
16
14
  from verifiers.v1.runtimes import Runtime
@@ -25,7 +23,7 @@ MAX_ARTIFACT_BYTES = 32 * 1024 * 1024
25
23
  agent's image, so the repo is already there and only its output has to travel."""
26
24
 
27
25
 
28
- class Artifact(StrictBaseModel):
26
+ class Artifact(BaseModel):
29
27
  """One path to restore at the same location in another runtime."""
30
28
 
31
29
  source: str
@@ -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()
@@ -31,7 +31,7 @@ from verifiers.v1.cli.resolve import narrow_taskset_config
31
31
  from verifiers.v1.configs.agent import WireAgentConfig
32
32
  from verifiers.v1.configs.cli.replay import ReplayConfig
33
33
  from verifiers.v1.state import state_cls
34
- from verifiers.v1.task import Task, WireTaskData, task_data_cls
34
+ from verifiers.v1.task import Task, WireTaskData
35
35
  from verifiers.v1.trace import Trace
36
36
  from verifiers.v1.utils.interrupt import install_interrupt
37
37
  from verifiers.v1.utils.logging import setup_logging
@@ -76,7 +76,7 @@ async def run_replay(config: ReplayConfig, source: Path, out: Path) -> list[Trac
76
76
  "score() — multi-agent runs don't support replay"
77
77
  )
78
78
  task_cls = vf.task_type(config.taskset.id)
79
- data_cls = task_data_cls(task_cls)
79
+ data_cls = task_cls.data_type()
80
80
  # `WireTaskData` reads any taskset's saved task without importing its Task type.
81
81
  # An episode may hold no traces (its env hooks failed before any agent ran);
82
82
  # there's nothing to re-score, so it drops out in the flatten. Each kept trace
@@ -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):
@@ -19,10 +19,9 @@ import re
19
19
  import tomllib
20
20
  from pathlib import Path
21
21
 
22
- from pydantic import Field, field_validator
22
+ from pydantic import BaseModel, Field, field_validator
23
23
 
24
24
  import verifiers.v1 as vf
25
- from verifiers.v1.types import StrictBaseModel
26
25
  from verifiers.v1.utils.compile import validate_pairing
27
26
 
28
27
  VERDICT_FILE = "/tmp/verdict.json"
@@ -39,7 +38,7 @@ TASK_SECTION = """\
39
38
  {prompt}"""
40
39
 
41
40
 
42
- class Criterion(StrictBaseModel):
41
+ class Criterion(BaseModel):
43
42
  """One rubric criterion — the plugged rubric judge's format, mirrored so the
44
43
  same `criteria` files grade both judges."""
45
44
 
@@ -0,0 +1,83 @@
1
+ """The episode — one run's traces plus their shared standing, whole."""
2
+
3
+ import uuid
4
+ from typing import Generic
5
+
6
+ from pydantic import BaseModel, Field
7
+
8
+ from verifiers.v1.configs.agent import WireAgentConfig
9
+ from verifiers.v1.state import State, StateT
10
+ from verifiers.v1.task import DataT, WireTaskData
11
+ from verifiers.v1.trace import AgentConfigT, Error, Trace
12
+ from verifiers.v1.types import Usage
13
+
14
+
15
+ class EnvInfo(BaseModel):
16
+ """The env that ran the episode, self-describing without the run's config."""
17
+
18
+ id: str = ""
19
+ """`EnvConfig.env_id`, e.g. `agentic-judge+gsm8k-v1`."""
20
+
21
+
22
+ class Episode(BaseModel, Generic[DataT, StateT, AgentConfigT]):
23
+ """The artifact Env.run produces. Contains multiple agents' traces."""
24
+
25
+ id: str = Field(default_factory=lambda: uuid.uuid4().hex)
26
+
27
+ env: EnvInfo = Field(default_factory=EnvInfo)
28
+ """The env that produced this episode."""
29
+ ok: bool = False
30
+ """Whether the episode completed successfully."""
31
+ errors: list[Error] = Field(default_factory=list)
32
+ """Every error captured across attempts, oldest to newest."""
33
+ traces: list[Trace[DataT, StateT, AgentConfigT]] = Field(default_factory=list)
34
+ """Every agent's trace, in completion order."""
35
+
36
+ @property
37
+ def last_error(self) -> Error | None:
38
+ """The last episode-level error captured across attempts."""
39
+ return self.errors[-1] if self.errors else None
40
+
41
+ @property
42
+ def usage(self) -> Usage | None:
43
+ """Provider-reported usage summed across every trace's model calls;
44
+ judge/off-graph usage stays on the traces (`Trace.extra_usage`)."""
45
+ return Usage.aggregate(u for t in self.traces if (u := t.usage) is not None)
46
+
47
+ @property
48
+ def num_input_tokens(self) -> int:
49
+ """Fed-in tokens (system + user + tool), summed across traces."""
50
+ return sum(t.num_input_tokens for t in self.traces)
51
+
52
+ @property
53
+ def num_output_tokens(self) -> int:
54
+ """Model-generated tokens across all turns, summed across traces."""
55
+ return sum(t.num_output_tokens for t in self.traces)
56
+
57
+ @property
58
+ def num_total_tokens(self) -> int:
59
+ """Final sequence lengths per branch, summed across traces."""
60
+ return sum(t.num_total_tokens for t in self.traces)
61
+
62
+ @property
63
+ def num_turns(self) -> int:
64
+ """Sampled turns, summed across traces."""
65
+ return sum(t.num_turns for t in self.traces)
66
+
67
+ @property
68
+ def by_agent(self) -> dict[str, list[Trace[DataT, StateT, AgentConfigT]]]:
69
+ """Traces grouped by agent name (e.g. n solvers), in completion order."""
70
+ grouped: dict[str, list[Trace[DataT, StateT, AgentConfigT]]] = {}
71
+ for trace in self.traces:
72
+ grouped.setdefault(trace.agent.name, []).append(trace)
73
+ return grouped
74
+
75
+ @classmethod
76
+ def of(cls, trace: Trace, env: str = "") -> "Episode":
77
+ """The single-agent record: one trace as its own episode."""
78
+ return cls(env=EnvInfo(id=env), traces=[trace], ok=trace.ok)
79
+
80
+
81
+ WireEpisode = Episode[WireTaskData, State, WireAgentConfig]
82
+ """Record loader for consumers without the run's packages: unknown task fields
83
+ survive in `task.model_extra`, agent configs parse loose (`WireAgentConfig`)."""
@@ -25,7 +25,7 @@ from dataclasses import dataclass
25
25
  from typing import TYPE_CHECKING, Any
26
26
 
27
27
  import numpy as np
28
- from pydantic import ConfigDict, Field, field_serializer, field_validator
28
+ from pydantic import BaseModel, ConfigDict, Field, field_serializer, field_validator
29
29
  from pydantic.json_schema import SkipJsonSchema
30
30
  from renderers.base import MultiModalData, PlaceholderRange, RenderedTokens
31
31
 
@@ -34,7 +34,6 @@ from verifiers.v1.types import (
34
34
  KeptTokens,
35
35
  Message,
36
36
  Response,
37
- StrictBaseModel,
38
37
  TextContentPart,
39
38
  Tool,
40
39
  ToolMessage,
@@ -62,7 +61,7 @@ def _decode_ndarray(d: dict) -> np.ndarray:
62
61
  return np.frombuffer(d["data"], dtype=np.dtype(d["dtype"])).reshape(d["shape"])
63
62
 
64
63
 
65
- class MessageNode(StrictBaseModel):
64
+ class MessageNode(BaseModel):
66
65
  """One message in the graph: a message plus the tokens it adds to the cumulative
67
66
  sequence. Concatenating a root→leaf path's nodes reconstructs that branch's full token
68
67
  sequence; the mask/logprobs make it a training sample."""
@@ -121,7 +120,7 @@ class MessageNode(StrictBaseModel):
121
120
  sampling-replay training. Rides the wire as raw-bytes `__nd__` dicts; kept off disk
122
121
  by the dump-site `exclude` in prime-rl."""
123
122
 
124
- model_config = ConfigDict(extra="forbid", arbitrary_types_allowed=True)
123
+ model_config = ConfigDict(arbitrary_types_allowed=True)
125
124
 
126
125
  @field_serializer("multi_modal_data")
127
126
  def serialize_multi_modal_data(self, mmd: MultiModalData | None) -> dict | None:
@@ -62,7 +62,7 @@ from verifiers.v1.configs.judge import (
62
62
  )
63
63
  from verifiers.v1.dialects.chat import message_to_wire
64
64
  from verifiers.v1.scoring import parse_judge_choice
65
- from verifiers.v1.types import Messages, StrictBaseModel, Usage
65
+ from verifiers.v1.types import Messages, Usage
66
66
  from verifiers.v1.utils.generic import concrete_type
67
67
 
68
68
  if TYPE_CHECKING:
@@ -72,7 +72,7 @@ if TYPE_CHECKING:
72
72
  ParsedT = TypeVar("ParsedT")
73
73
 
74
74
 
75
- class JudgeResponse(StrictBaseModel, Generic[ParsedT]):
75
+ class JudgeResponse(BaseModel, Generic[ParsedT]):
76
76
  text: str
77
77
  parsed: ParsedT | None = None
78
78
  usage: Usage | None = None
@@ -197,8 +197,7 @@ class Judge(Generic[ParsedT, ConfigT]):
197
197
  )
198
198
  if response.parsed is None:
199
199
  raise RuntimeError(
200
- f"judge returned no parseable structured output "
201
- f"(finish_reason={choice.finish_reason})"
200
+ f"judge returned no parseable structured output (finish_reason={choice.finish_reason})"
202
201
  )
203
202
  else:
204
203
  completion = await client.chat.completions.create(**kwargs)
@@ -9,13 +9,13 @@ from functools import cached_property
9
9
  from pathlib import Path
10
10
  from typing import cast
11
11
 
12
- from pydantic import Field, field_validator
12
+ from pydantic import BaseModel, Field, field_validator
13
13
 
14
14
  from verifiers.v1.configs.judge import JudgeConfig
15
15
  from verifiers.v1.judge import Judge, JudgeView, judge_question, judge_response
16
16
  from verifiers.v1.task import TaskData
17
17
  from verifiers.v1.trace import Trace
18
- from verifiers.v1.types import ID, StrictBaseModel
18
+ from verifiers.v1.types import ID
19
19
 
20
20
  RUBRIC_PROMPT = (Path(__file__).resolve().parent / "rubric.txt").read_text(
21
21
  encoding="utf-8"
@@ -56,7 +56,7 @@ def first_verdicts_object(text: str) -> dict | None:
56
56
  return None
57
57
 
58
58
 
59
- class Criterion(StrictBaseModel):
59
+ class Criterion(BaseModel):
60
60
  name: str
61
61
  """Key for the criterion's metric (`<judge name>/<name>`) and its `weights` override."""
62
62
  text: str
@@ -109,13 +109,13 @@ class RubricJudgeConfig(JudgeConfig):
109
109
  handle either. Transient HTTP failures are already retried by the OpenAI client."""
110
110
 
111
111
 
112
- class CriterionVerdict(StrictBaseModel):
112
+ class CriterionVerdict(BaseModel):
113
113
  name: str
114
114
  reason: str
115
115
  verdict: str
116
116
 
117
117
 
118
- class RubricVerdicts(StrictBaseModel):
118
+ class RubricVerdicts(BaseModel):
119
119
  verdicts: list[CriterionVerdict]
120
120
 
121
121
 
@@ -36,8 +36,8 @@ from verifiers.v1.serve.types import (
36
36
  from verifiers.v1.task import WireTaskData
37
37
  from verifiers.v1.trace import (
38
38
  AgentInfo,
39
+ AgentSpan,
39
40
  Error,
40
- GenerationSpan,
41
41
  ModelCall,
42
42
  Reward,
43
43
  TimeSpan,
@@ -199,7 +199,8 @@ def _to_v1_tokens(raw: Any) -> TurnTokens | None:
199
199
  def _timing(raw: Any) -> Timing:
200
200
  """Map the v0 timing record's generation/scoring durations onto a v1 ``Timing``
201
201
  (we only have durations, so each span is encoded as start=0, end=duration).
202
- v0's per-turn ``model``/``env`` span collections carry the generation split."""
202
+ v0's ``generation`` duration becomes the agent span; its per-turn ``model``/``env``
203
+ span collections carry the model/harness split."""
203
204
 
204
205
  def _dur(node: Any) -> float:
205
206
  if isinstance(node, dict):
@@ -212,7 +213,7 @@ def _timing(raw: Any) -> Timing:
212
213
 
213
214
  raw = raw or {}
214
215
  return Timing(
215
- generation=GenerationSpan(
216
+ agent=AgentSpan(
216
217
  start=0.0,
217
218
  end=_dur(raw.get("generation")),
218
219
  model=TimeSplit(duration=_dur(raw.get("model"))),
@@ -297,7 +297,7 @@ class RolloutRun:
297
297
  raise
298
298
  now = time.time()
299
299
  self.trace.timing.setup.end = now
300
- self.trace.timing.generation.start = now
300
+ self.trace.timing.agent.start = now
301
301
  return True
302
302
 
303
303
  async def step(self, messages: Messages | None = None) -> bool:
@@ -397,8 +397,8 @@ class RolloutRun:
397
397
  try:
398
398
  await self._stack.aclose()
399
399
  finally:
400
- if trace.timing.generation.start and not trace.timing.generation.end:
401
- trace.timing.generation.end = time.time()
400
+ if trace.timing.agent.start and not trace.timing.agent.end:
401
+ trace.timing.agent.end = time.time()
402
402
  if not self._failed and self._opened:
403
403
  trace.timing.finalize.start = time.time()
404
404
  async with boundary(TaskError, "task finalize"):
@@ -430,13 +430,13 @@ class RolloutRun:
430
430
  for span in (
431
431
  trace.timing.boot,
432
432
  trace.timing.setup,
433
- trace.timing.generation,
433
+ trace.timing.agent,
434
434
  trace.timing.finalize,
435
435
  trace.timing.scoring,
436
436
  ):
437
437
  if span.start and not span.end:
438
438
  span.end = now
439
- trace.split_generation()
439
+ trace.split_agent_time()
440
440
  if runtime is not None:
441
441
  try:
442
442
  await self.harness.cleanup(trace, runtime)
@@ -22,7 +22,7 @@ from verifiers.v1.serve.types import (
22
22
  RunRequest,
23
23
  RunResponse,
24
24
  )
25
- from verifiers.v1.task import Task, task_data_cls
25
+ from verifiers.v1.task import Task
26
26
  from verifiers.v1.types import SamplingConfig
27
27
 
28
28
  logger = logging.getLogger(__name__)
@@ -39,7 +39,7 @@ class EnvServer:
39
39
  self.taskset_id = config.taskset.id
40
40
  self.env = load_environment(config)
41
41
  self.task_cls = type(self.env.taskset).task_type()
42
- self.data_cls = task_data_cls(self.task_cls)
42
+ self.data_cls = self.task_cls.data_type()
43
43
  # A dispatched task is its client-side model_dump(): a field excluded from
44
44
  # serialization would vanish on the wire and rebuild silently defaulted, so
45
45
  # refuse to serve such a taskset.
@@ -4,14 +4,13 @@ Tool servers synchronize it through the interception state channel. It is exclud
4
4
  from serialized traces.
5
5
  """
6
6
 
7
- from pydantic import ConfigDict, Field
7
+ from pydantic import BaseModel, ConfigDict, Field
8
8
  from typing_extensions import TypeVar
9
9
 
10
- from verifiers.v1.types import StrictBaseModel
11
10
  from verifiers.v1.utils.generic import concrete_type
12
11
 
13
12
 
14
- class State(StrictBaseModel):
13
+ class State(BaseModel):
15
14
  model_config = ConfigDict(ser_json_inf_nan="constants")
16
15
  artifacts: dict[str, bytes] = Field(default_factory=dict)
17
16