verifiers 0.3.1.dev58__tar.gz → 0.3.1.dev59__tar.gz
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- {verifiers-0.3.1.dev58 → verifiers-0.3.1.dev59}/PKG-INFO +1 -1
- {verifiers-0.3.1.dev58 → verifiers-0.3.1.dev59}/verifiers/v1/__init__.py +19 -4
- {verifiers-0.3.1.dev58 → verifiers-0.3.1.dev59}/verifiers/v1/cli/eval/resume.py +13 -22
- {verifiers-0.3.1.dev58 → verifiers-0.3.1.dev59}/verifiers/v1/cli/eval/runner.py +14 -9
- {verifiers-0.3.1.dev58 → verifiers-0.3.1.dev59}/verifiers/v1/cli/output.py +26 -28
- {verifiers-0.3.1.dev58 → verifiers-0.3.1.dev59}/verifiers/v1/env.py +11 -3
- {verifiers-0.3.1.dev58 → verifiers-0.3.1.dev59}/verifiers/v1/episode.py +77 -8
- {verifiers-0.3.1.dev58 → verifiers-0.3.1.dev59}/verifiers/v1/graph.py +5 -0
- {verifiers-0.3.1.dev58 → verifiers-0.3.1.dev59}/verifiers/v1/trace.py +29 -32
- {verifiers-0.3.1.dev58 → verifiers-0.3.1.dev59}/.gitignore +0 -0
- {verifiers-0.3.1.dev58 → verifiers-0.3.1.dev59}/LICENSE +0 -0
- {verifiers-0.3.1.dev58 → verifiers-0.3.1.dev59}/README.md +0 -0
- {verifiers-0.3.1.dev58 → verifiers-0.3.1.dev59}/pyproject.toml +0 -0
- {verifiers-0.3.1.dev58 → verifiers-0.3.1.dev59}/tests/__init__.py +0 -0
- {verifiers-0.3.1.dev58 → verifiers-0.3.1.dev59}/tests/conftest.py +0 -0
- {verifiers-0.3.1.dev58 → verifiers-0.3.1.dev59}/tests/test_browser_env.py +0 -0
- {verifiers-0.3.1.dev58 → verifiers-0.3.1.dev59}/tests/test_build_script.py +0 -0
- {verifiers-0.3.1.dev58 → verifiers-0.3.1.dev59}/tests/test_cli_agent_env.py +0 -0
- {verifiers-0.3.1.dev58 → verifiers-0.3.1.dev59}/tests/test_client_auth_errors.py +0 -0
- {verifiers-0.3.1.dev58 → verifiers-0.3.1.dev59}/tests/test_client_config.py +0 -0
- {verifiers-0.3.1.dev58 → verifiers-0.3.1.dev59}/tests/test_client_multimodal_types.py +0 -0
- {verifiers-0.3.1.dev58 → verifiers-0.3.1.dev59}/tests/test_composable_env.py +0 -0
- {verifiers-0.3.1.dev58 → verifiers-0.3.1.dev59}/tests/test_context_token_metrics.py +0 -0
- {verifiers-0.3.1.dev58 → verifiers-0.3.1.dev59}/tests/test_decorator_ranks.py +0 -0
- {verifiers-0.3.1.dev58 → verifiers-0.3.1.dev59}/tests/test_endpoint_registry.py +0 -0
- {verifiers-0.3.1.dev58 → verifiers-0.3.1.dev59}/tests/test_env_group.py +0 -0
- {verifiers-0.3.1.dev58 → verifiers-0.3.1.dev59}/tests/test_env_server.py +0 -0
- {verifiers-0.3.1.dev58 → verifiers-0.3.1.dev59}/tests/test_environment.py +0 -0
- {verifiers-0.3.1.dev58 → verifiers-0.3.1.dev59}/tests/test_environment_extra.py +0 -0
- {verifiers-0.3.1.dev58 → verifiers-0.3.1.dev59}/tests/test_error_chain.py +0 -0
- {verifiers-0.3.1.dev58 → verifiers-0.3.1.dev59}/tests/test_eval_display.py +0 -0
- {verifiers-0.3.1.dev58 → verifiers-0.3.1.dev59}/tests/test_eval_utils.py +0 -0
- {verifiers-0.3.1.dev58 → verifiers-0.3.1.dev59}/tests/test_gepa_cli.py +0 -0
- {verifiers-0.3.1.dev58 → verifiers-0.3.1.dev59}/tests/test_gepa_utils.py +0 -0
- {verifiers-0.3.1.dev58 → verifiers-0.3.1.dev59}/tests/test_gym_env.py +0 -0
- {verifiers-0.3.1.dev58 → verifiers-0.3.1.dev59}/tests/test_harbor_env_mcp.py +0 -0
- {verifiers-0.3.1.dev58 → verifiers-0.3.1.dev59}/tests/test_imports.py +0 -0
- {verifiers-0.3.1.dev58 → verifiers-0.3.1.dev59}/tests/test_init_script.py +0 -0
- {verifiers-0.3.1.dev58 → verifiers-0.3.1.dev59}/tests/test_install_utils.py +0 -0
- {verifiers-0.3.1.dev58 → verifiers-0.3.1.dev59}/tests/test_interception_utils.py +0 -0
- {verifiers-0.3.1.dev58 → verifiers-0.3.1.dev59}/tests/test_logging.py +0 -0
- {verifiers-0.3.1.dev58 → verifiers-0.3.1.dev59}/tests/test_math_rubric.py +0 -0
- {verifiers-0.3.1.dev58 → verifiers-0.3.1.dev59}/tests/test_maybe_think_parser.py +0 -0
- {verifiers-0.3.1.dev58 → verifiers-0.3.1.dev59}/tests/test_message_utils.py +0 -0
- {verifiers-0.3.1.dev58 → verifiers-0.3.1.dev59}/tests/test_message_utils_multimodal.py +0 -0
- {verifiers-0.3.1.dev58 → verifiers-0.3.1.dev59}/tests/test_multiturn_env.py +0 -0
- {verifiers-0.3.1.dev58 → verifiers-0.3.1.dev59}/tests/test_nemorl_client.py +0 -0
- {verifiers-0.3.1.dev58 → verifiers-0.3.1.dev59}/tests/test_openai_chat_completions_token_client.py +0 -0
- {verifiers-0.3.1.dev58 → verifiers-0.3.1.dev59}/tests/test_openai_responses_client.py +0 -0
- {verifiers-0.3.1.dev58 → verifiers-0.3.1.dev59}/tests/test_opencode_rlm_env.py +0 -0
- {verifiers-0.3.1.dev58 → verifiers-0.3.1.dev59}/tests/test_openenv_client.py +0 -0
- {verifiers-0.3.1.dev58 → verifiers-0.3.1.dev59}/tests/test_parser.py +0 -0
- {verifiers-0.3.1.dev58 → verifiers-0.3.1.dev59}/tests/test_path_utils.py +0 -0
- {verifiers-0.3.1.dev58 → verifiers-0.3.1.dev59}/tests/test_per_turn_timing.py +0 -0
- {verifiers-0.3.1.dev58 → verifiers-0.3.1.dev59}/tests/test_pricing_utils.py +0 -0
- {verifiers-0.3.1.dev58 → verifiers-0.3.1.dev59}/tests/test_prime_plugin.py +0 -0
- {verifiers-0.3.1.dev58 → verifiers-0.3.1.dev59}/tests/test_renderer_client.py +0 -0
- {verifiers-0.3.1.dev58 → verifiers-0.3.1.dev59}/tests/test_renderer_e2e.py +0 -0
- {verifiers-0.3.1.dev58 → verifiers-0.3.1.dev59}/tests/test_rlm_composable_env.py +0 -0
- {verifiers-0.3.1.dev58 → verifiers-0.3.1.dev59}/tests/test_rubric.py +0 -0
- {verifiers-0.3.1.dev58 → verifiers-0.3.1.dev59}/tests/test_rubric_group.py +0 -0
- {verifiers-0.3.1.dev58 → verifiers-0.3.1.dev59}/tests/test_sandbox_debug_env.py +0 -0
- {verifiers-0.3.1.dev58 → verifiers-0.3.1.dev59}/tests/test_sandbox_env.py +0 -0
- {verifiers-0.3.1.dev58 → verifiers-0.3.1.dev59}/tests/test_sandbox_mixin.py +0 -0
- {verifiers-0.3.1.dev58 → verifiers-0.3.1.dev59}/tests/test_save_utils.py +0 -0
- {verifiers-0.3.1.dev58 → verifiers-0.3.1.dev59}/tests/test_setup_script.py +0 -0
- {verifiers-0.3.1.dev58 → verifiers-0.3.1.dev59}/tests/test_singleturn_env.py +0 -0
- {verifiers-0.3.1.dev58 → verifiers-0.3.1.dev59}/tests/test_stateful_tool_env.py +0 -0
- {verifiers-0.3.1.dev58 → verifiers-0.3.1.dev59}/tests/test_think_parser.py +0 -0
- {verifiers-0.3.1.dev58 → verifiers-0.3.1.dev59}/tests/test_tool_env.py +0 -0
- {verifiers-0.3.1.dev58 → verifiers-0.3.1.dev59}/tests/test_tool_utils.py +0 -0
- {verifiers-0.3.1.dev58 → verifiers-0.3.1.dev59}/tests/test_trajectory_processing.py +0 -0
- {verifiers-0.3.1.dev58 → verifiers-0.3.1.dev59}/tests/test_tui_info_formatting.py +0 -0
- {verifiers-0.3.1.dev58 → verifiers-0.3.1.dev59}/tests/test_types.py +0 -0
- {verifiers-0.3.1.dev58 → verifiers-0.3.1.dev59}/tests/test_xml_parser.py +0 -0
- {verifiers-0.3.1.dev58 → verifiers-0.3.1.dev59}/tests/v1/conftest.py +0 -0
- {verifiers-0.3.1.dev58 → verifiers-0.3.1.dev59}/tests/v1/fixtures/counter_tool_v1.py +0 -0
- {verifiers-0.3.1.dev58 → verifiers-0.3.1.dev59}/tests/v1/fixtures/duet_v1.py +0 -0
- {verifiers-0.3.1.dev58 → verifiers-0.3.1.dev59}/tests/v1/fixtures/echo_acp_resume_v1.py +0 -0
- {verifiers-0.3.1.dev58 → verifiers-0.3.1.dev59}/tests/v1/fixtures/echo_agentic_v1.py +0 -0
- {verifiers-0.3.1.dev58 → verifiers-0.3.1.dev59}/tests/v1/fixtures/echo_tool_v1.py +0 -0
- {verifiers-0.3.1.dev58 → verifiers-0.3.1.dev59}/tests/v1/fixtures/echo_user_sim_v1.py +0 -0
- {verifiers-0.3.1.dev58 → verifiers-0.3.1.dev59}/tests/v1/fixtures/echo_v1.py +0 -0
- {verifiers-0.3.1.dev58 → verifiers-0.3.1.dev59}/tests/v1/fixtures/pyproject.toml +0 -0
- {verifiers-0.3.1.dev58 → verifiers-0.3.1.dev59}/tests/v1/fixtures/tool_response_image_v1.py +0 -0
- {verifiers-0.3.1.dev58 → verifiers-0.3.1.dev59}/tests/v1/test_color_codeword_tasks.py +0 -0
- {verifiers-0.3.1.dev58 → verifiers-0.3.1.dev59}/tests/v1/test_configs.py +0 -0
- {verifiers-0.3.1.dev58 → verifiers-0.3.1.dev59}/tests/v1/test_e2e.py +0 -0
- {verifiers-0.3.1.dev58 → verifiers-0.3.1.dev59}/tests/v1/test_envs.py +0 -0
- {verifiers-0.3.1.dev58 → verifiers-0.3.1.dev59}/tests/v1/test_graph.py +0 -0
- {verifiers-0.3.1.dev58 → verifiers-0.3.1.dev59}/tests/v1/test_judges.py +0 -0
- {verifiers-0.3.1.dev58 → verifiers-0.3.1.dev59}/tests/v1/test_scoring.py +0 -0
- {verifiers-0.3.1.dev58 → verifiers-0.3.1.dev59}/tests/v1/test_taskset.py +0 -0
- {verifiers-0.3.1.dev58 → verifiers-0.3.1.dev59}/tests/v1/test_trace.py +0 -0
- {verifiers-0.3.1.dev58 → verifiers-0.3.1.dev59}/verifiers/__init__.py +0 -0
- {verifiers-0.3.1.dev58 → verifiers-0.3.1.dev59}/verifiers/cli/__init__.py +0 -0
- {verifiers-0.3.1.dev58 → verifiers-0.3.1.dev59}/verifiers/cli/commands/__init__.py +0 -0
- {verifiers-0.3.1.dev58 → verifiers-0.3.1.dev59}/verifiers/cli/commands/build.py +0 -0
- {verifiers-0.3.1.dev58 → verifiers-0.3.1.dev59}/verifiers/cli/commands/eval.py +0 -0
- {verifiers-0.3.1.dev58 → verifiers-0.3.1.dev59}/verifiers/cli/commands/gepa.py +0 -0
- {verifiers-0.3.1.dev58 → verifiers-0.3.1.dev59}/verifiers/cli/commands/init.py +0 -0
- {verifiers-0.3.1.dev58 → verifiers-0.3.1.dev59}/verifiers/cli/commands/install.py +0 -0
- {verifiers-0.3.1.dev58 → verifiers-0.3.1.dev59}/verifiers/cli/commands/setup.py +0 -0
- {verifiers-0.3.1.dev58 → verifiers-0.3.1.dev59}/verifiers/cli/plugins/__init__.py +0 -0
- {verifiers-0.3.1.dev58 → verifiers-0.3.1.dev59}/verifiers/cli/plugins/prime.py +0 -0
- {verifiers-0.3.1.dev58 → verifiers-0.3.1.dev59}/verifiers/cli/tui.py +0 -0
- {verifiers-0.3.1.dev58 → verifiers-0.3.1.dev59}/verifiers/legacy/__init__.py +0 -0
- {verifiers-0.3.1.dev58 → verifiers-0.3.1.dev59}/verifiers/legacy/clients/__init__.py +0 -0
- {verifiers-0.3.1.dev58 → verifiers-0.3.1.dev59}/verifiers/legacy/clients/anthropic_messages_client.py +0 -0
- {verifiers-0.3.1.dev58 → verifiers-0.3.1.dev59}/verifiers/legacy/clients/client.py +0 -0
- {verifiers-0.3.1.dev58 → verifiers-0.3.1.dev59}/verifiers/legacy/clients/nemorl_chat_completions_client.py +0 -0
- {verifiers-0.3.1.dev58 → verifiers-0.3.1.dev59}/verifiers/legacy/clients/openai_chat_completions_client.py +0 -0
- {verifiers-0.3.1.dev58 → verifiers-0.3.1.dev59}/verifiers/legacy/clients/openai_chat_completions_token_client.py +0 -0
- {verifiers-0.3.1.dev58 → verifiers-0.3.1.dev59}/verifiers/legacy/clients/openai_completions_client.py +0 -0
- {verifiers-0.3.1.dev58 → verifiers-0.3.1.dev59}/verifiers/legacy/clients/openai_responses_client.py +0 -0
- {verifiers-0.3.1.dev58 → verifiers-0.3.1.dev59}/verifiers/legacy/clients/renderer_client.py +0 -0
- {verifiers-0.3.1.dev58 → verifiers-0.3.1.dev59}/verifiers/legacy/decorators.py +0 -0
- {verifiers-0.3.1.dev58 → verifiers-0.3.1.dev59}/verifiers/legacy/envs/__init__.py +0 -0
- {verifiers-0.3.1.dev58 → verifiers-0.3.1.dev59}/verifiers/legacy/envs/env_group.py +0 -0
- {verifiers-0.3.1.dev58 → verifiers-0.3.1.dev59}/verifiers/legacy/envs/environment.py +0 -0
- {verifiers-0.3.1.dev58 → verifiers-0.3.1.dev59}/verifiers/legacy/envs/experimental/README.md +0 -0
- {verifiers-0.3.1.dev58 → verifiers-0.3.1.dev59}/verifiers/legacy/envs/experimental/__init__.py +0 -0
- {verifiers-0.3.1.dev58 → verifiers-0.3.1.dev59}/verifiers/legacy/envs/experimental/cli_agent_env.py +0 -0
- {verifiers-0.3.1.dev58 → verifiers-0.3.1.dev59}/verifiers/legacy/envs/experimental/composable/README.md +0 -0
- {verifiers-0.3.1.dev58 → verifiers-0.3.1.dev59}/verifiers/legacy/envs/experimental/composable/__init__.py +0 -0
- {verifiers-0.3.1.dev58 → verifiers-0.3.1.dev59}/verifiers/legacy/envs/experimental/composable/_filter.py +0 -0
- {verifiers-0.3.1.dev58 → verifiers-0.3.1.dev59}/verifiers/legacy/envs/experimental/composable/composable_env.py +0 -0
- {verifiers-0.3.1.dev58 → verifiers-0.3.1.dev59}/verifiers/legacy/envs/experimental/composable/harness.py +0 -0
- {verifiers-0.3.1.dev58 → verifiers-0.3.1.dev59}/verifiers/legacy/envs/experimental/composable/harnesses/__init__.py +0 -0
- {verifiers-0.3.1.dev58 → verifiers-0.3.1.dev59}/verifiers/legacy/envs/experimental/composable/harnesses/mini_swe_agent.py +0 -0
- {verifiers-0.3.1.dev58 → verifiers-0.3.1.dev59}/verifiers/legacy/envs/experimental/composable/harnesses/opencode.py +0 -0
- {verifiers-0.3.1.dev58 → verifiers-0.3.1.dev59}/verifiers/legacy/envs/experimental/composable/harnesses/prompt.txt +0 -0
- {verifiers-0.3.1.dev58 → verifiers-0.3.1.dev59}/verifiers/legacy/envs/experimental/composable/harnesses/rlm.py +0 -0
- {verifiers-0.3.1.dev58 → verifiers-0.3.1.dev59}/verifiers/legacy/envs/experimental/composable/sandbox_debug_env.py +0 -0
- {verifiers-0.3.1.dev58 → verifiers-0.3.1.dev59}/verifiers/legacy/envs/experimental/composable/swe_debug_env.py +0 -0
- {verifiers-0.3.1.dev58 → verifiers-0.3.1.dev59}/verifiers/legacy/envs/experimental/composable/task.py +0 -0
- {verifiers-0.3.1.dev58 → verifiers-0.3.1.dev59}/verifiers/legacy/envs/experimental/composable/tasksets/__init__.py +0 -0
- {verifiers-0.3.1.dev58 → verifiers-0.3.1.dev59}/verifiers/legacy/envs/experimental/composable/tasksets/cp/__init__.py +0 -0
- {verifiers-0.3.1.dev58 → verifiers-0.3.1.dev59}/verifiers/legacy/envs/experimental/composable/tasksets/cp/cp_task.py +0 -0
- {verifiers-0.3.1.dev58 → verifiers-0.3.1.dev59}/verifiers/legacy/envs/experimental/composable/tasksets/cp/test_utils.py +0 -0
- {verifiers-0.3.1.dev58 → verifiers-0.3.1.dev59}/verifiers/legacy/envs/experimental/composable/tasksets/harbor/__init__.py +0 -0
- {verifiers-0.3.1.dev58 → verifiers-0.3.1.dev59}/verifiers/legacy/envs/experimental/composable/tasksets/harbor/cli_gym.py +0 -0
- {verifiers-0.3.1.dev58 → verifiers-0.3.1.dev59}/verifiers/legacy/envs/experimental/composable/tasksets/harbor/harbor.py +0 -0
- {verifiers-0.3.1.dev58 → verifiers-0.3.1.dev59}/verifiers/legacy/envs/experimental/composable/tasksets/harbor/terminal_lego.py +0 -0
- {verifiers-0.3.1.dev58 → verifiers-0.3.1.dev59}/verifiers/legacy/envs/experimental/composable/tasksets/math/__init__.py +0 -0
- {verifiers-0.3.1.dev58 → verifiers-0.3.1.dev59}/verifiers/legacy/envs/experimental/composable/tasksets/math/math_task.py +0 -0
- {verifiers-0.3.1.dev58 → verifiers-0.3.1.dev59}/verifiers/legacy/envs/experimental/composable/tasksets/swe/README.md +0 -0
- {verifiers-0.3.1.dev58 → verifiers-0.3.1.dev59}/verifiers/legacy/envs/experimental/composable/tasksets/swe/__init__.py +0 -0
- {verifiers-0.3.1.dev58 → verifiers-0.3.1.dev59}/verifiers/legacy/envs/experimental/composable/tasksets/swe/multi_swe/__init__.py +0 -0
- {verifiers-0.3.1.dev58 → verifiers-0.3.1.dev59}/verifiers/legacy/envs/experimental/composable/tasksets/swe/multi_swe/extract_fix_patch.sh +0 -0
- {verifiers-0.3.1.dev58 → verifiers-0.3.1.dev59}/verifiers/legacy/envs/experimental/composable/tasksets/swe/multi_swe/taskset.py +0 -0
- {verifiers-0.3.1.dev58 → verifiers-0.3.1.dev59}/verifiers/legacy/envs/experimental/composable/tasksets/swe/openswe/__init__.py +0 -0
- {verifiers-0.3.1.dev58 → verifiers-0.3.1.dev59}/verifiers/legacy/envs/experimental/composable/tasksets/swe/openswe/taskset.py +0 -0
- {verifiers-0.3.1.dev58 → verifiers-0.3.1.dev59}/verifiers/legacy/envs/experimental/composable/tasksets/swe/r2e_gym/__init__.py +0 -0
- {verifiers-0.3.1.dev58 → verifiers-0.3.1.dev59}/verifiers/legacy/envs/experimental/composable/tasksets/swe/r2e_gym/log_parser.py +0 -0
- {verifiers-0.3.1.dev58 → verifiers-0.3.1.dev59}/verifiers/legacy/envs/experimental/composable/tasksets/swe/r2e_gym/taskset.py +0 -0
- {verifiers-0.3.1.dev58 → verifiers-0.3.1.dev59}/verifiers/legacy/envs/experimental/composable/tasksets/swe/scale_swe/__init__.py +0 -0
- {verifiers-0.3.1.dev58 → verifiers-0.3.1.dev59}/verifiers/legacy/envs/experimental/composable/tasksets/swe/scale_swe/taskset.py +0 -0
- {verifiers-0.3.1.dev58 → verifiers-0.3.1.dev59}/verifiers/legacy/envs/experimental/composable/tasksets/swe/shared/__init__.py +0 -0
- {verifiers-0.3.1.dev58 → verifiers-0.3.1.dev59}/verifiers/legacy/envs/experimental/composable/tasksets/swe/shared/test_patch.py +0 -0
- {verifiers-0.3.1.dev58 → verifiers-0.3.1.dev59}/verifiers/legacy/envs/experimental/composable/tasksets/swe/swe_bench/__init__.py +0 -0
- {verifiers-0.3.1.dev58 → verifiers-0.3.1.dev59}/verifiers/legacy/envs/experimental/composable/tasksets/swe/swe_bench/taskset.py +0 -0
- {verifiers-0.3.1.dev58 → verifiers-0.3.1.dev59}/verifiers/legacy/envs/experimental/composable/tasksets/swe/swe_lego/__init__.py +0 -0
- {verifiers-0.3.1.dev58 → verifiers-0.3.1.dev59}/verifiers/legacy/envs/experimental/composable/tasksets/swe/swe_lego/taskset.py +0 -0
- {verifiers-0.3.1.dev58 → verifiers-0.3.1.dev59}/verifiers/legacy/envs/experimental/composable/tasksets/swe/swe_rebench_v2/__init__.py +0 -0
- {verifiers-0.3.1.dev58 → verifiers-0.3.1.dev59}/verifiers/legacy/envs/experimental/composable/tasksets/swe/swe_rebench_v2/log_parsers.py +0 -0
- {verifiers-0.3.1.dev58 → verifiers-0.3.1.dev59}/verifiers/legacy/envs/experimental/composable/tasksets/swe/swe_rebench_v2/taskset.py +0 -0
- {verifiers-0.3.1.dev58 → verifiers-0.3.1.dev59}/verifiers/legacy/envs/experimental/composable/tasksets/swe/swe_smith/__init__.py +0 -0
- {verifiers-0.3.1.dev58 → verifiers-0.3.1.dev59}/verifiers/legacy/envs/experimental/composable/tasksets/swe/swe_smith/taskset.py +0 -0
- {verifiers-0.3.1.dev58 → verifiers-0.3.1.dev59}/verifiers/legacy/envs/experimental/composable/tasksets/swe/swe_tasksets.py +0 -0
- {verifiers-0.3.1.dev58 → verifiers-0.3.1.dev59}/verifiers/legacy/envs/experimental/gym_env.py +0 -0
- {verifiers-0.3.1.dev58 → verifiers-0.3.1.dev59}/verifiers/legacy/envs/experimental/harbor_env/__init__.py +0 -0
- {verifiers-0.3.1.dev58 → verifiers-0.3.1.dev59}/verifiers/legacy/envs/experimental/harbor_env/env.py +0 -0
- {verifiers-0.3.1.dev58 → verifiers-0.3.1.dev59}/verifiers/legacy/envs/experimental/harbor_env/mcp.py +0 -0
- {verifiers-0.3.1.dev58 → verifiers-0.3.1.dev59}/verifiers/legacy/envs/experimental/mcp_env.py +0 -0
- {verifiers-0.3.1.dev58 → verifiers-0.3.1.dev59}/verifiers/legacy/envs/experimental/opencode_env.py +0 -0
- {verifiers-0.3.1.dev58 → verifiers-0.3.1.dev59}/verifiers/legacy/envs/experimental/opencode_qa_env.py +0 -0
- {verifiers-0.3.1.dev58 → verifiers-0.3.1.dev59}/verifiers/legacy/envs/experimental/opencode_rlm_env.py +0 -0
- {verifiers-0.3.1.dev58 → verifiers-0.3.1.dev59}/verifiers/legacy/envs/experimental/sandbox_mixin.py +0 -0
- {verifiers-0.3.1.dev58 → verifiers-0.3.1.dev59}/verifiers/legacy/envs/experimental/utils/__init__.py +0 -0
- {verifiers-0.3.1.dev58 → verifiers-0.3.1.dev59}/verifiers/legacy/envs/experimental/utils/file_locks.py +0 -0
- {verifiers-0.3.1.dev58 → verifiers-0.3.1.dev59}/verifiers/legacy/envs/experimental/utils/git_checkout_cache.py +0 -0
- {verifiers-0.3.1.dev58 → verifiers-0.3.1.dev59}/verifiers/legacy/envs/integrations/README.md +0 -0
- {verifiers-0.3.1.dev58 → verifiers-0.3.1.dev59}/verifiers/legacy/envs/integrations/__init__.py +0 -0
- {verifiers-0.3.1.dev58 → verifiers-0.3.1.dev59}/verifiers/legacy/envs/integrations/browser_env/README.md +0 -0
- {verifiers-0.3.1.dev58 → verifiers-0.3.1.dev59}/verifiers/legacy/envs/integrations/browser_env/__init__.py +0 -0
- {verifiers-0.3.1.dev58 → verifiers-0.3.1.dev59}/verifiers/legacy/envs/integrations/browser_env/browser_env.py +0 -0
- {verifiers-0.3.1.dev58 → verifiers-0.3.1.dev59}/verifiers/legacy/envs/integrations/browser_env/modes/__init__.py +0 -0
- {verifiers-0.3.1.dev58 → verifiers-0.3.1.dev59}/verifiers/legacy/envs/integrations/browser_env/modes/base.py +0 -0
- {verifiers-0.3.1.dev58 → verifiers-0.3.1.dev59}/verifiers/legacy/envs/integrations/browser_env/modes/cua_mode.py +0 -0
- {verifiers-0.3.1.dev58 → verifiers-0.3.1.dev59}/verifiers/legacy/envs/integrations/browser_env/modes/dom_mode.py +0 -0
- {verifiers-0.3.1.dev58 → verifiers-0.3.1.dev59}/verifiers/legacy/envs/integrations/openenv_env.py +0 -0
- {verifiers-0.3.1.dev58 → verifiers-0.3.1.dev59}/verifiers/legacy/envs/integrations/reasoninggym_env.py +0 -0
- {verifiers-0.3.1.dev58 → verifiers-0.3.1.dev59}/verifiers/legacy/envs/integrations/textarena_env.py +0 -0
- {verifiers-0.3.1.dev58 → verifiers-0.3.1.dev59}/verifiers/legacy/envs/multiturn_env.py +0 -0
- {verifiers-0.3.1.dev58 → verifiers-0.3.1.dev59}/verifiers/legacy/envs/python_env.py +0 -0
- {verifiers-0.3.1.dev58 → verifiers-0.3.1.dev59}/verifiers/legacy/envs/sandbox_env.py +0 -0
- {verifiers-0.3.1.dev58 → verifiers-0.3.1.dev59}/verifiers/legacy/envs/singleturn_env.py +0 -0
- {verifiers-0.3.1.dev58 → verifiers-0.3.1.dev59}/verifiers/legacy/envs/stateful_tool_env.py +0 -0
- {verifiers-0.3.1.dev58 → verifiers-0.3.1.dev59}/verifiers/legacy/envs/tool_env.py +0 -0
- {verifiers-0.3.1.dev58 → verifiers-0.3.1.dev59}/verifiers/legacy/errors.py +0 -0
- {verifiers-0.3.1.dev58 → verifiers-0.3.1.dev59}/verifiers/legacy/gepa/__init__.py +0 -0
- {verifiers-0.3.1.dev58 → verifiers-0.3.1.dev59}/verifiers/legacy/gepa/adapter.py +0 -0
- {verifiers-0.3.1.dev58 → verifiers-0.3.1.dev59}/verifiers/legacy/gepa/config.py +0 -0
- {verifiers-0.3.1.dev58 → verifiers-0.3.1.dev59}/verifiers/legacy/gepa/display.py +0 -0
- {verifiers-0.3.1.dev58 → verifiers-0.3.1.dev59}/verifiers/legacy/gepa/gepa_utils.py +0 -0
- {verifiers-0.3.1.dev58 → verifiers-0.3.1.dev59}/verifiers/legacy/parsers/__init__.py +0 -0
- {verifiers-0.3.1.dev58 → verifiers-0.3.1.dev59}/verifiers/legacy/parsers/maybe_think_parser.py +0 -0
- {verifiers-0.3.1.dev58 → verifiers-0.3.1.dev59}/verifiers/legacy/parsers/parser.py +0 -0
- {verifiers-0.3.1.dev58 → verifiers-0.3.1.dev59}/verifiers/legacy/parsers/think_parser.py +0 -0
- {verifiers-0.3.1.dev58 → verifiers-0.3.1.dev59}/verifiers/legacy/parsers/xml_parser.py +0 -0
- {verifiers-0.3.1.dev58 → verifiers-0.3.1.dev59}/verifiers/legacy/rubrics/__init__.py +0 -0
- {verifiers-0.3.1.dev58 → verifiers-0.3.1.dev59}/verifiers/legacy/rubrics/experimental/hybrid_math_rubric.py +0 -0
- {verifiers-0.3.1.dev58 → verifiers-0.3.1.dev59}/verifiers/legacy/rubrics/judge_rubric.py +0 -0
- {verifiers-0.3.1.dev58 → verifiers-0.3.1.dev59}/verifiers/legacy/rubrics/math_rubric.py +0 -0
- {verifiers-0.3.1.dev58 → verifiers-0.3.1.dev59}/verifiers/legacy/rubrics/rubric.py +0 -0
- {verifiers-0.3.1.dev58 → verifiers-0.3.1.dev59}/verifiers/legacy/rubrics/rubric_group.py +0 -0
- {verifiers-0.3.1.dev58 → verifiers-0.3.1.dev59}/verifiers/legacy/scripts/__init__.py +0 -0
- {verifiers-0.3.1.dev58 → verifiers-0.3.1.dev59}/verifiers/legacy/scripts/build.py +0 -0
- {verifiers-0.3.1.dev58 → verifiers-0.3.1.dev59}/verifiers/legacy/scripts/eval.py +0 -0
- {verifiers-0.3.1.dev58 → verifiers-0.3.1.dev59}/verifiers/legacy/scripts/gepa.py +0 -0
- {verifiers-0.3.1.dev58 → verifiers-0.3.1.dev59}/verifiers/legacy/scripts/init.py +0 -0
- {verifiers-0.3.1.dev58 → verifiers-0.3.1.dev59}/verifiers/legacy/scripts/install.py +0 -0
- {verifiers-0.3.1.dev58 → verifiers-0.3.1.dev59}/verifiers/legacy/scripts/setup.py +0 -0
- {verifiers-0.3.1.dev58 → verifiers-0.3.1.dev59}/verifiers/legacy/scripts/tui.py +0 -0
- {verifiers-0.3.1.dev58 → verifiers-0.3.1.dev59}/verifiers/legacy/serve/__init__.py +0 -0
- {verifiers-0.3.1.dev58 → verifiers-0.3.1.dev59}/verifiers/legacy/serve/client/env_client.py +0 -0
- {verifiers-0.3.1.dev58 → verifiers-0.3.1.dev59}/verifiers/legacy/serve/client/zmq_env_client.py +0 -0
- {verifiers-0.3.1.dev58 → verifiers-0.3.1.dev59}/verifiers/legacy/serve/server/__init__.py +0 -0
- {verifiers-0.3.1.dev58 → verifiers-0.3.1.dev59}/verifiers/legacy/serve/server/env_router.py +0 -0
- {verifiers-0.3.1.dev58 → verifiers-0.3.1.dev59}/verifiers/legacy/serve/server/env_server.py +0 -0
- {verifiers-0.3.1.dev58 → verifiers-0.3.1.dev59}/verifiers/legacy/serve/server/env_worker.py +0 -0
- {verifiers-0.3.1.dev58 → verifiers-0.3.1.dev59}/verifiers/legacy/serve/server/zmq_env_server.py +0 -0
- {verifiers-0.3.1.dev58 → verifiers-0.3.1.dev59}/verifiers/legacy/serve/types.py +0 -0
- {verifiers-0.3.1.dev58 → verifiers-0.3.1.dev59}/verifiers/legacy/types.py +0 -0
- {verifiers-0.3.1.dev58 → verifiers-0.3.1.dev59}/verifiers/legacy/utils/__init__.py +0 -0
- {verifiers-0.3.1.dev58 → verifiers-0.3.1.dev59}/verifiers/legacy/utils/async_utils.py +0 -0
- {verifiers-0.3.1.dev58 → verifiers-0.3.1.dev59}/verifiers/legacy/utils/client_utils.py +0 -0
- {verifiers-0.3.1.dev58 → verifiers-0.3.1.dev59}/verifiers/legacy/utils/config_utils.py +0 -0
- {verifiers-0.3.1.dev58 → verifiers-0.3.1.dev59}/verifiers/legacy/utils/data_utils.py +0 -0
- {verifiers-0.3.1.dev58 → verifiers-0.3.1.dev59}/verifiers/legacy/utils/display_utils.py +0 -0
- {verifiers-0.3.1.dev58 → verifiers-0.3.1.dev59}/verifiers/legacy/utils/env_config_utils.py +0 -0
- {verifiers-0.3.1.dev58 → verifiers-0.3.1.dev59}/verifiers/legacy/utils/env_utils.py +0 -0
- {verifiers-0.3.1.dev58 → verifiers-0.3.1.dev59}/verifiers/legacy/utils/error_utils.py +0 -0
- {verifiers-0.3.1.dev58 → verifiers-0.3.1.dev59}/verifiers/legacy/utils/eval_display.py +0 -0
- {verifiers-0.3.1.dev58 → verifiers-0.3.1.dev59}/verifiers/legacy/utils/eval_utils.py +0 -0
- {verifiers-0.3.1.dev58 → verifiers-0.3.1.dev59}/verifiers/legacy/utils/heartbeat.py +0 -0
- {verifiers-0.3.1.dev58 → verifiers-0.3.1.dev59}/verifiers/legacy/utils/import_utils.py +0 -0
- {verifiers-0.3.1.dev58 → verifiers-0.3.1.dev59}/verifiers/legacy/utils/install_utils.py +0 -0
- {verifiers-0.3.1.dev58 → verifiers-0.3.1.dev59}/verifiers/legacy/utils/interception_utils.py +0 -0
- {verifiers-0.3.1.dev58 → verifiers-0.3.1.dev59}/verifiers/legacy/utils/logging_utils.py +0 -0
- {verifiers-0.3.1.dev58 → verifiers-0.3.1.dev59}/verifiers/legacy/utils/message_utils.py +0 -0
- {verifiers-0.3.1.dev58 → verifiers-0.3.1.dev59}/verifiers/legacy/utils/metric_utils.py +0 -0
- {verifiers-0.3.1.dev58 → verifiers-0.3.1.dev59}/verifiers/legacy/utils/path_utils.py +0 -0
- {verifiers-0.3.1.dev58 → verifiers-0.3.1.dev59}/verifiers/legacy/utils/pricing_utils.py +0 -0
- {verifiers-0.3.1.dev58 → verifiers-0.3.1.dev59}/verifiers/legacy/utils/process_utils.py +0 -0
- {verifiers-0.3.1.dev58 → verifiers-0.3.1.dev59}/verifiers/legacy/utils/response_utils.py +0 -0
- {verifiers-0.3.1.dev58 → verifiers-0.3.1.dev59}/verifiers/legacy/utils/save_utils.py +0 -0
- {verifiers-0.3.1.dev58 → verifiers-0.3.1.dev59}/verifiers/legacy/utils/serve_utils.py +0 -0
- {verifiers-0.3.1.dev58 → verifiers-0.3.1.dev59}/verifiers/legacy/utils/thread_utils.py +0 -0
- {verifiers-0.3.1.dev58 → verifiers-0.3.1.dev59}/verifiers/legacy/utils/threaded_sandbox_client.py +0 -0
- {verifiers-0.3.1.dev58 → verifiers-0.3.1.dev59}/verifiers/legacy/utils/tool_utils.py +0 -0
- {verifiers-0.3.1.dev58 → verifiers-0.3.1.dev59}/verifiers/legacy/utils/usage_utils.py +0 -0
- {verifiers-0.3.1.dev58 → verifiers-0.3.1.dev59}/verifiers/legacy/utils/version_utils.py +0 -0
- {verifiers-0.3.1.dev58 → verifiers-0.3.1.dev59}/verifiers/v1/acp/__init__.py +0 -0
- {verifiers-0.3.1.dev58 → verifiers-0.3.1.dev59}/verifiers/v1/acp/runner.py +0 -0
- {verifiers-0.3.1.dev58 → verifiers-0.3.1.dev59}/verifiers/v1/agent.py +0 -0
- {verifiers-0.3.1.dev58 → verifiers-0.3.1.dev59}/verifiers/v1/cli/__init__.py +0 -0
- {verifiers-0.3.1.dev58 → verifiers-0.3.1.dev59}/verifiers/v1/cli/dashboard/__init__.py +0 -0
- {verifiers-0.3.1.dev58 → verifiers-0.3.1.dev59}/verifiers/v1/cli/dashboard/base.py +0 -0
- {verifiers-0.3.1.dev58 → verifiers-0.3.1.dev59}/verifiers/v1/cli/dashboard/eval.py +0 -0
- {verifiers-0.3.1.dev58 → verifiers-0.3.1.dev59}/verifiers/v1/cli/dashboard/replay.py +0 -0
- {verifiers-0.3.1.dev58 → verifiers-0.3.1.dev59}/verifiers/v1/cli/dashboard/validate.py +0 -0
- {verifiers-0.3.1.dev58 → verifiers-0.3.1.dev59}/verifiers/v1/cli/debug.py +0 -0
- {verifiers-0.3.1.dev58 → verifiers-0.3.1.dev59}/verifiers/v1/cli/eval/__init__.py +0 -0
- {verifiers-0.3.1.dev58 → verifiers-0.3.1.dev59}/verifiers/v1/cli/eval/main.py +0 -0
- {verifiers-0.3.1.dev58 → verifiers-0.3.1.dev59}/verifiers/v1/cli/gepa.py +0 -0
- {verifiers-0.3.1.dev58 → verifiers-0.3.1.dev59}/verifiers/v1/cli/init.py +0 -0
- {verifiers-0.3.1.dev58 → verifiers-0.3.1.dev59}/verifiers/v1/cli/replay.py +0 -0
- {verifiers-0.3.1.dev58 → verifiers-0.3.1.dev59}/verifiers/v1/cli/resolve.py +0 -0
- {verifiers-0.3.1.dev58 → verifiers-0.3.1.dev59}/verifiers/v1/cli/resume.py +0 -0
- {verifiers-0.3.1.dev58 → verifiers-0.3.1.dev59}/verifiers/v1/cli/validate.py +0 -0
- {verifiers-0.3.1.dev58 → verifiers-0.3.1.dev59}/verifiers/v1/clients/__init__.py +0 -0
- {verifiers-0.3.1.dev58 → verifiers-0.3.1.dev59}/verifiers/v1/clients/base.py +0 -0
- {verifiers-0.3.1.dev58 → verifiers-0.3.1.dev59}/verifiers/v1/clients/client.py +0 -0
- {verifiers-0.3.1.dev58 → verifiers-0.3.1.dev59}/verifiers/v1/clients/eval.py +0 -0
- {verifiers-0.3.1.dev58 → verifiers-0.3.1.dev59}/verifiers/v1/clients/train.py +0 -0
- {verifiers-0.3.1.dev58 → verifiers-0.3.1.dev59}/verifiers/v1/configs/__init__.py +0 -0
- {verifiers-0.3.1.dev58 → verifiers-0.3.1.dev59}/verifiers/v1/configs/agent.py +0 -0
- {verifiers-0.3.1.dev58 → verifiers-0.3.1.dev59}/verifiers/v1/configs/cli/__init__.py +0 -0
- {verifiers-0.3.1.dev58 → verifiers-0.3.1.dev59}/verifiers/v1/configs/cli/debug.py +0 -0
- {verifiers-0.3.1.dev58 → verifiers-0.3.1.dev59}/verifiers/v1/configs/cli/env.py +0 -0
- {verifiers-0.3.1.dev58 → verifiers-0.3.1.dev59}/verifiers/v1/configs/cli/eval.py +0 -0
- {verifiers-0.3.1.dev58 → verifiers-0.3.1.dev59}/verifiers/v1/configs/cli/init.py +0 -0
- {verifiers-0.3.1.dev58 → verifiers-0.3.1.dev59}/verifiers/v1/configs/cli/replay.py +0 -0
- {verifiers-0.3.1.dev58 → verifiers-0.3.1.dev59}/verifiers/v1/configs/cli/validate.py +0 -0
- {verifiers-0.3.1.dev58 → verifiers-0.3.1.dev59}/verifiers/v1/configs/client.py +0 -0
- {verifiers-0.3.1.dev58 → verifiers-0.3.1.dev59}/verifiers/v1/configs/env.py +0 -0
- {verifiers-0.3.1.dev58 → verifiers-0.3.1.dev59}/verifiers/v1/configs/harness.py +0 -0
- {verifiers-0.3.1.dev58 → verifiers-0.3.1.dev59}/verifiers/v1/configs/judge.py +0 -0
- {verifiers-0.3.1.dev58 → verifiers-0.3.1.dev59}/verifiers/v1/configs/retries.py +0 -0
- {verifiers-0.3.1.dev58 → verifiers-0.3.1.dev59}/verifiers/v1/configs/runtime.py +0 -0
- {verifiers-0.3.1.dev58 → verifiers-0.3.1.dev59}/verifiers/v1/configs/serve.py +0 -0
- {verifiers-0.3.1.dev58 → verifiers-0.3.1.dev59}/verifiers/v1/configs/task.py +0 -0
- {verifiers-0.3.1.dev58 → verifiers-0.3.1.dev59}/verifiers/v1/configs/taskset.py +0 -0
- {verifiers-0.3.1.dev58 → verifiers-0.3.1.dev59}/verifiers/v1/dialects/__init__.py +0 -0
- {verifiers-0.3.1.dev58 → verifiers-0.3.1.dev59}/verifiers/v1/dialects/anthropic.py +0 -0
- {verifiers-0.3.1.dev58 → verifiers-0.3.1.dev59}/verifiers/v1/dialects/base.py +0 -0
- {verifiers-0.3.1.dev58 → verifiers-0.3.1.dev59}/verifiers/v1/dialects/chat.py +0 -0
- {verifiers-0.3.1.dev58 → verifiers-0.3.1.dev59}/verifiers/v1/dialects/responses.py +0 -0
- {verifiers-0.3.1.dev58 → verifiers-0.3.1.dev59}/verifiers/v1/envs/__init__.py +0 -0
- {verifiers-0.3.1.dev58 → verifiers-0.3.1.dev59}/verifiers/v1/envs/agentic_judge/__init__.py +0 -0
- {verifiers-0.3.1.dev58 → verifiers-0.3.1.dev59}/verifiers/v1/envs/agentic_judge/env.py +0 -0
- {verifiers-0.3.1.dev58 → verifiers-0.3.1.dev59}/verifiers/v1/envs/best_of_n/__init__.py +0 -0
- {verifiers-0.3.1.dev58 → verifiers-0.3.1.dev59}/verifiers/v1/envs/best_of_n/env.py +0 -0
- {verifiers-0.3.1.dev58 → verifiers-0.3.1.dev59}/verifiers/v1/envs/shared_agentic_judge/__init__.py +0 -0
- {verifiers-0.3.1.dev58 → verifiers-0.3.1.dev59}/verifiers/v1/envs/single_agent/__init__.py +0 -0
- {verifiers-0.3.1.dev58 → verifiers-0.3.1.dev59}/verifiers/v1/envs/single_agent/env.py +0 -0
- {verifiers-0.3.1.dev58 → verifiers-0.3.1.dev59}/verifiers/v1/envs/user_sim/__init__.py +0 -0
- {verifiers-0.3.1.dev58 → verifiers-0.3.1.dev59}/verifiers/v1/envs/user_sim/env.py +0 -0
- {verifiers-0.3.1.dev58 → verifiers-0.3.1.dev59}/verifiers/v1/errors.py +0 -0
- {verifiers-0.3.1.dev58 → verifiers-0.3.1.dev59}/verifiers/v1/gepa/__init__.py +0 -0
- {verifiers-0.3.1.dev58 → verifiers-0.3.1.dev59}/verifiers/v1/gepa/adapter.py +0 -0
- {verifiers-0.3.1.dev58 → verifiers-0.3.1.dev59}/verifiers/v1/gepa/config.py +0 -0
- {verifiers-0.3.1.dev58 → verifiers-0.3.1.dev59}/verifiers/v1/gepa/dataset.py +0 -0
- {verifiers-0.3.1.dev58 → verifiers-0.3.1.dev59}/verifiers/v1/gepa/reflection.py +0 -0
- {verifiers-0.3.1.dev58 → verifiers-0.3.1.dev59}/verifiers/v1/gepa/runner.py +0 -0
- {verifiers-0.3.1.dev58 → verifiers-0.3.1.dev59}/verifiers/v1/harness.py +0 -0
- {verifiers-0.3.1.dev58 → verifiers-0.3.1.dev59}/verifiers/v1/harnesses/__init__.py +0 -0
- {verifiers-0.3.1.dev58 → verifiers-0.3.1.dev59}/verifiers/v1/harnesses/bash/__init__.py +0 -0
- {verifiers-0.3.1.dev58 → verifiers-0.3.1.dev59}/verifiers/v1/harnesses/bash/harness.py +0 -0
- {verifiers-0.3.1.dev58 → verifiers-0.3.1.dev59}/verifiers/v1/harnesses/bash/program.py +0 -0
- {verifiers-0.3.1.dev58 → verifiers-0.3.1.dev59}/verifiers/v1/harnesses/browser_use/__init__.py +0 -0
- {verifiers-0.3.1.dev58 → verifiers-0.3.1.dev59}/verifiers/v1/harnesses/browser_use/harness.py +0 -0
- {verifiers-0.3.1.dev58 → verifiers-0.3.1.dev59}/verifiers/v1/harnesses/browser_use/program.py +0 -0
- {verifiers-0.3.1.dev58 → verifiers-0.3.1.dev59}/verifiers/v1/harnesses/claude_code/__init__.py +0 -0
- {verifiers-0.3.1.dev58 → verifiers-0.3.1.dev59}/verifiers/v1/harnesses/claude_code/harness.py +0 -0
- {verifiers-0.3.1.dev58 → verifiers-0.3.1.dev59}/verifiers/v1/harnesses/codex/__init__.py +0 -0
- {verifiers-0.3.1.dev58 → verifiers-0.3.1.dev59}/verifiers/v1/harnesses/codex/harness.py +0 -0
- {verifiers-0.3.1.dev58 → verifiers-0.3.1.dev59}/verifiers/v1/harnesses/hermes_agent/__init__.py +0 -0
- {verifiers-0.3.1.dev58 → verifiers-0.3.1.dev59}/verifiers/v1/harnesses/hermes_agent/harness.py +0 -0
- {verifiers-0.3.1.dev58 → verifiers-0.3.1.dev59}/verifiers/v1/harnesses/hermes_agent/program.py +0 -0
- {verifiers-0.3.1.dev58 → verifiers-0.3.1.dev59}/verifiers/v1/harnesses/kimi_code/__init__.py +0 -0
- {verifiers-0.3.1.dev58 → verifiers-0.3.1.dev59}/verifiers/v1/harnesses/kimi_code/harness.py +0 -0
- {verifiers-0.3.1.dev58 → verifiers-0.3.1.dev59}/verifiers/v1/harnesses/mini_swe_agent/__init__.py +0 -0
- {verifiers-0.3.1.dev58 → verifiers-0.3.1.dev59}/verifiers/v1/harnesses/mini_swe_agent/harness.py +0 -0
- {verifiers-0.3.1.dev58 → verifiers-0.3.1.dev59}/verifiers/v1/harnesses/mini_swe_agent/program.py +0 -0
- {verifiers-0.3.1.dev58 → verifiers-0.3.1.dev59}/verifiers/v1/harnesses/node.py +0 -0
- {verifiers-0.3.1.dev58 → verifiers-0.3.1.dev59}/verifiers/v1/harnesses/null/__init__.py +0 -0
- {verifiers-0.3.1.dev58 → verifiers-0.3.1.dev59}/verifiers/v1/harnesses/null/harness.py +0 -0
- {verifiers-0.3.1.dev58 → verifiers-0.3.1.dev59}/verifiers/v1/harnesses/null/program.py +0 -0
- {verifiers-0.3.1.dev58 → verifiers-0.3.1.dev59}/verifiers/v1/harnesses/openclaw/__init__.py +0 -0
- {verifiers-0.3.1.dev58 → verifiers-0.3.1.dev59}/verifiers/v1/harnesses/openclaw/harness.py +0 -0
- {verifiers-0.3.1.dev58 → verifiers-0.3.1.dev59}/verifiers/v1/harnesses/pi/__init__.py +0 -0
- {verifiers-0.3.1.dev58 → verifiers-0.3.1.dev59}/verifiers/v1/harnesses/pi/harness.py +0 -0
- {verifiers-0.3.1.dev58 → verifiers-0.3.1.dev59}/verifiers/v1/harnesses/pool/__init__.py +0 -0
- {verifiers-0.3.1.dev58 → verifiers-0.3.1.dev59}/verifiers/v1/harnesses/pool/harness.py +0 -0
- {verifiers-0.3.1.dev58 → verifiers-0.3.1.dev59}/verifiers/v1/harnesses/rlm/__init__.py +0 -0
- {verifiers-0.3.1.dev58 → verifiers-0.3.1.dev59}/verifiers/v1/harnesses/rlm/harness.py +0 -0
- {verifiers-0.3.1.dev58 → verifiers-0.3.1.dev59}/verifiers/v1/harnesses/terminus_2/__init__.py +0 -0
- {verifiers-0.3.1.dev58 → verifiers-0.3.1.dev59}/verifiers/v1/harnesses/terminus_2/harness.py +0 -0
- {verifiers-0.3.1.dev58 → verifiers-0.3.1.dev59}/verifiers/v1/harnesses/terminus_2/program.py +0 -0
- {verifiers-0.3.1.dev58 → verifiers-0.3.1.dev59}/verifiers/v1/interception/__init__.py +0 -0
- {verifiers-0.3.1.dev58 → verifiers-0.3.1.dev59}/verifiers/v1/interception/base.py +0 -0
- {verifiers-0.3.1.dev58 → verifiers-0.3.1.dev59}/verifiers/v1/interception/pool.py +0 -0
- {verifiers-0.3.1.dev58 → verifiers-0.3.1.dev59}/verifiers/v1/interception/server.py +0 -0
- {verifiers-0.3.1.dev58 → verifiers-0.3.1.dev59}/verifiers/v1/interception/tool.py +0 -0
- {verifiers-0.3.1.dev58 → verifiers-0.3.1.dev59}/verifiers/v1/interception/tunnel/__init__.py +0 -0
- {verifiers-0.3.1.dev58 → verifiers-0.3.1.dev59}/verifiers/v1/interception/tunnel/base.py +0 -0
- {verifiers-0.3.1.dev58 → verifiers-0.3.1.dev59}/verifiers/v1/interception/tunnel/custom.py +0 -0
- {verifiers-0.3.1.dev58 → verifiers-0.3.1.dev59}/verifiers/v1/interception/tunnel/prime.py +0 -0
- {verifiers-0.3.1.dev58 → verifiers-0.3.1.dev59}/verifiers/v1/judge.py +0 -0
- {verifiers-0.3.1.dev58 → verifiers-0.3.1.dev59}/verifiers/v1/judges/__init__.py +0 -0
- {verifiers-0.3.1.dev58 → verifiers-0.3.1.dev59}/verifiers/v1/judges/reference.py +0 -0
- {verifiers-0.3.1.dev58 → verifiers-0.3.1.dev59}/verifiers/v1/judges/reference.txt +0 -0
- {verifiers-0.3.1.dev58 → verifiers-0.3.1.dev59}/verifiers/v1/judges/rubric.py +0 -0
- {verifiers-0.3.1.dev58 → verifiers-0.3.1.dev59}/verifiers/v1/judges/rubric.txt +0 -0
- {verifiers-0.3.1.dev58 → verifiers-0.3.1.dev59}/verifiers/v1/mcp/__init__.py +0 -0
- {verifiers-0.3.1.dev58 → verifiers-0.3.1.dev59}/verifiers/v1/mcp/launch.py +0 -0
- {verifiers-0.3.1.dev58 → verifiers-0.3.1.dev59}/verifiers/v1/mcp/server.py +0 -0
- {verifiers-0.3.1.dev58 → verifiers-0.3.1.dev59}/verifiers/v1/mcp/toolset.py +0 -0
- {verifiers-0.3.1.dev58 → verifiers-0.3.1.dev59}/verifiers/v1/rollout.py +0 -0
- {verifiers-0.3.1.dev58 → verifiers-0.3.1.dev59}/verifiers/v1/runtimes/__init__.py +0 -0
- {verifiers-0.3.1.dev58 → verifiers-0.3.1.dev59}/verifiers/v1/runtimes/base.py +0 -0
- {verifiers-0.3.1.dev58 → verifiers-0.3.1.dev59}/verifiers/v1/runtimes/docker/__init__.py +0 -0
- {verifiers-0.3.1.dev58 → verifiers-0.3.1.dev59}/verifiers/v1/runtimes/docker/egress.py +0 -0
- {verifiers-0.3.1.dev58 → verifiers-0.3.1.dev59}/verifiers/v1/runtimes/limiters.py +0 -0
- {verifiers-0.3.1.dev58 → verifiers-0.3.1.dev59}/verifiers/v1/runtimes/modal.py +0 -0
- {verifiers-0.3.1.dev58 → verifiers-0.3.1.dev59}/verifiers/v1/runtimes/prime.py +0 -0
- {verifiers-0.3.1.dev58 → verifiers-0.3.1.dev59}/verifiers/v1/runtimes/subprocess.py +0 -0
- {verifiers-0.3.1.dev58 → verifiers-0.3.1.dev59}/verifiers/v1/serve/__init__.py +0 -0
- {verifiers-0.3.1.dev58 → verifiers-0.3.1.dev59}/verifiers/v1/serve/client.py +0 -0
- {verifiers-0.3.1.dev58 → verifiers-0.3.1.dev59}/verifiers/v1/serve/encoding.py +0 -0
- {verifiers-0.3.1.dev58 → verifiers-0.3.1.dev59}/verifiers/v1/serve/pool.py +0 -0
- {verifiers-0.3.1.dev58 → verifiers-0.3.1.dev59}/verifiers/v1/serve/server.py +0 -0
- {verifiers-0.3.1.dev58 → verifiers-0.3.1.dev59}/verifiers/v1/serve/types.py +0 -0
- {verifiers-0.3.1.dev58 → verifiers-0.3.1.dev59}/verifiers/v1/session.py +0 -0
- {verifiers-0.3.1.dev58 → verifiers-0.3.1.dev59}/verifiers/v1/state.py +0 -0
- {verifiers-0.3.1.dev58 → verifiers-0.3.1.dev59}/verifiers/v1/task.py +0 -0
- {verifiers-0.3.1.dev58 → verifiers-0.3.1.dev59}/verifiers/v1/taskset.py +0 -0
- {verifiers-0.3.1.dev58 → verifiers-0.3.1.dev59}/verifiers/v1/tasksets/__init__.py +0 -0
- {verifiers-0.3.1.dev58 → verifiers-0.3.1.dev59}/verifiers/v1/tasksets/harbor/__init__.py +0 -0
- {verifiers-0.3.1.dev58 → verifiers-0.3.1.dev59}/verifiers/v1/tasksets/harbor/env.py +0 -0
- {verifiers-0.3.1.dev58 → verifiers-0.3.1.dev59}/verifiers/v1/tasksets/harbor/taskset.py +0 -0
- {verifiers-0.3.1.dev58 → verifiers-0.3.1.dev59}/verifiers/v1/tasksets/lean/__init__.py +0 -0
- {verifiers-0.3.1.dev58 → verifiers-0.3.1.dev59}/verifiers/v1/tasksets/lean/scoring.py +0 -0
- {verifiers-0.3.1.dev58 → verifiers-0.3.1.dev59}/verifiers/v1/tasksets/lean/taskset.py +0 -0
- {verifiers-0.3.1.dev58 → verifiers-0.3.1.dev59}/verifiers/v1/tasksets/nemo_gym/__init__.py +0 -0
- {verifiers-0.3.1.dev58 → verifiers-0.3.1.dev59}/verifiers/v1/tasksets/nemo_gym/response.py +0 -0
- {verifiers-0.3.1.dev58 → verifiers-0.3.1.dev59}/verifiers/v1/tasksets/nemo_gym/server.py +0 -0
- {verifiers-0.3.1.dev58 → verifiers-0.3.1.dev59}/verifiers/v1/tasksets/nemo_gym/taskset.py +0 -0
- {verifiers-0.3.1.dev58 → verifiers-0.3.1.dev59}/verifiers/v1/tasksets/nemo_gym/toolset.py +0 -0
- {verifiers-0.3.1.dev58 → verifiers-0.3.1.dev59}/verifiers/v1/tasksets/openenv/__init__.py +0 -0
- {verifiers-0.3.1.dev58 → verifiers-0.3.1.dev59}/verifiers/v1/tasksets/openenv/taskset.py +0 -0
- {verifiers-0.3.1.dev58 → verifiers-0.3.1.dev59}/verifiers/v1/tasksets/textarena/__init__.py +0 -0
- {verifiers-0.3.1.dev58 → verifiers-0.3.1.dev59}/verifiers/v1/tasksets/textarena/taskset.py +0 -0
- {verifiers-0.3.1.dev58 → verifiers-0.3.1.dev59}/verifiers/v1/types.py +0 -0
- {verifiers-0.3.1.dev58 → verifiers-0.3.1.dev59}/verifiers/v1/utils/__init__.py +0 -0
- {verifiers-0.3.1.dev58 → verifiers-0.3.1.dev59}/verifiers/v1/utils/aio.py +0 -0
- {verifiers-0.3.1.dev58 → verifiers-0.3.1.dev59}/verifiers/v1/utils/artifacts.py +0 -0
- {verifiers-0.3.1.dev58 → verifiers-0.3.1.dev59}/verifiers/v1/utils/compile.py +0 -0
- {verifiers-0.3.1.dev58 → verifiers-0.3.1.dev59}/verifiers/v1/utils/decorators.py +0 -0
- {verifiers-0.3.1.dev58 → verifiers-0.3.1.dev59}/verifiers/v1/utils/format.py +0 -0
- {verifiers-0.3.1.dev58 → verifiers-0.3.1.dev59}/verifiers/v1/utils/generic.py +0 -0
- {verifiers-0.3.1.dev58 → verifiers-0.3.1.dev59}/verifiers/v1/utils/git.py +0 -0
- {verifiers-0.3.1.dev58 → verifiers-0.3.1.dev59}/verifiers/v1/utils/image.py +0 -0
- {verifiers-0.3.1.dev58 → verifiers-0.3.1.dev59}/verifiers/v1/utils/interrupt.py +0 -0
- {verifiers-0.3.1.dev58 → verifiers-0.3.1.dev59}/verifiers/v1/utils/loaders.py +0 -0
- {verifiers-0.3.1.dev58 → verifiers-0.3.1.dev59}/verifiers/v1/utils/logging.py +0 -0
- {verifiers-0.3.1.dev58 → verifiers-0.3.1.dev59}/verifiers/v1/utils/memory.py +0 -0
- {verifiers-0.3.1.dev58 → verifiers-0.3.1.dev59}/verifiers/v1/utils/paths.py +0 -0
- {verifiers-0.3.1.dev58 → verifiers-0.3.1.dev59}/verifiers/v1/utils/platform.py +0 -0
- {verifiers-0.3.1.dev58 → verifiers-0.3.1.dev59}/verifiers/v1/utils/prime.py +0 -0
- {verifiers-0.3.1.dev58 → verifiers-0.3.1.dev59}/verifiers/v1/utils/retries.py +0 -0
- {verifiers-0.3.1.dev58 → verifiers-0.3.1.dev59}/verifiers/v1/utils/score.py +0 -0
- {verifiers-0.3.1.dev58 → verifiers-0.3.1.dev59}/verifiers/v1/utils/version.py +0 -0
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
Metadata-Version: 2.5
|
|
2
2
|
Name: verifiers
|
|
3
|
-
Version: 0.3.1.
|
|
3
|
+
Version: 0.3.1.dev59
|
|
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
|
|
@@ -33,7 +33,19 @@ from verifiers.v1.configs.task import (
|
|
|
33
33
|
from verifiers.v1.configs.taskset import TasksetConfig
|
|
34
34
|
from verifiers.v1.env import Env
|
|
35
35
|
from verifiers.v1.envs.single_agent import SingleAgentEnv, SingleAgentEnvConfig
|
|
36
|
-
from verifiers.v1.episode import
|
|
36
|
+
from verifiers.v1.episode import (
|
|
37
|
+
EnvInfo,
|
|
38
|
+
Episode,
|
|
39
|
+
EvalRunInfo,
|
|
40
|
+
EvalWorkInfo,
|
|
41
|
+
GroupInfo,
|
|
42
|
+
PolicySpan,
|
|
43
|
+
RunInfo,
|
|
44
|
+
TrainRunInfo,
|
|
45
|
+
TrainWorkInfo,
|
|
46
|
+
WireEpisode,
|
|
47
|
+
WorkInfo,
|
|
48
|
+
)
|
|
37
49
|
from verifiers.v1.errors import (
|
|
38
50
|
EnvError,
|
|
39
51
|
HarnessError,
|
|
@@ -79,18 +91,15 @@ from verifiers.v1.trace import (
|
|
|
79
91
|
AgentSpan,
|
|
80
92
|
Branch,
|
|
81
93
|
Error,
|
|
82
|
-
EvalRunInfo,
|
|
83
94
|
InterceptRecord,
|
|
84
95
|
ModelCall,
|
|
85
96
|
PolicyEvent,
|
|
86
97
|
Reward,
|
|
87
|
-
RunInfo,
|
|
88
98
|
TimeSpan,
|
|
89
99
|
TimeSplit,
|
|
90
100
|
Timing,
|
|
91
101
|
Trace,
|
|
92
102
|
TraceTask,
|
|
93
|
-
TrainRunInfo,
|
|
94
103
|
VersionInfo,
|
|
95
104
|
WireTrace,
|
|
96
105
|
)
|
|
@@ -207,15 +216,21 @@ __all__ = [ # noqa: RUF022 - grouped by public API area
|
|
|
207
216
|
"TraceTask",
|
|
208
217
|
"WireTrace",
|
|
209
218
|
"Reward",
|
|
219
|
+
"EnvInfo",
|
|
210
220
|
"Episode",
|
|
211
221
|
"WireEpisode",
|
|
222
|
+
"GroupInfo",
|
|
212
223
|
"TRACE_VERSION",
|
|
213
224
|
"AgentInfo",
|
|
214
225
|
"RunInfo",
|
|
215
226
|
"EvalRunInfo",
|
|
227
|
+
"EvalWorkInfo",
|
|
216
228
|
"ModelCall",
|
|
217
229
|
"PolicyEvent",
|
|
218
230
|
"TrainRunInfo",
|
|
231
|
+
"TrainWorkInfo",
|
|
232
|
+
"WorkInfo",
|
|
233
|
+
"PolicySpan",
|
|
219
234
|
"VersionInfo",
|
|
220
235
|
"State",
|
|
221
236
|
"StateT",
|
|
@@ -4,9 +4,9 @@
|
|
|
4
4
|
it. `load` keeps the good saved rollouts and re-runs what's owed: missing rollouts
|
|
5
5
|
(never written) and errored ones (dropped and redone).
|
|
6
6
|
|
|
7
|
-
A saved
|
|
8
|
-
|
|
9
|
-
|
|
7
|
+
A saved episode is matched to a selected task by hashing `episode.task.data`.
|
|
8
|
+
Tasks with identical data are interchangeable, a task whose data changed since the
|
|
9
|
+
interrupted run re-runs, and nothing depends on `data.idx`.
|
|
10
10
|
"""
|
|
11
11
|
|
|
12
12
|
import json
|
|
@@ -16,18 +16,17 @@ from pathlib import Path
|
|
|
16
16
|
|
|
17
17
|
from pydantic_core import from_json
|
|
18
18
|
|
|
19
|
-
from verifiers.v1.cli.output import TRACES_FILE
|
|
20
|
-
from verifiers.v1.episode import
|
|
19
|
+
from verifiers.v1.cli.output import TRACES_FILE
|
|
20
|
+
from verifiers.v1.episode import WireEpisode
|
|
21
21
|
from verifiers.v1.task import task_key
|
|
22
|
-
from verifiers.v1.trace import WireTrace
|
|
23
22
|
|
|
24
23
|
|
|
25
24
|
def load(
|
|
26
25
|
resume_dir: Path,
|
|
27
26
|
selected_keys: list[str],
|
|
28
27
|
num_rollouts: int,
|
|
29
|
-
complete: Callable[[
|
|
30
|
-
) -> tuple[list[
|
|
28
|
+
complete: Callable[[WireEpisode], bool] | None = None,
|
|
29
|
+
) -> tuple[list[WireEpisode], dict[str, int]]:
|
|
31
30
|
"""Load the good saved rollouts and diff them against the run's target: returns
|
|
32
31
|
(kept episodes, rollouts owed per task key). `selected_keys` is one key per
|
|
33
32
|
selected task (duplicates allowed — a key selected k times is owed up to
|
|
@@ -40,13 +39,8 @@ def load(
|
|
|
40
39
|
key: count * num_rollouts for key, count in Counter(selected_keys).items()
|
|
41
40
|
}
|
|
42
41
|
|
|
43
|
-
def parse(row: dict) -> Episode:
|
|
44
|
-
if sniff_episode(row):
|
|
45
|
-
return WireEpisode.model_validate(row)
|
|
46
|
-
return Episode.of(WireTrace.model_validate(row))
|
|
47
|
-
|
|
48
42
|
verdict = complete if complete is not None else (lambda episode: episode.ok)
|
|
49
|
-
good: dict[str, list[tuple[bytes,
|
|
43
|
+
good: dict[str, list[tuple[bytes, WireEpisode]]] = defaultdict(list)
|
|
50
44
|
if path.exists():
|
|
51
45
|
with path.open("rb") as results:
|
|
52
46
|
for line in results:
|
|
@@ -57,12 +51,9 @@ def load(
|
|
|
57
51
|
row = from_json(line)
|
|
58
52
|
except ValueError:
|
|
59
53
|
row = json.loads(line)
|
|
60
|
-
|
|
61
|
-
|
|
62
|
-
|
|
63
|
-
key = task_key(row["traces"][0]["task"]["data"])
|
|
64
|
-
else:
|
|
65
|
-
key = task_key(row["task"]["data"])
|
|
54
|
+
if "traces" not in row:
|
|
55
|
+
continue
|
|
56
|
+
key = task_key(row["task"]["data"])
|
|
66
57
|
except (ValueError, KeyError, IndexError, TypeError):
|
|
67
58
|
# A torn final line (the run died mid-write) or a foreign shape
|
|
68
59
|
# is not a keepable rollout — it's owed again, never a crash.
|
|
@@ -70,7 +61,7 @@ def load(
|
|
|
70
61
|
if key not in targets or len(good[key]) >= targets[key]:
|
|
71
62
|
continue
|
|
72
63
|
try:
|
|
73
|
-
episode =
|
|
64
|
+
episode = WireEpisode.model_validate(row)
|
|
74
65
|
if not verdict(episode):
|
|
75
66
|
continue
|
|
76
67
|
# A malformed row from any task/episode plugin is owed again.
|
|
@@ -80,7 +71,7 @@ def load(
|
|
|
80
71
|
(line if line.endswith(b"\n") else line + b"\n", episode)
|
|
81
72
|
)
|
|
82
73
|
keep: list[bytes] = []
|
|
83
|
-
episodes: list[
|
|
74
|
+
episodes: list[WireEpisode] = []
|
|
84
75
|
owed: dict[str, int] = {}
|
|
85
76
|
for key, target in targets.items():
|
|
86
77
|
rows = good.get(key, [])
|
|
@@ -4,6 +4,7 @@ import asyncio
|
|
|
4
4
|
import contextlib
|
|
5
5
|
import logging
|
|
6
6
|
import time
|
|
7
|
+
from typing import cast
|
|
7
8
|
|
|
8
9
|
from verifiers.v1.cli.dashboard import dashboard
|
|
9
10
|
from verifiers.v1.cli.eval import resume
|
|
@@ -16,8 +17,7 @@ from verifiers.v1.cli.resume import distribute
|
|
|
16
17
|
from verifiers.v1.clients import ModelContext
|
|
17
18
|
from verifiers.v1.configs.cli.eval import EvalConfig
|
|
18
19
|
from verifiers.v1.env import Env, RunSlot
|
|
19
|
-
from verifiers.v1.episode import Episode
|
|
20
|
-
from verifiers.v1.trace import EvalRunInfo
|
|
20
|
+
from verifiers.v1.episode import Episode, EvalRunInfo
|
|
21
21
|
|
|
22
22
|
logger = logging.getLogger(__name__)
|
|
23
23
|
|
|
@@ -46,7 +46,13 @@ async def run_eval(env: Env, config: EvalConfig) -> list[Episode]:
|
|
|
46
46
|
finished: list[Episode] = []
|
|
47
47
|
if config.resume:
|
|
48
48
|
keys = [task.hash for task in tasks]
|
|
49
|
-
|
|
49
|
+
loaded, owed = resume.load(
|
|
50
|
+
out,
|
|
51
|
+
keys,
|
|
52
|
+
config.num_rollouts,
|
|
53
|
+
lambda episode: env.complete(cast(Episode, episode)),
|
|
54
|
+
)
|
|
55
|
+
finished = [cast(Episode, episode) for episode in loaded]
|
|
50
56
|
if not owed: # already complete - report it and exit successfully
|
|
51
57
|
print(resume.nothing_to_resume_msg(out, len(tasks), config.num_rollouts))
|
|
52
58
|
raise SystemExit(0)
|
|
@@ -72,8 +78,7 @@ async def run_eval(env: Env, config: EvalConfig) -> list[Episode]:
|
|
|
72
78
|
write_lock = asyncio.Lock()
|
|
73
79
|
|
|
74
80
|
async def on_complete(episode: Episode) -> None:
|
|
75
|
-
|
|
76
|
-
trace.record_run(EvalRunInfo(id=config.run.id, name=config.run.name))
|
|
81
|
+
episode.record_run(EvalRunInfo(id=config.run.id, name=config.run.name))
|
|
77
82
|
await append_episode(out, episode, write_lock)
|
|
78
83
|
|
|
79
84
|
# Serving resources (shared tool servers, interception) come up once for the
|
|
@@ -170,7 +175,8 @@ async def run_eval_server(config: EvalConfig) -> list[Episode]:
|
|
|
170
175
|
finished: list[Episode] = []
|
|
171
176
|
if config.resume:
|
|
172
177
|
keys = [task.hash for task in tasks]
|
|
173
|
-
|
|
178
|
+
loaded, owed = resume.load(out, keys, config.num_rollouts)
|
|
179
|
+
finished = [cast(Episode, episode) for episode in loaded]
|
|
174
180
|
counts = distribute(keys, owed, config.num_rollouts)
|
|
175
181
|
if not owed: # already complete - report it and exit successfully
|
|
176
182
|
print(resume.nothing_to_resume_msg(out, len(plan), config.num_rollouts))
|
|
@@ -205,10 +211,9 @@ async def run_eval_server(config: EvalConfig) -> list[Episode]:
|
|
|
205
211
|
sampling=config.sampling,
|
|
206
212
|
**payload,
|
|
207
213
|
)
|
|
208
|
-
|
|
209
|
-
trace.record_run(EvalRunInfo(id=config.run.id, name=config.run.name))
|
|
214
|
+
episode.record_run(EvalRunInfo(id=config.run.id, name=config.run.name))
|
|
210
215
|
await append_episode(out, episode, write_lock)
|
|
211
|
-
return [episode]
|
|
216
|
+
return [cast(Episode, episode)]
|
|
212
217
|
|
|
213
218
|
# Each rollout is its own `run` request, dispatched least-busy across workers.
|
|
214
219
|
units = [run_unit(payload) for payload, n in plan for _ in range(n)]
|
|
@@ -6,8 +6,7 @@ whole episode owed on resume, and a failure before any trace minted still leaves
|
|
|
6
6
|
its errors on disk. config.toml is the run's resolved config in the format the
|
|
7
7
|
CLI reads (`@ config.toml`), so a run is re-runnable from its own output. Lines
|
|
8
8
|
append as episodes complete, so results are durable mid-run. Files written
|
|
9
|
-
|
|
10
|
-
`read_episodes` sniffs the line shape.
|
|
9
|
+
by this surface contain episodes only.
|
|
11
10
|
"""
|
|
12
11
|
|
|
13
12
|
import asyncio
|
|
@@ -19,8 +18,10 @@ from pathlib import Path
|
|
|
19
18
|
from pydantic import BaseModel, TypeAdapter
|
|
20
19
|
|
|
21
20
|
from verifiers.v1.configs.cli.eval import EvalConfig
|
|
22
|
-
from verifiers.v1.episode import Episode, WireEpisode
|
|
23
|
-
from verifiers.v1.
|
|
21
|
+
from verifiers.v1.episode import EnvInfo, Episode, WireEpisode
|
|
22
|
+
from verifiers.v1.state import StateT
|
|
23
|
+
from verifiers.v1.task import DataT
|
|
24
|
+
from verifiers.v1.trace import AgentConfigT, Trace
|
|
24
25
|
from verifiers.v1.utils.aio import run_shielded
|
|
25
26
|
|
|
26
27
|
TRACES_FILE = "traces.jsonl"
|
|
@@ -85,7 +86,9 @@ def save_config(
|
|
|
85
86
|
) # fresh; appended to as rollouts complete
|
|
86
87
|
|
|
87
88
|
|
|
88
|
-
def write_episode(
|
|
89
|
+
def write_episode(
|
|
90
|
+
results_dir: Path, episode: Episode[DataT, StateT, AgentConfigT]
|
|
91
|
+
) -> None:
|
|
89
92
|
"""Serialize and append one rollout episode in the worker thread."""
|
|
90
93
|
# Preserve fields declared by typed Trace subclasses nested in the episode.
|
|
91
94
|
data = type_adapter(type(episode)).dump_json(episode, exclude_none=True)
|
|
@@ -93,40 +96,29 @@ def write_episode(results_dir: Path, episode: Episode) -> None:
|
|
|
93
96
|
f.write(data + b"\n")
|
|
94
97
|
|
|
95
98
|
|
|
96
|
-
def
|
|
97
|
-
"""Whether a parsed traces.jsonl row is an `Episode` (vs a pre-episode
|
|
98
|
-
bare trace, recognizable by its message graph)."""
|
|
99
|
-
return "traces" in row and "nodes" not in row
|
|
100
|
-
|
|
101
|
-
|
|
102
|
-
def read_episodes(results_dir: Path, trace_type: type) -> list[Episode]:
|
|
99
|
+
def read_episodes(results_dir: Path, trace_type: type) -> list[WireEpisode]:
|
|
103
100
|
"""Load a run's saved rollouts from `traces.jsonl` with traces typed as
|
|
104
101
|
`trace_type` (`Trace[WireTaskData, ...]` reads any taskset's file without
|
|
105
|
-
importing it).
|
|
106
|
-
record, so both file generations read uniformly."""
|
|
102
|
+
importing it)."""
|
|
107
103
|
trace_adapter = type_adapter(trace_type)
|
|
108
|
-
episodes: list[
|
|
104
|
+
episodes: list[WireEpisode] = []
|
|
109
105
|
with (results_dir / TRACES_FILE).open(encoding="utf-8") as f:
|
|
110
106
|
for line in f:
|
|
111
107
|
if not line.strip():
|
|
112
108
|
continue
|
|
113
109
|
row = json.loads(line)
|
|
114
|
-
|
|
115
|
-
|
|
116
|
-
|
|
117
|
-
|
|
118
|
-
|
|
119
|
-
trace_adapter.validate_python(t) for t in row.get("traces") or []
|
|
120
|
-
]
|
|
121
|
-
episodes.append(record)
|
|
122
|
-
else:
|
|
123
|
-
trace = trace_adapter.validate_python(row)
|
|
124
|
-
episodes.append(Episode.of(trace))
|
|
110
|
+
record = WireEpisode.model_validate({**row, "traces": []})
|
|
111
|
+
record.traces = [
|
|
112
|
+
trace_adapter.validate_python(trace) for trace in row["traces"]
|
|
113
|
+
]
|
|
114
|
+
episodes.append(record)
|
|
125
115
|
return episodes
|
|
126
116
|
|
|
127
117
|
|
|
128
118
|
async def append_episode(
|
|
129
|
-
results_dir: Path,
|
|
119
|
+
results_dir: Path,
|
|
120
|
+
episode: Episode[DataT, StateT, AgentConfigT],
|
|
121
|
+
lock: asyncio.Lock,
|
|
130
122
|
) -> None:
|
|
131
123
|
"""Append one finished rollout episode without blocking the event loop. The run's
|
|
132
124
|
shared lock preserves whole-line ordering, and awaiting the worker preserves
|
|
@@ -147,4 +139,10 @@ async def append_trace(
|
|
|
147
139
|
"""Append one finished trace as a single-agent rollout episode — the writers that
|
|
148
140
|
complete trace-at-a-time (eval runners, gepa, replay) all go
|
|
149
141
|
through here."""
|
|
150
|
-
|
|
142
|
+
episode = Episode(
|
|
143
|
+
env=EnvInfo(id=env),
|
|
144
|
+
task=trace.task,
|
|
145
|
+
traces=[trace],
|
|
146
|
+
ok=trace.ok,
|
|
147
|
+
)
|
|
148
|
+
await append_episode(results_dir, episode, lock)
|
|
@@ -31,7 +31,7 @@ from verifiers.v1.interception import (
|
|
|
31
31
|
from verifiers.v1.mcp import SharedToolServer, serve_shared
|
|
32
32
|
from verifiers.v1.runtimes import SubprocessConfig, runtime_is_local
|
|
33
33
|
from verifiers.v1.task import Task
|
|
34
|
-
from verifiers.v1.trace import Error, Trace
|
|
34
|
+
from verifiers.v1.trace import Error, Trace, TraceTask
|
|
35
35
|
from verifiers.v1.utils.generic import concrete_type, deep_merge
|
|
36
36
|
from verifiers.v1.utils.memory import trim_memory_periodically
|
|
37
37
|
from verifiers.v1.utils.retries import run_episode_with_retry
|
|
@@ -60,7 +60,7 @@ class RunSlot:
|
|
|
60
60
|
@classmethod
|
|
61
61
|
def finished(cls, episode: Episode) -> "RunSlot":
|
|
62
62
|
return cls(
|
|
63
|
-
task=Task(episode.
|
|
63
|
+
task=Task(episode.task.data),
|
|
64
64
|
traces=list(episode.traces),
|
|
65
65
|
episode=episode,
|
|
66
66
|
done=True,
|
|
@@ -252,7 +252,15 @@ class Env(ABC, Generic[ConfigT]):
|
|
|
252
252
|
completed subset, its exception on the episode's `errors`. `on_trace` observes
|
|
253
253
|
each agent-run's trace at mint; `on_discard` its abandonment (a per-agent
|
|
254
254
|
retry mints a replacement)."""
|
|
255
|
-
episode = Episode(
|
|
255
|
+
episode = Episode(
|
|
256
|
+
env=EnvInfo(id=self.config.env_id),
|
|
257
|
+
task=TraceTask(
|
|
258
|
+
type=type(task).__name__,
|
|
259
|
+
data=task.data,
|
|
260
|
+
key=task.key,
|
|
261
|
+
hash=task.hash,
|
|
262
|
+
),
|
|
263
|
+
)
|
|
256
264
|
agents = self._episode_agents(ctx, episode.traces, on_trace, on_discard)
|
|
257
265
|
try:
|
|
258
266
|
async with asyncio.timeout(self.config.timeout.episode):
|
|
@@ -1,14 +1,14 @@
|
|
|
1
1
|
"""The episode — one run's traces plus their shared standing, whole."""
|
|
2
2
|
|
|
3
3
|
import uuid
|
|
4
|
-
from typing import Any, Generic
|
|
4
|
+
from typing import Annotated, Any, Generic, Literal, Self
|
|
5
5
|
|
|
6
|
-
from pydantic import BaseModel, Field
|
|
6
|
+
from pydantic import BaseModel, Field, model_validator
|
|
7
7
|
|
|
8
8
|
from verifiers.v1.configs.agent import WireAgentConfig
|
|
9
9
|
from verifiers.v1.state import State, StateT
|
|
10
10
|
from verifiers.v1.task import DataT, WireTaskData
|
|
11
|
-
from verifiers.v1.trace import EXCLUDE_FIELDS, AgentConfigT, Error, Trace
|
|
11
|
+
from verifiers.v1.trace import EXCLUDE_FIELDS, AgentConfigT, Error, Trace, TraceTask
|
|
12
12
|
from verifiers.v1.types import Usage
|
|
13
13
|
|
|
14
14
|
|
|
@@ -17,6 +17,70 @@ class EnvInfo(BaseModel):
|
|
|
17
17
|
|
|
18
18
|
id: str = ""
|
|
19
19
|
"""`EnvConfig.env_id`, e.g. `agentic-judge+gsm8k`."""
|
|
20
|
+
name: str | None = None
|
|
21
|
+
"""The name the consumer runs the env under (e.g. an orchestrator env key)."""
|
|
22
|
+
|
|
23
|
+
|
|
24
|
+
class GroupInfo(BaseModel):
|
|
25
|
+
"""The consumer-defined rollout group this episode belongs to."""
|
|
26
|
+
|
|
27
|
+
id: str
|
|
28
|
+
|
|
29
|
+
|
|
30
|
+
class PolicySpan(BaseModel):
|
|
31
|
+
"""Live policy versions spanned while generating an episode."""
|
|
32
|
+
|
|
33
|
+
start: int
|
|
34
|
+
end: int
|
|
35
|
+
|
|
36
|
+
@model_validator(mode="after")
|
|
37
|
+
def ordered(self) -> Self:
|
|
38
|
+
if self.end < self.start:
|
|
39
|
+
raise ValueError("policy span end must be at least its start")
|
|
40
|
+
return self
|
|
41
|
+
|
|
42
|
+
@property
|
|
43
|
+
def drift(self) -> int:
|
|
44
|
+
return self.end - self.start
|
|
45
|
+
|
|
46
|
+
|
|
47
|
+
class TrainWorkInfo(BaseModel):
|
|
48
|
+
type: Literal["train"] = "train"
|
|
49
|
+
step: int
|
|
50
|
+
"""The training step at which the episode was dispatched."""
|
|
51
|
+
policy: PolicySpan | None = None
|
|
52
|
+
"""The live policy used for generation; None for frozen-policy work."""
|
|
53
|
+
|
|
54
|
+
|
|
55
|
+
class EvalWorkInfo(BaseModel):
|
|
56
|
+
type: Literal["eval"] = "eval"
|
|
57
|
+
step: int
|
|
58
|
+
"""The training step at which the episode was dispatched."""
|
|
59
|
+
policy: PolicySpan | None = None
|
|
60
|
+
"""The live policy used for generation; None for frozen-policy work."""
|
|
61
|
+
|
|
62
|
+
|
|
63
|
+
WorkInfo = Annotated[TrainWorkInfo | EvalWorkInfo, Field(discriminator="type")]
|
|
64
|
+
|
|
65
|
+
|
|
66
|
+
class TrainRunInfo(BaseModel):
|
|
67
|
+
"""A training run and the kind of work this episode performed for it."""
|
|
68
|
+
|
|
69
|
+
type: Literal["train"] = "train"
|
|
70
|
+
id: str
|
|
71
|
+
name: str | None = None
|
|
72
|
+
work: WorkInfo
|
|
73
|
+
|
|
74
|
+
|
|
75
|
+
class EvalRunInfo(BaseModel):
|
|
76
|
+
"""A standalone evaluation run."""
|
|
77
|
+
|
|
78
|
+
type: Literal["eval"] = "eval"
|
|
79
|
+
id: str
|
|
80
|
+
name: str | None = None
|
|
81
|
+
|
|
82
|
+
|
|
83
|
+
RunInfo = Annotated[TrainRunInfo | EvalRunInfo, Field(discriminator="type")]
|
|
20
84
|
|
|
21
85
|
|
|
22
86
|
class Episode(BaseModel, Generic[DataT, StateT, AgentConfigT]):
|
|
@@ -26,6 +90,12 @@ class Episode(BaseModel, Generic[DataT, StateT, AgentConfigT]):
|
|
|
26
90
|
|
|
27
91
|
env: EnvInfo = Field(default_factory=EnvInfo)
|
|
28
92
|
"""The env that produced this episode."""
|
|
93
|
+
task: TraceTask[DataT]
|
|
94
|
+
"""The task dispatched to the env, including when no trace was produced."""
|
|
95
|
+
group: GroupInfo | None = None
|
|
96
|
+
"""Consumer-assigned rollout group, if this episode was grouped."""
|
|
97
|
+
run: RunInfo | None = None
|
|
98
|
+
"""The run this episode belongs to, consumer-stamped."""
|
|
29
99
|
ok: bool = False
|
|
30
100
|
"""Whether the episode completed successfully."""
|
|
31
101
|
errors: list[Error] = Field(default_factory=list)
|
|
@@ -33,6 +103,10 @@ class Episode(BaseModel, Generic[DataT, StateT, AgentConfigT]):
|
|
|
33
103
|
traces: list[Trace[DataT, StateT, AgentConfigT]] = Field(default_factory=list)
|
|
34
104
|
"""Every agent's trace, in completion order."""
|
|
35
105
|
|
|
106
|
+
def record_run(self, run: RunInfo) -> None:
|
|
107
|
+
"""Record the run identity on the dispatched episode."""
|
|
108
|
+
self.run = run
|
|
109
|
+
|
|
36
110
|
@property
|
|
37
111
|
def last_error(self) -> Error | None:
|
|
38
112
|
"""The last episode-level error captured across attempts."""
|
|
@@ -80,11 +154,6 @@ class Episode(BaseModel, Generic[DataT, StateT, AgentConfigT]):
|
|
|
80
154
|
exclude_none=True,
|
|
81
155
|
)
|
|
82
156
|
|
|
83
|
-
@classmethod
|
|
84
|
-
def of(cls, trace: Trace, env: str = "") -> "Episode":
|
|
85
|
-
"""The single-agent record: one trace as its own episode."""
|
|
86
|
-
return cls(env=EnvInfo(id=env), traces=[trace], ok=trace.ok)
|
|
87
|
-
|
|
88
157
|
|
|
89
158
|
WireEpisode = Episode[WireTaskData, State, WireAgentConfig]
|
|
90
159
|
"""Record loader for consumers without the run's packages: unknown task fields
|
|
@@ -106,6 +106,11 @@ class MessageNode(BaseModel):
|
|
|
106
106
|
consumer's RL algorithm assigns it, which is not the same as a credit of zero: a group whose
|
|
107
107
|
rewards were all equal is assigned zeros and carries no gradient, while an unassigned node was
|
|
108
108
|
never scored at all."""
|
|
109
|
+
reference_logprobs: list[float] | None = None
|
|
110
|
+
"""Reference-model logprobs over the sampled tokens, in the same compact layout as
|
|
111
|
+
`logprobs`. None means no reference model scored this node."""
|
|
112
|
+
loss_weights: dict[str, list[float]] | None = None
|
|
113
|
+
"""Named loss-weight streams aligned to `token_ids`, consumer-stamped."""
|
|
109
114
|
multi_modal_data: SkipJsonSchema[MultiModalData | None] = None
|
|
110
115
|
"""The renderer items for the images this message's content introduces (pixel tensors,
|
|
111
116
|
grids, hashes, placeholders) — the only carrier of the pixels from the env server to the
|
|
@@ -4,7 +4,7 @@ import time
|
|
|
4
4
|
import traceback
|
|
5
5
|
import uuid
|
|
6
6
|
from collections.abc import Callable, Iterable, Iterator, Mapping
|
|
7
|
-
from typing import TYPE_CHECKING,
|
|
7
|
+
from typing import TYPE_CHECKING, Any, Generic
|
|
8
8
|
|
|
9
9
|
import numpy as np
|
|
10
10
|
from pydantic import BaseModel, Field, PrivateAttr
|
|
@@ -141,28 +141,6 @@ class Reward(BaseModel):
|
|
|
141
141
|
return self.score * self.weight
|
|
142
142
|
|
|
143
143
|
|
|
144
|
-
class EvalRunInfo(BaseModel):
|
|
145
|
-
type: Literal["eval"] = "eval"
|
|
146
|
-
|
|
147
|
-
id: str
|
|
148
|
-
name: str | None = None
|
|
149
|
-
"""Human-readable run name, consumer-stamped."""
|
|
150
|
-
step: int | None = None
|
|
151
|
-
|
|
152
|
-
|
|
153
|
-
class TrainRunInfo(BaseModel):
|
|
154
|
-
type: Literal["train"] = "train"
|
|
155
|
-
|
|
156
|
-
id: str
|
|
157
|
-
name: str | None = None
|
|
158
|
-
"""Human-readable run name, consumer-stamped."""
|
|
159
|
-
step: int | None = None
|
|
160
|
-
|
|
161
|
-
|
|
162
|
-
RunInfo = Annotated[EvalRunInfo | TrainRunInfo, Field(discriminator="type")]
|
|
163
|
-
"""The run a trace belongs to, discriminated on `type`."""
|
|
164
|
-
|
|
165
|
-
|
|
166
144
|
class PolicyEvent(BaseModel):
|
|
167
145
|
"""A framework policy decision applied to a model call before inference."""
|
|
168
146
|
|
|
@@ -277,6 +255,34 @@ class Branch(BaseModel):
|
|
|
277
255
|
return None
|
|
278
256
|
return self.spread(lambda node: node.advantages)
|
|
279
257
|
|
|
258
|
+
@property
|
|
259
|
+
def reference_logprobs(self) -> list[float] | None:
|
|
260
|
+
"""Reference-model logprobs aligned to `token_ids`, or None when unscored."""
|
|
261
|
+
if all(node.reference_logprobs is None for node in self.nodes):
|
|
262
|
+
return None
|
|
263
|
+
return self.spread(lambda node: node.reference_logprobs)
|
|
264
|
+
|
|
265
|
+
def loss_weights(self, name: str) -> list[float] | None:
|
|
266
|
+
"""One named loss-weight stream aligned to `token_ids`, or None when absent."""
|
|
267
|
+
if all(
|
|
268
|
+
node.loss_weights is None or name not in node.loss_weights
|
|
269
|
+
for node in self.nodes
|
|
270
|
+
):
|
|
271
|
+
return None
|
|
272
|
+
weights: list[float] = []
|
|
273
|
+
for node in self.nodes:
|
|
274
|
+
node_weights = (node.loss_weights or {}).get(name)
|
|
275
|
+
if node_weights is None:
|
|
276
|
+
weights.extend([0.0] * len(node.token_ids))
|
|
277
|
+
continue
|
|
278
|
+
if len(node_weights) != len(node.token_ids):
|
|
279
|
+
raise ValueError(
|
|
280
|
+
f"loss weight stream {name!r} must align with node token_ids: "
|
|
281
|
+
f"got {len(node_weights)}, expected {len(node.token_ids)}"
|
|
282
|
+
)
|
|
283
|
+
weights.extend(node_weights)
|
|
284
|
+
return weights
|
|
285
|
+
|
|
280
286
|
@property
|
|
281
287
|
def multi_modal_data(self) -> MultiModalData | None:
|
|
282
288
|
"""Node image data concatenated in token order for training; never persisted."""
|
|
@@ -361,9 +367,6 @@ class Trace(BaseModel, Generic[DataT, StateT, AgentConfigT]):
|
|
|
361
367
|
"""Unique ID for this trace, auto-generated."""
|
|
362
368
|
verifiers: VersionInfo = Field(default_factory=_current_build)
|
|
363
369
|
"""The verifiers version that produced this trace."""
|
|
364
|
-
run: RunInfo | None = None
|
|
365
|
-
"""The run this trace belongs to (eval or train), consumer-stamped."""
|
|
366
|
-
|
|
367
370
|
task: TraceTask[DataT]
|
|
368
371
|
"""The task data that seeded this trace."""
|
|
369
372
|
agent: AgentInfo[AgentConfigT]
|
|
@@ -564,12 +567,6 @@ class Trace(BaseModel, Generic[DataT, StateT, AgentConfigT]):
|
|
|
564
567
|
if response.usage is not None:
|
|
565
568
|
self.extra_usage.append(response.usage)
|
|
566
569
|
|
|
567
|
-
def record_run(self, run: RunInfo | None = None, **info: Any) -> None:
|
|
568
|
-
"""Record the run identity (eval / train), and optional extra info."""
|
|
569
|
-
if run is not None:
|
|
570
|
-
self.run = run
|
|
571
|
-
self.info.update(info)
|
|
572
|
-
|
|
573
570
|
def stop(self, condition: str) -> None:
|
|
574
571
|
"""Stop the trace, optionally with a stop condition."""
|
|
575
572
|
self.is_completed = True
|
|
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
|