verifiers 0.1.15.dev422__tar.gz → 0.1.15.dev423__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.1.15.dev422 → verifiers-0.1.15.dev423}/PKG-INFO +1 -1
- {verifiers-0.1.15.dev422 → verifiers-0.1.15.dev423}/pyproject.toml +1 -0
- {verifiers-0.1.15.dev422 → verifiers-0.1.15.dev423}/tests/test_sandbox_debug_env.py +2 -1
- {verifiers-0.1.15.dev422 → verifiers-0.1.15.dev423}/verifiers/envs/experimental/composable/sandbox_debug_env.py +10 -1
- {verifiers-0.1.15.dev422 → verifiers-0.1.15.dev423}/verifiers/envs/experimental/composable/swe_debug_env.py +5 -2
- {verifiers-0.1.15.dev422 → verifiers-0.1.15.dev423}/verifiers/v1/GUIDE.md +35 -6
- {verifiers-0.1.15.dev422 → verifiers-0.1.15.dev423}/verifiers/v1/README.md +2 -1
- verifiers-0.1.15.dev423/verifiers/v1/cli/debug.py +327 -0
- {verifiers-0.1.15.dev422 → verifiers-0.1.15.dev423}/verifiers/v1/cli/output.py +7 -10
- {verifiers-0.1.15.dev422 → verifiers-0.1.15.dev423}/verifiers/v1/cli/validate.py +111 -19
- {verifiers-0.1.15.dev422 → verifiers-0.1.15.dev423}/verifiers/v1/configs/__init__.py +2 -1
- verifiers-0.1.15.dev423/verifiers/v1/configs/debug.py +72 -0
- {verifiers-0.1.15.dev422 → verifiers-0.1.15.dev423}/verifiers/v1/configs/validate.py +26 -4
- {verifiers-0.1.15.dev422 → verifiers-0.1.15.dev423}/verifiers/v1/runtimes/base.py +23 -17
- {verifiers-0.1.15.dev422 → verifiers-0.1.15.dev423}/verifiers/v1/runtimes/modal.py +8 -4
- {verifiers-0.1.15.dev422 → verifiers-0.1.15.dev423}/verifiers/v1/runtimes/prime.py +3 -3
- verifiers-0.1.15.dev423/verifiers/v1/utils/aio.py +31 -0
- {verifiers-0.1.15.dev422 → verifiers-0.1.15.dev423}/.gitignore +0 -0
- {verifiers-0.1.15.dev422 → verifiers-0.1.15.dev423}/LICENSE +0 -0
- {verifiers-0.1.15.dev422 → verifiers-0.1.15.dev423}/README.md +0 -0
- {verifiers-0.1.15.dev422 → verifiers-0.1.15.dev423}/tests/AGENTS.md +0 -0
- {verifiers-0.1.15.dev422 → verifiers-0.1.15.dev423}/tests/README.md +0 -0
- {verifiers-0.1.15.dev422 → verifiers-0.1.15.dev423}/tests/__init__.py +0 -0
- {verifiers-0.1.15.dev422 → verifiers-0.1.15.dev423}/tests/conftest.py +0 -0
- {verifiers-0.1.15.dev422 → verifiers-0.1.15.dev423}/tests/test_browser_env.py +0 -0
- {verifiers-0.1.15.dev422 → verifiers-0.1.15.dev423}/tests/test_build_script.py +0 -0
- {verifiers-0.1.15.dev422 → verifiers-0.1.15.dev423}/tests/test_cli_agent_env.py +0 -0
- {verifiers-0.1.15.dev422 → verifiers-0.1.15.dev423}/tests/test_client_auth_errors.py +0 -0
- {verifiers-0.1.15.dev422 → verifiers-0.1.15.dev423}/tests/test_client_config.py +0 -0
- {verifiers-0.1.15.dev422 → verifiers-0.1.15.dev423}/tests/test_client_multimodal_types.py +0 -0
- {verifiers-0.1.15.dev422 → verifiers-0.1.15.dev423}/tests/test_composable_env.py +0 -0
- {verifiers-0.1.15.dev422 → verifiers-0.1.15.dev423}/tests/test_context_token_metrics.py +0 -0
- {verifiers-0.1.15.dev422 → verifiers-0.1.15.dev423}/tests/test_decorator_ranks.py +0 -0
- {verifiers-0.1.15.dev422 → verifiers-0.1.15.dev423}/tests/test_endpoint_registry.py +0 -0
- {verifiers-0.1.15.dev422 → verifiers-0.1.15.dev423}/tests/test_env_group.py +0 -0
- {verifiers-0.1.15.dev422 → verifiers-0.1.15.dev423}/tests/test_env_server.py +0 -0
- {verifiers-0.1.15.dev422 → verifiers-0.1.15.dev423}/tests/test_environment.py +0 -0
- {verifiers-0.1.15.dev422 → verifiers-0.1.15.dev423}/tests/test_environment_extra.py +0 -0
- {verifiers-0.1.15.dev422 → verifiers-0.1.15.dev423}/tests/test_envs.py +0 -0
- {verifiers-0.1.15.dev422 → verifiers-0.1.15.dev423}/tests/test_error_chain.py +0 -0
- {verifiers-0.1.15.dev422 → verifiers-0.1.15.dev423}/tests/test_eval_display.py +0 -0
- {verifiers-0.1.15.dev422 → verifiers-0.1.15.dev423}/tests/test_eval_utils.py +0 -0
- {verifiers-0.1.15.dev422 → verifiers-0.1.15.dev423}/tests/test_gepa_cli.py +0 -0
- {verifiers-0.1.15.dev422 → verifiers-0.1.15.dev423}/tests/test_gepa_utils.py +0 -0
- {verifiers-0.1.15.dev422 → verifiers-0.1.15.dev423}/tests/test_gym_env.py +0 -0
- {verifiers-0.1.15.dev422 → verifiers-0.1.15.dev423}/tests/test_harbor_env_mcp.py +0 -0
- {verifiers-0.1.15.dev422 → verifiers-0.1.15.dev423}/tests/test_imports.py +0 -0
- {verifiers-0.1.15.dev422 → verifiers-0.1.15.dev423}/tests/test_init_script.py +0 -0
- {verifiers-0.1.15.dev422 → verifiers-0.1.15.dev423}/tests/test_install_utils.py +0 -0
- {verifiers-0.1.15.dev422 → verifiers-0.1.15.dev423}/tests/test_interception_utils.py +0 -0
- {verifiers-0.1.15.dev422 → verifiers-0.1.15.dev423}/tests/test_logging.py +0 -0
- {verifiers-0.1.15.dev422 → verifiers-0.1.15.dev423}/tests/test_math_rubric.py +0 -0
- {verifiers-0.1.15.dev422 → verifiers-0.1.15.dev423}/tests/test_maybe_think_parser.py +0 -0
- {verifiers-0.1.15.dev422 → verifiers-0.1.15.dev423}/tests/test_message_utils.py +0 -0
- {verifiers-0.1.15.dev422 → verifiers-0.1.15.dev423}/tests/test_message_utils_multimodal.py +0 -0
- {verifiers-0.1.15.dev422 → verifiers-0.1.15.dev423}/tests/test_multiturn_env.py +0 -0
- {verifiers-0.1.15.dev422 → verifiers-0.1.15.dev423}/tests/test_nemorl_client.py +0 -0
- {verifiers-0.1.15.dev422 → verifiers-0.1.15.dev423}/tests/test_openai_chat_completions_token_client.py +0 -0
- {verifiers-0.1.15.dev422 → verifiers-0.1.15.dev423}/tests/test_openai_responses_client.py +0 -0
- {verifiers-0.1.15.dev422 → verifiers-0.1.15.dev423}/tests/test_opencode_rlm_env.py +0 -0
- {verifiers-0.1.15.dev422 → verifiers-0.1.15.dev423}/tests/test_openenv_client.py +0 -0
- {verifiers-0.1.15.dev422 → verifiers-0.1.15.dev423}/tests/test_parser.py +0 -0
- {verifiers-0.1.15.dev422 → verifiers-0.1.15.dev423}/tests/test_path_utils.py +0 -0
- {verifiers-0.1.15.dev422 → verifiers-0.1.15.dev423}/tests/test_per_turn_timing.py +0 -0
- {verifiers-0.1.15.dev422 → verifiers-0.1.15.dev423}/tests/test_pricing_utils.py +0 -0
- {verifiers-0.1.15.dev422 → verifiers-0.1.15.dev423}/tests/test_prime_plugin.py +0 -0
- {verifiers-0.1.15.dev422 → verifiers-0.1.15.dev423}/tests/test_renderer_client.py +0 -0
- {verifiers-0.1.15.dev422 → verifiers-0.1.15.dev423}/tests/test_renderer_e2e.py +0 -0
- {verifiers-0.1.15.dev422 → verifiers-0.1.15.dev423}/tests/test_rlm_composable_env.py +0 -0
- {verifiers-0.1.15.dev422 → verifiers-0.1.15.dev423}/tests/test_rubric.py +0 -0
- {verifiers-0.1.15.dev422 → verifiers-0.1.15.dev423}/tests/test_rubric_group.py +0 -0
- {verifiers-0.1.15.dev422 → verifiers-0.1.15.dev423}/tests/test_sandbox_env.py +0 -0
- {verifiers-0.1.15.dev422 → verifiers-0.1.15.dev423}/tests/test_sandbox_mixin.py +0 -0
- {verifiers-0.1.15.dev422 → verifiers-0.1.15.dev423}/tests/test_save_utils.py +0 -0
- {verifiers-0.1.15.dev422 → verifiers-0.1.15.dev423}/tests/test_setup_script.py +0 -0
- {verifiers-0.1.15.dev422 → verifiers-0.1.15.dev423}/tests/test_singleturn_env.py +0 -0
- {verifiers-0.1.15.dev422 → verifiers-0.1.15.dev423}/tests/test_stateful_tool_env.py +0 -0
- {verifiers-0.1.15.dev422 → verifiers-0.1.15.dev423}/tests/test_think_parser.py +0 -0
- {verifiers-0.1.15.dev422 → verifiers-0.1.15.dev423}/tests/test_tool_env.py +0 -0
- {verifiers-0.1.15.dev422 → verifiers-0.1.15.dev423}/tests/test_tool_utils.py +0 -0
- {verifiers-0.1.15.dev422 → verifiers-0.1.15.dev423}/tests/test_trajectory_processing.py +0 -0
- {verifiers-0.1.15.dev422 → verifiers-0.1.15.dev423}/tests/test_tui_info_formatting.py +0 -0
- {verifiers-0.1.15.dev422 → verifiers-0.1.15.dev423}/tests/test_types.py +0 -0
- {verifiers-0.1.15.dev422 → verifiers-0.1.15.dev423}/tests/test_wordle_env.py +0 -0
- {verifiers-0.1.15.dev422 → verifiers-0.1.15.dev423}/tests/test_xml_parser.py +0 -0
- {verifiers-0.1.15.dev422 → verifiers-0.1.15.dev423}/tests/v1/conftest.py +0 -0
- {verifiers-0.1.15.dev422 → verifiers-0.1.15.dev423}/tests/v1/fixtures/counter_tool_v1.py +0 -0
- {verifiers-0.1.15.dev422 → verifiers-0.1.15.dev423}/tests/v1/fixtures/echo_agentic_v1.py +0 -0
- {verifiers-0.1.15.dev422 → verifiers-0.1.15.dev423}/tests/v1/fixtures/echo_multi_v0.py +0 -0
- {verifiers-0.1.15.dev422 → verifiers-0.1.15.dev423}/tests/v1/fixtures/echo_tool_v1.py +0 -0
- {verifiers-0.1.15.dev422 → verifiers-0.1.15.dev423}/tests/v1/fixtures/echo_user_sim_v1.py +0 -0
- {verifiers-0.1.15.dev422 → verifiers-0.1.15.dev423}/tests/v1/fixtures/echo_v0.py +0 -0
- {verifiers-0.1.15.dev422 → verifiers-0.1.15.dev423}/tests/v1/fixtures/echo_v1.py +0 -0
- {verifiers-0.1.15.dev422 → verifiers-0.1.15.dev423}/tests/v1/fixtures/pyproject.toml +0 -0
- {verifiers-0.1.15.dev422 → verifiers-0.1.15.dev423}/tests/v1/fixtures/tool_response_image_v1.py +0 -0
- {verifiers-0.1.15.dev422 → verifiers-0.1.15.dev423}/tests/v1/test_color_codeword_tasks.py +0 -0
- {verifiers-0.1.15.dev422 → verifiers-0.1.15.dev423}/tests/v1/test_configs.py +0 -0
- {verifiers-0.1.15.dev422 → verifiers-0.1.15.dev423}/tests/v1/test_e2e.py +0 -0
- {verifiers-0.1.15.dev422 → verifiers-0.1.15.dev423}/tests/v1/test_envs.py +0 -0
- {verifiers-0.1.15.dev422 → verifiers-0.1.15.dev423}/tests/v1/test_graph.py +0 -0
- {verifiers-0.1.15.dev422 → verifiers-0.1.15.dev423}/tests/v1/test_judges.py +0 -0
- {verifiers-0.1.15.dev422 → verifiers-0.1.15.dev423}/tests/v1/test_legacy.py +0 -0
- {verifiers-0.1.15.dev422 → verifiers-0.1.15.dev423}/tests/v1/test_scoring.py +0 -0
- {verifiers-0.1.15.dev422 → verifiers-0.1.15.dev423}/tests/v1/test_trace.py +0 -0
- {verifiers-0.1.15.dev422 → verifiers-0.1.15.dev423}/verifiers/AGENTS.md +0 -0
- {verifiers-0.1.15.dev422 → verifiers-0.1.15.dev423}/verifiers/__init__.py +0 -0
- {verifiers-0.1.15.dev422 → verifiers-0.1.15.dev423}/verifiers/cli/__init__.py +0 -0
- {verifiers-0.1.15.dev422 → verifiers-0.1.15.dev423}/verifiers/cli/commands/__init__.py +0 -0
- {verifiers-0.1.15.dev422 → verifiers-0.1.15.dev423}/verifiers/cli/commands/build.py +0 -0
- {verifiers-0.1.15.dev422 → verifiers-0.1.15.dev423}/verifiers/cli/commands/eval.py +0 -0
- {verifiers-0.1.15.dev422 → verifiers-0.1.15.dev423}/verifiers/cli/commands/gepa.py +0 -0
- {verifiers-0.1.15.dev422 → verifiers-0.1.15.dev423}/verifiers/cli/commands/init.py +0 -0
- {verifiers-0.1.15.dev422 → verifiers-0.1.15.dev423}/verifiers/cli/commands/install.py +0 -0
- {verifiers-0.1.15.dev422 → verifiers-0.1.15.dev423}/verifiers/cli/commands/setup.py +0 -0
- {verifiers-0.1.15.dev422 → verifiers-0.1.15.dev423}/verifiers/cli/plugins/__init__.py +0 -0
- {verifiers-0.1.15.dev422 → verifiers-0.1.15.dev423}/verifiers/cli/plugins/prime.py +0 -0
- {verifiers-0.1.15.dev422 → verifiers-0.1.15.dev423}/verifiers/cli/tui.py +0 -0
- {verifiers-0.1.15.dev422 → verifiers-0.1.15.dev423}/verifiers/clients/__init__.py +0 -0
- {verifiers-0.1.15.dev422 → verifiers-0.1.15.dev423}/verifiers/clients/anthropic_messages_client.py +0 -0
- {verifiers-0.1.15.dev422 → verifiers-0.1.15.dev423}/verifiers/clients/client.py +0 -0
- {verifiers-0.1.15.dev422 → verifiers-0.1.15.dev423}/verifiers/clients/nemorl_chat_completions_client.py +0 -0
- {verifiers-0.1.15.dev422 → verifiers-0.1.15.dev423}/verifiers/clients/openai_chat_completions_client.py +0 -0
- {verifiers-0.1.15.dev422 → verifiers-0.1.15.dev423}/verifiers/clients/openai_chat_completions_token_client.py +0 -0
- {verifiers-0.1.15.dev422 → verifiers-0.1.15.dev423}/verifiers/clients/openai_completions_client.py +0 -0
- {verifiers-0.1.15.dev422 → verifiers-0.1.15.dev423}/verifiers/clients/openai_responses_client.py +0 -0
- {verifiers-0.1.15.dev422 → verifiers-0.1.15.dev423}/verifiers/clients/renderer_client.py +0 -0
- {verifiers-0.1.15.dev422 → verifiers-0.1.15.dev423}/verifiers/decorators.py +0 -0
- {verifiers-0.1.15.dev422 → verifiers-0.1.15.dev423}/verifiers/envs/AGENTS.md +0 -0
- {verifiers-0.1.15.dev422 → verifiers-0.1.15.dev423}/verifiers/envs/__init__.py +0 -0
- {verifiers-0.1.15.dev422 → verifiers-0.1.15.dev423}/verifiers/envs/env_group.py +0 -0
- {verifiers-0.1.15.dev422 → verifiers-0.1.15.dev423}/verifiers/envs/environment.py +0 -0
- {verifiers-0.1.15.dev422 → verifiers-0.1.15.dev423}/verifiers/envs/experimental/README.md +0 -0
- {verifiers-0.1.15.dev422 → verifiers-0.1.15.dev423}/verifiers/envs/experimental/__init__.py +0 -0
- {verifiers-0.1.15.dev422 → verifiers-0.1.15.dev423}/verifiers/envs/experimental/cli_agent_env.py +0 -0
- {verifiers-0.1.15.dev422 → verifiers-0.1.15.dev423}/verifiers/envs/experimental/composable/README.md +0 -0
- {verifiers-0.1.15.dev422 → verifiers-0.1.15.dev423}/verifiers/envs/experimental/composable/__init__.py +0 -0
- {verifiers-0.1.15.dev422 → verifiers-0.1.15.dev423}/verifiers/envs/experimental/composable/_filter.py +0 -0
- {verifiers-0.1.15.dev422 → verifiers-0.1.15.dev423}/verifiers/envs/experimental/composable/composable_env.py +0 -0
- {verifiers-0.1.15.dev422 → verifiers-0.1.15.dev423}/verifiers/envs/experimental/composable/harness.py +0 -0
- {verifiers-0.1.15.dev422 → verifiers-0.1.15.dev423}/verifiers/envs/experimental/composable/harnesses/__init__.py +0 -0
- {verifiers-0.1.15.dev422 → verifiers-0.1.15.dev423}/verifiers/envs/experimental/composable/harnesses/mini_swe_agent.py +0 -0
- {verifiers-0.1.15.dev422 → verifiers-0.1.15.dev423}/verifiers/envs/experimental/composable/harnesses/opencode.py +0 -0
- {verifiers-0.1.15.dev422 → verifiers-0.1.15.dev423}/verifiers/envs/experimental/composable/harnesses/prompt.txt +0 -0
- {verifiers-0.1.15.dev422 → verifiers-0.1.15.dev423}/verifiers/envs/experimental/composable/harnesses/rlm.py +0 -0
- {verifiers-0.1.15.dev422 → verifiers-0.1.15.dev423}/verifiers/envs/experimental/composable/task.py +0 -0
- {verifiers-0.1.15.dev422 → verifiers-0.1.15.dev423}/verifiers/envs/experimental/composable/tasksets/__init__.py +0 -0
- {verifiers-0.1.15.dev422 → verifiers-0.1.15.dev423}/verifiers/envs/experimental/composable/tasksets/cp/__init__.py +0 -0
- {verifiers-0.1.15.dev422 → verifiers-0.1.15.dev423}/verifiers/envs/experimental/composable/tasksets/cp/cp_task.py +0 -0
- {verifiers-0.1.15.dev422 → verifiers-0.1.15.dev423}/verifiers/envs/experimental/composable/tasksets/cp/test_utils.py +0 -0
- {verifiers-0.1.15.dev422 → verifiers-0.1.15.dev423}/verifiers/envs/experimental/composable/tasksets/harbor/__init__.py +0 -0
- {verifiers-0.1.15.dev422 → verifiers-0.1.15.dev423}/verifiers/envs/experimental/composable/tasksets/harbor/cli_gym.py +0 -0
- {verifiers-0.1.15.dev422 → verifiers-0.1.15.dev423}/verifiers/envs/experimental/composable/tasksets/harbor/harbor.py +0 -0
- {verifiers-0.1.15.dev422 → verifiers-0.1.15.dev423}/verifiers/envs/experimental/composable/tasksets/harbor/terminal_lego.py +0 -0
- {verifiers-0.1.15.dev422 → verifiers-0.1.15.dev423}/verifiers/envs/experimental/composable/tasksets/math/__init__.py +0 -0
- {verifiers-0.1.15.dev422 → verifiers-0.1.15.dev423}/verifiers/envs/experimental/composable/tasksets/math/math_task.py +0 -0
- {verifiers-0.1.15.dev422 → verifiers-0.1.15.dev423}/verifiers/envs/experimental/composable/tasksets/search/README.md +0 -0
- {verifiers-0.1.15.dev422 → verifiers-0.1.15.dev423}/verifiers/envs/experimental/composable/tasksets/search/__init__.py +0 -0
- {verifiers-0.1.15.dev422 → verifiers-0.1.15.dev423}/verifiers/envs/experimental/composable/tasksets/search/openseeker/README.md +0 -0
- {verifiers-0.1.15.dev422 → verifiers-0.1.15.dev423}/verifiers/envs/experimental/composable/tasksets/search/openseeker/__init__.py +0 -0
- {verifiers-0.1.15.dev422 → verifiers-0.1.15.dev423}/verifiers/envs/experimental/composable/tasksets/search/openseeker/taskset.py +0 -0
- {verifiers-0.1.15.dev422 → verifiers-0.1.15.dev423}/verifiers/envs/experimental/composable/tasksets/search/quest/README.md +0 -0
- {verifiers-0.1.15.dev422 → verifiers-0.1.15.dev423}/verifiers/envs/experimental/composable/tasksets/search/quest/__init__.py +0 -0
- {verifiers-0.1.15.dev422 → verifiers-0.1.15.dev423}/verifiers/envs/experimental/composable/tasksets/search/quest/obj_task_eval/__init__.py +0 -0
- {verifiers-0.1.15.dev422 → verifiers-0.1.15.dev423}/verifiers/envs/experimental/composable/tasksets/search/quest/obj_task_eval/api_tools/__init__.py +0 -0
- {verifiers-0.1.15.dev422 → verifiers-0.1.15.dev423}/verifiers/envs/experimental/composable/tasksets/search/quest/obj_task_eval/api_tools/tool_pdf.py +0 -0
- {verifiers-0.1.15.dev422 → verifiers-0.1.15.dev423}/verifiers/envs/experimental/composable/tasksets/search/quest/obj_task_eval/eval_toolkit.py +0 -0
- {verifiers-0.1.15.dev422 → verifiers-0.1.15.dev423}/verifiers/envs/experimental/composable/tasksets/search/quest/obj_task_eval/evaluator.py +0 -0
- {verifiers-0.1.15.dev422 → verifiers-0.1.15.dev423}/verifiers/envs/experimental/composable/tasksets/search/quest/obj_task_eval/llm_client/__init__.py +0 -0
- {verifiers-0.1.15.dev422 → verifiers-0.1.15.dev423}/verifiers/envs/experimental/composable/tasksets/search/quest/obj_task_eval/llm_client/base_client.py +0 -0
- {verifiers-0.1.15.dev422 → verifiers-0.1.15.dev423}/verifiers/envs/experimental/composable/tasksets/search/quest/obj_task_eval/prompts/__init__.py +0 -0
- {verifiers-0.1.15.dev422 → verifiers-0.1.15.dev423}/verifiers/envs/experimental/composable/tasksets/search/quest/obj_task_eval/prompts/cache_prompts.py +0 -0
- {verifiers-0.1.15.dev422 → verifiers-0.1.15.dev423}/verifiers/envs/experimental/composable/tasksets/search/quest/obj_task_eval/utils/__init__.py +0 -0
- {verifiers-0.1.15.dev422 → verifiers-0.1.15.dev423}/verifiers/envs/experimental/composable/tasksets/search/quest/obj_task_eval/utils/cache_filesys.py +0 -0
- {verifiers-0.1.15.dev422 → verifiers-0.1.15.dev423}/verifiers/envs/experimental/composable/tasksets/search/quest/obj_task_eval/utils/load_eval_script.py +0 -0
- {verifiers-0.1.15.dev422 → verifiers-0.1.15.dev423}/verifiers/envs/experimental/composable/tasksets/search/quest/obj_task_eval/utils/misc.py +0 -0
- {verifiers-0.1.15.dev422 → verifiers-0.1.15.dev423}/verifiers/envs/experimental/composable/tasksets/search/quest/obj_task_eval/utils/tool_visit.py +0 -0
- {verifiers-0.1.15.dev422 → verifiers-0.1.15.dev423}/verifiers/envs/experimental/composable/tasksets/search/quest/obj_task_eval/utils/url_tools.py +0 -0
- {verifiers-0.1.15.dev422 → verifiers-0.1.15.dev423}/verifiers/envs/experimental/composable/tasksets/search/quest/obj_task_eval/verification_tree.py +0 -0
- {verifiers-0.1.15.dev422 → verifiers-0.1.15.dev423}/verifiers/envs/experimental/composable/tasksets/search/quest/open_ended.py +0 -0
- {verifiers-0.1.15.dev422 → verifiers-0.1.15.dev423}/verifiers/envs/experimental/composable/tasksets/search/quest/taskset.py +0 -0
- {verifiers-0.1.15.dev422 → verifiers-0.1.15.dev423}/verifiers/envs/experimental/composable/tasksets/search/redsearcher/README.md +0 -0
- {verifiers-0.1.15.dev422 → verifiers-0.1.15.dev423}/verifiers/envs/experimental/composable/tasksets/search/redsearcher/__init__.py +0 -0
- {verifiers-0.1.15.dev422 → verifiers-0.1.15.dev423}/verifiers/envs/experimental/composable/tasksets/search/redsearcher/taskset.py +0 -0
- {verifiers-0.1.15.dev422 → verifiers-0.1.15.dev423}/verifiers/envs/experimental/composable/tasksets/search/search_tasksets.py +0 -0
- {verifiers-0.1.15.dev422 → verifiers-0.1.15.dev423}/verifiers/envs/experimental/composable/tasksets/swe/README.md +0 -0
- {verifiers-0.1.15.dev422 → verifiers-0.1.15.dev423}/verifiers/envs/experimental/composable/tasksets/swe/__init__.py +0 -0
- {verifiers-0.1.15.dev422 → verifiers-0.1.15.dev423}/verifiers/envs/experimental/composable/tasksets/swe/multi_swe/__init__.py +0 -0
- {verifiers-0.1.15.dev422 → verifiers-0.1.15.dev423}/verifiers/envs/experimental/composable/tasksets/swe/multi_swe/extract_fix_patch.sh +0 -0
- {verifiers-0.1.15.dev422 → verifiers-0.1.15.dev423}/verifiers/envs/experimental/composable/tasksets/swe/multi_swe/taskset.py +0 -0
- {verifiers-0.1.15.dev422 → verifiers-0.1.15.dev423}/verifiers/envs/experimental/composable/tasksets/swe/openswe/__init__.py +0 -0
- {verifiers-0.1.15.dev422 → verifiers-0.1.15.dev423}/verifiers/envs/experimental/composable/tasksets/swe/openswe/taskset.py +0 -0
- {verifiers-0.1.15.dev422 → verifiers-0.1.15.dev423}/verifiers/envs/experimental/composable/tasksets/swe/r2e_gym/__init__.py +0 -0
- {verifiers-0.1.15.dev422 → verifiers-0.1.15.dev423}/verifiers/envs/experimental/composable/tasksets/swe/r2e_gym/log_parser.py +0 -0
- {verifiers-0.1.15.dev422 → verifiers-0.1.15.dev423}/verifiers/envs/experimental/composable/tasksets/swe/r2e_gym/taskset.py +0 -0
- {verifiers-0.1.15.dev422 → verifiers-0.1.15.dev423}/verifiers/envs/experimental/composable/tasksets/swe/scale_swe/__init__.py +0 -0
- {verifiers-0.1.15.dev422 → verifiers-0.1.15.dev423}/verifiers/envs/experimental/composable/tasksets/swe/scale_swe/taskset.py +0 -0
- {verifiers-0.1.15.dev422 → verifiers-0.1.15.dev423}/verifiers/envs/experimental/composable/tasksets/swe/shared/__init__.py +0 -0
- {verifiers-0.1.15.dev422 → verifiers-0.1.15.dev423}/verifiers/envs/experimental/composable/tasksets/swe/shared/test_patch.py +0 -0
- {verifiers-0.1.15.dev422 → verifiers-0.1.15.dev423}/verifiers/envs/experimental/composable/tasksets/swe/swe_bench/__init__.py +0 -0
- {verifiers-0.1.15.dev422 → verifiers-0.1.15.dev423}/verifiers/envs/experimental/composable/tasksets/swe/swe_bench/taskset.py +0 -0
- {verifiers-0.1.15.dev422 → verifiers-0.1.15.dev423}/verifiers/envs/experimental/composable/tasksets/swe/swe_lego/__init__.py +0 -0
- {verifiers-0.1.15.dev422 → verifiers-0.1.15.dev423}/verifiers/envs/experimental/composable/tasksets/swe/swe_lego/taskset.py +0 -0
- {verifiers-0.1.15.dev422 → verifiers-0.1.15.dev423}/verifiers/envs/experimental/composable/tasksets/swe/swe_rebench_v2/__init__.py +0 -0
- {verifiers-0.1.15.dev422 → verifiers-0.1.15.dev423}/verifiers/envs/experimental/composable/tasksets/swe/swe_rebench_v2/log_parsers.py +0 -0
- {verifiers-0.1.15.dev422 → verifiers-0.1.15.dev423}/verifiers/envs/experimental/composable/tasksets/swe/swe_rebench_v2/taskset.py +0 -0
- {verifiers-0.1.15.dev422 → verifiers-0.1.15.dev423}/verifiers/envs/experimental/composable/tasksets/swe/swe_smith/__init__.py +0 -0
- {verifiers-0.1.15.dev422 → verifiers-0.1.15.dev423}/verifiers/envs/experimental/composable/tasksets/swe/swe_smith/taskset.py +0 -0
- {verifiers-0.1.15.dev422 → verifiers-0.1.15.dev423}/verifiers/envs/experimental/composable/tasksets/swe/swe_tasksets.py +0 -0
- {verifiers-0.1.15.dev422 → verifiers-0.1.15.dev423}/verifiers/envs/experimental/gym_env.py +0 -0
- {verifiers-0.1.15.dev422 → verifiers-0.1.15.dev423}/verifiers/envs/experimental/harbor_env/__init__.py +0 -0
- {verifiers-0.1.15.dev422 → verifiers-0.1.15.dev423}/verifiers/envs/experimental/harbor_env/env.py +0 -0
- {verifiers-0.1.15.dev422 → verifiers-0.1.15.dev423}/verifiers/envs/experimental/harbor_env/mcp.py +0 -0
- {verifiers-0.1.15.dev422 → verifiers-0.1.15.dev423}/verifiers/envs/experimental/mcp_env.py +0 -0
- {verifiers-0.1.15.dev422 → verifiers-0.1.15.dev423}/verifiers/envs/experimental/opencode_env.py +0 -0
- {verifiers-0.1.15.dev422 → verifiers-0.1.15.dev423}/verifiers/envs/experimental/opencode_qa_env.py +0 -0
- {verifiers-0.1.15.dev422 → verifiers-0.1.15.dev423}/verifiers/envs/experimental/opencode_rlm_env.py +0 -0
- {verifiers-0.1.15.dev422 → verifiers-0.1.15.dev423}/verifiers/envs/experimental/sandbox_mixin.py +0 -0
- {verifiers-0.1.15.dev422 → verifiers-0.1.15.dev423}/verifiers/envs/experimental/utils/__init__.py +0 -0
- {verifiers-0.1.15.dev422 → verifiers-0.1.15.dev423}/verifiers/envs/experimental/utils/file_locks.py +0 -0
- {verifiers-0.1.15.dev422 → verifiers-0.1.15.dev423}/verifiers/envs/experimental/utils/git_checkout_cache.py +0 -0
- {verifiers-0.1.15.dev422 → verifiers-0.1.15.dev423}/verifiers/envs/integrations/README.md +0 -0
- {verifiers-0.1.15.dev422 → verifiers-0.1.15.dev423}/verifiers/envs/integrations/__init__.py +0 -0
- {verifiers-0.1.15.dev422 → verifiers-0.1.15.dev423}/verifiers/envs/integrations/browser_env/README.md +0 -0
- {verifiers-0.1.15.dev422 → verifiers-0.1.15.dev423}/verifiers/envs/integrations/browser_env/__init__.py +0 -0
- {verifiers-0.1.15.dev422 → verifiers-0.1.15.dev423}/verifiers/envs/integrations/browser_env/browser_env.py +0 -0
- {verifiers-0.1.15.dev422 → verifiers-0.1.15.dev423}/verifiers/envs/integrations/browser_env/modes/__init__.py +0 -0
- {verifiers-0.1.15.dev422 → verifiers-0.1.15.dev423}/verifiers/envs/integrations/browser_env/modes/base.py +0 -0
- {verifiers-0.1.15.dev422 → verifiers-0.1.15.dev423}/verifiers/envs/integrations/browser_env/modes/cua_mode.py +0 -0
- {verifiers-0.1.15.dev422 → verifiers-0.1.15.dev423}/verifiers/envs/integrations/browser_env/modes/dom_mode.py +0 -0
- {verifiers-0.1.15.dev422 → verifiers-0.1.15.dev423}/verifiers/envs/integrations/openenv_env.py +0 -0
- {verifiers-0.1.15.dev422 → verifiers-0.1.15.dev423}/verifiers/envs/integrations/reasoninggym_env.py +0 -0
- {verifiers-0.1.15.dev422 → verifiers-0.1.15.dev423}/verifiers/envs/integrations/textarena_env.py +0 -0
- {verifiers-0.1.15.dev422 → verifiers-0.1.15.dev423}/verifiers/envs/multiturn_env.py +0 -0
- {verifiers-0.1.15.dev422 → verifiers-0.1.15.dev423}/verifiers/envs/python_env.py +0 -0
- {verifiers-0.1.15.dev422 → verifiers-0.1.15.dev423}/verifiers/envs/sandbox_env.py +0 -0
- {verifiers-0.1.15.dev422 → verifiers-0.1.15.dev423}/verifiers/envs/singleturn_env.py +0 -0
- {verifiers-0.1.15.dev422 → verifiers-0.1.15.dev423}/verifiers/envs/stateful_tool_env.py +0 -0
- {verifiers-0.1.15.dev422 → verifiers-0.1.15.dev423}/verifiers/envs/tool_env.py +0 -0
- {verifiers-0.1.15.dev422 → verifiers-0.1.15.dev423}/verifiers/errors.py +0 -0
- {verifiers-0.1.15.dev422 → verifiers-0.1.15.dev423}/verifiers/gepa/__init__.py +0 -0
- {verifiers-0.1.15.dev422 → verifiers-0.1.15.dev423}/verifiers/gepa/adapter.py +0 -0
- {verifiers-0.1.15.dev422 → verifiers-0.1.15.dev423}/verifiers/gepa/config.py +0 -0
- {verifiers-0.1.15.dev422 → verifiers-0.1.15.dev423}/verifiers/gepa/display.py +0 -0
- {verifiers-0.1.15.dev422 → verifiers-0.1.15.dev423}/verifiers/gepa/gepa_utils.py +0 -0
- {verifiers-0.1.15.dev422 → verifiers-0.1.15.dev423}/verifiers/parsers/__init__.py +0 -0
- {verifiers-0.1.15.dev422 → verifiers-0.1.15.dev423}/verifiers/parsers/maybe_think_parser.py +0 -0
- {verifiers-0.1.15.dev422 → verifiers-0.1.15.dev423}/verifiers/parsers/parser.py +0 -0
- {verifiers-0.1.15.dev422 → verifiers-0.1.15.dev423}/verifiers/parsers/think_parser.py +0 -0
- {verifiers-0.1.15.dev422 → verifiers-0.1.15.dev423}/verifiers/parsers/xml_parser.py +0 -0
- {verifiers-0.1.15.dev422 → verifiers-0.1.15.dev423}/verifiers/rl/README.md +0 -0
- {verifiers-0.1.15.dev422 → verifiers-0.1.15.dev423}/verifiers/rl/__init__.py +0 -0
- {verifiers-0.1.15.dev422 → verifiers-0.1.15.dev423}/verifiers/rl/inference/__init__.py +0 -0
- {verifiers-0.1.15.dev422 → verifiers-0.1.15.dev423}/verifiers/rl/inference/client.py +0 -0
- {verifiers-0.1.15.dev422 → verifiers-0.1.15.dev423}/verifiers/rl/inference/server.py +0 -0
- {verifiers-0.1.15.dev422 → verifiers-0.1.15.dev423}/verifiers/rl/trainer/__init__.py +0 -0
- {verifiers-0.1.15.dev422 → verifiers-0.1.15.dev423}/verifiers/rl/trainer/config.py +0 -0
- {verifiers-0.1.15.dev422 → verifiers-0.1.15.dev423}/verifiers/rl/trainer/orchestrator.py +0 -0
- {verifiers-0.1.15.dev422 → verifiers-0.1.15.dev423}/verifiers/rl/trainer/trainer.py +0 -0
- {verifiers-0.1.15.dev422 → verifiers-0.1.15.dev423}/verifiers/rl/trainer/utils.py +0 -0
- {verifiers-0.1.15.dev422 → verifiers-0.1.15.dev423}/verifiers/rubrics/__init__.py +0 -0
- {verifiers-0.1.15.dev422 → verifiers-0.1.15.dev423}/verifiers/rubrics/experimental/hybrid_math_rubric.py +0 -0
- {verifiers-0.1.15.dev422 → verifiers-0.1.15.dev423}/verifiers/rubrics/judge_rubric.py +0 -0
- {verifiers-0.1.15.dev422 → verifiers-0.1.15.dev423}/verifiers/rubrics/math_rubric.py +0 -0
- {verifiers-0.1.15.dev422 → verifiers-0.1.15.dev423}/verifiers/rubrics/rubric.py +0 -0
- {verifiers-0.1.15.dev422 → verifiers-0.1.15.dev423}/verifiers/rubrics/rubric_group.py +0 -0
- {verifiers-0.1.15.dev422 → verifiers-0.1.15.dev423}/verifiers/scripts/__init__.py +0 -0
- {verifiers-0.1.15.dev422 → verifiers-0.1.15.dev423}/verifiers/scripts/build.py +0 -0
- {verifiers-0.1.15.dev422 → verifiers-0.1.15.dev423}/verifiers/scripts/eval.py +0 -0
- {verifiers-0.1.15.dev422 → verifiers-0.1.15.dev423}/verifiers/scripts/gepa.py +0 -0
- {verifiers-0.1.15.dev422 → verifiers-0.1.15.dev423}/verifiers/scripts/init.py +0 -0
- {verifiers-0.1.15.dev422 → verifiers-0.1.15.dev423}/verifiers/scripts/install.py +0 -0
- {verifiers-0.1.15.dev422 → verifiers-0.1.15.dev423}/verifiers/scripts/rl.py +0 -0
- {verifiers-0.1.15.dev422 → verifiers-0.1.15.dev423}/verifiers/scripts/setup.py +0 -0
- {verifiers-0.1.15.dev422 → verifiers-0.1.15.dev423}/verifiers/scripts/train.py +0 -0
- {verifiers-0.1.15.dev422 → verifiers-0.1.15.dev423}/verifiers/scripts/tui.py +0 -0
- {verifiers-0.1.15.dev422 → verifiers-0.1.15.dev423}/verifiers/scripts/vllm.py +0 -0
- {verifiers-0.1.15.dev422 → verifiers-0.1.15.dev423}/verifiers/serve/__init__.py +0 -0
- {verifiers-0.1.15.dev422 → verifiers-0.1.15.dev423}/verifiers/serve/client/env_client.py +0 -0
- {verifiers-0.1.15.dev422 → verifiers-0.1.15.dev423}/verifiers/serve/client/zmq_env_client.py +0 -0
- {verifiers-0.1.15.dev422 → verifiers-0.1.15.dev423}/verifiers/serve/server/__init__.py +0 -0
- {verifiers-0.1.15.dev422 → verifiers-0.1.15.dev423}/verifiers/serve/server/env_router.py +0 -0
- {verifiers-0.1.15.dev422 → verifiers-0.1.15.dev423}/verifiers/serve/server/env_server.py +0 -0
- {verifiers-0.1.15.dev422 → verifiers-0.1.15.dev423}/verifiers/serve/server/env_worker.py +0 -0
- {verifiers-0.1.15.dev422 → verifiers-0.1.15.dev423}/verifiers/serve/server/zmq_env_server.py +0 -0
- {verifiers-0.1.15.dev422 → verifiers-0.1.15.dev423}/verifiers/serve/types.py +0 -0
- {verifiers-0.1.15.dev422 → verifiers-0.1.15.dev423}/verifiers/types.py +0 -0
- {verifiers-0.1.15.dev422 → verifiers-0.1.15.dev423}/verifiers/utils/__init__.py +0 -0
- {verifiers-0.1.15.dev422 → verifiers-0.1.15.dev423}/verifiers/utils/async_utils.py +0 -0
- {verifiers-0.1.15.dev422 → verifiers-0.1.15.dev423}/verifiers/utils/client_utils.py +0 -0
- {verifiers-0.1.15.dev422 → verifiers-0.1.15.dev423}/verifiers/utils/config_utils.py +0 -0
- {verifiers-0.1.15.dev422 → verifiers-0.1.15.dev423}/verifiers/utils/data_utils.py +0 -0
- {verifiers-0.1.15.dev422 → verifiers-0.1.15.dev423}/verifiers/utils/display_utils.py +0 -0
- {verifiers-0.1.15.dev422 → verifiers-0.1.15.dev423}/verifiers/utils/env_config_utils.py +0 -0
- {verifiers-0.1.15.dev422 → verifiers-0.1.15.dev423}/verifiers/utils/env_utils.py +0 -0
- {verifiers-0.1.15.dev422 → verifiers-0.1.15.dev423}/verifiers/utils/error_utils.py +0 -0
- {verifiers-0.1.15.dev422 → verifiers-0.1.15.dev423}/verifiers/utils/eval_display.py +0 -0
- {verifiers-0.1.15.dev422 → verifiers-0.1.15.dev423}/verifiers/utils/eval_utils.py +0 -0
- {verifiers-0.1.15.dev422 → verifiers-0.1.15.dev423}/verifiers/utils/heartbeat.py +0 -0
- {verifiers-0.1.15.dev422 → verifiers-0.1.15.dev423}/verifiers/utils/import_utils.py +0 -0
- {verifiers-0.1.15.dev422 → verifiers-0.1.15.dev423}/verifiers/utils/install_utils.py +0 -0
- {verifiers-0.1.15.dev422 → verifiers-0.1.15.dev423}/verifiers/utils/interception_utils.py +0 -0
- {verifiers-0.1.15.dev422 → verifiers-0.1.15.dev423}/verifiers/utils/logging_utils.py +0 -0
- {verifiers-0.1.15.dev422 → verifiers-0.1.15.dev423}/verifiers/utils/message_utils.py +0 -0
- {verifiers-0.1.15.dev422 → verifiers-0.1.15.dev423}/verifiers/utils/metric_utils.py +0 -0
- {verifiers-0.1.15.dev422 → verifiers-0.1.15.dev423}/verifiers/utils/path_utils.py +0 -0
- {verifiers-0.1.15.dev422 → verifiers-0.1.15.dev423}/verifiers/utils/pricing_utils.py +0 -0
- {verifiers-0.1.15.dev422 → verifiers-0.1.15.dev423}/verifiers/utils/process_utils.py +0 -0
- {verifiers-0.1.15.dev422 → verifiers-0.1.15.dev423}/verifiers/utils/response_utils.py +0 -0
- {verifiers-0.1.15.dev422 → verifiers-0.1.15.dev423}/verifiers/utils/save_utils.py +0 -0
- {verifiers-0.1.15.dev422 → verifiers-0.1.15.dev423}/verifiers/utils/serve_utils.py +0 -0
- {verifiers-0.1.15.dev422 → verifiers-0.1.15.dev423}/verifiers/utils/thread_utils.py +0 -0
- {verifiers-0.1.15.dev422 → verifiers-0.1.15.dev423}/verifiers/utils/threaded_sandbox_client.py +0 -0
- {verifiers-0.1.15.dev422 → verifiers-0.1.15.dev423}/verifiers/utils/tool_utils.py +0 -0
- {verifiers-0.1.15.dev422 → verifiers-0.1.15.dev423}/verifiers/utils/usage_utils.py +0 -0
- {verifiers-0.1.15.dev422 → verifiers-0.1.15.dev423}/verifiers/utils/version_utils.py +0 -0
- {verifiers-0.1.15.dev422 → verifiers-0.1.15.dev423}/verifiers/v1/ARCHITECTURE.md +0 -0
- {verifiers-0.1.15.dev422 → verifiers-0.1.15.dev423}/verifiers/v1/__init__.py +0 -0
- {verifiers-0.1.15.dev422 → verifiers-0.1.15.dev423}/verifiers/v1/cli/__init__.py +0 -0
- {verifiers-0.1.15.dev422 → verifiers-0.1.15.dev423}/verifiers/v1/cli/dashboard/__init__.py +0 -0
- {verifiers-0.1.15.dev422 → verifiers-0.1.15.dev423}/verifiers/v1/cli/dashboard/base.py +0 -0
- {verifiers-0.1.15.dev422 → verifiers-0.1.15.dev423}/verifiers/v1/cli/dashboard/eval.py +0 -0
- {verifiers-0.1.15.dev422 → verifiers-0.1.15.dev423}/verifiers/v1/cli/dashboard/validate.py +0 -0
- {verifiers-0.1.15.dev422 → verifiers-0.1.15.dev423}/verifiers/v1/cli/eval/__init__.py +0 -0
- {verifiers-0.1.15.dev422 → verifiers-0.1.15.dev423}/verifiers/v1/cli/eval/main.py +0 -0
- {verifiers-0.1.15.dev422 → verifiers-0.1.15.dev423}/verifiers/v1/cli/eval/resume.py +0 -0
- {verifiers-0.1.15.dev422 → verifiers-0.1.15.dev423}/verifiers/v1/cli/eval/runner.py +0 -0
- {verifiers-0.1.15.dev422 → verifiers-0.1.15.dev423}/verifiers/v1/cli/init.py +0 -0
- {verifiers-0.1.15.dev422 → verifiers-0.1.15.dev423}/verifiers/v1/cli/resolve.py +0 -0
- {verifiers-0.1.15.dev422 → verifiers-0.1.15.dev423}/verifiers/v1/cli/serve.py +0 -0
- {verifiers-0.1.15.dev422 → verifiers-0.1.15.dev423}/verifiers/v1/clients/__init__.py +0 -0
- {verifiers-0.1.15.dev422 → verifiers-0.1.15.dev423}/verifiers/v1/clients/client.py +0 -0
- {verifiers-0.1.15.dev422 → verifiers-0.1.15.dev423}/verifiers/v1/clients/config.py +0 -0
- {verifiers-0.1.15.dev422 → verifiers-0.1.15.dev423}/verifiers/v1/clients/eval.py +0 -0
- {verifiers-0.1.15.dev422 → verifiers-0.1.15.dev423}/verifiers/v1/clients/train.py +0 -0
- {verifiers-0.1.15.dev422 → verifiers-0.1.15.dev423}/verifiers/v1/configs/eval.py +0 -0
- {verifiers-0.1.15.dev422 → verifiers-0.1.15.dev423}/verifiers/v1/configs/init.py +0 -0
- {verifiers-0.1.15.dev422 → verifiers-0.1.15.dev423}/verifiers/v1/configs/serve.py +0 -0
- {verifiers-0.1.15.dev422 → verifiers-0.1.15.dev423}/verifiers/v1/decorators.py +0 -0
- {verifiers-0.1.15.dev422 → verifiers-0.1.15.dev423}/verifiers/v1/dialects/__init__.py +0 -0
- {verifiers-0.1.15.dev422 → verifiers-0.1.15.dev423}/verifiers/v1/dialects/anthropic.py +0 -0
- {verifiers-0.1.15.dev422 → verifiers-0.1.15.dev423}/verifiers/v1/dialects/base.py +0 -0
- {verifiers-0.1.15.dev422 → verifiers-0.1.15.dev423}/verifiers/v1/dialects/chat.py +0 -0
- {verifiers-0.1.15.dev422 → verifiers-0.1.15.dev423}/verifiers/v1/dialects/responses.py +0 -0
- {verifiers-0.1.15.dev422 → verifiers-0.1.15.dev423}/verifiers/v1/env.py +0 -0
- {verifiers-0.1.15.dev422 → verifiers-0.1.15.dev423}/verifiers/v1/episode.py +0 -0
- {verifiers-0.1.15.dev422 → verifiers-0.1.15.dev423}/verifiers/v1/errors.py +0 -0
- {verifiers-0.1.15.dev422 → verifiers-0.1.15.dev423}/verifiers/v1/graph.py +0 -0
- {verifiers-0.1.15.dev422 → verifiers-0.1.15.dev423}/verifiers/v1/harness.py +0 -0
- {verifiers-0.1.15.dev422 → verifiers-0.1.15.dev423}/verifiers/v1/harnesses/__init__.py +0 -0
- {verifiers-0.1.15.dev422 → verifiers-0.1.15.dev423}/verifiers/v1/harnesses/codex/__init__.py +0 -0
- {verifiers-0.1.15.dev422 → verifiers-0.1.15.dev423}/verifiers/v1/harnesses/codex/harness.py +0 -0
- {verifiers-0.1.15.dev422 → verifiers-0.1.15.dev423}/verifiers/v1/harnesses/default/__init__.py +0 -0
- {verifiers-0.1.15.dev422 → verifiers-0.1.15.dev423}/verifiers/v1/harnesses/default/harness.py +0 -0
- {verifiers-0.1.15.dev422 → verifiers-0.1.15.dev423}/verifiers/v1/harnesses/default/program.py +0 -0
- {verifiers-0.1.15.dev422 → verifiers-0.1.15.dev423}/verifiers/v1/harnesses/kimi_code/__init__.py +0 -0
- {verifiers-0.1.15.dev422 → verifiers-0.1.15.dev423}/verifiers/v1/harnesses/kimi_code/harness.py +0 -0
- {verifiers-0.1.15.dev422 → verifiers-0.1.15.dev423}/verifiers/v1/harnesses/mini_swe_agent/__init__.py +0 -0
- {verifiers-0.1.15.dev422 → verifiers-0.1.15.dev423}/verifiers/v1/harnesses/mini_swe_agent/harness.py +0 -0
- {verifiers-0.1.15.dev422 → verifiers-0.1.15.dev423}/verifiers/v1/harnesses/mini_swe_agent/program.py +0 -0
- {verifiers-0.1.15.dev422 → verifiers-0.1.15.dev423}/verifiers/v1/harnesses/null/__init__.py +0 -0
- {verifiers-0.1.15.dev422 → verifiers-0.1.15.dev423}/verifiers/v1/harnesses/null/harness.py +0 -0
- {verifiers-0.1.15.dev422 → verifiers-0.1.15.dev423}/verifiers/v1/harnesses/null/program.py +0 -0
- {verifiers-0.1.15.dev422 → verifiers-0.1.15.dev423}/verifiers/v1/harnesses/rlm/__init__.py +0 -0
- {verifiers-0.1.15.dev422 → verifiers-0.1.15.dev423}/verifiers/v1/harnesses/rlm/harness.py +0 -0
- {verifiers-0.1.15.dev422 → verifiers-0.1.15.dev423}/verifiers/v1/harnesses/terminus_2/__init__.py +0 -0
- {verifiers-0.1.15.dev422 → verifiers-0.1.15.dev423}/verifiers/v1/harnesses/terminus_2/harness.py +0 -0
- {verifiers-0.1.15.dev422 → verifiers-0.1.15.dev423}/verifiers/v1/harnesses/terminus_2/program.py +0 -0
- {verifiers-0.1.15.dev422 → verifiers-0.1.15.dev423}/verifiers/v1/interception/__init__.py +0 -0
- {verifiers-0.1.15.dev422 → verifiers-0.1.15.dev423}/verifiers/v1/interception/pool.py +0 -0
- {verifiers-0.1.15.dev422 → verifiers-0.1.15.dev423}/verifiers/v1/interception/server.py +0 -0
- {verifiers-0.1.15.dev422 → verifiers-0.1.15.dev423}/verifiers/v1/judge.py +0 -0
- {verifiers-0.1.15.dev422 → verifiers-0.1.15.dev423}/verifiers/v1/judges/__init__.py +0 -0
- {verifiers-0.1.15.dev422 → verifiers-0.1.15.dev423}/verifiers/v1/judges/reference.py +0 -0
- {verifiers-0.1.15.dev422 → verifiers-0.1.15.dev423}/verifiers/v1/judges/reference.txt +0 -0
- {verifiers-0.1.15.dev422 → verifiers-0.1.15.dev423}/verifiers/v1/judges/rubric.py +0 -0
- {verifiers-0.1.15.dev422 → verifiers-0.1.15.dev423}/verifiers/v1/judges/rubric.txt +0 -0
- {verifiers-0.1.15.dev422 → verifiers-0.1.15.dev423}/verifiers/v1/legacy.py +0 -0
- {verifiers-0.1.15.dev422 → verifiers-0.1.15.dev423}/verifiers/v1/loaders.py +0 -0
- {verifiers-0.1.15.dev422 → verifiers-0.1.15.dev423}/verifiers/v1/mcp/__init__.py +0 -0
- {verifiers-0.1.15.dev422 → verifiers-0.1.15.dev423}/verifiers/v1/mcp/launch.py +0 -0
- {verifiers-0.1.15.dev422 → verifiers-0.1.15.dev423}/verifiers/v1/mcp/server.py +0 -0
- {verifiers-0.1.15.dev422 → verifiers-0.1.15.dev423}/verifiers/v1/mcp/toolset.py +0 -0
- {verifiers-0.1.15.dev422 → verifiers-0.1.15.dev423}/verifiers/v1/mcp/user.py +0 -0
- {verifiers-0.1.15.dev422 → verifiers-0.1.15.dev423}/verifiers/v1/retries.py +0 -0
- {verifiers-0.1.15.dev422 → verifiers-0.1.15.dev423}/verifiers/v1/rollout.py +0 -0
- {verifiers-0.1.15.dev422 → verifiers-0.1.15.dev423}/verifiers/v1/runtimes/__init__.py +0 -0
- {verifiers-0.1.15.dev422 → verifiers-0.1.15.dev423}/verifiers/v1/runtimes/docker.py +0 -0
- {verifiers-0.1.15.dev422 → verifiers-0.1.15.dev423}/verifiers/v1/runtimes/limiters.py +0 -0
- {verifiers-0.1.15.dev422 → verifiers-0.1.15.dev423}/verifiers/v1/runtimes/subprocess.py +0 -0
- {verifiers-0.1.15.dev422 → verifiers-0.1.15.dev423}/verifiers/v1/scoring.py +0 -0
- {verifiers-0.1.15.dev422 → verifiers-0.1.15.dev423}/verifiers/v1/serve/__init__.py +0 -0
- {verifiers-0.1.15.dev422 → verifiers-0.1.15.dev423}/verifiers/v1/serve/client.py +0 -0
- {verifiers-0.1.15.dev422 → verifiers-0.1.15.dev423}/verifiers/v1/serve/pool.py +0 -0
- {verifiers-0.1.15.dev422 → verifiers-0.1.15.dev423}/verifiers/v1/serve/server.py +0 -0
- {verifiers-0.1.15.dev422 → verifiers-0.1.15.dev423}/verifiers/v1/serve/types.py +0 -0
- {verifiers-0.1.15.dev422 → verifiers-0.1.15.dev423}/verifiers/v1/state.py +0 -0
- {verifiers-0.1.15.dev422 → verifiers-0.1.15.dev423}/verifiers/v1/task.py +0 -0
- {verifiers-0.1.15.dev422 → verifiers-0.1.15.dev423}/verifiers/v1/taskset.py +0 -0
- {verifiers-0.1.15.dev422 → verifiers-0.1.15.dev423}/verifiers/v1/tasksets/__init__.py +0 -0
- {verifiers-0.1.15.dev422 → verifiers-0.1.15.dev423}/verifiers/v1/tasksets/harbor/__init__.py +0 -0
- {verifiers-0.1.15.dev422 → verifiers-0.1.15.dev423}/verifiers/v1/tasksets/harbor/taskset.py +0 -0
- {verifiers-0.1.15.dev422 → verifiers-0.1.15.dev423}/verifiers/v1/tasksets/lean/__init__.py +0 -0
- {verifiers-0.1.15.dev422 → verifiers-0.1.15.dev423}/verifiers/v1/tasksets/lean/scoring.py +0 -0
- {verifiers-0.1.15.dev422 → verifiers-0.1.15.dev423}/verifiers/v1/tasksets/lean/taskset.py +0 -0
- {verifiers-0.1.15.dev422 → verifiers-0.1.15.dev423}/verifiers/v1/tasksets/textarena/__init__.py +0 -0
- {verifiers-0.1.15.dev422 → verifiers-0.1.15.dev423}/verifiers/v1/tasksets/textarena/taskset.py +0 -0
- {verifiers-0.1.15.dev422 → verifiers-0.1.15.dev423}/verifiers/v1/trace.py +0 -0
- {verifiers-0.1.15.dev422 → verifiers-0.1.15.dev423}/verifiers/v1/types.py +0 -0
- {verifiers-0.1.15.dev422 → verifiers-0.1.15.dev423}/verifiers/v1/utils/__init__.py +0 -0
- {verifiers-0.1.15.dev422 → verifiers-0.1.15.dev423}/verifiers/v1/utils/format.py +0 -0
- {verifiers-0.1.15.dev422 → verifiers-0.1.15.dev423}/verifiers/v1/utils/install.py +0 -0
- {verifiers-0.1.15.dev422 → verifiers-0.1.15.dev423}/verifiers/v1/utils/logging.py +0 -0
- {verifiers-0.1.15.dev422 → verifiers-0.1.15.dev423}/verifiers/v1/utils/memory.py +0 -0
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
Metadata-Version: 2.4
|
|
2
2
|
Name: verifiers
|
|
3
|
-
Version: 0.1.15.
|
|
3
|
+
Version: 0.1.15.dev423
|
|
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
|
|
@@ -166,6 +166,7 @@ flash-attn = { FLASH_ATTENTION_SKIP_CUDA_BUILD = "TRUE" }
|
|
|
166
166
|
vf-eval = "verifiers.scripts.eval:main"
|
|
167
167
|
eval = "verifiers.v1.cli.eval.main:main"
|
|
168
168
|
validate = "verifiers.v1.cli.validate:main"
|
|
169
|
+
debug = "verifiers.v1.cli.debug:main"
|
|
169
170
|
serve = "verifiers.v1.cli.serve:main"
|
|
170
171
|
init = "verifiers.v1.cli.init:main"
|
|
171
172
|
vf-gepa = "verifiers.scripts.gepa:main"
|
|
@@ -33,12 +33,13 @@ def test_swe_debug_env_is_deprecated_subclass_not_alias():
|
|
|
33
33
|
assert issubclass(SWEDebugEnv, SandboxDebugEnv)
|
|
34
34
|
assert SandboxDebugRubric.__name__ == "SandboxDebugRubric"
|
|
35
35
|
|
|
36
|
-
with pytest.warns(DeprecationWarning, match="
|
|
36
|
+
with pytest.warns(DeprecationWarning, match="native v1 `debug` CLI") as warnings:
|
|
37
37
|
env = SWEDebugEnv(
|
|
38
38
|
DummySandboxTaskSet(),
|
|
39
39
|
debug_step="command",
|
|
40
40
|
debug_command="true",
|
|
41
41
|
)
|
|
42
42
|
|
|
43
|
+
assert len(warnings) == 1
|
|
43
44
|
assert isinstance(env, SandboxDebugEnv)
|
|
44
45
|
assert env.labels == ["sandbox-debug"]
|
|
@@ -2,7 +2,8 @@
|
|
|
2
2
|
|
|
3
3
|
import shlex
|
|
4
4
|
import time
|
|
5
|
-
from typing import Any, Literal
|
|
5
|
+
from typing import Any, ClassVar, Literal
|
|
6
|
+
from warnings import warn
|
|
6
7
|
|
|
7
8
|
import verifiers as vf
|
|
8
9
|
from prime_sandboxes import CreateSandboxRequest
|
|
@@ -38,6 +39,8 @@ class SandboxDebugEnv(SandboxMixin, vf.MultiTurnEnv):
|
|
|
38
39
|
- exit: optionally run task tests and score them
|
|
39
40
|
"""
|
|
40
41
|
|
|
42
|
+
emit_deprecation_warning: ClassVar[bool] = True
|
|
43
|
+
|
|
41
44
|
def __init__(
|
|
42
45
|
self,
|
|
43
46
|
taskset: SandboxTaskSet,
|
|
@@ -59,6 +62,12 @@ class SandboxDebugEnv(SandboxMixin, vf.MultiTurnEnv):
|
|
|
59
62
|
output_tail_chars: int = 2000,
|
|
60
63
|
**sandbox_kwargs: Any,
|
|
61
64
|
):
|
|
65
|
+
if self.emit_deprecation_warning:
|
|
66
|
+
warn(
|
|
67
|
+
"SandboxDebugEnv is deprecated; use the native v1 `debug` CLI for v1 tasksets.",
|
|
68
|
+
DeprecationWarning,
|
|
69
|
+
stacklevel=2,
|
|
70
|
+
)
|
|
62
71
|
if debug_step not in ("none", "gold_patch", "command", "script"):
|
|
63
72
|
raise ValueError(f"Unsupported debug_step: {debug_step!r}")
|
|
64
73
|
if debug_step == "command" and not debug_command:
|
|
@@ -11,7 +11,8 @@ class SWEDebugRubric(SandboxDebugRubric):
|
|
|
11
11
|
|
|
12
12
|
def __init__(self, **kwargs: Any):
|
|
13
13
|
warn(
|
|
14
|
-
"SWEDebugRubric is deprecated; use
|
|
14
|
+
"SWEDebugRubric is deprecated with the composable debug envs; use the "
|
|
15
|
+
"native v1 `debug` CLI for v1 tasksets.",
|
|
15
16
|
DeprecationWarning,
|
|
16
17
|
stacklevel=2,
|
|
17
18
|
)
|
|
@@ -21,9 +22,11 @@ class SWEDebugRubric(SandboxDebugRubric):
|
|
|
21
22
|
class SWEDebugEnv(SandboxDebugEnv):
|
|
22
23
|
"""Deprecated wrapper for SandboxDebugEnv."""
|
|
23
24
|
|
|
25
|
+
emit_deprecation_warning = False
|
|
26
|
+
|
|
24
27
|
def __init__(self, *args: Any, **kwargs: Any):
|
|
25
28
|
warn(
|
|
26
|
-
"SWEDebugEnv is deprecated; use
|
|
29
|
+
"SWEDebugEnv is deprecated; use the native v1 `debug` CLI for v1 tasksets.",
|
|
27
30
|
DeprecationWarning,
|
|
28
31
|
stacklevel=2,
|
|
29
32
|
)
|
|
@@ -767,8 +767,9 @@ pass `docker` / `prime` / `modal`.
|
|
|
767
767
|
|
|
768
768
|
# CLI reference
|
|
769
769
|
|
|
770
|
-
|
|
771
|
-
gold
|
|
770
|
+
Four commands, all `uv run <cmd>`: **`eval`** (run + score a model), **`validate`**
|
|
771
|
+
(model-free setup/gold checks), **`debug`** (setup + one shell action), **`init`**
|
|
772
|
+
(scaffold). They share a resolution layer:
|
|
772
773
|
|
|
773
774
|
- **Positional id** — a leading bare token is the taskset id: `eval gsm8k-v1` == `eval --taskset.id
|
|
774
775
|
gsm8k-v1` (for `init` it's the env name).
|
|
@@ -823,19 +824,24 @@ trace per line, appended as each rollout finishes — durable mid-run), and `eva
|
|
|
823
824
|
|
|
824
825
|
## `validate`
|
|
825
826
|
|
|
826
|
-
|
|
827
|
-
|
|
828
|
-
|
|
827
|
+
Model-free checks that a task is sound. By default each task gets two independent
|
|
828
|
+
runtimes — a **gold** check (the taskset's `setup` then its `validate` hook: the gold patch
|
|
829
|
+
makes the tests pass, the verifier accepts the gold answer) and a **setup-only** check —
|
|
830
|
+
reported as one aggregate row. Restrict to one check with `--only-gold` / `--only-setup`.
|
|
831
|
+
No model, no harness.
|
|
829
832
|
|
|
830
833
|
```bash
|
|
831
834
|
uv run validate gsm8k-v1 -n 20 --runtime.type subprocess
|
|
835
|
+
uv run validate swebench-v1 -n 1 --runtime.type prime --only-setup
|
|
836
|
+
uv run validate swebench-v1 -n 1 --runtime.type prime --only-gold
|
|
832
837
|
```
|
|
833
838
|
|
|
834
839
|
| flag | default | meaning |
|
|
835
840
|
| --- | --- | --- |
|
|
836
841
|
| `<taskset-id>` / `--taskset.id` | — | taskset to validate |
|
|
837
842
|
| `--runtime.type` | `docker` | runtime for `setup` + `validate` (a gold check often needs the task's container) |
|
|
838
|
-
| `--setup
|
|
843
|
+
| `--only-setup` / `--only-gold` | off | run just the setup-only or just the gold check (default: both) |
|
|
844
|
+
| `--timeout.setup` / `--timeout.total` | None | per-task wall-clock caps for `setup` and the `validate` hook |
|
|
839
845
|
| `-n`/`--num-tasks`, `-s`/`--shuffle`, `-c`/`--max-concurrent` (128) | | task selection + concurrency |
|
|
840
846
|
| `-v`/`--verbose`, `--no-rich` | | logging / disable the dashboard |
|
|
841
847
|
|
|
@@ -845,6 +851,29 @@ captured as a result row (one bad task is data, not a crash) with reason `valid`
|
|
|
845
851
|
default runtime is **docker** (unlike eval's subprocess), and a subprocess runtime against a
|
|
846
852
|
`NEEDS_CONTAINER` / image-bearing taskset aborts with a clear error.
|
|
847
853
|
|
|
854
|
+
## `debug`
|
|
855
|
+
|
|
856
|
+
Set up each selected task, run one explicit shell action, and save the trace. This is for
|
|
857
|
+
inspecting task state without a model: it does not apply gold patches, call `validate`, run
|
|
858
|
+
`finalize`, or score rewards.
|
|
859
|
+
|
|
860
|
+
```bash
|
|
861
|
+
uv run debug swebench-v1 -n 1 --runtime.type prime --command 'pwd; git status --short | head'
|
|
862
|
+
uv run debug swebench-v1 -n 1 --runtime.type prime --script-path ./inspect.sh
|
|
863
|
+
```
|
|
864
|
+
|
|
865
|
+
| flag | default | meaning |
|
|
866
|
+
| --- | --- | --- |
|
|
867
|
+
| `<taskset-id>` / `--taskset.id` | — | taskset to debug |
|
|
868
|
+
| `--command` / `--script-path` | — | exactly one inline command or host script to upload and execute |
|
|
869
|
+
| `--runtime.type` | `docker` | runtime for setup + the debug action |
|
|
870
|
+
| `--timeout.setup` / `--timeout.total` | None | per-task wall-clock caps for `setup` and the debug action |
|
|
871
|
+
| `-n`/`--num-tasks`, `-s`/`--shuffle`, `-c`/`--max-concurrent` (128) | | task selection + concurrency |
|
|
872
|
+
| `-o`/`--output-dir` | fresh debug run dir | where `config.toml` and `results.jsonl` are written |
|
|
873
|
+
|
|
874
|
+
Each saved trace has command/script metadata, exit status, elapsed time, timeout/error fields,
|
|
875
|
+
and the full stdout/stderr under `trace.info["debug"]`.
|
|
876
|
+
|
|
848
877
|
## `init`
|
|
849
878
|
|
|
850
879
|
Scaffold a new v1 environment package under `--path` (default `./environments`), following the
|
|
@@ -41,7 +41,8 @@ uv sync --python 3.12 --extra harbor
|
|
|
41
41
|
```bash
|
|
42
42
|
uv run init my-task-v1 # scaffold a new environment (--add-tool/--add-user/--add-harness)
|
|
43
43
|
uv run eval gsm8k-v1 -n 5 -r 3 # single-turn math; default harness; subprocess runtime
|
|
44
|
-
uv run validate gsm8k-v1 -n 5 # model-free
|
|
44
|
+
uv run validate gsm8k-v1 -n 5 # model-free gold + setup-only checks (--only-gold / --only-setup)
|
|
45
|
+
uv run debug gsm8k-v1 -n 1 --command 'pwd' # setup, run one shell action, save traces
|
|
45
46
|
uv run eval -h # typed help (+ the local example tasksets/harnesses)
|
|
46
47
|
```
|
|
47
48
|
|
|
@@ -0,0 +1,327 @@
|
|
|
1
|
+
"""The debug entrypoint: setup tasks, run one shell action, and persist traces."""
|
|
2
|
+
|
|
3
|
+
import asyncio
|
|
4
|
+
import contextlib
|
|
5
|
+
import logging
|
|
6
|
+
import random
|
|
7
|
+
import shlex
|
|
8
|
+
import signal
|
|
9
|
+
import sys
|
|
10
|
+
import time
|
|
11
|
+
import traceback
|
|
12
|
+
from collections.abc import Awaitable
|
|
13
|
+
from pathlib import Path
|
|
14
|
+
from typing import Any
|
|
15
|
+
from uuid import uuid4
|
|
16
|
+
|
|
17
|
+
from pydantic_config import cli
|
|
18
|
+
|
|
19
|
+
import verifiers.v1 as vf
|
|
20
|
+
from verifiers.v1.cli.output import append_trace, save_config
|
|
21
|
+
from verifiers.v1.cli.resolve import (
|
|
22
|
+
extract_id,
|
|
23
|
+
references_config_file,
|
|
24
|
+
with_positional_taskset,
|
|
25
|
+
)
|
|
26
|
+
from verifiers.v1.configs.debug import DebugConfig
|
|
27
|
+
from verifiers.v1.decorators import invoke
|
|
28
|
+
from verifiers.v1.env import resolve_runtime_config
|
|
29
|
+
from verifiers.v1.runtimes import ProgramResult, Runtime, make_runtime
|
|
30
|
+
from verifiers.v1.state import state_cls
|
|
31
|
+
from verifiers.v1.taskset import Taskset
|
|
32
|
+
from verifiers.v1.trace import Error, Trace
|
|
33
|
+
from verifiers.v1.utils.logging import setup_logging
|
|
34
|
+
|
|
35
|
+
logger = logging.getLogger(__name__)
|
|
36
|
+
|
|
37
|
+
USAGE = (
|
|
38
|
+
"usage: uv run debug [<taskset-id>] (--command <cmd> | --script-path <path>) "
|
|
39
|
+
"[--runtime.type subprocess] [options] [@ file.toml]\n"
|
|
40
|
+
" runs setup, then one command or uploaded host script, and saves traces"
|
|
41
|
+
)
|
|
42
|
+
|
|
43
|
+
|
|
44
|
+
def _narrow(argv: list[str]) -> type[DebugConfig]:
|
|
45
|
+
"""`DebugConfig` with `taskset` narrowed to the config type of the id on the CLI."""
|
|
46
|
+
taskset_id = extract_id(argv, "taskset")
|
|
47
|
+
if not taskset_id:
|
|
48
|
+
return DebugConfig
|
|
49
|
+
ftype = vf.taskset_config_type(taskset_id)
|
|
50
|
+
return type(
|
|
51
|
+
DebugConfig.__name__,
|
|
52
|
+
(DebugConfig,),
|
|
53
|
+
{"__annotations__": {"taskset": ftype}, "taskset": ftype(id=taskset_id)},
|
|
54
|
+
)
|
|
55
|
+
|
|
56
|
+
|
|
57
|
+
def output_path(config: DebugConfig) -> Path:
|
|
58
|
+
if config.output_dir is not None:
|
|
59
|
+
return config.output_dir
|
|
60
|
+
return Path("outputs") / f"{config.taskset.name}--debug" / config.uuid
|
|
61
|
+
|
|
62
|
+
|
|
63
|
+
def task_info(task) -> dict[str, Any]:
|
|
64
|
+
return {"idx": task.idx, "name": task.name, "workdir": task.workdir}
|
|
65
|
+
|
|
66
|
+
|
|
67
|
+
def runtime_info(runtime: Runtime) -> dict[str, Any]:
|
|
68
|
+
return {
|
|
69
|
+
"type": runtime.type,
|
|
70
|
+
"name": runtime.name,
|
|
71
|
+
"descriptor": runtime.descriptor,
|
|
72
|
+
}
|
|
73
|
+
|
|
74
|
+
|
|
75
|
+
def result_info(result: ProgramResult, start: float) -> dict[str, Any]:
|
|
76
|
+
ok = result.exit_code == 0
|
|
77
|
+
return {
|
|
78
|
+
"ok": ok,
|
|
79
|
+
"reason": "pass" if ok else "nonzero_exit",
|
|
80
|
+
"exit_code": result.exit_code,
|
|
81
|
+
"elapsed": round(time.time() - start, 2),
|
|
82
|
+
"stdout": result.stdout or "",
|
|
83
|
+
"stderr": result.stderr or "",
|
|
84
|
+
}
|
|
85
|
+
|
|
86
|
+
|
|
87
|
+
def error_info(
|
|
88
|
+
error: BaseException,
|
|
89
|
+
start: float,
|
|
90
|
+
timeout: float | None,
|
|
91
|
+
stage: str,
|
|
92
|
+
) -> dict[str, Any]:
|
|
93
|
+
if isinstance(error, asyncio.TimeoutError):
|
|
94
|
+
message = (
|
|
95
|
+
f"{stage} timed out after {timeout}s"
|
|
96
|
+
if timeout is not None
|
|
97
|
+
else f"{stage} timed out"
|
|
98
|
+
)
|
|
99
|
+
reason = "timeout"
|
|
100
|
+
elif isinstance(error, asyncio.CancelledError):
|
|
101
|
+
message = f"{stage} cancelled"
|
|
102
|
+
reason = "cancelled"
|
|
103
|
+
else:
|
|
104
|
+
message = str(error)
|
|
105
|
+
reason = "error"
|
|
106
|
+
return {
|
|
107
|
+
"ok": False,
|
|
108
|
+
"reason": reason,
|
|
109
|
+
"exit_code": None,
|
|
110
|
+
"elapsed": round(time.time() - start, 2),
|
|
111
|
+
"error": message,
|
|
112
|
+
"error_type": type(error).__name__,
|
|
113
|
+
"stdout": "",
|
|
114
|
+
"stderr": "",
|
|
115
|
+
}
|
|
116
|
+
|
|
117
|
+
|
|
118
|
+
def capture_trace_error(trace: Trace, error: BaseException) -> None:
|
|
119
|
+
if isinstance(error, Exception):
|
|
120
|
+
trace.capture_error(error)
|
|
121
|
+
return
|
|
122
|
+
trace.errors.append(
|
|
123
|
+
Error(
|
|
124
|
+
type=type(error).__name__,
|
|
125
|
+
message=str(error),
|
|
126
|
+
traceback=traceback.format_exc(),
|
|
127
|
+
)
|
|
128
|
+
)
|
|
129
|
+
trace.stop("error")
|
|
130
|
+
|
|
131
|
+
|
|
132
|
+
def record_debug_error(
|
|
133
|
+
trace: Trace,
|
|
134
|
+
debug: dict[str, Any],
|
|
135
|
+
runtime: Runtime,
|
|
136
|
+
error: BaseException,
|
|
137
|
+
setup_timeout: float | None,
|
|
138
|
+
action_timeout: float | None,
|
|
139
|
+
) -> None:
|
|
140
|
+
if not trace.timing.setup.end:
|
|
141
|
+
trace.timing.setup.end = time.time()
|
|
142
|
+
if trace.timing.generation.start and not trace.timing.generation.end:
|
|
143
|
+
trace.timing.generation.end = time.time()
|
|
144
|
+
in_action = bool(trace.timing.generation.start)
|
|
145
|
+
stage = "debug action" if in_action else "setup"
|
|
146
|
+
timeout = action_timeout if in_action else setup_timeout
|
|
147
|
+
error_start = (
|
|
148
|
+
trace.timing.generation.start if in_action else trace.timing.setup.start
|
|
149
|
+
)
|
|
150
|
+
debug.update(error_info(error, error_start, timeout, stage))
|
|
151
|
+
debug.setdefault("runtime", runtime_info(runtime))
|
|
152
|
+
capture_trace_error(trace, error)
|
|
153
|
+
|
|
154
|
+
|
|
155
|
+
def record_action_failure(trace: Trace, debug: dict[str, Any]) -> None:
|
|
156
|
+
message = debug.get("error") or f"debug action failed: {debug['reason']}"
|
|
157
|
+
trace.errors.append(
|
|
158
|
+
Error(
|
|
159
|
+
type=debug.get("error_type") or "DebugActionError",
|
|
160
|
+
message=str(message),
|
|
161
|
+
traceback=None,
|
|
162
|
+
)
|
|
163
|
+
)
|
|
164
|
+
|
|
165
|
+
|
|
166
|
+
async def run_timed(
|
|
167
|
+
action: Awaitable[ProgramResult], config: DebugConfig
|
|
168
|
+
) -> dict[str, Any]:
|
|
169
|
+
"""Run the whole debug action under one `--timeout.total` budget."""
|
|
170
|
+
start = time.time()
|
|
171
|
+
try:
|
|
172
|
+
result = await asyncio.wait_for(action, config.timeout.total)
|
|
173
|
+
except Exception as e:
|
|
174
|
+
return error_info(e, start, config.timeout.total, "debug action")
|
|
175
|
+
return result_info(result, start)
|
|
176
|
+
|
|
177
|
+
|
|
178
|
+
async def run_action(runtime: Runtime, config: DebugConfig) -> dict[str, Any]:
|
|
179
|
+
if config.command is not None:
|
|
180
|
+
return {
|
|
181
|
+
"action": "command",
|
|
182
|
+
"command": config.command,
|
|
183
|
+
**(await run_timed(runtime.run(["sh", "-lc", config.command], {}), config)),
|
|
184
|
+
}
|
|
185
|
+
assert config.script_path is not None
|
|
186
|
+
# /tmp keyed by the (run-unique) runtime name: outside the task workdir so the script
|
|
187
|
+
# doesn't show up in the repo state being inspected, and never shared between runs on
|
|
188
|
+
# the subprocess runtime, where an absolute path is a host path.
|
|
189
|
+
remote_path = f"/tmp/{runtime.name}-script.sh"
|
|
190
|
+
quoted = shlex.quote(remote_path)
|
|
191
|
+
command = f"chmod +x {quoted} && {quoted}"
|
|
192
|
+
|
|
193
|
+
async def upload_and_run() -> ProgramResult:
|
|
194
|
+
await runtime.write(remote_path, config.script_path.read_bytes())
|
|
195
|
+
return await runtime.run(["sh", "-lc", command], {})
|
|
196
|
+
|
|
197
|
+
return {
|
|
198
|
+
"action": "script",
|
|
199
|
+
"script_path": str(config.script_path),
|
|
200
|
+
"remote_script_path": remote_path,
|
|
201
|
+
"command": command,
|
|
202
|
+
**(await run_timed(upload_and_run(), config)),
|
|
203
|
+
}
|
|
204
|
+
|
|
205
|
+
|
|
206
|
+
async def debug_task(taskset: Taskset, task, config: DebugConfig) -> tuple[Trace, bool]:
|
|
207
|
+
trace = Trace(task=task, state=state_cls(type(taskset))())
|
|
208
|
+
debug = {
|
|
209
|
+
"task": task_info(task),
|
|
210
|
+
"action": "command" if config.command is not None else "script",
|
|
211
|
+
"ok": False,
|
|
212
|
+
"reason": "not_run",
|
|
213
|
+
}
|
|
214
|
+
cancelled = False
|
|
215
|
+
runtime = make_runtime(
|
|
216
|
+
resolve_runtime_config(config.runtime, task),
|
|
217
|
+
name=f"debug-{task.idx}-{uuid4().hex[:8]}",
|
|
218
|
+
)
|
|
219
|
+
setup_timeout = (
|
|
220
|
+
config.timeout.setup if config.timeout.setup is not None else task.timeout.setup
|
|
221
|
+
)
|
|
222
|
+
try:
|
|
223
|
+
trace.timing.setup.start = time.time()
|
|
224
|
+
await runtime.start()
|
|
225
|
+
debug["runtime"] = runtime_info(runtime)
|
|
226
|
+
await asyncio.wait_for(
|
|
227
|
+
invoke(taskset.setup, {"task": task, "trace": trace, "runtime": runtime}),
|
|
228
|
+
setup_timeout,
|
|
229
|
+
)
|
|
230
|
+
trace.timing.setup.end = time.time()
|
|
231
|
+
|
|
232
|
+
trace.timing.generation.start = time.time()
|
|
233
|
+
debug.update(await run_action(runtime, config))
|
|
234
|
+
trace.timing.generation.end = time.time()
|
|
235
|
+
if not debug.get("ok"):
|
|
236
|
+
record_action_failure(trace, debug)
|
|
237
|
+
trace.stop(str(debug["reason"]))
|
|
238
|
+
except asyncio.CancelledError as e:
|
|
239
|
+
cancelled = True
|
|
240
|
+
record_debug_error(
|
|
241
|
+
trace, debug, runtime, e, setup_timeout, config.timeout.total
|
|
242
|
+
)
|
|
243
|
+
except Exception as e:
|
|
244
|
+
record_debug_error(
|
|
245
|
+
trace, debug, runtime, e, setup_timeout, config.timeout.total
|
|
246
|
+
)
|
|
247
|
+
finally:
|
|
248
|
+
trace.info["debug"] = debug
|
|
249
|
+
try:
|
|
250
|
+
await runtime.stop()
|
|
251
|
+
except asyncio.CancelledError:
|
|
252
|
+
# a task cancellation delivered mid-stop would abort before the caller can
|
|
253
|
+
# persist the trace — absorb it here; the caller re-raises after appending
|
|
254
|
+
cancelled = True
|
|
255
|
+
except Exception:
|
|
256
|
+
logger.warning("runtime teardown failed (task %s)", task.idx, exc_info=True)
|
|
257
|
+
return trace, cancelled
|
|
258
|
+
|
|
259
|
+
|
|
260
|
+
async def run_debug(config: DebugConfig) -> list[Trace]:
|
|
261
|
+
taskset = vf.load_taskset(config.taskset)
|
|
262
|
+
tasks = taskset.load_tasks()
|
|
263
|
+
if config.shuffle:
|
|
264
|
+
random.Random(0).shuffle(tasks)
|
|
265
|
+
if config.num_tasks is not None:
|
|
266
|
+
tasks = tasks[: config.num_tasks]
|
|
267
|
+
if isinstance(config.runtime, vf.SubprocessConfig) and (
|
|
268
|
+
taskset.NEEDS_CONTAINER or any(t.image for t in tasks)
|
|
269
|
+
):
|
|
270
|
+
raise SystemExit(
|
|
271
|
+
"taskset needs a container runtime to debug - pass --runtime.type docker (or prime)"
|
|
272
|
+
)
|
|
273
|
+
|
|
274
|
+
out = output_path(config)
|
|
275
|
+
save_config(config, out)
|
|
276
|
+
logger.info(
|
|
277
|
+
"debugging %d task(s) from %s on the %s runtime",
|
|
278
|
+
len(tasks),
|
|
279
|
+
config.name,
|
|
280
|
+
config.runtime.type,
|
|
281
|
+
)
|
|
282
|
+
logger.info("results: %s", out)
|
|
283
|
+
|
|
284
|
+
sem = asyncio.Semaphore(config.max_concurrent) if config.max_concurrent else None
|
|
285
|
+
write_lock = asyncio.Lock()
|
|
286
|
+
|
|
287
|
+
async def one(task) -> Trace:
|
|
288
|
+
async with sem or contextlib.nullcontext():
|
|
289
|
+
trace, cancelled = await debug_task(taskset, task, config)
|
|
290
|
+
await append_trace(out, trace, write_lock)
|
|
291
|
+
info = trace.info["debug"]
|
|
292
|
+
detail = f" - {info['error']}" if info.get("error") else ""
|
|
293
|
+
logger.info(
|
|
294
|
+
"idx=%s ok=%s reason=%s%s",
|
|
295
|
+
task.idx,
|
|
296
|
+
info["ok"],
|
|
297
|
+
info["reason"],
|
|
298
|
+
detail,
|
|
299
|
+
)
|
|
300
|
+
if cancelled:
|
|
301
|
+
raise asyncio.CancelledError
|
|
302
|
+
return trace
|
|
303
|
+
|
|
304
|
+
return await asyncio.gather(*(one(task) for task in tasks))
|
|
305
|
+
|
|
306
|
+
|
|
307
|
+
def main(argv: list[str] | None = None) -> None:
|
|
308
|
+
argv = with_positional_taskset(list(sys.argv[1:]) if argv is None else list(argv))
|
|
309
|
+
|
|
310
|
+
if not argv or any(arg in ("-h", "--help") for arg in argv):
|
|
311
|
+
print(USAGE)
|
|
312
|
+
sys.argv = [sys.argv[0], "--help"]
|
|
313
|
+
cli(_narrow(argv))
|
|
314
|
+
return
|
|
315
|
+
if not extract_id(argv, "taskset") and not references_config_file(argv):
|
|
316
|
+
raise SystemExit(USAGE)
|
|
317
|
+
|
|
318
|
+
config_type = _narrow(argv)
|
|
319
|
+
sys.argv = [sys.argv[0], *argv]
|
|
320
|
+
config = cli(config_type)
|
|
321
|
+
setup_logging("DEBUG" if config.verbose else "INFO")
|
|
322
|
+
signal.signal(signal.SIGTERM, lambda *_: (_ for _ in ()).throw(KeyboardInterrupt()))
|
|
323
|
+
asyncio.run(run_debug(config))
|
|
324
|
+
|
|
325
|
+
|
|
326
|
+
if __name__ == "__main__":
|
|
327
|
+
main()
|
|
@@ -15,10 +15,11 @@ import asyncio
|
|
|
15
15
|
from pathlib import Path
|
|
16
16
|
|
|
17
17
|
import tomli_w
|
|
18
|
-
from pydantic import TypeAdapter
|
|
18
|
+
from pydantic import BaseModel, TypeAdapter
|
|
19
19
|
|
|
20
20
|
from verifiers.v1.configs.eval import EvalConfig
|
|
21
21
|
from verifiers.v1.trace import Trace
|
|
22
|
+
from verifiers.v1.utils.aio import run_shielded
|
|
22
23
|
|
|
23
24
|
|
|
24
25
|
def output_path(config: EvalConfig) -> Path:
|
|
@@ -30,7 +31,7 @@ def output_path(config: EvalConfig) -> Path:
|
|
|
30
31
|
return Path("outputs") / name / config.uuid
|
|
31
32
|
|
|
32
33
|
|
|
33
|
-
def write_config(config:
|
|
34
|
+
def write_config(config: BaseModel, results_dir: Path) -> Path:
|
|
34
35
|
"""Write the run's resolved `config.toml` (re-readable via `@ config.toml`); return its
|
|
35
36
|
path. mode="json" makes values TOML-friendly (Path -> str, etc.); exclude_none drops the
|
|
36
37
|
nulls TOML can't represent."""
|
|
@@ -41,7 +42,7 @@ def write_config(config: EvalConfig, results_dir: Path) -> Path:
|
|
|
41
42
|
return config_path
|
|
42
43
|
|
|
43
44
|
|
|
44
|
-
def save_config(config:
|
|
45
|
+
def save_config(config: BaseModel, results_dir: Path) -> None:
|
|
45
46
|
"""Set up the run's output dir: write `config.toml` and start a fresh (empty)
|
|
46
47
|
`results.jsonl`. Call once up front, before traces start landing."""
|
|
47
48
|
write_config(config, results_dir)
|
|
@@ -65,10 +66,6 @@ async def append_trace(results_dir: Path, trace: Trace, lock: asyncio.Lock) -> N
|
|
|
65
66
|
async with lock:
|
|
66
67
|
await asyncio.to_thread(write_trace, results_dir, trace)
|
|
67
68
|
|
|
68
|
-
#
|
|
69
|
-
|
|
70
|
-
|
|
71
|
-
await asyncio.shield(persist_task)
|
|
72
|
-
except asyncio.CancelledError:
|
|
73
|
-
await persist_task
|
|
74
|
-
raise
|
|
69
|
+
# Run lock acquisition and the worker to completion even under cancellation, so
|
|
70
|
+
# finalized traces are never lost mid-write (`run_shielded` re-raises the cancellation).
|
|
71
|
+
await run_shielded(persist())
|