verifiers 0.2.2.dev58__tar.gz → 0.2.2.dev60__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.
- {verifiers-0.2.2.dev58 → verifiers-0.2.2.dev60}/PKG-INFO +1 -1
- {verifiers-0.2.2.dev58 → verifiers-0.2.2.dev60}/tests/conftest.py +3 -0
- {verifiers-0.2.2.dev58 → verifiers-0.2.2.dev60}/tests/v1/conftest.py +4 -3
- {verifiers-0.2.2.dev58 → verifiers-0.2.2.dev60}/tests/v1/test_e2e.py +2 -0
- {verifiers-0.2.2.dev58 → verifiers-0.2.2.dev60}/verifiers/v1/agent.py +18 -18
- {verifiers-0.2.2.dev58 → verifiers-0.2.2.dev60}/verifiers/v1/harnesses/__init__.py +6 -0
- verifiers-0.2.2.dev60/verifiers/v1/harnesses/hermes_agent/__init__.py +6 -0
- verifiers-0.2.2.dev60/verifiers/v1/harnesses/hermes_agent/harness.py +140 -0
- verifiers-0.2.2.dev60/verifiers/v1/harnesses/hermes_agent/program.py +10 -0
- {verifiers-0.2.2.dev58 → verifiers-0.2.2.dev60}/verifiers/v1/rollout.py +23 -15
- {verifiers-0.2.2.dev58 → verifiers-0.2.2.dev60}/.gitignore +0 -0
- {verifiers-0.2.2.dev58 → verifiers-0.2.2.dev60}/LICENSE +0 -0
- {verifiers-0.2.2.dev58 → verifiers-0.2.2.dev60}/README.md +0 -0
- {verifiers-0.2.2.dev58 → verifiers-0.2.2.dev60}/pyproject.toml +0 -0
- {verifiers-0.2.2.dev58 → verifiers-0.2.2.dev60}/tests/__init__.py +0 -0
- {verifiers-0.2.2.dev58 → verifiers-0.2.2.dev60}/tests/test_browser_env.py +0 -0
- {verifiers-0.2.2.dev58 → verifiers-0.2.2.dev60}/tests/test_build_script.py +0 -0
- {verifiers-0.2.2.dev58 → verifiers-0.2.2.dev60}/tests/test_cli_agent_env.py +0 -0
- {verifiers-0.2.2.dev58 → verifiers-0.2.2.dev60}/tests/test_client_auth_errors.py +0 -0
- {verifiers-0.2.2.dev58 → verifiers-0.2.2.dev60}/tests/test_client_config.py +0 -0
- {verifiers-0.2.2.dev58 → verifiers-0.2.2.dev60}/tests/test_client_multimodal_types.py +0 -0
- {verifiers-0.2.2.dev58 → verifiers-0.2.2.dev60}/tests/test_composable_env.py +0 -0
- {verifiers-0.2.2.dev58 → verifiers-0.2.2.dev60}/tests/test_context_token_metrics.py +0 -0
- {verifiers-0.2.2.dev58 → verifiers-0.2.2.dev60}/tests/test_decorator_ranks.py +0 -0
- {verifiers-0.2.2.dev58 → verifiers-0.2.2.dev60}/tests/test_endpoint_registry.py +0 -0
- {verifiers-0.2.2.dev58 → verifiers-0.2.2.dev60}/tests/test_env_group.py +0 -0
- {verifiers-0.2.2.dev58 → verifiers-0.2.2.dev60}/tests/test_env_server.py +0 -0
- {verifiers-0.2.2.dev58 → verifiers-0.2.2.dev60}/tests/test_environment.py +0 -0
- {verifiers-0.2.2.dev58 → verifiers-0.2.2.dev60}/tests/test_environment_extra.py +0 -0
- {verifiers-0.2.2.dev58 → verifiers-0.2.2.dev60}/tests/test_error_chain.py +0 -0
- {verifiers-0.2.2.dev58 → verifiers-0.2.2.dev60}/tests/test_eval_display.py +0 -0
- {verifiers-0.2.2.dev58 → verifiers-0.2.2.dev60}/tests/test_eval_utils.py +0 -0
- {verifiers-0.2.2.dev58 → verifiers-0.2.2.dev60}/tests/test_gepa_cli.py +0 -0
- {verifiers-0.2.2.dev58 → verifiers-0.2.2.dev60}/tests/test_gepa_utils.py +0 -0
- {verifiers-0.2.2.dev58 → verifiers-0.2.2.dev60}/tests/test_gym_env.py +0 -0
- {verifiers-0.2.2.dev58 → verifiers-0.2.2.dev60}/tests/test_harbor_env_mcp.py +0 -0
- {verifiers-0.2.2.dev58 → verifiers-0.2.2.dev60}/tests/test_imports.py +0 -0
- {verifiers-0.2.2.dev58 → verifiers-0.2.2.dev60}/tests/test_init_script.py +0 -0
- {verifiers-0.2.2.dev58 → verifiers-0.2.2.dev60}/tests/test_install_utils.py +0 -0
- {verifiers-0.2.2.dev58 → verifiers-0.2.2.dev60}/tests/test_interception_utils.py +0 -0
- {verifiers-0.2.2.dev58 → verifiers-0.2.2.dev60}/tests/test_logging.py +0 -0
- {verifiers-0.2.2.dev58 → verifiers-0.2.2.dev60}/tests/test_math_rubric.py +0 -0
- {verifiers-0.2.2.dev58 → verifiers-0.2.2.dev60}/tests/test_maybe_think_parser.py +0 -0
- {verifiers-0.2.2.dev58 → verifiers-0.2.2.dev60}/tests/test_message_utils.py +0 -0
- {verifiers-0.2.2.dev58 → verifiers-0.2.2.dev60}/tests/test_message_utils_multimodal.py +0 -0
- {verifiers-0.2.2.dev58 → verifiers-0.2.2.dev60}/tests/test_multiturn_env.py +0 -0
- {verifiers-0.2.2.dev58 → verifiers-0.2.2.dev60}/tests/test_nemorl_client.py +0 -0
- {verifiers-0.2.2.dev58 → verifiers-0.2.2.dev60}/tests/test_openai_chat_completions_token_client.py +0 -0
- {verifiers-0.2.2.dev58 → verifiers-0.2.2.dev60}/tests/test_openai_responses_client.py +0 -0
- {verifiers-0.2.2.dev58 → verifiers-0.2.2.dev60}/tests/test_opencode_rlm_env.py +0 -0
- {verifiers-0.2.2.dev58 → verifiers-0.2.2.dev60}/tests/test_openenv_client.py +0 -0
- {verifiers-0.2.2.dev58 → verifiers-0.2.2.dev60}/tests/test_parser.py +0 -0
- {verifiers-0.2.2.dev58 → verifiers-0.2.2.dev60}/tests/test_path_utils.py +0 -0
- {verifiers-0.2.2.dev58 → verifiers-0.2.2.dev60}/tests/test_per_turn_timing.py +0 -0
- {verifiers-0.2.2.dev58 → verifiers-0.2.2.dev60}/tests/test_pricing_utils.py +0 -0
- {verifiers-0.2.2.dev58 → verifiers-0.2.2.dev60}/tests/test_prime_plugin.py +0 -0
- {verifiers-0.2.2.dev58 → verifiers-0.2.2.dev60}/tests/test_renderer_client.py +0 -0
- {verifiers-0.2.2.dev58 → verifiers-0.2.2.dev60}/tests/test_renderer_e2e.py +0 -0
- {verifiers-0.2.2.dev58 → verifiers-0.2.2.dev60}/tests/test_rlm_composable_env.py +0 -0
- {verifiers-0.2.2.dev58 → verifiers-0.2.2.dev60}/tests/test_rubric.py +0 -0
- {verifiers-0.2.2.dev58 → verifiers-0.2.2.dev60}/tests/test_rubric_group.py +0 -0
- {verifiers-0.2.2.dev58 → verifiers-0.2.2.dev60}/tests/test_sandbox_debug_env.py +0 -0
- {verifiers-0.2.2.dev58 → verifiers-0.2.2.dev60}/tests/test_sandbox_env.py +0 -0
- {verifiers-0.2.2.dev58 → verifiers-0.2.2.dev60}/tests/test_sandbox_mixin.py +0 -0
- {verifiers-0.2.2.dev58 → verifiers-0.2.2.dev60}/tests/test_save_utils.py +0 -0
- {verifiers-0.2.2.dev58 → verifiers-0.2.2.dev60}/tests/test_setup_script.py +0 -0
- {verifiers-0.2.2.dev58 → verifiers-0.2.2.dev60}/tests/test_singleturn_env.py +0 -0
- {verifiers-0.2.2.dev58 → verifiers-0.2.2.dev60}/tests/test_stateful_tool_env.py +0 -0
- {verifiers-0.2.2.dev58 → verifiers-0.2.2.dev60}/tests/test_think_parser.py +0 -0
- {verifiers-0.2.2.dev58 → verifiers-0.2.2.dev60}/tests/test_tool_env.py +0 -0
- {verifiers-0.2.2.dev58 → verifiers-0.2.2.dev60}/tests/test_tool_utils.py +0 -0
- {verifiers-0.2.2.dev58 → verifiers-0.2.2.dev60}/tests/test_trajectory_processing.py +0 -0
- {verifiers-0.2.2.dev58 → verifiers-0.2.2.dev60}/tests/test_tui_info_formatting.py +0 -0
- {verifiers-0.2.2.dev58 → verifiers-0.2.2.dev60}/tests/test_types.py +0 -0
- {verifiers-0.2.2.dev58 → verifiers-0.2.2.dev60}/tests/test_xml_parser.py +0 -0
- {verifiers-0.2.2.dev58 → verifiers-0.2.2.dev60}/tests/v1/fixtures/counter_tool_v1.py +0 -0
- {verifiers-0.2.2.dev58 → verifiers-0.2.2.dev60}/tests/v1/fixtures/duet_v1.py +0 -0
- {verifiers-0.2.2.dev58 → verifiers-0.2.2.dev60}/tests/v1/fixtures/echo_acp_resume_v1.py +0 -0
- {verifiers-0.2.2.dev58 → verifiers-0.2.2.dev60}/tests/v1/fixtures/echo_agentic_v1.py +0 -0
- {verifiers-0.2.2.dev58 → verifiers-0.2.2.dev60}/tests/v1/fixtures/echo_multi_v0.py +0 -0
- {verifiers-0.2.2.dev58 → verifiers-0.2.2.dev60}/tests/v1/fixtures/echo_tool_v1.py +0 -0
- {verifiers-0.2.2.dev58 → verifiers-0.2.2.dev60}/tests/v1/fixtures/echo_user_sim_v1.py +0 -0
- {verifiers-0.2.2.dev58 → verifiers-0.2.2.dev60}/tests/v1/fixtures/echo_v0.py +0 -0
- {verifiers-0.2.2.dev58 → verifiers-0.2.2.dev60}/tests/v1/fixtures/echo_v1.py +0 -0
- {verifiers-0.2.2.dev58 → verifiers-0.2.2.dev60}/tests/v1/fixtures/pyproject.toml +0 -0
- {verifiers-0.2.2.dev58 → verifiers-0.2.2.dev60}/tests/v1/fixtures/tool_response_image_v1.py +0 -0
- {verifiers-0.2.2.dev58 → verifiers-0.2.2.dev60}/tests/v1/test_color_codeword_tasks.py +0 -0
- {verifiers-0.2.2.dev58 → verifiers-0.2.2.dev60}/tests/v1/test_configs.py +0 -0
- {verifiers-0.2.2.dev58 → verifiers-0.2.2.dev60}/tests/v1/test_envs.py +0 -0
- {verifiers-0.2.2.dev58 → verifiers-0.2.2.dev60}/tests/v1/test_graph.py +0 -0
- {verifiers-0.2.2.dev58 → verifiers-0.2.2.dev60}/tests/v1/test_judges.py +0 -0
- {verifiers-0.2.2.dev58 → verifiers-0.2.2.dev60}/tests/v1/test_legacy.py +0 -0
- {verifiers-0.2.2.dev58 → verifiers-0.2.2.dev60}/tests/v1/test_scoring.py +0 -0
- {verifiers-0.2.2.dev58 → verifiers-0.2.2.dev60}/tests/v1/test_taskset.py +0 -0
- {verifiers-0.2.2.dev58 → verifiers-0.2.2.dev60}/tests/v1/test_trace.py +0 -0
- {verifiers-0.2.2.dev58 → verifiers-0.2.2.dev60}/verifiers/__init__.py +0 -0
- {verifiers-0.2.2.dev58 → verifiers-0.2.2.dev60}/verifiers/cli/__init__.py +0 -0
- {verifiers-0.2.2.dev58 → verifiers-0.2.2.dev60}/verifiers/cli/commands/__init__.py +0 -0
- {verifiers-0.2.2.dev58 → verifiers-0.2.2.dev60}/verifiers/cli/commands/build.py +0 -0
- {verifiers-0.2.2.dev58 → verifiers-0.2.2.dev60}/verifiers/cli/commands/eval.py +0 -0
- {verifiers-0.2.2.dev58 → verifiers-0.2.2.dev60}/verifiers/cli/commands/gepa.py +0 -0
- {verifiers-0.2.2.dev58 → verifiers-0.2.2.dev60}/verifiers/cli/commands/init.py +0 -0
- {verifiers-0.2.2.dev58 → verifiers-0.2.2.dev60}/verifiers/cli/commands/install.py +0 -0
- {verifiers-0.2.2.dev58 → verifiers-0.2.2.dev60}/verifiers/cli/commands/setup.py +0 -0
- {verifiers-0.2.2.dev58 → verifiers-0.2.2.dev60}/verifiers/cli/plugins/__init__.py +0 -0
- {verifiers-0.2.2.dev58 → verifiers-0.2.2.dev60}/verifiers/cli/plugins/prime.py +0 -0
- {verifiers-0.2.2.dev58 → verifiers-0.2.2.dev60}/verifiers/cli/tui.py +0 -0
- {verifiers-0.2.2.dev58 → verifiers-0.2.2.dev60}/verifiers/clients/__init__.py +0 -0
- {verifiers-0.2.2.dev58 → verifiers-0.2.2.dev60}/verifiers/clients/anthropic_messages_client.py +0 -0
- {verifiers-0.2.2.dev58 → verifiers-0.2.2.dev60}/verifiers/clients/client.py +0 -0
- {verifiers-0.2.2.dev58 → verifiers-0.2.2.dev60}/verifiers/clients/nemorl_chat_completions_client.py +0 -0
- {verifiers-0.2.2.dev58 → verifiers-0.2.2.dev60}/verifiers/clients/openai_chat_completions_client.py +0 -0
- {verifiers-0.2.2.dev58 → verifiers-0.2.2.dev60}/verifiers/clients/openai_chat_completions_token_client.py +0 -0
- {verifiers-0.2.2.dev58 → verifiers-0.2.2.dev60}/verifiers/clients/openai_completions_client.py +0 -0
- {verifiers-0.2.2.dev58 → verifiers-0.2.2.dev60}/verifiers/clients/openai_responses_client.py +0 -0
- {verifiers-0.2.2.dev58 → verifiers-0.2.2.dev60}/verifiers/clients/renderer_client.py +0 -0
- {verifiers-0.2.2.dev58 → verifiers-0.2.2.dev60}/verifiers/decorators.py +0 -0
- {verifiers-0.2.2.dev58 → verifiers-0.2.2.dev60}/verifiers/envs/__init__.py +0 -0
- {verifiers-0.2.2.dev58 → verifiers-0.2.2.dev60}/verifiers/envs/env_group.py +0 -0
- {verifiers-0.2.2.dev58 → verifiers-0.2.2.dev60}/verifiers/envs/environment.py +0 -0
- {verifiers-0.2.2.dev58 → verifiers-0.2.2.dev60}/verifiers/envs/experimental/README.md +0 -0
- {verifiers-0.2.2.dev58 → verifiers-0.2.2.dev60}/verifiers/envs/experimental/__init__.py +0 -0
- {verifiers-0.2.2.dev58 → verifiers-0.2.2.dev60}/verifiers/envs/experimental/cli_agent_env.py +0 -0
- {verifiers-0.2.2.dev58 → verifiers-0.2.2.dev60}/verifiers/envs/experimental/composable/README.md +0 -0
- {verifiers-0.2.2.dev58 → verifiers-0.2.2.dev60}/verifiers/envs/experimental/composable/__init__.py +0 -0
- {verifiers-0.2.2.dev58 → verifiers-0.2.2.dev60}/verifiers/envs/experimental/composable/_filter.py +0 -0
- {verifiers-0.2.2.dev58 → verifiers-0.2.2.dev60}/verifiers/envs/experimental/composable/composable_env.py +0 -0
- {verifiers-0.2.2.dev58 → verifiers-0.2.2.dev60}/verifiers/envs/experimental/composable/harness.py +0 -0
- {verifiers-0.2.2.dev58 → verifiers-0.2.2.dev60}/verifiers/envs/experimental/composable/harnesses/__init__.py +0 -0
- {verifiers-0.2.2.dev58 → verifiers-0.2.2.dev60}/verifiers/envs/experimental/composable/harnesses/mini_swe_agent.py +0 -0
- {verifiers-0.2.2.dev58 → verifiers-0.2.2.dev60}/verifiers/envs/experimental/composable/harnesses/opencode.py +0 -0
- {verifiers-0.2.2.dev58 → verifiers-0.2.2.dev60}/verifiers/envs/experimental/composable/harnesses/prompt.txt +0 -0
- {verifiers-0.2.2.dev58 → verifiers-0.2.2.dev60}/verifiers/envs/experimental/composable/harnesses/rlm.py +0 -0
- {verifiers-0.2.2.dev58 → verifiers-0.2.2.dev60}/verifiers/envs/experimental/composable/sandbox_debug_env.py +0 -0
- {verifiers-0.2.2.dev58 → verifiers-0.2.2.dev60}/verifiers/envs/experimental/composable/swe_debug_env.py +0 -0
- {verifiers-0.2.2.dev58 → verifiers-0.2.2.dev60}/verifiers/envs/experimental/composable/task.py +0 -0
- {verifiers-0.2.2.dev58 → verifiers-0.2.2.dev60}/verifiers/envs/experimental/composable/tasksets/__init__.py +0 -0
- {verifiers-0.2.2.dev58 → verifiers-0.2.2.dev60}/verifiers/envs/experimental/composable/tasksets/cp/__init__.py +0 -0
- {verifiers-0.2.2.dev58 → verifiers-0.2.2.dev60}/verifiers/envs/experimental/composable/tasksets/cp/cp_task.py +0 -0
- {verifiers-0.2.2.dev58 → verifiers-0.2.2.dev60}/verifiers/envs/experimental/composable/tasksets/cp/test_utils.py +0 -0
- {verifiers-0.2.2.dev58 → verifiers-0.2.2.dev60}/verifiers/envs/experimental/composable/tasksets/harbor/__init__.py +0 -0
- {verifiers-0.2.2.dev58 → verifiers-0.2.2.dev60}/verifiers/envs/experimental/composable/tasksets/harbor/cli_gym.py +0 -0
- {verifiers-0.2.2.dev58 → verifiers-0.2.2.dev60}/verifiers/envs/experimental/composable/tasksets/harbor/harbor.py +0 -0
- {verifiers-0.2.2.dev58 → verifiers-0.2.2.dev60}/verifiers/envs/experimental/composable/tasksets/harbor/terminal_lego.py +0 -0
- {verifiers-0.2.2.dev58 → verifiers-0.2.2.dev60}/verifiers/envs/experimental/composable/tasksets/math/__init__.py +0 -0
- {verifiers-0.2.2.dev58 → verifiers-0.2.2.dev60}/verifiers/envs/experimental/composable/tasksets/math/math_task.py +0 -0
- {verifiers-0.2.2.dev58 → verifiers-0.2.2.dev60}/verifiers/envs/experimental/composable/tasksets/swe/README.md +0 -0
- {verifiers-0.2.2.dev58 → verifiers-0.2.2.dev60}/verifiers/envs/experimental/composable/tasksets/swe/__init__.py +0 -0
- {verifiers-0.2.2.dev58 → verifiers-0.2.2.dev60}/verifiers/envs/experimental/composable/tasksets/swe/multi_swe/__init__.py +0 -0
- {verifiers-0.2.2.dev58 → verifiers-0.2.2.dev60}/verifiers/envs/experimental/composable/tasksets/swe/multi_swe/extract_fix_patch.sh +0 -0
- {verifiers-0.2.2.dev58 → verifiers-0.2.2.dev60}/verifiers/envs/experimental/composable/tasksets/swe/multi_swe/taskset.py +0 -0
- {verifiers-0.2.2.dev58 → verifiers-0.2.2.dev60}/verifiers/envs/experimental/composable/tasksets/swe/openswe/__init__.py +0 -0
- {verifiers-0.2.2.dev58 → verifiers-0.2.2.dev60}/verifiers/envs/experimental/composable/tasksets/swe/openswe/taskset.py +0 -0
- {verifiers-0.2.2.dev58 → verifiers-0.2.2.dev60}/verifiers/envs/experimental/composable/tasksets/swe/r2e_gym/__init__.py +0 -0
- {verifiers-0.2.2.dev58 → verifiers-0.2.2.dev60}/verifiers/envs/experimental/composable/tasksets/swe/r2e_gym/log_parser.py +0 -0
- {verifiers-0.2.2.dev58 → verifiers-0.2.2.dev60}/verifiers/envs/experimental/composable/tasksets/swe/r2e_gym/taskset.py +0 -0
- {verifiers-0.2.2.dev58 → verifiers-0.2.2.dev60}/verifiers/envs/experimental/composable/tasksets/swe/scale_swe/__init__.py +0 -0
- {verifiers-0.2.2.dev58 → verifiers-0.2.2.dev60}/verifiers/envs/experimental/composable/tasksets/swe/scale_swe/taskset.py +0 -0
- {verifiers-0.2.2.dev58 → verifiers-0.2.2.dev60}/verifiers/envs/experimental/composable/tasksets/swe/shared/__init__.py +0 -0
- {verifiers-0.2.2.dev58 → verifiers-0.2.2.dev60}/verifiers/envs/experimental/composable/tasksets/swe/shared/test_patch.py +0 -0
- {verifiers-0.2.2.dev58 → verifiers-0.2.2.dev60}/verifiers/envs/experimental/composable/tasksets/swe/swe_bench/__init__.py +0 -0
- {verifiers-0.2.2.dev58 → verifiers-0.2.2.dev60}/verifiers/envs/experimental/composable/tasksets/swe/swe_bench/taskset.py +0 -0
- {verifiers-0.2.2.dev58 → verifiers-0.2.2.dev60}/verifiers/envs/experimental/composable/tasksets/swe/swe_lego/__init__.py +0 -0
- {verifiers-0.2.2.dev58 → verifiers-0.2.2.dev60}/verifiers/envs/experimental/composable/tasksets/swe/swe_lego/taskset.py +0 -0
- {verifiers-0.2.2.dev58 → verifiers-0.2.2.dev60}/verifiers/envs/experimental/composable/tasksets/swe/swe_rebench_v2/__init__.py +0 -0
- {verifiers-0.2.2.dev58 → verifiers-0.2.2.dev60}/verifiers/envs/experimental/composable/tasksets/swe/swe_rebench_v2/log_parsers.py +0 -0
- {verifiers-0.2.2.dev58 → verifiers-0.2.2.dev60}/verifiers/envs/experimental/composable/tasksets/swe/swe_rebench_v2/taskset.py +0 -0
- {verifiers-0.2.2.dev58 → verifiers-0.2.2.dev60}/verifiers/envs/experimental/composable/tasksets/swe/swe_smith/__init__.py +0 -0
- {verifiers-0.2.2.dev58 → verifiers-0.2.2.dev60}/verifiers/envs/experimental/composable/tasksets/swe/swe_smith/taskset.py +0 -0
- {verifiers-0.2.2.dev58 → verifiers-0.2.2.dev60}/verifiers/envs/experimental/composable/tasksets/swe/swe_tasksets.py +0 -0
- {verifiers-0.2.2.dev58 → verifiers-0.2.2.dev60}/verifiers/envs/experimental/gym_env.py +0 -0
- {verifiers-0.2.2.dev58 → verifiers-0.2.2.dev60}/verifiers/envs/experimental/harbor_env/__init__.py +0 -0
- {verifiers-0.2.2.dev58 → verifiers-0.2.2.dev60}/verifiers/envs/experimental/harbor_env/env.py +0 -0
- {verifiers-0.2.2.dev58 → verifiers-0.2.2.dev60}/verifiers/envs/experimental/harbor_env/mcp.py +0 -0
- {verifiers-0.2.2.dev58 → verifiers-0.2.2.dev60}/verifiers/envs/experimental/mcp_env.py +0 -0
- {verifiers-0.2.2.dev58 → verifiers-0.2.2.dev60}/verifiers/envs/experimental/opencode_env.py +0 -0
- {verifiers-0.2.2.dev58 → verifiers-0.2.2.dev60}/verifiers/envs/experimental/opencode_qa_env.py +0 -0
- {verifiers-0.2.2.dev58 → verifiers-0.2.2.dev60}/verifiers/envs/experimental/opencode_rlm_env.py +0 -0
- {verifiers-0.2.2.dev58 → verifiers-0.2.2.dev60}/verifiers/envs/experimental/sandbox_mixin.py +0 -0
- {verifiers-0.2.2.dev58 → verifiers-0.2.2.dev60}/verifiers/envs/experimental/utils/__init__.py +0 -0
- {verifiers-0.2.2.dev58 → verifiers-0.2.2.dev60}/verifiers/envs/experimental/utils/file_locks.py +0 -0
- {verifiers-0.2.2.dev58 → verifiers-0.2.2.dev60}/verifiers/envs/experimental/utils/git_checkout_cache.py +0 -0
- {verifiers-0.2.2.dev58 → verifiers-0.2.2.dev60}/verifiers/envs/integrations/README.md +0 -0
- {verifiers-0.2.2.dev58 → verifiers-0.2.2.dev60}/verifiers/envs/integrations/__init__.py +0 -0
- {verifiers-0.2.2.dev58 → verifiers-0.2.2.dev60}/verifiers/envs/integrations/browser_env/README.md +0 -0
- {verifiers-0.2.2.dev58 → verifiers-0.2.2.dev60}/verifiers/envs/integrations/browser_env/__init__.py +0 -0
- {verifiers-0.2.2.dev58 → verifiers-0.2.2.dev60}/verifiers/envs/integrations/browser_env/browser_env.py +0 -0
- {verifiers-0.2.2.dev58 → verifiers-0.2.2.dev60}/verifiers/envs/integrations/browser_env/modes/__init__.py +0 -0
- {verifiers-0.2.2.dev58 → verifiers-0.2.2.dev60}/verifiers/envs/integrations/browser_env/modes/base.py +0 -0
- {verifiers-0.2.2.dev58 → verifiers-0.2.2.dev60}/verifiers/envs/integrations/browser_env/modes/cua_mode.py +0 -0
- {verifiers-0.2.2.dev58 → verifiers-0.2.2.dev60}/verifiers/envs/integrations/browser_env/modes/dom_mode.py +0 -0
- {verifiers-0.2.2.dev58 → verifiers-0.2.2.dev60}/verifiers/envs/integrations/openenv_env.py +0 -0
- {verifiers-0.2.2.dev58 → verifiers-0.2.2.dev60}/verifiers/envs/integrations/reasoninggym_env.py +0 -0
- {verifiers-0.2.2.dev58 → verifiers-0.2.2.dev60}/verifiers/envs/integrations/textarena_env.py +0 -0
- {verifiers-0.2.2.dev58 → verifiers-0.2.2.dev60}/verifiers/envs/multiturn_env.py +0 -0
- {verifiers-0.2.2.dev58 → verifiers-0.2.2.dev60}/verifiers/envs/python_env.py +0 -0
- {verifiers-0.2.2.dev58 → verifiers-0.2.2.dev60}/verifiers/envs/sandbox_env.py +0 -0
- {verifiers-0.2.2.dev58 → verifiers-0.2.2.dev60}/verifiers/envs/singleturn_env.py +0 -0
- {verifiers-0.2.2.dev58 → verifiers-0.2.2.dev60}/verifiers/envs/stateful_tool_env.py +0 -0
- {verifiers-0.2.2.dev58 → verifiers-0.2.2.dev60}/verifiers/envs/tool_env.py +0 -0
- {verifiers-0.2.2.dev58 → verifiers-0.2.2.dev60}/verifiers/errors.py +0 -0
- {verifiers-0.2.2.dev58 → verifiers-0.2.2.dev60}/verifiers/gepa/__init__.py +0 -0
- {verifiers-0.2.2.dev58 → verifiers-0.2.2.dev60}/verifiers/gepa/adapter.py +0 -0
- {verifiers-0.2.2.dev58 → verifiers-0.2.2.dev60}/verifiers/gepa/config.py +0 -0
- {verifiers-0.2.2.dev58 → verifiers-0.2.2.dev60}/verifiers/gepa/display.py +0 -0
- {verifiers-0.2.2.dev58 → verifiers-0.2.2.dev60}/verifiers/gepa/gepa_utils.py +0 -0
- {verifiers-0.2.2.dev58 → verifiers-0.2.2.dev60}/verifiers/parsers/__init__.py +0 -0
- {verifiers-0.2.2.dev58 → verifiers-0.2.2.dev60}/verifiers/parsers/maybe_think_parser.py +0 -0
- {verifiers-0.2.2.dev58 → verifiers-0.2.2.dev60}/verifiers/parsers/parser.py +0 -0
- {verifiers-0.2.2.dev58 → verifiers-0.2.2.dev60}/verifiers/parsers/think_parser.py +0 -0
- {verifiers-0.2.2.dev58 → verifiers-0.2.2.dev60}/verifiers/parsers/xml_parser.py +0 -0
- {verifiers-0.2.2.dev58 → verifiers-0.2.2.dev60}/verifiers/rubrics/__init__.py +0 -0
- {verifiers-0.2.2.dev58 → verifiers-0.2.2.dev60}/verifiers/rubrics/experimental/hybrid_math_rubric.py +0 -0
- {verifiers-0.2.2.dev58 → verifiers-0.2.2.dev60}/verifiers/rubrics/judge_rubric.py +0 -0
- {verifiers-0.2.2.dev58 → verifiers-0.2.2.dev60}/verifiers/rubrics/math_rubric.py +0 -0
- {verifiers-0.2.2.dev58 → verifiers-0.2.2.dev60}/verifiers/rubrics/rubric.py +0 -0
- {verifiers-0.2.2.dev58 → verifiers-0.2.2.dev60}/verifiers/rubrics/rubric_group.py +0 -0
- {verifiers-0.2.2.dev58 → verifiers-0.2.2.dev60}/verifiers/scripts/__init__.py +0 -0
- {verifiers-0.2.2.dev58 → verifiers-0.2.2.dev60}/verifiers/scripts/build.py +0 -0
- {verifiers-0.2.2.dev58 → verifiers-0.2.2.dev60}/verifiers/scripts/eval.py +0 -0
- {verifiers-0.2.2.dev58 → verifiers-0.2.2.dev60}/verifiers/scripts/gepa.py +0 -0
- {verifiers-0.2.2.dev58 → verifiers-0.2.2.dev60}/verifiers/scripts/init.py +0 -0
- {verifiers-0.2.2.dev58 → verifiers-0.2.2.dev60}/verifiers/scripts/install.py +0 -0
- {verifiers-0.2.2.dev58 → verifiers-0.2.2.dev60}/verifiers/scripts/setup.py +0 -0
- {verifiers-0.2.2.dev58 → verifiers-0.2.2.dev60}/verifiers/scripts/tui.py +0 -0
- {verifiers-0.2.2.dev58 → verifiers-0.2.2.dev60}/verifiers/serve/__init__.py +0 -0
- {verifiers-0.2.2.dev58 → verifiers-0.2.2.dev60}/verifiers/serve/client/env_client.py +0 -0
- {verifiers-0.2.2.dev58 → verifiers-0.2.2.dev60}/verifiers/serve/client/zmq_env_client.py +0 -0
- {verifiers-0.2.2.dev58 → verifiers-0.2.2.dev60}/verifiers/serve/server/__init__.py +0 -0
- {verifiers-0.2.2.dev58 → verifiers-0.2.2.dev60}/verifiers/serve/server/env_router.py +0 -0
- {verifiers-0.2.2.dev58 → verifiers-0.2.2.dev60}/verifiers/serve/server/env_server.py +0 -0
- {verifiers-0.2.2.dev58 → verifiers-0.2.2.dev60}/verifiers/serve/server/env_worker.py +0 -0
- {verifiers-0.2.2.dev58 → verifiers-0.2.2.dev60}/verifiers/serve/server/zmq_env_server.py +0 -0
- {verifiers-0.2.2.dev58 → verifiers-0.2.2.dev60}/verifiers/serve/types.py +0 -0
- {verifiers-0.2.2.dev58 → verifiers-0.2.2.dev60}/verifiers/types.py +0 -0
- {verifiers-0.2.2.dev58 → verifiers-0.2.2.dev60}/verifiers/utils/__init__.py +0 -0
- {verifiers-0.2.2.dev58 → verifiers-0.2.2.dev60}/verifiers/utils/async_utils.py +0 -0
- {verifiers-0.2.2.dev58 → verifiers-0.2.2.dev60}/verifiers/utils/client_utils.py +0 -0
- {verifiers-0.2.2.dev58 → verifiers-0.2.2.dev60}/verifiers/utils/config_utils.py +0 -0
- {verifiers-0.2.2.dev58 → verifiers-0.2.2.dev60}/verifiers/utils/data_utils.py +0 -0
- {verifiers-0.2.2.dev58 → verifiers-0.2.2.dev60}/verifiers/utils/display_utils.py +0 -0
- {verifiers-0.2.2.dev58 → verifiers-0.2.2.dev60}/verifiers/utils/env_config_utils.py +0 -0
- {verifiers-0.2.2.dev58 → verifiers-0.2.2.dev60}/verifiers/utils/env_utils.py +0 -0
- {verifiers-0.2.2.dev58 → verifiers-0.2.2.dev60}/verifiers/utils/error_utils.py +0 -0
- {verifiers-0.2.2.dev58 → verifiers-0.2.2.dev60}/verifiers/utils/eval_display.py +0 -0
- {verifiers-0.2.2.dev58 → verifiers-0.2.2.dev60}/verifiers/utils/eval_utils.py +0 -0
- {verifiers-0.2.2.dev58 → verifiers-0.2.2.dev60}/verifiers/utils/heartbeat.py +0 -0
- {verifiers-0.2.2.dev58 → verifiers-0.2.2.dev60}/verifiers/utils/import_utils.py +0 -0
- {verifiers-0.2.2.dev58 → verifiers-0.2.2.dev60}/verifiers/utils/install_utils.py +0 -0
- {verifiers-0.2.2.dev58 → verifiers-0.2.2.dev60}/verifiers/utils/interception_utils.py +0 -0
- {verifiers-0.2.2.dev58 → verifiers-0.2.2.dev60}/verifiers/utils/logging_utils.py +0 -0
- {verifiers-0.2.2.dev58 → verifiers-0.2.2.dev60}/verifiers/utils/message_utils.py +0 -0
- {verifiers-0.2.2.dev58 → verifiers-0.2.2.dev60}/verifiers/utils/metric_utils.py +0 -0
- {verifiers-0.2.2.dev58 → verifiers-0.2.2.dev60}/verifiers/utils/path_utils.py +0 -0
- {verifiers-0.2.2.dev58 → verifiers-0.2.2.dev60}/verifiers/utils/pricing_utils.py +0 -0
- {verifiers-0.2.2.dev58 → verifiers-0.2.2.dev60}/verifiers/utils/process_utils.py +0 -0
- {verifiers-0.2.2.dev58 → verifiers-0.2.2.dev60}/verifiers/utils/response_utils.py +0 -0
- {verifiers-0.2.2.dev58 → verifiers-0.2.2.dev60}/verifiers/utils/save_utils.py +0 -0
- {verifiers-0.2.2.dev58 → verifiers-0.2.2.dev60}/verifiers/utils/serve_utils.py +0 -0
- {verifiers-0.2.2.dev58 → verifiers-0.2.2.dev60}/verifiers/utils/thread_utils.py +0 -0
- {verifiers-0.2.2.dev58 → verifiers-0.2.2.dev60}/verifiers/utils/threaded_sandbox_client.py +0 -0
- {verifiers-0.2.2.dev58 → verifiers-0.2.2.dev60}/verifiers/utils/tool_utils.py +0 -0
- {verifiers-0.2.2.dev58 → verifiers-0.2.2.dev60}/verifiers/utils/usage_utils.py +0 -0
- {verifiers-0.2.2.dev58 → verifiers-0.2.2.dev60}/verifiers/utils/version_utils.py +0 -0
- {verifiers-0.2.2.dev58 → verifiers-0.2.2.dev60}/verifiers/v1/__init__.py +0 -0
- {verifiers-0.2.2.dev58 → verifiers-0.2.2.dev60}/verifiers/v1/acp/__init__.py +0 -0
- {verifiers-0.2.2.dev58 → verifiers-0.2.2.dev60}/verifiers/v1/acp/_runner.py +0 -0
- {verifiers-0.2.2.dev58 → verifiers-0.2.2.dev60}/verifiers/v1/artifacts.py +0 -0
- {verifiers-0.2.2.dev58 → verifiers-0.2.2.dev60}/verifiers/v1/cli/__init__.py +0 -0
- {verifiers-0.2.2.dev58 → verifiers-0.2.2.dev60}/verifiers/v1/cli/dashboard/__init__.py +0 -0
- {verifiers-0.2.2.dev58 → verifiers-0.2.2.dev60}/verifiers/v1/cli/dashboard/base.py +0 -0
- {verifiers-0.2.2.dev58 → verifiers-0.2.2.dev60}/verifiers/v1/cli/dashboard/eval.py +0 -0
- {verifiers-0.2.2.dev58 → verifiers-0.2.2.dev60}/verifiers/v1/cli/dashboard/replay.py +0 -0
- {verifiers-0.2.2.dev58 → verifiers-0.2.2.dev60}/verifiers/v1/cli/dashboard/validate.py +0 -0
- {verifiers-0.2.2.dev58 → verifiers-0.2.2.dev60}/verifiers/v1/cli/debug.py +0 -0
- {verifiers-0.2.2.dev58 → verifiers-0.2.2.dev60}/verifiers/v1/cli/eval/__init__.py +0 -0
- {verifiers-0.2.2.dev58 → verifiers-0.2.2.dev60}/verifiers/v1/cli/eval/main.py +0 -0
- {verifiers-0.2.2.dev58 → verifiers-0.2.2.dev60}/verifiers/v1/cli/eval/resume.py +0 -0
- {verifiers-0.2.2.dev58 → verifiers-0.2.2.dev60}/verifiers/v1/cli/eval/runner.py +0 -0
- {verifiers-0.2.2.dev58 → verifiers-0.2.2.dev60}/verifiers/v1/cli/gepa.py +0 -0
- {verifiers-0.2.2.dev58 → verifiers-0.2.2.dev60}/verifiers/v1/cli/init.py +0 -0
- {verifiers-0.2.2.dev58 → verifiers-0.2.2.dev60}/verifiers/v1/cli/output.py +0 -0
- {verifiers-0.2.2.dev58 → verifiers-0.2.2.dev60}/verifiers/v1/cli/replay.py +0 -0
- {verifiers-0.2.2.dev58 → verifiers-0.2.2.dev60}/verifiers/v1/cli/resolve.py +0 -0
- {verifiers-0.2.2.dev58 → verifiers-0.2.2.dev60}/verifiers/v1/cli/serve.py +0 -0
- {verifiers-0.2.2.dev58 → verifiers-0.2.2.dev60}/verifiers/v1/cli/validate.py +0 -0
- {verifiers-0.2.2.dev58 → verifiers-0.2.2.dev60}/verifiers/v1/clients/__init__.py +0 -0
- {verifiers-0.2.2.dev58 → verifiers-0.2.2.dev60}/verifiers/v1/clients/client.py +0 -0
- {verifiers-0.2.2.dev58 → verifiers-0.2.2.dev60}/verifiers/v1/clients/config.py +0 -0
- {verifiers-0.2.2.dev58 → verifiers-0.2.2.dev60}/verifiers/v1/clients/eval.py +0 -0
- {verifiers-0.2.2.dev58 → verifiers-0.2.2.dev60}/verifiers/v1/clients/train.py +0 -0
- {verifiers-0.2.2.dev58 → verifiers-0.2.2.dev60}/verifiers/v1/configs/__init__.py +0 -0
- {verifiers-0.2.2.dev58 → verifiers-0.2.2.dev60}/verifiers/v1/configs/agent.py +0 -0
- {verifiers-0.2.2.dev58 → verifiers-0.2.2.dev60}/verifiers/v1/configs/cli/__init__.py +0 -0
- {verifiers-0.2.2.dev58 → verifiers-0.2.2.dev60}/verifiers/v1/configs/cli/debug.py +0 -0
- {verifiers-0.2.2.dev58 → verifiers-0.2.2.dev60}/verifiers/v1/configs/cli/env.py +0 -0
- {verifiers-0.2.2.dev58 → verifiers-0.2.2.dev60}/verifiers/v1/configs/cli/eval.py +0 -0
- {verifiers-0.2.2.dev58 → verifiers-0.2.2.dev60}/verifiers/v1/configs/cli/init.py +0 -0
- {verifiers-0.2.2.dev58 → verifiers-0.2.2.dev60}/verifiers/v1/configs/cli/replay.py +0 -0
- {verifiers-0.2.2.dev58 → verifiers-0.2.2.dev60}/verifiers/v1/configs/cli/serve.py +0 -0
- {verifiers-0.2.2.dev58 → verifiers-0.2.2.dev60}/verifiers/v1/configs/cli/validate.py +0 -0
- {verifiers-0.2.2.dev58 → verifiers-0.2.2.dev60}/verifiers/v1/configs/env.py +0 -0
- {verifiers-0.2.2.dev58 → verifiers-0.2.2.dev60}/verifiers/v1/configs/harness.py +0 -0
- {verifiers-0.2.2.dev58 → verifiers-0.2.2.dev60}/verifiers/v1/configs/judge.py +0 -0
- {verifiers-0.2.2.dev58 → verifiers-0.2.2.dev60}/verifiers/v1/configs/legacy.py +0 -0
- {verifiers-0.2.2.dev58 → verifiers-0.2.2.dev60}/verifiers/v1/configs/retries.py +0 -0
- {verifiers-0.2.2.dev58 → verifiers-0.2.2.dev60}/verifiers/v1/configs/serve.py +0 -0
- {verifiers-0.2.2.dev58 → verifiers-0.2.2.dev60}/verifiers/v1/configs/task.py +0 -0
- {verifiers-0.2.2.dev58 → verifiers-0.2.2.dev60}/verifiers/v1/configs/taskset.py +0 -0
- {verifiers-0.2.2.dev58 → verifiers-0.2.2.dev60}/verifiers/v1/decorators.py +0 -0
- {verifiers-0.2.2.dev58 → verifiers-0.2.2.dev60}/verifiers/v1/dialects/__init__.py +0 -0
- {verifiers-0.2.2.dev58 → verifiers-0.2.2.dev60}/verifiers/v1/dialects/anthropic.py +0 -0
- {verifiers-0.2.2.dev58 → verifiers-0.2.2.dev60}/verifiers/v1/dialects/base.py +0 -0
- {verifiers-0.2.2.dev58 → verifiers-0.2.2.dev60}/verifiers/v1/dialects/chat.py +0 -0
- {verifiers-0.2.2.dev58 → verifiers-0.2.2.dev60}/verifiers/v1/dialects/responses.py +0 -0
- {verifiers-0.2.2.dev58 → verifiers-0.2.2.dev60}/verifiers/v1/env.py +0 -0
- {verifiers-0.2.2.dev58 → verifiers-0.2.2.dev60}/verifiers/v1/envs/__init__.py +0 -0
- {verifiers-0.2.2.dev58 → verifiers-0.2.2.dev60}/verifiers/v1/envs/agentic_judge/__init__.py +0 -0
- {verifiers-0.2.2.dev58 → verifiers-0.2.2.dev60}/verifiers/v1/envs/agentic_judge/env.py +0 -0
- {verifiers-0.2.2.dev58 → verifiers-0.2.2.dev60}/verifiers/v1/envs/best_of_n/__init__.py +0 -0
- {verifiers-0.2.2.dev58 → verifiers-0.2.2.dev60}/verifiers/v1/envs/best_of_n/env.py +0 -0
- {verifiers-0.2.2.dev58 → verifiers-0.2.2.dev60}/verifiers/v1/envs/single_agent/__init__.py +0 -0
- {verifiers-0.2.2.dev58 → verifiers-0.2.2.dev60}/verifiers/v1/envs/single_agent/env.py +0 -0
- {verifiers-0.2.2.dev58 → verifiers-0.2.2.dev60}/verifiers/v1/envs/user_sim/__init__.py +0 -0
- {verifiers-0.2.2.dev58 → verifiers-0.2.2.dev60}/verifiers/v1/envs/user_sim/env.py +0 -0
- {verifiers-0.2.2.dev58 → verifiers-0.2.2.dev60}/verifiers/v1/episode.py +0 -0
- {verifiers-0.2.2.dev58 → verifiers-0.2.2.dev60}/verifiers/v1/errors.py +0 -0
- {verifiers-0.2.2.dev58 → verifiers-0.2.2.dev60}/verifiers/v1/gepa/__init__.py +0 -0
- {verifiers-0.2.2.dev58 → verifiers-0.2.2.dev60}/verifiers/v1/gepa/adapter.py +0 -0
- {verifiers-0.2.2.dev58 → verifiers-0.2.2.dev60}/verifiers/v1/gepa/config.py +0 -0
- {verifiers-0.2.2.dev58 → verifiers-0.2.2.dev60}/verifiers/v1/gepa/dataset.py +0 -0
- {verifiers-0.2.2.dev58 → verifiers-0.2.2.dev60}/verifiers/v1/gepa/reflection.py +0 -0
- {verifiers-0.2.2.dev58 → verifiers-0.2.2.dev60}/verifiers/v1/gepa/runner.py +0 -0
- {verifiers-0.2.2.dev58 → verifiers-0.2.2.dev60}/verifiers/v1/graph.py +0 -0
- {verifiers-0.2.2.dev58 → verifiers-0.2.2.dev60}/verifiers/v1/harness.py +0 -0
- {verifiers-0.2.2.dev58 → verifiers-0.2.2.dev60}/verifiers/v1/harnesses/bash/__init__.py +0 -0
- {verifiers-0.2.2.dev58 → verifiers-0.2.2.dev60}/verifiers/v1/harnesses/bash/harness.py +0 -0
- {verifiers-0.2.2.dev58 → verifiers-0.2.2.dev60}/verifiers/v1/harnesses/bash/program.py +0 -0
- {verifiers-0.2.2.dev58 → verifiers-0.2.2.dev60}/verifiers/v1/harnesses/browser_use/__init__.py +0 -0
- {verifiers-0.2.2.dev58 → verifiers-0.2.2.dev60}/verifiers/v1/harnesses/browser_use/harness.py +0 -0
- {verifiers-0.2.2.dev58 → verifiers-0.2.2.dev60}/verifiers/v1/harnesses/browser_use/program.py +0 -0
- {verifiers-0.2.2.dev58 → verifiers-0.2.2.dev60}/verifiers/v1/harnesses/claude_code/__init__.py +0 -0
- {verifiers-0.2.2.dev58 → verifiers-0.2.2.dev60}/verifiers/v1/harnesses/claude_code/harness.py +0 -0
- {verifiers-0.2.2.dev58 → verifiers-0.2.2.dev60}/verifiers/v1/harnesses/codex/__init__.py +0 -0
- {verifiers-0.2.2.dev58 → verifiers-0.2.2.dev60}/verifiers/v1/harnesses/codex/harness.py +0 -0
- {verifiers-0.2.2.dev58 → verifiers-0.2.2.dev60}/verifiers/v1/harnesses/kimi_code/__init__.py +0 -0
- {verifiers-0.2.2.dev58 → verifiers-0.2.2.dev60}/verifiers/v1/harnesses/kimi_code/harness.py +0 -0
- {verifiers-0.2.2.dev58 → verifiers-0.2.2.dev60}/verifiers/v1/harnesses/mini_swe_agent/__init__.py +0 -0
- {verifiers-0.2.2.dev58 → verifiers-0.2.2.dev60}/verifiers/v1/harnesses/mini_swe_agent/harness.py +0 -0
- {verifiers-0.2.2.dev58 → verifiers-0.2.2.dev60}/verifiers/v1/harnesses/mini_swe_agent/program.py +0 -0
- {verifiers-0.2.2.dev58 → verifiers-0.2.2.dev60}/verifiers/v1/harnesses/null/__init__.py +0 -0
- {verifiers-0.2.2.dev58 → verifiers-0.2.2.dev60}/verifiers/v1/harnesses/null/harness.py +0 -0
- {verifiers-0.2.2.dev58 → verifiers-0.2.2.dev60}/verifiers/v1/harnesses/null/program.py +0 -0
- {verifiers-0.2.2.dev58 → verifiers-0.2.2.dev60}/verifiers/v1/harnesses/pi/__init__.py +0 -0
- {verifiers-0.2.2.dev58 → verifiers-0.2.2.dev60}/verifiers/v1/harnesses/pi/harness.py +0 -0
- {verifiers-0.2.2.dev58 → verifiers-0.2.2.dev60}/verifiers/v1/harnesses/pool/__init__.py +0 -0
- {verifiers-0.2.2.dev58 → verifiers-0.2.2.dev60}/verifiers/v1/harnesses/pool/harness.py +0 -0
- {verifiers-0.2.2.dev58 → verifiers-0.2.2.dev60}/verifiers/v1/harnesses/rlm/__init__.py +0 -0
- {verifiers-0.2.2.dev58 → verifiers-0.2.2.dev60}/verifiers/v1/harnesses/rlm/harness.py +0 -0
- {verifiers-0.2.2.dev58 → verifiers-0.2.2.dev60}/verifiers/v1/harnesses/terminus_2/__init__.py +0 -0
- {verifiers-0.2.2.dev58 → verifiers-0.2.2.dev60}/verifiers/v1/harnesses/terminus_2/harness.py +0 -0
- {verifiers-0.2.2.dev58 → verifiers-0.2.2.dev60}/verifiers/v1/harnesses/terminus_2/program.py +0 -0
- {verifiers-0.2.2.dev58 → verifiers-0.2.2.dev60}/verifiers/v1/interception/__init__.py +0 -0
- {verifiers-0.2.2.dev58 → verifiers-0.2.2.dev60}/verifiers/v1/interception/base.py +0 -0
- {verifiers-0.2.2.dev58 → verifiers-0.2.2.dev60}/verifiers/v1/interception/pool.py +0 -0
- {verifiers-0.2.2.dev58 → verifiers-0.2.2.dev60}/verifiers/v1/interception/server.py +0 -0
- {verifiers-0.2.2.dev58 → verifiers-0.2.2.dev60}/verifiers/v1/interception/tunnel/__init__.py +0 -0
- {verifiers-0.2.2.dev58 → verifiers-0.2.2.dev60}/verifiers/v1/interception/tunnel/base.py +0 -0
- {verifiers-0.2.2.dev58 → verifiers-0.2.2.dev60}/verifiers/v1/interception/tunnel/custom.py +0 -0
- {verifiers-0.2.2.dev58 → verifiers-0.2.2.dev60}/verifiers/v1/interception/tunnel/prime.py +0 -0
- {verifiers-0.2.2.dev58 → verifiers-0.2.2.dev60}/verifiers/v1/judge.py +0 -0
- {verifiers-0.2.2.dev58 → verifiers-0.2.2.dev60}/verifiers/v1/judges/__init__.py +0 -0
- {verifiers-0.2.2.dev58 → verifiers-0.2.2.dev60}/verifiers/v1/judges/reference.py +0 -0
- {verifiers-0.2.2.dev58 → verifiers-0.2.2.dev60}/verifiers/v1/judges/reference.txt +0 -0
- {verifiers-0.2.2.dev58 → verifiers-0.2.2.dev60}/verifiers/v1/judges/rubric.py +0 -0
- {verifiers-0.2.2.dev58 → verifiers-0.2.2.dev60}/verifiers/v1/judges/rubric.txt +0 -0
- {verifiers-0.2.2.dev58 → verifiers-0.2.2.dev60}/verifiers/v1/legacy.py +0 -0
- {verifiers-0.2.2.dev58 → verifiers-0.2.2.dev60}/verifiers/v1/loaders.py +0 -0
- {verifiers-0.2.2.dev58 → verifiers-0.2.2.dev60}/verifiers/v1/mcp/__init__.py +0 -0
- {verifiers-0.2.2.dev58 → verifiers-0.2.2.dev60}/verifiers/v1/mcp/launch.py +0 -0
- {verifiers-0.2.2.dev58 → verifiers-0.2.2.dev60}/verifiers/v1/mcp/server.py +0 -0
- {verifiers-0.2.2.dev58 → verifiers-0.2.2.dev60}/verifiers/v1/mcp/toolset.py +0 -0
- {verifiers-0.2.2.dev58 → verifiers-0.2.2.dev60}/verifiers/v1/push.py +0 -0
- {verifiers-0.2.2.dev58 → verifiers-0.2.2.dev60}/verifiers/v1/retries.py +0 -0
- {verifiers-0.2.2.dev58 → verifiers-0.2.2.dev60}/verifiers/v1/runtimes/__init__.py +0 -0
- {verifiers-0.2.2.dev58 → verifiers-0.2.2.dev60}/verifiers/v1/runtimes/base.py +0 -0
- {verifiers-0.2.2.dev58 → verifiers-0.2.2.dev60}/verifiers/v1/runtimes/docker/__init__.py +0 -0
- {verifiers-0.2.2.dev58 → verifiers-0.2.2.dev60}/verifiers/v1/runtimes/docker/egress.py +0 -0
- {verifiers-0.2.2.dev58 → verifiers-0.2.2.dev60}/verifiers/v1/runtimes/limiters.py +0 -0
- {verifiers-0.2.2.dev58 → verifiers-0.2.2.dev60}/verifiers/v1/runtimes/modal.py +0 -0
- {verifiers-0.2.2.dev58 → verifiers-0.2.2.dev60}/verifiers/v1/runtimes/prime.py +0 -0
- {verifiers-0.2.2.dev58 → verifiers-0.2.2.dev60}/verifiers/v1/runtimes/subprocess.py +0 -0
- {verifiers-0.2.2.dev58 → verifiers-0.2.2.dev60}/verifiers/v1/scoring.py +0 -0
- {verifiers-0.2.2.dev58 → verifiers-0.2.2.dev60}/verifiers/v1/serve/__init__.py +0 -0
- {verifiers-0.2.2.dev58 → verifiers-0.2.2.dev60}/verifiers/v1/serve/client.py +0 -0
- {verifiers-0.2.2.dev58 → verifiers-0.2.2.dev60}/verifiers/v1/serve/pool.py +0 -0
- {verifiers-0.2.2.dev58 → verifiers-0.2.2.dev60}/verifiers/v1/serve/server.py +0 -0
- {verifiers-0.2.2.dev58 → verifiers-0.2.2.dev60}/verifiers/v1/serve/types.py +0 -0
- {verifiers-0.2.2.dev58 → verifiers-0.2.2.dev60}/verifiers/v1/session.py +0 -0
- {verifiers-0.2.2.dev58 → verifiers-0.2.2.dev60}/verifiers/v1/state.py +0 -0
- {verifiers-0.2.2.dev58 → verifiers-0.2.2.dev60}/verifiers/v1/task.py +0 -0
- {verifiers-0.2.2.dev58 → verifiers-0.2.2.dev60}/verifiers/v1/taskset.py +0 -0
- {verifiers-0.2.2.dev58 → verifiers-0.2.2.dev60}/verifiers/v1/tasksets/__init__.py +0 -0
- {verifiers-0.2.2.dev58 → verifiers-0.2.2.dev60}/verifiers/v1/tasksets/harbor/__init__.py +0 -0
- {verifiers-0.2.2.dev58 → verifiers-0.2.2.dev60}/verifiers/v1/tasksets/harbor/taskset.py +0 -0
- {verifiers-0.2.2.dev58 → verifiers-0.2.2.dev60}/verifiers/v1/tasksets/lean/__init__.py +0 -0
- {verifiers-0.2.2.dev58 → verifiers-0.2.2.dev60}/verifiers/v1/tasksets/lean/scoring.py +0 -0
- {verifiers-0.2.2.dev58 → verifiers-0.2.2.dev60}/verifiers/v1/tasksets/lean/taskset.py +0 -0
- {verifiers-0.2.2.dev58 → verifiers-0.2.2.dev60}/verifiers/v1/tasksets/openenv/__init__.py +0 -0
- {verifiers-0.2.2.dev58 → verifiers-0.2.2.dev60}/verifiers/v1/tasksets/openenv/taskset.py +0 -0
- {verifiers-0.2.2.dev58 → verifiers-0.2.2.dev60}/verifiers/v1/tasksets/textarena/__init__.py +0 -0
- {verifiers-0.2.2.dev58 → verifiers-0.2.2.dev60}/verifiers/v1/tasksets/textarena/taskset.py +0 -0
- {verifiers-0.2.2.dev58 → verifiers-0.2.2.dev60}/verifiers/v1/trace.py +0 -0
- {verifiers-0.2.2.dev58 → verifiers-0.2.2.dev60}/verifiers/v1/types.py +0 -0
- {verifiers-0.2.2.dev58 → verifiers-0.2.2.dev60}/verifiers/v1/utils/__init__.py +0 -0
- {verifiers-0.2.2.dev58 → verifiers-0.2.2.dev60}/verifiers/v1/utils/aio.py +0 -0
- {verifiers-0.2.2.dev58 → verifiers-0.2.2.dev60}/verifiers/v1/utils/compile.py +0 -0
- {verifiers-0.2.2.dev58 → verifiers-0.2.2.dev60}/verifiers/v1/utils/format.py +0 -0
- {verifiers-0.2.2.dev58 → verifiers-0.2.2.dev60}/verifiers/v1/utils/generic.py +0 -0
- {verifiers-0.2.2.dev58 → verifiers-0.2.2.dev60}/verifiers/v1/utils/git.py +0 -0
- {verifiers-0.2.2.dev58 → verifiers-0.2.2.dev60}/verifiers/v1/utils/image.py +0 -0
- {verifiers-0.2.2.dev58 → verifiers-0.2.2.dev60}/verifiers/v1/utils/install.py +0 -0
- {verifiers-0.2.2.dev58 → verifiers-0.2.2.dev60}/verifiers/v1/utils/interrupt.py +0 -0
- {verifiers-0.2.2.dev58 → verifiers-0.2.2.dev60}/verifiers/v1/utils/logging.py +0 -0
- {verifiers-0.2.2.dev58 → verifiers-0.2.2.dev60}/verifiers/v1/utils/memory.py +0 -0
- {verifiers-0.2.2.dev58 → verifiers-0.2.2.dev60}/verifiers/v1/utils/sampling.py +0 -0
- {verifiers-0.2.2.dev58 → verifiers-0.2.2.dev60}/verifiers/v1/utils/version.py +0 -0
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
Metadata-Version: 2.4
|
|
2
2
|
Name: verifiers
|
|
3
|
-
Version: 0.2.2.
|
|
3
|
+
Version: 0.2.2.dev60
|
|
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
|
|
@@ -45,6 +45,9 @@ def pytest_configure(config) -> None:
|
|
|
45
45
|
config.addinivalue_line(
|
|
46
46
|
"markers", "claude_code: v1 e2e cases on the claude-code harness"
|
|
47
47
|
)
|
|
48
|
+
config.addinivalue_line(
|
|
49
|
+
"markers", "hermes_agent: v1 e2e cases on the hermes-agent harness"
|
|
50
|
+
)
|
|
48
51
|
|
|
49
52
|
|
|
50
53
|
@pytest.fixture
|
|
@@ -25,7 +25,8 @@ Every combination carries its axes' pytest marks, so subsets select with `-m`:
|
|
|
25
25
|
uv run pytest tests/v1 -n auto -m modal # only modal (needs local setup)
|
|
26
26
|
|
|
27
27
|
Marks: runtimes `subprocess` / `docker` / `prime` / `modal`, placement `colocated`,
|
|
28
|
-
harnesses `null` / `bash` / `rlm` / `kimi_code` / `pi` / `pool` / `codex` / `claude_code
|
|
28
|
+
harnesses `null` / `bash` / `rlm` / `kimi_code` / `pi` / `pool` / `codex` / `claude_code` /
|
|
29
|
+
`hermes_agent`.
|
|
29
30
|
A mark is applied per axis, so it selects every case touching that value on ANY axis; for one exact
|
|
30
31
|
combination use `-k` on the test id (e.g. `-k "harness-in-docker-with-tool-in-subprocess"`).
|
|
31
32
|
prime/modal provision real remote sandboxes (slow, infra-flaky, need setup), so they're local-only.
|
|
@@ -69,8 +70,8 @@ def tool_runtime(request) -> dict:
|
|
|
69
70
|
|
|
70
71
|
|
|
71
72
|
# Built-in harnesses are bundled in the `harnesses` package; the agent CLIs (`rlm` /
|
|
72
|
-
# `kimi-code` / `codex` / `claude-code`) install their dependencies at rollout.
|
|
73
|
-
# example harness) and `terminus-2` (drives the host tmux) are excluded from e2e.
|
|
73
|
+
# `kimi-code` / `codex` / `claude-code` / `hermes-agent`) install their dependencies at rollout.
|
|
74
|
+
# `compact` (an example harness) and `terminus-2` (drives the host tmux) are excluded from e2e.
|
|
74
75
|
@pytest.fixture
|
|
75
76
|
def harness(request) -> str:
|
|
76
77
|
return request.param
|
|
@@ -37,6 +37,7 @@ AGENTIC_PLACEMENTS = [
|
|
|
37
37
|
_pair("kimi-code", "docker", "kimi-code-harness-in-docker"),
|
|
38
38
|
_pair("codex", "docker", "codex-harness-in-docker"),
|
|
39
39
|
_pair("claude-code", "docker", "claude-code-harness-in-docker"),
|
|
40
|
+
_pair("hermes-agent", "docker", "hermes-agent-harness-in-docker"),
|
|
40
41
|
_pair("bash", "prime", "bash-harness-in-prime"),
|
|
41
42
|
_pair("bash", "modal", "bash-harness-in-modal"),
|
|
42
43
|
]
|
|
@@ -54,6 +55,7 @@ USER_RUNTIMES = [
|
|
|
54
55
|
# retain MCP access after resuming. Cover every harness in the local container runtime,
|
|
55
56
|
# plus one remote placement for the sandbox/tunnel boundary.
|
|
56
57
|
ACP_RESUME_PLACEMENTS = [
|
|
58
|
+
_pair("hermes-agent", "docker", "hermes-agent-acp-in-docker"),
|
|
57
59
|
_pair("kimi-code", "docker", "kimi-code-acp-in-docker"),
|
|
58
60
|
_pair("pi", "docker", "pi-acp-in-docker"),
|
|
59
61
|
_pair("pool", "docker", "pool-acp-in-docker"),
|
|
@@ -25,7 +25,7 @@ from verifiers.v1.harness import Harness
|
|
|
25
25
|
from verifiers.v1.interception import Interception, InterceptionServer
|
|
26
26
|
from verifiers.v1.mcp import SharedToolServer
|
|
27
27
|
from verifiers.v1.retries import backoff, trace_should_retry
|
|
28
|
-
from verifiers.v1.rollout import RolloutRun, _as_messages
|
|
28
|
+
from verifiers.v1.rollout import RolloutRun, RolloutTimeouts, _as_messages
|
|
29
29
|
from verifiers.v1.runtimes import (
|
|
30
30
|
NetworkPolicyConfig,
|
|
31
31
|
Runtime,
|
|
@@ -533,23 +533,23 @@ class Agent:
|
|
|
533
533
|
"harness": self.harness,
|
|
534
534
|
"ctx": self.ctx,
|
|
535
535
|
"runtime_config": runtime_config,
|
|
536
|
-
"
|
|
537
|
-
|
|
538
|
-
|
|
539
|
-
|
|
540
|
-
|
|
541
|
-
|
|
542
|
-
agent_timeout, runtime_config, task
|
|
543
|
-
|
|
544
|
-
|
|
545
|
-
|
|
546
|
-
|
|
547
|
-
|
|
548
|
-
|
|
549
|
-
|
|
550
|
-
|
|
551
|
-
|
|
552
|
-
|
|
536
|
+
"timeouts": RolloutTimeouts(
|
|
537
|
+
setup=(
|
|
538
|
+
self.timeout.setup
|
|
539
|
+
if self.timeout.setup is not None
|
|
540
|
+
else task.data.timeout.setup
|
|
541
|
+
),
|
|
542
|
+
agent=cap_remote_agent_timeout(agent_timeout, runtime_config, task),
|
|
543
|
+
finalize=(
|
|
544
|
+
self.timeout.finalize
|
|
545
|
+
if self.timeout.finalize is not None
|
|
546
|
+
else task.data.timeout.finalize
|
|
547
|
+
),
|
|
548
|
+
scoring=(
|
|
549
|
+
self.timeout.scoring
|
|
550
|
+
if self.timeout.scoring is not None
|
|
551
|
+
else task.data.timeout.scoring
|
|
552
|
+
),
|
|
553
553
|
),
|
|
554
554
|
"limits": self.limits,
|
|
555
555
|
"shared_tools": shared_tools,
|
|
@@ -8,6 +8,10 @@ from verifiers.v1.harnesses.claude_code import (
|
|
|
8
8
|
ClaudeCodeHarnessConfig,
|
|
9
9
|
)
|
|
10
10
|
from verifiers.v1.harnesses.codex import CodexHarness, CodexHarnessConfig
|
|
11
|
+
from verifiers.v1.harnesses.hermes_agent import (
|
|
12
|
+
HermesAgentHarness,
|
|
13
|
+
HermesAgentHarnessConfig,
|
|
14
|
+
)
|
|
11
15
|
from verifiers.v1.harnesses.kimi_code import KimiCodeHarness, KimiCodeHarnessConfig
|
|
12
16
|
from verifiers.v1.harnesses.mini_swe_agent import (
|
|
13
17
|
MiniSWEAgentHarness,
|
|
@@ -28,6 +32,8 @@ __all__ = [
|
|
|
28
32
|
"ClaudeCodeHarnessConfig",
|
|
29
33
|
"CodexHarness",
|
|
30
34
|
"CodexHarnessConfig",
|
|
35
|
+
"HermesAgentHarness",
|
|
36
|
+
"HermesAgentHarnessConfig",
|
|
31
37
|
"KimiCodeHarness",
|
|
32
38
|
"KimiCodeHarnessConfig",
|
|
33
39
|
"MiniSWEAgentHarness",
|
|
@@ -0,0 +1,140 @@
|
|
|
1
|
+
"""Run Hermes Agent against interception through its native ACP server."""
|
|
2
|
+
|
|
3
|
+
import json
|
|
4
|
+
import logging
|
|
5
|
+
from pathlib import Path
|
|
6
|
+
|
|
7
|
+
from pydantic import Field
|
|
8
|
+
|
|
9
|
+
from verifiers.v1.acp import ACP
|
|
10
|
+
from verifiers.v1.clients import ModelContext
|
|
11
|
+
from verifiers.v1.configs.harness import HarnessConfig
|
|
12
|
+
from verifiers.v1.harness import Harness
|
|
13
|
+
from verifiers.v1.runtimes import ProgramResult, Runtime
|
|
14
|
+
from verifiers.v1.task import TaskData
|
|
15
|
+
from verifiers.v1.trace import Trace
|
|
16
|
+
|
|
17
|
+
PROGRAM_SOURCE = (Path(__file__).resolve().parent / "program.py").read_text()
|
|
18
|
+
SKILLS_DIR = ".vf-hermes-skills"
|
|
19
|
+
HERMES_ACP = ACP()
|
|
20
|
+
PROVIDER = "intercept"
|
|
21
|
+
logger = logging.getLogger(__name__)
|
|
22
|
+
|
|
23
|
+
|
|
24
|
+
class HermesAgentHarnessConfig(HarnessConfig):
|
|
25
|
+
version: str = Field(default="0.19.0", pattern=r"^[A-Za-z0-9._+-]+$")
|
|
26
|
+
"""Hermes Agent release to install, pinned for reproducibility."""
|
|
27
|
+
use_bundled_skill: bool = False
|
|
28
|
+
"""Enable Hermes Agent's bundled skill catalog in addition to uploaded skills."""
|
|
29
|
+
|
|
30
|
+
|
|
31
|
+
class HermesAgentHarness(Harness[HermesAgentHarnessConfig]):
|
|
32
|
+
APPENDS_SYSTEM_PROMPT = True
|
|
33
|
+
SUPPORTS_MCP = True
|
|
34
|
+
SUPPORTS_RESUME = True
|
|
35
|
+
SUPPORTS_SKILLS = True
|
|
36
|
+
|
|
37
|
+
async def setup(self, runtime: Runtime) -> None:
|
|
38
|
+
await self.install_skills(runtime, SKILLS_DIR)
|
|
39
|
+
logger.info(
|
|
40
|
+
"hermes-agent: ensuring Hermes Agent %s is installed", self.config.version
|
|
41
|
+
)
|
|
42
|
+
source = PROGRAM_SOURCE.replace("{version}", self.config.version)
|
|
43
|
+
await runtime.prepare_uv_script(source, self.config.resolved_env)
|
|
44
|
+
await HERMES_ACP.setup(self, runtime)
|
|
45
|
+
|
|
46
|
+
async def launch(
|
|
47
|
+
self,
|
|
48
|
+
ctx: ModelContext,
|
|
49
|
+
trace: Trace,
|
|
50
|
+
runtime: Runtime,
|
|
51
|
+
endpoint: str,
|
|
52
|
+
secret: str,
|
|
53
|
+
mcp_urls: dict[str, str],
|
|
54
|
+
data: TaskData,
|
|
55
|
+
) -> ProgramResult:
|
|
56
|
+
if self.config.disabled_tools:
|
|
57
|
+
raise ValueError("Hermes Agent ACP does not support disabling tools")
|
|
58
|
+
|
|
59
|
+
system_prompt, prompt = self.resolve_prompt(data)
|
|
60
|
+
home = self._home(trace)
|
|
61
|
+
model: dict[str, object] = {
|
|
62
|
+
"provider": PROVIDER,
|
|
63
|
+
"default": ctx.model,
|
|
64
|
+
"base_url": endpoint,
|
|
65
|
+
"api_mode": "chat_completions",
|
|
66
|
+
}
|
|
67
|
+
if ctx.sampling.max_tokens is not None:
|
|
68
|
+
model["max_tokens"] = ctx.sampling.max_tokens
|
|
69
|
+
await runtime.write(
|
|
70
|
+
f"{home}/config.yaml",
|
|
71
|
+
json.dumps(
|
|
72
|
+
{
|
|
73
|
+
"model": model,
|
|
74
|
+
# The ACP client already approves tool requests. Avoid routing Hermes'
|
|
75
|
+
# redundant smart-approval model calls through interception as turns.
|
|
76
|
+
"approvals": {"mode": "off"},
|
|
77
|
+
"providers": {
|
|
78
|
+
PROVIDER: {
|
|
79
|
+
"api": endpoint,
|
|
80
|
+
"api_key": secret,
|
|
81
|
+
"transport": "chat_completions",
|
|
82
|
+
"discover_models": False,
|
|
83
|
+
"models": [ctx.model],
|
|
84
|
+
}
|
|
85
|
+
},
|
|
86
|
+
}
|
|
87
|
+
).encode(),
|
|
88
|
+
)
|
|
89
|
+
if not self.config.use_bundled_skill:
|
|
90
|
+
await runtime.write(
|
|
91
|
+
f"{home}/.no-bundled-skills",
|
|
92
|
+
b"Verifiers supplies evaluation skills explicitly.\n",
|
|
93
|
+
)
|
|
94
|
+
|
|
95
|
+
if self.config.skills:
|
|
96
|
+
skill_home = f"{home}/skills"
|
|
97
|
+
for command in (
|
|
98
|
+
["rm", "-rf", skill_home],
|
|
99
|
+
["cp", "-R", SKILLS_DIR, skill_home],
|
|
100
|
+
):
|
|
101
|
+
copied = await runtime.run(command, {})
|
|
102
|
+
if copied.exit_code != 0:
|
|
103
|
+
raise RuntimeError(
|
|
104
|
+
f"failed to stage Hermes skills: {copied.stderr.strip()[-500:]}"
|
|
105
|
+
)
|
|
106
|
+
|
|
107
|
+
env = {
|
|
108
|
+
**self.config.resolved_env,
|
|
109
|
+
"HERMES_HOME": home,
|
|
110
|
+
"HERMES_ACP_SKIP_CONFIGURED_MCP": "1",
|
|
111
|
+
}
|
|
112
|
+
source = PROGRAM_SOURCE.replace("{version}", self.config.version)
|
|
113
|
+
command = await runtime.prepare_uv_script(source, env)
|
|
114
|
+
calls_before = len(trace.calls)
|
|
115
|
+
result = await HERMES_ACP.run(
|
|
116
|
+
runtime,
|
|
117
|
+
env,
|
|
118
|
+
command,
|
|
119
|
+
prompt,
|
|
120
|
+
mcp_urls=mcp_urls,
|
|
121
|
+
system_prompt=system_prompt,
|
|
122
|
+
session_path=f"{home}/acp-session",
|
|
123
|
+
)
|
|
124
|
+
if not any(call.node is not None for call in trace.calls[calls_before:]):
|
|
125
|
+
detail = (result.stderr or result.stdout).strip()[-500:] or "<no output>"
|
|
126
|
+
raise RuntimeError(
|
|
127
|
+
"Hermes Agent completed without committing a model turn: " + detail
|
|
128
|
+
)
|
|
129
|
+
return result
|
|
130
|
+
|
|
131
|
+
async def cleanup(self, trace: Trace, runtime: Runtime) -> None:
|
|
132
|
+
result = await runtime.run(["rm", "-rf", self._home(trace)], {})
|
|
133
|
+
if result.exit_code != 0:
|
|
134
|
+
raise RuntimeError(
|
|
135
|
+
f"failed to clean up Hermes home: {result.stderr.strip()[-500:]}"
|
|
136
|
+
)
|
|
137
|
+
|
|
138
|
+
@staticmethod
|
|
139
|
+
def _home(trace: Trace) -> str:
|
|
140
|
+
return f"/tmp/vf-hermes/{trace.id}"
|
|
@@ -23,6 +23,7 @@ import logging
|
|
|
23
23
|
import time
|
|
24
24
|
from collections.abc import AsyncIterator, Callable
|
|
25
25
|
from contextlib import AsyncExitStack, asynccontextmanager
|
|
26
|
+
from dataclasses import dataclass
|
|
26
27
|
|
|
27
28
|
from verifiers.v1.clients import ModelContext
|
|
28
29
|
from verifiers.v1.configs.agent import AgentConfig
|
|
@@ -57,6 +58,19 @@ from verifiers.v1.types import Messages
|
|
|
57
58
|
logger = logging.getLogger(__name__)
|
|
58
59
|
|
|
59
60
|
|
|
61
|
+
@dataclass(frozen=True)
|
|
62
|
+
class RolloutTimeouts:
|
|
63
|
+
"""Per-stage rollout timeouts in seconds (None = unlimited), each bounding one
|
|
64
|
+
lifecycle stage: `setup` covers task + harness setup in `open()`, `agent` is the
|
|
65
|
+
cumulative budget the run's segments draw down across `step()`s, `finalize` and
|
|
66
|
+
`scoring` bound their `close()` stages."""
|
|
67
|
+
|
|
68
|
+
setup: float | None = None
|
|
69
|
+
agent: float | None = None
|
|
70
|
+
finalize: float | None = None
|
|
71
|
+
scoring: float | None = None
|
|
72
|
+
|
|
73
|
+
|
|
60
74
|
def _as_messages(raw: Messages) -> Messages:
|
|
61
75
|
"""A turn's messages may arrive typed or as wire dicts (env code naturally
|
|
62
76
|
writes `{"role": "user", ...}`); the trace speaks typed, so normalize here."""
|
|
@@ -115,10 +129,7 @@ class RolloutRun:
|
|
|
115
129
|
runtime_config: RuntimeConfig,
|
|
116
130
|
wire_data: TaskData | None = None,
|
|
117
131
|
has_user: bool = False,
|
|
118
|
-
|
|
119
|
-
agent_timeout: float | None = None,
|
|
120
|
-
finalize_timeout: float | None = None,
|
|
121
|
-
scoring_timeout: float | None = None,
|
|
132
|
+
timeouts: RolloutTimeouts | None = None,
|
|
122
133
|
limits: RolloutLimits | None = None,
|
|
123
134
|
shared_tools: dict[str, SharedToolServer] | None = None,
|
|
124
135
|
interception: Interception | None = None,
|
|
@@ -130,11 +141,8 @@ class RolloutRun:
|
|
|
130
141
|
self.ctx = ctx
|
|
131
142
|
self.runtime_config = runtime_config
|
|
132
143
|
self._has_user = has_user
|
|
133
|
-
self.
|
|
134
|
-
self.
|
|
135
|
-
self._agent_time_remaining = agent_timeout
|
|
136
|
-
self._finalize_timeout = finalize_timeout
|
|
137
|
-
self._scoring_timeout = scoring_timeout
|
|
144
|
+
self._timeouts = timeouts or RolloutTimeouts()
|
|
145
|
+
self._agent_time_remaining = self._timeouts.agent
|
|
138
146
|
self._shared_tools = shared_tools or {}
|
|
139
147
|
self._interception = interception
|
|
140
148
|
self.runtime = runtime
|
|
@@ -164,7 +172,7 @@ class RolloutRun:
|
|
|
164
172
|
self.deadline_at: float | None = None
|
|
165
173
|
"""The active harness segment's absolute deadline (event-loop clock), or
|
|
166
174
|
None between segments / when unbounded. An interaction spends one cumulative
|
|
167
|
-
`
|
|
175
|
+
`timeouts.agent` budget only while its own segments run, so time awaiting
|
|
168
176
|
the caller (including another interleaved agent) cannot starve it."""
|
|
169
177
|
|
|
170
178
|
@property
|
|
@@ -244,8 +252,8 @@ class RolloutRun:
|
|
|
244
252
|
# Task setup and harness provisioning share one setup-stage deadline.
|
|
245
253
|
setup_deadline = (
|
|
246
254
|
None
|
|
247
|
-
if self.
|
|
248
|
-
else asyncio.get_running_loop().time() + self.
|
|
255
|
+
if self._timeouts.setup is None
|
|
256
|
+
else asyncio.get_running_loop().time() + self._timeouts.setup
|
|
249
257
|
)
|
|
250
258
|
async with (
|
|
251
259
|
boundary(TaskError, "task setup"),
|
|
@@ -340,7 +348,7 @@ class RolloutRun:
|
|
|
340
348
|
self.fail(
|
|
341
349
|
HarnessError(
|
|
342
350
|
f"agent timeout: rollout exceeded its "
|
|
343
|
-
f"{self.
|
|
351
|
+
f"{self._timeouts.agent:g}s budget"
|
|
344
352
|
)
|
|
345
353
|
)
|
|
346
354
|
else:
|
|
@@ -406,7 +414,7 @@ class RolloutRun:
|
|
|
406
414
|
invoke(
|
|
407
415
|
self.task.finalize, {"trace": trace, "runtime": runtime}
|
|
408
416
|
),
|
|
409
|
-
self.
|
|
417
|
+
self._timeouts.finalize,
|
|
410
418
|
)
|
|
411
419
|
now = time.time()
|
|
412
420
|
trace.timing.finalize.end = now
|
|
@@ -418,7 +426,7 @@ class RolloutRun:
|
|
|
418
426
|
self.task.score(trace, runtime),
|
|
419
427
|
self.harness.score(trace, runtime),
|
|
420
428
|
),
|
|
421
|
-
self.
|
|
429
|
+
self._timeouts.scoring,
|
|
422
430
|
)
|
|
423
431
|
trace.timing.scoring.end = time.time()
|
|
424
432
|
except Exception as e: # noqa: BLE001 - finalize boundary records every rollout failure
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
{verifiers-0.2.2.dev58 → verifiers-0.2.2.dev60}/tests/test_openai_chat_completions_token_client.py
RENAMED
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|