verifiers 0.3.1.dev53__tar.gz → 0.3.1.dev55__tar.gz
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- {verifiers-0.3.1.dev53 → verifiers-0.3.1.dev55}/PKG-INFO +1 -1
- {verifiers-0.3.1.dev53 → verifiers-0.3.1.dev55}/verifiers/v1/acp/__init__.py +0 -2
- {verifiers-0.3.1.dev53 → verifiers-0.3.1.dev55}/verifiers/v1/acp/runner.py +2 -24
- {verifiers-0.3.1.dev53 → verifiers-0.3.1.dev55}/verifiers/v1/harnesses/openclaw/harness.py +0 -2
- {verifiers-0.3.1.dev53 → verifiers-0.3.1.dev55}/verifiers/v1/harnesses/pi/harness.py +0 -2
- {verifiers-0.3.1.dev53 → verifiers-0.3.1.dev55}/verifiers/v1/runtimes/prime.py +21 -11
- {verifiers-0.3.1.dev53 → verifiers-0.3.1.dev55}/verifiers/v1/serve/client.py +34 -1
- {verifiers-0.3.1.dev53 → verifiers-0.3.1.dev55}/verifiers/v1/serve/pool.py +30 -1
- {verifiers-0.3.1.dev53 → verifiers-0.3.1.dev55}/verifiers/v1/serve/server.py +26 -1
- {verifiers-0.3.1.dev53 → verifiers-0.3.1.dev55}/verifiers/v1/serve/types.py +13 -0
- {verifiers-0.3.1.dev53 → verifiers-0.3.1.dev55}/.gitignore +0 -0
- {verifiers-0.3.1.dev53 → verifiers-0.3.1.dev55}/LICENSE +0 -0
- {verifiers-0.3.1.dev53 → verifiers-0.3.1.dev55}/README.md +0 -0
- {verifiers-0.3.1.dev53 → verifiers-0.3.1.dev55}/pyproject.toml +0 -0
- {verifiers-0.3.1.dev53 → verifiers-0.3.1.dev55}/tests/__init__.py +0 -0
- {verifiers-0.3.1.dev53 → verifiers-0.3.1.dev55}/tests/conftest.py +0 -0
- {verifiers-0.3.1.dev53 → verifiers-0.3.1.dev55}/tests/test_browser_env.py +0 -0
- {verifiers-0.3.1.dev53 → verifiers-0.3.1.dev55}/tests/test_build_script.py +0 -0
- {verifiers-0.3.1.dev53 → verifiers-0.3.1.dev55}/tests/test_cli_agent_env.py +0 -0
- {verifiers-0.3.1.dev53 → verifiers-0.3.1.dev55}/tests/test_client_auth_errors.py +0 -0
- {verifiers-0.3.1.dev53 → verifiers-0.3.1.dev55}/tests/test_client_config.py +0 -0
- {verifiers-0.3.1.dev53 → verifiers-0.3.1.dev55}/tests/test_client_multimodal_types.py +0 -0
- {verifiers-0.3.1.dev53 → verifiers-0.3.1.dev55}/tests/test_composable_env.py +0 -0
- {verifiers-0.3.1.dev53 → verifiers-0.3.1.dev55}/tests/test_context_token_metrics.py +0 -0
- {verifiers-0.3.1.dev53 → verifiers-0.3.1.dev55}/tests/test_decorator_ranks.py +0 -0
- {verifiers-0.3.1.dev53 → verifiers-0.3.1.dev55}/tests/test_endpoint_registry.py +0 -0
- {verifiers-0.3.1.dev53 → verifiers-0.3.1.dev55}/tests/test_env_group.py +0 -0
- {verifiers-0.3.1.dev53 → verifiers-0.3.1.dev55}/tests/test_env_server.py +0 -0
- {verifiers-0.3.1.dev53 → verifiers-0.3.1.dev55}/tests/test_environment.py +0 -0
- {verifiers-0.3.1.dev53 → verifiers-0.3.1.dev55}/tests/test_environment_extra.py +0 -0
- {verifiers-0.3.1.dev53 → verifiers-0.3.1.dev55}/tests/test_error_chain.py +0 -0
- {verifiers-0.3.1.dev53 → verifiers-0.3.1.dev55}/tests/test_eval_display.py +0 -0
- {verifiers-0.3.1.dev53 → verifiers-0.3.1.dev55}/tests/test_eval_utils.py +0 -0
- {verifiers-0.3.1.dev53 → verifiers-0.3.1.dev55}/tests/test_gepa_cli.py +0 -0
- {verifiers-0.3.1.dev53 → verifiers-0.3.1.dev55}/tests/test_gepa_utils.py +0 -0
- {verifiers-0.3.1.dev53 → verifiers-0.3.1.dev55}/tests/test_gym_env.py +0 -0
- {verifiers-0.3.1.dev53 → verifiers-0.3.1.dev55}/tests/test_harbor_env_mcp.py +0 -0
- {verifiers-0.3.1.dev53 → verifiers-0.3.1.dev55}/tests/test_imports.py +0 -0
- {verifiers-0.3.1.dev53 → verifiers-0.3.1.dev55}/tests/test_init_script.py +0 -0
- {verifiers-0.3.1.dev53 → verifiers-0.3.1.dev55}/tests/test_install_utils.py +0 -0
- {verifiers-0.3.1.dev53 → verifiers-0.3.1.dev55}/tests/test_interception_utils.py +0 -0
- {verifiers-0.3.1.dev53 → verifiers-0.3.1.dev55}/tests/test_logging.py +0 -0
- {verifiers-0.3.1.dev53 → verifiers-0.3.1.dev55}/tests/test_math_rubric.py +0 -0
- {verifiers-0.3.1.dev53 → verifiers-0.3.1.dev55}/tests/test_maybe_think_parser.py +0 -0
- {verifiers-0.3.1.dev53 → verifiers-0.3.1.dev55}/tests/test_message_utils.py +0 -0
- {verifiers-0.3.1.dev53 → verifiers-0.3.1.dev55}/tests/test_message_utils_multimodal.py +0 -0
- {verifiers-0.3.1.dev53 → verifiers-0.3.1.dev55}/tests/test_multiturn_env.py +0 -0
- {verifiers-0.3.1.dev53 → verifiers-0.3.1.dev55}/tests/test_nemorl_client.py +0 -0
- {verifiers-0.3.1.dev53 → verifiers-0.3.1.dev55}/tests/test_openai_chat_completions_token_client.py +0 -0
- {verifiers-0.3.1.dev53 → verifiers-0.3.1.dev55}/tests/test_openai_responses_client.py +0 -0
- {verifiers-0.3.1.dev53 → verifiers-0.3.1.dev55}/tests/test_opencode_rlm_env.py +0 -0
- {verifiers-0.3.1.dev53 → verifiers-0.3.1.dev55}/tests/test_openenv_client.py +0 -0
- {verifiers-0.3.1.dev53 → verifiers-0.3.1.dev55}/tests/test_parser.py +0 -0
- {verifiers-0.3.1.dev53 → verifiers-0.3.1.dev55}/tests/test_path_utils.py +0 -0
- {verifiers-0.3.1.dev53 → verifiers-0.3.1.dev55}/tests/test_per_turn_timing.py +0 -0
- {verifiers-0.3.1.dev53 → verifiers-0.3.1.dev55}/tests/test_pricing_utils.py +0 -0
- {verifiers-0.3.1.dev53 → verifiers-0.3.1.dev55}/tests/test_prime_plugin.py +0 -0
- {verifiers-0.3.1.dev53 → verifiers-0.3.1.dev55}/tests/test_renderer_client.py +0 -0
- {verifiers-0.3.1.dev53 → verifiers-0.3.1.dev55}/tests/test_renderer_e2e.py +0 -0
- {verifiers-0.3.1.dev53 → verifiers-0.3.1.dev55}/tests/test_rlm_composable_env.py +0 -0
- {verifiers-0.3.1.dev53 → verifiers-0.3.1.dev55}/tests/test_rubric.py +0 -0
- {verifiers-0.3.1.dev53 → verifiers-0.3.1.dev55}/tests/test_rubric_group.py +0 -0
- {verifiers-0.3.1.dev53 → verifiers-0.3.1.dev55}/tests/test_sandbox_debug_env.py +0 -0
- {verifiers-0.3.1.dev53 → verifiers-0.3.1.dev55}/tests/test_sandbox_env.py +0 -0
- {verifiers-0.3.1.dev53 → verifiers-0.3.1.dev55}/tests/test_sandbox_mixin.py +0 -0
- {verifiers-0.3.1.dev53 → verifiers-0.3.1.dev55}/tests/test_save_utils.py +0 -0
- {verifiers-0.3.1.dev53 → verifiers-0.3.1.dev55}/tests/test_setup_script.py +0 -0
- {verifiers-0.3.1.dev53 → verifiers-0.3.1.dev55}/tests/test_singleturn_env.py +0 -0
- {verifiers-0.3.1.dev53 → verifiers-0.3.1.dev55}/tests/test_stateful_tool_env.py +0 -0
- {verifiers-0.3.1.dev53 → verifiers-0.3.1.dev55}/tests/test_think_parser.py +0 -0
- {verifiers-0.3.1.dev53 → verifiers-0.3.1.dev55}/tests/test_tool_env.py +0 -0
- {verifiers-0.3.1.dev53 → verifiers-0.3.1.dev55}/tests/test_tool_utils.py +0 -0
- {verifiers-0.3.1.dev53 → verifiers-0.3.1.dev55}/tests/test_trajectory_processing.py +0 -0
- {verifiers-0.3.1.dev53 → verifiers-0.3.1.dev55}/tests/test_tui_info_formatting.py +0 -0
- {verifiers-0.3.1.dev53 → verifiers-0.3.1.dev55}/tests/test_types.py +0 -0
- {verifiers-0.3.1.dev53 → verifiers-0.3.1.dev55}/tests/test_xml_parser.py +0 -0
- {verifiers-0.3.1.dev53 → verifiers-0.3.1.dev55}/tests/v1/conftest.py +0 -0
- {verifiers-0.3.1.dev53 → verifiers-0.3.1.dev55}/tests/v1/fixtures/counter_tool_v1.py +0 -0
- {verifiers-0.3.1.dev53 → verifiers-0.3.1.dev55}/tests/v1/fixtures/duet_v1.py +0 -0
- {verifiers-0.3.1.dev53 → verifiers-0.3.1.dev55}/tests/v1/fixtures/echo_acp_resume_v1.py +0 -0
- {verifiers-0.3.1.dev53 → verifiers-0.3.1.dev55}/tests/v1/fixtures/echo_agentic_v1.py +0 -0
- {verifiers-0.3.1.dev53 → verifiers-0.3.1.dev55}/tests/v1/fixtures/echo_tool_v1.py +0 -0
- {verifiers-0.3.1.dev53 → verifiers-0.3.1.dev55}/tests/v1/fixtures/echo_user_sim_v1.py +0 -0
- {verifiers-0.3.1.dev53 → verifiers-0.3.1.dev55}/tests/v1/fixtures/echo_v1.py +0 -0
- {verifiers-0.3.1.dev53 → verifiers-0.3.1.dev55}/tests/v1/fixtures/pyproject.toml +0 -0
- {verifiers-0.3.1.dev53 → verifiers-0.3.1.dev55}/tests/v1/fixtures/tool_response_image_v1.py +0 -0
- {verifiers-0.3.1.dev53 → verifiers-0.3.1.dev55}/tests/v1/test_color_codeword_tasks.py +0 -0
- {verifiers-0.3.1.dev53 → verifiers-0.3.1.dev55}/tests/v1/test_configs.py +0 -0
- {verifiers-0.3.1.dev53 → verifiers-0.3.1.dev55}/tests/v1/test_e2e.py +0 -0
- {verifiers-0.3.1.dev53 → verifiers-0.3.1.dev55}/tests/v1/test_envs.py +0 -0
- {verifiers-0.3.1.dev53 → verifiers-0.3.1.dev55}/tests/v1/test_graph.py +0 -0
- {verifiers-0.3.1.dev53 → verifiers-0.3.1.dev55}/tests/v1/test_judges.py +0 -0
- {verifiers-0.3.1.dev53 → verifiers-0.3.1.dev55}/tests/v1/test_scoring.py +0 -0
- {verifiers-0.3.1.dev53 → verifiers-0.3.1.dev55}/tests/v1/test_taskset.py +0 -0
- {verifiers-0.3.1.dev53 → verifiers-0.3.1.dev55}/tests/v1/test_trace.py +0 -0
- {verifiers-0.3.1.dev53 → verifiers-0.3.1.dev55}/verifiers/__init__.py +0 -0
- {verifiers-0.3.1.dev53 → verifiers-0.3.1.dev55}/verifiers/cli/__init__.py +0 -0
- {verifiers-0.3.1.dev53 → verifiers-0.3.1.dev55}/verifiers/cli/commands/__init__.py +0 -0
- {verifiers-0.3.1.dev53 → verifiers-0.3.1.dev55}/verifiers/cli/commands/build.py +0 -0
- {verifiers-0.3.1.dev53 → verifiers-0.3.1.dev55}/verifiers/cli/commands/eval.py +0 -0
- {verifiers-0.3.1.dev53 → verifiers-0.3.1.dev55}/verifiers/cli/commands/gepa.py +0 -0
- {verifiers-0.3.1.dev53 → verifiers-0.3.1.dev55}/verifiers/cli/commands/init.py +0 -0
- {verifiers-0.3.1.dev53 → verifiers-0.3.1.dev55}/verifiers/cli/commands/install.py +0 -0
- {verifiers-0.3.1.dev53 → verifiers-0.3.1.dev55}/verifiers/cli/commands/setup.py +0 -0
- {verifiers-0.3.1.dev53 → verifiers-0.3.1.dev55}/verifiers/cli/plugins/__init__.py +0 -0
- {verifiers-0.3.1.dev53 → verifiers-0.3.1.dev55}/verifiers/cli/plugins/prime.py +0 -0
- {verifiers-0.3.1.dev53 → verifiers-0.3.1.dev55}/verifiers/cli/tui.py +0 -0
- {verifiers-0.3.1.dev53 → verifiers-0.3.1.dev55}/verifiers/legacy/__init__.py +0 -0
- {verifiers-0.3.1.dev53 → verifiers-0.3.1.dev55}/verifiers/legacy/clients/__init__.py +0 -0
- {verifiers-0.3.1.dev53 → verifiers-0.3.1.dev55}/verifiers/legacy/clients/anthropic_messages_client.py +0 -0
- {verifiers-0.3.1.dev53 → verifiers-0.3.1.dev55}/verifiers/legacy/clients/client.py +0 -0
- {verifiers-0.3.1.dev53 → verifiers-0.3.1.dev55}/verifiers/legacy/clients/nemorl_chat_completions_client.py +0 -0
- {verifiers-0.3.1.dev53 → verifiers-0.3.1.dev55}/verifiers/legacy/clients/openai_chat_completions_client.py +0 -0
- {verifiers-0.3.1.dev53 → verifiers-0.3.1.dev55}/verifiers/legacy/clients/openai_chat_completions_token_client.py +0 -0
- {verifiers-0.3.1.dev53 → verifiers-0.3.1.dev55}/verifiers/legacy/clients/openai_completions_client.py +0 -0
- {verifiers-0.3.1.dev53 → verifiers-0.3.1.dev55}/verifiers/legacy/clients/openai_responses_client.py +0 -0
- {verifiers-0.3.1.dev53 → verifiers-0.3.1.dev55}/verifiers/legacy/clients/renderer_client.py +0 -0
- {verifiers-0.3.1.dev53 → verifiers-0.3.1.dev55}/verifiers/legacy/decorators.py +0 -0
- {verifiers-0.3.1.dev53 → verifiers-0.3.1.dev55}/verifiers/legacy/envs/__init__.py +0 -0
- {verifiers-0.3.1.dev53 → verifiers-0.3.1.dev55}/verifiers/legacy/envs/env_group.py +0 -0
- {verifiers-0.3.1.dev53 → verifiers-0.3.1.dev55}/verifiers/legacy/envs/environment.py +0 -0
- {verifiers-0.3.1.dev53 → verifiers-0.3.1.dev55}/verifiers/legacy/envs/experimental/README.md +0 -0
- {verifiers-0.3.1.dev53 → verifiers-0.3.1.dev55}/verifiers/legacy/envs/experimental/__init__.py +0 -0
- {verifiers-0.3.1.dev53 → verifiers-0.3.1.dev55}/verifiers/legacy/envs/experimental/cli_agent_env.py +0 -0
- {verifiers-0.3.1.dev53 → verifiers-0.3.1.dev55}/verifiers/legacy/envs/experimental/composable/README.md +0 -0
- {verifiers-0.3.1.dev53 → verifiers-0.3.1.dev55}/verifiers/legacy/envs/experimental/composable/__init__.py +0 -0
- {verifiers-0.3.1.dev53 → verifiers-0.3.1.dev55}/verifiers/legacy/envs/experimental/composable/_filter.py +0 -0
- {verifiers-0.3.1.dev53 → verifiers-0.3.1.dev55}/verifiers/legacy/envs/experimental/composable/composable_env.py +0 -0
- {verifiers-0.3.1.dev53 → verifiers-0.3.1.dev55}/verifiers/legacy/envs/experimental/composable/harness.py +0 -0
- {verifiers-0.3.1.dev53 → verifiers-0.3.1.dev55}/verifiers/legacy/envs/experimental/composable/harnesses/__init__.py +0 -0
- {verifiers-0.3.1.dev53 → verifiers-0.3.1.dev55}/verifiers/legacy/envs/experimental/composable/harnesses/mini_swe_agent.py +0 -0
- {verifiers-0.3.1.dev53 → verifiers-0.3.1.dev55}/verifiers/legacy/envs/experimental/composable/harnesses/opencode.py +0 -0
- {verifiers-0.3.1.dev53 → verifiers-0.3.1.dev55}/verifiers/legacy/envs/experimental/composable/harnesses/prompt.txt +0 -0
- {verifiers-0.3.1.dev53 → verifiers-0.3.1.dev55}/verifiers/legacy/envs/experimental/composable/harnesses/rlm.py +0 -0
- {verifiers-0.3.1.dev53 → verifiers-0.3.1.dev55}/verifiers/legacy/envs/experimental/composable/sandbox_debug_env.py +0 -0
- {verifiers-0.3.1.dev53 → verifiers-0.3.1.dev55}/verifiers/legacy/envs/experimental/composable/swe_debug_env.py +0 -0
- {verifiers-0.3.1.dev53 → verifiers-0.3.1.dev55}/verifiers/legacy/envs/experimental/composable/task.py +0 -0
- {verifiers-0.3.1.dev53 → verifiers-0.3.1.dev55}/verifiers/legacy/envs/experimental/composable/tasksets/__init__.py +0 -0
- {verifiers-0.3.1.dev53 → verifiers-0.3.1.dev55}/verifiers/legacy/envs/experimental/composable/tasksets/cp/__init__.py +0 -0
- {verifiers-0.3.1.dev53 → verifiers-0.3.1.dev55}/verifiers/legacy/envs/experimental/composable/tasksets/cp/cp_task.py +0 -0
- {verifiers-0.3.1.dev53 → verifiers-0.3.1.dev55}/verifiers/legacy/envs/experimental/composable/tasksets/cp/test_utils.py +0 -0
- {verifiers-0.3.1.dev53 → verifiers-0.3.1.dev55}/verifiers/legacy/envs/experimental/composable/tasksets/harbor/__init__.py +0 -0
- {verifiers-0.3.1.dev53 → verifiers-0.3.1.dev55}/verifiers/legacy/envs/experimental/composable/tasksets/harbor/cli_gym.py +0 -0
- {verifiers-0.3.1.dev53 → verifiers-0.3.1.dev55}/verifiers/legacy/envs/experimental/composable/tasksets/harbor/harbor.py +0 -0
- {verifiers-0.3.1.dev53 → verifiers-0.3.1.dev55}/verifiers/legacy/envs/experimental/composable/tasksets/harbor/terminal_lego.py +0 -0
- {verifiers-0.3.1.dev53 → verifiers-0.3.1.dev55}/verifiers/legacy/envs/experimental/composable/tasksets/math/__init__.py +0 -0
- {verifiers-0.3.1.dev53 → verifiers-0.3.1.dev55}/verifiers/legacy/envs/experimental/composable/tasksets/math/math_task.py +0 -0
- {verifiers-0.3.1.dev53 → verifiers-0.3.1.dev55}/verifiers/legacy/envs/experimental/composable/tasksets/swe/README.md +0 -0
- {verifiers-0.3.1.dev53 → verifiers-0.3.1.dev55}/verifiers/legacy/envs/experimental/composable/tasksets/swe/__init__.py +0 -0
- {verifiers-0.3.1.dev53 → verifiers-0.3.1.dev55}/verifiers/legacy/envs/experimental/composable/tasksets/swe/multi_swe/__init__.py +0 -0
- {verifiers-0.3.1.dev53 → verifiers-0.3.1.dev55}/verifiers/legacy/envs/experimental/composable/tasksets/swe/multi_swe/extract_fix_patch.sh +0 -0
- {verifiers-0.3.1.dev53 → verifiers-0.3.1.dev55}/verifiers/legacy/envs/experimental/composable/tasksets/swe/multi_swe/taskset.py +0 -0
- {verifiers-0.3.1.dev53 → verifiers-0.3.1.dev55}/verifiers/legacy/envs/experimental/composable/tasksets/swe/openswe/__init__.py +0 -0
- {verifiers-0.3.1.dev53 → verifiers-0.3.1.dev55}/verifiers/legacy/envs/experimental/composable/tasksets/swe/openswe/taskset.py +0 -0
- {verifiers-0.3.1.dev53 → verifiers-0.3.1.dev55}/verifiers/legacy/envs/experimental/composable/tasksets/swe/r2e_gym/__init__.py +0 -0
- {verifiers-0.3.1.dev53 → verifiers-0.3.1.dev55}/verifiers/legacy/envs/experimental/composable/tasksets/swe/r2e_gym/log_parser.py +0 -0
- {verifiers-0.3.1.dev53 → verifiers-0.3.1.dev55}/verifiers/legacy/envs/experimental/composable/tasksets/swe/r2e_gym/taskset.py +0 -0
- {verifiers-0.3.1.dev53 → verifiers-0.3.1.dev55}/verifiers/legacy/envs/experimental/composable/tasksets/swe/scale_swe/__init__.py +0 -0
- {verifiers-0.3.1.dev53 → verifiers-0.3.1.dev55}/verifiers/legacy/envs/experimental/composable/tasksets/swe/scale_swe/taskset.py +0 -0
- {verifiers-0.3.1.dev53 → verifiers-0.3.1.dev55}/verifiers/legacy/envs/experimental/composable/tasksets/swe/shared/__init__.py +0 -0
- {verifiers-0.3.1.dev53 → verifiers-0.3.1.dev55}/verifiers/legacy/envs/experimental/composable/tasksets/swe/shared/test_patch.py +0 -0
- {verifiers-0.3.1.dev53 → verifiers-0.3.1.dev55}/verifiers/legacy/envs/experimental/composable/tasksets/swe/swe_bench/__init__.py +0 -0
- {verifiers-0.3.1.dev53 → verifiers-0.3.1.dev55}/verifiers/legacy/envs/experimental/composable/tasksets/swe/swe_bench/taskset.py +0 -0
- {verifiers-0.3.1.dev53 → verifiers-0.3.1.dev55}/verifiers/legacy/envs/experimental/composable/tasksets/swe/swe_lego/__init__.py +0 -0
- {verifiers-0.3.1.dev53 → verifiers-0.3.1.dev55}/verifiers/legacy/envs/experimental/composable/tasksets/swe/swe_lego/taskset.py +0 -0
- {verifiers-0.3.1.dev53 → verifiers-0.3.1.dev55}/verifiers/legacy/envs/experimental/composable/tasksets/swe/swe_rebench_v2/__init__.py +0 -0
- {verifiers-0.3.1.dev53 → verifiers-0.3.1.dev55}/verifiers/legacy/envs/experimental/composable/tasksets/swe/swe_rebench_v2/log_parsers.py +0 -0
- {verifiers-0.3.1.dev53 → verifiers-0.3.1.dev55}/verifiers/legacy/envs/experimental/composable/tasksets/swe/swe_rebench_v2/taskset.py +0 -0
- {verifiers-0.3.1.dev53 → verifiers-0.3.1.dev55}/verifiers/legacy/envs/experimental/composable/tasksets/swe/swe_smith/__init__.py +0 -0
- {verifiers-0.3.1.dev53 → verifiers-0.3.1.dev55}/verifiers/legacy/envs/experimental/composable/tasksets/swe/swe_smith/taskset.py +0 -0
- {verifiers-0.3.1.dev53 → verifiers-0.3.1.dev55}/verifiers/legacy/envs/experimental/composable/tasksets/swe/swe_tasksets.py +0 -0
- {verifiers-0.3.1.dev53 → verifiers-0.3.1.dev55}/verifiers/legacy/envs/experimental/gym_env.py +0 -0
- {verifiers-0.3.1.dev53 → verifiers-0.3.1.dev55}/verifiers/legacy/envs/experimental/harbor_env/__init__.py +0 -0
- {verifiers-0.3.1.dev53 → verifiers-0.3.1.dev55}/verifiers/legacy/envs/experimental/harbor_env/env.py +0 -0
- {verifiers-0.3.1.dev53 → verifiers-0.3.1.dev55}/verifiers/legacy/envs/experimental/harbor_env/mcp.py +0 -0
- {verifiers-0.3.1.dev53 → verifiers-0.3.1.dev55}/verifiers/legacy/envs/experimental/mcp_env.py +0 -0
- {verifiers-0.3.1.dev53 → verifiers-0.3.1.dev55}/verifiers/legacy/envs/experimental/opencode_env.py +0 -0
- {verifiers-0.3.1.dev53 → verifiers-0.3.1.dev55}/verifiers/legacy/envs/experimental/opencode_qa_env.py +0 -0
- {verifiers-0.3.1.dev53 → verifiers-0.3.1.dev55}/verifiers/legacy/envs/experimental/opencode_rlm_env.py +0 -0
- {verifiers-0.3.1.dev53 → verifiers-0.3.1.dev55}/verifiers/legacy/envs/experimental/sandbox_mixin.py +0 -0
- {verifiers-0.3.1.dev53 → verifiers-0.3.1.dev55}/verifiers/legacy/envs/experimental/utils/__init__.py +0 -0
- {verifiers-0.3.1.dev53 → verifiers-0.3.1.dev55}/verifiers/legacy/envs/experimental/utils/file_locks.py +0 -0
- {verifiers-0.3.1.dev53 → verifiers-0.3.1.dev55}/verifiers/legacy/envs/experimental/utils/git_checkout_cache.py +0 -0
- {verifiers-0.3.1.dev53 → verifiers-0.3.1.dev55}/verifiers/legacy/envs/integrations/README.md +0 -0
- {verifiers-0.3.1.dev53 → verifiers-0.3.1.dev55}/verifiers/legacy/envs/integrations/__init__.py +0 -0
- {verifiers-0.3.1.dev53 → verifiers-0.3.1.dev55}/verifiers/legacy/envs/integrations/browser_env/README.md +0 -0
- {verifiers-0.3.1.dev53 → verifiers-0.3.1.dev55}/verifiers/legacy/envs/integrations/browser_env/__init__.py +0 -0
- {verifiers-0.3.1.dev53 → verifiers-0.3.1.dev55}/verifiers/legacy/envs/integrations/browser_env/browser_env.py +0 -0
- {verifiers-0.3.1.dev53 → verifiers-0.3.1.dev55}/verifiers/legacy/envs/integrations/browser_env/modes/__init__.py +0 -0
- {verifiers-0.3.1.dev53 → verifiers-0.3.1.dev55}/verifiers/legacy/envs/integrations/browser_env/modes/base.py +0 -0
- {verifiers-0.3.1.dev53 → verifiers-0.3.1.dev55}/verifiers/legacy/envs/integrations/browser_env/modes/cua_mode.py +0 -0
- {verifiers-0.3.1.dev53 → verifiers-0.3.1.dev55}/verifiers/legacy/envs/integrations/browser_env/modes/dom_mode.py +0 -0
- {verifiers-0.3.1.dev53 → verifiers-0.3.1.dev55}/verifiers/legacy/envs/integrations/openenv_env.py +0 -0
- {verifiers-0.3.1.dev53 → verifiers-0.3.1.dev55}/verifiers/legacy/envs/integrations/reasoninggym_env.py +0 -0
- {verifiers-0.3.1.dev53 → verifiers-0.3.1.dev55}/verifiers/legacy/envs/integrations/textarena_env.py +0 -0
- {verifiers-0.3.1.dev53 → verifiers-0.3.1.dev55}/verifiers/legacy/envs/multiturn_env.py +0 -0
- {verifiers-0.3.1.dev53 → verifiers-0.3.1.dev55}/verifiers/legacy/envs/python_env.py +0 -0
- {verifiers-0.3.1.dev53 → verifiers-0.3.1.dev55}/verifiers/legacy/envs/sandbox_env.py +0 -0
- {verifiers-0.3.1.dev53 → verifiers-0.3.1.dev55}/verifiers/legacy/envs/singleturn_env.py +0 -0
- {verifiers-0.3.1.dev53 → verifiers-0.3.1.dev55}/verifiers/legacy/envs/stateful_tool_env.py +0 -0
- {verifiers-0.3.1.dev53 → verifiers-0.3.1.dev55}/verifiers/legacy/envs/tool_env.py +0 -0
- {verifiers-0.3.1.dev53 → verifiers-0.3.1.dev55}/verifiers/legacy/errors.py +0 -0
- {verifiers-0.3.1.dev53 → verifiers-0.3.1.dev55}/verifiers/legacy/gepa/__init__.py +0 -0
- {verifiers-0.3.1.dev53 → verifiers-0.3.1.dev55}/verifiers/legacy/gepa/adapter.py +0 -0
- {verifiers-0.3.1.dev53 → verifiers-0.3.1.dev55}/verifiers/legacy/gepa/config.py +0 -0
- {verifiers-0.3.1.dev53 → verifiers-0.3.1.dev55}/verifiers/legacy/gepa/display.py +0 -0
- {verifiers-0.3.1.dev53 → verifiers-0.3.1.dev55}/verifiers/legacy/gepa/gepa_utils.py +0 -0
- {verifiers-0.3.1.dev53 → verifiers-0.3.1.dev55}/verifiers/legacy/parsers/__init__.py +0 -0
- {verifiers-0.3.1.dev53 → verifiers-0.3.1.dev55}/verifiers/legacy/parsers/maybe_think_parser.py +0 -0
- {verifiers-0.3.1.dev53 → verifiers-0.3.1.dev55}/verifiers/legacy/parsers/parser.py +0 -0
- {verifiers-0.3.1.dev53 → verifiers-0.3.1.dev55}/verifiers/legacy/parsers/think_parser.py +0 -0
- {verifiers-0.3.1.dev53 → verifiers-0.3.1.dev55}/verifiers/legacy/parsers/xml_parser.py +0 -0
- {verifiers-0.3.1.dev53 → verifiers-0.3.1.dev55}/verifiers/legacy/rubrics/__init__.py +0 -0
- {verifiers-0.3.1.dev53 → verifiers-0.3.1.dev55}/verifiers/legacy/rubrics/experimental/hybrid_math_rubric.py +0 -0
- {verifiers-0.3.1.dev53 → verifiers-0.3.1.dev55}/verifiers/legacy/rubrics/judge_rubric.py +0 -0
- {verifiers-0.3.1.dev53 → verifiers-0.3.1.dev55}/verifiers/legacy/rubrics/math_rubric.py +0 -0
- {verifiers-0.3.1.dev53 → verifiers-0.3.1.dev55}/verifiers/legacy/rubrics/rubric.py +0 -0
- {verifiers-0.3.1.dev53 → verifiers-0.3.1.dev55}/verifiers/legacy/rubrics/rubric_group.py +0 -0
- {verifiers-0.3.1.dev53 → verifiers-0.3.1.dev55}/verifiers/legacy/scripts/__init__.py +0 -0
- {verifiers-0.3.1.dev53 → verifiers-0.3.1.dev55}/verifiers/legacy/scripts/build.py +0 -0
- {verifiers-0.3.1.dev53 → verifiers-0.3.1.dev55}/verifiers/legacy/scripts/eval.py +0 -0
- {verifiers-0.3.1.dev53 → verifiers-0.3.1.dev55}/verifiers/legacy/scripts/gepa.py +0 -0
- {verifiers-0.3.1.dev53 → verifiers-0.3.1.dev55}/verifiers/legacy/scripts/init.py +0 -0
- {verifiers-0.3.1.dev53 → verifiers-0.3.1.dev55}/verifiers/legacy/scripts/install.py +0 -0
- {verifiers-0.3.1.dev53 → verifiers-0.3.1.dev55}/verifiers/legacy/scripts/setup.py +0 -0
- {verifiers-0.3.1.dev53 → verifiers-0.3.1.dev55}/verifiers/legacy/scripts/tui.py +0 -0
- {verifiers-0.3.1.dev53 → verifiers-0.3.1.dev55}/verifiers/legacy/serve/__init__.py +0 -0
- {verifiers-0.3.1.dev53 → verifiers-0.3.1.dev55}/verifiers/legacy/serve/client/env_client.py +0 -0
- {verifiers-0.3.1.dev53 → verifiers-0.3.1.dev55}/verifiers/legacy/serve/client/zmq_env_client.py +0 -0
- {verifiers-0.3.1.dev53 → verifiers-0.3.1.dev55}/verifiers/legacy/serve/server/__init__.py +0 -0
- {verifiers-0.3.1.dev53 → verifiers-0.3.1.dev55}/verifiers/legacy/serve/server/env_router.py +0 -0
- {verifiers-0.3.1.dev53 → verifiers-0.3.1.dev55}/verifiers/legacy/serve/server/env_server.py +0 -0
- {verifiers-0.3.1.dev53 → verifiers-0.3.1.dev55}/verifiers/legacy/serve/server/env_worker.py +0 -0
- {verifiers-0.3.1.dev53 → verifiers-0.3.1.dev55}/verifiers/legacy/serve/server/zmq_env_server.py +0 -0
- {verifiers-0.3.1.dev53 → verifiers-0.3.1.dev55}/verifiers/legacy/serve/types.py +0 -0
- {verifiers-0.3.1.dev53 → verifiers-0.3.1.dev55}/verifiers/legacy/types.py +0 -0
- {verifiers-0.3.1.dev53 → verifiers-0.3.1.dev55}/verifiers/legacy/utils/__init__.py +0 -0
- {verifiers-0.3.1.dev53 → verifiers-0.3.1.dev55}/verifiers/legacy/utils/async_utils.py +0 -0
- {verifiers-0.3.1.dev53 → verifiers-0.3.1.dev55}/verifiers/legacy/utils/client_utils.py +0 -0
- {verifiers-0.3.1.dev53 → verifiers-0.3.1.dev55}/verifiers/legacy/utils/config_utils.py +0 -0
- {verifiers-0.3.1.dev53 → verifiers-0.3.1.dev55}/verifiers/legacy/utils/data_utils.py +0 -0
- {verifiers-0.3.1.dev53 → verifiers-0.3.1.dev55}/verifiers/legacy/utils/display_utils.py +0 -0
- {verifiers-0.3.1.dev53 → verifiers-0.3.1.dev55}/verifiers/legacy/utils/env_config_utils.py +0 -0
- {verifiers-0.3.1.dev53 → verifiers-0.3.1.dev55}/verifiers/legacy/utils/env_utils.py +0 -0
- {verifiers-0.3.1.dev53 → verifiers-0.3.1.dev55}/verifiers/legacy/utils/error_utils.py +0 -0
- {verifiers-0.3.1.dev53 → verifiers-0.3.1.dev55}/verifiers/legacy/utils/eval_display.py +0 -0
- {verifiers-0.3.1.dev53 → verifiers-0.3.1.dev55}/verifiers/legacy/utils/eval_utils.py +0 -0
- {verifiers-0.3.1.dev53 → verifiers-0.3.1.dev55}/verifiers/legacy/utils/heartbeat.py +0 -0
- {verifiers-0.3.1.dev53 → verifiers-0.3.1.dev55}/verifiers/legacy/utils/import_utils.py +0 -0
- {verifiers-0.3.1.dev53 → verifiers-0.3.1.dev55}/verifiers/legacy/utils/install_utils.py +0 -0
- {verifiers-0.3.1.dev53 → verifiers-0.3.1.dev55}/verifiers/legacy/utils/interception_utils.py +0 -0
- {verifiers-0.3.1.dev53 → verifiers-0.3.1.dev55}/verifiers/legacy/utils/logging_utils.py +0 -0
- {verifiers-0.3.1.dev53 → verifiers-0.3.1.dev55}/verifiers/legacy/utils/message_utils.py +0 -0
- {verifiers-0.3.1.dev53 → verifiers-0.3.1.dev55}/verifiers/legacy/utils/metric_utils.py +0 -0
- {verifiers-0.3.1.dev53 → verifiers-0.3.1.dev55}/verifiers/legacy/utils/path_utils.py +0 -0
- {verifiers-0.3.1.dev53 → verifiers-0.3.1.dev55}/verifiers/legacy/utils/pricing_utils.py +0 -0
- {verifiers-0.3.1.dev53 → verifiers-0.3.1.dev55}/verifiers/legacy/utils/process_utils.py +0 -0
- {verifiers-0.3.1.dev53 → verifiers-0.3.1.dev55}/verifiers/legacy/utils/response_utils.py +0 -0
- {verifiers-0.3.1.dev53 → verifiers-0.3.1.dev55}/verifiers/legacy/utils/save_utils.py +0 -0
- {verifiers-0.3.1.dev53 → verifiers-0.3.1.dev55}/verifiers/legacy/utils/serve_utils.py +0 -0
- {verifiers-0.3.1.dev53 → verifiers-0.3.1.dev55}/verifiers/legacy/utils/thread_utils.py +0 -0
- {verifiers-0.3.1.dev53 → verifiers-0.3.1.dev55}/verifiers/legacy/utils/threaded_sandbox_client.py +0 -0
- {verifiers-0.3.1.dev53 → verifiers-0.3.1.dev55}/verifiers/legacy/utils/tool_utils.py +0 -0
- {verifiers-0.3.1.dev53 → verifiers-0.3.1.dev55}/verifiers/legacy/utils/usage_utils.py +0 -0
- {verifiers-0.3.1.dev53 → verifiers-0.3.1.dev55}/verifiers/legacy/utils/version_utils.py +0 -0
- {verifiers-0.3.1.dev53 → verifiers-0.3.1.dev55}/verifiers/v1/__init__.py +0 -0
- {verifiers-0.3.1.dev53 → verifiers-0.3.1.dev55}/verifiers/v1/agent.py +0 -0
- {verifiers-0.3.1.dev53 → verifiers-0.3.1.dev55}/verifiers/v1/cli/__init__.py +0 -0
- {verifiers-0.3.1.dev53 → verifiers-0.3.1.dev55}/verifiers/v1/cli/dashboard/__init__.py +0 -0
- {verifiers-0.3.1.dev53 → verifiers-0.3.1.dev55}/verifiers/v1/cli/dashboard/base.py +0 -0
- {verifiers-0.3.1.dev53 → verifiers-0.3.1.dev55}/verifiers/v1/cli/dashboard/eval.py +0 -0
- {verifiers-0.3.1.dev53 → verifiers-0.3.1.dev55}/verifiers/v1/cli/dashboard/replay.py +0 -0
- {verifiers-0.3.1.dev53 → verifiers-0.3.1.dev55}/verifiers/v1/cli/dashboard/validate.py +0 -0
- {verifiers-0.3.1.dev53 → verifiers-0.3.1.dev55}/verifiers/v1/cli/debug.py +0 -0
- {verifiers-0.3.1.dev53 → verifiers-0.3.1.dev55}/verifiers/v1/cli/eval/__init__.py +0 -0
- {verifiers-0.3.1.dev53 → verifiers-0.3.1.dev55}/verifiers/v1/cli/eval/main.py +0 -0
- {verifiers-0.3.1.dev53 → verifiers-0.3.1.dev55}/verifiers/v1/cli/eval/resume.py +0 -0
- {verifiers-0.3.1.dev53 → verifiers-0.3.1.dev55}/verifiers/v1/cli/eval/runner.py +0 -0
- {verifiers-0.3.1.dev53 → verifiers-0.3.1.dev55}/verifiers/v1/cli/gepa.py +0 -0
- {verifiers-0.3.1.dev53 → verifiers-0.3.1.dev55}/verifiers/v1/cli/init.py +0 -0
- {verifiers-0.3.1.dev53 → verifiers-0.3.1.dev55}/verifiers/v1/cli/output.py +0 -0
- {verifiers-0.3.1.dev53 → verifiers-0.3.1.dev55}/verifiers/v1/cli/replay.py +0 -0
- {verifiers-0.3.1.dev53 → verifiers-0.3.1.dev55}/verifiers/v1/cli/resolve.py +0 -0
- {verifiers-0.3.1.dev53 → verifiers-0.3.1.dev55}/verifiers/v1/cli/resume.py +0 -0
- {verifiers-0.3.1.dev53 → verifiers-0.3.1.dev55}/verifiers/v1/cli/validate.py +0 -0
- {verifiers-0.3.1.dev53 → verifiers-0.3.1.dev55}/verifiers/v1/clients/__init__.py +0 -0
- {verifiers-0.3.1.dev53 → verifiers-0.3.1.dev55}/verifiers/v1/clients/base.py +0 -0
- {verifiers-0.3.1.dev53 → verifiers-0.3.1.dev55}/verifiers/v1/clients/client.py +0 -0
- {verifiers-0.3.1.dev53 → verifiers-0.3.1.dev55}/verifiers/v1/clients/eval.py +0 -0
- {verifiers-0.3.1.dev53 → verifiers-0.3.1.dev55}/verifiers/v1/clients/train.py +0 -0
- {verifiers-0.3.1.dev53 → verifiers-0.3.1.dev55}/verifiers/v1/configs/__init__.py +0 -0
- {verifiers-0.3.1.dev53 → verifiers-0.3.1.dev55}/verifiers/v1/configs/agent.py +0 -0
- {verifiers-0.3.1.dev53 → verifiers-0.3.1.dev55}/verifiers/v1/configs/cli/__init__.py +0 -0
- {verifiers-0.3.1.dev53 → verifiers-0.3.1.dev55}/verifiers/v1/configs/cli/debug.py +0 -0
- {verifiers-0.3.1.dev53 → verifiers-0.3.1.dev55}/verifiers/v1/configs/cli/env.py +0 -0
- {verifiers-0.3.1.dev53 → verifiers-0.3.1.dev55}/verifiers/v1/configs/cli/eval.py +0 -0
- {verifiers-0.3.1.dev53 → verifiers-0.3.1.dev55}/verifiers/v1/configs/cli/init.py +0 -0
- {verifiers-0.3.1.dev53 → verifiers-0.3.1.dev55}/verifiers/v1/configs/cli/replay.py +0 -0
- {verifiers-0.3.1.dev53 → verifiers-0.3.1.dev55}/verifiers/v1/configs/cli/validate.py +0 -0
- {verifiers-0.3.1.dev53 → verifiers-0.3.1.dev55}/verifiers/v1/configs/client.py +0 -0
- {verifiers-0.3.1.dev53 → verifiers-0.3.1.dev55}/verifiers/v1/configs/env.py +0 -0
- {verifiers-0.3.1.dev53 → verifiers-0.3.1.dev55}/verifiers/v1/configs/harness.py +0 -0
- {verifiers-0.3.1.dev53 → verifiers-0.3.1.dev55}/verifiers/v1/configs/judge.py +0 -0
- {verifiers-0.3.1.dev53 → verifiers-0.3.1.dev55}/verifiers/v1/configs/retries.py +0 -0
- {verifiers-0.3.1.dev53 → verifiers-0.3.1.dev55}/verifiers/v1/configs/runtime.py +0 -0
- {verifiers-0.3.1.dev53 → verifiers-0.3.1.dev55}/verifiers/v1/configs/serve.py +0 -0
- {verifiers-0.3.1.dev53 → verifiers-0.3.1.dev55}/verifiers/v1/configs/task.py +0 -0
- {verifiers-0.3.1.dev53 → verifiers-0.3.1.dev55}/verifiers/v1/configs/taskset.py +0 -0
- {verifiers-0.3.1.dev53 → verifiers-0.3.1.dev55}/verifiers/v1/dialects/__init__.py +0 -0
- {verifiers-0.3.1.dev53 → verifiers-0.3.1.dev55}/verifiers/v1/dialects/anthropic.py +0 -0
- {verifiers-0.3.1.dev53 → verifiers-0.3.1.dev55}/verifiers/v1/dialects/base.py +0 -0
- {verifiers-0.3.1.dev53 → verifiers-0.3.1.dev55}/verifiers/v1/dialects/chat.py +0 -0
- {verifiers-0.3.1.dev53 → verifiers-0.3.1.dev55}/verifiers/v1/dialects/responses.py +0 -0
- {verifiers-0.3.1.dev53 → verifiers-0.3.1.dev55}/verifiers/v1/env.py +0 -0
- {verifiers-0.3.1.dev53 → verifiers-0.3.1.dev55}/verifiers/v1/envs/__init__.py +0 -0
- {verifiers-0.3.1.dev53 → verifiers-0.3.1.dev55}/verifiers/v1/envs/agentic_judge/__init__.py +0 -0
- {verifiers-0.3.1.dev53 → verifiers-0.3.1.dev55}/verifiers/v1/envs/agentic_judge/env.py +0 -0
- {verifiers-0.3.1.dev53 → verifiers-0.3.1.dev55}/verifiers/v1/envs/best_of_n/__init__.py +0 -0
- {verifiers-0.3.1.dev53 → verifiers-0.3.1.dev55}/verifiers/v1/envs/best_of_n/env.py +0 -0
- {verifiers-0.3.1.dev53 → verifiers-0.3.1.dev55}/verifiers/v1/envs/shared_agentic_judge/__init__.py +0 -0
- {verifiers-0.3.1.dev53 → verifiers-0.3.1.dev55}/verifiers/v1/envs/single_agent/__init__.py +0 -0
- {verifiers-0.3.1.dev53 → verifiers-0.3.1.dev55}/verifiers/v1/envs/single_agent/env.py +0 -0
- {verifiers-0.3.1.dev53 → verifiers-0.3.1.dev55}/verifiers/v1/envs/user_sim/__init__.py +0 -0
- {verifiers-0.3.1.dev53 → verifiers-0.3.1.dev55}/verifiers/v1/envs/user_sim/env.py +0 -0
- {verifiers-0.3.1.dev53 → verifiers-0.3.1.dev55}/verifiers/v1/episode.py +0 -0
- {verifiers-0.3.1.dev53 → verifiers-0.3.1.dev55}/verifiers/v1/errors.py +0 -0
- {verifiers-0.3.1.dev53 → verifiers-0.3.1.dev55}/verifiers/v1/gepa/__init__.py +0 -0
- {verifiers-0.3.1.dev53 → verifiers-0.3.1.dev55}/verifiers/v1/gepa/adapter.py +0 -0
- {verifiers-0.3.1.dev53 → verifiers-0.3.1.dev55}/verifiers/v1/gepa/config.py +0 -0
- {verifiers-0.3.1.dev53 → verifiers-0.3.1.dev55}/verifiers/v1/gepa/dataset.py +0 -0
- {verifiers-0.3.1.dev53 → verifiers-0.3.1.dev55}/verifiers/v1/gepa/reflection.py +0 -0
- {verifiers-0.3.1.dev53 → verifiers-0.3.1.dev55}/verifiers/v1/gepa/runner.py +0 -0
- {verifiers-0.3.1.dev53 → verifiers-0.3.1.dev55}/verifiers/v1/graph.py +0 -0
- {verifiers-0.3.1.dev53 → verifiers-0.3.1.dev55}/verifiers/v1/harness.py +0 -0
- {verifiers-0.3.1.dev53 → verifiers-0.3.1.dev55}/verifiers/v1/harnesses/__init__.py +0 -0
- {verifiers-0.3.1.dev53 → verifiers-0.3.1.dev55}/verifiers/v1/harnesses/bash/__init__.py +0 -0
- {verifiers-0.3.1.dev53 → verifiers-0.3.1.dev55}/verifiers/v1/harnesses/bash/harness.py +0 -0
- {verifiers-0.3.1.dev53 → verifiers-0.3.1.dev55}/verifiers/v1/harnesses/bash/program.py +0 -0
- {verifiers-0.3.1.dev53 → verifiers-0.3.1.dev55}/verifiers/v1/harnesses/browser_use/__init__.py +0 -0
- {verifiers-0.3.1.dev53 → verifiers-0.3.1.dev55}/verifiers/v1/harnesses/browser_use/harness.py +0 -0
- {verifiers-0.3.1.dev53 → verifiers-0.3.1.dev55}/verifiers/v1/harnesses/browser_use/program.py +0 -0
- {verifiers-0.3.1.dev53 → verifiers-0.3.1.dev55}/verifiers/v1/harnesses/claude_code/__init__.py +0 -0
- {verifiers-0.3.1.dev53 → verifiers-0.3.1.dev55}/verifiers/v1/harnesses/claude_code/harness.py +0 -0
- {verifiers-0.3.1.dev53 → verifiers-0.3.1.dev55}/verifiers/v1/harnesses/codex/__init__.py +0 -0
- {verifiers-0.3.1.dev53 → verifiers-0.3.1.dev55}/verifiers/v1/harnesses/codex/harness.py +0 -0
- {verifiers-0.3.1.dev53 → verifiers-0.3.1.dev55}/verifiers/v1/harnesses/hermes_agent/__init__.py +0 -0
- {verifiers-0.3.1.dev53 → verifiers-0.3.1.dev55}/verifiers/v1/harnesses/hermes_agent/harness.py +0 -0
- {verifiers-0.3.1.dev53 → verifiers-0.3.1.dev55}/verifiers/v1/harnesses/hermes_agent/program.py +0 -0
- {verifiers-0.3.1.dev53 → verifiers-0.3.1.dev55}/verifiers/v1/harnesses/kimi_code/__init__.py +0 -0
- {verifiers-0.3.1.dev53 → verifiers-0.3.1.dev55}/verifiers/v1/harnesses/kimi_code/harness.py +0 -0
- {verifiers-0.3.1.dev53 → verifiers-0.3.1.dev55}/verifiers/v1/harnesses/mini_swe_agent/__init__.py +0 -0
- {verifiers-0.3.1.dev53 → verifiers-0.3.1.dev55}/verifiers/v1/harnesses/mini_swe_agent/harness.py +0 -0
- {verifiers-0.3.1.dev53 → verifiers-0.3.1.dev55}/verifiers/v1/harnesses/mini_swe_agent/program.py +0 -0
- {verifiers-0.3.1.dev53 → verifiers-0.3.1.dev55}/verifiers/v1/harnesses/node.py +0 -0
- {verifiers-0.3.1.dev53 → verifiers-0.3.1.dev55}/verifiers/v1/harnesses/null/__init__.py +0 -0
- {verifiers-0.3.1.dev53 → verifiers-0.3.1.dev55}/verifiers/v1/harnesses/null/harness.py +0 -0
- {verifiers-0.3.1.dev53 → verifiers-0.3.1.dev55}/verifiers/v1/harnesses/null/program.py +0 -0
- {verifiers-0.3.1.dev53 → verifiers-0.3.1.dev55}/verifiers/v1/harnesses/openclaw/__init__.py +0 -0
- {verifiers-0.3.1.dev53 → verifiers-0.3.1.dev55}/verifiers/v1/harnesses/pi/__init__.py +0 -0
- {verifiers-0.3.1.dev53 → verifiers-0.3.1.dev55}/verifiers/v1/harnesses/pool/__init__.py +0 -0
- {verifiers-0.3.1.dev53 → verifiers-0.3.1.dev55}/verifiers/v1/harnesses/pool/harness.py +0 -0
- {verifiers-0.3.1.dev53 → verifiers-0.3.1.dev55}/verifiers/v1/harnesses/rlm/__init__.py +0 -0
- {verifiers-0.3.1.dev53 → verifiers-0.3.1.dev55}/verifiers/v1/harnesses/rlm/harness.py +0 -0
- {verifiers-0.3.1.dev53 → verifiers-0.3.1.dev55}/verifiers/v1/harnesses/terminus_2/__init__.py +0 -0
- {verifiers-0.3.1.dev53 → verifiers-0.3.1.dev55}/verifiers/v1/harnesses/terminus_2/harness.py +0 -0
- {verifiers-0.3.1.dev53 → verifiers-0.3.1.dev55}/verifiers/v1/harnesses/terminus_2/program.py +0 -0
- {verifiers-0.3.1.dev53 → verifiers-0.3.1.dev55}/verifiers/v1/interception/__init__.py +0 -0
- {verifiers-0.3.1.dev53 → verifiers-0.3.1.dev55}/verifiers/v1/interception/base.py +0 -0
- {verifiers-0.3.1.dev53 → verifiers-0.3.1.dev55}/verifiers/v1/interception/pool.py +0 -0
- {verifiers-0.3.1.dev53 → verifiers-0.3.1.dev55}/verifiers/v1/interception/server.py +0 -0
- {verifiers-0.3.1.dev53 → verifiers-0.3.1.dev55}/verifiers/v1/interception/tool.py +0 -0
- {verifiers-0.3.1.dev53 → verifiers-0.3.1.dev55}/verifiers/v1/interception/tunnel/__init__.py +0 -0
- {verifiers-0.3.1.dev53 → verifiers-0.3.1.dev55}/verifiers/v1/interception/tunnel/base.py +0 -0
- {verifiers-0.3.1.dev53 → verifiers-0.3.1.dev55}/verifiers/v1/interception/tunnel/custom.py +0 -0
- {verifiers-0.3.1.dev53 → verifiers-0.3.1.dev55}/verifiers/v1/interception/tunnel/prime.py +0 -0
- {verifiers-0.3.1.dev53 → verifiers-0.3.1.dev55}/verifiers/v1/judge.py +0 -0
- {verifiers-0.3.1.dev53 → verifiers-0.3.1.dev55}/verifiers/v1/judges/__init__.py +0 -0
- {verifiers-0.3.1.dev53 → verifiers-0.3.1.dev55}/verifiers/v1/judges/reference.py +0 -0
- {verifiers-0.3.1.dev53 → verifiers-0.3.1.dev55}/verifiers/v1/judges/reference.txt +0 -0
- {verifiers-0.3.1.dev53 → verifiers-0.3.1.dev55}/verifiers/v1/judges/rubric.py +0 -0
- {verifiers-0.3.1.dev53 → verifiers-0.3.1.dev55}/verifiers/v1/judges/rubric.txt +0 -0
- {verifiers-0.3.1.dev53 → verifiers-0.3.1.dev55}/verifiers/v1/mcp/__init__.py +0 -0
- {verifiers-0.3.1.dev53 → verifiers-0.3.1.dev55}/verifiers/v1/mcp/launch.py +0 -0
- {verifiers-0.3.1.dev53 → verifiers-0.3.1.dev55}/verifiers/v1/mcp/server.py +0 -0
- {verifiers-0.3.1.dev53 → verifiers-0.3.1.dev55}/verifiers/v1/mcp/toolset.py +0 -0
- {verifiers-0.3.1.dev53 → verifiers-0.3.1.dev55}/verifiers/v1/rollout.py +0 -0
- {verifiers-0.3.1.dev53 → verifiers-0.3.1.dev55}/verifiers/v1/runtimes/__init__.py +0 -0
- {verifiers-0.3.1.dev53 → verifiers-0.3.1.dev55}/verifiers/v1/runtimes/base.py +0 -0
- {verifiers-0.3.1.dev53 → verifiers-0.3.1.dev55}/verifiers/v1/runtimes/docker/__init__.py +0 -0
- {verifiers-0.3.1.dev53 → verifiers-0.3.1.dev55}/verifiers/v1/runtimes/docker/egress.py +0 -0
- {verifiers-0.3.1.dev53 → verifiers-0.3.1.dev55}/verifiers/v1/runtimes/limiters.py +0 -0
- {verifiers-0.3.1.dev53 → verifiers-0.3.1.dev55}/verifiers/v1/runtimes/modal.py +0 -0
- {verifiers-0.3.1.dev53 → verifiers-0.3.1.dev55}/verifiers/v1/runtimes/subprocess.py +0 -0
- {verifiers-0.3.1.dev53 → verifiers-0.3.1.dev55}/verifiers/v1/serve/__init__.py +0 -0
- {verifiers-0.3.1.dev53 → verifiers-0.3.1.dev55}/verifiers/v1/serve/encoding.py +0 -0
- {verifiers-0.3.1.dev53 → verifiers-0.3.1.dev55}/verifiers/v1/session.py +0 -0
- {verifiers-0.3.1.dev53 → verifiers-0.3.1.dev55}/verifiers/v1/state.py +0 -0
- {verifiers-0.3.1.dev53 → verifiers-0.3.1.dev55}/verifiers/v1/task.py +0 -0
- {verifiers-0.3.1.dev53 → verifiers-0.3.1.dev55}/verifiers/v1/taskset.py +0 -0
- {verifiers-0.3.1.dev53 → verifiers-0.3.1.dev55}/verifiers/v1/tasksets/__init__.py +0 -0
- {verifiers-0.3.1.dev53 → verifiers-0.3.1.dev55}/verifiers/v1/tasksets/harbor/__init__.py +0 -0
- {verifiers-0.3.1.dev53 → verifiers-0.3.1.dev55}/verifiers/v1/tasksets/harbor/env.py +0 -0
- {verifiers-0.3.1.dev53 → verifiers-0.3.1.dev55}/verifiers/v1/tasksets/harbor/taskset.py +0 -0
- {verifiers-0.3.1.dev53 → verifiers-0.3.1.dev55}/verifiers/v1/tasksets/lean/__init__.py +0 -0
- {verifiers-0.3.1.dev53 → verifiers-0.3.1.dev55}/verifiers/v1/tasksets/lean/scoring.py +0 -0
- {verifiers-0.3.1.dev53 → verifiers-0.3.1.dev55}/verifiers/v1/tasksets/lean/taskset.py +0 -0
- {verifiers-0.3.1.dev53 → verifiers-0.3.1.dev55}/verifiers/v1/tasksets/nemo_gym/__init__.py +0 -0
- {verifiers-0.3.1.dev53 → verifiers-0.3.1.dev55}/verifiers/v1/tasksets/nemo_gym/response.py +0 -0
- {verifiers-0.3.1.dev53 → verifiers-0.3.1.dev55}/verifiers/v1/tasksets/nemo_gym/server.py +0 -0
- {verifiers-0.3.1.dev53 → verifiers-0.3.1.dev55}/verifiers/v1/tasksets/nemo_gym/taskset.py +0 -0
- {verifiers-0.3.1.dev53 → verifiers-0.3.1.dev55}/verifiers/v1/tasksets/nemo_gym/toolset.py +0 -0
- {verifiers-0.3.1.dev53 → verifiers-0.3.1.dev55}/verifiers/v1/tasksets/openenv/__init__.py +0 -0
- {verifiers-0.3.1.dev53 → verifiers-0.3.1.dev55}/verifiers/v1/tasksets/openenv/taskset.py +0 -0
- {verifiers-0.3.1.dev53 → verifiers-0.3.1.dev55}/verifiers/v1/tasksets/textarena/__init__.py +0 -0
- {verifiers-0.3.1.dev53 → verifiers-0.3.1.dev55}/verifiers/v1/tasksets/textarena/taskset.py +0 -0
- {verifiers-0.3.1.dev53 → verifiers-0.3.1.dev55}/verifiers/v1/trace.py +0 -0
- {verifiers-0.3.1.dev53 → verifiers-0.3.1.dev55}/verifiers/v1/types.py +0 -0
- {verifiers-0.3.1.dev53 → verifiers-0.3.1.dev55}/verifiers/v1/utils/__init__.py +0 -0
- {verifiers-0.3.1.dev53 → verifiers-0.3.1.dev55}/verifiers/v1/utils/aio.py +0 -0
- {verifiers-0.3.1.dev53 → verifiers-0.3.1.dev55}/verifiers/v1/utils/artifacts.py +0 -0
- {verifiers-0.3.1.dev53 → verifiers-0.3.1.dev55}/verifiers/v1/utils/compile.py +0 -0
- {verifiers-0.3.1.dev53 → verifiers-0.3.1.dev55}/verifiers/v1/utils/decorators.py +0 -0
- {verifiers-0.3.1.dev53 → verifiers-0.3.1.dev55}/verifiers/v1/utils/format.py +0 -0
- {verifiers-0.3.1.dev53 → verifiers-0.3.1.dev55}/verifiers/v1/utils/generic.py +0 -0
- {verifiers-0.3.1.dev53 → verifiers-0.3.1.dev55}/verifiers/v1/utils/git.py +0 -0
- {verifiers-0.3.1.dev53 → verifiers-0.3.1.dev55}/verifiers/v1/utils/image.py +0 -0
- {verifiers-0.3.1.dev53 → verifiers-0.3.1.dev55}/verifiers/v1/utils/interrupt.py +0 -0
- {verifiers-0.3.1.dev53 → verifiers-0.3.1.dev55}/verifiers/v1/utils/loaders.py +0 -0
- {verifiers-0.3.1.dev53 → verifiers-0.3.1.dev55}/verifiers/v1/utils/logging.py +0 -0
- {verifiers-0.3.1.dev53 → verifiers-0.3.1.dev55}/verifiers/v1/utils/memory.py +0 -0
- {verifiers-0.3.1.dev53 → verifiers-0.3.1.dev55}/verifiers/v1/utils/paths.py +0 -0
- {verifiers-0.3.1.dev53 → verifiers-0.3.1.dev55}/verifiers/v1/utils/platform.py +0 -0
- {verifiers-0.3.1.dev53 → verifiers-0.3.1.dev55}/verifiers/v1/utils/prime.py +0 -0
- {verifiers-0.3.1.dev53 → verifiers-0.3.1.dev55}/verifiers/v1/utils/retries.py +0 -0
- {verifiers-0.3.1.dev53 → verifiers-0.3.1.dev55}/verifiers/v1/utils/score.py +0 -0
- {verifiers-0.3.1.dev53 → verifiers-0.3.1.dev55}/verifiers/v1/utils/version.py +0 -0
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
Metadata-Version: 2.5
|
|
2
2
|
Name: verifiers
|
|
3
|
-
Version: 0.3.1.
|
|
3
|
+
Version: 0.3.1.dev55
|
|
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
|
|
@@ -41,7 +41,6 @@ class ACPConfig:
|
|
|
41
41
|
mcp_urls: dict[str, str] | None = None
|
|
42
42
|
system_prompt: str | None = None
|
|
43
43
|
session_meta: JsonObject | None = None
|
|
44
|
-
allow_empty_tool_reply: bool = False
|
|
45
44
|
|
|
46
45
|
|
|
47
46
|
class ACPHarness(Harness[ConfigT]):
|
|
@@ -215,7 +214,6 @@ class ACPHarnessSession(HarnessSession):
|
|
|
215
214
|
"mcp_urls": self.mcp_urls,
|
|
216
215
|
"system_prompt": self.config.system_prompt or "",
|
|
217
216
|
"session_meta": self.config.session_meta or {},
|
|
218
|
-
"allow_empty_tool_reply": self.config.allow_empty_tool_reply,
|
|
219
217
|
}
|
|
220
218
|
async with self._lock:
|
|
221
219
|
if self._closed:
|
|
@@ -30,8 +30,6 @@ from acp.schema import (
|
|
|
30
30
|
PermissionOption,
|
|
31
31
|
RequestPermissionResponse,
|
|
32
32
|
TextContentBlock,
|
|
33
|
-
ToolCall,
|
|
34
|
-
ToolCallUpdate,
|
|
35
33
|
)
|
|
36
34
|
|
|
37
35
|
MAX_PACKET_BYTES = 128 * 1024 * 1024
|
|
@@ -41,20 +39,13 @@ class VerifiersACPClient(Client):
|
|
|
41
39
|
def __init__(self) -> None:
|
|
42
40
|
self.visible_reply = ""
|
|
43
41
|
self.message_id: str | None = None
|
|
44
|
-
self.tool_calls: dict[str, str] = {}
|
|
45
42
|
|
|
46
43
|
def reset(self) -> None:
|
|
47
44
|
self.visible_reply = ""
|
|
48
45
|
self.message_id = None
|
|
49
|
-
self.tool_calls = {}
|
|
50
46
|
|
|
51
47
|
async def session_update(self, session_id: str, update: Any, **kwargs: Any) -> None:
|
|
52
|
-
if isinstance(update,
|
|
53
|
-
self.tool_calls[update.tool_call_id] = update.status or "pending"
|
|
54
|
-
elif isinstance(update, ToolCallUpdate):
|
|
55
|
-
if update.status:
|
|
56
|
-
self.tool_calls[update.tool_call_id] = update.status
|
|
57
|
-
elif isinstance(update, AgentMessageChunk) and isinstance(
|
|
48
|
+
if isinstance(update, AgentMessageChunk) and isinstance(
|
|
58
49
|
update.content, TextContentBlock
|
|
59
50
|
):
|
|
60
51
|
message_id = getattr(update, "message_id", None)
|
|
@@ -137,23 +128,10 @@ async def prompt(
|
|
|
137
128
|
raise ValueError("ACP prompt has no content")
|
|
138
129
|
client.reset()
|
|
139
130
|
try:
|
|
140
|
-
|
|
131
|
+
await connection.prompt(session_id=session_id, prompt=blocks)
|
|
141
132
|
except RequestError as error:
|
|
142
133
|
detail = error.data.get("details") if isinstance(error.data, dict) else None
|
|
143
134
|
raise RuntimeError(detail or str(error)) from error
|
|
144
|
-
|
|
145
|
-
tool_statuses = list(client.tool_calls.values())
|
|
146
|
-
completed_tool_turn = (
|
|
147
|
-
config.get("allow_empty_tool_reply", False)
|
|
148
|
-
and response.stop_reason == "end_turn"
|
|
149
|
-
and bool(tool_statuses)
|
|
150
|
-
and all(status in ("completed", "failed") for status in tool_statuses)
|
|
151
|
-
)
|
|
152
|
-
if not client.visible_reply.strip() and not completed_tool_turn:
|
|
153
|
-
raise RuntimeError(
|
|
154
|
-
"ACP agent produced no visible reply "
|
|
155
|
-
f"(stop_reason={response.stop_reason}, tool_statuses={tool_statuses})"
|
|
156
|
-
)
|
|
157
135
|
return client.visible_reply
|
|
158
136
|
|
|
159
137
|
|
|
@@ -229,8 +229,6 @@ class OpenClawHarness(ACPHarness[OpenClawHarnessConfig]):
|
|
|
229
229
|
prompt=prompt,
|
|
230
230
|
mcp_urls={},
|
|
231
231
|
system_prompt=system_prompt,
|
|
232
|
-
# OpenClaw can end after its final tool completes without a text message.
|
|
233
|
-
allow_empty_tool_reply=True,
|
|
234
232
|
)
|
|
235
233
|
|
|
236
234
|
async def cleanup(self, trace: Trace, runtime: Runtime) -> None:
|
|
@@ -31,6 +31,7 @@ from verifiers.v1.runtimes.base import (
|
|
|
31
31
|
parse_gpu,
|
|
32
32
|
)
|
|
33
33
|
from verifiers.v1.runtimes.limiters import creation_limiter
|
|
34
|
+
from verifiers.v1.utils.aio import run_shielded
|
|
34
35
|
from verifiers.v1.utils.prime import ensure_prime_auth
|
|
35
36
|
|
|
36
37
|
logger = logging.getLogger(__name__)
|
|
@@ -183,18 +184,27 @@ class PrimeRuntime(Runtime):
|
|
|
183
184
|
)
|
|
184
185
|
or contextlib.nullcontext()
|
|
185
186
|
):
|
|
186
|
-
|
|
187
|
-
|
|
188
|
-
|
|
189
|
-
|
|
190
|
-
|
|
191
|
-
|
|
192
|
-
|
|
193
|
-
|
|
194
|
-
|
|
187
|
+
# Shielded through the id capture: a cancel that aborts the POST
|
|
188
|
+
# mid-flight leaves the platform creating a sandbox this side
|
|
189
|
+
# never learned the id of — teardown() then cannot delete it
|
|
190
|
+
async def create_and_capture_id():
|
|
191
|
+
sandbox = await self._client.create(
|
|
192
|
+
CreateSandboxRequest(
|
|
193
|
+
name=self.name,
|
|
194
|
+
labels=list(
|
|
195
|
+
dict.fromkeys([*BASE_LABELS, *self.config.labels])
|
|
196
|
+
),
|
|
197
|
+
docker_image=self.config.image,
|
|
198
|
+
vm=self.config.vm,
|
|
199
|
+
guaranteed=self.config.guaranteed,
|
|
200
|
+
environment_vars=self.env,
|
|
201
|
+
**{k: v for k, v in options.items() if v is not None},
|
|
202
|
+
)
|
|
195
203
|
)
|
|
196
|
-
|
|
197
|
-
|
|
204
|
+
self.info.id = sandbox.id
|
|
205
|
+
return sandbox
|
|
206
|
+
|
|
207
|
+
sandbox = await run_shielded(create_and_capture_id())
|
|
198
208
|
# The create response says whether the platform already has the image:
|
|
199
209
|
# `pending_image_build_id` set means a first-use auto-build is running and the
|
|
200
210
|
# sandbox stays PENDING until it finishes (`wait_for_creation` gives that phase
|
|
@@ -24,6 +24,7 @@ from verifiers.v1.episode import WireEpisode
|
|
|
24
24
|
from verifiers.v1.serve.types import (
|
|
25
25
|
BaseRequest,
|
|
26
26
|
BaseResponse,
|
|
27
|
+
CancelRequest,
|
|
27
28
|
HealthRequest,
|
|
28
29
|
HealthResponse,
|
|
29
30
|
RunRequest,
|
|
@@ -46,6 +47,10 @@ class EnvClient:
|
|
|
46
47
|
self.socket.setsockopt(zmq.RCVHWM, 0)
|
|
47
48
|
self.socket.connect(address)
|
|
48
49
|
self._pending: dict[str, asyncio.Future[bytes]] = {}
|
|
50
|
+
# Strong refs to in-flight fire-and-forget cancels: the loop only
|
|
51
|
+
# holds weak references to tasks, so an unreferenced one can be
|
|
52
|
+
# garbage-collected before it ever sends
|
|
53
|
+
self._cancel_tasks: set[asyncio.Task] = set()
|
|
49
54
|
self._receiver: asyncio.Task | None = None
|
|
50
55
|
self._decode_slots = asyncio.BoundedSemaphore(1)
|
|
51
56
|
|
|
@@ -81,8 +86,20 @@ class EnvClient:
|
|
|
81
86
|
)
|
|
82
87
|
try:
|
|
83
88
|
data = await asyncio.wait_for(future, timeout)
|
|
84
|
-
except
|
|
89
|
+
except TimeoutError:
|
|
90
|
+
self._pending.pop(request_id, None)
|
|
91
|
+
raise
|
|
92
|
+
except asyncio.CancelledError:
|
|
85
93
|
self._pending.pop(request_id, None)
|
|
94
|
+
if request.method == RunRequest.method:
|
|
95
|
+
# Fire-and-forget: tell the server to abort the rollout so the
|
|
96
|
+
# episode stops consuming inference and env-runtime resources.
|
|
97
|
+
# A task on the loop outlives this (cancelled) caller.
|
|
98
|
+
task = asyncio.get_running_loop().create_task(
|
|
99
|
+
self._send_cancel(request_id)
|
|
100
|
+
)
|
|
101
|
+
self._cancel_tasks.add(task)
|
|
102
|
+
task.add_done_callback(self._cancel_tasks.discard)
|
|
86
103
|
raise
|
|
87
104
|
if response_type is HealthResponse:
|
|
88
105
|
response = response_type.model_validate(msgpack.unpackb(data, raw=False))
|
|
@@ -109,6 +126,17 @@ class EnvClient:
|
|
|
109
126
|
raise RuntimeError(response.error or "env server request failed")
|
|
110
127
|
return response
|
|
111
128
|
|
|
129
|
+
async def _send_cancel(self, run_request_id: str) -> None:
|
|
130
|
+
"""Best-effort server-side abort of an abandoned run."""
|
|
131
|
+
with contextlib.suppress(Exception):
|
|
132
|
+
payload = msgpack.packb(
|
|
133
|
+
CancelRequest(request_id=run_request_id).model_dump(mode="json"),
|
|
134
|
+
use_bin_type=True,
|
|
135
|
+
)
|
|
136
|
+
await self.socket.send_multipart(
|
|
137
|
+
[uuid.uuid4().hex.encode(), CancelRequest.method.encode(), payload]
|
|
138
|
+
)
|
|
139
|
+
|
|
112
140
|
async def health(self, timeout: float = 2.0) -> bool:
|
|
113
141
|
try:
|
|
114
142
|
return (
|
|
@@ -157,5 +185,10 @@ class EnvClient:
|
|
|
157
185
|
with contextlib.suppress(asyncio.CancelledError):
|
|
158
186
|
await self._receiver
|
|
159
187
|
self._receiver = None
|
|
188
|
+
# Let scheduled fire-and-forget cancels reach the socket first, or a
|
|
189
|
+
# run cancelled right before close() leaves its server-side rollout
|
|
190
|
+
# running. Loop: awaiting one wave can schedule another
|
|
191
|
+
while self._cancel_tasks:
|
|
192
|
+
await asyncio.gather(*list(self._cancel_tasks), return_exceptions=True)
|
|
160
193
|
self.socket.close()
|
|
161
194
|
self.ctx.term()
|
|
@@ -36,11 +36,14 @@ import zmq.asyncio
|
|
|
36
36
|
|
|
37
37
|
from verifiers.v1.configs.env import EnvConfig
|
|
38
38
|
from verifiers.v1.serve.server import EnvServer
|
|
39
|
-
from verifiers.v1.serve.types import HealthResponse
|
|
39
|
+
from verifiers.v1.serve.types import CancelResponse, HealthResponse
|
|
40
40
|
|
|
41
41
|
logger = logging.getLogger(__name__)
|
|
42
42
|
|
|
43
43
|
_HEALTH = msgpack.packb(HealthResponse().model_dump(mode="json"), use_bin_type=True)
|
|
44
|
+
_CANCEL_MISS = msgpack.packb(
|
|
45
|
+
CancelResponse(cancelled=False).model_dump(mode="json"), use_bin_type=True
|
|
46
|
+
)
|
|
44
47
|
|
|
45
48
|
|
|
46
49
|
def _arm_teardown(death_pipe=None) -> None:
|
|
@@ -192,6 +195,32 @@ class EnvServerPool:
|
|
|
192
195
|
await self.frontend.send_multipart(
|
|
193
196
|
[client_id, request_id, _HEALTH]
|
|
194
197
|
)
|
|
198
|
+
elif method == b"cancel":
|
|
199
|
+
# Route the cancel to the worker holding the target run;
|
|
200
|
+
# an unknown/finished target (or an unparseable payload
|
|
201
|
+
# — one bad frame must not tear down the broker) is
|
|
202
|
+
# answered inline
|
|
203
|
+
try:
|
|
204
|
+
body = msgpack.unpackb(payload, raw=False)
|
|
205
|
+
target = str(body.get("request_id", "")).encode()
|
|
206
|
+
except Exception: # noqa: BLE001 - one bad frame must not kill the broker
|
|
207
|
+
target = b""
|
|
208
|
+
target_entry = pending.get(target)
|
|
209
|
+
if target_entry is None:
|
|
210
|
+
await self.frontend.send_multipart(
|
|
211
|
+
[client_id, request_id, _CANCEL_MISS]
|
|
212
|
+
)
|
|
213
|
+
else:
|
|
214
|
+
worker = target_entry["worker"]
|
|
215
|
+
worker["active"] += 1
|
|
216
|
+
pending[request_id] = {
|
|
217
|
+
"client_id": client_id,
|
|
218
|
+
"worker": worker,
|
|
219
|
+
}
|
|
220
|
+
in_flight += 1
|
|
221
|
+
await worker["dealer"].send_multipart(
|
|
222
|
+
[request_id, method, payload]
|
|
223
|
+
)
|
|
195
224
|
else:
|
|
196
225
|
worker = min(self.workers, key=lambda w: w["active"])
|
|
197
226
|
worker["active"] += 1
|
|
@@ -11,6 +11,8 @@ from verifiers.v1.configs.env import EnvConfig
|
|
|
11
11
|
from verifiers.v1.serve.encoding import msgpack_encoder
|
|
12
12
|
from verifiers.v1.serve.types import (
|
|
13
13
|
BaseResponse,
|
|
14
|
+
CancelRequest,
|
|
15
|
+
CancelResponse,
|
|
14
16
|
HealthResponse,
|
|
15
17
|
RunRequest,
|
|
16
18
|
RunResponse,
|
|
@@ -47,6 +49,8 @@ class EnvServer:
|
|
|
47
49
|
)
|
|
48
50
|
# This worker's episode bound (`--max-concurrent`), spanning requests.
|
|
49
51
|
self._gate = asyncio.Semaphore(max_concurrent) if max_concurrent else None
|
|
52
|
+
# In-flight run tasks by wire request_id, so a `cancel` can abort them
|
|
53
|
+
self._running: dict[str, asyncio.Task] = {}
|
|
50
54
|
self.ctx = zmq.asyncio.Context()
|
|
51
55
|
self.frontend = self.ctx.socket(zmq.ROUTER)
|
|
52
56
|
self.frontend.setsockopt(zmq.ROUTER_MANDATORY, 1)
|
|
@@ -107,11 +111,26 @@ class EnvServer:
|
|
|
107
111
|
if route == "health":
|
|
108
112
|
response: BaseResponse = HealthResponse()
|
|
109
113
|
elif route == "run":
|
|
110
|
-
|
|
114
|
+
# Registered in the dispatch loop, before this task first runs
|
|
115
|
+
try:
|
|
116
|
+
response = await self._run(RunRequest.model_validate(raw))
|
|
117
|
+
finally:
|
|
118
|
+
self._running.pop(request_id.decode(), None)
|
|
119
|
+
elif route == "cancel":
|
|
120
|
+
target = CancelRequest.model_validate(raw).request_id
|
|
121
|
+
running = self._running.get(target)
|
|
122
|
+
if running is not None:
|
|
123
|
+
running.cancel()
|
|
124
|
+
logger.info("cancelled run %s on client request", target)
|
|
125
|
+
response = CancelResponse(cancelled=running is not None)
|
|
111
126
|
else:
|
|
112
127
|
response = BaseResponse(
|
|
113
128
|
success=False, error=f"unknown method {route!r}"
|
|
114
129
|
)
|
|
130
|
+
except asyncio.CancelledError:
|
|
131
|
+
# An aborted run still replies so broker/client accounting stays
|
|
132
|
+
# exact; the requesting client has already given up on the result
|
|
133
|
+
response = BaseResponse(success=False, error="Cancelled: rollout aborted")
|
|
115
134
|
except (
|
|
116
135
|
Exception
|
|
117
136
|
) as e: # a failed request is data, not a crash — report and keep serving
|
|
@@ -156,6 +175,12 @@ class EnvServer:
|
|
|
156
175
|
task = asyncio.create_task(
|
|
157
176
|
self._handle(client_id, request_id, method, payload)
|
|
158
177
|
)
|
|
178
|
+
if method == b"run":
|
|
179
|
+
# Register at dispatch, not handler start: a cancel
|
|
180
|
+
# processed ahead of the run's handler task must still
|
|
181
|
+
# find its target (ZMQ preserves per-client frame
|
|
182
|
+
# order, so the run always arrives first)
|
|
183
|
+
self._running[request_id.decode()] = task
|
|
159
184
|
tasks.add(task)
|
|
160
185
|
task.add_done_callback(tasks.discard)
|
|
161
186
|
except (asyncio.CancelledError, KeyboardInterrupt):
|
|
@@ -26,6 +26,19 @@ class HealthResponse(BaseResponse):
|
|
|
26
26
|
pass
|
|
27
27
|
|
|
28
28
|
|
|
29
|
+
class CancelRequest(BaseRequest):
|
|
30
|
+
"""Abort an in-flight run by its wire ``request_id``. Idempotent — a
|
|
31
|
+
finished or unknown run cancels successfully with ``cancelled=False``."""
|
|
32
|
+
|
|
33
|
+
method: ClassVar[str] = "cancel"
|
|
34
|
+
request_id: str
|
|
35
|
+
|
|
36
|
+
|
|
37
|
+
class CancelResponse(BaseResponse):
|
|
38
|
+
cancelled: bool = False
|
|
39
|
+
"""Whether a live run was found and aborted."""
|
|
40
|
+
|
|
41
|
+
|
|
29
42
|
class RunRequest(BaseRequest):
|
|
30
43
|
"""One env-rollout, shipping the task itself: `task_data` is the dumped
|
|
31
44
|
`TaskData` the server validates into the taskset's declared type."""
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
{verifiers-0.3.1.dev53 → verifiers-0.3.1.dev55}/tests/test_openai_chat_completions_token_client.py
RENAMED
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
{verifiers-0.3.1.dev53 → verifiers-0.3.1.dev55}/verifiers/legacy/clients/openai_responses_client.py
RENAMED
|
File without changes
|
|
File without changes
|