verifiers 0.1.15.dev158__tar.gz → 0.1.15.dev160__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 (326) hide show
  1. {verifiers-0.1.15.dev158 → verifiers-0.1.15.dev160}/PKG-INFO +9 -9
  2. {verifiers-0.1.15.dev158 → verifiers-0.1.15.dev160}/pyproject.toml +8 -8
  3. {verifiers-0.1.15.dev158 → verifiers-0.1.15.dev160}/tests/test_imports.py +3 -0
  4. {verifiers-0.1.15.dev158 → verifiers-0.1.15.dev160}/tests/test_init_script.py +1 -1
  5. {verifiers-0.1.15.dev158 → verifiers-0.1.15.dev160}/tests/test_v1_config_extension.py +92 -0
  6. verifiers-0.1.15.dev160/tests/test_v1_replay_harness.py +327 -0
  7. verifiers-0.1.15.dev160/tests/test_v1_taskset_utils.py +120 -0
  8. {verifiers-0.1.15.dev158 → verifiers-0.1.15.dev160}/verifiers/envs/AGENTS.md +0 -1
  9. {verifiers-0.1.15.dev158 → verifiers-0.1.15.dev160}/verifiers/envs/experimental/README.md +0 -4
  10. {verifiers-0.1.15.dev158 → verifiers-0.1.15.dev160}/verifiers/scripts/init.py +1 -1
  11. {verifiers-0.1.15.dev158 → verifiers-0.1.15.dev160}/verifiers/utils/env_utils.py +48 -7
  12. {verifiers-0.1.15.dev158 → verifiers-0.1.15.dev160}/verifiers/v1/taskset.py +1 -1
  13. {verifiers-0.1.15.dev158 → verifiers-0.1.15.dev160}/verifiers/v1/utils/taskset_utils.py +13 -3
  14. verifiers-0.1.15.dev158/tests/test_rlm_env.py +0 -3166
  15. verifiers-0.1.15.dev158/tests/test_v1_taskset_utils.py +0 -46
  16. verifiers-0.1.15.dev158/verifiers/envs/experimental/rlm_env.py +0 -4312
  17. {verifiers-0.1.15.dev158 → verifiers-0.1.15.dev160}/.gitignore +0 -0
  18. {verifiers-0.1.15.dev158 → verifiers-0.1.15.dev160}/LICENSE +0 -0
  19. {verifiers-0.1.15.dev158 → verifiers-0.1.15.dev160}/README.md +0 -0
  20. {verifiers-0.1.15.dev158 → verifiers-0.1.15.dev160}/tests/AGENTS.md +0 -0
  21. {verifiers-0.1.15.dev158 → verifiers-0.1.15.dev160}/tests/README.md +0 -0
  22. {verifiers-0.1.15.dev158 → verifiers-0.1.15.dev160}/tests/__init__.py +0 -0
  23. {verifiers-0.1.15.dev158 → verifiers-0.1.15.dev160}/tests/conftest.py +0 -0
  24. {verifiers-0.1.15.dev158 → verifiers-0.1.15.dev160}/tests/test_browser_env.py +0 -0
  25. {verifiers-0.1.15.dev158 → verifiers-0.1.15.dev160}/tests/test_build_script.py +0 -0
  26. {verifiers-0.1.15.dev158 → verifiers-0.1.15.dev160}/tests/test_cli_agent_env.py +0 -0
  27. {verifiers-0.1.15.dev158 → verifiers-0.1.15.dev160}/tests/test_client_auth_errors.py +0 -0
  28. {verifiers-0.1.15.dev158 → verifiers-0.1.15.dev160}/tests/test_client_config.py +0 -0
  29. {verifiers-0.1.15.dev158 → verifiers-0.1.15.dev160}/tests/test_client_multimodal_types.py +0 -0
  30. {verifiers-0.1.15.dev158 → verifiers-0.1.15.dev160}/tests/test_composable_env.py +0 -0
  31. {verifiers-0.1.15.dev158 → verifiers-0.1.15.dev160}/tests/test_context_token_metrics.py +0 -0
  32. {verifiers-0.1.15.dev158 → verifiers-0.1.15.dev160}/tests/test_decorator_ranks.py +0 -0
  33. {verifiers-0.1.15.dev158 → verifiers-0.1.15.dev160}/tests/test_endpoint_registry.py +0 -0
  34. {verifiers-0.1.15.dev158 → verifiers-0.1.15.dev160}/tests/test_env_group.py +0 -0
  35. {verifiers-0.1.15.dev158 → verifiers-0.1.15.dev160}/tests/test_env_server.py +0 -0
  36. {verifiers-0.1.15.dev158 → verifiers-0.1.15.dev160}/tests/test_environment.py +0 -0
  37. {verifiers-0.1.15.dev158 → verifiers-0.1.15.dev160}/tests/test_environment_extra.py +0 -0
  38. {verifiers-0.1.15.dev158 → verifiers-0.1.15.dev160}/tests/test_envs.py +0 -0
  39. {verifiers-0.1.15.dev158 → verifiers-0.1.15.dev160}/tests/test_error_chain.py +0 -0
  40. {verifiers-0.1.15.dev158 → verifiers-0.1.15.dev160}/tests/test_eval_cli.py +0 -0
  41. {verifiers-0.1.15.dev158 → verifiers-0.1.15.dev160}/tests/test_eval_display.py +0 -0
  42. {verifiers-0.1.15.dev158 → verifiers-0.1.15.dev160}/tests/test_eval_utils.py +0 -0
  43. {verifiers-0.1.15.dev158 → verifiers-0.1.15.dev160}/tests/test_gepa_cli.py +0 -0
  44. {verifiers-0.1.15.dev158 → verifiers-0.1.15.dev160}/tests/test_gepa_utils.py +0 -0
  45. {verifiers-0.1.15.dev158 → verifiers-0.1.15.dev160}/tests/test_gym_env.py +0 -0
  46. {verifiers-0.1.15.dev158 → verifiers-0.1.15.dev160}/tests/test_harbor_env_mcp.py +0 -0
  47. {verifiers-0.1.15.dev158 → verifiers-0.1.15.dev160}/tests/test_install_utils.py +0 -0
  48. {verifiers-0.1.15.dev158 → verifiers-0.1.15.dev160}/tests/test_interception_utils.py +0 -0
  49. {verifiers-0.1.15.dev158 → verifiers-0.1.15.dev160}/tests/test_langchain_deep_agents_wikispeedia.py +0 -0
  50. {verifiers-0.1.15.dev158 → verifiers-0.1.15.dev160}/tests/test_lean_task.py +0 -0
  51. {verifiers-0.1.15.dev158 → verifiers-0.1.15.dev160}/tests/test_logging.py +0 -0
  52. {verifiers-0.1.15.dev158 → verifiers-0.1.15.dev160}/tests/test_math_rubric.py +0 -0
  53. {verifiers-0.1.15.dev158 → verifiers-0.1.15.dev160}/tests/test_maybe_think_parser.py +0 -0
  54. {verifiers-0.1.15.dev158 → verifiers-0.1.15.dev160}/tests/test_mcp_search_env.py +0 -0
  55. {verifiers-0.1.15.dev158 → verifiers-0.1.15.dev160}/tests/test_message_utils.py +0 -0
  56. {verifiers-0.1.15.dev158 → verifiers-0.1.15.dev160}/tests/test_message_utils_multimodal.py +0 -0
  57. {verifiers-0.1.15.dev158 → verifiers-0.1.15.dev160}/tests/test_multiturn_env.py +0 -0
  58. {verifiers-0.1.15.dev158 → verifiers-0.1.15.dev160}/tests/test_nemorl_client.py +0 -0
  59. {verifiers-0.1.15.dev158 → verifiers-0.1.15.dev160}/tests/test_openai_chat_completions_token_client.py +0 -0
  60. {verifiers-0.1.15.dev158 → verifiers-0.1.15.dev160}/tests/test_openai_responses_client.py +0 -0
  61. {verifiers-0.1.15.dev158 → verifiers-0.1.15.dev160}/tests/test_opencode_harbor.py +0 -0
  62. {verifiers-0.1.15.dev158 → verifiers-0.1.15.dev160}/tests/test_opencode_rlm_env.py +0 -0
  63. {verifiers-0.1.15.dev158 → verifiers-0.1.15.dev160}/tests/test_openenv_client.py +0 -0
  64. {verifiers-0.1.15.dev158 → verifiers-0.1.15.dev160}/tests/test_parser.py +0 -0
  65. {verifiers-0.1.15.dev158 → verifiers-0.1.15.dev160}/tests/test_path_utils.py +0 -0
  66. {verifiers-0.1.15.dev158 → verifiers-0.1.15.dev160}/tests/test_per_turn_timing.py +0 -0
  67. {verifiers-0.1.15.dev158 → verifiers-0.1.15.dev160}/tests/test_pricing_utils.py +0 -0
  68. {verifiers-0.1.15.dev158 → verifiers-0.1.15.dev160}/tests/test_prime_plugin.py +0 -0
  69. {verifiers-0.1.15.dev158 → verifiers-0.1.15.dev160}/tests/test_renderer_client.py +0 -0
  70. {verifiers-0.1.15.dev158 → verifiers-0.1.15.dev160}/tests/test_renderer_e2e.py +0 -0
  71. {verifiers-0.1.15.dev158 → verifiers-0.1.15.dev160}/tests/test_rlm_composable_env.py +0 -0
  72. {verifiers-0.1.15.dev158 → verifiers-0.1.15.dev160}/tests/test_rubric.py +0 -0
  73. {verifiers-0.1.15.dev158 → verifiers-0.1.15.dev160}/tests/test_rubric_group.py +0 -0
  74. {verifiers-0.1.15.dev158 → verifiers-0.1.15.dev160}/tests/test_sandbox_env.py +0 -0
  75. {verifiers-0.1.15.dev158 → verifiers-0.1.15.dev160}/tests/test_sandbox_mixin.py +0 -0
  76. {verifiers-0.1.15.dev158 → verifiers-0.1.15.dev160}/tests/test_save_utils.py +0 -0
  77. {verifiers-0.1.15.dev158 → verifiers-0.1.15.dev160}/tests/test_setup_script.py +0 -0
  78. {verifiers-0.1.15.dev158 → verifiers-0.1.15.dev160}/tests/test_singleturn_env.py +0 -0
  79. {verifiers-0.1.15.dev158 → verifiers-0.1.15.dev160}/tests/test_stateful_tool_env.py +0 -0
  80. {verifiers-0.1.15.dev158 → verifiers-0.1.15.dev160}/tests/test_think_parser.py +0 -0
  81. {verifiers-0.1.15.dev158 → verifiers-0.1.15.dev160}/tests/test_tool_env.py +0 -0
  82. {verifiers-0.1.15.dev158 → verifiers-0.1.15.dev160}/tests/test_tool_utils.py +0 -0
  83. {verifiers-0.1.15.dev158 → verifiers-0.1.15.dev160}/tests/test_trajectory_processing.py +0 -0
  84. {verifiers-0.1.15.dev158 → verifiers-0.1.15.dev160}/tests/test_tui_info_formatting.py +0 -0
  85. {verifiers-0.1.15.dev158 → verifiers-0.1.15.dev160}/tests/test_types.py +0 -0
  86. {verifiers-0.1.15.dev158 → verifiers-0.1.15.dev160}/tests/test_v1_bfcl.py +0 -0
  87. {verifiers-0.1.15.dev158 → verifiers-0.1.15.dev160}/tests/test_v1_empty_completions.py +0 -0
  88. {verifiers-0.1.15.dev158 → verifiers-0.1.15.dev160}/tests/test_v1_endpoint_protocols.py +0 -0
  89. {verifiers-0.1.15.dev158 → verifiers-0.1.15.dev160}/tests/test_v1_example_counts.py +0 -0
  90. {verifiers-0.1.15.dev158 → verifiers-0.1.15.dev160}/tests/test_v1_group_reward_env.py +0 -0
  91. {verifiers-0.1.15.dev158 → verifiers-0.1.15.dev160}/tests/test_v1_harbor_cli.py +0 -0
  92. {verifiers-0.1.15.dev158 → verifiers-0.1.15.dev160}/tests/test_v1_mini_swe_agent.py +0 -0
  93. {verifiers-0.1.15.dev158 → verifiers-0.1.15.dev160}/tests/test_v1_nemo_gym_harness.py +0 -0
  94. {verifiers-0.1.15.dev158 → verifiers-0.1.15.dev160}/tests/test_v1_openenv_taskset.py +0 -0
  95. {verifiers-0.1.15.dev158 → verifiers-0.1.15.dev160}/tests/test_v1_openreward_taskset.py +0 -0
  96. {verifiers-0.1.15.dev158 → verifiers-0.1.15.dev160}/tests/test_v1_rlm_swe.py +0 -0
  97. {verifiers-0.1.15.dev158 → verifiers-0.1.15.dev160}/tests/test_v1_runtime_lifecycle.py +0 -0
  98. {verifiers-0.1.15.dev158 → verifiers-0.1.15.dev160}/tests/test_v1_scoring_functions.py +0 -0
  99. {verifiers-0.1.15.dev158 → verifiers-0.1.15.dev160}/tests/test_v1_taskset_bindings.py +0 -0
  100. {verifiers-0.1.15.dev158 → verifiers-0.1.15.dev160}/tests/test_v1_textarena_taskset.py +0 -0
  101. {verifiers-0.1.15.dev158 → verifiers-0.1.15.dev160}/tests/test_wiki_search_v1.py +0 -0
  102. {verifiers-0.1.15.dev158 → verifiers-0.1.15.dev160}/tests/test_wordle_env.py +0 -0
  103. {verifiers-0.1.15.dev158 → verifiers-0.1.15.dev160}/tests/test_wordle_v1_env.py +0 -0
  104. {verifiers-0.1.15.dev158 → verifiers-0.1.15.dev160}/tests/test_xml_parser.py +0 -0
  105. {verifiers-0.1.15.dev158 → verifiers-0.1.15.dev160}/verifiers/AGENTS.md +0 -0
  106. {verifiers-0.1.15.dev158 → verifiers-0.1.15.dev160}/verifiers/__init__.py +0 -0
  107. {verifiers-0.1.15.dev158 → verifiers-0.1.15.dev160}/verifiers/cli/__init__.py +0 -0
  108. {verifiers-0.1.15.dev158 → verifiers-0.1.15.dev160}/verifiers/cli/commands/__init__.py +0 -0
  109. {verifiers-0.1.15.dev158 → verifiers-0.1.15.dev160}/verifiers/cli/commands/build.py +0 -0
  110. {verifiers-0.1.15.dev158 → verifiers-0.1.15.dev160}/verifiers/cli/commands/eval.py +0 -0
  111. {verifiers-0.1.15.dev158 → verifiers-0.1.15.dev160}/verifiers/cli/commands/gepa.py +0 -0
  112. {verifiers-0.1.15.dev158 → verifiers-0.1.15.dev160}/verifiers/cli/commands/init.py +0 -0
  113. {verifiers-0.1.15.dev158 → verifiers-0.1.15.dev160}/verifiers/cli/commands/install.py +0 -0
  114. {verifiers-0.1.15.dev158 → verifiers-0.1.15.dev160}/verifiers/cli/commands/setup.py +0 -0
  115. {verifiers-0.1.15.dev158 → verifiers-0.1.15.dev160}/verifiers/cli/plugins/__init__.py +0 -0
  116. {verifiers-0.1.15.dev158 → verifiers-0.1.15.dev160}/verifiers/cli/plugins/prime.py +0 -0
  117. {verifiers-0.1.15.dev158 → verifiers-0.1.15.dev160}/verifiers/cli/tui.py +0 -0
  118. {verifiers-0.1.15.dev158 → verifiers-0.1.15.dev160}/verifiers/clients/__init__.py +0 -0
  119. {verifiers-0.1.15.dev158 → verifiers-0.1.15.dev160}/verifiers/clients/anthropic_messages_client.py +0 -0
  120. {verifiers-0.1.15.dev158 → verifiers-0.1.15.dev160}/verifiers/clients/client.py +0 -0
  121. {verifiers-0.1.15.dev158 → verifiers-0.1.15.dev160}/verifiers/clients/nemorl_chat_completions_client.py +0 -0
  122. {verifiers-0.1.15.dev158 → verifiers-0.1.15.dev160}/verifiers/clients/openai_chat_completions_client.py +0 -0
  123. {verifiers-0.1.15.dev158 → verifiers-0.1.15.dev160}/verifiers/clients/openai_chat_completions_token_client.py +0 -0
  124. {verifiers-0.1.15.dev158 → verifiers-0.1.15.dev160}/verifiers/clients/openai_completions_client.py +0 -0
  125. {verifiers-0.1.15.dev158 → verifiers-0.1.15.dev160}/verifiers/clients/openai_responses_client.py +0 -0
  126. {verifiers-0.1.15.dev158 → verifiers-0.1.15.dev160}/verifiers/clients/renderer_client.py +0 -0
  127. {verifiers-0.1.15.dev158 → verifiers-0.1.15.dev160}/verifiers/decorators.py +0 -0
  128. {verifiers-0.1.15.dev158 → verifiers-0.1.15.dev160}/verifiers/envs/__init__.py +0 -0
  129. {verifiers-0.1.15.dev158 → verifiers-0.1.15.dev160}/verifiers/envs/env_group.py +0 -0
  130. {verifiers-0.1.15.dev158 → verifiers-0.1.15.dev160}/verifiers/envs/environment.py +0 -0
  131. {verifiers-0.1.15.dev158 → verifiers-0.1.15.dev160}/verifiers/envs/experimental/__init__.py +0 -0
  132. {verifiers-0.1.15.dev158 → verifiers-0.1.15.dev160}/verifiers/envs/experimental/cli_agent_env.py +0 -0
  133. {verifiers-0.1.15.dev158 → verifiers-0.1.15.dev160}/verifiers/envs/experimental/composable/README.md +0 -0
  134. {verifiers-0.1.15.dev158 → verifiers-0.1.15.dev160}/verifiers/envs/experimental/composable/__init__.py +0 -0
  135. {verifiers-0.1.15.dev158 → verifiers-0.1.15.dev160}/verifiers/envs/experimental/composable/_filter.py +0 -0
  136. {verifiers-0.1.15.dev158 → verifiers-0.1.15.dev160}/verifiers/envs/experimental/composable/composable_env.py +0 -0
  137. {verifiers-0.1.15.dev158 → verifiers-0.1.15.dev160}/verifiers/envs/experimental/composable/harness.py +0 -0
  138. {verifiers-0.1.15.dev158 → verifiers-0.1.15.dev160}/verifiers/envs/experimental/composable/harnesses/__init__.py +0 -0
  139. {verifiers-0.1.15.dev158 → verifiers-0.1.15.dev160}/verifiers/envs/experimental/composable/harnesses/mini_swe_agent.py +0 -0
  140. {verifiers-0.1.15.dev158 → verifiers-0.1.15.dev160}/verifiers/envs/experimental/composable/harnesses/opencode.py +0 -0
  141. {verifiers-0.1.15.dev158 → verifiers-0.1.15.dev160}/verifiers/envs/experimental/composable/harnesses/prompt.txt +0 -0
  142. {verifiers-0.1.15.dev158 → verifiers-0.1.15.dev160}/verifiers/envs/experimental/composable/harnesses/rlm.py +0 -0
  143. {verifiers-0.1.15.dev158 → verifiers-0.1.15.dev160}/verifiers/envs/experimental/composable/swe_debug_env.py +0 -0
  144. {verifiers-0.1.15.dev158 → verifiers-0.1.15.dev160}/verifiers/envs/experimental/composable/task.py +0 -0
  145. {verifiers-0.1.15.dev158 → verifiers-0.1.15.dev160}/verifiers/envs/experimental/composable/tasksets/__init__.py +0 -0
  146. {verifiers-0.1.15.dev158 → verifiers-0.1.15.dev160}/verifiers/envs/experimental/composable/tasksets/cp/__init__.py +0 -0
  147. {verifiers-0.1.15.dev158 → verifiers-0.1.15.dev160}/verifiers/envs/experimental/composable/tasksets/cp/cp_task.py +0 -0
  148. {verifiers-0.1.15.dev158 → verifiers-0.1.15.dev160}/verifiers/envs/experimental/composable/tasksets/cp/test_utils.py +0 -0
  149. {verifiers-0.1.15.dev158 → verifiers-0.1.15.dev160}/verifiers/envs/experimental/composable/tasksets/harbor/__init__.py +0 -0
  150. {verifiers-0.1.15.dev158 → verifiers-0.1.15.dev160}/verifiers/envs/experimental/composable/tasksets/harbor/harbor.py +0 -0
  151. {verifiers-0.1.15.dev158 → verifiers-0.1.15.dev160}/verifiers/envs/experimental/composable/tasksets/lean/__init__.py +0 -0
  152. {verifiers-0.1.15.dev158 → verifiers-0.1.15.dev160}/verifiers/envs/experimental/composable/tasksets/lean/lean_task.py +0 -0
  153. {verifiers-0.1.15.dev158 → verifiers-0.1.15.dev160}/verifiers/envs/experimental/composable/tasksets/math/__init__.py +0 -0
  154. {verifiers-0.1.15.dev158 → verifiers-0.1.15.dev160}/verifiers/envs/experimental/composable/tasksets/math/math_task.py +0 -0
  155. {verifiers-0.1.15.dev158 → verifiers-0.1.15.dev160}/verifiers/envs/experimental/composable/tasksets/swe/__init__.py +0 -0
  156. {verifiers-0.1.15.dev158 → verifiers-0.1.15.dev160}/verifiers/envs/experimental/composable/tasksets/swe/multi_swe/__init__.py +0 -0
  157. {verifiers-0.1.15.dev158 → verifiers-0.1.15.dev160}/verifiers/envs/experimental/composable/tasksets/swe/multi_swe/extract_fix_patch.sh +0 -0
  158. {verifiers-0.1.15.dev158 → verifiers-0.1.15.dev160}/verifiers/envs/experimental/composable/tasksets/swe/multi_swe/taskset.py +0 -0
  159. {verifiers-0.1.15.dev158 → verifiers-0.1.15.dev160}/verifiers/envs/experimental/composable/tasksets/swe/openswe/__init__.py +0 -0
  160. {verifiers-0.1.15.dev158 → verifiers-0.1.15.dev160}/verifiers/envs/experimental/composable/tasksets/swe/openswe/taskset.py +0 -0
  161. {verifiers-0.1.15.dev158 → verifiers-0.1.15.dev160}/verifiers/envs/experimental/composable/tasksets/swe/r2e_gym/__init__.py +0 -0
  162. {verifiers-0.1.15.dev158 → verifiers-0.1.15.dev160}/verifiers/envs/experimental/composable/tasksets/swe/r2e_gym/log_parser.py +0 -0
  163. {verifiers-0.1.15.dev158 → verifiers-0.1.15.dev160}/verifiers/envs/experimental/composable/tasksets/swe/r2e_gym/taskset.py +0 -0
  164. {verifiers-0.1.15.dev158 → verifiers-0.1.15.dev160}/verifiers/envs/experimental/composable/tasksets/swe/scale_swe/__init__.py +0 -0
  165. {verifiers-0.1.15.dev158 → verifiers-0.1.15.dev160}/verifiers/envs/experimental/composable/tasksets/swe/scale_swe/taskset.py +0 -0
  166. {verifiers-0.1.15.dev158 → verifiers-0.1.15.dev160}/verifiers/envs/experimental/composable/tasksets/swe/shared/__init__.py +0 -0
  167. {verifiers-0.1.15.dev158 → verifiers-0.1.15.dev160}/verifiers/envs/experimental/composable/tasksets/swe/shared/test_patch.py +0 -0
  168. {verifiers-0.1.15.dev158 → verifiers-0.1.15.dev160}/verifiers/envs/experimental/composable/tasksets/swe/swe_bench/__init__.py +0 -0
  169. {verifiers-0.1.15.dev158 → verifiers-0.1.15.dev160}/verifiers/envs/experimental/composable/tasksets/swe/swe_bench/taskset.py +0 -0
  170. {verifiers-0.1.15.dev158 → verifiers-0.1.15.dev160}/verifiers/envs/experimental/composable/tasksets/swe/swe_lego/__init__.py +0 -0
  171. {verifiers-0.1.15.dev158 → verifiers-0.1.15.dev160}/verifiers/envs/experimental/composable/tasksets/swe/swe_lego/taskset.py +0 -0
  172. {verifiers-0.1.15.dev158 → verifiers-0.1.15.dev160}/verifiers/envs/experimental/composable/tasksets/swe/swe_rebench_v2/__init__.py +0 -0
  173. {verifiers-0.1.15.dev158 → verifiers-0.1.15.dev160}/verifiers/envs/experimental/composable/tasksets/swe/swe_rebench_v2/log_parsers.py +0 -0
  174. {verifiers-0.1.15.dev158 → verifiers-0.1.15.dev160}/verifiers/envs/experimental/composable/tasksets/swe/swe_rebench_v2/taskset.py +0 -0
  175. {verifiers-0.1.15.dev158 → verifiers-0.1.15.dev160}/verifiers/envs/experimental/composable/tasksets/swe/swe_smith/__init__.py +0 -0
  176. {verifiers-0.1.15.dev158 → verifiers-0.1.15.dev160}/verifiers/envs/experimental/composable/tasksets/swe/swe_smith/taskset.py +0 -0
  177. {verifiers-0.1.15.dev158 → verifiers-0.1.15.dev160}/verifiers/envs/experimental/composable/tasksets/swe/swe_tasksets.py +0 -0
  178. {verifiers-0.1.15.dev158 → verifiers-0.1.15.dev160}/verifiers/envs/experimental/gym_env.py +0 -0
  179. {verifiers-0.1.15.dev158 → verifiers-0.1.15.dev160}/verifiers/envs/experimental/harbor_env/__init__.py +0 -0
  180. {verifiers-0.1.15.dev158 → verifiers-0.1.15.dev160}/verifiers/envs/experimental/harbor_env/env.py +0 -0
  181. {verifiers-0.1.15.dev158 → verifiers-0.1.15.dev160}/verifiers/envs/experimental/harbor_env/mcp.py +0 -0
  182. {verifiers-0.1.15.dev158 → verifiers-0.1.15.dev160}/verifiers/envs/experimental/mcp_env.py +0 -0
  183. {verifiers-0.1.15.dev158 → verifiers-0.1.15.dev160}/verifiers/envs/experimental/opencode_env.py +0 -0
  184. {verifiers-0.1.15.dev158 → verifiers-0.1.15.dev160}/verifiers/envs/experimental/opencode_qa_env.py +0 -0
  185. {verifiers-0.1.15.dev158 → verifiers-0.1.15.dev160}/verifiers/envs/experimental/opencode_rlm_env.py +0 -0
  186. {verifiers-0.1.15.dev158 → verifiers-0.1.15.dev160}/verifiers/envs/experimental/sandbox_mixin.py +0 -0
  187. {verifiers-0.1.15.dev158 → verifiers-0.1.15.dev160}/verifiers/envs/experimental/utils/__init__.py +0 -0
  188. {verifiers-0.1.15.dev158 → verifiers-0.1.15.dev160}/verifiers/envs/experimental/utils/file_locks.py +0 -0
  189. {verifiers-0.1.15.dev158 → verifiers-0.1.15.dev160}/verifiers/envs/experimental/utils/git_checkout_cache.py +0 -0
  190. {verifiers-0.1.15.dev158 → verifiers-0.1.15.dev160}/verifiers/envs/integrations/README.md +0 -0
  191. {verifiers-0.1.15.dev158 → verifiers-0.1.15.dev160}/verifiers/envs/integrations/__init__.py +0 -0
  192. {verifiers-0.1.15.dev158 → verifiers-0.1.15.dev160}/verifiers/envs/integrations/browser_env/README.md +0 -0
  193. {verifiers-0.1.15.dev158 → verifiers-0.1.15.dev160}/verifiers/envs/integrations/browser_env/__init__.py +0 -0
  194. {verifiers-0.1.15.dev158 → verifiers-0.1.15.dev160}/verifiers/envs/integrations/browser_env/browser_env.py +0 -0
  195. {verifiers-0.1.15.dev158 → verifiers-0.1.15.dev160}/verifiers/envs/integrations/browser_env/modes/__init__.py +0 -0
  196. {verifiers-0.1.15.dev158 → verifiers-0.1.15.dev160}/verifiers/envs/integrations/browser_env/modes/base.py +0 -0
  197. {verifiers-0.1.15.dev158 → verifiers-0.1.15.dev160}/verifiers/envs/integrations/browser_env/modes/cua_mode.py +0 -0
  198. {verifiers-0.1.15.dev158 → verifiers-0.1.15.dev160}/verifiers/envs/integrations/browser_env/modes/dom_mode.py +0 -0
  199. {verifiers-0.1.15.dev158 → verifiers-0.1.15.dev160}/verifiers/envs/integrations/openenv_env.py +0 -0
  200. {verifiers-0.1.15.dev158 → verifiers-0.1.15.dev160}/verifiers/envs/integrations/reasoninggym_env.py +0 -0
  201. {verifiers-0.1.15.dev158 → verifiers-0.1.15.dev160}/verifiers/envs/integrations/textarena_env.py +0 -0
  202. {verifiers-0.1.15.dev158 → verifiers-0.1.15.dev160}/verifiers/envs/multiturn_env.py +0 -0
  203. {verifiers-0.1.15.dev158 → verifiers-0.1.15.dev160}/verifiers/envs/python_env.py +0 -0
  204. {verifiers-0.1.15.dev158 → verifiers-0.1.15.dev160}/verifiers/envs/sandbox_env.py +0 -0
  205. {verifiers-0.1.15.dev158 → verifiers-0.1.15.dev160}/verifiers/envs/singleturn_env.py +0 -0
  206. {verifiers-0.1.15.dev158 → verifiers-0.1.15.dev160}/verifiers/envs/stateful_tool_env.py +0 -0
  207. {verifiers-0.1.15.dev158 → verifiers-0.1.15.dev160}/verifiers/envs/tool_env.py +0 -0
  208. {verifiers-0.1.15.dev158 → verifiers-0.1.15.dev160}/verifiers/errors.py +0 -0
  209. {verifiers-0.1.15.dev158 → verifiers-0.1.15.dev160}/verifiers/gepa/__init__.py +0 -0
  210. {verifiers-0.1.15.dev158 → verifiers-0.1.15.dev160}/verifiers/gepa/adapter.py +0 -0
  211. {verifiers-0.1.15.dev158 → verifiers-0.1.15.dev160}/verifiers/gepa/config.py +0 -0
  212. {verifiers-0.1.15.dev158 → verifiers-0.1.15.dev160}/verifiers/gepa/display.py +0 -0
  213. {verifiers-0.1.15.dev158 → verifiers-0.1.15.dev160}/verifiers/gepa/gepa_utils.py +0 -0
  214. {verifiers-0.1.15.dev158 → verifiers-0.1.15.dev160}/verifiers/parsers/__init__.py +0 -0
  215. {verifiers-0.1.15.dev158 → verifiers-0.1.15.dev160}/verifiers/parsers/maybe_think_parser.py +0 -0
  216. {verifiers-0.1.15.dev158 → verifiers-0.1.15.dev160}/verifiers/parsers/parser.py +0 -0
  217. {verifiers-0.1.15.dev158 → verifiers-0.1.15.dev160}/verifiers/parsers/think_parser.py +0 -0
  218. {verifiers-0.1.15.dev158 → verifiers-0.1.15.dev160}/verifiers/parsers/xml_parser.py +0 -0
  219. {verifiers-0.1.15.dev158 → verifiers-0.1.15.dev160}/verifiers/rl/README.md +0 -0
  220. {verifiers-0.1.15.dev158 → verifiers-0.1.15.dev160}/verifiers/rl/__init__.py +0 -0
  221. {verifiers-0.1.15.dev158 → verifiers-0.1.15.dev160}/verifiers/rl/inference/__init__.py +0 -0
  222. {verifiers-0.1.15.dev158 → verifiers-0.1.15.dev160}/verifiers/rl/inference/client.py +0 -0
  223. {verifiers-0.1.15.dev158 → verifiers-0.1.15.dev160}/verifiers/rl/inference/server.py +0 -0
  224. {verifiers-0.1.15.dev158 → verifiers-0.1.15.dev160}/verifiers/rl/trainer/__init__.py +0 -0
  225. {verifiers-0.1.15.dev158 → verifiers-0.1.15.dev160}/verifiers/rl/trainer/config.py +0 -0
  226. {verifiers-0.1.15.dev158 → verifiers-0.1.15.dev160}/verifiers/rl/trainer/orchestrator.py +0 -0
  227. {verifiers-0.1.15.dev158 → verifiers-0.1.15.dev160}/verifiers/rl/trainer/trainer.py +0 -0
  228. {verifiers-0.1.15.dev158 → verifiers-0.1.15.dev160}/verifiers/rl/trainer/utils.py +0 -0
  229. {verifiers-0.1.15.dev158 → verifiers-0.1.15.dev160}/verifiers/rubrics/__init__.py +0 -0
  230. {verifiers-0.1.15.dev158 → verifiers-0.1.15.dev160}/verifiers/rubrics/experimental/hybrid_math_rubric.py +0 -0
  231. {verifiers-0.1.15.dev158 → verifiers-0.1.15.dev160}/verifiers/rubrics/judge_rubric.py +0 -0
  232. {verifiers-0.1.15.dev158 → verifiers-0.1.15.dev160}/verifiers/rubrics/math_rubric.py +0 -0
  233. {verifiers-0.1.15.dev158 → verifiers-0.1.15.dev160}/verifiers/rubrics/rubric.py +0 -0
  234. {verifiers-0.1.15.dev158 → verifiers-0.1.15.dev160}/verifiers/rubrics/rubric_group.py +0 -0
  235. {verifiers-0.1.15.dev158 → verifiers-0.1.15.dev160}/verifiers/scripts/__init__.py +0 -0
  236. {verifiers-0.1.15.dev158 → verifiers-0.1.15.dev160}/verifiers/scripts/build.py +0 -0
  237. {verifiers-0.1.15.dev158 → verifiers-0.1.15.dev160}/verifiers/scripts/eval.py +0 -0
  238. {verifiers-0.1.15.dev158 → verifiers-0.1.15.dev160}/verifiers/scripts/gepa.py +0 -0
  239. {verifiers-0.1.15.dev158 → verifiers-0.1.15.dev160}/verifiers/scripts/install.py +0 -0
  240. {verifiers-0.1.15.dev158 → verifiers-0.1.15.dev160}/verifiers/scripts/rl.py +0 -0
  241. {verifiers-0.1.15.dev158 → verifiers-0.1.15.dev160}/verifiers/scripts/setup.py +0 -0
  242. {verifiers-0.1.15.dev158 → verifiers-0.1.15.dev160}/verifiers/scripts/train.py +0 -0
  243. {verifiers-0.1.15.dev158 → verifiers-0.1.15.dev160}/verifiers/scripts/tui.py +0 -0
  244. {verifiers-0.1.15.dev158 → verifiers-0.1.15.dev160}/verifiers/scripts/vllm.py +0 -0
  245. {verifiers-0.1.15.dev158 → verifiers-0.1.15.dev160}/verifiers/serve/__init__.py +0 -0
  246. {verifiers-0.1.15.dev158 → verifiers-0.1.15.dev160}/verifiers/serve/client/env_client.py +0 -0
  247. {verifiers-0.1.15.dev158 → verifiers-0.1.15.dev160}/verifiers/serve/client/zmq_env_client.py +0 -0
  248. {verifiers-0.1.15.dev158 → verifiers-0.1.15.dev160}/verifiers/serve/server/__init__.py +0 -0
  249. {verifiers-0.1.15.dev158 → verifiers-0.1.15.dev160}/verifiers/serve/server/env_router.py +0 -0
  250. {verifiers-0.1.15.dev158 → verifiers-0.1.15.dev160}/verifiers/serve/server/env_server.py +0 -0
  251. {verifiers-0.1.15.dev158 → verifiers-0.1.15.dev160}/verifiers/serve/server/env_worker.py +0 -0
  252. {verifiers-0.1.15.dev158 → verifiers-0.1.15.dev160}/verifiers/serve/server/zmq_env_server.py +0 -0
  253. {verifiers-0.1.15.dev158 → verifiers-0.1.15.dev160}/verifiers/serve/types.py +0 -0
  254. {verifiers-0.1.15.dev158 → verifiers-0.1.15.dev160}/verifiers/types.py +0 -0
  255. {verifiers-0.1.15.dev158 → verifiers-0.1.15.dev160}/verifiers/utils/__init__.py +0 -0
  256. {verifiers-0.1.15.dev158 → verifiers-0.1.15.dev160}/verifiers/utils/async_utils.py +0 -0
  257. {verifiers-0.1.15.dev158 → verifiers-0.1.15.dev160}/verifiers/utils/client_utils.py +0 -0
  258. {verifiers-0.1.15.dev158 → verifiers-0.1.15.dev160}/verifiers/utils/config_utils.py +0 -0
  259. {verifiers-0.1.15.dev158 → verifiers-0.1.15.dev160}/verifiers/utils/data_utils.py +0 -0
  260. {verifiers-0.1.15.dev158 → verifiers-0.1.15.dev160}/verifiers/utils/display_utils.py +0 -0
  261. {verifiers-0.1.15.dev158 → verifiers-0.1.15.dev160}/verifiers/utils/env_config_utils.py +0 -0
  262. {verifiers-0.1.15.dev158 → verifiers-0.1.15.dev160}/verifiers/utils/error_utils.py +0 -0
  263. {verifiers-0.1.15.dev158 → verifiers-0.1.15.dev160}/verifiers/utils/eval_display.py +0 -0
  264. {verifiers-0.1.15.dev158 → verifiers-0.1.15.dev160}/verifiers/utils/eval_utils.py +0 -0
  265. {verifiers-0.1.15.dev158 → verifiers-0.1.15.dev160}/verifiers/utils/heartbeat.py +0 -0
  266. {verifiers-0.1.15.dev158 → verifiers-0.1.15.dev160}/verifiers/utils/import_utils.py +0 -0
  267. {verifiers-0.1.15.dev158 → verifiers-0.1.15.dev160}/verifiers/utils/install_utils.py +0 -0
  268. {verifiers-0.1.15.dev158 → verifiers-0.1.15.dev160}/verifiers/utils/interception_utils.py +0 -0
  269. {verifiers-0.1.15.dev158 → verifiers-0.1.15.dev160}/verifiers/utils/logging_utils.py +0 -0
  270. {verifiers-0.1.15.dev158 → verifiers-0.1.15.dev160}/verifiers/utils/message_utils.py +0 -0
  271. {verifiers-0.1.15.dev158 → verifiers-0.1.15.dev160}/verifiers/utils/metric_utils.py +0 -0
  272. {verifiers-0.1.15.dev158 → verifiers-0.1.15.dev160}/verifiers/utils/path_utils.py +0 -0
  273. {verifiers-0.1.15.dev158 → verifiers-0.1.15.dev160}/verifiers/utils/pricing_utils.py +0 -0
  274. {verifiers-0.1.15.dev158 → verifiers-0.1.15.dev160}/verifiers/utils/process_utils.py +0 -0
  275. {verifiers-0.1.15.dev158 → verifiers-0.1.15.dev160}/verifiers/utils/response_utils.py +0 -0
  276. {verifiers-0.1.15.dev158 → verifiers-0.1.15.dev160}/verifiers/utils/save_utils.py +0 -0
  277. {verifiers-0.1.15.dev158 → verifiers-0.1.15.dev160}/verifiers/utils/serve_utils.py +0 -0
  278. {verifiers-0.1.15.dev158 → verifiers-0.1.15.dev160}/verifiers/utils/thread_utils.py +0 -0
  279. {verifiers-0.1.15.dev158 → verifiers-0.1.15.dev160}/verifiers/utils/threaded_sandbox_client.py +0 -0
  280. {verifiers-0.1.15.dev158 → verifiers-0.1.15.dev160}/verifiers/utils/tool_utils.py +0 -0
  281. {verifiers-0.1.15.dev158 → verifiers-0.1.15.dev160}/verifiers/utils/usage_utils.py +0 -0
  282. {verifiers-0.1.15.dev158 → verifiers-0.1.15.dev160}/verifiers/utils/version_utils.py +0 -0
  283. {verifiers-0.1.15.dev158 → verifiers-0.1.15.dev160}/verifiers/v1/ENVIRONMENT_BEST_PRACTICES.md +0 -0
  284. {verifiers-0.1.15.dev158 → verifiers-0.1.15.dev160}/verifiers/v1/README.md +0 -0
  285. {verifiers-0.1.15.dev158 → verifiers-0.1.15.dev160}/verifiers/v1/RE_MIGRATION.md +0 -0
  286. {verifiers-0.1.15.dev158 → verifiers-0.1.15.dev160}/verifiers/v1/__init__.py +0 -0
  287. {verifiers-0.1.15.dev158 → verifiers-0.1.15.dev160}/verifiers/v1/artifact.py +0 -0
  288. {verifiers-0.1.15.dev158 → verifiers-0.1.15.dev160}/verifiers/v1/config.py +0 -0
  289. {verifiers-0.1.15.dev158 → verifiers-0.1.15.dev160}/verifiers/v1/env.py +0 -0
  290. {verifiers-0.1.15.dev158 → verifiers-0.1.15.dev160}/verifiers/v1/harness.py +0 -0
  291. {verifiers-0.1.15.dev158 → verifiers-0.1.15.dev160}/verifiers/v1/model.py +0 -0
  292. {verifiers-0.1.15.dev158 → verifiers-0.1.15.dev160}/verifiers/v1/program.py +0 -0
  293. {verifiers-0.1.15.dev158 → verifiers-0.1.15.dev160}/verifiers/v1/runtime.py +0 -0
  294. {verifiers-0.1.15.dev158 → verifiers-0.1.15.dev160}/verifiers/v1/runtime_handles.py +0 -0
  295. {verifiers-0.1.15.dev158 → verifiers-0.1.15.dev160}/verifiers/v1/sandbox.py +0 -0
  296. {verifiers-0.1.15.dev158 → verifiers-0.1.15.dev160}/verifiers/v1/state.py +0 -0
  297. {verifiers-0.1.15.dev158 → verifiers-0.1.15.dev160}/verifiers/v1/task.py +0 -0
  298. {verifiers-0.1.15.dev158 → verifiers-0.1.15.dev160}/verifiers/v1/toolset.py +0 -0
  299. {verifiers-0.1.15.dev158 → verifiers-0.1.15.dev160}/verifiers/v1/types.py +0 -0
  300. {verifiers-0.1.15.dev158 → verifiers-0.1.15.dev160}/verifiers/v1/user.py +0 -0
  301. {verifiers-0.1.15.dev158 → verifiers-0.1.15.dev160}/verifiers/v1/utils/__init__.py +0 -0
  302. {verifiers-0.1.15.dev158 → verifiers-0.1.15.dev160}/verifiers/v1/utils/binding_utils.py +0 -0
  303. {verifiers-0.1.15.dev158 → verifiers-0.1.15.dev160}/verifiers/v1/utils/config_callable_utils.py +0 -0
  304. {verifiers-0.1.15.dev158 → verifiers-0.1.15.dev160}/verifiers/v1/utils/config_utils.py +0 -0
  305. {verifiers-0.1.15.dev158 → verifiers-0.1.15.dev160}/verifiers/v1/utils/endpoint_utils.py +0 -0
  306. {verifiers-0.1.15.dev158 → verifiers-0.1.15.dev160}/verifiers/v1/utils/json_utils.py +0 -0
  307. {verifiers-0.1.15.dev158 → verifiers-0.1.15.dev160}/verifiers/v1/utils/judge_utils.py +0 -0
  308. {verifiers-0.1.15.dev158 → verifiers-0.1.15.dev160}/verifiers/v1/utils/lifecycle_utils.py +0 -0
  309. {verifiers-0.1.15.dev158 → verifiers-0.1.15.dev160}/verifiers/v1/utils/logging_utils.py +0 -0
  310. {verifiers-0.1.15.dev158 → verifiers-0.1.15.dev160}/verifiers/v1/utils/mcp_proxy_utils.py +0 -0
  311. {verifiers-0.1.15.dev158 → verifiers-0.1.15.dev160}/verifiers/v1/utils/mcp_utils.py +0 -0
  312. {verifiers-0.1.15.dev158 → verifiers-0.1.15.dev160}/verifiers/v1/utils/object_utils.py +0 -0
  313. {verifiers-0.1.15.dev158 → verifiers-0.1.15.dev160}/verifiers/v1/utils/program_utils.py +0 -0
  314. {verifiers-0.1.15.dev158 → verifiers-0.1.15.dev160}/verifiers/v1/utils/prompt_utils.py +0 -0
  315. {verifiers-0.1.15.dev158 → verifiers-0.1.15.dev160}/verifiers/v1/utils/runtime_owner_utils.py +0 -0
  316. {verifiers-0.1.15.dev158 → verifiers-0.1.15.dev160}/verifiers/v1/utils/runtime_registry.py +0 -0
  317. {verifiers-0.1.15.dev158 → verifiers-0.1.15.dev160}/verifiers/v1/utils/sandbox_program_utils.py +0 -0
  318. {verifiers-0.1.15.dev158 → verifiers-0.1.15.dev160}/verifiers/v1/utils/sandbox_python_utils.py +0 -0
  319. {verifiers-0.1.15.dev158 → verifiers-0.1.15.dev160}/verifiers/v1/utils/sandbox_utils.py +0 -0
  320. {verifiers-0.1.15.dev158 → verifiers-0.1.15.dev160}/verifiers/v1/utils/scoring_utils.py +0 -0
  321. {verifiers-0.1.15.dev158 → verifiers-0.1.15.dev160}/verifiers/v1/utils/serialization_utils.py +0 -0
  322. {verifiers-0.1.15.dev158 → verifiers-0.1.15.dev160}/verifiers/v1/utils/task_freeze_utils.py +0 -0
  323. {verifiers-0.1.15.dev158 → verifiers-0.1.15.dev160}/verifiers/v1/utils/tool_utils.py +0 -0
  324. {verifiers-0.1.15.dev158 → verifiers-0.1.15.dev160}/verifiers/v1/utils/toolset_utils.py +0 -0
  325. {verifiers-0.1.15.dev158 → verifiers-0.1.15.dev160}/verifiers/v1/utils/trajectory_utils.py +0 -0
  326. {verifiers-0.1.15.dev158 → verifiers-0.1.15.dev160}/verifiers/v1/utils/usage_utils.py +0 -0
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: verifiers
3
- Version: 0.1.15.dev158
3
+ Version: 0.1.15.dev160
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
@@ -54,17 +54,17 @@ Requires-Dist: aiohttp>=3.9.0; extra == 'browser'
54
54
  Requires-Dist: python-dotenv>=1.0.0; extra == 'browser'
