verifiers 0.2.2.dev48__tar.gz → 0.2.2.dev57__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.dev48 → verifiers-0.2.2.dev57}/PKG-INFO +1 -1
- {verifiers-0.2.2.dev48 → verifiers-0.2.2.dev57}/pyproject.toml +5 -2
- {verifiers-0.2.2.dev48 → verifiers-0.2.2.dev57}/tests/v1/conftest.py +4 -9
- {verifiers-0.2.2.dev48 → verifiers-0.2.2.dev57}/tests/v1/fixtures/counter_tool_v1.py +3 -1
- {verifiers-0.2.2.dev48 → verifiers-0.2.2.dev57}/tests/v1/fixtures/echo_acp_resume_v1.py +3 -1
- {verifiers-0.2.2.dev48 → verifiers-0.2.2.dev57}/tests/v1/fixtures/echo_tool_v1.py +3 -1
- {verifiers-0.2.2.dev48 → verifiers-0.2.2.dev57}/tests/v1/fixtures/tool_response_image_v1.py +17 -3
- {verifiers-0.2.2.dev48 → verifiers-0.2.2.dev57}/tests/v1/test_color_codeword_tasks.py +1 -3
- {verifiers-0.2.2.dev48 → verifiers-0.2.2.dev57}/tests/v1/test_e2e.py +49 -28
- {verifiers-0.2.2.dev48 → verifiers-0.2.2.dev57}/tests/v1/test_graph.py +16 -6
- {verifiers-0.2.2.dev48 → verifiers-0.2.2.dev57}/tests/v1/test_judges.py +10 -18
- verifiers-0.2.2.dev57/tests/v1/test_taskset.py +93 -0
- {verifiers-0.2.2.dev48 → verifiers-0.2.2.dev57}/tests/v1/test_trace.py +4 -1
- {verifiers-0.2.2.dev48 → verifiers-0.2.2.dev57}/verifiers/v1/__init__.py +13 -4
- {verifiers-0.2.2.dev48 → verifiers-0.2.2.dev57}/verifiers/v1/agent.py +17 -14
- verifiers-0.2.2.dev57/verifiers/v1/artifacts.py +142 -0
- {verifiers-0.2.2.dev48 → verifiers-0.2.2.dev57}/verifiers/v1/cli/dashboard/eval.py +42 -58
- {verifiers-0.2.2.dev48 → verifiers-0.2.2.dev57}/verifiers/v1/cli/debug.py +16 -9
- {verifiers-0.2.2.dev48 → verifiers-0.2.2.dev57}/verifiers/v1/cli/eval/runner.py +21 -7
- {verifiers-0.2.2.dev48 → verifiers-0.2.2.dev57}/verifiers/v1/cli/init.py +7 -2
- {verifiers-0.2.2.dev48 → verifiers-0.2.2.dev57}/verifiers/v1/cli/replay.py +4 -4
- {verifiers-0.2.2.dev48 → verifiers-0.2.2.dev57}/verifiers/v1/cli/validate.py +20 -1
- {verifiers-0.2.2.dev48 → verifiers-0.2.2.dev57}/verifiers/v1/configs/judge.py +3 -10
- {verifiers-0.2.2.dev48 → verifiers-0.2.2.dev57}/verifiers/v1/configs/taskset.py +5 -0
- {verifiers-0.2.2.dev48 → verifiers-0.2.2.dev57}/verifiers/v1/env.py +10 -17
- {verifiers-0.2.2.dev48 → verifiers-0.2.2.dev57}/verifiers/v1/envs/agentic_judge/__init__.py +2 -0
- {verifiers-0.2.2.dev48 → verifiers-0.2.2.dev57}/verifiers/v1/envs/agentic_judge/env.py +118 -61
- {verifiers-0.2.2.dev48 → verifiers-0.2.2.dev57}/verifiers/v1/envs/user_sim/env.py +2 -2
- verifiers-0.2.2.dev57/verifiers/v1/episode.py +83 -0
- {verifiers-0.2.2.dev48 → verifiers-0.2.2.dev57}/verifiers/v1/errors.py +1 -1
- {verifiers-0.2.2.dev48 → verifiers-0.2.2.dev57}/verifiers/v1/gepa/adapter.py +6 -11
- {verifiers-0.2.2.dev48 → verifiers-0.2.2.dev57}/verifiers/v1/gepa/runner.py +18 -2
- {verifiers-0.2.2.dev48 → verifiers-0.2.2.dev57}/verifiers/v1/graph.py +3 -4
- {verifiers-0.2.2.dev48 → verifiers-0.2.2.dev57}/verifiers/v1/harnesses/__init__.py +6 -0
- verifiers-0.2.2.dev57/verifiers/v1/harnesses/browser_use/__init__.py +6 -0
- verifiers-0.2.2.dev57/verifiers/v1/harnesses/browser_use/harness.py +125 -0
- verifiers-0.2.2.dev57/verifiers/v1/harnesses/browser_use/program.py +402 -0
- {verifiers-0.2.2.dev48 → verifiers-0.2.2.dev57}/verifiers/v1/judge.py +9 -10
- {verifiers-0.2.2.dev48 → verifiers-0.2.2.dev57}/verifiers/v1/judges/rubric.py +5 -5
- {verifiers-0.2.2.dev48 → verifiers-0.2.2.dev57}/verifiers/v1/legacy.py +10 -5
- {verifiers-0.2.2.dev48 → verifiers-0.2.2.dev57}/verifiers/v1/loaders.py +4 -4
- {verifiers-0.2.2.dev48 → verifiers-0.2.2.dev57}/verifiers/v1/mcp/launch.py +2 -2
- {verifiers-0.2.2.dev48 → verifiers-0.2.2.dev57}/verifiers/v1/mcp/server.py +2 -2
- {verifiers-0.2.2.dev48 → verifiers-0.2.2.dev57}/verifiers/v1/push.py +5 -5
- {verifiers-0.2.2.dev48 → verifiers-0.2.2.dev57}/verifiers/v1/retries.py +3 -1
- {verifiers-0.2.2.dev48 → verifiers-0.2.2.dev57}/verifiers/v1/rollout.py +31 -28
- {verifiers-0.2.2.dev48 → verifiers-0.2.2.dev57}/verifiers/v1/runtimes/subprocess.py +1 -1
- {verifiers-0.2.2.dev48 → verifiers-0.2.2.dev57}/verifiers/v1/serve/server.py +2 -2
- {verifiers-0.2.2.dev48 → verifiers-0.2.2.dev57}/verifiers/v1/state.py +6 -6
- verifiers-0.2.2.dev57/verifiers/v1/task.py +238 -0
- verifiers-0.2.2.dev57/verifiers/v1/taskset.py +110 -0
- {verifiers-0.2.2.dev48 → verifiers-0.2.2.dev57}/verifiers/v1/tasksets/harbor/taskset.py +105 -7
- {verifiers-0.2.2.dev48 → verifiers-0.2.2.dev57}/verifiers/v1/tasksets/lean/taskset.py +1 -2
- {verifiers-0.2.2.dev48 → verifiers-0.2.2.dev57}/verifiers/v1/trace.py +150 -254
- {verifiers-0.2.2.dev48 → verifiers-0.2.2.dev57}/verifiers/v1/types.py +13 -17
- {verifiers-0.2.2.dev48 → verifiers-0.2.2.dev57}/verifiers/v1/utils/compile.py +18 -17
- {verifiers-0.2.2.dev48 → verifiers-0.2.2.dev57}/verifiers/v1/utils/generic.py +1 -1
- {verifiers-0.2.2.dev48 → verifiers-0.2.2.dev57}/verifiers/v1/utils/git.py +74 -9
- {verifiers-0.2.2.dev48 → verifiers-0.2.2.dev57}/verifiers/v1/utils/sampling.py +4 -5
- verifiers-0.2.2.dev48/tests/v1/test_taskset.py +0 -71
- verifiers-0.2.2.dev48/verifiers/v1/episode.py +0 -55
- verifiers-0.2.2.dev48/verifiers/v1/task.py +0 -274
- verifiers-0.2.2.dev48/verifiers/v1/taskset.py +0 -98
- {verifiers-0.2.2.dev48 → verifiers-0.2.2.dev57}/.gitignore +0 -0
- {verifiers-0.2.2.dev48 → verifiers-0.2.2.dev57}/LICENSE +0 -0
- {verifiers-0.2.2.dev48 → verifiers-0.2.2.dev57}/README.md +0 -0
- {verifiers-0.2.2.dev48 → verifiers-0.2.2.dev57}/tests/__init__.py +0 -0
- {verifiers-0.2.2.dev48 → verifiers-0.2.2.dev57}/tests/conftest.py +0 -0
- {verifiers-0.2.2.dev48 → verifiers-0.2.2.dev57}/tests/test_browser_env.py +0 -0
- {verifiers-0.2.2.dev48 → verifiers-0.2.2.dev57}/tests/test_build_script.py +0 -0
- {verifiers-0.2.2.dev48 → verifiers-0.2.2.dev57}/tests/test_cli_agent_env.py +0 -0
- {verifiers-0.2.2.dev48 → verifiers-0.2.2.dev57}/tests/test_client_auth_errors.py +0 -0
- {verifiers-0.2.2.dev48 → verifiers-0.2.2.dev57}/tests/test_client_config.py +0 -0
- {verifiers-0.2.2.dev48 → verifiers-0.2.2.dev57}/tests/test_client_multimodal_types.py +0 -0
- {verifiers-0.2.2.dev48 → verifiers-0.2.2.dev57}/tests/test_composable_env.py +0 -0
- {verifiers-0.2.2.dev48 → verifiers-0.2.2.dev57}/tests/test_context_token_metrics.py +0 -0
- {verifiers-0.2.2.dev48 → verifiers-0.2.2.dev57}/tests/test_decorator_ranks.py +0 -0
- {verifiers-0.2.2.dev48 → verifiers-0.2.2.dev57}/tests/test_endpoint_registry.py +0 -0
- {verifiers-0.2.2.dev48 → verifiers-0.2.2.dev57}/tests/test_env_group.py +0 -0
- {verifiers-0.2.2.dev48 → verifiers-0.2.2.dev57}/tests/test_env_server.py +0 -0
- {verifiers-0.2.2.dev48 → verifiers-0.2.2.dev57}/tests/test_environment.py +0 -0
- {verifiers-0.2.2.dev48 → verifiers-0.2.2.dev57}/tests/test_environment_extra.py +0 -0
- {verifiers-0.2.2.dev48 → verifiers-0.2.2.dev57}/tests/test_error_chain.py +0 -0
- {verifiers-0.2.2.dev48 → verifiers-0.2.2.dev57}/tests/test_eval_display.py +0 -0
- {verifiers-0.2.2.dev48 → verifiers-0.2.2.dev57}/tests/test_eval_utils.py +0 -0
- {verifiers-0.2.2.dev48 → verifiers-0.2.2.dev57}/tests/test_gepa_cli.py +0 -0
- {verifiers-0.2.2.dev48 → verifiers-0.2.2.dev57}/tests/test_gepa_utils.py +0 -0
- {verifiers-0.2.2.dev48 → verifiers-0.2.2.dev57}/tests/test_gym_env.py +0 -0
- {verifiers-0.2.2.dev48 → verifiers-0.2.2.dev57}/tests/test_harbor_env_mcp.py +0 -0
- {verifiers-0.2.2.dev48 → verifiers-0.2.2.dev57}/tests/test_imports.py +0 -0
- {verifiers-0.2.2.dev48 → verifiers-0.2.2.dev57}/tests/test_init_script.py +0 -0
- {verifiers-0.2.2.dev48 → verifiers-0.2.2.dev57}/tests/test_install_utils.py +0 -0
- {verifiers-0.2.2.dev48 → verifiers-0.2.2.dev57}/tests/test_interception_utils.py +0 -0
- {verifiers-0.2.2.dev48 → verifiers-0.2.2.dev57}/tests/test_logging.py +0 -0
- {verifiers-0.2.2.dev48 → verifiers-0.2.2.dev57}/tests/test_math_rubric.py +0 -0
- {verifiers-0.2.2.dev48 → verifiers-0.2.2.dev57}/tests/test_maybe_think_parser.py +0 -0
- {verifiers-0.2.2.dev48 → verifiers-0.2.2.dev57}/tests/test_message_utils.py +0 -0
- {verifiers-0.2.2.dev48 → verifiers-0.2.2.dev57}/tests/test_message_utils_multimodal.py +0 -0
- {verifiers-0.2.2.dev48 → verifiers-0.2.2.dev57}/tests/test_multiturn_env.py +0 -0
- {verifiers-0.2.2.dev48 → verifiers-0.2.2.dev57}/tests/test_nemorl_client.py +0 -0
- {verifiers-0.2.2.dev48 → verifiers-0.2.2.dev57}/tests/test_openai_chat_completions_token_client.py +0 -0
- {verifiers-0.2.2.dev48 → verifiers-0.2.2.dev57}/tests/test_openai_responses_client.py +0 -0
- {verifiers-0.2.2.dev48 → verifiers-0.2.2.dev57}/tests/test_opencode_rlm_env.py +0 -0
- {verifiers-0.2.2.dev48 → verifiers-0.2.2.dev57}/tests/test_openenv_client.py +0 -0
- {verifiers-0.2.2.dev48 → verifiers-0.2.2.dev57}/tests/test_parser.py +0 -0
- {verifiers-0.2.2.dev48 → verifiers-0.2.2.dev57}/tests/test_path_utils.py +0 -0
- {verifiers-0.2.2.dev48 → verifiers-0.2.2.dev57}/tests/test_per_turn_timing.py +0 -0
- {verifiers-0.2.2.dev48 → verifiers-0.2.2.dev57}/tests/test_pricing_utils.py +0 -0
- {verifiers-0.2.2.dev48 → verifiers-0.2.2.dev57}/tests/test_prime_plugin.py +0 -0
- {verifiers-0.2.2.dev48 → verifiers-0.2.2.dev57}/tests/test_renderer_client.py +0 -0
- {verifiers-0.2.2.dev48 → verifiers-0.2.2.dev57}/tests/test_renderer_e2e.py +0 -0
- {verifiers-0.2.2.dev48 → verifiers-0.2.2.dev57}/tests/test_rlm_composable_env.py +0 -0
- {verifiers-0.2.2.dev48 → verifiers-0.2.2.dev57}/tests/test_rubric.py +0 -0
- {verifiers-0.2.2.dev48 → verifiers-0.2.2.dev57}/tests/test_rubric_group.py +0 -0
- {verifiers-0.2.2.dev48 → verifiers-0.2.2.dev57}/tests/test_sandbox_debug_env.py +0 -0
- {verifiers-0.2.2.dev48 → verifiers-0.2.2.dev57}/tests/test_sandbox_env.py +0 -0
- {verifiers-0.2.2.dev48 → verifiers-0.2.2.dev57}/tests/test_sandbox_mixin.py +0 -0
- {verifiers-0.2.2.dev48 → verifiers-0.2.2.dev57}/tests/test_save_utils.py +0 -0
- {verifiers-0.2.2.dev48 → verifiers-0.2.2.dev57}/tests/test_setup_script.py +0 -0
- {verifiers-0.2.2.dev48 → verifiers-0.2.2.dev57}/tests/test_singleturn_env.py +0 -0
- {verifiers-0.2.2.dev48 → verifiers-0.2.2.dev57}/tests/test_stateful_tool_env.py +0 -0
- {verifiers-0.2.2.dev48 → verifiers-0.2.2.dev57}/tests/test_think_parser.py +0 -0
- {verifiers-0.2.2.dev48 → verifiers-0.2.2.dev57}/tests/test_tool_env.py +0 -0
- {verifiers-0.2.2.dev48 → verifiers-0.2.2.dev57}/tests/test_tool_utils.py +0 -0
- {verifiers-0.2.2.dev48 → verifiers-0.2.2.dev57}/tests/test_trajectory_processing.py +0 -0
- {verifiers-0.2.2.dev48 → verifiers-0.2.2.dev57}/tests/test_tui_info_formatting.py +0 -0
- {verifiers-0.2.2.dev48 → verifiers-0.2.2.dev57}/tests/test_types.py +0 -0
- {verifiers-0.2.2.dev48 → verifiers-0.2.2.dev57}/tests/test_xml_parser.py +0 -0
- {verifiers-0.2.2.dev48 → verifiers-0.2.2.dev57}/tests/v1/fixtures/duet_v1.py +0 -0
- {verifiers-0.2.2.dev48 → verifiers-0.2.2.dev57}/tests/v1/fixtures/echo_agentic_v1.py +0 -0
- {verifiers-0.2.2.dev48 → verifiers-0.2.2.dev57}/tests/v1/fixtures/echo_multi_v0.py +0 -0
- {verifiers-0.2.2.dev48 → verifiers-0.2.2.dev57}/tests/v1/fixtures/echo_user_sim_v1.py +0 -0
- {verifiers-0.2.2.dev48 → verifiers-0.2.2.dev57}/tests/v1/fixtures/echo_v0.py +0 -0
- {verifiers-0.2.2.dev48 → verifiers-0.2.2.dev57}/tests/v1/fixtures/echo_v1.py +0 -0
- {verifiers-0.2.2.dev48 → verifiers-0.2.2.dev57}/tests/v1/fixtures/pyproject.toml +0 -0
- {verifiers-0.2.2.dev48 → verifiers-0.2.2.dev57}/tests/v1/test_configs.py +0 -0
- {verifiers-0.2.2.dev48 → verifiers-0.2.2.dev57}/tests/v1/test_envs.py +0 -0
- {verifiers-0.2.2.dev48 → verifiers-0.2.2.dev57}/tests/v1/test_legacy.py +0 -0
- {verifiers-0.2.2.dev48 → verifiers-0.2.2.dev57}/tests/v1/test_scoring.py +0 -0
- {verifiers-0.2.2.dev48 → verifiers-0.2.2.dev57}/verifiers/__init__.py +0 -0
- {verifiers-0.2.2.dev48 → verifiers-0.2.2.dev57}/verifiers/cli/__init__.py +0 -0
- {verifiers-0.2.2.dev48 → verifiers-0.2.2.dev57}/verifiers/cli/commands/__init__.py +0 -0
- {verifiers-0.2.2.dev48 → verifiers-0.2.2.dev57}/verifiers/cli/commands/build.py +0 -0
- {verifiers-0.2.2.dev48 → verifiers-0.2.2.dev57}/verifiers/cli/commands/eval.py +0 -0
- {verifiers-0.2.2.dev48 → verifiers-0.2.2.dev57}/verifiers/cli/commands/gepa.py +0 -0
- {verifiers-0.2.2.dev48 → verifiers-0.2.2.dev57}/verifiers/cli/commands/init.py +0 -0
- {verifiers-0.2.2.dev48 → verifiers-0.2.2.dev57}/verifiers/cli/commands/install.py +0 -0
- {verifiers-0.2.2.dev48 → verifiers-0.2.2.dev57}/verifiers/cli/commands/setup.py +0 -0
- {verifiers-0.2.2.dev48 → verifiers-0.2.2.dev57}/verifiers/cli/plugins/__init__.py +0 -0
- {verifiers-0.2.2.dev48 → verifiers-0.2.2.dev57}/verifiers/cli/plugins/prime.py +0 -0
- {verifiers-0.2.2.dev48 → verifiers-0.2.2.dev57}/verifiers/cli/tui.py +0 -0
- {verifiers-0.2.2.dev48 → verifiers-0.2.2.dev57}/verifiers/clients/__init__.py +0 -0
- {verifiers-0.2.2.dev48 → verifiers-0.2.2.dev57}/verifiers/clients/anthropic_messages_client.py +0 -0
- {verifiers-0.2.2.dev48 → verifiers-0.2.2.dev57}/verifiers/clients/client.py +0 -0
- {verifiers-0.2.2.dev48 → verifiers-0.2.2.dev57}/verifiers/clients/nemorl_chat_completions_client.py +0 -0
- {verifiers-0.2.2.dev48 → verifiers-0.2.2.dev57}/verifiers/clients/openai_chat_completions_client.py +0 -0
- {verifiers-0.2.2.dev48 → verifiers-0.2.2.dev57}/verifiers/clients/openai_chat_completions_token_client.py +0 -0
- {verifiers-0.2.2.dev48 → verifiers-0.2.2.dev57}/verifiers/clients/openai_completions_client.py +0 -0
- {verifiers-0.2.2.dev48 → verifiers-0.2.2.dev57}/verifiers/clients/openai_responses_client.py +0 -0
- {verifiers-0.2.2.dev48 → verifiers-0.2.2.dev57}/verifiers/clients/renderer_client.py +0 -0
- {verifiers-0.2.2.dev48 → verifiers-0.2.2.dev57}/verifiers/decorators.py +0 -0
- {verifiers-0.2.2.dev48 → verifiers-0.2.2.dev57}/verifiers/envs/__init__.py +0 -0
- {verifiers-0.2.2.dev48 → verifiers-0.2.2.dev57}/verifiers/envs/env_group.py +0 -0
- {verifiers-0.2.2.dev48 → verifiers-0.2.2.dev57}/verifiers/envs/environment.py +0 -0
- {verifiers-0.2.2.dev48 → verifiers-0.2.2.dev57}/verifiers/envs/experimental/README.md +0 -0
- {verifiers-0.2.2.dev48 → verifiers-0.2.2.dev57}/verifiers/envs/experimental/__init__.py +0 -0
- {verifiers-0.2.2.dev48 → verifiers-0.2.2.dev57}/verifiers/envs/experimental/cli_agent_env.py +0 -0
- {verifiers-0.2.2.dev48 → verifiers-0.2.2.dev57}/verifiers/envs/experimental/composable/README.md +0 -0
- {verifiers-0.2.2.dev48 → verifiers-0.2.2.dev57}/verifiers/envs/experimental/composable/__init__.py +0 -0
- {verifiers-0.2.2.dev48 → verifiers-0.2.2.dev57}/verifiers/envs/experimental/composable/_filter.py +0 -0
- {verifiers-0.2.2.dev48 → verifiers-0.2.2.dev57}/verifiers/envs/experimental/composable/composable_env.py +0 -0
- {verifiers-0.2.2.dev48 → verifiers-0.2.2.dev57}/verifiers/envs/experimental/composable/harness.py +0 -0
- {verifiers-0.2.2.dev48 → verifiers-0.2.2.dev57}/verifiers/envs/experimental/composable/harnesses/__init__.py +0 -0
- {verifiers-0.2.2.dev48 → verifiers-0.2.2.dev57}/verifiers/envs/experimental/composable/harnesses/mini_swe_agent.py +0 -0
- {verifiers-0.2.2.dev48 → verifiers-0.2.2.dev57}/verifiers/envs/experimental/composable/harnesses/opencode.py +0 -0
- {verifiers-0.2.2.dev48 → verifiers-0.2.2.dev57}/verifiers/envs/experimental/composable/harnesses/prompt.txt +0 -0
- {verifiers-0.2.2.dev48 → verifiers-0.2.2.dev57}/verifiers/envs/experimental/composable/harnesses/rlm.py +0 -0
- {verifiers-0.2.2.dev48 → verifiers-0.2.2.dev57}/verifiers/envs/experimental/composable/sandbox_debug_env.py +0 -0
- {verifiers-0.2.2.dev48 → verifiers-0.2.2.dev57}/verifiers/envs/experimental/composable/swe_debug_env.py +0 -0
- {verifiers-0.2.2.dev48 → verifiers-0.2.2.dev57}/verifiers/envs/experimental/composable/task.py +0 -0
- {verifiers-0.2.2.dev48 → verifiers-0.2.2.dev57}/verifiers/envs/experimental/composable/tasksets/__init__.py +0 -0
- {verifiers-0.2.2.dev48 → verifiers-0.2.2.dev57}/verifiers/envs/experimental/composable/tasksets/cp/__init__.py +0 -0
- {verifiers-0.2.2.dev48 → verifiers-0.2.2.dev57}/verifiers/envs/experimental/composable/tasksets/cp/cp_task.py +0 -0
- {verifiers-0.2.2.dev48 → verifiers-0.2.2.dev57}/verifiers/envs/experimental/composable/tasksets/cp/test_utils.py +0 -0
- {verifiers-0.2.2.dev48 → verifiers-0.2.2.dev57}/verifiers/envs/experimental/composable/tasksets/harbor/__init__.py +0 -0
- {verifiers-0.2.2.dev48 → verifiers-0.2.2.dev57}/verifiers/envs/experimental/composable/tasksets/harbor/cli_gym.py +0 -0
- {verifiers-0.2.2.dev48 → verifiers-0.2.2.dev57}/verifiers/envs/experimental/composable/tasksets/harbor/harbor.py +0 -0
- {verifiers-0.2.2.dev48 → verifiers-0.2.2.dev57}/verifiers/envs/experimental/composable/tasksets/harbor/terminal_lego.py +0 -0
- {verifiers-0.2.2.dev48 → verifiers-0.2.2.dev57}/verifiers/envs/experimental/composable/tasksets/math/__init__.py +0 -0
- {verifiers-0.2.2.dev48 → verifiers-0.2.2.dev57}/verifiers/envs/experimental/composable/tasksets/math/math_task.py +0 -0
- {verifiers-0.2.2.dev48 → verifiers-0.2.2.dev57}/verifiers/envs/experimental/composable/tasksets/swe/README.md +0 -0
- {verifiers-0.2.2.dev48 → verifiers-0.2.2.dev57}/verifiers/envs/experimental/composable/tasksets/swe/__init__.py +0 -0
- {verifiers-0.2.2.dev48 → verifiers-0.2.2.dev57}/verifiers/envs/experimental/composable/tasksets/swe/multi_swe/__init__.py +0 -0
- {verifiers-0.2.2.dev48 → verifiers-0.2.2.dev57}/verifiers/envs/experimental/composable/tasksets/swe/multi_swe/extract_fix_patch.sh +0 -0
- {verifiers-0.2.2.dev48 → verifiers-0.2.2.dev57}/verifiers/envs/experimental/composable/tasksets/swe/multi_swe/taskset.py +0 -0
- {verifiers-0.2.2.dev48 → verifiers-0.2.2.dev57}/verifiers/envs/experimental/composable/tasksets/swe/openswe/__init__.py +0 -0
- {verifiers-0.2.2.dev48 → verifiers-0.2.2.dev57}/verifiers/envs/experimental/composable/tasksets/swe/openswe/taskset.py +0 -0
- {verifiers-0.2.2.dev48 → verifiers-0.2.2.dev57}/verifiers/envs/experimental/composable/tasksets/swe/r2e_gym/__init__.py +0 -0
- {verifiers-0.2.2.dev48 → verifiers-0.2.2.dev57}/verifiers/envs/experimental/composable/tasksets/swe/r2e_gym/log_parser.py +0 -0
- {verifiers-0.2.2.dev48 → verifiers-0.2.2.dev57}/verifiers/envs/experimental/composable/tasksets/swe/r2e_gym/taskset.py +0 -0
- {verifiers-0.2.2.dev48 → verifiers-0.2.2.dev57}/verifiers/envs/experimental/composable/tasksets/swe/scale_swe/__init__.py +0 -0
- {verifiers-0.2.2.dev48 → verifiers-0.2.2.dev57}/verifiers/envs/experimental/composable/tasksets/swe/scale_swe/taskset.py +0 -0
- {verifiers-0.2.2.dev48 → verifiers-0.2.2.dev57}/verifiers/envs/experimental/composable/tasksets/swe/shared/__init__.py +0 -0
- {verifiers-0.2.2.dev48 → verifiers-0.2.2.dev57}/verifiers/envs/experimental/composable/tasksets/swe/shared/test_patch.py +0 -0
- {verifiers-0.2.2.dev48 → verifiers-0.2.2.dev57}/verifiers/envs/experimental/composable/tasksets/swe/swe_bench/__init__.py +0 -0
- {verifiers-0.2.2.dev48 → verifiers-0.2.2.dev57}/verifiers/envs/experimental/composable/tasksets/swe/swe_bench/taskset.py +0 -0
- {verifiers-0.2.2.dev48 → verifiers-0.2.2.dev57}/verifiers/envs/experimental/composable/tasksets/swe/swe_lego/__init__.py +0 -0
- {verifiers-0.2.2.dev48 → verifiers-0.2.2.dev57}/verifiers/envs/experimental/composable/tasksets/swe/swe_lego/taskset.py +0 -0
- {verifiers-0.2.2.dev48 → verifiers-0.2.2.dev57}/verifiers/envs/experimental/composable/tasksets/swe/swe_rebench_v2/__init__.py +0 -0
- {verifiers-0.2.2.dev48 → verifiers-0.2.2.dev57}/verifiers/envs/experimental/composable/tasksets/swe/swe_rebench_v2/log_parsers.py +0 -0
- {verifiers-0.2.2.dev48 → verifiers-0.2.2.dev57}/verifiers/envs/experimental/composable/tasksets/swe/swe_rebench_v2/taskset.py +0 -0
- {verifiers-0.2.2.dev48 → verifiers-0.2.2.dev57}/verifiers/envs/experimental/composable/tasksets/swe/swe_smith/__init__.py +0 -0
- {verifiers-0.2.2.dev48 → verifiers-0.2.2.dev57}/verifiers/envs/experimental/composable/tasksets/swe/swe_smith/taskset.py +0 -0
- {verifiers-0.2.2.dev48 → verifiers-0.2.2.dev57}/verifiers/envs/experimental/composable/tasksets/swe/swe_tasksets.py +0 -0
- {verifiers-0.2.2.dev48 → verifiers-0.2.2.dev57}/verifiers/envs/experimental/gym_env.py +0 -0
- {verifiers-0.2.2.dev48 → verifiers-0.2.2.dev57}/verifiers/envs/experimental/harbor_env/__init__.py +0 -0
- {verifiers-0.2.2.dev48 → verifiers-0.2.2.dev57}/verifiers/envs/experimental/harbor_env/env.py +0 -0
- {verifiers-0.2.2.dev48 → verifiers-0.2.2.dev57}/verifiers/envs/experimental/harbor_env/mcp.py +0 -0
- {verifiers-0.2.2.dev48 → verifiers-0.2.2.dev57}/verifiers/envs/experimental/mcp_env.py +0 -0
- {verifiers-0.2.2.dev48 → verifiers-0.2.2.dev57}/verifiers/envs/experimental/opencode_env.py +0 -0
- {verifiers-0.2.2.dev48 → verifiers-0.2.2.dev57}/verifiers/envs/experimental/opencode_qa_env.py +0 -0
- {verifiers-0.2.2.dev48 → verifiers-0.2.2.dev57}/verifiers/envs/experimental/opencode_rlm_env.py +0 -0
- {verifiers-0.2.2.dev48 → verifiers-0.2.2.dev57}/verifiers/envs/experimental/sandbox_mixin.py +0 -0
- {verifiers-0.2.2.dev48 → verifiers-0.2.2.dev57}/verifiers/envs/experimental/utils/__init__.py +0 -0
- {verifiers-0.2.2.dev48 → verifiers-0.2.2.dev57}/verifiers/envs/experimental/utils/file_locks.py +0 -0
- {verifiers-0.2.2.dev48 → verifiers-0.2.2.dev57}/verifiers/envs/experimental/utils/git_checkout_cache.py +0 -0
- {verifiers-0.2.2.dev48 → verifiers-0.2.2.dev57}/verifiers/envs/integrations/README.md +0 -0
- {verifiers-0.2.2.dev48 → verifiers-0.2.2.dev57}/verifiers/envs/integrations/__init__.py +0 -0
- {verifiers-0.2.2.dev48 → verifiers-0.2.2.dev57}/verifiers/envs/integrations/browser_env/README.md +0 -0
- {verifiers-0.2.2.dev48 → verifiers-0.2.2.dev57}/verifiers/envs/integrations/browser_env/__init__.py +0 -0
- {verifiers-0.2.2.dev48 → verifiers-0.2.2.dev57}/verifiers/envs/integrations/browser_env/browser_env.py +0 -0
- {verifiers-0.2.2.dev48 → verifiers-0.2.2.dev57}/verifiers/envs/integrations/browser_env/modes/__init__.py +0 -0
- {verifiers-0.2.2.dev48 → verifiers-0.2.2.dev57}/verifiers/envs/integrations/browser_env/modes/base.py +0 -0
- {verifiers-0.2.2.dev48 → verifiers-0.2.2.dev57}/verifiers/envs/integrations/browser_env/modes/cua_mode.py +0 -0
- {verifiers-0.2.2.dev48 → verifiers-0.2.2.dev57}/verifiers/envs/integrations/browser_env/modes/dom_mode.py +0 -0
- {verifiers-0.2.2.dev48 → verifiers-0.2.2.dev57}/verifiers/envs/integrations/openenv_env.py +0 -0
- {verifiers-0.2.2.dev48 → verifiers-0.2.2.dev57}/verifiers/envs/integrations/reasoninggym_env.py +0 -0
- {verifiers-0.2.2.dev48 → verifiers-0.2.2.dev57}/verifiers/envs/integrations/textarena_env.py +0 -0
- {verifiers-0.2.2.dev48 → verifiers-0.2.2.dev57}/verifiers/envs/multiturn_env.py +0 -0
- {verifiers-0.2.2.dev48 → verifiers-0.2.2.dev57}/verifiers/envs/python_env.py +0 -0
- {verifiers-0.2.2.dev48 → verifiers-0.2.2.dev57}/verifiers/envs/sandbox_env.py +0 -0
- {verifiers-0.2.2.dev48 → verifiers-0.2.2.dev57}/verifiers/envs/singleturn_env.py +0 -0
- {verifiers-0.2.2.dev48 → verifiers-0.2.2.dev57}/verifiers/envs/stateful_tool_env.py +0 -0
- {verifiers-0.2.2.dev48 → verifiers-0.2.2.dev57}/verifiers/envs/tool_env.py +0 -0
- {verifiers-0.2.2.dev48 → verifiers-0.2.2.dev57}/verifiers/errors.py +0 -0
- {verifiers-0.2.2.dev48 → verifiers-0.2.2.dev57}/verifiers/gepa/__init__.py +0 -0
- {verifiers-0.2.2.dev48 → verifiers-0.2.2.dev57}/verifiers/gepa/adapter.py +0 -0
- {verifiers-0.2.2.dev48 → verifiers-0.2.2.dev57}/verifiers/gepa/config.py +0 -0
- {verifiers-0.2.2.dev48 → verifiers-0.2.2.dev57}/verifiers/gepa/display.py +0 -0
- {verifiers-0.2.2.dev48 → verifiers-0.2.2.dev57}/verifiers/gepa/gepa_utils.py +0 -0
- {verifiers-0.2.2.dev48 → verifiers-0.2.2.dev57}/verifiers/parsers/__init__.py +0 -0
- {verifiers-0.2.2.dev48 → verifiers-0.2.2.dev57}/verifiers/parsers/maybe_think_parser.py +0 -0
- {verifiers-0.2.2.dev48 → verifiers-0.2.2.dev57}/verifiers/parsers/parser.py +0 -0
- {verifiers-0.2.2.dev48 → verifiers-0.2.2.dev57}/verifiers/parsers/think_parser.py +0 -0
- {verifiers-0.2.2.dev48 → verifiers-0.2.2.dev57}/verifiers/parsers/xml_parser.py +0 -0
- {verifiers-0.2.2.dev48 → verifiers-0.2.2.dev57}/verifiers/rubrics/__init__.py +0 -0
- {verifiers-0.2.2.dev48 → verifiers-0.2.2.dev57}/verifiers/rubrics/experimental/hybrid_math_rubric.py +0 -0
- {verifiers-0.2.2.dev48 → verifiers-0.2.2.dev57}/verifiers/rubrics/judge_rubric.py +0 -0
- {verifiers-0.2.2.dev48 → verifiers-0.2.2.dev57}/verifiers/rubrics/math_rubric.py +0 -0
- {verifiers-0.2.2.dev48 → verifiers-0.2.2.dev57}/verifiers/rubrics/rubric.py +0 -0
- {verifiers-0.2.2.dev48 → verifiers-0.2.2.dev57}/verifiers/rubrics/rubric_group.py +0 -0
- {verifiers-0.2.2.dev48 → verifiers-0.2.2.dev57}/verifiers/scripts/__init__.py +0 -0
- {verifiers-0.2.2.dev48 → verifiers-0.2.2.dev57}/verifiers/scripts/build.py +0 -0
- {verifiers-0.2.2.dev48 → verifiers-0.2.2.dev57}/verifiers/scripts/eval.py +0 -0
- {verifiers-0.2.2.dev48 → verifiers-0.2.2.dev57}/verifiers/scripts/gepa.py +0 -0
- {verifiers-0.2.2.dev48 → verifiers-0.2.2.dev57}/verifiers/scripts/init.py +0 -0
- {verifiers-0.2.2.dev48 → verifiers-0.2.2.dev57}/verifiers/scripts/install.py +0 -0
- {verifiers-0.2.2.dev48 → verifiers-0.2.2.dev57}/verifiers/scripts/setup.py +0 -0
- {verifiers-0.2.2.dev48 → verifiers-0.2.2.dev57}/verifiers/scripts/tui.py +0 -0
- {verifiers-0.2.2.dev48 → verifiers-0.2.2.dev57}/verifiers/serve/__init__.py +0 -0
- {verifiers-0.2.2.dev48 → verifiers-0.2.2.dev57}/verifiers/serve/client/env_client.py +0 -0
- {verifiers-0.2.2.dev48 → verifiers-0.2.2.dev57}/verifiers/serve/client/zmq_env_client.py +0 -0
- {verifiers-0.2.2.dev48 → verifiers-0.2.2.dev57}/verifiers/serve/server/__init__.py +0 -0
- {verifiers-0.2.2.dev48 → verifiers-0.2.2.dev57}/verifiers/serve/server/env_router.py +0 -0
- {verifiers-0.2.2.dev48 → verifiers-0.2.2.dev57}/verifiers/serve/server/env_server.py +0 -0
- {verifiers-0.2.2.dev48 → verifiers-0.2.2.dev57}/verifiers/serve/server/env_worker.py +0 -0
- {verifiers-0.2.2.dev48 → verifiers-0.2.2.dev57}/verifiers/serve/server/zmq_env_server.py +0 -0
- {verifiers-0.2.2.dev48 → verifiers-0.2.2.dev57}/verifiers/serve/types.py +0 -0
- {verifiers-0.2.2.dev48 → verifiers-0.2.2.dev57}/verifiers/types.py +0 -0
- {verifiers-0.2.2.dev48 → verifiers-0.2.2.dev57}/verifiers/utils/__init__.py +0 -0
- {verifiers-0.2.2.dev48 → verifiers-0.2.2.dev57}/verifiers/utils/async_utils.py +0 -0
- {verifiers-0.2.2.dev48 → verifiers-0.2.2.dev57}/verifiers/utils/client_utils.py +0 -0
- {verifiers-0.2.2.dev48 → verifiers-0.2.2.dev57}/verifiers/utils/config_utils.py +0 -0
- {verifiers-0.2.2.dev48 → verifiers-0.2.2.dev57}/verifiers/utils/data_utils.py +0 -0
- {verifiers-0.2.2.dev48 → verifiers-0.2.2.dev57}/verifiers/utils/display_utils.py +0 -0
- {verifiers-0.2.2.dev48 → verifiers-0.2.2.dev57}/verifiers/utils/env_config_utils.py +0 -0
- {verifiers-0.2.2.dev48 → verifiers-0.2.2.dev57}/verifiers/utils/env_utils.py +0 -0
- {verifiers-0.2.2.dev48 → verifiers-0.2.2.dev57}/verifiers/utils/error_utils.py +0 -0
- {verifiers-0.2.2.dev48 → verifiers-0.2.2.dev57}/verifiers/utils/eval_display.py +0 -0
- {verifiers-0.2.2.dev48 → verifiers-0.2.2.dev57}/verifiers/utils/eval_utils.py +0 -0
- {verifiers-0.2.2.dev48 → verifiers-0.2.2.dev57}/verifiers/utils/heartbeat.py +0 -0
- {verifiers-0.2.2.dev48 → verifiers-0.2.2.dev57}/verifiers/utils/import_utils.py +0 -0
- {verifiers-0.2.2.dev48 → verifiers-0.2.2.dev57}/verifiers/utils/install_utils.py +0 -0
- {verifiers-0.2.2.dev48 → verifiers-0.2.2.dev57}/verifiers/utils/interception_utils.py +0 -0
- {verifiers-0.2.2.dev48 → verifiers-0.2.2.dev57}/verifiers/utils/logging_utils.py +0 -0
- {verifiers-0.2.2.dev48 → verifiers-0.2.2.dev57}/verifiers/utils/message_utils.py +0 -0
- {verifiers-0.2.2.dev48 → verifiers-0.2.2.dev57}/verifiers/utils/metric_utils.py +0 -0
- {verifiers-0.2.2.dev48 → verifiers-0.2.2.dev57}/verifiers/utils/path_utils.py +0 -0
- {verifiers-0.2.2.dev48 → verifiers-0.2.2.dev57}/verifiers/utils/pricing_utils.py +0 -0
- {verifiers-0.2.2.dev48 → verifiers-0.2.2.dev57}/verifiers/utils/process_utils.py +0 -0
- {verifiers-0.2.2.dev48 → verifiers-0.2.2.dev57}/verifiers/utils/response_utils.py +0 -0
- {verifiers-0.2.2.dev48 → verifiers-0.2.2.dev57}/verifiers/utils/save_utils.py +0 -0
- {verifiers-0.2.2.dev48 → verifiers-0.2.2.dev57}/verifiers/utils/serve_utils.py +0 -0
- {verifiers-0.2.2.dev48 → verifiers-0.2.2.dev57}/verifiers/utils/thread_utils.py +0 -0
- {verifiers-0.2.2.dev48 → verifiers-0.2.2.dev57}/verifiers/utils/threaded_sandbox_client.py +0 -0
- {verifiers-0.2.2.dev48 → verifiers-0.2.2.dev57}/verifiers/utils/tool_utils.py +0 -0
- {verifiers-0.2.2.dev48 → verifiers-0.2.2.dev57}/verifiers/utils/usage_utils.py +0 -0
- {verifiers-0.2.2.dev48 → verifiers-0.2.2.dev57}/verifiers/utils/version_utils.py +0 -0
- {verifiers-0.2.2.dev48 → verifiers-0.2.2.dev57}/verifiers/v1/acp/__init__.py +0 -0
- {verifiers-0.2.2.dev48 → verifiers-0.2.2.dev57}/verifiers/v1/acp/_runner.py +0 -0
- {verifiers-0.2.2.dev48 → verifiers-0.2.2.dev57}/verifiers/v1/cli/__init__.py +0 -0
- {verifiers-0.2.2.dev48 → verifiers-0.2.2.dev57}/verifiers/v1/cli/dashboard/__init__.py +0 -0
- {verifiers-0.2.2.dev48 → verifiers-0.2.2.dev57}/verifiers/v1/cli/dashboard/base.py +0 -0
- {verifiers-0.2.2.dev48 → verifiers-0.2.2.dev57}/verifiers/v1/cli/dashboard/replay.py +0 -0
- {verifiers-0.2.2.dev48 → verifiers-0.2.2.dev57}/verifiers/v1/cli/dashboard/validate.py +0 -0
- {verifiers-0.2.2.dev48 → verifiers-0.2.2.dev57}/verifiers/v1/cli/eval/__init__.py +0 -0
- {verifiers-0.2.2.dev48 → verifiers-0.2.2.dev57}/verifiers/v1/cli/eval/main.py +0 -0
- {verifiers-0.2.2.dev48 → verifiers-0.2.2.dev57}/verifiers/v1/cli/eval/resume.py +0 -0
- {verifiers-0.2.2.dev48 → verifiers-0.2.2.dev57}/verifiers/v1/cli/gepa.py +0 -0
- {verifiers-0.2.2.dev48 → verifiers-0.2.2.dev57}/verifiers/v1/cli/output.py +0 -0
- {verifiers-0.2.2.dev48 → verifiers-0.2.2.dev57}/verifiers/v1/cli/resolve.py +0 -0
- {verifiers-0.2.2.dev48 → verifiers-0.2.2.dev57}/verifiers/v1/cli/serve.py +0 -0
- {verifiers-0.2.2.dev48 → verifiers-0.2.2.dev57}/verifiers/v1/clients/__init__.py +0 -0
- {verifiers-0.2.2.dev48 → verifiers-0.2.2.dev57}/verifiers/v1/clients/client.py +0 -0
- {verifiers-0.2.2.dev48 → verifiers-0.2.2.dev57}/verifiers/v1/clients/config.py +0 -0
- {verifiers-0.2.2.dev48 → verifiers-0.2.2.dev57}/verifiers/v1/clients/eval.py +0 -0
- {verifiers-0.2.2.dev48 → verifiers-0.2.2.dev57}/verifiers/v1/clients/train.py +0 -0
- {verifiers-0.2.2.dev48 → verifiers-0.2.2.dev57}/verifiers/v1/configs/__init__.py +0 -0
- {verifiers-0.2.2.dev48 → verifiers-0.2.2.dev57}/verifiers/v1/configs/agent.py +0 -0
- {verifiers-0.2.2.dev48 → verifiers-0.2.2.dev57}/verifiers/v1/configs/cli/__init__.py +0 -0
- {verifiers-0.2.2.dev48 → verifiers-0.2.2.dev57}/verifiers/v1/configs/cli/debug.py +0 -0
- {verifiers-0.2.2.dev48 → verifiers-0.2.2.dev57}/verifiers/v1/configs/cli/env.py +0 -0
- {verifiers-0.2.2.dev48 → verifiers-0.2.2.dev57}/verifiers/v1/configs/cli/eval.py +0 -0
- {verifiers-0.2.2.dev48 → verifiers-0.2.2.dev57}/verifiers/v1/configs/cli/init.py +0 -0
- {verifiers-0.2.2.dev48 → verifiers-0.2.2.dev57}/verifiers/v1/configs/cli/replay.py +0 -0
- {verifiers-0.2.2.dev48 → verifiers-0.2.2.dev57}/verifiers/v1/configs/cli/serve.py +0 -0
- {verifiers-0.2.2.dev48 → verifiers-0.2.2.dev57}/verifiers/v1/configs/cli/validate.py +0 -0
- {verifiers-0.2.2.dev48 → verifiers-0.2.2.dev57}/verifiers/v1/configs/env.py +0 -0
- {verifiers-0.2.2.dev48 → verifiers-0.2.2.dev57}/verifiers/v1/configs/harness.py +0 -0
- {verifiers-0.2.2.dev48 → verifiers-0.2.2.dev57}/verifiers/v1/configs/legacy.py +0 -0
- {verifiers-0.2.2.dev48 → verifiers-0.2.2.dev57}/verifiers/v1/configs/retries.py +0 -0
- {verifiers-0.2.2.dev48 → verifiers-0.2.2.dev57}/verifiers/v1/configs/serve.py +0 -0
- {verifiers-0.2.2.dev48 → verifiers-0.2.2.dev57}/verifiers/v1/configs/task.py +0 -0
- {verifiers-0.2.2.dev48 → verifiers-0.2.2.dev57}/verifiers/v1/decorators.py +0 -0
- {verifiers-0.2.2.dev48 → verifiers-0.2.2.dev57}/verifiers/v1/dialects/__init__.py +0 -0
- {verifiers-0.2.2.dev48 → verifiers-0.2.2.dev57}/verifiers/v1/dialects/anthropic.py +0 -0
- {verifiers-0.2.2.dev48 → verifiers-0.2.2.dev57}/verifiers/v1/dialects/base.py +0 -0
- {verifiers-0.2.2.dev48 → verifiers-0.2.2.dev57}/verifiers/v1/dialects/chat.py +0 -0
- {verifiers-0.2.2.dev48 → verifiers-0.2.2.dev57}/verifiers/v1/dialects/responses.py +0 -0
- {verifiers-0.2.2.dev48 → verifiers-0.2.2.dev57}/verifiers/v1/envs/__init__.py +0 -0
- {verifiers-0.2.2.dev48 → verifiers-0.2.2.dev57}/verifiers/v1/envs/best_of_n/__init__.py +0 -0
- {verifiers-0.2.2.dev48 → verifiers-0.2.2.dev57}/verifiers/v1/envs/best_of_n/env.py +0 -0
- {verifiers-0.2.2.dev48 → verifiers-0.2.2.dev57}/verifiers/v1/envs/single_agent/__init__.py +0 -0
- {verifiers-0.2.2.dev48 → verifiers-0.2.2.dev57}/verifiers/v1/envs/single_agent/env.py +0 -0
- {verifiers-0.2.2.dev48 → verifiers-0.2.2.dev57}/verifiers/v1/envs/user_sim/__init__.py +0 -0
- {verifiers-0.2.2.dev48 → verifiers-0.2.2.dev57}/verifiers/v1/gepa/__init__.py +0 -0
- {verifiers-0.2.2.dev48 → verifiers-0.2.2.dev57}/verifiers/v1/gepa/config.py +0 -0
- {verifiers-0.2.2.dev48 → verifiers-0.2.2.dev57}/verifiers/v1/gepa/dataset.py +0 -0
- {verifiers-0.2.2.dev48 → verifiers-0.2.2.dev57}/verifiers/v1/gepa/reflection.py +0 -0
- {verifiers-0.2.2.dev48 → verifiers-0.2.2.dev57}/verifiers/v1/harness.py +0 -0
- {verifiers-0.2.2.dev48 → verifiers-0.2.2.dev57}/verifiers/v1/harnesses/bash/__init__.py +0 -0
- {verifiers-0.2.2.dev48 → verifiers-0.2.2.dev57}/verifiers/v1/harnesses/bash/harness.py +0 -0
- {verifiers-0.2.2.dev48 → verifiers-0.2.2.dev57}/verifiers/v1/harnesses/bash/program.py +0 -0
- {verifiers-0.2.2.dev48 → verifiers-0.2.2.dev57}/verifiers/v1/harnesses/claude_code/__init__.py +0 -0
- {verifiers-0.2.2.dev48 → verifiers-0.2.2.dev57}/verifiers/v1/harnesses/claude_code/harness.py +0 -0
- {verifiers-0.2.2.dev48 → verifiers-0.2.2.dev57}/verifiers/v1/harnesses/codex/__init__.py +0 -0
- {verifiers-0.2.2.dev48 → verifiers-0.2.2.dev57}/verifiers/v1/harnesses/codex/harness.py +0 -0
- {verifiers-0.2.2.dev48 → verifiers-0.2.2.dev57}/verifiers/v1/harnesses/kimi_code/__init__.py +0 -0
- {verifiers-0.2.2.dev48 → verifiers-0.2.2.dev57}/verifiers/v1/harnesses/kimi_code/harness.py +0 -0
- {verifiers-0.2.2.dev48 → verifiers-0.2.2.dev57}/verifiers/v1/harnesses/mini_swe_agent/__init__.py +0 -0
- {verifiers-0.2.2.dev48 → verifiers-0.2.2.dev57}/verifiers/v1/harnesses/mini_swe_agent/harness.py +0 -0
- {verifiers-0.2.2.dev48 → verifiers-0.2.2.dev57}/verifiers/v1/harnesses/mini_swe_agent/program.py +0 -0
- {verifiers-0.2.2.dev48 → verifiers-0.2.2.dev57}/verifiers/v1/harnesses/null/__init__.py +0 -0
- {verifiers-0.2.2.dev48 → verifiers-0.2.2.dev57}/verifiers/v1/harnesses/null/harness.py +0 -0
- {verifiers-0.2.2.dev48 → verifiers-0.2.2.dev57}/verifiers/v1/harnesses/null/program.py +0 -0
- {verifiers-0.2.2.dev48 → verifiers-0.2.2.dev57}/verifiers/v1/harnesses/pi/__init__.py +0 -0
- {verifiers-0.2.2.dev48 → verifiers-0.2.2.dev57}/verifiers/v1/harnesses/pi/harness.py +0 -0
- {verifiers-0.2.2.dev48 → verifiers-0.2.2.dev57}/verifiers/v1/harnesses/pool/__init__.py +0 -0
- {verifiers-0.2.2.dev48 → verifiers-0.2.2.dev57}/verifiers/v1/harnesses/pool/harness.py +0 -0
- {verifiers-0.2.2.dev48 → verifiers-0.2.2.dev57}/verifiers/v1/harnesses/rlm/__init__.py +0 -0
- {verifiers-0.2.2.dev48 → verifiers-0.2.2.dev57}/verifiers/v1/harnesses/rlm/harness.py +0 -0
- {verifiers-0.2.2.dev48 → verifiers-0.2.2.dev57}/verifiers/v1/harnesses/terminus_2/__init__.py +0 -0
- {verifiers-0.2.2.dev48 → verifiers-0.2.2.dev57}/verifiers/v1/harnesses/terminus_2/harness.py +0 -0
- {verifiers-0.2.2.dev48 → verifiers-0.2.2.dev57}/verifiers/v1/harnesses/terminus_2/program.py +0 -0
- {verifiers-0.2.2.dev48 → verifiers-0.2.2.dev57}/verifiers/v1/interception/__init__.py +0 -0
- {verifiers-0.2.2.dev48 → verifiers-0.2.2.dev57}/verifiers/v1/interception/base.py +0 -0
- {verifiers-0.2.2.dev48 → verifiers-0.2.2.dev57}/verifiers/v1/interception/pool.py +0 -0
- {verifiers-0.2.2.dev48 → verifiers-0.2.2.dev57}/verifiers/v1/interception/server.py +0 -0
- {verifiers-0.2.2.dev48 → verifiers-0.2.2.dev57}/verifiers/v1/interception/tunnel/__init__.py +0 -0
- {verifiers-0.2.2.dev48 → verifiers-0.2.2.dev57}/verifiers/v1/interception/tunnel/base.py +0 -0
- {verifiers-0.2.2.dev48 → verifiers-0.2.2.dev57}/verifiers/v1/interception/tunnel/custom.py +0 -0
- {verifiers-0.2.2.dev48 → verifiers-0.2.2.dev57}/verifiers/v1/interception/tunnel/prime.py +0 -0
- {verifiers-0.2.2.dev48 → verifiers-0.2.2.dev57}/verifiers/v1/judges/__init__.py +0 -0
- {verifiers-0.2.2.dev48 → verifiers-0.2.2.dev57}/verifiers/v1/judges/reference.py +0 -0
- {verifiers-0.2.2.dev48 → verifiers-0.2.2.dev57}/verifiers/v1/judges/reference.txt +0 -0
- {verifiers-0.2.2.dev48 → verifiers-0.2.2.dev57}/verifiers/v1/judges/rubric.txt +0 -0
- {verifiers-0.2.2.dev48 → verifiers-0.2.2.dev57}/verifiers/v1/mcp/__init__.py +0 -0
- {verifiers-0.2.2.dev48 → verifiers-0.2.2.dev57}/verifiers/v1/mcp/toolset.py +0 -0
- {verifiers-0.2.2.dev48 → verifiers-0.2.2.dev57}/verifiers/v1/runtimes/__init__.py +0 -0
- {verifiers-0.2.2.dev48 → verifiers-0.2.2.dev57}/verifiers/v1/runtimes/base.py +0 -0
- {verifiers-0.2.2.dev48 → verifiers-0.2.2.dev57}/verifiers/v1/runtimes/docker/__init__.py +0 -0
- {verifiers-0.2.2.dev48 → verifiers-0.2.2.dev57}/verifiers/v1/runtimes/docker/egress.py +0 -0
- {verifiers-0.2.2.dev48 → verifiers-0.2.2.dev57}/verifiers/v1/runtimes/limiters.py +0 -0
- {verifiers-0.2.2.dev48 → verifiers-0.2.2.dev57}/verifiers/v1/runtimes/modal.py +0 -0
- {verifiers-0.2.2.dev48 → verifiers-0.2.2.dev57}/verifiers/v1/runtimes/prime.py +0 -0
- {verifiers-0.2.2.dev48 → verifiers-0.2.2.dev57}/verifiers/v1/scoring.py +0 -0
- {verifiers-0.2.2.dev48 → verifiers-0.2.2.dev57}/verifiers/v1/serve/__init__.py +0 -0
- {verifiers-0.2.2.dev48 → verifiers-0.2.2.dev57}/verifiers/v1/serve/client.py +0 -0
- {verifiers-0.2.2.dev48 → verifiers-0.2.2.dev57}/verifiers/v1/serve/pool.py +0 -0
- {verifiers-0.2.2.dev48 → verifiers-0.2.2.dev57}/verifiers/v1/serve/types.py +0 -0
- {verifiers-0.2.2.dev48 → verifiers-0.2.2.dev57}/verifiers/v1/session.py +0 -0
- {verifiers-0.2.2.dev48 → verifiers-0.2.2.dev57}/verifiers/v1/tasksets/__init__.py +0 -0
- {verifiers-0.2.2.dev48 → verifiers-0.2.2.dev57}/verifiers/v1/tasksets/harbor/__init__.py +0 -0
- {verifiers-0.2.2.dev48 → verifiers-0.2.2.dev57}/verifiers/v1/tasksets/lean/__init__.py +0 -0
- {verifiers-0.2.2.dev48 → verifiers-0.2.2.dev57}/verifiers/v1/tasksets/lean/scoring.py +0 -0
- {verifiers-0.2.2.dev48 → verifiers-0.2.2.dev57}/verifiers/v1/tasksets/openenv/__init__.py +0 -0
- {verifiers-0.2.2.dev48 → verifiers-0.2.2.dev57}/verifiers/v1/tasksets/openenv/taskset.py +0 -0
- {verifiers-0.2.2.dev48 → verifiers-0.2.2.dev57}/verifiers/v1/tasksets/textarena/__init__.py +0 -0
- {verifiers-0.2.2.dev48 → verifiers-0.2.2.dev57}/verifiers/v1/tasksets/textarena/taskset.py +0 -0
- {verifiers-0.2.2.dev48 → verifiers-0.2.2.dev57}/verifiers/v1/utils/__init__.py +0 -0
- {verifiers-0.2.2.dev48 → verifiers-0.2.2.dev57}/verifiers/v1/utils/aio.py +0 -0
- {verifiers-0.2.2.dev48 → verifiers-0.2.2.dev57}/verifiers/v1/utils/format.py +0 -0
- {verifiers-0.2.2.dev48 → verifiers-0.2.2.dev57}/verifiers/v1/utils/image.py +0 -0
- {verifiers-0.2.2.dev48 → verifiers-0.2.2.dev57}/verifiers/v1/utils/install.py +0 -0
- {verifiers-0.2.2.dev48 → verifiers-0.2.2.dev57}/verifiers/v1/utils/interrupt.py +0 -0
- {verifiers-0.2.2.dev48 → verifiers-0.2.2.dev57}/verifiers/v1/utils/logging.py +0 -0
- {verifiers-0.2.2.dev48 → verifiers-0.2.2.dev57}/verifiers/v1/utils/memory.py +0 -0
- {verifiers-0.2.2.dev48 → verifiers-0.2.2.dev57}/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.dev57
|
|
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
|
|
@@ -136,8 +136,10 @@ kuhn-poker-v1 = { path = "environments/kuhn_poker_v1", editable = true }
|
|
|
136
136
|
|
|
137
137
|
[tool.uv.exclude-newer-package]
|
|
138
138
|
# Bounded cutoffs for the explicitly requested tool upgrades.
|
|
139
|
-
|
|
140
|
-
|
|
139
|
+
# Full UTC timestamps: bare dates resolve to local-tz midnight and churn the
|
|
140
|
+
# lockfile across timezones.
|
|
141
|
+
ruff = "2026-07-28T00:00:00Z"
|
|
142
|
+
ty = "2026-07-28T00:00:00Z"
|
|
141
143
|
# PrimeIntellect-published on PyPI (trusted publisher)
|
|
142
144
|
prime-tunnel = false
|
|
143
145
|
prime-sandboxes = false
|
|
@@ -232,6 +234,7 @@ markers = [
|
|
|
232
234
|
"colocated: v1 e2e cases with a user/tool server colocated in the harness runtime",
|
|
233
235
|
"null: v1 e2e cases on the null harness",
|
|
234
236
|
"bash: v1 e2e cases on the bash harness",
|
|
237
|
+
"browser_use: v1 e2e cases on the browser_use harness",
|
|
235
238
|
"rlm: v1 e2e cases on the rlm harness",
|
|
236
239
|
"kimi_code: v1 e2e cases on the kimi-code harness",
|
|
237
240
|
"pi: v1 e2e cases on the pi harness",
|
|
@@ -135,10 +135,6 @@ def _eval_config(
|
|
|
135
135
|
`{id: ...}` config; `runtime` places the `agent` seat's harness (an agent field, not a
|
|
136
136
|
harness one); `model` overrides the default text model (e.g. a VLM for an image task).
|
|
137
137
|
|
|
138
|
-
`temperature=0` (greedy) makes the run reproducible; `max_tokens` is generous headroom,
|
|
139
|
-
not a target — these trivial tasks finish in a few hundred tokens, so capping tighter only
|
|
140
|
-
risks truncating the reasoning before the answer (which tanks the reward).
|
|
141
|
-
|
|
142
138
|
`harness=None` leaves every seat on its own story — the multi-agent case: there
|
|
143
139
|
is no run-level harness, so a single-agent test's `harness` lands on the `agent`
|
|
144
140
|
seat and a multi-agent test pins its seats through `env` role fields instead."""
|
|
@@ -175,7 +171,6 @@ def _eval_config(
|
|
|
175
171
|
num_rollouts=n,
|
|
176
172
|
sampling={
|
|
177
173
|
"max_tokens": max_tokens,
|
|
178
|
-
"temperature": 0,
|
|
179
174
|
"reasoning_effort": reasoning_effort,
|
|
180
175
|
},
|
|
181
176
|
rich=False,
|
|
@@ -219,8 +214,8 @@ def run_v1_server():
|
|
|
219
214
|
|
|
220
215
|
@pytest.fixture
|
|
221
216
|
async def live_ctx():
|
|
222
|
-
"""A live `ModelContext` (the e2e default model + endpoint,
|
|
223
|
-
`Agent` directly — the agent-surface counterpart of `run_v1`."""
|
|
217
|
+
"""A live `ModelContext` (the e2e default model + endpoint, provider-default
|
|
218
|
+
sampling) for driving `Agent` directly — the agent-surface counterpart of `run_v1`."""
|
|
224
219
|
from verifiers.v1.clients import EvalClientConfig, ModelContext, resolve_client
|
|
225
220
|
from verifiers.v1.types import SamplingConfig
|
|
226
221
|
|
|
@@ -229,7 +224,7 @@ async def live_ctx():
|
|
|
229
224
|
yield ModelContext(
|
|
230
225
|
model="deepseek/deepseek-v4-flash",
|
|
231
226
|
client=client,
|
|
232
|
-
sampling=SamplingConfig(max_tokens=2048
|
|
227
|
+
sampling=SamplingConfig(max_tokens=2048),
|
|
233
228
|
)
|
|
234
229
|
finally:
|
|
235
230
|
await client.close()
|
|
@@ -252,7 +247,7 @@ def run_v0():
|
|
|
252
247
|
legacy={"id": env_id, "args": args or {}},
|
|
253
248
|
num_tasks=1,
|
|
254
249
|
num_rollouts=n,
|
|
255
|
-
sampling={"max_tokens": max_tokens
|
|
250
|
+
sampling={"max_tokens": max_tokens},
|
|
256
251
|
rich=False,
|
|
257
252
|
output_dir=output_dir,
|
|
258
253
|
)
|
|
@@ -24,7 +24,9 @@ class CounterTaskConfig(vf.TaskConfig):
|
|
|
24
24
|
|
|
25
25
|
|
|
26
26
|
class CounterTask(vf.Task[vf.TaskData, CounterState, CounterTaskConfig]):
|
|
27
|
-
|
|
27
|
+
@classmethod
|
|
28
|
+
def toolsets(cls, config: CounterTaskConfig) -> list[vf.Toolset]:
|
|
29
|
+
return [CounterToolset(config.tools)]
|
|
28
30
|
|
|
29
31
|
@vf.reward(weight=1.0)
|
|
30
32
|
async def counted(self, trace: vf.Trace) -> float:
|
|
@@ -28,7 +28,9 @@ class ACPResumeConfig(vf.TasksetConfig):
|
|
|
28
28
|
|
|
29
29
|
|
|
30
30
|
class ACPResumeTask(vf.Task[vf.TaskData, vf.State, ACPResumeTaskConfig]):
|
|
31
|
-
|
|
31
|
+
@classmethod
|
|
32
|
+
def toolsets(cls, config: ACPResumeTaskConfig) -> list[vf.Toolset]:
|
|
33
|
+
return [ResumeToolset(config.tools)]
|
|
32
34
|
|
|
33
35
|
@vf.reward(weight=1.0)
|
|
34
36
|
async def resumed(self, trace: vf.Trace) -> float:
|
|
@@ -29,7 +29,9 @@ class EchoToolTaskConfig(vf.TaskConfig):
|
|
|
29
29
|
|
|
30
30
|
|
|
31
31
|
class EchoToolTask(vf.Task[vf.TaskData, vf.State, EchoToolTaskConfig]):
|
|
32
|
-
|
|
32
|
+
@classmethod
|
|
33
|
+
def toolsets(cls, config: EchoToolTaskConfig) -> list[vf.Toolset]:
|
|
34
|
+
return [EchoToolset(config.tools)]
|
|
33
35
|
|
|
34
36
|
@vf.reward(weight=1.0)
|
|
35
37
|
async def echoed(self, trace: vf.Trace) -> float:
|
|
@@ -26,8 +26,16 @@ class VisionToolset(vf.Toolset[vf.ToolsetConfig]):
|
|
|
26
26
|
]
|
|
27
27
|
|
|
28
28
|
|
|
29
|
-
class
|
|
30
|
-
tools = (
|
|
29
|
+
class ToolResponseImageTaskConfig(vf.TaskConfig):
|
|
30
|
+
tools: vf.ToolsetConfig = vf.ToolsetConfig()
|
|
31
|
+
|
|
32
|
+
|
|
33
|
+
class ToolResponseImageTask(
|
|
34
|
+
vf.Task[vf.TaskData, vf.State, ToolResponseImageTaskConfig]
|
|
35
|
+
):
|
|
36
|
+
@classmethod
|
|
37
|
+
def toolsets(cls, config: ToolResponseImageTaskConfig) -> list[vf.Toolset]:
|
|
38
|
+
return [VisionToolset(config.tools)]
|
|
31
39
|
|
|
32
40
|
@vf.reward(weight=1.0)
|
|
33
41
|
async def preserved_image_tool_result(self, trace: vf.Trace) -> float:
|
|
@@ -39,7 +47,13 @@ class ToolResponseImageTask(vf.Task):
|
|
|
39
47
|
return 0.0
|
|
40
48
|
|
|
41
49
|
|
|
42
|
-
class
|
|
50
|
+
class ToolResponseImageConfig(vf.TasksetConfig):
|
|
51
|
+
task: ToolResponseImageTaskConfig = ToolResponseImageTaskConfig()
|
|
52
|
+
|
|
53
|
+
|
|
54
|
+
class ToolResponseImageTaskset(
|
|
55
|
+
vf.Taskset[ToolResponseImageTask, ToolResponseImageConfig]
|
|
56
|
+
):
|
|
43
57
|
def load(self) -> list[ToolResponseImageTask]:
|
|
44
58
|
return [
|
|
45
59
|
ToolResponseImageTask(
|
|
@@ -10,9 +10,7 @@ def test_color_images_are_rendered_once(monkeypatch) -> None:
|
|
|
10
10
|
return render(image)
|
|
11
11
|
|
|
12
12
|
monkeypatch.setattr(taskset, "image_data_url", counted)
|
|
13
|
-
tasks = taskset.ColorCodewordTaskset(taskset.ColorCodewordConfig()).
|
|
14
|
-
num_tasks=100
|
|
15
|
-
)
|
|
13
|
+
tasks = list(taskset.ColorCodewordTaskset(taskset.ColorCodewordConfig()).head(100))
|
|
16
14
|
|
|
17
15
|
assert len(tasks) == 100
|
|
18
16
|
assert calls == list(taskset.COLOR_RGB.values())
|
|
@@ -109,7 +109,7 @@ async def test_single_turn(run_v1, harness, harness_runtime, tmp_path):
|
|
|
109
109
|
assert trace.stop_condition == "agent_completed"
|
|
110
110
|
assert trace.reward == 1.0
|
|
111
111
|
# The seat's resolved identity rides the trace (policy metadata for trainers).
|
|
112
|
-
assert trace.agent is not None and trace.agent.config.sampling.
|
|
112
|
+
assert trace.agent is not None and trace.agent.config.sampling.max_tokens == 2048
|
|
113
113
|
# Every sampled turn has one per-call record, linked to its assistant node.
|
|
114
114
|
sampled = [i for i, n in enumerate(trace.nodes) if n.sampled]
|
|
115
115
|
assert [c.node for c in trace.calls if c.error is None] == sampled
|
|
@@ -118,6 +118,26 @@ async def test_single_turn(run_v1, harness, harness_runtime, tmp_path):
|
|
|
118
118
|
assert call.time.duration > 0
|
|
119
119
|
|
|
120
120
|
|
|
121
|
+
@pytest.mark.e2e
|
|
122
|
+
@pytest.mark.browser_use
|
|
123
|
+
@pytest.mark.docker
|
|
124
|
+
async def test_browser_use(run_v1, tmp_path):
|
|
125
|
+
"""The browser_use harness runs in an explicitly browser-capable runtime."""
|
|
126
|
+
image = (
|
|
127
|
+
"mcr.microsoft.com/playwright/python:v1.61.0-noble@"
|
|
128
|
+
"sha256:a9731514f24121d1dcd25d58d0a38146646d290a5998fd80d3e533e7b5e21c69"
|
|
129
|
+
)
|
|
130
|
+
(trace,) = await run_v1(
|
|
131
|
+
"echo-v1",
|
|
132
|
+
harness="browser_use",
|
|
133
|
+
runtime={"type": "docker", "image": image},
|
|
134
|
+
output_dir=tmp_path,
|
|
135
|
+
max_turns=2,
|
|
136
|
+
)
|
|
137
|
+
assert trace.ok
|
|
138
|
+
assert trace.reward == 1.0
|
|
139
|
+
|
|
140
|
+
|
|
121
141
|
@pytest.mark.e2e
|
|
122
142
|
@pytest.mark.parametrize("harness_runtime", USER_RUNTIMES, indirect=True)
|
|
123
143
|
async def test_user(run_v1, harness_runtime, tmp_path):
|
|
@@ -229,7 +249,7 @@ async def test_tool(run_v1, harness_runtime, tool_runtime, tmp_path):
|
|
|
229
249
|
assert trace.reward == 1.0
|
|
230
250
|
# The interception server captured the advertised tools onto the trace (for tool-use SFT):
|
|
231
251
|
# the null harness offered the task's MCP tool as `echo_back`, schema included.
|
|
232
|
-
assert trace.tools
|
|
252
|
+
assert trace.tools
|
|
233
253
|
(echo_tool,) = [t for t in trace.tools if t.name == "echo_back"]
|
|
234
254
|
assert "message" in echo_tool.parameters.get("properties", {})
|
|
235
255
|
|
|
@@ -335,6 +355,7 @@ async def test_agentic(run_v1, harness, harness_runtime, tmp_path):
|
|
|
335
355
|
runtime={"type": harness_runtime},
|
|
336
356
|
output_dir=tmp_path,
|
|
337
357
|
max_turns=10,
|
|
358
|
+
max_tokens=8192,
|
|
338
359
|
)
|
|
339
360
|
assert trace.ok
|
|
340
361
|
assert trace.num_turns >= 1 # ran a command, then finished
|
|
@@ -355,9 +376,9 @@ async def test_multi_agent_env(run_v1, tmp_path):
|
|
|
355
376
|
max_turns=2,
|
|
356
377
|
)
|
|
357
378
|
assert len(traces) == 2 # one episode, one trace per role
|
|
358
|
-
assert sorted(t.
|
|
359
|
-
(b,) = [t for t in traces if t.
|
|
360
|
-
assert b.trainable is False
|
|
379
|
+
assert sorted(t.agent.name for t in traces) == ["a", "b"]
|
|
380
|
+
(b,) = [t for t in traces if t.agent.name == "b"]
|
|
381
|
+
assert b.agent.trainable is False
|
|
361
382
|
for trace in traces:
|
|
362
383
|
assert trace.ok
|
|
363
384
|
assert trace.reward == 1.0 # each seat's own task reward
|
|
@@ -366,7 +387,7 @@ async def test_multi_agent_env(run_v1, tmp_path):
|
|
|
366
387
|
# agent info (completion order — the gathered seats land in either order).
|
|
367
388
|
(line,) = (tmp_path / "traces.jsonl").read_text().splitlines()
|
|
368
389
|
row = json.loads(line)
|
|
369
|
-
assert row["env"] == "duet-v1"
|
|
390
|
+
assert row["env"] == {"id": "duet-v1"}
|
|
370
391
|
by_name = {t["agent"]["name"]: t for t in row["traces"]}
|
|
371
392
|
assert set(by_name) == {"a", "b"}
|
|
372
393
|
assert by_name["a"]["agent"]["trainable"] is True
|
|
@@ -385,7 +406,7 @@ async def test_env_id_best_of_n(run_v1, tmp_path):
|
|
|
385
406
|
max_turns=2,
|
|
386
407
|
)
|
|
387
408
|
assert len(traces) == 2 # one episode, two attempts
|
|
388
|
-
assert all(t.
|
|
409
|
+
assert all(t.agent.name == "agent" and t.ok for t in traces)
|
|
389
410
|
assert any(t.metrics["best"] == 1.0 for t in traces)
|
|
390
411
|
assert all(t.metrics["pass_at_n"] == 1.0 for t in traces) # echo always passes
|
|
391
412
|
|
|
@@ -401,21 +422,21 @@ async def test_env_id_agentic_judge(run_v1, tmp_path):
|
|
|
401
422
|
model's call. Exercises the config surface too: a policy-only prompt
|
|
402
423
|
override (the verdict contract is appended regardless) and
|
|
403
424
|
reward-composition weights."""
|
|
425
|
+
policy = tmp_path / "judge_policy.txt"
|
|
426
|
+
policy.write_text("Check EMPIRICALLY that the agent echoed the word back.")
|
|
404
427
|
traces = await run_v1(
|
|
405
428
|
"echo-v1",
|
|
406
|
-
harness=None,
|
|
429
|
+
harness=None,
|
|
407
430
|
env={
|
|
408
431
|
"id": "agentic-judge",
|
|
409
|
-
# The solver owns the shared box, so the container is pinned here.
|
|
410
432
|
"solver": {"harness": {"id": "bash"}, "runtime": {"type": "docker"}},
|
|
411
|
-
# The judge reads the trace and reasons before it writes the
|
|
412
|
-
# verdict file; the shared 2048-token run cap truncates it mid-audit.
|
|
413
433
|
"judge": {
|
|
414
434
|
"harness": {"id": "bash"},
|
|
415
435
|
"max_output_tokens": 8192,
|
|
416
436
|
},
|
|
417
437
|
"task": {
|
|
418
|
-
"prompt": "
|
|
438
|
+
"prompt": {"path": str(policy)},
|
|
439
|
+
"hint": "Do not rely on README.md",
|
|
419
440
|
},
|
|
420
441
|
"score": {"task_weight": 0.5},
|
|
421
442
|
},
|
|
@@ -423,15 +444,15 @@ async def test_env_id_agentic_judge(run_v1, tmp_path):
|
|
|
423
444
|
max_turns=10,
|
|
424
445
|
rollout_timeout=600,
|
|
425
446
|
)
|
|
426
|
-
assert sorted(t.
|
|
427
|
-
(solver,) = [t for t in traces if t.
|
|
428
|
-
(judge,) = [t for t in traces if t.
|
|
447
|
+
assert sorted(t.agent.name for t in traces) == ["judge", "solver"]
|
|
448
|
+
(solver,) = [t for t in traces if t.agent.name == "solver"]
|
|
449
|
+
(judge,) = [t for t in traces if t.agent.name == "judge"]
|
|
429
450
|
assert solver.ok and judge.ok
|
|
430
|
-
assert judge.trainable is False
|
|
451
|
+
assert judge.agent.trainable is False
|
|
431
452
|
# The task's own reward keeps its raw score; the rescale lands on the weight.
|
|
432
453
|
assert solver.rewards["echoed"].score == 1.0
|
|
433
454
|
assert solver.rewards["echoed"].weight == 0.5
|
|
434
|
-
assert isinstance(judge.info.get("verdict"), dict)
|
|
455
|
+
assert isinstance(judge.info.get("verdict"), dict)
|
|
435
456
|
assert 0.0 <= solver.rewards["judge"].score <= 1.0
|
|
436
457
|
|
|
437
458
|
|
|
@@ -448,11 +469,11 @@ async def test_env_id_user_sim(run_v1, tmp_path):
|
|
|
448
469
|
max_turns=6,
|
|
449
470
|
rollout_timeout=300,
|
|
450
471
|
)
|
|
451
|
-
assert sorted(t.
|
|
452
|
-
(assistant,) = [t for t in traces if t.
|
|
453
|
-
(user,) = [t for t in traces if t.
|
|
472
|
+
assert sorted(t.agent.name for t in traces) == ["assistant", "user"]
|
|
473
|
+
(assistant,) = [t for t in traces if t.agent.name == "assistant"]
|
|
474
|
+
(user,) = [t for t in traces if t.agent.name == "user"]
|
|
454
475
|
assert assistant.ok and user.ok
|
|
455
|
-
assert user.trainable is False
|
|
476
|
+
assert user.agent.trainable is False
|
|
456
477
|
assert user.num_turns >= 1 # the modeled user actually spoke
|
|
457
478
|
assert assistant.metrics["user_turns"] >= 1
|
|
458
479
|
# `mask_prompt`: the scenario is hidden from the assistant's harness (the run's
|
|
@@ -465,7 +486,7 @@ async def test_env_id_user_sim(run_v1, tmp_path):
|
|
|
465
486
|
from verifiers.v1.trace import WireTrace
|
|
466
487
|
|
|
467
488
|
(record,) = read_episodes(tmp_path, WireTrace)
|
|
468
|
-
assert {t.
|
|
489
|
+
assert {t.agent.name for t in record.traces} == {"assistant", "user"}
|
|
469
490
|
assert record.id # both traces are persisted under one durable episode identity
|
|
470
491
|
|
|
471
492
|
|
|
@@ -488,14 +509,14 @@ async def test_env_id_user_sim_with_tools(run_v1, tmp_path):
|
|
|
488
509
|
max_tokens=8192,
|
|
489
510
|
rollout_timeout=300,
|
|
490
511
|
)
|
|
491
|
-
(assistant,) = [t for t in traces if t.
|
|
492
|
-
(user,) = [t for t in traces if t.
|
|
512
|
+
(assistant,) = [t for t in traces if t.agent.name == "assistant"]
|
|
513
|
+
(user,) = [t for t in traces if t.agent.name == "user"]
|
|
493
514
|
assert assistant.ok and user.ok
|
|
494
515
|
assert assistant.task.data.prompt is None # the scenario stayed off the wire
|
|
495
516
|
assert user.num_turns >= 1 # the modeled user actually drove the exchange
|
|
496
517
|
assert assistant.rewards["echoed"].score == 1.0 # the tool ran, mid-conversation
|
|
497
518
|
# The tool was advertised to the masked chat exactly as to any run.
|
|
498
|
-
assert assistant.tools
|
|
519
|
+
assert assistant.tools
|
|
499
520
|
assert any(tool.name == "echo_back" for tool in assistant.tools)
|
|
500
521
|
|
|
501
522
|
|
|
@@ -514,8 +535,8 @@ async def test_kuhn_poker_self_play(run_v1, tmp_path):
|
|
|
514
535
|
max_tokens=8192,
|
|
515
536
|
rollout_timeout=300,
|
|
516
537
|
)
|
|
517
|
-
assert sorted(t.
|
|
518
|
-
payoffs = {t.
|
|
538
|
+
assert sorted(t.agent.name for t in traces) == ["player0", "player1"]
|
|
539
|
+
payoffs = {t.agent.name: t.rewards["payoff"].score for t in traces}
|
|
519
540
|
assert payoffs["player0"] + payoffs["player1"] == 0 # zero-sum
|
|
520
541
|
assert abs(payoffs["player0"]) in (1.0, 2.0)
|
|
521
542
|
for trace in traces:
|
|
@@ -542,7 +563,7 @@ async def test_multi_agent_env_server(run_v1_server, tmp_path):
|
|
|
542
563
|
max_turns=2,
|
|
543
564
|
)
|
|
544
565
|
assert len(traces) == 2
|
|
545
|
-
assert sorted(t.
|
|
566
|
+
assert sorted(t.agent.name for t in traces) == ["a", "b"]
|
|
546
567
|
for trace in traces:
|
|
547
568
|
assert trace.ok
|
|
548
569
|
assert trace.metrics["duet"] == 1.0
|
|
@@ -40,7 +40,8 @@ def test_routed_experts_attributed_and_aligned_across_turns():
|
|
|
40
40
|
concatenates back to a `[tokens, layers, top_k]` array aligned 1:1 with `branch.token_ids` —
|
|
41
41
|
and survives the base64 wire round-trip."""
|
|
42
42
|
trace = vf.Trace(
|
|
43
|
-
|
|
43
|
+
agent=vf.AgentInfo(config=vf.AgentConfig()),
|
|
44
|
+
task=vf.TraceTask(type="Task", data=vf.TaskData(idx=0, prompt="x")),
|
|
44
45
|
)
|
|
45
46
|
user = vf.UserMessage(content="u1")
|
|
46
47
|
graph.prepare_turn(trace, [user]).commit(
|
|
@@ -94,7 +95,8 @@ def test_routed_experts_none_when_absent():
|
|
|
94
95
|
"""No routing captured (engine ran without `enable_return_routed_experts`) -> the branch
|
|
95
96
|
reports None and the trainer simply skips replay."""
|
|
96
97
|
trace = vf.Trace(
|
|
97
|
-
|
|
98
|
+
agent=vf.AgentInfo(config=vf.AgentConfig()),
|
|
99
|
+
task=vf.TraceTask(type="Task", data=vf.TaskData(idx=0, prompt="x")),
|
|
98
100
|
)
|
|
99
101
|
graph.prepare_turn(trace, [vf.UserMessage(content="u1")]).commit(
|
|
100
102
|
vf.Response(
|
|
@@ -128,7 +130,10 @@ def test_tool_call_hash_matches_v0_content_and_arguments_normalization():
|
|
|
128
130
|
|
|
129
131
|
def test_reasoning_content_participates_in_graph_prefix_matching():
|
|
130
132
|
task = vf.TaskData(idx=0, prompt="use a tool")
|
|
131
|
-
trace = vf.Trace(
|
|
133
|
+
trace = vf.Trace(
|
|
134
|
+
agent=vf.AgentInfo(config=vf.AgentConfig()),
|
|
135
|
+
task=vf.TraceTask(type="Task", data=task),
|
|
136
|
+
)
|
|
132
137
|
user = vf.UserMessage(content="use a tool")
|
|
133
138
|
call = vf.ToolCall(id="call_0", name="lookup", arguments="{}")
|
|
134
139
|
|
|
@@ -205,7 +210,8 @@ def test_renderer_level_break_forks_by_token_id():
|
|
|
205
210
|
|
|
206
211
|
# Control: the prior turn re-renders to the same tokens -> stays one linear branch.
|
|
207
212
|
linear = vf.Trace(
|
|
208
|
-
|
|
213
|
+
agent=vf.AgentInfo(config=vf.AgentConfig()),
|
|
214
|
+
task=vf.TraceTask(type="Task", data=vf.TaskData(idx=0, prompt="x")),
|
|
209
215
|
)
|
|
210
216
|
first_turn(linear)
|
|
211
217
|
second_turn(linear, [1, 2, 3, 4, 5, 6, 7])
|
|
@@ -214,7 +220,8 @@ def test_renderer_level_break_forks_by_token_id():
|
|
|
214
220
|
|
|
215
221
|
# Break: the assistant turn retokenizes (4 -> 99), so prompt_ids diverge at that node.
|
|
216
222
|
broken = vf.Trace(
|
|
217
|
-
|
|
223
|
+
agent=vf.AgentInfo(config=vf.AgentConfig()),
|
|
224
|
+
task=vf.TraceTask(type="Task", data=vf.TaskData(idx=0, prompt="x")),
|
|
218
225
|
)
|
|
219
226
|
first_turn(broken)
|
|
220
227
|
second_turn(broken, [1, 2, 3, 99, 5, 6, 7])
|
|
@@ -227,7 +234,10 @@ def test_renderer_level_break_forks_by_token_id():
|
|
|
227
234
|
|
|
228
235
|
def test_prompt_supplied_assistant_messages_are_not_sampled_turns():
|
|
229
236
|
task = vf.TaskData(idx=0, prompt="few-shot")
|
|
230
|
-
trace = vf.Trace(
|
|
237
|
+
trace = vf.Trace(
|
|
238
|
+
agent=vf.AgentInfo(config=vf.AgentConfig()),
|
|
239
|
+
task=vf.TraceTask(type="Task", data=task),
|
|
240
|
+
)
|
|
231
241
|
fabricated = vf.AssistantMessage(
|
|
232
242
|
content=None,
|
|
233
243
|
tool_calls=[vf.ToolCall(id="call_0", name="lookup", arguments="{}")],
|
|
@@ -36,6 +36,7 @@ def make_trace(
|
|
|
36
36
|
task_cls: type[QAData] = QAData,
|
|
37
37
|
) -> vf.Trace:
|
|
38
38
|
return vf.Trace(
|
|
39
|
+
agent=vf.AgentInfo(config=vf.AgentConfig()),
|
|
39
40
|
task=vf.TraceTask(
|
|
40
41
|
type="Task",
|
|
41
42
|
data=task_cls(idx=0, prompt="Capital of France?", answer=answer),
|
|
@@ -244,6 +245,7 @@ async def test_reference_score_messages_prompt(fake_judge_model):
|
|
|
244
245
|
answer="Paris",
|
|
245
246
|
)
|
|
246
247
|
trace = vf.Trace(
|
|
248
|
+
agent=vf.AgentInfo(config=vf.AgentConfig()),
|
|
247
249
|
task=vf.TraceTask(type="Task", data=task),
|
|
248
250
|
nodes=[
|
|
249
251
|
MessageNode(parent=None, message=UserMessage(content="q"), sampled=False),
|
|
@@ -269,6 +271,7 @@ async def test_reference_question_field(fake_judge_model):
|
|
|
269
271
|
answer="Paris",
|
|
270
272
|
)
|
|
271
273
|
trace = vf.Trace(
|
|
274
|
+
agent=vf.AgentInfo(config=vf.AgentConfig()),
|
|
272
275
|
task=vf.TraceTask(type="Task", data=task),
|
|
273
276
|
nodes=[
|
|
274
277
|
MessageNode(parent=None, message=UserMessage(content="q"), sampled=False),
|
|
@@ -293,6 +296,7 @@ def full_trace_fixture() -> vf.Trace:
|
|
|
293
296
|
from verifiers.v1.types import ToolCall, ToolMessage
|
|
294
297
|
|
|
295
298
|
return vf.Trace(
|
|
299
|
+
agent=vf.AgentInfo(config=vf.AgentConfig()),
|
|
296
300
|
task=vf.TraceTask(
|
|
297
301
|
type="Task", data=QAData(idx=0, prompt="Capital of France?", answer="Paris")
|
|
298
302
|
),
|
|
@@ -367,32 +371,20 @@ async def test_rubric_view_full_trace(tmp_path, fake_judge_model):
|
|
|
367
371
|
assert all("SECRET REASONING" not in prompt for prompt in fake_judge_model)
|
|
368
372
|
|
|
369
373
|
|
|
370
|
-
async def test_config_prompt_overrides_class_template(fake_judge_model):
|
|
371
|
-
|
|
372
|
-
|
|
373
|
-
)
|
|
374
|
+
async def test_config_prompt_overrides_class_template(tmp_path, fake_judge_model):
|
|
375
|
+
# Config `prompt` is a file path; the same {field} placeholders work.
|
|
376
|
+
file = tmp_path / "judge.txt"
|
|
377
|
+
file.write_text("Q:{question} A:{answer} R:{response}")
|
|
378
|
+
judge = vf.ReferenceJudge(vf.ReferenceJudgeConfig(prompt=file))
|
|
374
379
|
assert judge.build_messages(question="q", answer="a", response="r") == "Q:q A:a R:r"
|
|
375
380
|
# A template needn't use every evaluate field: score also passes {positive}/{negative},
|
|
376
381
|
# which str.format ignores when the (custom) prompt doesn't reference them.
|
|
377
382
|
trace = make_trace()
|
|
378
383
|
assert await judge.score(trace.task.data, trace) == 1.0
|
|
379
384
|
assert fake_judge_model[0] == "Q:Capital of France? A:Paris R:It is Paris."
|
|
380
|
-
|
|
381
|
-
|
|
382
|
-
async def test_prompt_file(tmp_path, fake_judge_model):
|
|
383
|
-
# The prompt template can come from a file; the same {field} placeholders work.
|
|
384
|
-
file = tmp_path / "judge.txt"
|
|
385
|
-
file.write_text("Q:{question} A:{answer} R:{response}")
|
|
386
|
-
trace = make_trace()
|
|
387
|
-
judge = vf.ReferenceJudge(vf.ReferenceJudgeConfig(prompt_file=file))
|
|
388
|
-
assert await judge.score(trace.task.data, trace) == 1.0
|
|
389
|
-
assert fake_judge_model[0] == "Q:Capital of France? A:Paris R:It is Paris."
|
|
390
385
|
# a bad path fails at judge construction, not mid-eval at score time
|
|
391
386
|
with pytest.raises(FileNotFoundError):
|
|
392
|
-
vf.ReferenceJudge(vf.ReferenceJudgeConfig(
|
|
393
|
-
# inline and file prompts are mutually exclusive
|
|
394
|
-
with pytest.raises(ValueError, match="not both"):
|
|
395
|
-
vf.ReferenceJudgeConfig(prompt="inline", prompt_file=file)
|
|
387
|
+
vf.ReferenceJudge(vf.ReferenceJudgeConfig(prompt=tmp_path / "missing.txt"))
|
|
396
388
|
|
|
397
389
|
|
|
398
390
|
# --- reference input/verdict knobs ------------------------------------------------------------
|
|
@@ -0,0 +1,93 @@
|
|
|
1
|
+
"""`Taskset` iteration and the `head`/`shuffle` views over list, generator,
|
|
2
|
+
and `INFINITE` `load` implementations."""
|
|
3
|
+
|
|
4
|
+
import itertools
|
|
5
|
+
|
|
6
|
+
import pytest
|
|
7
|
+
|
|
8
|
+
import verifiers.v1 as vf
|
|
9
|
+
|
|
10
|
+
|
|
11
|
+
class CountTask(vf.Task[vf.TaskData]):
|
|
12
|
+
pass
|
|
13
|
+
|
|
14
|
+
|
|
15
|
+
class InfiniteTaskset(vf.Taskset[CountTask, vf.TasksetConfig]):
|
|
16
|
+
INFINITE = True
|
|
17
|
+
|
|
18
|
+
def load(self):
|
|
19
|
+
for i in itertools.count():
|
|
20
|
+
yield CountTask(vf.TaskData(idx=i, prompt=f"task {i}"))
|
|
21
|
+
|
|
22
|
+
|
|
23
|
+
class FiniteTaskset(vf.Taskset[CountTask, vf.TasksetConfig]):
|
|
24
|
+
def load(self):
|
|
25
|
+
for i in range(10):
|
|
26
|
+
yield CountTask(vf.TaskData(idx=i, prompt=f"task {i}"))
|
|
27
|
+
|
|
28
|
+
|
|
29
|
+
def idxs(tasks) -> list[int]:
|
|
30
|
+
return [task.data.idx for task in tasks]
|
|
31
|
+
|
|
32
|
+
|
|
33
|
+
def test_head_bounds_an_infinite_taskset() -> None:
|
|
34
|
+
tasks = list(InfiniteTaskset(vf.TasksetConfig()).head(5))
|
|
35
|
+
assert idxs(tasks) == [0, 1, 2, 3, 4]
|
|
36
|
+
|
|
37
|
+
|
|
38
|
+
def test_iteration_materializes_a_finite_taskset() -> None:
|
|
39
|
+
taskset = FiniteTaskset(vf.TasksetConfig())
|
|
40
|
+
assert len(list(taskset)) == 10
|
|
41
|
+
assert idxs(taskset.head(4)) == [0, 1, 2, 3]
|
|
42
|
+
|
|
43
|
+
|
|
44
|
+
def test_head_returns_the_same_taskset_type() -> None:
|
|
45
|
+
view = FiniteTaskset(vf.TasksetConfig()).head(4)
|
|
46
|
+
assert isinstance(view, FiniteTaskset)
|
|
47
|
+
assert view.task_type() is CountTask
|
|
48
|
+
|
|
49
|
+
|
|
50
|
+
def test_shuffle_samples_the_whole_taskset_reproducibly() -> None:
|
|
51
|
+
taskset = FiniteTaskset(vf.TasksetConfig())
|
|
52
|
+
first = idxs(taskset.shuffle().head(5))
|
|
53
|
+
assert first == idxs(taskset.shuffle().head(5))
|
|
54
|
+
assert len(first) == 5 and set(first) <= set(range(10))
|
|
55
|
+
assert first != [0, 1, 2, 3, 4] # sampled from the whole set, not the head
|
|
56
|
+
|
|
57
|
+
|
|
58
|
+
def test_shuffle_seed_changes_the_sample() -> None:
|
|
59
|
+
taskset = FiniteTaskset(vf.TasksetConfig())
|
|
60
|
+
seeded = idxs(taskset.shuffle(seed=7).head(5))
|
|
61
|
+
assert seeded == idxs(taskset.shuffle(seed=7).head(5)) # reproducible per seed
|
|
62
|
+
assert seeded != idxs(taskset.shuffle().head(5)) # differs from the default seed
|
|
63
|
+
|
|
64
|
+
|
|
65
|
+
def test_shuffle_raises_on_infinite() -> None:
|
|
66
|
+
with pytest.raises(ValueError, match="infinite"):
|
|
67
|
+
InfiniteTaskset(vf.TasksetConfig()).shuffle()
|
|
68
|
+
|
|
69
|
+
|
|
70
|
+
def test_head_then_shuffle_bounds_an_infinite_taskset() -> None:
|
|
71
|
+
head = idxs(InfiniteTaskset(vf.TasksetConfig()).head(5).shuffle())
|
|
72
|
+
assert sorted(head) == [0, 1, 2, 3, 4]
|
|
73
|
+
assert head != [0, 1, 2, 3, 4] # shuffled within the bounded head
|
|
74
|
+
|
|
75
|
+
|
|
76
|
+
def test_head_only_builds_what_the_run_takes() -> None:
|
|
77
|
+
built: list[int] = []
|
|
78
|
+
|
|
79
|
+
class RecordingTaskset(InfiniteTaskset):
|
|
80
|
+
def load(self):
|
|
81
|
+
for i in itertools.count():
|
|
82
|
+
built.append(i)
|
|
83
|
+
yield CountTask(vf.TaskData(idx=i, prompt=f"task {i}"))
|
|
84
|
+
|
|
85
|
+
list(RecordingTaskset(vf.TasksetConfig()).head(3))
|
|
86
|
+
assert built == [0, 1, 2]
|
|
87
|
+
|
|
88
|
+
|
|
89
|
+
def test_views_do_not_mutate_the_base_taskset() -> None:
|
|
90
|
+
taskset = InfiniteTaskset(vf.TasksetConfig())
|
|
91
|
+
view = taskset.head(3)
|
|
92
|
+
assert view.INFINITE is False and taskset.INFINITE is True
|
|
93
|
+
assert idxs(taskset.head(2)) == [0, 1] # base iterates untransformed
|
|
@@ -21,7 +21,8 @@ class MyState(vf.State):
|
|
|
21
21
|
def test_bare_trace_round_trip():
|
|
22
22
|
# The minimal trace: a base task, no nodes, no extras — dump and back into a plain Trace.
|
|
23
23
|
tr = vf.Trace(
|
|
24
|
-
|
|
24
|
+
agent=vf.AgentInfo(config=vf.AgentConfig()),
|
|
25
|
+
task=vf.TraceTask(type="Task", data=vf.TaskData(idx=3, prompt="hello")),
|
|
25
26
|
)
|
|
26
27
|
rt = vf.Trace.model_validate(tr.model_dump())
|
|
27
28
|
assert rt.id == tr.id
|
|
@@ -35,6 +36,7 @@ def test_custom_task_state_round_trip():
|
|
|
35
36
|
# Custom data and state round-trip into the same parameterization. Data fields are
|
|
36
37
|
# typed (not just `model_extra`); `state` is runtime-only and never crosses the wire.
|
|
37
38
|
tr = vf.Trace[MyTask, MyState](
|
|
39
|
+
agent=vf.AgentInfo(config=vf.AgentConfig()),
|
|
38
40
|
task=vf.TraceTask(type="MyTask", data=MyTask(idx=0, prompt="q", answer="gold")),
|
|
39
41
|
state=MyState(score=7),
|
|
40
42
|
nodes=[
|
|
@@ -59,6 +61,7 @@ def test_wire_trace_round_trip():
|
|
|
59
61
|
# Two leaves off one root → 2 branches (a compaction-shaped trace), so the round-trip has to
|
|
60
62
|
# carry node `parent` links for `num_branches` to survive.
|
|
61
63
|
tr = vf.Trace[MyTask, vf.State](
|
|
64
|
+
agent=vf.AgentInfo(config=vf.AgentConfig()),
|
|
62
65
|
task=vf.TraceTask(type="MyTask", data=MyTask(idx=0, prompt="q", answer="a")),
|
|
63
66
|
tools=[vf.Tool(name="echo", description="", parameters={"type": "object"})],
|
|
64
67
|
nodes=[
|
|
@@ -4,6 +4,12 @@ from pydantic_config import BaseConfig
|
|
|
4
4
|
|
|
5
5
|
from verifiers.v1.acp import ACP
|
|
6
6
|
from verifiers.v1.agent import Agent, Agents, Interaction, Segment, make_agent
|
|
7
|
+
from verifiers.v1.artifacts import (
|
|
8
|
+
ARTIFACTS_DIR,
|
|
9
|
+
Artifact,
|
|
10
|
+
collect,
|
|
11
|
+
restore,
|
|
12
|
+
)
|
|
7
13
|
from verifiers.v1.clients import (
|
|
8
14
|
BaseClientConfig,
|
|
9
15
|
Client,
|
|
@@ -109,10 +115,10 @@ from verifiers.v1.taskset import Taskset
|
|
|
109
115
|
from verifiers.v1.trace import (
|
|
110
116
|
TRACE_VERSION,
|
|
111
117
|
AgentInfo,
|
|
118
|
+
AgentSpan,
|
|
112
119
|
Branch,
|
|
113
120
|
Error,
|
|
114
121
|
EvalRunInfo,
|
|
115
|
-
GenerationSpan,
|
|
116
122
|
ModelCall,
|
|
117
123
|
Reward,
|
|
118
124
|
RunInfo,
|
|
@@ -138,7 +144,6 @@ from verifiers.v1.types import (
|
|
|
138
144
|
Response,
|
|
139
145
|
Sampling,
|
|
140
146
|
SamplingConfig,
|
|
141
|
-
StrictBaseModel,
|
|
142
147
|
SystemMessage,
|
|
143
148
|
TextContentPart,
|
|
144
149
|
Tool,
|
|
@@ -171,7 +176,6 @@ __all__ = [ # noqa: RUF022 - grouped by public API area
|
|
|
171
176
|
"Response",
|
|
172
177
|
"Sampling",
|
|
173
178
|
"SamplingConfig",
|
|
174
|
-
"StrictBaseModel",
|
|
175
179
|
"SystemMessage",
|
|
176
180
|
"TextContentPart",
|
|
177
181
|
"Tool",
|
|
@@ -207,7 +211,7 @@ __all__ = [ # noqa: RUF022 - grouped by public API area
|
|
|
207
211
|
"Timing",
|
|
208
212
|
"TimeSpan",
|
|
209
213
|
"TimeSplit",
|
|
210
|
-
"
|
|
214
|
+
"AgentSpan",
|
|
211
215
|
"Error",
|
|
212
216
|
# decorators
|
|
213
217
|
"stop",
|
|
@@ -297,6 +301,11 @@ __all__ = [ # noqa: RUF022 - grouped by public API area
|
|
|
297
301
|
"PATCH_CAP_BYTES",
|
|
298
302
|
"capture_patch",
|
|
299
303
|
"resolve_head",
|
|
304
|
+
# grading artifacts
|
|
305
|
+
"ARTIFACTS_DIR",
|
|
306
|
+
"Artifact",
|
|
307
|
+
"collect",
|
|
308
|
+
"restore",
|
|
300
309
|
# scoring
|
|
301
310
|
"compare_stdout_results",
|
|
302
311
|
"extract_boxed_answer",
|