verifiers 0.2.2.dev65__tar.gz → 0.2.2.dev67__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.dev65 → verifiers-0.2.2.dev67}/PKG-INFO +1 -1
- {verifiers-0.2.2.dev65 → verifiers-0.2.2.dev67}/tests/v1/test_e2e.py +4 -4
- {verifiers-0.2.2.dev65 → verifiers-0.2.2.dev67}/verifiers/v1/agent.py +14 -25
- {verifiers-0.2.2.dev65 → verifiers-0.2.2.dev67}/verifiers/v1/configs/agent.py +14 -15
- {verifiers-0.2.2.dev65 → verifiers-0.2.2.dev67}/verifiers/v1/envs/user_sim/env.py +13 -10
- {verifiers-0.2.2.dev65 → verifiers-0.2.2.dev67}/verifiers/v1/errors.py +1 -1
- {verifiers-0.2.2.dev65 → verifiers-0.2.2.dev67}/verifiers/v1/interception/__init__.py +35 -2
- {verifiers-0.2.2.dev65 → verifiers-0.2.2.dev67}/verifiers/v1/rollout.py +18 -91
- {verifiers-0.2.2.dev65 → verifiers-0.2.2.dev67}/verifiers/v1/utils/retries.py +1 -1
- {verifiers-0.2.2.dev65 → verifiers-0.2.2.dev67}/.gitignore +0 -0
- {verifiers-0.2.2.dev65 → verifiers-0.2.2.dev67}/LICENSE +0 -0
- {verifiers-0.2.2.dev65 → verifiers-0.2.2.dev67}/README.md +0 -0
- {verifiers-0.2.2.dev65 → verifiers-0.2.2.dev67}/pyproject.toml +0 -0
- {verifiers-0.2.2.dev65 → verifiers-0.2.2.dev67}/tests/__init__.py +0 -0
- {verifiers-0.2.2.dev65 → verifiers-0.2.2.dev67}/tests/conftest.py +0 -0
- {verifiers-0.2.2.dev65 → verifiers-0.2.2.dev67}/tests/test_browser_env.py +0 -0
- {verifiers-0.2.2.dev65 → verifiers-0.2.2.dev67}/tests/test_build_script.py +0 -0
- {verifiers-0.2.2.dev65 → verifiers-0.2.2.dev67}/tests/test_cli_agent_env.py +0 -0
- {verifiers-0.2.2.dev65 → verifiers-0.2.2.dev67}/tests/test_client_auth_errors.py +0 -0
- {verifiers-0.2.2.dev65 → verifiers-0.2.2.dev67}/tests/test_client_config.py +0 -0
- {verifiers-0.2.2.dev65 → verifiers-0.2.2.dev67}/tests/test_client_multimodal_types.py +0 -0
- {verifiers-0.2.2.dev65 → verifiers-0.2.2.dev67}/tests/test_composable_env.py +0 -0
- {verifiers-0.2.2.dev65 → verifiers-0.2.2.dev67}/tests/test_context_token_metrics.py +0 -0
- {verifiers-0.2.2.dev65 → verifiers-0.2.2.dev67}/tests/test_decorator_ranks.py +0 -0
- {verifiers-0.2.2.dev65 → verifiers-0.2.2.dev67}/tests/test_endpoint_registry.py +0 -0
- {verifiers-0.2.2.dev65 → verifiers-0.2.2.dev67}/tests/test_env_group.py +0 -0
- {verifiers-0.2.2.dev65 → verifiers-0.2.2.dev67}/tests/test_env_server.py +0 -0
- {verifiers-0.2.2.dev65 → verifiers-0.2.2.dev67}/tests/test_environment.py +0 -0
- {verifiers-0.2.2.dev65 → verifiers-0.2.2.dev67}/tests/test_environment_extra.py +0 -0
- {verifiers-0.2.2.dev65 → verifiers-0.2.2.dev67}/tests/test_error_chain.py +0 -0
- {verifiers-0.2.2.dev65 → verifiers-0.2.2.dev67}/tests/test_eval_display.py +0 -0
- {verifiers-0.2.2.dev65 → verifiers-0.2.2.dev67}/tests/test_eval_utils.py +0 -0
- {verifiers-0.2.2.dev65 → verifiers-0.2.2.dev67}/tests/test_gepa_cli.py +0 -0
- {verifiers-0.2.2.dev65 → verifiers-0.2.2.dev67}/tests/test_gepa_utils.py +0 -0
- {verifiers-0.2.2.dev65 → verifiers-0.2.2.dev67}/tests/test_gym_env.py +0 -0
- {verifiers-0.2.2.dev65 → verifiers-0.2.2.dev67}/tests/test_harbor_env_mcp.py +0 -0
- {verifiers-0.2.2.dev65 → verifiers-0.2.2.dev67}/tests/test_imports.py +0 -0
- {verifiers-0.2.2.dev65 → verifiers-0.2.2.dev67}/tests/test_init_script.py +0 -0
- {verifiers-0.2.2.dev65 → verifiers-0.2.2.dev67}/tests/test_install_utils.py +0 -0
- {verifiers-0.2.2.dev65 → verifiers-0.2.2.dev67}/tests/test_interception_utils.py +0 -0
- {verifiers-0.2.2.dev65 → verifiers-0.2.2.dev67}/tests/test_logging.py +0 -0
- {verifiers-0.2.2.dev65 → verifiers-0.2.2.dev67}/tests/test_math_rubric.py +0 -0
- {verifiers-0.2.2.dev65 → verifiers-0.2.2.dev67}/tests/test_maybe_think_parser.py +0 -0
- {verifiers-0.2.2.dev65 → verifiers-0.2.2.dev67}/tests/test_message_utils.py +0 -0
- {verifiers-0.2.2.dev65 → verifiers-0.2.2.dev67}/tests/test_message_utils_multimodal.py +0 -0
- {verifiers-0.2.2.dev65 → verifiers-0.2.2.dev67}/tests/test_multiturn_env.py +0 -0
- {verifiers-0.2.2.dev65 → verifiers-0.2.2.dev67}/tests/test_nemorl_client.py +0 -0
- {verifiers-0.2.2.dev65 → verifiers-0.2.2.dev67}/tests/test_openai_chat_completions_token_client.py +0 -0
- {verifiers-0.2.2.dev65 → verifiers-0.2.2.dev67}/tests/test_openai_responses_client.py +0 -0
- {verifiers-0.2.2.dev65 → verifiers-0.2.2.dev67}/tests/test_opencode_rlm_env.py +0 -0
- {verifiers-0.2.2.dev65 → verifiers-0.2.2.dev67}/tests/test_openenv_client.py +0 -0
- {verifiers-0.2.2.dev65 → verifiers-0.2.2.dev67}/tests/test_parser.py +0 -0
- {verifiers-0.2.2.dev65 → verifiers-0.2.2.dev67}/tests/test_path_utils.py +0 -0
- {verifiers-0.2.2.dev65 → verifiers-0.2.2.dev67}/tests/test_per_turn_timing.py +0 -0
- {verifiers-0.2.2.dev65 → verifiers-0.2.2.dev67}/tests/test_pricing_utils.py +0 -0
- {verifiers-0.2.2.dev65 → verifiers-0.2.2.dev67}/tests/test_prime_plugin.py +0 -0
- {verifiers-0.2.2.dev65 → verifiers-0.2.2.dev67}/tests/test_renderer_client.py +0 -0
- {verifiers-0.2.2.dev65 → verifiers-0.2.2.dev67}/tests/test_renderer_e2e.py +0 -0
- {verifiers-0.2.2.dev65 → verifiers-0.2.2.dev67}/tests/test_rlm_composable_env.py +0 -0
- {verifiers-0.2.2.dev65 → verifiers-0.2.2.dev67}/tests/test_rubric.py +0 -0
- {verifiers-0.2.2.dev65 → verifiers-0.2.2.dev67}/tests/test_rubric_group.py +0 -0
- {verifiers-0.2.2.dev65 → verifiers-0.2.2.dev67}/tests/test_sandbox_debug_env.py +0 -0
- {verifiers-0.2.2.dev65 → verifiers-0.2.2.dev67}/tests/test_sandbox_env.py +0 -0
- {verifiers-0.2.2.dev65 → verifiers-0.2.2.dev67}/tests/test_sandbox_mixin.py +0 -0
- {verifiers-0.2.2.dev65 → verifiers-0.2.2.dev67}/tests/test_save_utils.py +0 -0
- {verifiers-0.2.2.dev65 → verifiers-0.2.2.dev67}/tests/test_setup_script.py +0 -0
- {verifiers-0.2.2.dev65 → verifiers-0.2.2.dev67}/tests/test_singleturn_env.py +0 -0
- {verifiers-0.2.2.dev65 → verifiers-0.2.2.dev67}/tests/test_stateful_tool_env.py +0 -0
- {verifiers-0.2.2.dev65 → verifiers-0.2.2.dev67}/tests/test_think_parser.py +0 -0
- {verifiers-0.2.2.dev65 → verifiers-0.2.2.dev67}/tests/test_tool_env.py +0 -0
- {verifiers-0.2.2.dev65 → verifiers-0.2.2.dev67}/tests/test_tool_utils.py +0 -0
- {verifiers-0.2.2.dev65 → verifiers-0.2.2.dev67}/tests/test_trajectory_processing.py +0 -0
- {verifiers-0.2.2.dev65 → verifiers-0.2.2.dev67}/tests/test_tui_info_formatting.py +0 -0
- {verifiers-0.2.2.dev65 → verifiers-0.2.2.dev67}/tests/test_types.py +0 -0
- {verifiers-0.2.2.dev65 → verifiers-0.2.2.dev67}/tests/test_xml_parser.py +0 -0
- {verifiers-0.2.2.dev65 → verifiers-0.2.2.dev67}/tests/v1/conftest.py +0 -0
- {verifiers-0.2.2.dev65 → verifiers-0.2.2.dev67}/tests/v1/fixtures/counter_tool_v1.py +0 -0
- {verifiers-0.2.2.dev65 → verifiers-0.2.2.dev67}/tests/v1/fixtures/duet_v1.py +0 -0
- {verifiers-0.2.2.dev65 → verifiers-0.2.2.dev67}/tests/v1/fixtures/echo_acp_resume_v1.py +0 -0
- {verifiers-0.2.2.dev65 → verifiers-0.2.2.dev67}/tests/v1/fixtures/echo_agentic_v1.py +0 -0
- {verifiers-0.2.2.dev65 → verifiers-0.2.2.dev67}/tests/v1/fixtures/echo_multi_v0.py +0 -0
- {verifiers-0.2.2.dev65 → verifiers-0.2.2.dev67}/tests/v1/fixtures/echo_tool_v1.py +0 -0
- {verifiers-0.2.2.dev65 → verifiers-0.2.2.dev67}/tests/v1/fixtures/echo_user_sim_v1.py +0 -0
- {verifiers-0.2.2.dev65 → verifiers-0.2.2.dev67}/tests/v1/fixtures/echo_v0.py +0 -0
- {verifiers-0.2.2.dev65 → verifiers-0.2.2.dev67}/tests/v1/fixtures/echo_v1.py +0 -0
- {verifiers-0.2.2.dev65 → verifiers-0.2.2.dev67}/tests/v1/fixtures/pyproject.toml +0 -0
- {verifiers-0.2.2.dev65 → verifiers-0.2.2.dev67}/tests/v1/fixtures/tool_response_image_v1.py +0 -0
- {verifiers-0.2.2.dev65 → verifiers-0.2.2.dev67}/tests/v1/test_color_codeword_tasks.py +0 -0
- {verifiers-0.2.2.dev65 → verifiers-0.2.2.dev67}/tests/v1/test_configs.py +0 -0
- {verifiers-0.2.2.dev65 → verifiers-0.2.2.dev67}/tests/v1/test_envs.py +0 -0
- {verifiers-0.2.2.dev65 → verifiers-0.2.2.dev67}/tests/v1/test_graph.py +0 -0
- {verifiers-0.2.2.dev65 → verifiers-0.2.2.dev67}/tests/v1/test_judges.py +0 -0
- {verifiers-0.2.2.dev65 → verifiers-0.2.2.dev67}/tests/v1/test_legacy.py +0 -0
- {verifiers-0.2.2.dev65 → verifiers-0.2.2.dev67}/tests/v1/test_scoring.py +0 -0
- {verifiers-0.2.2.dev65 → verifiers-0.2.2.dev67}/tests/v1/test_taskset.py +0 -0
- {verifiers-0.2.2.dev65 → verifiers-0.2.2.dev67}/tests/v1/test_trace.py +0 -0
- {verifiers-0.2.2.dev65 → verifiers-0.2.2.dev67}/verifiers/__init__.py +0 -0
- {verifiers-0.2.2.dev65 → verifiers-0.2.2.dev67}/verifiers/cli/__init__.py +0 -0
- {verifiers-0.2.2.dev65 → verifiers-0.2.2.dev67}/verifiers/cli/commands/__init__.py +0 -0
- {verifiers-0.2.2.dev65 → verifiers-0.2.2.dev67}/verifiers/cli/commands/build.py +0 -0
- {verifiers-0.2.2.dev65 → verifiers-0.2.2.dev67}/verifiers/cli/commands/eval.py +0 -0
- {verifiers-0.2.2.dev65 → verifiers-0.2.2.dev67}/verifiers/cli/commands/gepa.py +0 -0
- {verifiers-0.2.2.dev65 → verifiers-0.2.2.dev67}/verifiers/cli/commands/init.py +0 -0
- {verifiers-0.2.2.dev65 → verifiers-0.2.2.dev67}/verifiers/cli/commands/install.py +0 -0
- {verifiers-0.2.2.dev65 → verifiers-0.2.2.dev67}/verifiers/cli/commands/setup.py +0 -0
- {verifiers-0.2.2.dev65 → verifiers-0.2.2.dev67}/verifiers/cli/plugins/__init__.py +0 -0
- {verifiers-0.2.2.dev65 → verifiers-0.2.2.dev67}/verifiers/cli/plugins/prime.py +0 -0
- {verifiers-0.2.2.dev65 → verifiers-0.2.2.dev67}/verifiers/cli/tui.py +0 -0
- {verifiers-0.2.2.dev65 → verifiers-0.2.2.dev67}/verifiers/clients/__init__.py +0 -0
- {verifiers-0.2.2.dev65 → verifiers-0.2.2.dev67}/verifiers/clients/anthropic_messages_client.py +0 -0
- {verifiers-0.2.2.dev65 → verifiers-0.2.2.dev67}/verifiers/clients/client.py +0 -0
- {verifiers-0.2.2.dev65 → verifiers-0.2.2.dev67}/verifiers/clients/nemorl_chat_completions_client.py +0 -0
- {verifiers-0.2.2.dev65 → verifiers-0.2.2.dev67}/verifiers/clients/openai_chat_completions_client.py +0 -0
- {verifiers-0.2.2.dev65 → verifiers-0.2.2.dev67}/verifiers/clients/openai_chat_completions_token_client.py +0 -0
- {verifiers-0.2.2.dev65 → verifiers-0.2.2.dev67}/verifiers/clients/openai_completions_client.py +0 -0
- {verifiers-0.2.2.dev65 → verifiers-0.2.2.dev67}/verifiers/clients/openai_responses_client.py +0 -0
- {verifiers-0.2.2.dev65 → verifiers-0.2.2.dev67}/verifiers/clients/renderer_client.py +0 -0
- {verifiers-0.2.2.dev65 → verifiers-0.2.2.dev67}/verifiers/decorators.py +0 -0
- {verifiers-0.2.2.dev65 → verifiers-0.2.2.dev67}/verifiers/envs/__init__.py +0 -0
- {verifiers-0.2.2.dev65 → verifiers-0.2.2.dev67}/verifiers/envs/env_group.py +0 -0
- {verifiers-0.2.2.dev65 → verifiers-0.2.2.dev67}/verifiers/envs/environment.py +0 -0
- {verifiers-0.2.2.dev65 → verifiers-0.2.2.dev67}/verifiers/envs/experimental/README.md +0 -0
- {verifiers-0.2.2.dev65 → verifiers-0.2.2.dev67}/verifiers/envs/experimental/__init__.py +0 -0
- {verifiers-0.2.2.dev65 → verifiers-0.2.2.dev67}/verifiers/envs/experimental/cli_agent_env.py +0 -0
- {verifiers-0.2.2.dev65 → verifiers-0.2.2.dev67}/verifiers/envs/experimental/composable/README.md +0 -0
- {verifiers-0.2.2.dev65 → verifiers-0.2.2.dev67}/verifiers/envs/experimental/composable/__init__.py +0 -0
- {verifiers-0.2.2.dev65 → verifiers-0.2.2.dev67}/verifiers/envs/experimental/composable/_filter.py +0 -0
- {verifiers-0.2.2.dev65 → verifiers-0.2.2.dev67}/verifiers/envs/experimental/composable/composable_env.py +0 -0
- {verifiers-0.2.2.dev65 → verifiers-0.2.2.dev67}/verifiers/envs/experimental/composable/harness.py +0 -0
- {verifiers-0.2.2.dev65 → verifiers-0.2.2.dev67}/verifiers/envs/experimental/composable/harnesses/__init__.py +0 -0
- {verifiers-0.2.2.dev65 → verifiers-0.2.2.dev67}/verifiers/envs/experimental/composable/harnesses/mini_swe_agent.py +0 -0
- {verifiers-0.2.2.dev65 → verifiers-0.2.2.dev67}/verifiers/envs/experimental/composable/harnesses/opencode.py +0 -0
- {verifiers-0.2.2.dev65 → verifiers-0.2.2.dev67}/verifiers/envs/experimental/composable/harnesses/prompt.txt +0 -0
- {verifiers-0.2.2.dev65 → verifiers-0.2.2.dev67}/verifiers/envs/experimental/composable/harnesses/rlm.py +0 -0
- {verifiers-0.2.2.dev65 → verifiers-0.2.2.dev67}/verifiers/envs/experimental/composable/sandbox_debug_env.py +0 -0
- {verifiers-0.2.2.dev65 → verifiers-0.2.2.dev67}/verifiers/envs/experimental/composable/swe_debug_env.py +0 -0
- {verifiers-0.2.2.dev65 → verifiers-0.2.2.dev67}/verifiers/envs/experimental/composable/task.py +0 -0
- {verifiers-0.2.2.dev65 → verifiers-0.2.2.dev67}/verifiers/envs/experimental/composable/tasksets/__init__.py +0 -0
- {verifiers-0.2.2.dev65 → verifiers-0.2.2.dev67}/verifiers/envs/experimental/composable/tasksets/cp/__init__.py +0 -0
- {verifiers-0.2.2.dev65 → verifiers-0.2.2.dev67}/verifiers/envs/experimental/composable/tasksets/cp/cp_task.py +0 -0
- {verifiers-0.2.2.dev65 → verifiers-0.2.2.dev67}/verifiers/envs/experimental/composable/tasksets/cp/test_utils.py +0 -0
- {verifiers-0.2.2.dev65 → verifiers-0.2.2.dev67}/verifiers/envs/experimental/composable/tasksets/harbor/__init__.py +0 -0
- {verifiers-0.2.2.dev65 → verifiers-0.2.2.dev67}/verifiers/envs/experimental/composable/tasksets/harbor/cli_gym.py +0 -0
- {verifiers-0.2.2.dev65 → verifiers-0.2.2.dev67}/verifiers/envs/experimental/composable/tasksets/harbor/harbor.py +0 -0
- {verifiers-0.2.2.dev65 → verifiers-0.2.2.dev67}/verifiers/envs/experimental/composable/tasksets/harbor/terminal_lego.py +0 -0
- {verifiers-0.2.2.dev65 → verifiers-0.2.2.dev67}/verifiers/envs/experimental/composable/tasksets/math/__init__.py +0 -0
- {verifiers-0.2.2.dev65 → verifiers-0.2.2.dev67}/verifiers/envs/experimental/composable/tasksets/math/math_task.py +0 -0
- {verifiers-0.2.2.dev65 → verifiers-0.2.2.dev67}/verifiers/envs/experimental/composable/tasksets/swe/README.md +0 -0
- {verifiers-0.2.2.dev65 → verifiers-0.2.2.dev67}/verifiers/envs/experimental/composable/tasksets/swe/__init__.py +0 -0
- {verifiers-0.2.2.dev65 → verifiers-0.2.2.dev67}/verifiers/envs/experimental/composable/tasksets/swe/multi_swe/__init__.py +0 -0
- {verifiers-0.2.2.dev65 → verifiers-0.2.2.dev67}/verifiers/envs/experimental/composable/tasksets/swe/multi_swe/extract_fix_patch.sh +0 -0
- {verifiers-0.2.2.dev65 → verifiers-0.2.2.dev67}/verifiers/envs/experimental/composable/tasksets/swe/multi_swe/taskset.py +0 -0
- {verifiers-0.2.2.dev65 → verifiers-0.2.2.dev67}/verifiers/envs/experimental/composable/tasksets/swe/openswe/__init__.py +0 -0
- {verifiers-0.2.2.dev65 → verifiers-0.2.2.dev67}/verifiers/envs/experimental/composable/tasksets/swe/openswe/taskset.py +0 -0
- {verifiers-0.2.2.dev65 → verifiers-0.2.2.dev67}/verifiers/envs/experimental/composable/tasksets/swe/r2e_gym/__init__.py +0 -0
- {verifiers-0.2.2.dev65 → verifiers-0.2.2.dev67}/verifiers/envs/experimental/composable/tasksets/swe/r2e_gym/log_parser.py +0 -0
- {verifiers-0.2.2.dev65 → verifiers-0.2.2.dev67}/verifiers/envs/experimental/composable/tasksets/swe/r2e_gym/taskset.py +0 -0
- {verifiers-0.2.2.dev65 → verifiers-0.2.2.dev67}/verifiers/envs/experimental/composable/tasksets/swe/scale_swe/__init__.py +0 -0
- {verifiers-0.2.2.dev65 → verifiers-0.2.2.dev67}/verifiers/envs/experimental/composable/tasksets/swe/scale_swe/taskset.py +0 -0
- {verifiers-0.2.2.dev65 → verifiers-0.2.2.dev67}/verifiers/envs/experimental/composable/tasksets/swe/shared/__init__.py +0 -0
- {verifiers-0.2.2.dev65 → verifiers-0.2.2.dev67}/verifiers/envs/experimental/composable/tasksets/swe/shared/test_patch.py +0 -0
- {verifiers-0.2.2.dev65 → verifiers-0.2.2.dev67}/verifiers/envs/experimental/composable/tasksets/swe/swe_bench/__init__.py +0 -0
- {verifiers-0.2.2.dev65 → verifiers-0.2.2.dev67}/verifiers/envs/experimental/composable/tasksets/swe/swe_bench/taskset.py +0 -0
- {verifiers-0.2.2.dev65 → verifiers-0.2.2.dev67}/verifiers/envs/experimental/composable/tasksets/swe/swe_lego/__init__.py +0 -0
- {verifiers-0.2.2.dev65 → verifiers-0.2.2.dev67}/verifiers/envs/experimental/composable/tasksets/swe/swe_lego/taskset.py +0 -0
- {verifiers-0.2.2.dev65 → verifiers-0.2.2.dev67}/verifiers/envs/experimental/composable/tasksets/swe/swe_rebench_v2/__init__.py +0 -0
- {verifiers-0.2.2.dev65 → verifiers-0.2.2.dev67}/verifiers/envs/experimental/composable/tasksets/swe/swe_rebench_v2/log_parsers.py +0 -0
- {verifiers-0.2.2.dev65 → verifiers-0.2.2.dev67}/verifiers/envs/experimental/composable/tasksets/swe/swe_rebench_v2/taskset.py +0 -0
- {verifiers-0.2.2.dev65 → verifiers-0.2.2.dev67}/verifiers/envs/experimental/composable/tasksets/swe/swe_smith/__init__.py +0 -0
- {verifiers-0.2.2.dev65 → verifiers-0.2.2.dev67}/verifiers/envs/experimental/composable/tasksets/swe/swe_smith/taskset.py +0 -0
- {verifiers-0.2.2.dev65 → verifiers-0.2.2.dev67}/verifiers/envs/experimental/composable/tasksets/swe/swe_tasksets.py +0 -0
- {verifiers-0.2.2.dev65 → verifiers-0.2.2.dev67}/verifiers/envs/experimental/gym_env.py +0 -0
- {verifiers-0.2.2.dev65 → verifiers-0.2.2.dev67}/verifiers/envs/experimental/harbor_env/__init__.py +0 -0
- {verifiers-0.2.2.dev65 → verifiers-0.2.2.dev67}/verifiers/envs/experimental/harbor_env/env.py +0 -0
- {verifiers-0.2.2.dev65 → verifiers-0.2.2.dev67}/verifiers/envs/experimental/harbor_env/mcp.py +0 -0
- {verifiers-0.2.2.dev65 → verifiers-0.2.2.dev67}/verifiers/envs/experimental/mcp_env.py +0 -0
- {verifiers-0.2.2.dev65 → verifiers-0.2.2.dev67}/verifiers/envs/experimental/opencode_env.py +0 -0
- {verifiers-0.2.2.dev65 → verifiers-0.2.2.dev67}/verifiers/envs/experimental/opencode_qa_env.py +0 -0
- {verifiers-0.2.2.dev65 → verifiers-0.2.2.dev67}/verifiers/envs/experimental/opencode_rlm_env.py +0 -0
- {verifiers-0.2.2.dev65 → verifiers-0.2.2.dev67}/verifiers/envs/experimental/sandbox_mixin.py +0 -0
- {verifiers-0.2.2.dev65 → verifiers-0.2.2.dev67}/verifiers/envs/experimental/utils/__init__.py +0 -0
- {verifiers-0.2.2.dev65 → verifiers-0.2.2.dev67}/verifiers/envs/experimental/utils/file_locks.py +0 -0
- {verifiers-0.2.2.dev65 → verifiers-0.2.2.dev67}/verifiers/envs/experimental/utils/git_checkout_cache.py +0 -0
- {verifiers-0.2.2.dev65 → verifiers-0.2.2.dev67}/verifiers/envs/integrations/README.md +0 -0
- {verifiers-0.2.2.dev65 → verifiers-0.2.2.dev67}/verifiers/envs/integrations/__init__.py +0 -0
- {verifiers-0.2.2.dev65 → verifiers-0.2.2.dev67}/verifiers/envs/integrations/browser_env/README.md +0 -0
- {verifiers-0.2.2.dev65 → verifiers-0.2.2.dev67}/verifiers/envs/integrations/browser_env/__init__.py +0 -0
- {verifiers-0.2.2.dev65 → verifiers-0.2.2.dev67}/verifiers/envs/integrations/browser_env/browser_env.py +0 -0
- {verifiers-0.2.2.dev65 → verifiers-0.2.2.dev67}/verifiers/envs/integrations/browser_env/modes/__init__.py +0 -0
- {verifiers-0.2.2.dev65 → verifiers-0.2.2.dev67}/verifiers/envs/integrations/browser_env/modes/base.py +0 -0
- {verifiers-0.2.2.dev65 → verifiers-0.2.2.dev67}/verifiers/envs/integrations/browser_env/modes/cua_mode.py +0 -0
- {verifiers-0.2.2.dev65 → verifiers-0.2.2.dev67}/verifiers/envs/integrations/browser_env/modes/dom_mode.py +0 -0
- {verifiers-0.2.2.dev65 → verifiers-0.2.2.dev67}/verifiers/envs/integrations/openenv_env.py +0 -0
- {verifiers-0.2.2.dev65 → verifiers-0.2.2.dev67}/verifiers/envs/integrations/reasoninggym_env.py +0 -0
- {verifiers-0.2.2.dev65 → verifiers-0.2.2.dev67}/verifiers/envs/integrations/textarena_env.py +0 -0
- {verifiers-0.2.2.dev65 → verifiers-0.2.2.dev67}/verifiers/envs/multiturn_env.py +0 -0
- {verifiers-0.2.2.dev65 → verifiers-0.2.2.dev67}/verifiers/envs/python_env.py +0 -0
- {verifiers-0.2.2.dev65 → verifiers-0.2.2.dev67}/verifiers/envs/sandbox_env.py +0 -0
- {verifiers-0.2.2.dev65 → verifiers-0.2.2.dev67}/verifiers/envs/singleturn_env.py +0 -0
- {verifiers-0.2.2.dev65 → verifiers-0.2.2.dev67}/verifiers/envs/stateful_tool_env.py +0 -0
- {verifiers-0.2.2.dev65 → verifiers-0.2.2.dev67}/verifiers/envs/tool_env.py +0 -0
- {verifiers-0.2.2.dev65 → verifiers-0.2.2.dev67}/verifiers/errors.py +0 -0
- {verifiers-0.2.2.dev65 → verifiers-0.2.2.dev67}/verifiers/gepa/__init__.py +0 -0
- {verifiers-0.2.2.dev65 → verifiers-0.2.2.dev67}/verifiers/gepa/adapter.py +0 -0
- {verifiers-0.2.2.dev65 → verifiers-0.2.2.dev67}/verifiers/gepa/config.py +0 -0
- {verifiers-0.2.2.dev65 → verifiers-0.2.2.dev67}/verifiers/gepa/display.py +0 -0
- {verifiers-0.2.2.dev65 → verifiers-0.2.2.dev67}/verifiers/gepa/gepa_utils.py +0 -0
- {verifiers-0.2.2.dev65 → verifiers-0.2.2.dev67}/verifiers/parsers/__init__.py +0 -0
- {verifiers-0.2.2.dev65 → verifiers-0.2.2.dev67}/verifiers/parsers/maybe_think_parser.py +0 -0
- {verifiers-0.2.2.dev65 → verifiers-0.2.2.dev67}/verifiers/parsers/parser.py +0 -0
- {verifiers-0.2.2.dev65 → verifiers-0.2.2.dev67}/verifiers/parsers/think_parser.py +0 -0
- {verifiers-0.2.2.dev65 → verifiers-0.2.2.dev67}/verifiers/parsers/xml_parser.py +0 -0
- {verifiers-0.2.2.dev65 → verifiers-0.2.2.dev67}/verifiers/rubrics/__init__.py +0 -0
- {verifiers-0.2.2.dev65 → verifiers-0.2.2.dev67}/verifiers/rubrics/experimental/hybrid_math_rubric.py +0 -0
- {verifiers-0.2.2.dev65 → verifiers-0.2.2.dev67}/verifiers/rubrics/judge_rubric.py +0 -0
- {verifiers-0.2.2.dev65 → verifiers-0.2.2.dev67}/verifiers/rubrics/math_rubric.py +0 -0
- {verifiers-0.2.2.dev65 → verifiers-0.2.2.dev67}/verifiers/rubrics/rubric.py +0 -0
- {verifiers-0.2.2.dev65 → verifiers-0.2.2.dev67}/verifiers/rubrics/rubric_group.py +0 -0
- {verifiers-0.2.2.dev65 → verifiers-0.2.2.dev67}/verifiers/scripts/__init__.py +0 -0
- {verifiers-0.2.2.dev65 → verifiers-0.2.2.dev67}/verifiers/scripts/build.py +0 -0
- {verifiers-0.2.2.dev65 → verifiers-0.2.2.dev67}/verifiers/scripts/eval.py +0 -0
- {verifiers-0.2.2.dev65 → verifiers-0.2.2.dev67}/verifiers/scripts/gepa.py +0 -0
- {verifiers-0.2.2.dev65 → verifiers-0.2.2.dev67}/verifiers/scripts/init.py +0 -0
- {verifiers-0.2.2.dev65 → verifiers-0.2.2.dev67}/verifiers/scripts/install.py +0 -0
- {verifiers-0.2.2.dev65 → verifiers-0.2.2.dev67}/verifiers/scripts/setup.py +0 -0
- {verifiers-0.2.2.dev65 → verifiers-0.2.2.dev67}/verifiers/scripts/tui.py +0 -0
- {verifiers-0.2.2.dev65 → verifiers-0.2.2.dev67}/verifiers/serve/__init__.py +0 -0
- {verifiers-0.2.2.dev65 → verifiers-0.2.2.dev67}/verifiers/serve/client/env_client.py +0 -0
- {verifiers-0.2.2.dev65 → verifiers-0.2.2.dev67}/verifiers/serve/client/zmq_env_client.py +0 -0
- {verifiers-0.2.2.dev65 → verifiers-0.2.2.dev67}/verifiers/serve/server/__init__.py +0 -0
- {verifiers-0.2.2.dev65 → verifiers-0.2.2.dev67}/verifiers/serve/server/env_router.py +0 -0
- {verifiers-0.2.2.dev65 → verifiers-0.2.2.dev67}/verifiers/serve/server/env_server.py +0 -0
- {verifiers-0.2.2.dev65 → verifiers-0.2.2.dev67}/verifiers/serve/server/env_worker.py +0 -0
- {verifiers-0.2.2.dev65 → verifiers-0.2.2.dev67}/verifiers/serve/server/zmq_env_server.py +0 -0
- {verifiers-0.2.2.dev65 → verifiers-0.2.2.dev67}/verifiers/serve/types.py +0 -0
- {verifiers-0.2.2.dev65 → verifiers-0.2.2.dev67}/verifiers/types.py +0 -0
- {verifiers-0.2.2.dev65 → verifiers-0.2.2.dev67}/verifiers/utils/__init__.py +0 -0
- {verifiers-0.2.2.dev65 → verifiers-0.2.2.dev67}/verifiers/utils/async_utils.py +0 -0
- {verifiers-0.2.2.dev65 → verifiers-0.2.2.dev67}/verifiers/utils/client_utils.py +0 -0
- {verifiers-0.2.2.dev65 → verifiers-0.2.2.dev67}/verifiers/utils/config_utils.py +0 -0
- {verifiers-0.2.2.dev65 → verifiers-0.2.2.dev67}/verifiers/utils/data_utils.py +0 -0
- {verifiers-0.2.2.dev65 → verifiers-0.2.2.dev67}/verifiers/utils/display_utils.py +0 -0
- {verifiers-0.2.2.dev65 → verifiers-0.2.2.dev67}/verifiers/utils/env_config_utils.py +0 -0
- {verifiers-0.2.2.dev65 → verifiers-0.2.2.dev67}/verifiers/utils/env_utils.py +0 -0
- {verifiers-0.2.2.dev65 → verifiers-0.2.2.dev67}/verifiers/utils/error_utils.py +0 -0
- {verifiers-0.2.2.dev65 → verifiers-0.2.2.dev67}/verifiers/utils/eval_display.py +0 -0
- {verifiers-0.2.2.dev65 → verifiers-0.2.2.dev67}/verifiers/utils/eval_utils.py +0 -0
- {verifiers-0.2.2.dev65 → verifiers-0.2.2.dev67}/verifiers/utils/heartbeat.py +0 -0
- {verifiers-0.2.2.dev65 → verifiers-0.2.2.dev67}/verifiers/utils/import_utils.py +0 -0
- {verifiers-0.2.2.dev65 → verifiers-0.2.2.dev67}/verifiers/utils/install_utils.py +0 -0
- {verifiers-0.2.2.dev65 → verifiers-0.2.2.dev67}/verifiers/utils/interception_utils.py +0 -0
- {verifiers-0.2.2.dev65 → verifiers-0.2.2.dev67}/verifiers/utils/logging_utils.py +0 -0
- {verifiers-0.2.2.dev65 → verifiers-0.2.2.dev67}/verifiers/utils/message_utils.py +0 -0
- {verifiers-0.2.2.dev65 → verifiers-0.2.2.dev67}/verifiers/utils/metric_utils.py +0 -0
- {verifiers-0.2.2.dev65 → verifiers-0.2.2.dev67}/verifiers/utils/path_utils.py +0 -0
- {verifiers-0.2.2.dev65 → verifiers-0.2.2.dev67}/verifiers/utils/pricing_utils.py +0 -0
- {verifiers-0.2.2.dev65 → verifiers-0.2.2.dev67}/verifiers/utils/process_utils.py +0 -0
- {verifiers-0.2.2.dev65 → verifiers-0.2.2.dev67}/verifiers/utils/response_utils.py +0 -0
- {verifiers-0.2.2.dev65 → verifiers-0.2.2.dev67}/verifiers/utils/save_utils.py +0 -0
- {verifiers-0.2.2.dev65 → verifiers-0.2.2.dev67}/verifiers/utils/serve_utils.py +0 -0
- {verifiers-0.2.2.dev65 → verifiers-0.2.2.dev67}/verifiers/utils/thread_utils.py +0 -0
- {verifiers-0.2.2.dev65 → verifiers-0.2.2.dev67}/verifiers/utils/threaded_sandbox_client.py +0 -0
- {verifiers-0.2.2.dev65 → verifiers-0.2.2.dev67}/verifiers/utils/tool_utils.py +0 -0
- {verifiers-0.2.2.dev65 → verifiers-0.2.2.dev67}/verifiers/utils/usage_utils.py +0 -0
- {verifiers-0.2.2.dev65 → verifiers-0.2.2.dev67}/verifiers/utils/version_utils.py +0 -0
- {verifiers-0.2.2.dev65 → verifiers-0.2.2.dev67}/verifiers/v1/__init__.py +0 -0
- {verifiers-0.2.2.dev65 → verifiers-0.2.2.dev67}/verifiers/v1/acp/__init__.py +0 -0
- {verifiers-0.2.2.dev65 → verifiers-0.2.2.dev67}/verifiers/v1/acp/_runner.py +0 -0
- {verifiers-0.2.2.dev65 → verifiers-0.2.2.dev67}/verifiers/v1/cli/__init__.py +0 -0
- {verifiers-0.2.2.dev65 → verifiers-0.2.2.dev67}/verifiers/v1/cli/dashboard/__init__.py +0 -0
- {verifiers-0.2.2.dev65 → verifiers-0.2.2.dev67}/verifiers/v1/cli/dashboard/base.py +0 -0
- {verifiers-0.2.2.dev65 → verifiers-0.2.2.dev67}/verifiers/v1/cli/dashboard/eval.py +0 -0
- {verifiers-0.2.2.dev65 → verifiers-0.2.2.dev67}/verifiers/v1/cli/dashboard/replay.py +0 -0
- {verifiers-0.2.2.dev65 → verifiers-0.2.2.dev67}/verifiers/v1/cli/dashboard/validate.py +0 -0
- {verifiers-0.2.2.dev65 → verifiers-0.2.2.dev67}/verifiers/v1/cli/debug.py +0 -0
- {verifiers-0.2.2.dev65 → verifiers-0.2.2.dev67}/verifiers/v1/cli/eval/__init__.py +0 -0
- {verifiers-0.2.2.dev65 → verifiers-0.2.2.dev67}/verifiers/v1/cli/eval/main.py +0 -0
- {verifiers-0.2.2.dev65 → verifiers-0.2.2.dev67}/verifiers/v1/cli/eval/resume.py +0 -0
- {verifiers-0.2.2.dev65 → verifiers-0.2.2.dev67}/verifiers/v1/cli/eval/runner.py +0 -0
- {verifiers-0.2.2.dev65 → verifiers-0.2.2.dev67}/verifiers/v1/cli/gepa.py +0 -0
- {verifiers-0.2.2.dev65 → verifiers-0.2.2.dev67}/verifiers/v1/cli/init.py +0 -0
- {verifiers-0.2.2.dev65 → verifiers-0.2.2.dev67}/verifiers/v1/cli/output.py +0 -0
- {verifiers-0.2.2.dev65 → verifiers-0.2.2.dev67}/verifiers/v1/cli/replay.py +0 -0
- {verifiers-0.2.2.dev65 → verifiers-0.2.2.dev67}/verifiers/v1/cli/resolve.py +0 -0
- {verifiers-0.2.2.dev65 → verifiers-0.2.2.dev67}/verifiers/v1/cli/serve.py +0 -0
- {verifiers-0.2.2.dev65 → verifiers-0.2.2.dev67}/verifiers/v1/cli/validate.py +0 -0
- {verifiers-0.2.2.dev65 → verifiers-0.2.2.dev67}/verifiers/v1/clients/__init__.py +0 -0
- {verifiers-0.2.2.dev65 → verifiers-0.2.2.dev67}/verifiers/v1/clients/client.py +0 -0
- {verifiers-0.2.2.dev65 → verifiers-0.2.2.dev67}/verifiers/v1/clients/config.py +0 -0
- {verifiers-0.2.2.dev65 → verifiers-0.2.2.dev67}/verifiers/v1/clients/eval.py +0 -0
- {verifiers-0.2.2.dev65 → verifiers-0.2.2.dev67}/verifiers/v1/clients/train.py +0 -0
- {verifiers-0.2.2.dev65 → verifiers-0.2.2.dev67}/verifiers/v1/configs/__init__.py +0 -0
- {verifiers-0.2.2.dev65 → verifiers-0.2.2.dev67}/verifiers/v1/configs/cli/__init__.py +0 -0
- {verifiers-0.2.2.dev65 → verifiers-0.2.2.dev67}/verifiers/v1/configs/cli/debug.py +0 -0
- {verifiers-0.2.2.dev65 → verifiers-0.2.2.dev67}/verifiers/v1/configs/cli/env.py +0 -0
- {verifiers-0.2.2.dev65 → verifiers-0.2.2.dev67}/verifiers/v1/configs/cli/eval.py +0 -0
- {verifiers-0.2.2.dev65 → verifiers-0.2.2.dev67}/verifiers/v1/configs/cli/init.py +0 -0
- {verifiers-0.2.2.dev65 → verifiers-0.2.2.dev67}/verifiers/v1/configs/cli/replay.py +0 -0
- {verifiers-0.2.2.dev65 → verifiers-0.2.2.dev67}/verifiers/v1/configs/cli/serve.py +0 -0
- {verifiers-0.2.2.dev65 → verifiers-0.2.2.dev67}/verifiers/v1/configs/cli/validate.py +0 -0
- {verifiers-0.2.2.dev65 → verifiers-0.2.2.dev67}/verifiers/v1/configs/env.py +0 -0
- {verifiers-0.2.2.dev65 → verifiers-0.2.2.dev67}/verifiers/v1/configs/harness.py +0 -0
- {verifiers-0.2.2.dev65 → verifiers-0.2.2.dev67}/verifiers/v1/configs/judge.py +0 -0
- {verifiers-0.2.2.dev65 → verifiers-0.2.2.dev67}/verifiers/v1/configs/legacy.py +0 -0
- {verifiers-0.2.2.dev65 → verifiers-0.2.2.dev67}/verifiers/v1/configs/retries.py +0 -0
- {verifiers-0.2.2.dev65 → verifiers-0.2.2.dev67}/verifiers/v1/configs/serve.py +0 -0
- {verifiers-0.2.2.dev65 → verifiers-0.2.2.dev67}/verifiers/v1/configs/task.py +0 -0
- {verifiers-0.2.2.dev65 → verifiers-0.2.2.dev67}/verifiers/v1/configs/taskset.py +0 -0
- {verifiers-0.2.2.dev65 → verifiers-0.2.2.dev67}/verifiers/v1/dialects/__init__.py +0 -0
- {verifiers-0.2.2.dev65 → verifiers-0.2.2.dev67}/verifiers/v1/dialects/anthropic.py +0 -0
- {verifiers-0.2.2.dev65 → verifiers-0.2.2.dev67}/verifiers/v1/dialects/base.py +0 -0
- {verifiers-0.2.2.dev65 → verifiers-0.2.2.dev67}/verifiers/v1/dialects/chat.py +0 -0
- {verifiers-0.2.2.dev65 → verifiers-0.2.2.dev67}/verifiers/v1/dialects/responses.py +0 -0
- {verifiers-0.2.2.dev65 → verifiers-0.2.2.dev67}/verifiers/v1/env.py +0 -0
- {verifiers-0.2.2.dev65 → verifiers-0.2.2.dev67}/verifiers/v1/envs/__init__.py +0 -0
- {verifiers-0.2.2.dev65 → verifiers-0.2.2.dev67}/verifiers/v1/envs/agentic_judge/__init__.py +0 -0
- {verifiers-0.2.2.dev65 → verifiers-0.2.2.dev67}/verifiers/v1/envs/agentic_judge/env.py +0 -0
- {verifiers-0.2.2.dev65 → verifiers-0.2.2.dev67}/verifiers/v1/envs/best_of_n/__init__.py +0 -0
- {verifiers-0.2.2.dev65 → verifiers-0.2.2.dev67}/verifiers/v1/envs/best_of_n/env.py +0 -0
- {verifiers-0.2.2.dev65 → verifiers-0.2.2.dev67}/verifiers/v1/envs/single_agent/__init__.py +0 -0
- {verifiers-0.2.2.dev65 → verifiers-0.2.2.dev67}/verifiers/v1/envs/single_agent/env.py +0 -0
- {verifiers-0.2.2.dev65 → verifiers-0.2.2.dev67}/verifiers/v1/envs/user_sim/__init__.py +0 -0
- {verifiers-0.2.2.dev65 → verifiers-0.2.2.dev67}/verifiers/v1/episode.py +0 -0
- {verifiers-0.2.2.dev65 → verifiers-0.2.2.dev67}/verifiers/v1/gepa/__init__.py +0 -0
- {verifiers-0.2.2.dev65 → verifiers-0.2.2.dev67}/verifiers/v1/gepa/adapter.py +0 -0
- {verifiers-0.2.2.dev65 → verifiers-0.2.2.dev67}/verifiers/v1/gepa/config.py +0 -0
- {verifiers-0.2.2.dev65 → verifiers-0.2.2.dev67}/verifiers/v1/gepa/dataset.py +0 -0
- {verifiers-0.2.2.dev65 → verifiers-0.2.2.dev67}/verifiers/v1/gepa/reflection.py +0 -0
- {verifiers-0.2.2.dev65 → verifiers-0.2.2.dev67}/verifiers/v1/gepa/runner.py +0 -0
- {verifiers-0.2.2.dev65 → verifiers-0.2.2.dev67}/verifiers/v1/graph.py +0 -0
- {verifiers-0.2.2.dev65 → verifiers-0.2.2.dev67}/verifiers/v1/harness.py +0 -0
- {verifiers-0.2.2.dev65 → verifiers-0.2.2.dev67}/verifiers/v1/harnesses/__init__.py +0 -0
- {verifiers-0.2.2.dev65 → verifiers-0.2.2.dev67}/verifiers/v1/harnesses/bash/__init__.py +0 -0
- {verifiers-0.2.2.dev65 → verifiers-0.2.2.dev67}/verifiers/v1/harnesses/bash/harness.py +0 -0
- {verifiers-0.2.2.dev65 → verifiers-0.2.2.dev67}/verifiers/v1/harnesses/bash/program.py +0 -0
- {verifiers-0.2.2.dev65 → verifiers-0.2.2.dev67}/verifiers/v1/harnesses/browser_use/__init__.py +0 -0
- {verifiers-0.2.2.dev65 → verifiers-0.2.2.dev67}/verifiers/v1/harnesses/browser_use/harness.py +0 -0
- {verifiers-0.2.2.dev65 → verifiers-0.2.2.dev67}/verifiers/v1/harnesses/browser_use/program.py +0 -0
- {verifiers-0.2.2.dev65 → verifiers-0.2.2.dev67}/verifiers/v1/harnesses/claude_code/__init__.py +0 -0
- {verifiers-0.2.2.dev65 → verifiers-0.2.2.dev67}/verifiers/v1/harnesses/claude_code/harness.py +0 -0
- {verifiers-0.2.2.dev65 → verifiers-0.2.2.dev67}/verifiers/v1/harnesses/codex/__init__.py +0 -0
- {verifiers-0.2.2.dev65 → verifiers-0.2.2.dev67}/verifiers/v1/harnesses/codex/harness.py +0 -0
- {verifiers-0.2.2.dev65 → verifiers-0.2.2.dev67}/verifiers/v1/harnesses/hermes_agent/__init__.py +0 -0
- {verifiers-0.2.2.dev65 → verifiers-0.2.2.dev67}/verifiers/v1/harnesses/hermes_agent/harness.py +0 -0
- {verifiers-0.2.2.dev65 → verifiers-0.2.2.dev67}/verifiers/v1/harnesses/hermes_agent/program.py +0 -0
- {verifiers-0.2.2.dev65 → verifiers-0.2.2.dev67}/verifiers/v1/harnesses/kimi_code/__init__.py +0 -0
- {verifiers-0.2.2.dev65 → verifiers-0.2.2.dev67}/verifiers/v1/harnesses/kimi_code/harness.py +0 -0
- {verifiers-0.2.2.dev65 → verifiers-0.2.2.dev67}/verifiers/v1/harnesses/mini_swe_agent/__init__.py +0 -0
- {verifiers-0.2.2.dev65 → verifiers-0.2.2.dev67}/verifiers/v1/harnesses/mini_swe_agent/harness.py +0 -0
- {verifiers-0.2.2.dev65 → verifiers-0.2.2.dev67}/verifiers/v1/harnesses/mini_swe_agent/program.py +0 -0
- {verifiers-0.2.2.dev65 → verifiers-0.2.2.dev67}/verifiers/v1/harnesses/null/__init__.py +0 -0
- {verifiers-0.2.2.dev65 → verifiers-0.2.2.dev67}/verifiers/v1/harnesses/null/harness.py +0 -0
- {verifiers-0.2.2.dev65 → verifiers-0.2.2.dev67}/verifiers/v1/harnesses/null/program.py +0 -0
- {verifiers-0.2.2.dev65 → verifiers-0.2.2.dev67}/verifiers/v1/harnesses/openclaw/__init__.py +0 -0
- {verifiers-0.2.2.dev65 → verifiers-0.2.2.dev67}/verifiers/v1/harnesses/openclaw/harness.py +0 -0
- {verifiers-0.2.2.dev65 → verifiers-0.2.2.dev67}/verifiers/v1/harnesses/pi/__init__.py +0 -0
- {verifiers-0.2.2.dev65 → verifiers-0.2.2.dev67}/verifiers/v1/harnesses/pi/harness.py +0 -0
- {verifiers-0.2.2.dev65 → verifiers-0.2.2.dev67}/verifiers/v1/harnesses/pool/__init__.py +0 -0
- {verifiers-0.2.2.dev65 → verifiers-0.2.2.dev67}/verifiers/v1/harnesses/pool/harness.py +0 -0
- {verifiers-0.2.2.dev65 → verifiers-0.2.2.dev67}/verifiers/v1/harnesses/rlm/__init__.py +0 -0
- {verifiers-0.2.2.dev65 → verifiers-0.2.2.dev67}/verifiers/v1/harnesses/rlm/harness.py +0 -0
- {verifiers-0.2.2.dev65 → verifiers-0.2.2.dev67}/verifiers/v1/harnesses/terminus_2/__init__.py +0 -0
- {verifiers-0.2.2.dev65 → verifiers-0.2.2.dev67}/verifiers/v1/harnesses/terminus_2/harness.py +0 -0
- {verifiers-0.2.2.dev65 → verifiers-0.2.2.dev67}/verifiers/v1/harnesses/terminus_2/program.py +0 -0
- {verifiers-0.2.2.dev65 → verifiers-0.2.2.dev67}/verifiers/v1/interception/base.py +0 -0
- {verifiers-0.2.2.dev65 → verifiers-0.2.2.dev67}/verifiers/v1/interception/pool.py +0 -0
- {verifiers-0.2.2.dev65 → verifiers-0.2.2.dev67}/verifiers/v1/interception/server.py +0 -0
- {verifiers-0.2.2.dev65 → verifiers-0.2.2.dev67}/verifiers/v1/interception/tunnel/__init__.py +0 -0
- {verifiers-0.2.2.dev65 → verifiers-0.2.2.dev67}/verifiers/v1/interception/tunnel/base.py +0 -0
- {verifiers-0.2.2.dev65 → verifiers-0.2.2.dev67}/verifiers/v1/interception/tunnel/custom.py +0 -0
- {verifiers-0.2.2.dev65 → verifiers-0.2.2.dev67}/verifiers/v1/interception/tunnel/prime.py +0 -0
- {verifiers-0.2.2.dev65 → verifiers-0.2.2.dev67}/verifiers/v1/judge.py +0 -0
- {verifiers-0.2.2.dev65 → verifiers-0.2.2.dev67}/verifiers/v1/judges/__init__.py +0 -0
- {verifiers-0.2.2.dev65 → verifiers-0.2.2.dev67}/verifiers/v1/judges/reference.py +0 -0
- {verifiers-0.2.2.dev65 → verifiers-0.2.2.dev67}/verifiers/v1/judges/reference.txt +0 -0
- {verifiers-0.2.2.dev65 → verifiers-0.2.2.dev67}/verifiers/v1/judges/rubric.py +0 -0
- {verifiers-0.2.2.dev65 → verifiers-0.2.2.dev67}/verifiers/v1/judges/rubric.txt +0 -0
- {verifiers-0.2.2.dev65 → verifiers-0.2.2.dev67}/verifiers/v1/legacy.py +0 -0
- {verifiers-0.2.2.dev65 → verifiers-0.2.2.dev67}/verifiers/v1/mcp/__init__.py +0 -0
- {verifiers-0.2.2.dev65 → verifiers-0.2.2.dev67}/verifiers/v1/mcp/launch.py +0 -0
- {verifiers-0.2.2.dev65 → verifiers-0.2.2.dev67}/verifiers/v1/mcp/server.py +0 -0
- {verifiers-0.2.2.dev65 → verifiers-0.2.2.dev67}/verifiers/v1/mcp/toolset.py +0 -0
- {verifiers-0.2.2.dev65 → verifiers-0.2.2.dev67}/verifiers/v1/runtimes/__init__.py +0 -0
- {verifiers-0.2.2.dev65 → verifiers-0.2.2.dev67}/verifiers/v1/runtimes/base.py +0 -0
- {verifiers-0.2.2.dev65 → verifiers-0.2.2.dev67}/verifiers/v1/runtimes/docker/__init__.py +0 -0
- {verifiers-0.2.2.dev65 → verifiers-0.2.2.dev67}/verifiers/v1/runtimes/docker/egress.py +0 -0
- {verifiers-0.2.2.dev65 → verifiers-0.2.2.dev67}/verifiers/v1/runtimes/limiters.py +0 -0
- {verifiers-0.2.2.dev65 → verifiers-0.2.2.dev67}/verifiers/v1/runtimes/modal.py +0 -0
- {verifiers-0.2.2.dev65 → verifiers-0.2.2.dev67}/verifiers/v1/runtimes/prime.py +0 -0
- {verifiers-0.2.2.dev65 → verifiers-0.2.2.dev67}/verifiers/v1/runtimes/subprocess.py +0 -0
- {verifiers-0.2.2.dev65 → verifiers-0.2.2.dev67}/verifiers/v1/serve/__init__.py +0 -0
- {verifiers-0.2.2.dev65 → verifiers-0.2.2.dev67}/verifiers/v1/serve/client.py +0 -0
- {verifiers-0.2.2.dev65 → verifiers-0.2.2.dev67}/verifiers/v1/serve/pool.py +0 -0
- {verifiers-0.2.2.dev65 → verifiers-0.2.2.dev67}/verifiers/v1/serve/server.py +0 -0
- {verifiers-0.2.2.dev65 → verifiers-0.2.2.dev67}/verifiers/v1/serve/types.py +0 -0
- {verifiers-0.2.2.dev65 → verifiers-0.2.2.dev67}/verifiers/v1/session.py +0 -0
- {verifiers-0.2.2.dev65 → verifiers-0.2.2.dev67}/verifiers/v1/state.py +0 -0
- {verifiers-0.2.2.dev65 → verifiers-0.2.2.dev67}/verifiers/v1/task.py +0 -0
- {verifiers-0.2.2.dev65 → verifiers-0.2.2.dev67}/verifiers/v1/taskset.py +0 -0
- {verifiers-0.2.2.dev65 → verifiers-0.2.2.dev67}/verifiers/v1/tasksets/__init__.py +0 -0
- {verifiers-0.2.2.dev65 → verifiers-0.2.2.dev67}/verifiers/v1/tasksets/harbor/__init__.py +0 -0
- {verifiers-0.2.2.dev65 → verifiers-0.2.2.dev67}/verifiers/v1/tasksets/harbor/taskset.py +0 -0
- {verifiers-0.2.2.dev65 → verifiers-0.2.2.dev67}/verifiers/v1/tasksets/lean/__init__.py +0 -0
- {verifiers-0.2.2.dev65 → verifiers-0.2.2.dev67}/verifiers/v1/tasksets/lean/scoring.py +0 -0
- {verifiers-0.2.2.dev65 → verifiers-0.2.2.dev67}/verifiers/v1/tasksets/lean/taskset.py +0 -0
- {verifiers-0.2.2.dev65 → verifiers-0.2.2.dev67}/verifiers/v1/tasksets/openenv/__init__.py +0 -0
- {verifiers-0.2.2.dev65 → verifiers-0.2.2.dev67}/verifiers/v1/tasksets/openenv/taskset.py +0 -0
- {verifiers-0.2.2.dev65 → verifiers-0.2.2.dev67}/verifiers/v1/tasksets/textarena/__init__.py +0 -0
- {verifiers-0.2.2.dev65 → verifiers-0.2.2.dev67}/verifiers/v1/tasksets/textarena/taskset.py +0 -0
- {verifiers-0.2.2.dev65 → verifiers-0.2.2.dev67}/verifiers/v1/trace.py +0 -0
- {verifiers-0.2.2.dev65 → verifiers-0.2.2.dev67}/verifiers/v1/types.py +0 -0
- {verifiers-0.2.2.dev65 → verifiers-0.2.2.dev67}/verifiers/v1/utils/__init__.py +0 -0
- {verifiers-0.2.2.dev65 → verifiers-0.2.2.dev67}/verifiers/v1/utils/aio.py +0 -0
- {verifiers-0.2.2.dev65 → verifiers-0.2.2.dev67}/verifiers/v1/utils/artifacts.py +0 -0
- {verifiers-0.2.2.dev65 → verifiers-0.2.2.dev67}/verifiers/v1/utils/compile.py +0 -0
- {verifiers-0.2.2.dev65 → verifiers-0.2.2.dev67}/verifiers/v1/utils/decorators.py +0 -0
- {verifiers-0.2.2.dev65 → verifiers-0.2.2.dev67}/verifiers/v1/utils/format.py +0 -0
- {verifiers-0.2.2.dev65 → verifiers-0.2.2.dev67}/verifiers/v1/utils/generic.py +0 -0
- {verifiers-0.2.2.dev65 → verifiers-0.2.2.dev67}/verifiers/v1/utils/git.py +0 -0
- {verifiers-0.2.2.dev65 → verifiers-0.2.2.dev67}/verifiers/v1/utils/image.py +0 -0
- {verifiers-0.2.2.dev65 → verifiers-0.2.2.dev67}/verifiers/v1/utils/install.py +0 -0
- {verifiers-0.2.2.dev65 → verifiers-0.2.2.dev67}/verifiers/v1/utils/interrupt.py +0 -0
- {verifiers-0.2.2.dev65 → verifiers-0.2.2.dev67}/verifiers/v1/utils/loaders.py +0 -0
- {verifiers-0.2.2.dev65 → verifiers-0.2.2.dev67}/verifiers/v1/utils/logging.py +0 -0
- {verifiers-0.2.2.dev65 → verifiers-0.2.2.dev67}/verifiers/v1/utils/memory.py +0 -0
- {verifiers-0.2.2.dev65 → verifiers-0.2.2.dev67}/verifiers/v1/utils/platform.py +0 -0
- {verifiers-0.2.2.dev65 → verifiers-0.2.2.dev67}/verifiers/v1/utils/score.py +0 -0
- {verifiers-0.2.2.dev65 → verifiers-0.2.2.dev67}/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.dev67
|
|
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
|
|
@@ -479,10 +479,10 @@ async def test_env_id_user_sim(run_v1, tmp_path):
|
|
|
479
479
|
assert user.agent.trainable is False
|
|
480
480
|
assert user.num_turns >= 1 # the modeled user actually spoke
|
|
481
481
|
assert assistant.metrics["user_turns"] >= 1
|
|
482
|
-
#
|
|
483
|
-
#
|
|
484
|
-
#
|
|
485
|
-
# as ONE durable episode.
|
|
482
|
+
# The env nulls the assistant task's prompt: the scenario is hidden from the
|
|
483
|
+
# assistant's harness while the task's rewards score off non-prompt fields
|
|
484
|
+
# (`answer`). The nulled row is what persists (provenance is the row's idx);
|
|
485
|
+
# both sides land as ONE durable episode.
|
|
486
486
|
assert assistant.task.data.prompt is None
|
|
487
487
|
assert "echoed" in assistant.rewards
|
|
488
488
|
from verifiers.v1.cli.output import read_episodes
|
|
@@ -21,10 +21,11 @@ from verifiers.v1.clients import (
|
|
|
21
21
|
resolve_client,
|
|
22
22
|
)
|
|
23
23
|
from verifiers.v1.configs.agent import AgentConfig, TimeoutConfig
|
|
24
|
+
from verifiers.v1.dialects import parse_message
|
|
24
25
|
from verifiers.v1.harness import Harness
|
|
25
26
|
from verifiers.v1.interception import Interception, InterceptionServer
|
|
26
27
|
from verifiers.v1.mcp import SharedToolServer
|
|
27
|
-
from verifiers.v1.rollout import
|
|
28
|
+
from verifiers.v1.rollout import Rollout, RolloutTimeouts
|
|
28
29
|
from verifiers.v1.runtimes import (
|
|
29
30
|
NetworkPolicyConfig,
|
|
30
31
|
Runtime,
|
|
@@ -150,9 +151,7 @@ class Interaction:
|
|
|
150
151
|
rewards after close. Leaving the `interaction()` context closes the exchange
|
|
151
152
|
as `user_closed` and finishes the rollout — hooks and scoring included."""
|
|
152
153
|
|
|
153
|
-
def __init__(
|
|
154
|
-
self, run: "RolloutRun", gate: asyncio.Semaphore | None = None
|
|
155
|
-
) -> None:
|
|
154
|
+
def __init__(self, run: "Rollout", gate: asyncio.Semaphore | None = None) -> None:
|
|
156
155
|
self._run = run
|
|
157
156
|
self._gate = gate
|
|
158
157
|
self._over = False # a terminated segment was already delivered
|
|
@@ -188,14 +187,16 @@ class Interaction:
|
|
|
188
187
|
if message is not None and prompted:
|
|
189
188
|
raise ValueError(
|
|
190
189
|
"the task's prompt opens this exchange: take its first reply with "
|
|
191
|
-
"a bare turn() before answering (or
|
|
192
|
-
"
|
|
190
|
+
"a bare turn() before answering (or hand the interaction a task "
|
|
191
|
+
"with `prompt=None` to open the conversation yourself)"
|
|
193
192
|
)
|
|
194
193
|
messages: Messages | None = None
|
|
195
194
|
if isinstance(message, str):
|
|
196
195
|
messages = [UserMessage(content=message)]
|
|
197
196
|
elif message is not None:
|
|
198
|
-
messages
|
|
197
|
+
# A turn's messages may arrive typed or as wire dicts (env code naturally
|
|
198
|
+
# writes `{"role": "user", ...}`); the trace speaks typed, so normalize.
|
|
199
|
+
messages = [parse_message(m) if isinstance(m, dict) else m for m in message]
|
|
199
200
|
self._started = True
|
|
200
201
|
turns_before = self.trace.num_turns
|
|
201
202
|
nodes_before = len(self.trace.nodes)
|
|
@@ -411,7 +412,7 @@ class Agent:
|
|
|
411
412
|
on_trace: Callable[[Trace], None] | None,
|
|
412
413
|
) -> Trace:
|
|
413
414
|
params = self._rollout_params(task, runtime, dict(shared_tools or {}))
|
|
414
|
-
run =
|
|
415
|
+
run = Rollout(task=task, on_trace=on_trace, **params)
|
|
415
416
|
try:
|
|
416
417
|
if await run.open():
|
|
417
418
|
await run.step()
|
|
@@ -434,7 +435,6 @@ class Agent:
|
|
|
434
435
|
*,
|
|
435
436
|
runtime: Runtime | None = None,
|
|
436
437
|
tools: Mapping[str, SharedToolServer] | None = None,
|
|
437
|
-
mask_prompt: bool = False,
|
|
438
438
|
on_trace: Callable[[Trace], None] | None = None,
|
|
439
439
|
) -> AsyncIterator[Interaction]:
|
|
440
440
|
"""Interact with this agent turn-by-turn: a full rollout of `task` where
|
|
@@ -446,11 +446,10 @@ class Agent:
|
|
|
446
446
|
|
|
447
447
|
The task's shape says who speaks first: a prompt-less task is opened by
|
|
448
448
|
the first `turn(message)`; a prompted task speaks first — take its opening
|
|
449
|
-
reply with a bare `turn()` before answering.
|
|
450
|
-
|
|
451
|
-
|
|
452
|
-
|
|
453
|
-
the real question (the user-sim env's contract).
|
|
449
|
+
reply with a bare `turn()` before answering. A prompt that belongs to the
|
|
450
|
+
USER side (a scenario the caller pursues, not the assistant's seed) is the
|
|
451
|
+
caller's to hide: hand the interaction a task whose `data.prompt` is None
|
|
452
|
+
and keep the scenario on a scoring-side field (the user-sim env's contract).
|
|
454
453
|
|
|
455
454
|
`runtime` and `tools` borrow live resources from their owners, just as
|
|
456
455
|
they do for `run()`; an env supplies its taskset's shared tools
|
|
@@ -466,17 +465,9 @@ class Agent:
|
|
|
466
465
|
if self._closed:
|
|
467
466
|
raise RuntimeError("Agent is closed; create a new agent")
|
|
468
467
|
self._check_resume_support()
|
|
469
|
-
if mask_prompt and task.data.prompt is None:
|
|
470
|
-
raise ValueError(
|
|
471
|
-
"mask_prompt hides a prompt the task doesn't have; a prompt-less "
|
|
472
|
-
"task is already opened by the first turn()"
|
|
473
|
-
)
|
|
474
468
|
params = self._rollout_params(task, runtime, dict(tools or {}))
|
|
475
|
-
run =
|
|
469
|
+
run = Rollout(
|
|
476
470
|
task=task,
|
|
477
|
-
wire_data=(
|
|
478
|
-
task.data.model_copy(update={"prompt": None}) if mask_prompt else None
|
|
479
|
-
),
|
|
480
471
|
has_user=True,
|
|
481
472
|
on_trace=on_trace,
|
|
482
473
|
**params,
|
|
@@ -665,7 +656,6 @@ class _EpisodeAgent(Agent):
|
|
|
665
656
|
*,
|
|
666
657
|
runtime: Runtime | None = None,
|
|
667
658
|
tools: Mapping[str, SharedToolServer] | None = None,
|
|
668
|
-
mask_prompt: bool = False,
|
|
669
659
|
on_trace: Callable[[Trace], None] | None = None,
|
|
670
660
|
) -> AsyncIterator[Interaction]:
|
|
671
661
|
"""The agent's `interaction`, with every trace stamped with its standing
|
|
@@ -687,7 +677,6 @@ class _EpisodeAgent(Agent):
|
|
|
687
677
|
task,
|
|
688
678
|
runtime=runtime,
|
|
689
679
|
tools=tools if tools is not None else self._shared_for(task),
|
|
690
|
-
mask_prompt=mask_prompt,
|
|
691
680
|
on_trace=self._watch(remember),
|
|
692
681
|
) as interaction:
|
|
693
682
|
yield interaction
|
|
@@ -11,44 +11,43 @@ from verifiers.v1.types import SamplingConfig
|
|
|
11
11
|
|
|
12
12
|
|
|
13
13
|
class TimeoutConfig(BaseConfig):
|
|
14
|
-
"""
|
|
15
|
-
limit); each stage falls back to the task's own `TaskTimeout` when unset. An
|
|
16
|
-
interaction's rollout budget is cumulative across its active harness segments
|
|
17
|
-
and pauses while the caller computes the next user turn."""
|
|
14
|
+
"""Timeout (in seconds) for different phases of an agent's run."""
|
|
18
15
|
|
|
19
16
|
setup: float | None = None # one shared budget: task setup + provisioning
|
|
17
|
+
"""Timeout (in seconds) for the task + harness setup hooks."""
|
|
20
18
|
rollout: float | None = None
|
|
19
|
+
"""Timeout (in seconds) for the agent's solve attempt."""
|
|
21
20
|
finalize: float | None = None
|
|
21
|
+
"""Timeout (in seconds) for the task + harness finalize hooks."""
|
|
22
22
|
scoring: float | None = None
|
|
23
|
+
"""Timeout (in seconds) for the task + harness metrics + scoring hooks."""
|
|
23
24
|
|
|
24
25
|
|
|
25
26
|
class AgentConfig(BaseConfig):
|
|
26
|
-
"""One env agent: who plays it, and its per-run caps. It pins only what
|
|
27
|
-
makes it a different actor; everything unpinned falls back — the model context
|
|
28
|
-
to the run's own, the harness to the taskset's default."""
|
|
29
|
-
|
|
30
27
|
harness: SerializeAsAny[HarnessConfig] | None = None
|
|
31
28
|
"""The agent's program (None = the taskset's default harness)."""
|
|
32
29
|
runtime: RuntimeConfig = SubprocessConfig()
|
|
33
30
|
"""Runtime for the harness program — the policy each run provisions its box
|
|
34
31
|
from; tool servers choose their placement separately."""
|
|
32
|
+
|
|
35
33
|
model: str | None = None
|
|
36
34
|
"""Model id (None = the run's model, i.e. the policy under evaluation/training)."""
|
|
37
35
|
client: ClientConfig | None = None
|
|
38
36
|
"""Endpoint override (None = the run's client)."""
|
|
39
37
|
sampling: SamplingConfig | None = None
|
|
40
38
|
"""Sampling override (None = the run's sampling)."""
|
|
41
|
-
|
|
42
|
-
retries: RetryConfig = RetryConfig()
|
|
43
|
-
"""Whole-run retries: rerun this agent's rollout while its trace ends with a
|
|
44
|
-
retryable error (never into a borrowed box)."""
|
|
39
|
+
|
|
45
40
|
max_turns: int | None = None
|
|
46
|
-
"""Max model turns per run (None = no limit).
|
|
47
|
-
interception server refuses turns past it), so it applies to any harness."""
|
|
41
|
+
"""Max model turns per run (None = no limit)."""
|
|
48
42
|
max_input_tokens: int | None = None
|
|
43
|
+
"""Max input tokens per run (None = no limit)."""
|
|
49
44
|
max_output_tokens: int | None = None
|
|
45
|
+
"""Max output tokens per run (None = no limit)."""
|
|
50
46
|
max_total_tokens: int | None = None
|
|
51
|
-
"""
|
|
47
|
+
"""Max total tokens per run (None = no limit)."""
|
|
48
|
+
|
|
49
|
+
timeout: TimeoutConfig = TimeoutConfig()
|
|
50
|
+
retries: RetryConfig = RetryConfig()
|
|
52
51
|
|
|
53
52
|
@model_validator(mode="before")
|
|
54
53
|
@classmethod
|
|
@@ -3,10 +3,11 @@
|
|
|
3
3
|
The generic two-sided conversation (`--env.id user-sim` over any taskset) — the
|
|
4
4
|
substrate a tau2-style benchmark builds on. The taskset's row is read as the USER's
|
|
5
5
|
side of the world: its prompt text becomes the scenario in the user's system prompt
|
|
6
|
-
(`--env.persona`), and the assistant plays the same task with
|
|
7
|
-
is
|
|
8
|
-
conversation (its own instructions stay in `system_prompt`)
|
|
9
|
-
|
|
6
|
+
(`--env.persona`), and the assistant plays the same task with its prompt nulled — the
|
|
7
|
+
scenario is the user's knowledge, so the assistant learns the goal only through
|
|
8
|
+
conversation (its own instructions stay in `system_prompt`). The task's rewards and
|
|
9
|
+
judges score that nulled row, so they must read scoring-side fields (`answer`, a
|
|
10
|
+
judge's `question_field`), never the prompt. The user agent rides the tool-less
|
|
10
11
|
`null` harness by default (untrainable — `setup()`), opens the conversation, and
|
|
11
12
|
ends it with the done marker; the assistant's trace is then judged by the task's
|
|
12
13
|
own rewards, exactly as in any eval.
|
|
@@ -64,14 +65,16 @@ class UserSimEnv(vf.Env[UserSimEnvConfig]):
|
|
|
64
65
|
)
|
|
65
66
|
)
|
|
66
67
|
# Two interactions, relayed: the user is just another agent, and the env is
|
|
67
|
-
# the control flow between them. The assistant plays the SAME task with
|
|
68
|
-
#
|
|
69
|
-
# nothing and the user opens
|
|
70
|
-
#
|
|
71
|
-
|
|
68
|
+
# the control flow between them. The assistant plays the SAME task with its
|
|
69
|
+
# prompt nulled: the scenario is the user's knowledge, so the wire seeds
|
|
70
|
+
# nothing and the user opens. Scoring runs on the nulled row — a user-sim
|
|
71
|
+
# taskset keeps its scoring on non-prompt fields.
|
|
72
|
+
assistant_task = type(task)(
|
|
73
|
+
task.data.model_copy(update={"prompt": None}), task.config
|
|
74
|
+
)
|
|
72
75
|
async with (
|
|
73
76
|
agents.user.interaction(user_task) as sim,
|
|
74
|
-
agents.assistant.interaction(
|
|
77
|
+
agents.assistant.interaction(assistant_task) as assistant,
|
|
75
78
|
):
|
|
76
79
|
# The tau convention: the assistant "answers the phone", the user
|
|
77
80
|
# states the goal. The greeting exists only on the user's side. A
|
|
@@ -13,7 +13,7 @@ Four mechanisms, each in one place:
|
|
|
13
13
|
3. Surfacing (`session.RolloutSession.error`): a model or tool call fails behind the harness
|
|
14
14
|
subprocess and comes back as HTTP, so the interception server stashes the real error there and
|
|
15
15
|
the rollout re-raises it once the harness returns — not a secondary `HarnessError`.
|
|
16
|
-
4. Capture (`
|
|
16
|
+
4. Capture (`Rollout`, mirrored by the env-server): the one place that records a failure (typed
|
|
17
17
|
or not) onto the trace and never lets it cancel sibling rollouts. A bad rollout is data, not a
|
|
18
18
|
crash.
|
|
19
19
|
|
|
@@ -1,4 +1,5 @@
|
|
|
1
|
-
from collections.abc import Iterable
|
|
1
|
+
from collections.abc import AsyncIterator, Iterable
|
|
2
|
+
from contextlib import asynccontextmanager
|
|
2
3
|
from typing import TYPE_CHECKING, Annotated
|
|
3
4
|
|
|
4
5
|
from pydantic import Field
|
|
@@ -15,7 +16,8 @@ from verifiers.v1.interception.server import (
|
|
|
15
16
|
InterceptionServer,
|
|
16
17
|
InterceptionServerConfig,
|
|
17
18
|
)
|
|
18
|
-
from verifiers.v1.runtimes import runtime_is_local
|
|
19
|
+
from verifiers.v1.runtimes import Runtime, runtime_is_local
|
|
20
|
+
from verifiers.v1.session import RolloutSession
|
|
19
21
|
|
|
20
22
|
if TYPE_CHECKING:
|
|
21
23
|
from verifiers.v1.mcp import SharedToolServer
|
|
@@ -69,6 +71,36 @@ def make_interception(
|
|
|
69
71
|
return ElasticInterceptionPool(config, requires_tunnel, state_service_secrets)
|
|
70
72
|
|
|
71
73
|
|
|
74
|
+
@asynccontextmanager
|
|
75
|
+
async def serve_interception(
|
|
76
|
+
interception: Interception | None,
|
|
77
|
+
runtime: Runtime,
|
|
78
|
+
session: RolloutSession,
|
|
79
|
+
servers: list,
|
|
80
|
+
shared_tools: "dict[str, SharedToolServer]",
|
|
81
|
+
) -> AsyncIterator[Slot]:
|
|
82
|
+
"""A slot on the shared interception when one was injected (its owner keeps the
|
|
83
|
+
lifecycle), else on a per-rollout `InterceptionServer` owned — brought up and torn
|
|
84
|
+
down — by the caller's context."""
|
|
85
|
+
if interception is not None:
|
|
86
|
+
async with interception.acquire(session) as slot:
|
|
87
|
+
yield slot
|
|
88
|
+
return
|
|
89
|
+
tunneled = requires_tunnel(
|
|
90
|
+
runtime.is_local,
|
|
91
|
+
[server.config for server in servers],
|
|
92
|
+
shared_tools.values(),
|
|
93
|
+
)
|
|
94
|
+
server = InterceptionServer(
|
|
95
|
+
requires_tunnel=tunneled,
|
|
96
|
+
state_service_secrets=tuple(
|
|
97
|
+
tool.state_secret for tool in shared_tools.values() if tool.state_secret
|
|
98
|
+
),
|
|
99
|
+
)
|
|
100
|
+
async with server, server.acquire(session) as slot:
|
|
101
|
+
yield slot
|
|
102
|
+
|
|
103
|
+
|
|
72
104
|
__all__ = [
|
|
73
105
|
"BaseInterceptionConfig",
|
|
74
106
|
"ElasticInterceptionPool",
|
|
@@ -82,4 +114,5 @@ __all__ = [
|
|
|
82
114
|
"StaticInterceptionPoolConfig",
|
|
83
115
|
"make_interception",
|
|
84
116
|
"requires_tunnel",
|
|
117
|
+
"serve_interception",
|
|
85
118
|
]
|
|
@@ -1,33 +1,15 @@
|
|
|
1
|
-
"""
|
|
2
|
-
|
|
3
|
-
A rollout's exchange is a sequence of SEGMENTS: the harness program runs until it
|
|
4
|
-
yields (= exits), the run's user answers its final message, and the next segment
|
|
5
|
-
resumes the exchange with that answer (`Harness.resume` — a relaunch on the accreted
|
|
6
|
-
conversation by default, a native continuation for harnesses with their own session
|
|
7
|
-
state). The user loop lives between segments, at the exchange's natural turn
|
|
8
|
-
granularity — never inside the model boundary, so a harness's own tool loop can
|
|
9
|
-
never race or amputate it.
|
|
10
|
-
|
|
11
|
-
`RolloutRun` is the engine, a staged lifecycle: `open()` boots the world, each
|
|
12
|
-
`step()` runs one segment, `close()` finalizes, scores, and tears the world down —
|
|
13
|
-
each stage under its own timeout. `Agent` is its only driver: `Agent.run` is the
|
|
14
|
-
one-call single-segment form, `Agent.interaction` holds the run open and lets the
|
|
15
|
-
caller supply each user turn, one `turn()` per segment — who answers the program
|
|
16
|
-
(an env's control flow, a simulator agent, a game engine, a human) is the caller's
|
|
17
|
-
business, never this module's.
|
|
18
|
-
"""
|
|
1
|
+
"""Lifecycle of one agent rollout."""
|
|
19
2
|
|
|
20
3
|
import asyncio
|
|
21
4
|
import contextlib
|
|
22
5
|
import logging
|
|
23
6
|
import time
|
|
24
|
-
from collections.abc import
|
|
25
|
-
from contextlib import AsyncExitStack
|
|
7
|
+
from collections.abc import Callable
|
|
8
|
+
from contextlib import AsyncExitStack
|
|
26
9
|
from dataclasses import dataclass
|
|
27
10
|
|
|
28
11
|
from verifiers.v1.clients import ModelContext
|
|
29
12
|
from verifiers.v1.configs.agent import AgentConfig
|
|
30
|
-
from verifiers.v1.dialects import parse_message
|
|
31
13
|
from verifiers.v1.errors import (
|
|
32
14
|
HarnessError,
|
|
33
15
|
RolloutError,
|
|
@@ -36,12 +18,7 @@ from verifiers.v1.errors import (
|
|
|
36
18
|
boundary,
|
|
37
19
|
)
|
|
38
20
|
from verifiers.v1.harness import Harness
|
|
39
|
-
from verifiers.v1.interception import
|
|
40
|
-
Interception,
|
|
41
|
-
InterceptionServer,
|
|
42
|
-
Slot,
|
|
43
|
-
requires_tunnel,
|
|
44
|
-
)
|
|
21
|
+
from verifiers.v1.interception import Interception, serve_interception
|
|
45
22
|
from verifiers.v1.mcp import SharedToolServer, serve_tools
|
|
46
23
|
from verifiers.v1.runtimes import (
|
|
47
24
|
Runtime,
|
|
@@ -50,7 +27,7 @@ from verifiers.v1.runtimes import (
|
|
|
50
27
|
)
|
|
51
28
|
from verifiers.v1.session import RolloutLimits, RolloutSession
|
|
52
29
|
from verifiers.v1.state import state_cls
|
|
53
|
-
from verifiers.v1.task import Task
|
|
30
|
+
from verifiers.v1.task import Task
|
|
54
31
|
from verifiers.v1.trace import AgentInfo, Trace, TraceTask
|
|
55
32
|
from verifiers.v1.types import Messages
|
|
56
33
|
from verifiers.v1.utils.decorators import discover_decorated, invoke
|
|
@@ -60,69 +37,20 @@ logger = logging.getLogger(__name__)
|
|
|
60
37
|
|
|
61
38
|
@dataclass(frozen=True)
|
|
62
39
|
class RolloutTimeouts:
|
|
63
|
-
"""Per-stage rollout timeouts
|
|
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."""
|
|
40
|
+
"""Per-stage rollout timeouts, each bounding one rollout stage."""
|
|
67
41
|
|
|
68
42
|
setup: float | None = None
|
|
43
|
+
"""Timeout (in seconds) for the task + harness setup hooks."""
|
|
69
44
|
agent: float | None = None
|
|
45
|
+
"""Timeout (in seconds) for the agent's solve attempt."""
|
|
70
46
|
finalize: float | None = None
|
|
47
|
+
"""Timeout (in seconds) for the task + harness finalize hooks."""
|
|
71
48
|
scoring: float | None = None
|
|
49
|
+
"""Timeout (in seconds) for the task + harness metrics + scoring hooks."""
|
|
72
50
|
|
|
73
51
|
|
|
74
|
-
|
|
75
|
-
"""
|
|
76
|
-
writes `{"role": "user", ...}`); the trace speaks typed, so normalize here."""
|
|
77
|
-
return [parse_message(m) if isinstance(m, dict) else m for m in raw]
|
|
78
|
-
|
|
79
|
-
|
|
80
|
-
@asynccontextmanager
|
|
81
|
-
async def _serve_interception(
|
|
82
|
-
interception: Interception | None,
|
|
83
|
-
runtime: Runtime,
|
|
84
|
-
session: RolloutSession,
|
|
85
|
-
servers: list,
|
|
86
|
-
shared_tools: dict[str, SharedToolServer],
|
|
87
|
-
) -> AsyncIterator[Slot]:
|
|
88
|
-
"""A slot on the shared interception when one was injected (its owner keeps the
|
|
89
|
-
lifecycle), else on a per-rollout `InterceptionServer` owned — brought up and torn
|
|
90
|
-
down — by this rollout."""
|
|
91
|
-
if interception is not None:
|
|
92
|
-
async with interception.acquire(session) as slot:
|
|
93
|
-
yield slot
|
|
94
|
-
return
|
|
95
|
-
tunneled = requires_tunnel(
|
|
96
|
-
runtime.is_local,
|
|
97
|
-
[server.config for server in servers],
|
|
98
|
-
shared_tools.values(),
|
|
99
|
-
)
|
|
100
|
-
server = InterceptionServer(
|
|
101
|
-
requires_tunnel=tunneled,
|
|
102
|
-
state_service_secrets=tuple(
|
|
103
|
-
tool.state_secret for tool in shared_tools.values() if tool.state_secret
|
|
104
|
-
),
|
|
105
|
-
)
|
|
106
|
-
async with server, server.acquire(session) as slot:
|
|
107
|
-
yield slot
|
|
108
|
-
|
|
109
|
-
|
|
110
|
-
class RolloutRun:
|
|
111
|
-
"""One rollout held open segment by segment.
|
|
112
|
-
|
|
113
|
-
`open()` boots the world (runtime, setup, interception, tool servers); each
|
|
114
|
-
`step()` runs ONE harness segment — a program run to its exit — resuming the
|
|
115
|
-
exchange with the user turn(s) it's given; `close()` finalizes, scores, and
|
|
116
|
-
tears the world down, returning the finished trace. Expected `RolloutError`s
|
|
117
|
-
are captured onto the trace (a bad rollout is data, not a crash): `open` and
|
|
118
|
-
`step` report continuability as a bool, and `close` always returns the trace.
|
|
119
|
-
|
|
120
|
-
`wire_data` is the run's recorded view of the task — what `trace.task.data`
|
|
121
|
-
says the harness saw (`Agent.interaction(mask_prompt=True)` masks the prompt here
|
|
122
|
-
while the `task` object keeps the full row for its hooks and judges).
|
|
123
|
-
`runtime` is a live box to run in instead of provisioning one; a borrowed
|
|
124
|
-
runtime is neither started nor stopped here. `on_trace` observes the run's
|
|
125
|
-
trace the moment it's minted, before any I/O."""
|
|
52
|
+
class Rollout:
|
|
53
|
+
"""Manages one rollout's lifecycle (open, step, close)."""
|
|
126
54
|
|
|
127
55
|
def __init__(
|
|
128
56
|
self,
|
|
@@ -132,10 +60,9 @@ class RolloutRun:
|
|
|
132
60
|
harness: Harness,
|
|
133
61
|
ctx: ModelContext,
|
|
134
62
|
runtime_config: RuntimeConfig,
|
|
135
|
-
wire_data: TaskData | None = None,
|
|
136
63
|
has_user: bool = False,
|
|
137
|
-
timeouts: RolloutTimeouts
|
|
138
|
-
limits: RolloutLimits
|
|
64
|
+
timeouts: RolloutTimeouts,
|
|
65
|
+
limits: RolloutLimits,
|
|
139
66
|
shared_tools: dict[str, SharedToolServer] | None = None,
|
|
140
67
|
interception: Interception | None = None,
|
|
141
68
|
runtime: Runtime | None = None,
|
|
@@ -146,7 +73,7 @@ class RolloutRun:
|
|
|
146
73
|
self.ctx = ctx
|
|
147
74
|
self.runtime_config = runtime_config
|
|
148
75
|
self._has_user = has_user
|
|
149
|
-
self._timeouts = timeouts
|
|
76
|
+
self._timeouts = timeouts
|
|
150
77
|
self._agent_time_remaining = self._timeouts.agent
|
|
151
78
|
self._shared_tools = shared_tools or {}
|
|
152
79
|
self._interception = interception
|
|
@@ -155,7 +82,7 @@ class RolloutRun:
|
|
|
155
82
|
self.trace: Trace = Trace(
|
|
156
83
|
task=TraceTask(
|
|
157
84
|
type=type(task).__name__,
|
|
158
|
-
data=task.data
|
|
85
|
+
data=task.data,
|
|
159
86
|
),
|
|
160
87
|
state=state_cls(type(task))(),
|
|
161
88
|
# The seat's resolved config, role overrides included — the agent
|
|
@@ -165,7 +92,7 @@ class RolloutRun:
|
|
|
165
92
|
if on_trace is not None:
|
|
166
93
|
on_trace(self.trace)
|
|
167
94
|
self._session = RolloutSession(
|
|
168
|
-
ctx, self.trace, discover_decorated(task, "stop"), limits
|
|
95
|
+
ctx, self.trace, discover_decorated(task, "stop"), limits
|
|
169
96
|
)
|
|
170
97
|
self._stack = AsyncExitStack()
|
|
171
98
|
self._failed = False
|
|
@@ -281,7 +208,7 @@ class RolloutRun:
|
|
|
281
208
|
model_secret,
|
|
282
209
|
state_secret,
|
|
283
210
|
) = await self._stack.enter_async_context(
|
|
284
|
-
|
|
211
|
+
serve_interception(
|
|
285
212
|
self._interception,
|
|
286
213
|
runtime,
|
|
287
214
|
self._session,
|
|
@@ -117,7 +117,7 @@ async def run_episode_with_retry(
|
|
|
117
117
|
final = await run()
|
|
118
118
|
if attempt == retry.max_retries or not episode_should_retry(final, retry):
|
|
119
119
|
break
|
|
120
|
-
cause = final.
|
|
120
|
+
cause = final.last_error or next(
|
|
121
121
|
(t.last_error for t in final.traces if t.last_error), None
|
|
122
122
|
)
|
|
123
123
|
history.extend(final.errors)
|
|
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
|
{verifiers-0.2.2.dev65 → verifiers-0.2.2.dev67}/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
|