55
55
  Requires-Dist: stagehand>=3.0.0; extra == 'browser'
56
56
  Provides-Extra: harnesses
57
- Requires-Dist: harnesses>=0.1.1; extra == 'harnesses'
57
+ Requires-Dist: harnesses>=0.1.2; extra == 'harnesses'
58
58
  Provides-Extra: nemogym
59
- Requires-Dist: harnesses[nemogym]>=0.1.1; extra == 'nemogym'
60
- Requires-Dist: tasksets[nemogym]>=0.1.1; extra == 'nemogym'
59
+ Requires-Dist: harnesses[nemogym]>=0.1.2; extra == 'nemogym'
60
+ Requires-Dist: tasksets[nemogym]>=0.1.5; extra == 'nemogym'
61
61
  Provides-Extra: openenv
62
- Requires-Dist: tasksets[openenv]>=0.1.1; extra == 'openenv'
62
+ Requires-Dist: tasksets[openenv]>=0.1.5; extra == 'openenv'
63
63
  Provides-Extra: openreward
64
- Requires-Dist: tasksets[openreward]>=0.1.1; extra == 'openreward'
64
+ Requires-Dist: tasksets[openreward]>=0.1.5; extra == 'openreward'
65
65
  Provides-Extra: packages
66
- Requires-Dist: harnesses>=0.1.1; extra == 'packages'
67
- Requires-Dist: tasksets[openenv,openreward,ta]>=0.1.1; extra == 'packages'
66
+ Requires-Dist: harnesses>=0.1.2; extra == 'packages'
67
+ Requires-Dist: tasksets[openenv,openreward,ta]>=0.1.5; extra == 'packages'
68
68
  Provides-Extra: renderers
