verifiers 0.1.15.dev434__tar.gz → 0.1.15.dev436__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.dev434 → verifiers-0.1.15.dev436}/PKG-INFO +1 -1
- {verifiers-0.1.15.dev434 → verifiers-0.1.15.dev436}/verifiers/v1/cli/dashboard/eval.py +40 -8
- {verifiers-0.1.15.dev434 → verifiers-0.1.15.dev436}/verifiers/v1/cli/eval/main.py +4 -0
- {verifiers-0.1.15.dev434 → verifiers-0.1.15.dev436}/verifiers/v1/cli/eval/runner.py +18 -2
- {verifiers-0.1.15.dev434 → verifiers-0.1.15.dev436}/verifiers/v1/clients/eval.py +15 -2
- {verifiers-0.1.15.dev434 → verifiers-0.1.15.dev436}/verifiers/v1/configs/eval.py +4 -0
- verifiers-0.1.15.dev436/verifiers/v1/push.py +209 -0
- {verifiers-0.1.15.dev434 → verifiers-0.1.15.dev436}/.gitignore +0 -0
- {verifiers-0.1.15.dev434 → verifiers-0.1.15.dev436}/LICENSE +0 -0
- {verifiers-0.1.15.dev434 → verifiers-0.1.15.dev436}/README.md +0 -0
- {verifiers-0.1.15.dev434 → verifiers-0.1.15.dev436}/pyproject.toml +0 -0
- {verifiers-0.1.15.dev434 → verifiers-0.1.15.dev436}/tests/AGENTS.md +0 -0
- {verifiers-0.1.15.dev434 → verifiers-0.1.15.dev436}/tests/README.md +0 -0
- {verifiers-0.1.15.dev434 → verifiers-0.1.15.dev436}/tests/__init__.py +0 -0
- {verifiers-0.1.15.dev434 → verifiers-0.1.15.dev436}/tests/conftest.py +0 -0
- {verifiers-0.1.15.dev434 → verifiers-0.1.15.dev436}/tests/test_browser_env.py +0 -0
- {verifiers-0.1.15.dev434 → verifiers-0.1.15.dev436}/tests/test_build_script.py +0 -0
- {verifiers-0.1.15.dev434 → verifiers-0.1.15.dev436}/tests/test_cli_agent_env.py +0 -0
- {verifiers-0.1.15.dev434 → verifiers-0.1.15.dev436}/tests/test_client_auth_errors.py +0 -0
- {verifiers-0.1.15.dev434 → verifiers-0.1.15.dev436}/tests/test_client_config.py +0 -0
- {verifiers-0.1.15.dev434 → verifiers-0.1.15.dev436}/tests/test_client_multimodal_types.py +0 -0
- {verifiers-0.1.15.dev434 → verifiers-0.1.15.dev436}/tests/test_composable_env.py +0 -0
- {verifiers-0.1.15.dev434 → verifiers-0.1.15.dev436}/tests/test_context_token_metrics.py +0 -0
- {verifiers-0.1.15.dev434 → verifiers-0.1.15.dev436}/tests/test_decorator_ranks.py +0 -0
- {verifiers-0.1.15.dev434 → verifiers-0.1.15.dev436}/tests/test_endpoint_registry.py +0 -0
- {verifiers-0.1.15.dev434 → verifiers-0.1.15.dev436}/tests/test_env_group.py +0 -0
- {verifiers-0.1.15.dev434 → verifiers-0.1.15.dev436}/tests/test_env_server.py +0 -0
- {verifiers-0.1.15.dev434 → verifiers-0.1.15.dev436}/tests/test_environment.py +0 -0
- {verifiers-0.1.15.dev434 → verifiers-0.1.15.dev436}/tests/test_environment_extra.py +0 -0
- {verifiers-0.1.15.dev434 → verifiers-0.1.15.dev436}/tests/test_envs.py +0 -0
- {verifiers-0.1.15.dev434 → verifiers-0.1.15.dev436}/tests/test_error_chain.py +0 -0
- {verifiers-0.1.15.dev434 → verifiers-0.1.15.dev436}/tests/test_eval_display.py +0 -0
- {verifiers-0.1.15.dev434 → verifiers-0.1.15.dev436}/tests/test_eval_utils.py +0 -0
- {verifiers-0.1.15.dev434 → verifiers-0.1.15.dev436}/tests/test_gepa_cli.py +0 -0
- {verifiers-0.1.15.dev434 → verifiers-0.1.15.dev436}/tests/test_gepa_utils.py +0 -0
- {verifiers-0.1.15.dev434 → verifiers-0.1.15.dev436}/tests/test_gym_env.py +0 -0
- {verifiers-0.1.15.dev434 → verifiers-0.1.15.dev436}/tests/test_harbor_env_mcp.py +0 -0
- {verifiers-0.1.15.dev434 → verifiers-0.1.15.dev436}/tests/test_imports.py +0 -0
- {verifiers-0.1.15.dev434 → verifiers-0.1.15.dev436}/tests/test_init_script.py +0 -0
- {verifiers-0.1.15.dev434 → verifiers-0.1.15.dev436}/tests/test_install_utils.py +0 -0
- {verifiers-0.1.15.dev434 → verifiers-0.1.15.dev436}/tests/test_interception_utils.py +0 -0
- {verifiers-0.1.15.dev434 → verifiers-0.1.15.dev436}/tests/test_logging.py +0 -0
- {verifiers-0.1.15.dev434 → verifiers-0.1.15.dev436}/tests/test_math_rubric.py +0 -0
- {verifiers-0.1.15.dev434 → verifiers-0.1.15.dev436}/tests/test_maybe_think_parser.py +0 -0
- {verifiers-0.1.15.dev434 → verifiers-0.1.15.dev436}/tests/test_message_utils.py +0 -0
- {verifiers-0.1.15.dev434 → verifiers-0.1.15.dev436}/tests/test_message_utils_multimodal.py +0 -0
- {verifiers-0.1.15.dev434 → verifiers-0.1.15.dev436}/tests/test_multiturn_env.py +0 -0
- {verifiers-0.1.15.dev434 → verifiers-0.1.15.dev436}/tests/test_nemorl_client.py +0 -0
- {verifiers-0.1.15.dev434 → verifiers-0.1.15.dev436}/tests/test_openai_chat_completions_token_client.py +0 -0
- {verifiers-0.1.15.dev434 → verifiers-0.1.15.dev436}/tests/test_openai_responses_client.py +0 -0
- {verifiers-0.1.15.dev434 → verifiers-0.1.15.dev436}/tests/test_opencode_rlm_env.py +0 -0
- {verifiers-0.1.15.dev434 → verifiers-0.1.15.dev436}/tests/test_openenv_client.py +0 -0
- {verifiers-0.1.15.dev434 → verifiers-0.1.15.dev436}/tests/test_parser.py +0 -0
- {verifiers-0.1.15.dev434 → verifiers-0.1.15.dev436}/tests/test_path_utils.py +0 -0
- {verifiers-0.1.15.dev434 → verifiers-0.1.15.dev436}/tests/test_per_turn_timing.py +0 -0
- {verifiers-0.1.15.dev434 → verifiers-0.1.15.dev436}/tests/test_pricing_utils.py +0 -0
- {verifiers-0.1.15.dev434 → verifiers-0.1.15.dev436}/tests/test_prime_plugin.py +0 -0
- {verifiers-0.1.15.dev434 → verifiers-0.1.15.dev436}/tests/test_renderer_client.py +0 -0
- {verifiers-0.1.15.dev434 → verifiers-0.1.15.dev436}/tests/test_renderer_e2e.py +0 -0
- {verifiers-0.1.15.dev434 → verifiers-0.1.15.dev436}/tests/test_rlm_composable_env.py +0 -0
- {verifiers-0.1.15.dev434 → verifiers-0.1.15.dev436}/tests/test_rubric.py +0 -0
- {verifiers-0.1.15.dev434 → verifiers-0.1.15.dev436}/tests/test_rubric_group.py +0 -0
- {verifiers-0.1.15.dev434 → verifiers-0.1.15.dev436}/tests/test_sandbox_debug_env.py +0 -0
- {verifiers-0.1.15.dev434 → verifiers-0.1.15.dev436}/tests/test_sandbox_env.py +0 -0
- {verifiers-0.1.15.dev434 → verifiers-0.1.15.dev436}/tests/test_sandbox_mixin.py +0 -0
- {verifiers-0.1.15.dev434 → verifiers-0.1.15.dev436}/tests/test_save_utils.py +0 -0
- {verifiers-0.1.15.dev434 → verifiers-0.1.15.dev436}/tests/test_setup_script.py +0 -0
- {verifiers-0.1.15.dev434 → verifiers-0.1.15.dev436}/tests/test_singleturn_env.py +0 -0
- {verifiers-0.1.15.dev434 → verifiers-0.1.15.dev436}/tests/test_stateful_tool_env.py +0 -0
- {verifiers-0.1.15.dev434 → verifiers-0.1.15.dev436}/tests/test_think_parser.py +0 -0
- {verifiers-0.1.15.dev434 → verifiers-0.1.15.dev436}/tests/test_tool_env.py +0 -0
- {verifiers-0.1.15.dev434 → verifiers-0.1.15.dev436}/tests/test_tool_utils.py +0 -0
- {verifiers-0.1.15.dev434 → verifiers-0.1.15.dev436}/tests/test_trajectory_processing.py +0 -0
- {verifiers-0.1.15.dev434 → verifiers-0.1.15.dev436}/tests/test_tui_info_formatting.py +0 -0
- {verifiers-0.1.15.dev434 → verifiers-0.1.15.dev436}/tests/test_types.py +0 -0
- {verifiers-0.1.15.dev434 → verifiers-0.1.15.dev436}/tests/test_wordle_env.py +0 -0
- {verifiers-0.1.15.dev434 → verifiers-0.1.15.dev436}/tests/test_xml_parser.py +0 -0
- {verifiers-0.1.15.dev434 → verifiers-0.1.15.dev436}/tests/v1/conftest.py +0 -0
- {verifiers-0.1.15.dev434 → verifiers-0.1.15.dev436}/tests/v1/fixtures/counter_tool_v1.py +0 -0
- {verifiers-0.1.15.dev434 → verifiers-0.1.15.dev436}/tests/v1/fixtures/echo_agentic_v1.py +0 -0
- {verifiers-0.1.15.dev434 → verifiers-0.1.15.dev436}/tests/v1/fixtures/echo_multi_v0.py +0 -0
- {verifiers-0.1.15.dev434 → verifiers-0.1.15.dev436}/tests/v1/fixtures/echo_tool_v1.py +0 -0
- {verifiers-0.1.15.dev434 → verifiers-0.1.15.dev436}/tests/v1/fixtures/echo_user_sim_v1.py +0 -0
- {verifiers-0.1.15.dev434 → verifiers-0.1.15.dev436}/tests/v1/fixtures/echo_v0.py +0 -0
- {verifiers-0.1.15.dev434 → verifiers-0.1.15.dev436}/tests/v1/fixtures/echo_v1.py +0 -0
- {verifiers-0.1.15.dev434 → verifiers-0.1.15.dev436}/tests/v1/fixtures/pyproject.toml +0 -0
- {verifiers-0.1.15.dev434 → verifiers-0.1.15.dev436}/tests/v1/fixtures/tool_response_image_v1.py +0 -0
- {verifiers-0.1.15.dev434 → verifiers-0.1.15.dev436}/tests/v1/test_color_codeword_tasks.py +0 -0
- {verifiers-0.1.15.dev434 → verifiers-0.1.15.dev436}/tests/v1/test_configs.py +0 -0
- {verifiers-0.1.15.dev434 → verifiers-0.1.15.dev436}/tests/v1/test_e2e.py +0 -0
- {verifiers-0.1.15.dev434 → verifiers-0.1.15.dev436}/tests/v1/test_envs.py +0 -0
- {verifiers-0.1.15.dev434 → verifiers-0.1.15.dev436}/tests/v1/test_graph.py +0 -0
- {verifiers-0.1.15.dev434 → verifiers-0.1.15.dev436}/tests/v1/test_judges.py +0 -0
- {verifiers-0.1.15.dev434 → verifiers-0.1.15.dev436}/tests/v1/test_legacy.py +0 -0
- {verifiers-0.1.15.dev434 → verifiers-0.1.15.dev436}/tests/v1/test_scoring.py +0 -0
- {verifiers-0.1.15.dev434 → verifiers-0.1.15.dev436}/tests/v1/test_trace.py +0 -0
- {verifiers-0.1.15.dev434 → verifiers-0.1.15.dev436}/verifiers/AGENTS.md +0 -0
- {verifiers-0.1.15.dev434 → verifiers-0.1.15.dev436}/verifiers/__init__.py +0 -0
- {verifiers-0.1.15.dev434 → verifiers-0.1.15.dev436}/verifiers/cli/__init__.py +0 -0
- {verifiers-0.1.15.dev434 → verifiers-0.1.15.dev436}/verifiers/cli/commands/__init__.py +0 -0
- {verifiers-0.1.15.dev434 → verifiers-0.1.15.dev436}/verifiers/cli/commands/build.py +0 -0
- {verifiers-0.1.15.dev434 → verifiers-0.1.15.dev436}/verifiers/cli/commands/eval.py +0 -0
- {verifiers-0.1.15.dev434 → verifiers-0.1.15.dev436}/verifiers/cli/commands/gepa.py +0 -0
- {verifiers-0.1.15.dev434 → verifiers-0.1.15.dev436}/verifiers/cli/commands/init.py +0 -0
- {verifiers-0.1.15.dev434 → verifiers-0.1.15.dev436}/verifiers/cli/commands/install.py +0 -0
- {verifiers-0.1.15.dev434 → verifiers-0.1.15.dev436}/verifiers/cli/commands/setup.py +0 -0
- {verifiers-0.1.15.dev434 → verifiers-0.1.15.dev436}/verifiers/cli/plugins/__init__.py +0 -0
- {verifiers-0.1.15.dev434 → verifiers-0.1.15.dev436}/verifiers/cli/plugins/prime.py +0 -0
- {verifiers-0.1.15.dev434 → verifiers-0.1.15.dev436}/verifiers/cli/tui.py +0 -0
- {verifiers-0.1.15.dev434 → verifiers-0.1.15.dev436}/verifiers/clients/__init__.py +0 -0
- {verifiers-0.1.15.dev434 → verifiers-0.1.15.dev436}/verifiers/clients/anthropic_messages_client.py +0 -0
- {verifiers-0.1.15.dev434 → verifiers-0.1.15.dev436}/verifiers/clients/client.py +0 -0
- {verifiers-0.1.15.dev434 → verifiers-0.1.15.dev436}/verifiers/clients/nemorl_chat_completions_client.py +0 -0
- {verifiers-0.1.15.dev434 → verifiers-0.1.15.dev436}/verifiers/clients/openai_chat_completions_client.py +0 -0
- {verifiers-0.1.15.dev434 → verifiers-0.1.15.dev436}/verifiers/clients/openai_chat_completions_token_client.py +0 -0
- {verifiers-0.1.15.dev434 → verifiers-0.1.15.dev436}/verifiers/clients/openai_completions_client.py +0 -0
- {verifiers-0.1.15.dev434 → verifiers-0.1.15.dev436}/verifiers/clients/openai_responses_client.py +0 -0
- {verifiers-0.1.15.dev434 → verifiers-0.1.15.dev436}/verifiers/clients/renderer_client.py +0 -0
- {verifiers-0.1.15.dev434 → verifiers-0.1.15.dev436}/verifiers/decorators.py +0 -0
- {verifiers-0.1.15.dev434 → verifiers-0.1.15.dev436}/verifiers/envs/AGENTS.md +0 -0
- {verifiers-0.1.15.dev434 → verifiers-0.1.15.dev436}/verifiers/envs/__init__.py +0 -0
- {verifiers-0.1.15.dev434 → verifiers-0.1.15.dev436}/verifiers/envs/env_group.py +0 -0
- {verifiers-0.1.15.dev434 → verifiers-0.1.15.dev436}/verifiers/envs/environment.py +0 -0
- {verifiers-0.1.15.dev434 → verifiers-0.1.15.dev436}/verifiers/envs/experimental/README.md +0 -0
- {verifiers-0.1.15.dev434 → verifiers-0.1.15.dev436}/verifiers/envs/experimental/__init__.py +0 -0
- {verifiers-0.1.15.dev434 → verifiers-0.1.15.dev436}/verifiers/envs/experimental/cli_agent_env.py +0 -0
- {verifiers-0.1.15.dev434 → verifiers-0.1.15.dev436}/verifiers/envs/experimental/composable/README.md +0 -0
- {verifiers-0.1.15.dev434 → verifiers-0.1.15.dev436}/verifiers/envs/experimental/composable/__init__.py +0 -0
- {verifiers-0.1.15.dev434 → verifiers-0.1.15.dev436}/verifiers/envs/experimental/composable/_filter.py +0 -0
- {verifiers-0.1.15.dev434 → verifiers-0.1.15.dev436}/verifiers/envs/experimental/composable/composable_env.py +0 -0
- {verifiers-0.1.15.dev434 → verifiers-0.1.15.dev436}/verifiers/envs/experimental/composable/harness.py +0 -0
- {verifiers-0.1.15.dev434 → verifiers-0.1.15.dev436}/verifiers/envs/experimental/composable/harnesses/__init__.py +0 -0
- {verifiers-0.1.15.dev434 → verifiers-0.1.15.dev436}/verifiers/envs/experimental/composable/harnesses/mini_swe_agent.py +0 -0
- {verifiers-0.1.15.dev434 → verifiers-0.1.15.dev436}/verifiers/envs/experimental/composable/harnesses/opencode.py +0 -0
- {verifiers-0.1.15.dev434 → verifiers-0.1.15.dev436}/verifiers/envs/experimental/composable/harnesses/prompt.txt +0 -0
- {verifiers-0.1.15.dev434 → verifiers-0.1.15.dev436}/verifiers/envs/experimental/composable/harnesses/rlm.py +0 -0
- {verifiers-0.1.15.dev434 → verifiers-0.1.15.dev436}/verifiers/envs/experimental/composable/sandbox_debug_env.py +0 -0
- {verifiers-0.1.15.dev434 → verifiers-0.1.15.dev436}/verifiers/envs/experimental/composable/swe_debug_env.py +0 -0
- {verifiers-0.1.15.dev434 → verifiers-0.1.15.dev436}/verifiers/envs/experimental/composable/task.py +0 -0
- {verifiers-0.1.15.dev434 → verifiers-0.1.15.dev436}/verifiers/envs/experimental/composable/tasksets/__init__.py +0 -0
- {verifiers-0.1.15.dev434 → verifiers-0.1.15.dev436}/verifiers/envs/experimental/composable/tasksets/cp/__init__.py +0 -0
- {verifiers-0.1.15.dev434 → verifiers-0.1.15.dev436}/verifiers/envs/experimental/composable/tasksets/cp/cp_task.py +0 -0
- {verifiers-0.1.15.dev434 → verifiers-0.1.15.dev436}/verifiers/envs/experimental/composable/tasksets/cp/test_utils.py +0 -0
- {verifiers-0.1.15.dev434 → verifiers-0.1.15.dev436}/verifiers/envs/experimental/composable/tasksets/harbor/__init__.py +0 -0
- {verifiers-0.1.15.dev434 → verifiers-0.1.15.dev436}/verifiers/envs/experimental/composable/tasksets/harbor/cli_gym.py +0 -0
- {verifiers-0.1.15.dev434 → verifiers-0.1.15.dev436}/verifiers/envs/experimental/composable/tasksets/harbor/harbor.py +0 -0
- {verifiers-0.1.15.dev434 → verifiers-0.1.15.dev436}/verifiers/envs/experimental/composable/tasksets/harbor/terminal_lego.py +0 -0
- {verifiers-0.1.15.dev434 → verifiers-0.1.15.dev436}/verifiers/envs/experimental/composable/tasksets/math/__init__.py +0 -0
- {verifiers-0.1.15.dev434 → verifiers-0.1.15.dev436}/verifiers/envs/experimental/composable/tasksets/math/math_task.py +0 -0
- {verifiers-0.1.15.dev434 → verifiers-0.1.15.dev436}/verifiers/envs/experimental/composable/tasksets/search/README.md +0 -0
- {verifiers-0.1.15.dev434 → verifiers-0.1.15.dev436}/verifiers/envs/experimental/composable/tasksets/search/__init__.py +0 -0
- {verifiers-0.1.15.dev434 → verifiers-0.1.15.dev436}/verifiers/envs/experimental/composable/tasksets/search/openseeker/README.md +0 -0
- {verifiers-0.1.15.dev434 → verifiers-0.1.15.dev436}/verifiers/envs/experimental/composable/tasksets/search/openseeker/__init__.py +0 -0
- {verifiers-0.1.15.dev434 → verifiers-0.1.15.dev436}/verifiers/envs/experimental/composable/tasksets/search/openseeker/taskset.py +0 -0
- {verifiers-0.1.15.dev434 → verifiers-0.1.15.dev436}/verifiers/envs/experimental/composable/tasksets/search/quest/README.md +0 -0
- {verifiers-0.1.15.dev434 → verifiers-0.1.15.dev436}/verifiers/envs/experimental/composable/tasksets/search/quest/__init__.py +0 -0
- {verifiers-0.1.15.dev434 → verifiers-0.1.15.dev436}/verifiers/envs/experimental/composable/tasksets/search/quest/obj_task_eval/__init__.py +0 -0
- {verifiers-0.1.15.dev434 → verifiers-0.1.15.dev436}/verifiers/envs/experimental/composable/tasksets/search/quest/obj_task_eval/api_tools/__init__.py +0 -0
- {verifiers-0.1.15.dev434 → verifiers-0.1.15.dev436}/verifiers/envs/experimental/composable/tasksets/search/quest/obj_task_eval/api_tools/tool_pdf.py +0 -0
- {verifiers-0.1.15.dev434 → verifiers-0.1.15.dev436}/verifiers/envs/experimental/composable/tasksets/search/quest/obj_task_eval/eval_toolkit.py +0 -0
- {verifiers-0.1.15.dev434 → verifiers-0.1.15.dev436}/verifiers/envs/experimental/composable/tasksets/search/quest/obj_task_eval/evaluator.py +0 -0
- {verifiers-0.1.15.dev434 → verifiers-0.1.15.dev436}/verifiers/envs/experimental/composable/tasksets/search/quest/obj_task_eval/llm_client/__init__.py +0 -0
- {verifiers-0.1.15.dev434 → verifiers-0.1.15.dev436}/verifiers/envs/experimental/composable/tasksets/search/quest/obj_task_eval/llm_client/base_client.py +0 -0
- {verifiers-0.1.15.dev434 → verifiers-0.1.15.dev436}/verifiers/envs/experimental/composable/tasksets/search/quest/obj_task_eval/prompts/__init__.py +0 -0
- {verifiers-0.1.15.dev434 → verifiers-0.1.15.dev436}/verifiers/envs/experimental/composable/tasksets/search/quest/obj_task_eval/prompts/cache_prompts.py +0 -0
- {verifiers-0.1.15.dev434 → verifiers-0.1.15.dev436}/verifiers/envs/experimental/composable/tasksets/search/quest/obj_task_eval/utils/__init__.py +0 -0
- {verifiers-0.1.15.dev434 → verifiers-0.1.15.dev436}/verifiers/envs/experimental/composable/tasksets/search/quest/obj_task_eval/utils/cache_filesys.py +0 -0
- {verifiers-0.1.15.dev434 → verifiers-0.1.15.dev436}/verifiers/envs/experimental/composable/tasksets/search/quest/obj_task_eval/utils/load_eval_script.py +0 -0
- {verifiers-0.1.15.dev434 → verifiers-0.1.15.dev436}/verifiers/envs/experimental/composable/tasksets/search/quest/obj_task_eval/utils/misc.py +0 -0
- {verifiers-0.1.15.dev434 → verifiers-0.1.15.dev436}/verifiers/envs/experimental/composable/tasksets/search/quest/obj_task_eval/utils/tool_visit.py +0 -0
- {verifiers-0.1.15.dev434 → verifiers-0.1.15.dev436}/verifiers/envs/experimental/composable/tasksets/search/quest/obj_task_eval/utils/url_tools.py +0 -0
- {verifiers-0.1.15.dev434 → verifiers-0.1.15.dev436}/verifiers/envs/experimental/composable/tasksets/search/quest/obj_task_eval/verification_tree.py +0 -0
- {verifiers-0.1.15.dev434 → verifiers-0.1.15.dev436}/verifiers/envs/experimental/composable/tasksets/search/quest/open_ended.py +0 -0
- {verifiers-0.1.15.dev434 → verifiers-0.1.15.dev436}/verifiers/envs/experimental/composable/tasksets/search/quest/taskset.py +0 -0
- {verifiers-0.1.15.dev434 → verifiers-0.1.15.dev436}/verifiers/envs/experimental/composable/tasksets/search/redsearcher/README.md +0 -0
- {verifiers-0.1.15.dev434 → verifiers-0.1.15.dev436}/verifiers/envs/experimental/composable/tasksets/search/redsearcher/__init__.py +0 -0
- {verifiers-0.1.15.dev434 → verifiers-0.1.15.dev436}/verifiers/envs/experimental/composable/tasksets/search/redsearcher/taskset.py +0 -0
- {verifiers-0.1.15.dev434 → verifiers-0.1.15.dev436}/verifiers/envs/experimental/composable/tasksets/search/search_tasksets.py +0 -0
- {verifiers-0.1.15.dev434 → verifiers-0.1.15.dev436}/verifiers/envs/experimental/composable/tasksets/swe/README.md +0 -0
- {verifiers-0.1.15.dev434 → verifiers-0.1.15.dev436}/verifiers/envs/experimental/composable/tasksets/swe/__init__.py +0 -0
- {verifiers-0.1.15.dev434 → verifiers-0.1.15.dev436}/verifiers/envs/experimental/composable/tasksets/swe/multi_swe/__init__.py +0 -0
- {verifiers-0.1.15.dev434 → verifiers-0.1.15.dev436}/verifiers/envs/experimental/composable/tasksets/swe/multi_swe/extract_fix_patch.sh +0 -0
- {verifiers-0.1.15.dev434 → verifiers-0.1.15.dev436}/verifiers/envs/experimental/composable/tasksets/swe/multi_swe/taskset.py +0 -0
- {verifiers-0.1.15.dev434 → verifiers-0.1.15.dev436}/verifiers/envs/experimental/composable/tasksets/swe/openswe/__init__.py +0 -0
- {verifiers-0.1.15.dev434 → verifiers-0.1.15.dev436}/verifiers/envs/experimental/composable/tasksets/swe/openswe/taskset.py +0 -0
- {verifiers-0.1.15.dev434 → verifiers-0.1.15.dev436}/verifiers/envs/experimental/composable/tasksets/swe/r2e_gym/__init__.py +0 -0
- {verifiers-0.1.15.dev434 → verifiers-0.1.15.dev436}/verifiers/envs/experimental/composable/tasksets/swe/r2e_gym/log_parser.py +0 -0
- {verifiers-0.1.15.dev434 → verifiers-0.1.15.dev436}/verifiers/envs/experimental/composable/tasksets/swe/r2e_gym/taskset.py +0 -0
- {verifiers-0.1.15.dev434 → verifiers-0.1.15.dev436}/verifiers/envs/experimental/composable/tasksets/swe/scale_swe/__init__.py +0 -0
- {verifiers-0.1.15.dev434 → verifiers-0.1.15.dev436}/verifiers/envs/experimental/composable/tasksets/swe/scale_swe/taskset.py +0 -0
- {verifiers-0.1.15.dev434 → verifiers-0.1.15.dev436}/verifiers/envs/experimental/composable/tasksets/swe/shared/__init__.py +0 -0
- {verifiers-0.1.15.dev434 → verifiers-0.1.15.dev436}/verifiers/envs/experimental/composable/tasksets/swe/shared/test_patch.py +0 -0
- {verifiers-0.1.15.dev434 → verifiers-0.1.15.dev436}/verifiers/envs/experimental/composable/tasksets/swe/swe_bench/__init__.py +0 -0
- {verifiers-0.1.15.dev434 → verifiers-0.1.15.dev436}/verifiers/envs/experimental/composable/tasksets/swe/swe_bench/taskset.py +0 -0
- {verifiers-0.1.15.dev434 → verifiers-0.1.15.dev436}/verifiers/envs/experimental/composable/tasksets/swe/swe_lego/__init__.py +0 -0
- {verifiers-0.1.15.dev434 → verifiers-0.1.15.dev436}/verifiers/envs/experimental/composable/tasksets/swe/swe_lego/taskset.py +0 -0
- {verifiers-0.1.15.dev434 → verifiers-0.1.15.dev436}/verifiers/envs/experimental/composable/tasksets/swe/swe_rebench_v2/__init__.py +0 -0
- {verifiers-0.1.15.dev434 → verifiers-0.1.15.dev436}/verifiers/envs/experimental/composable/tasksets/swe/swe_rebench_v2/log_parsers.py +0 -0
- {verifiers-0.1.15.dev434 → verifiers-0.1.15.dev436}/verifiers/envs/experimental/composable/tasksets/swe/swe_rebench_v2/taskset.py +0 -0
- {verifiers-0.1.15.dev434 → verifiers-0.1.15.dev436}/verifiers/envs/experimental/composable/tasksets/swe/swe_smith/__init__.py +0 -0
- {verifiers-0.1.15.dev434 → verifiers-0.1.15.dev436}/verifiers/envs/experimental/composable/tasksets/swe/swe_smith/taskset.py +0 -0
- {verifiers-0.1.15.dev434 → verifiers-0.1.15.dev436}/verifiers/envs/experimental/composable/tasksets/swe/swe_tasksets.py +0 -0
- {verifiers-0.1.15.dev434 → verifiers-0.1.15.dev436}/verifiers/envs/experimental/gym_env.py +0 -0
- {verifiers-0.1.15.dev434 → verifiers-0.1.15.dev436}/verifiers/envs/experimental/harbor_env/__init__.py +0 -0
- {verifiers-0.1.15.dev434 → verifiers-0.1.15.dev436}/verifiers/envs/experimental/harbor_env/env.py +0 -0
- {verifiers-0.1.15.dev434 → verifiers-0.1.15.dev436}/verifiers/envs/experimental/harbor_env/mcp.py +0 -0
- {verifiers-0.1.15.dev434 → verifiers-0.1.15.dev436}/verifiers/envs/experimental/mcp_env.py +0 -0
- {verifiers-0.1.15.dev434 → verifiers-0.1.15.dev436}/verifiers/envs/experimental/opencode_env.py +0 -0
- {verifiers-0.1.15.dev434 → verifiers-0.1.15.dev436}/verifiers/envs/experimental/opencode_qa_env.py +0 -0
- {verifiers-0.1.15.dev434 → verifiers-0.1.15.dev436}/verifiers/envs/experimental/opencode_rlm_env.py +0 -0
- {verifiers-0.1.15.dev434 → verifiers-0.1.15.dev436}/verifiers/envs/experimental/sandbox_mixin.py +0 -0
- {verifiers-0.1.15.dev434 → verifiers-0.1.15.dev436}/verifiers/envs/experimental/utils/__init__.py +0 -0
- {verifiers-0.1.15.dev434 → verifiers-0.1.15.dev436}/verifiers/envs/experimental/utils/file_locks.py +0 -0
- {verifiers-0.1.15.dev434 → verifiers-0.1.15.dev436}/verifiers/envs/experimental/utils/git_checkout_cache.py +0 -0
- {verifiers-0.1.15.dev434 → verifiers-0.1.15.dev436}/verifiers/envs/integrations/README.md +0 -0
- {verifiers-0.1.15.dev434 → verifiers-0.1.15.dev436}/verifiers/envs/integrations/__init__.py +0 -0
- {verifiers-0.1.15.dev434 → verifiers-0.1.15.dev436}/verifiers/envs/integrations/browser_env/README.md +0 -0
- {verifiers-0.1.15.dev434 → verifiers-0.1.15.dev436}/verifiers/envs/integrations/browser_env/__init__.py +0 -0
- {verifiers-0.1.15.dev434 → verifiers-0.1.15.dev436}/verifiers/envs/integrations/browser_env/browser_env.py +0 -0
- {verifiers-0.1.15.dev434 → verifiers-0.1.15.dev436}/verifiers/envs/integrations/browser_env/modes/__init__.py +0 -0
- {verifiers-0.1.15.dev434 → verifiers-0.1.15.dev436}/verifiers/envs/integrations/browser_env/modes/base.py +0 -0
- {verifiers-0.1.15.dev434 → verifiers-0.1.15.dev436}/verifiers/envs/integrations/browser_env/modes/cua_mode.py +0 -0
- {verifiers-0.1.15.dev434 → verifiers-0.1.15.dev436}/verifiers/envs/integrations/browser_env/modes/dom_mode.py +0 -0
- {verifiers-0.1.15.dev434 → verifiers-0.1.15.dev436}/verifiers/envs/integrations/openenv_env.py +0 -0
- {verifiers-0.1.15.dev434 → verifiers-0.1.15.dev436}/verifiers/envs/integrations/reasoninggym_env.py +0 -0
- {verifiers-0.1.15.dev434 → verifiers-0.1.15.dev436}/verifiers/envs/integrations/textarena_env.py +0 -0
- {verifiers-0.1.15.dev434 → verifiers-0.1.15.dev436}/verifiers/envs/multiturn_env.py +0 -0
- {verifiers-0.1.15.dev434 → verifiers-0.1.15.dev436}/verifiers/envs/python_env.py +0 -0
- {verifiers-0.1.15.dev434 → verifiers-0.1.15.dev436}/verifiers/envs/sandbox_env.py +0 -0
- {verifiers-0.1.15.dev434 → verifiers-0.1.15.dev436}/verifiers/envs/singleturn_env.py +0 -0
- {verifiers-0.1.15.dev434 → verifiers-0.1.15.dev436}/verifiers/envs/stateful_tool_env.py +0 -0
- {verifiers-0.1.15.dev434 → verifiers-0.1.15.dev436}/verifiers/envs/tool_env.py +0 -0
- {verifiers-0.1.15.dev434 → verifiers-0.1.15.dev436}/verifiers/errors.py +0 -0
- {verifiers-0.1.15.dev434 → verifiers-0.1.15.dev436}/verifiers/gepa/__init__.py +0 -0
- {verifiers-0.1.15.dev434 → verifiers-0.1.15.dev436}/verifiers/gepa/adapter.py +0 -0
- {verifiers-0.1.15.dev434 → verifiers-0.1.15.dev436}/verifiers/gepa/config.py +0 -0
- {verifiers-0.1.15.dev434 → verifiers-0.1.15.dev436}/verifiers/gepa/display.py +0 -0
- {verifiers-0.1.15.dev434 → verifiers-0.1.15.dev436}/verifiers/gepa/gepa_utils.py +0 -0
- {verifiers-0.1.15.dev434 → verifiers-0.1.15.dev436}/verifiers/parsers/__init__.py +0 -0
- {verifiers-0.1.15.dev434 → verifiers-0.1.15.dev436}/verifiers/parsers/maybe_think_parser.py +0 -0
- {verifiers-0.1.15.dev434 → verifiers-0.1.15.dev436}/verifiers/parsers/parser.py +0 -0
- {verifiers-0.1.15.dev434 → verifiers-0.1.15.dev436}/verifiers/parsers/think_parser.py +0 -0
- {verifiers-0.1.15.dev434 → verifiers-0.1.15.dev436}/verifiers/parsers/xml_parser.py +0 -0
- {verifiers-0.1.15.dev434 → verifiers-0.1.15.dev436}/verifiers/rubrics/__init__.py +0 -0
- {verifiers-0.1.15.dev434 → verifiers-0.1.15.dev436}/verifiers/rubrics/experimental/hybrid_math_rubric.py +0 -0
- {verifiers-0.1.15.dev434 → verifiers-0.1.15.dev436}/verifiers/rubrics/judge_rubric.py +0 -0
- {verifiers-0.1.15.dev434 → verifiers-0.1.15.dev436}/verifiers/rubrics/math_rubric.py +0 -0
- {verifiers-0.1.15.dev434 → verifiers-0.1.15.dev436}/verifiers/rubrics/rubric.py +0 -0
- {verifiers-0.1.15.dev434 → verifiers-0.1.15.dev436}/verifiers/rubrics/rubric_group.py +0 -0
- {verifiers-0.1.15.dev434 → verifiers-0.1.15.dev436}/verifiers/scripts/__init__.py +0 -0
- {verifiers-0.1.15.dev434 → verifiers-0.1.15.dev436}/verifiers/scripts/build.py +0 -0
- {verifiers-0.1.15.dev434 → verifiers-0.1.15.dev436}/verifiers/scripts/eval.py +0 -0
- {verifiers-0.1.15.dev434 → verifiers-0.1.15.dev436}/verifiers/scripts/gepa.py +0 -0
- {verifiers-0.1.15.dev434 → verifiers-0.1.15.dev436}/verifiers/scripts/init.py +0 -0
- {verifiers-0.1.15.dev434 → verifiers-0.1.15.dev436}/verifiers/scripts/install.py +0 -0
- {verifiers-0.1.15.dev434 → verifiers-0.1.15.dev436}/verifiers/scripts/setup.py +0 -0
- {verifiers-0.1.15.dev434 → verifiers-0.1.15.dev436}/verifiers/scripts/tui.py +0 -0
- {verifiers-0.1.15.dev434 → verifiers-0.1.15.dev436}/verifiers/serve/__init__.py +0 -0
- {verifiers-0.1.15.dev434 → verifiers-0.1.15.dev436}/verifiers/serve/client/env_client.py +0 -0
- {verifiers-0.1.15.dev434 → verifiers-0.1.15.dev436}/verifiers/serve/client/zmq_env_client.py +0 -0
- {verifiers-0.1.15.dev434 → verifiers-0.1.15.dev436}/verifiers/serve/server/__init__.py +0 -0
- {verifiers-0.1.15.dev434 → verifiers-0.1.15.dev436}/verifiers/serve/server/env_router.py +0 -0
- {verifiers-0.1.15.dev434 → verifiers-0.1.15.dev436}/verifiers/serve/server/env_server.py +0 -0
- {verifiers-0.1.15.dev434 → verifiers-0.1.15.dev436}/verifiers/serve/server/env_worker.py +0 -0
- {verifiers-0.1.15.dev434 → verifiers-0.1.15.dev436}/verifiers/serve/server/zmq_env_server.py +0 -0
- {verifiers-0.1.15.dev434 → verifiers-0.1.15.dev436}/verifiers/serve/types.py +0 -0
- {verifiers-0.1.15.dev434 → verifiers-0.1.15.dev436}/verifiers/types.py +0 -0
- {verifiers-0.1.15.dev434 → verifiers-0.1.15.dev436}/verifiers/utils/__init__.py +0 -0
- {verifiers-0.1.15.dev434 → verifiers-0.1.15.dev436}/verifiers/utils/async_utils.py +0 -0
- {verifiers-0.1.15.dev434 → verifiers-0.1.15.dev436}/verifiers/utils/client_utils.py +0 -0
- {verifiers-0.1.15.dev434 → verifiers-0.1.15.dev436}/verifiers/utils/config_utils.py +0 -0
- {verifiers-0.1.15.dev434 → verifiers-0.1.15.dev436}/verifiers/utils/data_utils.py +0 -0
- {verifiers-0.1.15.dev434 → verifiers-0.1.15.dev436}/verifiers/utils/display_utils.py +0 -0
- {verifiers-0.1.15.dev434 → verifiers-0.1.15.dev436}/verifiers/utils/env_config_utils.py +0 -0
- {verifiers-0.1.15.dev434 → verifiers-0.1.15.dev436}/verifiers/utils/env_utils.py +0 -0
- {verifiers-0.1.15.dev434 → verifiers-0.1.15.dev436}/verifiers/utils/error_utils.py +0 -0
- {verifiers-0.1.15.dev434 → verifiers-0.1.15.dev436}/verifiers/utils/eval_display.py +0 -0
- {verifiers-0.1.15.dev434 → verifiers-0.1.15.dev436}/verifiers/utils/eval_utils.py +0 -0
- {verifiers-0.1.15.dev434 → verifiers-0.1.15.dev436}/verifiers/utils/heartbeat.py +0 -0
- {verifiers-0.1.15.dev434 → verifiers-0.1.15.dev436}/verifiers/utils/import_utils.py +0 -0
- {verifiers-0.1.15.dev434 → verifiers-0.1.15.dev436}/verifiers/utils/install_utils.py +0 -0
- {verifiers-0.1.15.dev434 → verifiers-0.1.15.dev436}/verifiers/utils/interception_utils.py +0 -0
- {verifiers-0.1.15.dev434 → verifiers-0.1.15.dev436}/verifiers/utils/logging_utils.py +0 -0
- {verifiers-0.1.15.dev434 → verifiers-0.1.15.dev436}/verifiers/utils/message_utils.py +0 -0
- {verifiers-0.1.15.dev434 → verifiers-0.1.15.dev436}/verifiers/utils/metric_utils.py +0 -0
- {verifiers-0.1.15.dev434 → verifiers-0.1.15.dev436}/verifiers/utils/path_utils.py +0 -0
- {verifiers-0.1.15.dev434 → verifiers-0.1.15.dev436}/verifiers/utils/pricing_utils.py +0 -0
- {verifiers-0.1.15.dev434 → verifiers-0.1.15.dev436}/verifiers/utils/process_utils.py +0 -0
- {verifiers-0.1.15.dev434 → verifiers-0.1.15.dev436}/verifiers/utils/response_utils.py +0 -0
- {verifiers-0.1.15.dev434 → verifiers-0.1.15.dev436}/verifiers/utils/save_utils.py +0 -0
- {verifiers-0.1.15.dev434 → verifiers-0.1.15.dev436}/verifiers/utils/serve_utils.py +0 -0
- {verifiers-0.1.15.dev434 → verifiers-0.1.15.dev436}/verifiers/utils/thread_utils.py +0 -0
- {verifiers-0.1.15.dev434 → verifiers-0.1.15.dev436}/verifiers/utils/threaded_sandbox_client.py +0 -0
- {verifiers-0.1.15.dev434 → verifiers-0.1.15.dev436}/verifiers/utils/tool_utils.py +0 -0
- {verifiers-0.1.15.dev434 → verifiers-0.1.15.dev436}/verifiers/utils/usage_utils.py +0 -0
- {verifiers-0.1.15.dev434 → verifiers-0.1.15.dev436}/verifiers/utils/version_utils.py +0 -0
- {verifiers-0.1.15.dev434 → verifiers-0.1.15.dev436}/verifiers/v1/ARCHITECTURE.md +0 -0
- {verifiers-0.1.15.dev434 → verifiers-0.1.15.dev436}/verifiers/v1/GUIDE.md +0 -0
- {verifiers-0.1.15.dev434 → verifiers-0.1.15.dev436}/verifiers/v1/README.md +0 -0
- {verifiers-0.1.15.dev434 → verifiers-0.1.15.dev436}/verifiers/v1/__init__.py +0 -0
- {verifiers-0.1.15.dev434 → verifiers-0.1.15.dev436}/verifiers/v1/cli/__init__.py +0 -0
- {verifiers-0.1.15.dev434 → verifiers-0.1.15.dev436}/verifiers/v1/cli/dashboard/__init__.py +0 -0
- {verifiers-0.1.15.dev434 → verifiers-0.1.15.dev436}/verifiers/v1/cli/dashboard/base.py +0 -0
- {verifiers-0.1.15.dev434 → verifiers-0.1.15.dev436}/verifiers/v1/cli/dashboard/replay.py +0 -0
- {verifiers-0.1.15.dev434 → verifiers-0.1.15.dev436}/verifiers/v1/cli/dashboard/validate.py +0 -0
- {verifiers-0.1.15.dev434 → verifiers-0.1.15.dev436}/verifiers/v1/cli/debug.py +0 -0
- {verifiers-0.1.15.dev434 → verifiers-0.1.15.dev436}/verifiers/v1/cli/eval/__init__.py +0 -0
- {verifiers-0.1.15.dev434 → verifiers-0.1.15.dev436}/verifiers/v1/cli/eval/resume.py +0 -0
- {verifiers-0.1.15.dev434 → verifiers-0.1.15.dev436}/verifiers/v1/cli/init.py +0 -0
- {verifiers-0.1.15.dev434 → verifiers-0.1.15.dev436}/verifiers/v1/cli/output.py +0 -0
- {verifiers-0.1.15.dev434 → verifiers-0.1.15.dev436}/verifiers/v1/cli/replay.py +0 -0
- {verifiers-0.1.15.dev434 → verifiers-0.1.15.dev436}/verifiers/v1/cli/resolve.py +0 -0
- {verifiers-0.1.15.dev434 → verifiers-0.1.15.dev436}/verifiers/v1/cli/serve.py +0 -0
- {verifiers-0.1.15.dev434 → verifiers-0.1.15.dev436}/verifiers/v1/cli/validate.py +0 -0
- {verifiers-0.1.15.dev434 → verifiers-0.1.15.dev436}/verifiers/v1/clients/__init__.py +0 -0
- {verifiers-0.1.15.dev434 → verifiers-0.1.15.dev436}/verifiers/v1/clients/client.py +0 -0
- {verifiers-0.1.15.dev434 → verifiers-0.1.15.dev436}/verifiers/v1/clients/config.py +0 -0
- {verifiers-0.1.15.dev434 → verifiers-0.1.15.dev436}/verifiers/v1/clients/train.py +0 -0
- {verifiers-0.1.15.dev434 → verifiers-0.1.15.dev436}/verifiers/v1/configs/__init__.py +0 -0
- {verifiers-0.1.15.dev434 → verifiers-0.1.15.dev436}/verifiers/v1/configs/debug.py +0 -0
- {verifiers-0.1.15.dev434 → verifiers-0.1.15.dev436}/verifiers/v1/configs/init.py +0 -0
- {verifiers-0.1.15.dev434 → verifiers-0.1.15.dev436}/verifiers/v1/configs/replay.py +0 -0
- {verifiers-0.1.15.dev434 → verifiers-0.1.15.dev436}/verifiers/v1/configs/serve.py +0 -0
- {verifiers-0.1.15.dev434 → verifiers-0.1.15.dev436}/verifiers/v1/configs/validate.py +0 -0
- {verifiers-0.1.15.dev434 → verifiers-0.1.15.dev436}/verifiers/v1/decorators.py +0 -0
- {verifiers-0.1.15.dev434 → verifiers-0.1.15.dev436}/verifiers/v1/dialects/__init__.py +0 -0
- {verifiers-0.1.15.dev434 → verifiers-0.1.15.dev436}/verifiers/v1/dialects/anthropic.py +0 -0
- {verifiers-0.1.15.dev434 → verifiers-0.1.15.dev436}/verifiers/v1/dialects/base.py +0 -0
- {verifiers-0.1.15.dev434 → verifiers-0.1.15.dev436}/verifiers/v1/dialects/chat.py +0 -0
- {verifiers-0.1.15.dev434 → verifiers-0.1.15.dev436}/verifiers/v1/dialects/responses.py +0 -0
- {verifiers-0.1.15.dev434 → verifiers-0.1.15.dev436}/verifiers/v1/env.py +0 -0
- {verifiers-0.1.15.dev434 → verifiers-0.1.15.dev436}/verifiers/v1/episode.py +0 -0
- {verifiers-0.1.15.dev434 → verifiers-0.1.15.dev436}/verifiers/v1/errors.py +0 -0
- {verifiers-0.1.15.dev434 → verifiers-0.1.15.dev436}/verifiers/v1/graph.py +0 -0
- {verifiers-0.1.15.dev434 → verifiers-0.1.15.dev436}/verifiers/v1/harness.py +0 -0
- {verifiers-0.1.15.dev434 → verifiers-0.1.15.dev436}/verifiers/v1/harnesses/__init__.py +0 -0
- {verifiers-0.1.15.dev434 → verifiers-0.1.15.dev436}/verifiers/v1/harnesses/codex/__init__.py +0 -0
- {verifiers-0.1.15.dev434 → verifiers-0.1.15.dev436}/verifiers/v1/harnesses/codex/harness.py +0 -0
- {verifiers-0.1.15.dev434 → verifiers-0.1.15.dev436}/verifiers/v1/harnesses/default/__init__.py +0 -0
- {verifiers-0.1.15.dev434 → verifiers-0.1.15.dev436}/verifiers/v1/harnesses/default/harness.py +0 -0
- {verifiers-0.1.15.dev434 → verifiers-0.1.15.dev436}/verifiers/v1/harnesses/default/program.py +0 -0
- {verifiers-0.1.15.dev434 → verifiers-0.1.15.dev436}/verifiers/v1/harnesses/kimi_code/__init__.py +0 -0
- {verifiers-0.1.15.dev434 → verifiers-0.1.15.dev436}/verifiers/v1/harnesses/kimi_code/harness.py +0 -0
- {verifiers-0.1.15.dev434 → verifiers-0.1.15.dev436}/verifiers/v1/harnesses/mini_swe_agent/__init__.py +0 -0
- {verifiers-0.1.15.dev434 → verifiers-0.1.15.dev436}/verifiers/v1/harnesses/mini_swe_agent/harness.py +0 -0
- {verifiers-0.1.15.dev434 → verifiers-0.1.15.dev436}/verifiers/v1/harnesses/mini_swe_agent/program.py +0 -0
- {verifiers-0.1.15.dev434 → verifiers-0.1.15.dev436}/verifiers/v1/harnesses/null/__init__.py +0 -0
- {verifiers-0.1.15.dev434 → verifiers-0.1.15.dev436}/verifiers/v1/harnesses/null/harness.py +0 -0
- {verifiers-0.1.15.dev434 → verifiers-0.1.15.dev436}/verifiers/v1/harnesses/null/program.py +0 -0
- {verifiers-0.1.15.dev434 → verifiers-0.1.15.dev436}/verifiers/v1/harnesses/rlm/__init__.py +0 -0
- {verifiers-0.1.15.dev434 → verifiers-0.1.15.dev436}/verifiers/v1/harnesses/rlm/harness.py +0 -0
- {verifiers-0.1.15.dev434 → verifiers-0.1.15.dev436}/verifiers/v1/harnesses/terminus_2/__init__.py +0 -0
- {verifiers-0.1.15.dev434 → verifiers-0.1.15.dev436}/verifiers/v1/harnesses/terminus_2/harness.py +0 -0
- {verifiers-0.1.15.dev434 → verifiers-0.1.15.dev436}/verifiers/v1/harnesses/terminus_2/program.py +0 -0
- {verifiers-0.1.15.dev434 → verifiers-0.1.15.dev436}/verifiers/v1/interception/__init__.py +0 -0
- {verifiers-0.1.15.dev434 → verifiers-0.1.15.dev436}/verifiers/v1/interception/pool.py +0 -0
- {verifiers-0.1.15.dev434 → verifiers-0.1.15.dev436}/verifiers/v1/interception/server.py +0 -0
- {verifiers-0.1.15.dev434 → verifiers-0.1.15.dev436}/verifiers/v1/judge.py +0 -0
- {verifiers-0.1.15.dev434 → verifiers-0.1.15.dev436}/verifiers/v1/judges/__init__.py +0 -0
- {verifiers-0.1.15.dev434 → verifiers-0.1.15.dev436}/verifiers/v1/judges/reference.py +0 -0
- {verifiers-0.1.15.dev434 → verifiers-0.1.15.dev436}/verifiers/v1/judges/reference.txt +0 -0
- {verifiers-0.1.15.dev434 → verifiers-0.1.15.dev436}/verifiers/v1/judges/rubric.py +0 -0
- {verifiers-0.1.15.dev434 → verifiers-0.1.15.dev436}/verifiers/v1/judges/rubric.txt +0 -0
- {verifiers-0.1.15.dev434 → verifiers-0.1.15.dev436}/verifiers/v1/legacy.py +0 -0
- {verifiers-0.1.15.dev434 → verifiers-0.1.15.dev436}/verifiers/v1/loaders.py +0 -0
- {verifiers-0.1.15.dev434 → verifiers-0.1.15.dev436}/verifiers/v1/mcp/__init__.py +0 -0
- {verifiers-0.1.15.dev434 → verifiers-0.1.15.dev436}/verifiers/v1/mcp/launch.py +0 -0
- {verifiers-0.1.15.dev434 → verifiers-0.1.15.dev436}/verifiers/v1/mcp/server.py +0 -0
- {verifiers-0.1.15.dev434 → verifiers-0.1.15.dev436}/verifiers/v1/mcp/toolset.py +0 -0
- {verifiers-0.1.15.dev434 → verifiers-0.1.15.dev436}/verifiers/v1/mcp/user.py +0 -0
- {verifiers-0.1.15.dev434 → verifiers-0.1.15.dev436}/verifiers/v1/retries.py +0 -0
- {verifiers-0.1.15.dev434 → verifiers-0.1.15.dev436}/verifiers/v1/rollout.py +0 -0
- {verifiers-0.1.15.dev434 → verifiers-0.1.15.dev436}/verifiers/v1/runtimes/__init__.py +0 -0
- {verifiers-0.1.15.dev434 → verifiers-0.1.15.dev436}/verifiers/v1/runtimes/base.py +0 -0
- {verifiers-0.1.15.dev434 → verifiers-0.1.15.dev436}/verifiers/v1/runtimes/docker.py +0 -0
- {verifiers-0.1.15.dev434 → verifiers-0.1.15.dev436}/verifiers/v1/runtimes/limiters.py +0 -0
- {verifiers-0.1.15.dev434 → verifiers-0.1.15.dev436}/verifiers/v1/runtimes/modal.py +0 -0
- {verifiers-0.1.15.dev434 → verifiers-0.1.15.dev436}/verifiers/v1/runtimes/prime.py +0 -0
- {verifiers-0.1.15.dev434 → verifiers-0.1.15.dev436}/verifiers/v1/runtimes/subprocess.py +0 -0
- {verifiers-0.1.15.dev434 → verifiers-0.1.15.dev436}/verifiers/v1/scoring.py +0 -0
- {verifiers-0.1.15.dev434 → verifiers-0.1.15.dev436}/verifiers/v1/serve/__init__.py +0 -0
- {verifiers-0.1.15.dev434 → verifiers-0.1.15.dev436}/verifiers/v1/serve/client.py +0 -0
- {verifiers-0.1.15.dev434 → verifiers-0.1.15.dev436}/verifiers/v1/serve/pool.py +0 -0
- {verifiers-0.1.15.dev434 → verifiers-0.1.15.dev436}/verifiers/v1/serve/server.py +0 -0
- {verifiers-0.1.15.dev434 → verifiers-0.1.15.dev436}/verifiers/v1/serve/types.py +0 -0
- {verifiers-0.1.15.dev434 → verifiers-0.1.15.dev436}/verifiers/v1/state.py +0 -0
- {verifiers-0.1.15.dev434 → verifiers-0.1.15.dev436}/verifiers/v1/task.py +0 -0
- {verifiers-0.1.15.dev434 → verifiers-0.1.15.dev436}/verifiers/v1/taskset.py +0 -0
- {verifiers-0.1.15.dev434 → verifiers-0.1.15.dev436}/verifiers/v1/tasksets/__init__.py +0 -0
- {verifiers-0.1.15.dev434 → verifiers-0.1.15.dev436}/verifiers/v1/tasksets/harbor/__init__.py +0 -0
- {verifiers-0.1.15.dev434 → verifiers-0.1.15.dev436}/verifiers/v1/tasksets/harbor/taskset.py +0 -0
- {verifiers-0.1.15.dev434 → verifiers-0.1.15.dev436}/verifiers/v1/tasksets/lean/__init__.py +0 -0
- {verifiers-0.1.15.dev434 → verifiers-0.1.15.dev436}/verifiers/v1/tasksets/lean/scoring.py +0 -0
- {verifiers-0.1.15.dev434 → verifiers-0.1.15.dev436}/verifiers/v1/tasksets/lean/taskset.py +0 -0
- {verifiers-0.1.15.dev434 → verifiers-0.1.15.dev436}/verifiers/v1/tasksets/textarena/__init__.py +0 -0
- {verifiers-0.1.15.dev434 → verifiers-0.1.15.dev436}/verifiers/v1/tasksets/textarena/taskset.py +0 -0
- {verifiers-0.1.15.dev434 → verifiers-0.1.15.dev436}/verifiers/v1/trace.py +0 -0
- {verifiers-0.1.15.dev434 → verifiers-0.1.15.dev436}/verifiers/v1/types.py +0 -0
- {verifiers-0.1.15.dev434 → verifiers-0.1.15.dev436}/verifiers/v1/utils/__init__.py +0 -0
- {verifiers-0.1.15.dev434 → verifiers-0.1.15.dev436}/verifiers/v1/utils/aio.py +0 -0
- {verifiers-0.1.15.dev434 → verifiers-0.1.15.dev436}/verifiers/v1/utils/format.py +0 -0
- {verifiers-0.1.15.dev434 → verifiers-0.1.15.dev436}/verifiers/v1/utils/install.py +0 -0
- {verifiers-0.1.15.dev434 → verifiers-0.1.15.dev436}/verifiers/v1/utils/logging.py +0 -0
- {verifiers-0.1.15.dev434 → verifiers-0.1.15.dev436}/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.dev436
|
|
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
|
|
@@ -13,6 +13,7 @@ overview + progress sit on top, above a rule.
|
|
|
13
13
|
|
|
14
14
|
import contextlib
|
|
15
15
|
import time
|
|
16
|
+
from typing import TYPE_CHECKING
|
|
16
17
|
|
|
17
18
|
from pydantic import BaseModel
|
|
18
19
|
from rich.console import Console, Group
|
|
@@ -36,6 +37,9 @@ from verifiers.v1.utils.format import (
|
|
|
36
37
|
)
|
|
37
38
|
from verifiers.utils.pricing_utils import format_cost_usd
|
|
38
39
|
|
|
40
|
+
if TYPE_CHECKING:
|
|
41
|
+
from verifiers.v1.push import PushState
|
|
42
|
+
|
|
39
43
|
# For sizing pages to the terminal: detects the real terminal height/width each access (the live
|
|
40
44
|
# view writes to the same terminal). Reused so we don't rebuild it every refresh tick.
|
|
41
45
|
_CONSOLE = Console()
|
|
@@ -208,6 +212,21 @@ def Overview(config: EvalConfig) -> Table:
|
|
|
208
212
|
return grid
|
|
209
213
|
|
|
210
214
|
|
|
215
|
+
def _push_footer(push: "PushState | None") -> Group | None:
|
|
216
|
+
"""The `--push` status line under the rollouts, shown once the run finishes and the upload
|
|
217
|
+
begins: dim `Pushing traces...` while it runs, then white `Traces pushed (<url>)` or red
|
|
218
|
+
`Trace push failed (<err>)`. `None` (no line) until the upload starts and when `--push` is off."""
|
|
219
|
+
if push is None or not push.started:
|
|
220
|
+
return None
|
|
221
|
+
if not push.done:
|
|
222
|
+
line = Text("Pushing traces...", style="dim")
|
|
223
|
+
elif push.url:
|
|
224
|
+
line = Text(f"Traces pushed ({push.url})", style="white", overflow="fold")
|
|
225
|
+
else:
|
|
226
|
+
line = Text(f"Trace push failed ({push.error})", style="red", overflow="fold")
|
|
227
|
+
return Group(Rule(style="dim"), line)
|
|
228
|
+
|
|
229
|
+
|
|
211
230
|
def Progress(
|
|
212
231
|
rollouts: list[Rollout],
|
|
213
232
|
start: float,
|
|
@@ -576,16 +595,22 @@ def _render(
|
|
|
576
595
|
start: float,
|
|
577
596
|
pager: Pager,
|
|
578
597
|
finished: list[Trace] | None = None,
|
|
598
|
+
push: "PushState | None" = None,
|
|
579
599
|
) -> Group:
|
|
580
600
|
now = time.time()
|
|
581
601
|
warning = _warning(config)
|
|
582
602
|
# `{warning}\n\n{overview}` — the caution sits at the very top, blank line, then the overview.
|
|
583
603
|
header = Group(warning, Text(""), Overview(config)) if warning else Overview(config)
|
|
584
|
-
#
|
|
585
|
-
#
|
|
586
|
-
#
|
|
604
|
+
# The --push status line appears under the rollouts once the upload starts (None during the run
|
|
605
|
+
# / when off). Measure the fixed top (header + progress + rule) and the footer so the rollout
|
|
606
|
+
# rows fill what's left; page through them (timer / arrows) when they'd overflow (else rich
|
|
607
|
+
# truncates).
|
|
608
|
+
footer = _push_footer(push)
|
|
587
609
|
top = Group(header, Progress(rollouts, start, finished=finished), Rule(style="dim"))
|
|
588
|
-
|
|
610
|
+
reserved = len(_CONSOLE.render_lines(top))
|
|
611
|
+
if footer is not None:
|
|
612
|
+
reserved += len(_CONSOLE.render_lines(footer))
|
|
613
|
+
rows_per_page = max(1, _CONSOLE.size.height - reserved - 1)
|
|
589
614
|
page_groups, index, count = _paginate(_groups(rollouts), rows_per_page, pager, now)
|
|
590
615
|
progress = Progress(
|
|
591
616
|
rollouts,
|
|
@@ -593,12 +618,15 @@ def _render(
|
|
|
593
618
|
page=(index + 1, count) if count > 1 else None,
|
|
594
619
|
finished=finished,
|
|
595
620
|
)
|
|
596
|
-
|
|
621
|
+
parts = [
|
|
597
622
|
header,
|
|
598
623
|
progress,
|
|
599
624
|
Rule(style="dim"),
|
|
600
625
|
Rows(page_groups, now, config.harness.runtime.type),
|
|
601
|
-
|
|
626
|
+
]
|
|
627
|
+
if footer is not None:
|
|
628
|
+
parts.append(footer)
|
|
629
|
+
return Group(*parts)
|
|
602
630
|
|
|
603
631
|
|
|
604
632
|
@contextlib.asynccontextmanager
|
|
@@ -607,13 +635,17 @@ async def dashboard(
|
|
|
607
635
|
config: EvalConfig,
|
|
608
636
|
start: float,
|
|
609
637
|
finished: list[Trace] | None = None,
|
|
638
|
+
push: "PushState | None" = None,
|
|
610
639
|
):
|
|
611
640
|
"""Refresh the live eval view until the `with` block exits, then a final frame. Left/right
|
|
612
641
|
arrows page through rollout rows when they overflow the screen. On resume, `finished` carries
|
|
613
642
|
the kept on-disk rollouts (reloaded as finished traces) so the counts and scores cover the
|
|
614
|
-
whole run, not just this session's re-run rollouts.
|
|
643
|
+
whole run, not just this session's re-run rollouts. `push` is the shared `--push` status the
|
|
644
|
+
view renders as a line under the rollouts once the upload starts (dim -> white URL / red error),
|
|
645
|
+
updated by the caller as the inline upload runs and lands."""
|
|
615
646
|
pager = Pager()
|
|
616
647
|
async with live_view(
|
|
617
|
-
lambda: _render(rollouts, config, start, pager, finished),
|
|
648
|
+
lambda: _render(rollouts, config, start, pager, finished, push),
|
|
649
|
+
on_key=pager.on_key,
|
|
618
650
|
):
|
|
619
651
|
yield
|
|
@@ -105,6 +105,10 @@ def main(argv: list[str] | None = None) -> None:
|
|
|
105
105
|
else: # in-process (default), with or without the live dashboard
|
|
106
106
|
env = vf.Environment(config)
|
|
107
107
|
traces = asyncio.run(run_eval(env, config))
|
|
108
|
+
if config.push and not rich:
|
|
109
|
+
from verifiers.v1.push import push_traces
|
|
110
|
+
|
|
111
|
+
push_traces(traces, config)
|
|
108
112
|
if not rich: # --rich is the whole output; otherwise dump each trace as JSON
|
|
109
113
|
for trace in traces:
|
|
110
114
|
print(trace.model_dump_json(indent=2, exclude_none=True))
|
|
@@ -89,8 +89,17 @@ async def run_eval(env: Environment, config: EvalConfig) -> list[Trace]:
|
|
|
89
89
|
for task in tasks
|
|
90
90
|
]
|
|
91
91
|
rollouts = [rollout for episode in episodes for rollout in episode.rollouts]
|
|
92
|
+
# --push in the live dashboard: share a status the dashboard renders as a line under the
|
|
93
|
+
# rollouts once the run finishes and the upload begins (dim -> green URL / red error), and
|
|
94
|
+
# do the upload inline below so it resolves on screen. Only the rich path has a dashboard;
|
|
95
|
+
# every other path uploads (+ logs the URL) from `main`.
|
|
96
|
+
push_state = None
|
|
97
|
+
if config.push and config.rich:
|
|
98
|
+
from verifiers.v1.push import PushState
|
|
99
|
+
|
|
100
|
+
push_state = PushState()
|
|
92
101
|
display = (
|
|
93
|
-
dashboard(rollouts, config, start, finished=finished)
|
|
102
|
+
dashboard(rollouts, config, start, finished=finished, push=push_state)
|
|
94
103
|
if config.rich
|
|
95
104
|
else contextlib.nullcontext()
|
|
96
105
|
)
|
|
@@ -98,7 +107,14 @@ async def run_eval(env: Environment, config: EvalConfig) -> list[Trace]:
|
|
|
98
107
|
results = await asyncio.gather(
|
|
99
108
|
*(episode.run(semaphore, on_complete) for episode in episodes)
|
|
100
109
|
)
|
|
101
|
-
|
|
110
|
+
traces = [trace for episode_traces in results for trace in episode_traces]
|
|
111
|
+
if (
|
|
112
|
+
push_state is not None
|
|
113
|
+
): # upload off the event loop so the view keeps refreshing
|
|
114
|
+
from verifiers.v1.push import push_traces
|
|
115
|
+
|
|
116
|
+
push_state.started = True
|
|
117
|
+
await asyncio.to_thread(push_traces, traces, config, push_state)
|
|
102
118
|
await client.close()
|
|
103
119
|
return traces
|
|
104
120
|
|
|
@@ -16,6 +16,7 @@ from collections.abc import Mapping
|
|
|
16
16
|
import re
|
|
17
17
|
|
|
18
18
|
import httpx
|
|
19
|
+
from pydantic import ValidationError
|
|
19
20
|
from pydantic_core import from_json, to_json
|
|
20
21
|
|
|
21
22
|
from verifiers.v1.clients.client import SESSION_ID_HEADER, Client, RelayReply
|
|
@@ -95,8 +96,18 @@ class EvalClient(Client):
|
|
|
95
96
|
dialect.apply_overrides(body, model, sampling_args),
|
|
96
97
|
self._headers(dialect, headers, session_id),
|
|
97
98
|
)
|
|
98
|
-
|
|
99
|
-
|
|
99
|
+
# A corrupted response (e.g. an HTML error page or a truncated body on a
|
|
100
|
+
# flaky tunnel) surfaces as a JSON parse failure or a schema validation
|
|
101
|
+
# failure — map these to a retryable 502 so the harness SDK retries the
|
|
102
|
+
# call instead of crashing the whole rollout on one bad response.
|
|
103
|
+
try:
|
|
104
|
+
raw = from_json(resp.content)
|
|
105
|
+
response = dialect.parse_response(dialect.validate_response(raw))
|
|
106
|
+
except (ValueError, ValidationError) as e:
|
|
107
|
+
raise model_error(
|
|
108
|
+
f"malformed upstream response: {type(e).__name__}: {e}",
|
|
109
|
+
status_code=502,
|
|
110
|
+
) from e
|
|
100
111
|
response.raw = raw # the program gets the provider's bytes back 1:1
|
|
101
112
|
return response
|
|
102
113
|
|
|
@@ -145,6 +156,8 @@ class EvalClient(Client):
|
|
|
145
156
|
raise model_error(str(e), status_code=504) from e
|
|
146
157
|
except httpx.HTTPError as e:
|
|
147
158
|
raise model_error(str(e), status_code=503) from e
|
|
159
|
+
except ConnectionResetError as e:
|
|
160
|
+
raise model_error(str(e), status_code=503) from e
|
|
148
161
|
if not stream:
|
|
149
162
|
try:
|
|
150
163
|
response.raise_for_status()
|
|
@@ -54,6 +54,10 @@ class EvalConfig(EnvServerConfig):
|
|
|
54
54
|
server: bool = False
|
|
55
55
|
"""Drive rollouts through the env-server worker pool (sized by `--pool.*`) instead of
|
|
56
56
|
in-process — the path prime-rl trains through. Incompatible with `--rich`."""
|
|
57
|
+
push: bool = True
|
|
58
|
+
"""Upload the finished run to the Prime Intellect platform (the private Evaluations
|
|
59
|
+
tab) at the end of the eval. On by default; disable with `--no-push`. Needs
|
|
60
|
+
`$PRIME_API_KEY` or `prime login`."""
|
|
57
61
|
output_dir: Path | None = Field(
|
|
58
62
|
None, validation_alias=AliasChoices("output_dir", "o")
|
|
59
63
|
)
|
|
@@ -0,0 +1,209 @@
|
|
|
1
|
+
"""Push a finished eval run to the Prime Intellect platform (`uv run eval`, `--no-push` to skip).
|
|
2
|
+
|
|
3
|
+
On by default. Converts each in-memory v1 `Trace` to the platform's (v0) eval-sample schema
|
|
4
|
+
(`trace_to_sample`) and uploads the run over the `/evaluations/` API (create -> push samples ->
|
|
5
|
+
finalize) — the same contract
|
|
6
|
+
`prime eval push` uploads a saved run through, done inline at the end of a run rather than
|
|
7
|
+
later from disk. Auth + base URL come from `$PRIME_API_KEY` / `~/.prime/config.json`
|
|
8
|
+
(written by `prime login`), like the rest of the CLI.
|
|
9
|
+
"""
|
|
10
|
+
|
|
11
|
+
import logging
|
|
12
|
+
import os
|
|
13
|
+
from dataclasses import dataclass
|
|
14
|
+
from typing import Any
|
|
15
|
+
|
|
16
|
+
import httpx
|
|
17
|
+
|
|
18
|
+
from verifiers.utils.client_utils import load_prime_config
|
|
19
|
+
from verifiers.v1.configs.eval import EvalConfig
|
|
20
|
+
from verifiers.v1.trace import Trace
|
|
21
|
+
|
|
22
|
+
logger = logging.getLogger(__name__)
|
|
23
|
+
|
|
24
|
+
DEFAULT_API_URL = "https://api.primeintellect.ai"
|
|
25
|
+
DEFAULT_FRONTEND_URL = "https://app.primeintellect.ai"
|
|
26
|
+
|
|
27
|
+
|
|
28
|
+
@dataclass
|
|
29
|
+
class PushState:
|
|
30
|
+
"""Live status of the push, shared with the v1 `--rich` dashboard so it can show a status line
|
|
31
|
+
under the rollouts once the run finishes and the upload begins: dim while uploading, then the
|
|
32
|
+
viewer URL (green) or the error (red). `started` flips true when the upload begins (the caller
|
|
33
|
+
sets it), `done` when it returns; `url` is set on success and `error` on a skip/failure. No line
|
|
34
|
+
is shown until `started`. Populated by `push_traces` (pass the state in)."""
|
|
35
|
+
|
|
36
|
+
started: bool = False
|
|
37
|
+
done: bool = False
|
|
38
|
+
url: str | None = None
|
|
39
|
+
error: str | None = None
|
|
40
|
+
|
|
41
|
+
|
|
42
|
+
def trace_to_sample(trace: Trace, rollout_number: int = 1) -> dict[str, Any]:
|
|
43
|
+
"""One rollout -> the platform's sample dict (the "old" v0 eval-sample format).
|
|
44
|
+
|
|
45
|
+
The conversation is the unit — no prompt/completion split (meaningless mid-branch):
|
|
46
|
+
`completion` is the final branch's messages and `trajectory` carries one message list per
|
|
47
|
+
branch. `rollout_number` is this rollout's 1-based index within its task's group (callers that
|
|
48
|
+
don't group rollouts can leave it at the default)."""
|
|
49
|
+
|
|
50
|
+
def dump(messages):
|
|
51
|
+
return [m.model_dump(mode="json", exclude_none=True) for m in messages]
|
|
52
|
+
|
|
53
|
+
task = trace.task.model_dump(mode="json", exclude_none=True)
|
|
54
|
+
branches = trace.branches
|
|
55
|
+
sample = {
|
|
56
|
+
"sample_id": trace.id,
|
|
57
|
+
"example_id": trace.task.idx,
|
|
58
|
+
"rollout_number": rollout_number,
|
|
59
|
+
"task": task,
|
|
60
|
+
"prompt": [],
|
|
61
|
+
"completion": dump(branches[-1].messages) if branches else [],
|
|
62
|
+
"answer": task.get("answer"),
|
|
63
|
+
"reward": trace.reward,
|
|
64
|
+
"timing": trace.timing.model_dump(mode="json", exclude_none=True),
|
|
65
|
+
"is_completed": trace.is_completed,
|
|
66
|
+
"is_truncated": trace.is_truncated,
|
|
67
|
+
"metrics": trace.metrics,
|
|
68
|
+
"error": trace.error.model_dump(mode="json", exclude_none=True)
|
|
69
|
+
if trace.error
|
|
70
|
+
else None,
|
|
71
|
+
"stop_condition": trace.stop_condition,
|
|
72
|
+
"trajectory": [
|
|
73
|
+
{
|
|
74
|
+
"messages": dump(branch.messages),
|
|
75
|
+
"num_input_tokens": branch.num_input_tokens,
|
|
76
|
+
"num_output_tokens": branch.num_output_tokens,
|
|
77
|
+
}
|
|
78
|
+
for branch in branches
|
|
79
|
+
],
|
|
80
|
+
"token_usage": trace.usage.model_dump(mode="json", exclude_none=True)
|
|
81
|
+
if trace.usage
|
|
82
|
+
else None,
|
|
83
|
+
"info": dict(trace.info) or None,
|
|
84
|
+
}
|
|
85
|
+
# Flatten each sub-reward onto the sample as a top-level key, the way v0's `state_to_output`
|
|
86
|
+
# does. Env metrics stay in the nested `metrics` field.
|
|
87
|
+
for name, value in trace.rewards.items():
|
|
88
|
+
sample.setdefault(name, value)
|
|
89
|
+
return sample
|
|
90
|
+
|
|
91
|
+
|
|
92
|
+
def _creds() -> tuple[str | None, str, str, str | None]:
|
|
93
|
+
"""(api_key, api_base, frontend_url, team_id) from env vars / `~/.prime/config.json`."""
|
|
94
|
+
cfg = load_prime_config()
|
|
95
|
+
api_key = os.getenv("PRIME_API_KEY") or cfg.get("api_key")
|
|
96
|
+
base = (
|
|
97
|
+
os.getenv("PRIME_API_BASE_URL")
|
|
98
|
+
or os.getenv("PRIME_BASE_URL")
|
|
99
|
+
or cfg.get("base_url")
|
|
100
|
+
or DEFAULT_API_URL
|
|
101
|
+
)
|
|
102
|
+
base = base.rstrip("/").removesuffix("/api/v1")
|
|
103
|
+
frontend = (
|
|
104
|
+
os.getenv("PRIME_FRONTEND_URL")
|
|
105
|
+
or cfg.get("frontend_url")
|
|
106
|
+
or DEFAULT_FRONTEND_URL
|
|
107
|
+
)
|
|
108
|
+
team_id = os.getenv("PRIME_TEAM_ID") or cfg.get("team_id")
|
|
109
|
+
return api_key, base, frontend, team_id
|
|
110
|
+
|
|
111
|
+
|
|
112
|
+
def push_traces(
|
|
113
|
+
traces: list[Trace], config: EvalConfig, state: "PushState | None" = None
|
|
114
|
+
) -> str | None:
|
|
115
|
+
"""Upload a finished run to the platform; return the viewer URL (None if skipped/failed).
|
|
116
|
+
|
|
117
|
+
Resolves the env (get-or-create) by name so a local run uploads without a prior
|
|
118
|
+
`prime env push`, then create evaluation -> push samples -> finalize. When `state` is given
|
|
119
|
+
(the v1 `--rich` path), record the outcome on it (`url` on success, `error` on skip/failure,
|
|
120
|
+
`done` when finished) so the dashboard's status line resolves."""
|
|
121
|
+
|
|
122
|
+
def finish(url: str | None = None, error: str | None = None) -> str | None:
|
|
123
|
+
if state is not None:
|
|
124
|
+
state.url = url
|
|
125
|
+
state.error = error
|
|
126
|
+
state.done = True
|
|
127
|
+
return url
|
|
128
|
+
|
|
129
|
+
api_key, base, frontend, team_id = _creds()
|
|
130
|
+
if not api_key:
|
|
131
|
+
logger.warning(
|
|
132
|
+
"--push: no PRIME_API_KEY (set it or run `prime login`); skipping upload"
|
|
133
|
+
)
|
|
134
|
+
return finish(error="no PRIME_API_KEY (run `prime login`)")
|
|
135
|
+
|
|
136
|
+
def compute_metrics() -> dict[str, Any]:
|
|
137
|
+
"""Run-level aggregates as v0's `GenerateMetadata`: `avg_reward` (mean over all traces),
|
|
138
|
+
`avg_metrics` (each sub-reward and env-metric averaged over the traces that recorded it),
|
|
139
|
+
and `avg_error` (errored fraction) — what the overview renders."""
|
|
140
|
+
sums: dict[str, float] = {}
|
|
141
|
+
counts: dict[str, int] = {}
|
|
142
|
+
for trace in traces:
|
|
143
|
+
for name, value in {**trace.rewards, **trace.metrics}.items():
|
|
144
|
+
sums[name] = sums.get(name, 0.0) + value
|
|
145
|
+
counts[name] = counts.get(name, 0) + 1
|
|
146
|
+
n = len(traces)
|
|
147
|
+
return {
|
|
148
|
+
"avg_reward": sum(t.reward for t in traces) / n if n else 0.0,
|
|
149
|
+
"avg_metrics": {name: sums[name] / counts[name] for name in sums},
|
|
150
|
+
"avg_error": sum(t.has_error for t in traces) / n if n else 0.0,
|
|
151
|
+
}
|
|
152
|
+
|
|
153
|
+
env_name = config.taskset.id or config.id
|
|
154
|
+
metrics = compute_metrics()
|
|
155
|
+
counts: dict[int, int] = {}
|
|
156
|
+
samples = []
|
|
157
|
+
for trace in traces:
|
|
158
|
+
counts[trace.task.idx] = counts.get(trace.task.idx, 0) + 1
|
|
159
|
+
samples.append(trace_to_sample(trace, counts[trace.task.idx]))
|
|
160
|
+
|
|
161
|
+
metadata = {
|
|
162
|
+
"framework": "verifiers",
|
|
163
|
+
"run_id": config.uuid,
|
|
164
|
+
"model": config.model,
|
|
165
|
+
"num_examples": len(counts),
|
|
166
|
+
"rollouts_per_example": config.num_rollouts,
|
|
167
|
+
**metrics,
|
|
168
|
+
}
|
|
169
|
+
|
|
170
|
+
team = {"team_id": team_id} if team_id else {}
|
|
171
|
+
api = f"{base}/api/v1"
|
|
172
|
+
headers = {"Authorization": f"Bearer {api_key}", "Content-Type": "application/json"}
|
|
173
|
+
# The run is already done and its results saved; a network blip or platform error here must
|
|
174
|
+
# not crash the run (or, on the non-rich path, swallow the final per-trace output that prints
|
|
175
|
+
# after this) — log and skip the upload instead.
|
|
176
|
+
try:
|
|
177
|
+
with httpx.Client(headers=headers, timeout=300.0) as client:
|
|
178
|
+
|
|
179
|
+
def post(path: str, body: dict) -> dict:
|
|
180
|
+
resp = client.post(f"{api}{path}", json=body)
|
|
181
|
+
resp.raise_for_status()
|
|
182
|
+
return resp.json()
|
|
183
|
+
|
|
184
|
+
env_id = post("/environmentshub/resolve", {"name": env_name, **team})[
|
|
185
|
+
"data"
|
|
186
|
+
]["id"]
|
|
187
|
+
eval_id = post(
|
|
188
|
+
"/evaluations/",
|
|
189
|
+
{
|
|
190
|
+
"name": f"{env_name}--{config.model}--{config.uuid[:8]}",
|
|
191
|
+
"environments": [{"id": env_id}],
|
|
192
|
+
"model_name": config.model,
|
|
193
|
+
"dataset": env_name,
|
|
194
|
+
"framework": "verifiers",
|
|
195
|
+
"metadata": metadata,
|
|
196
|
+
"metrics": metrics,
|
|
197
|
+
"tags": [],
|
|
198
|
+
**team,
|
|
199
|
+
},
|
|
200
|
+
)["evaluation_id"]
|
|
201
|
+
post(f"/evaluations/{eval_id}/samples", {"samples": samples})
|
|
202
|
+
post(f"/evaluations/{eval_id}/finalize", {"metrics": metrics})
|
|
203
|
+
except Exception as e:
|
|
204
|
+
logger.warning("--push: upload failed (%s: %s); skipping", type(e).__name__, e)
|
|
205
|
+
return finish(error=f"{type(e).__name__}: {e}")
|
|
206
|
+
|
|
207
|
+
url = f"{frontend}/dashboard/evaluations/{eval_id}"
|
|
208
|
+
logger.info("--push: uploaded %d samples -> %s", len(samples), url)
|
|
209
|
+
return finish(url=url)
|
|
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.dev434 → verifiers-0.1.15.dev436}/tests/v1/fixtures/tool_response_image_v1.py
RENAMED
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|