verifiers 0.2.2.dev53__tar.gz → 0.2.2.dev55__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.2.2.dev53 → verifiers-0.2.2.dev55}/PKG-INFO +1 -1
- {verifiers-0.2.2.dev53 → verifiers-0.2.2.dev55}/tests/v1/test_e2e.py +1 -1
- {verifiers-0.2.2.dev53 → verifiers-0.2.2.dev55}/verifiers/v1/__init__.py +2 -4
- {verifiers-0.2.2.dev53 → verifiers-0.2.2.dev55}/verifiers/v1/artifacts.py +2 -4
- {verifiers-0.2.2.dev53 → verifiers-0.2.2.dev55}/verifiers/v1/cli/dashboard/eval.py +29 -42
- {verifiers-0.2.2.dev53 → verifiers-0.2.2.dev55}/verifiers/v1/cli/debug.py +6 -6
- {verifiers-0.2.2.dev53 → verifiers-0.2.2.dev55}/verifiers/v1/cli/replay.py +3 -3
- {verifiers-0.2.2.dev53 → verifiers-0.2.2.dev55}/verifiers/v1/env.py +2 -2
- {verifiers-0.2.2.dev53 → verifiers-0.2.2.dev55}/verifiers/v1/envs/agentic_judge/env.py +2 -3
- verifiers-0.2.2.dev55/verifiers/v1/episode.py +83 -0
- {verifiers-0.2.2.dev53 → verifiers-0.2.2.dev55}/verifiers/v1/graph.py +3 -4
- {verifiers-0.2.2.dev53 → verifiers-0.2.2.dev55}/verifiers/v1/judge.py +3 -4
- {verifiers-0.2.2.dev53 → verifiers-0.2.2.dev55}/verifiers/v1/judges/rubric.py +5 -5
- {verifiers-0.2.2.dev53 → verifiers-0.2.2.dev55}/verifiers/v1/legacy.py +4 -3
- {verifiers-0.2.2.dev53 → verifiers-0.2.2.dev55}/verifiers/v1/rollout.py +5 -5
- {verifiers-0.2.2.dev53 → verifiers-0.2.2.dev55}/verifiers/v1/serve/server.py +2 -2
- {verifiers-0.2.2.dev53 → verifiers-0.2.2.dev55}/verifiers/v1/state.py +2 -3
- {verifiers-0.2.2.dev53 → verifiers-0.2.2.dev55}/verifiers/v1/task.py +56 -80
- {verifiers-0.2.2.dev53 → verifiers-0.2.2.dev55}/verifiers/v1/taskset.py +0 -2
- {verifiers-0.2.2.dev53 → verifiers-0.2.2.dev55}/verifiers/v1/tasksets/harbor/taskset.py +3 -4
- {verifiers-0.2.2.dev53 → verifiers-0.2.2.dev55}/verifiers/v1/trace.py +22 -23
- {verifiers-0.2.2.dev53 → verifiers-0.2.2.dev55}/verifiers/v1/types.py +13 -17
- verifiers-0.2.2.dev53/verifiers/v1/episode.py +0 -55
- {verifiers-0.2.2.dev53 → verifiers-0.2.2.dev55}/.gitignore +0 -0
- {verifiers-0.2.2.dev53 → verifiers-0.2.2.dev55}/LICENSE +0 -0
- {verifiers-0.2.2.dev53 → verifiers-0.2.2.dev55}/README.md +0 -0
- {verifiers-0.2.2.dev53 → verifiers-0.2.2.dev55}/pyproject.toml +0 -0
- {verifiers-0.2.2.dev53 → verifiers-0.2.2.dev55}/tests/__init__.py +0 -0
- {verifiers-0.2.2.dev53 → verifiers-0.2.2.dev55}/tests/conftest.py +0 -0
- {verifiers-0.2.2.dev53 → verifiers-0.2.2.dev55}/tests/test_browser_env.py +0 -0
- {verifiers-0.2.2.dev53 → verifiers-0.2.2.dev55}/tests/test_build_script.py +0 -0
- {verifiers-0.2.2.dev53 → verifiers-0.2.2.dev55}/tests/test_cli_agent_env.py +0 -0
- {verifiers-0.2.2.dev53 → verifiers-0.2.2.dev55}/tests/test_client_auth_errors.py +0 -0
- {verifiers-0.2.2.dev53 → verifiers-0.2.2.dev55}/tests/test_client_config.py +0 -0
- {verifiers-0.2.2.dev53 → verifiers-0.2.2.dev55}/tests/test_client_multimodal_types.py +0 -0
- {verifiers-0.2.2.dev53 → verifiers-0.2.2.dev55}/tests/test_composable_env.py +0 -0
- {verifiers-0.2.2.dev53 → verifiers-0.2.2.dev55}/tests/test_context_token_metrics.py +0 -0
- {verifiers-0.2.2.dev53 → verifiers-0.2.2.dev55}/tests/test_decorator_ranks.py +0 -0
- {verifiers-0.2.2.dev53 → verifiers-0.2.2.dev55}/tests/test_endpoint_registry.py +0 -0
- {verifiers-0.2.2.dev53 → verifiers-0.2.2.dev55}/tests/test_env_group.py +0 -0
- {verifiers-0.2.2.dev53 → verifiers-0.2.2.dev55}/tests/test_env_server.py +0 -0
- {verifiers-0.2.2.dev53 → verifiers-0.2.2.dev55}/tests/test_environment.py +0 -0
- {verifiers-0.2.2.dev53 → verifiers-0.2.2.dev55}/tests/test_environment_extra.py +0 -0
- {verifiers-0.2.2.dev53 → verifiers-0.2.2.dev55}/tests/test_error_chain.py +0 -0
- {verifiers-0.2.2.dev53 → verifiers-0.2.2.dev55}/tests/test_eval_display.py +0 -0
- {verifiers-0.2.2.dev53 → verifiers-0.2.2.dev55}/tests/test_eval_utils.py +0 -0
- {verifiers-0.2.2.dev53 → verifiers-0.2.2.dev55}/tests/test_gepa_cli.py +0 -0
- {verifiers-0.2.2.dev53 → verifiers-0.2.2.dev55}/tests/test_gepa_utils.py +0 -0
- {verifiers-0.2.2.dev53 → verifiers-0.2.2.dev55}/tests/test_gym_env.py +0 -0
- {verifiers-0.2.2.dev53 → verifiers-0.2.2.dev55}/tests/test_harbor_env_mcp.py +0 -0
- {verifiers-0.2.2.dev53 → verifiers-0.2.2.dev55}/tests/test_imports.py +0 -0
- {verifiers-0.2.2.dev53 → verifiers-0.2.2.dev55}/tests/test_init_script.py +0 -0
- {verifiers-0.2.2.dev53 → verifiers-0.2.2.dev55}/tests/test_install_utils.py +0 -0
- {verifiers-0.2.2.dev53 → verifiers-0.2.2.dev55}/tests/test_interception_utils.py +0 -0
- {verifiers-0.2.2.dev53 → verifiers-0.2.2.dev55}/tests/test_logging.py +0 -0
- {verifiers-0.2.2.dev53 → verifiers-0.2.2.dev55}/tests/test_math_rubric.py +0 -0
- {verifiers-0.2.2.dev53 → verifiers-0.2.2.dev55}/tests/test_maybe_think_parser.py +0 -0
- {verifiers-0.2.2.dev53 → verifiers-0.2.2.dev55}/tests/test_message_utils.py +0 -0
- {verifiers-0.2.2.dev53 → verifiers-0.2.2.dev55}/tests/test_message_utils_multimodal.py +0 -0
- {verifiers-0.2.2.dev53 → verifiers-0.2.2.dev55}/tests/test_multiturn_env.py +0 -0
- {verifiers-0.2.2.dev53 → verifiers-0.2.2.dev55}/tests/test_nemorl_client.py +0 -0
- {verifiers-0.2.2.dev53 → verifiers-0.2.2.dev55}/tests/test_openai_chat_completions_token_client.py +0 -0
- {verifiers-0.2.2.dev53 → verifiers-0.2.2.dev55}/tests/test_openai_responses_client.py +0 -0
- {verifiers-0.2.2.dev53 → verifiers-0.2.2.dev55}/tests/test_opencode_rlm_env.py +0 -0
- {verifiers-0.2.2.dev53 → verifiers-0.2.2.dev55}/tests/test_openenv_client.py +0 -0
- {verifiers-0.2.2.dev53 → verifiers-0.2.2.dev55}/tests/test_parser.py +0 -0
- {verifiers-0.2.2.dev53 → verifiers-0.2.2.dev55}/tests/test_path_utils.py +0 -0
- {verifiers-0.2.2.dev53 → verifiers-0.2.2.dev55}/tests/test_per_turn_timing.py +0 -0
- {verifiers-0.2.2.dev53 → verifiers-0.2.2.dev55}/tests/test_pricing_utils.py +0 -0
- {verifiers-0.2.2.dev53 → verifiers-0.2.2.dev55}/tests/test_prime_plugin.py +0 -0
- {verifiers-0.2.2.dev53 → verifiers-0.2.2.dev55}/tests/test_renderer_client.py +0 -0
- {verifiers-0.2.2.dev53 → verifiers-0.2.2.dev55}/tests/test_renderer_e2e.py +0 -0
- {verifiers-0.2.2.dev53 → verifiers-0.2.2.dev55}/tests/test_rlm_composable_env.py +0 -0
- {verifiers-0.2.2.dev53 → verifiers-0.2.2.dev55}/tests/test_rubric.py +0 -0
- {verifiers-0.2.2.dev53 → verifiers-0.2.2.dev55}/tests/test_rubric_group.py +0 -0
- {verifiers-0.2.2.dev53 → verifiers-0.2.2.dev55}/tests/test_sandbox_debug_env.py +0 -0
- {verifiers-0.2.2.dev53 → verifiers-0.2.2.dev55}/tests/test_sandbox_env.py +0 -0
- {verifiers-0.2.2.dev53 → verifiers-0.2.2.dev55}/tests/test_sandbox_mixin.py +0 -0
- {verifiers-0.2.2.dev53 → verifiers-0.2.2.dev55}/tests/test_save_utils.py +0 -0
- {verifiers-0.2.2.dev53 → verifiers-0.2.2.dev55}/tests/test_setup_script.py +0 -0
- {verifiers-0.2.2.dev53 → verifiers-0.2.2.dev55}/tests/test_singleturn_env.py +0 -0
- {verifiers-0.2.2.dev53 → verifiers-0.2.2.dev55}/tests/test_stateful_tool_env.py +0 -0
- {verifiers-0.2.2.dev53 → verifiers-0.2.2.dev55}/tests/test_think_parser.py +0 -0
- {verifiers-0.2.2.dev53 → verifiers-0.2.2.dev55}/tests/test_tool_env.py +0 -0
- {verifiers-0.2.2.dev53 → verifiers-0.2.2.dev55}/tests/test_tool_utils.py +0 -0
- {verifiers-0.2.2.dev53 → verifiers-0.2.2.dev55}/tests/test_trajectory_processing.py +0 -0
- {verifiers-0.2.2.dev53 → verifiers-0.2.2.dev55}/tests/test_tui_info_formatting.py +0 -0
- {verifiers-0.2.2.dev53 → verifiers-0.2.2.dev55}/tests/test_types.py +0 -0
- {verifiers-0.2.2.dev53 → verifiers-0.2.2.dev55}/tests/test_xml_parser.py +0 -0
- {verifiers-0.2.2.dev53 → verifiers-0.2.2.dev55}/tests/v1/conftest.py +0 -0
- {verifiers-0.2.2.dev53 → verifiers-0.2.2.dev55}/tests/v1/fixtures/counter_tool_v1.py +0 -0
- {verifiers-0.2.2.dev53 → verifiers-0.2.2.dev55}/tests/v1/fixtures/duet_v1.py +0 -0
- {verifiers-0.2.2.dev53 → verifiers-0.2.2.dev55}/tests/v1/fixtures/echo_acp_resume_v1.py +0 -0
- {verifiers-0.2.2.dev53 → verifiers-0.2.2.dev55}/tests/v1/fixtures/echo_agentic_v1.py +0 -0
- {verifiers-0.2.2.dev53 → verifiers-0.2.2.dev55}/tests/v1/fixtures/echo_multi_v0.py +0 -0
- {verifiers-0.2.2.dev53 → verifiers-0.2.2.dev55}/tests/v1/fixtures/echo_tool_v1.py +0 -0
- {verifiers-0.2.2.dev53 → verifiers-0.2.2.dev55}/tests/v1/fixtures/echo_user_sim_v1.py +0 -0
- {verifiers-0.2.2.dev53 → verifiers-0.2.2.dev55}/tests/v1/fixtures/echo_v0.py +0 -0
- {verifiers-0.2.2.dev53 → verifiers-0.2.2.dev55}/tests/v1/fixtures/echo_v1.py +0 -0
- {verifiers-0.2.2.dev53 → verifiers-0.2.2.dev55}/tests/v1/fixtures/pyproject.toml +0 -0
- {verifiers-0.2.2.dev53 → verifiers-0.2.2.dev55}/tests/v1/fixtures/tool_response_image_v1.py +0 -0
- {verifiers-0.2.2.dev53 → verifiers-0.2.2.dev55}/tests/v1/test_color_codeword_tasks.py +0 -0
- {verifiers-0.2.2.dev53 → verifiers-0.2.2.dev55}/tests/v1/test_configs.py +0 -0
- {verifiers-0.2.2.dev53 → verifiers-0.2.2.dev55}/tests/v1/test_envs.py +0 -0
- {verifiers-0.2.2.dev53 → verifiers-0.2.2.dev55}/tests/v1/test_graph.py +0 -0
- {verifiers-0.2.2.dev53 → verifiers-0.2.2.dev55}/tests/v1/test_judges.py +0 -0
- {verifiers-0.2.2.dev53 → verifiers-0.2.2.dev55}/tests/v1/test_legacy.py +0 -0
- {verifiers-0.2.2.dev53 → verifiers-0.2.2.dev55}/tests/v1/test_scoring.py +0 -0
- {verifiers-0.2.2.dev53 → verifiers-0.2.2.dev55}/tests/v1/test_taskset.py +0 -0
- {verifiers-0.2.2.dev53 → verifiers-0.2.2.dev55}/tests/v1/test_trace.py +0 -0
- {verifiers-0.2.2.dev53 → verifiers-0.2.2.dev55}/verifiers/__init__.py +0 -0
- {verifiers-0.2.2.dev53 → verifiers-0.2.2.dev55}/verifiers/cli/__init__.py +0 -0
- {verifiers-0.2.2.dev53 → verifiers-0.2.2.dev55}/verifiers/cli/commands/__init__.py +0 -0
- {verifiers-0.2.2.dev53 → verifiers-0.2.2.dev55}/verifiers/cli/commands/build.py +0 -0
- {verifiers-0.2.2.dev53 → verifiers-0.2.2.dev55}/verifiers/cli/commands/eval.py +0 -0
- {verifiers-0.2.2.dev53 → verifiers-0.2.2.dev55}/verifiers/cli/commands/gepa.py +0 -0
- {verifiers-0.2.2.dev53 → verifiers-0.2.2.dev55}/verifiers/cli/commands/init.py +0 -0
- {verifiers-0.2.2.dev53 → verifiers-0.2.2.dev55}/verifiers/cli/commands/install.py +0 -0
- {verifiers-0.2.2.dev53 → verifiers-0.2.2.dev55}/verifiers/cli/commands/setup.py +0 -0
- {verifiers-0.2.2.dev53 → verifiers-0.2.2.dev55}/verifiers/cli/plugins/__init__.py +0 -0
- {verifiers-0.2.2.dev53 → verifiers-0.2.2.dev55}/verifiers/cli/plugins/prime.py +0 -0
- {verifiers-0.2.2.dev53 → verifiers-0.2.2.dev55}/verifiers/cli/tui.py +0 -0
- {verifiers-0.2.2.dev53 → verifiers-0.2.2.dev55}/verifiers/clients/__init__.py +0 -0
- {verifiers-0.2.2.dev53 → verifiers-0.2.2.dev55}/verifiers/clients/anthropic_messages_client.py +0 -0
- {verifiers-0.2.2.dev53 → verifiers-0.2.2.dev55}/verifiers/clients/client.py +0 -0
- {verifiers-0.2.2.dev53 → verifiers-0.2.2.dev55}/verifiers/clients/nemorl_chat_completions_client.py +0 -0
- {verifiers-0.2.2.dev53 → verifiers-0.2.2.dev55}/verifiers/clients/openai_chat_completions_client.py +0 -0
- {verifiers-0.2.2.dev53 → verifiers-0.2.2.dev55}/verifiers/clients/openai_chat_completions_token_client.py +0 -0
- {verifiers-0.2.2.dev53 → verifiers-0.2.2.dev55}/verifiers/clients/openai_completions_client.py +0 -0
- {verifiers-0.2.2.dev53 → verifiers-0.2.2.dev55}/verifiers/clients/openai_responses_client.py +0 -0
- {verifiers-0.2.2.dev53 → verifiers-0.2.2.dev55}/verifiers/clients/renderer_client.py +0 -0
- {verifiers-0.2.2.dev53 → verifiers-0.2.2.dev55}/verifiers/decorators.py +0 -0
- {verifiers-0.2.2.dev53 → verifiers-0.2.2.dev55}/verifiers/envs/__init__.py +0 -0
- {verifiers-0.2.2.dev53 → verifiers-0.2.2.dev55}/verifiers/envs/env_group.py +0 -0
- {verifiers-0.2.2.dev53 → verifiers-0.2.2.dev55}/verifiers/envs/environment.py +0 -0
- {verifiers-0.2.2.dev53 → verifiers-0.2.2.dev55}/verifiers/envs/experimental/README.md +0 -0
- {verifiers-0.2.2.dev53 → verifiers-0.2.2.dev55}/verifiers/envs/experimental/__init__.py +0 -0
- {verifiers-0.2.2.dev53 → verifiers-0.2.2.dev55}/verifiers/envs/experimental/cli_agent_env.py +0 -0
- {verifiers-0.2.2.dev53 → verifiers-0.2.2.dev55}/verifiers/envs/experimental/composable/README.md +0 -0
- {verifiers-0.2.2.dev53 → verifiers-0.2.2.dev55}/verifiers/envs/experimental/composable/__init__.py +0 -0
- {verifiers-0.2.2.dev53 → verifiers-0.2.2.dev55}/verifiers/envs/experimental/composable/_filter.py +0 -0
- {verifiers-0.2.2.dev53 → verifiers-0.2.2.dev55}/verifiers/envs/experimental/composable/composable_env.py +0 -0
- {verifiers-0.2.2.dev53 → verifiers-0.2.2.dev55}/verifiers/envs/experimental/composable/harness.py +0 -0
- {verifiers-0.2.2.dev53 → verifiers-0.2.2.dev55}/verifiers/envs/experimental/composable/harnesses/__init__.py +0 -0
- {verifiers-0.2.2.dev53 → verifiers-0.2.2.dev55}/verifiers/envs/experimental/composable/harnesses/mini_swe_agent.py +0 -0
- {verifiers-0.2.2.dev53 → verifiers-0.2.2.dev55}/verifiers/envs/experimental/composable/harnesses/opencode.py +0 -0
- {verifiers-0.2.2.dev53 → verifiers-0.2.2.dev55}/verifiers/envs/experimental/composable/harnesses/prompt.txt +0 -0
- {verifiers-0.2.2.dev53 → verifiers-0.2.2.dev55}/verifiers/envs/experimental/composable/harnesses/rlm.py +0 -0
- {verifiers-0.2.2.dev53 → verifiers-0.2.2.dev55}/verifiers/envs/experimental/composable/sandbox_debug_env.py +0 -0
- {verifiers-0.2.2.dev53 → verifiers-0.2.2.dev55}/verifiers/envs/experimental/composable/swe_debug_env.py +0 -0
- {verifiers-0.2.2.dev53 → verifiers-0.2.2.dev55}/verifiers/envs/experimental/composable/task.py +0 -0
- {verifiers-0.2.2.dev53 → verifiers-0.2.2.dev55}/verifiers/envs/experimental/composable/tasksets/__init__.py +0 -0
- {verifiers-0.2.2.dev53 → verifiers-0.2.2.dev55}/verifiers/envs/experimental/composable/tasksets/cp/__init__.py +0 -0
- {verifiers-0.2.2.dev53 → verifiers-0.2.2.dev55}/verifiers/envs/experimental/composable/tasksets/cp/cp_task.py +0 -0
- {verifiers-0.2.2.dev53 → verifiers-0.2.2.dev55}/verifiers/envs/experimental/composable/tasksets/cp/test_utils.py +0 -0
- {verifiers-0.2.2.dev53 → verifiers-0.2.2.dev55}/verifiers/envs/experimental/composable/tasksets/harbor/__init__.py +0 -0
- {verifiers-0.2.2.dev53 → verifiers-0.2.2.dev55}/verifiers/envs/experimental/composable/tasksets/harbor/cli_gym.py +0 -0
- {verifiers-0.2.2.dev53 → verifiers-0.2.2.dev55}/verifiers/envs/experimental/composable/tasksets/harbor/harbor.py +0 -0
- {verifiers-0.2.2.dev53 → verifiers-0.2.2.dev55}/verifiers/envs/experimental/composable/tasksets/harbor/terminal_lego.py +0 -0
- {verifiers-0.2.2.dev53 → verifiers-0.2.2.dev55}/verifiers/envs/experimental/composable/tasksets/math/__init__.py +0 -0
- {verifiers-0.2.2.dev53 → verifiers-0.2.2.dev55}/verifiers/envs/experimental/composable/tasksets/math/math_task.py +0 -0
- {verifiers-0.2.2.dev53 → verifiers-0.2.2.dev55}/verifiers/envs/experimental/composable/tasksets/swe/README.md +0 -0
- {verifiers-0.2.2.dev53 → verifiers-0.2.2.dev55}/verifiers/envs/experimental/composable/tasksets/swe/__init__.py +0 -0
- {verifiers-0.2.2.dev53 → verifiers-0.2.2.dev55}/verifiers/envs/experimental/composable/tasksets/swe/multi_swe/__init__.py +0 -0
- {verifiers-0.2.2.dev53 → verifiers-0.2.2.dev55}/verifiers/envs/experimental/composable/tasksets/swe/multi_swe/extract_fix_patch.sh +0 -0
- {verifiers-0.2.2.dev53 → verifiers-0.2.2.dev55}/verifiers/envs/experimental/composable/tasksets/swe/multi_swe/taskset.py +0 -0
- {verifiers-0.2.2.dev53 → verifiers-0.2.2.dev55}/verifiers/envs/experimental/composable/tasksets/swe/openswe/__init__.py +0 -0
- {verifiers-0.2.2.dev53 → verifiers-0.2.2.dev55}/verifiers/envs/experimental/composable/tasksets/swe/openswe/taskset.py +0 -0
- {verifiers-0.2.2.dev53 → verifiers-0.2.2.dev55}/verifiers/envs/experimental/composable/tasksets/swe/r2e_gym/__init__.py +0 -0
- {verifiers-0.2.2.dev53 → verifiers-0.2.2.dev55}/verifiers/envs/experimental/composable/tasksets/swe/r2e_gym/log_parser.py +0 -0
- {verifiers-0.2.2.dev53 → verifiers-0.2.2.dev55}/verifiers/envs/experimental/composable/tasksets/swe/r2e_gym/taskset.py +0 -0
- {verifiers-0.2.2.dev53 → verifiers-0.2.2.dev55}/verifiers/envs/experimental/composable/tasksets/swe/scale_swe/__init__.py +0 -0
- {verifiers-0.2.2.dev53 → verifiers-0.2.2.dev55}/verifiers/envs/experimental/composable/tasksets/swe/scale_swe/taskset.py +0 -0
- {verifiers-0.2.2.dev53 → verifiers-0.2.2.dev55}/verifiers/envs/experimental/composable/tasksets/swe/shared/__init__.py +0 -0
- {verifiers-0.2.2.dev53 → verifiers-0.2.2.dev55}/verifiers/envs/experimental/composable/tasksets/swe/shared/test_patch.py +0 -0
- {verifiers-0.2.2.dev53 → verifiers-0.2.2.dev55}/verifiers/envs/experimental/composable/tasksets/swe/swe_bench/__init__.py +0 -0
- {verifiers-0.2.2.dev53 → verifiers-0.2.2.dev55}/verifiers/envs/experimental/composable/tasksets/swe/swe_bench/taskset.py +0 -0
- {verifiers-0.2.2.dev53 → verifiers-0.2.2.dev55}/verifiers/envs/experimental/composable/tasksets/swe/swe_lego/__init__.py +0 -0
- {verifiers-0.2.2.dev53 → verifiers-0.2.2.dev55}/verifiers/envs/experimental/composable/tasksets/swe/swe_lego/taskset.py +0 -0
- {verifiers-0.2.2.dev53 → verifiers-0.2.2.dev55}/verifiers/envs/experimental/composable/tasksets/swe/swe_rebench_v2/__init__.py +0 -0
- {verifiers-0.2.2.dev53 → verifiers-0.2.2.dev55}/verifiers/envs/experimental/composable/tasksets/swe/swe_rebench_v2/log_parsers.py +0 -0
- {verifiers-0.2.2.dev53 → verifiers-0.2.2.dev55}/verifiers/envs/experimental/composable/tasksets/swe/swe_rebench_v2/taskset.py +0 -0
- {verifiers-0.2.2.dev53 → verifiers-0.2.2.dev55}/verifiers/envs/experimental/composable/tasksets/swe/swe_smith/__init__.py +0 -0
- {verifiers-0.2.2.dev53 → verifiers-0.2.2.dev55}/verifiers/envs/experimental/composable/tasksets/swe/swe_smith/taskset.py +0 -0
- {verifiers-0.2.2.dev53 → verifiers-0.2.2.dev55}/verifiers/envs/experimental/composable/tasksets/swe/swe_tasksets.py +0 -0
- {verifiers-0.2.2.dev53 → verifiers-0.2.2.dev55}/verifiers/envs/experimental/gym_env.py +0 -0
- {verifiers-0.2.2.dev53 → verifiers-0.2.2.dev55}/verifiers/envs/experimental/harbor_env/__init__.py +0 -0
- {verifiers-0.2.2.dev53 → verifiers-0.2.2.dev55}/verifiers/envs/experimental/harbor_env/env.py +0 -0
- {verifiers-0.2.2.dev53 → verifiers-0.2.2.dev55}/verifiers/envs/experimental/harbor_env/mcp.py +0 -0
- {verifiers-0.2.2.dev53 → verifiers-0.2.2.dev55}/verifiers/envs/experimental/mcp_env.py +0 -0
- {verifiers-0.2.2.dev53 → verifiers-0.2.2.dev55}/verifiers/envs/experimental/opencode_env.py +0 -0
- {verifiers-0.2.2.dev53 → verifiers-0.2.2.dev55}/verifiers/envs/experimental/opencode_qa_env.py +0 -0
- {verifiers-0.2.2.dev53 → verifiers-0.2.2.dev55}/verifiers/envs/experimental/opencode_rlm_env.py +0 -0
- {verifiers-0.2.2.dev53 → verifiers-0.2.2.dev55}/verifiers/envs/experimental/sandbox_mixin.py +0 -0
- {verifiers-0.2.2.dev53 → verifiers-0.2.2.dev55}/verifiers/envs/experimental/utils/__init__.py +0 -0
- {verifiers-0.2.2.dev53 → verifiers-0.2.2.dev55}/verifiers/envs/experimental/utils/file_locks.py +0 -0
- {verifiers-0.2.2.dev53 → verifiers-0.2.2.dev55}/verifiers/envs/experimental/utils/git_checkout_cache.py +0 -0
- {verifiers-0.2.2.dev53 → verifiers-0.2.2.dev55}/verifiers/envs/integrations/README.md +0 -0
- {verifiers-0.2.2.dev53 → verifiers-0.2.2.dev55}/verifiers/envs/integrations/__init__.py +0 -0
- {verifiers-0.2.2.dev53 → verifiers-0.2.2.dev55}/verifiers/envs/integrations/browser_env/README.md +0 -0
- {verifiers-0.2.2.dev53 → verifiers-0.2.2.dev55}/verifiers/envs/integrations/browser_env/__init__.py +0 -0
- {verifiers-0.2.2.dev53 → verifiers-0.2.2.dev55}/verifiers/envs/integrations/browser_env/browser_env.py +0 -0
- {verifiers-0.2.2.dev53 → verifiers-0.2.2.dev55}/verifiers/envs/integrations/browser_env/modes/__init__.py +0 -0
- {verifiers-0.2.2.dev53 → verifiers-0.2.2.dev55}/verifiers/envs/integrations/browser_env/modes/base.py +0 -0
- {verifiers-0.2.2.dev53 → verifiers-0.2.2.dev55}/verifiers/envs/integrations/browser_env/modes/cua_mode.py +0 -0
- {verifiers-0.2.2.dev53 → verifiers-0.2.2.dev55}/verifiers/envs/integrations/browser_env/modes/dom_mode.py +0 -0
- {verifiers-0.2.2.dev53 → verifiers-0.2.2.dev55}/verifiers/envs/integrations/openenv_env.py +0 -0
- {verifiers-0.2.2.dev53 → verifiers-0.2.2.dev55}/verifiers/envs/integrations/reasoninggym_env.py +0 -0
- {verifiers-0.2.2.dev53 → verifiers-0.2.2.dev55}/verifiers/envs/integrations/textarena_env.py +0 -0
- {verifiers-0.2.2.dev53 → verifiers-0.2.2.dev55}/verifiers/envs/multiturn_env.py +0 -0
- {verifiers-0.2.2.dev53 → verifiers-0.2.2.dev55}/verifiers/envs/python_env.py +0 -0
- {verifiers-0.2.2.dev53 → verifiers-0.2.2.dev55}/verifiers/envs/sandbox_env.py +0 -0
- {verifiers-0.2.2.dev53 → verifiers-0.2.2.dev55}/verifiers/envs/singleturn_env.py +0 -0
- {verifiers-0.2.2.dev53 → verifiers-0.2.2.dev55}/verifiers/envs/stateful_tool_env.py +0 -0
- {verifiers-0.2.2.dev53 → verifiers-0.2.2.dev55}/verifiers/envs/tool_env.py +0 -0
- {verifiers-0.2.2.dev53 → verifiers-0.2.2.dev55}/verifiers/errors.py +0 -0
- {verifiers-0.2.2.dev53 → verifiers-0.2.2.dev55}/verifiers/gepa/__init__.py +0 -0
- {verifiers-0.2.2.dev53 → verifiers-0.2.2.dev55}/verifiers/gepa/adapter.py +0 -0
- {verifiers-0.2.2.dev53 → verifiers-0.2.2.dev55}/verifiers/gepa/config.py +0 -0
- {verifiers-0.2.2.dev53 → verifiers-0.2.2.dev55}/verifiers/gepa/display.py +0 -0
- {verifiers-0.2.2.dev53 → verifiers-0.2.2.dev55}/verifiers/gepa/gepa_utils.py +0 -0
- {verifiers-0.2.2.dev53 → verifiers-0.2.2.dev55}/verifiers/parsers/__init__.py +0 -0
- {verifiers-0.2.2.dev53 → verifiers-0.2.2.dev55}/verifiers/parsers/maybe_think_parser.py +0 -0
- {verifiers-0.2.2.dev53 → verifiers-0.2.2.dev55}/verifiers/parsers/parser.py +0 -0
- {verifiers-0.2.2.dev53 → verifiers-0.2.2.dev55}/verifiers/parsers/think_parser.py +0 -0
- {verifiers-0.2.2.dev53 → verifiers-0.2.2.dev55}/verifiers/parsers/xml_parser.py +0 -0
- {verifiers-0.2.2.dev53 → verifiers-0.2.2.dev55}/verifiers/rubrics/__init__.py +0 -0
- {verifiers-0.2.2.dev53 → verifiers-0.2.2.dev55}/verifiers/rubrics/experimental/hybrid_math_rubric.py +0 -0
- {verifiers-0.2.2.dev53 → verifiers-0.2.2.dev55}/verifiers/rubrics/judge_rubric.py +0 -0
- {verifiers-0.2.2.dev53 → verifiers-0.2.2.dev55}/verifiers/rubrics/math_rubric.py +0 -0
- {verifiers-0.2.2.dev53 → verifiers-0.2.2.dev55}/verifiers/rubrics/rubric.py +0 -0
- {verifiers-0.2.2.dev53 → verifiers-0.2.2.dev55}/verifiers/rubrics/rubric_group.py +0 -0
- {verifiers-0.2.2.dev53 → verifiers-0.2.2.dev55}/verifiers/scripts/__init__.py +0 -0
- {verifiers-0.2.2.dev53 → verifiers-0.2.2.dev55}/verifiers/scripts/build.py +0 -0
- {verifiers-0.2.2.dev53 → verifiers-0.2.2.dev55}/verifiers/scripts/eval.py +0 -0
- {verifiers-0.2.2.dev53 → verifiers-0.2.2.dev55}/verifiers/scripts/gepa.py +0 -0
- {verifiers-0.2.2.dev53 → verifiers-0.2.2.dev55}/verifiers/scripts/init.py +0 -0
- {verifiers-0.2.2.dev53 → verifiers-0.2.2.dev55}/verifiers/scripts/install.py +0 -0
- {verifiers-0.2.2.dev53 → verifiers-0.2.2.dev55}/verifiers/scripts/setup.py +0 -0
- {verifiers-0.2.2.dev53 → verifiers-0.2.2.dev55}/verifiers/scripts/tui.py +0 -0
- {verifiers-0.2.2.dev53 → verifiers-0.2.2.dev55}/verifiers/serve/__init__.py +0 -0
- {verifiers-0.2.2.dev53 → verifiers-0.2.2.dev55}/verifiers/serve/client/env_client.py +0 -0
- {verifiers-0.2.2.dev53 → verifiers-0.2.2.dev55}/verifiers/serve/client/zmq_env_client.py +0 -0
- {verifiers-0.2.2.dev53 → verifiers-0.2.2.dev55}/verifiers/serve/server/__init__.py +0 -0
- {verifiers-0.2.2.dev53 → verifiers-0.2.2.dev55}/verifiers/serve/server/env_router.py +0 -0
- {verifiers-0.2.2.dev53 → verifiers-0.2.2.dev55}/verifiers/serve/server/env_server.py +0 -0
- {verifiers-0.2.2.dev53 → verifiers-0.2.2.dev55}/verifiers/serve/server/env_worker.py +0 -0
- {verifiers-0.2.2.dev53 → verifiers-0.2.2.dev55}/verifiers/serve/server/zmq_env_server.py +0 -0
- {verifiers-0.2.2.dev53 → verifiers-0.2.2.dev55}/verifiers/serve/types.py +0 -0
- {verifiers-0.2.2.dev53 → verifiers-0.2.2.dev55}/verifiers/types.py +0 -0
- {verifiers-0.2.2.dev53 → verifiers-0.2.2.dev55}/verifiers/utils/__init__.py +0 -0
- {verifiers-0.2.2.dev53 → verifiers-0.2.2.dev55}/verifiers/utils/async_utils.py +0 -0
- {verifiers-0.2.2.dev53 → verifiers-0.2.2.dev55}/verifiers/utils/client_utils.py +0 -0
- {verifiers-0.2.2.dev53 → verifiers-0.2.2.dev55}/verifiers/utils/config_utils.py +0 -0
- {verifiers-0.2.2.dev53 → verifiers-0.2.2.dev55}/verifiers/utils/data_utils.py +0 -0
- {verifiers-0.2.2.dev53 → verifiers-0.2.2.dev55}/verifiers/utils/display_utils.py +0 -0
- {verifiers-0.2.2.dev53 → verifiers-0.2.2.dev55}/verifiers/utils/env_config_utils.py +0 -0
- {verifiers-0.2.2.dev53 → verifiers-0.2.2.dev55}/verifiers/utils/env_utils.py +0 -0
- {verifiers-0.2.2.dev53 → verifiers-0.2.2.dev55}/verifiers/utils/error_utils.py +0 -0
- {verifiers-0.2.2.dev53 → verifiers-0.2.2.dev55}/verifiers/utils/eval_display.py +0 -0
- {verifiers-0.2.2.dev53 → verifiers-0.2.2.dev55}/verifiers/utils/eval_utils.py +0 -0
- {verifiers-0.2.2.dev53 → verifiers-0.2.2.dev55}/verifiers/utils/heartbeat.py +0 -0
- {verifiers-0.2.2.dev53 → verifiers-0.2.2.dev55}/verifiers/utils/import_utils.py +0 -0
- {verifiers-0.2.2.dev53 → verifiers-0.2.2.dev55}/verifiers/utils/install_utils.py +0 -0
- {verifiers-0.2.2.dev53 → verifiers-0.2.2.dev55}/verifiers/utils/interception_utils.py +0 -0
- {verifiers-0.2.2.dev53 → verifiers-0.2.2.dev55}/verifiers/utils/logging_utils.py +0 -0
- {verifiers-0.2.2.dev53 → verifiers-0.2.2.dev55}/verifiers/utils/message_utils.py +0 -0
- {verifiers-0.2.2.dev53 → verifiers-0.2.2.dev55}/verifiers/utils/metric_utils.py +0 -0
- {verifiers-0.2.2.dev53 → verifiers-0.2.2.dev55}/verifiers/utils/path_utils.py +0 -0
- {verifiers-0.2.2.dev53 → verifiers-0.2.2.dev55}/verifiers/utils/pricing_utils.py +0 -0
- {verifiers-0.2.2.dev53 → verifiers-0.2.2.dev55}/verifiers/utils/process_utils.py +0 -0
- {verifiers-0.2.2.dev53 → verifiers-0.2.2.dev55}/verifiers/utils/response_utils.py +0 -0
- {verifiers-0.2.2.dev53 → verifiers-0.2.2.dev55}/verifiers/utils/save_utils.py +0 -0
- {verifiers-0.2.2.dev53 → verifiers-0.2.2.dev55}/verifiers/utils/serve_utils.py +0 -0
- {verifiers-0.2.2.dev53 → verifiers-0.2.2.dev55}/verifiers/utils/thread_utils.py +0 -0
- {verifiers-0.2.2.dev53 → verifiers-0.2.2.dev55}/verifiers/utils/threaded_sandbox_client.py +0 -0
- {verifiers-0.2.2.dev53 → verifiers-0.2.2.dev55}/verifiers/utils/tool_utils.py +0 -0
- {verifiers-0.2.2.dev53 → verifiers-0.2.2.dev55}/verifiers/utils/usage_utils.py +0 -0
- {verifiers-0.2.2.dev53 → verifiers-0.2.2.dev55}/verifiers/utils/version_utils.py +0 -0
- {verifiers-0.2.2.dev53 → verifiers-0.2.2.dev55}/verifiers/v1/acp/__init__.py +0 -0
- {verifiers-0.2.2.dev53 → verifiers-0.2.2.dev55}/verifiers/v1/acp/_runner.py +0 -0
- {verifiers-0.2.2.dev53 → verifiers-0.2.2.dev55}/verifiers/v1/agent.py +0 -0
- {verifiers-0.2.2.dev53 → verifiers-0.2.2.dev55}/verifiers/v1/cli/__init__.py +0 -0
- {verifiers-0.2.2.dev53 → verifiers-0.2.2.dev55}/verifiers/v1/cli/dashboard/__init__.py +0 -0
- {verifiers-0.2.2.dev53 → verifiers-0.2.2.dev55}/verifiers/v1/cli/dashboard/base.py +0 -0
- {verifiers-0.2.2.dev53 → verifiers-0.2.2.dev55}/verifiers/v1/cli/dashboard/replay.py +0 -0
- {verifiers-0.2.2.dev53 → verifiers-0.2.2.dev55}/verifiers/v1/cli/dashboard/validate.py +0 -0
- {verifiers-0.2.2.dev53 → verifiers-0.2.2.dev55}/verifiers/v1/cli/eval/__init__.py +0 -0
- {verifiers-0.2.2.dev53 → verifiers-0.2.2.dev55}/verifiers/v1/cli/eval/main.py +0 -0
- {verifiers-0.2.2.dev53 → verifiers-0.2.2.dev55}/verifiers/v1/cli/eval/resume.py +0 -0
- {verifiers-0.2.2.dev53 → verifiers-0.2.2.dev55}/verifiers/v1/cli/eval/runner.py +0 -0
- {verifiers-0.2.2.dev53 → verifiers-0.2.2.dev55}/verifiers/v1/cli/gepa.py +0 -0
- {verifiers-0.2.2.dev53 → verifiers-0.2.2.dev55}/verifiers/v1/cli/init.py +0 -0
- {verifiers-0.2.2.dev53 → verifiers-0.2.2.dev55}/verifiers/v1/cli/output.py +0 -0
- {verifiers-0.2.2.dev53 → verifiers-0.2.2.dev55}/verifiers/v1/cli/resolve.py +0 -0
- {verifiers-0.2.2.dev53 → verifiers-0.2.2.dev55}/verifiers/v1/cli/serve.py +0 -0
- {verifiers-0.2.2.dev53 → verifiers-0.2.2.dev55}/verifiers/v1/cli/validate.py +0 -0
- {verifiers-0.2.2.dev53 → verifiers-0.2.2.dev55}/verifiers/v1/clients/__init__.py +0 -0
- {verifiers-0.2.2.dev53 → verifiers-0.2.2.dev55}/verifiers/v1/clients/client.py +0 -0
- {verifiers-0.2.2.dev53 → verifiers-0.2.2.dev55}/verifiers/v1/clients/config.py +0 -0
- {verifiers-0.2.2.dev53 → verifiers-0.2.2.dev55}/verifiers/v1/clients/eval.py +0 -0
- {verifiers-0.2.2.dev53 → verifiers-0.2.2.dev55}/verifiers/v1/clients/train.py +0 -0
- {verifiers-0.2.2.dev53 → verifiers-0.2.2.dev55}/verifiers/v1/configs/__init__.py +0 -0
- {verifiers-0.2.2.dev53 → verifiers-0.2.2.dev55}/verifiers/v1/configs/agent.py +0 -0
- {verifiers-0.2.2.dev53 → verifiers-0.2.2.dev55}/verifiers/v1/configs/cli/__init__.py +0 -0
- {verifiers-0.2.2.dev53 → verifiers-0.2.2.dev55}/verifiers/v1/configs/cli/debug.py +0 -0
- {verifiers-0.2.2.dev53 → verifiers-0.2.2.dev55}/verifiers/v1/configs/cli/env.py +0 -0
- {verifiers-0.2.2.dev53 → verifiers-0.2.2.dev55}/verifiers/v1/configs/cli/eval.py +0 -0
- {verifiers-0.2.2.dev53 → verifiers-0.2.2.dev55}/verifiers/v1/configs/cli/init.py +0 -0
- {verifiers-0.2.2.dev53 → verifiers-0.2.2.dev55}/verifiers/v1/configs/cli/replay.py +0 -0
- {verifiers-0.2.2.dev53 → verifiers-0.2.2.dev55}/verifiers/v1/configs/cli/serve.py +0 -0
- {verifiers-0.2.2.dev53 → verifiers-0.2.2.dev55}/verifiers/v1/configs/cli/validate.py +0 -0
- {verifiers-0.2.2.dev53 → verifiers-0.2.2.dev55}/verifiers/v1/configs/env.py +0 -0
- {verifiers-0.2.2.dev53 → verifiers-0.2.2.dev55}/verifiers/v1/configs/harness.py +0 -0
- {verifiers-0.2.2.dev53 → verifiers-0.2.2.dev55}/verifiers/v1/configs/judge.py +0 -0
- {verifiers-0.2.2.dev53 → verifiers-0.2.2.dev55}/verifiers/v1/configs/legacy.py +0 -0
- {verifiers-0.2.2.dev53 → verifiers-0.2.2.dev55}/verifiers/v1/configs/retries.py +0 -0
- {verifiers-0.2.2.dev53 → verifiers-0.2.2.dev55}/verifiers/v1/configs/serve.py +0 -0
- {verifiers-0.2.2.dev53 → verifiers-0.2.2.dev55}/verifiers/v1/configs/task.py +0 -0
- {verifiers-0.2.2.dev53 → verifiers-0.2.2.dev55}/verifiers/v1/configs/taskset.py +0 -0
- {verifiers-0.2.2.dev53 → verifiers-0.2.2.dev55}/verifiers/v1/decorators.py +0 -0
- {verifiers-0.2.2.dev53 → verifiers-0.2.2.dev55}/verifiers/v1/dialects/__init__.py +0 -0
- {verifiers-0.2.2.dev53 → verifiers-0.2.2.dev55}/verifiers/v1/dialects/anthropic.py +0 -0
- {verifiers-0.2.2.dev53 → verifiers-0.2.2.dev55}/verifiers/v1/dialects/base.py +0 -0
- {verifiers-0.2.2.dev53 → verifiers-0.2.2.dev55}/verifiers/v1/dialects/chat.py +0 -0
- {verifiers-0.2.2.dev53 → verifiers-0.2.2.dev55}/verifiers/v1/dialects/responses.py +0 -0
- {verifiers-0.2.2.dev53 → verifiers-0.2.2.dev55}/verifiers/v1/envs/__init__.py +0 -0
- {verifiers-0.2.2.dev53 → verifiers-0.2.2.dev55}/verifiers/v1/envs/agentic_judge/__init__.py +0 -0
- {verifiers-0.2.2.dev53 → verifiers-0.2.2.dev55}/verifiers/v1/envs/best_of_n/__init__.py +0 -0
- {verifiers-0.2.2.dev53 → verifiers-0.2.2.dev55}/verifiers/v1/envs/best_of_n/env.py +0 -0
- {verifiers-0.2.2.dev53 → verifiers-0.2.2.dev55}/verifiers/v1/envs/single_agent/__init__.py +0 -0
- {verifiers-0.2.2.dev53 → verifiers-0.2.2.dev55}/verifiers/v1/envs/single_agent/env.py +0 -0
- {verifiers-0.2.2.dev53 → verifiers-0.2.2.dev55}/verifiers/v1/envs/user_sim/__init__.py +0 -0
- {verifiers-0.2.2.dev53 → verifiers-0.2.2.dev55}/verifiers/v1/envs/user_sim/env.py +0 -0
- {verifiers-0.2.2.dev53 → verifiers-0.2.2.dev55}/verifiers/v1/errors.py +0 -0
- {verifiers-0.2.2.dev53 → verifiers-0.2.2.dev55}/verifiers/v1/gepa/__init__.py +0 -0
- {verifiers-0.2.2.dev53 → verifiers-0.2.2.dev55}/verifiers/v1/gepa/adapter.py +0 -0
- {verifiers-0.2.2.dev53 → verifiers-0.2.2.dev55}/verifiers/v1/gepa/config.py +0 -0
- {verifiers-0.2.2.dev53 → verifiers-0.2.2.dev55}/verifiers/v1/gepa/dataset.py +0 -0
- {verifiers-0.2.2.dev53 → verifiers-0.2.2.dev55}/verifiers/v1/gepa/reflection.py +0 -0
- {verifiers-0.2.2.dev53 → verifiers-0.2.2.dev55}/verifiers/v1/gepa/runner.py +0 -0
- {verifiers-0.2.2.dev53 → verifiers-0.2.2.dev55}/verifiers/v1/harness.py +0 -0
- {verifiers-0.2.2.dev53 → verifiers-0.2.2.dev55}/verifiers/v1/harnesses/__init__.py +0 -0
- {verifiers-0.2.2.dev53 → verifiers-0.2.2.dev55}/verifiers/v1/harnesses/bash/__init__.py +0 -0
- {verifiers-0.2.2.dev53 → verifiers-0.2.2.dev55}/verifiers/v1/harnesses/bash/harness.py +0 -0
- {verifiers-0.2.2.dev53 → verifiers-0.2.2.dev55}/verifiers/v1/harnesses/bash/program.py +0 -0
- {verifiers-0.2.2.dev53 → verifiers-0.2.2.dev55}/verifiers/v1/harnesses/claude_code/__init__.py +0 -0
- {verifiers-0.2.2.dev53 → verifiers-0.2.2.dev55}/verifiers/v1/harnesses/claude_code/harness.py +0 -0
- {verifiers-0.2.2.dev53 → verifiers-0.2.2.dev55}/verifiers/v1/harnesses/codex/__init__.py +0 -0
- {verifiers-0.2.2.dev53 → verifiers-0.2.2.dev55}/verifiers/v1/harnesses/codex/harness.py +0 -0
- {verifiers-0.2.2.dev53 → verifiers-0.2.2.dev55}/verifiers/v1/harnesses/kimi_code/__init__.py +0 -0
- {verifiers-0.2.2.dev53 → verifiers-0.2.2.dev55}/verifiers/v1/harnesses/kimi_code/harness.py +0 -0
- {verifiers-0.2.2.dev53 → verifiers-0.2.2.dev55}/verifiers/v1/harnesses/mini_swe_agent/__init__.py +0 -0
- {verifiers-0.2.2.dev53 → verifiers-0.2.2.dev55}/verifiers/v1/harnesses/mini_swe_agent/harness.py +0 -0
- {verifiers-0.2.2.dev53 → verifiers-0.2.2.dev55}/verifiers/v1/harnesses/mini_swe_agent/program.py +0 -0
- {verifiers-0.2.2.dev53 → verifiers-0.2.2.dev55}/verifiers/v1/harnesses/null/__init__.py +0 -0
- {verifiers-0.2.2.dev53 → verifiers-0.2.2.dev55}/verifiers/v1/harnesses/null/harness.py +0 -0
- {verifiers-0.2.2.dev53 → verifiers-0.2.2.dev55}/verifiers/v1/harnesses/null/program.py +0 -0
- {verifiers-0.2.2.dev53 → verifiers-0.2.2.dev55}/verifiers/v1/harnesses/pi/__init__.py +0 -0
- {verifiers-0.2.2.dev53 → verifiers-0.2.2.dev55}/verifiers/v1/harnesses/pi/harness.py +0 -0
- {verifiers-0.2.2.dev53 → verifiers-0.2.2.dev55}/verifiers/v1/harnesses/pool/__init__.py +0 -0
- {verifiers-0.2.2.dev53 → verifiers-0.2.2.dev55}/verifiers/v1/harnesses/pool/harness.py +0 -0
- {verifiers-0.2.2.dev53 → verifiers-0.2.2.dev55}/verifiers/v1/harnesses/rlm/__init__.py +0 -0
- {verifiers-0.2.2.dev53 → verifiers-0.2.2.dev55}/verifiers/v1/harnesses/rlm/harness.py +0 -0
- {verifiers-0.2.2.dev53 → verifiers-0.2.2.dev55}/verifiers/v1/harnesses/terminus_2/__init__.py +0 -0
- {verifiers-0.2.2.dev53 → verifiers-0.2.2.dev55}/verifiers/v1/harnesses/terminus_2/harness.py +0 -0
- {verifiers-0.2.2.dev53 → verifiers-0.2.2.dev55}/verifiers/v1/harnesses/terminus_2/program.py +0 -0
- {verifiers-0.2.2.dev53 → verifiers-0.2.2.dev55}/verifiers/v1/interception/__init__.py +0 -0
- {verifiers-0.2.2.dev53 → verifiers-0.2.2.dev55}/verifiers/v1/interception/base.py +0 -0
- {verifiers-0.2.2.dev53 → verifiers-0.2.2.dev55}/verifiers/v1/interception/pool.py +0 -0
- {verifiers-0.2.2.dev53 → verifiers-0.2.2.dev55}/verifiers/v1/interception/server.py +0 -0
- {verifiers-0.2.2.dev53 → verifiers-0.2.2.dev55}/verifiers/v1/interception/tunnel/__init__.py +0 -0
- {verifiers-0.2.2.dev53 → verifiers-0.2.2.dev55}/verifiers/v1/interception/tunnel/base.py +0 -0
- {verifiers-0.2.2.dev53 → verifiers-0.2.2.dev55}/verifiers/v1/interception/tunnel/custom.py +0 -0
- {verifiers-0.2.2.dev53 → verifiers-0.2.2.dev55}/verifiers/v1/interception/tunnel/prime.py +0 -0
- {verifiers-0.2.2.dev53 → verifiers-0.2.2.dev55}/verifiers/v1/judges/__init__.py +0 -0
- {verifiers-0.2.2.dev53 → verifiers-0.2.2.dev55}/verifiers/v1/judges/reference.py +0 -0
- {verifiers-0.2.2.dev53 → verifiers-0.2.2.dev55}/verifiers/v1/judges/reference.txt +0 -0
- {verifiers-0.2.2.dev53 → verifiers-0.2.2.dev55}/verifiers/v1/judges/rubric.txt +0 -0
- {verifiers-0.2.2.dev53 → verifiers-0.2.2.dev55}/verifiers/v1/loaders.py +0 -0
- {verifiers-0.2.2.dev53 → verifiers-0.2.2.dev55}/verifiers/v1/mcp/__init__.py +0 -0
- {verifiers-0.2.2.dev53 → verifiers-0.2.2.dev55}/verifiers/v1/mcp/launch.py +0 -0
- {verifiers-0.2.2.dev53 → verifiers-0.2.2.dev55}/verifiers/v1/mcp/server.py +0 -0
- {verifiers-0.2.2.dev53 → verifiers-0.2.2.dev55}/verifiers/v1/mcp/toolset.py +0 -0
- {verifiers-0.2.2.dev53 → verifiers-0.2.2.dev55}/verifiers/v1/push.py +0 -0
- {verifiers-0.2.2.dev53 → verifiers-0.2.2.dev55}/verifiers/v1/retries.py +0 -0
- {verifiers-0.2.2.dev53 → verifiers-0.2.2.dev55}/verifiers/v1/runtimes/__init__.py +0 -0
- {verifiers-0.2.2.dev53 → verifiers-0.2.2.dev55}/verifiers/v1/runtimes/base.py +0 -0
- {verifiers-0.2.2.dev53 → verifiers-0.2.2.dev55}/verifiers/v1/runtimes/docker/__init__.py +0 -0
- {verifiers-0.2.2.dev53 → verifiers-0.2.2.dev55}/verifiers/v1/runtimes/docker/egress.py +0 -0
- {verifiers-0.2.2.dev53 → verifiers-0.2.2.dev55}/verifiers/v1/runtimes/limiters.py +0 -0
- {verifiers-0.2.2.dev53 → verifiers-0.2.2.dev55}/verifiers/v1/runtimes/modal.py +0 -0
- {verifiers-0.2.2.dev53 → verifiers-0.2.2.dev55}/verifiers/v1/runtimes/prime.py +0 -0
- {verifiers-0.2.2.dev53 → verifiers-0.2.2.dev55}/verifiers/v1/runtimes/subprocess.py +0 -0
- {verifiers-0.2.2.dev53 → verifiers-0.2.2.dev55}/verifiers/v1/scoring.py +0 -0
- {verifiers-0.2.2.dev53 → verifiers-0.2.2.dev55}/verifiers/v1/serve/__init__.py +0 -0
- {verifiers-0.2.2.dev53 → verifiers-0.2.2.dev55}/verifiers/v1/serve/client.py +0 -0
- {verifiers-0.2.2.dev53 → verifiers-0.2.2.dev55}/verifiers/v1/serve/pool.py +0 -0
- {verifiers-0.2.2.dev53 → verifiers-0.2.2.dev55}/verifiers/v1/serve/types.py +0 -0
- {verifiers-0.2.2.dev53 → verifiers-0.2.2.dev55}/verifiers/v1/session.py +0 -0
- {verifiers-0.2.2.dev53 → verifiers-0.2.2.dev55}/verifiers/v1/tasksets/__init__.py +0 -0
- {verifiers-0.2.2.dev53 → verifiers-0.2.2.dev55}/verifiers/v1/tasksets/harbor/__init__.py +0 -0
- {verifiers-0.2.2.dev53 → verifiers-0.2.2.dev55}/verifiers/v1/tasksets/lean/__init__.py +0 -0
- {verifiers-0.2.2.dev53 → verifiers-0.2.2.dev55}/verifiers/v1/tasksets/lean/scoring.py +0 -0
- {verifiers-0.2.2.dev53 → verifiers-0.2.2.dev55}/verifiers/v1/tasksets/lean/taskset.py +0 -0
- {verifiers-0.2.2.dev53 → verifiers-0.2.2.dev55}/verifiers/v1/tasksets/openenv/__init__.py +0 -0
- {verifiers-0.2.2.dev53 → verifiers-0.2.2.dev55}/verifiers/v1/tasksets/openenv/taskset.py +0 -0
- {verifiers-0.2.2.dev53 → verifiers-0.2.2.dev55}/verifiers/v1/tasksets/textarena/__init__.py +0 -0
- {verifiers-0.2.2.dev53 → verifiers-0.2.2.dev55}/verifiers/v1/tasksets/textarena/taskset.py +0 -0
- {verifiers-0.2.2.dev53 → verifiers-0.2.2.dev55}/verifiers/v1/utils/__init__.py +0 -0
- {verifiers-0.2.2.dev53 → verifiers-0.2.2.dev55}/verifiers/v1/utils/aio.py +0 -0
- {verifiers-0.2.2.dev53 → verifiers-0.2.2.dev55}/verifiers/v1/utils/compile.py +0 -0
- {verifiers-0.2.2.dev53 → verifiers-0.2.2.dev55}/verifiers/v1/utils/format.py +0 -0
- {verifiers-0.2.2.dev53 → verifiers-0.2.2.dev55}/verifiers/v1/utils/generic.py +0 -0
- {verifiers-0.2.2.dev53 → verifiers-0.2.2.dev55}/verifiers/v1/utils/git.py +0 -0
- {verifiers-0.2.2.dev53 → verifiers-0.2.2.dev55}/verifiers/v1/utils/image.py +0 -0
- {verifiers-0.2.2.dev53 → verifiers-0.2.2.dev55}/verifiers/v1/utils/install.py +0 -0
- {verifiers-0.2.2.dev53 → verifiers-0.2.2.dev55}/verifiers/v1/utils/interrupt.py +0 -0
- {verifiers-0.2.2.dev53 → verifiers-0.2.2.dev55}/verifiers/v1/utils/logging.py +0 -0
- {verifiers-0.2.2.dev53 → verifiers-0.2.2.dev55}/verifiers/v1/utils/memory.py +0 -0
- {verifiers-0.2.2.dev53 → verifiers-0.2.2.dev55}/verifiers/v1/utils/sampling.py +0 -0
- {verifiers-0.2.2.dev53 → verifiers-0.2.2.dev55}/verifiers/v1/utils/version.py +0 -0
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
Metadata-Version: 2.4
|
|
2
2
|
Name: verifiers
|
|
3
|
-
Version: 0.2.2.
|
|
3
|
+
Version: 0.2.2.dev55
|
|
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
|
|
@@ -367,7 +367,7 @@ async def test_multi_agent_env(run_v1, tmp_path):
|
|
|
367
367
|
# agent info (completion order — the gathered seats land in either order).
|
|
368
368
|
(line,) = (tmp_path / "traces.jsonl").read_text().splitlines()
|
|
369
369
|
row = json.loads(line)
|
|
370
|
-
assert row["env"] == "duet-v1"
|
|
370
|
+
assert row["env"] == {"id": "duet-v1"}
|
|
371
371
|
by_name = {t["agent"]["name"]: t for t in row["traces"]}
|
|
372
372
|
assert set(by_name) == {"a", "b"}
|
|
373
373
|
assert by_name["a"]["agent"]["trainable"] is True
|
|
@@ -115,10 +115,10 @@ from verifiers.v1.taskset import Taskset
|
|
|
115
115
|
from verifiers.v1.trace import (
|
|
116
116
|
TRACE_VERSION,
|
|
117
117
|
AgentInfo,
|
|
118
|
+
AgentSpan,
|
|
118
119
|
Branch,
|
|
119
120
|
Error,
|
|
120
121
|
EvalRunInfo,
|
|
121
|
-
GenerationSpan,
|
|
122
122
|
ModelCall,
|
|
123
123
|
Reward,
|
|
124
124
|
RunInfo,
|
|
@@ -144,7 +144,6 @@ from verifiers.v1.types import (
|
|
|
144
144
|
Response,
|
|
145
145
|
Sampling,
|
|
146
146
|
SamplingConfig,
|
|
147
|
-
StrictBaseModel,
|
|
148
147
|
SystemMessage,
|
|
149
148
|
TextContentPart,
|
|
150
149
|
Tool,
|
|
@@ -177,7 +176,6 @@ __all__ = [ # noqa: RUF022 - grouped by public API area
|
|
|
177
176
|
"Response",
|
|
178
177
|
"Sampling",
|
|
179
178
|
"SamplingConfig",
|
|
180
|
-
"StrictBaseModel",
|
|
181
179
|
"SystemMessage",
|
|
182
180
|
"TextContentPart",
|
|
183
181
|
"Tool",
|
|
@@ -213,7 +211,7 @@ __all__ = [ # noqa: RUF022 - grouped by public API area
|
|
|
213
211
|
"Timing",
|
|
214
212
|
"TimeSpan",
|
|
215
213
|
"TimeSplit",
|
|
216
|
-
"
|
|
214
|
+
"AgentSpan",
|
|
217
215
|
"Error",
|
|
218
216
|
# decorators
|
|
219
217
|
"stop",
|
|
@@ -8,9 +8,7 @@ import uuid
|
|
|
8
8
|
from pathlib import PurePosixPath
|
|
9
9
|
from typing import TYPE_CHECKING
|
|
10
10
|
|
|
11
|
-
from pydantic import Field
|
|
12
|
-
|
|
13
|
-
from verifiers.v1.types import StrictBaseModel
|
|
11
|
+
from pydantic import BaseModel, Field
|
|
14
12
|
|
|
15
13
|
if TYPE_CHECKING:
|
|
16
14
|
from verifiers.v1.runtimes import Runtime
|
|
@@ -25,7 +23,7 @@ MAX_ARTIFACT_BYTES = 32 * 1024 * 1024
|
|
|
25
23
|
agent's image, so the repo is already there and only its output has to travel."""
|
|
26
24
|
|
|
27
25
|
|
|
28
|
-
class Artifact(
|
|
26
|
+
class Artifact(BaseModel):
|
|
29
27
|
"""One path to restore at the same location in another runtime."""
|
|
30
28
|
|
|
31
29
|
source: str
|
|
@@ -393,18 +393,19 @@ def _breakdown(scored: list[Trace], done: list[Trace]) -> Table | None:
|
|
|
393
393
|
phase_count: dict[str, int] = {}
|
|
394
394
|
model_secs = harness_secs = 0.0
|
|
395
395
|
for trace in done:
|
|
396
|
-
|
|
397
|
-
|
|
398
|
-
|
|
399
|
-
if
|
|
400
|
-
|
|
401
|
-
|
|
402
|
-
|
|
403
|
-
|
|
404
|
-
|
|
405
|
-
|
|
406
|
-
|
|
407
|
-
|
|
396
|
+
total_in += trace.num_input_tokens
|
|
397
|
+
total_out += trace.num_output_tokens
|
|
398
|
+
usage = trace.usage
|
|
399
|
+
if usage is not None:
|
|
400
|
+
if usage.cached_input_tokens is not None:
|
|
401
|
+
total_cached += usage.cached_input_tokens
|
|
402
|
+
have_cached = True
|
|
403
|
+
if usage.reasoning_tokens is not None:
|
|
404
|
+
total_reasoning += usage.reasoning_tokens
|
|
405
|
+
have_reasoning = True
|
|
406
|
+
if usage.cost is not None:
|
|
407
|
+
total_cost += usage.cost
|
|
408
|
+
have_cost = True
|
|
408
409
|
# Judge / auxiliary scoring calls (off the message graph) shown separately from the agent's.
|
|
409
410
|
judge = Usage.aggregate(trace.extra_usage)
|
|
410
411
|
if judge is not None:
|
|
@@ -413,13 +414,13 @@ def _breakdown(scored: list[Trace], done: list[Trace]) -> Table | None:
|
|
|
413
414
|
if judge.cost is not None:
|
|
414
415
|
total_judge_cost += judge.cost
|
|
415
416
|
have_judge = True
|
|
416
|
-
for phase in ("boot", "setup", "
|
|
417
|
+
for phase in ("boot", "setup", "agent", "finalize", "scoring"):
|
|
417
418
|
span = getattr(trace.timing, phase)
|
|
418
419
|
if span.end: # phase was timed for this rollout
|
|
419
420
|
phase_secs[phase] = phase_secs.get(phase, 0.0) + span.duration
|
|
420
421
|
phase_count[phase] = phase_count.get(phase, 0) + 1
|
|
421
|
-
model_secs += trace.timing.
|
|
422
|
-
harness_secs += trace.timing.
|
|
422
|
+
model_secs += trace.timing.agent.model.duration
|
|
423
|
+
harness_secs += trace.timing.agent.harness.duration
|
|
423
424
|
if (
|
|
424
425
|
total_in
|
|
425
426
|
or total_out
|
|
@@ -448,12 +449,12 @@ def _breakdown(scored: list[Trace], done: list[Trace]) -> Table | None:
|
|
|
448
449
|
usage.append(cost)
|
|
449
450
|
grid.add_row("usage", " · ".join(usage))
|
|
450
451
|
time_segments = []
|
|
451
|
-
for phase in ("boot", "setup", "
|
|
452
|
+
for phase in ("boot", "setup", "agent", "finalize", "scoring"):
|
|
452
453
|
count = phase_count.get(phase)
|
|
453
454
|
if not count:
|
|
454
455
|
continue
|
|
455
456
|
segment = f"{phase} {format_time(phase_secs[phase] / count)}"
|
|
456
|
-
if phase == "
|
|
457
|
+
if phase == "agent":
|
|
457
458
|
segment += (
|
|
458
459
|
f" (model {format_time(model_secs / count)}"
|
|
459
460
|
f" + harness {format_time(harness_secs / count)})"
|
|
@@ -464,26 +465,6 @@ def _breakdown(scored: list[Trace], done: list[Trace]) -> Table | None:
|
|
|
464
465
|
return grid if grid.row_count else None
|
|
465
466
|
|
|
466
467
|
|
|
467
|
-
def _tokens(trace: Trace) -> tuple[int, int, int | None, int | None, int]:
|
|
468
|
-
"""Input/output tokens summed across all branches: per branch, output is every assistant
|
|
469
|
-
(completion) token generated across its turns and input is the fed-in tokens counted once
|
|
470
|
-
(system + user + tool) — the final sequence minus everything the model generated. A rollout
|
|
471
|
-
yields one training sample per branch (a linear trace is a single branch; compaction and
|
|
472
|
-
subagents add more), so the totals sum them — matching `Trace.num_input_tokens` /
|
|
473
|
-
`Trace.num_output_tokens`, whose sum is `num_total_tokens`.
|
|
474
|
-
|
|
475
|
-
Both counts come from provider-reported usage. Returns the branch count from the same derived
|
|
476
|
-
view so each dashboard tick materializes it once."""
|
|
477
|
-
usage = trace.usage
|
|
478
|
-
cached = usage.cached_input_tokens if usage else None
|
|
479
|
-
reasoning = usage.reasoning_tokens if usage else None
|
|
480
|
-
branches = trace.branches
|
|
481
|
-
nbranches = len(branches)
|
|
482
|
-
prompt = sum(b.num_input_tokens for b in branches)
|
|
483
|
-
completion = sum(b.num_output_tokens for b in branches)
|
|
484
|
-
return prompt, completion, cached, reasoning, nbranches
|
|
485
|
-
|
|
486
|
-
|
|
487
468
|
def _stage(trace: Trace) -> str:
|
|
488
469
|
"""The stage a live (not-yet-done) rollout is in, derived from its trace's timing
|
|
489
470
|
spans — the engine opens and closes each span exactly at the stage transitions, so
|
|
@@ -495,7 +476,7 @@ def _stage(trace: Trace) -> str:
|
|
|
495
476
|
for stage, span in (
|
|
496
477
|
("scoring", trace.timing.scoring),
|
|
497
478
|
("finalize", trace.timing.finalize),
|
|
498
|
-
("running", trace.timing.
|
|
479
|
+
("running", trace.timing.agent),
|
|
499
480
|
("setup", trace.timing.setup),
|
|
500
481
|
("boot", trace.timing.boot),
|
|
501
482
|
):
|
|
@@ -551,7 +532,9 @@ def Rows(groups: list[list[RunSlot]], now: float, runtime_type: str) -> Table:
|
|
|
551
532
|
base = f"name={task.name[:32]}" if task.name else f"idx={task.idx}"
|
|
552
533
|
if not slot.traces:
|
|
553
534
|
if slot.done: # the env's rollout() itself failed before any trace
|
|
554
|
-
error =
|
|
535
|
+
error = (
|
|
536
|
+
slot.episode.last_error if slot.episode is not None else None
|
|
537
|
+
)
|
|
555
538
|
group_rows.append(
|
|
556
539
|
(
|
|
557
540
|
"error",
|
|
@@ -602,7 +585,7 @@ def Rows(groups: list[list[RunSlot]], now: float, runtime_type: str) -> Table:
|
|
|
602
585
|
end = (
|
|
603
586
|
t.timing.scoring.end
|
|
604
587
|
or t.timing.finalize.end
|
|
605
|
-
or t.timing.
|
|
588
|
+
or t.timing.agent.end
|
|
606
589
|
# a rollout that errored in boot/setup has only that span's end — freeze there
|
|
607
590
|
# once done, else (still running) the timer would grow off `now` forever
|
|
608
591
|
or (
|
|
@@ -612,8 +595,12 @@ def Rows(groups: list[list[RunSlot]], now: float, runtime_type: str) -> Table:
|
|
|
612
595
|
)
|
|
613
596
|
or now
|
|
614
597
|
)
|
|
615
|
-
prompt, completion
|
|
616
|
-
|
|
598
|
+
prompt, completion = t.num_input_tokens, t.num_output_tokens
|
|
599
|
+
nbranches = t.num_branches
|
|
600
|
+
usage = t.usage
|
|
601
|
+
cached = usage.cached_input_tokens if usage else None
|
|
602
|
+
reasoning = usage.reasoning_tokens if usage else None
|
|
603
|
+
cost = usage.cost if usage else None
|
|
617
604
|
tokens = ""
|
|
618
605
|
if prompt or completion:
|
|
619
606
|
tokens = f"{format_count(prompt)}/{format_count(completion)} tokens"
|
|
@@ -123,16 +123,16 @@ def record_debug_error(
|
|
|
123
123
|
action_timeout: float | None,
|
|
124
124
|
) -> None:
|
|
125
125
|
now = time.time()
|
|
126
|
-
for span in (trace.timing.boot, trace.timing.setup, trace.timing.
|
|
126
|
+
for span in (trace.timing.boot, trace.timing.setup, trace.timing.agent):
|
|
127
127
|
if span.start and not span.end:
|
|
128
128
|
span.end = now
|
|
129
|
-
in_action = bool(trace.timing.
|
|
129
|
+
in_action = bool(trace.timing.agent.start)
|
|
130
130
|
stage = (
|
|
131
131
|
"debug action" if in_action else "setup" if trace.timing.setup.start else "boot"
|
|
132
132
|
)
|
|
133
133
|
timeout = action_timeout if in_action else setup_timeout
|
|
134
134
|
error_start = (
|
|
135
|
-
trace.timing.
|
|
135
|
+
trace.timing.agent.start
|
|
136
136
|
if in_action
|
|
137
137
|
else trace.timing.setup.start or trace.timing.boot.start
|
|
138
138
|
)
|
|
@@ -234,9 +234,9 @@ async def debug_task(task: Task, config: DebugConfig) -> tuple[Trace, bool]:
|
|
|
234
234
|
await runtime.prepare_execution([])
|
|
235
235
|
trace.timing.setup.end = time.time()
|
|
236
236
|
|
|
237
|
-
trace.timing.
|
|
237
|
+
trace.timing.agent.start = time.time()
|
|
238
238
|
debug.update(await run_action(runtime, config))
|
|
239
|
-
trace.timing.
|
|
239
|
+
trace.timing.agent.end = time.time()
|
|
240
240
|
if not debug.get("ok"):
|
|
241
241
|
record_action_failure(trace, debug)
|
|
242
242
|
trace.stop(str(debug["reason"]))
|
|
@@ -246,7 +246,7 @@ async def debug_task(task: Task, config: DebugConfig) -> tuple[Trace, bool]:
|
|
|
246
246
|
except Exception as e: # noqa: BLE001 - persist any framework failure on the trace
|
|
247
247
|
record_debug_error(trace, debug, e, setup_timeout, config.timeout.total)
|
|
248
248
|
finally:
|
|
249
|
-
trace.
|
|
249
|
+
trace.split_agent_time()
|
|
250
250
|
trace.info["debug"] = debug
|
|
251
251
|
try:
|
|
252
252
|
await runtime.stop()
|
|
@@ -31,7 +31,7 @@ from verifiers.v1.cli.resolve import narrow_taskset_config
|
|
|
31
31
|
from verifiers.v1.configs.agent import WireAgentConfig
|
|
32
32
|
from verifiers.v1.configs.cli.replay import ReplayConfig
|
|
33
33
|
from verifiers.v1.state import state_cls
|
|
34
|
-
from verifiers.v1.task import Task, WireTaskData
|
|
34
|
+
from verifiers.v1.task import Task, WireTaskData
|
|
35
35
|
from verifiers.v1.trace import Trace
|
|
36
36
|
from verifiers.v1.utils.interrupt import install_interrupt
|
|
37
37
|
from verifiers.v1.utils.logging import setup_logging
|
|
@@ -76,7 +76,7 @@ async def run_replay(config: ReplayConfig, source: Path, out: Path) -> list[Trac
|
|
|
76
76
|
"score() — multi-agent runs don't support replay"
|
|
77
77
|
)
|
|
78
78
|
task_cls = vf.task_type(config.taskset.id)
|
|
79
|
-
data_cls =
|
|
79
|
+
data_cls = task_cls.data_type()
|
|
80
80
|
# `WireTaskData` reads any taskset's saved task without importing its Task type.
|
|
81
81
|
# An episode may hold no traces (its env hooks failed before any agent ran);
|
|
82
82
|
# there's nothing to re-score, so it drops out in the flatten. Each kept trace
|
|
@@ -84,7 +84,7 @@ async def run_replay(config: ReplayConfig, source: Path, out: Path) -> list[Trac
|
|
|
84
84
|
episodes = read_episodes(
|
|
85
85
|
source, Trace[WireTaskData, state_cls(task_cls), WireAgentConfig]
|
|
86
86
|
)
|
|
87
|
-
sourced = [(trace, e.env) for e in episodes for trace in e.traces]
|
|
87
|
+
sourced = [(trace, e.env.id) for e in episodes for trace in e.traces]
|
|
88
88
|
if config.num_traces is not None:
|
|
89
89
|
sourced = sourced[: config.num_traces]
|
|
90
90
|
traces = [trace for trace, _ in sourced]
|
|
@@ -20,7 +20,7 @@ from verifiers.v1.configs.env import (
|
|
|
20
20
|
_declared_agent_configs,
|
|
21
21
|
default_agent_harness,
|
|
22
22
|
)
|
|
23
|
-
from verifiers.v1.episode import Episode
|
|
23
|
+
from verifiers.v1.episode import EnvInfo, Episode
|
|
24
24
|
from verifiers.v1.errors import EnvError, boundary
|
|
25
25
|
from verifiers.v1.harness import Harness, HarnessConfig
|
|
26
26
|
from verifiers.v1.interception import (
|
|
@@ -257,7 +257,7 @@ class Env(ABC, Generic[ConfigT]):
|
|
|
257
257
|
completed subset, its exception on the episode's `errors`. `on_trace` observes
|
|
258
258
|
each agent-run's trace at mint; `on_discard` its abandonment (a per-agent
|
|
259
259
|
retry mints a replacement)."""
|
|
260
|
-
episode = Episode(env=self.config.env_id)
|
|
260
|
+
episode = Episode(env=EnvInfo(id=self.config.env_id))
|
|
261
261
|
agents = self._episode_agents(ctx, episode.traces, on_trace, on_discard)
|
|
262
262
|
try:
|
|
263
263
|
async with asyncio.timeout(self.config.timeout.episode):
|
|
@@ -19,10 +19,9 @@ import re
|
|
|
19
19
|
import tomllib
|
|
20
20
|
from pathlib import Path
|
|
21
21
|
|
|
22
|
-
from pydantic import Field, field_validator
|
|
22
|
+
from pydantic import BaseModel, Field, field_validator
|
|
23
23
|
|
|
24
24
|
import verifiers.v1 as vf
|
|
25
|
-
from verifiers.v1.types import StrictBaseModel
|
|
26
25
|
from verifiers.v1.utils.compile import validate_pairing
|
|
27
26
|
|
|
28
27
|
VERDICT_FILE = "/tmp/verdict.json"
|
|
@@ -39,7 +38,7 @@ TASK_SECTION = """\
|
|
|
39
38
|
{prompt}"""
|
|
40
39
|
|
|
41
40
|
|
|
42
|
-
class Criterion(
|
|
41
|
+
class Criterion(BaseModel):
|
|
43
42
|
"""One rubric criterion — the plugged rubric judge's format, mirrored so the
|
|
44
43
|
same `criteria` files grade both judges."""
|
|
45
44
|
|
|
@@ -0,0 +1,83 @@
|
|
|
1
|
+
"""The episode — one run's traces plus their shared standing, whole."""
|
|
2
|
+
|
|
3
|
+
import uuid
|
|
4
|
+
from typing import Generic
|
|
5
|
+
|
|
6
|
+
from pydantic import BaseModel, Field
|
|
7
|
+
|
|
8
|
+
from verifiers.v1.configs.agent import WireAgentConfig
|
|
9
|
+
from verifiers.v1.state import State, StateT
|
|
10
|
+
from verifiers.v1.task import DataT, WireTaskData
|
|
11
|
+
from verifiers.v1.trace import AgentConfigT, Error, Trace
|
|
12
|
+
from verifiers.v1.types import Usage
|
|
13
|
+
|
|
14
|
+
|
|
15
|
+
class EnvInfo(BaseModel):
|
|
16
|
+
"""The env that ran the episode, self-describing without the run's config."""
|
|
17
|
+
|
|
18
|
+
id: str = ""
|
|
19
|
+
"""`EnvConfig.env_id`, e.g. `agentic-judge+gsm8k-v1`."""
|
|
20
|
+
|
|
21
|
+
|
|
22
|
+
class Episode(BaseModel, Generic[DataT, StateT, AgentConfigT]):
|
|
23
|
+
"""The artifact Env.run produces. Contains multiple agents' traces."""
|
|
24
|
+
|
|
25
|
+
id: str = Field(default_factory=lambda: uuid.uuid4().hex)
|
|
26
|
+
|
|
27
|
+
env: EnvInfo = Field(default_factory=EnvInfo)
|
|
28
|
+
"""The env that produced this episode."""
|
|
29
|
+
ok: bool = False
|
|
30
|
+
"""Whether the episode completed successfully."""
|
|
31
|
+
errors: list[Error] = Field(default_factory=list)
|
|
32
|
+
"""Every error captured across attempts, oldest to newest."""
|
|
33
|
+
traces: list[Trace[DataT, StateT, AgentConfigT]] = Field(default_factory=list)
|
|
34
|
+
"""Every agent's trace, in completion order."""
|
|
35
|
+
|
|
36
|
+
@property
|
|
37
|
+
def last_error(self) -> Error | None:
|
|
38
|
+
"""The last episode-level error captured across attempts."""
|
|
39
|
+
return self.errors[-1] if self.errors else None
|
|
40
|
+
|
|
41
|
+
@property
|
|
42
|
+
def usage(self) -> Usage | None:
|
|
43
|
+
"""Provider-reported usage summed across every trace's model calls;
|
|
44
|
+
judge/off-graph usage stays on the traces (`Trace.extra_usage`)."""
|
|
45
|
+
return Usage.aggregate(u for t in self.traces if (u := t.usage) is not None)
|
|
46
|
+
|
|
47
|
+
@property
|
|
48
|
+
def num_input_tokens(self) -> int:
|
|
49
|
+
"""Fed-in tokens (system + user + tool), summed across traces."""
|
|
50
|
+
return sum(t.num_input_tokens for t in self.traces)
|
|
51
|
+
|
|
52
|
+
@property
|
|
53
|
+
def num_output_tokens(self) -> int:
|
|
54
|
+
"""Model-generated tokens across all turns, summed across traces."""
|
|
55
|
+
return sum(t.num_output_tokens for t in self.traces)
|
|
56
|
+
|
|
57
|
+
@property
|
|
58
|
+
def num_total_tokens(self) -> int:
|
|
59
|
+
"""Final sequence lengths per branch, summed across traces."""
|
|
60
|
+
return sum(t.num_total_tokens for t in self.traces)
|
|
61
|
+
|
|
62
|
+
@property
|
|
63
|
+
def num_turns(self) -> int:
|
|
64
|
+
"""Sampled turns, summed across traces."""
|
|
65
|
+
return sum(t.num_turns for t in self.traces)
|
|
66
|
+
|
|
67
|
+
@property
|
|
68
|
+
def by_agent(self) -> dict[str, list[Trace[DataT, StateT, AgentConfigT]]]:
|
|
69
|
+
"""Traces grouped by agent name (e.g. n solvers), in completion order."""
|
|
70
|
+
grouped: dict[str, list[Trace[DataT, StateT, AgentConfigT]]] = {}
|
|
71
|
+
for trace in self.traces:
|
|
72
|
+
grouped.setdefault(trace.agent.name, []).append(trace)
|
|
73
|
+
return grouped
|
|
74
|
+
|
|
75
|
+
@classmethod
|
|
76
|
+
def of(cls, trace: Trace, env: str = "") -> "Episode":
|
|
77
|
+
"""The single-agent record: one trace as its own episode."""
|
|
78
|
+
return cls(env=EnvInfo(id=env), traces=[trace], ok=trace.ok)
|
|
79
|
+
|
|
80
|
+
|
|
81
|
+
WireEpisode = Episode[WireTaskData, State, WireAgentConfig]
|
|
82
|
+
"""Record loader for consumers without the run's packages: unknown task fields
|
|
83
|
+
survive in `task.model_extra`, agent configs parse loose (`WireAgentConfig`)."""
|
|
@@ -25,7 +25,7 @@ from dataclasses import dataclass
|
|
|
25
25
|
from typing import TYPE_CHECKING, Any
|
|
26
26
|
|
|
27
27
|
import numpy as np
|
|
28
|
-
from pydantic import ConfigDict, Field, field_serializer, field_validator
|
|
28
|
+
from pydantic import BaseModel, ConfigDict, Field, field_serializer, field_validator
|
|
29
29
|
from pydantic.json_schema import SkipJsonSchema
|
|
30
30
|
from renderers.base import MultiModalData, PlaceholderRange, RenderedTokens
|
|
31
31
|
|
|
@@ -34,7 +34,6 @@ from verifiers.v1.types import (
|
|
|
34
34
|
KeptTokens,
|
|
35
35
|
Message,
|
|
36
36
|
Response,
|
|
37
|
-
StrictBaseModel,
|
|
38
37
|
TextContentPart,
|
|
39
38
|
Tool,
|
|
40
39
|
ToolMessage,
|
|
@@ -62,7 +61,7 @@ def _decode_ndarray(d: dict) -> np.ndarray:
|
|
|
62
61
|
return np.frombuffer(d["data"], dtype=np.dtype(d["dtype"])).reshape(d["shape"])
|
|
63
62
|
|
|
64
63
|
|
|
65
|
-
class MessageNode(
|
|
64
|
+
class MessageNode(BaseModel):
|
|
66
65
|
"""One message in the graph: a message plus the tokens it adds to the cumulative
|
|
67
66
|
sequence. Concatenating a root→leaf path's nodes reconstructs that branch's full token
|
|
68
67
|
sequence; the mask/logprobs make it a training sample."""
|
|
@@ -121,7 +120,7 @@ class MessageNode(StrictBaseModel):
|
|
|
121
120
|
sampling-replay training. Rides the wire as raw-bytes `__nd__` dicts; kept off disk
|
|
122
121
|
by the dump-site `exclude` in prime-rl."""
|
|
123
122
|
|
|
124
|
-
model_config = ConfigDict(
|
|
123
|
+
model_config = ConfigDict(arbitrary_types_allowed=True)
|
|
125
124
|
|
|
126
125
|
@field_serializer("multi_modal_data")
|
|
127
126
|
def serialize_multi_modal_data(self, mmd: MultiModalData | None) -> dict | None:
|
|
@@ -62,7 +62,7 @@ from verifiers.v1.configs.judge import (
|
|
|
62
62
|
)
|
|
63
63
|
from verifiers.v1.dialects.chat import message_to_wire
|
|
64
64
|
from verifiers.v1.scoring import parse_judge_choice
|
|
65
|
-
from verifiers.v1.types import Messages,
|
|
65
|
+
from verifiers.v1.types import Messages, Usage
|
|
66
66
|
from verifiers.v1.utils.generic import concrete_type
|
|
67
67
|
|
|
68
68
|
if TYPE_CHECKING:
|
|
@@ -72,7 +72,7 @@ if TYPE_CHECKING:
|
|
|
72
72
|
ParsedT = TypeVar("ParsedT")
|
|
73
73
|
|
|
74
74
|
|
|
75
|
-
class JudgeResponse(
|
|
75
|
+
class JudgeResponse(BaseModel, Generic[ParsedT]):
|
|
76
76
|
text: str
|
|
77
77
|
parsed: ParsedT | None = None
|
|
78
78
|
usage: Usage | None = None
|
|
@@ -197,8 +197,7 @@ class Judge(Generic[ParsedT, ConfigT]):
|
|
|
197
197
|
)
|
|
198
198
|
if response.parsed is None:
|
|
199
199
|
raise RuntimeError(
|
|
200
|
-
f"judge returned no parseable structured output "
|
|
201
|
-
f"(finish_reason={choice.finish_reason})"
|
|
200
|
+
f"judge returned no parseable structured output (finish_reason={choice.finish_reason})"
|
|
202
201
|
)
|
|
203
202
|
else:
|
|
204
203
|
completion = await client.chat.completions.create(**kwargs)
|
|
@@ -9,13 +9,13 @@ from functools import cached_property
|
|
|
9
9
|
from pathlib import Path
|
|
10
10
|
from typing import cast
|
|
11
11
|
|
|
12
|
-
from pydantic import Field, field_validator
|
|
12
|
+
from pydantic import BaseModel, Field, field_validator
|
|
13
13
|
|
|
14
14
|
from verifiers.v1.configs.judge import JudgeConfig
|
|
15
15
|
from verifiers.v1.judge import Judge, JudgeView, judge_question, judge_response
|
|
16
16
|
from verifiers.v1.task import TaskData
|
|
17
17
|
from verifiers.v1.trace import Trace
|
|
18
|
-
from verifiers.v1.types import ID
|
|
18
|
+
from verifiers.v1.types import ID
|
|
19
19
|
|
|
20
20
|
RUBRIC_PROMPT = (Path(__file__).resolve().parent / "rubric.txt").read_text(
|
|
21
21
|
encoding="utf-8"
|
|
@@ -56,7 +56,7 @@ def first_verdicts_object(text: str) -> dict | None:
|
|
|
56
56
|
return None
|
|
57
57
|
|
|
58
58
|
|
|
59
|
-
class Criterion(
|
|
59
|
+
class Criterion(BaseModel):
|
|
60
60
|
name: str
|
|
61
61
|
"""Key for the criterion's metric (`<judge name>/<name>`) and its `weights` override."""
|
|
62
62
|
text: str
|
|
@@ -109,13 +109,13 @@ class RubricJudgeConfig(JudgeConfig):
|
|
|
109
109
|
handle either. Transient HTTP failures are already retried by the OpenAI client."""
|
|
110
110
|
|
|
111
111
|
|
|
112
|
-
class CriterionVerdict(
|
|
112
|
+
class CriterionVerdict(BaseModel):
|
|
113
113
|
name: str
|
|
114
114
|
reason: str
|
|
115
115
|
verdict: str
|
|
116
116
|
|
|
117
117
|
|
|
118
|
-
class RubricVerdicts(
|
|
118
|
+
class RubricVerdicts(BaseModel):
|
|
119
119
|
verdicts: list[CriterionVerdict]
|
|
120
120
|
|
|
121
121
|
|
|
@@ -36,8 +36,8 @@ from verifiers.v1.serve.types import (
|
|
|
36
36
|
from verifiers.v1.task import WireTaskData
|
|
37
37
|
from verifiers.v1.trace import (
|
|
38
38
|
AgentInfo,
|
|
39
|
+
AgentSpan,
|
|
39
40
|
Error,
|
|
40
|
-
GenerationSpan,
|
|
41
41
|
ModelCall,
|
|
42
42
|
Reward,
|
|
43
43
|
TimeSpan,
|
|
@@ -199,7 +199,8 @@ def _to_v1_tokens(raw: Any) -> TurnTokens | None:
|
|
|
199
199
|
def _timing(raw: Any) -> Timing:
|
|
200
200
|
"""Map the v0 timing record's generation/scoring durations onto a v1 ``Timing``
|
|
201
201
|
(we only have durations, so each span is encoded as start=0, end=duration).
|
|
202
|
-
v0's per-turn ``model``/``env``
|
|
202
|
+
v0's ``generation`` duration becomes the agent span; its per-turn ``model``/``env``
|
|
203
|
+
span collections carry the model/harness split."""
|
|
203
204
|
|
|
204
205
|
def _dur(node: Any) -> float:
|
|
205
206
|
if isinstance(node, dict):
|
|
@@ -212,7 +213,7 @@ def _timing(raw: Any) -> Timing:
|
|
|
212
213
|
|
|
213
214
|
raw = raw or {}
|
|
214
215
|
return Timing(
|
|
215
|
-
|
|
216
|
+
agent=AgentSpan(
|
|
216
217
|
start=0.0,
|
|
217
218
|
end=_dur(raw.get("generation")),
|
|
218
219
|
model=TimeSplit(duration=_dur(raw.get("model"))),
|
|
@@ -297,7 +297,7 @@ class RolloutRun:
|
|
|
297
297
|
raise
|
|
298
298
|
now = time.time()
|
|
299
299
|
self.trace.timing.setup.end = now
|
|
300
|
-
self.trace.timing.
|
|
300
|
+
self.trace.timing.agent.start = now
|
|
301
301
|
return True
|
|
302
302
|
|
|
303
303
|
async def step(self, messages: Messages | None = None) -> bool:
|
|
@@ -397,8 +397,8 @@ class RolloutRun:
|
|
|
397
397
|
try:
|
|
398
398
|
await self._stack.aclose()
|
|
399
399
|
finally:
|
|
400
|
-
if trace.timing.
|
|
401
|
-
trace.timing.
|
|
400
|
+
if trace.timing.agent.start and not trace.timing.agent.end:
|
|
401
|
+
trace.timing.agent.end = time.time()
|
|
402
402
|
if not self._failed and self._opened:
|
|
403
403
|
trace.timing.finalize.start = time.time()
|
|
404
404
|
async with boundary(TaskError, "task finalize"):
|
|
@@ -430,13 +430,13 @@ class RolloutRun:
|
|
|
430
430
|
for span in (
|
|
431
431
|
trace.timing.boot,
|
|
432
432
|
trace.timing.setup,
|
|
433
|
-
trace.timing.
|
|
433
|
+
trace.timing.agent,
|
|
434
434
|
trace.timing.finalize,
|
|
435
435
|
trace.timing.scoring,
|
|
436
436
|
):
|
|
437
437
|
if span.start and not span.end:
|
|
438
438
|
span.end = now
|
|
439
|
-
trace.
|
|
439
|
+
trace.split_agent_time()
|
|
440
440
|
if runtime is not None:
|
|
441
441
|
try:
|
|
442
442
|
await self.harness.cleanup(trace, runtime)
|
|
@@ -22,7 +22,7 @@ from verifiers.v1.serve.types import (
|
|
|
22
22
|
RunRequest,
|
|
23
23
|
RunResponse,
|
|
24
24
|
)
|
|
25
|
-
from verifiers.v1.task import Task
|
|
25
|
+
from verifiers.v1.task import Task
|
|
26
26
|
from verifiers.v1.types import SamplingConfig
|
|
27
27
|
|
|
28
28
|
logger = logging.getLogger(__name__)
|
|
@@ -39,7 +39,7 @@ class EnvServer:
|
|
|
39
39
|
self.taskset_id = config.taskset.id
|
|
40
40
|
self.env = load_environment(config)
|
|
41
41
|
self.task_cls = type(self.env.taskset).task_type()
|
|
42
|
-
self.data_cls =
|
|
42
|
+
self.data_cls = self.task_cls.data_type()
|
|
43
43
|
# A dispatched task is its client-side model_dump(): a field excluded from
|
|
44
44
|
# serialization would vanish on the wire and rebuild silently defaulted, so
|
|
45
45
|
# refuse to serve such a taskset.
|
|
@@ -4,14 +4,13 @@ Tool servers synchronize it through the interception state channel. It is exclud
|
|
|
4
4
|
from serialized traces.
|
|
5
5
|
"""
|
|
6
6
|
|
|
7
|
-
from pydantic import ConfigDict, Field
|
|
7
|
+
from pydantic import BaseModel, ConfigDict, Field
|
|
8
8
|
from typing_extensions import TypeVar
|
|
9
9
|
|
|
10
|
-
from verifiers.v1.types import StrictBaseModel
|
|
11
10
|
from verifiers.v1.utils.generic import concrete_type
|
|
12
11
|
|
|
13
12
|
|
|
14
|
-
class State(
|
|
13
|
+
class State(BaseModel):
|
|
15
14
|
model_config = ConfigDict(ser_json_inf_nan="constants")
|
|
16
15
|
artifacts: dict[str, bytes] = Field(default_factory=dict)
|
|
17
16
|
|