69
69
  Requires-Dist: renderers>=0.1.8.dev28; extra == 'renderers'
70
70
  Provides-Extra: rg
@@ -84,7 +84,7 @@ Provides-Extra: ta
84
84
  Requires-Dist: nltk; extra == 'ta'
85
85
  Requires-Dist: textarena; extra == 'ta'
86
86
  Provides-Extra: tasksets
87
- Requires-Dist: tasksets[openenv,openreward,ta]>=0.1.1; extra == 'tasksets'
87
+ Requires-Dist: tasksets[openenv,openreward,ta]>=0.1.5; extra == 'tasksets'
88
88
  Description-Content-Type: text/markdown
89
89
 
90
90
  <p align="center">
@@ -89,14 +89,14 @@ ta = [
89
89
  "textarena",
90
90
  ]
91
91
  tasksets = [
92
- "tasksets[openenv,openreward,ta]>=0.1.1",
92
+ "tasksets[openenv,openreward,ta]>=0.1.5",
93
93
  ]
94
94
  harnesses = [
95
- "harnesses>=0.1.1",
95
+ "harnesses>=0.1.2",
96
96
  ]
97
97
  packages = [
98
- "harnesses>=0.1.1",
99
- "tasksets[openenv,openreward,ta]>=0.1.1",
98
+ "harnesses>=0.1.2",
99
+ "tasksets[openenv,openreward,ta]>=0.1.5",
100
100
  ]
