verifiers 0.2.1.dev12__tar.gz → 0.2.1.dev20__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 (409) hide show
  1. {verifiers-0.2.1.dev12 → verifiers-0.2.1.dev20}/PKG-INFO +1 -1
  2. {verifiers-0.2.1.dev12 → verifiers-0.2.1.dev20}/verifiers/v1/__init__.py +2 -0
  3. {verifiers-0.2.1.dev12 → verifiers-0.2.1.dev20}/verifiers/v1/cli/dashboard/eval.py +14 -11
  4. {verifiers-0.2.1.dev12 → verifiers-0.2.1.dev20}/verifiers/v1/cli/debug.py +14 -7
  5. {verifiers-0.2.1.dev12 → verifiers-0.2.1.dev20}/verifiers/v1/clients/train.py +4 -0
  6. {verifiers-0.2.1.dev12 → verifiers-0.2.1.dev20}/verifiers/v1/graph.py +55 -5
  7. {verifiers-0.2.1.dev12 → verifiers-0.2.1.dev20}/verifiers/v1/rollout.py +8 -2
  8. {verifiers-0.2.1.dev12 → verifiers-0.2.1.dev20}/verifiers/v1/trace.py +35 -1
  9. {verifiers-0.2.1.dev12 → verifiers-0.2.1.dev20}/verifiers/v1/types.py +18 -0
  10. {verifiers-0.2.1.dev12 → verifiers-0.2.1.dev20}/.gitignore +0 -0
  11. {verifiers-0.2.1.dev12 → verifiers-0.2.1.dev20}/LICENSE +0 -0
  12. {verifiers-0.2.1.dev12 → verifiers-0.2.1.dev20}/README.md +0 -0
  13. {verifiers-0.2.1.dev12 → verifiers-0.2.1.dev20}/pyproject.toml +0 -0
  14. {verifiers-0.2.1.dev12 → verifiers-0.2.1.dev20}/tests/AGENTS.md +0 -0
  15. {verifiers-0.2.1.dev12 → verifiers-0.2.1.dev20}/tests/__init__.py +0 -0
  16. {verifiers-0.2.1.dev12 → verifiers-0.2.1.dev20}/tests/conftest.py +0 -0
  17. {verifiers-0.2.1.dev12 → verifiers-0.2.1.dev20}/tests/test_browser_env.py +0 -0
  18. {verifiers-0.2.1.dev12 → verifiers-0.2.1.dev20}/tests/test_build_script.py +0 -0
  19. {verifiers-0.2.1.dev12 → verifiers-0.2.1.dev20}/tests/test_cli_agent_env.py +0 -0
  20. {verifiers-0.2.1.dev12 → verifiers-0.2.1.dev20}/tests/test_client_auth_errors.py +0 -0
  21. {verifiers-0.2.1.dev12 → verifiers-0.2.1.dev20}/tests/test_client_config.py +0 -0
  22. {verifiers-0.2.1.dev12 → verifiers-0.2.1.dev20}/tests/test_client_multimodal_types.py +0 -0
  23. {verifiers-0.2.1.dev12 → verifiers-0.2.1.dev20}/tests/test_composable_env.py +0 -0
  24. {verifiers-0.2.1.dev12 → verifiers-0.2.1.dev20}/tests/test_context_token_metrics.py +0 -0
  25. {verifiers-0.2.1.dev12 → verifiers-0.2.1.dev20}/tests/test_decorator_ranks.py +0 -0
  26. {verifiers-0.2.1.dev12 → verifiers-0.2.1.dev20}/tests/test_endpoint_registry.py +0 -0
  27. {verifiers-0.2.1.dev12 → verifiers-0.2.1.dev20}/tests/test_env_group.py +0 -0
  28. {verifiers-0.2.1.dev12 → verifiers-0.2.1.dev20}/tests/test_env_server.py +0 -0
  29. {verifiers-0.2.1.dev12 → verifiers-0.2.1.dev20}/tests/test_environment.py +0 -0
  30. {verifiers-0.2.1.dev12 → verifiers-0.2.1.dev20}/tests/test_environment_extra.py +0 -0
  31. {verifiers-0.2.1.dev12 → verifiers-0.2.1.dev20}/tests/test_envs.py +0 -0
  32. {verifiers-0.2.1.dev12 → verifiers-0.2.1.dev20}/tests/test_error_chain.py +0 -0
  33. {verifiers-0.2.1.dev12 → verifiers-0.2.1.dev20}/tests/test_eval_display.py +0 -0
  34. {verifiers-0.2.1.dev12 → verifiers-0.2.1.dev20}/tests/test_eval_utils.py +0 -0
  35. {verifiers-0.2.1.dev12 → verifiers-0.2.1.dev20}/tests/test_gepa_cli.py +0 -0
  36. {verifiers-0.2.1.dev12 → verifiers-0.2.1.dev20}/tests/test_gepa_utils.py +0 -0
  37. {verifiers-0.2.1.dev12 → verifiers-0.2.1.dev20}/tests/test_gym_env.py +0 -0
  38. {verifiers-0.2.1.dev12 → verifiers-0.2.1.dev20}/tests/test_harbor_env_mcp.py +0 -0
  39. {verifiers-0.2.1.dev12 → verifiers-0.2.1.dev20}/tests/test_imports.py +0 -0
  40. {verifiers-0.2.1.dev12 → verifiers-0.2.1.dev20}/tests/test_init_script.py +0 -0
  41. {verifiers-0.2.1.dev12 → verifiers-0.2.1.dev20}/tests/test_install_utils.py +0 -0
  42. {verifiers-0.2.1.dev12 → verifiers-0.2.1.dev20}/tests/test_interception_utils.py +0 -0
  43. {verifiers-0.2.1.dev12 → verifiers-0.2.1.dev20}/tests/test_logging.py +0 -0
  44. {verifiers-0.2.1.dev12 → verifiers-0.2.1.dev20}/tests/test_math_rubric.py +0 -0
  45. {verifiers-0.2.1.dev12 → verifiers-0.2.1.dev20}/tests/test_maybe_think_parser.py +0 -0
  46. {verifiers-0.2.1.dev12 → verifiers-0.2.1.dev20}/tests/test_message_utils.py +0 -0
  47. {verifiers-0.2.1.dev12 → verifiers-0.2.1.dev20}/tests/test_message_utils_multimodal.py +0 -0
  48. {verifiers-0.2.1.dev12 → verifiers-0.2.1.dev20}/tests/test_multiturn_env.py +0 -0
  49. {verifiers-0.2.1.dev12 → verifiers-0.2.1.dev20}/tests/test_nemorl_client.py +0 -0
  50. {verifiers-0.2.1.dev12 → verifiers-0.2.1.dev20}/tests/test_openai_chat_completions_token_client.py +0 -0
  51. {verifiers-0.2.1.dev12 → verifiers-0.2.1.dev20}/tests/test_openai_responses_client.py +0 -0
  52. {verifiers-0.2.1.dev12 → verifiers-0.2.1.dev20}/tests/test_opencode_rlm_env.py +0 -0
  53. {verifiers-0.2.1.dev12 → verifiers-0.2.1.dev20}/tests/test_openenv_client.py +0 -0
  54. {verifiers-0.2.1.dev12 → verifiers-0.2.1.dev20}/tests/test_parser.py +0 -0
  55. {verifiers-0.2.1.dev12 → verifiers-0.2.1.dev20}/tests/test_path_utils.py +0 -0
  56. {verifiers-0.2.1.dev12 → verifiers-0.2.1.dev20}/tests/test_per_turn_timing.py +0 -0
  57. {verifiers-0.2.1.dev12 → verifiers-0.2.1.dev20}/tests/test_pricing_utils.py +0 -0
  58. {verifiers-0.2.1.dev12 → verifiers-0.2.1.dev20}/tests/test_prime_plugin.py +0 -0
  59. {verifiers-0.2.1.dev12 → verifiers-0.2.1.dev20}/tests/test_renderer_client.py +0 -0
  60. {verifiers-0.2.1.dev12 → verifiers-0.2.1.dev20}/tests/test_renderer_e2e.py +0 -0
  61. {verifiers-0.2.1.dev12 → verifiers-0.2.1.dev20}/tests/test_rlm_composable_env.py +0 -0
  62. {verifiers-0.2.1.dev12 → verifiers-0.2.1.dev20}/tests/test_rubric.py +0 -0
  63. {verifiers-0.2.1.dev12 → verifiers-0.2.1.dev20}/tests/test_rubric_group.py +0 -0
  64. {verifiers-0.2.1.dev12 → verifiers-0.2.1.dev20}/tests/test_sandbox_debug_env.py +0 -0
  65. {verifiers-0.2.1.dev12 → verifiers-0.2.1.dev20}/tests/test_sandbox_env.py +0 -0
  66. {verifiers-0.2.1.dev12 → verifiers-0.2.1.dev20}/tests/test_sandbox_mixin.py +0 -0
  67. {verifiers-0.2.1.dev12 → verifiers-0.2.1.dev20}/tests/test_save_utils.py +0 -0
  68. {verifiers-0.2.1.dev12 → verifiers-0.2.1.dev20}/tests/test_setup_script.py +0 -0
  69. {verifiers-0.2.1.dev12 → verifiers-0.2.1.dev20}/tests/test_singleturn_env.py +0 -0
  70. {verifiers-0.2.1.dev12 → verifiers-0.2.1.dev20}/tests/test_stateful_tool_env.py +0 -0
  71. {verifiers-0.2.1.dev12 → verifiers-0.2.1.dev20}/tests/test_think_parser.py +0 -0
  72. {verifiers-0.2.1.dev12 → verifiers-0.2.1.dev20}/tests/test_tool_env.py +0 -0
  73. {verifiers-0.2.1.dev12 → verifiers-0.2.1.dev20}/tests/test_tool_utils.py +0 -0
  74. {verifiers-0.2.1.dev12 → verifiers-0.2.1.dev20}/tests/test_trajectory_processing.py +0 -0
  75. {verifiers-0.2.1.dev12 → verifiers-0.2.1.dev20}/tests/test_tui_info_formatting.py +0 -0
  76. {verifiers-0.2.1.dev12 → verifiers-0.2.1.dev20}/tests/test_types.py +0 -0
  77. {verifiers-0.2.1.dev12 → verifiers-0.2.1.dev20}/tests/test_wordle_env.py +0 -0
  78. {verifiers-0.2.1.dev12 → verifiers-0.2.1.dev20}/tests/test_xml_parser.py +0 -0
  79. {verifiers-0.2.1.dev12 → verifiers-0.2.1.dev20}/tests/v1/conftest.py +0 -0
  80. {verifiers-0.2.1.dev12 → verifiers-0.2.1.dev20}/tests/v1/fixtures/counter_tool_v1.py +0 -0
  81. {verifiers-0.2.1.dev12 → verifiers-0.2.1.dev20}/tests/v1/fixtures/echo_agentic_v1.py +0 -0
  82. {verifiers-0.2.1.dev12 → verifiers-0.2.1.dev20}/tests/v1/fixtures/echo_multi_v0.py +0 -0
  83. {verifiers-0.2.1.dev12 → verifiers-0.2.1.dev20}/tests/v1/fixtures/echo_tool_v1.py +0 -0
  84. {verifiers-0.2.1.dev12 → verifiers-0.2.1.dev20}/tests/v1/fixtures/echo_user_sim_v1.py +0 -0
  85. {verifiers-0.2.1.dev12 → verifiers-0.2.1.dev20}/tests/v1/fixtures/echo_v0.py +0 -0
  86. {verifiers-0.2.1.dev12 → verifiers-0.2.1.dev20}/tests/v1/fixtures/echo_v1.py +0 -0
  87. {verifiers-0.2.1.dev12 → verifiers-0.2.1.dev20}/tests/v1/fixtures/pyproject.toml +0 -0
  88. {verifiers-0.2.1.dev12 → verifiers-0.2.1.dev20}/tests/v1/fixtures/tool_response_image_v1.py +0 -0
  89. {verifiers-0.2.1.dev12 → verifiers-0.2.1.dev20}/tests/v1/test_color_codeword_tasks.py +0 -0
  90. {verifiers-0.2.1.dev12 → verifiers-0.2.1.dev20}/tests/v1/test_configs.py +0 -0
  91. {verifiers-0.2.1.dev12 → verifiers-0.2.1.dev20}/tests/v1/test_e2e.py +0 -0
  92. {verifiers-0.2.1.dev12 → verifiers-0.2.1.dev20}/tests/v1/test_envs.py +0 -0
  93. {verifiers-0.2.1.dev12 → verifiers-0.2.1.dev20}/tests/v1/test_graph.py +0 -0
  94. {verifiers-0.2.1.dev12 → verifiers-0.2.1.dev20}/tests/v1/test_judges.py +0 -0
  95. {verifiers-0.2.1.dev12 → verifiers-0.2.1.dev20}/tests/v1/test_legacy.py +0 -0
  96. {verifiers-0.2.1.dev12 → verifiers-0.2.1.dev20}/tests/v1/test_scoring.py +0 -0
  97. {verifiers-0.2.1.dev12 → verifiers-0.2.1.dev20}/tests/v1/test_trace.py +0 -0
  98. {verifiers-0.2.1.dev12 → verifiers-0.2.1.dev20}/verifiers/__init__.py +0 -0
  99. {verifiers-0.2.1.dev12 → verifiers-0.2.1.dev20}/verifiers/cli/__init__.py +0 -0
  100. {verifiers-0.2.1.dev12 → verifiers-0.2.1.dev20}/verifiers/cli/commands/__init__.py +0 -0
  101. {verifiers-0.2.1.dev12 → verifiers-0.2.1.dev20}/verifiers/cli/commands/build.py +0 -0
  102. {verifiers-0.2.1.dev12 → verifiers-0.2.1.dev20}/verifiers/cli/commands/eval.py +0 -0
  103. {verifiers-0.2.1.dev12 → verifiers-0.2.1.dev20}/verifiers/cli/commands/gepa.py +0 -0
  104. {verifiers-0.2.1.dev12 → verifiers-0.2.1.dev20}/verifiers/cli/commands/init.py +0 -0
  105. {verifiers-0.2.1.dev12 → verifiers-0.2.1.dev20}/verifiers/cli/commands/install.py +0 -0
  106. {verifiers-0.2.1.dev12 → verifiers-0.2.1.dev20}/verifiers/cli/commands/setup.py +0 -0
  107. {verifiers-0.2.1.dev12 → verifiers-0.2.1.dev20}/verifiers/cli/plugins/__init__.py +0 -0
  108. {verifiers-0.2.1.dev12 → verifiers-0.2.1.dev20}/verifiers/cli/plugins/prime.py +0 -0
  109. {verifiers-0.2.1.dev12 → verifiers-0.2.1.dev20}/verifiers/cli/tui.py +0 -0
  110. {verifiers-0.2.1.dev12 → verifiers-0.2.1.dev20}/verifiers/clients/__init__.py +0 -0
  111. {verifiers-0.2.1.dev12 → verifiers-0.2.1.dev20}/verifiers/clients/anthropic_messages_client.py +0 -0
  112. {verifiers-0.2.1.dev12 → verifiers-0.2.1.dev20}/verifiers/clients/client.py +0 -0
  113. {verifiers-0.2.1.dev12 → verifiers-0.2.1.dev20}/verifiers/clients/nemorl_chat_completions_client.py +0 -0
  114. {verifiers-0.2.1.dev12 → verifiers-0.2.1.dev20}/verifiers/clients/openai_chat_completions_client.py +0 -0
  115. {verifiers-0.2.1.dev12 → verifiers-0.2.1.dev20}/verifiers/clients/openai_chat_completions_token_client.py +0 -0
  116. {verifiers-0.2.1.dev12 → verifiers-0.2.1.dev20}/verifiers/clients/openai_completions_client.py +0 -0
  117. {verifiers-0.2.1.dev12 → verifiers-0.2.1.dev20}/verifiers/clients/openai_responses_client.py +0 -0
  118. {verifiers-0.2.1.dev12 → verifiers-0.2.1.dev20}/verifiers/clients/renderer_client.py +0 -0
  119. {verifiers-0.2.1.dev12 → verifiers-0.2.1.dev20}/verifiers/decorators.py +0 -0
  120. {verifiers-0.2.1.dev12 → verifiers-0.2.1.dev20}/verifiers/envs/AGENTS.md +0 -0
  121. {verifiers-0.2.1.dev12 → verifiers-0.2.1.dev20}/verifiers/envs/__init__.py +0 -0
  122. {verifiers-0.2.1.dev12 → verifiers-0.2.1.dev20}/verifiers/envs/env_group.py +0 -0
  123. {verifiers-0.2.1.dev12 → verifiers-0.2.1.dev20}/verifiers/envs/environment.py +0 -0
  124. {verifiers-0.2.1.dev12 → verifiers-0.2.1.dev20}/verifiers/envs/experimental/README.md +0 -0
  125. {verifiers-0.2.1.dev12 → verifiers-0.2.1.dev20}/verifiers/envs/experimental/__init__.py +0 -0
  126. {verifiers-0.2.1.dev12 → verifiers-0.2.1.dev20}/verifiers/envs/experimental/cli_agent_env.py +0 -0
  127. {verifiers-0.2.1.dev12 → verifiers-0.2.1.dev20}/verifiers/envs/experimental/composable/README.md +0 -0
  128. {verifiers-0.2.1.dev12 → verifiers-0.2.1.dev20}/verifiers/envs/experimental/composable/__init__.py +0 -0
  129. {verifiers-0.2.1.dev12 → verifiers-0.2.1.dev20}/verifiers/envs/experimental/composable/_filter.py +0 -0
  130. {verifiers-0.2.1.dev12 → verifiers-0.2.1.dev20}/verifiers/envs/experimental/composable/composable_env.py +0 -0
  131. {verifiers-0.2.1.dev12 → verifiers-0.2.1.dev20}/verifiers/envs/experimental/composable/harness.py +0 -0
  132. {verifiers-0.2.1.dev12 → verifiers-0.2.1.dev20}/verifiers/envs/experimental/composable/harnesses/__init__.py +0 -0
  133. {verifiers-0.2.1.dev12 → verifiers-0.2.1.dev20}/verifiers/envs/experimental/composable/harnesses/mini_swe_agent.py +0 -0
  134. {verifiers-0.2.1.dev12 → verifiers-0.2.1.dev20}/verifiers/envs/experimental/composable/harnesses/opencode.py +0 -0
  135. {verifiers-0.2.1.dev12 → verifiers-0.2.1.dev20}/verifiers/envs/experimental/composable/harnesses/prompt.txt +0 -0
  136. {verifiers-0.2.1.dev12 → verifiers-0.2.1.dev20}/verifiers/envs/experimental/composable/harnesses/rlm.py +0 -0
  137. {verifiers-0.2.1.dev12 → verifiers-0.2.1.dev20}/verifiers/envs/experimental/composable/sandbox_debug_env.py +0 -0
  138. {verifiers-0.2.1.dev12 → verifiers-0.2.1.dev20}/verifiers/envs/experimental/composable/swe_debug_env.py +0 -0
  139. {verifiers-0.2.1.dev12 → verifiers-0.2.1.dev20}/verifiers/envs/experimental/composable/task.py +0 -0
  140. {verifiers-0.2.1.dev12 → verifiers-0.2.1.dev20}/verifiers/envs/experimental/composable/tasksets/__init__.py +0 -0
  141. {verifiers-0.2.1.dev12 → verifiers-0.2.1.dev20}/verifiers/envs/experimental/composable/tasksets/cp/__init__.py +0 -0
  142. {verifiers-0.2.1.dev12 → verifiers-0.2.1.dev20}/verifiers/envs/experimental/composable/tasksets/cp/cp_task.py +0 -0
  143. {verifiers-0.2.1.dev12 → verifiers-0.2.1.dev20}/verifiers/envs/experimental/composable/tasksets/cp/test_utils.py +0 -0
  144. {verifiers-0.2.1.dev12 → verifiers-0.2.1.dev20}/verifiers/envs/experimental/composable/tasksets/harbor/__init__.py +0 -0
  145. {verifiers-0.2.1.dev12 → verifiers-0.2.1.dev20}/verifiers/envs/experimental/composable/tasksets/harbor/cli_gym.py +0 -0
  146. {verifiers-0.2.1.dev12 → verifiers-0.2.1.dev20}/verifiers/envs/experimental/composable/tasksets/harbor/harbor.py +0 -0
  147. {verifiers-0.2.1.dev12 → verifiers-0.2.1.dev20}/verifiers/envs/experimental/composable/tasksets/harbor/terminal_lego.py +0 -0
  148. {verifiers-0.2.1.dev12 → verifiers-0.2.1.dev20}/verifiers/envs/experimental/composable/tasksets/math/__init__.py +0 -0
  149. {verifiers-0.2.1.dev12 → verifiers-0.2.1.dev20}/verifiers/envs/experimental/composable/tasksets/math/math_task.py +0 -0
  150. {verifiers-0.2.1.dev12 → verifiers-0.2.1.dev20}/verifiers/envs/experimental/composable/tasksets/search/README.md +0 -0
  151. {verifiers-0.2.1.dev12 → verifiers-0.2.1.dev20}/verifiers/envs/experimental/composable/tasksets/search/__init__.py +0 -0
  152. {verifiers-0.2.1.dev12 → verifiers-0.2.1.dev20}/verifiers/envs/experimental/composable/tasksets/search/openseeker/README.md +0 -0
  153. {verifiers-0.2.1.dev12 → verifiers-0.2.1.dev20}/verifiers/envs/experimental/composable/tasksets/search/openseeker/__init__.py +0 -0
  154. {verifiers-0.2.1.dev12 → verifiers-0.2.1.dev20}/verifiers/envs/experimental/composable/tasksets/search/openseeker/taskset.py +0 -0
  155. {verifiers-0.2.1.dev12 → verifiers-0.2.1.dev20}/verifiers/envs/experimental/composable/tasksets/search/quest/README.md +0 -0
  156. {verifiers-0.2.1.dev12 → verifiers-0.2.1.dev20}/verifiers/envs/experimental/composable/tasksets/search/quest/__init__.py +0 -0
  157. {verifiers-0.2.1.dev12 → verifiers-0.2.1.dev20}/verifiers/envs/experimental/composable/tasksets/search/quest/obj_task_eval/__init__.py +0 -0
  158. {verifiers-0.2.1.dev12 → verifiers-0.2.1.dev20}/verifiers/envs/experimental/composable/tasksets/search/quest/obj_task_eval/api_tools/__init__.py +0 -0
  159. {verifiers-0.2.1.dev12 → verifiers-0.2.1.dev20}/verifiers/envs/experimental/composable/tasksets/search/quest/obj_task_eval/api_tools/tool_pdf.py +0 -0
  160. {verifiers-0.2.1.dev12 → verifiers-0.2.1.dev20}/verifiers/envs/experimental/composable/tasksets/search/quest/obj_task_eval/eval_toolkit.py +0 -0
  161. {verifiers-0.2.1.dev12 → verifiers-0.2.1.dev20}/verifiers/envs/experimental/composable/tasksets/search/quest/obj_task_eval/evaluator.py +0 -0
  162. {verifiers-0.2.1.dev12 → verifiers-0.2.1.dev20}/verifiers/envs/experimental/composable/tasksets/search/quest/obj_task_eval/llm_client/__init__.py +0 -0
  163. {verifiers-0.2.1.dev12 → verifiers-0.2.1.dev20}/verifiers/envs/experimental/composable/tasksets/search/quest/obj_task_eval/llm_client/base_client.py +0 -0
  164. {verifiers-0.2.1.dev12 → verifiers-0.2.1.dev20}/verifiers/envs/experimental/composable/tasksets/search/quest/obj_task_eval/prompts/__init__.py +0 -0
  165. {verifiers-0.2.1.dev12 → verifiers-0.2.1.dev20}/verifiers/envs/experimental/composable/tasksets/search/quest/obj_task_eval/prompts/cache_prompts.py +0 -0
  166. {verifiers-0.2.1.dev12 → verifiers-0.2.1.dev20}/verifiers/envs/experimental/composable/tasksets/search/quest/obj_task_eval/utils/__init__.py +0 -0
  167. {verifiers-0.2.1.dev12 → verifiers-0.2.1.dev20}/verifiers/envs/experimental/composable/tasksets/search/quest/obj_task_eval/utils/cache_filesys.py +0 -0
  168. {verifiers-0.2.1.dev12 → verifiers-0.2.1.dev20}/verifiers/envs/experimental/composable/tasksets/search/quest/obj_task_eval/utils/load_eval_script.py +0 -0
  169. {verifiers-0.2.1.dev12 → verifiers-0.2.1.dev20}/verifiers/envs/experimental/composable/tasksets/search/quest/obj_task_eval/utils/misc.py +0 -0
  170. {verifiers-0.2.1.dev12 → verifiers-0.2.1.dev20}/verifiers/envs/experimental/composable/tasksets/search/quest/obj_task_eval/utils/tool_visit.py +0 -0
  171. {verifiers-0.2.1.dev12 → verifiers-0.2.1.dev20}/verifiers/envs/experimental/composable/tasksets/search/quest/obj_task_eval/utils/url_tools.py +0 -0
  172. {verifiers-0.2.1.dev12 → verifiers-0.2.1.dev20}/verifiers/envs/experimental/composable/tasksets/search/quest/obj_task_eval/verification_tree.py +0 -0
  173. {verifiers-0.2.1.dev12 → verifiers-0.2.1.dev20}/verifiers/envs/experimental/composable/tasksets/search/quest/open_ended.py +0 -0
  174. {verifiers-0.2.1.dev12 → verifiers-0.2.1.dev20}/verifiers/envs/experimental/composable/tasksets/search/quest/taskset.py +0 -0
  175. {verifiers-0.2.1.dev12 → verifiers-0.2.1.dev20}/verifiers/envs/experimental/composable/tasksets/search/redsearcher/README.md +0 -0
  176. {verifiers-0.2.1.dev12 → verifiers-0.2.1.dev20}/verifiers/envs/experimental/composable/tasksets/search/redsearcher/__init__.py +0 -0
  177. {verifiers-0.2.1.dev12 → verifiers-0.2.1.dev20}/verifiers/envs/experimental/composable/tasksets/search/redsearcher/taskset.py +0 -0
  178. {verifiers-0.2.1.dev12 → verifiers-0.2.1.dev20}/verifiers/envs/experimental/composable/tasksets/search/search_tasksets.py +0 -0
  179. {verifiers-0.2.1.dev12 → verifiers-0.2.1.dev20}/verifiers/envs/experimental/composable/tasksets/swe/README.md +0 -0
  180. {verifiers-0.2.1.dev12 → verifiers-0.2.1.dev20}/verifiers/envs/experimental/composable/tasksets/swe/__init__.py +0 -0
  181. {verifiers-0.2.1.dev12 → verifiers-0.2.1.dev20}/verifiers/envs/experimental/composable/tasksets/swe/multi_swe/__init__.py +0 -0
  182. {verifiers-0.2.1.dev12 → verifiers-0.2.1.dev20}/verifiers/envs/experimental/composable/tasksets/swe/multi_swe/extract_fix_patch.sh +0 -0
  183. {verifiers-0.2.1.dev12 → verifiers-0.2.1.dev20}/verifiers/envs/experimental/composable/tasksets/swe/multi_swe/taskset.py +0 -0
  184. {verifiers-0.2.1.dev12 → verifiers-0.2.1.dev20}/verifiers/envs/experimental/composable/tasksets/swe/openswe/__init__.py +0 -0
  185. {verifiers-0.2.1.dev12 → verifiers-0.2.1.dev20}/verifiers/envs/experimental/composable/tasksets/swe/openswe/taskset.py +0 -0
  186. {verifiers-0.2.1.dev12 → verifiers-0.2.1.dev20}/verifiers/envs/experimental/composable/tasksets/swe/r2e_gym/__init__.py +0 -0
  187. {verifiers-0.2.1.dev12 → verifiers-0.2.1.dev20}/verifiers/envs/experimental/composable/tasksets/swe/r2e_gym/log_parser.py +0 -0
  188. {verifiers-0.2.1.dev12 → verifiers-0.2.1.dev20}/verifiers/envs/experimental/composable/tasksets/swe/r2e_gym/taskset.py +0 -0
  189. {verifiers-0.2.1.dev12 → verifiers-0.2.1.dev20}/verifiers/envs/experimental/composable/tasksets/swe/scale_swe/__init__.py +0 -0
  190. {verifiers-0.2.1.dev12 → verifiers-0.2.1.dev20}/verifiers/envs/experimental/composable/tasksets/swe/scale_swe/taskset.py +0 -0
  191. {verifiers-0.2.1.dev12 → verifiers-0.2.1.dev20}/verifiers/envs/experimental/composable/tasksets/swe/shared/__init__.py +0 -0
  192. {verifiers-0.2.1.dev12 → verifiers-0.2.1.dev20}/verifiers/envs/experimental/composable/tasksets/swe/shared/test_patch.py +0 -0
  193. {verifiers-0.2.1.dev12 → verifiers-0.2.1.dev20}/verifiers/envs/experimental/composable/tasksets/swe/swe_bench/__init__.py +0 -0
  194. {verifiers-0.2.1.dev12 → verifiers-0.2.1.dev20}/verifiers/envs/experimental/composable/tasksets/swe/swe_bench/taskset.py +0 -0
  195. {verifiers-0.2.1.dev12 → verifiers-0.2.1.dev20}/verifiers/envs/experimental/composable/tasksets/swe/swe_lego/__init__.py +0 -0
  196. {verifiers-0.2.1.dev12 → verifiers-0.2.1.dev20}/verifiers/envs/experimental/composable/tasksets/swe/swe_lego/taskset.py +0 -0
  197. {verifiers-0.2.1.dev12 → verifiers-0.2.1.dev20}/verifiers/envs/experimental/composable/tasksets/swe/swe_rebench_v2/__init__.py +0 -0
  198. {verifiers-0.2.1.dev12 → verifiers-0.2.1.dev20}/verifiers/envs/experimental/composable/tasksets/swe/swe_rebench_v2/log_parsers.py +0 -0
  199. {verifiers-0.2.1.dev12 → verifiers-0.2.1.dev20}/verifiers/envs/experimental/composable/tasksets/swe/swe_rebench_v2/taskset.py +0 -0
  200. {verifiers-0.2.1.dev12 → verifiers-0.2.1.dev20}/verifiers/envs/experimental/composable/tasksets/swe/swe_smith/__init__.py +0 -0
  201. {verifiers-0.2.1.dev12 → verifiers-0.2.1.dev20}/verifiers/envs/experimental/composable/tasksets/swe/swe_smith/taskset.py +0 -0
  202. {verifiers-0.2.1.dev12 → verifiers-0.2.1.dev20}/verifiers/envs/experimental/composable/tasksets/swe/swe_tasksets.py +0 -0
  203. {verifiers-0.2.1.dev12 → verifiers-0.2.1.dev20}/verifiers/envs/experimental/gym_env.py +0 -0
  204. {verifiers-0.2.1.dev12 → verifiers-0.2.1.dev20}/verifiers/envs/experimental/harbor_env/__init__.py +0 -0
  205. {verifiers-0.2.1.dev12 → verifiers-0.2.1.dev20}/verifiers/envs/experimental/harbor_env/env.py +0 -0
  206. {verifiers-0.2.1.dev12 → verifiers-0.2.1.dev20}/verifiers/envs/experimental/harbor_env/mcp.py +0 -0
  207. {verifiers-0.2.1.dev12 → verifiers-0.2.1.dev20}/verifiers/envs/experimental/mcp_env.py +0 -0
  208. {verifiers-0.2.1.dev12 → verifiers-0.2.1.dev20}/verifiers/envs/experimental/opencode_env.py +0 -0
  209. {verifiers-0.2.1.dev12 → verifiers-0.2.1.dev20}/verifiers/envs/experimental/opencode_qa_env.py +0 -0
  210. {verifiers-0.2.1.dev12 → verifiers-0.2.1.dev20}/verifiers/envs/experimental/opencode_rlm_env.py +0 -0
  211. {verifiers-0.2.1.dev12 → verifiers-0.2.1.dev20}/verifiers/envs/experimental/sandbox_mixin.py +0 -0
  212. {verifiers-0.2.1.dev12 → verifiers-0.2.1.dev20}/verifiers/envs/experimental/utils/__init__.py +0 -0
  213. {verifiers-0.2.1.dev12 → verifiers-0.2.1.dev20}/verifiers/envs/experimental/utils/file_locks.py +0 -0
  214. {verifiers-0.2.1.dev12 → verifiers-0.2.1.dev20}/verifiers/envs/experimental/utils/git_checkout_cache.py +0 -0
  215. {verifiers-0.2.1.dev12 → verifiers-0.2.1.dev20}/verifiers/envs/integrations/README.md +0 -0
  216. {verifiers-0.2.1.dev12 → verifiers-0.2.1.dev20}/verifiers/envs/integrations/__init__.py +0 -0
  217. {verifiers-0.2.1.dev12 → verifiers-0.2.1.dev20}/verifiers/envs/integrations/browser_env/README.md +0 -0
  218. {verifiers-0.2.1.dev12 → verifiers-0.2.1.dev20}/verifiers/envs/integrations/browser_env/__init__.py +0 -0
  219. {verifiers-0.2.1.dev12 → verifiers-0.2.1.dev20}/verifiers/envs/integrations/browser_env/browser_env.py +0 -0
  220. {verifiers-0.2.1.dev12 → verifiers-0.2.1.dev20}/verifiers/envs/integrations/browser_env/modes/__init__.py +0 -0
  221. {verifiers-0.2.1.dev12 → verifiers-0.2.1.dev20}/verifiers/envs/integrations/browser_env/modes/base.py +0 -0
  222. {verifiers-0.2.1.dev12 → verifiers-0.2.1.dev20}/verifiers/envs/integrations/browser_env/modes/cua_mode.py +0 -0
  223. {verifiers-0.2.1.dev12 → verifiers-0.2.1.dev20}/verifiers/envs/integrations/browser_env/modes/dom_mode.py +0 -0
  224. {verifiers-0.2.1.dev12 → verifiers-0.2.1.dev20}/verifiers/envs/integrations/openenv_env.py +0 -0
  225. {verifiers-0.2.1.dev12 → verifiers-0.2.1.dev20}/verifiers/envs/integrations/reasoninggym_env.py +0 -0
  226. {verifiers-0.2.1.dev12 → verifiers-0.2.1.dev20}/verifiers/envs/integrations/textarena_env.py +0 -0
  227. {verifiers-0.2.1.dev12 → verifiers-0.2.1.dev20}/verifiers/envs/multiturn_env.py +0 -0
  228. {verifiers-0.2.1.dev12 → verifiers-0.2.1.dev20}/verifiers/envs/python_env.py +0 -0
  229. {verifiers-0.2.1.dev12 → verifiers-0.2.1.dev20}/verifiers/envs/sandbox_env.py +0 -0
  230. {verifiers-0.2.1.dev12 → verifiers-0.2.1.dev20}/verifiers/envs/singleturn_env.py +0 -0
  231. {verifiers-0.2.1.dev12 → verifiers-0.2.1.dev20}/verifiers/envs/stateful_tool_env.py +0 -0
  232. {verifiers-0.2.1.dev12 → verifiers-0.2.1.dev20}/verifiers/envs/tool_env.py +0 -0
  233. {verifiers-0.2.1.dev12 → verifiers-0.2.1.dev20}/verifiers/errors.py +0 -0
  234. {verifiers-0.2.1.dev12 → verifiers-0.2.1.dev20}/verifiers/gepa/__init__.py +0 -0
  235. {verifiers-0.2.1.dev12 → verifiers-0.2.1.dev20}/verifiers/gepa/adapter.py +0 -0
  236. {verifiers-0.2.1.dev12 → verifiers-0.2.1.dev20}/verifiers/gepa/config.py +0 -0
  237. {verifiers-0.2.1.dev12 → verifiers-0.2.1.dev20}/verifiers/gepa/display.py +0 -0
  238. {verifiers-0.2.1.dev12 → verifiers-0.2.1.dev20}/verifiers/gepa/gepa_utils.py +0 -0
  239. {verifiers-0.2.1.dev12 → verifiers-0.2.1.dev20}/verifiers/parsers/__init__.py +0 -0
  240. {verifiers-0.2.1.dev12 → verifiers-0.2.1.dev20}/verifiers/parsers/maybe_think_parser.py +0 -0
  241. {verifiers-0.2.1.dev12 → verifiers-0.2.1.dev20}/verifiers/parsers/parser.py +0 -0
  242. {verifiers-0.2.1.dev12 → verifiers-0.2.1.dev20}/verifiers/parsers/think_parser.py +0 -0
  243. {verifiers-0.2.1.dev12 → verifiers-0.2.1.dev20}/verifiers/parsers/xml_parser.py +0 -0
  244. {verifiers-0.2.1.dev12 → verifiers-0.2.1.dev20}/verifiers/rubrics/__init__.py +0 -0
  245. {verifiers-0.2.1.dev12 → verifiers-0.2.1.dev20}/verifiers/rubrics/experimental/hybrid_math_rubric.py +0 -0
  246. {verifiers-0.2.1.dev12 → verifiers-0.2.1.dev20}/verifiers/rubrics/judge_rubric.py +0 -0
  247. {verifiers-0.2.1.dev12 → verifiers-0.2.1.dev20}/verifiers/rubrics/math_rubric.py +0 -0
  248. {verifiers-0.2.1.dev12 → verifiers-0.2.1.dev20}/verifiers/rubrics/rubric.py +0 -0
  249. {verifiers-0.2.1.dev12 → verifiers-0.2.1.dev20}/verifiers/rubrics/rubric_group.py +0 -0
  250. {verifiers-0.2.1.dev12 → verifiers-0.2.1.dev20}/verifiers/scripts/__init__.py +0 -0
  251. {verifiers-0.2.1.dev12 → verifiers-0.2.1.dev20}/verifiers/scripts/build.py +0 -0
  252. {verifiers-0.2.1.dev12 → verifiers-0.2.1.dev20}/verifiers/scripts/eval.py +0 -0
  253. {verifiers-0.2.1.dev12 → verifiers-0.2.1.dev20}/verifiers/scripts/gepa.py +0 -0
  254. {verifiers-0.2.1.dev12 → verifiers-0.2.1.dev20}/verifiers/scripts/init.py +0 -0
  255. {verifiers-0.2.1.dev12 → verifiers-0.2.1.dev20}/verifiers/scripts/install.py +0 -0
  256. {verifiers-0.2.1.dev12 → verifiers-0.2.1.dev20}/verifiers/scripts/setup.py +0 -0
  257. {verifiers-0.2.1.dev12 → verifiers-0.2.1.dev20}/verifiers/scripts/tui.py +0 -0
  258. {verifiers-0.2.1.dev12 → verifiers-0.2.1.dev20}/verifiers/serve/__init__.py +0 -0
  259. {verifiers-0.2.1.dev12 → verifiers-0.2.1.dev20}/verifiers/serve/client/env_client.py +0 -0
  260. {verifiers-0.2.1.dev12 → verifiers-0.2.1.dev20}/verifiers/serve/client/zmq_env_client.py +0 -0
  261. {verifiers-0.2.1.dev12 → verifiers-0.2.1.dev20}/verifiers/serve/server/__init__.py +0 -0
  262. {verifiers-0.2.1.dev12 → verifiers-0.2.1.dev20}/verifiers/serve/server/env_router.py +0 -0
  263. {verifiers-0.2.1.dev12 → verifiers-0.2.1.dev20}/verifiers/serve/server/env_server.py +0 -0
  264. {verifiers-0.2.1.dev12 → verifiers-0.2.1.dev20}/verifiers/serve/server/env_worker.py +0 -0
  265. {verifiers-0.2.1.dev12 → verifiers-0.2.1.dev20}/verifiers/serve/server/zmq_env_server.py +0 -0
  266. {verifiers-0.2.1.dev12 → verifiers-0.2.1.dev20}/verifiers/serve/types.py +0 -0
  267. {verifiers-0.2.1.dev12 → verifiers-0.2.1.dev20}/verifiers/types.py +0 -0
  268. {verifiers-0.2.1.dev12 → verifiers-0.2.1.dev20}/verifiers/utils/__init__.py +0 -0
  269. {verifiers-0.2.1.dev12 → verifiers-0.2.1.dev20}/verifiers/utils/async_utils.py +0 -0
  270. {verifiers-0.2.1.dev12 → verifiers-0.2.1.dev20}/verifiers/utils/client_utils.py +0 -0
  271. {verifiers-0.2.1.dev12 → verifiers-0.2.1.dev20}/verifiers/utils/config_utils.py +0 -0
  272. {verifiers-0.2.1.dev12 → verifiers-0.2.1.dev20}/verifiers/utils/data_utils.py +0 -0
  273. {verifiers-0.2.1.dev12 → verifiers-0.2.1.dev20}/verifiers/utils/display_utils.py +0 -0
  274. {verifiers-0.2.1.dev12 → verifiers-0.2.1.dev20}/verifiers/utils/env_config_utils.py +0 -0
  275. {verifiers-0.2.1.dev12 → verifiers-0.2.1.dev20}/verifiers/utils/env_utils.py +0 -0
  276. {verifiers-0.2.1.dev12 → verifiers-0.2.1.dev20}/verifiers/utils/error_utils.py +0 -0
  277. {verifiers-0.2.1.dev12 → verifiers-0.2.1.dev20}/verifiers/utils/eval_display.py +0 -0
  278. {verifiers-0.2.1.dev12 → verifiers-0.2.1.dev20}/verifiers/utils/eval_utils.py +0 -0
  279. {verifiers-0.2.1.dev12 → verifiers-0.2.1.dev20}/verifiers/utils/heartbeat.py +0 -0
  280. {verifiers-0.2.1.dev12 → verifiers-0.2.1.dev20}/verifiers/utils/import_utils.py +0 -0
  281. {verifiers-0.2.1.dev12 → verifiers-0.2.1.dev20}/verifiers/utils/install_utils.py +0 -0
  282. {verifiers-0.2.1.dev12 → verifiers-0.2.1.dev20}/verifiers/utils/interception_utils.py +0 -0
  283. {verifiers-0.2.1.dev12 → verifiers-0.2.1.dev20}/verifiers/utils/logging_utils.py +0 -0
  284. {verifiers-0.2.1.dev12 → verifiers-0.2.1.dev20}/verifiers/utils/message_utils.py +0 -0
  285. {verifiers-0.2.1.dev12 → verifiers-0.2.1.dev20}/verifiers/utils/metric_utils.py +0 -0
  286. {verifiers-0.2.1.dev12 → verifiers-0.2.1.dev20}/verifiers/utils/path_utils.py +0 -0
  287. {verifiers-0.2.1.dev12 → verifiers-0.2.1.dev20}/verifiers/utils/pricing_utils.py +0 -0
  288. {verifiers-0.2.1.dev12 → verifiers-0.2.1.dev20}/verifiers/utils/process_utils.py +0 -0
  289. {verifiers-0.2.1.dev12 → verifiers-0.2.1.dev20}/verifiers/utils/response_utils.py +0 -0
  290. {verifiers-0.2.1.dev12 → verifiers-0.2.1.dev20}/verifiers/utils/save_utils.py +0 -0
  291. {verifiers-0.2.1.dev12 → verifiers-0.2.1.dev20}/verifiers/utils/serve_utils.py +0 -0
  292. {verifiers-0.2.1.dev12 → verifiers-0.2.1.dev20}/verifiers/utils/thread_utils.py +0 -0
  293. {verifiers-0.2.1.dev12 → verifiers-0.2.1.dev20}/verifiers/utils/threaded_sandbox_client.py +0 -0
  294. {verifiers-0.2.1.dev12 → verifiers-0.2.1.dev20}/verifiers/utils/tool_utils.py +0 -0
  295. {verifiers-0.2.1.dev12 → verifiers-0.2.1.dev20}/verifiers/utils/usage_utils.py +0 -0
  296. {verifiers-0.2.1.dev12 → verifiers-0.2.1.dev20}/verifiers/utils/version_utils.py +0 -0
  297. {verifiers-0.2.1.dev12 → verifiers-0.2.1.dev20}/verifiers/v1/cli/__init__.py +0 -0
  298. {verifiers-0.2.1.dev12 → verifiers-0.2.1.dev20}/verifiers/v1/cli/dashboard/__init__.py +0 -0
  299. {verifiers-0.2.1.dev12 → verifiers-0.2.1.dev20}/verifiers/v1/cli/dashboard/base.py +0 -0
  300. {verifiers-0.2.1.dev12 → verifiers-0.2.1.dev20}/verifiers/v1/cli/dashboard/replay.py +0 -0
  301. {verifiers-0.2.1.dev12 → verifiers-0.2.1.dev20}/verifiers/v1/cli/dashboard/validate.py +0 -0
  302. {verifiers-0.2.1.dev12 → verifiers-0.2.1.dev20}/verifiers/v1/cli/eval/__init__.py +0 -0
  303. {verifiers-0.2.1.dev12 → verifiers-0.2.1.dev20}/verifiers/v1/cli/eval/main.py +0 -0
  304. {verifiers-0.2.1.dev12 → verifiers-0.2.1.dev20}/verifiers/v1/cli/eval/resume.py +0 -0
  305. {verifiers-0.2.1.dev12 → verifiers-0.2.1.dev20}/verifiers/v1/cli/eval/runner.py +0 -0
  306. {verifiers-0.2.1.dev12 → verifiers-0.2.1.dev20}/verifiers/v1/cli/gepa.py +0 -0
  307. {verifiers-0.2.1.dev12 → verifiers-0.2.1.dev20}/verifiers/v1/cli/init.py +0 -0
  308. {verifiers-0.2.1.dev12 → verifiers-0.2.1.dev20}/verifiers/v1/cli/output.py +0 -0
  309. {verifiers-0.2.1.dev12 → verifiers-0.2.1.dev20}/verifiers/v1/cli/replay.py +0 -0
  310. {verifiers-0.2.1.dev12 → verifiers-0.2.1.dev20}/verifiers/v1/cli/resolve.py +0 -0
  311. {verifiers-0.2.1.dev12 → verifiers-0.2.1.dev20}/verifiers/v1/cli/serve.py +0 -0
  312. {verifiers-0.2.1.dev12 → verifiers-0.2.1.dev20}/verifiers/v1/cli/validate.py +0 -0
  313. {verifiers-0.2.1.dev12 → verifiers-0.2.1.dev20}/verifiers/v1/clients/__init__.py +0 -0
  314. {verifiers-0.2.1.dev12 → verifiers-0.2.1.dev20}/verifiers/v1/clients/client.py +0 -0
  315. {verifiers-0.2.1.dev12 → verifiers-0.2.1.dev20}/verifiers/v1/clients/config.py +0 -0
  316. {verifiers-0.2.1.dev12 → verifiers-0.2.1.dev20}/verifiers/v1/clients/eval.py +0 -0
  317. {verifiers-0.2.1.dev12 → verifiers-0.2.1.dev20}/verifiers/v1/configs/__init__.py +0 -0
  318. {verifiers-0.2.1.dev12 → verifiers-0.2.1.dev20}/verifiers/v1/configs/debug.py +0 -0
  319. {verifiers-0.2.1.dev12 → verifiers-0.2.1.dev20}/verifiers/v1/configs/eval.py +0 -0
  320. {verifiers-0.2.1.dev12 → verifiers-0.2.1.dev20}/verifiers/v1/configs/init.py +0 -0
  321. {verifiers-0.2.1.dev12 → verifiers-0.2.1.dev20}/verifiers/v1/configs/replay.py +0 -0
  322. {verifiers-0.2.1.dev12 → verifiers-0.2.1.dev20}/verifiers/v1/configs/serve.py +0 -0
  323. {verifiers-0.2.1.dev12 → verifiers-0.2.1.dev20}/verifiers/v1/configs/validate.py +0 -0
  324. {verifiers-0.2.1.dev12 → verifiers-0.2.1.dev20}/verifiers/v1/decorators.py +0 -0
  325. {verifiers-0.2.1.dev12 → verifiers-0.2.1.dev20}/verifiers/v1/dialects/__init__.py +0 -0
  326. {verifiers-0.2.1.dev12 → verifiers-0.2.1.dev20}/verifiers/v1/dialects/anthropic.py +0 -0
  327. {verifiers-0.2.1.dev12 → verifiers-0.2.1.dev20}/verifiers/v1/dialects/base.py +0 -0
  328. {verifiers-0.2.1.dev12 → verifiers-0.2.1.dev20}/verifiers/v1/dialects/chat.py +0 -0
  329. {verifiers-0.2.1.dev12 → verifiers-0.2.1.dev20}/verifiers/v1/dialects/responses.py +0 -0
  330. {verifiers-0.2.1.dev12 → verifiers-0.2.1.dev20}/verifiers/v1/env.py +0 -0
  331. {verifiers-0.2.1.dev12 → verifiers-0.2.1.dev20}/verifiers/v1/episode.py +0 -0
  332. {verifiers-0.2.1.dev12 → verifiers-0.2.1.dev20}/verifiers/v1/errors.py +0 -0
  333. {verifiers-0.2.1.dev12 → verifiers-0.2.1.dev20}/verifiers/v1/gepa/__init__.py +0 -0
  334. {verifiers-0.2.1.dev12 → verifiers-0.2.1.dev20}/verifiers/v1/gepa/adapter.py +0 -0
  335. {verifiers-0.2.1.dev12 → verifiers-0.2.1.dev20}/verifiers/v1/gepa/config.py +0 -0
  336. {verifiers-0.2.1.dev12 → verifiers-0.2.1.dev20}/verifiers/v1/gepa/dataset.py +0 -0
  337. {verifiers-0.2.1.dev12 → verifiers-0.2.1.dev20}/verifiers/v1/gepa/reflection.py +0 -0
  338. {verifiers-0.2.1.dev12 → verifiers-0.2.1.dev20}/verifiers/v1/gepa/runner.py +0 -0
  339. {verifiers-0.2.1.dev12 → verifiers-0.2.1.dev20}/verifiers/v1/harness.py +0 -0
  340. {verifiers-0.2.1.dev12 → verifiers-0.2.1.dev20}/verifiers/v1/harnesses/__init__.py +0 -0
  341. {verifiers-0.2.1.dev12 → verifiers-0.2.1.dev20}/verifiers/v1/harnesses/codex/__init__.py +0 -0
  342. {verifiers-0.2.1.dev12 → verifiers-0.2.1.dev20}/verifiers/v1/harnesses/codex/harness.py +0 -0
  343. {verifiers-0.2.1.dev12 → verifiers-0.2.1.dev20}/verifiers/v1/harnesses/default/__init__.py +0 -0
  344. {verifiers-0.2.1.dev12 → verifiers-0.2.1.dev20}/verifiers/v1/harnesses/default/harness.py +0 -0
  345. {verifiers-0.2.1.dev12 → verifiers-0.2.1.dev20}/verifiers/v1/harnesses/default/program.py +0 -0
  346. {verifiers-0.2.1.dev12 → verifiers-0.2.1.dev20}/verifiers/v1/harnesses/kimi_code/__init__.py +0 -0
  347. {verifiers-0.2.1.dev12 → verifiers-0.2.1.dev20}/verifiers/v1/harnesses/kimi_code/harness.py +0 -0
  348. {verifiers-0.2.1.dev12 → verifiers-0.2.1.dev20}/verifiers/v1/harnesses/mini_swe_agent/__init__.py +0 -0
  349. {verifiers-0.2.1.dev12 → verifiers-0.2.1.dev20}/verifiers/v1/harnesses/mini_swe_agent/harness.py +0 -0
  350. {verifiers-0.2.1.dev12 → verifiers-0.2.1.dev20}/verifiers/v1/harnesses/mini_swe_agent/program.py +0 -0
  351. {verifiers-0.2.1.dev12 → verifiers-0.2.1.dev20}/verifiers/v1/harnesses/null/__init__.py +0 -0
  352. {verifiers-0.2.1.dev12 → verifiers-0.2.1.dev20}/verifiers/v1/harnesses/null/harness.py +0 -0
  353. {verifiers-0.2.1.dev12 → verifiers-0.2.1.dev20}/verifiers/v1/harnesses/null/program.py +0 -0
  354. {verifiers-0.2.1.dev12 → verifiers-0.2.1.dev20}/verifiers/v1/harnesses/rlm/__init__.py +0 -0
  355. {verifiers-0.2.1.dev12 → verifiers-0.2.1.dev20}/verifiers/v1/harnesses/rlm/harness.py +0 -0
  356. {verifiers-0.2.1.dev12 → verifiers-0.2.1.dev20}/verifiers/v1/harnesses/terminus_2/__init__.py +0 -0
  357. {verifiers-0.2.1.dev12 → verifiers-0.2.1.dev20}/verifiers/v1/harnesses/terminus_2/harness.py +0 -0
  358. {verifiers-0.2.1.dev12 → verifiers-0.2.1.dev20}/verifiers/v1/harnesses/terminus_2/program.py +0 -0
  359. {verifiers-0.2.1.dev12 → verifiers-0.2.1.dev20}/verifiers/v1/interception/__init__.py +0 -0
  360. {verifiers-0.2.1.dev12 → verifiers-0.2.1.dev20}/verifiers/v1/interception/pool.py +0 -0
  361. {verifiers-0.2.1.dev12 → verifiers-0.2.1.dev20}/verifiers/v1/interception/server.py +0 -0
  362. {verifiers-0.2.1.dev12 → verifiers-0.2.1.dev20}/verifiers/v1/judge.py +0 -0
  363. {verifiers-0.2.1.dev12 → verifiers-0.2.1.dev20}/verifiers/v1/judges/__init__.py +0 -0
  364. {verifiers-0.2.1.dev12 → verifiers-0.2.1.dev20}/verifiers/v1/judges/reference.py +0 -0
  365. {verifiers-0.2.1.dev12 → verifiers-0.2.1.dev20}/verifiers/v1/judges/reference.txt +0 -0
  366. {verifiers-0.2.1.dev12 → verifiers-0.2.1.dev20}/verifiers/v1/judges/rubric.py +0 -0
  367. {verifiers-0.2.1.dev12 → verifiers-0.2.1.dev20}/verifiers/v1/judges/rubric.txt +0 -0
  368. {verifiers-0.2.1.dev12 → verifiers-0.2.1.dev20}/verifiers/v1/legacy.py +0 -0
  369. {verifiers-0.2.1.dev12 → verifiers-0.2.1.dev20}/verifiers/v1/loaders.py +0 -0
  370. {verifiers-0.2.1.dev12 → verifiers-0.2.1.dev20}/verifiers/v1/mcp/__init__.py +0 -0
  371. {verifiers-0.2.1.dev12 → verifiers-0.2.1.dev20}/verifiers/v1/mcp/launch.py +0 -0
  372. {verifiers-0.2.1.dev12 → verifiers-0.2.1.dev20}/verifiers/v1/mcp/server.py +0 -0
  373. {verifiers-0.2.1.dev12 → verifiers-0.2.1.dev20}/verifiers/v1/mcp/toolset.py +0 -0
  374. {verifiers-0.2.1.dev12 → verifiers-0.2.1.dev20}/verifiers/v1/mcp/user.py +0 -0
  375. {verifiers-0.2.1.dev12 → verifiers-0.2.1.dev20}/verifiers/v1/push.py +0 -0
  376. {verifiers-0.2.1.dev12 → verifiers-0.2.1.dev20}/verifiers/v1/retries.py +0 -0
  377. {verifiers-0.2.1.dev12 → verifiers-0.2.1.dev20}/verifiers/v1/runtimes/__init__.py +0 -0
  378. {verifiers-0.2.1.dev12 → verifiers-0.2.1.dev20}/verifiers/v1/runtimes/base.py +0 -0
  379. {verifiers-0.2.1.dev12 → verifiers-0.2.1.dev20}/verifiers/v1/runtimes/docker.py +0 -0
  380. {verifiers-0.2.1.dev12 → verifiers-0.2.1.dev20}/verifiers/v1/runtimes/limiters.py +0 -0
  381. {verifiers-0.2.1.dev12 → verifiers-0.2.1.dev20}/verifiers/v1/runtimes/modal.py +0 -0
  382. {verifiers-0.2.1.dev12 → verifiers-0.2.1.dev20}/verifiers/v1/runtimes/prime.py +0 -0
  383. {verifiers-0.2.1.dev12 → verifiers-0.2.1.dev20}/verifiers/v1/runtimes/subprocess.py +0 -0
  384. {verifiers-0.2.1.dev12 → verifiers-0.2.1.dev20}/verifiers/v1/scoring.py +0 -0
  385. {verifiers-0.2.1.dev12 → verifiers-0.2.1.dev20}/verifiers/v1/serve/__init__.py +0 -0
  386. {verifiers-0.2.1.dev12 → verifiers-0.2.1.dev20}/verifiers/v1/serve/client.py +0 -0
  387. {verifiers-0.2.1.dev12 → verifiers-0.2.1.dev20}/verifiers/v1/serve/pool.py +0 -0
  388. {verifiers-0.2.1.dev12 → verifiers-0.2.1.dev20}/verifiers/v1/serve/server.py +0 -0
  389. {verifiers-0.2.1.dev12 → verifiers-0.2.1.dev20}/verifiers/v1/serve/types.py +0 -0
  390. {verifiers-0.2.1.dev12 → verifiers-0.2.1.dev20}/verifiers/v1/state.py +0 -0
  391. {verifiers-0.2.1.dev12 → verifiers-0.2.1.dev20}/verifiers/v1/task.py +0 -0
  392. {verifiers-0.2.1.dev12 → verifiers-0.2.1.dev20}/verifiers/v1/taskset.py +0 -0
  393. {verifiers-0.2.1.dev12 → verifiers-0.2.1.dev20}/verifiers/v1/tasksets/__init__.py +0 -0
  394. {verifiers-0.2.1.dev12 → verifiers-0.2.1.dev20}/verifiers/v1/tasksets/harbor/__init__.py +0 -0
  395. {verifiers-0.2.1.dev12 → verifiers-0.2.1.dev20}/verifiers/v1/tasksets/harbor/taskset.py +0 -0
  396. {verifiers-0.2.1.dev12 → verifiers-0.2.1.dev20}/verifiers/v1/tasksets/lean/__init__.py +0 -0
  397. {verifiers-0.2.1.dev12 → verifiers-0.2.1.dev20}/verifiers/v1/tasksets/lean/scoring.py +0 -0
  398. {verifiers-0.2.1.dev12 → verifiers-0.2.1.dev20}/verifiers/v1/tasksets/lean/taskset.py +0 -0
  399. {verifiers-0.2.1.dev12 → verifiers-0.2.1.dev20}/verifiers/v1/tasksets/textarena/__init__.py +0 -0
  400. {verifiers-0.2.1.dev12 → verifiers-0.2.1.dev20}/verifiers/v1/tasksets/textarena/taskset.py +0 -0
  401. {verifiers-0.2.1.dev12 → verifiers-0.2.1.dev20}/verifiers/v1/utils/__init__.py +0 -0
  402. {verifiers-0.2.1.dev12 → verifiers-0.2.1.dev20}/verifiers/v1/utils/aio.py +0 -0
  403. {verifiers-0.2.1.dev12 → verifiers-0.2.1.dev20}/verifiers/v1/utils/format.py +0 -0
  404. {verifiers-0.2.1.dev12 → verifiers-0.2.1.dev20}/verifiers/v1/utils/generic.py +0 -0
  405. {verifiers-0.2.1.dev12 → verifiers-0.2.1.dev20}/verifiers/v1/utils/install.py +0 -0
  406. {verifiers-0.2.1.dev12 → verifiers-0.2.1.dev20}/verifiers/v1/utils/interrupt.py +0 -0
  407. {verifiers-0.2.1.dev12 → verifiers-0.2.1.dev20}/verifiers/v1/utils/logging.py +0 -0
  408. {verifiers-0.2.1.dev12 → verifiers-0.2.1.dev20}/verifiers/v1/utils/memory.py +0 -0
  409. {verifiers-0.2.1.dev12 → verifiers-0.2.1.dev20}/verifiers/v1/utils/sampling.py +0 -0
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: verifiers
3
- Version: 0.2.1.dev12
3
+ Version: 0.2.1.dev20
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
@@ -114,6 +114,7 @@ from verifiers.v1.types import (
114
114
  ID,
115
115
  ImageUrlContentPart,
116
116
  ImageUrlSource,
117
+ KeptTokens,
117
118
  Message,
118
119
  MessageContent,
119
120
  Messages,
@@ -166,6 +167,7 @@ __all__ = [
166
167
  "MessageNode",
167
168
  "Branch",
168
169
  "TurnTokens",
170
+ "KeptTokens",
169
171
  "Timing",
170
172
  "TimeSpan",
171
173
  "Error",
@@ -40,6 +40,7 @@ _LABEL_WIDTH = len("timeouts")
40
40
 
41
41
  _STYLE = {
42
42
  "pending": "dim",
43
+ "boot": "orange3",
43
44
  "setup": "yellow",
44
45
  "running": "cyan",
45
46
  "finalize": "magenta",
@@ -49,6 +50,7 @@ _STYLE = {
49
50
  }
50
51
  _MARK_LABEL = {
51
52
  "pending": "pending",
53
+ "boot": "boot",
52
54
  "setup": "setup",
53
55
  "running": "rollout",
54
56
  "finalize": "finalize",
@@ -317,7 +319,7 @@ def _breakdown(done: list[Trace]) -> Table | None:
317
319
  if judge.cost is not None:
318
320
  total_judge_cost += judge.cost
319
321
  have_judge = True
320
- for phase in ("setup", "generation", "finalize", "scoring"):
322
+ for phase in ("boot", "setup", "generation", "finalize", "scoring"):
321
323
  span = getattr(trace.timing, phase)
322
324
  if span.end: # phase was timed for this rollout
323
325
  phase_secs[phase] = phase_secs.get(phase, 0.0) + span.duration
@@ -351,7 +353,7 @@ def _breakdown(done: list[Trace]) -> Table | None:
351
353
  grid.add_row("usage", " · ".join(usage))
352
354
  time_segments = [
353
355
  f"{phase} {format_time(phase_secs[phase] / phase_count[phase])}"
354
- for phase in ("setup", "generation", "finalize", "scoring")
356
+ for phase in ("boot", "setup", "generation", "finalize", "scoring")
355
357
  if phase_count.get(phase)
356
358
  ]
357
359
  if time_segments:
@@ -383,11 +385,12 @@ def _tokens(trace: Trace) -> tuple[int, int, int | None, int | None, int]:
383
385
 
384
386
 
385
387
  def _started(rollout: Rollout) -> float:
386
- # Sort key: when a rollout began (its setup start). A still-pending rollout has no trace
387
- # yet, so it sorts last (+inf) — behind everything already in flight, in task order.
388
- return (
389
- rollout.trace.timing.setup.start if rollout.trace is not None else float("inf")
390
- )
388
+ # Sort key: when a rollout began (its boot start; setup for pre-boot-span traces on
389
+ # resume). A still-pending rollout has no trace yet, so it sorts last (+inf) — behind
390
+ # everything already in flight, in task order.
391
+ if rollout.trace is None:
392
+ return float("inf")
393
+ return rollout.trace.timing.boot.start or rollout.trace.timing.setup.start
391
394
 
392
395
 
393
396
  def _groups(rollouts: list[Rollout]) -> list[list[Rollout]]:
@@ -450,14 +453,14 @@ def Rows(groups: list[list[Rollout]], now: float, runtime_type: str) -> Table:
450
453
  )
451
454
  runtime = f"{runtime_type}({descriptor})" if descriptor else runtime_type
452
455
  turns = t.num_turns
453
- start = t.timing.setup.start
456
+ start = t.timing.boot.start or t.timing.setup.start
454
457
  end = (
455
458
  t.timing.scoring.end
456
459
  or t.timing.finalize.end
457
460
  or t.timing.generation.end
458
- # a rollout that errored in setup has only setup.end — freeze there once done,
459
- # else (still running) the timer would grow off `now` forever
460
- or (t.timing.setup.end if t.is_completed else 0)
461
+ # a rollout that errored in boot/setup has only that span's end — freeze there
462
+ # once done, else (still running) the timer would grow off `now` forever
463
+ or ((t.timing.setup.end or t.timing.boot.end) if t.is_completed else 0)
461
464
  or now
462
465
  )
463
466
  prompt, completion, cached, reasoning, nbranches = _tokens(t)
@@ -138,15 +138,19 @@ def record_debug_error(
138
138
  setup_timeout: float | None,
139
139
  action_timeout: float | None,
140
140
  ) -> None:
141
- if not trace.timing.setup.end:
142
- trace.timing.setup.end = time.time()
143
- if trace.timing.generation.start and not trace.timing.generation.end:
144
- trace.timing.generation.end = time.time()
141
+ now = time.time()
142
+ for span in (trace.timing.boot, trace.timing.setup, trace.timing.generation):
143
+ if span.start and not span.end:
144
+ span.end = now
145
145
  in_action = bool(trace.timing.generation.start)
146
- stage = "debug action" if in_action else "setup"
146
+ stage = (
147
+ "debug action" if in_action else "setup" if trace.timing.setup.start else "boot"
148
+ )
147
149
  timeout = action_timeout if in_action else setup_timeout
148
150
  error_start = (
149
- trace.timing.generation.start if in_action else trace.timing.setup.start
151
+ trace.timing.generation.start
152
+ if in_action
153
+ else trace.timing.setup.start or trace.timing.boot.start
150
154
  )
151
155
  debug.update(error_info(error, error_start, timeout, stage))
152
156
  debug.setdefault("runtime", runtime_info(runtime))
@@ -226,8 +230,11 @@ async def debug_task(task: Task, config: DebugConfig) -> tuple[Trace, bool]:
226
230
  else task.data.timeout.setup
227
231
  )
228
232
  try:
229
- trace.timing.setup.start = time.time()
233
+ trace.timing.boot.start = time.time()
230
234
  await runtime.start()
235
+ now = time.time()
236
+ trace.timing.boot.end = now
237
+ trace.timing.setup.start = now
231
238
  debug["runtime"] = runtime_info(runtime)
232
239
  await asyncio.wait_for(
233
240
  invoke(task.setup, {"trace": trace, "runtime": runtime}),
@@ -25,6 +25,7 @@ from verifiers.v1.graph import PendingTurn
25
25
  from verifiers.v1.types import (
26
26
  AssistantMessage,
27
27
  FinishReason,
28
+ KeptTokens,
28
29
  Response,
29
30
  SamplingConfig,
30
31
  Tool,
@@ -149,6 +150,9 @@ def response_from_generate(
149
150
  is_content=attribution.is_content if attribution is not None else None,
150
151
  multi_modal_data=result.get("multi_modal_data"),
151
152
  routed_experts=result.get("routed_experts"),
153
+ kept_tokens=KeptTokens(**kept)
154
+ if (kept := result.get("kept_tokens"))
155
+ else None,
152
156
  ),
153
157
  )
154
158
 
@@ -31,6 +31,7 @@ from renderers.base import MultiModalData, PlaceholderRange, RenderedTokens
31
31
  from verifiers.v1.types import (
32
32
  AssistantMessage,
33
33
  FinishReason,
34
+ KeptTokens,
34
35
  Message,
35
36
  Response,
36
37
  StrictBaseModel,
@@ -118,6 +119,12 @@ class MessageNode(StrictBaseModel):
118
119
  the turn's `generate` payload by `_attribute_routed_experts`; `Branch.routed_experts`
119
120
  concatenates these along the path into the trainer's router-replay input. Rides the wire as
120
121
  a raw-bytes `__nd__` dict; kept off disk by the dump-site `exclude` in prime-rl."""
122
+ kept_tokens: KeptTokens | None = None
123
+ """Kept-set sampling masks for this node's sampled tokens, decoded: `ids` flat int32
124
+ in position order, `counts` the per-token kept-set sizes (aligned with `logprobs`;
125
+ 0 = no mask). Assistant nodes only; consumed via `Branch.kept_tokens` for
126
+ sampling-replay training. Rides the wire as raw-bytes `__nd__` dicts; kept off disk
127
+ by the dump-site `exclude` in prime-rl."""
121
128
 
122
129
  model_config = ConfigDict(extra="forbid", arbitrary_types_allowed=True)
123
130
 
@@ -166,18 +173,40 @@ class MessageNode(StrictBaseModel):
166
173
  )
167
174
 
168
175
  @field_serializer("routed_experts")
169
- def serialize_routed_experts(self, re: np.ndarray | None) -> dict | None:
170
- """uint8 routing array -> raw-bytes `__nd__` dict so it rides the wire (numpy can't JSON)."""
171
- return None if re is None else _encode_ndarray(re)
176
+ def serialize_ndarray_field(self, arr: np.ndarray | None) -> dict | None:
177
+ """Integer array -> raw-bytes `__nd__` dict so it rides the wire (numpy can't JSON)."""
178
+ return None if arr is None else _encode_ndarray(arr)
172
179
 
173
180
  @field_validator("routed_experts", mode="before")
174
181
  @classmethod
175
- def deserialize_routed_experts(cls, value: Any) -> np.ndarray | None:
182
+ def deserialize_ndarray_field(cls, value: Any) -> np.ndarray | None:
176
183
  if value is None or isinstance(value, np.ndarray):
177
184
  return value
178
185
  if isinstance(value, dict) and value.get("__nd__"):
179
186
  return _decode_ndarray(value)
180
- raise TypeError(f"cannot build routed_experts from {type(value).__name__}")
187
+ raise TypeError(f"cannot build ndarray field from {type(value).__name__}")
188
+
189
+ @field_serializer("kept_tokens")
190
+ def serialize_kept_tokens(self, kept: KeptTokens | None) -> dict | None:
191
+ """`KeptTokens` -> dict of raw-bytes `__nd__` entries so the arrays ride the wire."""
192
+ if kept is None:
193
+ return None
194
+ return {
195
+ "ids": _encode_ndarray(kept.ids),
196
+ "counts": _encode_ndarray(kept.counts),
197
+ }
198
+
199
+ @field_validator("kept_tokens", mode="before")
200
+ @classmethod
201
+ def deserialize_kept_tokens(cls, value: Any) -> KeptTokens | None:
202
+ if value is None or isinstance(value, KeptTokens):
203
+ return value
204
+ if isinstance(value, dict):
205
+ return KeptTokens(
206
+ ids=_decode_ndarray(value["ids"]),
207
+ counts=_decode_ndarray(value["counts"]),
208
+ )
209
+ raise TypeError(f"cannot build KeptTokens from {type(value).__name__}")
181
210
 
182
211
 
183
212
  def _canonical_tool_arguments(arguments: str) -> str:
@@ -434,6 +463,23 @@ def _attribute_routed_experts(
434
463
  off = end
435
464
 
436
465
 
466
+ def _attribute_kept_tokens(
467
+ trace: Trace, assistant_id: int, payload: KeptTokens | None
468
+ ) -> None:
469
+ """Attach this turn's kept-set sampling masks to the assistant node (the payload
470
+ covers exactly the turn's completion tokens, so no path arithmetic). A payload
471
+ that doesn't line up with the node's sampled tokens is dropped, not misaligned."""
472
+ if payload is None:
473
+ return
474
+ counts = np.frombuffer(binascii.a2b_base64(payload.counts), dtype=np.int32)
475
+ ids = np.frombuffer(binascii.a2b_base64(payload.ids), dtype=np.int32)
476
+ node = trace.nodes[assistant_id]
477
+ if len(counts) != sum(node.mask) or int(counts.sum()) != len(ids):
478
+ return
479
+ # Own the buffers — the payload views reference the turn's response bytes.
480
+ node.kept_tokens = KeptTokens(ids=ids.copy(), counts=counts.copy())
481
+
482
+
437
483
  def _commit_turn(turn: PendingTurn, response: Response) -> None:
438
484
  trace = turn.trace
439
485
  prompt = turn.prompt
@@ -540,6 +586,10 @@ def _commit_turn(turn: PendingTurn, response: Response) -> None:
540
586
  trace, new_node_ids, path_len, tokens.routed_experts if tokens else None
541
587
  )
542
588
 
589
+ # Attribute this turn's kept-set sampling masks onto the assistant node (they are
590
+ # completion-aligned, so only the sampled node carries them).
591
+ _attribute_kept_tokens(trace, assistant_id, tokens.kept_tokens if tokens else None)
592
+
543
593
 
544
594
  # --- walking the graph (views) ---------------------------------------------------------
545
595
 
@@ -37,6 +37,7 @@ logger = logging.getLogger(__name__)
37
37
 
38
38
  class Phase(StrEnum):
39
39
  PENDING = "pending"
40
+ BOOT = "boot"
40
41
  SETUP = "setup"
41
42
  RUNNING = "running"
42
43
  FINALIZE = "finalize"
@@ -108,8 +109,8 @@ class Rollout:
108
109
  state=state_cls(type(self.task))(),
109
110
  )
110
111
  self.trace = trace # expose for the --rich dashboard
111
- self.phase = Phase.SETUP # leaving the queue: provisioning starts now
112
- trace.timing.setup.start = time.time()
112
+ self.phase = Phase.BOOT # leaving the queue: the runtime boots now
113
+ trace.timing.boot.start = time.time()
113
114
  self.runtime = make_runtime(self.runtime_config, name=trace.id)
114
115
  runtime = self.runtime
115
116
  trace.runtime = runtime.info
@@ -125,6 +126,10 @@ class Rollout:
125
126
  try:
126
127
  session = RolloutSession(ctx, trace, stops, self.limits)
127
128
  await runtime.start()
129
+ now = time.time()
130
+ trace.timing.boot.end = now
131
+ trace.timing.setup.start = now
132
+ self.phase = Phase.SETUP
128
133
  # Task setup and harness provisioning share one setup-stage deadline.
129
134
  setup_deadline = (
130
135
  None
@@ -228,6 +233,7 @@ class Rollout:
228
233
  trace.is_completed = True
229
234
  now = time.time()
230
235
  for span in (
236
+ trace.timing.boot,
231
237
  trace.timing.setup,
232
238
  trace.timing.generation,
233
239
  trace.timing.finalize,
@@ -22,6 +22,7 @@ from verifiers.v1.state import State, StateT
22
22
  from verifiers.v1.task import DataT, WireTaskData
23
23
  from verifiers.v1.types import (
24
24
  AssistantMessage,
25
+ KeptTokens,
25
26
  Messages,
26
27
  StrictBaseModel,
27
28
  Tool,
@@ -46,6 +47,7 @@ class TimeSpan(StrictBaseModel):
46
47
 
47
48
  class Timing(StrictBaseModel):
48
49
  start: float = Field(default_factory=time.time)
50
+ boot: TimeSpan = Field(default_factory=TimeSpan)
49
51
  setup: TimeSpan = Field(default_factory=TimeSpan)
50
52
  generation: TimeSpan = Field(default_factory=TimeSpan)
51
53
  finalize: TimeSpan = Field(default_factory=TimeSpan)
@@ -139,6 +141,32 @@ class Branch(StrictBaseModel):
139
141
  total = sum(len(n.token_ids) for n in nodes)
140
142
  return merged if merged.shape[0] == total else None
141
143
 
144
+ @property
145
+ def kept_tokens(self) -> KeptTokens | None:
146
+ """The branch's kept-set sampling masks: `counts` is int32 aligned 1:1 with
147
+ `token_ids` (0 = no mask, safe under partial coverage — unlike `routed_experts`
148
+ this is not all-or-nothing), `ids` the flat int32 concatenation of the kept
149
+ sets in position order. None when no node carries kept-set data."""
150
+ if all(n.kept_tokens is None for n in self.nodes):
151
+ return None
152
+ # `_attribute_kept_tokens` validates counts/ids against the node's sampled
153
+ # tokens before setting the field, so this is a straight scatter+concat
154
+ # (a corrupted node would fail loudly on the scatter shape mismatch).
155
+ ids_parts: list[np.ndarray] = []
156
+ counts_parts: list[np.ndarray] = []
157
+ for node in self.nodes:
158
+ counts = np.zeros(len(node.mask), dtype=np.int32)
159
+ if node.kept_tokens is not None and len(node.kept_tokens.counts):
160
+ counts[np.nonzero(node.mask)[0]] = node.kept_tokens.counts
161
+ ids_parts.append(node.kept_tokens.ids)
162
+ counts_parts.append(counts)
163
+ ids = (
164
+ np.concatenate(ids_parts).astype(np.int32, copy=False)
165
+ if ids_parts
166
+ else np.zeros(0, dtype=np.int32)
167
+ )
168
+ return KeptTokens(ids=ids, counts=np.concatenate(counts_parts))
169
+
142
170
  @property
143
171
  def num_total_tokens(self) -> int:
144
172
  return sum(len(n.token_ids) for n in self.nodes)
@@ -172,7 +200,13 @@ class Branch(StrictBaseModel):
172
200
 
173
201
 
174
202
  _NODE_DUMP_EXCLUDE: dict = {
175
- "nodes": {"__all__": {"multi_modal_data", "routed_experts"}}
203
+ "nodes": {
204
+ "__all__": {
205
+ "multi_modal_data",
206
+ "routed_experts",
207
+ "kept_tokens",
208
+ }
209
+ }
176
210
  }
177
211
  """Raw tensor fields kept on the msgpack wire but excluded from JSON records."""
178
212
 
@@ -1,4 +1,5 @@
1
1
  from collections.abc import Iterable
2
+ from dataclasses import dataclass
2
3
  from typing import Annotated, Any, Literal
3
4
 
4
5
  from pydantic import AfterValidator, AliasChoices, BaseModel, ConfigDict, Field
@@ -178,6 +179,18 @@ class RoutedExperts(TypedDict):
178
179
  start: int
179
180
 
180
181
 
182
+ @dataclass
183
+ class KeptTokens:
184
+ """Kept-set sampling masks for sampling replay: `ids` (every kept set concatenated
185
+ in position order) and `counts` (kept-set size per completion token; 0 = no usable
186
+ mask). Base64 blobs straight off the `generate` response on the `TurnTokens`
187
+ carrier; decoded to flat int32 arrays on `MessageNode` (`len(ids) == sum(counts)`,
188
+ row boundaries recovered from `counts`)."""
189
+
190
+ ids: Any
191
+ counts: Any
192
+
193
+
181
194
  class TurnTokens(StrictBaseModel):
182
195
  """Training tokens from renderer tokenization or provider-returned token IDs."""
183
196
 
@@ -200,6 +213,11 @@ class TurnTokens(StrictBaseModel):
200
213
  # per token), attributed per node by the turn's `commit` into `MessageNode.routed_experts`,
201
214
  # then dropped. None unless the engine ran with `enable_return_routed_experts`.
202
215
  routed_experts: RoutedExperts | None = Field(default=None, exclude=True)
216
+ # Transient carrier (excluded): the kept-set sampling masks from `generate` (token ids
217
+ # surviving top-p/top-k truncation, per completion token), attributed to the assistant
218
+ # node by the turn's `commit`, then dropped. None unless the engine ran with
219
+ # `enable_return_kept_tokens`.
220
+ kept_tokens: KeptTokens | None = Field(default=None, exclude=True)
203
221
 
204
222
 
205
223
  class Response(StrictBaseModel):
File without changes