verifiers 0.2.1.dev61__tar.gz → 0.2.1.dev66__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.1.dev61 → verifiers-0.2.1.dev66}/PKG-INFO +13 -29
- {verifiers-0.2.1.dev61 → verifiers-0.2.1.dev66}/pyproject.toml +18 -45
- {verifiers-0.2.1.dev61 → verifiers-0.2.1.dev66}/verifiers/v1/harnesses/__init__.py +3 -0
- {verifiers-0.2.1.dev61 → verifiers-0.2.1.dev66}/verifiers/v1/harnesses/bash/program.py +143 -93
- {verifiers-0.2.1.dev61 → verifiers-0.2.1.dev66}/verifiers/v1/harnesses/claude_code/harness.py +1 -1
- {verifiers-0.2.1.dev61 → verifiers-0.2.1.dev66}/verifiers/v1/harnesses/codex/harness.py +1 -1
- {verifiers-0.2.1.dev61 → verifiers-0.2.1.dev66}/verifiers/v1/harnesses/kimi_code/harness.py +1 -1
- {verifiers-0.2.1.dev61 → verifiers-0.2.1.dev66}/verifiers/v1/harnesses/mini_swe_agent/harness.py +1 -1
- {verifiers-0.2.1.dev61 → verifiers-0.2.1.dev66}/verifiers/v1/harnesses/mini_swe_agent/program.py +1 -1
- verifiers-0.2.1.dev66/verifiers/v1/harnesses/null/program.py +217 -0
- {verifiers-0.2.1.dev61 → verifiers-0.2.1.dev66}/verifiers/v1/harnesses/pi/harness.py +1 -1
- verifiers-0.2.1.dev66/verifiers/v1/harnesses/pool/__init__.py +3 -0
- verifiers-0.2.1.dev66/verifiers/v1/harnesses/pool/harness.py +130 -0
- {verifiers-0.2.1.dev61 → verifiers-0.2.1.dev66}/verifiers/v1/interception/server.py +16 -5
- {verifiers-0.2.1.dev61 → verifiers-0.2.1.dev66}/verifiers/v1/mcp/__init__.py +2 -2
- {verifiers-0.2.1.dev61 → verifiers-0.2.1.dev66}/verifiers/v1/mcp/launch.py +63 -57
- {verifiers-0.2.1.dev61 → verifiers-0.2.1.dev66}/verifiers/v1/mcp/user.py +26 -2
- verifiers-0.2.1.dev61/verifiers/v1/harnesses/null/program.py +0 -168
- {verifiers-0.2.1.dev61 → verifiers-0.2.1.dev66}/.gitignore +0 -0
- {verifiers-0.2.1.dev61 → verifiers-0.2.1.dev66}/LICENSE +0 -0
- {verifiers-0.2.1.dev61 → verifiers-0.2.1.dev66}/README.md +0 -0
- {verifiers-0.2.1.dev61 → verifiers-0.2.1.dev66}/tests/AGENTS.md +0 -0
- {verifiers-0.2.1.dev61 → verifiers-0.2.1.dev66}/tests/__init__.py +0 -0
- {verifiers-0.2.1.dev61 → verifiers-0.2.1.dev66}/tests/conftest.py +0 -0
- {verifiers-0.2.1.dev61 → verifiers-0.2.1.dev66}/tests/test_browser_env.py +0 -0
- {verifiers-0.2.1.dev61 → verifiers-0.2.1.dev66}/tests/test_build_script.py +0 -0
- {verifiers-0.2.1.dev61 → verifiers-0.2.1.dev66}/tests/test_cli_agent_env.py +0 -0
- {verifiers-0.2.1.dev61 → verifiers-0.2.1.dev66}/tests/test_client_auth_errors.py +0 -0
- {verifiers-0.2.1.dev61 → verifiers-0.2.1.dev66}/tests/test_client_config.py +0 -0
- {verifiers-0.2.1.dev61 → verifiers-0.2.1.dev66}/tests/test_client_multimodal_types.py +0 -0
- {verifiers-0.2.1.dev61 → verifiers-0.2.1.dev66}/tests/test_composable_env.py +0 -0
- {verifiers-0.2.1.dev61 → verifiers-0.2.1.dev66}/tests/test_context_token_metrics.py +0 -0
- {verifiers-0.2.1.dev61 → verifiers-0.2.1.dev66}/tests/test_decorator_ranks.py +0 -0
- {verifiers-0.2.1.dev61 → verifiers-0.2.1.dev66}/tests/test_endpoint_registry.py +0 -0
- {verifiers-0.2.1.dev61 → verifiers-0.2.1.dev66}/tests/test_env_group.py +0 -0
- {verifiers-0.2.1.dev61 → verifiers-0.2.1.dev66}/tests/test_env_server.py +0 -0
- {verifiers-0.2.1.dev61 → verifiers-0.2.1.dev66}/tests/test_environment.py +0 -0
- {verifiers-0.2.1.dev61 → verifiers-0.2.1.dev66}/tests/test_environment_extra.py +0 -0
- {verifiers-0.2.1.dev61 → verifiers-0.2.1.dev66}/tests/test_error_chain.py +0 -0
- {verifiers-0.2.1.dev61 → verifiers-0.2.1.dev66}/tests/test_eval_display.py +0 -0
- {verifiers-0.2.1.dev61 → verifiers-0.2.1.dev66}/tests/test_eval_utils.py +0 -0
- {verifiers-0.2.1.dev61 → verifiers-0.2.1.dev66}/tests/test_gepa_cli.py +0 -0
- {verifiers-0.2.1.dev61 → verifiers-0.2.1.dev66}/tests/test_gepa_utils.py +0 -0
- {verifiers-0.2.1.dev61 → verifiers-0.2.1.dev66}/tests/test_gym_env.py +0 -0
- {verifiers-0.2.1.dev61 → verifiers-0.2.1.dev66}/tests/test_harbor_env_mcp.py +0 -0
- {verifiers-0.2.1.dev61 → verifiers-0.2.1.dev66}/tests/test_imports.py +0 -0
- {verifiers-0.2.1.dev61 → verifiers-0.2.1.dev66}/tests/test_init_script.py +0 -0
- {verifiers-0.2.1.dev61 → verifiers-0.2.1.dev66}/tests/test_install_utils.py +0 -0
- {verifiers-0.2.1.dev61 → verifiers-0.2.1.dev66}/tests/test_interception_utils.py +0 -0
- {verifiers-0.2.1.dev61 → verifiers-0.2.1.dev66}/tests/test_logging.py +0 -0
- {verifiers-0.2.1.dev61 → verifiers-0.2.1.dev66}/tests/test_math_rubric.py +0 -0
- {verifiers-0.2.1.dev61 → verifiers-0.2.1.dev66}/tests/test_maybe_think_parser.py +0 -0
- {verifiers-0.2.1.dev61 → verifiers-0.2.1.dev66}/tests/test_message_utils.py +0 -0
- {verifiers-0.2.1.dev61 → verifiers-0.2.1.dev66}/tests/test_message_utils_multimodal.py +0 -0
- {verifiers-0.2.1.dev61 → verifiers-0.2.1.dev66}/tests/test_multiturn_env.py +0 -0
- {verifiers-0.2.1.dev61 → verifiers-0.2.1.dev66}/tests/test_nemorl_client.py +0 -0
- {verifiers-0.2.1.dev61 → verifiers-0.2.1.dev66}/tests/test_openai_chat_completions_token_client.py +0 -0
- {verifiers-0.2.1.dev61 → verifiers-0.2.1.dev66}/tests/test_openai_responses_client.py +0 -0
- {verifiers-0.2.1.dev61 → verifiers-0.2.1.dev66}/tests/test_opencode_rlm_env.py +0 -0
- {verifiers-0.2.1.dev61 → verifiers-0.2.1.dev66}/tests/test_openenv_client.py +0 -0
- {verifiers-0.2.1.dev61 → verifiers-0.2.1.dev66}/tests/test_parser.py +0 -0
- {verifiers-0.2.1.dev61 → verifiers-0.2.1.dev66}/tests/test_path_utils.py +0 -0
- {verifiers-0.2.1.dev61 → verifiers-0.2.1.dev66}/tests/test_per_turn_timing.py +0 -0
- {verifiers-0.2.1.dev61 → verifiers-0.2.1.dev66}/tests/test_pricing_utils.py +0 -0
- {verifiers-0.2.1.dev61 → verifiers-0.2.1.dev66}/tests/test_prime_plugin.py +0 -0
- {verifiers-0.2.1.dev61 → verifiers-0.2.1.dev66}/tests/test_renderer_client.py +0 -0
- {verifiers-0.2.1.dev61 → verifiers-0.2.1.dev66}/tests/test_renderer_e2e.py +0 -0
- {verifiers-0.2.1.dev61 → verifiers-0.2.1.dev66}/tests/test_rlm_composable_env.py +0 -0
- {verifiers-0.2.1.dev61 → verifiers-0.2.1.dev66}/tests/test_rubric.py +0 -0
- {verifiers-0.2.1.dev61 → verifiers-0.2.1.dev66}/tests/test_rubric_group.py +0 -0
- {verifiers-0.2.1.dev61 → verifiers-0.2.1.dev66}/tests/test_sandbox_debug_env.py +0 -0
- {verifiers-0.2.1.dev61 → verifiers-0.2.1.dev66}/tests/test_sandbox_env.py +0 -0
- {verifiers-0.2.1.dev61 → verifiers-0.2.1.dev66}/tests/test_sandbox_mixin.py +0 -0
- {verifiers-0.2.1.dev61 → verifiers-0.2.1.dev66}/tests/test_save_utils.py +0 -0
- {verifiers-0.2.1.dev61 → verifiers-0.2.1.dev66}/tests/test_setup_script.py +0 -0
- {verifiers-0.2.1.dev61 → verifiers-0.2.1.dev66}/tests/test_singleturn_env.py +0 -0
- {verifiers-0.2.1.dev61 → verifiers-0.2.1.dev66}/tests/test_stateful_tool_env.py +0 -0
- {verifiers-0.2.1.dev61 → verifiers-0.2.1.dev66}/tests/test_think_parser.py +0 -0
- {verifiers-0.2.1.dev61 → verifiers-0.2.1.dev66}/tests/test_tool_env.py +0 -0
- {verifiers-0.2.1.dev61 → verifiers-0.2.1.dev66}/tests/test_tool_utils.py +0 -0
- {verifiers-0.2.1.dev61 → verifiers-0.2.1.dev66}/tests/test_trajectory_processing.py +0 -0
- {verifiers-0.2.1.dev61 → verifiers-0.2.1.dev66}/tests/test_tui_info_formatting.py +0 -0
- {verifiers-0.2.1.dev61 → verifiers-0.2.1.dev66}/tests/test_types.py +0 -0
- {verifiers-0.2.1.dev61 → verifiers-0.2.1.dev66}/tests/test_xml_parser.py +0 -0
- {verifiers-0.2.1.dev61 → verifiers-0.2.1.dev66}/tests/v1/conftest.py +0 -0
- {verifiers-0.2.1.dev61 → verifiers-0.2.1.dev66}/tests/v1/fixtures/counter_tool_v1.py +0 -0
- {verifiers-0.2.1.dev61 → verifiers-0.2.1.dev66}/tests/v1/fixtures/echo_agentic_v1.py +0 -0
- {verifiers-0.2.1.dev61 → verifiers-0.2.1.dev66}/tests/v1/fixtures/echo_multi_v0.py +0 -0
- {verifiers-0.2.1.dev61 → verifiers-0.2.1.dev66}/tests/v1/fixtures/echo_tool_v1.py +0 -0
- {verifiers-0.2.1.dev61 → verifiers-0.2.1.dev66}/tests/v1/fixtures/echo_user_sim_v1.py +0 -0
- {verifiers-0.2.1.dev61 → verifiers-0.2.1.dev66}/tests/v1/fixtures/echo_v0.py +0 -0
- {verifiers-0.2.1.dev61 → verifiers-0.2.1.dev66}/tests/v1/fixtures/echo_v1.py +0 -0
- {verifiers-0.2.1.dev61 → verifiers-0.2.1.dev66}/tests/v1/fixtures/pyproject.toml +0 -0
- {verifiers-0.2.1.dev61 → verifiers-0.2.1.dev66}/tests/v1/fixtures/tool_response_image_v1.py +0 -0
- {verifiers-0.2.1.dev61 → verifiers-0.2.1.dev66}/tests/v1/test_color_codeword_tasks.py +0 -0
- {verifiers-0.2.1.dev61 → verifiers-0.2.1.dev66}/tests/v1/test_configs.py +0 -0
- {verifiers-0.2.1.dev61 → verifiers-0.2.1.dev66}/tests/v1/test_e2e.py +0 -0
- {verifiers-0.2.1.dev61 → verifiers-0.2.1.dev66}/tests/v1/test_envs.py +0 -0
- {verifiers-0.2.1.dev61 → verifiers-0.2.1.dev66}/tests/v1/test_graph.py +0 -0
- {verifiers-0.2.1.dev61 → verifiers-0.2.1.dev66}/tests/v1/test_judges.py +0 -0
- {verifiers-0.2.1.dev61 → verifiers-0.2.1.dev66}/tests/v1/test_legacy.py +0 -0
- {verifiers-0.2.1.dev61 → verifiers-0.2.1.dev66}/tests/v1/test_scoring.py +0 -0
- {verifiers-0.2.1.dev61 → verifiers-0.2.1.dev66}/tests/v1/test_taskset.py +0 -0
- {verifiers-0.2.1.dev61 → verifiers-0.2.1.dev66}/tests/v1/test_trace.py +0 -0
- {verifiers-0.2.1.dev61 → verifiers-0.2.1.dev66}/verifiers/__init__.py +0 -0
- {verifiers-0.2.1.dev61 → verifiers-0.2.1.dev66}/verifiers/cli/__init__.py +0 -0
- {verifiers-0.2.1.dev61 → verifiers-0.2.1.dev66}/verifiers/cli/commands/__init__.py +0 -0
- {verifiers-0.2.1.dev61 → verifiers-0.2.1.dev66}/verifiers/cli/commands/build.py +0 -0
- {verifiers-0.2.1.dev61 → verifiers-0.2.1.dev66}/verifiers/cli/commands/eval.py +0 -0
- {verifiers-0.2.1.dev61 → verifiers-0.2.1.dev66}/verifiers/cli/commands/gepa.py +0 -0
- {verifiers-0.2.1.dev61 → verifiers-0.2.1.dev66}/verifiers/cli/commands/init.py +0 -0
- {verifiers-0.2.1.dev61 → verifiers-0.2.1.dev66}/verifiers/cli/commands/install.py +0 -0
- {verifiers-0.2.1.dev61 → verifiers-0.2.1.dev66}/verifiers/cli/commands/setup.py +0 -0
- {verifiers-0.2.1.dev61 → verifiers-0.2.1.dev66}/verifiers/cli/plugins/__init__.py +0 -0
- {verifiers-0.2.1.dev61 → verifiers-0.2.1.dev66}/verifiers/cli/plugins/prime.py +0 -0
- {verifiers-0.2.1.dev61 → verifiers-0.2.1.dev66}/verifiers/cli/tui.py +0 -0
- {verifiers-0.2.1.dev61 → verifiers-0.2.1.dev66}/verifiers/clients/__init__.py +0 -0
- {verifiers-0.2.1.dev61 → verifiers-0.2.1.dev66}/verifiers/clients/anthropic_messages_client.py +0 -0
- {verifiers-0.2.1.dev61 → verifiers-0.2.1.dev66}/verifiers/clients/client.py +0 -0
- {verifiers-0.2.1.dev61 → verifiers-0.2.1.dev66}/verifiers/clients/nemorl_chat_completions_client.py +0 -0
- {verifiers-0.2.1.dev61 → verifiers-0.2.1.dev66}/verifiers/clients/openai_chat_completions_client.py +0 -0
- {verifiers-0.2.1.dev61 → verifiers-0.2.1.dev66}/verifiers/clients/openai_chat_completions_token_client.py +0 -0
- {verifiers-0.2.1.dev61 → verifiers-0.2.1.dev66}/verifiers/clients/openai_completions_client.py +0 -0
- {verifiers-0.2.1.dev61 → verifiers-0.2.1.dev66}/verifiers/clients/openai_responses_client.py +0 -0
- {verifiers-0.2.1.dev61 → verifiers-0.2.1.dev66}/verifiers/clients/renderer_client.py +0 -0
- {verifiers-0.2.1.dev61 → verifiers-0.2.1.dev66}/verifiers/decorators.py +0 -0
- {verifiers-0.2.1.dev61 → verifiers-0.2.1.dev66}/verifiers/envs/AGENTS.md +0 -0
- {verifiers-0.2.1.dev61 → verifiers-0.2.1.dev66}/verifiers/envs/__init__.py +0 -0
- {verifiers-0.2.1.dev61 → verifiers-0.2.1.dev66}/verifiers/envs/env_group.py +0 -0
- {verifiers-0.2.1.dev61 → verifiers-0.2.1.dev66}/verifiers/envs/environment.py +0 -0
- {verifiers-0.2.1.dev61 → verifiers-0.2.1.dev66}/verifiers/envs/experimental/README.md +0 -0
- {verifiers-0.2.1.dev61 → verifiers-0.2.1.dev66}/verifiers/envs/experimental/__init__.py +0 -0
- {verifiers-0.2.1.dev61 → verifiers-0.2.1.dev66}/verifiers/envs/experimental/cli_agent_env.py +0 -0
- {verifiers-0.2.1.dev61 → verifiers-0.2.1.dev66}/verifiers/envs/experimental/composable/README.md +0 -0
- {verifiers-0.2.1.dev61 → verifiers-0.2.1.dev66}/verifiers/envs/experimental/composable/__init__.py +0 -0
- {verifiers-0.2.1.dev61 → verifiers-0.2.1.dev66}/verifiers/envs/experimental/composable/_filter.py +0 -0
- {verifiers-0.2.1.dev61 → verifiers-0.2.1.dev66}/verifiers/envs/experimental/composable/composable_env.py +0 -0
- {verifiers-0.2.1.dev61 → verifiers-0.2.1.dev66}/verifiers/envs/experimental/composable/harness.py +0 -0
- {verifiers-0.2.1.dev61 → verifiers-0.2.1.dev66}/verifiers/envs/experimental/composable/harnesses/__init__.py +0 -0
- {verifiers-0.2.1.dev61 → verifiers-0.2.1.dev66}/verifiers/envs/experimental/composable/harnesses/mini_swe_agent.py +0 -0
- {verifiers-0.2.1.dev61 → verifiers-0.2.1.dev66}/verifiers/envs/experimental/composable/harnesses/opencode.py +0 -0
- {verifiers-0.2.1.dev61 → verifiers-0.2.1.dev66}/verifiers/envs/experimental/composable/harnesses/prompt.txt +0 -0
- {verifiers-0.2.1.dev61 → verifiers-0.2.1.dev66}/verifiers/envs/experimental/composable/harnesses/rlm.py +0 -0
- {verifiers-0.2.1.dev61 → verifiers-0.2.1.dev66}/verifiers/envs/experimental/composable/sandbox_debug_env.py +0 -0
- {verifiers-0.2.1.dev61 → verifiers-0.2.1.dev66}/verifiers/envs/experimental/composable/swe_debug_env.py +0 -0
- {verifiers-0.2.1.dev61 → verifiers-0.2.1.dev66}/verifiers/envs/experimental/composable/task.py +0 -0
- {verifiers-0.2.1.dev61 → verifiers-0.2.1.dev66}/verifiers/envs/experimental/composable/tasksets/__init__.py +0 -0
- {verifiers-0.2.1.dev61 → verifiers-0.2.1.dev66}/verifiers/envs/experimental/composable/tasksets/cp/__init__.py +0 -0
- {verifiers-0.2.1.dev61 → verifiers-0.2.1.dev66}/verifiers/envs/experimental/composable/tasksets/cp/cp_task.py +0 -0
- {verifiers-0.2.1.dev61 → verifiers-0.2.1.dev66}/verifiers/envs/experimental/composable/tasksets/cp/test_utils.py +0 -0
- {verifiers-0.2.1.dev61 → verifiers-0.2.1.dev66}/verifiers/envs/experimental/composable/tasksets/harbor/__init__.py +0 -0
- {verifiers-0.2.1.dev61 → verifiers-0.2.1.dev66}/verifiers/envs/experimental/composable/tasksets/harbor/cli_gym.py +0 -0
- {verifiers-0.2.1.dev61 → verifiers-0.2.1.dev66}/verifiers/envs/experimental/composable/tasksets/harbor/harbor.py +0 -0
- {verifiers-0.2.1.dev61 → verifiers-0.2.1.dev66}/verifiers/envs/experimental/composable/tasksets/harbor/terminal_lego.py +0 -0
- {verifiers-0.2.1.dev61 → verifiers-0.2.1.dev66}/verifiers/envs/experimental/composable/tasksets/math/__init__.py +0 -0
- {verifiers-0.2.1.dev61 → verifiers-0.2.1.dev66}/verifiers/envs/experimental/composable/tasksets/math/math_task.py +0 -0
- {verifiers-0.2.1.dev61 → verifiers-0.2.1.dev66}/verifiers/envs/experimental/composable/tasksets/swe/README.md +0 -0
- {verifiers-0.2.1.dev61 → verifiers-0.2.1.dev66}/verifiers/envs/experimental/composable/tasksets/swe/__init__.py +0 -0
- {verifiers-0.2.1.dev61 → verifiers-0.2.1.dev66}/verifiers/envs/experimental/composable/tasksets/swe/multi_swe/__init__.py +0 -0
- {verifiers-0.2.1.dev61 → verifiers-0.2.1.dev66}/verifiers/envs/experimental/composable/tasksets/swe/multi_swe/extract_fix_patch.sh +0 -0
- {verifiers-0.2.1.dev61 → verifiers-0.2.1.dev66}/verifiers/envs/experimental/composable/tasksets/swe/multi_swe/taskset.py +0 -0
- {verifiers-0.2.1.dev61 → verifiers-0.2.1.dev66}/verifiers/envs/experimental/composable/tasksets/swe/openswe/__init__.py +0 -0
- {verifiers-0.2.1.dev61 → verifiers-0.2.1.dev66}/verifiers/envs/experimental/composable/tasksets/swe/openswe/taskset.py +0 -0
- {verifiers-0.2.1.dev61 → verifiers-0.2.1.dev66}/verifiers/envs/experimental/composable/tasksets/swe/r2e_gym/__init__.py +0 -0
- {verifiers-0.2.1.dev61 → verifiers-0.2.1.dev66}/verifiers/envs/experimental/composable/tasksets/swe/r2e_gym/log_parser.py +0 -0
- {verifiers-0.2.1.dev61 → verifiers-0.2.1.dev66}/verifiers/envs/experimental/composable/tasksets/swe/r2e_gym/taskset.py +0 -0
- {verifiers-0.2.1.dev61 → verifiers-0.2.1.dev66}/verifiers/envs/experimental/composable/tasksets/swe/scale_swe/__init__.py +0 -0
- {verifiers-0.2.1.dev61 → verifiers-0.2.1.dev66}/verifiers/envs/experimental/composable/tasksets/swe/scale_swe/taskset.py +0 -0
- {verifiers-0.2.1.dev61 → verifiers-0.2.1.dev66}/verifiers/envs/experimental/composable/tasksets/swe/shared/__init__.py +0 -0
- {verifiers-0.2.1.dev61 → verifiers-0.2.1.dev66}/verifiers/envs/experimental/composable/tasksets/swe/shared/test_patch.py +0 -0
- {verifiers-0.2.1.dev61 → verifiers-0.2.1.dev66}/verifiers/envs/experimental/composable/tasksets/swe/swe_bench/__init__.py +0 -0
- {verifiers-0.2.1.dev61 → verifiers-0.2.1.dev66}/verifiers/envs/experimental/composable/tasksets/swe/swe_bench/taskset.py +0 -0
- {verifiers-0.2.1.dev61 → verifiers-0.2.1.dev66}/verifiers/envs/experimental/composable/tasksets/swe/swe_lego/__init__.py +0 -0
- {verifiers-0.2.1.dev61 → verifiers-0.2.1.dev66}/verifiers/envs/experimental/composable/tasksets/swe/swe_lego/taskset.py +0 -0
- {verifiers-0.2.1.dev61 → verifiers-0.2.1.dev66}/verifiers/envs/experimental/composable/tasksets/swe/swe_rebench_v2/__init__.py +0 -0
- {verifiers-0.2.1.dev61 → verifiers-0.2.1.dev66}/verifiers/envs/experimental/composable/tasksets/swe/swe_rebench_v2/log_parsers.py +0 -0
- {verifiers-0.2.1.dev61 → verifiers-0.2.1.dev66}/verifiers/envs/experimental/composable/tasksets/swe/swe_rebench_v2/taskset.py +0 -0
- {verifiers-0.2.1.dev61 → verifiers-0.2.1.dev66}/verifiers/envs/experimental/composable/tasksets/swe/swe_smith/__init__.py +0 -0
- {verifiers-0.2.1.dev61 → verifiers-0.2.1.dev66}/verifiers/envs/experimental/composable/tasksets/swe/swe_smith/taskset.py +0 -0
- {verifiers-0.2.1.dev61 → verifiers-0.2.1.dev66}/verifiers/envs/experimental/composable/tasksets/swe/swe_tasksets.py +0 -0
- {verifiers-0.2.1.dev61 → verifiers-0.2.1.dev66}/verifiers/envs/experimental/gym_env.py +0 -0
- {verifiers-0.2.1.dev61 → verifiers-0.2.1.dev66}/verifiers/envs/experimental/harbor_env/__init__.py +0 -0
- {verifiers-0.2.1.dev61 → verifiers-0.2.1.dev66}/verifiers/envs/experimental/harbor_env/env.py +0 -0
- {verifiers-0.2.1.dev61 → verifiers-0.2.1.dev66}/verifiers/envs/experimental/harbor_env/mcp.py +0 -0
- {verifiers-0.2.1.dev61 → verifiers-0.2.1.dev66}/verifiers/envs/experimental/mcp_env.py +0 -0
- {verifiers-0.2.1.dev61 → verifiers-0.2.1.dev66}/verifiers/envs/experimental/opencode_env.py +0 -0
- {verifiers-0.2.1.dev61 → verifiers-0.2.1.dev66}/verifiers/envs/experimental/opencode_qa_env.py +0 -0
- {verifiers-0.2.1.dev61 → verifiers-0.2.1.dev66}/verifiers/envs/experimental/opencode_rlm_env.py +0 -0
- {verifiers-0.2.1.dev61 → verifiers-0.2.1.dev66}/verifiers/envs/experimental/sandbox_mixin.py +0 -0
- {verifiers-0.2.1.dev61 → verifiers-0.2.1.dev66}/verifiers/envs/experimental/utils/__init__.py +0 -0
- {verifiers-0.2.1.dev61 → verifiers-0.2.1.dev66}/verifiers/envs/experimental/utils/file_locks.py +0 -0
- {verifiers-0.2.1.dev61 → verifiers-0.2.1.dev66}/verifiers/envs/experimental/utils/git_checkout_cache.py +0 -0
- {verifiers-0.2.1.dev61 → verifiers-0.2.1.dev66}/verifiers/envs/integrations/README.md +0 -0
- {verifiers-0.2.1.dev61 → verifiers-0.2.1.dev66}/verifiers/envs/integrations/__init__.py +0 -0
- {verifiers-0.2.1.dev61 → verifiers-0.2.1.dev66}/verifiers/envs/integrations/browser_env/README.md +0 -0
- {verifiers-0.2.1.dev61 → verifiers-0.2.1.dev66}/verifiers/envs/integrations/browser_env/__init__.py +0 -0
- {verifiers-0.2.1.dev61 → verifiers-0.2.1.dev66}/verifiers/envs/integrations/browser_env/browser_env.py +0 -0
- {verifiers-0.2.1.dev61 → verifiers-0.2.1.dev66}/verifiers/envs/integrations/browser_env/modes/__init__.py +0 -0
- {verifiers-0.2.1.dev61 → verifiers-0.2.1.dev66}/verifiers/envs/integrations/browser_env/modes/base.py +0 -0
- {verifiers-0.2.1.dev61 → verifiers-0.2.1.dev66}/verifiers/envs/integrations/browser_env/modes/cua_mode.py +0 -0
- {verifiers-0.2.1.dev61 → verifiers-0.2.1.dev66}/verifiers/envs/integrations/browser_env/modes/dom_mode.py +0 -0
- {verifiers-0.2.1.dev61 → verifiers-0.2.1.dev66}/verifiers/envs/integrations/openenv_env.py +0 -0
- {verifiers-0.2.1.dev61 → verifiers-0.2.1.dev66}/verifiers/envs/integrations/reasoninggym_env.py +0 -0
- {verifiers-0.2.1.dev61 → verifiers-0.2.1.dev66}/verifiers/envs/integrations/textarena_env.py +0 -0
- {verifiers-0.2.1.dev61 → verifiers-0.2.1.dev66}/verifiers/envs/multiturn_env.py +0 -0
- {verifiers-0.2.1.dev61 → verifiers-0.2.1.dev66}/verifiers/envs/python_env.py +0 -0
- {verifiers-0.2.1.dev61 → verifiers-0.2.1.dev66}/verifiers/envs/sandbox_env.py +0 -0
- {verifiers-0.2.1.dev61 → verifiers-0.2.1.dev66}/verifiers/envs/singleturn_env.py +0 -0
- {verifiers-0.2.1.dev61 → verifiers-0.2.1.dev66}/verifiers/envs/stateful_tool_env.py +0 -0
- {verifiers-0.2.1.dev61 → verifiers-0.2.1.dev66}/verifiers/envs/tool_env.py +0 -0
- {verifiers-0.2.1.dev61 → verifiers-0.2.1.dev66}/verifiers/errors.py +0 -0
- {verifiers-0.2.1.dev61 → verifiers-0.2.1.dev66}/verifiers/gepa/__init__.py +0 -0
- {verifiers-0.2.1.dev61 → verifiers-0.2.1.dev66}/verifiers/gepa/adapter.py +0 -0
- {verifiers-0.2.1.dev61 → verifiers-0.2.1.dev66}/verifiers/gepa/config.py +0 -0
- {verifiers-0.2.1.dev61 → verifiers-0.2.1.dev66}/verifiers/gepa/display.py +0 -0
- {verifiers-0.2.1.dev61 → verifiers-0.2.1.dev66}/verifiers/gepa/gepa_utils.py +0 -0
- {verifiers-0.2.1.dev61 → verifiers-0.2.1.dev66}/verifiers/parsers/__init__.py +0 -0
- {verifiers-0.2.1.dev61 → verifiers-0.2.1.dev66}/verifiers/parsers/maybe_think_parser.py +0 -0
- {verifiers-0.2.1.dev61 → verifiers-0.2.1.dev66}/verifiers/parsers/parser.py +0 -0
- {verifiers-0.2.1.dev61 → verifiers-0.2.1.dev66}/verifiers/parsers/think_parser.py +0 -0
- {verifiers-0.2.1.dev61 → verifiers-0.2.1.dev66}/verifiers/parsers/xml_parser.py +0 -0
- {verifiers-0.2.1.dev61 → verifiers-0.2.1.dev66}/verifiers/rubrics/__init__.py +0 -0
- {verifiers-0.2.1.dev61 → verifiers-0.2.1.dev66}/verifiers/rubrics/experimental/hybrid_math_rubric.py +0 -0
- {verifiers-0.2.1.dev61 → verifiers-0.2.1.dev66}/verifiers/rubrics/judge_rubric.py +0 -0
- {verifiers-0.2.1.dev61 → verifiers-0.2.1.dev66}/verifiers/rubrics/math_rubric.py +0 -0
- {verifiers-0.2.1.dev61 → verifiers-0.2.1.dev66}/verifiers/rubrics/rubric.py +0 -0
- {verifiers-0.2.1.dev61 → verifiers-0.2.1.dev66}/verifiers/rubrics/rubric_group.py +0 -0
- {verifiers-0.2.1.dev61 → verifiers-0.2.1.dev66}/verifiers/scripts/__init__.py +0 -0
- {verifiers-0.2.1.dev61 → verifiers-0.2.1.dev66}/verifiers/scripts/build.py +0 -0
- {verifiers-0.2.1.dev61 → verifiers-0.2.1.dev66}/verifiers/scripts/eval.py +0 -0
- {verifiers-0.2.1.dev61 → verifiers-0.2.1.dev66}/verifiers/scripts/gepa.py +0 -0
- {verifiers-0.2.1.dev61 → verifiers-0.2.1.dev66}/verifiers/scripts/init.py +0 -0
- {verifiers-0.2.1.dev61 → verifiers-0.2.1.dev66}/verifiers/scripts/install.py +0 -0
- {verifiers-0.2.1.dev61 → verifiers-0.2.1.dev66}/verifiers/scripts/setup.py +0 -0
- {verifiers-0.2.1.dev61 → verifiers-0.2.1.dev66}/verifiers/scripts/tui.py +0 -0
- {verifiers-0.2.1.dev61 → verifiers-0.2.1.dev66}/verifiers/serve/__init__.py +0 -0
- {verifiers-0.2.1.dev61 → verifiers-0.2.1.dev66}/verifiers/serve/client/env_client.py +0 -0
- {verifiers-0.2.1.dev61 → verifiers-0.2.1.dev66}/verifiers/serve/client/zmq_env_client.py +0 -0
- {verifiers-0.2.1.dev61 → verifiers-0.2.1.dev66}/verifiers/serve/server/__init__.py +0 -0
- {verifiers-0.2.1.dev61 → verifiers-0.2.1.dev66}/verifiers/serve/server/env_router.py +0 -0
- {verifiers-0.2.1.dev61 → verifiers-0.2.1.dev66}/verifiers/serve/server/env_server.py +0 -0
- {verifiers-0.2.1.dev61 → verifiers-0.2.1.dev66}/verifiers/serve/server/env_worker.py +0 -0
- {verifiers-0.2.1.dev61 → verifiers-0.2.1.dev66}/verifiers/serve/server/zmq_env_server.py +0 -0
- {verifiers-0.2.1.dev61 → verifiers-0.2.1.dev66}/verifiers/serve/types.py +0 -0
- {verifiers-0.2.1.dev61 → verifiers-0.2.1.dev66}/verifiers/types.py +0 -0
- {verifiers-0.2.1.dev61 → verifiers-0.2.1.dev66}/verifiers/utils/__init__.py +0 -0
- {verifiers-0.2.1.dev61 → verifiers-0.2.1.dev66}/verifiers/utils/async_utils.py +0 -0
- {verifiers-0.2.1.dev61 → verifiers-0.2.1.dev66}/verifiers/utils/client_utils.py +0 -0
- {verifiers-0.2.1.dev61 → verifiers-0.2.1.dev66}/verifiers/utils/config_utils.py +0 -0
- {verifiers-0.2.1.dev61 → verifiers-0.2.1.dev66}/verifiers/utils/data_utils.py +0 -0
- {verifiers-0.2.1.dev61 → verifiers-0.2.1.dev66}/verifiers/utils/display_utils.py +0 -0
- {verifiers-0.2.1.dev61 → verifiers-0.2.1.dev66}/verifiers/utils/env_config_utils.py +0 -0
- {verifiers-0.2.1.dev61 → verifiers-0.2.1.dev66}/verifiers/utils/env_utils.py +0 -0
- {verifiers-0.2.1.dev61 → verifiers-0.2.1.dev66}/verifiers/utils/error_utils.py +0 -0
- {verifiers-0.2.1.dev61 → verifiers-0.2.1.dev66}/verifiers/utils/eval_display.py +0 -0
- {verifiers-0.2.1.dev61 → verifiers-0.2.1.dev66}/verifiers/utils/eval_utils.py +0 -0
- {verifiers-0.2.1.dev61 → verifiers-0.2.1.dev66}/verifiers/utils/heartbeat.py +0 -0
- {verifiers-0.2.1.dev61 → verifiers-0.2.1.dev66}/verifiers/utils/import_utils.py +0 -0
- {verifiers-0.2.1.dev61 → verifiers-0.2.1.dev66}/verifiers/utils/install_utils.py +0 -0
- {verifiers-0.2.1.dev61 → verifiers-0.2.1.dev66}/verifiers/utils/interception_utils.py +0 -0
- {verifiers-0.2.1.dev61 → verifiers-0.2.1.dev66}/verifiers/utils/logging_utils.py +0 -0
- {verifiers-0.2.1.dev61 → verifiers-0.2.1.dev66}/verifiers/utils/message_utils.py +0 -0
- {verifiers-0.2.1.dev61 → verifiers-0.2.1.dev66}/verifiers/utils/metric_utils.py +0 -0
- {verifiers-0.2.1.dev61 → verifiers-0.2.1.dev66}/verifiers/utils/path_utils.py +0 -0
- {verifiers-0.2.1.dev61 → verifiers-0.2.1.dev66}/verifiers/utils/pricing_utils.py +0 -0
- {verifiers-0.2.1.dev61 → verifiers-0.2.1.dev66}/verifiers/utils/process_utils.py +0 -0
- {verifiers-0.2.1.dev61 → verifiers-0.2.1.dev66}/verifiers/utils/response_utils.py +0 -0
- {verifiers-0.2.1.dev61 → verifiers-0.2.1.dev66}/verifiers/utils/save_utils.py +0 -0
- {verifiers-0.2.1.dev61 → verifiers-0.2.1.dev66}/verifiers/utils/serve_utils.py +0 -0
- {verifiers-0.2.1.dev61 → verifiers-0.2.1.dev66}/verifiers/utils/thread_utils.py +0 -0
- {verifiers-0.2.1.dev61 → verifiers-0.2.1.dev66}/verifiers/utils/threaded_sandbox_client.py +0 -0
- {verifiers-0.2.1.dev61 → verifiers-0.2.1.dev66}/verifiers/utils/tool_utils.py +0 -0
- {verifiers-0.2.1.dev61 → verifiers-0.2.1.dev66}/verifiers/utils/usage_utils.py +0 -0
- {verifiers-0.2.1.dev61 → verifiers-0.2.1.dev66}/verifiers/utils/version_utils.py +0 -0
- {verifiers-0.2.1.dev61 → verifiers-0.2.1.dev66}/verifiers/v1/__init__.py +0 -0
- {verifiers-0.2.1.dev61 → verifiers-0.2.1.dev66}/verifiers/v1/cli/__init__.py +0 -0
- {verifiers-0.2.1.dev61 → verifiers-0.2.1.dev66}/verifiers/v1/cli/dashboard/__init__.py +0 -0
- {verifiers-0.2.1.dev61 → verifiers-0.2.1.dev66}/verifiers/v1/cli/dashboard/base.py +0 -0
- {verifiers-0.2.1.dev61 → verifiers-0.2.1.dev66}/verifiers/v1/cli/dashboard/eval.py +0 -0
- {verifiers-0.2.1.dev61 → verifiers-0.2.1.dev66}/verifiers/v1/cli/dashboard/replay.py +0 -0
- {verifiers-0.2.1.dev61 → verifiers-0.2.1.dev66}/verifiers/v1/cli/dashboard/validate.py +0 -0
- {verifiers-0.2.1.dev61 → verifiers-0.2.1.dev66}/verifiers/v1/cli/debug.py +0 -0
- {verifiers-0.2.1.dev61 → verifiers-0.2.1.dev66}/verifiers/v1/cli/eval/__init__.py +0 -0
- {verifiers-0.2.1.dev61 → verifiers-0.2.1.dev66}/verifiers/v1/cli/eval/main.py +0 -0
- {verifiers-0.2.1.dev61 → verifiers-0.2.1.dev66}/verifiers/v1/cli/eval/resume.py +0 -0
- {verifiers-0.2.1.dev61 → verifiers-0.2.1.dev66}/verifiers/v1/cli/eval/runner.py +0 -0
- {verifiers-0.2.1.dev61 → verifiers-0.2.1.dev66}/verifiers/v1/cli/gepa.py +0 -0
- {verifiers-0.2.1.dev61 → verifiers-0.2.1.dev66}/verifiers/v1/cli/init.py +0 -0
- {verifiers-0.2.1.dev61 → verifiers-0.2.1.dev66}/verifiers/v1/cli/output.py +0 -0
- {verifiers-0.2.1.dev61 → verifiers-0.2.1.dev66}/verifiers/v1/cli/replay.py +0 -0
- {verifiers-0.2.1.dev61 → verifiers-0.2.1.dev66}/verifiers/v1/cli/resolve.py +0 -0
- {verifiers-0.2.1.dev61 → verifiers-0.2.1.dev66}/verifiers/v1/cli/serve.py +0 -0
- {verifiers-0.2.1.dev61 → verifiers-0.2.1.dev66}/verifiers/v1/cli/validate.py +0 -0
- {verifiers-0.2.1.dev61 → verifiers-0.2.1.dev66}/verifiers/v1/clients/__init__.py +0 -0
- {verifiers-0.2.1.dev61 → verifiers-0.2.1.dev66}/verifiers/v1/clients/client.py +0 -0
- {verifiers-0.2.1.dev61 → verifiers-0.2.1.dev66}/verifiers/v1/clients/config.py +0 -0
- {verifiers-0.2.1.dev61 → verifiers-0.2.1.dev66}/verifiers/v1/clients/eval.py +0 -0
- {verifiers-0.2.1.dev61 → verifiers-0.2.1.dev66}/verifiers/v1/clients/train.py +0 -0
- {verifiers-0.2.1.dev61 → verifiers-0.2.1.dev66}/verifiers/v1/configs/__init__.py +0 -0
- {verifiers-0.2.1.dev61 → verifiers-0.2.1.dev66}/verifiers/v1/configs/debug.py +0 -0
- {verifiers-0.2.1.dev61 → verifiers-0.2.1.dev66}/verifiers/v1/configs/eval.py +0 -0
- {verifiers-0.2.1.dev61 → verifiers-0.2.1.dev66}/verifiers/v1/configs/init.py +0 -0
- {verifiers-0.2.1.dev61 → verifiers-0.2.1.dev66}/verifiers/v1/configs/replay.py +0 -0
- {verifiers-0.2.1.dev61 → verifiers-0.2.1.dev66}/verifiers/v1/configs/serve.py +0 -0
- {verifiers-0.2.1.dev61 → verifiers-0.2.1.dev66}/verifiers/v1/configs/validate.py +0 -0
- {verifiers-0.2.1.dev61 → verifiers-0.2.1.dev66}/verifiers/v1/decorators.py +0 -0
- {verifiers-0.2.1.dev61 → verifiers-0.2.1.dev66}/verifiers/v1/dialects/__init__.py +0 -0
- {verifiers-0.2.1.dev61 → verifiers-0.2.1.dev66}/verifiers/v1/dialects/anthropic.py +0 -0
- {verifiers-0.2.1.dev61 → verifiers-0.2.1.dev66}/verifiers/v1/dialects/base.py +0 -0
- {verifiers-0.2.1.dev61 → verifiers-0.2.1.dev66}/verifiers/v1/dialects/chat.py +0 -0
- {verifiers-0.2.1.dev61 → verifiers-0.2.1.dev66}/verifiers/v1/dialects/responses.py +0 -0
- {verifiers-0.2.1.dev61 → verifiers-0.2.1.dev66}/verifiers/v1/env.py +0 -0
- {verifiers-0.2.1.dev61 → verifiers-0.2.1.dev66}/verifiers/v1/episode.py +0 -0
- {verifiers-0.2.1.dev61 → verifiers-0.2.1.dev66}/verifiers/v1/errors.py +0 -0
- {verifiers-0.2.1.dev61 → verifiers-0.2.1.dev66}/verifiers/v1/gepa/__init__.py +0 -0
- {verifiers-0.2.1.dev61 → verifiers-0.2.1.dev66}/verifiers/v1/gepa/adapter.py +0 -0
- {verifiers-0.2.1.dev61 → verifiers-0.2.1.dev66}/verifiers/v1/gepa/config.py +0 -0
- {verifiers-0.2.1.dev61 → verifiers-0.2.1.dev66}/verifiers/v1/gepa/dataset.py +0 -0
- {verifiers-0.2.1.dev61 → verifiers-0.2.1.dev66}/verifiers/v1/gepa/reflection.py +0 -0
- {verifiers-0.2.1.dev61 → verifiers-0.2.1.dev66}/verifiers/v1/gepa/runner.py +0 -0
- {verifiers-0.2.1.dev61 → verifiers-0.2.1.dev66}/verifiers/v1/graph.py +0 -0
- {verifiers-0.2.1.dev61 → verifiers-0.2.1.dev66}/verifiers/v1/harness.py +0 -0
- {verifiers-0.2.1.dev61 → verifiers-0.2.1.dev66}/verifiers/v1/harnesses/bash/__init__.py +0 -0
- {verifiers-0.2.1.dev61 → verifiers-0.2.1.dev66}/verifiers/v1/harnesses/bash/harness.py +0 -0
- {verifiers-0.2.1.dev61 → verifiers-0.2.1.dev66}/verifiers/v1/harnesses/claude_code/__init__.py +0 -0
- {verifiers-0.2.1.dev61 → verifiers-0.2.1.dev66}/verifiers/v1/harnesses/codex/__init__.py +0 -0
- {verifiers-0.2.1.dev61 → verifiers-0.2.1.dev66}/verifiers/v1/harnesses/kimi_code/__init__.py +0 -0
- {verifiers-0.2.1.dev61 → verifiers-0.2.1.dev66}/verifiers/v1/harnesses/mini_swe_agent/__init__.py +0 -0
- {verifiers-0.2.1.dev61 → verifiers-0.2.1.dev66}/verifiers/v1/harnesses/null/__init__.py +0 -0
- {verifiers-0.2.1.dev61 → verifiers-0.2.1.dev66}/verifiers/v1/harnesses/null/harness.py +0 -0
- {verifiers-0.2.1.dev61 → verifiers-0.2.1.dev66}/verifiers/v1/harnesses/pi/__init__.py +0 -0
- {verifiers-0.2.1.dev61 → verifiers-0.2.1.dev66}/verifiers/v1/harnesses/rlm/__init__.py +0 -0
- {verifiers-0.2.1.dev61 → verifiers-0.2.1.dev66}/verifiers/v1/harnesses/rlm/harness.py +0 -0
- {verifiers-0.2.1.dev61 → verifiers-0.2.1.dev66}/verifiers/v1/harnesses/terminus_2/__init__.py +0 -0
- {verifiers-0.2.1.dev61 → verifiers-0.2.1.dev66}/verifiers/v1/harnesses/terminus_2/harness.py +0 -0
- {verifiers-0.2.1.dev61 → verifiers-0.2.1.dev66}/verifiers/v1/harnesses/terminus_2/program.py +0 -0
- {verifiers-0.2.1.dev61 → verifiers-0.2.1.dev66}/verifiers/v1/interception/__init__.py +0 -0
- {verifiers-0.2.1.dev61 → verifiers-0.2.1.dev66}/verifiers/v1/interception/base.py +0 -0
- {verifiers-0.2.1.dev61 → verifiers-0.2.1.dev66}/verifiers/v1/interception/pool.py +0 -0
- {verifiers-0.2.1.dev61 → verifiers-0.2.1.dev66}/verifiers/v1/interception/tunnel/__init__.py +0 -0
- {verifiers-0.2.1.dev61 → verifiers-0.2.1.dev66}/verifiers/v1/interception/tunnel/base.py +0 -0
- {verifiers-0.2.1.dev61 → verifiers-0.2.1.dev66}/verifiers/v1/interception/tunnel/custom.py +0 -0
- {verifiers-0.2.1.dev61 → verifiers-0.2.1.dev66}/verifiers/v1/interception/tunnel/prime.py +0 -0
- {verifiers-0.2.1.dev61 → verifiers-0.2.1.dev66}/verifiers/v1/judge.py +0 -0
- {verifiers-0.2.1.dev61 → verifiers-0.2.1.dev66}/verifiers/v1/judges/__init__.py +0 -0
- {verifiers-0.2.1.dev61 → verifiers-0.2.1.dev66}/verifiers/v1/judges/reference.py +0 -0
- {verifiers-0.2.1.dev61 → verifiers-0.2.1.dev66}/verifiers/v1/judges/reference.txt +0 -0
- {verifiers-0.2.1.dev61 → verifiers-0.2.1.dev66}/verifiers/v1/judges/rubric.py +0 -0
- {verifiers-0.2.1.dev61 → verifiers-0.2.1.dev66}/verifiers/v1/judges/rubric.txt +0 -0
- {verifiers-0.2.1.dev61 → verifiers-0.2.1.dev66}/verifiers/v1/legacy.py +0 -0
- {verifiers-0.2.1.dev61 → verifiers-0.2.1.dev66}/verifiers/v1/loaders.py +0 -0
- {verifiers-0.2.1.dev61 → verifiers-0.2.1.dev66}/verifiers/v1/mcp/server.py +0 -0
- {verifiers-0.2.1.dev61 → verifiers-0.2.1.dev66}/verifiers/v1/mcp/toolset.py +0 -0
- {verifiers-0.2.1.dev61 → verifiers-0.2.1.dev66}/verifiers/v1/push.py +0 -0
- {verifiers-0.2.1.dev61 → verifiers-0.2.1.dev66}/verifiers/v1/retries.py +0 -0
- {verifiers-0.2.1.dev61 → verifiers-0.2.1.dev66}/verifiers/v1/rollout.py +0 -0
- {verifiers-0.2.1.dev61 → verifiers-0.2.1.dev66}/verifiers/v1/runtimes/__init__.py +0 -0
- {verifiers-0.2.1.dev61 → verifiers-0.2.1.dev66}/verifiers/v1/runtimes/base.py +0 -0
- {verifiers-0.2.1.dev61 → verifiers-0.2.1.dev66}/verifiers/v1/runtimes/docker.py +0 -0
- {verifiers-0.2.1.dev61 → verifiers-0.2.1.dev66}/verifiers/v1/runtimes/limiters.py +0 -0
- {verifiers-0.2.1.dev61 → verifiers-0.2.1.dev66}/verifiers/v1/runtimes/modal.py +0 -0
- {verifiers-0.2.1.dev61 → verifiers-0.2.1.dev66}/verifiers/v1/runtimes/prime.py +0 -0
- {verifiers-0.2.1.dev61 → verifiers-0.2.1.dev66}/verifiers/v1/runtimes/subprocess.py +0 -0
- {verifiers-0.2.1.dev61 → verifiers-0.2.1.dev66}/verifiers/v1/scoring.py +0 -0
- {verifiers-0.2.1.dev61 → verifiers-0.2.1.dev66}/verifiers/v1/serve/__init__.py +0 -0
- {verifiers-0.2.1.dev61 → verifiers-0.2.1.dev66}/verifiers/v1/serve/client.py +0 -0
- {verifiers-0.2.1.dev61 → verifiers-0.2.1.dev66}/verifiers/v1/serve/pool.py +0 -0
- {verifiers-0.2.1.dev61 → verifiers-0.2.1.dev66}/verifiers/v1/serve/server.py +0 -0
- {verifiers-0.2.1.dev61 → verifiers-0.2.1.dev66}/verifiers/v1/serve/types.py +0 -0
- {verifiers-0.2.1.dev61 → verifiers-0.2.1.dev66}/verifiers/v1/session.py +0 -0
- {verifiers-0.2.1.dev61 → verifiers-0.2.1.dev66}/verifiers/v1/state.py +0 -0
- {verifiers-0.2.1.dev61 → verifiers-0.2.1.dev66}/verifiers/v1/task.py +0 -0
- {verifiers-0.2.1.dev61 → verifiers-0.2.1.dev66}/verifiers/v1/taskset.py +0 -0
- {verifiers-0.2.1.dev61 → verifiers-0.2.1.dev66}/verifiers/v1/tasksets/__init__.py +0 -0
- {verifiers-0.2.1.dev61 → verifiers-0.2.1.dev66}/verifiers/v1/tasksets/harbor/__init__.py +0 -0
- {verifiers-0.2.1.dev61 → verifiers-0.2.1.dev66}/verifiers/v1/tasksets/harbor/taskset.py +0 -0
- {verifiers-0.2.1.dev61 → verifiers-0.2.1.dev66}/verifiers/v1/tasksets/lean/__init__.py +0 -0
- {verifiers-0.2.1.dev61 → verifiers-0.2.1.dev66}/verifiers/v1/tasksets/lean/scoring.py +0 -0
- {verifiers-0.2.1.dev61 → verifiers-0.2.1.dev66}/verifiers/v1/tasksets/lean/taskset.py +0 -0
- {verifiers-0.2.1.dev61 → verifiers-0.2.1.dev66}/verifiers/v1/tasksets/openenv/__init__.py +0 -0
- {verifiers-0.2.1.dev61 → verifiers-0.2.1.dev66}/verifiers/v1/tasksets/openenv/taskset.py +0 -0
- {verifiers-0.2.1.dev61 → verifiers-0.2.1.dev66}/verifiers/v1/tasksets/textarena/__init__.py +0 -0
- {verifiers-0.2.1.dev61 → verifiers-0.2.1.dev66}/verifiers/v1/tasksets/textarena/taskset.py +0 -0
- {verifiers-0.2.1.dev61 → verifiers-0.2.1.dev66}/verifiers/v1/trace.py +0 -0
- {verifiers-0.2.1.dev61 → verifiers-0.2.1.dev66}/verifiers/v1/types.py +0 -0
- {verifiers-0.2.1.dev61 → verifiers-0.2.1.dev66}/verifiers/v1/utils/__init__.py +0 -0
- {verifiers-0.2.1.dev61 → verifiers-0.2.1.dev66}/verifiers/v1/utils/aio.py +0 -0
- {verifiers-0.2.1.dev61 → verifiers-0.2.1.dev66}/verifiers/v1/utils/format.py +0 -0
- {verifiers-0.2.1.dev61 → verifiers-0.2.1.dev66}/verifiers/v1/utils/generic.py +0 -0
- {verifiers-0.2.1.dev61 → verifiers-0.2.1.dev66}/verifiers/v1/utils/image.py +0 -0
- {verifiers-0.2.1.dev61 → verifiers-0.2.1.dev66}/verifiers/v1/utils/install.py +0 -0
- {verifiers-0.2.1.dev61 → verifiers-0.2.1.dev66}/verifiers/v1/utils/interrupt.py +0 -0
- {verifiers-0.2.1.dev61 → verifiers-0.2.1.dev66}/verifiers/v1/utils/logging.py +0 -0
- {verifiers-0.2.1.dev61 → verifiers-0.2.1.dev66}/verifiers/v1/utils/memory.py +0 -0
- {verifiers-0.2.1.dev61 → verifiers-0.2.1.dev66}/verifiers/v1/utils/sampling.py +0 -0
- {verifiers-0.2.1.dev61 → verifiers-0.2.1.dev66}/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.1.
|
|
3
|
+
Version: 0.2.1.dev66
|
|
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
|
|
@@ -24,33 +24,32 @@ Requires-Python: <3.14,>=3.11
|
|
|
24
24
|
Requires-Dist: aiohttp>=3.9.0
|
|
25
25
|
Requires-Dist: aiolimiter>=1.2.1
|
|
26
26
|
Requires-Dist: anthropic>=0.78.0
|
|
27
|
-
Requires-Dist: datasets<
|
|
28
|
-
Requires-Dist: gepa
|
|
27
|
+
Requires-Dist: datasets<6.0.0,>=3.3.0
|
|
28
|
+
Requires-Dist: gepa>=0.0.6
|
|
29
29
|
Requires-Dist: httpx>=0.27.0
|
|
30
30
|
Requires-Dist: loguru>=0.7.0
|
|
31
31
|
Requires-Dist: math-verify>=0.8.0
|
|
32
|
-
Requires-Dist: mcp
|
|
32
|
+
Requires-Dist: mcp<2,>=1.24.0
|
|
33
33
|
Requires-Dist: msgpack>=1.1.2
|
|
34
|
-
Requires-Dist: numpy
|
|
35
|
-
Requires-Dist: openai-agents>=0.
|
|
36
|
-
Requires-Dist: openai>=
|
|
37
|
-
Requires-Dist: prime-pydantic-config[toml]>=0.
|
|
34
|
+
Requires-Dist: numpy>=2.1.0
|
|
35
|
+
Requires-Dist: openai-agents>=0.8.2
|
|
36
|
+
Requires-Dist: openai>=2.9.0
|
|
37
|
+
Requires-Dist: prime-pydantic-config[toml]>=0.4.2
|
|
38
38
|
Requires-Dist: prime-sandboxes>=0.2.31
|
|
39
39
|
Requires-Dist: prime-tunnel>=0.1.8
|
|
40
|
-
Requires-Dist: pydantic>=2.
|
|
40
|
+
Requires-Dist: pydantic>=2.12.3
|
|
41
41
|
Requires-Dist: pyzmq>=27.1.0
|
|
42
42
|
Requires-Dist: renderers>=0.1.8
|
|
43
43
|
Requires-Dist: requests
|
|
44
|
-
Requires-Dist: rich
|
|
44
|
+
Requires-Dist: rich>=11.0.0
|
|
45
45
|
Requires-Dist: setproctitle>=1.3.0
|
|
46
46
|
Requires-Dist: tenacity>=8.5.0
|
|
47
47
|
Requires-Dist: tomli-w>=1.0.0
|
|
48
|
-
Requires-Dist: typing-extensions
|
|
48
|
+
Requires-Dist: typing-extensions>=4.12.2
|
|
49
49
|
Requires-Dist: uvloop>=0.21.0; sys_platform != 'win32' and sys_platform != 'cygwin' and platform_python_implementation != 'PyPy'
|
|
50
50
|
Provides-Extra: browser
|
|
51
|
-
Requires-Dist: aiohttp>=3.9.0; extra == 'browser'
|
|
52
51
|
Requires-Dist: python-dotenv>=1.0.0; extra == 'browser'
|
|
53
|
-
Requires-Dist: stagehand>=3.
|
|
52
|
+
Requires-Dist: stagehand>=3.4.0; extra == 'browser'
|
|
54
53
|
Provides-Extra: harbor
|
|
55
54
|
Requires-Dist: harbor==0.14.0; (python_version >= '3.12') and extra == 'harbor'
|
|
56
55
|
Provides-Extra: modal
|
|
@@ -59,23 +58,8 @@ Provides-Extra: notebook
|
|
|
59
58
|
Requires-Dist: nest-asyncio>=1.6.0; extra == 'notebook'
|
|
60
59
|
Provides-Extra: openenv
|
|
61
60
|
Requires-Dist: openenv>=0.4.1; extra == 'openenv'
|
|
62
|
-
Provides-Extra: quest
|
|
63
|
-
Requires-Dist: certifi; extra == 'quest'
|
|
64
|
-
Requires-Dist: pillow; extra == 'quest'
|
|
65
|
-
Requires-Dist: pymupdf; extra == 'quest'
|
|
66
61
|
Provides-Extra: rg
|
|
67
|
-
Requires-Dist: reasoning-gym; extra == 'rg'
|
|
68
|
-
Provides-Extra: rl
|
|
69
|
-
Requires-Dist: accelerate>=1.4.0; extra == 'rl'
|
|
70
|
-
Requires-Dist: deepspeed>=0.17.6; extra == 'rl'
|
|
71
|
-
Requires-Dist: flash-attn>=2.8.3; extra == 'rl'
|
|
72
|
-
Requires-Dist: liger-kernel>=0.5.10; extra == 'rl'
|
|
73
|
-
Requires-Dist: peft; extra == 'rl'
|
|
74
|
-
Requires-Dist: requests; extra == 'rl'
|
|
75
|
-
Requires-Dist: torch<2.9.0,>=2.8.0; extra == 'rl'
|
|
76
|
-
Requires-Dist: transformers>=4.56.2; extra == 'rl'
|
|
77
|
-
Requires-Dist: vllm<0.11.0,>=0.10.0; extra == 'rl'
|
|
78
|
-
Requires-Dist: wandb; extra == 'rl'
|
|
62
|
+
Requires-Dist: reasoning-gym>=0.1.8; extra == 'rg'
|
|
79
63
|
Provides-Extra: ta
|
|
80
64
|
Requires-Dist: nltk>=3.9.2; extra == 'ta'
|
|
81
65
|
Requires-Dist: textarena==0.7.4; extra == 'ta'
|
|
@@ -28,47 +28,45 @@ classifiers = [
|
|
|
28
28
|
|
|
29
29
|
dependencies = [
|
|
30
30
|
"anthropic>=0.78.0",
|
|
31
|
-
"datasets>=3.0.0
|
|
32
|
-
"numpy",
|
|
31
|
+
"datasets>=3.3.0,<6.0.0",
|
|
32
|
+
"numpy>=2.1.0",
|
|
33
33
|
"math-verify>=0.8.0",
|
|
34
|
-
"mcp>=1.
|
|
35
|
-
"openai>=
|
|
36
|
-
"openai-agents>=0.
|
|
34
|
+
"mcp>=1.24.0,<2",
|
|
35
|
+
"openai>=2.9.0",
|
|
36
|
+
"openai-agents>=0.8.2",
|
|
37
37
|
"prime-tunnel>=0.1.8",
|
|
38
38
|
"prime-sandboxes>=0.2.31",
|
|
39
|
-
"pydantic>=2.
|
|
39
|
+
"pydantic>=2.12.3",
|
|
40
40
|
"requests",
|
|
41
|
-
"rich",
|
|
41
|
+
"rich>=11.0.0",
|
|
42
42
|
"tenacity>=8.5.0",
|
|
43
|
-
"gepa",
|
|
43
|
+
"gepa>=0.0.6",
|
|
44
44
|
"pyzmq>=27.1.0",
|
|
45
45
|
"msgpack>=1.1.2",
|
|
46
46
|
"aiolimiter>=1.2.1",
|
|
47
47
|
"setproctitle>=1.3.0",
|
|
48
48
|
"httpx>=0.27.0",
|
|
49
49
|
"aiohttp>=3.9.0",
|
|
50
|
-
"prime-pydantic-config[toml]>=0.
|
|
50
|
+
"prime-pydantic-config[toml]>=0.4.2",
|
|
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",
|
|
54
54
|
"renderers>=0.1.8",
|
|
55
|
-
"typing_extensions
|
|
55
|
+
"typing_extensions>=4.12.2",
|
|
56
56
|
]
|
|
57
57
|
|
|
58
58
|
[dependency-groups]
|
|
59
59
|
dev = [
|
|
60
|
-
"ruff",
|
|
61
|
-
"pre-commit",
|
|
60
|
+
"ruff>=0.9.0",
|
|
61
|
+
"pre-commit>=2.19.0",
|
|
62
62
|
"ty>=0.0.1a29,<0.0.22",
|
|
63
|
-
"pytest>=7.0.0",
|
|
63
|
+
"pytest>=7.0.0,<9.1.0",
|
|
64
64
|
"pytest-asyncio>=0.21.0",
|
|
65
65
|
"pytest-cov>=4.0.0",
|
|
66
66
|
"pytest-xdist>=3.8.0",
|
|
67
|
-
"
|
|
68
|
-
"
|
|
69
|
-
"
|
|
70
|
-
"stagehand>=3.0.0",
|
|
71
|
-
"aiohttp>=3.9.0",
|
|
67
|
+
"nest-asyncio>=1.6.0",
|
|
68
|
+
"reasoning-gym>=0.1.8",
|
|
69
|
+
"stagehand>=3.4.0",
|
|
72
70
|
"python-dotenv>=1.0.0",
|
|
73
71
|
"nltk>=3.9.2",
|
|
74
72
|
"textarena==0.7.4",
|
|
@@ -85,15 +83,14 @@ examples = [
|
|
|
85
83
|
|
|
86
84
|
[project.optional-dependencies]
|
|
87
85
|
rg = [
|
|
88
|
-
"reasoning-gym",
|
|
86
|
+
"reasoning-gym>=0.1.8",
|
|
89
87
|
]
|
|
90
88
|
ta = [
|
|
91
89
|
"textarena==0.7.4",
|
|
92
90
|
"nltk>=3.9.2",
|
|
93
91
|
]
|
|
94
92
|
browser = [
|
|
95
|
-
"stagehand>=3.
|
|
96
|
-
"aiohttp>=3.9.0",
|
|
93
|
+
"stagehand>=3.4.0",
|
|
97
94
|
"python-dotenv>=1.0.0",
|
|
98
95
|
]
|
|
99
96
|
harbor = [
|
|
@@ -109,24 +106,6 @@ notebook = [
|
|
|
109
106
|
openenv = [
|
|
110
107
|
"openenv>=0.4.1",
|
|
111
108
|
]
|
|
112
|
-
quest = [
|
|
113
|
-
"certifi",
|
|
114
|
-
"pillow",
|
|
115
|
-
"pymupdf",
|
|
116
|
-
]
|
|
117
|
-
rl = [
|
|
118
|
-
"torch>=2.8.0,<2.9.0",
|
|
119
|
-
"transformers>=4.56.2",
|
|
120
|
-
"accelerate>=1.4.0",
|
|
121
|
-
"requests",
|
|
122
|
-
"peft",
|
|
123
|
-
"wandb",
|
|
124
|
-
"vllm>=0.10.0,<0.11.0",
|
|
125
|
-
"liger-kernel>=0.5.10",
|
|
126
|
-
"deepspeed>=0.17.6",
|
|
127
|
-
"flash-attn>=2.8.3",
|
|
128
|
-
]
|
|
129
|
-
|
|
130
109
|
[tool.uv]
|
|
131
110
|
preview = true
|
|
132
111
|
required-version = ">=0.11.1"
|
|
@@ -159,12 +138,6 @@ prime-sandboxes = false
|
|
|
159
138
|
prime-pydantic-config = false
|
|
160
139
|
renderers = false
|
|
161
140
|
|
|
162
|
-
[tool.uv.extra-build-dependencies]
|
|
163
|
-
flash-attn = [{ requirement = "torch", match-runtime = true }]
|
|
164
|
-
|
|
165
|
-
[tool.uv.extra-build-variables]
|
|
166
|
-
flash-attn = { FLASH_ATTENTION_SKIP_CUDA_BUILD = "TRUE" }
|
|
167
|
-
|
|
168
141
|
[project.scripts]
|
|
169
142
|
vf-eval = "verifiers.scripts.eval:main"
|
|
170
143
|
eval = "verifiers.v1.cli.eval.main:main"
|
|
@@ -11,6 +11,7 @@ from verifiers.v1.harnesses.mini_swe_agent import (
|
|
|
11
11
|
)
|
|
12
12
|
from verifiers.v1.harnesses.null import NullHarness, NullHarnessConfig
|
|
13
13
|
from verifiers.v1.harnesses.pi import PiHarness, PiHarnessConfig
|
|
14
|
+
from verifiers.v1.harnesses.pool import PoolHarness, PoolHarnessConfig
|
|
14
15
|
from verifiers.v1.harnesses.rlm import RLMHarness, RLMHarnessConfig
|
|
15
16
|
from verifiers.v1.harnesses.terminus_2 import Terminus2Harness, Terminus2HarnessConfig
|
|
16
17
|
|
|
@@ -27,6 +28,8 @@ __all__ = [
|
|
|
27
28
|
"NullHarnessConfig",
|
|
28
29
|
"PiHarness",
|
|
29
30
|
"PiHarnessConfig",
|
|
31
|
+
"PoolHarness",
|
|
32
|
+
"PoolHarnessConfig",
|
|
30
33
|
"MiniSWEAgentHarness",
|
|
31
34
|
"MiniSWEAgentHarnessConfig",
|
|
32
35
|
"RLMHarness",
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
# /// script
|
|
2
2
|
# requires-python = ">=3.10"
|
|
3
|
-
# dependencies = ["openai", "mcp", "httpx"]
|
|
3
|
+
# dependencies = ["openai", "mcp", "httpx", "tenacity"]
|
|
4
4
|
# ///
|
|
5
5
|
"""Secrets arrive through argv so local tool subprocesses do not inherit them."""
|
|
6
6
|
|
|
@@ -8,14 +8,19 @@ import argparse
|
|
|
8
8
|
import asyncio
|
|
9
9
|
import json
|
|
10
10
|
import subprocess
|
|
11
|
-
from contextlib import AsyncExitStack
|
|
11
|
+
from contextlib import AsyncExitStack, asynccontextmanager, suppress
|
|
12
12
|
from pathlib import Path
|
|
13
13
|
|
|
14
14
|
import httpx
|
|
15
15
|
from openai import AsyncOpenAI
|
|
16
|
+
from tenacity import AsyncRetrying, stop_after_attempt, wait_exponential_jitter
|
|
16
17
|
|
|
17
18
|
SERPER_URL = "https://google.serper.dev/search"
|
|
18
19
|
|
|
20
|
+
MCP_CALL_ATTEMPTS = 6
|
|
21
|
+
MCP_TIMEOUT = httpx.Timeout(600.0, connect=5.0) # the OpenAI SDK client defaults
|
|
22
|
+
|
|
23
|
+
|
|
19
24
|
BASH_TOOL = {
|
|
20
25
|
"type": "function",
|
|
21
26
|
"function": {
|
|
@@ -177,29 +182,66 @@ async def chat(
|
|
|
177
182
|
return completion.choices[0].message
|
|
178
183
|
|
|
179
184
|
|
|
180
|
-
|
|
181
|
-
|
|
182
|
-
|
|
183
|
-
|
|
184
|
-
|
|
185
|
+
@asynccontextmanager
|
|
186
|
+
async def mcp_session(spec: dict):
|
|
187
|
+
"""One fresh streamable-HTTP session to an MCP server, opened and closed within the caller's
|
|
188
|
+
task so AnyIO cancellation scopes stay correctly nested. A teardown failure after the body
|
|
189
|
+
completed is swallowed — the result is already in hand, and closing noise must not fail (or
|
|
190
|
+
replay) an already-answered call."""
|
|
185
191
|
from mcp import ClientSession
|
|
186
192
|
from mcp.client.streamable_http import (
|
|
187
193
|
create_mcp_http_client,
|
|
188
194
|
streamable_http_client,
|
|
189
195
|
)
|
|
190
196
|
|
|
191
|
-
|
|
192
|
-
|
|
193
|
-
for name, spec in config.get("mcpServers", {}).items():
|
|
197
|
+
stack = AsyncExitStack()
|
|
198
|
+
try:
|
|
194
199
|
http_client = await stack.enter_async_context(
|
|
195
|
-
create_mcp_http_client(
|
|
200
|
+
create_mcp_http_client(
|
|
201
|
+
headers=spec.get("headers") or None, timeout=MCP_TIMEOUT
|
|
202
|
+
)
|
|
196
203
|
)
|
|
197
204
|
read, write, *_ = await stack.enter_async_context(
|
|
198
205
|
streamable_http_client(spec["url"], http_client=http_client)
|
|
199
206
|
)
|
|
200
207
|
session = await stack.enter_async_context(ClientSession(read, write))
|
|
201
208
|
await session.initialize()
|
|
202
|
-
|
|
209
|
+
yield session
|
|
210
|
+
finally:
|
|
211
|
+
with suppress(Exception):
|
|
212
|
+
await stack.aclose()
|
|
213
|
+
|
|
214
|
+
|
|
215
|
+
async def with_retry(call):
|
|
216
|
+
"""Run one session-scoped operation, retrying transient failures with backoff. A call whose
|
|
217
|
+
response was lost may be replayed — MCP has no idempotency key, so tools should tolerate
|
|
218
|
+
at-least-once delivery (a tool that fails reports through its result, not an exception)."""
|
|
219
|
+
async for attempt in AsyncRetrying(
|
|
220
|
+
stop=stop_after_attempt(MCP_CALL_ATTEMPTS),
|
|
221
|
+
wait=wait_exponential_jitter(initial=0.5, max=30),
|
|
222
|
+
reraise=True,
|
|
223
|
+
):
|
|
224
|
+
with attempt:
|
|
225
|
+
return await call()
|
|
226
|
+
|
|
227
|
+
|
|
228
|
+
async def connect_mcp(
|
|
229
|
+
config: dict, reserved: set[str]
|
|
230
|
+
) -> tuple[list[dict], dict, dict]:
|
|
231
|
+
"""Enumerate each configured MCP server's tools (a streamable-HTTP `url`); return (tool schemas,
|
|
232
|
+
dispatch mapping `<server>_<tool>` -> (server name, raw tool name), servers mapping name -> spec).
|
|
233
|
+
No session is held — a stateless-HTTP server is reconnected per call."""
|
|
234
|
+
tool_schemas: list[dict] = []
|
|
235
|
+
dispatch: dict[str, tuple] = {}
|
|
236
|
+
servers: dict[str, dict] = {}
|
|
237
|
+
for name, spec in config.get("mcpServers", {}).items():
|
|
238
|
+
servers[name] = spec
|
|
239
|
+
|
|
240
|
+
async def list_tools(spec: dict = spec):
|
|
241
|
+
async with mcp_session(spec) as session:
|
|
242
|
+
return (await session.list_tools()).tools
|
|
243
|
+
|
|
244
|
+
for tool in await with_retry(list_tools):
|
|
203
245
|
# A server named "" (TOOL_PREFIX = None) advertises its tools bare.
|
|
204
246
|
full = f"{name}_{tool.name}" if name else tool.name
|
|
205
247
|
if full in reserved or full in dispatch:
|
|
@@ -216,8 +258,8 @@ async def connect_mcp(
|
|
|
216
258
|
},
|
|
217
259
|
}
|
|
218
260
|
)
|
|
219
|
-
dispatch[full] = (
|
|
220
|
-
return tool_schemas, dispatch
|
|
261
|
+
dispatch[full] = (name, tool.name)
|
|
262
|
+
return tool_schemas, dispatch, servers
|
|
221
263
|
|
|
222
264
|
|
|
223
265
|
def mcp_content_to_chat_content(blocks) -> str | list[dict]:
|
|
@@ -237,9 +279,18 @@ def mcp_content_to_chat_content(blocks) -> str | list[dict]:
|
|
|
237
279
|
return parts
|
|
238
280
|
|
|
239
281
|
|
|
240
|
-
async def call_mcp(
|
|
241
|
-
|
|
242
|
-
|
|
282
|
+
async def call_mcp(
|
|
283
|
+
servers: dict, dispatch: dict, name: str, arguments: dict
|
|
284
|
+
) -> str | list[dict]:
|
|
285
|
+
"""Call a tool on a fresh session per attempt — see `with_retry` for the replay semantics.
|
|
286
|
+
The result is converted outside the retry so a conversion failure fails once."""
|
|
287
|
+
server_name, raw = dispatch[name]
|
|
288
|
+
|
|
289
|
+
async def call():
|
|
290
|
+
async with mcp_session(servers[server_name]) as session:
|
|
291
|
+
return await session.call_tool(raw, arguments)
|
|
292
|
+
|
|
293
|
+
result = await with_retry(call)
|
|
243
294
|
return mcp_content_to_chat_content(result.content)
|
|
244
295
|
|
|
245
296
|
|
|
@@ -268,84 +319,83 @@ async def main() -> None:
|
|
|
268
319
|
initial = json.loads(payload)
|
|
269
320
|
client = AsyncOpenAI(base_url=args.base_url, api_key=args.api_key)
|
|
270
321
|
config = json.loads(args.mcp_config or "{}")
|
|
271
|
-
|
|
272
|
-
|
|
273
|
-
|
|
274
|
-
|
|
275
|
-
|
|
276
|
-
|
|
277
|
-
|
|
278
|
-
|
|
279
|
-
|
|
280
|
-
|
|
281
|
-
|
|
282
|
-
|
|
283
|
-
|
|
284
|
-
|
|
285
|
-
|
|
286
|
-
|
|
287
|
-
|
|
288
|
-
|
|
289
|
-
|
|
290
|
-
|
|
291
|
-
|
|
292
|
-
|
|
293
|
-
|
|
294
|
-
|
|
295
|
-
|
|
296
|
-
|
|
297
|
-
|
|
298
|
-
|
|
299
|
-
|
|
300
|
-
|
|
301
|
-
|
|
302
|
-
|
|
303
|
-
|
|
304
|
-
|
|
305
|
-
|
|
306
|
-
|
|
307
|
-
|
|
308
|
-
|
|
309
|
-
|
|
310
|
-
|
|
311
|
-
|
|
312
|
-
|
|
313
|
-
|
|
314
|
-
|
|
315
|
-
if not isinstance(tool_args, dict):
|
|
316
|
-
messages.append(
|
|
317
|
-
{
|
|
318
|
-
"role": "tool",
|
|
319
|
-
"tool_call_id": call.id,
|
|
320
|
-
"content": f"error: tool arguments must be a JSON object, got {type(tool_args).__name__}; resend as an object",
|
|
321
|
-
}
|
|
322
|
-
)
|
|
323
|
-
continue
|
|
324
|
-
if name in dispatch:
|
|
325
|
-
content = await call_mcp(dispatch, name, tool_args)
|
|
326
|
-
elif name == "bash":
|
|
327
|
-
content = await asyncio.to_thread(
|
|
328
|
-
run_bash, tool_args.get("command", "")
|
|
329
|
-
)
|
|
330
|
-
elif name == "edit" and args.edit:
|
|
331
|
-
content = await asyncio.to_thread(
|
|
332
|
-
run_edit,
|
|
333
|
-
tool_args.get("path"),
|
|
334
|
-
tool_args.get("old_str"),
|
|
335
|
-
tool_args.get("new_str"),
|
|
336
|
-
)
|
|
337
|
-
elif name == "search" and args.search:
|
|
338
|
-
content = await asyncio.to_thread(
|
|
339
|
-
run_search,
|
|
340
|
-
tool_args.get("query", ""),
|
|
341
|
-
args.serper_key,
|
|
342
|
-
tool_args.get("num_results", 5),
|
|
343
|
-
)
|
|
344
|
-
else:
|
|
345
|
-
content = f"error: unknown tool {name!r}"
|
|
322
|
+
tools = [BASH_TOOL]
|
|
323
|
+
reserved = {"bash"}
|
|
324
|
+
if args.edit:
|
|
325
|
+
tools.append(EDIT_TOOL)
|
|
326
|
+
reserved.add("edit")
|
|
327
|
+
if args.search:
|
|
328
|
+
tools.append(SEARCH_TOOL)
|
|
329
|
+
reserved.add("search")
|
|
330
|
+
mcp_tools, dispatch, servers = (
|
|
331
|
+
await connect_mcp(config, reserved)
|
|
332
|
+
if config.get("mcpServers")
|
|
333
|
+
else ([], {}, {})
|
|
334
|
+
)
|
|
335
|
+
tools += mcp_tools
|
|
336
|
+
messages = (
|
|
337
|
+
[{"role": "system", "content": args.system_prompt}]
|
|
338
|
+
if args.system_prompt
|
|
339
|
+
else []
|
|
340
|
+
)
|
|
341
|
+
if initial:
|
|
342
|
+
messages.extend(initial)
|
|
343
|
+
elif args.prompt:
|
|
344
|
+
messages.append({"role": "user", "content": args.prompt})
|
|
345
|
+
while True:
|
|
346
|
+
message = await chat(client, args.model, messages, tools)
|
|
347
|
+
messages.append(message.model_dump(exclude_none=True))
|
|
348
|
+
if not message.tool_calls:
|
|
349
|
+
break
|
|
350
|
+
for call in message.tool_calls:
|
|
351
|
+
name = call.function.name
|
|
352
|
+
try:
|
|
353
|
+
tool_args = json.loads(call.function.arguments or "{}")
|
|
354
|
+
except json.JSONDecodeError as e:
|
|
355
|
+
messages.append(
|
|
356
|
+
{
|
|
357
|
+
"role": "tool",
|
|
358
|
+
"tool_call_id": call.id,
|
|
359
|
+
"content": f"error: invalid JSON in tool arguments ({e}); resend the call with valid JSON",
|
|
360
|
+
}
|
|
361
|
+
)
|
|
362
|
+
continue
|
|
363
|
+
# Valid JSON can still be a non-object (`[]`, `42`, `null`); the `.get(...)` calls
|
|
364
|
+
# below assume a dict, so reject anything else as a tool error rather than crashing.
|
|
365
|
+
if not isinstance(tool_args, dict):
|
|
346
366
|
messages.append(
|
|
347
|
-
{
|
|
367
|
+
{
|
|
368
|
+
"role": "tool",
|
|
369
|
+
"tool_call_id": call.id,
|
|
370
|
+
"content": f"error: tool arguments must be a JSON object, got {type(tool_args).__name__}; resend as an object",
|
|
371
|
+
}
|
|
372
|
+
)
|
|
373
|
+
continue
|
|
374
|
+
if name in dispatch:
|
|
375
|
+
content = await call_mcp(servers, dispatch, name, tool_args)
|
|
376
|
+
elif name == "bash":
|
|
377
|
+
content = await asyncio.to_thread(
|
|
378
|
+
run_bash, tool_args.get("command", "")
|
|
348
379
|
)
|
|
380
|
+
elif name == "edit" and args.edit:
|
|
381
|
+
content = await asyncio.to_thread(
|
|
382
|
+
run_edit,
|
|
383
|
+
tool_args.get("path"),
|
|
384
|
+
tool_args.get("old_str"),
|
|
385
|
+
tool_args.get("new_str"),
|
|
386
|
+
)
|
|
387
|
+
elif name == "search" and args.search:
|
|
388
|
+
content = await asyncio.to_thread(
|
|
389
|
+
run_search,
|
|
390
|
+
tool_args.get("query", ""),
|
|
391
|
+
args.serper_key,
|
|
392
|
+
tool_args.get("num_results", 5),
|
|
393
|
+
)
|
|
394
|
+
else:
|
|
395
|
+
content = f"error: unknown tool {name!r}"
|
|
396
|
+
messages.append(
|
|
397
|
+
{"role": "tool", "tool_call_id": call.id, "content": content}
|
|
398
|
+
)
|
|
349
399
|
|
|
350
400
|
|
|
351
401
|
if __name__ == "__main__":
|
{verifiers-0.2.1.dev61 → verifiers-0.2.1.dev66}/verifiers/v1/harnesses/claude_code/harness.py
RENAMED
|
@@ -21,7 +21,7 @@ curl -fsSL https://claude.ai/install.sh | HOME={home} bash -s {version}
|
|
|
21
21
|
|
|
22
22
|
|
|
23
23
|
class ClaudeCodeHarnessConfig(HarnessConfig):
|
|
24
|
-
version: str = Field(default="2.1.
|
|
24
|
+
version: str = Field(default="2.1.214", pattern=r"^[A-Za-z0-9._+-]+$")
|
|
25
25
|
"""Claude Code release to install; pinned for reproducibility."""
|
|
26
26
|
|
|
27
27
|
|
|
@@ -36,7 +36,7 @@ chmod +x {bin}
|
|
|
36
36
|
|
|
37
37
|
|
|
38
38
|
class CodexHarnessConfig(HarnessConfig):
|
|
39
|
-
version: str = "0.
|
|
39
|
+
version: str = "0.144.5"
|
|
40
40
|
"""Codex release to install (the `rust-v<version>` GitHub release); pinned for reproducibility."""
|
|
41
41
|
multi_agent: bool = False
|
|
42
42
|
"""Enable Codex's native multi-agent v2 tools."""
|
{verifiers-0.2.1.dev61 → verifiers-0.2.1.dev66}/verifiers/v1/harnesses/mini_swe_agent/harness.py
RENAMED
|
@@ -9,7 +9,7 @@ PROGRAM_SOURCE = (Path(__file__).resolve().parent / "program.py").read_text()
|
|
|
9
9
|
|
|
10
10
|
|
|
11
11
|
class MiniSWEAgentHarnessConfig(HarnessConfig):
|
|
12
|
-
version: str = "2.
|
|
12
|
+
version: str = "2.4.5"
|
|
13
13
|
"""mini-swe-agent release to install, pinned for reproducibility."""
|
|
14
14
|
|
|
15
15
|
|