verifiers 0.3.1.dev42__tar.gz → 0.3.1.dev52__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.3.1.dev42 → verifiers-0.3.1.dev52}/PKG-INFO +3 -3
- {verifiers-0.3.1.dev42 → verifiers-0.3.1.dev52}/pyproject.toml +1 -1
- {verifiers-0.3.1.dev42 → verifiers-0.3.1.dev52}/tests/v1/conftest.py +4 -5
- {verifiers-0.3.1.dev42 → verifiers-0.3.1.dev52}/tests/v1/test_judges.py +2 -2
- {verifiers-0.3.1.dev42 → verifiers-0.3.1.dev52}/verifiers/v1/agent.py +2 -0
- {verifiers-0.3.1.dev42 → verifiers-0.3.1.dev52}/verifiers/v1/cli/dashboard/eval.py +1 -2
- {verifiers-0.3.1.dev42 → verifiers-0.3.1.dev52}/verifiers/v1/cli/debug.py +1 -0
- {verifiers-0.3.1.dev42 → verifiers-0.3.1.dev52}/verifiers/v1/cli/validate.py +2 -0
- {verifiers-0.3.1.dev42 → verifiers-0.3.1.dev52}/verifiers/v1/configs/cli/eval.py +1 -2
- {verifiers-0.3.1.dev42 → verifiers-0.3.1.dev52}/verifiers/v1/configs/harness.py +2 -3
- {verifiers-0.3.1.dev42 → verifiers-0.3.1.dev52}/verifiers/v1/configs/judge.py +3 -4
- {verifiers-0.3.1.dev42 → verifiers-0.3.1.dev52}/verifiers/v1/configs/taskset.py +2 -3
- {verifiers-0.3.1.dev42 → verifiers-0.3.1.dev52}/verifiers/v1/dialects/anthropic.py +49 -13
- {verifiers-0.3.1.dev42 → verifiers-0.3.1.dev52}/verifiers/v1/dialects/base.py +84 -5
- {verifiers-0.3.1.dev42 → verifiers-0.3.1.dev52}/verifiers/v1/dialects/chat.py +4 -3
- {verifiers-0.3.1.dev42 → verifiers-0.3.1.dev52}/verifiers/v1/dialects/responses.py +51 -21
- {verifiers-0.3.1.dev42 → verifiers-0.3.1.dev52}/verifiers/v1/interception/server.py +3 -1
- {verifiers-0.3.1.dev42 → verifiers-0.3.1.dev52}/verifiers/v1/mcp/launch.py +7 -2
- {verifiers-0.3.1.dev42 → verifiers-0.3.1.dev52}/verifiers/v1/rollout.py +18 -0
- {verifiers-0.3.1.dev42 → verifiers-0.3.1.dev52}/verifiers/v1/runtimes/__init__.py +4 -1
- {verifiers-0.3.1.dev42 → verifiers-0.3.1.dev52}/verifiers/v1/runtimes/base.py +9 -0
- {verifiers-0.3.1.dev42 → verifiers-0.3.1.dev52}/verifiers/v1/runtimes/docker/__init__.py +9 -3
- {verifiers-0.3.1.dev42 → verifiers-0.3.1.dev52}/verifiers/v1/runtimes/modal.py +3 -2
- {verifiers-0.3.1.dev42 → verifiers-0.3.1.dev52}/verifiers/v1/runtimes/prime.py +4 -3
- {verifiers-0.3.1.dev42 → verifiers-0.3.1.dev52}/verifiers/v1/runtimes/subprocess.py +3 -3
- {verifiers-0.3.1.dev42 → verifiers-0.3.1.dev52}/verifiers/v1/task.py +4 -0
- {verifiers-0.3.1.dev42 → verifiers-0.3.1.dev52}/verifiers/v1/tasksets/harbor/env.py +4 -1
- {verifiers-0.3.1.dev42 → verifiers-0.3.1.dev52}/verifiers/v1/tasksets/harbor/taskset.py +72 -24
- {verifiers-0.3.1.dev42 → verifiers-0.3.1.dev52}/verifiers/v1/types.py +3 -11
- {verifiers-0.3.1.dev42 → verifiers-0.3.1.dev52}/verifiers/v1/utils/loaders.py +4 -17
- verifiers-0.3.1.dev42/verifiers/v1/utils/install.py +0 -39
- verifiers-0.3.1.dev42/verifiers/v1/utils/install_utils.py +0 -239
- {verifiers-0.3.1.dev42 → verifiers-0.3.1.dev52}/.gitignore +0 -0
- {verifiers-0.3.1.dev42 → verifiers-0.3.1.dev52}/LICENSE +0 -0
- {verifiers-0.3.1.dev42 → verifiers-0.3.1.dev52}/README.md +0 -0
- {verifiers-0.3.1.dev42 → verifiers-0.3.1.dev52}/tests/__init__.py +0 -0
- {verifiers-0.3.1.dev42 → verifiers-0.3.1.dev52}/tests/conftest.py +0 -0
- {verifiers-0.3.1.dev42 → verifiers-0.3.1.dev52}/tests/test_browser_env.py +0 -0
- {verifiers-0.3.1.dev42 → verifiers-0.3.1.dev52}/tests/test_build_script.py +0 -0
- {verifiers-0.3.1.dev42 → verifiers-0.3.1.dev52}/tests/test_cli_agent_env.py +0 -0
- {verifiers-0.3.1.dev42 → verifiers-0.3.1.dev52}/tests/test_client_auth_errors.py +0 -0
- {verifiers-0.3.1.dev42 → verifiers-0.3.1.dev52}/tests/test_client_config.py +0 -0
- {verifiers-0.3.1.dev42 → verifiers-0.3.1.dev52}/tests/test_client_multimodal_types.py +0 -0
- {verifiers-0.3.1.dev42 → verifiers-0.3.1.dev52}/tests/test_composable_env.py +0 -0
- {verifiers-0.3.1.dev42 → verifiers-0.3.1.dev52}/tests/test_context_token_metrics.py +0 -0
- {verifiers-0.3.1.dev42 → verifiers-0.3.1.dev52}/tests/test_decorator_ranks.py +0 -0
- {verifiers-0.3.1.dev42 → verifiers-0.3.1.dev52}/tests/test_endpoint_registry.py +0 -0
- {verifiers-0.3.1.dev42 → verifiers-0.3.1.dev52}/tests/test_env_group.py +0 -0
- {verifiers-0.3.1.dev42 → verifiers-0.3.1.dev52}/tests/test_env_server.py +0 -0
- {verifiers-0.3.1.dev42 → verifiers-0.3.1.dev52}/tests/test_environment.py +0 -0
- {verifiers-0.3.1.dev42 → verifiers-0.3.1.dev52}/tests/test_environment_extra.py +0 -0
- {verifiers-0.3.1.dev42 → verifiers-0.3.1.dev52}/tests/test_error_chain.py +0 -0
- {verifiers-0.3.1.dev42 → verifiers-0.3.1.dev52}/tests/test_eval_display.py +0 -0
- {verifiers-0.3.1.dev42 → verifiers-0.3.1.dev52}/tests/test_eval_utils.py +0 -0
- {verifiers-0.3.1.dev42 → verifiers-0.3.1.dev52}/tests/test_gepa_cli.py +0 -0
- {verifiers-0.3.1.dev42 → verifiers-0.3.1.dev52}/tests/test_gepa_utils.py +0 -0
- {verifiers-0.3.1.dev42 → verifiers-0.3.1.dev52}/tests/test_gym_env.py +0 -0
- {verifiers-0.3.1.dev42 → verifiers-0.3.1.dev52}/tests/test_harbor_env_mcp.py +0 -0
- {verifiers-0.3.1.dev42 → verifiers-0.3.1.dev52}/tests/test_imports.py +0 -0
- {verifiers-0.3.1.dev42 → verifiers-0.3.1.dev52}/tests/test_init_script.py +0 -0
- {verifiers-0.3.1.dev42 → verifiers-0.3.1.dev52}/tests/test_install_utils.py +0 -0
- {verifiers-0.3.1.dev42 → verifiers-0.3.1.dev52}/tests/test_interception_utils.py +0 -0
- {verifiers-0.3.1.dev42 → verifiers-0.3.1.dev52}/tests/test_logging.py +0 -0
- {verifiers-0.3.1.dev42 → verifiers-0.3.1.dev52}/tests/test_math_rubric.py +0 -0
- {verifiers-0.3.1.dev42 → verifiers-0.3.1.dev52}/tests/test_maybe_think_parser.py +0 -0
- {verifiers-0.3.1.dev42 → verifiers-0.3.1.dev52}/tests/test_message_utils.py +0 -0
- {verifiers-0.3.1.dev42 → verifiers-0.3.1.dev52}/tests/test_message_utils_multimodal.py +0 -0
- {verifiers-0.3.1.dev42 → verifiers-0.3.1.dev52}/tests/test_multiturn_env.py +0 -0
- {verifiers-0.3.1.dev42 → verifiers-0.3.1.dev52}/tests/test_nemorl_client.py +0 -0
- {verifiers-0.3.1.dev42 → verifiers-0.3.1.dev52}/tests/test_openai_chat_completions_token_client.py +0 -0
- {verifiers-0.3.1.dev42 → verifiers-0.3.1.dev52}/tests/test_openai_responses_client.py +0 -0
- {verifiers-0.3.1.dev42 → verifiers-0.3.1.dev52}/tests/test_opencode_rlm_env.py +0 -0
- {verifiers-0.3.1.dev42 → verifiers-0.3.1.dev52}/tests/test_openenv_client.py +0 -0
- {verifiers-0.3.1.dev42 → verifiers-0.3.1.dev52}/tests/test_parser.py +0 -0
- {verifiers-0.3.1.dev42 → verifiers-0.3.1.dev52}/tests/test_path_utils.py +0 -0
- {verifiers-0.3.1.dev42 → verifiers-0.3.1.dev52}/tests/test_per_turn_timing.py +0 -0
- {verifiers-0.3.1.dev42 → verifiers-0.3.1.dev52}/tests/test_pricing_utils.py +0 -0
- {verifiers-0.3.1.dev42 → verifiers-0.3.1.dev52}/tests/test_prime_plugin.py +0 -0
- {verifiers-0.3.1.dev42 → verifiers-0.3.1.dev52}/tests/test_renderer_client.py +0 -0
- {verifiers-0.3.1.dev42 → verifiers-0.3.1.dev52}/tests/test_renderer_e2e.py +0 -0
- {verifiers-0.3.1.dev42 → verifiers-0.3.1.dev52}/tests/test_rlm_composable_env.py +0 -0
- {verifiers-0.3.1.dev42 → verifiers-0.3.1.dev52}/tests/test_rubric.py +0 -0
- {verifiers-0.3.1.dev42 → verifiers-0.3.1.dev52}/tests/test_rubric_group.py +0 -0
- {verifiers-0.3.1.dev42 → verifiers-0.3.1.dev52}/tests/test_sandbox_debug_env.py +0 -0
- {verifiers-0.3.1.dev42 → verifiers-0.3.1.dev52}/tests/test_sandbox_env.py +0 -0
- {verifiers-0.3.1.dev42 → verifiers-0.3.1.dev52}/tests/test_sandbox_mixin.py +0 -0
- {verifiers-0.3.1.dev42 → verifiers-0.3.1.dev52}/tests/test_save_utils.py +0 -0
- {verifiers-0.3.1.dev42 → verifiers-0.3.1.dev52}/tests/test_setup_script.py +0 -0
- {verifiers-0.3.1.dev42 → verifiers-0.3.1.dev52}/tests/test_singleturn_env.py +0 -0
- {verifiers-0.3.1.dev42 → verifiers-0.3.1.dev52}/tests/test_stateful_tool_env.py +0 -0
- {verifiers-0.3.1.dev42 → verifiers-0.3.1.dev52}/tests/test_think_parser.py +0 -0
- {verifiers-0.3.1.dev42 → verifiers-0.3.1.dev52}/tests/test_tool_env.py +0 -0
- {verifiers-0.3.1.dev42 → verifiers-0.3.1.dev52}/tests/test_tool_utils.py +0 -0
- {verifiers-0.3.1.dev42 → verifiers-0.3.1.dev52}/tests/test_trajectory_processing.py +0 -0
- {verifiers-0.3.1.dev42 → verifiers-0.3.1.dev52}/tests/test_tui_info_formatting.py +0 -0
- {verifiers-0.3.1.dev42 → verifiers-0.3.1.dev52}/tests/test_types.py +0 -0
- {verifiers-0.3.1.dev42 → verifiers-0.3.1.dev52}/tests/test_xml_parser.py +0 -0
- {verifiers-0.3.1.dev42 → verifiers-0.3.1.dev52}/tests/v1/fixtures/counter_tool_v1.py +0 -0
- {verifiers-0.3.1.dev42 → verifiers-0.3.1.dev52}/tests/v1/fixtures/duet_v1.py +0 -0
- {verifiers-0.3.1.dev42 → verifiers-0.3.1.dev52}/tests/v1/fixtures/echo_acp_resume_v1.py +0 -0
- {verifiers-0.3.1.dev42 → verifiers-0.3.1.dev52}/tests/v1/fixtures/echo_agentic_v1.py +0 -0
- {verifiers-0.3.1.dev42 → verifiers-0.3.1.dev52}/tests/v1/fixtures/echo_tool_v1.py +0 -0
- {verifiers-0.3.1.dev42 → verifiers-0.3.1.dev52}/tests/v1/fixtures/echo_user_sim_v1.py +0 -0
- {verifiers-0.3.1.dev42 → verifiers-0.3.1.dev52}/tests/v1/fixtures/echo_v1.py +0 -0
- {verifiers-0.3.1.dev42 → verifiers-0.3.1.dev52}/tests/v1/fixtures/pyproject.toml +0 -0
- {verifiers-0.3.1.dev42 → verifiers-0.3.1.dev52}/tests/v1/fixtures/tool_response_image_v1.py +0 -0
- {verifiers-0.3.1.dev42 → verifiers-0.3.1.dev52}/tests/v1/test_color_codeword_tasks.py +0 -0
- {verifiers-0.3.1.dev42 → verifiers-0.3.1.dev52}/tests/v1/test_configs.py +0 -0
- {verifiers-0.3.1.dev42 → verifiers-0.3.1.dev52}/tests/v1/test_e2e.py +0 -0
- {verifiers-0.3.1.dev42 → verifiers-0.3.1.dev52}/tests/v1/test_envs.py +0 -0
- {verifiers-0.3.1.dev42 → verifiers-0.3.1.dev52}/tests/v1/test_graph.py +0 -0
- {verifiers-0.3.1.dev42 → verifiers-0.3.1.dev52}/tests/v1/test_scoring.py +0 -0
- {verifiers-0.3.1.dev42 → verifiers-0.3.1.dev52}/tests/v1/test_taskset.py +0 -0
- {verifiers-0.3.1.dev42 → verifiers-0.3.1.dev52}/tests/v1/test_trace.py +0 -0
- {verifiers-0.3.1.dev42 → verifiers-0.3.1.dev52}/verifiers/__init__.py +0 -0
- {verifiers-0.3.1.dev42 → verifiers-0.3.1.dev52}/verifiers/cli/__init__.py +0 -0
- {verifiers-0.3.1.dev42 → verifiers-0.3.1.dev52}/verifiers/cli/commands/__init__.py +0 -0
- {verifiers-0.3.1.dev42 → verifiers-0.3.1.dev52}/verifiers/cli/commands/build.py +0 -0
- {verifiers-0.3.1.dev42 → verifiers-0.3.1.dev52}/verifiers/cli/commands/eval.py +0 -0
- {verifiers-0.3.1.dev42 → verifiers-0.3.1.dev52}/verifiers/cli/commands/gepa.py +0 -0
- {verifiers-0.3.1.dev42 → verifiers-0.3.1.dev52}/verifiers/cli/commands/init.py +0 -0
- {verifiers-0.3.1.dev42 → verifiers-0.3.1.dev52}/verifiers/cli/commands/install.py +0 -0
- {verifiers-0.3.1.dev42 → verifiers-0.3.1.dev52}/verifiers/cli/commands/setup.py +0 -0
- {verifiers-0.3.1.dev42 → verifiers-0.3.1.dev52}/verifiers/cli/plugins/__init__.py +0 -0
- {verifiers-0.3.1.dev42 → verifiers-0.3.1.dev52}/verifiers/cli/plugins/prime.py +0 -0
- {verifiers-0.3.1.dev42 → verifiers-0.3.1.dev52}/verifiers/cli/tui.py +0 -0
- {verifiers-0.3.1.dev42 → verifiers-0.3.1.dev52}/verifiers/legacy/__init__.py +0 -0
- {verifiers-0.3.1.dev42 → verifiers-0.3.1.dev52}/verifiers/legacy/clients/__init__.py +0 -0
- {verifiers-0.3.1.dev42 → verifiers-0.3.1.dev52}/verifiers/legacy/clients/anthropic_messages_client.py +0 -0
- {verifiers-0.3.1.dev42 → verifiers-0.3.1.dev52}/verifiers/legacy/clients/client.py +0 -0
- {verifiers-0.3.1.dev42 → verifiers-0.3.1.dev52}/verifiers/legacy/clients/nemorl_chat_completions_client.py +0 -0
- {verifiers-0.3.1.dev42 → verifiers-0.3.1.dev52}/verifiers/legacy/clients/openai_chat_completions_client.py +0 -0
- {verifiers-0.3.1.dev42 → verifiers-0.3.1.dev52}/verifiers/legacy/clients/openai_chat_completions_token_client.py +0 -0
- {verifiers-0.3.1.dev42 → verifiers-0.3.1.dev52}/verifiers/legacy/clients/openai_completions_client.py +0 -0
- {verifiers-0.3.1.dev42 → verifiers-0.3.1.dev52}/verifiers/legacy/clients/openai_responses_client.py +0 -0
- {verifiers-0.3.1.dev42 → verifiers-0.3.1.dev52}/verifiers/legacy/clients/renderer_client.py +0 -0
- {verifiers-0.3.1.dev42 → verifiers-0.3.1.dev52}/verifiers/legacy/decorators.py +0 -0
- {verifiers-0.3.1.dev42 → verifiers-0.3.1.dev52}/verifiers/legacy/envs/__init__.py +0 -0
- {verifiers-0.3.1.dev42 → verifiers-0.3.1.dev52}/verifiers/legacy/envs/env_group.py +0 -0
- {verifiers-0.3.1.dev42 → verifiers-0.3.1.dev52}/verifiers/legacy/envs/environment.py +0 -0
- {verifiers-0.3.1.dev42 → verifiers-0.3.1.dev52}/verifiers/legacy/envs/experimental/README.md +0 -0
- {verifiers-0.3.1.dev42 → verifiers-0.3.1.dev52}/verifiers/legacy/envs/experimental/__init__.py +0 -0
- {verifiers-0.3.1.dev42 → verifiers-0.3.1.dev52}/verifiers/legacy/envs/experimental/cli_agent_env.py +0 -0
- {verifiers-0.3.1.dev42 → verifiers-0.3.1.dev52}/verifiers/legacy/envs/experimental/composable/README.md +0 -0
- {verifiers-0.3.1.dev42 → verifiers-0.3.1.dev52}/verifiers/legacy/envs/experimental/composable/__init__.py +0 -0
- {verifiers-0.3.1.dev42 → verifiers-0.3.1.dev52}/verifiers/legacy/envs/experimental/composable/_filter.py +0 -0
- {verifiers-0.3.1.dev42 → verifiers-0.3.1.dev52}/verifiers/legacy/envs/experimental/composable/composable_env.py +0 -0
- {verifiers-0.3.1.dev42 → verifiers-0.3.1.dev52}/verifiers/legacy/envs/experimental/composable/harness.py +0 -0
- {verifiers-0.3.1.dev42 → verifiers-0.3.1.dev52}/verifiers/legacy/envs/experimental/composable/harnesses/__init__.py +0 -0
- {verifiers-0.3.1.dev42 → verifiers-0.3.1.dev52}/verifiers/legacy/envs/experimental/composable/harnesses/mini_swe_agent.py +0 -0
- {verifiers-0.3.1.dev42 → verifiers-0.3.1.dev52}/verifiers/legacy/envs/experimental/composable/harnesses/opencode.py +0 -0
- {verifiers-0.3.1.dev42 → verifiers-0.3.1.dev52}/verifiers/legacy/envs/experimental/composable/harnesses/prompt.txt +0 -0
- {verifiers-0.3.1.dev42 → verifiers-0.3.1.dev52}/verifiers/legacy/envs/experimental/composable/harnesses/rlm.py +0 -0
- {verifiers-0.3.1.dev42 → verifiers-0.3.1.dev52}/verifiers/legacy/envs/experimental/composable/sandbox_debug_env.py +0 -0
- {verifiers-0.3.1.dev42 → verifiers-0.3.1.dev52}/verifiers/legacy/envs/experimental/composable/swe_debug_env.py +0 -0
- {verifiers-0.3.1.dev42 → verifiers-0.3.1.dev52}/verifiers/legacy/envs/experimental/composable/task.py +0 -0
- {verifiers-0.3.1.dev42 → verifiers-0.3.1.dev52}/verifiers/legacy/envs/experimental/composable/tasksets/__init__.py +0 -0
- {verifiers-0.3.1.dev42 → verifiers-0.3.1.dev52}/verifiers/legacy/envs/experimental/composable/tasksets/cp/__init__.py +0 -0
- {verifiers-0.3.1.dev42 → verifiers-0.3.1.dev52}/verifiers/legacy/envs/experimental/composable/tasksets/cp/cp_task.py +0 -0
- {verifiers-0.3.1.dev42 → verifiers-0.3.1.dev52}/verifiers/legacy/envs/experimental/composable/tasksets/cp/test_utils.py +0 -0
- {verifiers-0.3.1.dev42 → verifiers-0.3.1.dev52}/verifiers/legacy/envs/experimental/composable/tasksets/harbor/__init__.py +0 -0
- {verifiers-0.3.1.dev42 → verifiers-0.3.1.dev52}/verifiers/legacy/envs/experimental/composable/tasksets/harbor/cli_gym.py +0 -0
- {verifiers-0.3.1.dev42 → verifiers-0.3.1.dev52}/verifiers/legacy/envs/experimental/composable/tasksets/harbor/harbor.py +0 -0
- {verifiers-0.3.1.dev42 → verifiers-0.3.1.dev52}/verifiers/legacy/envs/experimental/composable/tasksets/harbor/terminal_lego.py +0 -0
- {verifiers-0.3.1.dev42 → verifiers-0.3.1.dev52}/verifiers/legacy/envs/experimental/composable/tasksets/math/__init__.py +0 -0
- {verifiers-0.3.1.dev42 → verifiers-0.3.1.dev52}/verifiers/legacy/envs/experimental/composable/tasksets/math/math_task.py +0 -0
- {verifiers-0.3.1.dev42 → verifiers-0.3.1.dev52}/verifiers/legacy/envs/experimental/composable/tasksets/swe/README.md +0 -0
- {verifiers-0.3.1.dev42 → verifiers-0.3.1.dev52}/verifiers/legacy/envs/experimental/composable/tasksets/swe/__init__.py +0 -0
- {verifiers-0.3.1.dev42 → verifiers-0.3.1.dev52}/verifiers/legacy/envs/experimental/composable/tasksets/swe/multi_swe/__init__.py +0 -0
- {verifiers-0.3.1.dev42 → verifiers-0.3.1.dev52}/verifiers/legacy/envs/experimental/composable/tasksets/swe/multi_swe/extract_fix_patch.sh +0 -0
- {verifiers-0.3.1.dev42 → verifiers-0.3.1.dev52}/verifiers/legacy/envs/experimental/composable/tasksets/swe/multi_swe/taskset.py +0 -0
- {verifiers-0.3.1.dev42 → verifiers-0.3.1.dev52}/verifiers/legacy/envs/experimental/composable/tasksets/swe/openswe/__init__.py +0 -0
- {verifiers-0.3.1.dev42 → verifiers-0.3.1.dev52}/verifiers/legacy/envs/experimental/composable/tasksets/swe/openswe/taskset.py +0 -0
- {verifiers-0.3.1.dev42 → verifiers-0.3.1.dev52}/verifiers/legacy/envs/experimental/composable/tasksets/swe/r2e_gym/__init__.py +0 -0
- {verifiers-0.3.1.dev42 → verifiers-0.3.1.dev52}/verifiers/legacy/envs/experimental/composable/tasksets/swe/r2e_gym/log_parser.py +0 -0
- {verifiers-0.3.1.dev42 → verifiers-0.3.1.dev52}/verifiers/legacy/envs/experimental/composable/tasksets/swe/r2e_gym/taskset.py +0 -0
- {verifiers-0.3.1.dev42 → verifiers-0.3.1.dev52}/verifiers/legacy/envs/experimental/composable/tasksets/swe/scale_swe/__init__.py +0 -0
- {verifiers-0.3.1.dev42 → verifiers-0.3.1.dev52}/verifiers/legacy/envs/experimental/composable/tasksets/swe/scale_swe/taskset.py +0 -0
- {verifiers-0.3.1.dev42 → verifiers-0.3.1.dev52}/verifiers/legacy/envs/experimental/composable/tasksets/swe/shared/__init__.py +0 -0
- {verifiers-0.3.1.dev42 → verifiers-0.3.1.dev52}/verifiers/legacy/envs/experimental/composable/tasksets/swe/shared/test_patch.py +0 -0
- {verifiers-0.3.1.dev42 → verifiers-0.3.1.dev52}/verifiers/legacy/envs/experimental/composable/tasksets/swe/swe_bench/__init__.py +0 -0
- {verifiers-0.3.1.dev42 → verifiers-0.3.1.dev52}/verifiers/legacy/envs/experimental/composable/tasksets/swe/swe_bench/taskset.py +0 -0
- {verifiers-0.3.1.dev42 → verifiers-0.3.1.dev52}/verifiers/legacy/envs/experimental/composable/tasksets/swe/swe_lego/__init__.py +0 -0
- {verifiers-0.3.1.dev42 → verifiers-0.3.1.dev52}/verifiers/legacy/envs/experimental/composable/tasksets/swe/swe_lego/taskset.py +0 -0
- {verifiers-0.3.1.dev42 → verifiers-0.3.1.dev52}/verifiers/legacy/envs/experimental/composable/tasksets/swe/swe_rebench_v2/__init__.py +0 -0
- {verifiers-0.3.1.dev42 → verifiers-0.3.1.dev52}/verifiers/legacy/envs/experimental/composable/tasksets/swe/swe_rebench_v2/log_parsers.py +0 -0
- {verifiers-0.3.1.dev42 → verifiers-0.3.1.dev52}/verifiers/legacy/envs/experimental/composable/tasksets/swe/swe_rebench_v2/taskset.py +0 -0
- {verifiers-0.3.1.dev42 → verifiers-0.3.1.dev52}/verifiers/legacy/envs/experimental/composable/tasksets/swe/swe_smith/__init__.py +0 -0
- {verifiers-0.3.1.dev42 → verifiers-0.3.1.dev52}/verifiers/legacy/envs/experimental/composable/tasksets/swe/swe_smith/taskset.py +0 -0
- {verifiers-0.3.1.dev42 → verifiers-0.3.1.dev52}/verifiers/legacy/envs/experimental/composable/tasksets/swe/swe_tasksets.py +0 -0
- {verifiers-0.3.1.dev42 → verifiers-0.3.1.dev52}/verifiers/legacy/envs/experimental/gym_env.py +0 -0
- {verifiers-0.3.1.dev42 → verifiers-0.3.1.dev52}/verifiers/legacy/envs/experimental/harbor_env/__init__.py +0 -0
- {verifiers-0.3.1.dev42 → verifiers-0.3.1.dev52}/verifiers/legacy/envs/experimental/harbor_env/env.py +0 -0
- {verifiers-0.3.1.dev42 → verifiers-0.3.1.dev52}/verifiers/legacy/envs/experimental/harbor_env/mcp.py +0 -0
- {verifiers-0.3.1.dev42 → verifiers-0.3.1.dev52}/verifiers/legacy/envs/experimental/mcp_env.py +0 -0
- {verifiers-0.3.1.dev42 → verifiers-0.3.1.dev52}/verifiers/legacy/envs/experimental/opencode_env.py +0 -0
- {verifiers-0.3.1.dev42 → verifiers-0.3.1.dev52}/verifiers/legacy/envs/experimental/opencode_qa_env.py +0 -0
- {verifiers-0.3.1.dev42 → verifiers-0.3.1.dev52}/verifiers/legacy/envs/experimental/opencode_rlm_env.py +0 -0
- {verifiers-0.3.1.dev42 → verifiers-0.3.1.dev52}/verifiers/legacy/envs/experimental/sandbox_mixin.py +0 -0
- {verifiers-0.3.1.dev42 → verifiers-0.3.1.dev52}/verifiers/legacy/envs/experimental/utils/__init__.py +0 -0
- {verifiers-0.3.1.dev42 → verifiers-0.3.1.dev52}/verifiers/legacy/envs/experimental/utils/file_locks.py +0 -0
- {verifiers-0.3.1.dev42 → verifiers-0.3.1.dev52}/verifiers/legacy/envs/experimental/utils/git_checkout_cache.py +0 -0
- {verifiers-0.3.1.dev42 → verifiers-0.3.1.dev52}/verifiers/legacy/envs/integrations/README.md +0 -0
- {verifiers-0.3.1.dev42 → verifiers-0.3.1.dev52}/verifiers/legacy/envs/integrations/__init__.py +0 -0
- {verifiers-0.3.1.dev42 → verifiers-0.3.1.dev52}/verifiers/legacy/envs/integrations/browser_env/README.md +0 -0
- {verifiers-0.3.1.dev42 → verifiers-0.3.1.dev52}/verifiers/legacy/envs/integrations/browser_env/__init__.py +0 -0
- {verifiers-0.3.1.dev42 → verifiers-0.3.1.dev52}/verifiers/legacy/envs/integrations/browser_env/browser_env.py +0 -0
- {verifiers-0.3.1.dev42 → verifiers-0.3.1.dev52}/verifiers/legacy/envs/integrations/browser_env/modes/__init__.py +0 -0
- {verifiers-0.3.1.dev42 → verifiers-0.3.1.dev52}/verifiers/legacy/envs/integrations/browser_env/modes/base.py +0 -0
- {verifiers-0.3.1.dev42 → verifiers-0.3.1.dev52}/verifiers/legacy/envs/integrations/browser_env/modes/cua_mode.py +0 -0
- {verifiers-0.3.1.dev42 → verifiers-0.3.1.dev52}/verifiers/legacy/envs/integrations/browser_env/modes/dom_mode.py +0 -0
- {verifiers-0.3.1.dev42 → verifiers-0.3.1.dev52}/verifiers/legacy/envs/integrations/openenv_env.py +0 -0
- {verifiers-0.3.1.dev42 → verifiers-0.3.1.dev52}/verifiers/legacy/envs/integrations/reasoninggym_env.py +0 -0
- {verifiers-0.3.1.dev42 → verifiers-0.3.1.dev52}/verifiers/legacy/envs/integrations/textarena_env.py +0 -0
- {verifiers-0.3.1.dev42 → verifiers-0.3.1.dev52}/verifiers/legacy/envs/multiturn_env.py +0 -0
- {verifiers-0.3.1.dev42 → verifiers-0.3.1.dev52}/verifiers/legacy/envs/python_env.py +0 -0
- {verifiers-0.3.1.dev42 → verifiers-0.3.1.dev52}/verifiers/legacy/envs/sandbox_env.py +0 -0
- {verifiers-0.3.1.dev42 → verifiers-0.3.1.dev52}/verifiers/legacy/envs/singleturn_env.py +0 -0
- {verifiers-0.3.1.dev42 → verifiers-0.3.1.dev52}/verifiers/legacy/envs/stateful_tool_env.py +0 -0
- {verifiers-0.3.1.dev42 → verifiers-0.3.1.dev52}/verifiers/legacy/envs/tool_env.py +0 -0
- {verifiers-0.3.1.dev42 → verifiers-0.3.1.dev52}/verifiers/legacy/errors.py +0 -0
- {verifiers-0.3.1.dev42 → verifiers-0.3.1.dev52}/verifiers/legacy/gepa/__init__.py +0 -0
- {verifiers-0.3.1.dev42 → verifiers-0.3.1.dev52}/verifiers/legacy/gepa/adapter.py +0 -0
- {verifiers-0.3.1.dev42 → verifiers-0.3.1.dev52}/verifiers/legacy/gepa/config.py +0 -0
- {verifiers-0.3.1.dev42 → verifiers-0.3.1.dev52}/verifiers/legacy/gepa/display.py +0 -0
- {verifiers-0.3.1.dev42 → verifiers-0.3.1.dev52}/verifiers/legacy/gepa/gepa_utils.py +0 -0
- {verifiers-0.3.1.dev42 → verifiers-0.3.1.dev52}/verifiers/legacy/parsers/__init__.py +0 -0
- {verifiers-0.3.1.dev42 → verifiers-0.3.1.dev52}/verifiers/legacy/parsers/maybe_think_parser.py +0 -0
- {verifiers-0.3.1.dev42 → verifiers-0.3.1.dev52}/verifiers/legacy/parsers/parser.py +0 -0
- {verifiers-0.3.1.dev42 → verifiers-0.3.1.dev52}/verifiers/legacy/parsers/think_parser.py +0 -0
- {verifiers-0.3.1.dev42 → verifiers-0.3.1.dev52}/verifiers/legacy/parsers/xml_parser.py +0 -0
- {verifiers-0.3.1.dev42 → verifiers-0.3.1.dev52}/verifiers/legacy/rubrics/__init__.py +0 -0
- {verifiers-0.3.1.dev42 → verifiers-0.3.1.dev52}/verifiers/legacy/rubrics/experimental/hybrid_math_rubric.py +0 -0
- {verifiers-0.3.1.dev42 → verifiers-0.3.1.dev52}/verifiers/legacy/rubrics/judge_rubric.py +0 -0
- {verifiers-0.3.1.dev42 → verifiers-0.3.1.dev52}/verifiers/legacy/rubrics/math_rubric.py +0 -0
- {verifiers-0.3.1.dev42 → verifiers-0.3.1.dev52}/verifiers/legacy/rubrics/rubric.py +0 -0
- {verifiers-0.3.1.dev42 → verifiers-0.3.1.dev52}/verifiers/legacy/rubrics/rubric_group.py +0 -0
- {verifiers-0.3.1.dev42 → verifiers-0.3.1.dev52}/verifiers/legacy/scripts/__init__.py +0 -0
- {verifiers-0.3.1.dev42 → verifiers-0.3.1.dev52}/verifiers/legacy/scripts/build.py +0 -0
- {verifiers-0.3.1.dev42 → verifiers-0.3.1.dev52}/verifiers/legacy/scripts/eval.py +0 -0
- {verifiers-0.3.1.dev42 → verifiers-0.3.1.dev52}/verifiers/legacy/scripts/gepa.py +0 -0
- {verifiers-0.3.1.dev42 → verifiers-0.3.1.dev52}/verifiers/legacy/scripts/init.py +0 -0
- {verifiers-0.3.1.dev42 → verifiers-0.3.1.dev52}/verifiers/legacy/scripts/install.py +0 -0
- {verifiers-0.3.1.dev42 → verifiers-0.3.1.dev52}/verifiers/legacy/scripts/setup.py +0 -0
- {verifiers-0.3.1.dev42 → verifiers-0.3.1.dev52}/verifiers/legacy/scripts/tui.py +0 -0
- {verifiers-0.3.1.dev42 → verifiers-0.3.1.dev52}/verifiers/legacy/serve/__init__.py +0 -0
- {verifiers-0.3.1.dev42 → verifiers-0.3.1.dev52}/verifiers/legacy/serve/client/env_client.py +0 -0
- {verifiers-0.3.1.dev42 → verifiers-0.3.1.dev52}/verifiers/legacy/serve/client/zmq_env_client.py +0 -0
- {verifiers-0.3.1.dev42 → verifiers-0.3.1.dev52}/verifiers/legacy/serve/server/__init__.py +0 -0
- {verifiers-0.3.1.dev42 → verifiers-0.3.1.dev52}/verifiers/legacy/serve/server/env_router.py +0 -0
- {verifiers-0.3.1.dev42 → verifiers-0.3.1.dev52}/verifiers/legacy/serve/server/env_server.py +0 -0
- {verifiers-0.3.1.dev42 → verifiers-0.3.1.dev52}/verifiers/legacy/serve/server/env_worker.py +0 -0
- {verifiers-0.3.1.dev42 → verifiers-0.3.1.dev52}/verifiers/legacy/serve/server/zmq_env_server.py +0 -0
- {verifiers-0.3.1.dev42 → verifiers-0.3.1.dev52}/verifiers/legacy/serve/types.py +0 -0
- {verifiers-0.3.1.dev42 → verifiers-0.3.1.dev52}/verifiers/legacy/types.py +0 -0
- {verifiers-0.3.1.dev42 → verifiers-0.3.1.dev52}/verifiers/legacy/utils/__init__.py +0 -0
- {verifiers-0.3.1.dev42 → verifiers-0.3.1.dev52}/verifiers/legacy/utils/async_utils.py +0 -0
- {verifiers-0.3.1.dev42 → verifiers-0.3.1.dev52}/verifiers/legacy/utils/client_utils.py +0 -0
- {verifiers-0.3.1.dev42 → verifiers-0.3.1.dev52}/verifiers/legacy/utils/config_utils.py +0 -0
- {verifiers-0.3.1.dev42 → verifiers-0.3.1.dev52}/verifiers/legacy/utils/data_utils.py +0 -0
- {verifiers-0.3.1.dev42 → verifiers-0.3.1.dev52}/verifiers/legacy/utils/display_utils.py +0 -0
- {verifiers-0.3.1.dev42 → verifiers-0.3.1.dev52}/verifiers/legacy/utils/env_config_utils.py +0 -0
- {verifiers-0.3.1.dev42 → verifiers-0.3.1.dev52}/verifiers/legacy/utils/env_utils.py +0 -0
- {verifiers-0.3.1.dev42 → verifiers-0.3.1.dev52}/verifiers/legacy/utils/error_utils.py +0 -0
- {verifiers-0.3.1.dev42 → verifiers-0.3.1.dev52}/verifiers/legacy/utils/eval_display.py +0 -0
- {verifiers-0.3.1.dev42 → verifiers-0.3.1.dev52}/verifiers/legacy/utils/eval_utils.py +0 -0
- {verifiers-0.3.1.dev42 → verifiers-0.3.1.dev52}/verifiers/legacy/utils/heartbeat.py +0 -0
- {verifiers-0.3.1.dev42 → verifiers-0.3.1.dev52}/verifiers/legacy/utils/import_utils.py +0 -0
- {verifiers-0.3.1.dev42 → verifiers-0.3.1.dev52}/verifiers/legacy/utils/install_utils.py +0 -0
- {verifiers-0.3.1.dev42 → verifiers-0.3.1.dev52}/verifiers/legacy/utils/interception_utils.py +0 -0
- {verifiers-0.3.1.dev42 → verifiers-0.3.1.dev52}/verifiers/legacy/utils/logging_utils.py +0 -0
- {verifiers-0.3.1.dev42 → verifiers-0.3.1.dev52}/verifiers/legacy/utils/message_utils.py +0 -0
- {verifiers-0.3.1.dev42 → verifiers-0.3.1.dev52}/verifiers/legacy/utils/metric_utils.py +0 -0
- {verifiers-0.3.1.dev42 → verifiers-0.3.1.dev52}/verifiers/legacy/utils/path_utils.py +0 -0
- {verifiers-0.3.1.dev42 → verifiers-0.3.1.dev52}/verifiers/legacy/utils/pricing_utils.py +0 -0
- {verifiers-0.3.1.dev42 → verifiers-0.3.1.dev52}/verifiers/legacy/utils/process_utils.py +0 -0
- {verifiers-0.3.1.dev42 → verifiers-0.3.1.dev52}/verifiers/legacy/utils/response_utils.py +0 -0
- {verifiers-0.3.1.dev42 → verifiers-0.3.1.dev52}/verifiers/legacy/utils/save_utils.py +0 -0
- {verifiers-0.3.1.dev42 → verifiers-0.3.1.dev52}/verifiers/legacy/utils/serve_utils.py +0 -0
- {verifiers-0.3.1.dev42 → verifiers-0.3.1.dev52}/verifiers/legacy/utils/thread_utils.py +0 -0
- {verifiers-0.3.1.dev42 → verifiers-0.3.1.dev52}/verifiers/legacy/utils/threaded_sandbox_client.py +0 -0
- {verifiers-0.3.1.dev42 → verifiers-0.3.1.dev52}/verifiers/legacy/utils/tool_utils.py +0 -0
- {verifiers-0.3.1.dev42 → verifiers-0.3.1.dev52}/verifiers/legacy/utils/usage_utils.py +0 -0
- {verifiers-0.3.1.dev42 → verifiers-0.3.1.dev52}/verifiers/legacy/utils/version_utils.py +0 -0
- {verifiers-0.3.1.dev42 → verifiers-0.3.1.dev52}/verifiers/v1/__init__.py +0 -0
- {verifiers-0.3.1.dev42 → verifiers-0.3.1.dev52}/verifiers/v1/acp/__init__.py +0 -0
- {verifiers-0.3.1.dev42 → verifiers-0.3.1.dev52}/verifiers/v1/acp/runner.py +0 -0
- {verifiers-0.3.1.dev42 → verifiers-0.3.1.dev52}/verifiers/v1/cli/__init__.py +0 -0
- {verifiers-0.3.1.dev42 → verifiers-0.3.1.dev52}/verifiers/v1/cli/dashboard/__init__.py +0 -0
- {verifiers-0.3.1.dev42 → verifiers-0.3.1.dev52}/verifiers/v1/cli/dashboard/base.py +0 -0
- {verifiers-0.3.1.dev42 → verifiers-0.3.1.dev52}/verifiers/v1/cli/dashboard/replay.py +0 -0
- {verifiers-0.3.1.dev42 → verifiers-0.3.1.dev52}/verifiers/v1/cli/dashboard/validate.py +0 -0
- {verifiers-0.3.1.dev42 → verifiers-0.3.1.dev52}/verifiers/v1/cli/eval/__init__.py +0 -0
- {verifiers-0.3.1.dev42 → verifiers-0.3.1.dev52}/verifiers/v1/cli/eval/main.py +0 -0
- {verifiers-0.3.1.dev42 → verifiers-0.3.1.dev52}/verifiers/v1/cli/eval/resume.py +0 -0
- {verifiers-0.3.1.dev42 → verifiers-0.3.1.dev52}/verifiers/v1/cli/eval/runner.py +0 -0
- {verifiers-0.3.1.dev42 → verifiers-0.3.1.dev52}/verifiers/v1/cli/gepa.py +0 -0
- {verifiers-0.3.1.dev42 → verifiers-0.3.1.dev52}/verifiers/v1/cli/init.py +0 -0
- {verifiers-0.3.1.dev42 → verifiers-0.3.1.dev52}/verifiers/v1/cli/output.py +0 -0
- {verifiers-0.3.1.dev42 → verifiers-0.3.1.dev52}/verifiers/v1/cli/replay.py +0 -0
- {verifiers-0.3.1.dev42 → verifiers-0.3.1.dev52}/verifiers/v1/cli/resolve.py +0 -0
- {verifiers-0.3.1.dev42 → verifiers-0.3.1.dev52}/verifiers/v1/cli/resume.py +0 -0
- {verifiers-0.3.1.dev42 → verifiers-0.3.1.dev52}/verifiers/v1/clients/__init__.py +0 -0
- {verifiers-0.3.1.dev42 → verifiers-0.3.1.dev52}/verifiers/v1/clients/base.py +0 -0
- {verifiers-0.3.1.dev42 → verifiers-0.3.1.dev52}/verifiers/v1/clients/client.py +0 -0
- {verifiers-0.3.1.dev42 → verifiers-0.3.1.dev52}/verifiers/v1/clients/eval.py +0 -0
- {verifiers-0.3.1.dev42 → verifiers-0.3.1.dev52}/verifiers/v1/clients/train.py +0 -0
- {verifiers-0.3.1.dev42 → verifiers-0.3.1.dev52}/verifiers/v1/configs/__init__.py +0 -0
- {verifiers-0.3.1.dev42 → verifiers-0.3.1.dev52}/verifiers/v1/configs/agent.py +0 -0
- {verifiers-0.3.1.dev42 → verifiers-0.3.1.dev52}/verifiers/v1/configs/cli/__init__.py +0 -0
- {verifiers-0.3.1.dev42 → verifiers-0.3.1.dev52}/verifiers/v1/configs/cli/debug.py +0 -0
- {verifiers-0.3.1.dev42 → verifiers-0.3.1.dev52}/verifiers/v1/configs/cli/env.py +0 -0
- {verifiers-0.3.1.dev42 → verifiers-0.3.1.dev52}/verifiers/v1/configs/cli/init.py +0 -0
- {verifiers-0.3.1.dev42 → verifiers-0.3.1.dev52}/verifiers/v1/configs/cli/replay.py +0 -0
- {verifiers-0.3.1.dev42 → verifiers-0.3.1.dev52}/verifiers/v1/configs/cli/validate.py +0 -0
- {verifiers-0.3.1.dev42 → verifiers-0.3.1.dev52}/verifiers/v1/configs/client.py +0 -0
- {verifiers-0.3.1.dev42 → verifiers-0.3.1.dev52}/verifiers/v1/configs/env.py +0 -0
- {verifiers-0.3.1.dev42 → verifiers-0.3.1.dev52}/verifiers/v1/configs/retries.py +0 -0
- {verifiers-0.3.1.dev42 → verifiers-0.3.1.dev52}/verifiers/v1/configs/runtime.py +0 -0
- {verifiers-0.3.1.dev42 → verifiers-0.3.1.dev52}/verifiers/v1/configs/serve.py +0 -0
- {verifiers-0.3.1.dev42 → verifiers-0.3.1.dev52}/verifiers/v1/configs/task.py +0 -0
- {verifiers-0.3.1.dev42 → verifiers-0.3.1.dev52}/verifiers/v1/dialects/__init__.py +0 -0
- {verifiers-0.3.1.dev42 → verifiers-0.3.1.dev52}/verifiers/v1/env.py +0 -0
- {verifiers-0.3.1.dev42 → verifiers-0.3.1.dev52}/verifiers/v1/envs/__init__.py +0 -0
- {verifiers-0.3.1.dev42 → verifiers-0.3.1.dev52}/verifiers/v1/envs/agentic_judge/__init__.py +0 -0
- {verifiers-0.3.1.dev42 → verifiers-0.3.1.dev52}/verifiers/v1/envs/agentic_judge/env.py +0 -0
- {verifiers-0.3.1.dev42 → verifiers-0.3.1.dev52}/verifiers/v1/envs/best_of_n/__init__.py +0 -0
- {verifiers-0.3.1.dev42 → verifiers-0.3.1.dev52}/verifiers/v1/envs/best_of_n/env.py +0 -0
- {verifiers-0.3.1.dev42 → verifiers-0.3.1.dev52}/verifiers/v1/envs/shared_agentic_judge/__init__.py +0 -0
- {verifiers-0.3.1.dev42 → verifiers-0.3.1.dev52}/verifiers/v1/envs/single_agent/__init__.py +0 -0
- {verifiers-0.3.1.dev42 → verifiers-0.3.1.dev52}/verifiers/v1/envs/single_agent/env.py +0 -0
- {verifiers-0.3.1.dev42 → verifiers-0.3.1.dev52}/verifiers/v1/envs/user_sim/__init__.py +0 -0
- {verifiers-0.3.1.dev42 → verifiers-0.3.1.dev52}/verifiers/v1/envs/user_sim/env.py +0 -0
- {verifiers-0.3.1.dev42 → verifiers-0.3.1.dev52}/verifiers/v1/episode.py +0 -0
- {verifiers-0.3.1.dev42 → verifiers-0.3.1.dev52}/verifiers/v1/errors.py +0 -0
- {verifiers-0.3.1.dev42 → verifiers-0.3.1.dev52}/verifiers/v1/gepa/__init__.py +0 -0
- {verifiers-0.3.1.dev42 → verifiers-0.3.1.dev52}/verifiers/v1/gepa/adapter.py +0 -0
- {verifiers-0.3.1.dev42 → verifiers-0.3.1.dev52}/verifiers/v1/gepa/config.py +0 -0
- {verifiers-0.3.1.dev42 → verifiers-0.3.1.dev52}/verifiers/v1/gepa/dataset.py +0 -0
- {verifiers-0.3.1.dev42 → verifiers-0.3.1.dev52}/verifiers/v1/gepa/reflection.py +0 -0
- {verifiers-0.3.1.dev42 → verifiers-0.3.1.dev52}/verifiers/v1/gepa/runner.py +0 -0
- {verifiers-0.3.1.dev42 → verifiers-0.3.1.dev52}/verifiers/v1/graph.py +0 -0
- {verifiers-0.3.1.dev42 → verifiers-0.3.1.dev52}/verifiers/v1/harness.py +0 -0
- {verifiers-0.3.1.dev42 → verifiers-0.3.1.dev52}/verifiers/v1/harnesses/__init__.py +0 -0
- {verifiers-0.3.1.dev42 → verifiers-0.3.1.dev52}/verifiers/v1/harnesses/bash/__init__.py +0 -0
- {verifiers-0.3.1.dev42 → verifiers-0.3.1.dev52}/verifiers/v1/harnesses/bash/harness.py +0 -0
- {verifiers-0.3.1.dev42 → verifiers-0.3.1.dev52}/verifiers/v1/harnesses/bash/program.py +0 -0
- {verifiers-0.3.1.dev42 → verifiers-0.3.1.dev52}/verifiers/v1/harnesses/browser_use/__init__.py +0 -0
- {verifiers-0.3.1.dev42 → verifiers-0.3.1.dev52}/verifiers/v1/harnesses/browser_use/harness.py +0 -0
- {verifiers-0.3.1.dev42 → verifiers-0.3.1.dev52}/verifiers/v1/harnesses/browser_use/program.py +0 -0
- {verifiers-0.3.1.dev42 → verifiers-0.3.1.dev52}/verifiers/v1/harnesses/claude_code/__init__.py +0 -0
- {verifiers-0.3.1.dev42 → verifiers-0.3.1.dev52}/verifiers/v1/harnesses/claude_code/harness.py +0 -0
- {verifiers-0.3.1.dev42 → verifiers-0.3.1.dev52}/verifiers/v1/harnesses/codex/__init__.py +0 -0
- {verifiers-0.3.1.dev42 → verifiers-0.3.1.dev52}/verifiers/v1/harnesses/codex/harness.py +0 -0
- {verifiers-0.3.1.dev42 → verifiers-0.3.1.dev52}/verifiers/v1/harnesses/hermes_agent/__init__.py +0 -0
- {verifiers-0.3.1.dev42 → verifiers-0.3.1.dev52}/verifiers/v1/harnesses/hermes_agent/harness.py +0 -0
- {verifiers-0.3.1.dev42 → verifiers-0.3.1.dev52}/verifiers/v1/harnesses/hermes_agent/program.py +0 -0
- {verifiers-0.3.1.dev42 → verifiers-0.3.1.dev52}/verifiers/v1/harnesses/kimi_code/__init__.py +0 -0
- {verifiers-0.3.1.dev42 → verifiers-0.3.1.dev52}/verifiers/v1/harnesses/kimi_code/harness.py +0 -0
- {verifiers-0.3.1.dev42 → verifiers-0.3.1.dev52}/verifiers/v1/harnesses/mini_swe_agent/__init__.py +0 -0
- {verifiers-0.3.1.dev42 → verifiers-0.3.1.dev52}/verifiers/v1/harnesses/mini_swe_agent/harness.py +0 -0
- {verifiers-0.3.1.dev42 → verifiers-0.3.1.dev52}/verifiers/v1/harnesses/mini_swe_agent/program.py +0 -0
- {verifiers-0.3.1.dev42 → verifiers-0.3.1.dev52}/verifiers/v1/harnesses/node.py +0 -0
- {verifiers-0.3.1.dev42 → verifiers-0.3.1.dev52}/verifiers/v1/harnesses/null/__init__.py +0 -0
- {verifiers-0.3.1.dev42 → verifiers-0.3.1.dev52}/verifiers/v1/harnesses/null/harness.py +0 -0
- {verifiers-0.3.1.dev42 → verifiers-0.3.1.dev52}/verifiers/v1/harnesses/null/program.py +0 -0
- {verifiers-0.3.1.dev42 → verifiers-0.3.1.dev52}/verifiers/v1/harnesses/openclaw/__init__.py +0 -0
- {verifiers-0.3.1.dev42 → verifiers-0.3.1.dev52}/verifiers/v1/harnesses/openclaw/harness.py +0 -0
- {verifiers-0.3.1.dev42 → verifiers-0.3.1.dev52}/verifiers/v1/harnesses/pi/__init__.py +0 -0
- {verifiers-0.3.1.dev42 → verifiers-0.3.1.dev52}/verifiers/v1/harnesses/pi/harness.py +0 -0
- {verifiers-0.3.1.dev42 → verifiers-0.3.1.dev52}/verifiers/v1/harnesses/pool/__init__.py +0 -0
- {verifiers-0.3.1.dev42 → verifiers-0.3.1.dev52}/verifiers/v1/harnesses/pool/harness.py +0 -0
- {verifiers-0.3.1.dev42 → verifiers-0.3.1.dev52}/verifiers/v1/harnesses/rlm/__init__.py +0 -0
- {verifiers-0.3.1.dev42 → verifiers-0.3.1.dev52}/verifiers/v1/harnesses/rlm/harness.py +0 -0
- {verifiers-0.3.1.dev42 → verifiers-0.3.1.dev52}/verifiers/v1/harnesses/terminus_2/__init__.py +0 -0
- {verifiers-0.3.1.dev42 → verifiers-0.3.1.dev52}/verifiers/v1/harnesses/terminus_2/harness.py +0 -0
- {verifiers-0.3.1.dev42 → verifiers-0.3.1.dev52}/verifiers/v1/harnesses/terminus_2/program.py +0 -0
- {verifiers-0.3.1.dev42 → verifiers-0.3.1.dev52}/verifiers/v1/interception/__init__.py +0 -0
- {verifiers-0.3.1.dev42 → verifiers-0.3.1.dev52}/verifiers/v1/interception/base.py +0 -0
- {verifiers-0.3.1.dev42 → verifiers-0.3.1.dev52}/verifiers/v1/interception/pool.py +0 -0
- {verifiers-0.3.1.dev42 → verifiers-0.3.1.dev52}/verifiers/v1/interception/tool.py +0 -0
- {verifiers-0.3.1.dev42 → verifiers-0.3.1.dev52}/verifiers/v1/interception/tunnel/__init__.py +0 -0
- {verifiers-0.3.1.dev42 → verifiers-0.3.1.dev52}/verifiers/v1/interception/tunnel/base.py +0 -0
- {verifiers-0.3.1.dev42 → verifiers-0.3.1.dev52}/verifiers/v1/interception/tunnel/custom.py +0 -0
- {verifiers-0.3.1.dev42 → verifiers-0.3.1.dev52}/verifiers/v1/interception/tunnel/prime.py +0 -0
- {verifiers-0.3.1.dev42 → verifiers-0.3.1.dev52}/verifiers/v1/judge.py +0 -0
- {verifiers-0.3.1.dev42 → verifiers-0.3.1.dev52}/verifiers/v1/judges/__init__.py +0 -0
- {verifiers-0.3.1.dev42 → verifiers-0.3.1.dev52}/verifiers/v1/judges/reference.py +0 -0
- {verifiers-0.3.1.dev42 → verifiers-0.3.1.dev52}/verifiers/v1/judges/reference.txt +0 -0
- {verifiers-0.3.1.dev42 → verifiers-0.3.1.dev52}/verifiers/v1/judges/rubric.py +0 -0
- {verifiers-0.3.1.dev42 → verifiers-0.3.1.dev52}/verifiers/v1/judges/rubric.txt +0 -0
- {verifiers-0.3.1.dev42 → verifiers-0.3.1.dev52}/verifiers/v1/mcp/__init__.py +0 -0
- {verifiers-0.3.1.dev42 → verifiers-0.3.1.dev52}/verifiers/v1/mcp/server.py +0 -0
- {verifiers-0.3.1.dev42 → verifiers-0.3.1.dev52}/verifiers/v1/mcp/toolset.py +0 -0
- {verifiers-0.3.1.dev42 → verifiers-0.3.1.dev52}/verifiers/v1/runtimes/docker/egress.py +0 -0
- {verifiers-0.3.1.dev42 → verifiers-0.3.1.dev52}/verifiers/v1/runtimes/limiters.py +0 -0
- {verifiers-0.3.1.dev42 → verifiers-0.3.1.dev52}/verifiers/v1/serve/__init__.py +0 -0
- {verifiers-0.3.1.dev42 → verifiers-0.3.1.dev52}/verifiers/v1/serve/client.py +0 -0
- {verifiers-0.3.1.dev42 → verifiers-0.3.1.dev52}/verifiers/v1/serve/encoding.py +0 -0
- {verifiers-0.3.1.dev42 → verifiers-0.3.1.dev52}/verifiers/v1/serve/pool.py +0 -0
- {verifiers-0.3.1.dev42 → verifiers-0.3.1.dev52}/verifiers/v1/serve/server.py +0 -0
- {verifiers-0.3.1.dev42 → verifiers-0.3.1.dev52}/verifiers/v1/serve/types.py +0 -0
- {verifiers-0.3.1.dev42 → verifiers-0.3.1.dev52}/verifiers/v1/session.py +0 -0
- {verifiers-0.3.1.dev42 → verifiers-0.3.1.dev52}/verifiers/v1/state.py +0 -0
- {verifiers-0.3.1.dev42 → verifiers-0.3.1.dev52}/verifiers/v1/taskset.py +0 -0
- {verifiers-0.3.1.dev42 → verifiers-0.3.1.dev52}/verifiers/v1/tasksets/__init__.py +0 -0
- {verifiers-0.3.1.dev42 → verifiers-0.3.1.dev52}/verifiers/v1/tasksets/harbor/__init__.py +0 -0
- {verifiers-0.3.1.dev42 → verifiers-0.3.1.dev52}/verifiers/v1/tasksets/lean/__init__.py +0 -0
- {verifiers-0.3.1.dev42 → verifiers-0.3.1.dev52}/verifiers/v1/tasksets/lean/scoring.py +0 -0
- {verifiers-0.3.1.dev42 → verifiers-0.3.1.dev52}/verifiers/v1/tasksets/lean/taskset.py +0 -0
- {verifiers-0.3.1.dev42 → verifiers-0.3.1.dev52}/verifiers/v1/tasksets/nemo_gym/__init__.py +0 -0
- {verifiers-0.3.1.dev42 → verifiers-0.3.1.dev52}/verifiers/v1/tasksets/nemo_gym/response.py +0 -0
- {verifiers-0.3.1.dev42 → verifiers-0.3.1.dev52}/verifiers/v1/tasksets/nemo_gym/server.py +0 -0
- {verifiers-0.3.1.dev42 → verifiers-0.3.1.dev52}/verifiers/v1/tasksets/nemo_gym/taskset.py +0 -0
- {verifiers-0.3.1.dev42 → verifiers-0.3.1.dev52}/verifiers/v1/tasksets/nemo_gym/toolset.py +0 -0
- {verifiers-0.3.1.dev42 → verifiers-0.3.1.dev52}/verifiers/v1/tasksets/openenv/__init__.py +0 -0
- {verifiers-0.3.1.dev42 → verifiers-0.3.1.dev52}/verifiers/v1/tasksets/openenv/taskset.py +0 -0
- {verifiers-0.3.1.dev42 → verifiers-0.3.1.dev52}/verifiers/v1/tasksets/textarena/__init__.py +0 -0
- {verifiers-0.3.1.dev42 → verifiers-0.3.1.dev52}/verifiers/v1/tasksets/textarena/taskset.py +0 -0
- {verifiers-0.3.1.dev42 → verifiers-0.3.1.dev52}/verifiers/v1/trace.py +0 -0
- {verifiers-0.3.1.dev42 → verifiers-0.3.1.dev52}/verifiers/v1/utils/__init__.py +0 -0
- {verifiers-0.3.1.dev42 → verifiers-0.3.1.dev52}/verifiers/v1/utils/aio.py +0 -0
- {verifiers-0.3.1.dev42 → verifiers-0.3.1.dev52}/verifiers/v1/utils/artifacts.py +0 -0
- {verifiers-0.3.1.dev42 → verifiers-0.3.1.dev52}/verifiers/v1/utils/compile.py +0 -0
- {verifiers-0.3.1.dev42 → verifiers-0.3.1.dev52}/verifiers/v1/utils/decorators.py +0 -0
- {verifiers-0.3.1.dev42 → verifiers-0.3.1.dev52}/verifiers/v1/utils/format.py +0 -0
- {verifiers-0.3.1.dev42 → verifiers-0.3.1.dev52}/verifiers/v1/utils/generic.py +0 -0
- {verifiers-0.3.1.dev42 → verifiers-0.3.1.dev52}/verifiers/v1/utils/git.py +0 -0
- {verifiers-0.3.1.dev42 → verifiers-0.3.1.dev52}/verifiers/v1/utils/image.py +0 -0
- {verifiers-0.3.1.dev42 → verifiers-0.3.1.dev52}/verifiers/v1/utils/interrupt.py +0 -0
- {verifiers-0.3.1.dev42 → verifiers-0.3.1.dev52}/verifiers/v1/utils/logging.py +0 -0
- {verifiers-0.3.1.dev42 → verifiers-0.3.1.dev52}/verifiers/v1/utils/memory.py +0 -0
- {verifiers-0.3.1.dev42 → verifiers-0.3.1.dev52}/verifiers/v1/utils/paths.py +0 -0
- {verifiers-0.3.1.dev42 → verifiers-0.3.1.dev52}/verifiers/v1/utils/platform.py +0 -0
- {verifiers-0.3.1.dev42 → verifiers-0.3.1.dev52}/verifiers/v1/utils/prime.py +0 -0
- {verifiers-0.3.1.dev42 → verifiers-0.3.1.dev52}/verifiers/v1/utils/retries.py +0 -0
- {verifiers-0.3.1.dev42 → verifiers-0.3.1.dev52}/verifiers/v1/utils/score.py +0 -0
- {verifiers-0.3.1.dev42 → verifiers-0.3.1.dev52}/verifiers/v1/utils/version.py +0 -0
|
@@ -1,6 +1,6 @@
|
|
|
1
|
-
Metadata-Version: 2.
|
|
1
|
+
Metadata-Version: 2.5
|
|
2
2
|
Name: verifiers
|
|
3
|
-
Version: 0.3.1.
|
|
3
|
+
Version: 0.3.1.dev52
|
|
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
|
|
@@ -34,7 +34,7 @@ Requires-Dist: msgpack>=1.1.2
|
|
|
34
34
|
Requires-Dist: numpy>=2.1.0
|
|
35
35
|
Requires-Dist: openai-agents>=0.8.2
|
|
36
36
|
Requires-Dist: openai>=2.9.0
|
|
37
|
-
Requires-Dist: prime-pydantic-config[toml]>=0.4.
|
|
37
|
+
Requires-Dist: prime-pydantic-config[toml]>=0.4.3
|
|
38
38
|
Requires-Dist: prime-sandboxes>=0.2.37
|
|
39
39
|
Requires-Dist: prime-tunnel>=0.1.8
|
|
40
40
|
Requires-Dist: pydantic>=2.12.3
|
|
@@ -47,7 +47,7 @@ dependencies = [
|
|
|
47
47
|
"setproctitle>=1.3.0",
|
|
48
48
|
"httpx>=0.27.0",
|
|
49
49
|
"aiohttp>=3.9.0",
|
|
50
|
-
"prime-pydantic-config[toml]>=0.4.
|
|
50
|
+
"prime-pydantic-config[toml]>=0.4.3",
|
|
51
51
|
"uvloop>=0.21.0; sys_platform != 'win32' and sys_platform != 'cygwin' and platform_python_implementation != 'PyPy'",
|
|
52
52
|
"loguru>=0.7.0",
|
|
53
53
|
"tomli-w>=1.0.0",
|
|
@@ -154,6 +154,8 @@ def _eval_config(
|
|
|
154
154
|
runtime_cfg = dict(runtime)
|
|
155
155
|
_configure_prime_runtimes(runtime_cfg)
|
|
156
156
|
env_cfg.setdefault("agent", {})["runtime"] = runtime_cfg
|
|
157
|
+
retries = {"max_retries": 2, "include": ["ProviderError", "HarnessError"]}
|
|
158
|
+
env_cfg.setdefault("retries", retries)
|
|
157
159
|
# Per-run caps live on the seats: resolve the env's declared roles and cap
|
|
158
160
|
# each one (a test's own seat dict wins over the shared defaults).
|
|
159
161
|
config_cls = vf.env_config_type(taskset, env_cfg.get("id", ""))
|
|
@@ -167,11 +169,8 @@ def _eval_config(
|
|
|
167
169
|
seat_cfg.setdefault("max_turns", max_turns)
|
|
168
170
|
seat_cfg.setdefault("max_output_tokens", max_tokens)
|
|
169
171
|
seat_cfg.setdefault("timeout", {"rollout": rollout_timeout, "scoring": 60})
|
|
170
|
-
#
|
|
171
|
-
seat_cfg.setdefault(
|
|
172
|
-
"retries",
|
|
173
|
-
{"max_retries": 2, "include": ["ProviderError", "HarnessError"]},
|
|
174
|
-
)
|
|
172
|
+
# Agent runs retry locally; interactions retry with their whole episode.
|
|
173
|
+
seat_cfg.setdefault("retries", retries)
|
|
175
174
|
return EvalConfig(
|
|
176
175
|
env={
|
|
177
176
|
"taskset": taskset_cfg,
|
|
@@ -184,7 +184,7 @@ def test_judges_reject_shared_reward_keys():
|
|
|
184
184
|
|
|
185
185
|
|
|
186
186
|
def test_reward_name_fallback():
|
|
187
|
-
# name > id
|
|
187
|
+
# name > id > snake-cased class name (code-level judge with neither).
|
|
188
188
|
class MyQualityJudge(vf.Judge[float]):
|
|
189
189
|
prompt = "{x}"
|
|
190
190
|
|
|
@@ -192,7 +192,7 @@ def test_reward_name_fallback():
|
|
|
192
192
|
vf.ReferenceJudge().reward_name == "reference"
|
|
193
193
|
) # class-name fallback (no id set)
|
|
194
194
|
assert (
|
|
195
|
-
vf.ReferenceJudge(vf.ReferenceJudgeConfig(id="
|
|
195
|
+
vf.ReferenceJudge(vf.ReferenceJudgeConfig(id="my-judge")).reward_name
|
|
196
196
|
== "my-judge"
|
|
197
197
|
)
|
|
198
198
|
assert vf.ReferenceJudge(vf.ReferenceJudgeConfig(name="gold")).reward_name == "gold"
|
|
@@ -548,6 +548,8 @@ class Agent:
|
|
|
548
548
|
else self.runtime_config
|
|
549
549
|
)
|
|
550
550
|
async with provision_runtime(config) as runtime:
|
|
551
|
+
# Keep sandbox startup task-neutral: this box may later host another task.
|
|
552
|
+
runtime.env = dict(task.runtime_env()) if task is not None else {}
|
|
551
553
|
yield runtime
|
|
552
554
|
|
|
553
555
|
|
|
@@ -24,7 +24,6 @@ from verifiers.v1.utils.format import (
|
|
|
24
24
|
format_override,
|
|
25
25
|
format_time,
|
|
26
26
|
)
|
|
27
|
-
from verifiers.v1.utils.install import env_name
|
|
28
27
|
from verifiers.v1.utils.interrupt import cleaning_up
|
|
29
28
|
|
|
30
29
|
if TYPE_CHECKING:
|
|
@@ -240,7 +239,7 @@ def Overview(config: EvalConfig) -> Table:
|
|
|
240
239
|
taskset = config.env.taskset
|
|
241
240
|
env_label = taskset.name if taskset.id else "no taskset"
|
|
242
241
|
if config.env.id:
|
|
243
|
-
env_label = f"{
|
|
242
|
+
env_label = f"{config.env.id}+{env_label}"
|
|
244
243
|
# One seat story when every seat resolves the same way (the common case); one
|
|
245
244
|
# row per seat when they diverge (a judge on its own harness/runtime).
|
|
246
245
|
runtimes = {role: getattr(config.env, role).runtime.type for role in seats}
|
|
@@ -224,6 +224,7 @@ async def debug_task(task: Task, config: DebugConfig) -> tuple[Trace, bool]:
|
|
|
224
224
|
else task.data.timeout.setup
|
|
225
225
|
)
|
|
226
226
|
try:
|
|
227
|
+
runtime.env = dict(task.runtime_env())
|
|
227
228
|
trace.timing.boot.start = time.time()
|
|
228
229
|
await runtime.start()
|
|
229
230
|
now = time.time()
|
|
@@ -235,6 +235,7 @@ async def _run_gold(task: Task, config: ValidateConfig) -> ResultRow:
|
|
|
235
235
|
)
|
|
236
236
|
valid, exc = False, None
|
|
237
237
|
try:
|
|
238
|
+
runtime.env = dict(task.runtime_env())
|
|
238
239
|
trace = Trace(
|
|
239
240
|
task=TraceTask(
|
|
240
241
|
type=type(task).__name__, data=task.data, key=task.key, hash=task.hash
|
|
@@ -278,6 +279,7 @@ async def _run_setup(task: Task, config: ValidateConfig) -> ResultRow:
|
|
|
278
279
|
)
|
|
279
280
|
valid, exc = False, None
|
|
280
281
|
try:
|
|
282
|
+
runtime.env = dict(task.runtime_env())
|
|
281
283
|
trace = Trace(
|
|
282
284
|
task=TraceTask(
|
|
283
285
|
type=type(task).__name__, data=task.data, key=task.key, hash=task.hash
|
|
@@ -12,7 +12,6 @@ from verifiers.v1.configs.env import EnvConfig
|
|
|
12
12
|
from verifiers.v1.configs.serve import ServeConfig
|
|
13
13
|
from verifiers.v1.envs.single_agent import SingleAgentEnvConfig
|
|
14
14
|
from verifiers.v1.types import SamplingConfig
|
|
15
|
-
from verifiers.v1.utils.install import env_name
|
|
16
15
|
|
|
17
16
|
|
|
18
17
|
def default_run_name(env: EnvConfig, model: str) -> str:
|
|
@@ -24,7 +23,7 @@ def default_run_name(env: EnvConfig, model: str) -> str:
|
|
|
24
23
|
if taskset.id and env.id:
|
|
25
24
|
# Same compounding as `EnvConfig.env_id`: a `best-of-n+gsm8k` run must
|
|
26
25
|
# not share a name with a plain `gsm8k` one.
|
|
27
|
-
name = f"{
|
|
26
|
+
name = f"{env.id}+{name}"
|
|
28
27
|
# Every seat's resolved harness, distinct, in role order.
|
|
29
28
|
harness = "+".join(dict.fromkeys(h.name for h in env.agent_harnesses().values()))
|
|
30
29
|
slug = (
|
|
@@ -9,12 +9,11 @@ from pydantic import ConfigDict, Field, FiniteFloat
|
|
|
9
9
|
from pydantic_config import BaseConfig
|
|
10
10
|
|
|
11
11
|
from verifiers.v1.types import ID
|
|
12
|
-
from verifiers.v1.utils.install import env_name
|
|
13
12
|
|
|
14
13
|
|
|
15
14
|
class HarnessConfig(BaseConfig):
|
|
16
15
|
id: ID = "bash"
|
|
17
|
-
"""
|
|
16
|
+
"""Installed harness package, set through the seat's
|
|
18
17
|
`--env.<role>.harness.id` (`--env.agent.harness.id` on the single-agent env)."""
|
|
19
18
|
env: dict[str, str] = Field(default_factory=dict)
|
|
20
19
|
"""Extra program variables; harness-owned variables take precedence."""
|
|
@@ -30,7 +29,7 @@ class HarnessConfig(BaseConfig):
|
|
|
30
29
|
|
|
31
30
|
@property
|
|
32
31
|
def name(self) -> str:
|
|
33
|
-
return
|
|
32
|
+
return self.id
|
|
34
33
|
|
|
35
34
|
@property
|
|
36
35
|
def resolved_env(self) -> dict[str, str]:
|
|
@@ -9,7 +9,6 @@ from pydantic import BaseModel, FiniteFloat, SerializeAsAny
|
|
|
9
9
|
|
|
10
10
|
from verifiers.v1.clients import BaseClientConfig
|
|
11
11
|
from verifiers.v1.types import ID, SamplingConfig
|
|
12
|
-
from verifiers.v1.utils.install import env_name
|
|
13
12
|
|
|
14
13
|
|
|
15
14
|
class JudgeConfig(BaseClientConfig):
|
|
@@ -29,7 +28,7 @@ Judges = list[SerializeAsAny[JudgeConfig]]
|
|
|
29
28
|
|
|
30
29
|
|
|
31
30
|
def judge_key(config: JudgeConfig) -> str:
|
|
32
|
-
return config.name or
|
|
31
|
+
return config.name or config.id
|
|
33
32
|
|
|
34
33
|
|
|
35
34
|
def resolve_judges(entries: Sequence[Any]) -> list[JudgeConfig]:
|
|
@@ -41,7 +40,7 @@ def resolve_judges(entries: Sequence[Any]) -> list[JudgeConfig]:
|
|
|
41
40
|
if not raw.get("id"):
|
|
42
41
|
raise ValueError(
|
|
43
42
|
"each `judges` entry needs an `id` (a judge plugin: `reference`, "
|
|
44
|
-
"`rubric`,
|
|
43
|
+
"`rubric`, or an installed package)"
|
|
45
44
|
)
|
|
46
45
|
resolved.append(judge_config_type(raw["id"]).model_validate(raw))
|
|
47
46
|
return resolved
|
|
@@ -52,7 +51,7 @@ def check_judges(entries: Sequence[JudgeConfig]) -> None:
|
|
|
52
51
|
if not entry.id:
|
|
53
52
|
raise ValueError(
|
|
54
53
|
"each `judges` entry needs an `id` (a judge plugin: `reference`, "
|
|
55
|
-
"`rubric`,
|
|
54
|
+
"`rubric`, or an installed package)"
|
|
56
55
|
)
|
|
57
56
|
keys = [judge_key(entry) for entry in entries]
|
|
58
57
|
if duplicates := {key for key in keys if keys.count(key) > 1}:
|
|
@@ -7,12 +7,11 @@ from pydantic_config import BaseConfig
|
|
|
7
7
|
|
|
8
8
|
from verifiers.v1.configs.task import TaskConfig
|
|
9
9
|
from verifiers.v1.types import ID
|
|
10
|
-
from verifiers.v1.utils.install import env_name
|
|
11
10
|
|
|
12
11
|
|
|
13
12
|
class TasksetConfig(BaseConfig):
|
|
14
13
|
id: ID = ""
|
|
15
|
-
"""
|
|
14
|
+
"""Installed taskset package, set with `--env.taskset.id` (or the
|
|
16
15
|
positional `eval <taskset-id>`)."""
|
|
17
16
|
task: SerializeAsAny[TaskConfig] = TaskConfig()
|
|
18
17
|
"""Config passed to each task, under `--env.taskset.task.*`."""
|
|
@@ -22,4 +21,4 @@ class TasksetConfig(BaseConfig):
|
|
|
22
21
|
|
|
23
22
|
@property
|
|
24
23
|
def name(self) -> str:
|
|
25
|
-
return
|
|
24
|
+
return self.id
|
|
@@ -16,12 +16,14 @@ from anthropic.types import Message as AnthropicMessage
|
|
|
16
16
|
from anthropic.types import MessageCreateParams
|
|
17
17
|
from anthropic.types import Usage as AnthropicUsage
|
|
18
18
|
|
|
19
|
+
from verifiers.v1.configs.runtime import NetworkPolicyConfig
|
|
19
20
|
from verifiers.v1.dialects.base import (
|
|
20
21
|
Dialect,
|
|
21
22
|
StreamParser,
|
|
22
23
|
append_user_notice,
|
|
23
24
|
blocked_url,
|
|
24
25
|
parse_sse_event,
|
|
26
|
+
provider_allowed_domains,
|
|
25
27
|
)
|
|
26
28
|
from verifiers.v1.types import (
|
|
27
29
|
AssistantMessage,
|
|
@@ -56,6 +58,7 @@ THINKING = ("redacted_thinking", "thinking")
|
|
|
56
58
|
# at the provider. Anchoring the pattern keeps new versions client-side without treating an
|
|
57
59
|
# arbitrary dated provider tool as safe.
|
|
58
60
|
_CLIENT_TOOL_TYPE = re.compile(r"(?:bash|text_editor|computer|memory)_\d{8}").fullmatch
|
|
61
|
+
_WEB_TOOL_TYPE = re.compile(r"web_(?:search|fetch)_\d{8}").fullmatch
|
|
59
62
|
_CONTENT_WRAPPERS = (
|
|
60
63
|
"tool_result",
|
|
61
64
|
"code_execution_tool_result",
|
|
@@ -126,10 +129,10 @@ def parse_content(content) -> str | list[ContentPart]:
|
|
|
126
129
|
return parts
|
|
127
130
|
|
|
128
131
|
|
|
129
|
-
def blocked_content_path(value, path: str) -> str | None:
|
|
132
|
+
def blocked_content_path(value, path: str, policy: NetworkPolicyConfig) -> str | None:
|
|
130
133
|
if isinstance(value, list):
|
|
131
134
|
for index, item in enumerate(value):
|
|
132
|
-
if blocked := blocked_content_path(item, f"{path}[{index}]"):
|
|
135
|
+
if blocked := blocked_content_path(item, f"{path}[{index}]", policy):
|
|
133
136
|
return blocked
|
|
134
137
|
return None
|
|
135
138
|
if not isinstance(value, dict):
|
|
@@ -148,10 +151,12 @@ def blocked_content_path(value, path: str) -> str | None:
|
|
|
148
151
|
return source_path
|
|
149
152
|
source_kind = source.get("type")
|
|
150
153
|
if source_kind == "content":
|
|
151
|
-
return blocked_content_path(
|
|
154
|
+
return blocked_content_path(
|
|
155
|
+
source.get("content"), f"{source_path}.content", policy
|
|
156
|
+
)
|
|
152
157
|
if source_kind == "url":
|
|
153
158
|
url = source.get("url")
|
|
154
|
-
if not isinstance(url, str) or blocked_url(url):
|
|
159
|
+
if not isinstance(url, str) or blocked_url(url, policy):
|
|
155
160
|
return f"{source_path}.url"
|
|
156
161
|
if source_kind == "file":
|
|
157
162
|
return (
|
|
@@ -169,13 +174,13 @@ def blocked_content_path(value, path: str) -> str | None:
|
|
|
169
174
|
) and value.get("file_id"):
|
|
170
175
|
return f"{path}.file_id"
|
|
171
176
|
if kind in _CONTENT_WRAPPERS:
|
|
172
|
-
return blocked_content_path(value.get("content"), f"{path}.content")
|
|
177
|
+
return blocked_content_path(value.get("content"), f"{path}.content", policy)
|
|
173
178
|
return None if kind in _SAFE_CONTENT_TYPES else f"{path}.type"
|
|
174
179
|
|
|
175
180
|
|
|
176
|
-
def mediate_content(value, path: str):
|
|
181
|
+
def mediate_content(value, path: str, policy: NetworkPolicyConfig):
|
|
177
182
|
if not isinstance(value, list):
|
|
178
|
-
blocked = blocked_content_path(value, path)
|
|
183
|
+
blocked = blocked_content_path(value, path, policy)
|
|
179
184
|
return ("", [blocked]) if blocked else (value, [])
|
|
180
185
|
|
|
181
186
|
mediated = []
|
|
@@ -183,16 +188,18 @@ def mediate_content(value, path: str):
|
|
|
183
188
|
for index, block in enumerate(value):
|
|
184
189
|
item_path = f"{path}[{index}]"
|
|
185
190
|
if isinstance(block, dict) and block.get("type") in _CONTENT_WRAPPERS:
|
|
186
|
-
if blocked := blocked_content_path(
|
|
191
|
+
if blocked := blocked_content_path(
|
|
192
|
+
{**block, "content": []}, item_path, policy
|
|
193
|
+
):
|
|
187
194
|
capabilities.append(blocked)
|
|
188
195
|
continue
|
|
189
196
|
content, removed = mediate_content(
|
|
190
|
-
block.get("content"), f"{item_path}.content"
|
|
197
|
+
block.get("content"), f"{item_path}.content", policy
|
|
191
198
|
)
|
|
192
199
|
if removed:
|
|
193
200
|
block["content"] = content or ""
|
|
194
201
|
capabilities.extend(removed)
|
|
195
|
-
elif blocked := blocked_content_path(block, item_path):
|
|
202
|
+
elif blocked := blocked_content_path(block, item_path, policy):
|
|
196
203
|
capabilities.append(blocked)
|
|
197
204
|
continue
|
|
198
205
|
mediated.append(block)
|
|
@@ -448,7 +455,7 @@ class AnthropicDialect(Dialect[MessageCreateParams, AnthropicMessage]):
|
|
|
448
455
|
response_type = ModdedAnthropicMessage
|
|
449
456
|
|
|
450
457
|
def mediate_external_capabilities(
|
|
451
|
-
self, body: MessageCreateParams
|
|
458
|
+
self, body: MessageCreateParams, policy: NetworkPolicyConfig
|
|
452
459
|
) -> tuple[MessageCreateParams, list[str]]:
|
|
453
460
|
mediated = body
|
|
454
461
|
capabilities: list[str] = []
|
|
@@ -457,7 +464,7 @@ class AnthropicDialect(Dialect[MessageCreateParams, AnthropicMessage]):
|
|
|
457
464
|
if mediated.pop(key, None):
|
|
458
465
|
capabilities.append(key)
|
|
459
466
|
|
|
460
|
-
system, removed = mediate_content(mediated.get("system"), "system")
|
|
467
|
+
system, removed = mediate_content(mediated.get("system"), "system", policy)
|
|
461
468
|
capabilities.extend(removed)
|
|
462
469
|
if removed:
|
|
463
470
|
if system:
|
|
@@ -469,7 +476,9 @@ class AnthropicDialect(Dialect[MessageCreateParams, AnthropicMessage]):
|
|
|
469
476
|
if not isinstance(message, dict):
|
|
470
477
|
continue
|
|
471
478
|
content, removed = mediate_content(
|
|
472
|
-
message.get("content"),
|
|
479
|
+
message.get("content"),
|
|
480
|
+
f"messages[{message_index}].content",
|
|
481
|
+
policy,
|
|
473
482
|
)
|
|
474
483
|
capabilities.extend(removed)
|
|
475
484
|
if removed:
|
|
@@ -482,6 +491,33 @@ class AnthropicDialect(Dialect[MessageCreateParams, AnthropicMessage]):
|
|
|
482
491
|
tools = []
|
|
483
492
|
for index, tool in enumerate(tool_items):
|
|
484
493
|
kind = tool.get("type") if isinstance(tool, dict) else None
|
|
494
|
+
if (
|
|
495
|
+
isinstance(tool, dict)
|
|
496
|
+
and isinstance(kind, str)
|
|
497
|
+
and _WEB_TOOL_TYPE(kind)
|
|
498
|
+
):
|
|
499
|
+
callers = tool.get("allowed_callers")
|
|
500
|
+
domains = (
|
|
501
|
+
provider_allowed_domains(policy, tool.get("allowed_domains"))
|
|
502
|
+
if tool.get("blocked_domains") in (None, [])
|
|
503
|
+
and (
|
|
504
|
+
callers is None
|
|
505
|
+
or isinstance(callers, list)
|
|
506
|
+
and "direct" in callers
|
|
507
|
+
)
|
|
508
|
+
else []
|
|
509
|
+
)
|
|
510
|
+
if domains:
|
|
511
|
+
web_tool = {
|
|
512
|
+
**tool,
|
|
513
|
+
"allowed_domains": domains,
|
|
514
|
+
"allowed_callers": ["direct"],
|
|
515
|
+
}
|
|
516
|
+
web_tool.pop("blocked_domains", None)
|
|
517
|
+
tools.append(web_tool)
|
|
518
|
+
continue
|
|
519
|
+
capabilities.append(f"tools[{index}].type")
|
|
520
|
+
continue
|
|
485
521
|
if isinstance(tool, dict) and (
|
|
486
522
|
(isinstance(kind, str) and _CLIENT_TOOL_TYPE(kind))
|
|
487
523
|
or (kind in (None, "custom") and "input_schema" in tool)
|
|
@@ -16,16 +16,19 @@ import logging
|
|
|
16
16
|
from abc import ABC, abstractmethod
|
|
17
17
|
from collections.abc import Callable, Iterator, Mapping
|
|
18
18
|
from typing import ClassVar, Generic, TypeVar
|
|
19
|
+
from urllib.parse import urlsplit
|
|
19
20
|
|
|
20
|
-
from pydantic import BaseModel
|
|
21
|
+
from pydantic import AnyHttpUrl, BaseModel, TypeAdapter, ValidationError
|
|
21
22
|
from pydantic_core import from_json
|
|
22
23
|
|
|
24
|
+
from verifiers.v1.configs.runtime import NetworkPolicyConfig, network_rule_matches
|
|
23
25
|
from verifiers.v1.types import Request, Response, Sampling, SamplingConfig
|
|
24
26
|
|
|
25
27
|
ReqT = TypeVar("ReqT")
|
|
26
28
|
RespT = TypeVar("RespT", bound=BaseModel)
|
|
27
29
|
|
|
28
30
|
logger = logging.getLogger(__name__)
|
|
31
|
+
HTTP_URL_ADAPTER = TypeAdapter(AnyHttpUrl)
|
|
29
32
|
|
|
30
33
|
PROVIDER_CAPABILITY_POLICY_CODE = "provider_capability_unavailable"
|
|
31
34
|
CAPABILITY_NOTICE = (
|
|
@@ -35,9 +38,83 @@ CAPABILITY_NOTICE = (
|
|
|
35
38
|
)
|
|
36
39
|
|
|
37
40
|
|
|
38
|
-
def blocked_url(value: str) -> bool:
|
|
39
|
-
"""Whether a provider-resolved resource is
|
|
40
|
-
|
|
41
|
+
def blocked_url(value: str, policy: NetworkPolicyConfig) -> bool:
|
|
42
|
+
"""Whether a provider-resolved resource is neither inline nor policy-permitted."""
|
|
43
|
+
if value.lower().startswith("data:"):
|
|
44
|
+
return False
|
|
45
|
+
try:
|
|
46
|
+
url = HTTP_URL_ADAPTER.validate_python(value)
|
|
47
|
+
except ValidationError:
|
|
48
|
+
return True
|
|
49
|
+
host = url.host.lower().rstrip(".").strip("[]")
|
|
50
|
+
return any(
|
|
51
|
+
network_rule_matches(rule, url.scheme, host, url.port) for rule in policy.block
|
|
52
|
+
) or not any(
|
|
53
|
+
network_rule_matches(rule, url.scheme, host, url.port) for rule in policy.allow
|
|
54
|
+
)
|
|
55
|
+
|
|
56
|
+
|
|
57
|
+
def provider_allowed_domains(
|
|
58
|
+
policy: NetworkPolicyConfig, requested: object = None
|
|
59
|
+
) -> list[str]:
|
|
60
|
+
"""Translate a network policy to provider domain-filter semantics without widening it."""
|
|
61
|
+
if policy.block or not policy.allow or "*" in policy.allow:
|
|
62
|
+
return []
|
|
63
|
+
domains = []
|
|
64
|
+
for rule in policy.allow:
|
|
65
|
+
try:
|
|
66
|
+
url = urlsplit(rule if "://" in rule else f"//{rule}")
|
|
67
|
+
port = url.port
|
|
68
|
+
except ValueError:
|
|
69
|
+
return []
|
|
70
|
+
host = (url.hostname or "").lower().rstrip(".")
|
|
71
|
+
domain = host.removeprefix("*.")
|
|
72
|
+
if (
|
|
73
|
+
url.scheme
|
|
74
|
+
or port is not None
|
|
75
|
+
or not host.startswith("*.")
|
|
76
|
+
or not domain
|
|
77
|
+
or "*" in domain
|
|
78
|
+
or not domain.isascii()
|
|
79
|
+
):
|
|
80
|
+
return []
|
|
81
|
+
domains.append(domain)
|
|
82
|
+
domains = list(dict.fromkeys(domains))
|
|
83
|
+
if requested is None:
|
|
84
|
+
return domains
|
|
85
|
+
if not isinstance(requested, list):
|
|
86
|
+
return []
|
|
87
|
+
requested_domains = []
|
|
88
|
+
for domain in requested:
|
|
89
|
+
if not isinstance(domain, str):
|
|
90
|
+
return []
|
|
91
|
+
try:
|
|
92
|
+
url = urlsplit(domain if "://" in domain else f"//{domain}")
|
|
93
|
+
port = url.port
|
|
94
|
+
except ValueError:
|
|
95
|
+
return []
|
|
96
|
+
host = (url.hostname or "").lower().rstrip(".")
|
|
97
|
+
if (
|
|
98
|
+
url.scheme
|
|
99
|
+
or port is not None
|
|
100
|
+
or url.username is not None
|
|
101
|
+
or url.path
|
|
102
|
+
or url.query
|
|
103
|
+
or url.fragment
|
|
104
|
+
or not host
|
|
105
|
+
or "*" in host
|
|
106
|
+
or not host.isascii()
|
|
107
|
+
):
|
|
108
|
+
return []
|
|
109
|
+
requested_domains.append(host)
|
|
110
|
+
intersection = []
|
|
111
|
+
for allowed in domains:
|
|
112
|
+
for requested_domain in requested_domains:
|
|
113
|
+
if allowed == requested_domain or allowed.endswith(f".{requested_domain}"):
|
|
114
|
+
intersection.append(allowed)
|
|
115
|
+
elif requested_domain.endswith(f".{allowed}"):
|
|
116
|
+
intersection.append(requested_domain)
|
|
117
|
+
return list(dict.fromkeys(intersection))
|
|
41
118
|
|
|
42
119
|
|
|
43
120
|
def append_user_notice(
|
|
@@ -187,7 +264,9 @@ class Dialect(ABC, Generic[ReqT, RespT]):
|
|
|
187
264
|
return {"error": {"message": message, "type": "invalid_request_error"}}
|
|
188
265
|
|
|
189
266
|
@abstractmethod
|
|
190
|
-
def mediate_external_capabilities(
|
|
267
|
+
def mediate_external_capabilities(
|
|
268
|
+
self, body: ReqT, policy: NetworkPolicyConfig
|
|
269
|
+
) -> tuple[ReqT, list[str]]:
|
|
191
270
|
"""Remove provider-side capabilities during restricted execution. Implementations add
|
|
192
271
|
the same policy context on every call because the agent does not retain injected request
|
|
193
272
|
content. Returned paths never contain request values."""
|
|
@@ -17,6 +17,7 @@ from urllib.parse import urlsplit
|
|
|
17
17
|
from openai.types.chat import ChatCompletion
|
|
18
18
|
from openai.types.chat.completion_create_params import CompletionCreateParams
|
|
19
19
|
|
|
20
|
+
from verifiers.v1.configs.runtime import NetworkPolicyConfig
|
|
20
21
|
from verifiers.v1.dialects.base import (
|
|
21
22
|
Dialect,
|
|
22
23
|
StreamParser,
|
|
@@ -356,7 +357,7 @@ class ChatDialect(Dialect[CompletionCreateParams, ChatCompletion]):
|
|
|
356
357
|
response_type = ModdedChatCompletion
|
|
357
358
|
|
|
358
359
|
def mediate_external_capabilities(
|
|
359
|
-
self, body: CompletionCreateParams
|
|
360
|
+
self, body: CompletionCreateParams, policy: NetworkPolicyConfig
|
|
360
361
|
) -> tuple[CompletionCreateParams, list[str]]:
|
|
361
362
|
mediated = body
|
|
362
363
|
capabilities: list[str] = []
|
|
@@ -446,7 +447,7 @@ class ChatDialect(Dialect[CompletionCreateParams, ChatCompletion]):
|
|
|
446
447
|
elif kind == "image_url":
|
|
447
448
|
image = part.get("image_url") or {}
|
|
448
449
|
url = image.get("url") if isinstance(image, dict) else image
|
|
449
|
-
if not isinstance(url, str) or blocked_url(url):
|
|
450
|
+
if not isinstance(url, str) or blocked_url(url, policy):
|
|
450
451
|
capability = f"{path}.image_url.url"
|
|
451
452
|
elif kind == "file":
|
|
452
453
|
file = part.get("file")
|
|
@@ -465,7 +466,7 @@ class ChatDialect(Dialect[CompletionCreateParams, ChatCompletion]):
|
|
|
465
466
|
capability = f"{path}.file.file_data"
|
|
466
467
|
else:
|
|
467
468
|
if (parsed.scheme or parsed.netloc) and blocked_url(
|
|
468
|
-
file_data
|
|
469
|
+
file_data, policy
|
|
469
470
|
):
|
|
470
471
|
capability = f"{path}.file.file_data"
|
|
471
472
|
if capability is None:
|