verifiers 0.1.15.dev443__tar.gz → 0.2.1__tar.gz
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- {verifiers-0.1.15.dev443 → verifiers-0.2.1}/PKG-INFO +17 -31
- {verifiers-0.1.15.dev443 → verifiers-0.2.1}/pyproject.toml +27 -50
- {verifiers-0.1.15.dev443 → verifiers-0.2.1}/tests/conftest.py +6 -0
- {verifiers-0.1.15.dev443 → verifiers-0.2.1}/tests/test_browser_env.py +0 -92
- {verifiers-0.1.15.dev443 → verifiers-0.2.1}/tests/test_install_utils.py +1 -1
- {verifiers-0.1.15.dev443 → verifiers-0.2.1}/tests/v1/conftest.py +19 -12
- {verifiers-0.1.15.dev443 → verifiers-0.2.1}/tests/v1/fixtures/echo_user_sim_v1.py +1 -1
- {verifiers-0.1.15.dev443 → verifiers-0.2.1}/tests/v1/fixtures/tool_response_image_v1.py +1 -1
- verifiers-0.2.1/tests/v1/test_color_codeword_tasks.py +18 -0
- {verifiers-0.1.15.dev443 → verifiers-0.2.1}/tests/v1/test_e2e.py +15 -3
- {verifiers-0.1.15.dev443 → verifiers-0.2.1}/tests/v1/test_envs.py +4 -6
- verifiers-0.2.1/tests/v1/test_taskset.py +71 -0
- {verifiers-0.1.15.dev443 → verifiers-0.2.1}/tests/v1/test_trace.py +4 -0
- {verifiers-0.1.15.dev443 → verifiers-0.2.1}/verifiers/envs/integrations/browser_env/README.md +0 -13
- {verifiers-0.1.15.dev443 → verifiers-0.2.1}/verifiers/scripts/install.py +6 -6
- {verifiers-0.1.15.dev443 → verifiers-0.2.1}/verifiers/types.py +1 -0
- {verifiers-0.1.15.dev443 → verifiers-0.2.1}/verifiers/v1/__init__.py +20 -0
- {verifiers-0.1.15.dev443 → verifiers-0.2.1}/verifiers/v1/cli/dashboard/base.py +11 -1
- {verifiers-0.1.15.dev443 → verifiers-0.2.1}/verifiers/v1/cli/dashboard/eval.py +68 -35
- {verifiers-0.1.15.dev443 → verifiers-0.2.1}/verifiers/v1/cli/dashboard/replay.py +9 -19
- {verifiers-0.1.15.dev443 → verifiers-0.2.1}/verifiers/v1/cli/dashboard/validate.py +15 -8
- {verifiers-0.1.15.dev443 → verifiers-0.2.1}/verifiers/v1/cli/debug.py +23 -33
- {verifiers-0.1.15.dev443 → verifiers-0.2.1}/verifiers/v1/cli/eval/main.py +22 -13
- {verifiers-0.1.15.dev443 → verifiers-0.2.1}/verifiers/v1/cli/eval/resume.py +0 -1
- {verifiers-0.1.15.dev443 → verifiers-0.2.1}/verifiers/v1/cli/eval/runner.py +21 -16
- verifiers-0.2.1/verifiers/v1/cli/gepa.py +74 -0
- {verifiers-0.1.15.dev443 → verifiers-0.2.1}/verifiers/v1/cli/init.py +1 -1
- {verifiers-0.1.15.dev443 → verifiers-0.2.1}/verifiers/v1/cli/replay.py +4 -3
- {verifiers-0.1.15.dev443 → verifiers-0.2.1}/verifiers/v1/cli/validate.py +5 -10
- {verifiers-0.1.15.dev443 → verifiers-0.2.1}/verifiers/v1/clients/train.py +4 -0
- {verifiers-0.1.15.dev443 → verifiers-0.2.1}/verifiers/v1/configs/debug.py +1 -0
- {verifiers-0.1.15.dev443 → verifiers-0.2.1}/verifiers/v1/configs/eval.py +1 -0
- {verifiers-0.1.15.dev443 → verifiers-0.2.1}/verifiers/v1/configs/validate.py +1 -0
- {verifiers-0.1.15.dev443 → verifiers-0.2.1}/verifiers/v1/dialects/anthropic.py +41 -9
- {verifiers-0.1.15.dev443 → verifiers-0.2.1}/verifiers/v1/dialects/base.py +15 -1
- {verifiers-0.1.15.dev443 → verifiers-0.2.1}/verifiers/v1/dialects/chat.py +61 -19
- {verifiers-0.1.15.dev443 → verifiers-0.2.1}/verifiers/v1/dialects/responses.py +49 -6
- {verifiers-0.1.15.dev443 → verifiers-0.2.1}/verifiers/v1/env.py +53 -25
- {verifiers-0.1.15.dev443 → verifiers-0.2.1}/verifiers/v1/errors.py +16 -3
- verifiers-0.2.1/verifiers/v1/gepa/__init__.py +12 -0
- verifiers-0.2.1/verifiers/v1/gepa/adapter.py +112 -0
- verifiers-0.2.1/verifiers/v1/gepa/config.py +75 -0
- verifiers-0.2.1/verifiers/v1/gepa/dataset.py +59 -0
- verifiers-0.2.1/verifiers/v1/gepa/reflection.py +28 -0
- verifiers-0.2.1/verifiers/v1/gepa/runner.py +118 -0
- {verifiers-0.1.15.dev443 → verifiers-0.2.1}/verifiers/v1/graph.py +71 -20
- {verifiers-0.1.15.dev443 → verifiers-0.2.1}/verifiers/v1/harness.py +9 -3
- {verifiers-0.1.15.dev443 → verifiers-0.2.1}/verifiers/v1/harnesses/__init__.py +15 -3
- verifiers-0.2.1/verifiers/v1/harnesses/bash/__init__.py +6 -0
- {verifiers-0.1.15.dev443/verifiers/v1/harnesses/default → verifiers-0.2.1/verifiers/v1/harnesses/bash}/harness.py +10 -7
- {verifiers-0.1.15.dev443/verifiers/v1/harnesses/default → verifiers-0.2.1/verifiers/v1/harnesses/bash}/program.py +157 -99
- verifiers-0.2.1/verifiers/v1/harnesses/claude_code/__init__.py +6 -0
- verifiers-0.2.1/verifiers/v1/harnesses/claude_code/harness.py +102 -0
- {verifiers-0.1.15.dev443 → verifiers-0.2.1}/verifiers/v1/harnesses/codex/harness.py +70 -7
- {verifiers-0.1.15.dev443 → verifiers-0.2.1}/verifiers/v1/harnesses/kimi_code/harness.py +1 -1
- {verifiers-0.1.15.dev443 → verifiers-0.2.1}/verifiers/v1/harnesses/mini_swe_agent/harness.py +1 -1
- {verifiers-0.1.15.dev443 → verifiers-0.2.1}/verifiers/v1/harnesses/mini_swe_agent/program.py +1 -1
- {verifiers-0.1.15.dev443 → verifiers-0.2.1}/verifiers/v1/harnesses/null/harness.py +7 -4
- verifiers-0.2.1/verifiers/v1/harnesses/null/program.py +217 -0
- verifiers-0.2.1/verifiers/v1/harnesses/pi/__init__.py +3 -0
- verifiers-0.2.1/verifiers/v1/harnesses/pi/harness.py +264 -0
- verifiers-0.2.1/verifiers/v1/harnesses/pool/__init__.py +3 -0
- verifiers-0.2.1/verifiers/v1/harnesses/pool/harness.py +130 -0
- verifiers-0.2.1/verifiers/v1/interception/__init__.py +94 -0
- verifiers-0.2.1/verifiers/v1/interception/base.py +68 -0
- verifiers-0.2.1/verifiers/v1/interception/pool.py +143 -0
- verifiers-0.2.1/verifiers/v1/interception/server.py +795 -0
- verifiers-0.2.1/verifiers/v1/interception/tunnel/__init__.py +40 -0
- verifiers-0.2.1/verifiers/v1/interception/tunnel/base.py +50 -0
- verifiers-0.2.1/verifiers/v1/interception/tunnel/custom.py +42 -0
- verifiers-0.2.1/verifiers/v1/interception/tunnel/prime.py +56 -0
- {verifiers-0.1.15.dev443 → verifiers-0.2.1}/verifiers/v1/legacy.py +53 -12
- {verifiers-0.1.15.dev443 → verifiers-0.2.1}/verifiers/v1/loaders.py +2 -2
- {verifiers-0.1.15.dev443 → verifiers-0.2.1}/verifiers/v1/mcp/__init__.py +2 -2
- {verifiers-0.1.15.dev443 → verifiers-0.2.1}/verifiers/v1/mcp/launch.py +142 -103
- {verifiers-0.1.15.dev443 → verifiers-0.2.1}/verifiers/v1/mcp/server.py +30 -29
- {verifiers-0.1.15.dev443 → verifiers-0.2.1}/verifiers/v1/mcp/user.py +26 -2
- {verifiers-0.1.15.dev443 → verifiers-0.2.1}/verifiers/v1/push.py +6 -0
- {verifiers-0.1.15.dev443 → verifiers-0.2.1}/verifiers/v1/rollout.py +56 -40
- {verifiers-0.1.15.dev443 → verifiers-0.2.1}/verifiers/v1/runtimes/__init__.py +1 -8
- {verifiers-0.1.15.dev443 → verifiers-0.2.1}/verifiers/v1/runtimes/base.py +17 -118
- {verifiers-0.1.15.dev443 → verifiers-0.2.1}/verifiers/v1/runtimes/docker.py +12 -1
- {verifiers-0.1.15.dev443 → verifiers-0.2.1}/verifiers/v1/runtimes/limiters.py +0 -7
- {verifiers-0.1.15.dev443 → verifiers-0.2.1}/verifiers/v1/runtimes/modal.py +3 -3
- {verifiers-0.1.15.dev443 → verifiers-0.2.1}/verifiers/v1/runtimes/prime.py +28 -11
- {verifiers-0.1.15.dev443 → verifiers-0.2.1}/verifiers/v1/serve/pool.py +7 -24
- {verifiers-0.1.15.dev443 → verifiers-0.2.1}/verifiers/v1/serve/server.py +42 -10
- {verifiers-0.1.15.dev443 → verifiers-0.2.1}/verifiers/v1/serve/types.py +5 -4
- verifiers-0.2.1/verifiers/v1/session.py +118 -0
- {verifiers-0.1.15.dev443 → verifiers-0.2.1}/verifiers/v1/taskset.py +46 -4
- verifiers-0.2.1/verifiers/v1/tasksets/__init__.py +36 -0
- {verifiers-0.1.15.dev443 → verifiers-0.2.1}/verifiers/v1/tasksets/harbor/taskset.py +39 -12
- {verifiers-0.1.15.dev443 → verifiers-0.2.1}/verifiers/v1/tasksets/lean/taskset.py +19 -25
- verifiers-0.2.1/verifiers/v1/tasksets/openenv/__init__.py +21 -0
- verifiers-0.2.1/verifiers/v1/tasksets/openenv/taskset.py +154 -0
- {verifiers-0.1.15.dev443 → verifiers-0.2.1}/verifiers/v1/tasksets/textarena/taskset.py +11 -8
- {verifiers-0.1.15.dev443 → verifiers-0.2.1}/verifiers/v1/trace.py +220 -29
- {verifiers-0.1.15.dev443 → verifiers-0.2.1}/verifiers/v1/types.py +18 -0
- verifiers-0.2.1/verifiers/v1/utils/image.py +9 -0
- verifiers-0.2.1/verifiers/v1/utils/interrupt.py +35 -0
- verifiers-0.2.1/verifiers/v1/utils/sampling.py +25 -0
- verifiers-0.2.1/verifiers/v1/utils/version.py +43 -0
- verifiers-0.1.15.dev443/tests/test_envs.py +0 -195
- verifiers-0.1.15.dev443/tests/test_wordle_env.py +0 -22
- verifiers-0.1.15.dev443/tests/v1/test_color_codeword_tasks.py +0 -18
- verifiers-0.1.15.dev443/verifiers/envs/experimental/composable/tasksets/search/README.md +0 -42
- verifiers-0.1.15.dev443/verifiers/envs/experimental/composable/tasksets/search/__init__.py +0 -15
- verifiers-0.1.15.dev443/verifiers/envs/experimental/composable/tasksets/search/openseeker/README.md +0 -46
- verifiers-0.1.15.dev443/verifiers/envs/experimental/composable/tasksets/search/openseeker/__init__.py +0 -5
- verifiers-0.1.15.dev443/verifiers/envs/experimental/composable/tasksets/search/openseeker/taskset.py +0 -564
- verifiers-0.1.15.dev443/verifiers/envs/experimental/composable/tasksets/search/quest/README.md +0 -66
- verifiers-0.1.15.dev443/verifiers/envs/experimental/composable/tasksets/search/quest/__init__.py +0 -5
- verifiers-0.1.15.dev443/verifiers/envs/experimental/composable/tasksets/search/quest/obj_task_eval/__init__.py +0 -17
- verifiers-0.1.15.dev443/verifiers/envs/experimental/composable/tasksets/search/quest/obj_task_eval/api_tools/__init__.py +0 -5
- verifiers-0.1.15.dev443/verifiers/envs/experimental/composable/tasksets/search/quest/obj_task_eval/api_tools/tool_pdf.py +0 -284
- verifiers-0.1.15.dev443/verifiers/envs/experimental/composable/tasksets/search/quest/obj_task_eval/eval_toolkit.py +0 -1119
- verifiers-0.1.15.dev443/verifiers/envs/experimental/composable/tasksets/search/quest/obj_task_eval/evaluator.py +0 -1271
- verifiers-0.1.15.dev443/verifiers/envs/experimental/composable/tasksets/search/quest/obj_task_eval/llm_client/__init__.py +0 -5
- verifiers-0.1.15.dev443/verifiers/envs/experimental/composable/tasksets/search/quest/obj_task_eval/llm_client/base_client.py +0 -15
- verifiers-0.1.15.dev443/verifiers/envs/experimental/composable/tasksets/search/quest/obj_task_eval/prompts/__init__.py +0 -4
- verifiers-0.1.15.dev443/verifiers/envs/experimental/composable/tasksets/search/quest/obj_task_eval/prompts/cache_prompts.py +0 -15
- verifiers-0.1.15.dev443/verifiers/envs/experimental/composable/tasksets/search/quest/obj_task_eval/utils/__init__.py +0 -7
- verifiers-0.1.15.dev443/verifiers/envs/experimental/composable/tasksets/search/quest/obj_task_eval/utils/cache_filesys.py +0 -45
- verifiers-0.1.15.dev443/verifiers/envs/experimental/composable/tasksets/search/quest/obj_task_eval/utils/load_eval_script.py +0 -107
- verifiers-0.1.15.dev443/verifiers/envs/experimental/composable/tasksets/search/quest/obj_task_eval/utils/misc.py +0 -106
- verifiers-0.1.15.dev443/verifiers/envs/experimental/composable/tasksets/search/quest/obj_task_eval/utils/tool_visit.py +0 -69
- verifiers-0.1.15.dev443/verifiers/envs/experimental/composable/tasksets/search/quest/obj_task_eval/utils/url_tools.py +0 -27
- verifiers-0.1.15.dev443/verifiers/envs/experimental/composable/tasksets/search/quest/obj_task_eval/verification_tree.py +0 -153
- verifiers-0.1.15.dev443/verifiers/envs/experimental/composable/tasksets/search/quest/open_ended.py +0 -329
- verifiers-0.1.15.dev443/verifiers/envs/experimental/composable/tasksets/search/quest/taskset.py +0 -763
- verifiers-0.1.15.dev443/verifiers/envs/experimental/composable/tasksets/search/redsearcher/README.md +0 -38
- verifiers-0.1.15.dev443/verifiers/envs/experimental/composable/tasksets/search/redsearcher/__init__.py +0 -5
- verifiers-0.1.15.dev443/verifiers/envs/experimental/composable/tasksets/search/redsearcher/taskset.py +0 -594
- verifiers-0.1.15.dev443/verifiers/envs/experimental/composable/tasksets/search/search_tasksets.py +0 -46
- verifiers-0.1.15.dev443/verifiers/v1/harnesses/default/__init__.py +0 -6
- verifiers-0.1.15.dev443/verifiers/v1/harnesses/null/program.py +0 -156
- verifiers-0.1.15.dev443/verifiers/v1/interception/__init__.py +0 -16
- verifiers-0.1.15.dev443/verifiers/v1/interception/pool.py +0 -94
- verifiers-0.1.15.dev443/verifiers/v1/interception/server.py +0 -601
- verifiers-0.1.15.dev443/verifiers/v1/tasksets/__init__.py +0 -18
- {verifiers-0.1.15.dev443 → verifiers-0.2.1}/.gitignore +0 -0
- {verifiers-0.1.15.dev443 → verifiers-0.2.1}/LICENSE +0 -0
- {verifiers-0.1.15.dev443 → verifiers-0.2.1}/README.md +0 -0
- {verifiers-0.1.15.dev443 → verifiers-0.2.1}/tests/AGENTS.md +0 -0
- {verifiers-0.1.15.dev443 → verifiers-0.2.1}/tests/__init__.py +0 -0
- {verifiers-0.1.15.dev443 → verifiers-0.2.1}/tests/test_build_script.py +0 -0
- {verifiers-0.1.15.dev443 → verifiers-0.2.1}/tests/test_cli_agent_env.py +0 -0
- {verifiers-0.1.15.dev443 → verifiers-0.2.1}/tests/test_client_auth_errors.py +0 -0
- {verifiers-0.1.15.dev443 → verifiers-0.2.1}/tests/test_client_config.py +0 -0
- {verifiers-0.1.15.dev443 → verifiers-0.2.1}/tests/test_client_multimodal_types.py +0 -0
- {verifiers-0.1.15.dev443 → verifiers-0.2.1}/tests/test_composable_env.py +0 -0
- {verifiers-0.1.15.dev443 → verifiers-0.2.1}/tests/test_context_token_metrics.py +0 -0
- {verifiers-0.1.15.dev443 → verifiers-0.2.1}/tests/test_decorator_ranks.py +0 -0
- {verifiers-0.1.15.dev443 → verifiers-0.2.1}/tests/test_endpoint_registry.py +0 -0
- {verifiers-0.1.15.dev443 → verifiers-0.2.1}/tests/test_env_group.py +0 -0
- {verifiers-0.1.15.dev443 → verifiers-0.2.1}/tests/test_env_server.py +0 -0
- {verifiers-0.1.15.dev443 → verifiers-0.2.1}/tests/test_environment.py +0 -0
- {verifiers-0.1.15.dev443 → verifiers-0.2.1}/tests/test_environment_extra.py +0 -0
- {verifiers-0.1.15.dev443 → verifiers-0.2.1}/tests/test_error_chain.py +0 -0
- {verifiers-0.1.15.dev443 → verifiers-0.2.1}/tests/test_eval_display.py +0 -0
- {verifiers-0.1.15.dev443 → verifiers-0.2.1}/tests/test_eval_utils.py +0 -0
- {verifiers-0.1.15.dev443 → verifiers-0.2.1}/tests/test_gepa_cli.py +0 -0
- {verifiers-0.1.15.dev443 → verifiers-0.2.1}/tests/test_gepa_utils.py +0 -0
- {verifiers-0.1.15.dev443 → verifiers-0.2.1}/tests/test_gym_env.py +0 -0
- {verifiers-0.1.15.dev443 → verifiers-0.2.1}/tests/test_harbor_env_mcp.py +0 -0
- {verifiers-0.1.15.dev443 → verifiers-0.2.1}/tests/test_imports.py +0 -0
- {verifiers-0.1.15.dev443 → verifiers-0.2.1}/tests/test_init_script.py +0 -0
- {verifiers-0.1.15.dev443 → verifiers-0.2.1}/tests/test_interception_utils.py +0 -0
- {verifiers-0.1.15.dev443 → verifiers-0.2.1}/tests/test_logging.py +0 -0
- {verifiers-0.1.15.dev443 → verifiers-0.2.1}/tests/test_math_rubric.py +0 -0
- {verifiers-0.1.15.dev443 → verifiers-0.2.1}/tests/test_maybe_think_parser.py +0 -0
- {verifiers-0.1.15.dev443 → verifiers-0.2.1}/tests/test_message_utils.py +0 -0
- {verifiers-0.1.15.dev443 → verifiers-0.2.1}/tests/test_message_utils_multimodal.py +0 -0
- {verifiers-0.1.15.dev443 → verifiers-0.2.1}/tests/test_multiturn_env.py +0 -0
- {verifiers-0.1.15.dev443 → verifiers-0.2.1}/tests/test_nemorl_client.py +0 -0
- {verifiers-0.1.15.dev443 → verifiers-0.2.1}/tests/test_openai_chat_completions_token_client.py +0 -0
- {verifiers-0.1.15.dev443 → verifiers-0.2.1}/tests/test_openai_responses_client.py +0 -0
- {verifiers-0.1.15.dev443 → verifiers-0.2.1}/tests/test_opencode_rlm_env.py +0 -0
- {verifiers-0.1.15.dev443 → verifiers-0.2.1}/tests/test_openenv_client.py +0 -0
- {verifiers-0.1.15.dev443 → verifiers-0.2.1}/tests/test_parser.py +0 -0
- {verifiers-0.1.15.dev443 → verifiers-0.2.1}/tests/test_path_utils.py +0 -0
- {verifiers-0.1.15.dev443 → verifiers-0.2.1}/tests/test_per_turn_timing.py +0 -0
- {verifiers-0.1.15.dev443 → verifiers-0.2.1}/tests/test_pricing_utils.py +0 -0
- {verifiers-0.1.15.dev443 → verifiers-0.2.1}/tests/test_prime_plugin.py +0 -0
- {verifiers-0.1.15.dev443 → verifiers-0.2.1}/tests/test_renderer_client.py +0 -0
- {verifiers-0.1.15.dev443 → verifiers-0.2.1}/tests/test_renderer_e2e.py +0 -0
- {verifiers-0.1.15.dev443 → verifiers-0.2.1}/tests/test_rlm_composable_env.py +0 -0
- {verifiers-0.1.15.dev443 → verifiers-0.2.1}/tests/test_rubric.py +0 -0
- {verifiers-0.1.15.dev443 → verifiers-0.2.1}/tests/test_rubric_group.py +0 -0
- {verifiers-0.1.15.dev443 → verifiers-0.2.1}/tests/test_sandbox_debug_env.py +0 -0
- {verifiers-0.1.15.dev443 → verifiers-0.2.1}/tests/test_sandbox_env.py +0 -0
- {verifiers-0.1.15.dev443 → verifiers-0.2.1}/tests/test_sandbox_mixin.py +0 -0
- {verifiers-0.1.15.dev443 → verifiers-0.2.1}/tests/test_save_utils.py +0 -0
- {verifiers-0.1.15.dev443 → verifiers-0.2.1}/tests/test_setup_script.py +0 -0
- {verifiers-0.1.15.dev443 → verifiers-0.2.1}/tests/test_singleturn_env.py +0 -0
- {verifiers-0.1.15.dev443 → verifiers-0.2.1}/tests/test_stateful_tool_env.py +0 -0
- {verifiers-0.1.15.dev443 → verifiers-0.2.1}/tests/test_think_parser.py +0 -0
- {verifiers-0.1.15.dev443 → verifiers-0.2.1}/tests/test_tool_env.py +0 -0
- {verifiers-0.1.15.dev443 → verifiers-0.2.1}/tests/test_tool_utils.py +0 -0
- {verifiers-0.1.15.dev443 → verifiers-0.2.1}/tests/test_trajectory_processing.py +0 -0
- {verifiers-0.1.15.dev443 → verifiers-0.2.1}/tests/test_tui_info_formatting.py +0 -0
- {verifiers-0.1.15.dev443 → verifiers-0.2.1}/tests/test_types.py +0 -0
- {verifiers-0.1.15.dev443 → verifiers-0.2.1}/tests/test_xml_parser.py +0 -0
- {verifiers-0.1.15.dev443 → verifiers-0.2.1}/tests/v1/fixtures/counter_tool_v1.py +0 -0
- {verifiers-0.1.15.dev443 → verifiers-0.2.1}/tests/v1/fixtures/echo_agentic_v1.py +0 -0
- {verifiers-0.1.15.dev443 → verifiers-0.2.1}/tests/v1/fixtures/echo_multi_v0.py +0 -0
- {verifiers-0.1.15.dev443 → verifiers-0.2.1}/tests/v1/fixtures/echo_tool_v1.py +0 -0
- {verifiers-0.1.15.dev443 → verifiers-0.2.1}/tests/v1/fixtures/echo_v0.py +0 -0
- {verifiers-0.1.15.dev443 → verifiers-0.2.1}/tests/v1/fixtures/echo_v1.py +0 -0
- {verifiers-0.1.15.dev443 → verifiers-0.2.1}/tests/v1/fixtures/pyproject.toml +0 -0
- {verifiers-0.1.15.dev443 → verifiers-0.2.1}/tests/v1/test_configs.py +0 -0
- {verifiers-0.1.15.dev443 → verifiers-0.2.1}/tests/v1/test_graph.py +0 -0
- {verifiers-0.1.15.dev443 → verifiers-0.2.1}/tests/v1/test_judges.py +0 -0
- {verifiers-0.1.15.dev443 → verifiers-0.2.1}/tests/v1/test_legacy.py +0 -0
- {verifiers-0.1.15.dev443 → verifiers-0.2.1}/tests/v1/test_scoring.py +0 -0
- {verifiers-0.1.15.dev443 → verifiers-0.2.1}/verifiers/__init__.py +0 -0
- {verifiers-0.1.15.dev443 → verifiers-0.2.1}/verifiers/cli/__init__.py +0 -0
- {verifiers-0.1.15.dev443 → verifiers-0.2.1}/verifiers/cli/commands/__init__.py +0 -0
- {verifiers-0.1.15.dev443 → verifiers-0.2.1}/verifiers/cli/commands/build.py +0 -0
- {verifiers-0.1.15.dev443 → verifiers-0.2.1}/verifiers/cli/commands/eval.py +0 -0
- {verifiers-0.1.15.dev443 → verifiers-0.2.1}/verifiers/cli/commands/gepa.py +0 -0
- {verifiers-0.1.15.dev443 → verifiers-0.2.1}/verifiers/cli/commands/init.py +0 -0
- {verifiers-0.1.15.dev443 → verifiers-0.2.1}/verifiers/cli/commands/install.py +0 -0
- {verifiers-0.1.15.dev443 → verifiers-0.2.1}/verifiers/cli/commands/setup.py +0 -0
- {verifiers-0.1.15.dev443 → verifiers-0.2.1}/verifiers/cli/plugins/__init__.py +0 -0
- {verifiers-0.1.15.dev443 → verifiers-0.2.1}/verifiers/cli/plugins/prime.py +0 -0
- {verifiers-0.1.15.dev443 → verifiers-0.2.1}/verifiers/cli/tui.py +0 -0
- {verifiers-0.1.15.dev443 → verifiers-0.2.1}/verifiers/clients/__init__.py +0 -0
- {verifiers-0.1.15.dev443 → verifiers-0.2.1}/verifiers/clients/anthropic_messages_client.py +0 -0
- {verifiers-0.1.15.dev443 → verifiers-0.2.1}/verifiers/clients/client.py +0 -0
- {verifiers-0.1.15.dev443 → verifiers-0.2.1}/verifiers/clients/nemorl_chat_completions_client.py +0 -0
- {verifiers-0.1.15.dev443 → verifiers-0.2.1}/verifiers/clients/openai_chat_completions_client.py +0 -0
- {verifiers-0.1.15.dev443 → verifiers-0.2.1}/verifiers/clients/openai_chat_completions_token_client.py +0 -0
- {verifiers-0.1.15.dev443 → verifiers-0.2.1}/verifiers/clients/openai_completions_client.py +0 -0
- {verifiers-0.1.15.dev443 → verifiers-0.2.1}/verifiers/clients/openai_responses_client.py +0 -0
- {verifiers-0.1.15.dev443 → verifiers-0.2.1}/verifiers/clients/renderer_client.py +0 -0
- {verifiers-0.1.15.dev443 → verifiers-0.2.1}/verifiers/decorators.py +0 -0
- {verifiers-0.1.15.dev443 → verifiers-0.2.1}/verifiers/envs/AGENTS.md +0 -0
- {verifiers-0.1.15.dev443 → verifiers-0.2.1}/verifiers/envs/__init__.py +0 -0
- {verifiers-0.1.15.dev443 → verifiers-0.2.1}/verifiers/envs/env_group.py +0 -0
- {verifiers-0.1.15.dev443 → verifiers-0.2.1}/verifiers/envs/environment.py +0 -0
- {verifiers-0.1.15.dev443 → verifiers-0.2.1}/verifiers/envs/experimental/README.md +0 -0
- {verifiers-0.1.15.dev443 → verifiers-0.2.1}/verifiers/envs/experimental/__init__.py +0 -0
- {verifiers-0.1.15.dev443 → verifiers-0.2.1}/verifiers/envs/experimental/cli_agent_env.py +0 -0
- {verifiers-0.1.15.dev443 → verifiers-0.2.1}/verifiers/envs/experimental/composable/README.md +0 -0
- {verifiers-0.1.15.dev443 → verifiers-0.2.1}/verifiers/envs/experimental/composable/__init__.py +0 -0
- {verifiers-0.1.15.dev443 → verifiers-0.2.1}/verifiers/envs/experimental/composable/_filter.py +0 -0
- {verifiers-0.1.15.dev443 → verifiers-0.2.1}/verifiers/envs/experimental/composable/composable_env.py +0 -0
- {verifiers-0.1.15.dev443 → verifiers-0.2.1}/verifiers/envs/experimental/composable/harness.py +0 -0
- {verifiers-0.1.15.dev443 → verifiers-0.2.1}/verifiers/envs/experimental/composable/harnesses/__init__.py +0 -0
- {verifiers-0.1.15.dev443 → verifiers-0.2.1}/verifiers/envs/experimental/composable/harnesses/mini_swe_agent.py +0 -0
- {verifiers-0.1.15.dev443 → verifiers-0.2.1}/verifiers/envs/experimental/composable/harnesses/opencode.py +0 -0
- {verifiers-0.1.15.dev443 → verifiers-0.2.1}/verifiers/envs/experimental/composable/harnesses/prompt.txt +0 -0
- {verifiers-0.1.15.dev443 → verifiers-0.2.1}/verifiers/envs/experimental/composable/harnesses/rlm.py +0 -0
- {verifiers-0.1.15.dev443 → verifiers-0.2.1}/verifiers/envs/experimental/composable/sandbox_debug_env.py +0 -0
- {verifiers-0.1.15.dev443 → verifiers-0.2.1}/verifiers/envs/experimental/composable/swe_debug_env.py +0 -0
- {verifiers-0.1.15.dev443 → verifiers-0.2.1}/verifiers/envs/experimental/composable/task.py +0 -0
- {verifiers-0.1.15.dev443 → verifiers-0.2.1}/verifiers/envs/experimental/composable/tasksets/__init__.py +0 -0
- {verifiers-0.1.15.dev443 → verifiers-0.2.1}/verifiers/envs/experimental/composable/tasksets/cp/__init__.py +0 -0
- {verifiers-0.1.15.dev443 → verifiers-0.2.1}/verifiers/envs/experimental/composable/tasksets/cp/cp_task.py +0 -0
- {verifiers-0.1.15.dev443 → verifiers-0.2.1}/verifiers/envs/experimental/composable/tasksets/cp/test_utils.py +0 -0
- {verifiers-0.1.15.dev443 → verifiers-0.2.1}/verifiers/envs/experimental/composable/tasksets/harbor/__init__.py +0 -0
- {verifiers-0.1.15.dev443 → verifiers-0.2.1}/verifiers/envs/experimental/composable/tasksets/harbor/cli_gym.py +0 -0
- {verifiers-0.1.15.dev443 → verifiers-0.2.1}/verifiers/envs/experimental/composable/tasksets/harbor/harbor.py +0 -0
- {verifiers-0.1.15.dev443 → verifiers-0.2.1}/verifiers/envs/experimental/composable/tasksets/harbor/terminal_lego.py +0 -0
- {verifiers-0.1.15.dev443 → verifiers-0.2.1}/verifiers/envs/experimental/composable/tasksets/math/__init__.py +0 -0
- {verifiers-0.1.15.dev443 → verifiers-0.2.1}/verifiers/envs/experimental/composable/tasksets/math/math_task.py +0 -0
- {verifiers-0.1.15.dev443 → verifiers-0.2.1}/verifiers/envs/experimental/composable/tasksets/swe/README.md +0 -0
- {verifiers-0.1.15.dev443 → verifiers-0.2.1}/verifiers/envs/experimental/composable/tasksets/swe/__init__.py +0 -0
- {verifiers-0.1.15.dev443 → verifiers-0.2.1}/verifiers/envs/experimental/composable/tasksets/swe/multi_swe/__init__.py +0 -0
- {verifiers-0.1.15.dev443 → verifiers-0.2.1}/verifiers/envs/experimental/composable/tasksets/swe/multi_swe/extract_fix_patch.sh +0 -0
- {verifiers-0.1.15.dev443 → verifiers-0.2.1}/verifiers/envs/experimental/composable/tasksets/swe/multi_swe/taskset.py +0 -0
- {verifiers-0.1.15.dev443 → verifiers-0.2.1}/verifiers/envs/experimental/composable/tasksets/swe/openswe/__init__.py +0 -0
- {verifiers-0.1.15.dev443 → verifiers-0.2.1}/verifiers/envs/experimental/composable/tasksets/swe/openswe/taskset.py +0 -0
- {verifiers-0.1.15.dev443 → verifiers-0.2.1}/verifiers/envs/experimental/composable/tasksets/swe/r2e_gym/__init__.py +0 -0
- {verifiers-0.1.15.dev443 → verifiers-0.2.1}/verifiers/envs/experimental/composable/tasksets/swe/r2e_gym/log_parser.py +0 -0
- {verifiers-0.1.15.dev443 → verifiers-0.2.1}/verifiers/envs/experimental/composable/tasksets/swe/r2e_gym/taskset.py +0 -0
- {verifiers-0.1.15.dev443 → verifiers-0.2.1}/verifiers/envs/experimental/composable/tasksets/swe/scale_swe/__init__.py +0 -0
- {verifiers-0.1.15.dev443 → verifiers-0.2.1}/verifiers/envs/experimental/composable/tasksets/swe/scale_swe/taskset.py +0 -0
- {verifiers-0.1.15.dev443 → verifiers-0.2.1}/verifiers/envs/experimental/composable/tasksets/swe/shared/__init__.py +0 -0
- {verifiers-0.1.15.dev443 → verifiers-0.2.1}/verifiers/envs/experimental/composable/tasksets/swe/shared/test_patch.py +0 -0
- {verifiers-0.1.15.dev443 → verifiers-0.2.1}/verifiers/envs/experimental/composable/tasksets/swe/swe_bench/__init__.py +0 -0
- {verifiers-0.1.15.dev443 → verifiers-0.2.1}/verifiers/envs/experimental/composable/tasksets/swe/swe_bench/taskset.py +0 -0
- {verifiers-0.1.15.dev443 → verifiers-0.2.1}/verifiers/envs/experimental/composable/tasksets/swe/swe_lego/__init__.py +0 -0
- {verifiers-0.1.15.dev443 → verifiers-0.2.1}/verifiers/envs/experimental/composable/tasksets/swe/swe_lego/taskset.py +0 -0
- {verifiers-0.1.15.dev443 → verifiers-0.2.1}/verifiers/envs/experimental/composable/tasksets/swe/swe_rebench_v2/__init__.py +0 -0
- {verifiers-0.1.15.dev443 → verifiers-0.2.1}/verifiers/envs/experimental/composable/tasksets/swe/swe_rebench_v2/log_parsers.py +0 -0
- {verifiers-0.1.15.dev443 → verifiers-0.2.1}/verifiers/envs/experimental/composable/tasksets/swe/swe_rebench_v2/taskset.py +0 -0
- {verifiers-0.1.15.dev443 → verifiers-0.2.1}/verifiers/envs/experimental/composable/tasksets/swe/swe_smith/__init__.py +0 -0
- {verifiers-0.1.15.dev443 → verifiers-0.2.1}/verifiers/envs/experimental/composable/tasksets/swe/swe_smith/taskset.py +0 -0
- {verifiers-0.1.15.dev443 → verifiers-0.2.1}/verifiers/envs/experimental/composable/tasksets/swe/swe_tasksets.py +0 -0
- {verifiers-0.1.15.dev443 → verifiers-0.2.1}/verifiers/envs/experimental/gym_env.py +0 -0
- {verifiers-0.1.15.dev443 → verifiers-0.2.1}/verifiers/envs/experimental/harbor_env/__init__.py +0 -0
- {verifiers-0.1.15.dev443 → verifiers-0.2.1}/verifiers/envs/experimental/harbor_env/env.py +0 -0
- {verifiers-0.1.15.dev443 → verifiers-0.2.1}/verifiers/envs/experimental/harbor_env/mcp.py +0 -0
- {verifiers-0.1.15.dev443 → verifiers-0.2.1}/verifiers/envs/experimental/mcp_env.py +0 -0
- {verifiers-0.1.15.dev443 → verifiers-0.2.1}/verifiers/envs/experimental/opencode_env.py +0 -0
- {verifiers-0.1.15.dev443 → verifiers-0.2.1}/verifiers/envs/experimental/opencode_qa_env.py +0 -0
- {verifiers-0.1.15.dev443 → verifiers-0.2.1}/verifiers/envs/experimental/opencode_rlm_env.py +0 -0
- {verifiers-0.1.15.dev443 → verifiers-0.2.1}/verifiers/envs/experimental/sandbox_mixin.py +0 -0
- {verifiers-0.1.15.dev443 → verifiers-0.2.1}/verifiers/envs/experimental/utils/__init__.py +0 -0
- {verifiers-0.1.15.dev443 → verifiers-0.2.1}/verifiers/envs/experimental/utils/file_locks.py +0 -0
- {verifiers-0.1.15.dev443 → verifiers-0.2.1}/verifiers/envs/experimental/utils/git_checkout_cache.py +0 -0
- {verifiers-0.1.15.dev443 → verifiers-0.2.1}/verifiers/envs/integrations/README.md +0 -0
- {verifiers-0.1.15.dev443 → verifiers-0.2.1}/verifiers/envs/integrations/__init__.py +0 -0
- {verifiers-0.1.15.dev443 → verifiers-0.2.1}/verifiers/envs/integrations/browser_env/__init__.py +0 -0
- {verifiers-0.1.15.dev443 → verifiers-0.2.1}/verifiers/envs/integrations/browser_env/browser_env.py +0 -0
- {verifiers-0.1.15.dev443 → verifiers-0.2.1}/verifiers/envs/integrations/browser_env/modes/__init__.py +0 -0
- {verifiers-0.1.15.dev443 → verifiers-0.2.1}/verifiers/envs/integrations/browser_env/modes/base.py +0 -0
- {verifiers-0.1.15.dev443 → verifiers-0.2.1}/verifiers/envs/integrations/browser_env/modes/cua_mode.py +0 -0
- {verifiers-0.1.15.dev443 → verifiers-0.2.1}/verifiers/envs/integrations/browser_env/modes/dom_mode.py +0 -0
- {verifiers-0.1.15.dev443 → verifiers-0.2.1}/verifiers/envs/integrations/openenv_env.py +0 -0
- {verifiers-0.1.15.dev443 → verifiers-0.2.1}/verifiers/envs/integrations/reasoninggym_env.py +0 -0
- {verifiers-0.1.15.dev443 → verifiers-0.2.1}/verifiers/envs/integrations/textarena_env.py +0 -0
- {verifiers-0.1.15.dev443 → verifiers-0.2.1}/verifiers/envs/multiturn_env.py +0 -0
- {verifiers-0.1.15.dev443 → verifiers-0.2.1}/verifiers/envs/python_env.py +0 -0
- {verifiers-0.1.15.dev443 → verifiers-0.2.1}/verifiers/envs/sandbox_env.py +0 -0
- {verifiers-0.1.15.dev443 → verifiers-0.2.1}/verifiers/envs/singleturn_env.py +0 -0
- {verifiers-0.1.15.dev443 → verifiers-0.2.1}/verifiers/envs/stateful_tool_env.py +0 -0
- {verifiers-0.1.15.dev443 → verifiers-0.2.1}/verifiers/envs/tool_env.py +0 -0
- {verifiers-0.1.15.dev443 → verifiers-0.2.1}/verifiers/errors.py +0 -0
- {verifiers-0.1.15.dev443 → verifiers-0.2.1}/verifiers/gepa/__init__.py +0 -0
- {verifiers-0.1.15.dev443 → verifiers-0.2.1}/verifiers/gepa/adapter.py +0 -0
- {verifiers-0.1.15.dev443 → verifiers-0.2.1}/verifiers/gepa/config.py +0 -0
- {verifiers-0.1.15.dev443 → verifiers-0.2.1}/verifiers/gepa/display.py +0 -0
- {verifiers-0.1.15.dev443 → verifiers-0.2.1}/verifiers/gepa/gepa_utils.py +0 -0
- {verifiers-0.1.15.dev443 → verifiers-0.2.1}/verifiers/parsers/__init__.py +0 -0
- {verifiers-0.1.15.dev443 → verifiers-0.2.1}/verifiers/parsers/maybe_think_parser.py +0 -0
- {verifiers-0.1.15.dev443 → verifiers-0.2.1}/verifiers/parsers/parser.py +0 -0
- {verifiers-0.1.15.dev443 → verifiers-0.2.1}/verifiers/parsers/think_parser.py +0 -0
- {verifiers-0.1.15.dev443 → verifiers-0.2.1}/verifiers/parsers/xml_parser.py +0 -0
- {verifiers-0.1.15.dev443 → verifiers-0.2.1}/verifiers/rubrics/__init__.py +0 -0
- {verifiers-0.1.15.dev443 → verifiers-0.2.1}/verifiers/rubrics/experimental/hybrid_math_rubric.py +0 -0
- {verifiers-0.1.15.dev443 → verifiers-0.2.1}/verifiers/rubrics/judge_rubric.py +0 -0
- {verifiers-0.1.15.dev443 → verifiers-0.2.1}/verifiers/rubrics/math_rubric.py +0 -0
- {verifiers-0.1.15.dev443 → verifiers-0.2.1}/verifiers/rubrics/rubric.py +0 -0
- {verifiers-0.1.15.dev443 → verifiers-0.2.1}/verifiers/rubrics/rubric_group.py +0 -0
- {verifiers-0.1.15.dev443 → verifiers-0.2.1}/verifiers/scripts/__init__.py +0 -0
- {verifiers-0.1.15.dev443 → verifiers-0.2.1}/verifiers/scripts/build.py +0 -0
- {verifiers-0.1.15.dev443 → verifiers-0.2.1}/verifiers/scripts/eval.py +0 -0
- {verifiers-0.1.15.dev443 → verifiers-0.2.1}/verifiers/scripts/gepa.py +0 -0
- {verifiers-0.1.15.dev443 → verifiers-0.2.1}/verifiers/scripts/init.py +0 -0
- {verifiers-0.1.15.dev443 → verifiers-0.2.1}/verifiers/scripts/setup.py +0 -0
- {verifiers-0.1.15.dev443 → verifiers-0.2.1}/verifiers/scripts/tui.py +0 -0
- {verifiers-0.1.15.dev443 → verifiers-0.2.1}/verifiers/serve/__init__.py +0 -0
- {verifiers-0.1.15.dev443 → verifiers-0.2.1}/verifiers/serve/client/env_client.py +0 -0
- {verifiers-0.1.15.dev443 → verifiers-0.2.1}/verifiers/serve/client/zmq_env_client.py +0 -0
- {verifiers-0.1.15.dev443 → verifiers-0.2.1}/verifiers/serve/server/__init__.py +0 -0
- {verifiers-0.1.15.dev443 → verifiers-0.2.1}/verifiers/serve/server/env_router.py +0 -0
- {verifiers-0.1.15.dev443 → verifiers-0.2.1}/verifiers/serve/server/env_server.py +0 -0
- {verifiers-0.1.15.dev443 → verifiers-0.2.1}/verifiers/serve/server/env_worker.py +0 -0
- {verifiers-0.1.15.dev443 → verifiers-0.2.1}/verifiers/serve/server/zmq_env_server.py +0 -0
- {verifiers-0.1.15.dev443 → verifiers-0.2.1}/verifiers/serve/types.py +0 -0
- {verifiers-0.1.15.dev443 → verifiers-0.2.1}/verifiers/utils/__init__.py +0 -0
- {verifiers-0.1.15.dev443 → verifiers-0.2.1}/verifiers/utils/async_utils.py +0 -0
- {verifiers-0.1.15.dev443 → verifiers-0.2.1}/verifiers/utils/client_utils.py +0 -0
- {verifiers-0.1.15.dev443 → verifiers-0.2.1}/verifiers/utils/config_utils.py +0 -0
- {verifiers-0.1.15.dev443 → verifiers-0.2.1}/verifiers/utils/data_utils.py +0 -0
- {verifiers-0.1.15.dev443 → verifiers-0.2.1}/verifiers/utils/display_utils.py +0 -0
- {verifiers-0.1.15.dev443 → verifiers-0.2.1}/verifiers/utils/env_config_utils.py +0 -0
- {verifiers-0.1.15.dev443 → verifiers-0.2.1}/verifiers/utils/env_utils.py +0 -0
- {verifiers-0.1.15.dev443 → verifiers-0.2.1}/verifiers/utils/error_utils.py +0 -0
- {verifiers-0.1.15.dev443 → verifiers-0.2.1}/verifiers/utils/eval_display.py +0 -0
- {verifiers-0.1.15.dev443 → verifiers-0.2.1}/verifiers/utils/eval_utils.py +0 -0
- {verifiers-0.1.15.dev443 → verifiers-0.2.1}/verifiers/utils/heartbeat.py +0 -0
- {verifiers-0.1.15.dev443 → verifiers-0.2.1}/verifiers/utils/import_utils.py +0 -0
- {verifiers-0.1.15.dev443 → verifiers-0.2.1}/verifiers/utils/install_utils.py +0 -0
- {verifiers-0.1.15.dev443 → verifiers-0.2.1}/verifiers/utils/interception_utils.py +0 -0
- {verifiers-0.1.15.dev443 → verifiers-0.2.1}/verifiers/utils/logging_utils.py +0 -0
- {verifiers-0.1.15.dev443 → verifiers-0.2.1}/verifiers/utils/message_utils.py +0 -0
- {verifiers-0.1.15.dev443 → verifiers-0.2.1}/verifiers/utils/metric_utils.py +0 -0
- {verifiers-0.1.15.dev443 → verifiers-0.2.1}/verifiers/utils/path_utils.py +0 -0
- {verifiers-0.1.15.dev443 → verifiers-0.2.1}/verifiers/utils/pricing_utils.py +0 -0
- {verifiers-0.1.15.dev443 → verifiers-0.2.1}/verifiers/utils/process_utils.py +0 -0
- {verifiers-0.1.15.dev443 → verifiers-0.2.1}/verifiers/utils/response_utils.py +0 -0
- {verifiers-0.1.15.dev443 → verifiers-0.2.1}/verifiers/utils/save_utils.py +0 -0
- {verifiers-0.1.15.dev443 → verifiers-0.2.1}/verifiers/utils/serve_utils.py +0 -0
- {verifiers-0.1.15.dev443 → verifiers-0.2.1}/verifiers/utils/thread_utils.py +0 -0
- {verifiers-0.1.15.dev443 → verifiers-0.2.1}/verifiers/utils/threaded_sandbox_client.py +0 -0
- {verifiers-0.1.15.dev443 → verifiers-0.2.1}/verifiers/utils/tool_utils.py +0 -0
- {verifiers-0.1.15.dev443 → verifiers-0.2.1}/verifiers/utils/usage_utils.py +0 -0
- {verifiers-0.1.15.dev443 → verifiers-0.2.1}/verifiers/utils/version_utils.py +0 -0
- {verifiers-0.1.15.dev443 → verifiers-0.2.1}/verifiers/v1/cli/__init__.py +0 -0
- {verifiers-0.1.15.dev443 → verifiers-0.2.1}/verifiers/v1/cli/dashboard/__init__.py +0 -0
- {verifiers-0.1.15.dev443 → verifiers-0.2.1}/verifiers/v1/cli/eval/__init__.py +0 -0
- {verifiers-0.1.15.dev443 → verifiers-0.2.1}/verifiers/v1/cli/output.py +0 -0
- {verifiers-0.1.15.dev443 → verifiers-0.2.1}/verifiers/v1/cli/resolve.py +0 -0
- {verifiers-0.1.15.dev443 → verifiers-0.2.1}/verifiers/v1/cli/serve.py +0 -0
- {verifiers-0.1.15.dev443 → verifiers-0.2.1}/verifiers/v1/clients/__init__.py +0 -0
- {verifiers-0.1.15.dev443 → verifiers-0.2.1}/verifiers/v1/clients/client.py +0 -0
- {verifiers-0.1.15.dev443 → verifiers-0.2.1}/verifiers/v1/clients/config.py +0 -0
- {verifiers-0.1.15.dev443 → verifiers-0.2.1}/verifiers/v1/clients/eval.py +0 -0
- {verifiers-0.1.15.dev443 → verifiers-0.2.1}/verifiers/v1/configs/__init__.py +0 -0
- {verifiers-0.1.15.dev443 → verifiers-0.2.1}/verifiers/v1/configs/init.py +0 -0
- {verifiers-0.1.15.dev443 → verifiers-0.2.1}/verifiers/v1/configs/replay.py +0 -0
- {verifiers-0.1.15.dev443 → verifiers-0.2.1}/verifiers/v1/configs/serve.py +0 -0
- {verifiers-0.1.15.dev443 → verifiers-0.2.1}/verifiers/v1/decorators.py +0 -0
- {verifiers-0.1.15.dev443 → verifiers-0.2.1}/verifiers/v1/dialects/__init__.py +0 -0
- {verifiers-0.1.15.dev443 → verifiers-0.2.1}/verifiers/v1/episode.py +0 -0
- {verifiers-0.1.15.dev443 → verifiers-0.2.1}/verifiers/v1/harnesses/codex/__init__.py +0 -0
- {verifiers-0.1.15.dev443 → verifiers-0.2.1}/verifiers/v1/harnesses/kimi_code/__init__.py +0 -0
- {verifiers-0.1.15.dev443 → verifiers-0.2.1}/verifiers/v1/harnesses/mini_swe_agent/__init__.py +0 -0
- {verifiers-0.1.15.dev443 → verifiers-0.2.1}/verifiers/v1/harnesses/null/__init__.py +0 -0
- {verifiers-0.1.15.dev443 → verifiers-0.2.1}/verifiers/v1/harnesses/rlm/__init__.py +0 -0
- {verifiers-0.1.15.dev443 → verifiers-0.2.1}/verifiers/v1/harnesses/rlm/harness.py +0 -0
- {verifiers-0.1.15.dev443 → verifiers-0.2.1}/verifiers/v1/harnesses/terminus_2/__init__.py +0 -0
- {verifiers-0.1.15.dev443 → verifiers-0.2.1}/verifiers/v1/harnesses/terminus_2/harness.py +0 -0
- {verifiers-0.1.15.dev443 → verifiers-0.2.1}/verifiers/v1/harnesses/terminus_2/program.py +0 -0
- {verifiers-0.1.15.dev443 → verifiers-0.2.1}/verifiers/v1/judge.py +0 -0
- {verifiers-0.1.15.dev443 → verifiers-0.2.1}/verifiers/v1/judges/__init__.py +0 -0
- {verifiers-0.1.15.dev443 → verifiers-0.2.1}/verifiers/v1/judges/reference.py +0 -0
- {verifiers-0.1.15.dev443 → verifiers-0.2.1}/verifiers/v1/judges/reference.txt +0 -0
- {verifiers-0.1.15.dev443 → verifiers-0.2.1}/verifiers/v1/judges/rubric.py +0 -0
- {verifiers-0.1.15.dev443 → verifiers-0.2.1}/verifiers/v1/judges/rubric.txt +0 -0
- {verifiers-0.1.15.dev443 → verifiers-0.2.1}/verifiers/v1/mcp/toolset.py +0 -0
- {verifiers-0.1.15.dev443 → verifiers-0.2.1}/verifiers/v1/retries.py +0 -0
- {verifiers-0.1.15.dev443 → verifiers-0.2.1}/verifiers/v1/runtimes/subprocess.py +0 -0
- {verifiers-0.1.15.dev443 → verifiers-0.2.1}/verifiers/v1/scoring.py +0 -0
- {verifiers-0.1.15.dev443 → verifiers-0.2.1}/verifiers/v1/serve/__init__.py +0 -0
- {verifiers-0.1.15.dev443 → verifiers-0.2.1}/verifiers/v1/serve/client.py +0 -0
- {verifiers-0.1.15.dev443 → verifiers-0.2.1}/verifiers/v1/state.py +0 -0
- {verifiers-0.1.15.dev443 → verifiers-0.2.1}/verifiers/v1/task.py +0 -0
- {verifiers-0.1.15.dev443 → verifiers-0.2.1}/verifiers/v1/tasksets/harbor/__init__.py +0 -0
- {verifiers-0.1.15.dev443 → verifiers-0.2.1}/verifiers/v1/tasksets/lean/__init__.py +0 -0
- {verifiers-0.1.15.dev443 → verifiers-0.2.1}/verifiers/v1/tasksets/lean/scoring.py +0 -0
- {verifiers-0.1.15.dev443 → verifiers-0.2.1}/verifiers/v1/tasksets/textarena/__init__.py +0 -0
- {verifiers-0.1.15.dev443 → verifiers-0.2.1}/verifiers/v1/utils/__init__.py +0 -0
- {verifiers-0.1.15.dev443 → verifiers-0.2.1}/verifiers/v1/utils/aio.py +0 -0
- {verifiers-0.1.15.dev443 → verifiers-0.2.1}/verifiers/v1/utils/format.py +0 -0
- {verifiers-0.1.15.dev443 → verifiers-0.2.1}/verifiers/v1/utils/generic.py +0 -0
- {verifiers-0.1.15.dev443 → verifiers-0.2.1}/verifiers/v1/utils/install.py +0 -0
- {verifiers-0.1.15.dev443 → verifiers-0.2.1}/verifiers/v1/utils/logging.py +0 -0
- {verifiers-0.1.15.dev443 → verifiers-0.2.1}/verifiers/v1/utils/memory.py +0 -0
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
Metadata-Version: 2.4
|
|
2
2
|
Name: verifiers
|
|
3
|
-
Version: 0.1
|
|
3
|
+
Version: 0.2.1
|
|
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
|
|
@@ -24,56 +24,42 @@ Requires-Python: <3.14,>=3.11
|
|
|
24
24
|
Requires-Dist: aiohttp>=3.9.0
|
|
25
25
|
Requires-Dist: aiolimiter>=1.2.1
|
|
26
26
|
Requires-Dist: anthropic>=0.78.0
|
|
27
|
-
Requires-Dist: datasets<
|
|
28
|
-
Requires-Dist: gepa
|
|
27
|
+
Requires-Dist: datasets<6.0.0,>=3.3.0
|
|
28
|
+
Requires-Dist: gepa>=0.0.6
|
|
29
29
|
Requires-Dist: httpx>=0.27.0
|
|
30
30
|
Requires-Dist: loguru>=0.7.0
|
|
31
31
|
Requires-Dist: math-verify>=0.8.0
|
|
32
|
-
Requires-Dist: mcp
|
|
32
|
+
Requires-Dist: mcp<2,>=1.24.0
|
|
33
33
|
Requires-Dist: msgpack>=1.1.2
|
|
34
|
-
Requires-Dist: numpy
|
|
35
|
-
Requires-Dist: openai-agents>=0.
|
|
36
|
-
Requires-Dist: openai>=
|
|
37
|
-
Requires-Dist: prime-pydantic-config[toml]>=0.
|
|
38
|
-
Requires-Dist: prime-sandboxes>=0.2.
|
|
34
|
+
Requires-Dist: numpy>=2.1.0
|
|
35
|
+
Requires-Dist: openai-agents>=0.8.2
|
|
36
|
+
Requires-Dist: openai>=2.9.0
|
|
37
|
+
Requires-Dist: prime-pydantic-config[toml]>=0.4.2
|
|
38
|
+
Requires-Dist: prime-sandboxes>=0.2.31
|
|
39
39
|
Requires-Dist: prime-tunnel>=0.1.8
|
|
40
|
-
Requires-Dist: pydantic>=2.
|
|
40
|
+
Requires-Dist: pydantic>=2.12.3
|
|
41
41
|
Requires-Dist: pyzmq>=27.1.0
|
|
42
|
-
Requires-Dist: renderers>=0.1.8
|
|
42
|
+
Requires-Dist: renderers>=0.1.8
|
|
43
43
|
Requires-Dist: requests
|
|
44
|
-
Requires-Dist: rich
|
|
44
|
+
Requires-Dist: rich>=11.0.0
|
|
45
45
|
Requires-Dist: setproctitle>=1.3.0
|
|
46
46
|
Requires-Dist: tenacity>=8.5.0
|
|
47
47
|
Requires-Dist: tomli-w>=1.0.0
|
|
48
|
-
Requires-Dist: typing-extensions
|
|
48
|
+
Requires-Dist: typing-extensions>=4.12.2
|
|
49
49
|
Requires-Dist: uvloop>=0.21.0; sys_platform != 'win32' and sys_platform != 'cygwin' and platform_python_implementation != 'PyPy'
|
|
50
50
|
Provides-Extra: browser
|
|
51
|
-
Requires-Dist: aiohttp>=3.9.0; extra == 'browser'
|
|
52
51
|
Requires-Dist: python-dotenv>=1.0.0; extra == 'browser'
|
|
53
|
-
Requires-Dist: stagehand>=3.
|
|
52
|
+
Requires-Dist: stagehand>=3.4.0; extra == 'browser'
|
|
54
53
|
Provides-Extra: harbor
|
|
55
54
|
Requires-Dist: harbor==0.14.0; (python_version >= '3.12') and extra == 'harbor'
|
|
56
55
|
Provides-Extra: modal
|
|
57
56
|
Requires-Dist: modal>=1.4.0; extra == 'modal'
|
|
58
57
|
Provides-Extra: notebook
|
|
59
58
|
Requires-Dist: nest-asyncio>=1.6.0; extra == 'notebook'
|
|
60
|
-
Provides-Extra:
|
|
61
|
-
Requires-Dist:
|
|
62
|
-
Requires-Dist: pillow; extra == 'quest'
|
|
63
|
-
Requires-Dist: pymupdf; extra == 'quest'
|
|
59
|
+
Provides-Extra: openenv
|
|
60
|
+
Requires-Dist: openenv>=0.4.1; extra == 'openenv'
|
|
64
61
|
Provides-Extra: rg
|
|
65
|
-
Requires-Dist: reasoning-gym; extra == 'rg'
|
|
66
|
-
Provides-Extra: rl
|
|
67
|
-
Requires-Dist: accelerate>=1.4.0; extra == 'rl'
|
|
68
|
-
Requires-Dist: deepspeed>=0.17.6; extra == 'rl'
|
|
69
|
-
Requires-Dist: flash-attn>=2.8.3; extra == 'rl'
|
|
70
|
-
Requires-Dist: liger-kernel>=0.5.10; extra == 'rl'
|
|
71
|
-
Requires-Dist: peft; extra == 'rl'
|
|
72
|
-
Requires-Dist: requests; extra == 'rl'
|
|
73
|
-
Requires-Dist: torch<2.9.0,>=2.8.0; extra == 'rl'
|
|
74
|
-
Requires-Dist: transformers>=4.56.2; extra == 'rl'
|
|
75
|
-
Requires-Dist: vllm<0.11.0,>=0.10.0; extra == 'rl'
|
|
76
|
-
Requires-Dist: wandb; extra == 'rl'
|
|
62
|
+
Requires-Dist: reasoning-gym>=0.1.8; extra == 'rg'
|
|
77
63
|
Provides-Extra: ta
|
|
78
64
|
Requires-Dist: nltk>=3.9.2; extra == 'ta'
|
|
79
65
|
Requires-Dist: textarena==0.7.4; extra == 'ta'
|
|
@@ -28,72 +28,69 @@ classifiers = [
|
|
|
28
28
|
|
|
29
29
|
dependencies = [
|
|
30
30
|
"anthropic>=0.78.0",
|
|
31
|
-
"datasets>=3.0.0
|
|
32
|
-
"numpy",
|
|
31
|
+
"datasets>=3.3.0,<6.0.0",
|
|
32
|
+
"numpy>=2.1.0",
|
|
33
33
|
"math-verify>=0.8.0",
|
|
34
|
-
"mcp>=1.
|
|
35
|
-
"openai>=
|
|
36
|
-
"openai-agents>=0.
|
|
34
|
+
"mcp>=1.24.0,<2",
|
|
35
|
+
"openai>=2.9.0",
|
|
36
|
+
"openai-agents>=0.8.2",
|
|
37
37
|
"prime-tunnel>=0.1.8",
|
|
38
|
-
"prime-sandboxes>=0.2.
|
|
39
|
-
"pydantic>=2.
|
|
38
|
+
"prime-sandboxes>=0.2.31",
|
|
39
|
+
"pydantic>=2.12.3",
|
|
40
40
|
"requests",
|
|
41
|
-
"rich",
|
|
41
|
+
"rich>=11.0.0",
|
|
42
42
|
"tenacity>=8.5.0",
|
|
43
|
-
"gepa",
|
|
43
|
+
"gepa>=0.0.6",
|
|
44
44
|
"pyzmq>=27.1.0",
|
|
45
45
|
"msgpack>=1.1.2",
|
|
46
46
|
"aiolimiter>=1.2.1",
|
|
47
47
|
"setproctitle>=1.3.0",
|
|
48
48
|
"httpx>=0.27.0",
|
|
49
49
|
"aiohttp>=3.9.0",
|
|
50
|
-
"prime-pydantic-config[toml]>=0.
|
|
50
|
+
"prime-pydantic-config[toml]>=0.4.2",
|
|
51
51
|
"uvloop>=0.21.0; sys_platform != 'win32' and sys_platform != 'cygwin' and platform_python_implementation != 'PyPy'",
|
|
52
52
|
"loguru>=0.7.0",
|
|
53
53
|
"tomli-w>=1.0.0",
|
|
54
|
-
"renderers>=0.1.8
|
|
55
|
-
"typing_extensions
|
|
54
|
+
"renderers>=0.1.8",
|
|
55
|
+
"typing_extensions>=4.12.2",
|
|
56
56
|
]
|
|
57
57
|
|
|
58
58
|
[dependency-groups]
|
|
59
59
|
dev = [
|
|
60
|
-
"ruff",
|
|
61
|
-
"pre-commit",
|
|
60
|
+
"ruff>=0.9.0",
|
|
61
|
+
"pre-commit>=2.19.0",
|
|
62
62
|
"ty>=0.0.1a29,<0.0.22",
|
|
63
|
-
"pytest>=7.0.0",
|
|
63
|
+
"pytest>=7.0.0,<9.1.0",
|
|
64
64
|
"pytest-asyncio>=0.21.0",
|
|
65
65
|
"pytest-cov>=4.0.0",
|
|
66
66
|
"pytest-xdist>=3.8.0",
|
|
67
|
-
"
|
|
68
|
-
"
|
|
69
|
-
"
|
|
70
|
-
"stagehand>=3.0.0",
|
|
71
|
-
"aiohttp>=3.9.0",
|
|
67
|
+
"nest-asyncio>=1.6.0",
|
|
68
|
+
"reasoning-gym>=0.1.8",
|
|
69
|
+
"stagehand>=3.4.0",
|
|
72
70
|
"python-dotenv>=1.0.0",
|
|
73
71
|
"nltk>=3.9.2",
|
|
74
72
|
"textarena==0.7.4",
|
|
75
73
|
]
|
|
76
|
-
#
|
|
74
|
+
# V1 examples and support packages, resolved from their local sources below.
|
|
77
75
|
# Installed by default (tool.uv.default-groups) so the v1 CLIs (eval <id>, serve) run straight
|
|
78
76
|
# from this repo. The built-in tasksets/harnesses ship inside verifiers (verifiers/v1/...).
|
|
79
77
|
examples = [
|
|
80
78
|
"compact",
|
|
81
79
|
"gsm8k-v1", "glossary-v1", "deepwiki-v1", "wiki-search-v1", "code-golf-v1",
|
|
82
80
|
"reverse-text-v1", "color-codeword-v1",
|
|
83
|
-
"wordle-v1", "alphabet-sort-v1", "scratchpad-v1",
|
|
81
|
+
"wordle-v1", "openenv-wordle-v1", "alphabet-sort-v1", "scratchpad-v1",
|
|
84
82
|
]
|
|
85
83
|
|
|
86
84
|
[project.optional-dependencies]
|
|
87
85
|
rg = [
|
|
88
|
-
"reasoning-gym",
|
|
86
|
+
"reasoning-gym>=0.1.8",
|
|
89
87
|
]
|
|
90
88
|
ta = [
|
|
91
89
|
"textarena==0.7.4",
|
|
92
90
|
"nltk>=3.9.2",
|
|
93
91
|
]
|
|
94
92
|
browser = [
|
|
95
|
-
"stagehand>=3.
|
|
96
|
-
"aiohttp>=3.9.0",
|
|
93
|
+
"stagehand>=3.4.0",
|
|
97
94
|
"python-dotenv>=1.0.0",
|
|
98
95
|
]
|
|
99
96
|
harbor = [
|
|
@@ -106,24 +103,9 @@ modal = [
|
|
|
106
103
|
notebook = [
|
|
107
104
|
"nest-asyncio>=1.6.0",
|
|
108
105
|
]
|
|
109
|
-
|
|
110
|
-
"
|
|
111
|
-
"pillow",
|
|
112
|
-
"pymupdf",
|
|
113
|
-
]
|
|
114
|
-
rl = [
|
|
115
|
-
"torch>=2.8.0,<2.9.0",
|
|
116
|
-
"transformers>=4.56.2",
|
|
117
|
-
"accelerate>=1.4.0",
|
|
118
|
-
"requests",
|
|
119
|
-
"peft",
|
|
120
|
-
"wandb",
|
|
121
|
-
"vllm>=0.10.0,<0.11.0",
|
|
122
|
-
"liger-kernel>=0.5.10",
|
|
123
|
-
"deepspeed>=0.17.6",
|
|
124
|
-
"flash-attn>=2.8.3",
|
|
106
|
+
openenv = [
|
|
107
|
+
"openenv>=0.4.1",
|
|
125
108
|
]
|
|
126
|
-
|
|
127
109
|
[tool.uv]
|
|
128
110
|
preview = true
|
|
129
111
|
required-version = ">=0.11.1"
|
|
@@ -143,8 +125,8 @@ wiki-search-v1 = { path = "environments/wiki_search_v1", editable = true }
|
|
|
143
125
|
gsm8k-v1 = { path = "environments/gsm8k_v1", editable = true }
|
|
144
126
|
code-golf-v1 = { path = "environments/code_golf_v1", editable = true }
|
|
145
127
|
reverse-text-v1 = { path = "environments/reverse_text_v1", editable = true }
|
|
146
|
-
reverse-text = { path = "environments/reverse_text", editable = true }
|
|
147
128
|
wordle-v1 = { path = "environments/wordle_v1", editable = true }
|
|
129
|
+
openenv-wordle-v1 = { path = "environments/openenv_wordle_v1", editable = true }
|
|
148
130
|
color-codeword-v1 = { path = "environments/color_codeword_v1", editable = true }
|
|
149
131
|
alphabet-sort-v1 = { path = "environments/alphabet_sort_v1", editable = true }
|
|
150
132
|
scratchpad-v1 = { path = "environments/scratchpad_v1", editable = true }
|
|
@@ -156,12 +138,6 @@ prime-sandboxes = false
|
|
|
156
138
|
prime-pydantic-config = false
|
|
157
139
|
renderers = false
|
|
158
140
|
|
|
159
|
-
[tool.uv.extra-build-dependencies]
|
|
160
|
-
flash-attn = [{ requirement = "torch", match-runtime = true }]
|
|
161
|
-
|
|
162
|
-
[tool.uv.extra-build-variables]
|
|
163
|
-
flash-attn = { FLASH_ATTENTION_SKIP_CUDA_BUILD = "TRUE" }
|
|
164
|
-
|
|
165
141
|
[project.scripts]
|
|
166
142
|
vf-eval = "verifiers.scripts.eval:main"
|
|
167
143
|
eval = "verifiers.v1.cli.eval.main:main"
|
|
@@ -170,6 +146,7 @@ debug = "verifiers.v1.cli.debug:main"
|
|
|
170
146
|
replay = "verifiers.v1.cli.replay:main"
|
|
171
147
|
serve = "verifiers.v1.cli.serve:main"
|
|
172
148
|
init = "verifiers.v1.cli.init:main"
|
|
149
|
+
gepa = "verifiers.v1.cli.gepa:main"
|
|
173
150
|
vf-gepa = "verifiers.scripts.gepa:main"
|
|
174
151
|
vf-init = "verifiers.scripts.init:main"
|
|
175
152
|
vf-install = "verifiers.scripts.install:main"
|
|
@@ -248,7 +225,7 @@ markers = [
|
|
|
248
225
|
"modal: v1 e2e cases touching the modal runtime (local-only setup; excluded in CI)",
|
|
249
226
|
"colocated: v1 e2e cases with a user/tool server colocated in the harness runtime",
|
|
250
227
|
"null: v1 e2e cases on the null harness",
|
|
251
|
-
"
|
|
228
|
+
"bash: v1 e2e cases on the bash harness",
|
|
252
229
|
"rlm: v1 e2e cases on the rlm harness",
|
|
253
230
|
"kimi_code: v1 e2e cases on the kimi-code harness",
|
|
254
231
|
"codex: v1 e2e cases on the codex harness",
|
|
@@ -39,6 +39,12 @@ from verifiers.types import (
|
|
|
39
39
|
from verifiers.utils.save_utils import state_to_output
|
|
40
40
|
|
|
41
41
|
|
|
42
|
+
def pytest_configure(config) -> None:
|
|
43
|
+
config.addinivalue_line(
|
|
44
|
+
"markers", "claude_code: v1 e2e cases on the claude-code harness"
|
|
45
|
+
)
|
|
46
|
+
|
|
47
|
+
|
|
42
48
|
@pytest.fixture
|
|
43
49
|
def basic_parser():
|
|
44
50
|
"""Return a basic Parser instance."""
|
|
@@ -452,98 +452,6 @@ class TestDOMModeLLMConfig:
|
|
|
452
452
|
assert config is None
|
|
453
453
|
|
|
454
454
|
|
|
455
|
-
# ============================================================================
|
|
456
|
-
# Example Environment Tests
|
|
457
|
-
# ============================================================================
|
|
458
|
-
|
|
459
|
-
|
|
460
|
-
class TestExampleDatasets:
|
|
461
|
-
"""Tests for example environment datasets."""
|
|
462
|
-
|
|
463
|
-
def test_dom_example_dataset_structure(self):
|
|
464
|
-
"""Test DOM example dataset has correct structure."""
|
|
465
|
-
from environments.browser_dom_example.browser_dom_example import (
|
|
466
|
-
create_example_dataset,
|
|
467
|
-
)
|
|
468
|
-
|
|
469
|
-
dataset = create_example_dataset()
|
|
470
|
-
|
|
471
|
-
assert "question" in dataset.column_names
|
|
472
|
-
assert "answer" in dataset.column_names
|
|
473
|
-
assert "start_url" in dataset.column_names
|
|
474
|
-
assert "task_id" in dataset.column_names
|
|
475
|
-
assert len(dataset) >= 1
|
|
476
|
-
|
|
477
|
-
def test_cua_example_dataset_structure(self):
|
|
478
|
-
"""Test CUA example dataset has correct structure."""
|
|
479
|
-
from environments.browser_cua_example.browser_cua_example import (
|
|
480
|
-
create_example_dataset,
|
|
481
|
-
)
|
|
482
|
-
|
|
483
|
-
dataset = create_example_dataset()
|
|
484
|
-
|
|
485
|
-
assert "question" in dataset.column_names
|
|
486
|
-
assert "answer" in dataset.column_names
|
|
487
|
-
assert "start_url" in dataset.column_names
|
|
488
|
-
assert "task_id" in dataset.column_names
|
|
489
|
-
assert len(dataset) >= 1
|
|
490
|
-
|
|
491
|
-
|
|
492
|
-
class TestJudgeAnswer:
|
|
493
|
-
"""Tests for judge_answer reward function."""
|
|
494
|
-
|
|
495
|
-
@pytest.mark.asyncio
|
|
496
|
-
async def test_judge_answer_returns_1_for_yes(self):
|
|
497
|
-
"""Test that judge_answer returns 1.0 when judge says yes."""
|
|
498
|
-
from environments.browser_dom_example.browser_dom_example import judge_answer
|
|
499
|
-
|
|
500
|
-
async def mock_judge(prompt, completion, answer, state):
|
|
501
|
-
return "yes, the answer is correct"
|
|
502
|
-
|
|
503
|
-
result = await judge_answer(
|
|
504
|
-
judge=mock_judge,
|
|
505
|
-
prompt="What is 2+2?",
|
|
506
|
-
completion=[{"role": "assistant", "content": "The answer is 4"}],
|
|
507
|
-
answer="4",
|
|
508
|
-
state={},
|
|
509
|
-
)
|
|
510
|
-
assert result == 1.0
|
|
511
|
-
|
|
512
|
-
@pytest.mark.asyncio
|
|
513
|
-
async def test_judge_answer_returns_0_for_no(self):
|
|
514
|
-
"""Test that judge_answer returns 0.0 when judge says no."""
|
|
515
|
-
from environments.browser_dom_example.browser_dom_example import judge_answer
|
|
516
|
-
|
|
517
|
-
async def mock_judge(prompt, completion, answer, state):
|
|
518
|
-
return "no, the answer is incorrect"
|
|
519
|
-
|
|
520
|
-
result = await judge_answer(
|
|
521
|
-
judge=mock_judge,
|
|
522
|
-
prompt="What is 2+2?",
|
|
523
|
-
completion=[{"role": "assistant", "content": "The answer is 5"}],
|
|
524
|
-
answer="4",
|
|
525
|
-
state={},
|
|
526
|
-
)
|
|
527
|
-
assert result == 0.0
|
|
528
|
-
|
|
529
|
-
@pytest.mark.asyncio
|
|
530
|
-
async def test_judge_answer_case_insensitive(self):
|
|
531
|
-
"""Test that judge response check is case insensitive."""
|
|
532
|
-
from environments.browser_dom_example.browser_dom_example import judge_answer
|
|
533
|
-
|
|
534
|
-
async def mock_judge(prompt, completion, answer, state):
|
|
535
|
-
return "YES"
|
|
536
|
-
|
|
537
|
-
result = await judge_answer(
|
|
538
|
-
judge=mock_judge,
|
|
539
|
-
prompt="test",
|
|
540
|
-
completion="test",
|
|
541
|
-
answer="test",
|
|
542
|
-
state={},
|
|
543
|
-
)
|
|
544
|
-
assert result == 1.0
|
|
545
|
-
|
|
546
|
-
|
|
547
455
|
# ============================================================================
|
|
548
456
|
# Constants Tests
|
|
549
457
|
# ============================================================================
|
|
@@ -73,7 +73,7 @@ class TestIsHubEnv:
|
|
|
73
73
|
assert is_hub_env("gsm8k") is False
|
|
74
74
|
|
|
75
75
|
def test_local_env_relative_path(self):
|
|
76
|
-
assert is_hub_env("./environments/
|
|
76
|
+
assert is_hub_env("./environments/gsm8k_v1") is False
|
|
77
77
|
|
|
78
78
|
def test_local_env_absolute_path(self):
|
|
79
79
|
assert is_hub_env("/path/to/gsm8k") is False
|
|
@@ -15,15 +15,16 @@ Every matrix value carries a pytest mark, so subsets select with `-m`:
|
|
|
15
15
|
uv run pytest tests/v1 -n auto # the whole matrix (needs modal setup)
|
|
16
16
|
uv run pytest tests/v1 -n auto -m "not prime and not modal" # the CI matrix (host + docker only)
|
|
17
17
|
uv run pytest tests/v1 -n auto -m docker # any case touching the docker runtime
|
|
18
|
-
uv run pytest tests/v1 -n auto -m
|
|
18
|
+
uv run pytest tests/v1 -n auto -m bash # only the bash harness
|
|
19
19
|
uv run pytest tests/v1 -n auto -m prime # only prime (real sandboxes; local)
|
|
20
20
|
uv run pytest tests/v1 -n auto -m modal # only modal (needs local setup)
|
|
21
21
|
|
|
22
22
|
Marks: runtimes `subprocess` / `docker` / `prime` / `modal`, placement `colocated`,
|
|
23
|
-
harnesses `null` / `
|
|
24
|
-
selects every case touching that value on ANY axis; for one exact combination use `-k`
|
|
25
|
-
id (e.g. `-k "harness-in-docker-with-tool-in-subprocess"`). prime/modal provision real
|
|
26
|
-
sandboxes (slow, infra-flaky, need setup), so they're local-only — CI runs
|
|
23
|
+
harnesses `null` / `bash` / `rlm` / `kimi_code` / `codex` / `claude_code`. A mark is applied per
|
|
24
|
+
axis, so it selects every case touching that value on ANY axis; for one exact combination use `-k`
|
|
25
|
+
on the test id (e.g. `-k "harness-in-docker-with-tool-in-subprocess"`). prime/modal provision real
|
|
26
|
+
remote sandboxes (slow, infra-flaky, need setup), so they're local-only — CI runs
|
|
27
|
+
`-m "not prime and not modal"`.
|
|
27
28
|
"""
|
|
28
29
|
|
|
29
30
|
import os
|
|
@@ -103,18 +104,19 @@ def tool_runtime(request) -> dict:
|
|
|
103
104
|
return {"runtime": {"type": request.param}}
|
|
104
105
|
|
|
105
106
|
|
|
106
|
-
# Harnesses, composed with the runtime fixtures, each carrying its harness mark (`-m
|
|
107
|
-
# Built-ins are bundled in the `harnesses` package; the agent CLIs (`rlm` / `kimi-code` / `codex`
|
|
108
|
-
# install their dependencies at rollout. `compact` (an example harness) and
|
|
109
|
-
# the host tmux) are excluded. `test_agentic` skips `null` (a chat loop with no
|
|
110
|
-
# `test_single_turn` skips
|
|
107
|
+
# Harnesses, composed with the runtime fixtures, each carrying its harness mark (`-m bash`, ...).
|
|
108
|
+
# Built-ins are bundled in the `harnesses` package; the agent CLIs (`rlm` / `kimi-code` / `codex` /
|
|
109
|
+
# `claude-code`) install their dependencies at rollout. `compact` (an example harness) and
|
|
110
|
+
# `terminus-2` (drives the host tmux) are excluded. `test_agentic` skips `null` (a chat loop with no
|
|
111
|
+
# shell); `test_single_turn` skips the coding agents, which are unreliable on a no-op echo.
|
|
111
112
|
@pytest.fixture(
|
|
112
113
|
params=[
|
|
113
114
|
pytest.param("null", marks=pytest.mark.null, id="null"),
|
|
114
|
-
pytest.param("
|
|
115
|
+
pytest.param("bash", marks=pytest.mark.bash, id="bash"),
|
|
115
116
|
pytest.param("rlm", marks=pytest.mark.rlm, id="rlm"),
|
|
116
117
|
pytest.param("kimi-code", marks=pytest.mark.kimi_code, id="kimi-code"),
|
|
117
118
|
pytest.param("codex", marks=pytest.mark.codex, id="codex"),
|
|
119
|
+
pytest.param("claude-code", marks=pytest.mark.claude_code, id="claude-code"),
|
|
118
120
|
]
|
|
119
121
|
)
|
|
120
122
|
def harness(request) -> str:
|
|
@@ -172,6 +174,7 @@ def _eval_config(
|
|
|
172
174
|
harness_overrides: dict | None = None,
|
|
173
175
|
pool: dict | None = None,
|
|
174
176
|
model: str | None = None,
|
|
177
|
+
reasoning_effort: str | None = None,
|
|
175
178
|
) -> EvalConfig:
|
|
176
179
|
"""Build the smallest `EvalConfig` that still exercises the path, shared by the in-process
|
|
177
180
|
(`run_v1`) and env-server (`run_v1_server`) fixtures. `taskset_overrides` / `harness_overrides`
|
|
@@ -192,7 +195,11 @@ def _eval_config(
|
|
|
192
195
|
num_rollouts=n,
|
|
193
196
|
max_turns=max_turns,
|
|
194
197
|
max_output_tokens=max_tokens,
|
|
195
|
-
sampling={
|
|
198
|
+
sampling={
|
|
199
|
+
"max_tokens": max_tokens,
|
|
200
|
+
"temperature": 0,
|
|
201
|
+
"reasoning_effort": reasoning_effort,
|
|
202
|
+
},
|
|
196
203
|
timeout={"rollout": rollout_timeout, "scoring": 60},
|
|
197
204
|
retries={"rollout": {"max_retries": 2, "include": ["ProviderError"]}},
|
|
198
205
|
rich=False,
|
|
@@ -35,7 +35,7 @@ class EchoUserSimUser(vf.User[vf.UserConfig, EchoUserSimState]):
|
|
|
35
35
|
if self.turns >= len(self.phrases):
|
|
36
36
|
self.state.user_finished = True
|
|
37
37
|
return []
|
|
38
|
-
return [
|
|
38
|
+
return [vf.UserMessage(content=self.phrases[self.turns])]
|
|
39
39
|
|
|
40
40
|
|
|
41
41
|
class EchoUserSimData(vf.TaskData):
|
|
@@ -7,7 +7,7 @@ content part on a ToolMessage.
|
|
|
7
7
|
|
|
8
8
|
import verifiers.v1 as vf
|
|
9
9
|
|
|
10
|
-
PNG_DATA = "
|
|
10
|
+
PNG_DATA = "iVBORw0KGgoAAAANSUhEUgAAACAAAAAgCAIAAAD8GO2jAAAAKUlEQVRIx+3NMQEAAAjDMMC/52ECvlRA06nUZ/N6BwAAAAAAAAAAAIcttVsCPm9Ue3AAAAAASUVORK5CYII="
|
|
11
11
|
EXPECTED_URL = f"data:image/png;base64,{PNG_DATA}"
|
|
12
12
|
SYSTEM = "Call the requested tool before answering."
|
|
13
13
|
|
|
@@ -0,0 +1,18 @@
|
|
|
1
|
+
from color_codeword_v1 import taskset
|
|
2
|
+
|
|
3
|
+
|
|
4
|
+
def test_color_images_are_rendered_once(monkeypatch) -> None:
|
|
5
|
+
calls: list[tuple[int, int, int]] = []
|
|
6
|
+
render = taskset.image_data_url
|
|
7
|
+
|
|
8
|
+
def counted(image) -> str:
|
|
9
|
+
calls.append(image.getpixel((0, 0)))
|
|
10
|
+
return render(image)
|
|
11
|
+
|
|
12
|
+
monkeypatch.setattr(taskset, "image_data_url", counted)
|
|
13
|
+
tasks = taskset.ColorCodewordTaskset(taskset.ColorCodewordConfig()).select(
|
|
14
|
+
num_tasks=100
|
|
15
|
+
)
|
|
16
|
+
|
|
17
|
+
assert len(tasks) == 100
|
|
18
|
+
assert calls == list(taskset.COLOR_RGB.values())
|
|
@@ -6,8 +6,8 @@ import pytest
|
|
|
6
6
|
@pytest.mark.e2e
|
|
7
7
|
async def test_single_turn(run_v1, harness, harness_runtime, tmp_path):
|
|
8
8
|
"""Single-turn (echo a short phrase back)."""
|
|
9
|
-
if harness
|
|
10
|
-
pytest.skip("
|
|
9
|
+
if harness in {"codex", "claude-code"}:
|
|
10
|
+
pytest.skip("coding agents are not reliable on a no-op echo chat task")
|
|
11
11
|
(trace,) = await run_v1(
|
|
12
12
|
"echo-v1",
|
|
13
13
|
harness=harness,
|
|
@@ -18,6 +18,12 @@ async def test_single_turn(run_v1, harness, harness_runtime, tmp_path):
|
|
|
18
18
|
assert trace.errors == []
|
|
19
19
|
assert trace.num_turns == 1
|
|
20
20
|
assert trace.reward == 1.0
|
|
21
|
+
# Every sampled turn has one per-call record, linked to its assistant node.
|
|
22
|
+
sampled = [i for i, n in enumerate(trace.nodes) if n.sampled]
|
|
23
|
+
assert [c.node for c in trace.calls if c.error is None] == sampled
|
|
24
|
+
for call in trace.calls:
|
|
25
|
+
assert call.model and call.sampling is not None
|
|
26
|
+
assert call.time.duration > 0
|
|
21
27
|
|
|
22
28
|
|
|
23
29
|
@pytest.mark.e2e
|
|
@@ -74,6 +80,11 @@ async def test_tool(run_v1, harness_runtime, tool_runtime, tmp_path):
|
|
|
74
80
|
assert trace.errors == []
|
|
75
81
|
assert trace.num_turns >= 2 # tool call + answer
|
|
76
82
|
assert trace.reward == 1.0
|
|
83
|
+
# The interception server captured the advertised tools onto the trace (for tool-use SFT):
|
|
84
|
+
# the null harness offered the task's MCP tool as `echo_back`, schema included.
|
|
85
|
+
assert trace.tools is not None
|
|
86
|
+
(echo_tool,) = [t for t in trace.tools if t.name == "echo_back"]
|
|
87
|
+
assert "message" in echo_tool.parameters.get("properties", {})
|
|
77
88
|
|
|
78
89
|
|
|
79
90
|
@pytest.mark.e2e
|
|
@@ -140,7 +151,8 @@ async def test_tool_response_image(run_v1, tmp_path):
|
|
|
140
151
|
"tool-response-image-v1",
|
|
141
152
|
harness="null",
|
|
142
153
|
harness_overrides={"runtime": {"type": "subprocess"}},
|
|
143
|
-
model="
|
|
154
|
+
model="openai/gpt-5.6-luna",
|
|
155
|
+
reasoning_effort="none",
|
|
144
156
|
output_dir=tmp_path,
|
|
145
157
|
max_turns=4,
|
|
146
158
|
)
|
|
@@ -1,10 +1,8 @@
|
|
|
1
|
-
"""Smoke-eval every
|
|
1
|
+
"""Smoke-eval every V1 example taskset in `environments/` through the `eval` CLI.
|
|
2
2
|
|
|
3
|
-
|
|
4
|
-
|
|
5
|
-
|
|
6
|
-
harness, not a taskset); SWE/container tasksets need a docker/prime runtime and are covered by
|
|
7
|
-
the dedicated v1 e2e tests instead.
|
|
3
|
+
Each `_v1` taskset runs with its required harness for one short, capped rollout, so a broken
|
|
4
|
+
example taskset fails CI. `compact` is excluded (it's a harness, not a taskset);
|
|
5
|
+
SWE/container tasksets need a docker/prime runtime and are covered by dedicated V1 e2e tests.
|
|
8
6
|
"""
|
|
9
7
|
|
|
10
8
|
import os
|
|
@@ -0,0 +1,71 @@
|
|
|
1
|
+
"""`Taskset.select` over list, generator, and `INFINITE` `load` implementations."""
|
|
2
|
+
|
|
3
|
+
import itertools
|
|
4
|
+
|
|
5
|
+
import pytest
|
|
6
|
+
|
|
7
|
+
import verifiers.v1 as vf
|
|
8
|
+
|
|
9
|
+
|
|
10
|
+
class CountTask(vf.Task[vf.TaskData]):
|
|
11
|
+
pass
|
|
12
|
+
|
|
13
|
+
|
|
14
|
+
class InfiniteTaskset(vf.Taskset[CountTask, vf.TasksetConfig]):
|
|
15
|
+
INFINITE = True
|
|
16
|
+
|
|
17
|
+
def load(self):
|
|
18
|
+
for i in itertools.count():
|
|
19
|
+
yield CountTask(vf.TaskData(idx=i, prompt=f"task {i}"))
|
|
20
|
+
|
|
21
|
+
|
|
22
|
+
class FiniteTaskset(vf.Taskset[CountTask, vf.TasksetConfig]):
|
|
23
|
+
def load(self):
|
|
24
|
+
for i in range(10):
|
|
25
|
+
yield CountTask(vf.TaskData(idx=i, prompt=f"task {i}"))
|
|
26
|
+
|
|
27
|
+
|
|
28
|
+
def idxs(tasks: list[CountTask]) -> list[int]:
|
|
29
|
+
return [task.data.idx for task in tasks]
|
|
30
|
+
|
|
31
|
+
|
|
32
|
+
def test_select_bounds_an_infinite_taskset() -> None:
|
|
33
|
+
tasks = InfiniteTaskset(vf.TasksetConfig()).select(num_tasks=5)
|
|
34
|
+
assert idxs(tasks) == [0, 1, 2, 3, 4]
|
|
35
|
+
|
|
36
|
+
|
|
37
|
+
def test_select_infinite_requires_num_tasks() -> None:
|
|
38
|
+
with pytest.raises(ValueError, match="infinite"):
|
|
39
|
+
InfiniteTaskset(vf.TasksetConfig()).select()
|
|
40
|
+
|
|
41
|
+
|
|
42
|
+
def test_select_infinite_ignores_shuffle() -> None:
|
|
43
|
+
tasks = InfiniteTaskset(vf.TasksetConfig()).select(num_tasks=3, shuffle=True)
|
|
44
|
+
assert idxs(tasks) == [0, 1, 2]
|
|
45
|
+
|
|
46
|
+
|
|
47
|
+
def test_select_finite() -> None:
|
|
48
|
+
taskset = FiniteTaskset(vf.TasksetConfig())
|
|
49
|
+
assert len(taskset.select()) == 10
|
|
50
|
+
assert idxs(taskset.select(num_tasks=4)) == [0, 1, 2, 3]
|
|
51
|
+
|
|
52
|
+
|
|
53
|
+
def test_select_shuffle_samples_the_whole_taskset_reproducibly() -> None:
|
|
54
|
+
taskset = FiniteTaskset(vf.TasksetConfig())
|
|
55
|
+
first = idxs(taskset.select(num_tasks=5, shuffle=True))
|
|
56
|
+
assert first == idxs(taskset.select(num_tasks=5, shuffle=True))
|
|
57
|
+
assert len(first) == 5 and set(first) <= set(range(10))
|
|
58
|
+
assert first != [0, 1, 2, 3, 4] # sampled from the whole set, not the head
|
|
59
|
+
|
|
60
|
+
|
|
61
|
+
def test_select_only_builds_what_the_run_takes() -> None:
|
|
62
|
+
built: list[int] = []
|
|
63
|
+
|
|
64
|
+
class RecordingTaskset(InfiniteTaskset):
|
|
65
|
+
def load(self):
|
|
66
|
+
for i in itertools.count():
|
|
67
|
+
built.append(i)
|
|
68
|
+
yield CountTask(vf.TaskData(idx=i, prompt=f"task {i}"))
|
|
69
|
+
|
|
70
|
+
RecordingTaskset(vf.TasksetConfig()).select(num_tasks=3)
|
|
71
|
+
assert built == [0, 1, 2]
|
|
@@ -60,6 +60,7 @@ def test_wire_trace_round_trip():
|
|
|
60
60
|
# carry node `parent` links for `num_branches` to survive.
|
|
61
61
|
tr = vf.Trace[MyTask, vf.State](
|
|
62
62
|
task=vf.TraceTask(type="MyTask", data=MyTask(idx=0, prompt="q", answer="a")),
|
|
63
|
+
tools=[vf.Tool(name="echo", description="", parameters={"type": "object"})],
|
|
63
64
|
nodes=[
|
|
64
65
|
MessageNode(parent=None, message=UserMessage(content="q"), sampled=False),
|
|
65
66
|
MessageNode(parent=0, message=AssistantMessage(content="a1"), sampled=True),
|
|
@@ -80,6 +81,9 @@ def test_wire_trace_round_trip():
|
|
|
80
81
|
assert rt.reward == 1.0 # property recomputed from `rewards`
|
|
81
82
|
assert rt.stop_condition == "done"
|
|
82
83
|
assert rt.info == {"build": "ok"}
|
|
84
|
+
assert (
|
|
85
|
+
rt.tools == tr.tools
|
|
86
|
+
) # the advertised tools persist (tool-use SFT reads them)
|
|
83
87
|
assert rt.task.data.model_extra == {
|
|
84
88
|
"answer": "a"
|
|
85
89
|
} # taskset extras preserved on WireTaskData
|
{verifiers-0.1.15.dev443 → verifiers-0.2.1}/verifiers/envs/integrations/browser_env/README.md
RENAMED
|
@@ -139,16 +139,3 @@ CUA execution options:
|
|
|
139
139
|
1. **Prebuilt image** (default): fastest startup
|
|
140
140
|
2. **Binary upload** (`use_prebuilt_image=False`): custom server workflows
|
|
141
141
|
3. **Manual local server** (`use_sandbox=False`): local development/debugging
|
|
142
|
-
|
|
143
|
-
## Example Environments
|
|
144
|
-
|
|
145
|
-
For complete reference implementations, see:
|
|
146
|
-
|
|
147
|
-
- **DOM example:** `environments/browser_dom_example/`
|
|
148
|
-
- `environments/browser_dom_example/browser_dom_example.py`
|
|
149
|
-
- `environments/browser_dom_example/README.md`
|
|
150
|
-
- **CUA example:** `environments/browser_cua_example/`
|
|
151
|
-
- `environments/browser_cua_example/browser_cua_example.py`
|
|
152
|
-
- `environments/browser_cua_example/README.md`
|
|
153
|
-
|
|
154
|
-
These examples show end-to-end `load_environment()` setup, evaluation commands, and recommended runtime flags.
|