verifiers 0.2.1.dev58__tar.gz → 0.2.1.dev59__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 (393) hide show
  1. {verifiers-0.2.1.dev58 → verifiers-0.2.1.dev59}/PKG-INFO +1 -1
  2. {verifiers-0.2.1.dev58 → verifiers-0.2.1.dev59}/tests/v1/test_e2e.py +6 -0
  3. {verifiers-0.2.1.dev58 → verifiers-0.2.1.dev59}/verifiers/v1/__init__.py +2 -0
  4. {verifiers-0.2.1.dev58 → verifiers-0.2.1.dev59}/verifiers/v1/dialects/anthropic.py +41 -9
  5. {verifiers-0.2.1.dev58 → verifiers-0.2.1.dev59}/verifiers/v1/dialects/base.py +15 -1
  6. {verifiers-0.2.1.dev58 → verifiers-0.2.1.dev59}/verifiers/v1/dialects/chat.py +45 -16
  7. {verifiers-0.2.1.dev58 → verifiers-0.2.1.dev59}/verifiers/v1/dialects/responses.py +31 -0
  8. {verifiers-0.2.1.dev58 → verifiers-0.2.1.dev59}/verifiers/v1/errors.py +15 -2
  9. {verifiers-0.2.1.dev58 → verifiers-0.2.1.dev59}/verifiers/v1/graph.py +7 -12
  10. {verifiers-0.2.1.dev58 → verifiers-0.2.1.dev59}/verifiers/v1/interception/server.py +269 -142
  11. {verifiers-0.2.1.dev58 → verifiers-0.2.1.dev59}/verifiers/v1/legacy.py +14 -3
  12. {verifiers-0.2.1.dev58 → verifiers-0.2.1.dev59}/verifiers/v1/trace.py +55 -7
  13. {verifiers-0.2.1.dev58 → verifiers-0.2.1.dev59}/.gitignore +0 -0
  14. {verifiers-0.2.1.dev58 → verifiers-0.2.1.dev59}/LICENSE +0 -0
  15. {verifiers-0.2.1.dev58 → verifiers-0.2.1.dev59}/README.md +0 -0
  16. {verifiers-0.2.1.dev58 → verifiers-0.2.1.dev59}/pyproject.toml +0 -0
  17. {verifiers-0.2.1.dev58 → verifiers-0.2.1.dev59}/tests/AGENTS.md +0 -0
  18. {verifiers-0.2.1.dev58 → verifiers-0.2.1.dev59}/tests/__init__.py +0 -0
  19. {verifiers-0.2.1.dev58 → verifiers-0.2.1.dev59}/tests/conftest.py +0 -0
  20. {verifiers-0.2.1.dev58 → verifiers-0.2.1.dev59}/tests/test_browser_env.py +0 -0
  21. {verifiers-0.2.1.dev58 → verifiers-0.2.1.dev59}/tests/test_build_script.py +0 -0
  22. {verifiers-0.2.1.dev58 → verifiers-0.2.1.dev59}/tests/test_cli_agent_env.py +0 -0
  23. {verifiers-0.2.1.dev58 → verifiers-0.2.1.dev59}/tests/test_client_auth_errors.py +0 -0
  24. {verifiers-0.2.1.dev58 → verifiers-0.2.1.dev59}/tests/test_client_config.py +0 -0
  25. {verifiers-0.2.1.dev58 → verifiers-0.2.1.dev59}/tests/test_client_multimodal_types.py +0 -0
  26. {verifiers-0.2.1.dev58 → verifiers-0.2.1.dev59}/tests/test_composable_env.py +0 -0
  27. {verifiers-0.2.1.dev58 → verifiers-0.2.1.dev59}/tests/test_context_token_metrics.py +0 -0
  28. {verifiers-0.2.1.dev58 → verifiers-0.2.1.dev59}/tests/test_decorator_ranks.py +0 -0
  29. {verifiers-0.2.1.dev58 → verifiers-0.2.1.dev59}/tests/test_endpoint_registry.py +0 -0
  30. {verifiers-0.2.1.dev58 → verifiers-0.2.1.dev59}/tests/test_env_group.py +0 -0
  31. {verifiers-0.2.1.dev58 → verifiers-0.2.1.dev59}/tests/test_env_server.py +0 -0
  32. {verifiers-0.2.1.dev58 → verifiers-0.2.1.dev59}/tests/test_environment.py +0 -0
  33. {verifiers-0.2.1.dev58 → verifiers-0.2.1.dev59}/tests/test_environment_extra.py +0 -0
  34. {verifiers-0.2.1.dev58 → verifiers-0.2.1.dev59}/tests/test_error_chain.py +0 -0
  35. {verifiers-0.2.1.dev58 → verifiers-0.2.1.dev59}/tests/test_eval_display.py +0 -0
  36. {verifiers-0.2.1.dev58 → verifiers-0.2.1.dev59}/tests/test_eval_utils.py +0 -0
  37. {verifiers-0.2.1.dev58 → verifiers-0.2.1.dev59}/tests/test_gepa_cli.py +0 -0
  38. {verifiers-0.2.1.dev58 → verifiers-0.2.1.dev59}/tests/test_gepa_utils.py +0 -0
  39. {verifiers-0.2.1.dev58 → verifiers-0.2.1.dev59}/tests/test_gym_env.py +0 -0
  40. {verifiers-0.2.1.dev58 → verifiers-0.2.1.dev59}/tests/test_harbor_env_mcp.py +0 -0
  41. {verifiers-0.2.1.dev58 → verifiers-0.2.1.dev59}/tests/test_imports.py +0 -0
  42. {verifiers-0.2.1.dev58 → verifiers-0.2.1.dev59}/tests/test_init_script.py +0 -0
  43. {verifiers-0.2.1.dev58 → verifiers-0.2.1.dev59}/tests/test_install_utils.py +0 -0
  44. {verifiers-0.2.1.dev58 → verifiers-0.2.1.dev59}/tests/test_interception_utils.py +0 -0
  45. {verifiers-0.2.1.dev58 → verifiers-0.2.1.dev59}/tests/test_logging.py +0 -0
  46. {verifiers-0.2.1.dev58 → verifiers-0.2.1.dev59}/tests/test_math_rubric.py +0 -0
  47. {verifiers-0.2.1.dev58 → verifiers-0.2.1.dev59}/tests/test_maybe_think_parser.py +0 -0
  48. {verifiers-0.2.1.dev58 → verifiers-0.2.1.dev59}/tests/test_message_utils.py +0 -0
  49. {verifiers-0.2.1.dev58 → verifiers-0.2.1.dev59}/tests/test_message_utils_multimodal.py +0 -0
  50. {verifiers-0.2.1.dev58 → verifiers-0.2.1.dev59}/tests/test_multiturn_env.py +0 -0
  51. {verifiers-0.2.1.dev58 → verifiers-0.2.1.dev59}/tests/test_nemorl_client.py +0 -0
  52. {verifiers-0.2.1.dev58 → verifiers-0.2.1.dev59}/tests/test_openai_chat_completions_token_client.py +0 -0
  53. {verifiers-0.2.1.dev58 → verifiers-0.2.1.dev59}/tests/test_openai_responses_client.py +0 -0
  54. {verifiers-0.2.1.dev58 → verifiers-0.2.1.dev59}/tests/test_opencode_rlm_env.py +0 -0
  55. {verifiers-0.2.1.dev58 → verifiers-0.2.1.dev59}/tests/test_openenv_client.py +0 -0
  56. {verifiers-0.2.1.dev58 → verifiers-0.2.1.dev59}/tests/test_parser.py +0 -0
  57. {verifiers-0.2.1.dev58 → verifiers-0.2.1.dev59}/tests/test_path_utils.py +0 -0
  58. {verifiers-0.2.1.dev58 → verifiers-0.2.1.dev59}/tests/test_per_turn_timing.py +0 -0
  59. {verifiers-0.2.1.dev58 → verifiers-0.2.1.dev59}/tests/test_pricing_utils.py +0 -0
  60. {verifiers-0.2.1.dev58 → verifiers-0.2.1.dev59}/tests/test_prime_plugin.py +0 -0
  61. {verifiers-0.2.1.dev58 → verifiers-0.2.1.dev59}/tests/test_renderer_client.py +0 -0
  62. {verifiers-0.2.1.dev58 → verifiers-0.2.1.dev59}/tests/test_renderer_e2e.py +0 -0
  63. {verifiers-0.2.1.dev58 → verifiers-0.2.1.dev59}/tests/test_rlm_composable_env.py +0 -0
  64. {verifiers-0.2.1.dev58 → verifiers-0.2.1.dev59}/tests/test_rubric.py +0 -0
  65. {verifiers-0.2.1.dev58 → verifiers-0.2.1.dev59}/tests/test_rubric_group.py +0 -0
  66. {verifiers-0.2.1.dev58 → verifiers-0.2.1.dev59}/tests/test_sandbox_debug_env.py +0 -0
  67. {verifiers-0.2.1.dev58 → verifiers-0.2.1.dev59}/tests/test_sandbox_env.py +0 -0
  68. {verifiers-0.2.1.dev58 → verifiers-0.2.1.dev59}/tests/test_sandbox_mixin.py +0 -0
  69. {verifiers-0.2.1.dev58 → verifiers-0.2.1.dev59}/tests/test_save_utils.py +0 -0
  70. {verifiers-0.2.1.dev58 → verifiers-0.2.1.dev59}/tests/test_setup_script.py +0 -0
  71. {verifiers-0.2.1.dev58 → verifiers-0.2.1.dev59}/tests/test_singleturn_env.py +0 -0
  72. {verifiers-0.2.1.dev58 → verifiers-0.2.1.dev59}/tests/test_stateful_tool_env.py +0 -0
  73. {verifiers-0.2.1.dev58 → verifiers-0.2.1.dev59}/tests/test_think_parser.py +0 -0
  74. {verifiers-0.2.1.dev58 → verifiers-0.2.1.dev59}/tests/test_tool_env.py +0 -0
  75. {verifiers-0.2.1.dev58 → verifiers-0.2.1.dev59}/tests/test_tool_utils.py +0 -0
  76. {verifiers-0.2.1.dev58 → verifiers-0.2.1.dev59}/tests/test_trajectory_processing.py +0 -0
  77. {verifiers-0.2.1.dev58 → verifiers-0.2.1.dev59}/tests/test_tui_info_formatting.py +0 -0
  78. {verifiers-0.2.1.dev58 → verifiers-0.2.1.dev59}/tests/test_types.py +0 -0
  79. {verifiers-0.2.1.dev58 → verifiers-0.2.1.dev59}/tests/test_xml_parser.py +0 -0
  80. {verifiers-0.2.1.dev58 → verifiers-0.2.1.dev59}/tests/v1/conftest.py +0 -0
  81. {verifiers-0.2.1.dev58 → verifiers-0.2.1.dev59}/tests/v1/fixtures/counter_tool_v1.py +0 -0
  82. {verifiers-0.2.1.dev58 → verifiers-0.2.1.dev59}/tests/v1/fixtures/echo_agentic_v1.py +0 -0
  83. {verifiers-0.2.1.dev58 → verifiers-0.2.1.dev59}/tests/v1/fixtures/echo_multi_v0.py +0 -0
  84. {verifiers-0.2.1.dev58 → verifiers-0.2.1.dev59}/tests/v1/fixtures/echo_tool_v1.py +0 -0
  85. {verifiers-0.2.1.dev58 → verifiers-0.2.1.dev59}/tests/v1/fixtures/echo_user_sim_v1.py +0 -0
  86. {verifiers-0.2.1.dev58 → verifiers-0.2.1.dev59}/tests/v1/fixtures/echo_v0.py +0 -0
  87. {verifiers-0.2.1.dev58 → verifiers-0.2.1.dev59}/tests/v1/fixtures/echo_v1.py +0 -0
  88. {verifiers-0.2.1.dev58 → verifiers-0.2.1.dev59}/tests/v1/fixtures/pyproject.toml +0 -0
  89. {verifiers-0.2.1.dev58 → verifiers-0.2.1.dev59}/tests/v1/fixtures/tool_response_image_v1.py +0 -0
  90. {verifiers-0.2.1.dev58 → verifiers-0.2.1.dev59}/tests/v1/test_color_codeword_tasks.py +0 -0
  91. {verifiers-0.2.1.dev58 → verifiers-0.2.1.dev59}/tests/v1/test_configs.py +0 -0
  92. {verifiers-0.2.1.dev58 → verifiers-0.2.1.dev59}/tests/v1/test_envs.py +0 -0
  93. {verifiers-0.2.1.dev58 → verifiers-0.2.1.dev59}/tests/v1/test_graph.py +0 -0
  94. {verifiers-0.2.1.dev58 → verifiers-0.2.1.dev59}/tests/v1/test_judges.py +0 -0
  95. {verifiers-0.2.1.dev58 → verifiers-0.2.1.dev59}/tests/v1/test_legacy.py +0 -0
  96. {verifiers-0.2.1.dev58 → verifiers-0.2.1.dev59}/tests/v1/test_scoring.py +0 -0
  97. {verifiers-0.2.1.dev58 → verifiers-0.2.1.dev59}/tests/v1/test_taskset.py +0 -0
  98. {verifiers-0.2.1.dev58 → verifiers-0.2.1.dev59}/tests/v1/test_trace.py +0 -0
  99. {verifiers-0.2.1.dev58 → verifiers-0.2.1.dev59}/verifiers/__init__.py +0 -0
  100. {verifiers-0.2.1.dev58 → verifiers-0.2.1.dev59}/verifiers/cli/__init__.py +0 -0
  101. {verifiers-0.2.1.dev58 → verifiers-0.2.1.dev59}/verifiers/cli/commands/__init__.py +0 -0
  102. {verifiers-0.2.1.dev58 → verifiers-0.2.1.dev59}/verifiers/cli/commands/build.py +0 -0
  103. {verifiers-0.2.1.dev58 → verifiers-0.2.1.dev59}/verifiers/cli/commands/eval.py +0 -0
  104. {verifiers-0.2.1.dev58 → verifiers-0.2.1.dev59}/verifiers/cli/commands/gepa.py +0 -0
  105. {verifiers-0.2.1.dev58 → verifiers-0.2.1.dev59}/verifiers/cli/commands/init.py +0 -0
  106. {verifiers-0.2.1.dev58 → verifiers-0.2.1.dev59}/verifiers/cli/commands/install.py +0 -0
  107. {verifiers-0.2.1.dev58 → verifiers-0.2.1.dev59}/verifiers/cli/commands/setup.py +0 -0
  108. {verifiers-0.2.1.dev58 → verifiers-0.2.1.dev59}/verifiers/cli/plugins/__init__.py +0 -0
  109. {verifiers-0.2.1.dev58 → verifiers-0.2.1.dev59}/verifiers/cli/plugins/prime.py +0 -0
  110. {verifiers-0.2.1.dev58 → verifiers-0.2.1.dev59}/verifiers/cli/tui.py +0 -0
  111. {verifiers-0.2.1.dev58 → verifiers-0.2.1.dev59}/verifiers/clients/__init__.py +0 -0
  112. {verifiers-0.2.1.dev58 → verifiers-0.2.1.dev59}/verifiers/clients/anthropic_messages_client.py +0 -0
  113. {verifiers-0.2.1.dev58 → verifiers-0.2.1.dev59}/verifiers/clients/client.py +0 -0
  114. {verifiers-0.2.1.dev58 → verifiers-0.2.1.dev59}/verifiers/clients/nemorl_chat_completions_client.py +0 -0
  115. {verifiers-0.2.1.dev58 → verifiers-0.2.1.dev59}/verifiers/clients/openai_chat_completions_client.py +0 -0
  116. {verifiers-0.2.1.dev58 → verifiers-0.2.1.dev59}/verifiers/clients/openai_chat_completions_token_client.py +0 -0
  117. {verifiers-0.2.1.dev58 → verifiers-0.2.1.dev59}/verifiers/clients/openai_completions_client.py +0 -0
  118. {verifiers-0.2.1.dev58 → verifiers-0.2.1.dev59}/verifiers/clients/openai_responses_client.py +0 -0
  119. {verifiers-0.2.1.dev58 → verifiers-0.2.1.dev59}/verifiers/clients/renderer_client.py +0 -0
  120. {verifiers-0.2.1.dev58 → verifiers-0.2.1.dev59}/verifiers/decorators.py +0 -0
  121. {verifiers-0.2.1.dev58 → verifiers-0.2.1.dev59}/verifiers/envs/AGENTS.md +0 -0
  122. {verifiers-0.2.1.dev58 → verifiers-0.2.1.dev59}/verifiers/envs/__init__.py +0 -0
  123. {verifiers-0.2.1.dev58 → verifiers-0.2.1.dev59}/verifiers/envs/env_group.py +0 -0
  124. {verifiers-0.2.1.dev58 → verifiers-0.2.1.dev59}/verifiers/envs/environment.py +0 -0
  125. {verifiers-0.2.1.dev58 → verifiers-0.2.1.dev59}/verifiers/envs/experimental/README.md +0 -0
  126. {verifiers-0.2.1.dev58 → verifiers-0.2.1.dev59}/verifiers/envs/experimental/__init__.py +0 -0
  127. {verifiers-0.2.1.dev58 → verifiers-0.2.1.dev59}/verifiers/envs/experimental/cli_agent_env.py +0 -0
  128. {verifiers-0.2.1.dev58 → verifiers-0.2.1.dev59}/verifiers/envs/experimental/composable/README.md +0 -0
  129. {verifiers-0.2.1.dev58 → verifiers-0.2.1.dev59}/verifiers/envs/experimental/composable/__init__.py +0 -0
  130. {verifiers-0.2.1.dev58 → verifiers-0.2.1.dev59}/verifiers/envs/experimental/composable/_filter.py +0 -0
  131. {verifiers-0.2.1.dev58 → verifiers-0.2.1.dev59}/verifiers/envs/experimental/composable/composable_env.py +0 -0
  132. {verifiers-0.2.1.dev58 → verifiers-0.2.1.dev59}/verifiers/envs/experimental/composable/harness.py +0 -0
  133. {verifiers-0.2.1.dev58 → verifiers-0.2.1.dev59}/verifiers/envs/experimental/composable/harnesses/__init__.py +0 -0
  134. {verifiers-0.2.1.dev58 → verifiers-0.2.1.dev59}/verifiers/envs/experimental/composable/harnesses/mini_swe_agent.py +0 -0
  135. {verifiers-0.2.1.dev58 → verifiers-0.2.1.dev59}/verifiers/envs/experimental/composable/harnesses/opencode.py +0 -0
  136. {verifiers-0.2.1.dev58 → verifiers-0.2.1.dev59}/verifiers/envs/experimental/composable/harnesses/prompt.txt +0 -0
  137. {verifiers-0.2.1.dev58 → verifiers-0.2.1.dev59}/verifiers/envs/experimental/composable/harnesses/rlm.py +0 -0
  138. {verifiers-0.2.1.dev58 → verifiers-0.2.1.dev59}/verifiers/envs/experimental/composable/sandbox_debug_env.py +0 -0
  139. {verifiers-0.2.1.dev58 → verifiers-0.2.1.dev59}/verifiers/envs/experimental/composable/swe_debug_env.py +0 -0
  140. {verifiers-0.2.1.dev58 → verifiers-0.2.1.dev59}/verifiers/envs/experimental/composable/task.py +0 -0
  141. {verifiers-0.2.1.dev58 → verifiers-0.2.1.dev59}/verifiers/envs/experimental/composable/tasksets/__init__.py +0 -0
  142. {verifiers-0.2.1.dev58 → verifiers-0.2.1.dev59}/verifiers/envs/experimental/composable/tasksets/cp/__init__.py +0 -0
  143. {verifiers-0.2.1.dev58 → verifiers-0.2.1.dev59}/verifiers/envs/experimental/composable/tasksets/cp/cp_task.py +0 -0
  144. {verifiers-0.2.1.dev58 → verifiers-0.2.1.dev59}/verifiers/envs/experimental/composable/tasksets/cp/test_utils.py +0 -0
  145. {verifiers-0.2.1.dev58 → verifiers-0.2.1.dev59}/verifiers/envs/experimental/composable/tasksets/harbor/__init__.py +0 -0
  146. {verifiers-0.2.1.dev58 → verifiers-0.2.1.dev59}/verifiers/envs/experimental/composable/tasksets/harbor/cli_gym.py +0 -0
  147. {verifiers-0.2.1.dev58 → verifiers-0.2.1.dev59}/verifiers/envs/experimental/composable/tasksets/harbor/harbor.py +0 -0
  148. {verifiers-0.2.1.dev58 → verifiers-0.2.1.dev59}/verifiers/envs/experimental/composable/tasksets/harbor/terminal_lego.py +0 -0
  149. {verifiers-0.2.1.dev58 → verifiers-0.2.1.dev59}/verifiers/envs/experimental/composable/tasksets/math/__init__.py +0 -0
  150. {verifiers-0.2.1.dev58 → verifiers-0.2.1.dev59}/verifiers/envs/experimental/composable/tasksets/math/math_task.py +0 -0
  151. {verifiers-0.2.1.dev58 → verifiers-0.2.1.dev59}/verifiers/envs/experimental/composable/tasksets/swe/README.md +0 -0
  152. {verifiers-0.2.1.dev58 → verifiers-0.2.1.dev59}/verifiers/envs/experimental/composable/tasksets/swe/__init__.py +0 -0
  153. {verifiers-0.2.1.dev58 → verifiers-0.2.1.dev59}/verifiers/envs/experimental/composable/tasksets/swe/multi_swe/__init__.py +0 -0
  154. {verifiers-0.2.1.dev58 → verifiers-0.2.1.dev59}/verifiers/envs/experimental/composable/tasksets/swe/multi_swe/extract_fix_patch.sh +0 -0
  155. {verifiers-0.2.1.dev58 → verifiers-0.2.1.dev59}/verifiers/envs/experimental/composable/tasksets/swe/multi_swe/taskset.py +0 -0
  156. {verifiers-0.2.1.dev58 → verifiers-0.2.1.dev59}/verifiers/envs/experimental/composable/tasksets/swe/openswe/__init__.py +0 -0
  157. {verifiers-0.2.1.dev58 → verifiers-0.2.1.dev59}/verifiers/envs/experimental/composable/tasksets/swe/openswe/taskset.py +0 -0
  158. {verifiers-0.2.1.dev58 → verifiers-0.2.1.dev59}/verifiers/envs/experimental/composable/tasksets/swe/r2e_gym/__init__.py +0 -0
  159. {verifiers-0.2.1.dev58 → verifiers-0.2.1.dev59}/verifiers/envs/experimental/composable/tasksets/swe/r2e_gym/log_parser.py +0 -0
  160. {verifiers-0.2.1.dev58 → verifiers-0.2.1.dev59}/verifiers/envs/experimental/composable/tasksets/swe/r2e_gym/taskset.py +0 -0
  161. {verifiers-0.2.1.dev58 → verifiers-0.2.1.dev59}/verifiers/envs/experimental/composable/tasksets/swe/scale_swe/__init__.py +0 -0
  162. {verifiers-0.2.1.dev58 → verifiers-0.2.1.dev59}/verifiers/envs/experimental/composable/tasksets/swe/scale_swe/taskset.py +0 -0
  163. {verifiers-0.2.1.dev58 → verifiers-0.2.1.dev59}/verifiers/envs/experimental/composable/tasksets/swe/shared/__init__.py +0 -0
  164. {verifiers-0.2.1.dev58 → verifiers-0.2.1.dev59}/verifiers/envs/experimental/composable/tasksets/swe/shared/test_patch.py +0 -0
  165. {verifiers-0.2.1.dev58 → verifiers-0.2.1.dev59}/verifiers/envs/experimental/composable/tasksets/swe/swe_bench/__init__.py +0 -0
  166. {verifiers-0.2.1.dev58 → verifiers-0.2.1.dev59}/verifiers/envs/experimental/composable/tasksets/swe/swe_bench/taskset.py +0 -0
  167. {verifiers-0.2.1.dev58 → verifiers-0.2.1.dev59}/verifiers/envs/experimental/composable/tasksets/swe/swe_lego/__init__.py +0 -0
  168. {verifiers-0.2.1.dev58 → verifiers-0.2.1.dev59}/verifiers/envs/experimental/composable/tasksets/swe/swe_lego/taskset.py +0 -0
  169. {verifiers-0.2.1.dev58 → verifiers-0.2.1.dev59}/verifiers/envs/experimental/composable/tasksets/swe/swe_rebench_v2/__init__.py +0 -0
  170. {verifiers-0.2.1.dev58 → verifiers-0.2.1.dev59}/verifiers/envs/experimental/composable/tasksets/swe/swe_rebench_v2/log_parsers.py +0 -0
  171. {verifiers-0.2.1.dev58 → verifiers-0.2.1.dev59}/verifiers/envs/experimental/composable/tasksets/swe/swe_rebench_v2/taskset.py +0 -0
  172. {verifiers-0.2.1.dev58 → verifiers-0.2.1.dev59}/verifiers/envs/experimental/composable/tasksets/swe/swe_smith/__init__.py +0 -0
  173. {verifiers-0.2.1.dev58 → verifiers-0.2.1.dev59}/verifiers/envs/experimental/composable/tasksets/swe/swe_smith/taskset.py +0 -0
  174. {verifiers-0.2.1.dev58 → verifiers-0.2.1.dev59}/verifiers/envs/experimental/composable/tasksets/swe/swe_tasksets.py +0 -0
  175. {verifiers-0.2.1.dev58 → verifiers-0.2.1.dev59}/verifiers/envs/experimental/gym_env.py +0 -0
  176. {verifiers-0.2.1.dev58 → verifiers-0.2.1.dev59}/verifiers/envs/experimental/harbor_env/__init__.py +0 -0
  177. {verifiers-0.2.1.dev58 → verifiers-0.2.1.dev59}/verifiers/envs/experimental/harbor_env/env.py +0 -0
  178. {verifiers-0.2.1.dev58 → verifiers-0.2.1.dev59}/verifiers/envs/experimental/harbor_env/mcp.py +0 -0
  179. {verifiers-0.2.1.dev58 → verifiers-0.2.1.dev59}/verifiers/envs/experimental/mcp_env.py +0 -0
  180. {verifiers-0.2.1.dev58 → verifiers-0.2.1.dev59}/verifiers/envs/experimental/opencode_env.py +0 -0
  181. {verifiers-0.2.1.dev58 → verifiers-0.2.1.dev59}/verifiers/envs/experimental/opencode_qa_env.py +0 -0
  182. {verifiers-0.2.1.dev58 → verifiers-0.2.1.dev59}/verifiers/envs/experimental/opencode_rlm_env.py +0 -0
  183. {verifiers-0.2.1.dev58 → verifiers-0.2.1.dev59}/verifiers/envs/experimental/sandbox_mixin.py +0 -0
  184. {verifiers-0.2.1.dev58 → verifiers-0.2.1.dev59}/verifiers/envs/experimental/utils/__init__.py +0 -0
  185. {verifiers-0.2.1.dev58 → verifiers-0.2.1.dev59}/verifiers/envs/experimental/utils/file_locks.py +0 -0
  186. {verifiers-0.2.1.dev58 → verifiers-0.2.1.dev59}/verifiers/envs/experimental/utils/git_checkout_cache.py +0 -0
  187. {verifiers-0.2.1.dev58 → verifiers-0.2.1.dev59}/verifiers/envs/integrations/README.md +0 -0
  188. {verifiers-0.2.1.dev58 → verifiers-0.2.1.dev59}/verifiers/envs/integrations/__init__.py +0 -0
  189. {verifiers-0.2.1.dev58 → verifiers-0.2.1.dev59}/verifiers/envs/integrations/browser_env/README.md +0 -0
  190. {verifiers-0.2.1.dev58 → verifiers-0.2.1.dev59}/verifiers/envs/integrations/browser_env/__init__.py +0 -0
  191. {verifiers-0.2.1.dev58 → verifiers-0.2.1.dev59}/verifiers/envs/integrations/browser_env/browser_env.py +0 -0
  192. {verifiers-0.2.1.dev58 → verifiers-0.2.1.dev59}/verifiers/envs/integrations/browser_env/modes/__init__.py +0 -0
  193. {verifiers-0.2.1.dev58 → verifiers-0.2.1.dev59}/verifiers/envs/integrations/browser_env/modes/base.py +0 -0
  194. {verifiers-0.2.1.dev58 → verifiers-0.2.1.dev59}/verifiers/envs/integrations/browser_env/modes/cua_mode.py +0 -0
  195. {verifiers-0.2.1.dev58 → verifiers-0.2.1.dev59}/verifiers/envs/integrations/browser_env/modes/dom_mode.py +0 -0
  196. {verifiers-0.2.1.dev58 → verifiers-0.2.1.dev59}/verifiers/envs/integrations/openenv_env.py +0 -0
  197. {verifiers-0.2.1.dev58 → verifiers-0.2.1.dev59}/verifiers/envs/integrations/reasoninggym_env.py +0 -0
  198. {verifiers-0.2.1.dev58 → verifiers-0.2.1.dev59}/verifiers/envs/integrations/textarena_env.py +0 -0
  199. {verifiers-0.2.1.dev58 → verifiers-0.2.1.dev59}/verifiers/envs/multiturn_env.py +0 -0
  200. {verifiers-0.2.1.dev58 → verifiers-0.2.1.dev59}/verifiers/envs/python_env.py +0 -0
  201. {verifiers-0.2.1.dev58 → verifiers-0.2.1.dev59}/verifiers/envs/sandbox_env.py +0 -0
  202. {verifiers-0.2.1.dev58 → verifiers-0.2.1.dev59}/verifiers/envs/singleturn_env.py +0 -0
  203. {verifiers-0.2.1.dev58 → verifiers-0.2.1.dev59}/verifiers/envs/stateful_tool_env.py +0 -0
  204. {verifiers-0.2.1.dev58 → verifiers-0.2.1.dev59}/verifiers/envs/tool_env.py +0 -0
  205. {verifiers-0.2.1.dev58 → verifiers-0.2.1.dev59}/verifiers/errors.py +0 -0
  206. {verifiers-0.2.1.dev58 → verifiers-0.2.1.dev59}/verifiers/gepa/__init__.py +0 -0
  207. {verifiers-0.2.1.dev58 → verifiers-0.2.1.dev59}/verifiers/gepa/adapter.py +0 -0
  208. {verifiers-0.2.1.dev58 → verifiers-0.2.1.dev59}/verifiers/gepa/config.py +0 -0
  209. {verifiers-0.2.1.dev58 → verifiers-0.2.1.dev59}/verifiers/gepa/display.py +0 -0
  210. {verifiers-0.2.1.dev58 → verifiers-0.2.1.dev59}/verifiers/gepa/gepa_utils.py +0 -0
  211. {verifiers-0.2.1.dev58 → verifiers-0.2.1.dev59}/verifiers/parsers/__init__.py +0 -0
  212. {verifiers-0.2.1.dev58 → verifiers-0.2.1.dev59}/verifiers/parsers/maybe_think_parser.py +0 -0
  213. {verifiers-0.2.1.dev58 → verifiers-0.2.1.dev59}/verifiers/parsers/parser.py +0 -0
  214. {verifiers-0.2.1.dev58 → verifiers-0.2.1.dev59}/verifiers/parsers/think_parser.py +0 -0
  215. {verifiers-0.2.1.dev58 → verifiers-0.2.1.dev59}/verifiers/parsers/xml_parser.py +0 -0
  216. {verifiers-0.2.1.dev58 → verifiers-0.2.1.dev59}/verifiers/rubrics/__init__.py +0 -0
  217. {verifiers-0.2.1.dev58 → verifiers-0.2.1.dev59}/verifiers/rubrics/experimental/hybrid_math_rubric.py +0 -0
  218. {verifiers-0.2.1.dev58 → verifiers-0.2.1.dev59}/verifiers/rubrics/judge_rubric.py +0 -0
  219. {verifiers-0.2.1.dev58 → verifiers-0.2.1.dev59}/verifiers/rubrics/math_rubric.py +0 -0
  220. {verifiers-0.2.1.dev58 → verifiers-0.2.1.dev59}/verifiers/rubrics/rubric.py +0 -0
  221. {verifiers-0.2.1.dev58 → verifiers-0.2.1.dev59}/verifiers/rubrics/rubric_group.py +0 -0
  222. {verifiers-0.2.1.dev58 → verifiers-0.2.1.dev59}/verifiers/scripts/__init__.py +0 -0
  223. {verifiers-0.2.1.dev58 → verifiers-0.2.1.dev59}/verifiers/scripts/build.py +0 -0
  224. {verifiers-0.2.1.dev58 → verifiers-0.2.1.dev59}/verifiers/scripts/eval.py +0 -0
  225. {verifiers-0.2.1.dev58 → verifiers-0.2.1.dev59}/verifiers/scripts/gepa.py +0 -0
  226. {verifiers-0.2.1.dev58 → verifiers-0.2.1.dev59}/verifiers/scripts/init.py +0 -0
  227. {verifiers-0.2.1.dev58 → verifiers-0.2.1.dev59}/verifiers/scripts/install.py +0 -0
  228. {verifiers-0.2.1.dev58 → verifiers-0.2.1.dev59}/verifiers/scripts/setup.py +0 -0
  229. {verifiers-0.2.1.dev58 → verifiers-0.2.1.dev59}/verifiers/scripts/tui.py +0 -0
  230. {verifiers-0.2.1.dev58 → verifiers-0.2.1.dev59}/verifiers/serve/__init__.py +0 -0
  231. {verifiers-0.2.1.dev58 → verifiers-0.2.1.dev59}/verifiers/serve/client/env_client.py +0 -0
  232. {verifiers-0.2.1.dev58 → verifiers-0.2.1.dev59}/verifiers/serve/client/zmq_env_client.py +0 -0
  233. {verifiers-0.2.1.dev58 → verifiers-0.2.1.dev59}/verifiers/serve/server/__init__.py +0 -0
  234. {verifiers-0.2.1.dev58 → verifiers-0.2.1.dev59}/verifiers/serve/server/env_router.py +0 -0
  235. {verifiers-0.2.1.dev58 → verifiers-0.2.1.dev59}/verifiers/serve/server/env_server.py +0 -0
  236. {verifiers-0.2.1.dev58 → verifiers-0.2.1.dev59}/verifiers/serve/server/env_worker.py +0 -0
  237. {verifiers-0.2.1.dev58 → verifiers-0.2.1.dev59}/verifiers/serve/server/zmq_env_server.py +0 -0
  238. {verifiers-0.2.1.dev58 → verifiers-0.2.1.dev59}/verifiers/serve/types.py +0 -0
  239. {verifiers-0.2.1.dev58 → verifiers-0.2.1.dev59}/verifiers/types.py +0 -0
  240. {verifiers-0.2.1.dev58 → verifiers-0.2.1.dev59}/verifiers/utils/__init__.py +0 -0
  241. {verifiers-0.2.1.dev58 → verifiers-0.2.1.dev59}/verifiers/utils/async_utils.py +0 -0
  242. {verifiers-0.2.1.dev58 → verifiers-0.2.1.dev59}/verifiers/utils/client_utils.py +0 -0
  243. {verifiers-0.2.1.dev58 → verifiers-0.2.1.dev59}/verifiers/utils/config_utils.py +0 -0
  244. {verifiers-0.2.1.dev58 → verifiers-0.2.1.dev59}/verifiers/utils/data_utils.py +0 -0
  245. {verifiers-0.2.1.dev58 → verifiers-0.2.1.dev59}/verifiers/utils/display_utils.py +0 -0
  246. {verifiers-0.2.1.dev58 → verifiers-0.2.1.dev59}/verifiers/utils/env_config_utils.py +0 -0
  247. {verifiers-0.2.1.dev58 → verifiers-0.2.1.dev59}/verifiers/utils/env_utils.py +0 -0
  248. {verifiers-0.2.1.dev58 → verifiers-0.2.1.dev59}/verifiers/utils/error_utils.py +0 -0
  249. {verifiers-0.2.1.dev58 → verifiers-0.2.1.dev59}/verifiers/utils/eval_display.py +0 -0
  250. {verifiers-0.2.1.dev58 → verifiers-0.2.1.dev59}/verifiers/utils/eval_utils.py +0 -0
  251. {verifiers-0.2.1.dev58 → verifiers-0.2.1.dev59}/verifiers/utils/heartbeat.py +0 -0
  252. {verifiers-0.2.1.dev58 → verifiers-0.2.1.dev59}/verifiers/utils/import_utils.py +0 -0
  253. {verifiers-0.2.1.dev58 → verifiers-0.2.1.dev59}/verifiers/utils/install_utils.py +0 -0
  254. {verifiers-0.2.1.dev58 → verifiers-0.2.1.dev59}/verifiers/utils/interception_utils.py +0 -0
  255. {verifiers-0.2.1.dev58 → verifiers-0.2.1.dev59}/verifiers/utils/logging_utils.py +0 -0
  256. {verifiers-0.2.1.dev58 → verifiers-0.2.1.dev59}/verifiers/utils/message_utils.py +0 -0
  257. {verifiers-0.2.1.dev58 → verifiers-0.2.1.dev59}/verifiers/utils/metric_utils.py +0 -0
  258. {verifiers-0.2.1.dev58 → verifiers-0.2.1.dev59}/verifiers/utils/path_utils.py +0 -0
  259. {verifiers-0.2.1.dev58 → verifiers-0.2.1.dev59}/verifiers/utils/pricing_utils.py +0 -0
  260. {verifiers-0.2.1.dev58 → verifiers-0.2.1.dev59}/verifiers/utils/process_utils.py +0 -0
  261. {verifiers-0.2.1.dev58 → verifiers-0.2.1.dev59}/verifiers/utils/response_utils.py +0 -0
  262. {verifiers-0.2.1.dev58 → verifiers-0.2.1.dev59}/verifiers/utils/save_utils.py +0 -0
  263. {verifiers-0.2.1.dev58 → verifiers-0.2.1.dev59}/verifiers/utils/serve_utils.py +0 -0
  264. {verifiers-0.2.1.dev58 → verifiers-0.2.1.dev59}/verifiers/utils/thread_utils.py +0 -0
  265. {verifiers-0.2.1.dev58 → verifiers-0.2.1.dev59}/verifiers/utils/threaded_sandbox_client.py +0 -0
  266. {verifiers-0.2.1.dev58 → verifiers-0.2.1.dev59}/verifiers/utils/tool_utils.py +0 -0
  267. {verifiers-0.2.1.dev58 → verifiers-0.2.1.dev59}/verifiers/utils/usage_utils.py +0 -0
  268. {verifiers-0.2.1.dev58 → verifiers-0.2.1.dev59}/verifiers/utils/version_utils.py +0 -0
  269. {verifiers-0.2.1.dev58 → verifiers-0.2.1.dev59}/verifiers/v1/cli/__init__.py +0 -0
  270. {verifiers-0.2.1.dev58 → verifiers-0.2.1.dev59}/verifiers/v1/cli/dashboard/__init__.py +0 -0
  271. {verifiers-0.2.1.dev58 → verifiers-0.2.1.dev59}/verifiers/v1/cli/dashboard/base.py +0 -0
  272. {verifiers-0.2.1.dev58 → verifiers-0.2.1.dev59}/verifiers/v1/cli/dashboard/eval.py +0 -0
  273. {verifiers-0.2.1.dev58 → verifiers-0.2.1.dev59}/verifiers/v1/cli/dashboard/replay.py +0 -0
  274. {verifiers-0.2.1.dev58 → verifiers-0.2.1.dev59}/verifiers/v1/cli/dashboard/validate.py +0 -0
  275. {verifiers-0.2.1.dev58 → verifiers-0.2.1.dev59}/verifiers/v1/cli/debug.py +0 -0
  276. {verifiers-0.2.1.dev58 → verifiers-0.2.1.dev59}/verifiers/v1/cli/eval/__init__.py +0 -0
  277. {verifiers-0.2.1.dev58 → verifiers-0.2.1.dev59}/verifiers/v1/cli/eval/main.py +0 -0
  278. {verifiers-0.2.1.dev58 → verifiers-0.2.1.dev59}/verifiers/v1/cli/eval/resume.py +0 -0
  279. {verifiers-0.2.1.dev58 → verifiers-0.2.1.dev59}/verifiers/v1/cli/eval/runner.py +0 -0
  280. {verifiers-0.2.1.dev58 → verifiers-0.2.1.dev59}/verifiers/v1/cli/gepa.py +0 -0
  281. {verifiers-0.2.1.dev58 → verifiers-0.2.1.dev59}/verifiers/v1/cli/init.py +0 -0
  282. {verifiers-0.2.1.dev58 → verifiers-0.2.1.dev59}/verifiers/v1/cli/output.py +0 -0
  283. {verifiers-0.2.1.dev58 → verifiers-0.2.1.dev59}/verifiers/v1/cli/replay.py +0 -0
  284. {verifiers-0.2.1.dev58 → verifiers-0.2.1.dev59}/verifiers/v1/cli/resolve.py +0 -0
  285. {verifiers-0.2.1.dev58 → verifiers-0.2.1.dev59}/verifiers/v1/cli/serve.py +0 -0
  286. {verifiers-0.2.1.dev58 → verifiers-0.2.1.dev59}/verifiers/v1/cli/validate.py +0 -0
  287. {verifiers-0.2.1.dev58 → verifiers-0.2.1.dev59}/verifiers/v1/clients/__init__.py +0 -0
  288. {verifiers-0.2.1.dev58 → verifiers-0.2.1.dev59}/verifiers/v1/clients/client.py +0 -0
  289. {verifiers-0.2.1.dev58 → verifiers-0.2.1.dev59}/verifiers/v1/clients/config.py +0 -0
  290. {verifiers-0.2.1.dev58 → verifiers-0.2.1.dev59}/verifiers/v1/clients/eval.py +0 -0
  291. {verifiers-0.2.1.dev58 → verifiers-0.2.1.dev59}/verifiers/v1/clients/train.py +0 -0
  292. {verifiers-0.2.1.dev58 → verifiers-0.2.1.dev59}/verifiers/v1/configs/__init__.py +0 -0
  293. {verifiers-0.2.1.dev58 → verifiers-0.2.1.dev59}/verifiers/v1/configs/debug.py +0 -0
  294. {verifiers-0.2.1.dev58 → verifiers-0.2.1.dev59}/verifiers/v1/configs/eval.py +0 -0
  295. {verifiers-0.2.1.dev58 → verifiers-0.2.1.dev59}/verifiers/v1/configs/init.py +0 -0
  296. {verifiers-0.2.1.dev58 → verifiers-0.2.1.dev59}/verifiers/v1/configs/replay.py +0 -0
  297. {verifiers-0.2.1.dev58 → verifiers-0.2.1.dev59}/verifiers/v1/configs/serve.py +0 -0
  298. {verifiers-0.2.1.dev58 → verifiers-0.2.1.dev59}/verifiers/v1/configs/validate.py +0 -0
  299. {verifiers-0.2.1.dev58 → verifiers-0.2.1.dev59}/verifiers/v1/decorators.py +0 -0
  300. {verifiers-0.2.1.dev58 → verifiers-0.2.1.dev59}/verifiers/v1/dialects/__init__.py +0 -0
  301. {verifiers-0.2.1.dev58 → verifiers-0.2.1.dev59}/verifiers/v1/env.py +0 -0
  302. {verifiers-0.2.1.dev58 → verifiers-0.2.1.dev59}/verifiers/v1/episode.py +0 -0
  303. {verifiers-0.2.1.dev58 → verifiers-0.2.1.dev59}/verifiers/v1/gepa/__init__.py +0 -0
  304. {verifiers-0.2.1.dev58 → verifiers-0.2.1.dev59}/verifiers/v1/gepa/adapter.py +0 -0
  305. {verifiers-0.2.1.dev58 → verifiers-0.2.1.dev59}/verifiers/v1/gepa/config.py +0 -0
  306. {verifiers-0.2.1.dev58 → verifiers-0.2.1.dev59}/verifiers/v1/gepa/dataset.py +0 -0
  307. {verifiers-0.2.1.dev58 → verifiers-0.2.1.dev59}/verifiers/v1/gepa/reflection.py +0 -0
  308. {verifiers-0.2.1.dev58 → verifiers-0.2.1.dev59}/verifiers/v1/gepa/runner.py +0 -0
  309. {verifiers-0.2.1.dev58 → verifiers-0.2.1.dev59}/verifiers/v1/harness.py +0 -0
  310. {verifiers-0.2.1.dev58 → verifiers-0.2.1.dev59}/verifiers/v1/harnesses/__init__.py +0 -0
  311. {verifiers-0.2.1.dev58 → verifiers-0.2.1.dev59}/verifiers/v1/harnesses/claude_code/__init__.py +0 -0
  312. {verifiers-0.2.1.dev58 → verifiers-0.2.1.dev59}/verifiers/v1/harnesses/claude_code/harness.py +0 -0
  313. {verifiers-0.2.1.dev58 → verifiers-0.2.1.dev59}/verifiers/v1/harnesses/codex/__init__.py +0 -0
  314. {verifiers-0.2.1.dev58 → verifiers-0.2.1.dev59}/verifiers/v1/harnesses/codex/harness.py +0 -0
  315. {verifiers-0.2.1.dev58 → verifiers-0.2.1.dev59}/verifiers/v1/harnesses/default/__init__.py +0 -0
  316. {verifiers-0.2.1.dev58 → verifiers-0.2.1.dev59}/verifiers/v1/harnesses/default/harness.py +0 -0
  317. {verifiers-0.2.1.dev58 → verifiers-0.2.1.dev59}/verifiers/v1/harnesses/default/program.py +0 -0
  318. {verifiers-0.2.1.dev58 → verifiers-0.2.1.dev59}/verifiers/v1/harnesses/kimi_code/__init__.py +0 -0
  319. {verifiers-0.2.1.dev58 → verifiers-0.2.1.dev59}/verifiers/v1/harnesses/kimi_code/harness.py +0 -0
  320. {verifiers-0.2.1.dev58 → verifiers-0.2.1.dev59}/verifiers/v1/harnesses/mini_swe_agent/__init__.py +0 -0
  321. {verifiers-0.2.1.dev58 → verifiers-0.2.1.dev59}/verifiers/v1/harnesses/mini_swe_agent/harness.py +0 -0
  322. {verifiers-0.2.1.dev58 → verifiers-0.2.1.dev59}/verifiers/v1/harnesses/mini_swe_agent/program.py +0 -0
  323. {verifiers-0.2.1.dev58 → verifiers-0.2.1.dev59}/verifiers/v1/harnesses/null/__init__.py +0 -0
  324. {verifiers-0.2.1.dev58 → verifiers-0.2.1.dev59}/verifiers/v1/harnesses/null/harness.py +0 -0
  325. {verifiers-0.2.1.dev58 → verifiers-0.2.1.dev59}/verifiers/v1/harnesses/null/program.py +0 -0
  326. {verifiers-0.2.1.dev58 → verifiers-0.2.1.dev59}/verifiers/v1/harnesses/pi/__init__.py +0 -0
  327. {verifiers-0.2.1.dev58 → verifiers-0.2.1.dev59}/verifiers/v1/harnesses/pi/harness.py +0 -0
  328. {verifiers-0.2.1.dev58 → verifiers-0.2.1.dev59}/verifiers/v1/harnesses/rlm/__init__.py +0 -0
  329. {verifiers-0.2.1.dev58 → verifiers-0.2.1.dev59}/verifiers/v1/harnesses/rlm/harness.py +0 -0
  330. {verifiers-0.2.1.dev58 → verifiers-0.2.1.dev59}/verifiers/v1/harnesses/terminus_2/__init__.py +0 -0
  331. {verifiers-0.2.1.dev58 → verifiers-0.2.1.dev59}/verifiers/v1/harnesses/terminus_2/harness.py +0 -0
  332. {verifiers-0.2.1.dev58 → verifiers-0.2.1.dev59}/verifiers/v1/harnesses/terminus_2/program.py +0 -0
  333. {verifiers-0.2.1.dev58 → verifiers-0.2.1.dev59}/verifiers/v1/interception/__init__.py +0 -0
  334. {verifiers-0.2.1.dev58 → verifiers-0.2.1.dev59}/verifiers/v1/interception/base.py +0 -0
  335. {verifiers-0.2.1.dev58 → verifiers-0.2.1.dev59}/verifiers/v1/interception/pool.py +0 -0
  336. {verifiers-0.2.1.dev58 → verifiers-0.2.1.dev59}/verifiers/v1/interception/tunnel/__init__.py +0 -0
  337. {verifiers-0.2.1.dev58 → verifiers-0.2.1.dev59}/verifiers/v1/interception/tunnel/base.py +0 -0
  338. {verifiers-0.2.1.dev58 → verifiers-0.2.1.dev59}/verifiers/v1/interception/tunnel/custom.py +0 -0
  339. {verifiers-0.2.1.dev58 → verifiers-0.2.1.dev59}/verifiers/v1/interception/tunnel/prime.py +0 -0
  340. {verifiers-0.2.1.dev58 → verifiers-0.2.1.dev59}/verifiers/v1/judge.py +0 -0
  341. {verifiers-0.2.1.dev58 → verifiers-0.2.1.dev59}/verifiers/v1/judges/__init__.py +0 -0
  342. {verifiers-0.2.1.dev58 → verifiers-0.2.1.dev59}/verifiers/v1/judges/reference.py +0 -0
  343. {verifiers-0.2.1.dev58 → verifiers-0.2.1.dev59}/verifiers/v1/judges/reference.txt +0 -0
  344. {verifiers-0.2.1.dev58 → verifiers-0.2.1.dev59}/verifiers/v1/judges/rubric.py +0 -0
  345. {verifiers-0.2.1.dev58 → verifiers-0.2.1.dev59}/verifiers/v1/judges/rubric.txt +0 -0
  346. {verifiers-0.2.1.dev58 → verifiers-0.2.1.dev59}/verifiers/v1/loaders.py +0 -0
  347. {verifiers-0.2.1.dev58 → verifiers-0.2.1.dev59}/verifiers/v1/mcp/__init__.py +0 -0
  348. {verifiers-0.2.1.dev58 → verifiers-0.2.1.dev59}/verifiers/v1/mcp/launch.py +0 -0
  349. {verifiers-0.2.1.dev58 → verifiers-0.2.1.dev59}/verifiers/v1/mcp/server.py +0 -0
  350. {verifiers-0.2.1.dev58 → verifiers-0.2.1.dev59}/verifiers/v1/mcp/toolset.py +0 -0
  351. {verifiers-0.2.1.dev58 → verifiers-0.2.1.dev59}/verifiers/v1/mcp/user.py +0 -0
  352. {verifiers-0.2.1.dev58 → verifiers-0.2.1.dev59}/verifiers/v1/push.py +0 -0
  353. {verifiers-0.2.1.dev58 → verifiers-0.2.1.dev59}/verifiers/v1/retries.py +0 -0
  354. {verifiers-0.2.1.dev58 → verifiers-0.2.1.dev59}/verifiers/v1/rollout.py +0 -0
  355. {verifiers-0.2.1.dev58 → verifiers-0.2.1.dev59}/verifiers/v1/runtimes/__init__.py +0 -0
  356. {verifiers-0.2.1.dev58 → verifiers-0.2.1.dev59}/verifiers/v1/runtimes/base.py +0 -0
  357. {verifiers-0.2.1.dev58 → verifiers-0.2.1.dev59}/verifiers/v1/runtimes/docker.py +0 -0
  358. {verifiers-0.2.1.dev58 → verifiers-0.2.1.dev59}/verifiers/v1/runtimes/limiters.py +0 -0
  359. {verifiers-0.2.1.dev58 → verifiers-0.2.1.dev59}/verifiers/v1/runtimes/modal.py +0 -0
  360. {verifiers-0.2.1.dev58 → verifiers-0.2.1.dev59}/verifiers/v1/runtimes/prime.py +0 -0
  361. {verifiers-0.2.1.dev58 → verifiers-0.2.1.dev59}/verifiers/v1/runtimes/subprocess.py +0 -0
  362. {verifiers-0.2.1.dev58 → verifiers-0.2.1.dev59}/verifiers/v1/scoring.py +0 -0
  363. {verifiers-0.2.1.dev58 → verifiers-0.2.1.dev59}/verifiers/v1/serve/__init__.py +0 -0
  364. {verifiers-0.2.1.dev58 → verifiers-0.2.1.dev59}/verifiers/v1/serve/client.py +0 -0
  365. {verifiers-0.2.1.dev58 → verifiers-0.2.1.dev59}/verifiers/v1/serve/pool.py +0 -0
  366. {verifiers-0.2.1.dev58 → verifiers-0.2.1.dev59}/verifiers/v1/serve/server.py +0 -0
  367. {verifiers-0.2.1.dev58 → verifiers-0.2.1.dev59}/verifiers/v1/serve/types.py +0 -0
  368. {verifiers-0.2.1.dev58 → verifiers-0.2.1.dev59}/verifiers/v1/session.py +0 -0
  369. {verifiers-0.2.1.dev58 → verifiers-0.2.1.dev59}/verifiers/v1/state.py +0 -0
  370. {verifiers-0.2.1.dev58 → verifiers-0.2.1.dev59}/verifiers/v1/task.py +0 -0
  371. {verifiers-0.2.1.dev58 → verifiers-0.2.1.dev59}/verifiers/v1/taskset.py +0 -0
  372. {verifiers-0.2.1.dev58 → verifiers-0.2.1.dev59}/verifiers/v1/tasksets/__init__.py +0 -0
  373. {verifiers-0.2.1.dev58 → verifiers-0.2.1.dev59}/verifiers/v1/tasksets/harbor/__init__.py +0 -0
  374. {verifiers-0.2.1.dev58 → verifiers-0.2.1.dev59}/verifiers/v1/tasksets/harbor/taskset.py +0 -0
  375. {verifiers-0.2.1.dev58 → verifiers-0.2.1.dev59}/verifiers/v1/tasksets/lean/__init__.py +0 -0
  376. {verifiers-0.2.1.dev58 → verifiers-0.2.1.dev59}/verifiers/v1/tasksets/lean/scoring.py +0 -0
  377. {verifiers-0.2.1.dev58 → verifiers-0.2.1.dev59}/verifiers/v1/tasksets/lean/taskset.py +0 -0
  378. {verifiers-0.2.1.dev58 → verifiers-0.2.1.dev59}/verifiers/v1/tasksets/openenv/__init__.py +0 -0
  379. {verifiers-0.2.1.dev58 → verifiers-0.2.1.dev59}/verifiers/v1/tasksets/openenv/taskset.py +0 -0
  380. {verifiers-0.2.1.dev58 → verifiers-0.2.1.dev59}/verifiers/v1/tasksets/textarena/__init__.py +0 -0
  381. {verifiers-0.2.1.dev58 → verifiers-0.2.1.dev59}/verifiers/v1/tasksets/textarena/taskset.py +0 -0
  382. {verifiers-0.2.1.dev58 → verifiers-0.2.1.dev59}/verifiers/v1/types.py +0 -0
  383. {verifiers-0.2.1.dev58 → verifiers-0.2.1.dev59}/verifiers/v1/utils/__init__.py +0 -0
  384. {verifiers-0.2.1.dev58 → verifiers-0.2.1.dev59}/verifiers/v1/utils/aio.py +0 -0
  385. {verifiers-0.2.1.dev58 → verifiers-0.2.1.dev59}/verifiers/v1/utils/format.py +0 -0
  386. {verifiers-0.2.1.dev58 → verifiers-0.2.1.dev59}/verifiers/v1/utils/generic.py +0 -0
  387. {verifiers-0.2.1.dev58 → verifiers-0.2.1.dev59}/verifiers/v1/utils/image.py +0 -0
  388. {verifiers-0.2.1.dev58 → verifiers-0.2.1.dev59}/verifiers/v1/utils/install.py +0 -0
  389. {verifiers-0.2.1.dev58 → verifiers-0.2.1.dev59}/verifiers/v1/utils/interrupt.py +0 -0
  390. {verifiers-0.2.1.dev58 → verifiers-0.2.1.dev59}/verifiers/v1/utils/logging.py +0 -0
  391. {verifiers-0.2.1.dev58 → verifiers-0.2.1.dev59}/verifiers/v1/utils/memory.py +0 -0
  392. {verifiers-0.2.1.dev58 → verifiers-0.2.1.dev59}/verifiers/v1/utils/sampling.py +0 -0
  393. {verifiers-0.2.1.dev58 → verifiers-0.2.1.dev59}/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.1.dev58