101
101
  browser = [
102
102
  "stagehand>=3.0.0",
@@ -104,14 +104,14 @@ browser = [
104
104
  "python-dotenv>=1.0.0",
105
105
  ]
106
106
  openenv = [
107
- "tasksets[openenv]>=0.1.1",
107
+ "tasksets[openenv]>=0.1.5",
108
108
  ]
109
109
  openreward = [
110
- "tasksets[openreward]>=0.1.1",
110
+ "tasksets[openreward]>=0.1.5",
111
111
  ]
112
112
  nemogym = [
113
- "harnesses[nemogym]>=0.1.1",
114
- "tasksets[nemogym]>=0.1.1",
113
+ "harnesses[nemogym]>=0.1.2",
114
+ "tasksets[nemogym]>=0.1.5",
115
115
  ]
116
116
  renderers = [
117
117
  "renderers>=0.1.8.dev28",
@@ -17,6 +17,9 @@ PACKAGE_SYMBOLS = {
17
17
  "OpenCodeConfig",
18
18
  "Pi",
19
19
  "PiConfig",
20
+ "ReplayHarness",
21
+ "ReplayTaskset",
22
+ "ReplayTasksetConfig",
20
23
  "RLM",
21
24
  "RLMConfig",
22
25
  "Terminus2",
@@ -106,7 +106,7 @@ def test_init_openenv_writes_v1_taskset_template(tmp_path: Path) -> None:
106
106
  assert "taskset=vf.load_taskset(config=config.taskset)" in content
107
107
  assert "harness=vf.load_harness(config=config.harness)" in content
108
108
  assert "vf.OpenEnvEnv" not in content
109
- assert '"tasksets[openenv]>=0.1.1"' in pyproject
109
+ assert '"tasksets[openenv]>=0.1.5"' in pyproject
110
110
 
111
111
 
112
112
  def test_init_openenv_multifile_exports_taskset_loader(tmp_path: Path) -> None:
@@ -2738,6 +2738,68 @@ def test_load_environment_validates_typed_env_config_arg(
2738
2738
  }
2739
2739
 
2740
2740
 
2741
+ def test_load_environment_accepts_top_level_taskset_harness_shorthand(
2742
+ monkeypatch: pytest.MonkeyPatch,
2743
+ ) -> None:
2744
+ module_name = "typed_env_config_shorthand"
2745
+ module = types.ModuleType(module_name)
2746
+ seen: dict[str, object] = {}
2747
+
2748
+ def load_environment(split: str = "train", *, config: EnvConfig) -> Env:
2749
+ seen["split"] = split
2750
+ seen["config"] = config
2751
+ return Env(
2752
+ taskset=make_taskset(config=config.taskset),
2753
+ harness=make_harness(config=config.harness),
2754
+ )
2755
+
2756
+ module.load_environment = load_environment
2757
+ monkeypatch.setitem(sys.modules, module_name, module)
2758
+
2759
+ env = vf.load_environment(
2760
+ "typed-env-config-shorthand",
2761
+ split="test",
2762
+ taskset={"taskset_id": "top-level"},
2763
+ harness={"model": {"name": "top-level-model"}},
2764
+ )
2765
+
2766
+ assert seen["split"] == "test"
2767
+ config = seen["config"]
2768
+ assert isinstance(config, EnvConfig)
2769
+ assert config.taskset.taskset_id == "top-level"
2770
+ assert config.harness.model.name == "top-level-model"
2771
+ assert env.taskset.config.taskset_id == "top-level"
2772
+ assert env.harness.config.model.name == "top-level-model"
2773
+ assert env.env_args == {
2774
+ "split": "test",
2775
+ "taskset": {"taskset_id": "top-level"},
2776
+ "harness": {"model": {"name": "top-level-model"}},
2777
+ }
2778
+
2779
+
2780
+ def test_load_environment_rejects_duplicate_top_level_config_shorthand(
2781
+ monkeypatch: pytest.MonkeyPatch,
2782
+ ) -> None:
2783
+ module_name = "typed_env_config_duplicate_shorthand"
2784
+ module = types.ModuleType(module_name)
2785
+
2786
+ def load_environment(config: EnvConfig) -> Env:
2787
+ return Env(
2788
+ taskset=make_taskset(config=config.taskset),
2789
+ harness=make_harness(config=config.harness),
2790
+ )
2791
+
2792
+ module.load_environment = load_environment
2793
+ monkeypatch.setitem(sys.modules, module_name, module)
2794
+
2795
+ with pytest.raises(RuntimeError, match="not both"):
2796
+ vf.load_environment(
2797
+ "typed-env-config-duplicate-shorthand",
2798
+ config={"taskset": {"taskset_id": "nested"}},
2799
+ taskset={"taskset_id": "top-level"},
2800
+ )
2801
+
2802
+
2741
2803
  def test_load_environment_validates_env_config_subclass_sections(
2742
2804
  monkeypatch: pytest.MonkeyPatch,
2743
2805
  ) -> None:
@@ -3099,6 +3161,36 @@ def test_load_environment_composes_component_package_without_root_loader(
3099
3161
  assert env.harness.config.max_turns == 3
3100
3162
 
3101
3163
 
3164
+ def test_load_environment_component_package_accepts_top_level_config_shorthand(
3165
+ monkeypatch: pytest.MonkeyPatch,
3166
+ ) -> None:
3167
+ module_name = "component_only_taskset_shorthand"
3168
+ module = types.ModuleType(module_name)
3169
+
3170
+ class LocalTasksetConfig(TasksetConfig):
3171
+ answer: str = "configured"
3172
+
3173
+ class LocalTaskset(Taskset[LocalTasksetConfig]):
3174
+ def load_tasks(self, split: vf.TaskSplit = "train") -> vf.Tasks:
3175
+ return [{"prompt": [], "answer": f"{split}:{self.config.answer}"}]
3176
+
3177
+ def load_taskset(config: LocalTasksetConfig) -> LocalTaskset:
3178
+ return LocalTaskset(config=config)
3179
+
3180
+ module.load_taskset = load_taskset
3181
+ monkeypatch.setitem(sys.modules, module_name, module)
3182
+
3183
+ env = vf.load_environment(
3184
+ "component-only-taskset-shorthand",
3185
+ taskset={"answer": "top-level"},
3186
+ harness={"max_turns": 2},
3187
+ )
3188
+
3189
+ assert env.taskset.get_dataset()[0]["answer"] == "train:top-level"
3190
+ assert type(env.harness) is Harness
3191
+ assert env.harness.config.max_turns == 2
3192
+
3193
+
3102
3194
  def test_load_environment_delegates_missing_child_loaders_by_config_id(
3103
3195
  monkeypatch: pytest.MonkeyPatch,
3104
3196
  ) -> None:
@@ -0,0 +1,327 @@
1
+ import json
2
+ from pathlib import Path
3
+
4
+ import pytest
5
+
6
+ import verifiers as vf
7
+ from harnesses import ReplayHarness
8
+ from tasksets import ReplayTaskset, ReplayTasksetConfig
9
+ from tasksets.replay import replay_task_record
10
+
11
+
12
+ class NoModelClient:
13
+ def __init__(self) -> None:
14
+ self.requests = 0
15
+
16
+ async def get_response(self, **kwargs: object) -> object:
17
+ _ = kwargs
18
+ self.requests += 1
19
+ raise AssertionError("ReplayHarness must not request model completions.")
20
+
21
+
22
+ class InlineReplayTaskset(ReplayTaskset):
23
+ def load_tasks(self, split: vf.TaskSplit = "train") -> vf.Tasks:
24
+ if split == "eval":
25
+ return []
26
+ return [
27
+ {
28
+ "messages": [
29
+ {"role": "user", "content": "Reverse abc."},
30
+ {"role": "assistant", "content": "cba"},
31
+ {"role": "user", "content": "Now uppercase it."},
32
+ {
33
+ "role": "assistant",
34
+ "content": "CBA",
35
+ "reasoning_content": "uppercased the prior answer",
36
+ },
37
+ {"role": "user", "content": "Thanks."},
38
+ ],
39
+ }
40
+ ]
41
+
42
+
43
+ class ManyTurnReplayTaskset(ReplayTaskset):
44
+ def load_tasks(self, split: vf.TaskSplit = "train") -> vf.Tasks:
45
+ if split == "eval":
46
+ return []
47
+ messages = []
48
+ for index in range(11):
49
+ messages.append({"role": "user", "content": f"Turn {index}?"})
50
+ messages.append({"role": "assistant", "content": f"reply {index}"})
51
+ return [{"messages": messages}]
52
+
53
+
54
+ @pytest.mark.asyncio
55
+ async def test_replay_harness_prints_assistant_messages_into_trajectory() -> None:
56
+ env = vf.Env(
57
+ taskset=InlineReplayTaskset(),
58
+ harness=ReplayHarness(config=vf.HarnessConfig()),
59
+ )
60
+ client = NoModelClient()
61
+
62
+ state = await env.rollout(
63
+ dict(env.get_dataset()[0]),
64
+ client=client,
65
+ model="mock-model",
66
+ )
67
+
68
+ assert client.requests == 0
69
+ assert state["stop_condition"] == "replayed_messages"
70
+ assert state["num_model_requests"] == 2
71
+ assert state["prompt"] == [{"role": "user", "content": "Reverse abc."}]
72
+ assert state["completion"] == [
73
+ {"role": "assistant", "content": "cba"},
74
+ {"role": "user", "content": "Now uppercase it."},
75
+ {
76
+ "role": "assistant",
77
+ "content": "CBA",
78
+ "reasoning_content": "uppercased the prior answer",
79
+ },
80
+ ]
81
+ assert state["completion"][-1]["role"] == "assistant"
82
+
83
+ first, second = state["trajectory"]
84
+ assert first["prompt"] == [{"role": "user", "content": "Reverse abc."}]
85
+ assert first["completion"] == [{"role": "assistant", "content": "cba"}]
86
+ assert first["tokens"] is None
87
+ assert "tokens" not in first["response"]["message"]
88
+
89
+ assert second["prompt"] == [
90
+ {"role": "user", "content": "Reverse abc."},
91
+ {"role": "assistant", "content": "cba"},
92
+ {"role": "user", "content": "Now uppercase it."},
93
+ ]
94
+ assert second["completion"] == [
95
+ {
96
+ "role": "assistant",
97
+ "content": "CBA",
98
+ "reasoning_content": "uppercased the prior answer",
99
+ }
100
+ ]
101
+ assert second["tokens"] is None
102
+ assert "tokens" not in second["response"]["message"]
103
+
104
+
105
+ @pytest.mark.asyncio
106
+ async def test_replay_harness_marks_partial_replay_as_truncated() -> None:
107
+ env = vf.Env(
108
+ taskset=InlineReplayTaskset(),
109
+ harness=ReplayHarness(config=vf.HarnessConfig(max_turns=1)),
110
+ )
111
+
112
+ state = await env.rollout(
113
+ dict(env.get_dataset()[0]),
114
+ client=NoModelClient(),
115
+ model="mock-model",
116
+ )
117
+
118
+ assert state["stop_condition"] == "max_turns_reached"
119
+ assert state["is_truncated"] is True
120
+ assert state["num_model_requests"] == 1
121
+ assert state["completion"] == [{"role": "assistant", "content": "cba"}]
122
+ step = state["trajectory"][0]
123
+ assert step["is_truncated"] is True
124
+ assert step["response"]["message"]["is_truncated"] is True
125
+
126
+
127
+ @pytest.mark.asyncio
128
+ async def test_replay_harness_defaults_to_all_assistant_messages() -> None:
129
+ assert vf.HarnessConfig().max_turns == -1
130
+ env = vf.Env(
131
+ taskset=ManyTurnReplayTaskset(),
132
+ harness=ReplayHarness(config=vf.HarnessConfig()),
133
+ )
134
+
135
+ state = await env.rollout(
136
+ dict(env.get_dataset()[0]),
137
+ client=NoModelClient(),
138
+ model="mock-model",
139
+ )
140
+
141
+ assert state["stop_condition"] == "replayed_messages"
142
+ assert state["is_truncated"] is False
143
+ assert state["num_model_requests"] == 11
144
+ assert len(state["trajectory"]) == 11
145
+ assert state["completion"][-1] == {"role": "assistant", "content": "reply 10"}
146
+
147
+
148
+ def test_replay_taskset_loads_configured_local_jsonl_data(tmp_path: Path) -> None:
149
+ data_dir = tmp_path / "data"
150
+ data_dir.mkdir(parents=True)
151
+ (data_dir / "examples.jsonl").write_text(
152
+ "\n".join(
153
+ [
154
+ json.dumps(
155
+ {
156
+ "messages": [
157
+ {"role": "user", "content": "Say ok."},
158
+ {"role": "assistant", "content": "ok"},
159
+ ]
160
+ }
161
+ ),
162
+ json.dumps(
163
+ {
164
+ "messages": [
165
+ {"role": "user", "content": "Say yes."},
166
+ {"role": "assistant", "content": "yes"},
167
+ ]
168
+ }
169
+ ),
170
+ ]
171
+ )
172
+ + "\n",
173
+ encoding="utf-8",
174
+ )
175
+
176
+ taskset = ReplayTaskset(config=ReplayTasksetConfig(data_dir=str(data_dir)))
177
+
178
+ assert taskset.load_tasks() == [
179
+ {
180
+ "messages": [
181
+ {"role": "user", "content": "Say ok."},
182
+ {"role": "assistant", "content": "ok"},
183
+ ]
184
+ },
185
+ {
186
+ "messages": [
187
+ {"role": "user", "content": "Say yes."},
188
+ {"role": "assistant", "content": "yes"},
189
+ ]
190
+ },
191
+ ]
192
+
193
+
194
+ def test_replay_taskset_loads_subclass_local_jsonl_data(tmp_path: Path) -> None:
195
+ data_dir = tmp_path / "data"
196
+ data_dir.mkdir(parents=True)
197
+ (data_dir / "example.jsonl").write_text(
198
+ json.dumps(
199
+ {
200
+ "messages": [
201
+ {"role": "user", "content": "Say ok."},
202
+ {"role": "assistant", "content": "ok"},
203
+ ]
204
+ }
205
+ )
206
+ + "\n",
207
+ encoding="utf-8",
208
+ )
209
+ local_taskset_type = type(
210
+ "LocalReplayTaskset",
211
+ (ReplayTaskset,),
212
+ {"data_dir": str(data_dir)},
213
+ )
214
+ taskset = local_taskset_type(config=ReplayTasksetConfig())
215
+
216
+ assert taskset.load_tasks() == [
217
+ {
218
+ "messages": [
219
+ {"role": "user", "content": "Say ok."},
220
+ {"role": "assistant", "content": "ok"},
221
+ ]
222
+ }
223
+ ]
224
+
225
+
226
+ def test_replay_taskset_rejects_missing_local_source() -> None:
227
+ taskset = ReplayTaskset(config=ReplayTasksetConfig())
228
+
229
+ with pytest.raises(FileNotFoundError, match="requires dataset or data_dir"):
230
+ taskset.load_tasks()
231
+
232
+
233
+ def test_replay_taskset_rejects_conflicting_sources(tmp_path: Path) -> None:
234
+ taskset = ReplayTaskset(
235
+ config=ReplayTasksetConfig(dataset="owner/dataset", data_dir=str(tmp_path))
236
+ )
237
+
238
+ with pytest.raises(ValueError, match="cannot set both dataset and data_dir"):
239
+ taskset.load_tasks()
240
+
241
+
242
+ def test_replay_taskset_rejects_empty_local_data_dir(tmp_path: Path) -> None:
243
+ data_dir = tmp_path / "data"
244
+ data_dir.mkdir(parents=True)
245
+
246
+ taskset = ReplayTaskset(config=ReplayTasksetConfig(data_dir=str(data_dir)))
247
+
248
+ with pytest.raises(FileNotFoundError, match="must contain at least one JSONL"):
249
+ taskset.load_tasks()
250
+
251
+
252
+ def test_replay_taskset_rejects_json_files(tmp_path: Path) -> None:
253
+ data_dir = tmp_path / "data"
254
+ data_dir.mkdir(parents=True)
255
+ (data_dir / "example.json").write_text(
256
+ json.dumps(
257
+ {
258
+ "messages": [
259
+ {"role": "user", "content": "Say ok."},
260
+ {"role": "assistant", "content": "ok"},
261
+ ]
262
+ }
263
+ ),
264
+ encoding="utf-8",
265
+ )
266
+
267
+ taskset = ReplayTaskset(config=ReplayTasksetConfig(data_dir=str(data_dir)))
268
+
269
+ with pytest.raises(ValueError, match=r"accepts only \.jsonl files"):
270
+ taskset.load_tasks()
271
+
272
+
273
+ def test_replay_taskset_rejects_non_object_jsonl_rows(tmp_path: Path) -> None:
274
+ data_dir = tmp_path / "data"
275
+ data_dir.mkdir(parents=True)
276
+ (data_dir / "example.jsonl").write_text("[]\n", encoding="utf-8")
277
+
278
+ taskset = ReplayTaskset(config=ReplayTasksetConfig(data_dir=str(data_dir)))
279
+
280
+ with pytest.raises(TypeError, match="example.jsonl:1 must contain one JSON object"):
281
+ taskset.load_tasks()
282
+
283
+
284
+ def test_replay_taskset_canonicalizes_messages() -> None:
285
+ task = replay_task_record(
286
+ {
287
+ "messages": [
288
+ {"role": "user", "content": "Use the tool."},
289
+ {
290
+ "role": "assistant",
291
+ "content": None,
292
+ "tool_calls": [
293
+ {
294
+ "id": "call_1",
295
+ "type": "function",
296
+ "function": {
297
+ "name": "search",
298
+ "arguments": {"query": "abc"},
299
+ },
300
+ }
301
+ ],
302
+ },
303
+ ]
304
+ }
305
+ )
306
+
307
+ assert task["messages"] == [
308
+ {"role": "user", "content": "Use the tool."},
309
+ {
310
+ "role": "assistant",
311
+ "tool_calls": [
312
+ {
313
+ "id": "call_1",
314
+ "name": "search",
315
+ "arguments": '{"query": "abc"}',
316
+ }
317
+ ],
318
+ },
319
+ ]
320
+
321
+
322
+ def test_replay_taskset_rejects_invalid_messages() -> None:
323
+ with pytest.raises(TypeError, match="messages must be a list"):
324
+ replay_task_record({"messages": "not a transcript"})
325
+
326
+ with pytest.raises(ValueError, match="Unknown role"):
327
+ replay_task_record({"messages": [{"role": "assistantish", "content": "no"}]})
@@ -0,0 +1,120 @@
1
+ import json
2
+ import sys
3
+ import types
4
+
5
+ from datasets import Dataset
6
+
7
+ from verifiers.v1 import Taskset
8
+ from verifiers.v1.utils.taskset_utils import dataset_from_result, discover_sibling_dir
9
+
10
+
11
+ def task_payload(row: dict) -> dict:
12
+ return json.loads(row["info"]["task"])
13
+
14
+
15
+ def test_dataset_from_result_assigns_example_id_to_iterable_records():
16
+ dataset = dataset_from_result(
17
+ [
18
+ {"question": "Reverse abc.", "answer": "cba"},
19
+ {"question": "Reverse xyz.", "answer": "zyx"},
20
+ ],
21
+ "ReverseTextTaskset",
22
+ )
23
+
24
+ rows = list(dataset)
25
+ payloads = [task_payload(row) for row in rows]
26
+
27
+ assert [row["example_id"] for row in rows] == [0, 1]
28
+ assert [payload["example_id"] for payload in payloads] == [0, 1]
29
+ assert all(len(payload["task_id"]) == 32 for payload in payloads)
30
+ assert {payload["task_id"] for payload in payloads}.isdisjoint({"0", "1"})
31
+
32
+
33
+ def test_dataset_from_result_overwrites_existing_example_id_column():
34
+ raw_dataset = Dataset.from_list(
35
+ [
36
+ {"question": "Reverse abc.", "answer": "cba", "example_id": None},
37
+ {"question": "Reverse xyz.", "answer": "zyx", "example_id": 99},
38
+ ]
39
+ )
40
+
41
+ dataset = dataset_from_result(raw_dataset, "ReverseTextTaskset")
42
+
43
+ rows = list(dataset)
44
+ payloads = [task_payload(row) for row in rows]
45
+
46
+ assert [row["example_id"] for row in rows] == [0, 1]
47
+ assert [payload["example_id"] for payload in payloads] == [0, 1]
48
+ assert all(len(payload["task_id"]) == 32 for payload in payloads)
49
+ assert {payload["task_id"] for payload in payloads}.isdisjoint({"0", "1", "99"})
50
+
51
+
52
+ def test_discover_sibling_dir_returns_empty_existing_dir(tmp_path, monkeypatch) -> None:
53
+ env_dir = tmp_path / "empty_data_env"
54
+ data_dir = env_dir / "data"
55
+ data_dir.mkdir(parents=True)
56
+ module_path = env_dir / "empty_data_env.py"
57
+ module_path.write_text("", encoding="utf-8")
58
+
59
+ module = types.ModuleType("empty_data_env")
60
+ module.__file__ = str(module_path)
61
+ monkeypatch.setitem(sys.modules, module.__name__, module)
62
+ taskset_type = type(
63
+ "EmptyDataTaskset",
64
+ (),
65
+ {"__module__": module.__name__},
66
+ )
67
+
68
+ assert discover_sibling_dir(taskset_type, "data") == data_dir
69
+
70
+
71
+ def test_discover_sibling_dir_can_require_non_empty(tmp_path, monkeypatch) -> None:
72
+ env_dir = tmp_path / "empty_skills_env"
73
+ skills_dir = env_dir / "skills"
74
+ skills_dir.mkdir(parents=True)
75
+ module_path = env_dir / "empty_skills_env.py"
76
+ module_path.write_text("", encoding="utf-8")
77
+
78
+ module = types.ModuleType("empty_skills_env")
79
+ module.__file__ = str(module_path)
80
+ monkeypatch.setitem(sys.modules, module.__name__, module)
81
+ taskset_type = type(
82
+ "EmptySkillsTaskset",
83
+ (),
84
+ {"__module__": module.__name__},
85
+ )
86
+
87
+ assert discover_sibling_dir(taskset_type, "skills", require_non_empty=True) is None
88
+
89
+ (skills_dir / "SKILL.md").write_text("# Skill\n", encoding="utf-8")
90
+
91
+ assert (
92
+ discover_sibling_dir(taskset_type, "skills", require_non_empty=True)
93
+ == skills_dir
94
+ )
95
+
96
+
97
+ def test_taskset_skips_empty_skills_dir(tmp_path, monkeypatch) -> None:
98
+ env_dir = tmp_path / "empty_taskset_skills_env"
99
+ skills_dir = env_dir / "skills"
100
+ skills_dir.mkdir(parents=True)
101
+ module_path = env_dir / "empty_taskset_skills_env.py"
102
+ module_path.write_text("", encoding="utf-8")
103
+
104
+ module = types.ModuleType("empty_taskset_skills_env")
105
+ module.__file__ = str(module_path)
106
+ monkeypatch.setitem(sys.modules, module.__name__, module)
107
+ taskset_type = type(
108
+ "EmptyTasksetSkills",
109
+ (Taskset,),
110
+ {"__module__": module.__name__},
111
+ )
112
+ taskset = taskset_type()
113
+
114
+ assert taskset.get_skills_dir() is None
115
+ assert taskset.get_upload_dirs() == {}
116
+
117
+ (skills_dir / "SKILL.md").write_text("# Skill\n", encoding="utf-8")
118
+
119
+ assert taskset.get_skills_dir() == skills_dir
120
+ assert taskset.get_upload_dirs() == {"skills": skills_dir}
@@ -70,4 +70,3 @@ See `verifiers/envs/experimental/README.md` for documentation on:
70
70
  - `CliAgentEnv` - Agent code in sandboxes with API call interception
71
71
  - V1 `vf.Env` / `vf.Taskset` / `vf.Harness` - taskset/harness agent composition
72
72
  - `HarborEnv` - Harbor-format task loading
73
- - `RLMEnv` - Recursive Language Models
@@ -26,7 +26,3 @@ Environment for running custom agent code inside sandboxes. Intercepts the agent
26
26
  ## HarborEnv
27
27
 
28
28
  `CliAgentEnv` subclass that loads Harbor-format tasks. Harbor is a task format for agent benchmarks with structured task directories containing `task.toml` configuration and `instruction.md` prompts, along with test scripts for computing rewards.
29
-
30
- ## RLMEnv
31
-
32
- Environment implementing [Recursive Language Models](https://alexzhang13.github.io/blog/2025/rlm/) (RLMs), an inference strategy where language models can decompose and recursively interact with input context of unbounded length through REPL environments.
@@ -120,7 +120,7 @@ version = "0.1.0"
120
120
  requires-python = ">=3.10"
121
121
  dependencies = [
122
122
  "verifiers>={vf.__version__}",
123
- "tasksets[openenv]>=0.1.1",
123
+ "tasksets[openenv]>=0.1.5",
124
124
  ]
125
125
 
126
126
  [build-system]