verifiers 0.1.15.dev413__tar.gz → 0.1.15.dev415__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.dev413 → verifiers-0.1.15.dev415}/PKG-INFO +1 -1
- verifiers-0.1.15.dev415/verifiers/v1/cli/dashboard/base.py +108 -0
- {verifiers-0.1.15.dev413 → verifiers-0.1.15.dev415}/verifiers/v1/cli/dashboard/eval.py +87 -24
- {verifiers-0.1.15.dev413 → verifiers-0.1.15.dev415}/verifiers/v1/rollout.py +10 -5
- verifiers-0.1.15.dev413/verifiers/v1/cli/dashboard/base.py +0 -32
- {verifiers-0.1.15.dev413 → verifiers-0.1.15.dev415}/.gitignore +0 -0
- {verifiers-0.1.15.dev413 → verifiers-0.1.15.dev415}/LICENSE +0 -0
- {verifiers-0.1.15.dev413 → verifiers-0.1.15.dev415}/README.md +0 -0
- {verifiers-0.1.15.dev413 → verifiers-0.1.15.dev415}/pyproject.toml +0 -0
- {verifiers-0.1.15.dev413 → verifiers-0.1.15.dev415}/tests/AGENTS.md +0 -0
- {verifiers-0.1.15.dev413 → verifiers-0.1.15.dev415}/tests/README.md +0 -0
- {verifiers-0.1.15.dev413 → verifiers-0.1.15.dev415}/tests/__init__.py +0 -0
- {verifiers-0.1.15.dev413 → verifiers-0.1.15.dev415}/tests/conftest.py +0 -0
- {verifiers-0.1.15.dev413 → verifiers-0.1.15.dev415}/tests/test_browser_env.py +0 -0
- {verifiers-0.1.15.dev413 → verifiers-0.1.15.dev415}/tests/test_build_script.py +0 -0
- {verifiers-0.1.15.dev413 → verifiers-0.1.15.dev415}/tests/test_cli_agent_env.py +0 -0
- {verifiers-0.1.15.dev413 → verifiers-0.1.15.dev415}/tests/test_client_auth_errors.py +0 -0
- {verifiers-0.1.15.dev413 → verifiers-0.1.15.dev415}/tests/test_client_config.py +0 -0
- {verifiers-0.1.15.dev413 → verifiers-0.1.15.dev415}/tests/test_client_multimodal_types.py +0 -0
- {verifiers-0.1.15.dev413 → verifiers-0.1.15.dev415}/tests/test_composable_env.py +0 -0
- {verifiers-0.1.15.dev413 → verifiers-0.1.15.dev415}/tests/test_context_token_metrics.py +0 -0
- {verifiers-0.1.15.dev413 → verifiers-0.1.15.dev415}/tests/test_decorator_ranks.py +0 -0
- {verifiers-0.1.15.dev413 → verifiers-0.1.15.dev415}/tests/test_endpoint_registry.py +0 -0
- {verifiers-0.1.15.dev413 → verifiers-0.1.15.dev415}/tests/test_env_group.py +0 -0
- {verifiers-0.1.15.dev413 → verifiers-0.1.15.dev415}/tests/test_env_server.py +0 -0
- {verifiers-0.1.15.dev413 → verifiers-0.1.15.dev415}/tests/test_environment.py +0 -0
- {verifiers-0.1.15.dev413 → verifiers-0.1.15.dev415}/tests/test_environment_extra.py +0 -0
- {verifiers-0.1.15.dev413 → verifiers-0.1.15.dev415}/tests/test_envs.py +0 -0
- {verifiers-0.1.15.dev413 → verifiers-0.1.15.dev415}/tests/test_error_chain.py +0 -0
- {verifiers-0.1.15.dev413 → verifiers-0.1.15.dev415}/tests/test_eval_display.py +0 -0
- {verifiers-0.1.15.dev413 → verifiers-0.1.15.dev415}/tests/test_eval_utils.py +0 -0
- {verifiers-0.1.15.dev413 → verifiers-0.1.15.dev415}/tests/test_gepa_cli.py +0 -0
- {verifiers-0.1.15.dev413 → verifiers-0.1.15.dev415}/tests/test_gepa_utils.py +0 -0
- {verifiers-0.1.15.dev413 → verifiers-0.1.15.dev415}/tests/test_gym_env.py +0 -0
- {verifiers-0.1.15.dev413 → verifiers-0.1.15.dev415}/tests/test_harbor_env_mcp.py +0 -0
- {verifiers-0.1.15.dev413 → verifiers-0.1.15.dev415}/tests/test_imports.py +0 -0
- {verifiers-0.1.15.dev413 → verifiers-0.1.15.dev415}/tests/test_init_script.py +0 -0
- {verifiers-0.1.15.dev413 → verifiers-0.1.15.dev415}/tests/test_install_utils.py +0 -0
- {verifiers-0.1.15.dev413 → verifiers-0.1.15.dev415}/tests/test_interception_utils.py +0 -0
- {verifiers-0.1.15.dev413 → verifiers-0.1.15.dev415}/tests/test_logging.py +0 -0
- {verifiers-0.1.15.dev413 → verifiers-0.1.15.dev415}/tests/test_math_rubric.py +0 -0
- {verifiers-0.1.15.dev413 → verifiers-0.1.15.dev415}/tests/test_maybe_think_parser.py +0 -0
- {verifiers-0.1.15.dev413 → verifiers-0.1.15.dev415}/tests/test_message_utils.py +0 -0
- {verifiers-0.1.15.dev413 → verifiers-0.1.15.dev415}/tests/test_message_utils_multimodal.py +0 -0
- {verifiers-0.1.15.dev413 → verifiers-0.1.15.dev415}/tests/test_multiturn_env.py +0 -0
- {verifiers-0.1.15.dev413 → verifiers-0.1.15.dev415}/tests/test_nemorl_client.py +0 -0
- {verifiers-0.1.15.dev413 → verifiers-0.1.15.dev415}/tests/test_openai_chat_completions_token_client.py +0 -0
- {verifiers-0.1.15.dev413 → verifiers-0.1.15.dev415}/tests/test_openai_responses_client.py +0 -0
- {verifiers-0.1.15.dev413 → verifiers-0.1.15.dev415}/tests/test_opencode_rlm_env.py +0 -0
- {verifiers-0.1.15.dev413 → verifiers-0.1.15.dev415}/tests/test_openenv_client.py +0 -0
- {verifiers-0.1.15.dev413 → verifiers-0.1.15.dev415}/tests/test_parser.py +0 -0
- {verifiers-0.1.15.dev413 → verifiers-0.1.15.dev415}/tests/test_path_utils.py +0 -0
- {verifiers-0.1.15.dev413 → verifiers-0.1.15.dev415}/tests/test_per_turn_timing.py +0 -0
- {verifiers-0.1.15.dev413 → verifiers-0.1.15.dev415}/tests/test_pricing_utils.py +0 -0
- {verifiers-0.1.15.dev413 → verifiers-0.1.15.dev415}/tests/test_prime_plugin.py +0 -0
- {verifiers-0.1.15.dev413 → verifiers-0.1.15.dev415}/tests/test_renderer_client.py +0 -0
- {verifiers-0.1.15.dev413 → verifiers-0.1.15.dev415}/tests/test_renderer_e2e.py +0 -0
- {verifiers-0.1.15.dev413 → verifiers-0.1.15.dev415}/tests/test_rlm_composable_env.py +0 -0
- {verifiers-0.1.15.dev413 → verifiers-0.1.15.dev415}/tests/test_rubric.py +0 -0
- {verifiers-0.1.15.dev413 → verifiers-0.1.15.dev415}/tests/test_rubric_group.py +0 -0
- {verifiers-0.1.15.dev413 → verifiers-0.1.15.dev415}/tests/test_sandbox_debug_env.py +0 -0
- {verifiers-0.1.15.dev413 → verifiers-0.1.15.dev415}/tests/test_sandbox_env.py +0 -0
- {verifiers-0.1.15.dev413 → verifiers-0.1.15.dev415}/tests/test_sandbox_mixin.py +0 -0
- {verifiers-0.1.15.dev413 → verifiers-0.1.15.dev415}/tests/test_save_utils.py +0 -0
- {verifiers-0.1.15.dev413 → verifiers-0.1.15.dev415}/tests/test_setup_script.py +0 -0
- {verifiers-0.1.15.dev413 → verifiers-0.1.15.dev415}/tests/test_singleturn_env.py +0 -0
- {verifiers-0.1.15.dev413 → verifiers-0.1.15.dev415}/tests/test_stateful_tool_env.py +0 -0
- {verifiers-0.1.15.dev413 → verifiers-0.1.15.dev415}/tests/test_think_parser.py +0 -0
- {verifiers-0.1.15.dev413 → verifiers-0.1.15.dev415}/tests/test_tool_env.py +0 -0
- {verifiers-0.1.15.dev413 → verifiers-0.1.15.dev415}/tests/test_tool_utils.py +0 -0
- {verifiers-0.1.15.dev413 → verifiers-0.1.15.dev415}/tests/test_trajectory_processing.py +0 -0
- {verifiers-0.1.15.dev413 → verifiers-0.1.15.dev415}/tests/test_tui_info_formatting.py +0 -0
- {verifiers-0.1.15.dev413 → verifiers-0.1.15.dev415}/tests/test_types.py +0 -0
- {verifiers-0.1.15.dev413 → verifiers-0.1.15.dev415}/tests/test_wordle_env.py +0 -0
- {verifiers-0.1.15.dev413 → verifiers-0.1.15.dev415}/tests/test_xml_parser.py +0 -0
- {verifiers-0.1.15.dev413 → verifiers-0.1.15.dev415}/tests/v1/conftest.py +0 -0
- {verifiers-0.1.15.dev413 → verifiers-0.1.15.dev415}/tests/v1/fixtures/counter_tool_v1.py +0 -0
- {verifiers-0.1.15.dev413 → verifiers-0.1.15.dev415}/tests/v1/fixtures/echo_agentic_v1.py +0 -0
- {verifiers-0.1.15.dev413 → verifiers-0.1.15.dev415}/tests/v1/fixtures/echo_multi_v0.py +0 -0
- {verifiers-0.1.15.dev413 → verifiers-0.1.15.dev415}/tests/v1/fixtures/echo_tool_v1.py +0 -0
- {verifiers-0.1.15.dev413 → verifiers-0.1.15.dev415}/tests/v1/fixtures/echo_user_sim_v1.py +0 -0
- {verifiers-0.1.15.dev413 → verifiers-0.1.15.dev415}/tests/v1/fixtures/echo_v0.py +0 -0
- {verifiers-0.1.15.dev413 → verifiers-0.1.15.dev415}/tests/v1/fixtures/echo_v1.py +0 -0
- {verifiers-0.1.15.dev413 → verifiers-0.1.15.dev415}/tests/v1/fixtures/pyproject.toml +0 -0
- {verifiers-0.1.15.dev413 → verifiers-0.1.15.dev415}/tests/v1/fixtures/tool_response_image_v1.py +0 -0
- {verifiers-0.1.15.dev413 → verifiers-0.1.15.dev415}/tests/v1/test_color_codeword_tasks.py +0 -0
- {verifiers-0.1.15.dev413 → verifiers-0.1.15.dev415}/tests/v1/test_configs.py +0 -0
- {verifiers-0.1.15.dev413 → verifiers-0.1.15.dev415}/tests/v1/test_e2e.py +0 -0
- {verifiers-0.1.15.dev413 → verifiers-0.1.15.dev415}/tests/v1/test_envs.py +0 -0
- {verifiers-0.1.15.dev413 → verifiers-0.1.15.dev415}/tests/v1/test_graph.py +0 -0
- {verifiers-0.1.15.dev413 → verifiers-0.1.15.dev415}/tests/v1/test_legacy.py +0 -0
- {verifiers-0.1.15.dev413 → verifiers-0.1.15.dev415}/tests/v1/test_trace.py +0 -0
- {verifiers-0.1.15.dev413 → verifiers-0.1.15.dev415}/verifiers/AGENTS.md +0 -0
- {verifiers-0.1.15.dev413 → verifiers-0.1.15.dev415}/verifiers/__init__.py +0 -0
- {verifiers-0.1.15.dev413 → verifiers-0.1.15.dev415}/verifiers/cli/__init__.py +0 -0
- {verifiers-0.1.15.dev413 → verifiers-0.1.15.dev415}/verifiers/cli/commands/__init__.py +0 -0
- {verifiers-0.1.15.dev413 → verifiers-0.1.15.dev415}/verifiers/cli/commands/build.py +0 -0
- {verifiers-0.1.15.dev413 → verifiers-0.1.15.dev415}/verifiers/cli/commands/eval.py +0 -0
- {verifiers-0.1.15.dev413 → verifiers-0.1.15.dev415}/verifiers/cli/commands/gepa.py +0 -0
- {verifiers-0.1.15.dev413 → verifiers-0.1.15.dev415}/verifiers/cli/commands/init.py +0 -0
- {verifiers-0.1.15.dev413 → verifiers-0.1.15.dev415}/verifiers/cli/commands/install.py +0 -0
- {verifiers-0.1.15.dev413 → verifiers-0.1.15.dev415}/verifiers/cli/commands/setup.py +0 -0
- {verifiers-0.1.15.dev413 → verifiers-0.1.15.dev415}/verifiers/cli/plugins/__init__.py +0 -0
- {verifiers-0.1.15.dev413 → verifiers-0.1.15.dev415}/verifiers/cli/plugins/prime.py +0 -0
- {verifiers-0.1.15.dev413 → verifiers-0.1.15.dev415}/verifiers/cli/tui.py +0 -0
- {verifiers-0.1.15.dev413 → verifiers-0.1.15.dev415}/verifiers/clients/__init__.py +0 -0
- {verifiers-0.1.15.dev413 → verifiers-0.1.15.dev415}/verifiers/clients/anthropic_messages_client.py +0 -0
- {verifiers-0.1.15.dev413 → verifiers-0.1.15.dev415}/verifiers/clients/client.py +0 -0
- {verifiers-0.1.15.dev413 → verifiers-0.1.15.dev415}/verifiers/clients/nemorl_chat_completions_client.py +0 -0
- {verifiers-0.1.15.dev413 → verifiers-0.1.15.dev415}/verifiers/clients/openai_chat_completions_client.py +0 -0
- {verifiers-0.1.15.dev413 → verifiers-0.1.15.dev415}/verifiers/clients/openai_chat_completions_token_client.py +0 -0
- {verifiers-0.1.15.dev413 → verifiers-0.1.15.dev415}/verifiers/clients/openai_completions_client.py +0 -0
- {verifiers-0.1.15.dev413 → verifiers-0.1.15.dev415}/verifiers/clients/openai_responses_client.py +0 -0
- {verifiers-0.1.15.dev413 → verifiers-0.1.15.dev415}/verifiers/clients/renderer_client.py +0 -0
- {verifiers-0.1.15.dev413 → verifiers-0.1.15.dev415}/verifiers/decorators.py +0 -0
- {verifiers-0.1.15.dev413 → verifiers-0.1.15.dev415}/verifiers/envs/AGENTS.md +0 -0
- {verifiers-0.1.15.dev413 → verifiers-0.1.15.dev415}/verifiers/envs/__init__.py +0 -0
- {verifiers-0.1.15.dev413 → verifiers-0.1.15.dev415}/verifiers/envs/env_group.py +0 -0
- {verifiers-0.1.15.dev413 → verifiers-0.1.15.dev415}/verifiers/envs/environment.py +0 -0
- {verifiers-0.1.15.dev413 → verifiers-0.1.15.dev415}/verifiers/envs/experimental/README.md +0 -0
- {verifiers-0.1.15.dev413 → verifiers-0.1.15.dev415}/verifiers/envs/experimental/__init__.py +0 -0
- {verifiers-0.1.15.dev413 → verifiers-0.1.15.dev415}/verifiers/envs/experimental/cli_agent_env.py +0 -0
- {verifiers-0.1.15.dev413 → verifiers-0.1.15.dev415}/verifiers/envs/experimental/composable/README.md +0 -0
- {verifiers-0.1.15.dev413 → verifiers-0.1.15.dev415}/verifiers/envs/experimental/composable/__init__.py +0 -0
- {verifiers-0.1.15.dev413 → verifiers-0.1.15.dev415}/verifiers/envs/experimental/composable/_filter.py +0 -0
- {verifiers-0.1.15.dev413 → verifiers-0.1.15.dev415}/verifiers/envs/experimental/composable/composable_env.py +0 -0
- {verifiers-0.1.15.dev413 → verifiers-0.1.15.dev415}/verifiers/envs/experimental/composable/harness.py +0 -0
- {verifiers-0.1.15.dev413 → verifiers-0.1.15.dev415}/verifiers/envs/experimental/composable/harnesses/__init__.py +0 -0
- {verifiers-0.1.15.dev413 → verifiers-0.1.15.dev415}/verifiers/envs/experimental/composable/harnesses/mini_swe_agent.py +0 -0
- {verifiers-0.1.15.dev413 → verifiers-0.1.15.dev415}/verifiers/envs/experimental/composable/harnesses/opencode.py +0 -0
- {verifiers-0.1.15.dev413 → verifiers-0.1.15.dev415}/verifiers/envs/experimental/composable/harnesses/prompt.txt +0 -0
- {verifiers-0.1.15.dev413 → verifiers-0.1.15.dev415}/verifiers/envs/experimental/composable/harnesses/rlm.py +0 -0
- {verifiers-0.1.15.dev413 → verifiers-0.1.15.dev415}/verifiers/envs/experimental/composable/sandbox_debug_env.py +0 -0
- {verifiers-0.1.15.dev413 → verifiers-0.1.15.dev415}/verifiers/envs/experimental/composable/swe_debug_env.py +0 -0
- {verifiers-0.1.15.dev413 → verifiers-0.1.15.dev415}/verifiers/envs/experimental/composable/task.py +0 -0
- {verifiers-0.1.15.dev413 → verifiers-0.1.15.dev415}/verifiers/envs/experimental/composable/tasksets/__init__.py +0 -0
- {verifiers-0.1.15.dev413 → verifiers-0.1.15.dev415}/verifiers/envs/experimental/composable/tasksets/cp/__init__.py +0 -0
- {verifiers-0.1.15.dev413 → verifiers-0.1.15.dev415}/verifiers/envs/experimental/composable/tasksets/cp/cp_task.py +0 -0
- {verifiers-0.1.15.dev413 → verifiers-0.1.15.dev415}/verifiers/envs/experimental/composable/tasksets/cp/test_utils.py +0 -0
- {verifiers-0.1.15.dev413 → verifiers-0.1.15.dev415}/verifiers/envs/experimental/composable/tasksets/harbor/__init__.py +0 -0
- {verifiers-0.1.15.dev413 → verifiers-0.1.15.dev415}/verifiers/envs/experimental/composable/tasksets/harbor/cli_gym.py +0 -0
- {verifiers-0.1.15.dev413 → verifiers-0.1.15.dev415}/verifiers/envs/experimental/composable/tasksets/harbor/harbor.py +0 -0
- {verifiers-0.1.15.dev413 → verifiers-0.1.15.dev415}/verifiers/envs/experimental/composable/tasksets/harbor/terminal_lego.py +0 -0
- {verifiers-0.1.15.dev413 → verifiers-0.1.15.dev415}/verifiers/envs/experimental/composable/tasksets/math/__init__.py +0 -0
- {verifiers-0.1.15.dev413 → verifiers-0.1.15.dev415}/verifiers/envs/experimental/composable/tasksets/math/math_task.py +0 -0
- {verifiers-0.1.15.dev413 → verifiers-0.1.15.dev415}/verifiers/envs/experimental/composable/tasksets/search/README.md +0 -0
- {verifiers-0.1.15.dev413 → verifiers-0.1.15.dev415}/verifiers/envs/experimental/composable/tasksets/search/__init__.py +0 -0
- {verifiers-0.1.15.dev413 → verifiers-0.1.15.dev415}/verifiers/envs/experimental/composable/tasksets/search/openseeker/README.md +0 -0
- {verifiers-0.1.15.dev413 → verifiers-0.1.15.dev415}/verifiers/envs/experimental/composable/tasksets/search/openseeker/__init__.py +0 -0
- {verifiers-0.1.15.dev413 → verifiers-0.1.15.dev415}/verifiers/envs/experimental/composable/tasksets/search/openseeker/taskset.py +0 -0
- {verifiers-0.1.15.dev413 → verifiers-0.1.15.dev415}/verifiers/envs/experimental/composable/tasksets/search/quest/README.md +0 -0
- {verifiers-0.1.15.dev413 → verifiers-0.1.15.dev415}/verifiers/envs/experimental/composable/tasksets/search/quest/__init__.py +0 -0
- {verifiers-0.1.15.dev413 → verifiers-0.1.15.dev415}/verifiers/envs/experimental/composable/tasksets/search/quest/obj_task_eval/__init__.py +0 -0
- {verifiers-0.1.15.dev413 → verifiers-0.1.15.dev415}/verifiers/envs/experimental/composable/tasksets/search/quest/obj_task_eval/api_tools/__init__.py +0 -0
- {verifiers-0.1.15.dev413 → verifiers-0.1.15.dev415}/verifiers/envs/experimental/composable/tasksets/search/quest/obj_task_eval/api_tools/tool_pdf.py +0 -0
- {verifiers-0.1.15.dev413 → verifiers-0.1.15.dev415}/verifiers/envs/experimental/composable/tasksets/search/quest/obj_task_eval/eval_toolkit.py +0 -0
- {verifiers-0.1.15.dev413 → verifiers-0.1.15.dev415}/verifiers/envs/experimental/composable/tasksets/search/quest/obj_task_eval/evaluator.py +0 -0
- {verifiers-0.1.15.dev413 → verifiers-0.1.15.dev415}/verifiers/envs/experimental/composable/tasksets/search/quest/obj_task_eval/llm_client/__init__.py +0 -0
- {verifiers-0.1.15.dev413 → verifiers-0.1.15.dev415}/verifiers/envs/experimental/composable/tasksets/search/quest/obj_task_eval/llm_client/base_client.py +0 -0
- {verifiers-0.1.15.dev413 → verifiers-0.1.15.dev415}/verifiers/envs/experimental/composable/tasksets/search/quest/obj_task_eval/prompts/__init__.py +0 -0
- {verifiers-0.1.15.dev413 → verifiers-0.1.15.dev415}/verifiers/envs/experimental/composable/tasksets/search/quest/obj_task_eval/prompts/cache_prompts.py +0 -0
- {verifiers-0.1.15.dev413 → verifiers-0.1.15.dev415}/verifiers/envs/experimental/composable/tasksets/search/quest/obj_task_eval/utils/__init__.py +0 -0
- {verifiers-0.1.15.dev413 → verifiers-0.1.15.dev415}/verifiers/envs/experimental/composable/tasksets/search/quest/obj_task_eval/utils/cache_filesys.py +0 -0
- {verifiers-0.1.15.dev413 → verifiers-0.1.15.dev415}/verifiers/envs/experimental/composable/tasksets/search/quest/obj_task_eval/utils/load_eval_script.py +0 -0
- {verifiers-0.1.15.dev413 → verifiers-0.1.15.dev415}/verifiers/envs/experimental/composable/tasksets/search/quest/obj_task_eval/utils/misc.py +0 -0
- {verifiers-0.1.15.dev413 → verifiers-0.1.15.dev415}/verifiers/envs/experimental/composable/tasksets/search/quest/obj_task_eval/utils/tool_visit.py +0 -0
- {verifiers-0.1.15.dev413 → verifiers-0.1.15.dev415}/verifiers/envs/experimental/composable/tasksets/search/quest/obj_task_eval/utils/url_tools.py +0 -0
- {verifiers-0.1.15.dev413 → verifiers-0.1.15.dev415}/verifiers/envs/experimental/composable/tasksets/search/quest/obj_task_eval/verification_tree.py +0 -0
- {verifiers-0.1.15.dev413 → verifiers-0.1.15.dev415}/verifiers/envs/experimental/composable/tasksets/search/quest/open_ended.py +0 -0
- {verifiers-0.1.15.dev413 → verifiers-0.1.15.dev415}/verifiers/envs/experimental/composable/tasksets/search/quest/taskset.py +0 -0
- {verifiers-0.1.15.dev413 → verifiers-0.1.15.dev415}/verifiers/envs/experimental/composable/tasksets/search/redsearcher/README.md +0 -0
- {verifiers-0.1.15.dev413 → verifiers-0.1.15.dev415}/verifiers/envs/experimental/composable/tasksets/search/redsearcher/__init__.py +0 -0
- {verifiers-0.1.15.dev413 → verifiers-0.1.15.dev415}/verifiers/envs/experimental/composable/tasksets/search/redsearcher/taskset.py +0 -0
- {verifiers-0.1.15.dev413 → verifiers-0.1.15.dev415}/verifiers/envs/experimental/composable/tasksets/search/search_tasksets.py +0 -0
- {verifiers-0.1.15.dev413 → verifiers-0.1.15.dev415}/verifiers/envs/experimental/composable/tasksets/swe/README.md +0 -0
- {verifiers-0.1.15.dev413 → verifiers-0.1.15.dev415}/verifiers/envs/experimental/composable/tasksets/swe/__init__.py +0 -0
- {verifiers-0.1.15.dev413 → verifiers-0.1.15.dev415}/verifiers/envs/experimental/composable/tasksets/swe/multi_swe/__init__.py +0 -0
- {verifiers-0.1.15.dev413 → verifiers-0.1.15.dev415}/verifiers/envs/experimental/composable/tasksets/swe/multi_swe/extract_fix_patch.sh +0 -0
- {verifiers-0.1.15.dev413 → verifiers-0.1.15.dev415}/verifiers/envs/experimental/composable/tasksets/swe/multi_swe/taskset.py +0 -0
- {verifiers-0.1.15.dev413 → verifiers-0.1.15.dev415}/verifiers/envs/experimental/composable/tasksets/swe/openswe/__init__.py +0 -0
- {verifiers-0.1.15.dev413 → verifiers-0.1.15.dev415}/verifiers/envs/experimental/composable/tasksets/swe/openswe/taskset.py +0 -0
- {verifiers-0.1.15.dev413 → verifiers-0.1.15.dev415}/verifiers/envs/experimental/composable/tasksets/swe/r2e_gym/__init__.py +0 -0
- {verifiers-0.1.15.dev413 → verifiers-0.1.15.dev415}/verifiers/envs/experimental/composable/tasksets/swe/r2e_gym/log_parser.py +0 -0
- {verifiers-0.1.15.dev413 → verifiers-0.1.15.dev415}/verifiers/envs/experimental/composable/tasksets/swe/r2e_gym/taskset.py +0 -0
- {verifiers-0.1.15.dev413 → verifiers-0.1.15.dev415}/verifiers/envs/experimental/composable/tasksets/swe/scale_swe/__init__.py +0 -0
- {verifiers-0.1.15.dev413 → verifiers-0.1.15.dev415}/verifiers/envs/experimental/composable/tasksets/swe/scale_swe/taskset.py +0 -0
- {verifiers-0.1.15.dev413 → verifiers-0.1.15.dev415}/verifiers/envs/experimental/composable/tasksets/swe/shared/__init__.py +0 -0
- {verifiers-0.1.15.dev413 → verifiers-0.1.15.dev415}/verifiers/envs/experimental/composable/tasksets/swe/shared/test_patch.py +0 -0
- {verifiers-0.1.15.dev413 → verifiers-0.1.15.dev415}/verifiers/envs/experimental/composable/tasksets/swe/swe_bench/__init__.py +0 -0
- {verifiers-0.1.15.dev413 → verifiers-0.1.15.dev415}/verifiers/envs/experimental/composable/tasksets/swe/swe_bench/taskset.py +0 -0
- {verifiers-0.1.15.dev413 → verifiers-0.1.15.dev415}/verifiers/envs/experimental/composable/tasksets/swe/swe_lego/__init__.py +0 -0
- {verifiers-0.1.15.dev413 → verifiers-0.1.15.dev415}/verifiers/envs/experimental/composable/tasksets/swe/swe_lego/taskset.py +0 -0
- {verifiers-0.1.15.dev413 → verifiers-0.1.15.dev415}/verifiers/envs/experimental/composable/tasksets/swe/swe_rebench_v2/__init__.py +0 -0
- {verifiers-0.1.15.dev413 → verifiers-0.1.15.dev415}/verifiers/envs/experimental/composable/tasksets/swe/swe_rebench_v2/log_parsers.py +0 -0
- {verifiers-0.1.15.dev413 → verifiers-0.1.15.dev415}/verifiers/envs/experimental/composable/tasksets/swe/swe_rebench_v2/taskset.py +0 -0
- {verifiers-0.1.15.dev413 → verifiers-0.1.15.dev415}/verifiers/envs/experimental/composable/tasksets/swe/swe_smith/__init__.py +0 -0
- {verifiers-0.1.15.dev413 → verifiers-0.1.15.dev415}/verifiers/envs/experimental/composable/tasksets/swe/swe_smith/taskset.py +0 -0
- {verifiers-0.1.15.dev413 → verifiers-0.1.15.dev415}/verifiers/envs/experimental/composable/tasksets/swe/swe_tasksets.py +0 -0
- {verifiers-0.1.15.dev413 → verifiers-0.1.15.dev415}/verifiers/envs/experimental/gym_env.py +0 -0
- {verifiers-0.1.15.dev413 → verifiers-0.1.15.dev415}/verifiers/envs/experimental/harbor_env/__init__.py +0 -0
- {verifiers-0.1.15.dev413 → verifiers-0.1.15.dev415}/verifiers/envs/experimental/harbor_env/env.py +0 -0
- {verifiers-0.1.15.dev413 → verifiers-0.1.15.dev415}/verifiers/envs/experimental/harbor_env/mcp.py +0 -0
- {verifiers-0.1.15.dev413 → verifiers-0.1.15.dev415}/verifiers/envs/experimental/mcp_env.py +0 -0
- {verifiers-0.1.15.dev413 → verifiers-0.1.15.dev415}/verifiers/envs/experimental/opencode_env.py +0 -0
- {verifiers-0.1.15.dev413 → verifiers-0.1.15.dev415}/verifiers/envs/experimental/opencode_qa_env.py +0 -0
- {verifiers-0.1.15.dev413 → verifiers-0.1.15.dev415}/verifiers/envs/experimental/opencode_rlm_env.py +0 -0
- {verifiers-0.1.15.dev413 → verifiers-0.1.15.dev415}/verifiers/envs/experimental/sandbox_mixin.py +0 -0
- {verifiers-0.1.15.dev413 → verifiers-0.1.15.dev415}/verifiers/envs/experimental/utils/__init__.py +0 -0
- {verifiers-0.1.15.dev413 → verifiers-0.1.15.dev415}/verifiers/envs/experimental/utils/file_locks.py +0 -0
- {verifiers-0.1.15.dev413 → verifiers-0.1.15.dev415}/verifiers/envs/experimental/utils/git_checkout_cache.py +0 -0
- {verifiers-0.1.15.dev413 → verifiers-0.1.15.dev415}/verifiers/envs/integrations/README.md +0 -0
- {verifiers-0.1.15.dev413 → verifiers-0.1.15.dev415}/verifiers/envs/integrations/__init__.py +0 -0
- {verifiers-0.1.15.dev413 → verifiers-0.1.15.dev415}/verifiers/envs/integrations/browser_env/README.md +0 -0
- {verifiers-0.1.15.dev413 → verifiers-0.1.15.dev415}/verifiers/envs/integrations/browser_env/__init__.py +0 -0
- {verifiers-0.1.15.dev413 → verifiers-0.1.15.dev415}/verifiers/envs/integrations/browser_env/browser_env.py +0 -0
- {verifiers-0.1.15.dev413 → verifiers-0.1.15.dev415}/verifiers/envs/integrations/browser_env/modes/__init__.py +0 -0
- {verifiers-0.1.15.dev413 → verifiers-0.1.15.dev415}/verifiers/envs/integrations/browser_env/modes/base.py +0 -0
- {verifiers-0.1.15.dev413 → verifiers-0.1.15.dev415}/verifiers/envs/integrations/browser_env/modes/cua_mode.py +0 -0
- {verifiers-0.1.15.dev413 → verifiers-0.1.15.dev415}/verifiers/envs/integrations/browser_env/modes/dom_mode.py +0 -0
- {verifiers-0.1.15.dev413 → verifiers-0.1.15.dev415}/verifiers/envs/integrations/openenv_env.py +0 -0
- {verifiers-0.1.15.dev413 → verifiers-0.1.15.dev415}/verifiers/envs/integrations/reasoninggym_env.py +0 -0
- {verifiers-0.1.15.dev413 → verifiers-0.1.15.dev415}/verifiers/envs/integrations/textarena_env.py +0 -0
- {verifiers-0.1.15.dev413 → verifiers-0.1.15.dev415}/verifiers/envs/multiturn_env.py +0 -0
- {verifiers-0.1.15.dev413 → verifiers-0.1.15.dev415}/verifiers/envs/python_env.py +0 -0
- {verifiers-0.1.15.dev413 → verifiers-0.1.15.dev415}/verifiers/envs/sandbox_env.py +0 -0
- {verifiers-0.1.15.dev413 → verifiers-0.1.15.dev415}/verifiers/envs/singleturn_env.py +0 -0
- {verifiers-0.1.15.dev413 → verifiers-0.1.15.dev415}/verifiers/envs/stateful_tool_env.py +0 -0
- {verifiers-0.1.15.dev413 → verifiers-0.1.15.dev415}/verifiers/envs/tool_env.py +0 -0
- {verifiers-0.1.15.dev413 → verifiers-0.1.15.dev415}/verifiers/errors.py +0 -0
- {verifiers-0.1.15.dev413 → verifiers-0.1.15.dev415}/verifiers/gepa/__init__.py +0 -0
- {verifiers-0.1.15.dev413 → verifiers-0.1.15.dev415}/verifiers/gepa/adapter.py +0 -0
- {verifiers-0.1.15.dev413 → verifiers-0.1.15.dev415}/verifiers/gepa/config.py +0 -0
- {verifiers-0.1.15.dev413 → verifiers-0.1.15.dev415}/verifiers/gepa/display.py +0 -0
- {verifiers-0.1.15.dev413 → verifiers-0.1.15.dev415}/verifiers/gepa/gepa_utils.py +0 -0
- {verifiers-0.1.15.dev413 → verifiers-0.1.15.dev415}/verifiers/parsers/__init__.py +0 -0
- {verifiers-0.1.15.dev413 → verifiers-0.1.15.dev415}/verifiers/parsers/maybe_think_parser.py +0 -0
- {verifiers-0.1.15.dev413 → verifiers-0.1.15.dev415}/verifiers/parsers/parser.py +0 -0
- {verifiers-0.1.15.dev413 → verifiers-0.1.15.dev415}/verifiers/parsers/think_parser.py +0 -0
- {verifiers-0.1.15.dev413 → verifiers-0.1.15.dev415}/verifiers/parsers/xml_parser.py +0 -0
- {verifiers-0.1.15.dev413 → verifiers-0.1.15.dev415}/verifiers/rl/README.md +0 -0
- {verifiers-0.1.15.dev413 → verifiers-0.1.15.dev415}/verifiers/rl/__init__.py +0 -0
- {verifiers-0.1.15.dev413 → verifiers-0.1.15.dev415}/verifiers/rl/inference/__init__.py +0 -0
- {verifiers-0.1.15.dev413 → verifiers-0.1.15.dev415}/verifiers/rl/inference/client.py +0 -0
- {verifiers-0.1.15.dev413 → verifiers-0.1.15.dev415}/verifiers/rl/inference/server.py +0 -0
- {verifiers-0.1.15.dev413 → verifiers-0.1.15.dev415}/verifiers/rl/trainer/__init__.py +0 -0
- {verifiers-0.1.15.dev413 → verifiers-0.1.15.dev415}/verifiers/rl/trainer/config.py +0 -0
- {verifiers-0.1.15.dev413 → verifiers-0.1.15.dev415}/verifiers/rl/trainer/orchestrator.py +0 -0
- {verifiers-0.1.15.dev413 → verifiers-0.1.15.dev415}/verifiers/rl/trainer/trainer.py +0 -0
- {verifiers-0.1.15.dev413 → verifiers-0.1.15.dev415}/verifiers/rl/trainer/utils.py +0 -0
- {verifiers-0.1.15.dev413 → verifiers-0.1.15.dev415}/verifiers/rubrics/__init__.py +0 -0
- {verifiers-0.1.15.dev413 → verifiers-0.1.15.dev415}/verifiers/rubrics/experimental/hybrid_math_rubric.py +0 -0
- {verifiers-0.1.15.dev413 → verifiers-0.1.15.dev415}/verifiers/rubrics/judge_rubric.py +0 -0
- {verifiers-0.1.15.dev413 → verifiers-0.1.15.dev415}/verifiers/rubrics/math_rubric.py +0 -0
- {verifiers-0.1.15.dev413 → verifiers-0.1.15.dev415}/verifiers/rubrics/rubric.py +0 -0
- {verifiers-0.1.15.dev413 → verifiers-0.1.15.dev415}/verifiers/rubrics/rubric_group.py +0 -0
- {verifiers-0.1.15.dev413 → verifiers-0.1.15.dev415}/verifiers/scripts/__init__.py +0 -0
- {verifiers-0.1.15.dev413 → verifiers-0.1.15.dev415}/verifiers/scripts/build.py +0 -0
- {verifiers-0.1.15.dev413 → verifiers-0.1.15.dev415}/verifiers/scripts/eval.py +0 -0
- {verifiers-0.1.15.dev413 → verifiers-0.1.15.dev415}/verifiers/scripts/gepa.py +0 -0
- {verifiers-0.1.15.dev413 → verifiers-0.1.15.dev415}/verifiers/scripts/init.py +0 -0
- {verifiers-0.1.15.dev413 → verifiers-0.1.15.dev415}/verifiers/scripts/install.py +0 -0
- {verifiers-0.1.15.dev413 → verifiers-0.1.15.dev415}/verifiers/scripts/rl.py +0 -0
- {verifiers-0.1.15.dev413 → verifiers-0.1.15.dev415}/verifiers/scripts/setup.py +0 -0
- {verifiers-0.1.15.dev413 → verifiers-0.1.15.dev415}/verifiers/scripts/train.py +0 -0
- {verifiers-0.1.15.dev413 → verifiers-0.1.15.dev415}/verifiers/scripts/tui.py +0 -0
- {verifiers-0.1.15.dev413 → verifiers-0.1.15.dev415}/verifiers/scripts/vllm.py +0 -0
- {verifiers-0.1.15.dev413 → verifiers-0.1.15.dev415}/verifiers/serve/__init__.py +0 -0
- {verifiers-0.1.15.dev413 → verifiers-0.1.15.dev415}/verifiers/serve/client/env_client.py +0 -0
- {verifiers-0.1.15.dev413 → verifiers-0.1.15.dev415}/verifiers/serve/client/zmq_env_client.py +0 -0
- {verifiers-0.1.15.dev413 → verifiers-0.1.15.dev415}/verifiers/serve/server/__init__.py +0 -0
- {verifiers-0.1.15.dev413 → verifiers-0.1.15.dev415}/verifiers/serve/server/env_router.py +0 -0
- {verifiers-0.1.15.dev413 → verifiers-0.1.15.dev415}/verifiers/serve/server/env_server.py +0 -0
- {verifiers-0.1.15.dev413 → verifiers-0.1.15.dev415}/verifiers/serve/server/env_worker.py +0 -0
- {verifiers-0.1.15.dev413 → verifiers-0.1.15.dev415}/verifiers/serve/server/zmq_env_server.py +0 -0
- {verifiers-0.1.15.dev413 → verifiers-0.1.15.dev415}/verifiers/serve/types.py +0 -0
- {verifiers-0.1.15.dev413 → verifiers-0.1.15.dev415}/verifiers/types.py +0 -0
- {verifiers-0.1.15.dev413 → verifiers-0.1.15.dev415}/verifiers/utils/__init__.py +0 -0
- {verifiers-0.1.15.dev413 → verifiers-0.1.15.dev415}/verifiers/utils/async_utils.py +0 -0
- {verifiers-0.1.15.dev413 → verifiers-0.1.15.dev415}/verifiers/utils/client_utils.py +0 -0
- {verifiers-0.1.15.dev413 → verifiers-0.1.15.dev415}/verifiers/utils/config_utils.py +0 -0
- {verifiers-0.1.15.dev413 → verifiers-0.1.15.dev415}/verifiers/utils/data_utils.py +0 -0
- {verifiers-0.1.15.dev413 → verifiers-0.1.15.dev415}/verifiers/utils/display_utils.py +0 -0
- {verifiers-0.1.15.dev413 → verifiers-0.1.15.dev415}/verifiers/utils/env_config_utils.py +0 -0
- {verifiers-0.1.15.dev413 → verifiers-0.1.15.dev415}/verifiers/utils/env_utils.py +0 -0
- {verifiers-0.1.15.dev413 → verifiers-0.1.15.dev415}/verifiers/utils/error_utils.py +0 -0
- {verifiers-0.1.15.dev413 → verifiers-0.1.15.dev415}/verifiers/utils/eval_display.py +0 -0
- {verifiers-0.1.15.dev413 → verifiers-0.1.15.dev415}/verifiers/utils/eval_utils.py +0 -0
- {verifiers-0.1.15.dev413 → verifiers-0.1.15.dev415}/verifiers/utils/heartbeat.py +0 -0
- {verifiers-0.1.15.dev413 → verifiers-0.1.15.dev415}/verifiers/utils/import_utils.py +0 -0
- {verifiers-0.1.15.dev413 → verifiers-0.1.15.dev415}/verifiers/utils/install_utils.py +0 -0
- {verifiers-0.1.15.dev413 → verifiers-0.1.15.dev415}/verifiers/utils/interception_utils.py +0 -0
- {verifiers-0.1.15.dev413 → verifiers-0.1.15.dev415}/verifiers/utils/logging_utils.py +0 -0
- {verifiers-0.1.15.dev413 → verifiers-0.1.15.dev415}/verifiers/utils/message_utils.py +0 -0
- {verifiers-0.1.15.dev413 → verifiers-0.1.15.dev415}/verifiers/utils/metric_utils.py +0 -0
- {verifiers-0.1.15.dev413 → verifiers-0.1.15.dev415}/verifiers/utils/path_utils.py +0 -0
- {verifiers-0.1.15.dev413 → verifiers-0.1.15.dev415}/verifiers/utils/pricing_utils.py +0 -0
- {verifiers-0.1.15.dev413 → verifiers-0.1.15.dev415}/verifiers/utils/process_utils.py +0 -0
- {verifiers-0.1.15.dev413 → verifiers-0.1.15.dev415}/verifiers/utils/response_utils.py +0 -0
- {verifiers-0.1.15.dev413 → verifiers-0.1.15.dev415}/verifiers/utils/save_utils.py +0 -0
- {verifiers-0.1.15.dev413 → verifiers-0.1.15.dev415}/verifiers/utils/serve_utils.py +0 -0
- {verifiers-0.1.15.dev413 → verifiers-0.1.15.dev415}/verifiers/utils/thread_utils.py +0 -0
- {verifiers-0.1.15.dev413 → verifiers-0.1.15.dev415}/verifiers/utils/threaded_sandbox_client.py +0 -0
- {verifiers-0.1.15.dev413 → verifiers-0.1.15.dev415}/verifiers/utils/tool_utils.py +0 -0
- {verifiers-0.1.15.dev413 → verifiers-0.1.15.dev415}/verifiers/utils/usage_utils.py +0 -0
- {verifiers-0.1.15.dev413 → verifiers-0.1.15.dev415}/verifiers/utils/version_utils.py +0 -0
- {verifiers-0.1.15.dev413 → verifiers-0.1.15.dev415}/verifiers/v1/ARCHITECTURE.md +0 -0
- {verifiers-0.1.15.dev413 → verifiers-0.1.15.dev415}/verifiers/v1/GUIDE.md +0 -0
- {verifiers-0.1.15.dev413 → verifiers-0.1.15.dev415}/verifiers/v1/README.md +0 -0
- {verifiers-0.1.15.dev413 → verifiers-0.1.15.dev415}/verifiers/v1/__init__.py +0 -0
- {verifiers-0.1.15.dev413 → verifiers-0.1.15.dev415}/verifiers/v1/cli/__init__.py +0 -0
- {verifiers-0.1.15.dev413 → verifiers-0.1.15.dev415}/verifiers/v1/cli/dashboard/__init__.py +0 -0
- {verifiers-0.1.15.dev413 → verifiers-0.1.15.dev415}/verifiers/v1/cli/dashboard/validate.py +0 -0
- {verifiers-0.1.15.dev413 → verifiers-0.1.15.dev415}/verifiers/v1/cli/eval/__init__.py +0 -0
- {verifiers-0.1.15.dev413 → verifiers-0.1.15.dev415}/verifiers/v1/cli/eval/main.py +0 -0
- {verifiers-0.1.15.dev413 → verifiers-0.1.15.dev415}/verifiers/v1/cli/eval/resume.py +0 -0
- {verifiers-0.1.15.dev413 → verifiers-0.1.15.dev415}/verifiers/v1/cli/eval/runner.py +0 -0
- {verifiers-0.1.15.dev413 → verifiers-0.1.15.dev415}/verifiers/v1/cli/init.py +0 -0
- {verifiers-0.1.15.dev413 → verifiers-0.1.15.dev415}/verifiers/v1/cli/output.py +0 -0
- {verifiers-0.1.15.dev413 → verifiers-0.1.15.dev415}/verifiers/v1/cli/resolve.py +0 -0
- {verifiers-0.1.15.dev413 → verifiers-0.1.15.dev415}/verifiers/v1/cli/serve.py +0 -0
- {verifiers-0.1.15.dev413 → verifiers-0.1.15.dev415}/verifiers/v1/cli/validate.py +0 -0
- {verifiers-0.1.15.dev413 → verifiers-0.1.15.dev415}/verifiers/v1/clients/__init__.py +0 -0
- {verifiers-0.1.15.dev413 → verifiers-0.1.15.dev415}/verifiers/v1/clients/client.py +0 -0
- {verifiers-0.1.15.dev413 → verifiers-0.1.15.dev415}/verifiers/v1/clients/config.py +0 -0
- {verifiers-0.1.15.dev413 → verifiers-0.1.15.dev415}/verifiers/v1/clients/eval.py +0 -0
- {verifiers-0.1.15.dev413 → verifiers-0.1.15.dev415}/verifiers/v1/clients/train.py +0 -0
- {verifiers-0.1.15.dev413 → verifiers-0.1.15.dev415}/verifiers/v1/configs/__init__.py +0 -0
- {verifiers-0.1.15.dev413 → verifiers-0.1.15.dev415}/verifiers/v1/configs/eval.py +0 -0
- {verifiers-0.1.15.dev413 → verifiers-0.1.15.dev415}/verifiers/v1/configs/init.py +0 -0
- {verifiers-0.1.15.dev413 → verifiers-0.1.15.dev415}/verifiers/v1/configs/serve.py +0 -0
- {verifiers-0.1.15.dev413 → verifiers-0.1.15.dev415}/verifiers/v1/configs/validate.py +0 -0
- {verifiers-0.1.15.dev413 → verifiers-0.1.15.dev415}/verifiers/v1/decorators.py +0 -0
- {verifiers-0.1.15.dev413 → verifiers-0.1.15.dev415}/verifiers/v1/dialects/__init__.py +0 -0
- {verifiers-0.1.15.dev413 → verifiers-0.1.15.dev415}/verifiers/v1/dialects/anthropic.py +0 -0
- {verifiers-0.1.15.dev413 → verifiers-0.1.15.dev415}/verifiers/v1/dialects/base.py +0 -0
- {verifiers-0.1.15.dev413 → verifiers-0.1.15.dev415}/verifiers/v1/dialects/chat.py +0 -0
- {verifiers-0.1.15.dev413 → verifiers-0.1.15.dev415}/verifiers/v1/dialects/responses.py +0 -0
- {verifiers-0.1.15.dev413 → verifiers-0.1.15.dev415}/verifiers/v1/env.py +0 -0
- {verifiers-0.1.15.dev413 → verifiers-0.1.15.dev415}/verifiers/v1/episode.py +0 -0
- {verifiers-0.1.15.dev413 → verifiers-0.1.15.dev415}/verifiers/v1/errors.py +0 -0
- {verifiers-0.1.15.dev413 → verifiers-0.1.15.dev415}/verifiers/v1/graph.py +0 -0
- {verifiers-0.1.15.dev413 → verifiers-0.1.15.dev415}/verifiers/v1/harness.py +0 -0
- {verifiers-0.1.15.dev413 → verifiers-0.1.15.dev415}/verifiers/v1/harnesses/__init__.py +0 -0
- {verifiers-0.1.15.dev413 → verifiers-0.1.15.dev415}/verifiers/v1/harnesses/codex/__init__.py +0 -0
- {verifiers-0.1.15.dev413 → verifiers-0.1.15.dev415}/verifiers/v1/harnesses/codex/harness.py +0 -0
- {verifiers-0.1.15.dev413 → verifiers-0.1.15.dev415}/verifiers/v1/harnesses/default/__init__.py +0 -0
- {verifiers-0.1.15.dev413 → verifiers-0.1.15.dev415}/verifiers/v1/harnesses/default/harness.py +0 -0
- {verifiers-0.1.15.dev413 → verifiers-0.1.15.dev415}/verifiers/v1/harnesses/default/program.py +0 -0
- {verifiers-0.1.15.dev413 → verifiers-0.1.15.dev415}/verifiers/v1/harnesses/kimi_code/__init__.py +0 -0
- {verifiers-0.1.15.dev413 → verifiers-0.1.15.dev415}/verifiers/v1/harnesses/kimi_code/harness.py +0 -0
- {verifiers-0.1.15.dev413 → verifiers-0.1.15.dev415}/verifiers/v1/harnesses/mini_swe_agent/__init__.py +0 -0
- {verifiers-0.1.15.dev413 → verifiers-0.1.15.dev415}/verifiers/v1/harnesses/mini_swe_agent/harness.py +0 -0
- {verifiers-0.1.15.dev413 → verifiers-0.1.15.dev415}/verifiers/v1/harnesses/mini_swe_agent/program.py +0 -0
- {verifiers-0.1.15.dev413 → verifiers-0.1.15.dev415}/verifiers/v1/harnesses/null/__init__.py +0 -0
- {verifiers-0.1.15.dev413 → verifiers-0.1.15.dev415}/verifiers/v1/harnesses/null/harness.py +0 -0
- {verifiers-0.1.15.dev413 → verifiers-0.1.15.dev415}/verifiers/v1/harnesses/null/program.py +0 -0
- {verifiers-0.1.15.dev413 → verifiers-0.1.15.dev415}/verifiers/v1/harnesses/rlm/__init__.py +0 -0
- {verifiers-0.1.15.dev413 → verifiers-0.1.15.dev415}/verifiers/v1/harnesses/rlm/harness.py +0 -0
- {verifiers-0.1.15.dev413 → verifiers-0.1.15.dev415}/verifiers/v1/harnesses/terminus_2/__init__.py +0 -0
- {verifiers-0.1.15.dev413 → verifiers-0.1.15.dev415}/verifiers/v1/harnesses/terminus_2/harness.py +0 -0
- {verifiers-0.1.15.dev413 → verifiers-0.1.15.dev415}/verifiers/v1/harnesses/terminus_2/program.py +0 -0
- {verifiers-0.1.15.dev413 → verifiers-0.1.15.dev415}/verifiers/v1/interception/__init__.py +0 -0
- {verifiers-0.1.15.dev413 → verifiers-0.1.15.dev415}/verifiers/v1/interception/pool.py +0 -0
- {verifiers-0.1.15.dev413 → verifiers-0.1.15.dev415}/verifiers/v1/interception/server.py +0 -0
- {verifiers-0.1.15.dev413 → verifiers-0.1.15.dev415}/verifiers/v1/judge.py +0 -0
- {verifiers-0.1.15.dev413 → verifiers-0.1.15.dev415}/verifiers/v1/legacy.py +0 -0
- {verifiers-0.1.15.dev413 → verifiers-0.1.15.dev415}/verifiers/v1/loaders.py +0 -0
- {verifiers-0.1.15.dev413 → verifiers-0.1.15.dev415}/verifiers/v1/mcp/__init__.py +0 -0
- {verifiers-0.1.15.dev413 → verifiers-0.1.15.dev415}/verifiers/v1/mcp/launch.py +0 -0
- {verifiers-0.1.15.dev413 → verifiers-0.1.15.dev415}/verifiers/v1/mcp/multiplex.py +0 -0
- {verifiers-0.1.15.dev413 → verifiers-0.1.15.dev415}/verifiers/v1/mcp/server.py +0 -0
- {verifiers-0.1.15.dev413 → verifiers-0.1.15.dev415}/verifiers/v1/mcp/toolset.py +0 -0
- {verifiers-0.1.15.dev413 → verifiers-0.1.15.dev415}/verifiers/v1/mcp/user.py +0 -0
- {verifiers-0.1.15.dev413 → verifiers-0.1.15.dev415}/verifiers/v1/retries.py +0 -0
- {verifiers-0.1.15.dev413 → verifiers-0.1.15.dev415}/verifiers/v1/runtimes/__init__.py +0 -0
- {verifiers-0.1.15.dev413 → verifiers-0.1.15.dev415}/verifiers/v1/runtimes/base.py +0 -0
- {verifiers-0.1.15.dev413 → verifiers-0.1.15.dev415}/verifiers/v1/runtimes/docker.py +0 -0
- {verifiers-0.1.15.dev413 → verifiers-0.1.15.dev415}/verifiers/v1/runtimes/limiters.py +0 -0
- {verifiers-0.1.15.dev413 → verifiers-0.1.15.dev415}/verifiers/v1/runtimes/modal.py +0 -0
- {verifiers-0.1.15.dev413 → verifiers-0.1.15.dev415}/verifiers/v1/runtimes/prime.py +0 -0
- {verifiers-0.1.15.dev413 → verifiers-0.1.15.dev415}/verifiers/v1/runtimes/subprocess.py +0 -0
- {verifiers-0.1.15.dev413 → verifiers-0.1.15.dev415}/verifiers/v1/serve/__init__.py +0 -0
- {verifiers-0.1.15.dev413 → verifiers-0.1.15.dev415}/verifiers/v1/serve/client.py +0 -0
- {verifiers-0.1.15.dev413 → verifiers-0.1.15.dev415}/verifiers/v1/serve/pool.py +0 -0
- {verifiers-0.1.15.dev413 → verifiers-0.1.15.dev415}/verifiers/v1/serve/server.py +0 -0
- {verifiers-0.1.15.dev413 → verifiers-0.1.15.dev415}/verifiers/v1/serve/types.py +0 -0
- {verifiers-0.1.15.dev413 → verifiers-0.1.15.dev415}/verifiers/v1/state.py +0 -0
- {verifiers-0.1.15.dev413 → verifiers-0.1.15.dev415}/verifiers/v1/task.py +0 -0
- {verifiers-0.1.15.dev413 → verifiers-0.1.15.dev415}/verifiers/v1/taskset.py +0 -0
- {verifiers-0.1.15.dev413 → verifiers-0.1.15.dev415}/verifiers/v1/tasksets/__init__.py +0 -0
- {verifiers-0.1.15.dev413 → verifiers-0.1.15.dev415}/verifiers/v1/tasksets/harbor/__init__.py +0 -0
- {verifiers-0.1.15.dev413 → verifiers-0.1.15.dev415}/verifiers/v1/tasksets/harbor/taskset.py +0 -0
- {verifiers-0.1.15.dev413 → verifiers-0.1.15.dev415}/verifiers/v1/tasksets/lean/__init__.py +0 -0
- {verifiers-0.1.15.dev413 → verifiers-0.1.15.dev415}/verifiers/v1/tasksets/lean/scoring.py +0 -0
- {verifiers-0.1.15.dev413 → verifiers-0.1.15.dev415}/verifiers/v1/tasksets/lean/taskset.py +0 -0
- {verifiers-0.1.15.dev413 → verifiers-0.1.15.dev415}/verifiers/v1/tasksets/textarena/__init__.py +0 -0
- {verifiers-0.1.15.dev413 → verifiers-0.1.15.dev415}/verifiers/v1/tasksets/textarena/taskset.py +0 -0
- {verifiers-0.1.15.dev413 → verifiers-0.1.15.dev415}/verifiers/v1/trace.py +0 -0
- {verifiers-0.1.15.dev413 → verifiers-0.1.15.dev415}/verifiers/v1/types.py +0 -0
- {verifiers-0.1.15.dev413 → verifiers-0.1.15.dev415}/verifiers/v1/utils/__init__.py +0 -0
- {verifiers-0.1.15.dev413 → verifiers-0.1.15.dev415}/verifiers/v1/utils/format.py +0 -0
- {verifiers-0.1.15.dev413 → verifiers-0.1.15.dev415}/verifiers/v1/utils/install.py +0 -0
- {verifiers-0.1.15.dev413 → verifiers-0.1.15.dev415}/verifiers/v1/utils/logging.py +0 -0
- {verifiers-0.1.15.dev413 → verifiers-0.1.15.dev415}/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.dev415
|
|
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
|
|
@@ -0,0 +1,108 @@
|
|
|
1
|
+
"""The shared dashboard engine: a rich `Live` view on a fixed refresh tick.
|
|
2
|
+
|
|
3
|
+
The eval and validate dashboards each build their own frame; `live_view` just drives whichever
|
|
4
|
+
`render` it's given — refreshing on a timer and drawing a final frame on exit. When given an
|
|
5
|
+
`on_key` handler it also reads left/right arrow presses from the terminal (see `_key_reader`).
|
|
6
|
+
"""
|
|
7
|
+
|
|
8
|
+
import asyncio
|
|
9
|
+
import contextlib
|
|
10
|
+
import os
|
|
11
|
+
import sys
|
|
12
|
+
from collections.abc import Callable, Iterator
|
|
13
|
+
|
|
14
|
+
from rich.console import Group
|
|
15
|
+
from rich.live import Live
|
|
16
|
+
|
|
17
|
+
try: # POSIX-only terminal control; absent on Windows, where key reading is skipped.
|
|
18
|
+
import termios
|
|
19
|
+
import tty
|
|
20
|
+
|
|
21
|
+
_HAS_TTY = True
|
|
22
|
+
except ImportError:
|
|
23
|
+
_HAS_TTY = False
|
|
24
|
+
|
|
25
|
+
# Arrow-key escape sequences → direction, covering both the normal (`ESC [`) and application
|
|
26
|
+
# (`ESC O`) cursor-key modes a terminal might send.
|
|
27
|
+
_ARROWS = {
|
|
28
|
+
b"\x1b[C": "right",
|
|
29
|
+
b"\x1bOC": "right",
|
|
30
|
+
b"\x1b[D": "left",
|
|
31
|
+
b"\x1bOD": "left",
|
|
32
|
+
}
|
|
33
|
+
|
|
34
|
+
|
|
35
|
+
@contextlib.contextmanager
|
|
36
|
+
def _key_reader(
|
|
37
|
+
on_key: Callable[[str], None] | None, refresh: Callable[[], None]
|
|
38
|
+
) -> Iterator[None]:
|
|
39
|
+
"""Dispatch left/right arrow presses to `on_key`, redrawing immediately after each so the
|
|
40
|
+
view feels instant rather than waiting for the next refresh tick. A no-op unless `on_key` is
|
|
41
|
+
given and stdin is a real terminal. Puts stdin in cbreak mode (char-at-a-time, no echo, Ctrl+C
|
|
42
|
+
still interrupts) and reads it via the event loop — no extra thread — restoring the terminal on
|
|
43
|
+
exit."""
|
|
44
|
+
if on_key is None or not _HAS_TTY or not sys.stdin.isatty():
|
|
45
|
+
yield
|
|
46
|
+
return
|
|
47
|
+
fd = sys.stdin.fileno()
|
|
48
|
+
loop = asyncio.get_running_loop()
|
|
49
|
+
old = termios.tcgetattr(fd)
|
|
50
|
+
# carries a partial escape across reads — cbreak can split a key's 3 bytes over callbacks
|
|
51
|
+
buf = bytearray()
|
|
52
|
+
|
|
53
|
+
def _read() -> None:
|
|
54
|
+
try:
|
|
55
|
+
data = os.read(fd, 32)
|
|
56
|
+
except OSError:
|
|
57
|
+
return
|
|
58
|
+
if not data:
|
|
59
|
+
return
|
|
60
|
+
buf.extend(data)
|
|
61
|
+
fired = False
|
|
62
|
+
i = 0
|
|
63
|
+
while i < len(buf): # a chunk may hold several presses; scan the whole buffer
|
|
64
|
+
if key := _ARROWS.get(bytes(buf[i : i + 3])):
|
|
65
|
+
on_key(key)
|
|
66
|
+
fired = True
|
|
67
|
+
i += 3
|
|
68
|
+
elif buf[i] == 0x1B and len(buf) - i < 3:
|
|
69
|
+
break # incomplete escape at the tail — hold it for the next read
|
|
70
|
+
else:
|
|
71
|
+
i += 1
|
|
72
|
+
del buf[:i]
|
|
73
|
+
if fired:
|
|
74
|
+
refresh()
|
|
75
|
+
|
|
76
|
+
# setcbreak inside the try so the finally always restores the terminal, even if it (or
|
|
77
|
+
# add_reader) raises — otherwise stdin could be left in cbreak with echo off after we exit.
|
|
78
|
+
try:
|
|
79
|
+
tty.setcbreak(fd)
|
|
80
|
+
loop.add_reader(fd, _read)
|
|
81
|
+
yield
|
|
82
|
+
finally:
|
|
83
|
+
loop.remove_reader(fd)
|
|
84
|
+
termios.tcsetattr(fd, termios.TCSADRAIN, old)
|
|
85
|
+
|
|
86
|
+
|
|
87
|
+
@contextlib.asynccontextmanager
|
|
88
|
+
async def live_view(
|
|
89
|
+
render: Callable[[], Group], on_key: Callable[[str], None] | None = None
|
|
90
|
+
):
|
|
91
|
+
"""Refresh `render()` every 0.25s until the block exits, then draw one final frame. When
|
|
92
|
+
`on_key` is given, left/right arrow presses are dispatched to it (and redraw at once)."""
|
|
93
|
+
with Live(render(), auto_refresh=False) as live:
|
|
94
|
+
|
|
95
|
+
async def loop() -> None:
|
|
96
|
+
while True:
|
|
97
|
+
await asyncio.sleep(0.25)
|
|
98
|
+
live.update(render(), refresh=True)
|
|
99
|
+
|
|
100
|
+
task = asyncio.create_task(loop())
|
|
101
|
+
with _key_reader(on_key, lambda: live.update(render(), refresh=True)):
|
|
102
|
+
try:
|
|
103
|
+
yield
|
|
104
|
+
finally:
|
|
105
|
+
task.cancel()
|
|
106
|
+
with contextlib.suppress(asyncio.CancelledError):
|
|
107
|
+
await task
|
|
108
|
+
live.update(render(), refresh=True)
|
|
@@ -1,13 +1,14 @@
|
|
|
1
1
|
"""The eval `--rich` dashboard: a config overview, a progress bar, and one line per rollout.
|
|
2
2
|
|
|
3
3
|
Reads each `Rollout.trace`/`phase` every tick — no extra plumbing. Each row carries a bracketed
|
|
4
|
-
phase marker that reads at a glance — `[
|
|
5
|
-
(magenta), `[scoring]` (blue), `[success]` (green), `[error]` (red) — padded so the
|
|
6
|
-
line up in a column down the left edge. The reward shows only once a rollout is fully
|
|
7
|
-
(phase DONE), so it never flips as scoring lands. A task's rollouts are grouped adjacently
|
|
8
|
-
by a left brace (╭│╰), so an episode (a task's n rollouts) reads as a unit. Every
|
|
9
|
-
rollout
|
|
10
|
-
|
|
4
|
+
phase marker that reads at a glance — `[pending]` (dim), `[setup]` (yellow), `[rollout]` (cyan),
|
|
5
|
+
`[finalize]` (magenta), `[scoring]` (blue), `[success]` (green), `[error]` (red) — padded so the
|
|
6
|
+
brackets line up in a column down the left edge. The reward shows only once a rollout is fully
|
|
7
|
+
scored (phase DONE), so it never flips as scoring lands. A task's rollouts are grouped adjacently
|
|
8
|
+
and joined by a left brace (╭│╰), so an episode (a task's n rollouts) reads as a unit. Every
|
|
9
|
+
rollout is on screen from the start: one still queued behind the concurrency cap reads `[pending]`
|
|
10
|
+
(its task is all that's known yet) until it begins, and finished ones keep their result. The
|
|
11
|
+
overview + progress sit on top, above a rule.
|
|
11
12
|
"""
|
|
12
13
|
|
|
13
14
|
import contextlib
|
|
@@ -44,6 +45,7 @@ _PAGE_SECONDS = 5.0 # rotate to the next page of rollouts this often when they
|
|
|
44
45
|
_LABEL_WIDTH = len("timeouts")
|
|
45
46
|
|
|
46
47
|
_STYLE = {
|
|
48
|
+
"pending": "dim",
|
|
47
49
|
"setup": "yellow",
|
|
48
50
|
"running": "cyan",
|
|
49
51
|
"finalize": "magenta",
|
|
@@ -52,6 +54,7 @@ _STYLE = {
|
|
|
52
54
|
"error": "red",
|
|
53
55
|
}
|
|
54
56
|
_MARK_LABEL = {
|
|
57
|
+
"pending": "pending",
|
|
55
58
|
"setup": "setup",
|
|
56
59
|
"running": "rollout",
|
|
57
60
|
"finalize": "finalize",
|
|
@@ -217,8 +220,8 @@ def Progress(
|
|
|
217
220
|
f"{len(done)}/{len(rollouts)} · {format_time(time.time() - start)} · "
|
|
218
221
|
f"reward {reward} · err {err}"
|
|
219
222
|
)
|
|
220
|
-
if page is not None: #
|
|
221
|
-
stats += f" (page {page[0]}/{page[1]})"
|
|
223
|
+
if page is not None: # overflowing — show which page, and that the arrows page
|
|
224
|
+
stats += f" (page {page[0]}/{page[1]} ◄ ►)"
|
|
222
225
|
row = Table.grid(expand=True, padding=(0, 1))
|
|
223
226
|
row.add_column(ratio=1) # bar stretches to fill the width left of the stats
|
|
224
227
|
row.add_column(justify="right", no_wrap=True)
|
|
@@ -357,17 +360,26 @@ def _tokens(trace: Trace) -> tuple[int, int, int | None, int | None, int]:
|
|
|
357
360
|
return prompt, completion, cached, reasoning, nbranches
|
|
358
361
|
|
|
359
362
|
|
|
363
|
+
def _started(rollout: Rollout) -> float:
|
|
364
|
+
# Sort key: when a rollout began (its setup start). A still-pending rollout has no trace
|
|
365
|
+
# yet, so it sorts last (+inf) — behind everything already in flight, in task order.
|
|
366
|
+
return (
|
|
367
|
+
rollout.trace.timing.setup.start if rollout.trace is not None else float("inf")
|
|
368
|
+
)
|
|
369
|
+
|
|
370
|
+
|
|
360
371
|
def _groups(rollouts: list[Rollout]) -> list[list[Rollout]]:
|
|
361
372
|
# The n rollouts of each task, grouped together (so they sit adjacent); groups ordered by
|
|
362
|
-
# earliest start, rollouts within a group by start.
|
|
373
|
+
# earliest start, rollouts within a group by start. Every rollout carries its `task` from
|
|
374
|
+
# construction, so ones still queued behind the concurrency cap (no trace yet) are grouped
|
|
375
|
+
# and shown too — as `[pending]`. Finished ones stay (never removed).
|
|
363
376
|
by_task: dict[int, list[Rollout]] = {}
|
|
364
377
|
for rollout in rollouts:
|
|
365
|
-
|
|
366
|
-
by_task.setdefault(rollout.trace.task.idx, []).append(rollout)
|
|
378
|
+
by_task.setdefault(rollout.task.idx, []).append(rollout)
|
|
367
379
|
groups = list(by_task.values())
|
|
368
380
|
for group in groups:
|
|
369
|
-
group.sort(key=
|
|
370
|
-
groups.sort(key=lambda g: g[0]
|
|
381
|
+
group.sort(key=_started)
|
|
382
|
+
groups.sort(key=lambda g: _started(g[0]))
|
|
371
383
|
return groups
|
|
372
384
|
|
|
373
385
|
|
|
@@ -385,6 +397,21 @@ def Rows(groups: list[list[Rollout]], now: float, runtime_type: str) -> Table:
|
|
|
385
397
|
for group in groups:
|
|
386
398
|
for i, rollout in enumerate(group):
|
|
387
399
|
t = rollout.trace
|
|
400
|
+
task = rollout.task
|
|
401
|
+
label = f"name={task.name[:32]}" if task.name else f"idx={task.idx}"
|
|
402
|
+
if (
|
|
403
|
+
t is None
|
|
404
|
+
): # queued behind the concurrency cap — only its task is known yet
|
|
405
|
+
rows.append(
|
|
406
|
+
(
|
|
407
|
+
_brace(i, len(group)),
|
|
408
|
+
"pending",
|
|
409
|
+
[f"task {label}", *[""] * 7],
|
|
410
|
+
"",
|
|
411
|
+
"",
|
|
412
|
+
)
|
|
413
|
+
)
|
|
414
|
+
continue
|
|
388
415
|
if rollout.phase == Phase.DONE: # fully scored — reward is final
|
|
389
416
|
state = "error" if t.has_error else "success"
|
|
390
417
|
result = t.error.type if t.has_error else f"reward={t.reward:.2f}"
|
|
@@ -398,7 +425,6 @@ def Rows(groups: list[list[Rollout]], now: float, runtime_type: str) -> Table:
|
|
|
398
425
|
stop = f"{stop} (truncated)".strip()
|
|
399
426
|
else:
|
|
400
427
|
state, result, stop = rollout.phase, "", ""
|
|
401
|
-
label = f"name={t.task.name[:32]}" if t.task.name else f"idx={t.task.idx}"
|
|
402
428
|
descriptor = (
|
|
403
429
|
rollout.runtime.descriptor if rollout.runtime is not None else None
|
|
404
430
|
)
|
|
@@ -469,13 +495,42 @@ def Rows(groups: list[list[Rollout]], now: float, runtime_type: str) -> Table:
|
|
|
469
495
|
return grid
|
|
470
496
|
|
|
471
497
|
|
|
498
|
+
class Pager:
|
|
499
|
+
"""Which page of overflowing rollout rows is on screen. Auto-advances on a timer until the
|
|
500
|
+
user takes over with the left/right arrows, after which it stays where they leave it. `count`
|
|
501
|
+
(the page count, set each render by `_paginate`) gates the arrows: they're inert while a single
|
|
502
|
+
page fits, so a stray press before rollouts overflow can't switch off auto-advance or offset the
|
|
503
|
+
starting page once paging begins. The chosen page is clamped to `count` (it can shrink on a
|
|
504
|
+
resize; it otherwise only grows, as rollouts are never removed)."""
|
|
505
|
+
|
|
506
|
+
def __init__(self) -> None:
|
|
507
|
+
self.page = 0
|
|
508
|
+
self.manual = False
|
|
509
|
+
self.count = 1
|
|
510
|
+
|
|
511
|
+
def on_key(self, key: str) -> None:
|
|
512
|
+
if key in ("left", "right") and self.count > 1:
|
|
513
|
+
self.manual = True
|
|
514
|
+
self.page += 1 if key == "right" else -1
|
|
515
|
+
|
|
516
|
+
def index(self, now: float) -> int:
|
|
517
|
+
# Track the auto page while it drives, so the first arrow continues from what's on screen
|
|
518
|
+
# rather than jumping back to page 1. Clamp in manual mode (count can shrink on resize).
|
|
519
|
+
if not self.manual:
|
|
520
|
+
self.page = int(now / _PAGE_SECONDS) % self.count
|
|
521
|
+
else:
|
|
522
|
+
self.page = max(0, min(self.page, self.count - 1))
|
|
523
|
+
return self.page
|
|
524
|
+
|
|
525
|
+
|
|
472
526
|
def _paginate(
|
|
473
|
-
groups: list[list[Rollout]], rows_per_page: int, now: float
|
|
527
|
+
groups: list[list[Rollout]], rows_per_page: int, pager: Pager, now: float
|
|
474
528
|
) -> tuple[list[list[Rollout]], int, int]:
|
|
475
529
|
"""Pack groups (a task's rollouts kept together) into pages of at most `rows_per_page` rows,
|
|
476
|
-
|
|
477
|
-
|
|
530
|
+
selecting the one `pager` points at. Returns (this page's groups, 0-based index, page count) —
|
|
531
|
+
a single page when everything already fits."""
|
|
478
532
|
if sum(len(g) for g in groups) <= rows_per_page:
|
|
533
|
+
pager.count = 1 # everything fits on one page — arrows stay inert
|
|
479
534
|
return groups, 0, 1
|
|
480
535
|
pages: list[list[list[Rollout]]] = []
|
|
481
536
|
current: list[list[Rollout]] = []
|
|
@@ -488,20 +543,24 @@ def _paginate(
|
|
|
488
543
|
used += len(group)
|
|
489
544
|
if current:
|
|
490
545
|
pages.append(current)
|
|
491
|
-
|
|
546
|
+
pager.count = len(pages)
|
|
547
|
+
index = pager.index(now)
|
|
492
548
|
return pages[index], index, len(pages)
|
|
493
549
|
|
|
494
550
|
|
|
495
|
-
def _render(
|
|
551
|
+
def _render(
|
|
552
|
+
rollouts: list[Rollout], config: EvalConfig, start: float, pager: Pager
|
|
553
|
+
) -> Group:
|
|
496
554
|
now = time.time()
|
|
497
555
|
warning = _warning(config)
|
|
498
556
|
# `{warning}\n\n{overview}` — the caution sits at the very top, blank line, then the overview.
|
|
499
557
|
header = Group(warning, Text(""), Overview(config)) if warning else Overview(config)
|
|
500
558
|
# Measure the fixed top (header + progress + rule) so the rollout rows fill the rest of the
|
|
501
|
-
# screen; page through them
|
|
559
|
+
# screen; page through them (timer, or the left/right arrows) when they'd overflow (rich would
|
|
560
|
+
# otherwise truncate).
|
|
502
561
|
top = Group(header, Progress(rollouts, start), Rule(style="dim"))
|
|
503
562
|
rows_per_page = max(1, _CONSOLE.size.height - len(_CONSOLE.render_lines(top)) - 1)
|
|
504
|
-
page_groups, index, count = _paginate(_groups(rollouts), rows_per_page, now)
|
|
563
|
+
page_groups, index, count = _paginate(_groups(rollouts), rows_per_page, pager, now)
|
|
505
564
|
progress = Progress(rollouts, start, page=(index + 1, count) if count > 1 else None)
|
|
506
565
|
return Group(
|
|
507
566
|
header,
|
|
@@ -513,6 +572,10 @@ def _render(rollouts: list[Rollout], config: EvalConfig, start: float) -> Group:
|
|
|
513
572
|
|
|
514
573
|
@contextlib.asynccontextmanager
|
|
515
574
|
async def dashboard(rollouts: list[Rollout], config: EvalConfig, start: float):
|
|
516
|
-
"""Refresh the live eval view until the `with` block exits, then a final frame.
|
|
517
|
-
|
|
575
|
+
"""Refresh the live eval view until the `with` block exits, then a final frame. Left/right
|
|
576
|
+
arrows page through rollout rows when they overflow the screen."""
|
|
577
|
+
pager = Pager()
|
|
578
|
+
async with live_view(
|
|
579
|
+
lambda: _render(rollouts, config, start, pager), on_key=pager.on_key
|
|
580
|
+
):
|
|
518
581
|
yield
|
|
@@ -51,9 +51,11 @@ logger = logging.getLogger(__name__)
|
|
|
51
51
|
|
|
52
52
|
|
|
53
53
|
class Phase(StrEnum):
|
|
54
|
-
"""A rollout's lifecycle phase (for display):
|
|
55
|
-
post-run finalize, per-rollout + group scoring,
|
|
54
|
+
"""A rollout's lifecycle phase (for display): queued behind the concurrency cap,
|
|
55
|
+
provisioning, the harness driving, post-run finalize, per-rollout + group scoring,
|
|
56
|
+
then fully scored."""
|
|
56
57
|
|
|
58
|
+
PENDING = "pending"
|
|
57
59
|
SETUP = "setup"
|
|
58
60
|
RUNNING = "running"
|
|
59
61
|
FINALIZE = "finalize"
|
|
@@ -93,9 +95,11 @@ class Rollout:
|
|
|
93
95
|
`Environment.serving` context — so a rollout always has them and no runner has to thread
|
|
94
96
|
them in."""
|
|
95
97
|
self.interception = interception
|
|
96
|
-
self.phase = Phase.
|
|
97
|
-
"""Lifecycle phase for display (see `Phase`);
|
|
98
|
-
|
|
98
|
+
self.phase = Phase.PENDING
|
|
99
|
+
"""Lifecycle phase for display (see `Phase`); starts PENDING (queued behind the
|
|
100
|
+
concurrency cap) so the --rich dashboard can list it before it begins, advances to
|
|
101
|
+
SETUP the moment `run()` starts, and is set to DONE by the Episode once group
|
|
102
|
+
scoring has run."""
|
|
99
103
|
self.runtime: Runtime | None = None
|
|
100
104
|
"""The runtime, set the moment `run()` creates it (so it's always tearable-down
|
|
101
105
|
even if setup crashes) and torn down in `run()`'s `finally`; the --rich dashboard
|
|
@@ -139,6 +143,7 @@ class Rollout:
|
|
|
139
143
|
`self.shared_urls` / `self.interception`)."""
|
|
140
144
|
trace: Trace = Trace(task=self.task, state=state_cls(type(self.taskset))())
|
|
141
145
|
self.trace = trace # expose for the --rich dashboard
|
|
146
|
+
self.phase = Phase.SETUP # leaving the queue: provisioning starts now
|
|
142
147
|
trace.timing.setup.start = time.time()
|
|
143
148
|
self.runtime = make_runtime(
|
|
144
149
|
self.runtime_config, name=trace.id
|
|
@@ -1,32 +0,0 @@
|
|
|
1
|
-
"""The shared dashboard engine: a rich `Live` view on a fixed refresh tick.
|
|
2
|
-
|
|
3
|
-
The eval and validate dashboards each build their own frame; `live_view` just drives whichever
|
|
4
|
-
`render` it's given — refreshing on a timer and drawing a final frame on exit.
|
|
5
|
-
"""
|
|
6
|
-
|
|
7
|
-
import asyncio
|
|
8
|
-
import contextlib
|
|
9
|
-
from collections.abc import Callable
|
|
10
|
-
|
|
11
|
-
from rich.console import Group
|
|
12
|
-
from rich.live import Live
|
|
13
|
-
|
|
14
|
-
|
|
15
|
-
@contextlib.asynccontextmanager
|
|
16
|
-
async def live_view(render: Callable[[], Group]):
|
|
17
|
-
"""Refresh `render()` every 0.25s until the block exits, then draw one final frame."""
|
|
18
|
-
with Live(render(), auto_refresh=False) as live:
|
|
19
|
-
|
|
20
|
-
async def loop() -> None:
|
|
21
|
-
while True:
|
|
22
|
-
await asyncio.sleep(0.25)
|
|
23
|
-
live.update(render(), refresh=True)
|
|
24
|
-
|
|
25
|
-
task = asyncio.create_task(loop())
|
|
26
|
-
try:
|
|
27
|
-
yield
|
|
28
|
-
finally:
|
|
29
|
-
task.cancel()
|
|
30
|
-
with contextlib.suppress(asyncio.CancelledError):
|
|
31
|
-
await task
|
|
32
|
-
live.update(render(), refresh=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
|
|
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.dev413 → verifiers-0.1.15.dev415}/tests/v1/fixtures/tool_response_image_v1.py
RENAMED
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|