verifiers 0.2.2.dev15__tar.gz → 0.2.2.dev16__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.dev15 → verifiers-0.2.2.dev16}/PKG-INFO +1 -1
- {verifiers-0.2.2.dev15 → verifiers-0.2.2.dev16}/verifiers/v1/agent.py +32 -5
- {verifiers-0.2.2.dev15 → verifiers-0.2.2.dev16}/verifiers/v1/cli/debug.py +1 -0
- {verifiers-0.2.2.dev15 → verifiers-0.2.2.dev16}/verifiers/v1/interception/__init__.py +6 -11
- {verifiers-0.2.2.dev15 → verifiers-0.2.2.dev16}/verifiers/v1/interception/server.py +5 -8
- {verifiers-0.2.2.dev15 → verifiers-0.2.2.dev16}/verifiers/v1/interception/tunnel/base.py +4 -7
- {verifiers-0.2.2.dev15 → verifiers-0.2.2.dev16}/verifiers/v1/mcp/launch.py +36 -8
- {verifiers-0.2.2.dev15 → verifiers-0.2.2.dev16}/verifiers/v1/rollout.py +4 -0
- {verifiers-0.2.2.dev15 → verifiers-0.2.2.dev16}/verifiers/v1/runtimes/__init__.py +2 -3
- {verifiers-0.2.2.dev15 → verifiers-0.2.2.dev16}/verifiers/v1/runtimes/base.py +20 -10
- verifiers-0.2.2.dev16/verifiers/v1/runtimes/docker/__init__.py +418 -0
- verifiers-0.2.2.dev16/verifiers/v1/runtimes/docker/egress.py +364 -0
- {verifiers-0.2.2.dev15 → verifiers-0.2.2.dev16}/verifiers/v1/task.py +7 -0
- {verifiers-0.2.2.dev15 → verifiers-0.2.2.dev16}/verifiers/v1/tasksets/harbor/taskset.py +12 -0
- {verifiers-0.2.2.dev15 → verifiers-0.2.2.dev16}/verifiers/v1/utils/compile.py +28 -4
- verifiers-0.2.2.dev15/verifiers/v1/runtimes/docker.py +0 -211
- {verifiers-0.2.2.dev15 → verifiers-0.2.2.dev16}/.gitignore +0 -0
- {verifiers-0.2.2.dev15 → verifiers-0.2.2.dev16}/LICENSE +0 -0
- {verifiers-0.2.2.dev15 → verifiers-0.2.2.dev16}/README.md +0 -0
- {verifiers-0.2.2.dev15 → verifiers-0.2.2.dev16}/pyproject.toml +0 -0
- {verifiers-0.2.2.dev15 → verifiers-0.2.2.dev16}/tests/__init__.py +0 -0
- {verifiers-0.2.2.dev15 → verifiers-0.2.2.dev16}/tests/conftest.py +0 -0
- {verifiers-0.2.2.dev15 → verifiers-0.2.2.dev16}/tests/test_browser_env.py +0 -0
- {verifiers-0.2.2.dev15 → verifiers-0.2.2.dev16}/tests/test_build_script.py +0 -0
- {verifiers-0.2.2.dev15 → verifiers-0.2.2.dev16}/tests/test_cli_agent_env.py +0 -0
- {verifiers-0.2.2.dev15 → verifiers-0.2.2.dev16}/tests/test_client_auth_errors.py +0 -0
- {verifiers-0.2.2.dev15 → verifiers-0.2.2.dev16}/tests/test_client_config.py +0 -0
- {verifiers-0.2.2.dev15 → verifiers-0.2.2.dev16}/tests/test_client_multimodal_types.py +0 -0
- {verifiers-0.2.2.dev15 → verifiers-0.2.2.dev16}/tests/test_composable_env.py +0 -0
- {verifiers-0.2.2.dev15 → verifiers-0.2.2.dev16}/tests/test_context_token_metrics.py +0 -0
- {verifiers-0.2.2.dev15 → verifiers-0.2.2.dev16}/tests/test_decorator_ranks.py +0 -0
- {verifiers-0.2.2.dev15 → verifiers-0.2.2.dev16}/tests/test_endpoint_registry.py +0 -0
- {verifiers-0.2.2.dev15 → verifiers-0.2.2.dev16}/tests/test_env_group.py +0 -0
- {verifiers-0.2.2.dev15 → verifiers-0.2.2.dev16}/tests/test_env_server.py +0 -0
- {verifiers-0.2.2.dev15 → verifiers-0.2.2.dev16}/tests/test_environment.py +0 -0
- {verifiers-0.2.2.dev15 → verifiers-0.2.2.dev16}/tests/test_environment_extra.py +0 -0
- {verifiers-0.2.2.dev15 → verifiers-0.2.2.dev16}/tests/test_error_chain.py +0 -0
- {verifiers-0.2.2.dev15 → verifiers-0.2.2.dev16}/tests/test_eval_display.py +0 -0
- {verifiers-0.2.2.dev15 → verifiers-0.2.2.dev16}/tests/test_eval_utils.py +0 -0
- {verifiers-0.2.2.dev15 → verifiers-0.2.2.dev16}/tests/test_gepa_cli.py +0 -0
- {verifiers-0.2.2.dev15 → verifiers-0.2.2.dev16}/tests/test_gepa_utils.py +0 -0
- {verifiers-0.2.2.dev15 → verifiers-0.2.2.dev16}/tests/test_gym_env.py +0 -0
- {verifiers-0.2.2.dev15 → verifiers-0.2.2.dev16}/tests/test_harbor_env_mcp.py +0 -0
- {verifiers-0.2.2.dev15 → verifiers-0.2.2.dev16}/tests/test_imports.py +0 -0
- {verifiers-0.2.2.dev15 → verifiers-0.2.2.dev16}/tests/test_init_script.py +0 -0
- {verifiers-0.2.2.dev15 → verifiers-0.2.2.dev16}/tests/test_install_utils.py +0 -0
- {verifiers-0.2.2.dev15 → verifiers-0.2.2.dev16}/tests/test_interception_utils.py +0 -0
- {verifiers-0.2.2.dev15 → verifiers-0.2.2.dev16}/tests/test_logging.py +0 -0
- {verifiers-0.2.2.dev15 → verifiers-0.2.2.dev16}/tests/test_math_rubric.py +0 -0
- {verifiers-0.2.2.dev15 → verifiers-0.2.2.dev16}/tests/test_maybe_think_parser.py +0 -0
- {verifiers-0.2.2.dev15 → verifiers-0.2.2.dev16}/tests/test_message_utils.py +0 -0
- {verifiers-0.2.2.dev15 → verifiers-0.2.2.dev16}/tests/test_message_utils_multimodal.py +0 -0
- {verifiers-0.2.2.dev15 → verifiers-0.2.2.dev16}/tests/test_multiturn_env.py +0 -0
- {verifiers-0.2.2.dev15 → verifiers-0.2.2.dev16}/tests/test_nemorl_client.py +0 -0
- {verifiers-0.2.2.dev15 → verifiers-0.2.2.dev16}/tests/test_openai_chat_completions_token_client.py +0 -0
- {verifiers-0.2.2.dev15 → verifiers-0.2.2.dev16}/tests/test_openai_responses_client.py +0 -0
- {verifiers-0.2.2.dev15 → verifiers-0.2.2.dev16}/tests/test_opencode_rlm_env.py +0 -0
- {verifiers-0.2.2.dev15 → verifiers-0.2.2.dev16}/tests/test_openenv_client.py +0 -0
- {verifiers-0.2.2.dev15 → verifiers-0.2.2.dev16}/tests/test_parser.py +0 -0
- {verifiers-0.2.2.dev15 → verifiers-0.2.2.dev16}/tests/test_path_utils.py +0 -0
- {verifiers-0.2.2.dev15 → verifiers-0.2.2.dev16}/tests/test_per_turn_timing.py +0 -0
- {verifiers-0.2.2.dev15 → verifiers-0.2.2.dev16}/tests/test_pricing_utils.py +0 -0
- {verifiers-0.2.2.dev15 → verifiers-0.2.2.dev16}/tests/test_prime_plugin.py +0 -0
- {verifiers-0.2.2.dev15 → verifiers-0.2.2.dev16}/tests/test_renderer_client.py +0 -0
- {verifiers-0.2.2.dev15 → verifiers-0.2.2.dev16}/tests/test_renderer_e2e.py +0 -0
- {verifiers-0.2.2.dev15 → verifiers-0.2.2.dev16}/tests/test_rlm_composable_env.py +0 -0
- {verifiers-0.2.2.dev15 → verifiers-0.2.2.dev16}/tests/test_rubric.py +0 -0
- {verifiers-0.2.2.dev15 → verifiers-0.2.2.dev16}/tests/test_rubric_group.py +0 -0
- {verifiers-0.2.2.dev15 → verifiers-0.2.2.dev16}/tests/test_sandbox_debug_env.py +0 -0
- {verifiers-0.2.2.dev15 → verifiers-0.2.2.dev16}/tests/test_sandbox_env.py +0 -0
- {verifiers-0.2.2.dev15 → verifiers-0.2.2.dev16}/tests/test_sandbox_mixin.py +0 -0
- {verifiers-0.2.2.dev15 → verifiers-0.2.2.dev16}/tests/test_save_utils.py +0 -0
- {verifiers-0.2.2.dev15 → verifiers-0.2.2.dev16}/tests/test_setup_script.py +0 -0
- {verifiers-0.2.2.dev15 → verifiers-0.2.2.dev16}/tests/test_singleturn_env.py +0 -0
- {verifiers-0.2.2.dev15 → verifiers-0.2.2.dev16}/tests/test_stateful_tool_env.py +0 -0
- {verifiers-0.2.2.dev15 → verifiers-0.2.2.dev16}/tests/test_think_parser.py +0 -0
- {verifiers-0.2.2.dev15 → verifiers-0.2.2.dev16}/tests/test_tool_env.py +0 -0
- {verifiers-0.2.2.dev15 → verifiers-0.2.2.dev16}/tests/test_tool_utils.py +0 -0
- {verifiers-0.2.2.dev15 → verifiers-0.2.2.dev16}/tests/test_trajectory_processing.py +0 -0
- {verifiers-0.2.2.dev15 → verifiers-0.2.2.dev16}/tests/test_tui_info_formatting.py +0 -0
- {verifiers-0.2.2.dev15 → verifiers-0.2.2.dev16}/tests/test_types.py +0 -0
- {verifiers-0.2.2.dev15 → verifiers-0.2.2.dev16}/tests/test_xml_parser.py +0 -0
- {verifiers-0.2.2.dev15 → verifiers-0.2.2.dev16}/tests/v1/conftest.py +0 -0
- {verifiers-0.2.2.dev15 → verifiers-0.2.2.dev16}/tests/v1/fixtures/counter_tool_v1.py +0 -0
- {verifiers-0.2.2.dev15 → verifiers-0.2.2.dev16}/tests/v1/fixtures/duet_v1.py +0 -0
- {verifiers-0.2.2.dev15 → verifiers-0.2.2.dev16}/tests/v1/fixtures/echo_agentic_v1.py +0 -0
- {verifiers-0.2.2.dev15 → verifiers-0.2.2.dev16}/tests/v1/fixtures/echo_multi_v0.py +0 -0
- {verifiers-0.2.2.dev15 → verifiers-0.2.2.dev16}/tests/v1/fixtures/echo_tool_v1.py +0 -0
- {verifiers-0.2.2.dev15 → verifiers-0.2.2.dev16}/tests/v1/fixtures/echo_user_sim_v1.py +0 -0
- {verifiers-0.2.2.dev15 → verifiers-0.2.2.dev16}/tests/v1/fixtures/echo_v0.py +0 -0
- {verifiers-0.2.2.dev15 → verifiers-0.2.2.dev16}/tests/v1/fixtures/echo_v1.py +0 -0
- {verifiers-0.2.2.dev15 → verifiers-0.2.2.dev16}/tests/v1/fixtures/pyproject.toml +0 -0
- {verifiers-0.2.2.dev15 → verifiers-0.2.2.dev16}/tests/v1/fixtures/tool_response_image_v1.py +0 -0
- {verifiers-0.2.2.dev15 → verifiers-0.2.2.dev16}/tests/v1/test_color_codeword_tasks.py +0 -0
- {verifiers-0.2.2.dev15 → verifiers-0.2.2.dev16}/tests/v1/test_configs.py +0 -0
- {verifiers-0.2.2.dev15 → verifiers-0.2.2.dev16}/tests/v1/test_e2e.py +0 -0
- {verifiers-0.2.2.dev15 → verifiers-0.2.2.dev16}/tests/v1/test_envs.py +0 -0
- {verifiers-0.2.2.dev15 → verifiers-0.2.2.dev16}/tests/v1/test_graph.py +0 -0
- {verifiers-0.2.2.dev15 → verifiers-0.2.2.dev16}/tests/v1/test_judges.py +0 -0
- {verifiers-0.2.2.dev15 → verifiers-0.2.2.dev16}/tests/v1/test_legacy.py +0 -0
- {verifiers-0.2.2.dev15 → verifiers-0.2.2.dev16}/tests/v1/test_scoring.py +0 -0
- {verifiers-0.2.2.dev15 → verifiers-0.2.2.dev16}/tests/v1/test_taskset.py +0 -0
- {verifiers-0.2.2.dev15 → verifiers-0.2.2.dev16}/tests/v1/test_trace.py +0 -0
- {verifiers-0.2.2.dev15 → verifiers-0.2.2.dev16}/verifiers/__init__.py +0 -0
- {verifiers-0.2.2.dev15 → verifiers-0.2.2.dev16}/verifiers/cli/__init__.py +0 -0
- {verifiers-0.2.2.dev15 → verifiers-0.2.2.dev16}/verifiers/cli/commands/__init__.py +0 -0
- {verifiers-0.2.2.dev15 → verifiers-0.2.2.dev16}/verifiers/cli/commands/build.py +0 -0
- {verifiers-0.2.2.dev15 → verifiers-0.2.2.dev16}/verifiers/cli/commands/eval.py +0 -0
- {verifiers-0.2.2.dev15 → verifiers-0.2.2.dev16}/verifiers/cli/commands/gepa.py +0 -0
- {verifiers-0.2.2.dev15 → verifiers-0.2.2.dev16}/verifiers/cli/commands/init.py +0 -0
- {verifiers-0.2.2.dev15 → verifiers-0.2.2.dev16}/verifiers/cli/commands/install.py +0 -0
- {verifiers-0.2.2.dev15 → verifiers-0.2.2.dev16}/verifiers/cli/commands/setup.py +0 -0
- {verifiers-0.2.2.dev15 → verifiers-0.2.2.dev16}/verifiers/cli/plugins/__init__.py +0 -0
- {verifiers-0.2.2.dev15 → verifiers-0.2.2.dev16}/verifiers/cli/plugins/prime.py +0 -0
- {verifiers-0.2.2.dev15 → verifiers-0.2.2.dev16}/verifiers/cli/tui.py +0 -0
- {verifiers-0.2.2.dev15 → verifiers-0.2.2.dev16}/verifiers/clients/__init__.py +0 -0
- {verifiers-0.2.2.dev15 → verifiers-0.2.2.dev16}/verifiers/clients/anthropic_messages_client.py +0 -0
- {verifiers-0.2.2.dev15 → verifiers-0.2.2.dev16}/verifiers/clients/client.py +0 -0
- {verifiers-0.2.2.dev15 → verifiers-0.2.2.dev16}/verifiers/clients/nemorl_chat_completions_client.py +0 -0
- {verifiers-0.2.2.dev15 → verifiers-0.2.2.dev16}/verifiers/clients/openai_chat_completions_client.py +0 -0
- {verifiers-0.2.2.dev15 → verifiers-0.2.2.dev16}/verifiers/clients/openai_chat_completions_token_client.py +0 -0
- {verifiers-0.2.2.dev15 → verifiers-0.2.2.dev16}/verifiers/clients/openai_completions_client.py +0 -0
- {verifiers-0.2.2.dev15 → verifiers-0.2.2.dev16}/verifiers/clients/openai_responses_client.py +0 -0
- {verifiers-0.2.2.dev15 → verifiers-0.2.2.dev16}/verifiers/clients/renderer_client.py +0 -0
- {verifiers-0.2.2.dev15 → verifiers-0.2.2.dev16}/verifiers/decorators.py +0 -0
- {verifiers-0.2.2.dev15 → verifiers-0.2.2.dev16}/verifiers/envs/__init__.py +0 -0
- {verifiers-0.2.2.dev15 → verifiers-0.2.2.dev16}/verifiers/envs/env_group.py +0 -0
- {verifiers-0.2.2.dev15 → verifiers-0.2.2.dev16}/verifiers/envs/environment.py +0 -0
- {verifiers-0.2.2.dev15 → verifiers-0.2.2.dev16}/verifiers/envs/experimental/README.md +0 -0
- {verifiers-0.2.2.dev15 → verifiers-0.2.2.dev16}/verifiers/envs/experimental/__init__.py +0 -0
- {verifiers-0.2.2.dev15 → verifiers-0.2.2.dev16}/verifiers/envs/experimental/cli_agent_env.py +0 -0
- {verifiers-0.2.2.dev15 → verifiers-0.2.2.dev16}/verifiers/envs/experimental/composable/README.md +0 -0
- {verifiers-0.2.2.dev15 → verifiers-0.2.2.dev16}/verifiers/envs/experimental/composable/__init__.py +0 -0
- {verifiers-0.2.2.dev15 → verifiers-0.2.2.dev16}/verifiers/envs/experimental/composable/_filter.py +0 -0
- {verifiers-0.2.2.dev15 → verifiers-0.2.2.dev16}/verifiers/envs/experimental/composable/composable_env.py +0 -0
- {verifiers-0.2.2.dev15 → verifiers-0.2.2.dev16}/verifiers/envs/experimental/composable/harness.py +0 -0
- {verifiers-0.2.2.dev15 → verifiers-0.2.2.dev16}/verifiers/envs/experimental/composable/harnesses/__init__.py +0 -0
- {verifiers-0.2.2.dev15 → verifiers-0.2.2.dev16}/verifiers/envs/experimental/composable/harnesses/mini_swe_agent.py +0 -0
- {verifiers-0.2.2.dev15 → verifiers-0.2.2.dev16}/verifiers/envs/experimental/composable/harnesses/opencode.py +0 -0
- {verifiers-0.2.2.dev15 → verifiers-0.2.2.dev16}/verifiers/envs/experimental/composable/harnesses/prompt.txt +0 -0
- {verifiers-0.2.2.dev15 → verifiers-0.2.2.dev16}/verifiers/envs/experimental/composable/harnesses/rlm.py +0 -0
- {verifiers-0.2.2.dev15 → verifiers-0.2.2.dev16}/verifiers/envs/experimental/composable/sandbox_debug_env.py +0 -0
- {verifiers-0.2.2.dev15 → verifiers-0.2.2.dev16}/verifiers/envs/experimental/composable/swe_debug_env.py +0 -0
- {verifiers-0.2.2.dev15 → verifiers-0.2.2.dev16}/verifiers/envs/experimental/composable/task.py +0 -0
- {verifiers-0.2.2.dev15 → verifiers-0.2.2.dev16}/verifiers/envs/experimental/composable/tasksets/__init__.py +0 -0
- {verifiers-0.2.2.dev15 → verifiers-0.2.2.dev16}/verifiers/envs/experimental/composable/tasksets/cp/__init__.py +0 -0
- {verifiers-0.2.2.dev15 → verifiers-0.2.2.dev16}/verifiers/envs/experimental/composable/tasksets/cp/cp_task.py +0 -0
- {verifiers-0.2.2.dev15 → verifiers-0.2.2.dev16}/verifiers/envs/experimental/composable/tasksets/cp/test_utils.py +0 -0
- {verifiers-0.2.2.dev15 → verifiers-0.2.2.dev16}/verifiers/envs/experimental/composable/tasksets/harbor/__init__.py +0 -0
- {verifiers-0.2.2.dev15 → verifiers-0.2.2.dev16}/verifiers/envs/experimental/composable/tasksets/harbor/cli_gym.py +0 -0
- {verifiers-0.2.2.dev15 → verifiers-0.2.2.dev16}/verifiers/envs/experimental/composable/tasksets/harbor/harbor.py +0 -0
- {verifiers-0.2.2.dev15 → verifiers-0.2.2.dev16}/verifiers/envs/experimental/composable/tasksets/harbor/terminal_lego.py +0 -0
- {verifiers-0.2.2.dev15 → verifiers-0.2.2.dev16}/verifiers/envs/experimental/composable/tasksets/math/__init__.py +0 -0
- {verifiers-0.2.2.dev15 → verifiers-0.2.2.dev16}/verifiers/envs/experimental/composable/tasksets/math/math_task.py +0 -0
- {verifiers-0.2.2.dev15 → verifiers-0.2.2.dev16}/verifiers/envs/experimental/composable/tasksets/swe/README.md +0 -0
- {verifiers-0.2.2.dev15 → verifiers-0.2.2.dev16}/verifiers/envs/experimental/composable/tasksets/swe/__init__.py +0 -0
- {verifiers-0.2.2.dev15 → verifiers-0.2.2.dev16}/verifiers/envs/experimental/composable/tasksets/swe/multi_swe/__init__.py +0 -0
- {verifiers-0.2.2.dev15 → verifiers-0.2.2.dev16}/verifiers/envs/experimental/composable/tasksets/swe/multi_swe/extract_fix_patch.sh +0 -0
- {verifiers-0.2.2.dev15 → verifiers-0.2.2.dev16}/verifiers/envs/experimental/composable/tasksets/swe/multi_swe/taskset.py +0 -0
- {verifiers-0.2.2.dev15 → verifiers-0.2.2.dev16}/verifiers/envs/experimental/composable/tasksets/swe/openswe/__init__.py +0 -0
- {verifiers-0.2.2.dev15 → verifiers-0.2.2.dev16}/verifiers/envs/experimental/composable/tasksets/swe/openswe/taskset.py +0 -0
- {verifiers-0.2.2.dev15 → verifiers-0.2.2.dev16}/verifiers/envs/experimental/composable/tasksets/swe/r2e_gym/__init__.py +0 -0
- {verifiers-0.2.2.dev15 → verifiers-0.2.2.dev16}/verifiers/envs/experimental/composable/tasksets/swe/r2e_gym/log_parser.py +0 -0
- {verifiers-0.2.2.dev15 → verifiers-0.2.2.dev16}/verifiers/envs/experimental/composable/tasksets/swe/r2e_gym/taskset.py +0 -0
- {verifiers-0.2.2.dev15 → verifiers-0.2.2.dev16}/verifiers/envs/experimental/composable/tasksets/swe/scale_swe/__init__.py +0 -0
- {verifiers-0.2.2.dev15 → verifiers-0.2.2.dev16}/verifiers/envs/experimental/composable/tasksets/swe/scale_swe/taskset.py +0 -0
- {verifiers-0.2.2.dev15 → verifiers-0.2.2.dev16}/verifiers/envs/experimental/composable/tasksets/swe/shared/__init__.py +0 -0
- {verifiers-0.2.2.dev15 → verifiers-0.2.2.dev16}/verifiers/envs/experimental/composable/tasksets/swe/shared/test_patch.py +0 -0
- {verifiers-0.2.2.dev15 → verifiers-0.2.2.dev16}/verifiers/envs/experimental/composable/tasksets/swe/swe_bench/__init__.py +0 -0
- {verifiers-0.2.2.dev15 → verifiers-0.2.2.dev16}/verifiers/envs/experimental/composable/tasksets/swe/swe_bench/taskset.py +0 -0
- {verifiers-0.2.2.dev15 → verifiers-0.2.2.dev16}/verifiers/envs/experimental/composable/tasksets/swe/swe_lego/__init__.py +0 -0
- {verifiers-0.2.2.dev15 → verifiers-0.2.2.dev16}/verifiers/envs/experimental/composable/tasksets/swe/swe_lego/taskset.py +0 -0
- {verifiers-0.2.2.dev15 → verifiers-0.2.2.dev16}/verifiers/envs/experimental/composable/tasksets/swe/swe_rebench_v2/__init__.py +0 -0
- {verifiers-0.2.2.dev15 → verifiers-0.2.2.dev16}/verifiers/envs/experimental/composable/tasksets/swe/swe_rebench_v2/log_parsers.py +0 -0
- {verifiers-0.2.2.dev15 → verifiers-0.2.2.dev16}/verifiers/envs/experimental/composable/tasksets/swe/swe_rebench_v2/taskset.py +0 -0
- {verifiers-0.2.2.dev15 → verifiers-0.2.2.dev16}/verifiers/envs/experimental/composable/tasksets/swe/swe_smith/__init__.py +0 -0
- {verifiers-0.2.2.dev15 → verifiers-0.2.2.dev16}/verifiers/envs/experimental/composable/tasksets/swe/swe_smith/taskset.py +0 -0
- {verifiers-0.2.2.dev15 → verifiers-0.2.2.dev16}/verifiers/envs/experimental/composable/tasksets/swe/swe_tasksets.py +0 -0
- {verifiers-0.2.2.dev15 → verifiers-0.2.2.dev16}/verifiers/envs/experimental/gym_env.py +0 -0
- {verifiers-0.2.2.dev15 → verifiers-0.2.2.dev16}/verifiers/envs/experimental/harbor_env/__init__.py +0 -0
- {verifiers-0.2.2.dev15 → verifiers-0.2.2.dev16}/verifiers/envs/experimental/harbor_env/env.py +0 -0
- {verifiers-0.2.2.dev15 → verifiers-0.2.2.dev16}/verifiers/envs/experimental/harbor_env/mcp.py +0 -0
- {verifiers-0.2.2.dev15 → verifiers-0.2.2.dev16}/verifiers/envs/experimental/mcp_env.py +0 -0
- {verifiers-0.2.2.dev15 → verifiers-0.2.2.dev16}/verifiers/envs/experimental/opencode_env.py +0 -0
- {verifiers-0.2.2.dev15 → verifiers-0.2.2.dev16}/verifiers/envs/experimental/opencode_qa_env.py +0 -0
- {verifiers-0.2.2.dev15 → verifiers-0.2.2.dev16}/verifiers/envs/experimental/opencode_rlm_env.py +0 -0
- {verifiers-0.2.2.dev15 → verifiers-0.2.2.dev16}/verifiers/envs/experimental/sandbox_mixin.py +0 -0
- {verifiers-0.2.2.dev15 → verifiers-0.2.2.dev16}/verifiers/envs/experimental/utils/__init__.py +0 -0
- {verifiers-0.2.2.dev15 → verifiers-0.2.2.dev16}/verifiers/envs/experimental/utils/file_locks.py +0 -0
- {verifiers-0.2.2.dev15 → verifiers-0.2.2.dev16}/verifiers/envs/experimental/utils/git_checkout_cache.py +0 -0
- {verifiers-0.2.2.dev15 → verifiers-0.2.2.dev16}/verifiers/envs/integrations/README.md +0 -0
- {verifiers-0.2.2.dev15 → verifiers-0.2.2.dev16}/verifiers/envs/integrations/__init__.py +0 -0
- {verifiers-0.2.2.dev15 → verifiers-0.2.2.dev16}/verifiers/envs/integrations/browser_env/README.md +0 -0
- {verifiers-0.2.2.dev15 → verifiers-0.2.2.dev16}/verifiers/envs/integrations/browser_env/__init__.py +0 -0
- {verifiers-0.2.2.dev15 → verifiers-0.2.2.dev16}/verifiers/envs/integrations/browser_env/browser_env.py +0 -0
- {verifiers-0.2.2.dev15 → verifiers-0.2.2.dev16}/verifiers/envs/integrations/browser_env/modes/__init__.py +0 -0
- {verifiers-0.2.2.dev15 → verifiers-0.2.2.dev16}/verifiers/envs/integrations/browser_env/modes/base.py +0 -0
- {verifiers-0.2.2.dev15 → verifiers-0.2.2.dev16}/verifiers/envs/integrations/browser_env/modes/cua_mode.py +0 -0
- {verifiers-0.2.2.dev15 → verifiers-0.2.2.dev16}/verifiers/envs/integrations/browser_env/modes/dom_mode.py +0 -0
- {verifiers-0.2.2.dev15 → verifiers-0.2.2.dev16}/verifiers/envs/integrations/openenv_env.py +0 -0
- {verifiers-0.2.2.dev15 → verifiers-0.2.2.dev16}/verifiers/envs/integrations/reasoninggym_env.py +0 -0
- {verifiers-0.2.2.dev15 → verifiers-0.2.2.dev16}/verifiers/envs/integrations/textarena_env.py +0 -0
- {verifiers-0.2.2.dev15 → verifiers-0.2.2.dev16}/verifiers/envs/multiturn_env.py +0 -0
- {verifiers-0.2.2.dev15 → verifiers-0.2.2.dev16}/verifiers/envs/python_env.py +0 -0
- {verifiers-0.2.2.dev15 → verifiers-0.2.2.dev16}/verifiers/envs/sandbox_env.py +0 -0
- {verifiers-0.2.2.dev15 → verifiers-0.2.2.dev16}/verifiers/envs/singleturn_env.py +0 -0
- {verifiers-0.2.2.dev15 → verifiers-0.2.2.dev16}/verifiers/envs/stateful_tool_env.py +0 -0
- {verifiers-0.2.2.dev15 → verifiers-0.2.2.dev16}/verifiers/envs/tool_env.py +0 -0
- {verifiers-0.2.2.dev15 → verifiers-0.2.2.dev16}/verifiers/errors.py +0 -0
- {verifiers-0.2.2.dev15 → verifiers-0.2.2.dev16}/verifiers/gepa/__init__.py +0 -0
- {verifiers-0.2.2.dev15 → verifiers-0.2.2.dev16}/verifiers/gepa/adapter.py +0 -0
- {verifiers-0.2.2.dev15 → verifiers-0.2.2.dev16}/verifiers/gepa/config.py +0 -0
- {verifiers-0.2.2.dev15 → verifiers-0.2.2.dev16}/verifiers/gepa/display.py +0 -0
- {verifiers-0.2.2.dev15 → verifiers-0.2.2.dev16}/verifiers/gepa/gepa_utils.py +0 -0
- {verifiers-0.2.2.dev15 → verifiers-0.2.2.dev16}/verifiers/parsers/__init__.py +0 -0
- {verifiers-0.2.2.dev15 → verifiers-0.2.2.dev16}/verifiers/parsers/maybe_think_parser.py +0 -0
- {verifiers-0.2.2.dev15 → verifiers-0.2.2.dev16}/verifiers/parsers/parser.py +0 -0
- {verifiers-0.2.2.dev15 → verifiers-0.2.2.dev16}/verifiers/parsers/think_parser.py +0 -0
- {verifiers-0.2.2.dev15 → verifiers-0.2.2.dev16}/verifiers/parsers/xml_parser.py +0 -0
- {verifiers-0.2.2.dev15 → verifiers-0.2.2.dev16}/verifiers/rubrics/__init__.py +0 -0
- {verifiers-0.2.2.dev15 → verifiers-0.2.2.dev16}/verifiers/rubrics/experimental/hybrid_math_rubric.py +0 -0
- {verifiers-0.2.2.dev15 → verifiers-0.2.2.dev16}/verifiers/rubrics/judge_rubric.py +0 -0
- {verifiers-0.2.2.dev15 → verifiers-0.2.2.dev16}/verifiers/rubrics/math_rubric.py +0 -0
- {verifiers-0.2.2.dev15 → verifiers-0.2.2.dev16}/verifiers/rubrics/rubric.py +0 -0
- {verifiers-0.2.2.dev15 → verifiers-0.2.2.dev16}/verifiers/rubrics/rubric_group.py +0 -0
- {verifiers-0.2.2.dev15 → verifiers-0.2.2.dev16}/verifiers/scripts/__init__.py +0 -0
- {verifiers-0.2.2.dev15 → verifiers-0.2.2.dev16}/verifiers/scripts/build.py +0 -0
- {verifiers-0.2.2.dev15 → verifiers-0.2.2.dev16}/verifiers/scripts/eval.py +0 -0
- {verifiers-0.2.2.dev15 → verifiers-0.2.2.dev16}/verifiers/scripts/gepa.py +0 -0
- {verifiers-0.2.2.dev15 → verifiers-0.2.2.dev16}/verifiers/scripts/init.py +0 -0
- {verifiers-0.2.2.dev15 → verifiers-0.2.2.dev16}/verifiers/scripts/install.py +0 -0
- {verifiers-0.2.2.dev15 → verifiers-0.2.2.dev16}/verifiers/scripts/setup.py +0 -0
- {verifiers-0.2.2.dev15 → verifiers-0.2.2.dev16}/verifiers/scripts/tui.py +0 -0
- {verifiers-0.2.2.dev15 → verifiers-0.2.2.dev16}/verifiers/serve/__init__.py +0 -0
- {verifiers-0.2.2.dev15 → verifiers-0.2.2.dev16}/verifiers/serve/client/env_client.py +0 -0
- {verifiers-0.2.2.dev15 → verifiers-0.2.2.dev16}/verifiers/serve/client/zmq_env_client.py +0 -0
- {verifiers-0.2.2.dev15 → verifiers-0.2.2.dev16}/verifiers/serve/server/__init__.py +0 -0
- {verifiers-0.2.2.dev15 → verifiers-0.2.2.dev16}/verifiers/serve/server/env_router.py +0 -0
- {verifiers-0.2.2.dev15 → verifiers-0.2.2.dev16}/verifiers/serve/server/env_server.py +0 -0
- {verifiers-0.2.2.dev15 → verifiers-0.2.2.dev16}/verifiers/serve/server/env_worker.py +0 -0
- {verifiers-0.2.2.dev15 → verifiers-0.2.2.dev16}/verifiers/serve/server/zmq_env_server.py +0 -0
- {verifiers-0.2.2.dev15 → verifiers-0.2.2.dev16}/verifiers/serve/types.py +0 -0
- {verifiers-0.2.2.dev15 → verifiers-0.2.2.dev16}/verifiers/types.py +0 -0
- {verifiers-0.2.2.dev15 → verifiers-0.2.2.dev16}/verifiers/utils/__init__.py +0 -0
- {verifiers-0.2.2.dev15 → verifiers-0.2.2.dev16}/verifiers/utils/async_utils.py +0 -0
- {verifiers-0.2.2.dev15 → verifiers-0.2.2.dev16}/verifiers/utils/client_utils.py +0 -0
- {verifiers-0.2.2.dev15 → verifiers-0.2.2.dev16}/verifiers/utils/config_utils.py +0 -0
- {verifiers-0.2.2.dev15 → verifiers-0.2.2.dev16}/verifiers/utils/data_utils.py +0 -0
- {verifiers-0.2.2.dev15 → verifiers-0.2.2.dev16}/verifiers/utils/display_utils.py +0 -0
- {verifiers-0.2.2.dev15 → verifiers-0.2.2.dev16}/verifiers/utils/env_config_utils.py +0 -0
- {verifiers-0.2.2.dev15 → verifiers-0.2.2.dev16}/verifiers/utils/env_utils.py +0 -0
- {verifiers-0.2.2.dev15 → verifiers-0.2.2.dev16}/verifiers/utils/error_utils.py +0 -0
- {verifiers-0.2.2.dev15 → verifiers-0.2.2.dev16}/verifiers/utils/eval_display.py +0 -0
- {verifiers-0.2.2.dev15 → verifiers-0.2.2.dev16}/verifiers/utils/eval_utils.py +0 -0
- {verifiers-0.2.2.dev15 → verifiers-0.2.2.dev16}/verifiers/utils/heartbeat.py +0 -0
- {verifiers-0.2.2.dev15 → verifiers-0.2.2.dev16}/verifiers/utils/import_utils.py +0 -0
- {verifiers-0.2.2.dev15 → verifiers-0.2.2.dev16}/verifiers/utils/install_utils.py +0 -0
- {verifiers-0.2.2.dev15 → verifiers-0.2.2.dev16}/verifiers/utils/interception_utils.py +0 -0
- {verifiers-0.2.2.dev15 → verifiers-0.2.2.dev16}/verifiers/utils/logging_utils.py +0 -0
- {verifiers-0.2.2.dev15 → verifiers-0.2.2.dev16}/verifiers/utils/message_utils.py +0 -0
- {verifiers-0.2.2.dev15 → verifiers-0.2.2.dev16}/verifiers/utils/metric_utils.py +0 -0
- {verifiers-0.2.2.dev15 → verifiers-0.2.2.dev16}/verifiers/utils/path_utils.py +0 -0
- {verifiers-0.2.2.dev15 → verifiers-0.2.2.dev16}/verifiers/utils/pricing_utils.py +0 -0
- {verifiers-0.2.2.dev15 → verifiers-0.2.2.dev16}/verifiers/utils/process_utils.py +0 -0
- {verifiers-0.2.2.dev15 → verifiers-0.2.2.dev16}/verifiers/utils/response_utils.py +0 -0
- {verifiers-0.2.2.dev15 → verifiers-0.2.2.dev16}/verifiers/utils/save_utils.py +0 -0
- {verifiers-0.2.2.dev15 → verifiers-0.2.2.dev16}/verifiers/utils/serve_utils.py +0 -0
- {verifiers-0.2.2.dev15 → verifiers-0.2.2.dev16}/verifiers/utils/thread_utils.py +0 -0
- {verifiers-0.2.2.dev15 → verifiers-0.2.2.dev16}/verifiers/utils/threaded_sandbox_client.py +0 -0
- {verifiers-0.2.2.dev15 → verifiers-0.2.2.dev16}/verifiers/utils/tool_utils.py +0 -0
- {verifiers-0.2.2.dev15 → verifiers-0.2.2.dev16}/verifiers/utils/usage_utils.py +0 -0
- {verifiers-0.2.2.dev15 → verifiers-0.2.2.dev16}/verifiers/utils/version_utils.py +0 -0
- {verifiers-0.2.2.dev15 → verifiers-0.2.2.dev16}/verifiers/v1/__init__.py +0 -0
- {verifiers-0.2.2.dev15 → verifiers-0.2.2.dev16}/verifiers/v1/cli/__init__.py +0 -0
- {verifiers-0.2.2.dev15 → verifiers-0.2.2.dev16}/verifiers/v1/cli/dashboard/__init__.py +0 -0
- {verifiers-0.2.2.dev15 → verifiers-0.2.2.dev16}/verifiers/v1/cli/dashboard/base.py +0 -0
- {verifiers-0.2.2.dev15 → verifiers-0.2.2.dev16}/verifiers/v1/cli/dashboard/eval.py +0 -0
- {verifiers-0.2.2.dev15 → verifiers-0.2.2.dev16}/verifiers/v1/cli/dashboard/replay.py +0 -0
- {verifiers-0.2.2.dev15 → verifiers-0.2.2.dev16}/verifiers/v1/cli/dashboard/validate.py +0 -0
- {verifiers-0.2.2.dev15 → verifiers-0.2.2.dev16}/verifiers/v1/cli/eval/__init__.py +0 -0
- {verifiers-0.2.2.dev15 → verifiers-0.2.2.dev16}/verifiers/v1/cli/eval/main.py +0 -0
- {verifiers-0.2.2.dev15 → verifiers-0.2.2.dev16}/verifiers/v1/cli/eval/resume.py +0 -0
- {verifiers-0.2.2.dev15 → verifiers-0.2.2.dev16}/verifiers/v1/cli/eval/runner.py +0 -0
- {verifiers-0.2.2.dev15 → verifiers-0.2.2.dev16}/verifiers/v1/cli/gepa.py +0 -0
- {verifiers-0.2.2.dev15 → verifiers-0.2.2.dev16}/verifiers/v1/cli/init.py +0 -0
- {verifiers-0.2.2.dev15 → verifiers-0.2.2.dev16}/verifiers/v1/cli/output.py +0 -0
- {verifiers-0.2.2.dev15 → verifiers-0.2.2.dev16}/verifiers/v1/cli/replay.py +0 -0
- {verifiers-0.2.2.dev15 → verifiers-0.2.2.dev16}/verifiers/v1/cli/resolve.py +0 -0
- {verifiers-0.2.2.dev15 → verifiers-0.2.2.dev16}/verifiers/v1/cli/serve.py +0 -0
- {verifiers-0.2.2.dev15 → verifiers-0.2.2.dev16}/verifiers/v1/cli/validate.py +0 -0
- {verifiers-0.2.2.dev15 → verifiers-0.2.2.dev16}/verifiers/v1/clients/__init__.py +0 -0
- {verifiers-0.2.2.dev15 → verifiers-0.2.2.dev16}/verifiers/v1/clients/client.py +0 -0
- {verifiers-0.2.2.dev15 → verifiers-0.2.2.dev16}/verifiers/v1/clients/config.py +0 -0
- {verifiers-0.2.2.dev15 → verifiers-0.2.2.dev16}/verifiers/v1/clients/eval.py +0 -0
- {verifiers-0.2.2.dev15 → verifiers-0.2.2.dev16}/verifiers/v1/clients/train.py +0 -0
- {verifiers-0.2.2.dev15 → verifiers-0.2.2.dev16}/verifiers/v1/configs/__init__.py +0 -0
- {verifiers-0.2.2.dev15 → verifiers-0.2.2.dev16}/verifiers/v1/configs/debug.py +0 -0
- {verifiers-0.2.2.dev15 → verifiers-0.2.2.dev16}/verifiers/v1/configs/env.py +0 -0
- {verifiers-0.2.2.dev15 → verifiers-0.2.2.dev16}/verifiers/v1/configs/eval.py +0 -0
- {verifiers-0.2.2.dev15 → verifiers-0.2.2.dev16}/verifiers/v1/configs/init.py +0 -0
- {verifiers-0.2.2.dev15 → verifiers-0.2.2.dev16}/verifiers/v1/configs/replay.py +0 -0
- {verifiers-0.2.2.dev15 → verifiers-0.2.2.dev16}/verifiers/v1/configs/serve.py +0 -0
- {verifiers-0.2.2.dev15 → verifiers-0.2.2.dev16}/verifiers/v1/configs/validate.py +0 -0
- {verifiers-0.2.2.dev15 → verifiers-0.2.2.dev16}/verifiers/v1/decorators.py +0 -0
- {verifiers-0.2.2.dev15 → verifiers-0.2.2.dev16}/verifiers/v1/dialects/__init__.py +0 -0
- {verifiers-0.2.2.dev15 → verifiers-0.2.2.dev16}/verifiers/v1/dialects/anthropic.py +0 -0
- {verifiers-0.2.2.dev15 → verifiers-0.2.2.dev16}/verifiers/v1/dialects/base.py +0 -0
- {verifiers-0.2.2.dev15 → verifiers-0.2.2.dev16}/verifiers/v1/dialects/chat.py +0 -0
- {verifiers-0.2.2.dev15 → verifiers-0.2.2.dev16}/verifiers/v1/dialects/responses.py +0 -0
- {verifiers-0.2.2.dev15 → verifiers-0.2.2.dev16}/verifiers/v1/env.py +0 -0
- {verifiers-0.2.2.dev15 → verifiers-0.2.2.dev16}/verifiers/v1/envs/__init__.py +0 -0
- {verifiers-0.2.2.dev15 → verifiers-0.2.2.dev16}/verifiers/v1/envs/agentic_judge/__init__.py +0 -0
- {verifiers-0.2.2.dev15 → verifiers-0.2.2.dev16}/verifiers/v1/envs/agentic_judge/env.py +0 -0
- {verifiers-0.2.2.dev15 → verifiers-0.2.2.dev16}/verifiers/v1/envs/best_of_n/__init__.py +0 -0
- {verifiers-0.2.2.dev15 → verifiers-0.2.2.dev16}/verifiers/v1/envs/best_of_n/env.py +0 -0
- {verifiers-0.2.2.dev15 → verifiers-0.2.2.dev16}/verifiers/v1/envs/single_agent/__init__.py +0 -0
- {verifiers-0.2.2.dev15 → verifiers-0.2.2.dev16}/verifiers/v1/envs/single_agent/env.py +0 -0
- {verifiers-0.2.2.dev15 → verifiers-0.2.2.dev16}/verifiers/v1/episode.py +0 -0
- {verifiers-0.2.2.dev15 → verifiers-0.2.2.dev16}/verifiers/v1/errors.py +0 -0
- {verifiers-0.2.2.dev15 → verifiers-0.2.2.dev16}/verifiers/v1/gepa/__init__.py +0 -0
- {verifiers-0.2.2.dev15 → verifiers-0.2.2.dev16}/verifiers/v1/gepa/adapter.py +0 -0
- {verifiers-0.2.2.dev15 → verifiers-0.2.2.dev16}/verifiers/v1/gepa/config.py +0 -0
- {verifiers-0.2.2.dev15 → verifiers-0.2.2.dev16}/verifiers/v1/gepa/dataset.py +0 -0
- {verifiers-0.2.2.dev15 → verifiers-0.2.2.dev16}/verifiers/v1/gepa/reflection.py +0 -0
- {verifiers-0.2.2.dev15 → verifiers-0.2.2.dev16}/verifiers/v1/gepa/runner.py +0 -0
- {verifiers-0.2.2.dev15 → verifiers-0.2.2.dev16}/verifiers/v1/graph.py +0 -0
- {verifiers-0.2.2.dev15 → verifiers-0.2.2.dev16}/verifiers/v1/harness.py +0 -0
- {verifiers-0.2.2.dev15 → verifiers-0.2.2.dev16}/verifiers/v1/harnesses/__init__.py +0 -0
- {verifiers-0.2.2.dev15 → verifiers-0.2.2.dev16}/verifiers/v1/harnesses/bash/__init__.py +0 -0
- {verifiers-0.2.2.dev15 → verifiers-0.2.2.dev16}/verifiers/v1/harnesses/bash/harness.py +0 -0
- {verifiers-0.2.2.dev15 → verifiers-0.2.2.dev16}/verifiers/v1/harnesses/bash/program.py +0 -0
- {verifiers-0.2.2.dev15 → verifiers-0.2.2.dev16}/verifiers/v1/harnesses/claude_code/__init__.py +0 -0
- {verifiers-0.2.2.dev15 → verifiers-0.2.2.dev16}/verifiers/v1/harnesses/claude_code/harness.py +0 -0
- {verifiers-0.2.2.dev15 → verifiers-0.2.2.dev16}/verifiers/v1/harnesses/codex/__init__.py +0 -0
- {verifiers-0.2.2.dev15 → verifiers-0.2.2.dev16}/verifiers/v1/harnesses/codex/harness.py +0 -0
- {verifiers-0.2.2.dev15 → verifiers-0.2.2.dev16}/verifiers/v1/harnesses/kimi_code/__init__.py +0 -0
- {verifiers-0.2.2.dev15 → verifiers-0.2.2.dev16}/verifiers/v1/harnesses/kimi_code/harness.py +0 -0
- {verifiers-0.2.2.dev15 → verifiers-0.2.2.dev16}/verifiers/v1/harnesses/mini_swe_agent/__init__.py +0 -0
- {verifiers-0.2.2.dev15 → verifiers-0.2.2.dev16}/verifiers/v1/harnesses/mini_swe_agent/harness.py +0 -0
- {verifiers-0.2.2.dev15 → verifiers-0.2.2.dev16}/verifiers/v1/harnesses/mini_swe_agent/program.py +0 -0
- {verifiers-0.2.2.dev15 → verifiers-0.2.2.dev16}/verifiers/v1/harnesses/null/__init__.py +0 -0
- {verifiers-0.2.2.dev15 → verifiers-0.2.2.dev16}/verifiers/v1/harnesses/null/harness.py +0 -0
- {verifiers-0.2.2.dev15 → verifiers-0.2.2.dev16}/verifiers/v1/harnesses/null/program.py +0 -0
- {verifiers-0.2.2.dev15 → verifiers-0.2.2.dev16}/verifiers/v1/harnesses/pi/__init__.py +0 -0
- {verifiers-0.2.2.dev15 → verifiers-0.2.2.dev16}/verifiers/v1/harnesses/pi/harness.py +0 -0
- {verifiers-0.2.2.dev15 → verifiers-0.2.2.dev16}/verifiers/v1/harnesses/pool/__init__.py +0 -0
- {verifiers-0.2.2.dev15 → verifiers-0.2.2.dev16}/verifiers/v1/harnesses/pool/harness.py +0 -0
- {verifiers-0.2.2.dev15 → verifiers-0.2.2.dev16}/verifiers/v1/harnesses/rlm/__init__.py +0 -0
- {verifiers-0.2.2.dev15 → verifiers-0.2.2.dev16}/verifiers/v1/harnesses/rlm/harness.py +0 -0
- {verifiers-0.2.2.dev15 → verifiers-0.2.2.dev16}/verifiers/v1/harnesses/terminus_2/__init__.py +0 -0
- {verifiers-0.2.2.dev15 → verifiers-0.2.2.dev16}/verifiers/v1/harnesses/terminus_2/harness.py +0 -0
- {verifiers-0.2.2.dev15 → verifiers-0.2.2.dev16}/verifiers/v1/harnesses/terminus_2/program.py +0 -0
- {verifiers-0.2.2.dev15 → verifiers-0.2.2.dev16}/verifiers/v1/interception/base.py +0 -0
- {verifiers-0.2.2.dev15 → verifiers-0.2.2.dev16}/verifiers/v1/interception/pool.py +0 -0
- {verifiers-0.2.2.dev15 → verifiers-0.2.2.dev16}/verifiers/v1/interception/tunnel/__init__.py +0 -0
- {verifiers-0.2.2.dev15 → verifiers-0.2.2.dev16}/verifiers/v1/interception/tunnel/custom.py +0 -0
- {verifiers-0.2.2.dev15 → verifiers-0.2.2.dev16}/verifiers/v1/interception/tunnel/prime.py +0 -0
- {verifiers-0.2.2.dev15 → verifiers-0.2.2.dev16}/verifiers/v1/judge.py +0 -0
- {verifiers-0.2.2.dev15 → verifiers-0.2.2.dev16}/verifiers/v1/judges/__init__.py +0 -0
- {verifiers-0.2.2.dev15 → verifiers-0.2.2.dev16}/verifiers/v1/judges/reference.py +0 -0
- {verifiers-0.2.2.dev15 → verifiers-0.2.2.dev16}/verifiers/v1/judges/reference.txt +0 -0
- {verifiers-0.2.2.dev15 → verifiers-0.2.2.dev16}/verifiers/v1/judges/rubric.py +0 -0
- {verifiers-0.2.2.dev15 → verifiers-0.2.2.dev16}/verifiers/v1/judges/rubric.txt +0 -0
- {verifiers-0.2.2.dev15 → verifiers-0.2.2.dev16}/verifiers/v1/legacy.py +0 -0
- {verifiers-0.2.2.dev15 → verifiers-0.2.2.dev16}/verifiers/v1/loaders.py +0 -0
- {verifiers-0.2.2.dev15 → verifiers-0.2.2.dev16}/verifiers/v1/mcp/__init__.py +0 -0
- {verifiers-0.2.2.dev15 → verifiers-0.2.2.dev16}/verifiers/v1/mcp/server.py +0 -0
- {verifiers-0.2.2.dev15 → verifiers-0.2.2.dev16}/verifiers/v1/mcp/toolset.py +0 -0
- {verifiers-0.2.2.dev15 → verifiers-0.2.2.dev16}/verifiers/v1/mcp/user.py +0 -0
- {verifiers-0.2.2.dev15 → verifiers-0.2.2.dev16}/verifiers/v1/push.py +0 -0
- {verifiers-0.2.2.dev15 → verifiers-0.2.2.dev16}/verifiers/v1/retries.py +0 -0
- {verifiers-0.2.2.dev15 → verifiers-0.2.2.dev16}/verifiers/v1/runtimes/limiters.py +0 -0
- {verifiers-0.2.2.dev15 → verifiers-0.2.2.dev16}/verifiers/v1/runtimes/modal.py +0 -0
- {verifiers-0.2.2.dev15 → verifiers-0.2.2.dev16}/verifiers/v1/runtimes/prime.py +0 -0
- {verifiers-0.2.2.dev15 → verifiers-0.2.2.dev16}/verifiers/v1/runtimes/subprocess.py +0 -0
- {verifiers-0.2.2.dev15 → verifiers-0.2.2.dev16}/verifiers/v1/scoring.py +0 -0
- {verifiers-0.2.2.dev15 → verifiers-0.2.2.dev16}/verifiers/v1/serve/__init__.py +0 -0
- {verifiers-0.2.2.dev15 → verifiers-0.2.2.dev16}/verifiers/v1/serve/client.py +0 -0
- {verifiers-0.2.2.dev15 → verifiers-0.2.2.dev16}/verifiers/v1/serve/pool.py +0 -0
- {verifiers-0.2.2.dev15 → verifiers-0.2.2.dev16}/verifiers/v1/serve/server.py +0 -0
- {verifiers-0.2.2.dev15 → verifiers-0.2.2.dev16}/verifiers/v1/serve/types.py +0 -0
- {verifiers-0.2.2.dev15 → verifiers-0.2.2.dev16}/verifiers/v1/session.py +0 -0
- {verifiers-0.2.2.dev15 → verifiers-0.2.2.dev16}/verifiers/v1/state.py +0 -0
- {verifiers-0.2.2.dev15 → verifiers-0.2.2.dev16}/verifiers/v1/taskset.py +0 -0
- {verifiers-0.2.2.dev15 → verifiers-0.2.2.dev16}/verifiers/v1/tasksets/__init__.py +0 -0
- {verifiers-0.2.2.dev15 → verifiers-0.2.2.dev16}/verifiers/v1/tasksets/harbor/__init__.py +0 -0
- {verifiers-0.2.2.dev15 → verifiers-0.2.2.dev16}/verifiers/v1/tasksets/lean/__init__.py +0 -0
- {verifiers-0.2.2.dev15 → verifiers-0.2.2.dev16}/verifiers/v1/tasksets/lean/scoring.py +0 -0
- {verifiers-0.2.2.dev15 → verifiers-0.2.2.dev16}/verifiers/v1/tasksets/lean/taskset.py +0 -0
- {verifiers-0.2.2.dev15 → verifiers-0.2.2.dev16}/verifiers/v1/tasksets/openenv/__init__.py +0 -0
- {verifiers-0.2.2.dev15 → verifiers-0.2.2.dev16}/verifiers/v1/tasksets/openenv/taskset.py +0 -0
- {verifiers-0.2.2.dev15 → verifiers-0.2.2.dev16}/verifiers/v1/tasksets/textarena/__init__.py +0 -0
- {verifiers-0.2.2.dev15 → verifiers-0.2.2.dev16}/verifiers/v1/tasksets/textarena/taskset.py +0 -0
- {verifiers-0.2.2.dev15 → verifiers-0.2.2.dev16}/verifiers/v1/trace.py +0 -0
- {verifiers-0.2.2.dev15 → verifiers-0.2.2.dev16}/verifiers/v1/types.py +0 -0
- {verifiers-0.2.2.dev15 → verifiers-0.2.2.dev16}/verifiers/v1/utils/__init__.py +0 -0
- {verifiers-0.2.2.dev15 → verifiers-0.2.2.dev16}/verifiers/v1/utils/aio.py +0 -0
- {verifiers-0.2.2.dev15 → verifiers-0.2.2.dev16}/verifiers/v1/utils/format.py +0 -0
- {verifiers-0.2.2.dev15 → verifiers-0.2.2.dev16}/verifiers/v1/utils/generic.py +0 -0
- {verifiers-0.2.2.dev15 → verifiers-0.2.2.dev16}/verifiers/v1/utils/git.py +0 -0
- {verifiers-0.2.2.dev15 → verifiers-0.2.2.dev16}/verifiers/v1/utils/image.py +0 -0
- {verifiers-0.2.2.dev15 → verifiers-0.2.2.dev16}/verifiers/v1/utils/install.py +0 -0
- {verifiers-0.2.2.dev15 → verifiers-0.2.2.dev16}/verifiers/v1/utils/interrupt.py +0 -0
- {verifiers-0.2.2.dev15 → verifiers-0.2.2.dev16}/verifiers/v1/utils/logging.py +0 -0
- {verifiers-0.2.2.dev15 → verifiers-0.2.2.dev16}/verifiers/v1/utils/memory.py +0 -0
- {verifiers-0.2.2.dev15 → verifiers-0.2.2.dev16}/verifiers/v1/utils/sampling.py +0 -0
- {verifiers-0.2.2.dev15 → verifiers-0.2.2.dev16}/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.dev16
|
|
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
|
|
@@ -26,6 +26,7 @@ from verifiers.v1.mcp import SharedToolServer
|
|
|
26
26
|
from verifiers.v1.retries import RetryConfig, backoff, trace_should_retry
|
|
27
27
|
from verifiers.v1.rollout import RolloutRun
|
|
28
28
|
from verifiers.v1.runtimes import (
|
|
29
|
+
DockerConfig,
|
|
29
30
|
Runtime,
|
|
30
31
|
RuntimeConfig,
|
|
31
32
|
SubprocessConfig,
|
|
@@ -93,11 +94,37 @@ class AgentConfig(BaseConfig):
|
|
|
93
94
|
return data
|
|
94
95
|
|
|
95
96
|
|
|
96
|
-
def _check_borrowed_placement(
|
|
97
|
+
def _check_borrowed_placement(
|
|
98
|
+
task: Task, runtime: Runtime, base_config: RuntimeConfig
|
|
99
|
+
) -> None:
|
|
97
100
|
"""A borrowed box is never re-provisioned, so a task's placement fields can't
|
|
98
|
-
be honored.
|
|
99
|
-
|
|
100
|
-
|
|
101
|
+
be honored. Reject requirements that cannot be applied to the running box; an
|
|
102
|
+
image mismatch on a container only warns, since sharing its world is the point."""
|
|
103
|
+
task_policy = "*" not in task.data.network_allow or bool(task.data.network_block)
|
|
104
|
+
base_docker = base_config if isinstance(base_config, DockerConfig) else None
|
|
105
|
+
if task_policy or (base_docker is not None and base_docker.network_isolated):
|
|
106
|
+
config = runtime.config
|
|
107
|
+
if not isinstance(config, DockerConfig):
|
|
108
|
+
raise ValueError(
|
|
109
|
+
f"task {task.data.idx!r} requires a Docker URL network policy, but "
|
|
110
|
+
f"borrowed runtime {runtime.name!r} is not Docker-backed; use "
|
|
111
|
+
"agent.provision(task)"
|
|
112
|
+
)
|
|
113
|
+
policy_base = (
|
|
114
|
+
base_docker if base_docker is not None else DockerConfig(allow=["*"])
|
|
115
|
+
)
|
|
116
|
+
expected = resolve_runtime_config(policy_base, task)
|
|
117
|
+
assert isinstance(expected, DockerConfig)
|
|
118
|
+
# Do not inherit extra destinations from a box provisioned for another task.
|
|
119
|
+
if set(config.allow) != set(expected.allow) or set(config.block) != set(
|
|
120
|
+
expected.block
|
|
121
|
+
):
|
|
122
|
+
raise ValueError(
|
|
123
|
+
f"task {task.data.idx!r} requires allow={expected.allow!r} and "
|
|
124
|
+
f"block={expected.block!r}, but borrowed runtime {runtime.name!r} "
|
|
125
|
+
f"has allow={config.allow!r} and block={config.block!r}; use "
|
|
126
|
+
"agent.provision(task)"
|
|
127
|
+
)
|
|
101
128
|
if task.data.image is None:
|
|
102
129
|
return
|
|
103
130
|
if isinstance(runtime.config, SubprocessConfig):
|
|
@@ -299,7 +326,7 @@ class Agent:
|
|
|
299
326
|
) -> dict:
|
|
300
327
|
"""Resolve one run's runtime config, pairing checks, timeouts, interception."""
|
|
301
328
|
if runtime is not None:
|
|
302
|
-
_check_borrowed_placement(task, runtime)
|
|
329
|
+
_check_borrowed_placement(task, runtime, self.runtime_config)
|
|
303
330
|
runtime_config = runtime.config
|
|
304
331
|
run_is_local = runtime.is_local
|
|
305
332
|
else:
|
|
@@ -230,6 +230,7 @@ async def debug_task(task: Task, config: DebugConfig) -> tuple[Trace, bool]:
|
|
|
230
230
|
invoke(task.setup, {"trace": trace, "runtime": runtime}),
|
|
231
231
|
setup_timeout,
|
|
232
232
|
)
|
|
233
|
+
await runtime.prepare_execution([])
|
|
233
234
|
trace.timing.setup.end = time.time()
|
|
234
235
|
|
|
235
236
|
trace.timing.generation.start = time.time()
|
|
@@ -34,13 +34,10 @@ def requires_tunnel(
|
|
|
34
34
|
server_configs: Iterable[BaseConfig] = (),
|
|
35
35
|
shared: "Iterable[SharedToolServer]" = (),
|
|
36
36
|
) -> bool:
|
|
37
|
-
"""Whether
|
|
38
|
-
host
|
|
39
|
-
tool/user server
|
|
40
|
-
|
|
41
|
-
harness's runtime, covered by `harness_is_local`), a config-`url` server (external —
|
|
42
|
-
it connects out), and an `external` shared server (outside the state machinery
|
|
43
|
-
entirely). False means every consumer reaches the server at localhost."""
|
|
37
|
+
"""Whether interception needs a public tunnel because some consumer cannot use a
|
|
38
|
+
host-local URL: the harness itself, a live `shared` server in a remote runtime, or a
|
|
39
|
+
tool/user server placed there. Colocated servers, configured URLs, and external shared
|
|
40
|
+
servers add no consumer. False means local URL translation is sufficient."""
|
|
44
41
|
if not harness_is_local:
|
|
45
42
|
return True
|
|
46
43
|
if any(not s.external and not s.local for s in shared):
|
|
@@ -57,10 +54,8 @@ def make_interception(
|
|
|
57
54
|
config: InterceptionConfig, *, requires_tunnel: bool
|
|
58
55
|
) -> Interception:
|
|
59
56
|
"""The interception for a config, picked by type (the host-side counterpart to
|
|
60
|
-
`make_runtime`). With `requires_tunnel
|
|
61
|
-
|
|
62
|
-
it they get none and are reached at localhost. The caller computes it (see
|
|
63
|
-
`Env._requires_tunnel`)."""
|
|
57
|
+
`make_runtime`). With `requires_tunnel`, each server is exposed through its configured
|
|
58
|
+
tunnel; otherwise it remains on host loopback. The caller computes this requirement."""
|
|
64
59
|
if isinstance(config, InterceptionServerConfig):
|
|
65
60
|
return InterceptionServer(config, requires_tunnel)
|
|
66
61
|
if isinstance(config, StaticInterceptionPoolConfig):
|
|
@@ -121,11 +121,9 @@ class InterceptionServerConfig(BaseInterceptionConfig):
|
|
|
121
121
|
|
|
122
122
|
class InterceptionServer(Interception):
|
|
123
123
|
"""A server that proxies model calls for one or more rollouts — and is itself the
|
|
124
|
-
single-server `Interception` (the pools compose several of these).
|
|
125
|
-
|
|
126
|
-
|
|
127
|
-
sets `base_url` — the one URL every consumer reaches it at — to the tunnel's public
|
|
128
|
-
URL. Without, every consumer is on the host network: it binds loopback, tunnel-free."""
|
|
124
|
+
single-server `Interception` (the pools compose several of these). When a consumer
|
|
125
|
+
needs a public URL, it mints the configured tunnel and binds where that tunnel says;
|
|
126
|
+
otherwise it stays on host loopback."""
|
|
129
127
|
|
|
130
128
|
def __init__(
|
|
131
129
|
self,
|
|
@@ -203,9 +201,8 @@ class InterceptionServer(Interception):
|
|
|
203
201
|
self.runner = web.AppRunner(app)
|
|
204
202
|
await self.runner.setup()
|
|
205
203
|
self.stack.push_async_callback(self.runner.cleanup)
|
|
206
|
-
#
|
|
207
|
-
#
|
|
208
|
-
# `expose` publishes it.
|
|
204
|
+
# Without a tunnel, local URL translation reaches an ephemeral loopback port.
|
|
205
|
+
# Otherwise the tunnel determines the bind address and publishes it.
|
|
209
206
|
if self.tunnel is None:
|
|
210
207
|
self.host, bind_port = "127.0.0.1", 0
|
|
211
208
|
else:
|
|
@@ -1,12 +1,9 @@
|
|
|
1
1
|
"""The Tunnel contract: expose a host interception port to a remote consumer.
|
|
2
2
|
|
|
3
|
-
The interception server runs on the host.
|
|
4
|
-
|
|
5
|
-
|
|
6
|
-
|
|
7
|
-
nothing about locality — the caller (`InterceptionServer.start`) uses it only in the remote
|
|
8
|
-
case. The host-side counterpart to a `Runtime`: `Runtime.expose` publishes a port *inside* a
|
|
9
|
-
sandbox; `Tunnel.expose` a *host* port.
|
|
3
|
+
The interception server runs on the host. Local runtimes use a host-local URL directly or
|
|
4
|
+
through their runtime translation; remote runtimes need the port published outward. A
|
|
5
|
+
`Tunnel` supplies the bind address and exposes that host port as a public URL. It is the
|
|
6
|
+
host-side counterpart to `Runtime.expose`, which publishes a port inside a sandbox.
|
|
10
7
|
"""
|
|
11
8
|
|
|
12
9
|
import contextlib
|
|
@@ -23,6 +23,7 @@ from verifiers.v1.errors import RolloutError, ToolsetError, UserError
|
|
|
23
23
|
from verifiers.v1.interception.tunnel import PrimeTunnel
|
|
24
24
|
from verifiers.v1.mcp.server import STATE_SECRET_PARAM, STATE_URL_PARAM, ServerBase
|
|
25
25
|
from verifiers.v1.runtimes import (
|
|
26
|
+
DockerConfig,
|
|
26
27
|
Runtime,
|
|
27
28
|
make_runtime,
|
|
28
29
|
runtime_is_local,
|
|
@@ -238,18 +239,18 @@ async def reachable_url(
|
|
|
238
239
|
"""Yield the URL a consumer uses to reach the server at (`service`, `port`), over two
|
|
239
240
|
primitives: `Runtime.expose` (publish a port out of a sandbox) and a host `Tunnel` (reach
|
|
240
241
|
into the host from a remote runtime). `colocated` = the server shares the consumer's
|
|
241
|
-
runtime; `consumer_is_local` = the consumer
|
|
242
|
+
runtime; `consumer_is_local` = the consumer can use a host-local URL without a tunnel.
|
|
242
243
|
|
|
243
244
|
- `colocated` -> localhost (same runtime, in-sandbox or host loopback);
|
|
244
245
|
- the server runs in a remote sandbox -> its own published URL (`expose`), reachable anywhere;
|
|
245
|
-
- else it's
|
|
246
|
+
- else it's host-local -> localhost to a local consumer, a host tunnel to a remote one."""
|
|
246
247
|
if colocated:
|
|
247
248
|
yield f"http://127.0.0.1:{port}"
|
|
248
249
|
elif not service.is_local: # in a remote sandbox → it publishes its own port
|
|
249
250
|
yield await service.expose(port)
|
|
250
|
-
elif consumer_is_local: #
|
|
251
|
+
elif consumer_is_local: # local consumer → localhost, no public tunnel
|
|
251
252
|
yield f"http://127.0.0.1:{port}"
|
|
252
|
-
else: #
|
|
253
|
+
else: # remote consumer → a host tunnel publishes the port outward
|
|
253
254
|
async with PrimeTunnel().expose(port) as url:
|
|
254
255
|
yield url
|
|
255
256
|
|
|
@@ -265,8 +266,33 @@ async def serve(
|
|
|
265
266
|
state_base: str | None = None,
|
|
266
267
|
):
|
|
267
268
|
cfg = server.config
|
|
269
|
+
colocated = getattr(cfg, "colocated", False)
|
|
268
270
|
async with contextlib.AsyncExitStack() as stack:
|
|
269
|
-
|
|
271
|
+
# Colocated servers inherit the harness cut. A separately provisioned filtered
|
|
272
|
+
# Docker server has neither that lifecycle nor a published port after isolation;
|
|
273
|
+
# reject it instead of silently leaving its requested policy unenforced.
|
|
274
|
+
if (
|
|
275
|
+
isinstance(cfg.runtime, DockerConfig)
|
|
276
|
+
and cfg.runtime.network_isolated
|
|
277
|
+
and not (colocated and harness_runtime is not None)
|
|
278
|
+
):
|
|
279
|
+
raise ToolsetError(
|
|
280
|
+
"Docker network policies are supported on the harness runtime; "
|
|
281
|
+
f"server {server.server_name!r} must be colocated or use an "
|
|
282
|
+
"unrestricted Docker runtime"
|
|
283
|
+
)
|
|
284
|
+
if (
|
|
285
|
+
harness_runtime is not None
|
|
286
|
+
and harness_runtime.network_isolated
|
|
287
|
+
and colocated
|
|
288
|
+
and for_host
|
|
289
|
+
):
|
|
290
|
+
raise UserError(
|
|
291
|
+
"a colocated user simulator is unreachable from the host when "
|
|
292
|
+
"the harness uses a Docker network policy; use a local "
|
|
293
|
+
"(subprocess) user simulator"
|
|
294
|
+
)
|
|
295
|
+
if colocated and harness_runtime is not None:
|
|
270
296
|
runtime = harness_runtime
|
|
271
297
|
else:
|
|
272
298
|
runtime = make_runtime(cfg.runtime)
|
|
@@ -307,7 +333,9 @@ async def serve(
|
|
|
307
333
|
runtime, port, colocated=colocated, consumer_is_local=consumer_is_local
|
|
308
334
|
)
|
|
309
335
|
)
|
|
310
|
-
if
|
|
336
|
+
if colocated and harness_runtime is not None and runtime.network_isolated:
|
|
337
|
+
base = base.replace("127.0.0.1", "localhost", 1)
|
|
338
|
+
elif not colocated and not for_host and harness_runtime is not None:
|
|
311
339
|
base = harness_runtime.host_url(base)
|
|
312
340
|
yield f"{base.rstrip('/')}/mcp"
|
|
313
341
|
|
|
@@ -406,7 +434,7 @@ async def serve_tools(
|
|
|
406
434
|
# Not ours: a pre-existing endpoint with no vf state channel. Pass the URL
|
|
407
435
|
# through bare — a state tag would be useless, and the per-rollout secret
|
|
408
436
|
# must not ride the query string to a third-party host.
|
|
409
|
-
urls[name] = server.url
|
|
437
|
+
urls[name] = harness_runtime.host_url(server.url)
|
|
410
438
|
logger.info("tool server '%s' (shared, external): %s", name, server.url)
|
|
411
439
|
continue
|
|
412
440
|
url = harness_runtime.host_url(server.url) if server.local else server.url
|
|
@@ -422,7 +450,7 @@ async def serve_tools(
|
|
|
422
450
|
)
|
|
423
451
|
cfg = toolset.config
|
|
424
452
|
if cfg.url:
|
|
425
|
-
urls[name] = cfg.url
|
|
453
|
+
urls[name] = harness_runtime.host_url(cfg.url)
|
|
426
454
|
logger.info("tool server '%s' (remote): %s", name, cfg.url)
|
|
427
455
|
else:
|
|
428
456
|
urls[name] = await stack.enter_async_context(
|
|
@@ -191,6 +191,7 @@ class RolloutRun:
|
|
|
191
191
|
try:
|
|
192
192
|
if self._owns_runtime:
|
|
193
193
|
await runtime.start()
|
|
194
|
+
await runtime.prepare_setup()
|
|
194
195
|
now = time.time()
|
|
195
196
|
self.trace.timing.boot.end = now
|
|
196
197
|
self.trace.timing.setup.start = now
|
|
@@ -251,6 +252,9 @@ class RolloutRun:
|
|
|
251
252
|
"conversation; set task.prompt or declare a simulator "
|
|
252
253
|
"class on Task.user"
|
|
253
254
|
)
|
|
255
|
+
# Setup and service provisioning are complete. Apply the runtime's
|
|
256
|
+
# execution policy while preserving the framework routes the agent uses.
|
|
257
|
+
await runtime.prepare_execution([self._endpoint, *self._urls.values()])
|
|
254
258
|
except Exception as e:
|
|
255
259
|
self.fail(e)
|
|
256
260
|
return False
|
|
@@ -45,9 +45,8 @@ def make_runtime(config: RuntimeConfig, name: str | None = None) -> Runtime:
|
|
|
45
45
|
|
|
46
46
|
|
|
47
47
|
def runtime_is_local(config: RuntimeConfig) -> bool:
|
|
48
|
-
"""Whether a runtime of this config
|
|
49
|
-
|
|
50
|
-
The interception / tool serving use it to decide whether to tunnel their host port."""
|
|
48
|
+
"""Whether a runtime of this config exchanges host-local URLs without a public
|
|
49
|
+
tunnel, read off the runtime class without provisioning one."""
|
|
51
50
|
return _runtime_cls(config).is_local
|
|
52
51
|
|
|
53
52
|
|
|
@@ -103,10 +103,9 @@ class BaseRuntimeInfo(BaseConfig):
|
|
|
103
103
|
|
|
104
104
|
class Runtime(ABC):
|
|
105
105
|
is_local: ClassVar[bool] = True
|
|
106
|
-
"""Whether this runtime
|
|
107
|
-
|
|
108
|
-
|
|
109
|
-
need a tunnel each way: a host `Tunnel` (interception.tunnel) inward, `expose` outward)."""
|
|
106
|
+
"""Whether this runtime exchanges host-local URLs without a public tunnel. True for
|
|
107
|
+
subprocess and Docker (directly or through Docker's policy proxy); remote runtimes
|
|
108
|
+
override to False and use a host `Tunnel` inward plus `expose` outward."""
|
|
110
109
|
|
|
111
110
|
info: BaseRuntimeInfo
|
|
112
111
|
|
|
@@ -243,19 +242,30 @@ class Runtime(ABC):
|
|
|
243
242
|
"""The URL a program inside this runtime uses to reach a host-bound `url`."""
|
|
244
243
|
return url
|
|
245
244
|
|
|
245
|
+
async def prepare_setup(self) -> None:
|
|
246
|
+
"""Claim the runtime for trusted setup; restricted runtimes may reject reuse."""
|
|
247
|
+
|
|
248
|
+
async def prepare_execution(self, routes: list[str]) -> None:
|
|
249
|
+
"""Last setup step, right before the agent starts. Restricted runtimes enforce
|
|
250
|
+
their policy here while keeping the interception and MCP `routes` reachable."""
|
|
251
|
+
|
|
252
|
+
@property
|
|
253
|
+
def network_isolated(self) -> bool:
|
|
254
|
+
"""Whether the agent phase uses filtered networking (see `prepare_execution`)."""
|
|
255
|
+
return False
|
|
256
|
+
|
|
246
257
|
@property
|
|
247
258
|
def published_port(self) -> int | None:
|
|
248
259
|
"""A fixed port this runtime exposes to the outside at startup, declared up front to the
|
|
249
260
|
provider (Modal forwards only ports named at `Sandbox.create`). When set, a server placed
|
|
250
261
|
here binds it instead of a host-chosen free port, and `expose` returns its public URL.
|
|
251
|
-
`None` for
|
|
252
|
-
reached over the shared host network."""
|
|
262
|
+
`None` for local runtimes (subprocess/docker), which pick a free port."""
|
|
253
263
|
return None
|
|
254
264
|
|
|
255
265
|
async def expose(self, port: int) -> str | None:
|
|
256
266
|
"""Publish a port running *inside this runtime* to a URL reachable from the host/outside,
|
|
257
|
-
or None when local
|
|
258
|
-
|
|
259
|
-
`
|
|
260
|
-
|
|
267
|
+
or None when local. A remote runtime overrides this with the provider's native port
|
|
268
|
+
exposure (modal `tunnels()`, prime `client.expose`), torn down with the sandbox in
|
|
269
|
+
`stop()`. The reverse of a host `Tunnel` (interception.tunnel, which reaches a host
|
|
270
|
+
port from inside a runtime)."""
|
|
261
271
|
return None
|