verifiers 0.1.15.dev441__tar.gz → 0.1.15.dev442__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.dev441 → verifiers-0.1.15.dev442}/PKG-INFO +1 -1
- {verifiers-0.1.15.dev441 → verifiers-0.1.15.dev442}/verifiers/v1/cli/dashboard/eval.py +11 -18
- verifiers-0.1.15.dev442/verifiers/v1/cli/eval/resume.py +119 -0
- {verifiers-0.1.15.dev441 → verifiers-0.1.15.dev442}/verifiers/v1/cli/eval/runner.py +16 -16
- verifiers-0.1.15.dev441/verifiers/v1/cli/eval/resume.py +0 -138
- {verifiers-0.1.15.dev441 → verifiers-0.1.15.dev442}/.gitignore +0 -0
- {verifiers-0.1.15.dev441 → verifiers-0.1.15.dev442}/LICENSE +0 -0
- {verifiers-0.1.15.dev441 → verifiers-0.1.15.dev442}/README.md +0 -0
- {verifiers-0.1.15.dev441 → verifiers-0.1.15.dev442}/pyproject.toml +0 -0
- {verifiers-0.1.15.dev441 → verifiers-0.1.15.dev442}/tests/AGENTS.md +0 -0
- {verifiers-0.1.15.dev441 → verifiers-0.1.15.dev442}/tests/__init__.py +0 -0
- {verifiers-0.1.15.dev441 → verifiers-0.1.15.dev442}/tests/conftest.py +0 -0
- {verifiers-0.1.15.dev441 → verifiers-0.1.15.dev442}/tests/test_browser_env.py +0 -0
- {verifiers-0.1.15.dev441 → verifiers-0.1.15.dev442}/tests/test_build_script.py +0 -0
- {verifiers-0.1.15.dev441 → verifiers-0.1.15.dev442}/tests/test_cli_agent_env.py +0 -0
- {verifiers-0.1.15.dev441 → verifiers-0.1.15.dev442}/tests/test_client_auth_errors.py +0 -0
- {verifiers-0.1.15.dev441 → verifiers-0.1.15.dev442}/tests/test_client_config.py +0 -0
- {verifiers-0.1.15.dev441 → verifiers-0.1.15.dev442}/tests/test_client_multimodal_types.py +0 -0
- {verifiers-0.1.15.dev441 → verifiers-0.1.15.dev442}/tests/test_composable_env.py +0 -0
- {verifiers-0.1.15.dev441 → verifiers-0.1.15.dev442}/tests/test_context_token_metrics.py +0 -0
- {verifiers-0.1.15.dev441 → verifiers-0.1.15.dev442}/tests/test_decorator_ranks.py +0 -0
- {verifiers-0.1.15.dev441 → verifiers-0.1.15.dev442}/tests/test_endpoint_registry.py +0 -0
- {verifiers-0.1.15.dev441 → verifiers-0.1.15.dev442}/tests/test_env_group.py +0 -0
- {verifiers-0.1.15.dev441 → verifiers-0.1.15.dev442}/tests/test_env_server.py +0 -0
- {verifiers-0.1.15.dev441 → verifiers-0.1.15.dev442}/tests/test_environment.py +0 -0
- {verifiers-0.1.15.dev441 → verifiers-0.1.15.dev442}/tests/test_environment_extra.py +0 -0
- {verifiers-0.1.15.dev441 → verifiers-0.1.15.dev442}/tests/test_envs.py +0 -0
- {verifiers-0.1.15.dev441 → verifiers-0.1.15.dev442}/tests/test_error_chain.py +0 -0
- {verifiers-0.1.15.dev441 → verifiers-0.1.15.dev442}/tests/test_eval_display.py +0 -0
- {verifiers-0.1.15.dev441 → verifiers-0.1.15.dev442}/tests/test_eval_utils.py +0 -0
- {verifiers-0.1.15.dev441 → verifiers-0.1.15.dev442}/tests/test_gepa_cli.py +0 -0
- {verifiers-0.1.15.dev441 → verifiers-0.1.15.dev442}/tests/test_gepa_utils.py +0 -0
- {verifiers-0.1.15.dev441 → verifiers-0.1.15.dev442}/tests/test_gym_env.py +0 -0
- {verifiers-0.1.15.dev441 → verifiers-0.1.15.dev442}/tests/test_harbor_env_mcp.py +0 -0
- {verifiers-0.1.15.dev441 → verifiers-0.1.15.dev442}/tests/test_imports.py +0 -0
- {verifiers-0.1.15.dev441 → verifiers-0.1.15.dev442}/tests/test_init_script.py +0 -0
- {verifiers-0.1.15.dev441 → verifiers-0.1.15.dev442}/tests/test_install_utils.py +0 -0
- {verifiers-0.1.15.dev441 → verifiers-0.1.15.dev442}/tests/test_interception_utils.py +0 -0
- {verifiers-0.1.15.dev441 → verifiers-0.1.15.dev442}/tests/test_logging.py +0 -0
- {verifiers-0.1.15.dev441 → verifiers-0.1.15.dev442}/tests/test_math_rubric.py +0 -0
- {verifiers-0.1.15.dev441 → verifiers-0.1.15.dev442}/tests/test_maybe_think_parser.py +0 -0
- {verifiers-0.1.15.dev441 → verifiers-0.1.15.dev442}/tests/test_message_utils.py +0 -0
- {verifiers-0.1.15.dev441 → verifiers-0.1.15.dev442}/tests/test_message_utils_multimodal.py +0 -0
- {verifiers-0.1.15.dev441 → verifiers-0.1.15.dev442}/tests/test_multiturn_env.py +0 -0
- {verifiers-0.1.15.dev441 → verifiers-0.1.15.dev442}/tests/test_nemorl_client.py +0 -0
- {verifiers-0.1.15.dev441 → verifiers-0.1.15.dev442}/tests/test_openai_chat_completions_token_client.py +0 -0
- {verifiers-0.1.15.dev441 → verifiers-0.1.15.dev442}/tests/test_openai_responses_client.py +0 -0
- {verifiers-0.1.15.dev441 → verifiers-0.1.15.dev442}/tests/test_opencode_rlm_env.py +0 -0
- {verifiers-0.1.15.dev441 → verifiers-0.1.15.dev442}/tests/test_openenv_client.py +0 -0
- {verifiers-0.1.15.dev441 → verifiers-0.1.15.dev442}/tests/test_parser.py +0 -0
- {verifiers-0.1.15.dev441 → verifiers-0.1.15.dev442}/tests/test_path_utils.py +0 -0
- {verifiers-0.1.15.dev441 → verifiers-0.1.15.dev442}/tests/test_per_turn_timing.py +0 -0
- {verifiers-0.1.15.dev441 → verifiers-0.1.15.dev442}/tests/test_pricing_utils.py +0 -0
- {verifiers-0.1.15.dev441 → verifiers-0.1.15.dev442}/tests/test_prime_plugin.py +0 -0
- {verifiers-0.1.15.dev441 → verifiers-0.1.15.dev442}/tests/test_renderer_client.py +0 -0
- {verifiers-0.1.15.dev441 → verifiers-0.1.15.dev442}/tests/test_renderer_e2e.py +0 -0
- {verifiers-0.1.15.dev441 → verifiers-0.1.15.dev442}/tests/test_rlm_composable_env.py +0 -0
- {verifiers-0.1.15.dev441 → verifiers-0.1.15.dev442}/tests/test_rubric.py +0 -0
- {verifiers-0.1.15.dev441 → verifiers-0.1.15.dev442}/tests/test_rubric_group.py +0 -0
- {verifiers-0.1.15.dev441 → verifiers-0.1.15.dev442}/tests/test_sandbox_debug_env.py +0 -0
- {verifiers-0.1.15.dev441 → verifiers-0.1.15.dev442}/tests/test_sandbox_env.py +0 -0
- {verifiers-0.1.15.dev441 → verifiers-0.1.15.dev442}/tests/test_sandbox_mixin.py +0 -0
- {verifiers-0.1.15.dev441 → verifiers-0.1.15.dev442}/tests/test_save_utils.py +0 -0
- {verifiers-0.1.15.dev441 → verifiers-0.1.15.dev442}/tests/test_setup_script.py +0 -0
- {verifiers-0.1.15.dev441 → verifiers-0.1.15.dev442}/tests/test_singleturn_env.py +0 -0
- {verifiers-0.1.15.dev441 → verifiers-0.1.15.dev442}/tests/test_stateful_tool_env.py +0 -0
- {verifiers-0.1.15.dev441 → verifiers-0.1.15.dev442}/tests/test_think_parser.py +0 -0
- {verifiers-0.1.15.dev441 → verifiers-0.1.15.dev442}/tests/test_tool_env.py +0 -0
- {verifiers-0.1.15.dev441 → verifiers-0.1.15.dev442}/tests/test_tool_utils.py +0 -0
- {verifiers-0.1.15.dev441 → verifiers-0.1.15.dev442}/tests/test_trajectory_processing.py +0 -0
- {verifiers-0.1.15.dev441 → verifiers-0.1.15.dev442}/tests/test_tui_info_formatting.py +0 -0
- {verifiers-0.1.15.dev441 → verifiers-0.1.15.dev442}/tests/test_types.py +0 -0
- {verifiers-0.1.15.dev441 → verifiers-0.1.15.dev442}/tests/test_wordle_env.py +0 -0
- {verifiers-0.1.15.dev441 → verifiers-0.1.15.dev442}/tests/test_xml_parser.py +0 -0
- {verifiers-0.1.15.dev441 → verifiers-0.1.15.dev442}/tests/v1/conftest.py +0 -0
- {verifiers-0.1.15.dev441 → verifiers-0.1.15.dev442}/tests/v1/fixtures/counter_tool_v1.py +0 -0
- {verifiers-0.1.15.dev441 → verifiers-0.1.15.dev442}/tests/v1/fixtures/echo_agentic_v1.py +0 -0
- {verifiers-0.1.15.dev441 → verifiers-0.1.15.dev442}/tests/v1/fixtures/echo_multi_v0.py +0 -0
- {verifiers-0.1.15.dev441 → verifiers-0.1.15.dev442}/tests/v1/fixtures/echo_tool_v1.py +0 -0
- {verifiers-0.1.15.dev441 → verifiers-0.1.15.dev442}/tests/v1/fixtures/echo_user_sim_v1.py +0 -0
- {verifiers-0.1.15.dev441 → verifiers-0.1.15.dev442}/tests/v1/fixtures/echo_v0.py +0 -0
- {verifiers-0.1.15.dev441 → verifiers-0.1.15.dev442}/tests/v1/fixtures/echo_v1.py +0 -0
- {verifiers-0.1.15.dev441 → verifiers-0.1.15.dev442}/tests/v1/fixtures/pyproject.toml +0 -0
- {verifiers-0.1.15.dev441 → verifiers-0.1.15.dev442}/tests/v1/fixtures/tool_response_image_v1.py +0 -0
- {verifiers-0.1.15.dev441 → verifiers-0.1.15.dev442}/tests/v1/test_color_codeword_tasks.py +0 -0
- {verifiers-0.1.15.dev441 → verifiers-0.1.15.dev442}/tests/v1/test_configs.py +0 -0
- {verifiers-0.1.15.dev441 → verifiers-0.1.15.dev442}/tests/v1/test_e2e.py +0 -0
- {verifiers-0.1.15.dev441 → verifiers-0.1.15.dev442}/tests/v1/test_envs.py +0 -0
- {verifiers-0.1.15.dev441 → verifiers-0.1.15.dev442}/tests/v1/test_graph.py +0 -0
- {verifiers-0.1.15.dev441 → verifiers-0.1.15.dev442}/tests/v1/test_judges.py +0 -0
- {verifiers-0.1.15.dev441 → verifiers-0.1.15.dev442}/tests/v1/test_legacy.py +0 -0
- {verifiers-0.1.15.dev441 → verifiers-0.1.15.dev442}/tests/v1/test_scoring.py +0 -0
- {verifiers-0.1.15.dev441 → verifiers-0.1.15.dev442}/tests/v1/test_trace.py +0 -0
- {verifiers-0.1.15.dev441 → verifiers-0.1.15.dev442}/verifiers/__init__.py +0 -0
- {verifiers-0.1.15.dev441 → verifiers-0.1.15.dev442}/verifiers/cli/__init__.py +0 -0
- {verifiers-0.1.15.dev441 → verifiers-0.1.15.dev442}/verifiers/cli/commands/__init__.py +0 -0
- {verifiers-0.1.15.dev441 → verifiers-0.1.15.dev442}/verifiers/cli/commands/build.py +0 -0
- {verifiers-0.1.15.dev441 → verifiers-0.1.15.dev442}/verifiers/cli/commands/eval.py +0 -0
- {verifiers-0.1.15.dev441 → verifiers-0.1.15.dev442}/verifiers/cli/commands/gepa.py +0 -0
- {verifiers-0.1.15.dev441 → verifiers-0.1.15.dev442}/verifiers/cli/commands/init.py +0 -0
- {verifiers-0.1.15.dev441 → verifiers-0.1.15.dev442}/verifiers/cli/commands/install.py +0 -0
- {verifiers-0.1.15.dev441 → verifiers-0.1.15.dev442}/verifiers/cli/commands/setup.py +0 -0
- {verifiers-0.1.15.dev441 → verifiers-0.1.15.dev442}/verifiers/cli/plugins/__init__.py +0 -0
- {verifiers-0.1.15.dev441 → verifiers-0.1.15.dev442}/verifiers/cli/plugins/prime.py +0 -0
- {verifiers-0.1.15.dev441 → verifiers-0.1.15.dev442}/verifiers/cli/tui.py +0 -0
- {verifiers-0.1.15.dev441 → verifiers-0.1.15.dev442}/verifiers/clients/__init__.py +0 -0
- {verifiers-0.1.15.dev441 → verifiers-0.1.15.dev442}/verifiers/clients/anthropic_messages_client.py +0 -0
- {verifiers-0.1.15.dev441 → verifiers-0.1.15.dev442}/verifiers/clients/client.py +0 -0
- {verifiers-0.1.15.dev441 → verifiers-0.1.15.dev442}/verifiers/clients/nemorl_chat_completions_client.py +0 -0
- {verifiers-0.1.15.dev441 → verifiers-0.1.15.dev442}/verifiers/clients/openai_chat_completions_client.py +0 -0
- {verifiers-0.1.15.dev441 → verifiers-0.1.15.dev442}/verifiers/clients/openai_chat_completions_token_client.py +0 -0
- {verifiers-0.1.15.dev441 → verifiers-0.1.15.dev442}/verifiers/clients/openai_completions_client.py +0 -0
- {verifiers-0.1.15.dev441 → verifiers-0.1.15.dev442}/verifiers/clients/openai_responses_client.py +0 -0
- {verifiers-0.1.15.dev441 → verifiers-0.1.15.dev442}/verifiers/clients/renderer_client.py +0 -0
- {verifiers-0.1.15.dev441 → verifiers-0.1.15.dev442}/verifiers/decorators.py +0 -0
- {verifiers-0.1.15.dev441 → verifiers-0.1.15.dev442}/verifiers/envs/AGENTS.md +0 -0
- {verifiers-0.1.15.dev441 → verifiers-0.1.15.dev442}/verifiers/envs/__init__.py +0 -0
- {verifiers-0.1.15.dev441 → verifiers-0.1.15.dev442}/verifiers/envs/env_group.py +0 -0
- {verifiers-0.1.15.dev441 → verifiers-0.1.15.dev442}/verifiers/envs/environment.py +0 -0
- {verifiers-0.1.15.dev441 → verifiers-0.1.15.dev442}/verifiers/envs/experimental/README.md +0 -0
- {verifiers-0.1.15.dev441 → verifiers-0.1.15.dev442}/verifiers/envs/experimental/__init__.py +0 -0
- {verifiers-0.1.15.dev441 → verifiers-0.1.15.dev442}/verifiers/envs/experimental/cli_agent_env.py +0 -0
- {verifiers-0.1.15.dev441 → verifiers-0.1.15.dev442}/verifiers/envs/experimental/composable/README.md +0 -0
- {verifiers-0.1.15.dev441 → verifiers-0.1.15.dev442}/verifiers/envs/experimental/composable/__init__.py +0 -0
- {verifiers-0.1.15.dev441 → verifiers-0.1.15.dev442}/verifiers/envs/experimental/composable/_filter.py +0 -0
- {verifiers-0.1.15.dev441 → verifiers-0.1.15.dev442}/verifiers/envs/experimental/composable/composable_env.py +0 -0
- {verifiers-0.1.15.dev441 → verifiers-0.1.15.dev442}/verifiers/envs/experimental/composable/harness.py +0 -0
- {verifiers-0.1.15.dev441 → verifiers-0.1.15.dev442}/verifiers/envs/experimental/composable/harnesses/__init__.py +0 -0
- {verifiers-0.1.15.dev441 → verifiers-0.1.15.dev442}/verifiers/envs/experimental/composable/harnesses/mini_swe_agent.py +0 -0
- {verifiers-0.1.15.dev441 → verifiers-0.1.15.dev442}/verifiers/envs/experimental/composable/harnesses/opencode.py +0 -0
- {verifiers-0.1.15.dev441 → verifiers-0.1.15.dev442}/verifiers/envs/experimental/composable/harnesses/prompt.txt +0 -0
- {verifiers-0.1.15.dev441 → verifiers-0.1.15.dev442}/verifiers/envs/experimental/composable/harnesses/rlm.py +0 -0
- {verifiers-0.1.15.dev441 → verifiers-0.1.15.dev442}/verifiers/envs/experimental/composable/sandbox_debug_env.py +0 -0
- {verifiers-0.1.15.dev441 → verifiers-0.1.15.dev442}/verifiers/envs/experimental/composable/swe_debug_env.py +0 -0
- {verifiers-0.1.15.dev441 → verifiers-0.1.15.dev442}/verifiers/envs/experimental/composable/task.py +0 -0
- {verifiers-0.1.15.dev441 → verifiers-0.1.15.dev442}/verifiers/envs/experimental/composable/tasksets/__init__.py +0 -0
- {verifiers-0.1.15.dev441 → verifiers-0.1.15.dev442}/verifiers/envs/experimental/composable/tasksets/cp/__init__.py +0 -0
- {verifiers-0.1.15.dev441 → verifiers-0.1.15.dev442}/verifiers/envs/experimental/composable/tasksets/cp/cp_task.py +0 -0
- {verifiers-0.1.15.dev441 → verifiers-0.1.15.dev442}/verifiers/envs/experimental/composable/tasksets/cp/test_utils.py +0 -0
- {verifiers-0.1.15.dev441 → verifiers-0.1.15.dev442}/verifiers/envs/experimental/composable/tasksets/harbor/__init__.py +0 -0
- {verifiers-0.1.15.dev441 → verifiers-0.1.15.dev442}/verifiers/envs/experimental/composable/tasksets/harbor/cli_gym.py +0 -0
- {verifiers-0.1.15.dev441 → verifiers-0.1.15.dev442}/verifiers/envs/experimental/composable/tasksets/harbor/harbor.py +0 -0
- {verifiers-0.1.15.dev441 → verifiers-0.1.15.dev442}/verifiers/envs/experimental/composable/tasksets/harbor/terminal_lego.py +0 -0
- {verifiers-0.1.15.dev441 → verifiers-0.1.15.dev442}/verifiers/envs/experimental/composable/tasksets/math/__init__.py +0 -0
- {verifiers-0.1.15.dev441 → verifiers-0.1.15.dev442}/verifiers/envs/experimental/composable/tasksets/math/math_task.py +0 -0
- {verifiers-0.1.15.dev441 → verifiers-0.1.15.dev442}/verifiers/envs/experimental/composable/tasksets/search/README.md +0 -0
- {verifiers-0.1.15.dev441 → verifiers-0.1.15.dev442}/verifiers/envs/experimental/composable/tasksets/search/__init__.py +0 -0
- {verifiers-0.1.15.dev441 → verifiers-0.1.15.dev442}/verifiers/envs/experimental/composable/tasksets/search/openseeker/README.md +0 -0
- {verifiers-0.1.15.dev441 → verifiers-0.1.15.dev442}/verifiers/envs/experimental/composable/tasksets/search/openseeker/__init__.py +0 -0
- {verifiers-0.1.15.dev441 → verifiers-0.1.15.dev442}/verifiers/envs/experimental/composable/tasksets/search/openseeker/taskset.py +0 -0
- {verifiers-0.1.15.dev441 → verifiers-0.1.15.dev442}/verifiers/envs/experimental/composable/tasksets/search/quest/README.md +0 -0
- {verifiers-0.1.15.dev441 → verifiers-0.1.15.dev442}/verifiers/envs/experimental/composable/tasksets/search/quest/__init__.py +0 -0
- {verifiers-0.1.15.dev441 → verifiers-0.1.15.dev442}/verifiers/envs/experimental/composable/tasksets/search/quest/obj_task_eval/__init__.py +0 -0
- {verifiers-0.1.15.dev441 → verifiers-0.1.15.dev442}/verifiers/envs/experimental/composable/tasksets/search/quest/obj_task_eval/api_tools/__init__.py +0 -0
- {verifiers-0.1.15.dev441 → verifiers-0.1.15.dev442}/verifiers/envs/experimental/composable/tasksets/search/quest/obj_task_eval/api_tools/tool_pdf.py +0 -0
- {verifiers-0.1.15.dev441 → verifiers-0.1.15.dev442}/verifiers/envs/experimental/composable/tasksets/search/quest/obj_task_eval/eval_toolkit.py +0 -0
- {verifiers-0.1.15.dev441 → verifiers-0.1.15.dev442}/verifiers/envs/experimental/composable/tasksets/search/quest/obj_task_eval/evaluator.py +0 -0
- {verifiers-0.1.15.dev441 → verifiers-0.1.15.dev442}/verifiers/envs/experimental/composable/tasksets/search/quest/obj_task_eval/llm_client/__init__.py +0 -0
- {verifiers-0.1.15.dev441 → verifiers-0.1.15.dev442}/verifiers/envs/experimental/composable/tasksets/search/quest/obj_task_eval/llm_client/base_client.py +0 -0
- {verifiers-0.1.15.dev441 → verifiers-0.1.15.dev442}/verifiers/envs/experimental/composable/tasksets/search/quest/obj_task_eval/prompts/__init__.py +0 -0
- {verifiers-0.1.15.dev441 → verifiers-0.1.15.dev442}/verifiers/envs/experimental/composable/tasksets/search/quest/obj_task_eval/prompts/cache_prompts.py +0 -0
- {verifiers-0.1.15.dev441 → verifiers-0.1.15.dev442}/verifiers/envs/experimental/composable/tasksets/search/quest/obj_task_eval/utils/__init__.py +0 -0
- {verifiers-0.1.15.dev441 → verifiers-0.1.15.dev442}/verifiers/envs/experimental/composable/tasksets/search/quest/obj_task_eval/utils/cache_filesys.py +0 -0
- {verifiers-0.1.15.dev441 → verifiers-0.1.15.dev442}/verifiers/envs/experimental/composable/tasksets/search/quest/obj_task_eval/utils/load_eval_script.py +0 -0
- {verifiers-0.1.15.dev441 → verifiers-0.1.15.dev442}/verifiers/envs/experimental/composable/tasksets/search/quest/obj_task_eval/utils/misc.py +0 -0
- {verifiers-0.1.15.dev441 → verifiers-0.1.15.dev442}/verifiers/envs/experimental/composable/tasksets/search/quest/obj_task_eval/utils/tool_visit.py +0 -0
- {verifiers-0.1.15.dev441 → verifiers-0.1.15.dev442}/verifiers/envs/experimental/composable/tasksets/search/quest/obj_task_eval/utils/url_tools.py +0 -0
- {verifiers-0.1.15.dev441 → verifiers-0.1.15.dev442}/verifiers/envs/experimental/composable/tasksets/search/quest/obj_task_eval/verification_tree.py +0 -0
- {verifiers-0.1.15.dev441 → verifiers-0.1.15.dev442}/verifiers/envs/experimental/composable/tasksets/search/quest/open_ended.py +0 -0
- {verifiers-0.1.15.dev441 → verifiers-0.1.15.dev442}/verifiers/envs/experimental/composable/tasksets/search/quest/taskset.py +0 -0
- {verifiers-0.1.15.dev441 → verifiers-0.1.15.dev442}/verifiers/envs/experimental/composable/tasksets/search/redsearcher/README.md +0 -0
- {verifiers-0.1.15.dev441 → verifiers-0.1.15.dev442}/verifiers/envs/experimental/composable/tasksets/search/redsearcher/__init__.py +0 -0
- {verifiers-0.1.15.dev441 → verifiers-0.1.15.dev442}/verifiers/envs/experimental/composable/tasksets/search/redsearcher/taskset.py +0 -0
- {verifiers-0.1.15.dev441 → verifiers-0.1.15.dev442}/verifiers/envs/experimental/composable/tasksets/search/search_tasksets.py +0 -0
- {verifiers-0.1.15.dev441 → verifiers-0.1.15.dev442}/verifiers/envs/experimental/composable/tasksets/swe/README.md +0 -0
- {verifiers-0.1.15.dev441 → verifiers-0.1.15.dev442}/verifiers/envs/experimental/composable/tasksets/swe/__init__.py +0 -0
- {verifiers-0.1.15.dev441 → verifiers-0.1.15.dev442}/verifiers/envs/experimental/composable/tasksets/swe/multi_swe/__init__.py +0 -0
- {verifiers-0.1.15.dev441 → verifiers-0.1.15.dev442}/verifiers/envs/experimental/composable/tasksets/swe/multi_swe/extract_fix_patch.sh +0 -0
- {verifiers-0.1.15.dev441 → verifiers-0.1.15.dev442}/verifiers/envs/experimental/composable/tasksets/swe/multi_swe/taskset.py +0 -0
- {verifiers-0.1.15.dev441 → verifiers-0.1.15.dev442}/verifiers/envs/experimental/composable/tasksets/swe/openswe/__init__.py +0 -0
- {verifiers-0.1.15.dev441 → verifiers-0.1.15.dev442}/verifiers/envs/experimental/composable/tasksets/swe/openswe/taskset.py +0 -0
- {verifiers-0.1.15.dev441 → verifiers-0.1.15.dev442}/verifiers/envs/experimental/composable/tasksets/swe/r2e_gym/__init__.py +0 -0
- {verifiers-0.1.15.dev441 → verifiers-0.1.15.dev442}/verifiers/envs/experimental/composable/tasksets/swe/r2e_gym/log_parser.py +0 -0
- {verifiers-0.1.15.dev441 → verifiers-0.1.15.dev442}/verifiers/envs/experimental/composable/tasksets/swe/r2e_gym/taskset.py +0 -0
- {verifiers-0.1.15.dev441 → verifiers-0.1.15.dev442}/verifiers/envs/experimental/composable/tasksets/swe/scale_swe/__init__.py +0 -0
- {verifiers-0.1.15.dev441 → verifiers-0.1.15.dev442}/verifiers/envs/experimental/composable/tasksets/swe/scale_swe/taskset.py +0 -0
- {verifiers-0.1.15.dev441 → verifiers-0.1.15.dev442}/verifiers/envs/experimental/composable/tasksets/swe/shared/__init__.py +0 -0
- {verifiers-0.1.15.dev441 → verifiers-0.1.15.dev442}/verifiers/envs/experimental/composable/tasksets/swe/shared/test_patch.py +0 -0
- {verifiers-0.1.15.dev441 → verifiers-0.1.15.dev442}/verifiers/envs/experimental/composable/tasksets/swe/swe_bench/__init__.py +0 -0
- {verifiers-0.1.15.dev441 → verifiers-0.1.15.dev442}/verifiers/envs/experimental/composable/tasksets/swe/swe_bench/taskset.py +0 -0
- {verifiers-0.1.15.dev441 → verifiers-0.1.15.dev442}/verifiers/envs/experimental/composable/tasksets/swe/swe_lego/__init__.py +0 -0
- {verifiers-0.1.15.dev441 → verifiers-0.1.15.dev442}/verifiers/envs/experimental/composable/tasksets/swe/swe_lego/taskset.py +0 -0
- {verifiers-0.1.15.dev441 → verifiers-0.1.15.dev442}/verifiers/envs/experimental/composable/tasksets/swe/swe_rebench_v2/__init__.py +0 -0
- {verifiers-0.1.15.dev441 → verifiers-0.1.15.dev442}/verifiers/envs/experimental/composable/tasksets/swe/swe_rebench_v2/log_parsers.py +0 -0
- {verifiers-0.1.15.dev441 → verifiers-0.1.15.dev442}/verifiers/envs/experimental/composable/tasksets/swe/swe_rebench_v2/taskset.py +0 -0
- {verifiers-0.1.15.dev441 → verifiers-0.1.15.dev442}/verifiers/envs/experimental/composable/tasksets/swe/swe_smith/__init__.py +0 -0
- {verifiers-0.1.15.dev441 → verifiers-0.1.15.dev442}/verifiers/envs/experimental/composable/tasksets/swe/swe_smith/taskset.py +0 -0
- {verifiers-0.1.15.dev441 → verifiers-0.1.15.dev442}/verifiers/envs/experimental/composable/tasksets/swe/swe_tasksets.py +0 -0
- {verifiers-0.1.15.dev441 → verifiers-0.1.15.dev442}/verifiers/envs/experimental/gym_env.py +0 -0
- {verifiers-0.1.15.dev441 → verifiers-0.1.15.dev442}/verifiers/envs/experimental/harbor_env/__init__.py +0 -0
- {verifiers-0.1.15.dev441 → verifiers-0.1.15.dev442}/verifiers/envs/experimental/harbor_env/env.py +0 -0
- {verifiers-0.1.15.dev441 → verifiers-0.1.15.dev442}/verifiers/envs/experimental/harbor_env/mcp.py +0 -0
- {verifiers-0.1.15.dev441 → verifiers-0.1.15.dev442}/verifiers/envs/experimental/mcp_env.py +0 -0
- {verifiers-0.1.15.dev441 → verifiers-0.1.15.dev442}/verifiers/envs/experimental/opencode_env.py +0 -0
- {verifiers-0.1.15.dev441 → verifiers-0.1.15.dev442}/verifiers/envs/experimental/opencode_qa_env.py +0 -0
- {verifiers-0.1.15.dev441 → verifiers-0.1.15.dev442}/verifiers/envs/experimental/opencode_rlm_env.py +0 -0
- {verifiers-0.1.15.dev441 → verifiers-0.1.15.dev442}/verifiers/envs/experimental/sandbox_mixin.py +0 -0
- {verifiers-0.1.15.dev441 → verifiers-0.1.15.dev442}/verifiers/envs/experimental/utils/__init__.py +0 -0
- {verifiers-0.1.15.dev441 → verifiers-0.1.15.dev442}/verifiers/envs/experimental/utils/file_locks.py +0 -0
- {verifiers-0.1.15.dev441 → verifiers-0.1.15.dev442}/verifiers/envs/experimental/utils/git_checkout_cache.py +0 -0
- {verifiers-0.1.15.dev441 → verifiers-0.1.15.dev442}/verifiers/envs/integrations/README.md +0 -0
- {verifiers-0.1.15.dev441 → verifiers-0.1.15.dev442}/verifiers/envs/integrations/__init__.py +0 -0
- {verifiers-0.1.15.dev441 → verifiers-0.1.15.dev442}/verifiers/envs/integrations/browser_env/README.md +0 -0
- {verifiers-0.1.15.dev441 → verifiers-0.1.15.dev442}/verifiers/envs/integrations/browser_env/__init__.py +0 -0
- {verifiers-0.1.15.dev441 → verifiers-0.1.15.dev442}/verifiers/envs/integrations/browser_env/browser_env.py +0 -0
- {verifiers-0.1.15.dev441 → verifiers-0.1.15.dev442}/verifiers/envs/integrations/browser_env/modes/__init__.py +0 -0
- {verifiers-0.1.15.dev441 → verifiers-0.1.15.dev442}/verifiers/envs/integrations/browser_env/modes/base.py +0 -0
- {verifiers-0.1.15.dev441 → verifiers-0.1.15.dev442}/verifiers/envs/integrations/browser_env/modes/cua_mode.py +0 -0
- {verifiers-0.1.15.dev441 → verifiers-0.1.15.dev442}/verifiers/envs/integrations/browser_env/modes/dom_mode.py +0 -0
- {verifiers-0.1.15.dev441 → verifiers-0.1.15.dev442}/verifiers/envs/integrations/openenv_env.py +0 -0
- {verifiers-0.1.15.dev441 → verifiers-0.1.15.dev442}/verifiers/envs/integrations/reasoninggym_env.py +0 -0
- {verifiers-0.1.15.dev441 → verifiers-0.1.15.dev442}/verifiers/envs/integrations/textarena_env.py +0 -0
- {verifiers-0.1.15.dev441 → verifiers-0.1.15.dev442}/verifiers/envs/multiturn_env.py +0 -0
- {verifiers-0.1.15.dev441 → verifiers-0.1.15.dev442}/verifiers/envs/python_env.py +0 -0
- {verifiers-0.1.15.dev441 → verifiers-0.1.15.dev442}/verifiers/envs/sandbox_env.py +0 -0
- {verifiers-0.1.15.dev441 → verifiers-0.1.15.dev442}/verifiers/envs/singleturn_env.py +0 -0
- {verifiers-0.1.15.dev441 → verifiers-0.1.15.dev442}/verifiers/envs/stateful_tool_env.py +0 -0
- {verifiers-0.1.15.dev441 → verifiers-0.1.15.dev442}/verifiers/envs/tool_env.py +0 -0
- {verifiers-0.1.15.dev441 → verifiers-0.1.15.dev442}/verifiers/errors.py +0 -0
- {verifiers-0.1.15.dev441 → verifiers-0.1.15.dev442}/verifiers/gepa/__init__.py +0 -0
- {verifiers-0.1.15.dev441 → verifiers-0.1.15.dev442}/verifiers/gepa/adapter.py +0 -0
- {verifiers-0.1.15.dev441 → verifiers-0.1.15.dev442}/verifiers/gepa/config.py +0 -0
- {verifiers-0.1.15.dev441 → verifiers-0.1.15.dev442}/verifiers/gepa/display.py +0 -0
- {verifiers-0.1.15.dev441 → verifiers-0.1.15.dev442}/verifiers/gepa/gepa_utils.py +0 -0
- {verifiers-0.1.15.dev441 → verifiers-0.1.15.dev442}/verifiers/parsers/__init__.py +0 -0
- {verifiers-0.1.15.dev441 → verifiers-0.1.15.dev442}/verifiers/parsers/maybe_think_parser.py +0 -0
- {verifiers-0.1.15.dev441 → verifiers-0.1.15.dev442}/verifiers/parsers/parser.py +0 -0
- {verifiers-0.1.15.dev441 → verifiers-0.1.15.dev442}/verifiers/parsers/think_parser.py +0 -0
- {verifiers-0.1.15.dev441 → verifiers-0.1.15.dev442}/verifiers/parsers/xml_parser.py +0 -0
- {verifiers-0.1.15.dev441 → verifiers-0.1.15.dev442}/verifiers/rubrics/__init__.py +0 -0
- {verifiers-0.1.15.dev441 → verifiers-0.1.15.dev442}/verifiers/rubrics/experimental/hybrid_math_rubric.py +0 -0
- {verifiers-0.1.15.dev441 → verifiers-0.1.15.dev442}/verifiers/rubrics/judge_rubric.py +0 -0
- {verifiers-0.1.15.dev441 → verifiers-0.1.15.dev442}/verifiers/rubrics/math_rubric.py +0 -0
- {verifiers-0.1.15.dev441 → verifiers-0.1.15.dev442}/verifiers/rubrics/rubric.py +0 -0
- {verifiers-0.1.15.dev441 → verifiers-0.1.15.dev442}/verifiers/rubrics/rubric_group.py +0 -0
- {verifiers-0.1.15.dev441 → verifiers-0.1.15.dev442}/verifiers/scripts/__init__.py +0 -0
- {verifiers-0.1.15.dev441 → verifiers-0.1.15.dev442}/verifiers/scripts/build.py +0 -0
- {verifiers-0.1.15.dev441 → verifiers-0.1.15.dev442}/verifiers/scripts/eval.py +0 -0
- {verifiers-0.1.15.dev441 → verifiers-0.1.15.dev442}/verifiers/scripts/gepa.py +0 -0
- {verifiers-0.1.15.dev441 → verifiers-0.1.15.dev442}/verifiers/scripts/init.py +0 -0
- {verifiers-0.1.15.dev441 → verifiers-0.1.15.dev442}/verifiers/scripts/install.py +0 -0
- {verifiers-0.1.15.dev441 → verifiers-0.1.15.dev442}/verifiers/scripts/setup.py +0 -0
- {verifiers-0.1.15.dev441 → verifiers-0.1.15.dev442}/verifiers/scripts/tui.py +0 -0
- {verifiers-0.1.15.dev441 → verifiers-0.1.15.dev442}/verifiers/serve/__init__.py +0 -0
- {verifiers-0.1.15.dev441 → verifiers-0.1.15.dev442}/verifiers/serve/client/env_client.py +0 -0
- {verifiers-0.1.15.dev441 → verifiers-0.1.15.dev442}/verifiers/serve/client/zmq_env_client.py +0 -0
- {verifiers-0.1.15.dev441 → verifiers-0.1.15.dev442}/verifiers/serve/server/__init__.py +0 -0
- {verifiers-0.1.15.dev441 → verifiers-0.1.15.dev442}/verifiers/serve/server/env_router.py +0 -0
- {verifiers-0.1.15.dev441 → verifiers-0.1.15.dev442}/verifiers/serve/server/env_server.py +0 -0
- {verifiers-0.1.15.dev441 → verifiers-0.1.15.dev442}/verifiers/serve/server/env_worker.py +0 -0
- {verifiers-0.1.15.dev441 → verifiers-0.1.15.dev442}/verifiers/serve/server/zmq_env_server.py +0 -0
- {verifiers-0.1.15.dev441 → verifiers-0.1.15.dev442}/verifiers/serve/types.py +0 -0
- {verifiers-0.1.15.dev441 → verifiers-0.1.15.dev442}/verifiers/types.py +0 -0
- {verifiers-0.1.15.dev441 → verifiers-0.1.15.dev442}/verifiers/utils/__init__.py +0 -0
- {verifiers-0.1.15.dev441 → verifiers-0.1.15.dev442}/verifiers/utils/async_utils.py +0 -0
- {verifiers-0.1.15.dev441 → verifiers-0.1.15.dev442}/verifiers/utils/client_utils.py +0 -0
- {verifiers-0.1.15.dev441 → verifiers-0.1.15.dev442}/verifiers/utils/config_utils.py +0 -0
- {verifiers-0.1.15.dev441 → verifiers-0.1.15.dev442}/verifiers/utils/data_utils.py +0 -0
- {verifiers-0.1.15.dev441 → verifiers-0.1.15.dev442}/verifiers/utils/display_utils.py +0 -0
- {verifiers-0.1.15.dev441 → verifiers-0.1.15.dev442}/verifiers/utils/env_config_utils.py +0 -0
- {verifiers-0.1.15.dev441 → verifiers-0.1.15.dev442}/verifiers/utils/env_utils.py +0 -0
- {verifiers-0.1.15.dev441 → verifiers-0.1.15.dev442}/verifiers/utils/error_utils.py +0 -0
- {verifiers-0.1.15.dev441 → verifiers-0.1.15.dev442}/verifiers/utils/eval_display.py +0 -0
- {verifiers-0.1.15.dev441 → verifiers-0.1.15.dev442}/verifiers/utils/eval_utils.py +0 -0
- {verifiers-0.1.15.dev441 → verifiers-0.1.15.dev442}/verifiers/utils/heartbeat.py +0 -0
- {verifiers-0.1.15.dev441 → verifiers-0.1.15.dev442}/verifiers/utils/import_utils.py +0 -0
- {verifiers-0.1.15.dev441 → verifiers-0.1.15.dev442}/verifiers/utils/install_utils.py +0 -0
- {verifiers-0.1.15.dev441 → verifiers-0.1.15.dev442}/verifiers/utils/interception_utils.py +0 -0
- {verifiers-0.1.15.dev441 → verifiers-0.1.15.dev442}/verifiers/utils/logging_utils.py +0 -0
- {verifiers-0.1.15.dev441 → verifiers-0.1.15.dev442}/verifiers/utils/message_utils.py +0 -0
- {verifiers-0.1.15.dev441 → verifiers-0.1.15.dev442}/verifiers/utils/metric_utils.py +0 -0
- {verifiers-0.1.15.dev441 → verifiers-0.1.15.dev442}/verifiers/utils/path_utils.py +0 -0
- {verifiers-0.1.15.dev441 → verifiers-0.1.15.dev442}/verifiers/utils/pricing_utils.py +0 -0
- {verifiers-0.1.15.dev441 → verifiers-0.1.15.dev442}/verifiers/utils/process_utils.py +0 -0
- {verifiers-0.1.15.dev441 → verifiers-0.1.15.dev442}/verifiers/utils/response_utils.py +0 -0
- {verifiers-0.1.15.dev441 → verifiers-0.1.15.dev442}/verifiers/utils/save_utils.py +0 -0
- {verifiers-0.1.15.dev441 → verifiers-0.1.15.dev442}/verifiers/utils/serve_utils.py +0 -0
- {verifiers-0.1.15.dev441 → verifiers-0.1.15.dev442}/verifiers/utils/thread_utils.py +0 -0
- {verifiers-0.1.15.dev441 → verifiers-0.1.15.dev442}/verifiers/utils/threaded_sandbox_client.py +0 -0
- {verifiers-0.1.15.dev441 → verifiers-0.1.15.dev442}/verifiers/utils/tool_utils.py +0 -0
- {verifiers-0.1.15.dev441 → verifiers-0.1.15.dev442}/verifiers/utils/usage_utils.py +0 -0
- {verifiers-0.1.15.dev441 → verifiers-0.1.15.dev442}/verifiers/utils/version_utils.py +0 -0
- {verifiers-0.1.15.dev441 → verifiers-0.1.15.dev442}/verifiers/v1/__init__.py +0 -0
- {verifiers-0.1.15.dev441 → verifiers-0.1.15.dev442}/verifiers/v1/cli/__init__.py +0 -0
- {verifiers-0.1.15.dev441 → verifiers-0.1.15.dev442}/verifiers/v1/cli/dashboard/__init__.py +0 -0
- {verifiers-0.1.15.dev441 → verifiers-0.1.15.dev442}/verifiers/v1/cli/dashboard/base.py +0 -0
- {verifiers-0.1.15.dev441 → verifiers-0.1.15.dev442}/verifiers/v1/cli/dashboard/replay.py +0 -0
- {verifiers-0.1.15.dev441 → verifiers-0.1.15.dev442}/verifiers/v1/cli/dashboard/validate.py +0 -0
- {verifiers-0.1.15.dev441 → verifiers-0.1.15.dev442}/verifiers/v1/cli/debug.py +0 -0
- {verifiers-0.1.15.dev441 → verifiers-0.1.15.dev442}/verifiers/v1/cli/eval/__init__.py +0 -0
- {verifiers-0.1.15.dev441 → verifiers-0.1.15.dev442}/verifiers/v1/cli/eval/main.py +0 -0
- {verifiers-0.1.15.dev441 → verifiers-0.1.15.dev442}/verifiers/v1/cli/init.py +0 -0
- {verifiers-0.1.15.dev441 → verifiers-0.1.15.dev442}/verifiers/v1/cli/output.py +0 -0
- {verifiers-0.1.15.dev441 → verifiers-0.1.15.dev442}/verifiers/v1/cli/replay.py +0 -0
- {verifiers-0.1.15.dev441 → verifiers-0.1.15.dev442}/verifiers/v1/cli/resolve.py +0 -0
- {verifiers-0.1.15.dev441 → verifiers-0.1.15.dev442}/verifiers/v1/cli/serve.py +0 -0
- {verifiers-0.1.15.dev441 → verifiers-0.1.15.dev442}/verifiers/v1/cli/validate.py +0 -0
- {verifiers-0.1.15.dev441 → verifiers-0.1.15.dev442}/verifiers/v1/clients/__init__.py +0 -0
- {verifiers-0.1.15.dev441 → verifiers-0.1.15.dev442}/verifiers/v1/clients/client.py +0 -0
- {verifiers-0.1.15.dev441 → verifiers-0.1.15.dev442}/verifiers/v1/clients/config.py +0 -0
- {verifiers-0.1.15.dev441 → verifiers-0.1.15.dev442}/verifiers/v1/clients/eval.py +0 -0
- {verifiers-0.1.15.dev441 → verifiers-0.1.15.dev442}/verifiers/v1/clients/train.py +0 -0
- {verifiers-0.1.15.dev441 → verifiers-0.1.15.dev442}/verifiers/v1/configs/__init__.py +0 -0
- {verifiers-0.1.15.dev441 → verifiers-0.1.15.dev442}/verifiers/v1/configs/debug.py +0 -0
- {verifiers-0.1.15.dev441 → verifiers-0.1.15.dev442}/verifiers/v1/configs/eval.py +0 -0
- {verifiers-0.1.15.dev441 → verifiers-0.1.15.dev442}/verifiers/v1/configs/init.py +0 -0
- {verifiers-0.1.15.dev441 → verifiers-0.1.15.dev442}/verifiers/v1/configs/replay.py +0 -0
- {verifiers-0.1.15.dev441 → verifiers-0.1.15.dev442}/verifiers/v1/configs/serve.py +0 -0
- {verifiers-0.1.15.dev441 → verifiers-0.1.15.dev442}/verifiers/v1/configs/validate.py +0 -0
- {verifiers-0.1.15.dev441 → verifiers-0.1.15.dev442}/verifiers/v1/decorators.py +0 -0
- {verifiers-0.1.15.dev441 → verifiers-0.1.15.dev442}/verifiers/v1/dialects/__init__.py +0 -0
- {verifiers-0.1.15.dev441 → verifiers-0.1.15.dev442}/verifiers/v1/dialects/anthropic.py +0 -0
- {verifiers-0.1.15.dev441 → verifiers-0.1.15.dev442}/verifiers/v1/dialects/base.py +0 -0
- {verifiers-0.1.15.dev441 → verifiers-0.1.15.dev442}/verifiers/v1/dialects/chat.py +0 -0
- {verifiers-0.1.15.dev441 → verifiers-0.1.15.dev442}/verifiers/v1/dialects/responses.py +0 -0
- {verifiers-0.1.15.dev441 → verifiers-0.1.15.dev442}/verifiers/v1/env.py +0 -0
- {verifiers-0.1.15.dev441 → verifiers-0.1.15.dev442}/verifiers/v1/episode.py +0 -0
- {verifiers-0.1.15.dev441 → verifiers-0.1.15.dev442}/verifiers/v1/errors.py +0 -0
- {verifiers-0.1.15.dev441 → verifiers-0.1.15.dev442}/verifiers/v1/graph.py +0 -0
- {verifiers-0.1.15.dev441 → verifiers-0.1.15.dev442}/verifiers/v1/harness.py +0 -0
- {verifiers-0.1.15.dev441 → verifiers-0.1.15.dev442}/verifiers/v1/harnesses/__init__.py +0 -0
- {verifiers-0.1.15.dev441 → verifiers-0.1.15.dev442}/verifiers/v1/harnesses/codex/__init__.py +0 -0
- {verifiers-0.1.15.dev441 → verifiers-0.1.15.dev442}/verifiers/v1/harnesses/codex/harness.py +0 -0
- {verifiers-0.1.15.dev441 → verifiers-0.1.15.dev442}/verifiers/v1/harnesses/default/__init__.py +0 -0
- {verifiers-0.1.15.dev441 → verifiers-0.1.15.dev442}/verifiers/v1/harnesses/default/harness.py +0 -0
- {verifiers-0.1.15.dev441 → verifiers-0.1.15.dev442}/verifiers/v1/harnesses/default/program.py +0 -0
- {verifiers-0.1.15.dev441 → verifiers-0.1.15.dev442}/verifiers/v1/harnesses/kimi_code/__init__.py +0 -0
- {verifiers-0.1.15.dev441 → verifiers-0.1.15.dev442}/verifiers/v1/harnesses/kimi_code/harness.py +0 -0
- {verifiers-0.1.15.dev441 → verifiers-0.1.15.dev442}/verifiers/v1/harnesses/mini_swe_agent/__init__.py +0 -0
- {verifiers-0.1.15.dev441 → verifiers-0.1.15.dev442}/verifiers/v1/harnesses/mini_swe_agent/harness.py +0 -0
- {verifiers-0.1.15.dev441 → verifiers-0.1.15.dev442}/verifiers/v1/harnesses/mini_swe_agent/program.py +0 -0
- {verifiers-0.1.15.dev441 → verifiers-0.1.15.dev442}/verifiers/v1/harnesses/null/__init__.py +0 -0
- {verifiers-0.1.15.dev441 → verifiers-0.1.15.dev442}/verifiers/v1/harnesses/null/harness.py +0 -0
- {verifiers-0.1.15.dev441 → verifiers-0.1.15.dev442}/verifiers/v1/harnesses/null/program.py +0 -0
- {verifiers-0.1.15.dev441 → verifiers-0.1.15.dev442}/verifiers/v1/harnesses/rlm/__init__.py +0 -0
- {verifiers-0.1.15.dev441 → verifiers-0.1.15.dev442}/verifiers/v1/harnesses/rlm/harness.py +0 -0
- {verifiers-0.1.15.dev441 → verifiers-0.1.15.dev442}/verifiers/v1/harnesses/terminus_2/__init__.py +0 -0
- {verifiers-0.1.15.dev441 → verifiers-0.1.15.dev442}/verifiers/v1/harnesses/terminus_2/harness.py +0 -0
- {verifiers-0.1.15.dev441 → verifiers-0.1.15.dev442}/verifiers/v1/harnesses/terminus_2/program.py +0 -0
- {verifiers-0.1.15.dev441 → verifiers-0.1.15.dev442}/verifiers/v1/interception/__init__.py +0 -0
- {verifiers-0.1.15.dev441 → verifiers-0.1.15.dev442}/verifiers/v1/interception/pool.py +0 -0
- {verifiers-0.1.15.dev441 → verifiers-0.1.15.dev442}/verifiers/v1/interception/server.py +0 -0
- {verifiers-0.1.15.dev441 → verifiers-0.1.15.dev442}/verifiers/v1/judge.py +0 -0
- {verifiers-0.1.15.dev441 → verifiers-0.1.15.dev442}/verifiers/v1/judges/__init__.py +0 -0
- {verifiers-0.1.15.dev441 → verifiers-0.1.15.dev442}/verifiers/v1/judges/reference.py +0 -0
- {verifiers-0.1.15.dev441 → verifiers-0.1.15.dev442}/verifiers/v1/judges/reference.txt +0 -0
- {verifiers-0.1.15.dev441 → verifiers-0.1.15.dev442}/verifiers/v1/judges/rubric.py +0 -0
- {verifiers-0.1.15.dev441 → verifiers-0.1.15.dev442}/verifiers/v1/judges/rubric.txt +0 -0
- {verifiers-0.1.15.dev441 → verifiers-0.1.15.dev442}/verifiers/v1/legacy.py +0 -0
- {verifiers-0.1.15.dev441 → verifiers-0.1.15.dev442}/verifiers/v1/loaders.py +0 -0
- {verifiers-0.1.15.dev441 → verifiers-0.1.15.dev442}/verifiers/v1/mcp/__init__.py +0 -0
- {verifiers-0.1.15.dev441 → verifiers-0.1.15.dev442}/verifiers/v1/mcp/launch.py +0 -0
- {verifiers-0.1.15.dev441 → verifiers-0.1.15.dev442}/verifiers/v1/mcp/server.py +0 -0
- {verifiers-0.1.15.dev441 → verifiers-0.1.15.dev442}/verifiers/v1/mcp/toolset.py +0 -0
- {verifiers-0.1.15.dev441 → verifiers-0.1.15.dev442}/verifiers/v1/mcp/user.py +0 -0
- {verifiers-0.1.15.dev441 → verifiers-0.1.15.dev442}/verifiers/v1/push.py +0 -0
- {verifiers-0.1.15.dev441 → verifiers-0.1.15.dev442}/verifiers/v1/retries.py +0 -0
- {verifiers-0.1.15.dev441 → verifiers-0.1.15.dev442}/verifiers/v1/rollout.py +0 -0
- {verifiers-0.1.15.dev441 → verifiers-0.1.15.dev442}/verifiers/v1/runtimes/__init__.py +0 -0
- {verifiers-0.1.15.dev441 → verifiers-0.1.15.dev442}/verifiers/v1/runtimes/base.py +0 -0
- {verifiers-0.1.15.dev441 → verifiers-0.1.15.dev442}/verifiers/v1/runtimes/docker.py +0 -0
- {verifiers-0.1.15.dev441 → verifiers-0.1.15.dev442}/verifiers/v1/runtimes/limiters.py +0 -0
- {verifiers-0.1.15.dev441 → verifiers-0.1.15.dev442}/verifiers/v1/runtimes/modal.py +0 -0
- {verifiers-0.1.15.dev441 → verifiers-0.1.15.dev442}/verifiers/v1/runtimes/prime.py +0 -0
- {verifiers-0.1.15.dev441 → verifiers-0.1.15.dev442}/verifiers/v1/runtimes/subprocess.py +0 -0
- {verifiers-0.1.15.dev441 → verifiers-0.1.15.dev442}/verifiers/v1/scoring.py +0 -0
- {verifiers-0.1.15.dev441 → verifiers-0.1.15.dev442}/verifiers/v1/serve/__init__.py +0 -0
- {verifiers-0.1.15.dev441 → verifiers-0.1.15.dev442}/verifiers/v1/serve/client.py +0 -0
- {verifiers-0.1.15.dev441 → verifiers-0.1.15.dev442}/verifiers/v1/serve/pool.py +0 -0
- {verifiers-0.1.15.dev441 → verifiers-0.1.15.dev442}/verifiers/v1/serve/server.py +0 -0
- {verifiers-0.1.15.dev441 → verifiers-0.1.15.dev442}/verifiers/v1/serve/types.py +0 -0
- {verifiers-0.1.15.dev441 → verifiers-0.1.15.dev442}/verifiers/v1/state.py +0 -0
- {verifiers-0.1.15.dev441 → verifiers-0.1.15.dev442}/verifiers/v1/task.py +0 -0
- {verifiers-0.1.15.dev441 → verifiers-0.1.15.dev442}/verifiers/v1/taskset.py +0 -0
- {verifiers-0.1.15.dev441 → verifiers-0.1.15.dev442}/verifiers/v1/tasksets/__init__.py +0 -0
- {verifiers-0.1.15.dev441 → verifiers-0.1.15.dev442}/verifiers/v1/tasksets/harbor/__init__.py +0 -0
- {verifiers-0.1.15.dev441 → verifiers-0.1.15.dev442}/verifiers/v1/tasksets/harbor/taskset.py +0 -0
- {verifiers-0.1.15.dev441 → verifiers-0.1.15.dev442}/verifiers/v1/tasksets/lean/__init__.py +0 -0
- {verifiers-0.1.15.dev441 → verifiers-0.1.15.dev442}/verifiers/v1/tasksets/lean/scoring.py +0 -0
- {verifiers-0.1.15.dev441 → verifiers-0.1.15.dev442}/verifiers/v1/tasksets/lean/taskset.py +0 -0
- {verifiers-0.1.15.dev441 → verifiers-0.1.15.dev442}/verifiers/v1/tasksets/textarena/__init__.py +0 -0
- {verifiers-0.1.15.dev441 → verifiers-0.1.15.dev442}/verifiers/v1/tasksets/textarena/taskset.py +0 -0
- {verifiers-0.1.15.dev441 → verifiers-0.1.15.dev442}/verifiers/v1/trace.py +0 -0
- {verifiers-0.1.15.dev441 → verifiers-0.1.15.dev442}/verifiers/v1/types.py +0 -0
- {verifiers-0.1.15.dev441 → verifiers-0.1.15.dev442}/verifiers/v1/utils/__init__.py +0 -0
- {verifiers-0.1.15.dev441 → verifiers-0.1.15.dev442}/verifiers/v1/utils/aio.py +0 -0
- {verifiers-0.1.15.dev441 → verifiers-0.1.15.dev442}/verifiers/v1/utils/format.py +0 -0
- {verifiers-0.1.15.dev441 → verifiers-0.1.15.dev442}/verifiers/v1/utils/install.py +0 -0
- {verifiers-0.1.15.dev441 → verifiers-0.1.15.dev442}/verifiers/v1/utils/logging.py +0 -0
- {verifiers-0.1.15.dev441 → verifiers-0.1.15.dev442}/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.dev442
|
|
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
|
|
@@ -231,15 +231,11 @@ def Progress(
|
|
|
231
231
|
rollouts: list[Rollout],
|
|
232
232
|
start: float,
|
|
233
233
|
page: tuple[int, int] | None = None,
|
|
234
|
-
finished: list[Trace] | None = None,
|
|
235
234
|
) -> Group:
|
|
236
|
-
# On resume, `
|
|
237
|
-
#
|
|
238
|
-
|
|
239
|
-
|
|
240
|
-
r.trace for r in rollouts if r.phase == Phase.DONE
|
|
241
|
-
] # fully scored
|
|
242
|
-
total = len(finished or []) + len(rollouts)
|
|
235
|
+
# On resume, `rollouts` includes the previous session's kept rollouts (as `Finished`), so
|
|
236
|
+
# progress, reward, err, and the breakdown cover the whole run, not just this session's.
|
|
237
|
+
done = [r.trace for r in rollouts if r.phase == Phase.DONE] # fully scored
|
|
238
|
+
total = len(rollouts)
|
|
243
239
|
# Headline reward = mean over non-errored; when any errored, `format_mean` appends the
|
|
244
240
|
# global avg (errored count as 0) in parens. `err` is the share that errored.
|
|
245
241
|
reward = format_mean(done, lambda t: t.reward)
|
|
@@ -594,7 +590,6 @@ def _render(
|
|
|
594
590
|
config: EvalConfig,
|
|
595
591
|
start: float,
|
|
596
592
|
pager: Pager,
|
|
597
|
-
finished: list[Trace] | None = None,
|
|
598
593
|
push: "PushState | None" = None,
|
|
599
594
|
) -> Group:
|
|
600
595
|
now = time.time()
|
|
@@ -606,7 +601,7 @@ def _render(
|
|
|
606
601
|
# rows fill what's left; page through them (timer / arrows) when they'd overflow (else rich
|
|
607
602
|
# truncates).
|
|
608
603
|
footer = _push_footer(push)
|
|
609
|
-
top = Group(header, Progress(rollouts, start
|
|
604
|
+
top = Group(header, Progress(rollouts, start), Rule(style="dim"))
|
|
610
605
|
reserved = len(_CONSOLE.render_lines(top))
|
|
611
606
|
if footer is not None:
|
|
612
607
|
reserved += len(_CONSOLE.render_lines(footer))
|
|
@@ -616,7 +611,6 @@ def _render(
|
|
|
616
611
|
rollouts,
|
|
617
612
|
start,
|
|
618
613
|
page=(index + 1, count) if count > 1 else None,
|
|
619
|
-
finished=finished,
|
|
620
614
|
)
|
|
621
615
|
parts = [
|
|
622
616
|
header,
|
|
@@ -634,18 +628,17 @@ async def dashboard(
|
|
|
634
628
|
rollouts: list[Rollout],
|
|
635
629
|
config: EvalConfig,
|
|
636
630
|
start: float,
|
|
637
|
-
finished: list[Trace] | None = None,
|
|
638
631
|
push: "PushState | None" = None,
|
|
639
632
|
):
|
|
640
633
|
"""Refresh the live eval view until the `with` block exits, then a final frame. Left/right
|
|
641
|
-
arrows page through rollout rows when they overflow the screen. On resume, `
|
|
642
|
-
the kept
|
|
643
|
-
whole run, not just this session's re-run rollouts. `push` is the shared
|
|
644
|
-
view renders as a line under the rollouts once the upload starts (dim ->
|
|
645
|
-
updated by the caller as the inline upload runs and lands."""
|
|
634
|
+
arrows page through rollout rows when they overflow the screen. On resume, `rollouts`
|
|
635
|
+
includes the previous session's kept rollouts (as finished ones), so the rows, counts, and
|
|
636
|
+
scores cover the whole run, not just this session's re-run rollouts. `push` is the shared
|
|
637
|
+
`--push` status the view renders as a line under the rollouts once the upload starts (dim ->
|
|
638
|
+
white URL / red error), updated by the caller as the inline upload runs and lands."""
|
|
646
639
|
pager = Pager()
|
|
647
640
|
async with live_view(
|
|
648
|
-
lambda: _render(rollouts, config, start, pager,
|
|
641
|
+
lambda: _render(rollouts, config, start, pager, push),
|
|
649
642
|
on_key=pager.on_key,
|
|
650
643
|
):
|
|
651
644
|
yield
|
|
@@ -0,0 +1,119 @@
|
|
|
1
|
+
"""Resume an interrupted eval: reload its finished rollouts and run only the rest.
|
|
2
|
+
|
|
3
|
+
A run writes `config.toml` + `traces.jsonl` into its output dir. `--resume <dir>` reloads
|
|
4
|
+
that config verbatim (so it takes no other flags) and writes back into the same dir. `load`
|
|
5
|
+
brings the good saved rollouts back into memory and re-runs only what's still owed: the
|
|
6
|
+
*missing* rollouts (never written — the run was interrupted) and the *errored* ones (written
|
|
7
|
+
with an error; dropped and redone). The loaded traces rejoin the run everywhere — counted,
|
|
8
|
+
displayed, pushed, and printed alongside this session's — so a resumed run picks up exactly
|
|
9
|
+
where the interrupted one stopped. A group-scored taskset is resumed a whole task at a time
|
|
10
|
+
(its rollouts are scored together), so any task that isn't fully complete is redone from
|
|
11
|
+
scratch.
|
|
12
|
+
"""
|
|
13
|
+
|
|
14
|
+
import json
|
|
15
|
+
import tomllib
|
|
16
|
+
from collections import defaultdict
|
|
17
|
+
from pathlib import Path
|
|
18
|
+
|
|
19
|
+
from pydantic_core import from_json
|
|
20
|
+
|
|
21
|
+
from verifiers.v1.cli.output import CONFIG_FILE, TRACES_FILE
|
|
22
|
+
from verifiers.v1.configs.eval import EvalConfig
|
|
23
|
+
from verifiers.v1.rollout import Phase, Rollout
|
|
24
|
+
from verifiers.v1.trace import Trace, WireTrace
|
|
25
|
+
|
|
26
|
+
|
|
27
|
+
def split_resume(argv: list[str]) -> tuple[Path | None, list[str]]:
|
|
28
|
+
"""Pull `--resume <dir>` / `--resume=<dir>` out of argv, returning (dir, the other args).
|
|
29
|
+
The caller rejects any leftover args, since resume re-runs the saved config verbatim."""
|
|
30
|
+
for i, arg in enumerate(argv):
|
|
31
|
+
if arg == "--resume":
|
|
32
|
+
if i + 1 >= len(argv):
|
|
33
|
+
raise SystemExit(
|
|
34
|
+
"--resume needs an output dir: uv run eval --resume <dir>"
|
|
35
|
+
)
|
|
36
|
+
return Path(argv[i + 1]), argv[:i] + argv[i + 2 :]
|
|
37
|
+
if arg.startswith("--resume="):
|
|
38
|
+
return Path(arg.split("=", 1)[1]), argv[:i] + argv[i + 1 :]
|
|
39
|
+
return None, argv
|
|
40
|
+
|
|
41
|
+
|
|
42
|
+
def load_resume_config(resume_dir: Path) -> EvalConfig:
|
|
43
|
+
"""Rebuild the run's `EvalConfig` from its saved `config.toml`, pointed back at its own
|
|
44
|
+
output dir so the resumed rollouts append to the same `traces.jsonl`."""
|
|
45
|
+
config_path = resume_dir / CONFIG_FILE
|
|
46
|
+
if not config_path.exists():
|
|
47
|
+
raise SystemExit(
|
|
48
|
+
f"--resume: no config.toml in {resume_dir} - not an eval output dir"
|
|
49
|
+
)
|
|
50
|
+
config = EvalConfig.model_validate(tomllib.loads(config_path.read_text()))
|
|
51
|
+
config.resume = resume_dir
|
|
52
|
+
config.output_dir = resume_dir
|
|
53
|
+
return config
|
|
54
|
+
|
|
55
|
+
|
|
56
|
+
class Finished(Rollout):
|
|
57
|
+
"""A finished rollout reloaded from a previous session (see `load`): carries just the
|
|
58
|
+
surface the dashboard reads (`trace`/`task`/`phase`/`runtime`), so a resumed run's kept
|
|
59
|
+
rollouts render exactly like this session's."""
|
|
60
|
+
|
|
61
|
+
def __init__(self, trace: Trace) -> None:
|
|
62
|
+
self.trace = trace
|
|
63
|
+
self.task = trace.task
|
|
64
|
+
self.phase = Phase.DONE
|
|
65
|
+
self.runtime = None
|
|
66
|
+
|
|
67
|
+
|
|
68
|
+
def load(
|
|
69
|
+
resume_dir: Path, selected_idxs: list[int], num_rollouts: int, group: bool
|
|
70
|
+
) -> tuple[list[Trace], dict[int, int]]:
|
|
71
|
+
"""Load the good saved rollouts back into memory as finished traces and diff them against
|
|
72
|
+
the run's target (`num_rollouts` per selected task): returns (the kept traces, rollouts
|
|
73
|
+
owed per task idx). An errored trace is dropped and re-run; a group-scored task is kept
|
|
74
|
+
only if fully complete, else its whole group is redone. Rewrites `traces.jsonl` to just
|
|
75
|
+
the kept rows — verbatim, via a temp file + atomic rename, so an interrupted resume can't
|
|
76
|
+
corrupt the prior good results — and the resumed rollouts then append. `WireTrace` reads
|
|
77
|
+
any taskset's saved traces without importing it."""
|
|
78
|
+
path = resume_dir / TRACES_FILE
|
|
79
|
+
selected = set(selected_idxs)
|
|
80
|
+
good: dict[int, list[bytes]] = defaultdict(list)
|
|
81
|
+
if path.exists():
|
|
82
|
+
with path.open("rb") as results:
|
|
83
|
+
for line in results:
|
|
84
|
+
if not line.strip():
|
|
85
|
+
continue
|
|
86
|
+
try:
|
|
87
|
+
row = from_json(line)
|
|
88
|
+
except ValueError:
|
|
89
|
+
row = json.loads(line)
|
|
90
|
+
idx = row["task"]["idx"]
|
|
91
|
+
if (
|
|
92
|
+
idx in selected
|
|
93
|
+
and not row.get("errors")
|
|
94
|
+
and len(good[idx]) < num_rollouts
|
|
95
|
+
):
|
|
96
|
+
good[idx].append(line if line.endswith(b"\n") else line + b"\n")
|
|
97
|
+
keep: list[bytes] = []
|
|
98
|
+
owed: dict[int, int] = {}
|
|
99
|
+
for idx in selected_idxs:
|
|
100
|
+
rows = good.get(idx, [])
|
|
101
|
+
if group and len(rows) < num_rollouts:
|
|
102
|
+
owed[idx] = num_rollouts # re-run the whole group; keep none of it
|
|
103
|
+
continue
|
|
104
|
+
keep.extend(rows)
|
|
105
|
+
if missing := num_rollouts - len(rows):
|
|
106
|
+
owed[idx] = missing
|
|
107
|
+
tmp = path.with_suffix(".jsonl.tmp")
|
|
108
|
+
tmp.write_bytes(b"".join(keep))
|
|
109
|
+
tmp.replace(path)
|
|
110
|
+
return [WireTrace.model_validate_json(line) for line in keep], owed
|
|
111
|
+
|
|
112
|
+
|
|
113
|
+
def nothing_to_resume_msg(resume_dir: Path, num_tasks: int, num_rollouts: int) -> str:
|
|
114
|
+
"""The message shown (and then exit 0 - the run is already complete) when every selected
|
|
115
|
+
rollout already completed without error."""
|
|
116
|
+
return (
|
|
117
|
+
f"nothing to resume in {resume_dir}: all {num_tasks}x{num_rollouts} rollouts "
|
|
118
|
+
f"already completed without error"
|
|
119
|
+
)
|
|
@@ -37,26 +37,22 @@ async def run_eval(env: Environment, config: EvalConfig) -> list[Trace]:
|
|
|
37
37
|
)
|
|
38
38
|
out = output_path(config)
|
|
39
39
|
# Write config.toml up front, then persist each trace as it completes (so the results are
|
|
40
|
-
# durable mid-run, not only at the end).
|
|
41
|
-
#
|
|
42
|
-
# rollouts while keeping large trace serialization off the event loop.
|
|
40
|
+
# durable mid-run, not only at the end). One lock serializes worker-thread appends from
|
|
41
|
+
# concurrent rollouts while keeping large trace serialization off the event loop.
|
|
43
42
|
owed: dict[str, int] | None = None
|
|
44
|
-
# On resume, the kept (good) on-disk rollouts
|
|
45
|
-
#
|
|
46
|
-
#
|
|
43
|
+
# On resume, the kept (good) on-disk rollouts rejoin the run as finished traces: displayed,
|
|
44
|
+
# returned, pushed, and printed alongside this session's, with only the owed rollouts re-run
|
|
45
|
+
# — so the resumed run is indistinguishable from one that was never interrupted.
|
|
47
46
|
finished: list[Trace] = []
|
|
48
47
|
if config.resume is not None:
|
|
49
48
|
group = bool(discover_decorated(env.taskset, "group_reward"))
|
|
50
|
-
|
|
49
|
+
finished, owed = resume.load(
|
|
51
50
|
out, [t.idx for t in tasks], config.num_rollouts, group
|
|
52
51
|
)
|
|
53
52
|
if not owed: # already complete - report it and exit successfully
|
|
54
53
|
print(resume.nothing_to_resume_msg(out, len(tasks), config.num_rollouts))
|
|
55
54
|
raise SystemExit(0)
|
|
56
55
|
tasks = [task for task in tasks if owed.get(task.idx)]
|
|
57
|
-
resume.rewrite_results(out, keep)
|
|
58
|
-
if config.rich:
|
|
59
|
-
finished = resume.load_kept(out, env.taskset)
|
|
60
56
|
logger.info(
|
|
61
57
|
"resuming %s: %d task(s), %d rollout(s) owed",
|
|
62
58
|
out,
|
|
@@ -88,7 +84,9 @@ async def run_eval(env: Environment, config: EvalConfig) -> list[Trace]:
|
|
|
88
84
|
env.episode(task, ctx, n=owed[task.idx] if owed else config.num_rollouts)
|
|
89
85
|
for task in tasks
|
|
90
86
|
]
|
|
91
|
-
rollouts = [
|
|
87
|
+
rollouts = [resume.Finished(trace) for trace in finished] + [
|
|
88
|
+
rollout for episode in episodes for rollout in episode.rollouts
|
|
89
|
+
]
|
|
92
90
|
# --push in the live dashboard: share a status the dashboard renders as a line under the
|
|
93
91
|
# rollouts once the run finishes and the upload begins (dim -> green URL / red error), and
|
|
94
92
|
# do the upload inline below so it resolves on screen. Only the rich path has a dashboard;
|
|
@@ -99,7 +97,7 @@ async def run_eval(env: Environment, config: EvalConfig) -> list[Trace]:
|
|
|
99
97
|
|
|
100
98
|
push_state = PushState()
|
|
101
99
|
display = (
|
|
102
|
-
dashboard(rollouts, config, start,
|
|
100
|
+
dashboard(rollouts, config, start, push=push_state)
|
|
103
101
|
if config.rich
|
|
104
102
|
else contextlib.nullcontext()
|
|
105
103
|
)
|
|
@@ -107,7 +105,9 @@ async def run_eval(env: Environment, config: EvalConfig) -> list[Trace]:
|
|
|
107
105
|
results = await asyncio.gather(
|
|
108
106
|
*(episode.run(semaphore, on_complete) for episode in episodes)
|
|
109
107
|
)
|
|
110
|
-
traces =
|
|
108
|
+
traces = finished + [
|
|
109
|
+
trace for episode_traces in results for trace in episode_traces
|
|
110
|
+
]
|
|
111
111
|
if (
|
|
112
112
|
push_state is not None
|
|
113
113
|
): # upload off the event loop so the view keeps refreshing
|
|
@@ -178,14 +178,14 @@ async def run_eval_server(config: EvalConfig) -> list[Trace]:
|
|
|
178
178
|
if config.num_tasks is not None:
|
|
179
179
|
idxs = idxs[: config.num_tasks]
|
|
180
180
|
out = output_path(config)
|
|
181
|
+
finished: list[Trace] = []
|
|
181
182
|
if config.resume is not None:
|
|
182
|
-
|
|
183
|
+
finished, owed = resume.load(
|
|
183
184
|
out, idxs, config.num_rollouts, info.requires_group_scoring
|
|
184
185
|
)
|
|
185
186
|
if not owed: # already complete - report it and exit successfully
|
|
186
187
|
print(resume.nothing_to_resume_msg(out, len(idxs), config.num_rollouts))
|
|
187
188
|
raise SystemExit(0)
|
|
188
|
-
resume.rewrite_results(out, keep)
|
|
189
189
|
idxs = [idx for idx in idxs if owed.get(idx)]
|
|
190
190
|
logger.info(
|
|
191
191
|
"resuming %s: %d task(s), %d rollout(s) owed",
|
|
@@ -248,7 +248,7 @@ async def run_eval_server(config: EvalConfig) -> list[Trace]:
|
|
|
248
248
|
units = [run_rollout_unit(i) for i in idxs for _ in range(owed[i])]
|
|
249
249
|
results = await asyncio.gather(*units)
|
|
250
250
|
await client.close()
|
|
251
|
-
return [trace for unit_traces in results for trace in unit_traces]
|
|
251
|
+
return finished + [trace for unit_traces in results for trace in unit_traces]
|
|
252
252
|
finally:
|
|
253
253
|
proc.terminate()
|
|
254
254
|
with contextlib.suppress(Exception):
|
|
@@ -1,138 +0,0 @@
|
|
|
1
|
-
"""Resume an interrupted eval: re-run only the rollouts a previous run didn't finish.
|
|
2
|
-
|
|
3
|
-
A run writes `config.toml` + `traces.jsonl` into its output dir. `--resume <dir>` reloads
|
|
4
|
-
that config verbatim (so it takes no other flags) and writes back into the same dir, running
|
|
5
|
-
only the rollouts still owed: the *missing* ones (never written — the run was interrupted) and
|
|
6
|
-
the *errored* ones (written with an error). Good rollouts are kept; errored ones are dropped
|
|
7
|
-
and redone. A group-scored taskset is resumed a whole task at a time (its rollouts are scored
|
|
8
|
-
together), so any task that isn't fully complete is redone from scratch.
|
|
9
|
-
"""
|
|
10
|
-
|
|
11
|
-
import json
|
|
12
|
-
import tomllib
|
|
13
|
-
from collections import defaultdict
|
|
14
|
-
from collections.abc import Iterator
|
|
15
|
-
from pathlib import Path
|
|
16
|
-
|
|
17
|
-
from pydantic_core import from_json
|
|
18
|
-
|
|
19
|
-
from verifiers.v1.cli.output import CONFIG_FILE, TRACES_FILE, read_traces
|
|
20
|
-
from verifiers.v1.configs.eval import EvalConfig
|
|
21
|
-
from verifiers.v1.state import state_cls
|
|
22
|
-
from verifiers.v1.task import WireTask
|
|
23
|
-
from verifiers.v1.taskset import Taskset
|
|
24
|
-
from verifiers.v1.trace import Trace
|
|
25
|
-
|
|
26
|
-
|
|
27
|
-
def split_resume(argv: list[str]) -> tuple[Path | None, list[str]]:
|
|
28
|
-
"""Pull `--resume <dir>` / `--resume=<dir>` out of argv, returning (dir, the other args).
|
|
29
|
-
The caller rejects any leftover args, since resume re-runs the saved config verbatim."""
|
|
30
|
-
for i, arg in enumerate(argv):
|
|
31
|
-
if arg == "--resume":
|
|
32
|
-
if i + 1 >= len(argv):
|
|
33
|
-
raise SystemExit(
|
|
34
|
-
"--resume needs an output dir: uv run eval --resume <dir>"
|
|
35
|
-
)
|
|
36
|
-
return Path(argv[i + 1]), argv[:i] + argv[i + 2 :]
|
|
37
|
-
if arg.startswith("--resume="):
|
|
38
|
-
return Path(arg.split("=", 1)[1]), argv[:i] + argv[i + 1 :]
|
|
39
|
-
return None, argv
|
|
40
|
-
|
|
41
|
-
|
|
42
|
-
def load_resume_config(resume_dir: Path) -> EvalConfig:
|
|
43
|
-
"""Rebuild the run's `EvalConfig` from its saved `config.toml`, pointed back at its own
|
|
44
|
-
output dir so the resumed rollouts append to the same `traces.jsonl`."""
|
|
45
|
-
config_path = resume_dir / CONFIG_FILE
|
|
46
|
-
if not config_path.exists():
|
|
47
|
-
raise SystemExit(
|
|
48
|
-
f"--resume: no config.toml in {resume_dir} - not an eval output dir"
|
|
49
|
-
)
|
|
50
|
-
config = EvalConfig.model_validate(tomllib.loads(config_path.read_text()))
|
|
51
|
-
config.resume = resume_dir
|
|
52
|
-
config.output_dir = resume_dir
|
|
53
|
-
return config
|
|
54
|
-
|
|
55
|
-
|
|
56
|
-
def _read_results(results_path: Path) -> Iterator[tuple[int, int, bool]]:
|
|
57
|
-
"""Stream `(file reference, task idx, errored)` without retaining decoded traces."""
|
|
58
|
-
if not results_path.exists():
|
|
59
|
-
return
|
|
60
|
-
with results_path.open("rb") as results:
|
|
61
|
-
while True:
|
|
62
|
-
offset = results.tell()
|
|
63
|
-
line = results.readline()
|
|
64
|
-
if not line:
|
|
65
|
-
break
|
|
66
|
-
if line.strip():
|
|
67
|
-
try:
|
|
68
|
-
row = from_json(line)
|
|
69
|
-
except ValueError:
|
|
70
|
-
row = json.loads(line)
|
|
71
|
-
yield offset, row["task"]["idx"], bool(row.get("errors"))
|
|
72
|
-
|
|
73
|
-
|
|
74
|
-
def plan(
|
|
75
|
-
resume_dir: Path, selected_idxs: list[int], num_rollouts: int, group: bool
|
|
76
|
-
) -> tuple[list[int], dict[int, int]]:
|
|
77
|
-
"""Diff the saved results against the run's target (`num_rollouts` per selected task).
|
|
78
|
-
Returns (byte offsets of rows to keep, rollouts owed per task idx). An errored trace is
|
|
79
|
-
dropped and re-run; a group-scored task is kept only if fully complete, else its whole group
|
|
80
|
-
is redone."""
|
|
81
|
-
# Retain only the offsets resume can reuse; trace payloads stay on disk.
|
|
82
|
-
selected = set(selected_idxs)
|
|
83
|
-
by_idx: dict[int, list[int]] = defaultdict(list)
|
|
84
|
-
for offset, idx, errored in _read_results(resume_dir / TRACES_FILE):
|
|
85
|
-
if idx in selected and not errored and len(by_idx[idx]) < num_rollouts:
|
|
86
|
-
by_idx[idx].append(offset)
|
|
87
|
-
keep: list[int] = []
|
|
88
|
-
owed: dict[int, int] = {}
|
|
89
|
-
for idx in selected_idxs:
|
|
90
|
-
good = by_idx.get(idx, [])
|
|
91
|
-
if group:
|
|
92
|
-
if len(good) >= num_rollouts:
|
|
93
|
-
keep.extend(good)
|
|
94
|
-
else:
|
|
95
|
-
owed[idx] = num_rollouts # re-run the whole group; keep none of it
|
|
96
|
-
else:
|
|
97
|
-
keep.extend(good)
|
|
98
|
-
missing = num_rollouts - len(good)
|
|
99
|
-
if missing:
|
|
100
|
-
owed[idx] = missing
|
|
101
|
-
return keep, owed
|
|
102
|
-
|
|
103
|
-
|
|
104
|
-
def rewrite_results(resume_dir: Path, keep: list[int]) -> None:
|
|
105
|
-
"""Replace `traces.jsonl` with just the kept (good) traces; resumed rollouts append. Via a
|
|
106
|
-
temp file + atomic rename, so an interrupted resume can't corrupt the prior good results."""
|
|
107
|
-
path = resume_dir / TRACES_FILE
|
|
108
|
-
tmp = path.with_suffix(".jsonl.tmp")
|
|
109
|
-
if not keep:
|
|
110
|
-
tmp.write_bytes(b"")
|
|
111
|
-
tmp.replace(path)
|
|
112
|
-
return
|
|
113
|
-
# Re-read retained rows by offset while building the atomic replacement.
|
|
114
|
-
with path.open("rb") as results, tmp.open("wb") as output:
|
|
115
|
-
for offset in keep:
|
|
116
|
-
results.seek(offset)
|
|
117
|
-
raw = results.readline()
|
|
118
|
-
output.write(raw)
|
|
119
|
-
if not raw.endswith(b"\n"):
|
|
120
|
-
output.write(b"\n")
|
|
121
|
-
tmp.replace(path)
|
|
122
|
-
|
|
123
|
-
|
|
124
|
-
def load_kept(resume_dir: Path, taskset: Taskset) -> list[Trace]:
|
|
125
|
-
"""Reload the kept (good) traces as finished `Trace`s, so a resumed run's live dashboard counts
|
|
126
|
-
them toward the whole run (progress, reward, err, and the usage/time breakdown). Call *after*
|
|
127
|
-
`rewrite_results`, which leaves only the kept rows on disk. `WireTask` reads any taskset's saved
|
|
128
|
-
task without a runtime or its `Task` type (mirrors `replay`)."""
|
|
129
|
-
return read_traces(resume_dir, Trace[WireTask, state_cls(type(taskset))])
|
|
130
|
-
|
|
131
|
-
|
|
132
|
-
def nothing_to_resume_msg(resume_dir: Path, num_tasks: int, num_rollouts: int) -> str:
|
|
133
|
-
"""The message shown (and then exit 0 - the run is already complete) when every selected
|
|
134
|
-
rollout already completed without error."""
|
|
135
|
-
return (
|
|
136
|
-
f"nothing to resume in {resume_dir}: all {num_tasks}x{num_rollouts} rollouts "
|
|
137
|
-
f"already completed without error"
|
|
138
|
-
)
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
{verifiers-0.1.15.dev441 → verifiers-0.1.15.dev442}/tests/v1/fixtures/tool_response_image_v1.py
RENAMED
|
File without changes
|
|
File without changes
|