3
+ Version: 0.2.1.dev59
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
@@ -18,6 +18,12 @@ async def test_single_turn(run_v1, harness, harness_runtime, tmp_path):
18
18
  assert trace.errors == []
19
19
  assert trace.num_turns == 1
20
20
  assert trace.reward == 1.0
21
+ # Every sampled turn has one per-call record, linked to its assistant node.
22
+ sampled = [i for i, n in enumerate(trace.nodes) if n.sampled]
23
+ assert [c.node for c in trace.calls if c.error is None] == sampled
24
+ for call in trace.calls:
25
+ assert call.model and call.sampling is not None
26
+ assert call.time.duration > 0
21
27
 
22
28
 
23
29
  @pytest.mark.e2e
@@ -105,6 +105,7 @@ from verifiers.v1.trace import (
105
105
  Branch,
106
106
  Error,
107
107
  EvalRunInfo,
108
+ ModelCall,
108
109
  RunInfo,
109
110
  TimeSpan,
110
111
  Timing,
@@ -172,6 +173,7 @@ __all__ = [
172
173
  "AgentInfo",
173
174
  "RunInfo",
174
175
  "EvalRunInfo",
176
+ "ModelCall",
175
177
  "TrainRunInfo",
176
178
  "VersionInfo",
177
179
  "State",
@@ -11,6 +11,7 @@ from collections.abc import Callable, Mapping
11
11
  from dataclasses import dataclass, field
12
12
 
13
13
  from anthropic.types import Message as AnthropicMessage
14
+ from anthropic.types import Usage as AnthropicUsage
14
15
 
15
16
  from verifiers.v1.dialects.base import Dialect, StreamParser, parse_sse_event
16
17
  from verifiers.v1.types import (
@@ -21,6 +22,7 @@ from verifiers.v1.types import (
21
22
  ImageUrlSource,
22
23
  Messages,
23
24
  Response,
25
+ Sampling,
24
26
  SamplingConfig,
25
27
  SystemMessage,
26
28
  TextContentPart,
@@ -242,11 +244,35 @@ class AnthropicStreamParser(StreamParser):
242
244
  return response_from_wire(self.validate_response(self.message))
243
245
 
244
246
 
247
+ class ModdedUsage(AnthropicUsage):
248
+ """The SDK closes `service_tier` to a fixed Literal, but Anthropic-compatible gateways
249
+ report their own tiers (e.g. Prime's `provisioned`). Widen to a plain string — we don't
250
+ consume it — so parsing stays lenient about the label instead of dropping it."""
251
+
252
+ service_tier: str | None = None # type: ignore[assignment]
253
+
254
+
255
+ class ModdedAnthropicMessage(AnthropicMessage):
256
+ usage: ModdedUsage # type: ignore[assignment]
257
+
258
+
245
259
  class AnthropicDialect(Dialect[dict, AnthropicMessage]):
260
+ sampling_fields = frozenset(
261
+ {
262
+ "temperature",
263
+ "top_p",
264
+ "top_k",
265
+ "max_tokens",
266
+ "stop_sequences",
267
+ "thinking",
268
+ "tool_choice",
269
+ "output_config",
270
+ }
271
+ )
246
272
  routes = ("/v1/messages",)
247
273
  aux_routes = ("/v1/messages/count_tokens",)
248
274
  upstream_path = "/v1/messages"
249
- response_type = AnthropicMessage
275
+ response_type = ModdedAnthropicMessage
250
276
 
251
277
  def auth_headers(self, api_key: str) -> dict[str, str]:
252
278
  return {"x-api-key": api_key, "anthropic-version": "2023-06-01"}
@@ -276,17 +302,23 @@ class AnthropicDialect(Dialect[dict, AnthropicMessage]):
276
302
  def parse_response(self, response: AnthropicMessage) -> Response:
277
303
  return response_from_wire(response)
278
304
 
279
- def validate_response(self, raw: dict) -> AnthropicMessage:
280
- usage = raw.get("usage")
281
- tier = usage.get("service_tier") if usage else None
282
- if tier not in (None, "standard", "priority", "batch"):
283
- raw = {**raw, "usage": usage.copy()}
284
- raw["usage"].pop("service_tier")
285
- return super().validate_response(raw)
286
-
287
305
  def stream_parser(self) -> StreamParser:
288
306
  return AnthropicStreamParser(self.validate_response)
289
307
 
308
+ def parse_sampling(self, body: dict) -> Sampling:
309
+ settings = {k: v for k, v in body.items() if k in self.sampling_fields}
310
+ # Lift `output_config.effort` (where `apply_overrides` puts the eval's
311
+ # reasoning effort) onto the typed knob; keep any other output-config keys.
312
+ if isinstance(config := settings.get("output_config"), dict):
313
+ config = dict(config)
314
+ if config.get("effort"):
315
+ settings["reasoning_effort"] = config.pop("effort")
316
+ if config:
317
+ settings["output_config"] = config
318
+ else:
319
+ settings.pop("output_config")
320
+ return Sampling.model_validate(settings)
321
+
290
322
  def apply_overrides(self, body: dict, model: str, sampling: SamplingConfig) -> dict:
291
323
  # Preserve native fields except the eval's model + sampling. `temperature`/`top_p` are
292
324
  # authoritative (always dropped, the eval's applied if set); `max_tokens` is required by
@@ -21,7 +21,7 @@ from typing import ClassVar, Generic, TypeVar
21
21
  from pydantic import BaseModel
22
22
  from pydantic_core import from_json
23
23
 
24
- from verifiers.v1.types import Messages, Response, SamplingConfig, Tool
24
+ from verifiers.v1.types import Messages, Response, Sampling, SamplingConfig, Tool
25
25
 
26
26
  ReqT = TypeVar("ReqT")
27
27
  RespT = TypeVar("RespT", bound=BaseModel)
@@ -121,6 +121,12 @@ class Dialect(ABC, Generic[ReqT, RespT]):
121
121
  `dialects.DIALECTS` and a harness speaking that format works end-to-end (the eval client and
122
122
  interception server are generic over this interface)."""
123
123
 
124
+ sampling_fields: ClassVar[frozenset[str]] = frozenset()
125
+ """Request keys that are call settings — what shapes generation given the same
126
+ conversation: decoding knobs, budgets/stops, reasoning effort, output contract.
127
+ A whitelist, so payload, conversation state, and tracking fields can never leak
128
+ into the per-call record by omission; an unlisted knob is simply not recorded."""
129
+
124
130
  routes: ClassVar[tuple[str, ...]]
125
131
  """The endpoint path(s) a program's SDK posts model turns to. The interception server serves
126
132
  one handler per route, so the wire format is resolved from the route the SDK chose (it
@@ -167,6 +173,14 @@ class Dialect(ABC, Generic[ReqT, RespT]):
167
173
  def parse_request(self, body: ReqT) -> tuple[Messages, list[Tool] | None]:
168
174
  """The native request -> vf prompt + tools (for the trace)."""
169
175
 
176
+ def parse_sampling(self, body: ReqT) -> Sampling:
177
+ """The native request's call settings -> the canonical `Sampling` (for the
178
+ trace's per-call records): the `sampling_fields` whitelist, with this format's
179
+ aliases mapped onto the typed knobs; dialect-specific keys ride as extras."""
180
+ return Sampling.model_validate(
181
+ {k: v for k, v in body.items() if k in self.sampling_fields}
182
+ )
183
+
170
184
  @abstractmethod
171
185
  def parse_response(self, response: RespT) -> Response:
172
186
  """A native (non-streamed) response -> the vf `Response` we consume."""
@@ -20,6 +20,7 @@ from verifiers.v1.types import (
20
20
  Message,
21
21
  Messages,
22
22
  Response,
23
+ Sampling,
23
24
  SamplingConfig,
24
25
  SystemMessage,
25
26
  Tool,
@@ -271,27 +272,47 @@ class ChatStreamParser(StreamParser):
271
272
  if self.reasoning_details:
272
273
  self.message["reasoning_details"] = self.reasoning_details
273
274
  head = self.head or {}
274
- return response_from_wire(
275
- ModdedChatCompletion.model_validate(
275
+ completion = {
276
+ "id": head.get("id", "vf-intercept"),
277
+ "object": "chat.completion",
278
+ "created": head.get("created", int(time.time())),
279
+ "model": head.get("model", ""),
280
+ "choices": [
276
281
  {
277
- "id": head.get("id", "vf-intercept"),
278
- "object": "chat.completion",
279
- "created": head.get("created", int(time.time())),
280
- "model": head.get("model", ""),
281
- "choices": [
282
- {
283
- "index": 0,
284
- "message": self.message,
285
- "finish_reason": self.finish_reason or "stop",
286
- }
287
- ],
288
- "usage": self.usage,
282
+ "index": 0,
283
+ "message": self.message,
284
+ "finish_reason": self.finish_reason or "stop",
289
285
  }
290
- )
291
- )
286
+ ],
287
+ "usage": self.usage,
288
+ }
289
+ return response_from_wire(ModdedChatCompletion.model_validate(completion))
292
290
 
293
291
 
294
292
  class ChatDialect(Dialect[dict, ChatCompletion]):
293
+ sampling_fields = frozenset(
294
+ {
295
+ "temperature",
296
+ "top_p",
297
+ "top_k",
298
+ "min_p",
299
+ "max_tokens",
300
+ "max_completion_tokens",
301
+ "reasoning_effort",
302
+ "seed",
303
+ "stop",
304
+ "n",
305
+ "logprobs",
306
+ "top_logprobs",
307
+ "logit_bias",
308
+ "frequency_penalty",
309
+ "presence_penalty",
310
+ "repetition_penalty",
311
+ "response_format",
312
+ "tool_choice",
313
+ "parallel_tool_calls",
314
+ }
315
+ )
295
316
  routes = ("/v1/chat/completions",)
296
317
  upstream_path = "/chat/completions"
297
318
  response_type = ModdedChatCompletion
@@ -311,6 +332,14 @@ class ChatDialect(Dialect[dict, ChatCompletion]):
311
332
  tool_names[call.id] = call.name
312
333
  return messages, parse_tools(body.get("tools"))
313
334
 
335
+ def parse_sampling(self, body: dict) -> Sampling:
336
+ settings = {k: v for k, v in body.items() if k in self.sampling_fields}
337
+ # Canonicalize the max-tokens alias; when both ride the wire (an eval override
338
+ # on top of a harness's `max_completion_tokens`), the override wins.
339
+ if (mct := settings.pop("max_completion_tokens", None)) is not None:
340
+ settings.setdefault("max_tokens", mct)
341
+ return Sampling.model_validate(settings)
342
+
314
343
  def parse_response(self, response: ChatCompletion) -> Response:
315
344
  return response_from_wire(response)
316
345
 
@@ -32,6 +32,7 @@ from verifiers.v1.types import (
32
32
  ImageUrlSource,
33
33
  Messages,
34
34
  Response,
35
+ Sampling,
35
36
  SamplingConfig,
36
37
  SystemMessage,
37
38
  TextContentPart,
@@ -277,6 +278,20 @@ class ResponsesStreamParser(StreamParser):
277
278
 
278
279
 
279
280
  class ResponsesDialect(Dialect[dict, OpenAIResponse]):
281
+ sampling_fields = frozenset(
282
+ {
283
+ "temperature",
284
+ "top_p",
285
+ "max_output_tokens",
286
+ "max_tool_calls",
287
+ "reasoning",
288
+ "text",
289
+ "tool_choice",
290
+ "parallel_tool_calls",
291
+ "top_logprobs",
292
+ "truncation",
293
+ }
294
+ )
280
295
  routes = ("/v1/responses",)
281
296
  upstream_path = "/responses"
282
297
  response_type = OpenAIResponse
@@ -286,6 +301,22 @@ class ResponsesDialect(Dialect[dict, OpenAIResponse]):
286
301
  # trailing `[DONE]`, so the turn-ending event is the final event, not the sentinel.
287
302
  return any(marker in chunk for marker in _TERMINAL_MARKERS)
288
303
 
304
+ def parse_sampling(self, body: dict) -> Sampling:
305
+ settings = {k: v for k, v in body.items() if k in self.sampling_fields}
306
+ # Lift `reasoning.effort` onto the typed knob; keep any other reasoning keys
307
+ # (e.g. `summary`) as the wire sent them.
308
+ if isinstance(reasoning := settings.get("reasoning"), dict):
309
+ reasoning = dict(reasoning)
310
+ if reasoning.get("effort"):
311
+ settings["reasoning_effort"] = reasoning.pop("effort")
312
+ if reasoning:
313
+ settings["reasoning"] = reasoning
314
+ else:
315
+ settings.pop("reasoning")
316
+ if "max_output_tokens" in settings:
317
+ settings["max_tokens"] = settings.pop("max_output_tokens")
318
+ return Sampling.model_validate(settings)
319
+
289
320
  def parse_request(self, body: dict) -> tuple[Messages, list[Tool] | None]:
290
321
  prompt: Messages = []
291
322
  if instructions := body.get("instructions"):
@@ -44,7 +44,12 @@ class ProviderError(RolloutError):
44
44
 
45
45
  class OverlongPromptError(ProviderError):
46
46
  """The prompt exceeded the model's context window — a budget limit, ended as a clean
47
- truncation rather than recorded as an error."""
47
+ truncation rather than recorded as an error. Defaults to a 400 (what the interception
48
+ server surfaces for it — deterministic, so an SDK never retries it); `model_error`
49
+ keeps the provider's real status when the failure carried one."""
50
+
51
+ def __init__(self, message: str = "", *, status_code: int = 400) -> None:
52
+ super().__init__(message, status_code=status_code)
48
53
 
49
54
 
50
55
  class HarnessError(RolloutError):
@@ -128,10 +133,18 @@ def model_error(
128
133
  becomes a plain `ProviderError`. `status_code` is the HTTP status surfaced to the harness (whose
129
134
  SDK then retries 5xx/429/timeout and not 4xx); derived from an SDK error when not given. Accepts
130
135
  an SDK error (the renderer) or the provider's raw error body (the httpx proxy)."""
136
+ from openai import APIStatusError
137
+
131
138
  # Some SDK errors stringify empty; fall back to the type so the message is never blank.
132
139
  text = str(e) or (type(e).__name__ if isinstance(e, BaseException) else "")
133
140
  if any(phrase in text.casefold() for phrase in _CONTEXT_LENGTH_PHRASES):
134
- return OverlongPromptError(text)
141
+ # Keep the provider's real status when the failure carried one; else the class
142
+ # default (the 400 the interception server surfaces for overlong prompts).
143
+ if status_code is None and isinstance(e, APIStatusError):
144
+ status_code = e.status_code
145
+ return OverlongPromptError(
146
+ text, **({} if status_code is None else {"status_code": status_code})
147
+ )
135
148
  return ProviderError(
136
149
  text,
137
150
  status_code=status_code if status_code is not None else _provider_status(e),
@@ -31,7 +31,6 @@ from renderers.base import MultiModalData, PlaceholderRange, RenderedTokens
31
31
 
32
32
  from verifiers.v1.types import (
33
33
  AssistantMessage,
34
- FinishReason,
35
34
  KeptTokens,
36
35
  Message,
37
36
  Response,
@@ -39,7 +38,6 @@ from verifiers.v1.types import (
39
38
  TextContentPart,
40
39
  Tool,
41
40
  ToolMessage,
42
- Usage,
43
41
  )
44
42
 
45
43
  if TYPE_CHECKING:
@@ -104,17 +102,12 @@ class MessageNode(StrictBaseModel):
104
102
  logprobs: list[float] = Field(default_factory=list)
105
103
  """Sampling logprobs for the sampled tokens — length equals the number of True entries in
106
104
  `mask`; empty for input messages."""
107
- finish_reason: FinishReason = None
108
- """The response's finish reason (assistant nodes only) — kept for truncation detection."""
109
105
  multi_modal_data: SkipJsonSchema[MultiModalData | None] = None
110
106
  """The renderer items for the images this message's content introduces (pixel tensors,
111
107
  grids, hashes, placeholders) — the only carrier of the pixels from the env server to the
112
108
  trainer. `Branch.multi_modal_data` concatenates them along the path into the training
113
109
  `mm_kwargs`. Rides the wire as raw bytes (msgpack `bin`) since pydantic can't JSON the numpy;
114
110
  kept off disk by the dump-site `exclude` in prime-rl (the tensors bloat the rollout jsonl)."""
115
- usage: Usage | None = None
116
- """Provider-reported token usage for this message's response (assistant nodes). Preserved
117
- on the wire and on disk, including cache-read tokens when the provider reports them."""
118
111
  routed_experts: SkipJsonSchema[np.ndarray | None] = None
119
112
  """This node's slice of the MoE expert-routing array — uint8 `[len(token_ids), layers,
120
113
  top_k]`, the expert ids inference selected for exactly this node's tokens. Attributed from
@@ -343,10 +336,12 @@ class PendingTurn:
343
336
  for span in tail_spans
344
337
  ]
345
338
 
346
- def commit(self, response: Response, tools: list[Tool] | None = None) -> None:
347
- _commit_turn(self, response)
339
+ def commit(self, response: Response, tools: list[Tool] | None = None) -> int:
340
+ """Add this turn to the graph; returns the committed assistant node's id."""
341
+ assistant_id = _commit_turn(self, response)
348
342
  if tools:
349
343
  self.trace.tools = tools
344
+ return assistant_id
350
345
 
351
346
 
352
347
  def prepare_turn(trace: Trace, prompt: list[Message]) -> PendingTurn:
@@ -486,7 +481,7 @@ def _attribute_kept_tokens(
486
481
  node.kept_tokens = KeptTokens(ids=ids.copy(), counts=counts.copy())
487
482
 
488
483
 
489
- def _commit_turn(turn: PendingTurn, response: Response) -> None:
484
+ def _commit_turn(turn: PendingTurn, response: Response) -> int:
490
485
  trace = turn.trace
491
486
  prompt = turn.prompt
492
487
  tokens = response.tokens
@@ -573,8 +568,6 @@ def _commit_turn(turn: PendingTurn, response: Response) -> None:
573
568
  else [],
574
569
  # TurnTokens is discarded after commit, so transfer its logprobs without copying.
575
570
  logprobs=tokens.completion_logprobs if tokens else [],
576
- finish_reason=response.finish_reason,
577
- usage=response.usage,
578
571
  )
579
572
  )
580
573
  # Register the assistant so the next turn's prompt (which restates it) reuses this node.
@@ -596,6 +589,8 @@ def _commit_turn(turn: PendingTurn, response: Response) -> None:
596
589
  # completion-aligned, so only the sampled node carries them).
597
590
  _attribute_kept_tokens(trace, assistant_id, tokens.kept_tokens if tokens else None)
598
591
 
592
+ return assistant_id
593
+
599
594
 
600
595
  # --- walking the graph (views) ---------------------------------------------------------
601
596