verifiers 0.2.2.dev72__tar.gz → 0.2.2.dev73__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.dev72 → verifiers-0.2.2.dev73}/PKG-INFO +1 -1
- {verifiers-0.2.2.dev72 → verifiers-0.2.2.dev73}/tests/v1/conftest.py +9 -12
- {verifiers-0.2.2.dev72 → verifiers-0.2.2.dev73}/tests/v1/test_e2e.py +1 -1
- {verifiers-0.2.2.dev72 → verifiers-0.2.2.dev73}/verifiers/v1/agent.py +11 -27
- {verifiers-0.2.2.dev72 → verifiers-0.2.2.dev73}/verifiers/v1/cli/eval/runner.py +4 -4
- {verifiers-0.2.2.dev72 → verifiers-0.2.2.dev73}/verifiers/v1/clients/__init__.py +4 -5
- verifiers-0.2.2.dev73/verifiers/v1/clients/base.py +40 -0
- {verifiers-0.2.2.dev72 → verifiers-0.2.2.dev73}/verifiers/v1/clients/client.py +23 -18
- {verifiers-0.2.2.dev72 → verifiers-0.2.2.dev73}/verifiers/v1/clients/eval.py +19 -42
- {verifiers-0.2.2.dev72 → verifiers-0.2.2.dev73}/verifiers/v1/clients/train.py +205 -93
- verifiers-0.2.2.dev72/verifiers/v1/clients/config.py → verifiers-0.2.2.dev73/verifiers/v1/configs/client.py +13 -37
- {verifiers-0.2.2.dev72 → verifiers-0.2.2.dev73}/verifiers/v1/env.py +2 -17
- {verifiers-0.2.2.dev72 → verifiers-0.2.2.dev73}/verifiers/v1/gepa/runner.py +5 -8
- {verifiers-0.2.2.dev72 → verifiers-0.2.2.dev73}/verifiers/v1/harnesses/claude_code/harness.py +0 -3
- {verifiers-0.2.2.dev72 → verifiers-0.2.2.dev73}/verifiers/v1/interception/server.py +3 -3
- {verifiers-0.2.2.dev72 → verifiers-0.2.2.dev73}/verifiers/v1/judge.py +1 -1
- {verifiers-0.2.2.dev72 → verifiers-0.2.2.dev73}/verifiers/v1/legacy.py +9 -2
- {verifiers-0.2.2.dev72 → verifiers-0.2.2.dev73}/verifiers/v1/rollout.py +13 -4
- {verifiers-0.2.2.dev72 → verifiers-0.2.2.dev73}/verifiers/v1/serve/client.py +1 -1
- {verifiers-0.2.2.dev72 → verifiers-0.2.2.dev73}/verifiers/v1/serve/server.py +6 -21
- {verifiers-0.2.2.dev72 → verifiers-0.2.2.dev73}/verifiers/v1/serve/types.py +1 -1
- {verifiers-0.2.2.dev72 → verifiers-0.2.2.dev73}/verifiers/v1/session.py +2 -1
- {verifiers-0.2.2.dev72 → verifiers-0.2.2.dev73}/.gitignore +0 -0
- {verifiers-0.2.2.dev72 → verifiers-0.2.2.dev73}/LICENSE +0 -0
- {verifiers-0.2.2.dev72 → verifiers-0.2.2.dev73}/README.md +0 -0
- {verifiers-0.2.2.dev72 → verifiers-0.2.2.dev73}/pyproject.toml +0 -0
- {verifiers-0.2.2.dev72 → verifiers-0.2.2.dev73}/tests/__init__.py +0 -0
- {verifiers-0.2.2.dev72 → verifiers-0.2.2.dev73}/tests/conftest.py +0 -0
- {verifiers-0.2.2.dev72 → verifiers-0.2.2.dev73}/tests/test_browser_env.py +0 -0
- {verifiers-0.2.2.dev72 → verifiers-0.2.2.dev73}/tests/test_build_script.py +0 -0
- {verifiers-0.2.2.dev72 → verifiers-0.2.2.dev73}/tests/test_cli_agent_env.py +0 -0
- {verifiers-0.2.2.dev72 → verifiers-0.2.2.dev73}/tests/test_client_auth_errors.py +0 -0
- {verifiers-0.2.2.dev72 → verifiers-0.2.2.dev73}/tests/test_client_config.py +0 -0
- {verifiers-0.2.2.dev72 → verifiers-0.2.2.dev73}/tests/test_client_multimodal_types.py +0 -0
- {verifiers-0.2.2.dev72 → verifiers-0.2.2.dev73}/tests/test_composable_env.py +0 -0
- {verifiers-0.2.2.dev72 → verifiers-0.2.2.dev73}/tests/test_context_token_metrics.py +0 -0
- {verifiers-0.2.2.dev72 → verifiers-0.2.2.dev73}/tests/test_decorator_ranks.py +0 -0
- {verifiers-0.2.2.dev72 → verifiers-0.2.2.dev73}/tests/test_endpoint_registry.py +0 -0
- {verifiers-0.2.2.dev72 → verifiers-0.2.2.dev73}/tests/test_env_group.py +0 -0
- {verifiers-0.2.2.dev72 → verifiers-0.2.2.dev73}/tests/test_env_server.py +0 -0
- {verifiers-0.2.2.dev72 → verifiers-0.2.2.dev73}/tests/test_environment.py +0 -0
- {verifiers-0.2.2.dev72 → verifiers-0.2.2.dev73}/tests/test_environment_extra.py +0 -0
- {verifiers-0.2.2.dev72 → verifiers-0.2.2.dev73}/tests/test_error_chain.py +0 -0
- {verifiers-0.2.2.dev72 → verifiers-0.2.2.dev73}/tests/test_eval_display.py +0 -0
- {verifiers-0.2.2.dev72 → verifiers-0.2.2.dev73}/tests/test_eval_utils.py +0 -0
- {verifiers-0.2.2.dev72 → verifiers-0.2.2.dev73}/tests/test_gepa_cli.py +0 -0
- {verifiers-0.2.2.dev72 → verifiers-0.2.2.dev73}/tests/test_gepa_utils.py +0 -0
- {verifiers-0.2.2.dev72 → verifiers-0.2.2.dev73}/tests/test_gym_env.py +0 -0
- {verifiers-0.2.2.dev72 → verifiers-0.2.2.dev73}/tests/test_harbor_env_mcp.py +0 -0
- {verifiers-0.2.2.dev72 → verifiers-0.2.2.dev73}/tests/test_imports.py +0 -0
- {verifiers-0.2.2.dev72 → verifiers-0.2.2.dev73}/tests/test_init_script.py +0 -0
- {verifiers-0.2.2.dev72 → verifiers-0.2.2.dev73}/tests/test_install_utils.py +0 -0
- {verifiers-0.2.2.dev72 → verifiers-0.2.2.dev73}/tests/test_interception_utils.py +0 -0
- {verifiers-0.2.2.dev72 → verifiers-0.2.2.dev73}/tests/test_logging.py +0 -0
- {verifiers-0.2.2.dev72 → verifiers-0.2.2.dev73}/tests/test_math_rubric.py +0 -0
- {verifiers-0.2.2.dev72 → verifiers-0.2.2.dev73}/tests/test_maybe_think_parser.py +0 -0
- {verifiers-0.2.2.dev72 → verifiers-0.2.2.dev73}/tests/test_message_utils.py +0 -0
- {verifiers-0.2.2.dev72 → verifiers-0.2.2.dev73}/tests/test_message_utils_multimodal.py +0 -0
- {verifiers-0.2.2.dev72 → verifiers-0.2.2.dev73}/tests/test_multiturn_env.py +0 -0
- {verifiers-0.2.2.dev72 → verifiers-0.2.2.dev73}/tests/test_nemorl_client.py +0 -0
- {verifiers-0.2.2.dev72 → verifiers-0.2.2.dev73}/tests/test_openai_chat_completions_token_client.py +0 -0
- {verifiers-0.2.2.dev72 → verifiers-0.2.2.dev73}/tests/test_openai_responses_client.py +0 -0
- {verifiers-0.2.2.dev72 → verifiers-0.2.2.dev73}/tests/test_opencode_rlm_env.py +0 -0
- {verifiers-0.2.2.dev72 → verifiers-0.2.2.dev73}/tests/test_openenv_client.py +0 -0
- {verifiers-0.2.2.dev72 → verifiers-0.2.2.dev73}/tests/test_parser.py +0 -0
- {verifiers-0.2.2.dev72 → verifiers-0.2.2.dev73}/tests/test_path_utils.py +0 -0
- {verifiers-0.2.2.dev72 → verifiers-0.2.2.dev73}/tests/test_per_turn_timing.py +0 -0
- {verifiers-0.2.2.dev72 → verifiers-0.2.2.dev73}/tests/test_pricing_utils.py +0 -0
- {verifiers-0.2.2.dev72 → verifiers-0.2.2.dev73}/tests/test_prime_plugin.py +0 -0
- {verifiers-0.2.2.dev72 → verifiers-0.2.2.dev73}/tests/test_renderer_client.py +0 -0
- {verifiers-0.2.2.dev72 → verifiers-0.2.2.dev73}/tests/test_renderer_e2e.py +0 -0
- {verifiers-0.2.2.dev72 → verifiers-0.2.2.dev73}/tests/test_rlm_composable_env.py +0 -0
- {verifiers-0.2.2.dev72 → verifiers-0.2.2.dev73}/tests/test_rubric.py +0 -0
- {verifiers-0.2.2.dev72 → verifiers-0.2.2.dev73}/tests/test_rubric_group.py +0 -0
- {verifiers-0.2.2.dev72 → verifiers-0.2.2.dev73}/tests/test_sandbox_debug_env.py +0 -0
- {verifiers-0.2.2.dev72 → verifiers-0.2.2.dev73}/tests/test_sandbox_env.py +0 -0
- {verifiers-0.2.2.dev72 → verifiers-0.2.2.dev73}/tests/test_sandbox_mixin.py +0 -0
- {verifiers-0.2.2.dev72 → verifiers-0.2.2.dev73}/tests/test_save_utils.py +0 -0
- {verifiers-0.2.2.dev72 → verifiers-0.2.2.dev73}/tests/test_setup_script.py +0 -0
- {verifiers-0.2.2.dev72 → verifiers-0.2.2.dev73}/tests/test_singleturn_env.py +0 -0
- {verifiers-0.2.2.dev72 → verifiers-0.2.2.dev73}/tests/test_stateful_tool_env.py +0 -0
- {verifiers-0.2.2.dev72 → verifiers-0.2.2.dev73}/tests/test_think_parser.py +0 -0
- {verifiers-0.2.2.dev72 → verifiers-0.2.2.dev73}/tests/test_tool_env.py +0 -0
- {verifiers-0.2.2.dev72 → verifiers-0.2.2.dev73}/tests/test_tool_utils.py +0 -0
- {verifiers-0.2.2.dev72 → verifiers-0.2.2.dev73}/tests/test_trajectory_processing.py +0 -0
- {verifiers-0.2.2.dev72 → verifiers-0.2.2.dev73}/tests/test_tui_info_formatting.py +0 -0
- {verifiers-0.2.2.dev72 → verifiers-0.2.2.dev73}/tests/test_types.py +0 -0
- {verifiers-0.2.2.dev72 → verifiers-0.2.2.dev73}/tests/test_xml_parser.py +0 -0
- {verifiers-0.2.2.dev72 → verifiers-0.2.2.dev73}/tests/v1/fixtures/counter_tool_v1.py +0 -0
- {verifiers-0.2.2.dev72 → verifiers-0.2.2.dev73}/tests/v1/fixtures/duet_v1.py +0 -0
- {verifiers-0.2.2.dev72 → verifiers-0.2.2.dev73}/tests/v1/fixtures/echo_acp_resume_v1.py +0 -0
- {verifiers-0.2.2.dev72 → verifiers-0.2.2.dev73}/tests/v1/fixtures/echo_agentic_v1.py +0 -0
- {verifiers-0.2.2.dev72 → verifiers-0.2.2.dev73}/tests/v1/fixtures/echo_multi_v0.py +0 -0
- {verifiers-0.2.2.dev72 → verifiers-0.2.2.dev73}/tests/v1/fixtures/echo_tool_v1.py +0 -0
- {verifiers-0.2.2.dev72 → verifiers-0.2.2.dev73}/tests/v1/fixtures/echo_user_sim_v1.py +0 -0
- {verifiers-0.2.2.dev72 → verifiers-0.2.2.dev73}/tests/v1/fixtures/echo_v0.py +0 -0
- {verifiers-0.2.2.dev72 → verifiers-0.2.2.dev73}/tests/v1/fixtures/echo_v1.py +0 -0
- {verifiers-0.2.2.dev72 → verifiers-0.2.2.dev73}/tests/v1/fixtures/pyproject.toml +0 -0
- {verifiers-0.2.2.dev72 → verifiers-0.2.2.dev73}/tests/v1/fixtures/tool_response_image_v1.py +0 -0
- {verifiers-0.2.2.dev72 → verifiers-0.2.2.dev73}/tests/v1/test_color_codeword_tasks.py +0 -0
- {verifiers-0.2.2.dev72 → verifiers-0.2.2.dev73}/tests/v1/test_configs.py +0 -0
- {verifiers-0.2.2.dev72 → verifiers-0.2.2.dev73}/tests/v1/test_envs.py +0 -0
- {verifiers-0.2.2.dev72 → verifiers-0.2.2.dev73}/tests/v1/test_graph.py +0 -0
- {verifiers-0.2.2.dev72 → verifiers-0.2.2.dev73}/tests/v1/test_judges.py +0 -0
- {verifiers-0.2.2.dev72 → verifiers-0.2.2.dev73}/tests/v1/test_legacy.py +0 -0
- {verifiers-0.2.2.dev72 → verifiers-0.2.2.dev73}/tests/v1/test_scoring.py +0 -0
- {verifiers-0.2.2.dev72 → verifiers-0.2.2.dev73}/tests/v1/test_taskset.py +0 -0
- {verifiers-0.2.2.dev72 → verifiers-0.2.2.dev73}/tests/v1/test_trace.py +0 -0
- {verifiers-0.2.2.dev72 → verifiers-0.2.2.dev73}/verifiers/__init__.py +0 -0
- {verifiers-0.2.2.dev72 → verifiers-0.2.2.dev73}/verifiers/cli/__init__.py +0 -0
- {verifiers-0.2.2.dev72 → verifiers-0.2.2.dev73}/verifiers/cli/commands/__init__.py +0 -0
- {verifiers-0.2.2.dev72 → verifiers-0.2.2.dev73}/verifiers/cli/commands/build.py +0 -0
- {verifiers-0.2.2.dev72 → verifiers-0.2.2.dev73}/verifiers/cli/commands/eval.py +0 -0
- {verifiers-0.2.2.dev72 → verifiers-0.2.2.dev73}/verifiers/cli/commands/gepa.py +0 -0
- {verifiers-0.2.2.dev72 → verifiers-0.2.2.dev73}/verifiers/cli/commands/init.py +0 -0
- {verifiers-0.2.2.dev72 → verifiers-0.2.2.dev73}/verifiers/cli/commands/install.py +0 -0
- {verifiers-0.2.2.dev72 → verifiers-0.2.2.dev73}/verifiers/cli/commands/setup.py +0 -0
- {verifiers-0.2.2.dev72 → verifiers-0.2.2.dev73}/verifiers/cli/plugins/__init__.py +0 -0
- {verifiers-0.2.2.dev72 → verifiers-0.2.2.dev73}/verifiers/cli/plugins/prime.py +0 -0
- {verifiers-0.2.2.dev72 → verifiers-0.2.2.dev73}/verifiers/cli/tui.py +0 -0
- {verifiers-0.2.2.dev72 → verifiers-0.2.2.dev73}/verifiers/clients/__init__.py +0 -0
- {verifiers-0.2.2.dev72 → verifiers-0.2.2.dev73}/verifiers/clients/anthropic_messages_client.py +0 -0
- {verifiers-0.2.2.dev72 → verifiers-0.2.2.dev73}/verifiers/clients/client.py +0 -0
- {verifiers-0.2.2.dev72 → verifiers-0.2.2.dev73}/verifiers/clients/nemorl_chat_completions_client.py +0 -0
- {verifiers-0.2.2.dev72 → verifiers-0.2.2.dev73}/verifiers/clients/openai_chat_completions_client.py +0 -0
- {verifiers-0.2.2.dev72 → verifiers-0.2.2.dev73}/verifiers/clients/openai_chat_completions_token_client.py +0 -0
- {verifiers-0.2.2.dev72 → verifiers-0.2.2.dev73}/verifiers/clients/openai_completions_client.py +0 -0
- {verifiers-0.2.2.dev72 → verifiers-0.2.2.dev73}/verifiers/clients/openai_responses_client.py +0 -0
- {verifiers-0.2.2.dev72 → verifiers-0.2.2.dev73}/verifiers/clients/renderer_client.py +0 -0
- {verifiers-0.2.2.dev72 → verifiers-0.2.2.dev73}/verifiers/decorators.py +0 -0
- {verifiers-0.2.2.dev72 → verifiers-0.2.2.dev73}/verifiers/envs/__init__.py +0 -0
- {verifiers-0.2.2.dev72 → verifiers-0.2.2.dev73}/verifiers/envs/env_group.py +0 -0
- {verifiers-0.2.2.dev72 → verifiers-0.2.2.dev73}/verifiers/envs/environment.py +0 -0
- {verifiers-0.2.2.dev72 → verifiers-0.2.2.dev73}/verifiers/envs/experimental/README.md +0 -0
- {verifiers-0.2.2.dev72 → verifiers-0.2.2.dev73}/verifiers/envs/experimental/__init__.py +0 -0
- {verifiers-0.2.2.dev72 → verifiers-0.2.2.dev73}/verifiers/envs/experimental/cli_agent_env.py +0 -0
- {verifiers-0.2.2.dev72 → verifiers-0.2.2.dev73}/verifiers/envs/experimental/composable/README.md +0 -0
- {verifiers-0.2.2.dev72 → verifiers-0.2.2.dev73}/verifiers/envs/experimental/composable/__init__.py +0 -0
- {verifiers-0.2.2.dev72 → verifiers-0.2.2.dev73}/verifiers/envs/experimental/composable/_filter.py +0 -0
- {verifiers-0.2.2.dev72 → verifiers-0.2.2.dev73}/verifiers/envs/experimental/composable/composable_env.py +0 -0
- {verifiers-0.2.2.dev72 → verifiers-0.2.2.dev73}/verifiers/envs/experimental/composable/harness.py +0 -0
- {verifiers-0.2.2.dev72 → verifiers-0.2.2.dev73}/verifiers/envs/experimental/composable/harnesses/__init__.py +0 -0
- {verifiers-0.2.2.dev72 → verifiers-0.2.2.dev73}/verifiers/envs/experimental/composable/harnesses/mini_swe_agent.py +0 -0
- {verifiers-0.2.2.dev72 → verifiers-0.2.2.dev73}/verifiers/envs/experimental/composable/harnesses/opencode.py +0 -0
- {verifiers-0.2.2.dev72 → verifiers-0.2.2.dev73}/verifiers/envs/experimental/composable/harnesses/prompt.txt +0 -0
- {verifiers-0.2.2.dev72 → verifiers-0.2.2.dev73}/verifiers/envs/experimental/composable/harnesses/rlm.py +0 -0
- {verifiers-0.2.2.dev72 → verifiers-0.2.2.dev73}/verifiers/envs/experimental/composable/sandbox_debug_env.py +0 -0
- {verifiers-0.2.2.dev72 → verifiers-0.2.2.dev73}/verifiers/envs/experimental/composable/swe_debug_env.py +0 -0
- {verifiers-0.2.2.dev72 → verifiers-0.2.2.dev73}/verifiers/envs/experimental/composable/task.py +0 -0
- {verifiers-0.2.2.dev72 → verifiers-0.2.2.dev73}/verifiers/envs/experimental/composable/tasksets/__init__.py +0 -0
- {verifiers-0.2.2.dev72 → verifiers-0.2.2.dev73}/verifiers/envs/experimental/composable/tasksets/cp/__init__.py +0 -0
- {verifiers-0.2.2.dev72 → verifiers-0.2.2.dev73}/verifiers/envs/experimental/composable/tasksets/cp/cp_task.py +0 -0
- {verifiers-0.2.2.dev72 → verifiers-0.2.2.dev73}/verifiers/envs/experimental/composable/tasksets/cp/test_utils.py +0 -0
- {verifiers-0.2.2.dev72 → verifiers-0.2.2.dev73}/verifiers/envs/experimental/composable/tasksets/harbor/__init__.py +0 -0
- {verifiers-0.2.2.dev72 → verifiers-0.2.2.dev73}/verifiers/envs/experimental/composable/tasksets/harbor/cli_gym.py +0 -0
- {verifiers-0.2.2.dev72 → verifiers-0.2.2.dev73}/verifiers/envs/experimental/composable/tasksets/harbor/harbor.py +0 -0
- {verifiers-0.2.2.dev72 → verifiers-0.2.2.dev73}/verifiers/envs/experimental/composable/tasksets/harbor/terminal_lego.py +0 -0
- {verifiers-0.2.2.dev72 → verifiers-0.2.2.dev73}/verifiers/envs/experimental/composable/tasksets/math/__init__.py +0 -0
- {verifiers-0.2.2.dev72 → verifiers-0.2.2.dev73}/verifiers/envs/experimental/composable/tasksets/math/math_task.py +0 -0
- {verifiers-0.2.2.dev72 → verifiers-0.2.2.dev73}/verifiers/envs/experimental/composable/tasksets/swe/README.md +0 -0
- {verifiers-0.2.2.dev72 → verifiers-0.2.2.dev73}/verifiers/envs/experimental/composable/tasksets/swe/__init__.py +0 -0
- {verifiers-0.2.2.dev72 → verifiers-0.2.2.dev73}/verifiers/envs/experimental/composable/tasksets/swe/multi_swe/__init__.py +0 -0
- {verifiers-0.2.2.dev72 → verifiers-0.2.2.dev73}/verifiers/envs/experimental/composable/tasksets/swe/multi_swe/extract_fix_patch.sh +0 -0
- {verifiers-0.2.2.dev72 → verifiers-0.2.2.dev73}/verifiers/envs/experimental/composable/tasksets/swe/multi_swe/taskset.py +0 -0
- {verifiers-0.2.2.dev72 → verifiers-0.2.2.dev73}/verifiers/envs/experimental/composable/tasksets/swe/openswe/__init__.py +0 -0
- {verifiers-0.2.2.dev72 → verifiers-0.2.2.dev73}/verifiers/envs/experimental/composable/tasksets/swe/openswe/taskset.py +0 -0
- {verifiers-0.2.2.dev72 → verifiers-0.2.2.dev73}/verifiers/envs/experimental/composable/tasksets/swe/r2e_gym/__init__.py +0 -0
- {verifiers-0.2.2.dev72 → verifiers-0.2.2.dev73}/verifiers/envs/experimental/composable/tasksets/swe/r2e_gym/log_parser.py +0 -0
- {verifiers-0.2.2.dev72 → verifiers-0.2.2.dev73}/verifiers/envs/experimental/composable/tasksets/swe/r2e_gym/taskset.py +0 -0
- {verifiers-0.2.2.dev72 → verifiers-0.2.2.dev73}/verifiers/envs/experimental/composable/tasksets/swe/scale_swe/__init__.py +0 -0
- {verifiers-0.2.2.dev72 → verifiers-0.2.2.dev73}/verifiers/envs/experimental/composable/tasksets/swe/scale_swe/taskset.py +0 -0
- {verifiers-0.2.2.dev72 → verifiers-0.2.2.dev73}/verifiers/envs/experimental/composable/tasksets/swe/shared/__init__.py +0 -0
- {verifiers-0.2.2.dev72 → verifiers-0.2.2.dev73}/verifiers/envs/experimental/composable/tasksets/swe/shared/test_patch.py +0 -0
- {verifiers-0.2.2.dev72 → verifiers-0.2.2.dev73}/verifiers/envs/experimental/composable/tasksets/swe/swe_bench/__init__.py +0 -0
- {verifiers-0.2.2.dev72 → verifiers-0.2.2.dev73}/verifiers/envs/experimental/composable/tasksets/swe/swe_bench/taskset.py +0 -0
- {verifiers-0.2.2.dev72 → verifiers-0.2.2.dev73}/verifiers/envs/experimental/composable/tasksets/swe/swe_lego/__init__.py +0 -0
- {verifiers-0.2.2.dev72 → verifiers-0.2.2.dev73}/verifiers/envs/experimental/composable/tasksets/swe/swe_lego/taskset.py +0 -0
- {verifiers-0.2.2.dev72 → verifiers-0.2.2.dev73}/verifiers/envs/experimental/composable/tasksets/swe/swe_rebench_v2/__init__.py +0 -0
- {verifiers-0.2.2.dev72 → verifiers-0.2.2.dev73}/verifiers/envs/experimental/composable/tasksets/swe/swe_rebench_v2/log_parsers.py +0 -0
- {verifiers-0.2.2.dev72 → verifiers-0.2.2.dev73}/verifiers/envs/experimental/composable/tasksets/swe/swe_rebench_v2/taskset.py +0 -0
- {verifiers-0.2.2.dev72 → verifiers-0.2.2.dev73}/verifiers/envs/experimental/composable/tasksets/swe/swe_smith/__init__.py +0 -0
- {verifiers-0.2.2.dev72 → verifiers-0.2.2.dev73}/verifiers/envs/experimental/composable/tasksets/swe/swe_smith/taskset.py +0 -0
- {verifiers-0.2.2.dev72 → verifiers-0.2.2.dev73}/verifiers/envs/experimental/composable/tasksets/swe/swe_tasksets.py +0 -0
- {verifiers-0.2.2.dev72 → verifiers-0.2.2.dev73}/verifiers/envs/experimental/gym_env.py +0 -0
- {verifiers-0.2.2.dev72 → verifiers-0.2.2.dev73}/verifiers/envs/experimental/harbor_env/__init__.py +0 -0
- {verifiers-0.2.2.dev72 → verifiers-0.2.2.dev73}/verifiers/envs/experimental/harbor_env/env.py +0 -0
- {verifiers-0.2.2.dev72 → verifiers-0.2.2.dev73}/verifiers/envs/experimental/harbor_env/mcp.py +0 -0
- {verifiers-0.2.2.dev72 → verifiers-0.2.2.dev73}/verifiers/envs/experimental/mcp_env.py +0 -0
- {verifiers-0.2.2.dev72 → verifiers-0.2.2.dev73}/verifiers/envs/experimental/opencode_env.py +0 -0
- {verifiers-0.2.2.dev72 → verifiers-0.2.2.dev73}/verifiers/envs/experimental/opencode_qa_env.py +0 -0
- {verifiers-0.2.2.dev72 → verifiers-0.2.2.dev73}/verifiers/envs/experimental/opencode_rlm_env.py +0 -0
- {verifiers-0.2.2.dev72 → verifiers-0.2.2.dev73}/verifiers/envs/experimental/sandbox_mixin.py +0 -0
- {verifiers-0.2.2.dev72 → verifiers-0.2.2.dev73}/verifiers/envs/experimental/utils/__init__.py +0 -0
- {verifiers-0.2.2.dev72 → verifiers-0.2.2.dev73}/verifiers/envs/experimental/utils/file_locks.py +0 -0
- {verifiers-0.2.2.dev72 → verifiers-0.2.2.dev73}/verifiers/envs/experimental/utils/git_checkout_cache.py +0 -0
- {verifiers-0.2.2.dev72 → verifiers-0.2.2.dev73}/verifiers/envs/integrations/README.md +0 -0
- {verifiers-0.2.2.dev72 → verifiers-0.2.2.dev73}/verifiers/envs/integrations/__init__.py +0 -0
- {verifiers-0.2.2.dev72 → verifiers-0.2.2.dev73}/verifiers/envs/integrations/browser_env/README.md +0 -0
- {verifiers-0.2.2.dev72 → verifiers-0.2.2.dev73}/verifiers/envs/integrations/browser_env/__init__.py +0 -0
- {verifiers-0.2.2.dev72 → verifiers-0.2.2.dev73}/verifiers/envs/integrations/browser_env/browser_env.py +0 -0
- {verifiers-0.2.2.dev72 → verifiers-0.2.2.dev73}/verifiers/envs/integrations/browser_env/modes/__init__.py +0 -0
- {verifiers-0.2.2.dev72 → verifiers-0.2.2.dev73}/verifiers/envs/integrations/browser_env/modes/base.py +0 -0
- {verifiers-0.2.2.dev72 → verifiers-0.2.2.dev73}/verifiers/envs/integrations/browser_env/modes/cua_mode.py +0 -0
- {verifiers-0.2.2.dev72 → verifiers-0.2.2.dev73}/verifiers/envs/integrations/browser_env/modes/dom_mode.py +0 -0
- {verifiers-0.2.2.dev72 → verifiers-0.2.2.dev73}/verifiers/envs/integrations/openenv_env.py +0 -0
- {verifiers-0.2.2.dev72 → verifiers-0.2.2.dev73}/verifiers/envs/integrations/reasoninggym_env.py +0 -0
- {verifiers-0.2.2.dev72 → verifiers-0.2.2.dev73}/verifiers/envs/integrations/textarena_env.py +0 -0
- {verifiers-0.2.2.dev72 → verifiers-0.2.2.dev73}/verifiers/envs/multiturn_env.py +0 -0
- {verifiers-0.2.2.dev72 → verifiers-0.2.2.dev73}/verifiers/envs/python_env.py +0 -0
- {verifiers-0.2.2.dev72 → verifiers-0.2.2.dev73}/verifiers/envs/sandbox_env.py +0 -0
- {verifiers-0.2.2.dev72 → verifiers-0.2.2.dev73}/verifiers/envs/singleturn_env.py +0 -0
- {verifiers-0.2.2.dev72 → verifiers-0.2.2.dev73}/verifiers/envs/stateful_tool_env.py +0 -0
- {verifiers-0.2.2.dev72 → verifiers-0.2.2.dev73}/verifiers/envs/tool_env.py +0 -0
- {verifiers-0.2.2.dev72 → verifiers-0.2.2.dev73}/verifiers/errors.py +0 -0
- {verifiers-0.2.2.dev72 → verifiers-0.2.2.dev73}/verifiers/gepa/__init__.py +0 -0
- {verifiers-0.2.2.dev72 → verifiers-0.2.2.dev73}/verifiers/gepa/adapter.py +0 -0
- {verifiers-0.2.2.dev72 → verifiers-0.2.2.dev73}/verifiers/gepa/config.py +0 -0
- {verifiers-0.2.2.dev72 → verifiers-0.2.2.dev73}/verifiers/gepa/display.py +0 -0
- {verifiers-0.2.2.dev72 → verifiers-0.2.2.dev73}/verifiers/gepa/gepa_utils.py +0 -0
- {verifiers-0.2.2.dev72 → verifiers-0.2.2.dev73}/verifiers/parsers/__init__.py +0 -0
- {verifiers-0.2.2.dev72 → verifiers-0.2.2.dev73}/verifiers/parsers/maybe_think_parser.py +0 -0
- {verifiers-0.2.2.dev72 → verifiers-0.2.2.dev73}/verifiers/parsers/parser.py +0 -0
- {verifiers-0.2.2.dev72 → verifiers-0.2.2.dev73}/verifiers/parsers/think_parser.py +0 -0
- {verifiers-0.2.2.dev72 → verifiers-0.2.2.dev73}/verifiers/parsers/xml_parser.py +0 -0
- {verifiers-0.2.2.dev72 → verifiers-0.2.2.dev73}/verifiers/rubrics/__init__.py +0 -0
- {verifiers-0.2.2.dev72 → verifiers-0.2.2.dev73}/verifiers/rubrics/experimental/hybrid_math_rubric.py +0 -0
- {verifiers-0.2.2.dev72 → verifiers-0.2.2.dev73}/verifiers/rubrics/judge_rubric.py +0 -0
- {verifiers-0.2.2.dev72 → verifiers-0.2.2.dev73}/verifiers/rubrics/math_rubric.py +0 -0
- {verifiers-0.2.2.dev72 → verifiers-0.2.2.dev73}/verifiers/rubrics/rubric.py +0 -0
- {verifiers-0.2.2.dev72 → verifiers-0.2.2.dev73}/verifiers/rubrics/rubric_group.py +0 -0
- {verifiers-0.2.2.dev72 → verifiers-0.2.2.dev73}/verifiers/scripts/__init__.py +0 -0
- {verifiers-0.2.2.dev72 → verifiers-0.2.2.dev73}/verifiers/scripts/build.py +0 -0
- {verifiers-0.2.2.dev72 → verifiers-0.2.2.dev73}/verifiers/scripts/eval.py +0 -0
- {verifiers-0.2.2.dev72 → verifiers-0.2.2.dev73}/verifiers/scripts/gepa.py +0 -0
- {verifiers-0.2.2.dev72 → verifiers-0.2.2.dev73}/verifiers/scripts/init.py +0 -0
- {verifiers-0.2.2.dev72 → verifiers-0.2.2.dev73}/verifiers/scripts/install.py +0 -0
- {verifiers-0.2.2.dev72 → verifiers-0.2.2.dev73}/verifiers/scripts/setup.py +0 -0
- {verifiers-0.2.2.dev72 → verifiers-0.2.2.dev73}/verifiers/scripts/tui.py +0 -0
- {verifiers-0.2.2.dev72 → verifiers-0.2.2.dev73}/verifiers/serve/__init__.py +0 -0
- {verifiers-0.2.2.dev72 → verifiers-0.2.2.dev73}/verifiers/serve/client/env_client.py +0 -0
- {verifiers-0.2.2.dev72 → verifiers-0.2.2.dev73}/verifiers/serve/client/zmq_env_client.py +0 -0
- {verifiers-0.2.2.dev72 → verifiers-0.2.2.dev73}/verifiers/serve/server/__init__.py +0 -0
- {verifiers-0.2.2.dev72 → verifiers-0.2.2.dev73}/verifiers/serve/server/env_router.py +0 -0
- {verifiers-0.2.2.dev72 → verifiers-0.2.2.dev73}/verifiers/serve/server/env_server.py +0 -0
- {verifiers-0.2.2.dev72 → verifiers-0.2.2.dev73}/verifiers/serve/server/env_worker.py +0 -0
- {verifiers-0.2.2.dev72 → verifiers-0.2.2.dev73}/verifiers/serve/server/zmq_env_server.py +0 -0
- {verifiers-0.2.2.dev72 → verifiers-0.2.2.dev73}/verifiers/serve/types.py +0 -0
- {verifiers-0.2.2.dev72 → verifiers-0.2.2.dev73}/verifiers/types.py +0 -0
- {verifiers-0.2.2.dev72 → verifiers-0.2.2.dev73}/verifiers/utils/__init__.py +0 -0
- {verifiers-0.2.2.dev72 → verifiers-0.2.2.dev73}/verifiers/utils/async_utils.py +0 -0
- {verifiers-0.2.2.dev72 → verifiers-0.2.2.dev73}/verifiers/utils/client_utils.py +0 -0
- {verifiers-0.2.2.dev72 → verifiers-0.2.2.dev73}/verifiers/utils/config_utils.py +0 -0
- {verifiers-0.2.2.dev72 → verifiers-0.2.2.dev73}/verifiers/utils/data_utils.py +0 -0
- {verifiers-0.2.2.dev72 → verifiers-0.2.2.dev73}/verifiers/utils/display_utils.py +0 -0
- {verifiers-0.2.2.dev72 → verifiers-0.2.2.dev73}/verifiers/utils/env_config_utils.py +0 -0
- {verifiers-0.2.2.dev72 → verifiers-0.2.2.dev73}/verifiers/utils/env_utils.py +0 -0
- {verifiers-0.2.2.dev72 → verifiers-0.2.2.dev73}/verifiers/utils/error_utils.py +0 -0
- {verifiers-0.2.2.dev72 → verifiers-0.2.2.dev73}/verifiers/utils/eval_display.py +0 -0
- {verifiers-0.2.2.dev72 → verifiers-0.2.2.dev73}/verifiers/utils/eval_utils.py +0 -0
- {verifiers-0.2.2.dev72 → verifiers-0.2.2.dev73}/verifiers/utils/heartbeat.py +0 -0
- {verifiers-0.2.2.dev72 → verifiers-0.2.2.dev73}/verifiers/utils/import_utils.py +0 -0
- {verifiers-0.2.2.dev72 → verifiers-0.2.2.dev73}/verifiers/utils/install_utils.py +0 -0
- {verifiers-0.2.2.dev72 → verifiers-0.2.2.dev73}/verifiers/utils/interception_utils.py +0 -0
- {verifiers-0.2.2.dev72 → verifiers-0.2.2.dev73}/verifiers/utils/logging_utils.py +0 -0
- {verifiers-0.2.2.dev72 → verifiers-0.2.2.dev73}/verifiers/utils/message_utils.py +0 -0
- {verifiers-0.2.2.dev72 → verifiers-0.2.2.dev73}/verifiers/utils/metric_utils.py +0 -0
- {verifiers-0.2.2.dev72 → verifiers-0.2.2.dev73}/verifiers/utils/path_utils.py +0 -0
- {verifiers-0.2.2.dev72 → verifiers-0.2.2.dev73}/verifiers/utils/pricing_utils.py +0 -0
- {verifiers-0.2.2.dev72 → verifiers-0.2.2.dev73}/verifiers/utils/process_utils.py +0 -0
- {verifiers-0.2.2.dev72 → verifiers-0.2.2.dev73}/verifiers/utils/response_utils.py +0 -0
- {verifiers-0.2.2.dev72 → verifiers-0.2.2.dev73}/verifiers/utils/save_utils.py +0 -0
- {verifiers-0.2.2.dev72 → verifiers-0.2.2.dev73}/verifiers/utils/serve_utils.py +0 -0
- {verifiers-0.2.2.dev72 → verifiers-0.2.2.dev73}/verifiers/utils/thread_utils.py +0 -0
- {verifiers-0.2.2.dev72 → verifiers-0.2.2.dev73}/verifiers/utils/threaded_sandbox_client.py +0 -0
- {verifiers-0.2.2.dev72 → verifiers-0.2.2.dev73}/verifiers/utils/tool_utils.py +0 -0
- {verifiers-0.2.2.dev72 → verifiers-0.2.2.dev73}/verifiers/utils/usage_utils.py +0 -0
- {verifiers-0.2.2.dev72 → verifiers-0.2.2.dev73}/verifiers/utils/version_utils.py +0 -0
- {verifiers-0.2.2.dev72 → verifiers-0.2.2.dev73}/verifiers/v1/__init__.py +0 -0
- {verifiers-0.2.2.dev72 → verifiers-0.2.2.dev73}/verifiers/v1/acp/__init__.py +0 -0
- {verifiers-0.2.2.dev72 → verifiers-0.2.2.dev73}/verifiers/v1/acp/_runner.py +0 -0
- {verifiers-0.2.2.dev72 → verifiers-0.2.2.dev73}/verifiers/v1/cli/__init__.py +0 -0
- {verifiers-0.2.2.dev72 → verifiers-0.2.2.dev73}/verifiers/v1/cli/dashboard/__init__.py +0 -0
- {verifiers-0.2.2.dev72 → verifiers-0.2.2.dev73}/verifiers/v1/cli/dashboard/base.py +0 -0
- {verifiers-0.2.2.dev72 → verifiers-0.2.2.dev73}/verifiers/v1/cli/dashboard/eval.py +0 -0
- {verifiers-0.2.2.dev72 → verifiers-0.2.2.dev73}/verifiers/v1/cli/dashboard/replay.py +0 -0
- {verifiers-0.2.2.dev72 → verifiers-0.2.2.dev73}/verifiers/v1/cli/dashboard/validate.py +0 -0
- {verifiers-0.2.2.dev72 → verifiers-0.2.2.dev73}/verifiers/v1/cli/debug.py +0 -0
- {verifiers-0.2.2.dev72 → verifiers-0.2.2.dev73}/verifiers/v1/cli/eval/__init__.py +0 -0
- {verifiers-0.2.2.dev72 → verifiers-0.2.2.dev73}/verifiers/v1/cli/eval/main.py +0 -0
- {verifiers-0.2.2.dev72 → verifiers-0.2.2.dev73}/verifiers/v1/cli/eval/resume.py +0 -0
- {verifiers-0.2.2.dev72 → verifiers-0.2.2.dev73}/verifiers/v1/cli/gepa.py +0 -0
- {verifiers-0.2.2.dev72 → verifiers-0.2.2.dev73}/verifiers/v1/cli/init.py +0 -0
- {verifiers-0.2.2.dev72 → verifiers-0.2.2.dev73}/verifiers/v1/cli/output.py +0 -0
- {verifiers-0.2.2.dev72 → verifiers-0.2.2.dev73}/verifiers/v1/cli/replay.py +0 -0
- {verifiers-0.2.2.dev72 → verifiers-0.2.2.dev73}/verifiers/v1/cli/resolve.py +0 -0
- {verifiers-0.2.2.dev72 → verifiers-0.2.2.dev73}/verifiers/v1/cli/serve.py +0 -0
- {verifiers-0.2.2.dev72 → verifiers-0.2.2.dev73}/verifiers/v1/cli/validate.py +0 -0
- {verifiers-0.2.2.dev72 → verifiers-0.2.2.dev73}/verifiers/v1/configs/__init__.py +0 -0
- {verifiers-0.2.2.dev72 → verifiers-0.2.2.dev73}/verifiers/v1/configs/agent.py +0 -0
- {verifiers-0.2.2.dev72 → verifiers-0.2.2.dev73}/verifiers/v1/configs/cli/__init__.py +0 -0
- {verifiers-0.2.2.dev72 → verifiers-0.2.2.dev73}/verifiers/v1/configs/cli/debug.py +0 -0
- {verifiers-0.2.2.dev72 → verifiers-0.2.2.dev73}/verifiers/v1/configs/cli/env.py +0 -0
- {verifiers-0.2.2.dev72 → verifiers-0.2.2.dev73}/verifiers/v1/configs/cli/eval.py +0 -0
- {verifiers-0.2.2.dev72 → verifiers-0.2.2.dev73}/verifiers/v1/configs/cli/init.py +0 -0
- {verifiers-0.2.2.dev72 → verifiers-0.2.2.dev73}/verifiers/v1/configs/cli/replay.py +0 -0
- {verifiers-0.2.2.dev72 → verifiers-0.2.2.dev73}/verifiers/v1/configs/cli/serve.py +0 -0
- {verifiers-0.2.2.dev72 → verifiers-0.2.2.dev73}/verifiers/v1/configs/cli/validate.py +0 -0
- {verifiers-0.2.2.dev72 → verifiers-0.2.2.dev73}/verifiers/v1/configs/env.py +0 -0
- {verifiers-0.2.2.dev72 → verifiers-0.2.2.dev73}/verifiers/v1/configs/harness.py +0 -0
- {verifiers-0.2.2.dev72 → verifiers-0.2.2.dev73}/verifiers/v1/configs/judge.py +0 -0
- {verifiers-0.2.2.dev72 → verifiers-0.2.2.dev73}/verifiers/v1/configs/legacy.py +0 -0
- {verifiers-0.2.2.dev72 → verifiers-0.2.2.dev73}/verifiers/v1/configs/retries.py +0 -0
- {verifiers-0.2.2.dev72 → verifiers-0.2.2.dev73}/verifiers/v1/configs/serve.py +0 -0
- {verifiers-0.2.2.dev72 → verifiers-0.2.2.dev73}/verifiers/v1/configs/task.py +0 -0
- {verifiers-0.2.2.dev72 → verifiers-0.2.2.dev73}/verifiers/v1/configs/taskset.py +0 -0
- {verifiers-0.2.2.dev72 → verifiers-0.2.2.dev73}/verifiers/v1/dialects/__init__.py +0 -0
- {verifiers-0.2.2.dev72 → verifiers-0.2.2.dev73}/verifiers/v1/dialects/anthropic.py +0 -0
- {verifiers-0.2.2.dev72 → verifiers-0.2.2.dev73}/verifiers/v1/dialects/base.py +0 -0
- {verifiers-0.2.2.dev72 → verifiers-0.2.2.dev73}/verifiers/v1/dialects/chat.py +0 -0
- {verifiers-0.2.2.dev72 → verifiers-0.2.2.dev73}/verifiers/v1/dialects/responses.py +0 -0
- {verifiers-0.2.2.dev72 → verifiers-0.2.2.dev73}/verifiers/v1/envs/__init__.py +0 -0
- {verifiers-0.2.2.dev72 → verifiers-0.2.2.dev73}/verifiers/v1/envs/agentic_judge/__init__.py +0 -0
- {verifiers-0.2.2.dev72 → verifiers-0.2.2.dev73}/verifiers/v1/envs/agentic_judge/env.py +0 -0
- {verifiers-0.2.2.dev72 → verifiers-0.2.2.dev73}/verifiers/v1/envs/best_of_n/__init__.py +0 -0
- {verifiers-0.2.2.dev72 → verifiers-0.2.2.dev73}/verifiers/v1/envs/best_of_n/env.py +0 -0
- {verifiers-0.2.2.dev72 → verifiers-0.2.2.dev73}/verifiers/v1/envs/single_agent/__init__.py +0 -0
- {verifiers-0.2.2.dev72 → verifiers-0.2.2.dev73}/verifiers/v1/envs/single_agent/env.py +0 -0
- {verifiers-0.2.2.dev72 → verifiers-0.2.2.dev73}/verifiers/v1/envs/user_sim/__init__.py +0 -0
- {verifiers-0.2.2.dev72 → verifiers-0.2.2.dev73}/verifiers/v1/envs/user_sim/env.py +0 -0
- {verifiers-0.2.2.dev72 → verifiers-0.2.2.dev73}/verifiers/v1/episode.py +0 -0
- {verifiers-0.2.2.dev72 → verifiers-0.2.2.dev73}/verifiers/v1/errors.py +0 -0
- {verifiers-0.2.2.dev72 → verifiers-0.2.2.dev73}/verifiers/v1/gepa/__init__.py +0 -0
- {verifiers-0.2.2.dev72 → verifiers-0.2.2.dev73}/verifiers/v1/gepa/adapter.py +0 -0
- {verifiers-0.2.2.dev72 → verifiers-0.2.2.dev73}/verifiers/v1/gepa/config.py +0 -0
- {verifiers-0.2.2.dev72 → verifiers-0.2.2.dev73}/verifiers/v1/gepa/dataset.py +0 -0
- {verifiers-0.2.2.dev72 → verifiers-0.2.2.dev73}/verifiers/v1/gepa/reflection.py +0 -0
- {verifiers-0.2.2.dev72 → verifiers-0.2.2.dev73}/verifiers/v1/graph.py +0 -0
- {verifiers-0.2.2.dev72 → verifiers-0.2.2.dev73}/verifiers/v1/harness.py +0 -0
- {verifiers-0.2.2.dev72 → verifiers-0.2.2.dev73}/verifiers/v1/harnesses/__init__.py +0 -0
- {verifiers-0.2.2.dev72 → verifiers-0.2.2.dev73}/verifiers/v1/harnesses/bash/__init__.py +0 -0
- {verifiers-0.2.2.dev72 → verifiers-0.2.2.dev73}/verifiers/v1/harnesses/bash/harness.py +0 -0
- {verifiers-0.2.2.dev72 → verifiers-0.2.2.dev73}/verifiers/v1/harnesses/bash/program.py +0 -0
- {verifiers-0.2.2.dev72 → verifiers-0.2.2.dev73}/verifiers/v1/harnesses/browser_use/__init__.py +0 -0
- {verifiers-0.2.2.dev72 → verifiers-0.2.2.dev73}/verifiers/v1/harnesses/browser_use/harness.py +0 -0
- {verifiers-0.2.2.dev72 → verifiers-0.2.2.dev73}/verifiers/v1/harnesses/browser_use/program.py +0 -0
- {verifiers-0.2.2.dev72 → verifiers-0.2.2.dev73}/verifiers/v1/harnesses/claude_code/__init__.py +0 -0
- {verifiers-0.2.2.dev72 → verifiers-0.2.2.dev73}/verifiers/v1/harnesses/codex/__init__.py +0 -0
- {verifiers-0.2.2.dev72 → verifiers-0.2.2.dev73}/verifiers/v1/harnesses/codex/harness.py +0 -0
- {verifiers-0.2.2.dev72 → verifiers-0.2.2.dev73}/verifiers/v1/harnesses/hermes_agent/__init__.py +0 -0
- {verifiers-0.2.2.dev72 → verifiers-0.2.2.dev73}/verifiers/v1/harnesses/hermes_agent/harness.py +0 -0
- {verifiers-0.2.2.dev72 → verifiers-0.2.2.dev73}/verifiers/v1/harnesses/hermes_agent/program.py +0 -0
- {verifiers-0.2.2.dev72 → verifiers-0.2.2.dev73}/verifiers/v1/harnesses/kimi_code/__init__.py +0 -0
- {verifiers-0.2.2.dev72 → verifiers-0.2.2.dev73}/verifiers/v1/harnesses/kimi_code/harness.py +0 -0
- {verifiers-0.2.2.dev72 → verifiers-0.2.2.dev73}/verifiers/v1/harnesses/mini_swe_agent/__init__.py +0 -0
- {verifiers-0.2.2.dev72 → verifiers-0.2.2.dev73}/verifiers/v1/harnesses/mini_swe_agent/harness.py +0 -0
- {verifiers-0.2.2.dev72 → verifiers-0.2.2.dev73}/verifiers/v1/harnesses/mini_swe_agent/program.py +0 -0
- {verifiers-0.2.2.dev72 → verifiers-0.2.2.dev73}/verifiers/v1/harnesses/null/__init__.py +0 -0
- {verifiers-0.2.2.dev72 → verifiers-0.2.2.dev73}/verifiers/v1/harnesses/null/harness.py +0 -0
- {verifiers-0.2.2.dev72 → verifiers-0.2.2.dev73}/verifiers/v1/harnesses/null/program.py +0 -0
- {verifiers-0.2.2.dev72 → verifiers-0.2.2.dev73}/verifiers/v1/harnesses/openclaw/__init__.py +0 -0
- {verifiers-0.2.2.dev72 → verifiers-0.2.2.dev73}/verifiers/v1/harnesses/openclaw/harness.py +0 -0
- {verifiers-0.2.2.dev72 → verifiers-0.2.2.dev73}/verifiers/v1/harnesses/pi/__init__.py +0 -0
- {verifiers-0.2.2.dev72 → verifiers-0.2.2.dev73}/verifiers/v1/harnesses/pi/harness.py +0 -0
- {verifiers-0.2.2.dev72 → verifiers-0.2.2.dev73}/verifiers/v1/harnesses/pool/__init__.py +0 -0
- {verifiers-0.2.2.dev72 → verifiers-0.2.2.dev73}/verifiers/v1/harnesses/pool/harness.py +0 -0
- {verifiers-0.2.2.dev72 → verifiers-0.2.2.dev73}/verifiers/v1/harnesses/rlm/__init__.py +0 -0
- {verifiers-0.2.2.dev72 → verifiers-0.2.2.dev73}/verifiers/v1/harnesses/rlm/harness.py +0 -0
- {verifiers-0.2.2.dev72 → verifiers-0.2.2.dev73}/verifiers/v1/harnesses/terminus_2/__init__.py +0 -0
- {verifiers-0.2.2.dev72 → verifiers-0.2.2.dev73}/verifiers/v1/harnesses/terminus_2/harness.py +0 -0
- {verifiers-0.2.2.dev72 → verifiers-0.2.2.dev73}/verifiers/v1/harnesses/terminus_2/program.py +0 -0
- {verifiers-0.2.2.dev72 → verifiers-0.2.2.dev73}/verifiers/v1/interception/__init__.py +0 -0
- {verifiers-0.2.2.dev72 → verifiers-0.2.2.dev73}/verifiers/v1/interception/base.py +0 -0
- {verifiers-0.2.2.dev72 → verifiers-0.2.2.dev73}/verifiers/v1/interception/pool.py +0 -0
- {verifiers-0.2.2.dev72 → verifiers-0.2.2.dev73}/verifiers/v1/interception/tunnel/__init__.py +0 -0
- {verifiers-0.2.2.dev72 → verifiers-0.2.2.dev73}/verifiers/v1/interception/tunnel/base.py +0 -0
- {verifiers-0.2.2.dev72 → verifiers-0.2.2.dev73}/verifiers/v1/interception/tunnel/custom.py +0 -0
- {verifiers-0.2.2.dev72 → verifiers-0.2.2.dev73}/verifiers/v1/interception/tunnel/prime.py +0 -0
- {verifiers-0.2.2.dev72 → verifiers-0.2.2.dev73}/verifiers/v1/judges/__init__.py +0 -0
- {verifiers-0.2.2.dev72 → verifiers-0.2.2.dev73}/verifiers/v1/judges/reference.py +0 -0
- {verifiers-0.2.2.dev72 → verifiers-0.2.2.dev73}/verifiers/v1/judges/reference.txt +0 -0
- {verifiers-0.2.2.dev72 → verifiers-0.2.2.dev73}/verifiers/v1/judges/rubric.py +0 -0
- {verifiers-0.2.2.dev72 → verifiers-0.2.2.dev73}/verifiers/v1/judges/rubric.txt +0 -0
- {verifiers-0.2.2.dev72 → verifiers-0.2.2.dev73}/verifiers/v1/mcp/__init__.py +0 -0
- {verifiers-0.2.2.dev72 → verifiers-0.2.2.dev73}/verifiers/v1/mcp/launch.py +0 -0
- {verifiers-0.2.2.dev72 → verifiers-0.2.2.dev73}/verifiers/v1/mcp/server.py +0 -0
- {verifiers-0.2.2.dev72 → verifiers-0.2.2.dev73}/verifiers/v1/mcp/toolset.py +0 -0
- {verifiers-0.2.2.dev72 → verifiers-0.2.2.dev73}/verifiers/v1/runtimes/__init__.py +0 -0
- {verifiers-0.2.2.dev72 → verifiers-0.2.2.dev73}/verifiers/v1/runtimes/base.py +0 -0
- {verifiers-0.2.2.dev72 → verifiers-0.2.2.dev73}/verifiers/v1/runtimes/docker/__init__.py +0 -0
- {verifiers-0.2.2.dev72 → verifiers-0.2.2.dev73}/verifiers/v1/runtimes/docker/egress.py +0 -0
- {verifiers-0.2.2.dev72 → verifiers-0.2.2.dev73}/verifiers/v1/runtimes/limiters.py +0 -0
- {verifiers-0.2.2.dev72 → verifiers-0.2.2.dev73}/verifiers/v1/runtimes/modal.py +0 -0
- {verifiers-0.2.2.dev72 → verifiers-0.2.2.dev73}/verifiers/v1/runtimes/prime.py +0 -0
- {verifiers-0.2.2.dev72 → verifiers-0.2.2.dev73}/verifiers/v1/runtimes/subprocess.py +0 -0
- {verifiers-0.2.2.dev72 → verifiers-0.2.2.dev73}/verifiers/v1/serve/__init__.py +0 -0
- {verifiers-0.2.2.dev72 → verifiers-0.2.2.dev73}/verifiers/v1/serve/pool.py +0 -0
- {verifiers-0.2.2.dev72 → verifiers-0.2.2.dev73}/verifiers/v1/state.py +0 -0
- {verifiers-0.2.2.dev72 → verifiers-0.2.2.dev73}/verifiers/v1/task.py +0 -0
- {verifiers-0.2.2.dev72 → verifiers-0.2.2.dev73}/verifiers/v1/taskset.py +0 -0
- {verifiers-0.2.2.dev72 → verifiers-0.2.2.dev73}/verifiers/v1/tasksets/__init__.py +0 -0
- {verifiers-0.2.2.dev72 → verifiers-0.2.2.dev73}/verifiers/v1/tasksets/harbor/__init__.py +0 -0
- {verifiers-0.2.2.dev72 → verifiers-0.2.2.dev73}/verifiers/v1/tasksets/harbor/taskset.py +0 -0
- {verifiers-0.2.2.dev72 → verifiers-0.2.2.dev73}/verifiers/v1/tasksets/lean/__init__.py +0 -0
- {verifiers-0.2.2.dev72 → verifiers-0.2.2.dev73}/verifiers/v1/tasksets/lean/scoring.py +0 -0
- {verifiers-0.2.2.dev72 → verifiers-0.2.2.dev73}/verifiers/v1/tasksets/lean/taskset.py +0 -0
- {verifiers-0.2.2.dev72 → verifiers-0.2.2.dev73}/verifiers/v1/tasksets/openenv/__init__.py +0 -0
- {verifiers-0.2.2.dev72 → verifiers-0.2.2.dev73}/verifiers/v1/tasksets/openenv/taskset.py +0 -0
- {verifiers-0.2.2.dev72 → verifiers-0.2.2.dev73}/verifiers/v1/tasksets/textarena/__init__.py +0 -0
- {verifiers-0.2.2.dev72 → verifiers-0.2.2.dev73}/verifiers/v1/tasksets/textarena/taskset.py +0 -0
- {verifiers-0.2.2.dev72 → verifiers-0.2.2.dev73}/verifiers/v1/trace.py +0 -0
- {verifiers-0.2.2.dev72 → verifiers-0.2.2.dev73}/verifiers/v1/types.py +0 -0
- {verifiers-0.2.2.dev72 → verifiers-0.2.2.dev73}/verifiers/v1/utils/__init__.py +0 -0
- {verifiers-0.2.2.dev72 → verifiers-0.2.2.dev73}/verifiers/v1/utils/aio.py +0 -0
- {verifiers-0.2.2.dev72 → verifiers-0.2.2.dev73}/verifiers/v1/utils/artifacts.py +0 -0
- {verifiers-0.2.2.dev72 → verifiers-0.2.2.dev73}/verifiers/v1/utils/compile.py +0 -0
- {verifiers-0.2.2.dev72 → verifiers-0.2.2.dev73}/verifiers/v1/utils/decorators.py +0 -0
- {verifiers-0.2.2.dev72 → verifiers-0.2.2.dev73}/verifiers/v1/utils/format.py +0 -0
- {verifiers-0.2.2.dev72 → verifiers-0.2.2.dev73}/verifiers/v1/utils/generic.py +0 -0
- {verifiers-0.2.2.dev72 → verifiers-0.2.2.dev73}/verifiers/v1/utils/git.py +0 -0
- {verifiers-0.2.2.dev72 → verifiers-0.2.2.dev73}/verifiers/v1/utils/image.py +0 -0
- {verifiers-0.2.2.dev72 → verifiers-0.2.2.dev73}/verifiers/v1/utils/install.py +0 -0
- {verifiers-0.2.2.dev72 → verifiers-0.2.2.dev73}/verifiers/v1/utils/interrupt.py +0 -0
- {verifiers-0.2.2.dev72 → verifiers-0.2.2.dev73}/verifiers/v1/utils/loaders.py +0 -0
- {verifiers-0.2.2.dev72 → verifiers-0.2.2.dev73}/verifiers/v1/utils/logging.py +0 -0
- {verifiers-0.2.2.dev72 → verifiers-0.2.2.dev73}/verifiers/v1/utils/memory.py +0 -0
- {verifiers-0.2.2.dev72 → verifiers-0.2.2.dev73}/verifiers/v1/utils/platform.py +0 -0
- {verifiers-0.2.2.dev72 → verifiers-0.2.2.dev73}/verifiers/v1/utils/retries.py +0 -0
- {verifiers-0.2.2.dev72 → verifiers-0.2.2.dev73}/verifiers/v1/utils/score.py +0 -0
- {verifiers-0.2.2.dev72 → verifiers-0.2.2.dev73}/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.dev73
|
|
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
|
|
@@ -216,20 +216,17 @@ def run_v1_server():
|
|
|
216
216
|
|
|
217
217
|
@pytest.fixture
|
|
218
218
|
async def live_ctx():
|
|
219
|
-
"""
|
|
220
|
-
|
|
221
|
-
from verifiers.v1.clients import EvalClientConfig, ModelContext
|
|
219
|
+
"""The e2e `ModelContext` (default model + endpoint config, provider-default sampling)
|
|
220
|
+
for driving `Agent` directly — the agent-surface counterpart of `run_v1`."""
|
|
221
|
+
from verifiers.v1.clients import EvalClientConfig, ModelContext
|
|
222
222
|
from verifiers.v1.types import SamplingConfig
|
|
223
223
|
|
|
224
|
-
|
|
225
|
-
|
|
226
|
-
|
|
227
|
-
|
|
228
|
-
|
|
229
|
-
|
|
230
|
-
)
|
|
231
|
-
finally:
|
|
232
|
-
await client.close()
|
|
224
|
+
# Endpoint config only — each rollout builds and closes its own client.
|
|
225
|
+
yield ModelContext(
|
|
226
|
+
model="deepseek/deepseek-v4-flash-0731",
|
|
227
|
+
client=EvalClientConfig(),
|
|
228
|
+
sampling=SamplingConfig(max_tokens=2048),
|
|
229
|
+
)
|
|
233
230
|
|
|
234
231
|
|
|
235
232
|
@pytest.fixture
|
|
@@ -15,10 +15,8 @@ from dataclasses import dataclass
|
|
|
15
15
|
from typing import Self
|
|
16
16
|
|
|
17
17
|
from verifiers.v1.clients import (
|
|
18
|
-
Client,
|
|
19
18
|
EvalClientConfig,
|
|
20
19
|
ModelContext,
|
|
21
|
-
resolve_client,
|
|
22
20
|
)
|
|
23
21
|
from verifiers.v1.configs.agent import AgentConfig, TimeoutConfig
|
|
24
22
|
from verifiers.v1.dialects import parse_message
|
|
@@ -228,10 +226,10 @@ class Interaction:
|
|
|
228
226
|
class Agent:
|
|
229
227
|
"""A configured harness + model + runtime policy, runnable on any task.
|
|
230
228
|
|
|
231
|
-
Built from an `AgentConfig` alone; `
|
|
232
|
-
|
|
233
|
-
|
|
234
|
-
*policy*: each `run` provisions a fresh box from it, resolved
|
|
229
|
+
Built from an `AgentConfig` alone; `interception=` injects a live resource to
|
|
230
|
+
borrow — its owner keeps the lifecycle. The endpoint stays config: each rollout
|
|
231
|
+
builds and closes its own `Client`, so an agent holds no transport. The config's
|
|
232
|
+
`runtime` is a *policy*: each `run` provisions a fresh box from it, resolved
|
|
235
233
|
per task; `run(runtime=...)` places the run into an existing box instead
|
|
236
234
|
(borrowed boxes are never started or torn down by the run)."""
|
|
237
235
|
|
|
@@ -239,7 +237,6 @@ class Agent:
|
|
|
239
237
|
self,
|
|
240
238
|
config: AgentConfig,
|
|
241
239
|
*,
|
|
242
|
-
client: Client | None = None,
|
|
243
240
|
interception: Interception | None = None,
|
|
244
241
|
) -> None:
|
|
245
242
|
from verifiers.v1.utils.loaders import harness_config_type, load_harness
|
|
@@ -259,12 +256,9 @@ class Agent:
|
|
|
259
256
|
config = config.model_copy(update={"sampling": Sampling()})
|
|
260
257
|
self.config = config
|
|
261
258
|
self.harness = load_harness(config.harness)
|
|
262
|
-
self._owns_client = client is None
|
|
263
|
-
if self._owns_client:
|
|
264
|
-
client = resolve_client(config.client or EvalClientConfig())
|
|
265
259
|
self.ctx = ModelContext(
|
|
266
260
|
model=config.model,
|
|
267
|
-
client=client,
|
|
261
|
+
client=config.client or EvalClientConfig(),
|
|
268
262
|
sampling=config.sampling,
|
|
269
263
|
)
|
|
270
264
|
self._closed = False
|
|
@@ -306,22 +300,14 @@ class Agent:
|
|
|
306
300
|
# A failed __aenter__ gets no __aexit__ from `async with`: unwind
|
|
307
301
|
# here, or the agent stays "already entered" forever.
|
|
308
302
|
self._entered, self._server = False, None
|
|
309
|
-
if self._owns_client:
|
|
310
|
-
self._closed = True
|
|
311
|
-
await self.ctx.client.close()
|
|
312
303
|
raise
|
|
313
304
|
return self
|
|
314
305
|
|
|
315
306
|
async def __aexit__(self, *exc) -> None:
|
|
316
307
|
self._entered = False
|
|
317
308
|
server, self._server = self._server, None
|
|
318
|
-
|
|
319
|
-
|
|
320
|
-
await server.__aexit__(*exc)
|
|
321
|
-
finally:
|
|
322
|
-
if self._owns_client:
|
|
323
|
-
self._closed = True
|
|
324
|
-
await self.ctx.client.close()
|
|
309
|
+
if server is not None:
|
|
310
|
+
await server.__aexit__(*exc)
|
|
325
311
|
|
|
326
312
|
def _interception_for(
|
|
327
313
|
self, run_is_local: bool, task: Task, shared_tools: Mapping
|
|
@@ -584,7 +570,6 @@ class _EpisodeAgent(Agent):
|
|
|
584
570
|
self,
|
|
585
571
|
config: AgentConfig,
|
|
586
572
|
*,
|
|
587
|
-
client: Client,
|
|
588
573
|
interception: Interception | None,
|
|
589
574
|
name: str,
|
|
590
575
|
shared_tools: Mapping[str, SharedToolServer],
|
|
@@ -595,7 +580,7 @@ class _EpisodeAgent(Agent):
|
|
|
595
580
|
on_discard: Callable[[Trace], None] | None,
|
|
596
581
|
warned_resources: set,
|
|
597
582
|
) -> None:
|
|
598
|
-
super().__init__(config,
|
|
583
|
+
super().__init__(config, interception=interception)
|
|
599
584
|
# Resource warnings dedupe env-wide, not per episode.
|
|
600
585
|
self._warned_resources = warned_resources
|
|
601
586
|
self._name = name
|
|
@@ -690,12 +675,11 @@ class _EpisodeAgent(Agent):
|
|
|
690
675
|
def make_agent(
|
|
691
676
|
config: AgentConfig,
|
|
692
677
|
*,
|
|
693
|
-
client: Client | None = None,
|
|
694
678
|
interception: Interception | None = None,
|
|
695
679
|
) -> Agent:
|
|
696
|
-
"""The agent for a config; `
|
|
697
|
-
|
|
698
|
-
return Agent(config,
|
|
680
|
+
"""The agent for a config; `interception` injects a live resource to borrow,
|
|
681
|
+
everything else comes from the config."""
|
|
682
|
+
return Agent(config, interception=interception)
|
|
699
683
|
|
|
700
684
|
|
|
701
685
|
MakeAgent = Callable[[str, AgentConfig], Agent]
|
|
@@ -14,7 +14,7 @@ from verifiers.v1.cli.output import (
|
|
|
14
14
|
output_path,
|
|
15
15
|
save_config,
|
|
16
16
|
)
|
|
17
|
-
from verifiers.v1.clients import ModelContext
|
|
17
|
+
from verifiers.v1.clients import ModelContext
|
|
18
18
|
from verifiers.v1.configs.cli.eval import EvalConfig
|
|
19
19
|
from verifiers.v1.env import Env, RunSlot
|
|
20
20
|
from verifiers.v1.episode import Episode
|
|
@@ -26,7 +26,6 @@ logger = logging.getLogger(__name__)
|
|
|
26
26
|
|
|
27
27
|
async def run_eval(env: Env, config: EvalConfig) -> list[Episode]:
|
|
28
28
|
logger.info("eval config:\n%s", config.model_dump_json(indent=2))
|
|
29
|
-
client = resolve_client(config.client)
|
|
30
29
|
taskset = env.taskset
|
|
31
30
|
if config.num_tasks is None and taskset.INFINITE:
|
|
32
31
|
raise ValueError(
|
|
@@ -36,7 +35,9 @@ async def run_eval(env: Env, config: EvalConfig) -> list[Episode]:
|
|
|
36
35
|
if config.num_tasks is not None:
|
|
37
36
|
selected = selected.head(config.num_tasks)
|
|
38
37
|
tasks = list(selected)
|
|
39
|
-
ctx = ModelContext(
|
|
38
|
+
ctx = ModelContext(
|
|
39
|
+
client=config.client, model=config.model, sampling=config.sampling
|
|
40
|
+
)
|
|
40
41
|
semaphore = (
|
|
41
42
|
asyncio.Semaphore(config.max_concurrent) if config.max_concurrent else None
|
|
42
43
|
)
|
|
@@ -107,7 +108,6 @@ async def run_eval(env: Env, config: EvalConfig) -> list[Episode]:
|
|
|
107
108
|
|
|
108
109
|
push_state.started = True
|
|
109
110
|
await asyncio.to_thread(push_traces, episodes, config, push_state)
|
|
110
|
-
await client.close()
|
|
111
111
|
return episodes
|
|
112
112
|
|
|
113
113
|
|
|
@@ -1,13 +1,12 @@
|
|
|
1
|
-
from verifiers.v1.clients.client import Client, ModelContext
|
|
2
|
-
from verifiers.v1.clients.
|
|
1
|
+
from verifiers.v1.clients.client import Client, ModelContext, resolve_client
|
|
2
|
+
from verifiers.v1.clients.eval import EvalClient
|
|
3
|
+
from verifiers.v1.clients.train import TrainClient
|
|
4
|
+
from verifiers.v1.configs.client import (
|
|
3
5
|
BaseClientConfig,
|
|
4
6
|
ClientConfig,
|
|
5
7
|
EvalClientConfig,
|
|
6
8
|
TrainClientConfig,
|
|
7
|
-
resolve_client,
|
|
8
9
|
)
|
|
9
|
-
from verifiers.v1.clients.eval import EvalClient
|
|
10
|
-
from verifiers.v1.clients.train import TrainClient
|
|
11
10
|
|
|
12
11
|
__all__ = [
|
|
13
12
|
"BaseClientConfig",
|
|
@@ -0,0 +1,40 @@
|
|
|
1
|
+
"""Shared client plumbing: transport defaults and URL/key utilities."""
|
|
2
|
+
|
|
3
|
+
import re
|
|
4
|
+
|
|
5
|
+
import httpx
|
|
6
|
+
from openai import AsyncOpenAI
|
|
7
|
+
|
|
8
|
+
from verifiers.v1.configs.client import BaseClientConfig, resolve_api_key
|
|
9
|
+
|
|
10
|
+
# Mirrors the OAI SDK defaults
|
|
11
|
+
DEFAULT_TIMEOUT = httpx.Timeout(connect=5.0, read=600.0, write=600.0, pool=600.0)
|
|
12
|
+
DEFAULT_LIMITS = httpx.Limits(max_connections=1000, max_keepalive_connections=100)
|
|
13
|
+
MAX_RETRIES = 0
|
|
14
|
+
"""No client-side retries: failures surface to the harness SDK and the trace instead of
|
|
15
|
+
being silently reattempted."""
|
|
16
|
+
|
|
17
|
+
# An API version path segment (`v1`, `v2`, ...) — the only kind `join_url` dedups.
|
|
18
|
+
VERSION_SEGMENT = re.compile(r"v\d+")
|
|
19
|
+
|
|
20
|
+
|
|
21
|
+
def build_async_openai(config: BaseClientConfig) -> AsyncOpenAI:
|
|
22
|
+
return AsyncOpenAI(
|
|
23
|
+
base_url=config.base_url,
|
|
24
|
+
api_key=resolve_api_key(config),
|
|
25
|
+
default_headers=config.headers or None,
|
|
26
|
+
timeout=DEFAULT_TIMEOUT,
|
|
27
|
+
max_retries=MAX_RETRIES,
|
|
28
|
+
http_client=httpx.AsyncClient(timeout=DEFAULT_TIMEOUT, limits=DEFAULT_LIMITS),
|
|
29
|
+
)
|
|
30
|
+
|
|
31
|
+
|
|
32
|
+
def join_url(base_url: str, path: str) -> str:
|
|
33
|
+
"""Join `base_url` with a dialect path without repeating the API version segment:
|
|
34
|
+
`.../api/v1` + `/v1/messages` -> `.../api/v1/messages`. Only version-shaped segments
|
|
35
|
+
dedup, so a base ending in `/chat` doesn't swallow `/chat/completions`."""
|
|
36
|
+
head = path.split("/")[1] if path.startswith("/") else ""
|
|
37
|
+
base = base_url.rstrip("/")
|
|
38
|
+
if VERSION_SEGMENT.fullmatch(head) and base.endswith(f"/{head}"):
|
|
39
|
+
base = base[: -len(head) - 1]
|
|
40
|
+
return base + path
|
|
@@ -1,22 +1,21 @@
|
|
|
1
1
|
"""Client interfaces for model inference and relay."""
|
|
2
2
|
|
|
3
|
-
import logging
|
|
4
3
|
from abc import ABC, abstractmethod
|
|
5
4
|
from collections.abc import AsyncIterator, Awaitable, Callable, Mapping
|
|
6
5
|
from dataclasses import dataclass, field
|
|
7
6
|
|
|
7
|
+
from verifiers.v1.configs.client import (
|
|
8
|
+
BaseClientConfig,
|
|
9
|
+
ClientConfig,
|
|
10
|
+
TrainClientConfig,
|
|
11
|
+
)
|
|
8
12
|
from verifiers.v1.dialects import Dialect
|
|
9
13
|
from verifiers.v1.graph import PendingTurn
|
|
10
14
|
from verifiers.v1.types import Response, Sampling, SamplingConfig
|
|
11
15
|
|
|
12
|
-
logger = logging.getLogger(__name__)
|
|
13
|
-
|
|
14
16
|
SESSION_ID_HEADER = "X-Session-ID"
|
|
15
|
-
"""Per-rollout routing header
|
|
16
|
-
|
|
17
|
-
``request_id_headers``) pins all of a rollout's turns to the same engine — keeping the
|
|
18
|
-
growing cross-turn prefix warm in that engine's KV cache instead of re-prefilling it
|
|
19
|
-
cold on a random shard each turn."""
|
|
17
|
+
"""Per-rollout routing header (the trace id, same value every turn), so a session-affinity
|
|
18
|
+
router pins a rollout's turns to one engine and its growing prefix stays KV-cached."""
|
|
20
19
|
|
|
21
20
|
|
|
22
21
|
@dataclass
|
|
@@ -40,14 +39,10 @@ class Client(ABC):
|
|
|
40
39
|
turn: PendingTurn | None = None,
|
|
41
40
|
headers: Mapping[str, str] | None = None,
|
|
42
41
|
) -> Response:
|
|
43
|
-
"""Run one completion -> a vf `Response`. The eval client forwards the native JSON
|
|
44
|
-
|
|
45
|
-
the
|
|
46
|
-
|
|
47
|
-
`session_id` is the rollout's stable id (the trace id); when set, the client sends it
|
|
48
|
-
as the `SESSION_ID_HEADER` so a session-affinity router keeps the rollout's turns on
|
|
49
|
-
one engine for cross-turn prefix-cache reuse. `turn` is the graph-resolved prompt
|
|
50
|
-
prefix; train clients may use it for renderer bridging, while relay clients ignore it."""
|
|
42
|
+
"""Run one completion -> a vf `Response`. The eval client forwards the native JSON
|
|
43
|
+
and parses a copy via `dialect`; the train client renders `body` to token ids.
|
|
44
|
+
`session_id` is the rollout's trace id (sent as `SESSION_ID_HEADER`); `turn` is the
|
|
45
|
+
graph-resolved prompt prefix, used by train clients for renderer bridging."""
|
|
51
46
|
|
|
52
47
|
async def relay(
|
|
53
48
|
self,
|
|
@@ -78,10 +73,20 @@ class Client(ABC):
|
|
|
78
73
|
pass
|
|
79
74
|
|
|
80
75
|
|
|
76
|
+
def resolve_client(config: BaseClientConfig) -> Client:
|
|
77
|
+
if isinstance(config, TrainClientConfig):
|
|
78
|
+
from verifiers.v1.clients.train import TrainClient
|
|
79
|
+
|
|
80
|
+
return TrainClient(config)
|
|
81
|
+
from verifiers.v1.clients.eval import EvalClient
|
|
82
|
+
|
|
83
|
+
return EvalClient(config)
|
|
84
|
+
|
|
85
|
+
|
|
81
86
|
@dataclass(frozen=True)
|
|
82
87
|
class ModelContext:
|
|
83
|
-
"""
|
|
88
|
+
"""Model, endpoint config, and sampling for one rollout."""
|
|
84
89
|
|
|
85
90
|
model: str
|
|
86
|
-
client:
|
|
91
|
+
client: ClientConfig
|
|
87
92
|
sampling: Sampling = field(default_factory=Sampling)
|
|
@@ -1,16 +1,4 @@
|
|
|
1
|
-
"""The eval client:
|
|
2
|
-
|
|
3
|
-
`EvalClient` (the default) is a thin `httpx` forwarder: it sends the program's request body
|
|
4
|
-
without a typed round-trip, mutating only what the eval owns (model + sampling, via the dialect's
|
|
5
|
-
`apply_overrides`). Eligible end-to-end request headers are forwarded too; rollout auth, body
|
|
6
|
-
framing, and connection headers are replaced. The provider response is parsed into a vf
|
|
7
|
-
`Response` for the trace, while its full JSON object stays on `Response.raw` for the interception
|
|
8
|
-
server to return.
|
|
9
|
-
|
|
10
|
-
The transport is provider-agnostic: the dialect supplies the upstream path + auth headers, so a
|
|
11
|
-
new wire format (incl. non-OpenAI providers like Anthropic) is just a new `Dialect` — no client
|
|
12
|
-
change. Endpoint config (base url, api key, billing headers) comes from the client config.
|
|
13
|
-
"""
|
|
1
|
+
"""The eval client: proxies harness-native request to the provider."""
|
|
14
2
|
|
|
15
3
|
import re
|
|
16
4
|
from collections.abc import Mapping
|
|
@@ -19,7 +7,9 @@ import httpx
|
|
|
19
7
|
from pydantic import ValidationError
|
|
20
8
|
from pydantic_core import from_json, to_json
|
|
21
9
|
|
|
10
|
+
from verifiers.v1.clients.base import DEFAULT_LIMITS, DEFAULT_TIMEOUT, join_url
|
|
22
11
|
from verifiers.v1.clients.client import SESSION_ID_HEADER, Client, RelayReply
|
|
12
|
+
from verifiers.v1.configs.client import BaseClientConfig, resolve_api_key
|
|
23
13
|
from verifiers.v1.dialects import Dialect
|
|
24
14
|
from verifiers.v1.errors import model_error
|
|
25
15
|
from verifiers.v1.graph import PendingTurn
|
|
@@ -57,6 +47,8 @@ _BLOCKED_REQUEST_HEADERS = frozenset(
|
|
|
57
47
|
"signature-input",
|
|
58
48
|
}
|
|
59
49
|
)
|
|
50
|
+
|
|
51
|
+
|
|
60
52
|
# Atomic so one CRLF cannot backtrack into two line endings and split an event mid-field.
|
|
61
53
|
_SSE_EVENT_END = re.compile(rb"(?>\r\n|\r|\n){2}")
|
|
62
54
|
|
|
@@ -64,22 +56,13 @@ _SSE_EVENT_END = re.compile(rb"(?>\r\n|\r|\n){2}")
|
|
|
64
56
|
class EvalClient(Client):
|
|
65
57
|
"""Relay native JSON to the provider and parse a copy for the trace."""
|
|
66
58
|
|
|
67
|
-
def __init__(
|
|
68
|
-
self
|
|
69
|
-
|
|
70
|
-
self.base_url = base_url.rstrip("/")
|
|
71
|
-
self.api_key = api_key
|
|
59
|
+
def __init__(self, config: BaseClientConfig) -> None:
|
|
60
|
+
self.base_url = config.base_url
|
|
61
|
+
self.api_key = resolve_api_key(config)
|
|
72
62
|
# Keep endpoint headers separate so they can override intercepted request headers before
|
|
73
63
|
# the dialect's provider authentication is applied.
|
|
74
|
-
self.headers = dict(headers or {})
|
|
75
|
-
|
|
76
|
-
# Build full URLs ourselves (base_url + dialect.upstream_path) rather than relying on
|
|
77
|
-
# httpx base-url joining, which drops the base path for a leading-slash request path.
|
|
78
|
-
# Match V1's default concurrency while retaining HTTPX's 20-idle keepalive bound.
|
|
79
|
-
self.http = httpx.AsyncClient(
|
|
80
|
-
timeout=None,
|
|
81
|
-
limits=httpx.Limits(max_connections=128, max_keepalive_connections=20),
|
|
82
|
-
)
|
|
64
|
+
self.headers = dict(config.headers or {})
|
|
65
|
+
self.client = httpx.AsyncClient(timeout=DEFAULT_TIMEOUT, limits=DEFAULT_LIMITS)
|
|
83
66
|
|
|
84
67
|
async def get_response(
|
|
85
68
|
self,
|
|
@@ -92,7 +75,7 @@ class EvalClient(Client):
|
|
|
92
75
|
headers: Mapping[str, str] | None = None,
|
|
93
76
|
) -> Response:
|
|
94
77
|
resp = await self._request(
|
|
95
|
-
self.base_url
|
|
78
|
+
join_url(self.base_url, dialect.upstream_path),
|
|
96
79
|
dialect.apply_overrides(body, model, sampling_args),
|
|
97
80
|
self._headers(dialect, headers, session_id),
|
|
98
81
|
)
|
|
@@ -118,12 +101,9 @@ class EvalClient(Client):
|
|
|
118
101
|
incoming: Mapping[str, str] | None,
|
|
119
102
|
session_id: str | None,
|
|
120
103
|
) -> httpx.Headers:
|
|
121
|
-
"""
|
|
122
|
-
|
|
123
|
-
|
|
124
|
-
discard localhost auth and transport framing, then apply endpoint-configured headers,
|
|
125
|
-
session routing, and real provider auth.
|
|
126
|
-
"""
|
|
104
|
+
"""Provider headers from the intercepted request: keep feature headers
|
|
105
|
+
(`openai-beta`, `anthropic-beta`), discard localhost auth and framing, then apply
|
|
106
|
+
endpoint headers, session routing, and real provider auth."""
|
|
127
107
|
headers = httpx.Headers(incoming)
|
|
128
108
|
connection = headers.pop("connection", "")
|
|
129
109
|
for name in _BLOCKED_REQUEST_HEADERS | set(
|
|
@@ -145,14 +125,14 @@ class EvalClient(Client):
|
|
|
145
125
|
stream: bool = False,
|
|
146
126
|
) -> httpx.Response:
|
|
147
127
|
headers.setdefault("content-type", "application/json")
|
|
148
|
-
request = self.
|
|
128
|
+
request = self.client.build_request(
|
|
149
129
|
"POST",
|
|
150
130
|
url,
|
|
151
131
|
content=to_json(body, inf_nan_mode="null"),
|
|
152
132
|
headers=headers,
|
|
153
133
|
)
|
|
154
134
|
try:
|
|
155
|
-
response = await self.
|
|
135
|
+
response = await self.client.send(request, stream=stream)
|
|
156
136
|
except httpx.TimeoutException as e:
|
|
157
137
|
raise model_error(str(e), status_code=504) from e
|
|
158
138
|
except httpx.HTTPError as e:
|
|
@@ -163,9 +143,6 @@ class EvalClient(Client):
|
|
|
163
143
|
try:
|
|
164
144
|
response.raise_for_status()
|
|
165
145
|
except httpx.HTTPStatusError as e:
|
|
166
|
-
# relay the provider's status (and body) so the harness SDK retries 5xx/429 and not
|
|
167
|
-
# 4xx; an empty/HTML body (e.g. a 404 from a base_url missing `/v1`) would otherwise
|
|
168
|
-
# make an information-free ProviderError
|
|
169
146
|
raise model_error(
|
|
170
147
|
f"upstream {e.response.status_code}: {e.response.text}",
|
|
171
148
|
status_code=e.response.status_code,
|
|
@@ -193,7 +170,7 @@ class EvalClient(Client):
|
|
|
193
170
|
# Relay complete SSE events so the interception server can safely insert keepalives
|
|
194
171
|
# between them. Error responses are mapped before any event is handed back.
|
|
195
172
|
resp = await self._request(
|
|
196
|
-
self.base_url
|
|
173
|
+
join_url(self.base_url, dialect.upstream_path),
|
|
197
174
|
dialect.apply_overrides(body, model, sampling_args),
|
|
198
175
|
self._headers(dialect, headers, session_id),
|
|
199
176
|
stream=True,
|
|
@@ -228,11 +205,11 @@ class EvalClient(Client):
|
|
|
228
205
|
) -> dict:
|
|
229
206
|
# A side request (e.g. count_tokens): relay its native JSON and return the provider JSON.
|
|
230
207
|
resp = await self._request(
|
|
231
|
-
self.base_url
|
|
208
|
+
join_url(self.base_url, route),
|
|
232
209
|
body,
|
|
233
210
|
self._headers(dialect, headers, None),
|
|
234
211
|
)
|
|
235
212
|
return from_json(resp.content)
|
|
236
213
|
|
|
237
214
|
async def close(self) -> None:
|
|
238
|
-
await self.
|
|
215
|
+
await self.client.aclose()
|