verifiers 0.2.2.dev42__tar.gz → 0.2.2.dev43__tar.gz
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- {verifiers-0.2.2.dev42 → verifiers-0.2.2.dev43}/PKG-INFO +1 -1
- {verifiers-0.2.2.dev42 → verifiers-0.2.2.dev43}/tests/v1/conftest.py +3 -4
- {verifiers-0.2.2.dev42 → verifiers-0.2.2.dev43}/verifiers/v1/__init__.py +12 -7
- {verifiers-0.2.2.dev42 → verifiers-0.2.2.dev43}/verifiers/v1/agent.py +9 -8
- {verifiers-0.2.2.dev42 → verifiers-0.2.2.dev43}/verifiers/v1/cli/dashboard/eval.py +1 -1
- {verifiers-0.2.2.dev42 → verifiers-0.2.2.dev43}/verifiers/v1/cli/eval/main.py +9 -7
- {verifiers-0.2.2.dev42 → verifiers-0.2.2.dev43}/verifiers/v1/cli/eval/runner.py +12 -7
- {verifiers-0.2.2.dev42 → verifiers-0.2.2.dev43}/verifiers/v1/cli/serve.py +17 -14
- verifiers-0.2.2.dev43/verifiers/v1/configs/cli/env.py +60 -0
- {verifiers-0.2.2.dev42 → verifiers-0.2.2.dev43}/verifiers/v1/configs/cli/eval.py +66 -6
- verifiers-0.2.2.dev43/verifiers/v1/configs/cli/serve.py +62 -0
- {verifiers-0.2.2.dev42 → verifiers-0.2.2.dev43}/verifiers/v1/configs/env.py +11 -4
- verifiers-0.2.2.dev43/verifiers/v1/configs/legacy.py +24 -0
- verifiers-0.2.2.dev43/verifiers/v1/configs/serve.py +63 -0
- {verifiers-0.2.2.dev42 → verifiers-0.2.2.dev43}/verifiers/v1/env.py +24 -16
- {verifiers-0.2.2.dev42 → verifiers-0.2.2.dev43}/verifiers/v1/gepa/config.py +3 -3
- {verifiers-0.2.2.dev42 → verifiers-0.2.2.dev43}/verifiers/v1/legacy.py +12 -6
- {verifiers-0.2.2.dev42 → verifiers-0.2.2.dev43}/verifiers/v1/push.py +1 -1
- {verifiers-0.2.2.dev42 → verifiers-0.2.2.dev43}/verifiers/v1/serve/pool.py +8 -6
- {verifiers-0.2.2.dev42 → verifiers-0.2.2.dev43}/verifiers/v1/serve/server.py +8 -6
- verifiers-0.2.2.dev42/verifiers/v1/configs/cli/env.py +0 -167
- verifiers-0.2.2.dev42/verifiers/v1/configs/cli/serve.py +0 -16
- {verifiers-0.2.2.dev42 → verifiers-0.2.2.dev43}/.gitignore +0 -0
- {verifiers-0.2.2.dev42 → verifiers-0.2.2.dev43}/LICENSE +0 -0
- {verifiers-0.2.2.dev42 → verifiers-0.2.2.dev43}/README.md +0 -0
- {verifiers-0.2.2.dev42 → verifiers-0.2.2.dev43}/pyproject.toml +0 -0
- {verifiers-0.2.2.dev42 → verifiers-0.2.2.dev43}/tests/__init__.py +0 -0
- {verifiers-0.2.2.dev42 → verifiers-0.2.2.dev43}/tests/conftest.py +0 -0
- {verifiers-0.2.2.dev42 → verifiers-0.2.2.dev43}/tests/test_browser_env.py +0 -0
- {verifiers-0.2.2.dev42 → verifiers-0.2.2.dev43}/tests/test_build_script.py +0 -0
- {verifiers-0.2.2.dev42 → verifiers-0.2.2.dev43}/tests/test_cli_agent_env.py +0 -0
- {verifiers-0.2.2.dev42 → verifiers-0.2.2.dev43}/tests/test_client_auth_errors.py +0 -0
- {verifiers-0.2.2.dev42 → verifiers-0.2.2.dev43}/tests/test_client_config.py +0 -0
- {verifiers-0.2.2.dev42 → verifiers-0.2.2.dev43}/tests/test_client_multimodal_types.py +0 -0
- {verifiers-0.2.2.dev42 → verifiers-0.2.2.dev43}/tests/test_composable_env.py +0 -0
- {verifiers-0.2.2.dev42 → verifiers-0.2.2.dev43}/tests/test_context_token_metrics.py +0 -0
- {verifiers-0.2.2.dev42 → verifiers-0.2.2.dev43}/tests/test_decorator_ranks.py +0 -0
- {verifiers-0.2.2.dev42 → verifiers-0.2.2.dev43}/tests/test_endpoint_registry.py +0 -0
- {verifiers-0.2.2.dev42 → verifiers-0.2.2.dev43}/tests/test_env_group.py +0 -0
- {verifiers-0.2.2.dev42 → verifiers-0.2.2.dev43}/tests/test_env_server.py +0 -0
- {verifiers-0.2.2.dev42 → verifiers-0.2.2.dev43}/tests/test_environment.py +0 -0
- {verifiers-0.2.2.dev42 → verifiers-0.2.2.dev43}/tests/test_environment_extra.py +0 -0
- {verifiers-0.2.2.dev42 → verifiers-0.2.2.dev43}/tests/test_error_chain.py +0 -0
- {verifiers-0.2.2.dev42 → verifiers-0.2.2.dev43}/tests/test_eval_display.py +0 -0
- {verifiers-0.2.2.dev42 → verifiers-0.2.2.dev43}/tests/test_eval_utils.py +0 -0
- {verifiers-0.2.2.dev42 → verifiers-0.2.2.dev43}/tests/test_gepa_cli.py +0 -0
- {verifiers-0.2.2.dev42 → verifiers-0.2.2.dev43}/tests/test_gepa_utils.py +0 -0
- {verifiers-0.2.2.dev42 → verifiers-0.2.2.dev43}/tests/test_gym_env.py +0 -0
- {verifiers-0.2.2.dev42 → verifiers-0.2.2.dev43}/tests/test_harbor_env_mcp.py +0 -0
- {verifiers-0.2.2.dev42 → verifiers-0.2.2.dev43}/tests/test_imports.py +0 -0
- {verifiers-0.2.2.dev42 → verifiers-0.2.2.dev43}/tests/test_init_script.py +0 -0
- {verifiers-0.2.2.dev42 → verifiers-0.2.2.dev43}/tests/test_install_utils.py +0 -0
- {verifiers-0.2.2.dev42 → verifiers-0.2.2.dev43}/tests/test_interception_utils.py +0 -0
- {verifiers-0.2.2.dev42 → verifiers-0.2.2.dev43}/tests/test_logging.py +0 -0
- {verifiers-0.2.2.dev42 → verifiers-0.2.2.dev43}/tests/test_math_rubric.py +0 -0
- {verifiers-0.2.2.dev42 → verifiers-0.2.2.dev43}/tests/test_maybe_think_parser.py +0 -0
- {verifiers-0.2.2.dev42 → verifiers-0.2.2.dev43}/tests/test_message_utils.py +0 -0
- {verifiers-0.2.2.dev42 → verifiers-0.2.2.dev43}/tests/test_message_utils_multimodal.py +0 -0
- {verifiers-0.2.2.dev42 → verifiers-0.2.2.dev43}/tests/test_multiturn_env.py +0 -0
- {verifiers-0.2.2.dev42 → verifiers-0.2.2.dev43}/tests/test_nemorl_client.py +0 -0
- {verifiers-0.2.2.dev42 → verifiers-0.2.2.dev43}/tests/test_openai_chat_completions_token_client.py +0 -0
- {verifiers-0.2.2.dev42 → verifiers-0.2.2.dev43}/tests/test_openai_responses_client.py +0 -0
- {verifiers-0.2.2.dev42 → verifiers-0.2.2.dev43}/tests/test_opencode_rlm_env.py +0 -0
- {verifiers-0.2.2.dev42 → verifiers-0.2.2.dev43}/tests/test_openenv_client.py +0 -0
- {verifiers-0.2.2.dev42 → verifiers-0.2.2.dev43}/tests/test_parser.py +0 -0
- {verifiers-0.2.2.dev42 → verifiers-0.2.2.dev43}/tests/test_path_utils.py +0 -0
- {verifiers-0.2.2.dev42 → verifiers-0.2.2.dev43}/tests/test_per_turn_timing.py +0 -0
- {verifiers-0.2.2.dev42 → verifiers-0.2.2.dev43}/tests/test_pricing_utils.py +0 -0
- {verifiers-0.2.2.dev42 → verifiers-0.2.2.dev43}/tests/test_prime_plugin.py +0 -0
- {verifiers-0.2.2.dev42 → verifiers-0.2.2.dev43}/tests/test_renderer_client.py +0 -0
- {verifiers-0.2.2.dev42 → verifiers-0.2.2.dev43}/tests/test_renderer_e2e.py +0 -0
- {verifiers-0.2.2.dev42 → verifiers-0.2.2.dev43}/tests/test_rlm_composable_env.py +0 -0
- {verifiers-0.2.2.dev42 → verifiers-0.2.2.dev43}/tests/test_rubric.py +0 -0
- {verifiers-0.2.2.dev42 → verifiers-0.2.2.dev43}/tests/test_rubric_group.py +0 -0
- {verifiers-0.2.2.dev42 → verifiers-0.2.2.dev43}/tests/test_sandbox_debug_env.py +0 -0
- {verifiers-0.2.2.dev42 → verifiers-0.2.2.dev43}/tests/test_sandbox_env.py +0 -0
- {verifiers-0.2.2.dev42 → verifiers-0.2.2.dev43}/tests/test_sandbox_mixin.py +0 -0
- {verifiers-0.2.2.dev42 → verifiers-0.2.2.dev43}/tests/test_save_utils.py +0 -0
- {verifiers-0.2.2.dev42 → verifiers-0.2.2.dev43}/tests/test_setup_script.py +0 -0
- {verifiers-0.2.2.dev42 → verifiers-0.2.2.dev43}/tests/test_singleturn_env.py +0 -0
- {verifiers-0.2.2.dev42 → verifiers-0.2.2.dev43}/tests/test_stateful_tool_env.py +0 -0
- {verifiers-0.2.2.dev42 → verifiers-0.2.2.dev43}/tests/test_think_parser.py +0 -0
- {verifiers-0.2.2.dev42 → verifiers-0.2.2.dev43}/tests/test_tool_env.py +0 -0
- {verifiers-0.2.2.dev42 → verifiers-0.2.2.dev43}/tests/test_tool_utils.py +0 -0
- {verifiers-0.2.2.dev42 → verifiers-0.2.2.dev43}/tests/test_trajectory_processing.py +0 -0
- {verifiers-0.2.2.dev42 → verifiers-0.2.2.dev43}/tests/test_tui_info_formatting.py +0 -0
- {verifiers-0.2.2.dev42 → verifiers-0.2.2.dev43}/tests/test_types.py +0 -0
- {verifiers-0.2.2.dev42 → verifiers-0.2.2.dev43}/tests/test_xml_parser.py +0 -0
- {verifiers-0.2.2.dev42 → verifiers-0.2.2.dev43}/tests/v1/fixtures/counter_tool_v1.py +0 -0
- {verifiers-0.2.2.dev42 → verifiers-0.2.2.dev43}/tests/v1/fixtures/duet_v1.py +0 -0
- {verifiers-0.2.2.dev42 → verifiers-0.2.2.dev43}/tests/v1/fixtures/echo_acp_resume_v1.py +0 -0
- {verifiers-0.2.2.dev42 → verifiers-0.2.2.dev43}/tests/v1/fixtures/echo_agentic_v1.py +0 -0
- {verifiers-0.2.2.dev42 → verifiers-0.2.2.dev43}/tests/v1/fixtures/echo_multi_v0.py +0 -0
- {verifiers-0.2.2.dev42 → verifiers-0.2.2.dev43}/tests/v1/fixtures/echo_tool_v1.py +0 -0
- {verifiers-0.2.2.dev42 → verifiers-0.2.2.dev43}/tests/v1/fixtures/echo_user_sim_v1.py +0 -0
- {verifiers-0.2.2.dev42 → verifiers-0.2.2.dev43}/tests/v1/fixtures/echo_v0.py +0 -0
- {verifiers-0.2.2.dev42 → verifiers-0.2.2.dev43}/tests/v1/fixtures/echo_v1.py +0 -0
- {verifiers-0.2.2.dev42 → verifiers-0.2.2.dev43}/tests/v1/fixtures/pyproject.toml +0 -0
- {verifiers-0.2.2.dev42 → verifiers-0.2.2.dev43}/tests/v1/fixtures/tool_response_image_v1.py +0 -0
- {verifiers-0.2.2.dev42 → verifiers-0.2.2.dev43}/tests/v1/test_color_codeword_tasks.py +0 -0
- {verifiers-0.2.2.dev42 → verifiers-0.2.2.dev43}/tests/v1/test_configs.py +0 -0
- {verifiers-0.2.2.dev42 → verifiers-0.2.2.dev43}/tests/v1/test_e2e.py +0 -0
- {verifiers-0.2.2.dev42 → verifiers-0.2.2.dev43}/tests/v1/test_envs.py +0 -0
- {verifiers-0.2.2.dev42 → verifiers-0.2.2.dev43}/tests/v1/test_graph.py +0 -0
- {verifiers-0.2.2.dev42 → verifiers-0.2.2.dev43}/tests/v1/test_judges.py +0 -0
- {verifiers-0.2.2.dev42 → verifiers-0.2.2.dev43}/tests/v1/test_legacy.py +0 -0
- {verifiers-0.2.2.dev42 → verifiers-0.2.2.dev43}/tests/v1/test_scoring.py +0 -0
- {verifiers-0.2.2.dev42 → verifiers-0.2.2.dev43}/tests/v1/test_taskset.py +0 -0
- {verifiers-0.2.2.dev42 → verifiers-0.2.2.dev43}/tests/v1/test_trace.py +0 -0
- {verifiers-0.2.2.dev42 → verifiers-0.2.2.dev43}/verifiers/__init__.py +0 -0
- {verifiers-0.2.2.dev42 → verifiers-0.2.2.dev43}/verifiers/cli/__init__.py +0 -0
- {verifiers-0.2.2.dev42 → verifiers-0.2.2.dev43}/verifiers/cli/commands/__init__.py +0 -0
- {verifiers-0.2.2.dev42 → verifiers-0.2.2.dev43}/verifiers/cli/commands/build.py +0 -0
- {verifiers-0.2.2.dev42 → verifiers-0.2.2.dev43}/verifiers/cli/commands/eval.py +0 -0
- {verifiers-0.2.2.dev42 → verifiers-0.2.2.dev43}/verifiers/cli/commands/gepa.py +0 -0
- {verifiers-0.2.2.dev42 → verifiers-0.2.2.dev43}/verifiers/cli/commands/init.py +0 -0
- {verifiers-0.2.2.dev42 → verifiers-0.2.2.dev43}/verifiers/cli/commands/install.py +0 -0
- {verifiers-0.2.2.dev42 → verifiers-0.2.2.dev43}/verifiers/cli/commands/setup.py +0 -0
- {verifiers-0.2.2.dev42 → verifiers-0.2.2.dev43}/verifiers/cli/plugins/__init__.py +0 -0
- {verifiers-0.2.2.dev42 → verifiers-0.2.2.dev43}/verifiers/cli/plugins/prime.py +0 -0
- {verifiers-0.2.2.dev42 → verifiers-0.2.2.dev43}/verifiers/cli/tui.py +0 -0
- {verifiers-0.2.2.dev42 → verifiers-0.2.2.dev43}/verifiers/clients/__init__.py +0 -0
- {verifiers-0.2.2.dev42 → verifiers-0.2.2.dev43}/verifiers/clients/anthropic_messages_client.py +0 -0
- {verifiers-0.2.2.dev42 → verifiers-0.2.2.dev43}/verifiers/clients/client.py +0 -0
- {verifiers-0.2.2.dev42 → verifiers-0.2.2.dev43}/verifiers/clients/nemorl_chat_completions_client.py +0 -0
- {verifiers-0.2.2.dev42 → verifiers-0.2.2.dev43}/verifiers/clients/openai_chat_completions_client.py +0 -0
- {verifiers-0.2.2.dev42 → verifiers-0.2.2.dev43}/verifiers/clients/openai_chat_completions_token_client.py +0 -0
- {verifiers-0.2.2.dev42 → verifiers-0.2.2.dev43}/verifiers/clients/openai_completions_client.py +0 -0
- {verifiers-0.2.2.dev42 → verifiers-0.2.2.dev43}/verifiers/clients/openai_responses_client.py +0 -0
- {verifiers-0.2.2.dev42 → verifiers-0.2.2.dev43}/verifiers/clients/renderer_client.py +0 -0
- {verifiers-0.2.2.dev42 → verifiers-0.2.2.dev43}/verifiers/decorators.py +0 -0
- {verifiers-0.2.2.dev42 → verifiers-0.2.2.dev43}/verifiers/envs/__init__.py +0 -0
- {verifiers-0.2.2.dev42 → verifiers-0.2.2.dev43}/verifiers/envs/env_group.py +0 -0
- {verifiers-0.2.2.dev42 → verifiers-0.2.2.dev43}/verifiers/envs/environment.py +0 -0
- {verifiers-0.2.2.dev42 → verifiers-0.2.2.dev43}/verifiers/envs/experimental/README.md +0 -0
- {verifiers-0.2.2.dev42 → verifiers-0.2.2.dev43}/verifiers/envs/experimental/__init__.py +0 -0
- {verifiers-0.2.2.dev42 → verifiers-0.2.2.dev43}/verifiers/envs/experimental/cli_agent_env.py +0 -0
- {verifiers-0.2.2.dev42 → verifiers-0.2.2.dev43}/verifiers/envs/experimental/composable/README.md +0 -0
- {verifiers-0.2.2.dev42 → verifiers-0.2.2.dev43}/verifiers/envs/experimental/composable/__init__.py +0 -0
- {verifiers-0.2.2.dev42 → verifiers-0.2.2.dev43}/verifiers/envs/experimental/composable/_filter.py +0 -0
- {verifiers-0.2.2.dev42 → verifiers-0.2.2.dev43}/verifiers/envs/experimental/composable/composable_env.py +0 -0
- {verifiers-0.2.2.dev42 → verifiers-0.2.2.dev43}/verifiers/envs/experimental/composable/harness.py +0 -0
- {verifiers-0.2.2.dev42 → verifiers-0.2.2.dev43}/verifiers/envs/experimental/composable/harnesses/__init__.py +0 -0
- {verifiers-0.2.2.dev42 → verifiers-0.2.2.dev43}/verifiers/envs/experimental/composable/harnesses/mini_swe_agent.py +0 -0
- {verifiers-0.2.2.dev42 → verifiers-0.2.2.dev43}/verifiers/envs/experimental/composable/harnesses/opencode.py +0 -0
- {verifiers-0.2.2.dev42 → verifiers-0.2.2.dev43}/verifiers/envs/experimental/composable/harnesses/prompt.txt +0 -0
- {verifiers-0.2.2.dev42 → verifiers-0.2.2.dev43}/verifiers/envs/experimental/composable/harnesses/rlm.py +0 -0
- {verifiers-0.2.2.dev42 → verifiers-0.2.2.dev43}/verifiers/envs/experimental/composable/sandbox_debug_env.py +0 -0
- {verifiers-0.2.2.dev42 → verifiers-0.2.2.dev43}/verifiers/envs/experimental/composable/swe_debug_env.py +0 -0
- {verifiers-0.2.2.dev42 → verifiers-0.2.2.dev43}/verifiers/envs/experimental/composable/task.py +0 -0
- {verifiers-0.2.2.dev42 → verifiers-0.2.2.dev43}/verifiers/envs/experimental/composable/tasksets/__init__.py +0 -0
- {verifiers-0.2.2.dev42 → verifiers-0.2.2.dev43}/verifiers/envs/experimental/composable/tasksets/cp/__init__.py +0 -0
- {verifiers-0.2.2.dev42 → verifiers-0.2.2.dev43}/verifiers/envs/experimental/composable/tasksets/cp/cp_task.py +0 -0
- {verifiers-0.2.2.dev42 → verifiers-0.2.2.dev43}/verifiers/envs/experimental/composable/tasksets/cp/test_utils.py +0 -0
- {verifiers-0.2.2.dev42 → verifiers-0.2.2.dev43}/verifiers/envs/experimental/composable/tasksets/harbor/__init__.py +0 -0
- {verifiers-0.2.2.dev42 → verifiers-0.2.2.dev43}/verifiers/envs/experimental/composable/tasksets/harbor/cli_gym.py +0 -0
- {verifiers-0.2.2.dev42 → verifiers-0.2.2.dev43}/verifiers/envs/experimental/composable/tasksets/harbor/harbor.py +0 -0
- {verifiers-0.2.2.dev42 → verifiers-0.2.2.dev43}/verifiers/envs/experimental/composable/tasksets/harbor/terminal_lego.py +0 -0
- {verifiers-0.2.2.dev42 → verifiers-0.2.2.dev43}/verifiers/envs/experimental/composable/tasksets/math/__init__.py +0 -0
- {verifiers-0.2.2.dev42 → verifiers-0.2.2.dev43}/verifiers/envs/experimental/composable/tasksets/math/math_task.py +0 -0
- {verifiers-0.2.2.dev42 → verifiers-0.2.2.dev43}/verifiers/envs/experimental/composable/tasksets/swe/README.md +0 -0
- {verifiers-0.2.2.dev42 → verifiers-0.2.2.dev43}/verifiers/envs/experimental/composable/tasksets/swe/__init__.py +0 -0
- {verifiers-0.2.2.dev42 → verifiers-0.2.2.dev43}/verifiers/envs/experimental/composable/tasksets/swe/multi_swe/__init__.py +0 -0
- {verifiers-0.2.2.dev42 → verifiers-0.2.2.dev43}/verifiers/envs/experimental/composable/tasksets/swe/multi_swe/extract_fix_patch.sh +0 -0
- {verifiers-0.2.2.dev42 → verifiers-0.2.2.dev43}/verifiers/envs/experimental/composable/tasksets/swe/multi_swe/taskset.py +0 -0
- {verifiers-0.2.2.dev42 → verifiers-0.2.2.dev43}/verifiers/envs/experimental/composable/tasksets/swe/openswe/__init__.py +0 -0
- {verifiers-0.2.2.dev42 → verifiers-0.2.2.dev43}/verifiers/envs/experimental/composable/tasksets/swe/openswe/taskset.py +0 -0
- {verifiers-0.2.2.dev42 → verifiers-0.2.2.dev43}/verifiers/envs/experimental/composable/tasksets/swe/r2e_gym/__init__.py +0 -0
- {verifiers-0.2.2.dev42 → verifiers-0.2.2.dev43}/verifiers/envs/experimental/composable/tasksets/swe/r2e_gym/log_parser.py +0 -0
- {verifiers-0.2.2.dev42 → verifiers-0.2.2.dev43}/verifiers/envs/experimental/composable/tasksets/swe/r2e_gym/taskset.py +0 -0
- {verifiers-0.2.2.dev42 → verifiers-0.2.2.dev43}/verifiers/envs/experimental/composable/tasksets/swe/scale_swe/__init__.py +0 -0
- {verifiers-0.2.2.dev42 → verifiers-0.2.2.dev43}/verifiers/envs/experimental/composable/tasksets/swe/scale_swe/taskset.py +0 -0
- {verifiers-0.2.2.dev42 → verifiers-0.2.2.dev43}/verifiers/envs/experimental/composable/tasksets/swe/shared/__init__.py +0 -0
- {verifiers-0.2.2.dev42 → verifiers-0.2.2.dev43}/verifiers/envs/experimental/composable/tasksets/swe/shared/test_patch.py +0 -0
- {verifiers-0.2.2.dev42 → verifiers-0.2.2.dev43}/verifiers/envs/experimental/composable/tasksets/swe/swe_bench/__init__.py +0 -0
- {verifiers-0.2.2.dev42 → verifiers-0.2.2.dev43}/verifiers/envs/experimental/composable/tasksets/swe/swe_bench/taskset.py +0 -0
- {verifiers-0.2.2.dev42 → verifiers-0.2.2.dev43}/verifiers/envs/experimental/composable/tasksets/swe/swe_lego/__init__.py +0 -0
- {verifiers-0.2.2.dev42 → verifiers-0.2.2.dev43}/verifiers/envs/experimental/composable/tasksets/swe/swe_lego/taskset.py +0 -0
- {verifiers-0.2.2.dev42 → verifiers-0.2.2.dev43}/verifiers/envs/experimental/composable/tasksets/swe/swe_rebench_v2/__init__.py +0 -0
- {verifiers-0.2.2.dev42 → verifiers-0.2.2.dev43}/verifiers/envs/experimental/composable/tasksets/swe/swe_rebench_v2/log_parsers.py +0 -0
- {verifiers-0.2.2.dev42 → verifiers-0.2.2.dev43}/verifiers/envs/experimental/composable/tasksets/swe/swe_rebench_v2/taskset.py +0 -0
- {verifiers-0.2.2.dev42 → verifiers-0.2.2.dev43}/verifiers/envs/experimental/composable/tasksets/swe/swe_smith/__init__.py +0 -0
- {verifiers-0.2.2.dev42 → verifiers-0.2.2.dev43}/verifiers/envs/experimental/composable/tasksets/swe/swe_smith/taskset.py +0 -0
- {verifiers-0.2.2.dev42 → verifiers-0.2.2.dev43}/verifiers/envs/experimental/composable/tasksets/swe/swe_tasksets.py +0 -0
- {verifiers-0.2.2.dev42 → verifiers-0.2.2.dev43}/verifiers/envs/experimental/gym_env.py +0 -0
- {verifiers-0.2.2.dev42 → verifiers-0.2.2.dev43}/verifiers/envs/experimental/harbor_env/__init__.py +0 -0
- {verifiers-0.2.2.dev42 → verifiers-0.2.2.dev43}/verifiers/envs/experimental/harbor_env/env.py +0 -0
- {verifiers-0.2.2.dev42 → verifiers-0.2.2.dev43}/verifiers/envs/experimental/harbor_env/mcp.py +0 -0
- {verifiers-0.2.2.dev42 → verifiers-0.2.2.dev43}/verifiers/envs/experimental/mcp_env.py +0 -0
- {verifiers-0.2.2.dev42 → verifiers-0.2.2.dev43}/verifiers/envs/experimental/opencode_env.py +0 -0
- {verifiers-0.2.2.dev42 → verifiers-0.2.2.dev43}/verifiers/envs/experimental/opencode_qa_env.py +0 -0
- {verifiers-0.2.2.dev42 → verifiers-0.2.2.dev43}/verifiers/envs/experimental/opencode_rlm_env.py +0 -0
- {verifiers-0.2.2.dev42 → verifiers-0.2.2.dev43}/verifiers/envs/experimental/sandbox_mixin.py +0 -0
- {verifiers-0.2.2.dev42 → verifiers-0.2.2.dev43}/verifiers/envs/experimental/utils/__init__.py +0 -0
- {verifiers-0.2.2.dev42 → verifiers-0.2.2.dev43}/verifiers/envs/experimental/utils/file_locks.py +0 -0
- {verifiers-0.2.2.dev42 → verifiers-0.2.2.dev43}/verifiers/envs/experimental/utils/git_checkout_cache.py +0 -0
- {verifiers-0.2.2.dev42 → verifiers-0.2.2.dev43}/verifiers/envs/integrations/README.md +0 -0
- {verifiers-0.2.2.dev42 → verifiers-0.2.2.dev43}/verifiers/envs/integrations/__init__.py +0 -0
- {verifiers-0.2.2.dev42 → verifiers-0.2.2.dev43}/verifiers/envs/integrations/browser_env/README.md +0 -0
- {verifiers-0.2.2.dev42 → verifiers-0.2.2.dev43}/verifiers/envs/integrations/browser_env/__init__.py +0 -0
- {verifiers-0.2.2.dev42 → verifiers-0.2.2.dev43}/verifiers/envs/integrations/browser_env/browser_env.py +0 -0
- {verifiers-0.2.2.dev42 → verifiers-0.2.2.dev43}/verifiers/envs/integrations/browser_env/modes/__init__.py +0 -0
- {verifiers-0.2.2.dev42 → verifiers-0.2.2.dev43}/verifiers/envs/integrations/browser_env/modes/base.py +0 -0
- {verifiers-0.2.2.dev42 → verifiers-0.2.2.dev43}/verifiers/envs/integrations/browser_env/modes/cua_mode.py +0 -0
- {verifiers-0.2.2.dev42 → verifiers-0.2.2.dev43}/verifiers/envs/integrations/browser_env/modes/dom_mode.py +0 -0
- {verifiers-0.2.2.dev42 → verifiers-0.2.2.dev43}/verifiers/envs/integrations/openenv_env.py +0 -0
- {verifiers-0.2.2.dev42 → verifiers-0.2.2.dev43}/verifiers/envs/integrations/reasoninggym_env.py +0 -0
- {verifiers-0.2.2.dev42 → verifiers-0.2.2.dev43}/verifiers/envs/integrations/textarena_env.py +0 -0
- {verifiers-0.2.2.dev42 → verifiers-0.2.2.dev43}/verifiers/envs/multiturn_env.py +0 -0
- {verifiers-0.2.2.dev42 → verifiers-0.2.2.dev43}/verifiers/envs/python_env.py +0 -0
- {verifiers-0.2.2.dev42 → verifiers-0.2.2.dev43}/verifiers/envs/sandbox_env.py +0 -0
- {verifiers-0.2.2.dev42 → verifiers-0.2.2.dev43}/verifiers/envs/singleturn_env.py +0 -0
- {verifiers-0.2.2.dev42 → verifiers-0.2.2.dev43}/verifiers/envs/stateful_tool_env.py +0 -0
- {verifiers-0.2.2.dev42 → verifiers-0.2.2.dev43}/verifiers/envs/tool_env.py +0 -0
- {verifiers-0.2.2.dev42 → verifiers-0.2.2.dev43}/verifiers/errors.py +0 -0
- {verifiers-0.2.2.dev42 → verifiers-0.2.2.dev43}/verifiers/gepa/__init__.py +0 -0
- {verifiers-0.2.2.dev42 → verifiers-0.2.2.dev43}/verifiers/gepa/adapter.py +0 -0
- {verifiers-0.2.2.dev42 → verifiers-0.2.2.dev43}/verifiers/gepa/config.py +0 -0
- {verifiers-0.2.2.dev42 → verifiers-0.2.2.dev43}/verifiers/gepa/display.py +0 -0
- {verifiers-0.2.2.dev42 → verifiers-0.2.2.dev43}/verifiers/gepa/gepa_utils.py +0 -0
- {verifiers-0.2.2.dev42 → verifiers-0.2.2.dev43}/verifiers/parsers/__init__.py +0 -0
- {verifiers-0.2.2.dev42 → verifiers-0.2.2.dev43}/verifiers/parsers/maybe_think_parser.py +0 -0
- {verifiers-0.2.2.dev42 → verifiers-0.2.2.dev43}/verifiers/parsers/parser.py +0 -0
- {verifiers-0.2.2.dev42 → verifiers-0.2.2.dev43}/verifiers/parsers/think_parser.py +0 -0
- {verifiers-0.2.2.dev42 → verifiers-0.2.2.dev43}/verifiers/parsers/xml_parser.py +0 -0
- {verifiers-0.2.2.dev42 → verifiers-0.2.2.dev43}/verifiers/rubrics/__init__.py +0 -0
- {verifiers-0.2.2.dev42 → verifiers-0.2.2.dev43}/verifiers/rubrics/experimental/hybrid_math_rubric.py +0 -0
- {verifiers-0.2.2.dev42 → verifiers-0.2.2.dev43}/verifiers/rubrics/judge_rubric.py +0 -0
- {verifiers-0.2.2.dev42 → verifiers-0.2.2.dev43}/verifiers/rubrics/math_rubric.py +0 -0
- {verifiers-0.2.2.dev42 → verifiers-0.2.2.dev43}/verifiers/rubrics/rubric.py +0 -0
- {verifiers-0.2.2.dev42 → verifiers-0.2.2.dev43}/verifiers/rubrics/rubric_group.py +0 -0
- {verifiers-0.2.2.dev42 → verifiers-0.2.2.dev43}/verifiers/scripts/__init__.py +0 -0
- {verifiers-0.2.2.dev42 → verifiers-0.2.2.dev43}/verifiers/scripts/build.py +0 -0
- {verifiers-0.2.2.dev42 → verifiers-0.2.2.dev43}/verifiers/scripts/eval.py +0 -0
- {verifiers-0.2.2.dev42 → verifiers-0.2.2.dev43}/verifiers/scripts/gepa.py +0 -0
- {verifiers-0.2.2.dev42 → verifiers-0.2.2.dev43}/verifiers/scripts/init.py +0 -0
- {verifiers-0.2.2.dev42 → verifiers-0.2.2.dev43}/verifiers/scripts/install.py +0 -0
- {verifiers-0.2.2.dev42 → verifiers-0.2.2.dev43}/verifiers/scripts/setup.py +0 -0
- {verifiers-0.2.2.dev42 → verifiers-0.2.2.dev43}/verifiers/scripts/tui.py +0 -0
- {verifiers-0.2.2.dev42 → verifiers-0.2.2.dev43}/verifiers/serve/__init__.py +0 -0
- {verifiers-0.2.2.dev42 → verifiers-0.2.2.dev43}/verifiers/serve/client/env_client.py +0 -0
- {verifiers-0.2.2.dev42 → verifiers-0.2.2.dev43}/verifiers/serve/client/zmq_env_client.py +0 -0
- {verifiers-0.2.2.dev42 → verifiers-0.2.2.dev43}/verifiers/serve/server/__init__.py +0 -0
- {verifiers-0.2.2.dev42 → verifiers-0.2.2.dev43}/verifiers/serve/server/env_router.py +0 -0
- {verifiers-0.2.2.dev42 → verifiers-0.2.2.dev43}/verifiers/serve/server/env_server.py +0 -0
- {verifiers-0.2.2.dev42 → verifiers-0.2.2.dev43}/verifiers/serve/server/env_worker.py +0 -0
- {verifiers-0.2.2.dev42 → verifiers-0.2.2.dev43}/verifiers/serve/server/zmq_env_server.py +0 -0
- {verifiers-0.2.2.dev42 → verifiers-0.2.2.dev43}/verifiers/serve/types.py +0 -0
- {verifiers-0.2.2.dev42 → verifiers-0.2.2.dev43}/verifiers/types.py +0 -0
- {verifiers-0.2.2.dev42 → verifiers-0.2.2.dev43}/verifiers/utils/__init__.py +0 -0
- {verifiers-0.2.2.dev42 → verifiers-0.2.2.dev43}/verifiers/utils/async_utils.py +0 -0
- {verifiers-0.2.2.dev42 → verifiers-0.2.2.dev43}/verifiers/utils/client_utils.py +0 -0
- {verifiers-0.2.2.dev42 → verifiers-0.2.2.dev43}/verifiers/utils/config_utils.py +0 -0
- {verifiers-0.2.2.dev42 → verifiers-0.2.2.dev43}/verifiers/utils/data_utils.py +0 -0
- {verifiers-0.2.2.dev42 → verifiers-0.2.2.dev43}/verifiers/utils/display_utils.py +0 -0
- {verifiers-0.2.2.dev42 → verifiers-0.2.2.dev43}/verifiers/utils/env_config_utils.py +0 -0
- {verifiers-0.2.2.dev42 → verifiers-0.2.2.dev43}/verifiers/utils/env_utils.py +0 -0
- {verifiers-0.2.2.dev42 → verifiers-0.2.2.dev43}/verifiers/utils/error_utils.py +0 -0
- {verifiers-0.2.2.dev42 → verifiers-0.2.2.dev43}/verifiers/utils/eval_display.py +0 -0
- {verifiers-0.2.2.dev42 → verifiers-0.2.2.dev43}/verifiers/utils/eval_utils.py +0 -0
- {verifiers-0.2.2.dev42 → verifiers-0.2.2.dev43}/verifiers/utils/heartbeat.py +0 -0
- {verifiers-0.2.2.dev42 → verifiers-0.2.2.dev43}/verifiers/utils/import_utils.py +0 -0
- {verifiers-0.2.2.dev42 → verifiers-0.2.2.dev43}/verifiers/utils/install_utils.py +0 -0
- {verifiers-0.2.2.dev42 → verifiers-0.2.2.dev43}/verifiers/utils/interception_utils.py +0 -0
- {verifiers-0.2.2.dev42 → verifiers-0.2.2.dev43}/verifiers/utils/logging_utils.py +0 -0
- {verifiers-0.2.2.dev42 → verifiers-0.2.2.dev43}/verifiers/utils/message_utils.py +0 -0
- {verifiers-0.2.2.dev42 → verifiers-0.2.2.dev43}/verifiers/utils/metric_utils.py +0 -0
- {verifiers-0.2.2.dev42 → verifiers-0.2.2.dev43}/verifiers/utils/path_utils.py +0 -0
- {verifiers-0.2.2.dev42 → verifiers-0.2.2.dev43}/verifiers/utils/pricing_utils.py +0 -0
- {verifiers-0.2.2.dev42 → verifiers-0.2.2.dev43}/verifiers/utils/process_utils.py +0 -0
- {verifiers-0.2.2.dev42 → verifiers-0.2.2.dev43}/verifiers/utils/response_utils.py +0 -0
- {verifiers-0.2.2.dev42 → verifiers-0.2.2.dev43}/verifiers/utils/save_utils.py +0 -0
- {verifiers-0.2.2.dev42 → verifiers-0.2.2.dev43}/verifiers/utils/serve_utils.py +0 -0
- {verifiers-0.2.2.dev42 → verifiers-0.2.2.dev43}/verifiers/utils/thread_utils.py +0 -0
- {verifiers-0.2.2.dev42 → verifiers-0.2.2.dev43}/verifiers/utils/threaded_sandbox_client.py +0 -0
- {verifiers-0.2.2.dev42 → verifiers-0.2.2.dev43}/verifiers/utils/tool_utils.py +0 -0
- {verifiers-0.2.2.dev42 → verifiers-0.2.2.dev43}/verifiers/utils/usage_utils.py +0 -0
- {verifiers-0.2.2.dev42 → verifiers-0.2.2.dev43}/verifiers/utils/version_utils.py +0 -0
- {verifiers-0.2.2.dev42 → verifiers-0.2.2.dev43}/verifiers/v1/acp/__init__.py +0 -0
- {verifiers-0.2.2.dev42 → verifiers-0.2.2.dev43}/verifiers/v1/acp/_runner.py +0 -0
- {verifiers-0.2.2.dev42 → verifiers-0.2.2.dev43}/verifiers/v1/cli/__init__.py +0 -0
- {verifiers-0.2.2.dev42 → verifiers-0.2.2.dev43}/verifiers/v1/cli/dashboard/__init__.py +0 -0
- {verifiers-0.2.2.dev42 → verifiers-0.2.2.dev43}/verifiers/v1/cli/dashboard/base.py +0 -0
- {verifiers-0.2.2.dev42 → verifiers-0.2.2.dev43}/verifiers/v1/cli/dashboard/replay.py +0 -0
- {verifiers-0.2.2.dev42 → verifiers-0.2.2.dev43}/verifiers/v1/cli/dashboard/validate.py +0 -0
- {verifiers-0.2.2.dev42 → verifiers-0.2.2.dev43}/verifiers/v1/cli/debug.py +0 -0
- {verifiers-0.2.2.dev42 → verifiers-0.2.2.dev43}/verifiers/v1/cli/eval/__init__.py +0 -0
- {verifiers-0.2.2.dev42 → verifiers-0.2.2.dev43}/verifiers/v1/cli/eval/resume.py +0 -0
- {verifiers-0.2.2.dev42 → verifiers-0.2.2.dev43}/verifiers/v1/cli/gepa.py +0 -0
- {verifiers-0.2.2.dev42 → verifiers-0.2.2.dev43}/verifiers/v1/cli/init.py +0 -0
- {verifiers-0.2.2.dev42 → verifiers-0.2.2.dev43}/verifiers/v1/cli/output.py +0 -0
- {verifiers-0.2.2.dev42 → verifiers-0.2.2.dev43}/verifiers/v1/cli/replay.py +0 -0
- {verifiers-0.2.2.dev42 → verifiers-0.2.2.dev43}/verifiers/v1/cli/resolve.py +0 -0
- {verifiers-0.2.2.dev42 → verifiers-0.2.2.dev43}/verifiers/v1/cli/validate.py +0 -0
- {verifiers-0.2.2.dev42 → verifiers-0.2.2.dev43}/verifiers/v1/clients/__init__.py +0 -0
- {verifiers-0.2.2.dev42 → verifiers-0.2.2.dev43}/verifiers/v1/clients/client.py +0 -0
- {verifiers-0.2.2.dev42 → verifiers-0.2.2.dev43}/verifiers/v1/clients/config.py +0 -0
- {verifiers-0.2.2.dev42 → verifiers-0.2.2.dev43}/verifiers/v1/clients/eval.py +0 -0
- {verifiers-0.2.2.dev42 → verifiers-0.2.2.dev43}/verifiers/v1/clients/train.py +0 -0
- {verifiers-0.2.2.dev42 → verifiers-0.2.2.dev43}/verifiers/v1/configs/__init__.py +0 -0
- {verifiers-0.2.2.dev42 → verifiers-0.2.2.dev43}/verifiers/v1/configs/agent.py +0 -0
- {verifiers-0.2.2.dev42 → verifiers-0.2.2.dev43}/verifiers/v1/configs/cli/__init__.py +0 -0
- {verifiers-0.2.2.dev42 → verifiers-0.2.2.dev43}/verifiers/v1/configs/cli/debug.py +0 -0
- {verifiers-0.2.2.dev42 → verifiers-0.2.2.dev43}/verifiers/v1/configs/cli/init.py +0 -0
- {verifiers-0.2.2.dev42 → verifiers-0.2.2.dev43}/verifiers/v1/configs/cli/replay.py +0 -0
- {verifiers-0.2.2.dev42 → verifiers-0.2.2.dev43}/verifiers/v1/configs/cli/validate.py +0 -0
- {verifiers-0.2.2.dev42 → verifiers-0.2.2.dev43}/verifiers/v1/configs/harness.py +0 -0
- {verifiers-0.2.2.dev42 → verifiers-0.2.2.dev43}/verifiers/v1/configs/judge.py +0 -0
- {verifiers-0.2.2.dev42 → verifiers-0.2.2.dev43}/verifiers/v1/configs/retries.py +0 -0
- {verifiers-0.2.2.dev42 → verifiers-0.2.2.dev43}/verifiers/v1/configs/task.py +0 -0
- {verifiers-0.2.2.dev42 → verifiers-0.2.2.dev43}/verifiers/v1/configs/taskset.py +0 -0
- {verifiers-0.2.2.dev42 → verifiers-0.2.2.dev43}/verifiers/v1/decorators.py +0 -0
- {verifiers-0.2.2.dev42 → verifiers-0.2.2.dev43}/verifiers/v1/dialects/__init__.py +0 -0
- {verifiers-0.2.2.dev42 → verifiers-0.2.2.dev43}/verifiers/v1/dialects/anthropic.py +0 -0
- {verifiers-0.2.2.dev42 → verifiers-0.2.2.dev43}/verifiers/v1/dialects/base.py +0 -0
- {verifiers-0.2.2.dev42 → verifiers-0.2.2.dev43}/verifiers/v1/dialects/chat.py +0 -0
- {verifiers-0.2.2.dev42 → verifiers-0.2.2.dev43}/verifiers/v1/dialects/responses.py +0 -0
- {verifiers-0.2.2.dev42 → verifiers-0.2.2.dev43}/verifiers/v1/envs/__init__.py +0 -0
- {verifiers-0.2.2.dev42 → verifiers-0.2.2.dev43}/verifiers/v1/envs/agentic_judge/__init__.py +0 -0
- {verifiers-0.2.2.dev42 → verifiers-0.2.2.dev43}/verifiers/v1/envs/agentic_judge/env.py +0 -0
- {verifiers-0.2.2.dev42 → verifiers-0.2.2.dev43}/verifiers/v1/envs/best_of_n/__init__.py +0 -0
- {verifiers-0.2.2.dev42 → verifiers-0.2.2.dev43}/verifiers/v1/envs/best_of_n/env.py +0 -0
- {verifiers-0.2.2.dev42 → verifiers-0.2.2.dev43}/verifiers/v1/envs/single_agent/__init__.py +0 -0
- {verifiers-0.2.2.dev42 → verifiers-0.2.2.dev43}/verifiers/v1/envs/single_agent/env.py +0 -0
- {verifiers-0.2.2.dev42 → verifiers-0.2.2.dev43}/verifiers/v1/envs/user_sim/__init__.py +0 -0
- {verifiers-0.2.2.dev42 → verifiers-0.2.2.dev43}/verifiers/v1/envs/user_sim/env.py +0 -0
- {verifiers-0.2.2.dev42 → verifiers-0.2.2.dev43}/verifiers/v1/episode.py +0 -0
- {verifiers-0.2.2.dev42 → verifiers-0.2.2.dev43}/verifiers/v1/errors.py +0 -0
- {verifiers-0.2.2.dev42 → verifiers-0.2.2.dev43}/verifiers/v1/gepa/__init__.py +0 -0
- {verifiers-0.2.2.dev42 → verifiers-0.2.2.dev43}/verifiers/v1/gepa/adapter.py +0 -0
- {verifiers-0.2.2.dev42 → verifiers-0.2.2.dev43}/verifiers/v1/gepa/dataset.py +0 -0
- {verifiers-0.2.2.dev42 → verifiers-0.2.2.dev43}/verifiers/v1/gepa/reflection.py +0 -0
- {verifiers-0.2.2.dev42 → verifiers-0.2.2.dev43}/verifiers/v1/gepa/runner.py +0 -0
- {verifiers-0.2.2.dev42 → verifiers-0.2.2.dev43}/verifiers/v1/graph.py +0 -0
- {verifiers-0.2.2.dev42 → verifiers-0.2.2.dev43}/verifiers/v1/harness.py +0 -0
- {verifiers-0.2.2.dev42 → verifiers-0.2.2.dev43}/verifiers/v1/harnesses/__init__.py +0 -0
- {verifiers-0.2.2.dev42 → verifiers-0.2.2.dev43}/verifiers/v1/harnesses/bash/__init__.py +0 -0
- {verifiers-0.2.2.dev42 → verifiers-0.2.2.dev43}/verifiers/v1/harnesses/bash/harness.py +0 -0
- {verifiers-0.2.2.dev42 → verifiers-0.2.2.dev43}/verifiers/v1/harnesses/bash/program.py +0 -0
- {verifiers-0.2.2.dev42 → verifiers-0.2.2.dev43}/verifiers/v1/harnesses/claude_code/__init__.py +0 -0
- {verifiers-0.2.2.dev42 → verifiers-0.2.2.dev43}/verifiers/v1/harnesses/claude_code/harness.py +0 -0
- {verifiers-0.2.2.dev42 → verifiers-0.2.2.dev43}/verifiers/v1/harnesses/codex/__init__.py +0 -0
- {verifiers-0.2.2.dev42 → verifiers-0.2.2.dev43}/verifiers/v1/harnesses/codex/harness.py +0 -0
- {verifiers-0.2.2.dev42 → verifiers-0.2.2.dev43}/verifiers/v1/harnesses/kimi_code/__init__.py +0 -0
- {verifiers-0.2.2.dev42 → verifiers-0.2.2.dev43}/verifiers/v1/harnesses/kimi_code/harness.py +0 -0
- {verifiers-0.2.2.dev42 → verifiers-0.2.2.dev43}/verifiers/v1/harnesses/mini_swe_agent/__init__.py +0 -0
- {verifiers-0.2.2.dev42 → verifiers-0.2.2.dev43}/verifiers/v1/harnesses/mini_swe_agent/harness.py +0 -0
- {verifiers-0.2.2.dev42 → verifiers-0.2.2.dev43}/verifiers/v1/harnesses/mini_swe_agent/program.py +0 -0
- {verifiers-0.2.2.dev42 → verifiers-0.2.2.dev43}/verifiers/v1/harnesses/null/__init__.py +0 -0
- {verifiers-0.2.2.dev42 → verifiers-0.2.2.dev43}/verifiers/v1/harnesses/null/harness.py +0 -0
- {verifiers-0.2.2.dev42 → verifiers-0.2.2.dev43}/verifiers/v1/harnesses/null/program.py +0 -0
- {verifiers-0.2.2.dev42 → verifiers-0.2.2.dev43}/verifiers/v1/harnesses/pi/__init__.py +0 -0
- {verifiers-0.2.2.dev42 → verifiers-0.2.2.dev43}/verifiers/v1/harnesses/pi/harness.py +0 -0
- {verifiers-0.2.2.dev42 → verifiers-0.2.2.dev43}/verifiers/v1/harnesses/pool/__init__.py +0 -0
- {verifiers-0.2.2.dev42 → verifiers-0.2.2.dev43}/verifiers/v1/harnesses/pool/harness.py +0 -0
- {verifiers-0.2.2.dev42 → verifiers-0.2.2.dev43}/verifiers/v1/harnesses/rlm/__init__.py +0 -0
- {verifiers-0.2.2.dev42 → verifiers-0.2.2.dev43}/verifiers/v1/harnesses/rlm/harness.py +0 -0
- {verifiers-0.2.2.dev42 → verifiers-0.2.2.dev43}/verifiers/v1/harnesses/terminus_2/__init__.py +0 -0
- {verifiers-0.2.2.dev42 → verifiers-0.2.2.dev43}/verifiers/v1/harnesses/terminus_2/harness.py +0 -0
- {verifiers-0.2.2.dev42 → verifiers-0.2.2.dev43}/verifiers/v1/harnesses/terminus_2/program.py +0 -0
- {verifiers-0.2.2.dev42 → verifiers-0.2.2.dev43}/verifiers/v1/interception/__init__.py +0 -0
- {verifiers-0.2.2.dev42 → verifiers-0.2.2.dev43}/verifiers/v1/interception/base.py +0 -0
- {verifiers-0.2.2.dev42 → verifiers-0.2.2.dev43}/verifiers/v1/interception/pool.py +0 -0
- {verifiers-0.2.2.dev42 → verifiers-0.2.2.dev43}/verifiers/v1/interception/server.py +0 -0
- {verifiers-0.2.2.dev42 → verifiers-0.2.2.dev43}/verifiers/v1/interception/tunnel/__init__.py +0 -0
- {verifiers-0.2.2.dev42 → verifiers-0.2.2.dev43}/verifiers/v1/interception/tunnel/base.py +0 -0
- {verifiers-0.2.2.dev42 → verifiers-0.2.2.dev43}/verifiers/v1/interception/tunnel/custom.py +0 -0
- {verifiers-0.2.2.dev42 → verifiers-0.2.2.dev43}/verifiers/v1/interception/tunnel/prime.py +0 -0
- {verifiers-0.2.2.dev42 → verifiers-0.2.2.dev43}/verifiers/v1/judge.py +0 -0
- {verifiers-0.2.2.dev42 → verifiers-0.2.2.dev43}/verifiers/v1/judges/__init__.py +0 -0
- {verifiers-0.2.2.dev42 → verifiers-0.2.2.dev43}/verifiers/v1/judges/reference.py +0 -0
- {verifiers-0.2.2.dev42 → verifiers-0.2.2.dev43}/verifiers/v1/judges/reference.txt +0 -0
- {verifiers-0.2.2.dev42 → verifiers-0.2.2.dev43}/verifiers/v1/judges/rubric.py +0 -0
- {verifiers-0.2.2.dev42 → verifiers-0.2.2.dev43}/verifiers/v1/judges/rubric.txt +0 -0
- {verifiers-0.2.2.dev42 → verifiers-0.2.2.dev43}/verifiers/v1/loaders.py +0 -0
- {verifiers-0.2.2.dev42 → verifiers-0.2.2.dev43}/verifiers/v1/mcp/__init__.py +0 -0
- {verifiers-0.2.2.dev42 → verifiers-0.2.2.dev43}/verifiers/v1/mcp/launch.py +0 -0
- {verifiers-0.2.2.dev42 → verifiers-0.2.2.dev43}/verifiers/v1/mcp/server.py +0 -0
- {verifiers-0.2.2.dev42 → verifiers-0.2.2.dev43}/verifiers/v1/mcp/toolset.py +0 -0
- {verifiers-0.2.2.dev42 → verifiers-0.2.2.dev43}/verifiers/v1/retries.py +0 -0
- {verifiers-0.2.2.dev42 → verifiers-0.2.2.dev43}/verifiers/v1/rollout.py +0 -0
- {verifiers-0.2.2.dev42 → verifiers-0.2.2.dev43}/verifiers/v1/runtimes/__init__.py +0 -0
- {verifiers-0.2.2.dev42 → verifiers-0.2.2.dev43}/verifiers/v1/runtimes/base.py +0 -0
- {verifiers-0.2.2.dev42 → verifiers-0.2.2.dev43}/verifiers/v1/runtimes/docker/__init__.py +0 -0
- {verifiers-0.2.2.dev42 → verifiers-0.2.2.dev43}/verifiers/v1/runtimes/docker/egress.py +0 -0
- {verifiers-0.2.2.dev42 → verifiers-0.2.2.dev43}/verifiers/v1/runtimes/limiters.py +0 -0
- {verifiers-0.2.2.dev42 → verifiers-0.2.2.dev43}/verifiers/v1/runtimes/modal.py +0 -0
- {verifiers-0.2.2.dev42 → verifiers-0.2.2.dev43}/verifiers/v1/runtimes/prime.py +0 -0
- {verifiers-0.2.2.dev42 → verifiers-0.2.2.dev43}/verifiers/v1/runtimes/subprocess.py +0 -0
- {verifiers-0.2.2.dev42 → verifiers-0.2.2.dev43}/verifiers/v1/scoring.py +0 -0
- {verifiers-0.2.2.dev42 → verifiers-0.2.2.dev43}/verifiers/v1/serve/__init__.py +0 -0
- {verifiers-0.2.2.dev42 → verifiers-0.2.2.dev43}/verifiers/v1/serve/client.py +0 -0
- {verifiers-0.2.2.dev42 → verifiers-0.2.2.dev43}/verifiers/v1/serve/types.py +0 -0
- {verifiers-0.2.2.dev42 → verifiers-0.2.2.dev43}/verifiers/v1/session.py +0 -0
- {verifiers-0.2.2.dev42 → verifiers-0.2.2.dev43}/verifiers/v1/state.py +0 -0
- {verifiers-0.2.2.dev42 → verifiers-0.2.2.dev43}/verifiers/v1/task.py +0 -0
- {verifiers-0.2.2.dev42 → verifiers-0.2.2.dev43}/verifiers/v1/taskset.py +0 -0
- {verifiers-0.2.2.dev42 → verifiers-0.2.2.dev43}/verifiers/v1/tasksets/__init__.py +0 -0
- {verifiers-0.2.2.dev42 → verifiers-0.2.2.dev43}/verifiers/v1/tasksets/harbor/__init__.py +0 -0
- {verifiers-0.2.2.dev42 → verifiers-0.2.2.dev43}/verifiers/v1/tasksets/harbor/taskset.py +0 -0
- {verifiers-0.2.2.dev42 → verifiers-0.2.2.dev43}/verifiers/v1/tasksets/lean/__init__.py +0 -0
- {verifiers-0.2.2.dev42 → verifiers-0.2.2.dev43}/verifiers/v1/tasksets/lean/scoring.py +0 -0
- {verifiers-0.2.2.dev42 → verifiers-0.2.2.dev43}/verifiers/v1/tasksets/lean/taskset.py +0 -0
- {verifiers-0.2.2.dev42 → verifiers-0.2.2.dev43}/verifiers/v1/tasksets/openenv/__init__.py +0 -0
- {verifiers-0.2.2.dev42 → verifiers-0.2.2.dev43}/verifiers/v1/tasksets/openenv/taskset.py +0 -0
- {verifiers-0.2.2.dev42 → verifiers-0.2.2.dev43}/verifiers/v1/tasksets/textarena/__init__.py +0 -0
- {verifiers-0.2.2.dev42 → verifiers-0.2.2.dev43}/verifiers/v1/tasksets/textarena/taskset.py +0 -0
- {verifiers-0.2.2.dev42 → verifiers-0.2.2.dev43}/verifiers/v1/trace.py +0 -0
- {verifiers-0.2.2.dev42 → verifiers-0.2.2.dev43}/verifiers/v1/types.py +0 -0
- {verifiers-0.2.2.dev42 → verifiers-0.2.2.dev43}/verifiers/v1/utils/__init__.py +0 -0
- {verifiers-0.2.2.dev42 → verifiers-0.2.2.dev43}/verifiers/v1/utils/aio.py +0 -0
- {verifiers-0.2.2.dev42 → verifiers-0.2.2.dev43}/verifiers/v1/utils/compile.py +0 -0
- {verifiers-0.2.2.dev42 → verifiers-0.2.2.dev43}/verifiers/v1/utils/format.py +0 -0
- {verifiers-0.2.2.dev42 → verifiers-0.2.2.dev43}/verifiers/v1/utils/generic.py +0 -0
- {verifiers-0.2.2.dev42 → verifiers-0.2.2.dev43}/verifiers/v1/utils/git.py +0 -0
- {verifiers-0.2.2.dev42 → verifiers-0.2.2.dev43}/verifiers/v1/utils/image.py +0 -0
- {verifiers-0.2.2.dev42 → verifiers-0.2.2.dev43}/verifiers/v1/utils/install.py +0 -0
- {verifiers-0.2.2.dev42 → verifiers-0.2.2.dev43}/verifiers/v1/utils/interrupt.py +0 -0
- {verifiers-0.2.2.dev42 → verifiers-0.2.2.dev43}/verifiers/v1/utils/logging.py +0 -0
- {verifiers-0.2.2.dev42 → verifiers-0.2.2.dev43}/verifiers/v1/utils/memory.py +0 -0
- {verifiers-0.2.2.dev42 → verifiers-0.2.2.dev43}/verifiers/v1/utils/sampling.py +0 -0
- {verifiers-0.2.2.dev42 → verifiers-0.2.2.dev43}/verifiers/v1/utils/version.py +0 -0
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
Metadata-Version: 2.4
|
|
2
2
|
Name: verifiers
|
|
3
|
-
Version: 0.2.2.
|
|
3
|
+
Version: 0.2.2.dev43
|
|
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
|
|
@@ -180,7 +180,7 @@ def _eval_config(
|
|
|
180
180
|
},
|
|
181
181
|
rich=False,
|
|
182
182
|
output_dir=output_dir,
|
|
183
|
-
**({"pool": pool} if pool else {}),
|
|
183
|
+
**({"serve": {"pool": pool}} if pool else {}),
|
|
184
184
|
**({"model": model} if model else {}),
|
|
185
185
|
)
|
|
186
186
|
|
|
@@ -237,7 +237,7 @@ async def live_ctx():
|
|
|
237
237
|
|
|
238
238
|
@pytest.fixture
|
|
239
239
|
def run_v0():
|
|
240
|
-
"""Run a legacy v0 env through the v1 bridge (the eval CLI's `--id` path)."""
|
|
240
|
+
"""Run a legacy v0 env through the v1 bridge (the eval CLI's `--legacy.id` path)."""
|
|
241
241
|
from verifiers.v1.legacy import run_legacy_eval
|
|
242
242
|
|
|
243
243
|
async def _run(
|
|
@@ -249,8 +249,7 @@ def run_v0():
|
|
|
249
249
|
args: dict | None = None,
|
|
250
250
|
) -> list[Trace]:
|
|
251
251
|
config = EvalConfig(
|
|
252
|
-
id
|
|
253
|
-
args=args or {},
|
|
252
|
+
legacy={"id": env_id, "args": args or {}},
|
|
254
253
|
num_tasks=1,
|
|
255
254
|
num_rollouts=n,
|
|
256
255
|
sampling={"max_tokens": max_tokens, "temperature": 0},
|
|
@@ -14,16 +14,18 @@ from verifiers.v1.clients import (
|
|
|
14
14
|
resolve_client,
|
|
15
15
|
)
|
|
16
16
|
from verifiers.v1.configs.agent import AgentConfig
|
|
17
|
-
from verifiers.v1.configs.cli.env import
|
|
18
|
-
ElasticPoolConfig,
|
|
19
|
-
EnvServerConfig,
|
|
20
|
-
StaticPoolConfig,
|
|
21
|
-
pool_serve_kwargs,
|
|
22
|
-
)
|
|
17
|
+
from verifiers.v1.configs.cli.env import narrowed_env_annotation, resolve_env_field
|
|
23
18
|
from verifiers.v1.configs.env import EnvConfig, default_agent_harness
|
|
24
19
|
from verifiers.v1.configs.harness import HarnessConfig
|
|
25
20
|
from verifiers.v1.configs.judge import JudgeConfig, Judges
|
|
21
|
+
from verifiers.v1.configs.legacy import LegacyEnvConfig
|
|
26
22
|
from verifiers.v1.configs.retries import RetryConfig
|
|
23
|
+
from verifiers.v1.configs.serve import (
|
|
24
|
+
ElasticPoolConfig,
|
|
25
|
+
ServingConfig,
|
|
26
|
+
StaticPoolConfig,
|
|
27
|
+
pool_serve_kwargs,
|
|
28
|
+
)
|
|
27
29
|
from verifiers.v1.configs.task import TaskConfig
|
|
28
30
|
from verifiers.v1.configs.taskset import TasksetConfig
|
|
29
31
|
from verifiers.v1.decorators import metric, reward, stop, tool
|
|
@@ -248,7 +250,10 @@ __all__ = [ # noqa: RUF022 - grouped by public API area
|
|
|
248
250
|
"Env",
|
|
249
251
|
"SingleAgentEnv",
|
|
250
252
|
"EnvConfig",
|
|
251
|
-
"
|
|
253
|
+
"ServingConfig",
|
|
254
|
+
"LegacyEnvConfig",
|
|
255
|
+
"resolve_env_field",
|
|
256
|
+
"narrowed_env_annotation",
|
|
252
257
|
"SingleAgentEnvConfig",
|
|
253
258
|
"AgentConfig",
|
|
254
259
|
"StaticPoolConfig",
|
|
@@ -276,9 +276,9 @@ class Agent:
|
|
|
276
276
|
max_total_tokens=config.max_total_tokens,
|
|
277
277
|
)
|
|
278
278
|
self.timeout = config.timeout
|
|
279
|
-
# Env episode agents replace this with the
|
|
280
|
-
# Interactions acquire it only around active
|
|
281
|
-
# awaiting the caller between segments.
|
|
279
|
+
# Env episode agents replace this with the episode's agent semaphore
|
|
280
|
+
# (`--env.max-concurrent-agents`). Interactions acquire it only around active
|
|
281
|
+
# lifecycle work, never while awaiting the caller between segments.
|
|
282
282
|
self._gate: asyncio.Semaphore | None = None
|
|
283
283
|
# Env-owned standing, not config: `Env.setup` marks fixed agents
|
|
284
284
|
# untrainable and traces are stamped from here; inert outside an env.
|
|
@@ -578,9 +578,9 @@ class _EpisodeAgent(Agent):
|
|
|
578
578
|
bundle of references — expensive resources are env-owned and borrowed, so no
|
|
579
579
|
state spans concurrent episodes): traces get their agent standing the moment
|
|
580
580
|
they're created, finished ones land in `completed` (the episode's traces),
|
|
581
|
-
each run takes the
|
|
582
|
-
its own tasks — on an env-minted task they'd wrongly put MCP
|
|
583
|
-
(`tools=` overrides)."""
|
|
581
|
+
each run takes one of the episode's agent permits. The taskset's shared tool
|
|
582
|
+
servers ride only its own tasks — on an env-minted task they'd wrongly put MCP
|
|
583
|
+
in play (`tools=` overrides)."""
|
|
584
584
|
|
|
585
585
|
def __init__(
|
|
586
586
|
self,
|
|
@@ -664,8 +664,9 @@ class _EpisodeAgent(Agent):
|
|
|
664
664
|
"""The agent's `interaction`, with every trace stamped with its standing
|
|
665
665
|
at mint and captured in `completed` at close — an interaction driven from
|
|
666
666
|
`Env.run` stays crash-safe. Setup, each active segment, and close acquire
|
|
667
|
-
|
|
668
|
-
its caller, so peer interactions
|
|
667
|
+
an agent permit independently; the interaction holds no permit while awaiting
|
|
668
|
+
its caller, so peer interactions still interleave where an episode plays one
|
|
669
|
+
agent at a time."""
|
|
669
670
|
trace: Trace | None = None
|
|
670
671
|
|
|
671
672
|
def remember(current: Trace) -> None:
|
|
@@ -95,7 +95,7 @@ def _limits(config: EvalConfig) -> list[str]:
|
|
|
95
95
|
toks.append(f"{label}≤{v}")
|
|
96
96
|
turns = _seat_value(config, lambda spec: spec.max_turns)
|
|
97
97
|
return [
|
|
98
|
-
f"≤{config.max_concurrent}
|
|
98
|
+
f"≤{config.max_concurrent} episodes"
|
|
99
99
|
if config.max_concurrent
|
|
100
100
|
else "no concurrency cap",
|
|
101
101
|
"per-seat turn caps"
|
|
@@ -24,7 +24,7 @@ from verifiers.v1.utils.logging import setup_logging
|
|
|
24
24
|
logger = logging.getLogger(__name__)
|
|
25
25
|
|
|
26
26
|
USAGE = (
|
|
27
|
-
"usage: uv run eval [<taskset-id>] [--env.id <id>] [--id <env-id> (
|
|
27
|
+
"usage: uv run eval [<taskset-id>] [--env.id <id>] [--legacy.id <env-id> (v0)] [options] [@ file.toml]\n"
|
|
28
28
|
" uv run eval --resume <output-dir> (re-run a previous run's missing/errored rollouts)"
|
|
29
29
|
)
|
|
30
30
|
|
|
@@ -49,12 +49,14 @@ def main(argv: list[str] | None = None) -> None:
|
|
|
49
49
|
)
|
|
50
50
|
config = load_resume_config(resume_dir)
|
|
51
51
|
else:
|
|
52
|
-
legacy_id = any(
|
|
53
|
-
|
|
54
|
-
|
|
55
|
-
#
|
|
52
|
+
legacy_id = any(
|
|
53
|
+
a == "--legacy.id" or a.startswith("--legacy.id=") for a in argv
|
|
54
|
+
)
|
|
55
|
+
# An env-block flag (or a since-moved flat axis) skips the usage gate so the
|
|
56
|
+
# typed parse renders its did-you-mean instead of a bare usage line.
|
|
56
57
|
typed_axis = any(
|
|
57
|
-
a.startswith(("--env.", "--taskset.", "--harness."))
|
|
58
|
+
a.startswith(("--env.", "--taskset.", "--harness.", "--serve."))
|
|
59
|
+
for a in argv
|
|
58
60
|
)
|
|
59
61
|
if (
|
|
60
62
|
not extract_id(argv, "env.taskset")
|
|
@@ -64,7 +66,7 @@ def main(argv: list[str] | None = None) -> None:
|
|
|
64
66
|
):
|
|
65
67
|
raise SystemExit(
|
|
66
68
|
USAGE
|
|
67
|
-
) # need a taskset (positional / --env.taskset.id), a
|
|
69
|
+
) # need a taskset (positional / --env.taskset.id), a v0 --legacy.id, or a @ file.toml
|
|
68
70
|
|
|
69
71
|
with plugin_errors():
|
|
70
72
|
config_type = narrow_config(EvalConfig, argv)
|
|
@@ -107,19 +107,24 @@ async def run_eval_server(config: EvalConfig) -> list[Episode]:
|
|
|
107
107
|
import multiprocessing as mp
|
|
108
108
|
from functools import partial
|
|
109
109
|
|
|
110
|
-
from verifiers.v1.configs.
|
|
110
|
+
from verifiers.v1.configs.serve import pool_serve_kwargs
|
|
111
111
|
from verifiers.v1.serve import EnvClient, env_config_data, serve_env
|
|
112
112
|
from verifiers.v1.utils.logging import setup_logging
|
|
113
113
|
|
|
114
114
|
legacy = config.is_legacy
|
|
115
115
|
server_kwargs = (
|
|
116
116
|
{
|
|
117
|
-
"env_id": config.id,
|
|
118
|
-
"env_args": config.args,
|
|
119
|
-
"extra_env_kwargs": config.extra_env_kwargs,
|
|
117
|
+
"env_id": config.legacy.id,
|
|
118
|
+
"env_args": config.legacy.args,
|
|
119
|
+
"extra_env_kwargs": config.legacy.extra_env_kwargs,
|
|
120
120
|
}
|
|
121
121
|
if legacy
|
|
122
|
-
else {
|
|
122
|
+
else {
|
|
123
|
+
"config_data": env_config_data(config.env), # picklable across the spawn
|
|
124
|
+
# `-c` seeds each worker's episode bound unless `[serve]` pins one — so a
|
|
125
|
+
# pool carries `workers * bound` episodes, as `multiplex` implies.
|
|
126
|
+
"max_concurrent": config.worker_max_concurrent,
|
|
127
|
+
}
|
|
123
128
|
)
|
|
124
129
|
tasks = []
|
|
125
130
|
if not legacy:
|
|
@@ -142,7 +147,7 @@ async def run_eval_server(config: EvalConfig) -> list[Episode]:
|
|
|
142
147
|
proc = mpctx.Process(
|
|
143
148
|
target=serve_env,
|
|
144
149
|
kwargs=dict(
|
|
145
|
-
**pool_serve_kwargs(config.pool),
|
|
150
|
+
**pool_serve_kwargs(config.serve.pool),
|
|
146
151
|
legacy=legacy,
|
|
147
152
|
address="tcp://127.0.0.1:0",
|
|
148
153
|
address_queue=address_queue,
|
|
@@ -210,7 +215,7 @@ async def run_eval_server(config: EvalConfig) -> list[Episode]:
|
|
|
210
215
|
"running %dx%d rollouts via the env-server %s pool on %s",
|
|
211
216
|
len(plan),
|
|
212
217
|
config.num_rollouts,
|
|
213
|
-
config.pool.type,
|
|
218
|
+
config.serve.pool.type,
|
|
214
219
|
config.model,
|
|
215
220
|
)
|
|
216
221
|
logger.info("results: %s", out)
|
|
@@ -12,12 +12,12 @@ from verifiers.v1.cli.resolve import (
|
|
|
12
12
|
references_config_file,
|
|
13
13
|
with_positional_taskset,
|
|
14
14
|
)
|
|
15
|
-
from verifiers.v1.configs.cli.env import pool_serve_kwargs
|
|
16
15
|
from verifiers.v1.configs.cli.serve import ServeConfig
|
|
16
|
+
from verifiers.v1.configs.serve import pool_serve_kwargs
|
|
17
17
|
from verifiers.v1.serve import serve_env
|
|
18
18
|
from verifiers.v1.utils.logging import setup_logging
|
|
19
19
|
|
|
20
|
-
USAGE = "usage: uv run serve [<taskset-id>] [--env.id <id>] [--id <env-id> (
|
|
20
|
+
USAGE = "usage: uv run serve [<taskset-id>] [--env.id <id>] [--legacy.id <env-id> (v0)] [options] [@ file.toml]"
|
|
21
21
|
|
|
22
22
|
|
|
23
23
|
def main(argv: list[str] | None = None) -> None:
|
|
@@ -29,11 +29,12 @@ def main(argv: list[str] | None = None) -> None:
|
|
|
29
29
|
with plugin_errors():
|
|
30
30
|
cli(narrow_config(ServeConfig, argv))
|
|
31
31
|
return
|
|
32
|
-
legacy_id = any(a == "--id" or a.startswith("--id=") for a in argv)
|
|
33
|
-
# An env-block flag (or a
|
|
34
|
-
# parse renders its did-you-mean
|
|
35
|
-
|
|
36
|
-
|
|
32
|
+
legacy_id = any(a == "--legacy.id" or a.startswith("--legacy.id=") for a in argv)
|
|
33
|
+
# An env-block flag (or a since-moved flat axis) skips the usage gate so the typed
|
|
34
|
+
# parse renders its did-you-mean instead of a bare usage line.
|
|
35
|
+
typed_axis = any(
|
|
36
|
+
a.startswith(("--env.", "--taskset.", "--harness.", "--serve.")) for a in argv
|
|
37
|
+
)
|
|
37
38
|
if (
|
|
38
39
|
not extract_id(argv, "env.taskset")
|
|
39
40
|
and not legacy_id
|
|
@@ -42,7 +43,7 @@ def main(argv: list[str] | None = None) -> None:
|
|
|
42
43
|
):
|
|
43
44
|
raise SystemExit(
|
|
44
45
|
USAGE
|
|
45
|
-
) # need a taskset (positional / --env.taskset.id), a
|
|
46
|
+
) # need a taskset (positional / --env.taskset.id), a v0 --legacy.id, or @ file.toml
|
|
46
47
|
|
|
47
48
|
with plugin_errors():
|
|
48
49
|
config_type = narrow_config(ServeConfig, argv)
|
|
@@ -60,17 +61,19 @@ def main(argv: list[str] | None = None) -> None:
|
|
|
60
61
|
# in each one.
|
|
61
62
|
server_kwargs = (
|
|
62
63
|
{
|
|
63
|
-
"env_id": config.id,
|
|
64
|
-
"env_args": config.args,
|
|
65
|
-
"extra_env_kwargs": config.extra_env_kwargs,
|
|
64
|
+
"env_id": config.legacy.id,
|
|
65
|
+
"env_args": config.legacy.args,
|
|
66
|
+
"extra_env_kwargs": config.legacy.extra_env_kwargs,
|
|
66
67
|
}
|
|
67
68
|
if config.is_legacy
|
|
68
|
-
|
|
69
|
+
# `--serve.max-concurrent` is each v1 worker's episode bound; the legacy
|
|
70
|
+
# bridge has never had one.
|
|
71
|
+
else {"config": config.env, "max_concurrent": config.serve.max_concurrent}
|
|
69
72
|
)
|
|
70
73
|
serve_env(
|
|
71
|
-
**pool_serve_kwargs(config.pool),
|
|
74
|
+
**pool_serve_kwargs(config.serve.pool),
|
|
72
75
|
legacy=config.is_legacy,
|
|
73
|
-
address=config.address,
|
|
76
|
+
address=config.serve.address,
|
|
74
77
|
log_setup=partial(setup_logging, level),
|
|
75
78
|
**server_kwargs,
|
|
76
79
|
)
|
|
@@ -0,0 +1,60 @@
|
|
|
1
|
+
"""Run-config plumbing around the `[env]` block: narrowing the `env` field of every
|
|
2
|
+
config that owns one, and the retired keys such a config refuses.
|
|
3
|
+
|
|
4
|
+
A run composes the blocks it needs — `[env]` (what runs, `configs/env.py`),
|
|
5
|
+
`[serve]` (how it's hosted, `configs/serve.py`), `[legacy]` (the v0 bridge,
|
|
6
|
+
`configs/legacy.py`) — plus its own fields. Nothing here is a base class: the eval
|
|
7
|
+
CLI, the `serve` CLI, GEPA and a trainer each declare their blocks and call these.
|
|
8
|
+
|
|
9
|
+
Declare the env field as `SerializeAsAny[EnvConfig] = Field(default_factory=
|
|
10
|
+
single_agent_env_config)`. The `SerializeAsAny` is load-bearing: pydantic serializes
|
|
11
|
+
by declared type, so a plain `EnvConfig` silently drops a narrowed subclass's agents
|
|
12
|
+
and knobs from `model_dump()` — the env-server wire's payload."""
|
|
13
|
+
|
|
14
|
+
from pydantic import ValidationError
|
|
15
|
+
from pydantic_config import BaseConfig
|
|
16
|
+
|
|
17
|
+
from verifiers.v1.configs.env import EnvConfig
|
|
18
|
+
from verifiers.v1.utils.generic import prefix_validation_error
|
|
19
|
+
|
|
20
|
+
|
|
21
|
+
def resolve_env_field(data: dict, narrowed: "type[EnvConfig] | None" = None) -> dict:
|
|
22
|
+
"""Shared `mode="before"` body for every run config owning an `env` field: narrow
|
|
23
|
+
`env` to the concrete env's config class. `narrowed` is the annotation the CLI
|
|
24
|
+
pre-resolved (`narrow_config`) — its id is authoritative, so validate against it
|
|
25
|
+
directly."""
|
|
26
|
+
if not isinstance(data, dict):
|
|
27
|
+
return data
|
|
28
|
+
raw = data.get("env")
|
|
29
|
+
if raw is None:
|
|
30
|
+
return data
|
|
31
|
+
try:
|
|
32
|
+
if narrowed is not None:
|
|
33
|
+
if not isinstance(raw, narrowed):
|
|
34
|
+
data["env"] = narrowed.model_validate(
|
|
35
|
+
raw.model_dump() if isinstance(raw, BaseConfig) else raw
|
|
36
|
+
)
|
|
37
|
+
return data
|
|
38
|
+
from verifiers.v1.loaders import resolve_env_config
|
|
39
|
+
|
|
40
|
+
data["env"] = resolve_env_config(raw)
|
|
41
|
+
except ValidationError as e:
|
|
42
|
+
# Validating here (inside the owner's mode="before" validator) would
|
|
43
|
+
# surface the errors without their `env` segment — the CLI would render
|
|
44
|
+
# `--agent.model` for the `--env.agent.model` the user typed.
|
|
45
|
+
raise prefix_validation_error(e, ("env",)) from None
|
|
46
|
+
return data
|
|
47
|
+
|
|
48
|
+
|
|
49
|
+
def narrowed_env_annotation(cls) -> "type[EnvConfig] | None":
|
|
50
|
+
"""The env field's annotation when the CLI pre-narrowed it (`narrow_config`
|
|
51
|
+
swaps in a concrete subclass). The base declaration reads as `EnvConfig` itself
|
|
52
|
+
(SerializeAsAny unwraps), so only a proper subclass counts."""
|
|
53
|
+
annotation = cls.model_fields["env"].annotation
|
|
54
|
+
if (
|
|
55
|
+
isinstance(annotation, type)
|
|
56
|
+
and issubclass(annotation, EnvConfig)
|
|
57
|
+
and annotation is not EnvConfig
|
|
58
|
+
):
|
|
59
|
+
return annotation
|
|
60
|
+
return None
|
|
@@ -3,14 +3,27 @@
|
|
|
3
3
|
from pathlib import Path
|
|
4
4
|
from uuid import uuid4
|
|
5
5
|
|
|
6
|
-
from pydantic import AliasChoices, Field, model_validator
|
|
6
|
+
from pydantic import AliasChoices, Field, SerializeAsAny, model_validator
|
|
7
|
+
from pydantic_config import BaseConfig
|
|
7
8
|
|
|
8
9
|
from verifiers.v1.clients import ClientConfig, EvalClientConfig
|
|
9
|
-
from verifiers.v1.configs.cli.env import
|
|
10
|
+
from verifiers.v1.configs.cli.env import narrowed_env_annotation, resolve_env_field
|
|
11
|
+
from verifiers.v1.configs.env import EnvConfig
|
|
12
|
+
from verifiers.v1.configs.legacy import LegacyEnvConfig
|
|
13
|
+
from verifiers.v1.configs.serve import ServingConfig
|
|
14
|
+
from verifiers.v1.envs.single_agent import SingleAgentEnvConfig
|
|
10
15
|
from verifiers.v1.types import SamplingConfig
|
|
11
16
|
|
|
12
17
|
|
|
13
|
-
class EvalConfig(
|
|
18
|
+
class EvalConfig(BaseConfig):
|
|
19
|
+
env: SerializeAsAny[EnvConfig] = SingleAgentEnvConfig()
|
|
20
|
+
"""The environment — which env, its seed taskset, each agent, its knobs. Narrowed to
|
|
21
|
+
the selected env's config class by the env id, else the taskset id."""
|
|
22
|
+
serve: ServingConfig = ServingConfig()
|
|
23
|
+
"""How the env is hosted under `--server`: the worker pool, each worker's episode
|
|
24
|
+
bound. Ignored by an in-process run."""
|
|
25
|
+
legacy: LegacyEnvConfig = LegacyEnvConfig()
|
|
26
|
+
"""A classic (v0) environment to evaluate through the bridge instead of `[env]`."""
|
|
14
27
|
uuid: str = Field(default_factory=lambda: str(uuid4()), exclude=True)
|
|
15
28
|
"""Auto-generated run id — the leaf of the output dir, so runs never overwrite.
|
|
16
29
|
Excluded from the saved config so re-running `@ config.toml` lands in a fresh dir."""
|
|
@@ -37,9 +50,12 @@ class EvalConfig(EnvServerConfig):
|
|
|
37
50
|
shuffle: bool = Field(False, validation_alias=AliasChoices("shuffle", "s"))
|
|
38
51
|
"""Shuffle tasks before taking the first `num_tasks`."""
|
|
39
52
|
max_concurrent: int | None = Field(
|
|
40
|
-
128, validation_alias=AliasChoices("max_concurrent", "c")
|
|
53
|
+
128, ge=1, validation_alias=AliasChoices("max_concurrent", "c")
|
|
41
54
|
)
|
|
42
|
-
"""
|
|
55
|
+
"""Episodes in flight at once, `None` for no limit. An episode plays its agents one
|
|
56
|
+
at a time, so this is the live agent runs too — until `--env.max-concurrent-agents`
|
|
57
|
+
says otherwise. Under `--server` it seeds each worker's bound, unless
|
|
58
|
+
`--serve.max-concurrent` pins one."""
|
|
43
59
|
verbose: bool = Field(False, validation_alias=AliasChoices("verbose", "v"))
|
|
44
60
|
"""Log at debug level instead of the default info."""
|
|
45
61
|
dry_run: bool = Field(False, exclude=True)
|
|
@@ -49,7 +65,7 @@ class EvalConfig(EnvServerConfig):
|
|
|
49
65
|
"""Show a live dashboard instead of per-rollout logs (in-process only; an unset
|
|
50
66
|
`rich` defaults off under `--server`)."""
|
|
51
67
|
server: bool = False
|
|
52
|
-
"""Drive rollouts through the env-server worker pool (sized by
|
|
68
|
+
"""Drive rollouts through the env-server worker pool (sized by `[serve]`) instead of
|
|
53
69
|
in-process — the path prime-rl trains through. Incompatible with `--rich`."""
|
|
54
70
|
push: bool = True
|
|
55
71
|
"""Upload the finished run to the Prime Intellect platform (the private Evaluations
|
|
@@ -80,3 +96,47 @@ class EvalConfig(EnvServerConfig):
|
|
|
80
96
|
"`--server`; drop `--rich`."
|
|
81
97
|
)
|
|
82
98
|
return self
|
|
99
|
+
|
|
100
|
+
@property
|
|
101
|
+
def is_legacy(self) -> bool:
|
|
102
|
+
"""Whether this run goes through the v0 bridge: a legacy id and no v1 taskset."""
|
|
103
|
+
return self.legacy.id is not None and not self.env.taskset.id
|
|
104
|
+
|
|
105
|
+
@property
|
|
106
|
+
def env_id(self) -> str:
|
|
107
|
+
"""The run's identifier: the v1 env's, else the v0 env id."""
|
|
108
|
+
return self.env.env_id or self.legacy.id or ""
|
|
109
|
+
|
|
110
|
+
@property
|
|
111
|
+
def worker_max_concurrent(self) -> int | None:
|
|
112
|
+
"""A served worker's episode bound: its own pin, else the run's `--max-concurrent`."""
|
|
113
|
+
return (
|
|
114
|
+
self.serve.max_concurrent
|
|
115
|
+
if self.serve.max_concurrent is not None
|
|
116
|
+
else self.max_concurrent
|
|
117
|
+
)
|
|
118
|
+
|
|
119
|
+
@model_validator(mode="after")
|
|
120
|
+
def _refuse_mixed_run(self):
|
|
121
|
+
# A v0 id next to any v1 env identity leaves one of the two going nowhere, and
|
|
122
|
+
# which one depends on `is_legacy`: a taskset makes it False, so the v0 env never
|
|
123
|
+
# loads; a bare `--env.id` leaves it True, so the v0 env runs under the v1 name.
|
|
124
|
+
if self.legacy.id is None or not self.env.env_id:
|
|
125
|
+
return self
|
|
126
|
+
if self.env.taskset.id:
|
|
127
|
+
raise ValueError(
|
|
128
|
+
f"--legacy.id {self.legacy.id!r} is a classic (v0) env and can't combine "
|
|
129
|
+
f"with the v1 taskset {self.env.taskset.id!r}. Pairing a reusable env with "
|
|
130
|
+
f"a taskset is --env.id {self.legacy.id!r} (TOML: id under [env]); to run "
|
|
131
|
+
"the v0 env instead, drop the taskset."
|
|
132
|
+
)
|
|
133
|
+
raise ValueError(
|
|
134
|
+
f"--legacy.id {self.legacy.id!r} is a classic (v0) env and can't combine with "
|
|
135
|
+
f"the v1 env --env.id {self.env.id!r}: the v0 env is what would run, stamped "
|
|
136
|
+
"with the v1 env's name. Keep whichever one you meant to run."
|
|
137
|
+
)
|
|
138
|
+
|
|
139
|
+
@model_validator(mode="before")
|
|
140
|
+
@classmethod
|
|
141
|
+
def _resolve_env(cls, data):
|
|
142
|
+
return resolve_env_field(data, narrowed_env_annotation(cls))
|
|
@@ -0,0 +1,62 @@
|
|
|
1
|
+
"""Environment-server CLI configuration."""
|
|
2
|
+
|
|
3
|
+
from pydantic import AliasChoices, Field, SerializeAsAny, model_validator
|
|
4
|
+
from pydantic_config import BaseConfig
|
|
5
|
+
|
|
6
|
+
from verifiers.v1.configs.cli.env import narrowed_env_annotation, resolve_env_field
|
|
7
|
+
from verifiers.v1.configs.env import EnvConfig
|
|
8
|
+
from verifiers.v1.configs.legacy import LegacyEnvConfig
|
|
9
|
+
from verifiers.v1.configs.serve import ServingConfig
|
|
10
|
+
from verifiers.v1.envs.single_agent import SingleAgentEnvConfig
|
|
11
|
+
|
|
12
|
+
|
|
13
|
+
class ServeConfig(BaseConfig):
|
|
14
|
+
"""`uv run serve`: what to serve (`[env]`, or `[legacy]` for a classic v0 env) and
|
|
15
|
+
how it's hosted (`[serve]`)."""
|
|
16
|
+
|
|
17
|
+
env: SerializeAsAny[EnvConfig] = SingleAgentEnvConfig()
|
|
18
|
+
"""The environment — which env, its seed taskset, each agent, its knobs. Narrowed to
|
|
19
|
+
the selected env's config class by the env id, else the taskset id."""
|
|
20
|
+
serve: ServingConfig = ServingConfig()
|
|
21
|
+
"""How it's served: the worker pool, the bind address, each worker's episode bound."""
|
|
22
|
+
legacy: LegacyEnvConfig = LegacyEnvConfig()
|
|
23
|
+
"""A classic (v0) environment to serve through the bridge instead of `[env]`."""
|
|
24
|
+
verbose: bool = Field(False, validation_alias=AliasChoices("verbose", "v"))
|
|
25
|
+
"""Log at debug level instead of info."""
|
|
26
|
+
dry_run: bool = False
|
|
27
|
+
"""Resolve + validate the config and dump it, then exit."""
|
|
28
|
+
|
|
29
|
+
@property
|
|
30
|
+
def is_legacy(self) -> bool:
|
|
31
|
+
"""Whether this run goes through the v0 bridge: a legacy id and no v1 taskset."""
|
|
32
|
+
return self.legacy.id is not None and not self.env.taskset.id
|
|
33
|
+
|
|
34
|
+
@property
|
|
35
|
+
def env_id(self) -> str:
|
|
36
|
+
"""The run's identifier: the v1 env's, else the v0 env id."""
|
|
37
|
+
return self.env.env_id or self.legacy.id or ""
|
|
38
|
+
|
|
39
|
+
@model_validator(mode="after")
|
|
40
|
+
def _refuse_mixed_run(self):
|
|
41
|
+
# A v0 id next to any v1 env identity leaves one of the two going nowhere, and
|
|
42
|
+
# which one depends on `is_legacy`: a taskset makes it False, so the v0 env never
|
|
43
|
+
# loads; a bare `--env.id` leaves it True, so the v0 env runs under the v1 name.
|
|
44
|
+
if self.legacy.id is None or not self.env.env_id:
|
|
45
|
+
return self
|
|
46
|
+
if self.env.taskset.id:
|
|
47
|
+
raise ValueError(
|
|
48
|
+
f"--legacy.id {self.legacy.id!r} is a classic (v0) env and can't combine "
|
|
49
|
+
f"with the v1 taskset {self.env.taskset.id!r}. Pairing a reusable env with "
|
|
50
|
+
f"a taskset is --env.id {self.legacy.id!r} (TOML: id under [env]); to run "
|
|
51
|
+
"the v0 env instead, drop the taskset."
|
|
52
|
+
)
|
|
53
|
+
raise ValueError(
|
|
54
|
+
f"--legacy.id {self.legacy.id!r} is a classic (v0) env and can't combine with "
|
|
55
|
+
f"the v1 env --env.id {self.env.id!r}: the v0 env is what would run, stamped "
|
|
56
|
+
"with the v1 env's name. Keep whichever one you meant to run."
|
|
57
|
+
)
|
|
58
|
+
|
|
59
|
+
@model_validator(mode="before")
|
|
60
|
+
@classmethod
|
|
61
|
+
def _resolve_env(cls, data):
|
|
62
|
+
return resolve_env_field(data, narrowed_env_annotation(cls))
|
|
@@ -3,7 +3,7 @@ each role as an `AgentConfig` field, and the env-level knobs."""
|
|
|
3
3
|
|
|
4
4
|
from typing import get_args
|
|
5
5
|
|
|
6
|
-
from pydantic import SerializeAsAny, model_validator
|
|
6
|
+
from pydantic import Field, SerializeAsAny, model_validator
|
|
7
7
|
from pydantic_config import BaseConfig
|
|
8
8
|
|
|
9
9
|
from verifiers.v1.configs.agent import AgentConfig
|
|
@@ -48,9 +48,16 @@ class EnvConfig(BaseConfig):
|
|
|
48
48
|
retries: RetryConfig = RetryConfig()
|
|
49
49
|
"""Whole-EPISODE retries — the coarse fallback for faults no agent owns; a
|
|
50
50
|
retried episode reruns whole (a half-played sibling context isn't reproducible)."""
|
|
51
|
-
|
|
52
|
-
"""
|
|
53
|
-
|
|
51
|
+
max_concurrent_agents: int | None = Field(1, ge=1)
|
|
52
|
+
"""How many of ONE episode's agent runs may be active at once (None = no limit).
|
|
53
|
+
One at a time by default, so the bound above — `--max-concurrent` episodes, a
|
|
54
|
+
dispatched training episode — is also one live agent run, whatever `run()` fans
|
|
55
|
+
out to internally. Raise it where per-episode latency matters and the
|
|
56
|
+
multiplication is wanted: `--env.max-concurrent-agents None` plays an episode's
|
|
57
|
+
`best-of-n` attempts together, so `-c` episodes carry `-c * n` live runs. Not
|
|
58
|
+
spelled `max_concurrent`: that key used to bound a served worker's agent runs
|
|
59
|
+
across episodes, and taking it as this one silently multiplies it by the episodes
|
|
60
|
+
in flight."""
|
|
54
61
|
interception: InterceptionConfig = ElasticInterceptionPoolConfig()
|
|
55
62
|
"""The interception shape: `elastic` (default), `server`, or `static`."""
|
|
56
63
|
|
|
@@ -0,0 +1,24 @@
|
|
|
1
|
+
"""The `[legacy]` block: running a classic (v0) environment through the bridge.
|
|
2
|
+
|
|
3
|
+
Quarantined in its own block, not mixed into `[env]` — a v0 env is a different
|
|
4
|
+
thing to run, not a variant of a v1 env's config."""
|
|
5
|
+
|
|
6
|
+
from pydantic import Field
|
|
7
|
+
from pydantic_config import BaseConfig
|
|
8
|
+
|
|
9
|
+
from verifiers.v1.types import ID
|
|
10
|
+
|
|
11
|
+
|
|
12
|
+
class LegacyEnvConfig(BaseConfig):
|
|
13
|
+
"""A classic (v0) `verifiers` environment, loaded via `verifiers.load_environment`
|
|
14
|
+
and run through the legacy bridge. Set `id` *instead of* a v1 `env.taskset`."""
|
|
15
|
+
|
|
16
|
+
id: ID | None = None
|
|
17
|
+
"""v0 env id: `name`, `org/name`, or `org/name@version` — installed from the hub on
|
|
18
|
+
demand."""
|
|
19
|
+
args: dict = Field(default_factory=dict)
|
|
20
|
+
"""Construction kwargs forwarded to `load_environment(id, **args)`."""
|
|
21
|
+
extra_env_kwargs: dict = Field(default_factory=dict)
|
|
22
|
+
"""Post-load kwargs applied via `env.set_kwargs(**extra_env_kwargs)` (e.g.
|
|
23
|
+
`max_total_completion_tokens`, `max_seq_len`, `timeout_seconds`) — typically
|
|
24
|
+
auto-populated by a trainer, distinct from the `args` passed at construction."""
|
|
@@ -0,0 +1,63 @@
|
|
|
1
|
+
"""How an env is served: the worker pool, where it binds, and each worker's bound.
|
|
2
|
+
|
|
3
|
+
Serving is its own axis. `[env]` says what runs; this says how it's hosted, so an
|
|
4
|
+
eval, a `serve` process, and a trainer configure it identically instead of each
|
|
5
|
+
flattening pool knobs onto its own config."""
|
|
6
|
+
|
|
7
|
+
from typing import Annotated, Literal
|
|
8
|
+
|
|
9
|
+
from pydantic import Field
|
|
10
|
+
from pydantic_config import BaseConfig
|
|
11
|
+
|
|
12
|
+
|
|
13
|
+
class StaticPoolConfig(BaseConfig):
|
|
14
|
+
"""Fixed env-server pool: pre-spawn `num_workers` workers up front."""
|
|
15
|
+
|
|
16
|
+
type: Literal["static"] = "static"
|
|
17
|
+
num_workers: int = Field(4, ge=1)
|
|
18
|
+
"""Worker processes to pre-spawn (1 = a single in-process server, no pool)."""
|
|
19
|
+
|
|
20
|
+
|
|
21
|
+
class ElasticPoolConfig(BaseConfig):
|
|
22
|
+
"""Elastic env-server pool: start at one worker and scale up on demand."""
|
|
23
|
+
|
|
24
|
+
type: Literal["elastic"] = "elastic"
|
|
25
|
+
max_workers: int | None = None
|
|
26
|
+
"""Upper bound on workers (None = unbounded)."""
|
|
27
|
+
multiplex: int = Field(128, ge=1)
|
|
28
|
+
"""Episodes per worker for the scale-up trigger: add a worker once in-flight episodes
|
|
29
|
+
reach 90% of `workers * multiplex`."""
|
|
30
|
+
|
|
31
|
+
|
|
32
|
+
# Discriminated on `type` so the CLI selects with `--serve.pool.type static|elastic`.
|
|
33
|
+
PoolConfig = Annotated[
|
|
34
|
+
StaticPoolConfig | ElasticPoolConfig, Field(discriminator="type")
|
|
35
|
+
]
|
|
36
|
+
|
|
37
|
+
|
|
38
|
+
class ServingConfig(BaseConfig):
|
|
39
|
+
"""The `[serve]` block: the worker pool, the ZMQ address, and each worker's
|
|
40
|
+
episode bound. Read by whoever hosts the env — the `serve` CLI, a server-backed
|
|
41
|
+
eval, a trainer's orchestrator."""
|
|
42
|
+
|
|
43
|
+
pool: PoolConfig = Field(default_factory=ElasticPoolConfig)
|
|
44
|
+
"""Worker-pool sizing. `elastic` (default) starts at one worker and scales up on
|
|
45
|
+
demand; `static` pre-spawns a fixed `num_workers`."""
|
|
46
|
+
address: str = "tcp://127.0.0.1:5000"
|
|
47
|
+
"""ZMQ address the ROUTER binds (and clients connect to)."""
|
|
48
|
+
max_concurrent: int | None = Field(None, ge=1)
|
|
49
|
+
"""Episodes in flight per worker (None = take the run's own bound, e.g. an eval's
|
|
50
|
+
`--max-concurrent`). Pin it to hold a worker below what the run asks for; how many
|
|
51
|
+
agent runs one episode carries is the env's own
|
|
52
|
+
(`--env.max-concurrent-agents`, one at a time by default)."""
|
|
53
|
+
|
|
54
|
+
|
|
55
|
+
def pool_serve_kwargs(pool: StaticPoolConfig | ElasticPoolConfig) -> dict:
|
|
56
|
+
"""Unpack a pool config into `serve_env` kwargs (`max_workers` / `multiplex` / `elastic`)."""
|
|
57
|
+
if isinstance(pool, ElasticPoolConfig):
|
|
58
|
+
return {
|
|
59
|
+
"max_workers": pool.max_workers,
|
|
60
|
+
"multiplex": pool.multiplex,
|
|
61
|
+
"elastic": True,
|
|
62
|
+
}
|
|
63
|
+
return {"max_workers": pool.num_workers, "elastic": False}
|