verifiers 0.2.2.dev112__tar.gz → 0.3.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.2.2.dev112 → verifiers-0.3.1}/PKG-INFO +6 -6
- {verifiers-0.2.2.dev112 → verifiers-0.3.1}/pyproject.toml +53 -29
- {verifiers-0.2.2.dev112 → verifiers-0.3.1}/tests/test_imports.py +3 -2
- {verifiers-0.2.2.dev112 → verifiers-0.3.1}/tests/v1/conftest.py +33 -57
- {verifiers-0.2.2.dev112 → verifiers-0.3.1}/tests/v1/fixtures/counter_tool_v1.py +3 -3
- {verifiers-0.2.2.dev112 → verifiers-0.3.1}/tests/v1/fixtures/echo_acp_resume_v1.py +3 -2
- {verifiers-0.2.2.dev112 → verifiers-0.3.1}/tests/v1/fixtures/echo_tool_v1.py +3 -2
- {verifiers-0.2.2.dev112 → verifiers-0.3.1}/tests/v1/fixtures/echo_v1.py +4 -0
- {verifiers-0.2.2.dev112 → verifiers-0.3.1}/tests/v1/fixtures/tool_response_image_v1.py +3 -3
- {verifiers-0.2.2.dev112 → verifiers-0.3.1}/tests/v1/test_color_codeword_tasks.py +1 -1
- {verifiers-0.2.2.dev112 → verifiers-0.3.1}/tests/v1/test_configs.py +1 -2
- {verifiers-0.2.2.dev112 → verifiers-0.3.1}/tests/v1/test_e2e.py +42 -16
- {verifiers-0.2.2.dev112 → verifiers-0.3.1}/tests/v1/test_envs.py +12 -10
- {verifiers-0.2.2.dev112 → verifiers-0.3.1}/tests/v1/test_judges.py +2 -2
- verifiers-0.3.1/tests/v1/test_scoring.py +119 -0
- {verifiers-0.2.2.dev112 → verifiers-0.3.1}/tests/v1/test_taskset.py +3 -1
- {verifiers-0.2.2.dev112 → verifiers-0.3.1}/tests/v1/test_trace.py +7 -1
- verifiers-0.3.1/verifiers/__init__.py +152 -0
- {verifiers-0.2.2.dev112 → verifiers-0.3.1}/verifiers/cli/commands/build.py +1 -1
- {verifiers-0.2.2.dev112 → verifiers-0.3.1}/verifiers/cli/commands/eval.py +1 -1
- {verifiers-0.2.2.dev112 → verifiers-0.3.1}/verifiers/cli/commands/gepa.py +1 -1
- {verifiers-0.2.2.dev112 → verifiers-0.3.1}/verifiers/cli/commands/init.py +1 -1
- {verifiers-0.2.2.dev112 → verifiers-0.3.1}/verifiers/cli/commands/install.py +1 -1
- {verifiers-0.2.2.dev112 → verifiers-0.3.1}/verifiers/cli/commands/setup.py +1 -1
- {verifiers-0.2.2.dev112 → verifiers-0.3.1}/verifiers/cli/tui.py +1 -1
- {verifiers-0.2.2.dev112/verifiers → verifiers-0.3.1/verifiers/legacy}/__init__.py +26 -26
- {verifiers-0.2.2.dev112/verifiers → verifiers-0.3.1/verifiers/legacy}/clients/__init__.py +13 -11
- {verifiers-0.2.2.dev112/verifiers → verifiers-0.3.1/verifiers/legacy}/clients/anthropic_messages_client.py +4 -4
- {verifiers-0.2.2.dev112/verifiers → verifiers-0.3.1/verifiers/legacy}/clients/client.py +2 -2
- {verifiers-0.2.2.dev112/verifiers → verifiers-0.3.1/verifiers/legacy}/clients/nemorl_chat_completions_client.py +2 -2
- {verifiers-0.2.2.dev112/verifiers → verifiers-0.3.1/verifiers/legacy}/clients/openai_chat_completions_client.py +4 -4
- {verifiers-0.2.2.dev112/verifiers → verifiers-0.3.1/verifiers/legacy}/clients/openai_chat_completions_token_client.py +3 -3
- {verifiers-0.2.2.dev112/verifiers → verifiers-0.3.1/verifiers/legacy}/clients/openai_completions_client.py +5 -5
- {verifiers-0.2.2.dev112/verifiers → verifiers-0.3.1/verifiers/legacy}/clients/openai_responses_client.py +5 -5
- {verifiers-0.2.2.dev112/verifiers → verifiers-0.3.1/verifiers/legacy}/clients/renderer_client.py +5 -5
- {verifiers-0.2.2.dev112/verifiers → verifiers-0.3.1/verifiers/legacy}/envs/env_group.py +5 -5
- {verifiers-0.2.2.dev112/verifiers → verifiers-0.3.1/verifiers/legacy}/envs/environment.py +20 -20
- verifiers-0.3.1/verifiers/legacy/envs/experimental/__init__.py +36 -0
- {verifiers-0.2.2.dev112/verifiers → verifiers-0.3.1/verifiers/legacy}/envs/experimental/cli_agent_env.py +7 -7
- verifiers-0.3.1/verifiers/legacy/envs/experimental/composable/__init__.py +29 -0
- {verifiers-0.2.2.dev112/verifiers → verifiers-0.3.1/verifiers/legacy}/envs/experimental/composable/composable_env.py +8 -8
- {verifiers-0.2.2.dev112/verifiers → verifiers-0.3.1/verifiers/legacy}/envs/experimental/composable/harness.py +2 -2
- {verifiers-0.2.2.dev112/verifiers → verifiers-0.3.1/verifiers/legacy}/envs/experimental/composable/harnesses/__init__.py +3 -3
- {verifiers-0.2.2.dev112/verifiers → verifiers-0.3.1/verifiers/legacy}/envs/experimental/composable/harnesses/mini_swe_agent.py +1 -1
- {verifiers-0.2.2.dev112/verifiers → verifiers-0.3.1/verifiers/legacy}/envs/experimental/composable/harnesses/opencode.py +3 -3
- {verifiers-0.2.2.dev112/verifiers → verifiers-0.3.1/verifiers/legacy}/envs/experimental/composable/harnesses/rlm.py +4 -4
- {verifiers-0.2.2.dev112/verifiers → verifiers-0.3.1/verifiers/legacy}/envs/experimental/composable/sandbox_debug_env.py +3 -3
- {verifiers-0.2.2.dev112/verifiers → verifiers-0.3.1/verifiers/legacy}/envs/experimental/composable/task.py +5 -5
- {verifiers-0.2.2.dev112/verifiers → verifiers-0.3.1/verifiers/legacy}/envs/experimental/composable/tasksets/__init__.py +8 -6
- {verifiers-0.2.2.dev112/verifiers → verifiers-0.3.1/verifiers/legacy}/envs/experimental/composable/tasksets/cp/cp_task.py +3 -3
- {verifiers-0.2.2.dev112/verifiers → verifiers-0.3.1/verifiers/legacy}/envs/experimental/composable/tasksets/harbor/cli_gym.py +3 -3
- {verifiers-0.2.2.dev112/verifiers → verifiers-0.3.1/verifiers/legacy}/envs/experimental/composable/tasksets/harbor/harbor.py +2 -2
- {verifiers-0.2.2.dev112/verifiers → verifiers-0.3.1/verifiers/legacy}/envs/experimental/composable/tasksets/harbor/terminal_lego.py +2 -2
- {verifiers-0.2.2.dev112/verifiers → verifiers-0.3.1/verifiers/legacy}/envs/experimental/composable/tasksets/math/math_task.py +7 -5
- {verifiers-0.2.2.dev112/verifiers → verifiers-0.3.1/verifiers/legacy}/envs/experimental/composable/tasksets/swe/multi_swe/taskset.py +2 -2
- {verifiers-0.2.2.dev112/verifiers → verifiers-0.3.1/verifiers/legacy}/envs/experimental/composable/tasksets/swe/openswe/taskset.py +2 -2
- {verifiers-0.2.2.dev112/verifiers → verifiers-0.3.1/verifiers/legacy}/envs/experimental/composable/tasksets/swe/r2e_gym/taskset.py +2 -2
- {verifiers-0.2.2.dev112/verifiers → verifiers-0.3.1/verifiers/legacy}/envs/experimental/composable/tasksets/swe/scale_swe/taskset.py +2 -2
- {verifiers-0.2.2.dev112/verifiers → verifiers-0.3.1/verifiers/legacy}/envs/experimental/composable/tasksets/swe/swe_bench/taskset.py +2 -2
- {verifiers-0.2.2.dev112/verifiers → verifiers-0.3.1/verifiers/legacy}/envs/experimental/composable/tasksets/swe/swe_lego/taskset.py +3 -3
- {verifiers-0.2.2.dev112/verifiers → verifiers-0.3.1/verifiers/legacy}/envs/experimental/composable/tasksets/swe/swe_rebench_v2/taskset.py +3 -3
- {verifiers-0.2.2.dev112/verifiers → verifiers-0.3.1/verifiers/legacy}/envs/experimental/composable/tasksets/swe/swe_smith/taskset.py +2 -2
- {verifiers-0.2.2.dev112/verifiers → verifiers-0.3.1/verifiers/legacy}/envs/experimental/composable/tasksets/swe/swe_tasksets.py +10 -10
- {verifiers-0.2.2.dev112/verifiers → verifiers-0.3.1/verifiers/legacy}/envs/experimental/gym_env.py +3 -3
- {verifiers-0.2.2.dev112/verifiers → verifiers-0.3.1/verifiers/legacy}/envs/experimental/harbor_env/env.py +2 -2
- {verifiers-0.2.2.dev112/verifiers → verifiers-0.3.1/verifiers/legacy}/envs/experimental/harbor_env/mcp.py +1 -1
- {verifiers-0.2.2.dev112/verifiers → verifiers-0.3.1/verifiers/legacy}/envs/experimental/mcp_env.py +2 -2
- {verifiers-0.2.2.dev112/verifiers → verifiers-0.3.1/verifiers/legacy}/envs/experimental/opencode_env.py +5 -5
- {verifiers-0.2.2.dev112/verifiers → verifiers-0.3.1/verifiers/legacy}/envs/experimental/opencode_qa_env.py +2 -2
- {verifiers-0.2.2.dev112/verifiers → verifiers-0.3.1/verifiers/legacy}/envs/experimental/opencode_rlm_env.py +8 -5
- {verifiers-0.2.2.dev112/verifiers → verifiers-0.3.1/verifiers/legacy}/envs/experimental/sandbox_mixin.py +4 -4
- {verifiers-0.2.2.dev112/verifiers → verifiers-0.3.1/verifiers/legacy}/envs/experimental/utils/__init__.py +2 -2
- {verifiers-0.2.2.dev112/verifiers → verifiers-0.3.1/verifiers/legacy}/envs/experimental/utils/git_checkout_cache.py +2 -2
- {verifiers-0.2.2.dev112/verifiers → verifiers-0.3.1/verifiers/legacy}/envs/integrations/browser_env/__init__.py +1 -1
- {verifiers-0.2.2.dev112/verifiers → verifiers-0.3.1/verifiers/legacy}/envs/integrations/browser_env/browser_env.py +1 -1
- {verifiers-0.2.2.dev112/verifiers → verifiers-0.3.1/verifiers/legacy}/envs/integrations/browser_env/modes/base.py +1 -1
- {verifiers-0.2.2.dev112/verifiers → verifiers-0.3.1/verifiers/legacy}/envs/integrations/browser_env/modes/cua_mode.py +3 -1
- {verifiers-0.2.2.dev112/verifiers → verifiers-0.3.1/verifiers/legacy}/envs/integrations/browser_env/modes/dom_mode.py +1 -1
- {verifiers-0.2.2.dev112/verifiers → verifiers-0.3.1/verifiers/legacy}/envs/integrations/openenv_env.py +4 -4
- {verifiers-0.2.2.dev112/verifiers → verifiers-0.3.1/verifiers/legacy}/envs/integrations/reasoninggym_env.py +1 -1
- {verifiers-0.2.2.dev112/verifiers → verifiers-0.3.1/verifiers/legacy}/envs/integrations/textarena_env.py +1 -1
- {verifiers-0.2.2.dev112/verifiers → verifiers-0.3.1/verifiers/legacy}/envs/multiturn_env.py +5 -5
- {verifiers-0.2.2.dev112/verifiers → verifiers-0.3.1/verifiers/legacy}/envs/python_env.py +2 -2
- {verifiers-0.2.2.dev112/verifiers → verifiers-0.3.1/verifiers/legacy}/envs/sandbox_env.py +2 -2
- {verifiers-0.2.2.dev112/verifiers → verifiers-0.3.1/verifiers/legacy}/envs/singleturn_env.py +1 -1
- {verifiers-0.2.2.dev112/verifiers → verifiers-0.3.1/verifiers/legacy}/envs/stateful_tool_env.py +3 -3
- {verifiers-0.2.2.dev112/verifiers → verifiers-0.3.1/verifiers/legacy}/envs/tool_env.py +4 -4
- verifiers-0.3.1/verifiers/legacy/gepa/__init__.py +14 -0
- {verifiers-0.2.2.dev112/verifiers → verifiers-0.3.1/verifiers/legacy}/gepa/adapter.py +7 -7
- {verifiers-0.2.2.dev112/verifiers → verifiers-0.3.1/verifiers/legacy}/gepa/config.py +1 -1
- {verifiers-0.2.2.dev112/verifiers → verifiers-0.3.1/verifiers/legacy}/gepa/display.py +1 -1
- {verifiers-0.2.2.dev112/verifiers → verifiers-0.3.1/verifiers/legacy}/gepa/gepa_utils.py +1 -0
- {verifiers-0.2.2.dev112/verifiers → verifiers-0.3.1/verifiers/legacy}/parsers/maybe_think_parser.py +1 -1
- {verifiers-0.2.2.dev112/verifiers → verifiers-0.3.1/verifiers/legacy}/parsers/parser.py +1 -1
- {verifiers-0.2.2.dev112/verifiers → verifiers-0.3.1/verifiers/legacy}/parsers/think_parser.py +2 -2
- {verifiers-0.2.2.dev112/verifiers → verifiers-0.3.1/verifiers/legacy}/parsers/xml_parser.py +2 -2
- {verifiers-0.2.2.dev112/verifiers → verifiers-0.3.1/verifiers/legacy}/rubrics/experimental/hybrid_math_rubric.py +5 -5
- {verifiers-0.2.2.dev112/verifiers → verifiers-0.3.1/verifiers/legacy}/rubrics/judge_rubric.py +4 -4
- {verifiers-0.2.2.dev112/verifiers → verifiers-0.3.1/verifiers/legacy}/rubrics/math_rubric.py +6 -6
- {verifiers-0.2.2.dev112/verifiers → verifiers-0.3.1/verifiers/legacy}/rubrics/rubric.py +5 -5
- {verifiers-0.2.2.dev112/verifiers → verifiers-0.3.1/verifiers/legacy}/rubrics/rubric_group.py +2 -2
- {verifiers-0.2.2.dev112/verifiers → verifiers-0.3.1/verifiers/legacy}/scripts/eval.py +6 -6
- {verifiers-0.2.2.dev112/verifiers → verifiers-0.3.1/verifiers/legacy}/scripts/gepa.py +11 -11
- {verifiers-0.2.2.dev112/verifiers → verifiers-0.3.1/verifiers/legacy}/scripts/init.py +2 -2
- {verifiers-0.2.2.dev112/verifiers → verifiers-0.3.1/verifiers/legacy}/scripts/install.py +1 -1
- {verifiers-0.2.2.dev112/verifiers → verifiers-0.3.1/verifiers/legacy}/serve/__init__.py +7 -7
- {verifiers-0.2.2.dev112/verifiers → verifiers-0.3.1/verifiers/legacy}/serve/client/env_client.py +3 -3
- {verifiers-0.2.2.dev112/verifiers → verifiers-0.3.1/verifiers/legacy}/serve/client/zmq_env_client.py +4 -4
- verifiers-0.3.1/verifiers/legacy/serve/server/__init__.py +11 -0
- {verifiers-0.2.2.dev112/verifiers → verifiers-0.3.1/verifiers/legacy}/serve/server/env_router.py +5 -5
- {verifiers-0.2.2.dev112/verifiers → verifiers-0.3.1/verifiers/legacy}/serve/server/env_server.py +6 -6
- {verifiers-0.2.2.dev112/verifiers → verifiers-0.3.1/verifiers/legacy}/serve/server/env_worker.py +9 -9
- {verifiers-0.2.2.dev112/verifiers → verifiers-0.3.1/verifiers/legacy}/serve/server/zmq_env_server.py +1 -1
- {verifiers-0.2.2.dev112/verifiers → verifiers-0.3.1/verifiers/legacy}/serve/types.py +1 -1
- {verifiers-0.2.2.dev112/verifiers → verifiers-0.3.1/verifiers/legacy}/types.py +3 -3
- {verifiers-0.2.2.dev112/verifiers → verifiers-0.3.1/verifiers/legacy}/utils/async_utils.py +5 -5
- {verifiers-0.2.2.dev112/verifiers → verifiers-0.3.1/verifiers/legacy}/utils/client_utils.py +2 -2
- {verifiers-0.2.2.dev112/verifiers → verifiers-0.3.1/verifiers/legacy}/utils/display_utils.py +1 -1
- {verifiers-0.2.2.dev112/verifiers → verifiers-0.3.1/verifiers/legacy}/utils/env_utils.py +3 -3
- {verifiers-0.2.2.dev112/verifiers → verifiers-0.3.1/verifiers/legacy}/utils/error_utils.py +2 -2
- {verifiers-0.2.2.dev112/verifiers → verifiers-0.3.1/verifiers/legacy}/utils/eval_display.py +6 -6
- {verifiers-0.2.2.dev112/verifiers → verifiers-0.3.1/verifiers/legacy}/utils/eval_utils.py +17 -14
- {verifiers-0.2.2.dev112/verifiers → verifiers-0.3.1/verifiers/legacy}/utils/interception_utils.py +6 -4
- {verifiers-0.2.2.dev112/verifiers → verifiers-0.3.1/verifiers/legacy}/utils/logging_utils.py +4 -4
- {verifiers-0.2.2.dev112/verifiers → verifiers-0.3.1/verifiers/legacy}/utils/message_utils.py +2 -2
- {verifiers-0.2.2.dev112/verifiers → verifiers-0.3.1/verifiers/legacy}/utils/metric_utils.py +1 -1
- {verifiers-0.2.2.dev112/verifiers → verifiers-0.3.1/verifiers/legacy}/utils/path_utils.py +1 -1
- {verifiers-0.2.2.dev112/verifiers → verifiers-0.3.1/verifiers/legacy}/utils/pricing_utils.py +1 -1
- {verifiers-0.2.2.dev112/verifiers → verifiers-0.3.1/verifiers/legacy}/utils/process_utils.py +0 -13
- {verifiers-0.2.2.dev112/verifiers → verifiers-0.3.1/verifiers/legacy}/utils/response_utils.py +1 -1
- {verifiers-0.2.2.dev112/verifiers → verifiers-0.3.1/verifiers/legacy}/utils/save_utils.py +10 -8
- {verifiers-0.2.2.dev112/verifiers → verifiers-0.3.1/verifiers/legacy}/utils/threaded_sandbox_client.py +1 -1
- {verifiers-0.2.2.dev112/verifiers → verifiers-0.3.1/verifiers/legacy}/utils/tool_utils.py +1 -1
- {verifiers-0.2.2.dev112/verifiers → verifiers-0.3.1/verifiers/legacy}/utils/usage_utils.py +1 -1
- {verifiers-0.2.2.dev112/verifiers → verifiers-0.3.1/verifiers/legacy}/utils/version_utils.py +1 -1
- {verifiers-0.2.2.dev112 → verifiers-0.3.1}/verifiers/v1/__init__.py +44 -10
- {verifiers-0.2.2.dev112 → verifiers-0.3.1}/verifiers/v1/acp/__init__.py +114 -139
- {verifiers-0.2.2.dev112 → verifiers-0.3.1}/verifiers/v1/acp/runner.py +31 -195
- {verifiers-0.2.2.dev112 → verifiers-0.3.1}/verifiers/v1/agent.py +15 -13
- {verifiers-0.2.2.dev112 → verifiers-0.3.1}/verifiers/v1/cli/dashboard/eval.py +112 -35
- {verifiers-0.2.2.dev112 → verifiers-0.3.1}/verifiers/v1/cli/dashboard/replay.py +3 -7
- {verifiers-0.2.2.dev112 → verifiers-0.3.1}/verifiers/v1/cli/debug.py +7 -3
- verifiers-0.3.1/verifiers/v1/cli/eval/main.py +148 -0
- verifiers-0.3.1/verifiers/v1/cli/eval/resume.py +89 -0
- verifiers-0.3.1/verifiers/v1/cli/eval/runner.py +249 -0
- {verifiers-0.2.2.dev112 → verifiers-0.3.1}/verifiers/v1/cli/gepa.py +15 -9
- {verifiers-0.2.2.dev112 → verifiers-0.3.1}/verifiers/v1/cli/init.py +13 -40
- verifiers-0.3.1/verifiers/v1/cli/output.py +208 -0
- {verifiers-0.2.2.dev112 → verifiers-0.3.1}/verifiers/v1/cli/replay.py +15 -16
- {verifiers-0.2.2.dev112 → verifiers-0.3.1}/verifiers/v1/cli/resolve.py +2 -2
- verifiers-0.3.1/verifiers/v1/cli/resume.py +15 -0
- {verifiers-0.2.2.dev112 → verifiers-0.3.1}/verifiers/v1/cli/validate.py +59 -105
- {verifiers-0.2.2.dev112 → verifiers-0.3.1}/verifiers/v1/clients/base.py +3 -2
- {verifiers-0.2.2.dev112 → verifiers-0.3.1}/verifiers/v1/clients/client.py +6 -9
- {verifiers-0.2.2.dev112 → verifiers-0.3.1}/verifiers/v1/clients/eval.py +5 -6
- {verifiers-0.2.2.dev112 → verifiers-0.3.1}/verifiers/v1/clients/train.py +23 -13
- {verifiers-0.2.2.dev112 → verifiers-0.3.1}/verifiers/v1/configs/agent.py +2 -2
- verifiers-0.3.1/verifiers/v1/configs/cli/__init__.py +1 -0
- {verifiers-0.2.2.dev112 → verifiers-0.3.1}/verifiers/v1/configs/cli/debug.py +3 -3
- {verifiers-0.2.2.dev112 → verifiers-0.3.1}/verifiers/v1/configs/cli/env.py +3 -4
- verifiers-0.3.1/verifiers/v1/configs/cli/eval.py +137 -0
- {verifiers-0.2.2.dev112 → verifiers-0.3.1}/verifiers/v1/configs/cli/init.py +1 -3
- {verifiers-0.2.2.dev112 → verifiers-0.3.1}/verifiers/v1/configs/cli/replay.py +3 -2
- {verifiers-0.2.2.dev112 → verifiers-0.3.1}/verifiers/v1/configs/cli/validate.py +27 -12
- {verifiers-0.2.2.dev112 → verifiers-0.3.1}/verifiers/v1/configs/client.py +1 -1
- {verifiers-0.2.2.dev112 → verifiers-0.3.1}/verifiers/v1/configs/env.py +3 -4
- {verifiers-0.2.2.dev112 → verifiers-0.3.1}/verifiers/v1/configs/harness.py +2 -3
- {verifiers-0.2.2.dev112 → verifiers-0.3.1}/verifiers/v1/configs/judge.py +3 -4
- verifiers-0.3.1/verifiers/v1/configs/runtime.py +72 -0
- {verifiers-0.2.2.dev112 → verifiers-0.3.1}/verifiers/v1/configs/serve.py +4 -2
- verifiers-0.3.1/verifiers/v1/configs/task.py +63 -0
- {verifiers-0.2.2.dev112 → verifiers-0.3.1}/verifiers/v1/configs/taskset.py +2 -3
- {verifiers-0.2.2.dev112 → verifiers-0.3.1}/verifiers/v1/dialects/__init__.py +0 -2
- verifiers-0.3.1/verifiers/v1/dialects/anthropic.py +711 -0
- {verifiers-0.2.2.dev112 → verifiers-0.3.1}/verifiers/v1/dialects/base.py +153 -38
- verifiers-0.3.1/verifiers/v1/dialects/chat.py +576 -0
- verifiers-0.3.1/verifiers/v1/dialects/responses.py +765 -0
- {verifiers-0.2.2.dev112 → verifiers-0.3.1}/verifiers/v1/env.py +15 -4
- {verifiers-0.2.2.dev112 → verifiers-0.3.1}/verifiers/v1/episode.py +85 -8
- {verifiers-0.2.2.dev112 → verifiers-0.3.1}/verifiers/v1/gepa/config.py +18 -10
- {verifiers-0.2.2.dev112 → verifiers-0.3.1}/verifiers/v1/gepa/dataset.py +3 -3
- {verifiers-0.2.2.dev112 → verifiers-0.3.1}/verifiers/v1/gepa/runner.py +2 -2
- {verifiers-0.2.2.dev112 → verifiers-0.3.1}/verifiers/v1/graph.py +26 -1
- {verifiers-0.2.2.dev112 → verifiers-0.3.1}/verifiers/v1/harness.py +29 -3
- {verifiers-0.2.2.dev112 → verifiers-0.3.1}/verifiers/v1/harnesses/bash/harness.py +5 -1
- {verifiers-0.2.2.dev112 → verifiers-0.3.1}/verifiers/v1/harnesses/bash/program.py +84 -43
- {verifiers-0.2.2.dev112 → verifiers-0.3.1}/verifiers/v1/harnesses/claude_code/harness.py +17 -74
- {verifiers-0.2.2.dev112 → verifiers-0.3.1}/verifiers/v1/harnesses/codex/harness.py +23 -74
- verifiers-0.3.1/verifiers/v1/harnesses/hermes_agent/harness.py +103 -0
- verifiers-0.3.1/verifiers/v1/harnesses/hermes_agent/program.py +19 -0
- verifiers-0.3.1/verifiers/v1/harnesses/kimi_code/harness.py +131 -0
- {verifiers-0.2.2.dev112 → verifiers-0.3.1}/verifiers/v1/harnesses/mini_swe_agent/program.py +1 -1
- verifiers-0.3.1/verifiers/v1/harnesses/openclaw/harness.py +240 -0
- {verifiers-0.2.2.dev112 → verifiers-0.3.1}/verifiers/v1/harnesses/pi/harness.py +57 -84
- {verifiers-0.2.2.dev112 → verifiers-0.3.1}/verifiers/v1/harnesses/pool/harness.py +10 -16
- {verifiers-0.2.2.dev112 → verifiers-0.3.1}/verifiers/v1/harnesses/rlm/harness.py +12 -45
- {verifiers-0.2.2.dev112 → verifiers-0.3.1}/verifiers/v1/harnesses/terminus_2/harness.py +1 -1
- {verifiers-0.2.2.dev112 → verifiers-0.3.1}/verifiers/v1/interception/server.py +348 -115
- verifiers-0.3.1/verifiers/v1/interception/tool.py +12 -0
- {verifiers-0.2.2.dev112 → verifiers-0.3.1}/verifiers/v1/interception/tunnel/prime.py +5 -0
- {verifiers-0.2.2.dev112 → verifiers-0.3.1}/verifiers/v1/mcp/launch.py +8 -3
- {verifiers-0.2.2.dev112 → verifiers-0.3.1}/verifiers/v1/rollout.py +122 -13
- {verifiers-0.2.2.dev112 → verifiers-0.3.1}/verifiers/v1/runtimes/__init__.py +12 -3
- {verifiers-0.2.2.dev112 → verifiers-0.3.1}/verifiers/v1/runtimes/base.py +16 -45
- {verifiers-0.2.2.dev112 → verifiers-0.3.1}/verifiers/v1/runtimes/docker/__init__.py +15 -11
- {verifiers-0.2.2.dev112 → verifiers-0.3.1}/verifiers/v1/runtimes/docker/egress.py +35 -41
- {verifiers-0.2.2.dev112 → verifiers-0.3.1}/verifiers/v1/runtimes/limiters.py +1 -1
- {verifiers-0.2.2.dev112 → verifiers-0.3.1}/verifiers/v1/runtimes/modal.py +3 -2
- {verifiers-0.2.2.dev112 → verifiers-0.3.1}/verifiers/v1/runtimes/prime.py +99 -45
- {verifiers-0.2.2.dev112 → verifiers-0.3.1}/verifiers/v1/runtimes/subprocess.py +7 -5
- {verifiers-0.2.2.dev112 → verifiers-0.3.1}/verifiers/v1/serve/__init__.py +0 -8
- {verifiers-0.2.2.dev112 → verifiers-0.3.1}/verifiers/v1/serve/client.py +38 -36
- verifiers-0.3.1/verifiers/v1/serve/encoding.py +65 -0
- {verifiers-0.2.2.dev112 → verifiers-0.3.1}/verifiers/v1/serve/pool.py +54 -43
- {verifiers-0.2.2.dev112 → verifiers-0.3.1}/verifiers/v1/serve/server.py +30 -42
- verifiers-0.3.1/verifiers/v1/serve/types.py +57 -0
- verifiers-0.3.1/verifiers/v1/session.py +402 -0
- {verifiers-0.2.2.dev112 → verifiers-0.3.1}/verifiers/v1/task.py +54 -6
- {verifiers-0.2.2.dev112 → verifiers-0.3.1}/verifiers/v1/tasksets/harbor/env.py +4 -1
- {verifiers-0.2.2.dev112 → verifiers-0.3.1}/verifiers/v1/tasksets/harbor/taskset.py +72 -24
- {verifiers-0.2.2.dev112 → verifiers-0.3.1}/verifiers/v1/tasksets/nemo_gym/response.py +12 -4
- {verifiers-0.2.2.dev112 → verifiers-0.3.1}/verifiers/v1/tasksets/nemo_gym/taskset.py +2 -2
- {verifiers-0.2.2.dev112 → verifiers-0.3.1}/verifiers/v1/trace.py +118 -31
- {verifiers-0.2.2.dev112 → verifiers-0.3.1}/verifiers/v1/types.py +28 -12
- {verifiers-0.2.2.dev112 → verifiers-0.3.1}/verifiers/v1/utils/compile.py +10 -9
- {verifiers-0.2.2.dev112 → verifiers-0.3.1}/verifiers/v1/utils/decorators.py +21 -4
- {verifiers-0.2.2.dev112 → verifiers-0.3.1}/verifiers/v1/utils/loaders.py +85 -22
- {verifiers-0.2.2.dev112 → verifiers-0.3.1}/verifiers/v1/utils/logging.py +4 -0
- verifiers-0.3.1/verifiers/v1/utils/paths.py +13 -0
- {verifiers-0.2.2.dev112 → verifiers-0.3.1}/verifiers/v1/utils/platform.py +62 -34
- verifiers-0.3.1/verifiers/v1/utils/prime.py +29 -0
- verifiers-0.2.2.dev112/tests/v1/fixtures/echo_multi_v0.py +0 -54
- verifiers-0.2.2.dev112/tests/v1/fixtures/echo_v0.py +0 -33
- verifiers-0.2.2.dev112/tests/v1/test_legacy.py +0 -44
- verifiers-0.2.2.dev112/tests/v1/test_scoring.py +0 -31
- verifiers-0.2.2.dev112/verifiers/envs/experimental/__init__.py +0 -36
- verifiers-0.2.2.dev112/verifiers/envs/experimental/composable/__init__.py +0 -29
- verifiers-0.2.2.dev112/verifiers/gepa/__init__.py +0 -14
- verifiers-0.2.2.dev112/verifiers/serve/server/__init__.py +0 -11
- verifiers-0.2.2.dev112/verifiers/v1/cli/eval/main.py +0 -130
- verifiers-0.2.2.dev112/verifiers/v1/cli/eval/resume.py +0 -131
- verifiers-0.2.2.dev112/verifiers/v1/cli/eval/runner.py +0 -295
- verifiers-0.2.2.dev112/verifiers/v1/cli/output.py +0 -138
- verifiers-0.2.2.dev112/verifiers/v1/cli/resume.py +0 -42
- verifiers-0.2.2.dev112/verifiers/v1/configs/cli/__init__.py +0 -8
- verifiers-0.2.2.dev112/verifiers/v1/configs/cli/eval.py +0 -142
- verifiers-0.2.2.dev112/verifiers/v1/configs/legacy.py +0 -24
- verifiers-0.2.2.dev112/verifiers/v1/configs/task.py +0 -32
- verifiers-0.2.2.dev112/verifiers/v1/dialects/anthropic.py +0 -344
- verifiers-0.2.2.dev112/verifiers/v1/dialects/chat.py +0 -357
- verifiers-0.2.2.dev112/verifiers/v1/dialects/responses.py +0 -357
- verifiers-0.2.2.dev112/verifiers/v1/harnesses/hermes_agent/harness.py +0 -140
- verifiers-0.2.2.dev112/verifiers/v1/harnesses/hermes_agent/program.py +0 -10
- verifiers-0.2.2.dev112/verifiers/v1/harnesses/kimi_code/harness.py +0 -135
- verifiers-0.2.2.dev112/verifiers/v1/harnesses/openclaw/harness.py +0 -352
- verifiers-0.2.2.dev112/verifiers/v1/legacy.py +0 -580
- verifiers-0.2.2.dev112/verifiers/v1/serve/types.py +0 -86
- verifiers-0.2.2.dev112/verifiers/v1/session.py +0 -144
- verifiers-0.2.2.dev112/verifiers/v1/utils/install.py +0 -39
- {verifiers-0.2.2.dev112 → verifiers-0.3.1}/.gitignore +0 -0
- {verifiers-0.2.2.dev112 → verifiers-0.3.1}/LICENSE +0 -0
- {verifiers-0.2.2.dev112 → verifiers-0.3.1}/README.md +0 -0
- {verifiers-0.2.2.dev112 → verifiers-0.3.1}/tests/__init__.py +0 -0
- {verifiers-0.2.2.dev112 → verifiers-0.3.1}/tests/conftest.py +0 -0
- {verifiers-0.2.2.dev112 → verifiers-0.3.1}/tests/test_browser_env.py +0 -0
- {verifiers-0.2.2.dev112 → verifiers-0.3.1}/tests/test_build_script.py +0 -0
- {verifiers-0.2.2.dev112 → verifiers-0.3.1}/tests/test_cli_agent_env.py +0 -0
- {verifiers-0.2.2.dev112 → verifiers-0.3.1}/tests/test_client_auth_errors.py +0 -0
- {verifiers-0.2.2.dev112 → verifiers-0.3.1}/tests/test_client_config.py +0 -0
- {verifiers-0.2.2.dev112 → verifiers-0.3.1}/tests/test_client_multimodal_types.py +0 -0
- {verifiers-0.2.2.dev112 → verifiers-0.3.1}/tests/test_composable_env.py +0 -0
- {verifiers-0.2.2.dev112 → verifiers-0.3.1}/tests/test_context_token_metrics.py +0 -0
- {verifiers-0.2.2.dev112 → verifiers-0.3.1}/tests/test_decorator_ranks.py +0 -0
- {verifiers-0.2.2.dev112 → verifiers-0.3.1}/tests/test_endpoint_registry.py +0 -0
- {verifiers-0.2.2.dev112 → verifiers-0.3.1}/tests/test_env_group.py +0 -0
- {verifiers-0.2.2.dev112 → verifiers-0.3.1}/tests/test_env_server.py +0 -0
- {verifiers-0.2.2.dev112 → verifiers-0.3.1}/tests/test_environment.py +0 -0
- {verifiers-0.2.2.dev112 → verifiers-0.3.1}/tests/test_environment_extra.py +0 -0
- {verifiers-0.2.2.dev112 → verifiers-0.3.1}/tests/test_error_chain.py +0 -0
- {verifiers-0.2.2.dev112 → verifiers-0.3.1}/tests/test_eval_display.py +0 -0
- {verifiers-0.2.2.dev112 → verifiers-0.3.1}/tests/test_eval_utils.py +0 -0
- {verifiers-0.2.2.dev112 → verifiers-0.3.1}/tests/test_gepa_cli.py +0 -0
- {verifiers-0.2.2.dev112 → verifiers-0.3.1}/tests/test_gepa_utils.py +0 -0
- {verifiers-0.2.2.dev112 → verifiers-0.3.1}/tests/test_gym_env.py +0 -0
- {verifiers-0.2.2.dev112 → verifiers-0.3.1}/tests/test_harbor_env_mcp.py +0 -0
- {verifiers-0.2.2.dev112 → verifiers-0.3.1}/tests/test_init_script.py +0 -0
- {verifiers-0.2.2.dev112 → verifiers-0.3.1}/tests/test_install_utils.py +0 -0
- {verifiers-0.2.2.dev112 → verifiers-0.3.1}/tests/test_interception_utils.py +0 -0
- {verifiers-0.2.2.dev112 → verifiers-0.3.1}/tests/test_logging.py +0 -0
- {verifiers-0.2.2.dev112 → verifiers-0.3.1}/tests/test_math_rubric.py +0 -0
- {verifiers-0.2.2.dev112 → verifiers-0.3.1}/tests/test_maybe_think_parser.py +0 -0
- {verifiers-0.2.2.dev112 → verifiers-0.3.1}/tests/test_message_utils.py +0 -0
- {verifiers-0.2.2.dev112 → verifiers-0.3.1}/tests/test_message_utils_multimodal.py +0 -0
- {verifiers-0.2.2.dev112 → verifiers-0.3.1}/tests/test_multiturn_env.py +0 -0
- {verifiers-0.2.2.dev112 → verifiers-0.3.1}/tests/test_nemorl_client.py +0 -0
- {verifiers-0.2.2.dev112 → verifiers-0.3.1}/tests/test_openai_chat_completions_token_client.py +0 -0
- {verifiers-0.2.2.dev112 → verifiers-0.3.1}/tests/test_openai_responses_client.py +0 -0
- {verifiers-0.2.2.dev112 → verifiers-0.3.1}/tests/test_opencode_rlm_env.py +0 -0
- {verifiers-0.2.2.dev112 → verifiers-0.3.1}/tests/test_openenv_client.py +0 -0
- {verifiers-0.2.2.dev112 → verifiers-0.3.1}/tests/test_parser.py +0 -0
- {verifiers-0.2.2.dev112 → verifiers-0.3.1}/tests/test_path_utils.py +0 -0
- {verifiers-0.2.2.dev112 → verifiers-0.3.1}/tests/test_per_turn_timing.py +0 -0
- {verifiers-0.2.2.dev112 → verifiers-0.3.1}/tests/test_pricing_utils.py +0 -0
- {verifiers-0.2.2.dev112 → verifiers-0.3.1}/tests/test_prime_plugin.py +0 -0
- {verifiers-0.2.2.dev112 → verifiers-0.3.1}/tests/test_renderer_client.py +0 -0
- {verifiers-0.2.2.dev112 → verifiers-0.3.1}/tests/test_renderer_e2e.py +0 -0
- {verifiers-0.2.2.dev112 → verifiers-0.3.1}/tests/test_rlm_composable_env.py +0 -0
- {verifiers-0.2.2.dev112 → verifiers-0.3.1}/tests/test_rubric.py +0 -0
- {verifiers-0.2.2.dev112 → verifiers-0.3.1}/tests/test_rubric_group.py +0 -0
- {verifiers-0.2.2.dev112 → verifiers-0.3.1}/tests/test_sandbox_debug_env.py +0 -0
- {verifiers-0.2.2.dev112 → verifiers-0.3.1}/tests/test_sandbox_env.py +0 -0
- {verifiers-0.2.2.dev112 → verifiers-0.3.1}/tests/test_sandbox_mixin.py +0 -0
- {verifiers-0.2.2.dev112 → verifiers-0.3.1}/tests/test_save_utils.py +0 -0
- {verifiers-0.2.2.dev112 → verifiers-0.3.1}/tests/test_setup_script.py +0 -0
- {verifiers-0.2.2.dev112 → verifiers-0.3.1}/tests/test_singleturn_env.py +0 -0
- {verifiers-0.2.2.dev112 → verifiers-0.3.1}/tests/test_stateful_tool_env.py +0 -0
- {verifiers-0.2.2.dev112 → verifiers-0.3.1}/tests/test_think_parser.py +0 -0
- {verifiers-0.2.2.dev112 → verifiers-0.3.1}/tests/test_tool_env.py +0 -0
- {verifiers-0.2.2.dev112 → verifiers-0.3.1}/tests/test_tool_utils.py +0 -0
- {verifiers-0.2.2.dev112 → verifiers-0.3.1}/tests/test_trajectory_processing.py +0 -0
- {verifiers-0.2.2.dev112 → verifiers-0.3.1}/tests/test_tui_info_formatting.py +0 -0
- {verifiers-0.2.2.dev112 → verifiers-0.3.1}/tests/test_types.py +0 -0
- {verifiers-0.2.2.dev112 → verifiers-0.3.1}/tests/test_xml_parser.py +0 -0
- {verifiers-0.2.2.dev112 → verifiers-0.3.1}/tests/v1/fixtures/duet_v1.py +0 -0
- {verifiers-0.2.2.dev112 → verifiers-0.3.1}/tests/v1/fixtures/echo_agentic_v1.py +0 -0
- {verifiers-0.2.2.dev112 → verifiers-0.3.1}/tests/v1/fixtures/echo_user_sim_v1.py +0 -0
- {verifiers-0.2.2.dev112 → verifiers-0.3.1}/tests/v1/fixtures/pyproject.toml +0 -0
- {verifiers-0.2.2.dev112 → verifiers-0.3.1}/tests/v1/test_graph.py +0 -0
- {verifiers-0.2.2.dev112 → verifiers-0.3.1}/verifiers/cli/__init__.py +0 -0
- {verifiers-0.2.2.dev112 → verifiers-0.3.1}/verifiers/cli/commands/__init__.py +0 -0
- {verifiers-0.2.2.dev112 → verifiers-0.3.1}/verifiers/cli/plugins/__init__.py +0 -0
- {verifiers-0.2.2.dev112 → verifiers-0.3.1}/verifiers/cli/plugins/prime.py +0 -0
- {verifiers-0.2.2.dev112/verifiers → verifiers-0.3.1/verifiers/legacy}/decorators.py +0 -0
- {verifiers-0.2.2.dev112/verifiers → verifiers-0.3.1/verifiers/legacy}/envs/__init__.py +0 -0
- {verifiers-0.2.2.dev112/verifiers → verifiers-0.3.1/verifiers/legacy}/envs/experimental/README.md +0 -0
- {verifiers-0.2.2.dev112/verifiers → verifiers-0.3.1/verifiers/legacy}/envs/experimental/composable/README.md +0 -0
- {verifiers-0.2.2.dev112/verifiers → verifiers-0.3.1/verifiers/legacy}/envs/experimental/composable/_filter.py +0 -0
- {verifiers-0.2.2.dev112/verifiers → verifiers-0.3.1/verifiers/legacy}/envs/experimental/composable/harnesses/prompt.txt +0 -0
- {verifiers-0.2.2.dev112/verifiers → verifiers-0.3.1/verifiers/legacy}/envs/experimental/composable/swe_debug_env.py +0 -0
- {verifiers-0.2.2.dev112/verifiers → verifiers-0.3.1/verifiers/legacy}/envs/experimental/composable/tasksets/cp/__init__.py +0 -0
- {verifiers-0.2.2.dev112/verifiers → verifiers-0.3.1/verifiers/legacy}/envs/experimental/composable/tasksets/cp/test_utils.py +0 -0
- {verifiers-0.2.2.dev112/verifiers → verifiers-0.3.1/verifiers/legacy}/envs/experimental/composable/tasksets/harbor/__init__.py +0 -0
- {verifiers-0.2.2.dev112/verifiers → verifiers-0.3.1/verifiers/legacy}/envs/experimental/composable/tasksets/math/__init__.py +0 -0
- {verifiers-0.2.2.dev112/verifiers → verifiers-0.3.1/verifiers/legacy}/envs/experimental/composable/tasksets/swe/README.md +0 -0
- {verifiers-0.2.2.dev112/verifiers → verifiers-0.3.1/verifiers/legacy}/envs/experimental/composable/tasksets/swe/__init__.py +0 -0
- {verifiers-0.2.2.dev112/verifiers → verifiers-0.3.1/verifiers/legacy}/envs/experimental/composable/tasksets/swe/multi_swe/__init__.py +0 -0
- {verifiers-0.2.2.dev112/verifiers → verifiers-0.3.1/verifiers/legacy}/envs/experimental/composable/tasksets/swe/multi_swe/extract_fix_patch.sh +0 -0
- {verifiers-0.2.2.dev112/verifiers → verifiers-0.3.1/verifiers/legacy}/envs/experimental/composable/tasksets/swe/openswe/__init__.py +0 -0
- {verifiers-0.2.2.dev112/verifiers → verifiers-0.3.1/verifiers/legacy}/envs/experimental/composable/tasksets/swe/r2e_gym/__init__.py +0 -0
- {verifiers-0.2.2.dev112/verifiers → verifiers-0.3.1/verifiers/legacy}/envs/experimental/composable/tasksets/swe/r2e_gym/log_parser.py +0 -0
- {verifiers-0.2.2.dev112/verifiers → verifiers-0.3.1/verifiers/legacy}/envs/experimental/composable/tasksets/swe/scale_swe/__init__.py +0 -0
- {verifiers-0.2.2.dev112/verifiers → verifiers-0.3.1/verifiers/legacy}/envs/experimental/composable/tasksets/swe/shared/__init__.py +0 -0
- {verifiers-0.2.2.dev112/verifiers → verifiers-0.3.1/verifiers/legacy}/envs/experimental/composable/tasksets/swe/shared/test_patch.py +0 -0
- {verifiers-0.2.2.dev112/verifiers → verifiers-0.3.1/verifiers/legacy}/envs/experimental/composable/tasksets/swe/swe_bench/__init__.py +0 -0
- {verifiers-0.2.2.dev112/verifiers → verifiers-0.3.1/verifiers/legacy}/envs/experimental/composable/tasksets/swe/swe_lego/__init__.py +0 -0
- {verifiers-0.2.2.dev112/verifiers → verifiers-0.3.1/verifiers/legacy}/envs/experimental/composable/tasksets/swe/swe_rebench_v2/__init__.py +0 -0
- {verifiers-0.2.2.dev112/verifiers → verifiers-0.3.1/verifiers/legacy}/envs/experimental/composable/tasksets/swe/swe_rebench_v2/log_parsers.py +0 -0
- {verifiers-0.2.2.dev112/verifiers → verifiers-0.3.1/verifiers/legacy}/envs/experimental/composable/tasksets/swe/swe_smith/__init__.py +0 -0
- {verifiers-0.2.2.dev112/verifiers → verifiers-0.3.1/verifiers/legacy}/envs/experimental/harbor_env/__init__.py +0 -0
- {verifiers-0.2.2.dev112/verifiers → verifiers-0.3.1/verifiers/legacy}/envs/experimental/utils/file_locks.py +0 -0
- {verifiers-0.2.2.dev112/verifiers → verifiers-0.3.1/verifiers/legacy}/envs/integrations/README.md +0 -0
- {verifiers-0.2.2.dev112/verifiers → verifiers-0.3.1/verifiers/legacy}/envs/integrations/__init__.py +0 -0
- {verifiers-0.2.2.dev112/verifiers → verifiers-0.3.1/verifiers/legacy}/envs/integrations/browser_env/README.md +0 -0
- {verifiers-0.2.2.dev112/verifiers → verifiers-0.3.1/verifiers/legacy}/envs/integrations/browser_env/modes/__init__.py +0 -0
- {verifiers-0.2.2.dev112/verifiers → verifiers-0.3.1/verifiers/legacy}/errors.py +0 -0
- {verifiers-0.2.2.dev112/verifiers → verifiers-0.3.1/verifiers/legacy}/parsers/__init__.py +0 -0
- {verifiers-0.2.2.dev112/verifiers → verifiers-0.3.1/verifiers/legacy}/rubrics/__init__.py +0 -0
- {verifiers-0.2.2.dev112/verifiers → verifiers-0.3.1/verifiers/legacy}/scripts/__init__.py +0 -0
- {verifiers-0.2.2.dev112/verifiers → verifiers-0.3.1/verifiers/legacy}/scripts/build.py +0 -0
- {verifiers-0.2.2.dev112/verifiers → verifiers-0.3.1/verifiers/legacy}/scripts/setup.py +0 -0
- {verifiers-0.2.2.dev112/verifiers → verifiers-0.3.1/verifiers/legacy}/scripts/tui.py +0 -0
- {verifiers-0.2.2.dev112/verifiers → verifiers-0.3.1/verifiers/legacy}/utils/__init__.py +0 -0
- {verifiers-0.2.2.dev112/verifiers → verifiers-0.3.1/verifiers/legacy}/utils/config_utils.py +0 -0
- {verifiers-0.2.2.dev112/verifiers → verifiers-0.3.1/verifiers/legacy}/utils/data_utils.py +0 -0
- {verifiers-0.2.2.dev112/verifiers → verifiers-0.3.1/verifiers/legacy}/utils/env_config_utils.py +0 -0
- {verifiers-0.2.2.dev112/verifiers → verifiers-0.3.1/verifiers/legacy}/utils/heartbeat.py +0 -0
- {verifiers-0.2.2.dev112/verifiers → verifiers-0.3.1/verifiers/legacy}/utils/import_utils.py +0 -0
- {verifiers-0.2.2.dev112/verifiers → verifiers-0.3.1/verifiers/legacy}/utils/install_utils.py +0 -0
- {verifiers-0.2.2.dev112/verifiers → verifiers-0.3.1/verifiers/legacy}/utils/serve_utils.py +0 -0
- {verifiers-0.2.2.dev112/verifiers → verifiers-0.3.1/verifiers/legacy}/utils/thread_utils.py +0 -0
- {verifiers-0.2.2.dev112 → verifiers-0.3.1}/verifiers/v1/cli/__init__.py +0 -0
- {verifiers-0.2.2.dev112 → verifiers-0.3.1}/verifiers/v1/cli/dashboard/__init__.py +0 -0
- {verifiers-0.2.2.dev112 → verifiers-0.3.1}/verifiers/v1/cli/dashboard/base.py +0 -0
- {verifiers-0.2.2.dev112 → verifiers-0.3.1}/verifiers/v1/cli/dashboard/validate.py +0 -0
- {verifiers-0.2.2.dev112 → verifiers-0.3.1}/verifiers/v1/cli/eval/__init__.py +0 -0
- {verifiers-0.2.2.dev112 → verifiers-0.3.1}/verifiers/v1/clients/__init__.py +0 -0
- {verifiers-0.2.2.dev112 → verifiers-0.3.1}/verifiers/v1/configs/__init__.py +0 -0
- {verifiers-0.2.2.dev112 → verifiers-0.3.1}/verifiers/v1/configs/retries.py +0 -0
- {verifiers-0.2.2.dev112 → verifiers-0.3.1}/verifiers/v1/envs/__init__.py +0 -0
- {verifiers-0.2.2.dev112 → verifiers-0.3.1}/verifiers/v1/envs/agentic_judge/__init__.py +0 -0
- {verifiers-0.2.2.dev112 → verifiers-0.3.1}/verifiers/v1/envs/agentic_judge/env.py +0 -0
- {verifiers-0.2.2.dev112 → verifiers-0.3.1}/verifiers/v1/envs/best_of_n/__init__.py +0 -0
- {verifiers-0.2.2.dev112 → verifiers-0.3.1}/verifiers/v1/envs/best_of_n/env.py +0 -0
- {verifiers-0.2.2.dev112 → verifiers-0.3.1}/verifiers/v1/envs/shared_agentic_judge/__init__.py +0 -0
- {verifiers-0.2.2.dev112 → verifiers-0.3.1}/verifiers/v1/envs/single_agent/__init__.py +0 -0
- {verifiers-0.2.2.dev112 → verifiers-0.3.1}/verifiers/v1/envs/single_agent/env.py +0 -0
- {verifiers-0.2.2.dev112 → verifiers-0.3.1}/verifiers/v1/envs/user_sim/__init__.py +0 -0
- {verifiers-0.2.2.dev112 → verifiers-0.3.1}/verifiers/v1/envs/user_sim/env.py +0 -0
- {verifiers-0.2.2.dev112 → verifiers-0.3.1}/verifiers/v1/errors.py +0 -0
- {verifiers-0.2.2.dev112 → verifiers-0.3.1}/verifiers/v1/gepa/__init__.py +0 -0
- {verifiers-0.2.2.dev112 → verifiers-0.3.1}/verifiers/v1/gepa/adapter.py +0 -0
- {verifiers-0.2.2.dev112 → verifiers-0.3.1}/verifiers/v1/gepa/reflection.py +0 -0
- {verifiers-0.2.2.dev112 → verifiers-0.3.1}/verifiers/v1/harnesses/__init__.py +0 -0
- {verifiers-0.2.2.dev112 → verifiers-0.3.1}/verifiers/v1/harnesses/bash/__init__.py +0 -0
- {verifiers-0.2.2.dev112 → verifiers-0.3.1}/verifiers/v1/harnesses/browser_use/__init__.py +0 -0
- {verifiers-0.2.2.dev112 → verifiers-0.3.1}/verifiers/v1/harnesses/browser_use/harness.py +0 -0
- {verifiers-0.2.2.dev112 → verifiers-0.3.1}/verifiers/v1/harnesses/browser_use/program.py +0 -0
- {verifiers-0.2.2.dev112 → verifiers-0.3.1}/verifiers/v1/harnesses/claude_code/__init__.py +0 -0
- {verifiers-0.2.2.dev112 → verifiers-0.3.1}/verifiers/v1/harnesses/codex/__init__.py +0 -0
- {verifiers-0.2.2.dev112 → verifiers-0.3.1}/verifiers/v1/harnesses/hermes_agent/__init__.py +0 -0
- {verifiers-0.2.2.dev112 → verifiers-0.3.1}/verifiers/v1/harnesses/kimi_code/__init__.py +0 -0
- {verifiers-0.2.2.dev112 → verifiers-0.3.1}/verifiers/v1/harnesses/mini_swe_agent/__init__.py +0 -0
- {verifiers-0.2.2.dev112 → verifiers-0.3.1}/verifiers/v1/harnesses/mini_swe_agent/harness.py +0 -0
- {verifiers-0.2.2.dev112 → verifiers-0.3.1}/verifiers/v1/harnesses/node.py +0 -0
- {verifiers-0.2.2.dev112 → verifiers-0.3.1}/verifiers/v1/harnesses/null/__init__.py +0 -0
- {verifiers-0.2.2.dev112 → verifiers-0.3.1}/verifiers/v1/harnesses/null/harness.py +0 -0
- {verifiers-0.2.2.dev112 → verifiers-0.3.1}/verifiers/v1/harnesses/null/program.py +0 -0
- {verifiers-0.2.2.dev112 → verifiers-0.3.1}/verifiers/v1/harnesses/openclaw/__init__.py +0 -0
- {verifiers-0.2.2.dev112 → verifiers-0.3.1}/verifiers/v1/harnesses/pi/__init__.py +0 -0
- {verifiers-0.2.2.dev112 → verifiers-0.3.1}/verifiers/v1/harnesses/pool/__init__.py +0 -0
- {verifiers-0.2.2.dev112 → verifiers-0.3.1}/verifiers/v1/harnesses/rlm/__init__.py +0 -0
- {verifiers-0.2.2.dev112 → verifiers-0.3.1}/verifiers/v1/harnesses/terminus_2/__init__.py +0 -0
- {verifiers-0.2.2.dev112 → verifiers-0.3.1}/verifiers/v1/harnesses/terminus_2/program.py +0 -0
- {verifiers-0.2.2.dev112 → verifiers-0.3.1}/verifiers/v1/interception/__init__.py +0 -0
- {verifiers-0.2.2.dev112 → verifiers-0.3.1}/verifiers/v1/interception/base.py +0 -0
- {verifiers-0.2.2.dev112 → verifiers-0.3.1}/verifiers/v1/interception/pool.py +0 -0
- {verifiers-0.2.2.dev112 → verifiers-0.3.1}/verifiers/v1/interception/tunnel/__init__.py +0 -0
- {verifiers-0.2.2.dev112 → verifiers-0.3.1}/verifiers/v1/interception/tunnel/base.py +0 -0
- {verifiers-0.2.2.dev112 → verifiers-0.3.1}/verifiers/v1/interception/tunnel/custom.py +0 -0
- {verifiers-0.2.2.dev112 → verifiers-0.3.1}/verifiers/v1/judge.py +0 -0
- {verifiers-0.2.2.dev112 → verifiers-0.3.1}/verifiers/v1/judges/__init__.py +0 -0
- {verifiers-0.2.2.dev112 → verifiers-0.3.1}/verifiers/v1/judges/reference.py +0 -0
- {verifiers-0.2.2.dev112 → verifiers-0.3.1}/verifiers/v1/judges/reference.txt +0 -0
- {verifiers-0.2.2.dev112 → verifiers-0.3.1}/verifiers/v1/judges/rubric.py +0 -0
- {verifiers-0.2.2.dev112 → verifiers-0.3.1}/verifiers/v1/judges/rubric.txt +0 -0
- {verifiers-0.2.2.dev112 → verifiers-0.3.1}/verifiers/v1/mcp/__init__.py +0 -0
- {verifiers-0.2.2.dev112 → verifiers-0.3.1}/verifiers/v1/mcp/server.py +0 -0
- {verifiers-0.2.2.dev112 → verifiers-0.3.1}/verifiers/v1/mcp/toolset.py +0 -0
- {verifiers-0.2.2.dev112 → verifiers-0.3.1}/verifiers/v1/state.py +0 -0
- {verifiers-0.2.2.dev112 → verifiers-0.3.1}/verifiers/v1/taskset.py +0 -0
- {verifiers-0.2.2.dev112 → verifiers-0.3.1}/verifiers/v1/tasksets/__init__.py +0 -0
- {verifiers-0.2.2.dev112 → verifiers-0.3.1}/verifiers/v1/tasksets/harbor/__init__.py +0 -0
- {verifiers-0.2.2.dev112 → verifiers-0.3.1}/verifiers/v1/tasksets/lean/__init__.py +0 -0
- {verifiers-0.2.2.dev112 → verifiers-0.3.1}/verifiers/v1/tasksets/lean/scoring.py +0 -0
- {verifiers-0.2.2.dev112 → verifiers-0.3.1}/verifiers/v1/tasksets/lean/taskset.py +0 -0
- {verifiers-0.2.2.dev112 → verifiers-0.3.1}/verifiers/v1/tasksets/nemo_gym/__init__.py +0 -0
- {verifiers-0.2.2.dev112 → verifiers-0.3.1}/verifiers/v1/tasksets/nemo_gym/server.py +0 -0
- {verifiers-0.2.2.dev112 → verifiers-0.3.1}/verifiers/v1/tasksets/nemo_gym/toolset.py +0 -0
- {verifiers-0.2.2.dev112 → verifiers-0.3.1}/verifiers/v1/tasksets/openenv/__init__.py +0 -0
- {verifiers-0.2.2.dev112 → verifiers-0.3.1}/verifiers/v1/tasksets/openenv/taskset.py +0 -0
- {verifiers-0.2.2.dev112 → verifiers-0.3.1}/verifiers/v1/tasksets/textarena/__init__.py +0 -0
- {verifiers-0.2.2.dev112 → verifiers-0.3.1}/verifiers/v1/tasksets/textarena/taskset.py +0 -0
- {verifiers-0.2.2.dev112 → verifiers-0.3.1}/verifiers/v1/utils/__init__.py +0 -0
- {verifiers-0.2.2.dev112 → verifiers-0.3.1}/verifiers/v1/utils/aio.py +0 -0
- {verifiers-0.2.2.dev112 → verifiers-0.3.1}/verifiers/v1/utils/artifacts.py +0 -0
- {verifiers-0.2.2.dev112 → verifiers-0.3.1}/verifiers/v1/utils/format.py +0 -0
- {verifiers-0.2.2.dev112 → verifiers-0.3.1}/verifiers/v1/utils/generic.py +0 -0
- {verifiers-0.2.2.dev112 → verifiers-0.3.1}/verifiers/v1/utils/git.py +0 -0
- {verifiers-0.2.2.dev112 → verifiers-0.3.1}/verifiers/v1/utils/image.py +0 -0
- {verifiers-0.2.2.dev112 → verifiers-0.3.1}/verifiers/v1/utils/interrupt.py +0 -0
- {verifiers-0.2.2.dev112 → verifiers-0.3.1}/verifiers/v1/utils/memory.py +0 -0
- {verifiers-0.2.2.dev112 → verifiers-0.3.1}/verifiers/v1/utils/retries.py +0 -0
- {verifiers-0.2.2.dev112 → verifiers-0.3.1}/verifiers/v1/utils/score.py +0 -0
- {verifiers-0.2.2.dev112 → verifiers-0.3.1}/verifiers/v1/utils/version.py +0 -0
|
@@ -1,6 +1,6 @@
|
|
|
1
|
-
Metadata-Version: 2.
|
|
1
|
+
Metadata-Version: 2.5
|
|
2
2
|
Name: verifiers
|
|
3
|
-
Version: 0.
|
|
3
|
+
Version: 0.3.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
|
|
@@ -34,12 +34,12 @@ Requires-Dist: msgpack>=1.1.2
|
|
|
34
34
|
Requires-Dist: numpy>=2.1.0
|
|
35
35
|
Requires-Dist: openai-agents>=0.8.2
|
|
36
36
|
Requires-Dist: openai>=2.9.0
|
|
37
|
-
Requires-Dist: prime-pydantic-config[toml]>=0.4.
|
|
38
|
-
Requires-Dist: prime-sandboxes>=0.2.
|
|
37
|
+
Requires-Dist: prime-pydantic-config[toml]>=0.4.3
|
|
38
|
+
Requires-Dist: prime-sandboxes>=0.2.39
|
|
39
39
|
Requires-Dist: prime-tunnel>=0.1.8
|
|
40
40
|
Requires-Dist: pydantic>=2.12.3
|
|
41
41
|
Requires-Dist: pyzmq>=27.1.0
|
|
42
|
-
Requires-Dist: renderers>=0.1.
|
|
42
|
+
Requires-Dist: renderers>=0.1.10
|
|
43
43
|
Requires-Dist: requests
|
|
44
44
|
Requires-Dist: rich>=11.0.0
|
|
45
45
|
Requires-Dist: setproctitle>=1.3.0
|
|
@@ -51,7 +51,7 @@ Provides-Extra: browser
|
|
|
51
51
|
Requires-Dist: python-dotenv>=1.0.0; extra == 'browser'
|
|
52
52
|
Requires-Dist: stagehand>=3.4.0; extra == 'browser'
|
|
53
53
|
Provides-Extra: harbor
|
|
54
|
-
Requires-Dist: harbor==0.
|
|
54
|
+
Requires-Dist: harbor==0.21.0; (python_full_version >= '3.12') and extra == 'harbor'
|
|
55
55
|
Provides-Extra: modal
|
|
56
56
|
Requires-Dist: modal>=1.4.0; extra == 'modal'
|
|
57
57
|
Provides-Extra: nemo-gym
|
|
@@ -35,7 +35,7 @@ dependencies = [
|
|
|
35
35
|
"openai>=2.9.0",
|
|
36
36
|
"openai-agents>=0.8.2",
|
|
37
37
|
"prime-tunnel>=0.1.8",
|
|
38
|
-
"prime-sandboxes>=0.2.
|
|
38
|
+
"prime-sandboxes>=0.2.39",
|
|
39
39
|
"pydantic>=2.12.3",
|
|
40
40
|
"requests",
|
|
41
41
|
"rich>=11.0.0",
|
|
@@ -47,11 +47,11 @@ dependencies = [
|
|
|
47
47
|
"setproctitle>=1.3.0",
|
|
48
48
|
"httpx>=0.27.0",
|
|
49
49
|
"aiohttp>=3.9.0",
|
|
50
|
-
"prime-pydantic-config[toml]>=0.4.
|
|
50
|
+
"prime-pydantic-config[toml]>=0.4.3",
|
|
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.
|
|
54
|
+
"renderers>=0.1.10",
|
|
55
55
|
"typing_extensions>=4.12.2",
|
|
56
56
|
]
|
|
57
57
|
|
|
@@ -76,10 +76,23 @@ dev = [
|
|
|
76
76
|
# from this repo. The built-in tasksets/harnesses ship inside verifiers (verifiers/v1/...).
|
|
77
77
|
examples = [
|
|
78
78
|
"compact",
|
|
79
|
-
"gsm8k
|
|
80
|
-
"
|
|
81
|
-
"
|
|
82
|
-
"
|
|
79
|
+
"gsm8k",
|
|
80
|
+
"glossary",
|
|
81
|
+
"deepwiki",
|
|
82
|
+
"wiki-search",
|
|
83
|
+
"code-golf",
|
|
84
|
+
"proposer-solver",
|
|
85
|
+
"reverse-text",
|
|
86
|
+
"color-codeword",
|
|
87
|
+
"wordle",
|
|
88
|
+
"openenv-wordle",
|
|
89
|
+
"alphabet-sort",
|
|
90
|
+
"scratchpad",
|
|
91
|
+
"kuhn-poker",
|
|
92
|
+
"interception",
|
|
93
|
+
"grayscale-interception",
|
|
94
|
+
"bash-interception",
|
|
95
|
+
"web-search-interception",
|
|
83
96
|
]
|
|
84
97
|
|
|
85
98
|
[project.optional-dependencies]
|
|
@@ -96,7 +109,7 @@ browser = [
|
|
|
96
109
|
]
|
|
97
110
|
harbor = [
|
|
98
111
|
# Harbor currently publishes Python 3.12+ packages; keep core verifiers installable on 3.11.
|
|
99
|
-
"harbor==0.
|
|
112
|
+
"harbor==0.21.0 ; python_full_version >= '3.12'",
|
|
100
113
|
]
|
|
101
114
|
modal = [
|
|
102
115
|
"modal>=1.4.0",
|
|
@@ -151,24 +164,29 @@ default = true
|
|
|
151
164
|
|
|
152
165
|
[tool.uv.sources]
|
|
153
166
|
compact = { path = "environments/compact", editable = true }
|
|
154
|
-
glossary
|
|
155
|
-
deepwiki
|
|
156
|
-
wiki-search
|
|
157
|
-
gsm8k
|
|
158
|
-
code-golf
|
|
159
|
-
proposer-solver
|
|
160
|
-
reverse-text
|
|
161
|
-
wordle
|
|
162
|
-
openenv-wordle
|
|
163
|
-
color-codeword
|
|
164
|
-
alphabet-sort
|
|
165
|
-
scratchpad
|
|
166
|
-
kuhn-poker
|
|
167
|
+
glossary = { path = "environments/glossary", editable = true }
|
|
168
|
+
deepwiki = { path = "environments/deepwiki", editable = true }
|
|
169
|
+
wiki-search = { path = "environments/wiki_search", editable = true }
|
|
170
|
+
gsm8k = { path = "environments/gsm8k", editable = true }
|
|
171
|
+
code-golf = { path = "environments/code_golf", editable = true }
|
|
172
|
+
proposer-solver = { path = "environments/proposer_solver", editable = true }
|
|
173
|
+
reverse-text = { path = "environments/reverse_text", editable = true }
|
|
174
|
+
wordle = { path = "environments/wordle", editable = true }
|
|
175
|
+
openenv-wordle = { path = "environments/openenv_wordle", editable = true }
|
|
176
|
+
color-codeword = { path = "environments/color_codeword", editable = true }
|
|
177
|
+
alphabet-sort = { path = "environments/alphabet_sort", editable = true }
|
|
178
|
+
scratchpad = { path = "environments/scratchpad", editable = true }
|
|
179
|
+
kuhn-poker = { path = "environments/kuhn_poker", editable = true }
|
|
180
|
+
interception = { path = "environments/interception", editable = true }
|
|
181
|
+
grayscale-interception = { path = "environments/grayscale_interception", editable = true }
|
|
182
|
+
bash-interception = { path = "environments/bash_interception", editable = true }
|
|
183
|
+
web-search-interception = { path = "environments/web_search_interception", editable = true }
|
|
167
184
|
|
|
168
185
|
[tool.uv.exclude-newer-package]
|
|
169
186
|
# Bounded cutoffs for the explicitly requested tool upgrades.
|
|
170
187
|
# Full UTC timestamps: bare dates resolve to local-tz midnight and churn the
|
|
171
188
|
# lockfile across timezones.
|
|
189
|
+
harbor = "2026-08-11T00:00:00Z"
|
|
172
190
|
ruff = "2026-07-28T00:00:00Z"
|
|
173
191
|
ty = "2026-07-28T00:00:00Z"
|
|
174
192
|
# PrimeIntellect-published on PyPI (trusted publisher)
|
|
@@ -178,19 +196,19 @@ prime-pydantic-config = false
|
|
|
178
196
|
renderers = false
|
|
179
197
|
|
|
180
198
|
[project.scripts]
|
|
181
|
-
vf-eval = "verifiers.scripts.eval:main"
|
|
182
199
|
eval = "verifiers.v1.cli.eval.main:main"
|
|
183
200
|
validate = "verifiers.v1.cli.validate:main"
|
|
184
201
|
debug = "verifiers.v1.cli.debug:main"
|
|
185
202
|
replay = "verifiers.v1.cli.replay:main"
|
|
186
203
|
init = "verifiers.v1.cli.init:main"
|
|
187
204
|
gepa = "verifiers.v1.cli.gepa:main"
|
|
188
|
-
vf-
|
|
189
|
-
vf-
|
|
190
|
-
vf-
|
|
191
|
-
vf-
|
|
192
|
-
vf-
|
|
193
|
-
vf-
|
|
205
|
+
vf-eval = "verifiers.legacy.scripts.eval:main"
|
|
206
|
+
vf-gepa = "verifiers.legacy.scripts.gepa:main"
|
|
207
|
+
vf-init = "verifiers.legacy.scripts.init:main"
|
|
208
|
+
vf-install = "verifiers.legacy.scripts.install:main"
|
|
209
|
+
vf-setup = "verifiers.legacy.scripts.setup:main"
|
|
210
|
+
vf-build = "verifiers.legacy.scripts.build:main"
|
|
211
|
+
vf-tui = "verifiers.legacy.scripts.tui:main"
|
|
194
212
|
|
|
195
213
|
# hatchling configuration
|
|
196
214
|
[tool.hatch.version]
|
|
@@ -238,6 +256,12 @@ Documentation = "https://github.com/primeintellect-ai/verifiers"
|
|
|
238
256
|
Repository = "https://github.com/primeintellect-ai/verifiers.git"
|
|
239
257
|
Issues = "https://github.com/primeintellect-ai/verifiers/issues"
|
|
240
258
|
|
|
259
|
+
[tool.ruff.lint.isort]
|
|
260
|
+
# The legacy tree answers at both verifiers.* and verifiers.legacy.* (the
|
|
261
|
+
# package-root alias); path probing would classify the moved submodules as
|
|
262
|
+
# third-party, so pin the whole namespace first-party.
|
|
263
|
+
known-first-party = ["verifiers"]
|
|
264
|
+
|
|
241
265
|
[tool.pytest.ini_options]
|
|
242
266
|
minversion = "7.0"
|
|
243
267
|
testpaths = ["tests"]
|
|
@@ -300,7 +324,7 @@ redundant-cast = "ignore"
|
|
|
300
324
|
exclude = ["environments", "verifiers/v1"]
|
|
301
325
|
|
|
302
326
|
[[tool.ty.overrides]]
|
|
303
|
-
include = ["verifiers/envs/experimental/composable/tasksets/**"]
|
|
327
|
+
include = ["verifiers/legacy/envs/experimental/composable/tasksets/**"]
|
|
304
328
|
|
|
305
329
|
[tool.ty.overrides.rules]
|
|
306
330
|
unresolved-import = "ignore"
|
|
@@ -50,8 +50,9 @@ class TestImports:
|
|
|
50
50
|
|
|
51
51
|
def test_lazy_imports_work(self):
|
|
52
52
|
"""Test that lazy imports work correctly."""
|
|
53
|
-
#
|
|
54
|
-
lazy_imports =
|
|
53
|
+
# The lazy table lives on the legacy package; the root forwards its names.
|
|
54
|
+
lazy_imports = verifiers.legacy._LAZY_IMPORTS
|
|
55
|
+
assert lazy_imports, "legacy lazy-import table is empty"
|
|
55
56
|
|
|
56
57
|
for name in lazy_imports.keys():
|
|
57
58
|
assert name in verifiers.__all__, f"Lazy import {name} not in __all__"
|
|
@@ -5,8 +5,7 @@ settings that still exercise the path, then assert on the resulting `Trace`(s)
|
|
|
5
5
|
not unit tests of individual components. They need a model API key (`PRIME_API_KEY`);
|
|
6
6
|
without one the `e2e`-marked tests skip (config parsing still runs).
|
|
7
7
|
|
|
8
|
-
`run_v1`
|
|
9
|
-
`run_legacy_eval` for a v0 env). Placement coverage (harness x harness runtime x tool
|
|
8
|
+
`run_v1` mirrors the eval CLI's in-process path (`run_eval` with `--no-serve`). Placement coverage (harness x harness runtime x tool
|
|
10
9
|
server runtime) is PAIRWISE, not a full cross product: each test carries a curated list of
|
|
11
10
|
combinations (in test_e2e.py) that hits every axis value and the cross-boundary pairs with
|
|
12
11
|
distinct networking. The full cross bought flake exposure and CI minutes, not coverage — add
|
|
@@ -41,14 +40,14 @@ import pytest
|
|
|
41
40
|
import verifiers.v1 as vf
|
|
42
41
|
from verifiers.v1.cli.eval.runner import run_eval
|
|
43
42
|
from verifiers.v1.configs.cli.eval import EvalConfig
|
|
43
|
+
from verifiers.v1.configs.harness import HarnessConfig
|
|
44
44
|
from verifiers.v1.trace import Trace
|
|
45
|
-
from verifiers.v1.utils.loaders import
|
|
45
|
+
from verifiers.v1.utils.loaders import harness_config_type
|
|
46
46
|
|
|
47
47
|
CI_MODEL = "openai/gpt-5.6-luna"
|
|
48
48
|
|
|
49
|
-
# Fixture tasksets
|
|
50
|
-
#
|
|
51
|
-
# v0 legacy bridge both resolve them by id (no install).
|
|
49
|
+
# Fixture tasksets (echo-v1, echo-agentic-v1) live in tests/v1/fixtures, added to the
|
|
50
|
+
# path via `pythonpath` in pyproject so the loader resolves them by id (no install).
|
|
52
51
|
|
|
53
52
|
# The placement fixtures translate one parametrized value each; the combinations live on
|
|
54
53
|
# the tests (`indirect=True`), so coverage is a visible, curated list — never an implicit
|
|
@@ -76,15 +75,16 @@ def tool_runtime(request) -> dict:
|
|
|
76
75
|
# dependencies at rollout.
|
|
77
76
|
# `compact` (an example harness) and `terminus-2` (drives the host tmux) are excluded from e2e.
|
|
78
77
|
@pytest.fixture
|
|
79
|
-
def harness(request) ->
|
|
80
|
-
|
|
78
|
+
def harness(request) -> HarnessConfig:
|
|
79
|
+
config = {"id": request.param} if isinstance(request.param, str) else request.param
|
|
80
|
+
return harness_config_type(config["id"]).model_validate(config)
|
|
81
81
|
|
|
82
82
|
|
|
83
83
|
def pytest_configure(config) -> None:
|
|
84
84
|
"""Self-launching tool servers run `python -m <module>` in a fresh subprocess, which
|
|
85
85
|
inherits `PYTHONPATH` but not pytest's in-process `pythonpath`. Put the fixture dir on
|
|
86
86
|
`PYTHONPATH` so a fixture server module (e.g. `tool_response_image_v1`)
|
|
87
|
-
resolves there too — an installed example package (e.g. `
|
|
87
|
+
resolves there too — an installed example package (e.g. `glossary`) already would."""
|
|
88
88
|
fixtures = str(Path(__file__).parent / "fixtures")
|
|
89
89
|
existing = os.environ.get("PYTHONPATH", "")
|
|
90
90
|
if fixtures not in existing.split(os.pathsep):
|
|
@@ -121,7 +121,7 @@ def _eval_config(
|
|
|
121
121
|
taskset: str,
|
|
122
122
|
*,
|
|
123
123
|
output_dir: Path,
|
|
124
|
-
harness: str | None = "null",
|
|
124
|
+
harness: str | HarnessConfig | None = "null",
|
|
125
125
|
n: int = 1,
|
|
126
126
|
num_tasks: int = 1,
|
|
127
127
|
max_tokens: int = 2048,
|
|
@@ -132,6 +132,7 @@ def _eval_config(
|
|
|
132
132
|
env: dict | None = None,
|
|
133
133
|
pool: dict | None = None,
|
|
134
134
|
reasoning_effort: str | None = None,
|
|
135
|
+
server: bool = False,
|
|
135
136
|
) -> EvalConfig:
|
|
136
137
|
"""Build the smallest `EvalConfig` that still exercises the path, shared by the in-process
|
|
137
138
|
(`run_v1`) and env-server (`run_v1_server`) fixtures. `taskset_overrides` merges onto the
|
|
@@ -145,11 +146,17 @@ def _eval_config(
|
|
|
145
146
|
env_cfg = dict(env or {})
|
|
146
147
|
_configure_prime_runtimes(taskset_cfg)
|
|
147
148
|
if harness:
|
|
148
|
-
env_cfg.setdefault("agent", {})["harness"] =
|
|
149
|
+
env_cfg.setdefault("agent", {})["harness"] = (
|
|
150
|
+
harness_config_type(harness)(id=harness)
|
|
151
|
+
if isinstance(harness, str)
|
|
152
|
+
else harness
|
|
153
|
+
)
|
|
149
154
|
if runtime:
|
|
150
155
|
runtime_cfg = dict(runtime)
|
|
151
156
|
_configure_prime_runtimes(runtime_cfg)
|
|
152
157
|
env_cfg.setdefault("agent", {})["runtime"] = runtime_cfg
|
|
158
|
+
retries = {"max_retries": 2, "include": ["ProviderError", "HarnessError"]}
|
|
159
|
+
env_cfg.setdefault("retries", retries)
|
|
153
160
|
# Per-run caps live on the seats: resolve the env's declared roles and cap
|
|
154
161
|
# each one (a test's own seat dict wins over the shared defaults).
|
|
155
162
|
config_cls = vf.env_config_type(taskset, env_cfg.get("id", ""))
|
|
@@ -163,11 +170,8 @@ def _eval_config(
|
|
|
163
170
|
seat_cfg.setdefault("max_turns", max_turns)
|
|
164
171
|
seat_cfg.setdefault("max_output_tokens", max_tokens)
|
|
165
172
|
seat_cfg.setdefault("timeout", {"rollout": rollout_timeout, "scoring": 60})
|
|
166
|
-
#
|
|
167
|
-
seat_cfg.setdefault(
|
|
168
|
-
"retries",
|
|
169
|
-
{"max_retries": 2, "include": ["ProviderError", "HarnessError"]},
|
|
170
|
-
)
|
|
173
|
+
# Agent runs retry locally; interactions retry with their whole episode.
|
|
174
|
+
seat_cfg.setdefault("retries", retries)
|
|
171
175
|
return EvalConfig(
|
|
172
176
|
env={
|
|
173
177
|
"taskset": taskset_cfg,
|
|
@@ -179,21 +183,22 @@ def _eval_config(
|
|
|
179
183
|
"max_tokens": max_tokens,
|
|
180
184
|
"reasoning_effort": reasoning_effort,
|
|
181
185
|
},
|
|
182
|
-
rich=
|
|
183
|
-
|
|
184
|
-
|
|
186
|
+
rich=None,
|
|
187
|
+
serve=({"pool": pool} if pool else {}) if server else None,
|
|
188
|
+
output_dir=output_dir.parent,
|
|
189
|
+
run={"dir": output_dir.name},
|
|
185
190
|
model=CI_MODEL,
|
|
186
191
|
)
|
|
187
192
|
|
|
188
193
|
|
|
189
194
|
@pytest.fixture
|
|
190
195
|
def run_v1():
|
|
191
|
-
"""Run a v1 taskset end-to-end in-process (`run_eval
|
|
196
|
+
"""Run a v1 taskset end-to-end in-process (`run_eval` with `--no-serve`) and return
|
|
192
197
|
its traces."""
|
|
193
198
|
|
|
194
199
|
async def _run(taskset: str, **kwargs) -> list[Trace]:
|
|
195
200
|
config = _eval_config(taskset, **kwargs)
|
|
196
|
-
records = await run_eval(
|
|
201
|
+
records = await run_eval(config)
|
|
197
202
|
# The runner answers durability envelopes; the tests assert on traces.
|
|
198
203
|
return [t for r in records for t in r.traces]
|
|
199
204
|
|
|
@@ -202,17 +207,16 @@ def run_v1():
|
|
|
202
207
|
|
|
203
208
|
@pytest.fixture
|
|
204
209
|
def run_v1_server():
|
|
205
|
-
"""Run a v1 taskset through the env-server worker pool (`
|
|
206
|
-
|
|
207
|
-
the only fixture that exercises serving resources (shared tool servers,
|
|
208
|
-
being stood up by the *server* rather than the in-process runner.
|
|
209
|
-
worker for determinism."""
|
|
210
|
-
from verifiers.v1.cli.eval.runner import run_eval_server
|
|
210
|
+
"""Run a v1 taskset through the env-server worker pool (`run_eval`'s default path) —
|
|
211
|
+
the path a CLI run and prime-rl training both take. Spawns the broker + a worker, so
|
|
212
|
+
it's the only fixture that exercises serving resources (shared tool servers,
|
|
213
|
+
interception pool) being stood up by the *server* rather than the in-process runner.
|
|
214
|
+
Pinned to a single static worker for determinism."""
|
|
211
215
|
|
|
212
216
|
async def _run(taskset: str, **kwargs) -> list[Trace]:
|
|
213
217
|
kwargs.setdefault("pool", {"type": "static", "num_workers": 1})
|
|
214
|
-
config = _eval_config(taskset, **kwargs)
|
|
215
|
-
records = await
|
|
218
|
+
config = _eval_config(taskset, server=True, **kwargs)
|
|
219
|
+
records = await run_eval(config)
|
|
216
220
|
return [t for r in records for t in r.traces]
|
|
217
221
|
|
|
218
222
|
return _run
|
|
@@ -231,31 +235,3 @@ async def live_ctx():
|
|
|
231
235
|
client=EvalClientConfig(),
|
|
232
236
|
sampling=SamplingConfig(max_tokens=2048),
|
|
233
237
|
)
|
|
234
|
-
|
|
235
|
-
|
|
236
|
-
@pytest.fixture
|
|
237
|
-
def run_v0():
|
|
238
|
-
"""Run a legacy v0 env through the v1 bridge (the eval CLI's `--legacy.id` path)."""
|
|
239
|
-
from verifiers.v1.legacy import run_legacy_eval
|
|
240
|
-
|
|
241
|
-
async def _run(
|
|
242
|
-
env_id: str,
|
|
243
|
-
*,
|
|
244
|
-
output_dir: Path,
|
|
245
|
-
n: int = 1,
|
|
246
|
-
max_tokens: int = 2048,
|
|
247
|
-
args: dict | None = None,
|
|
248
|
-
) -> list[Trace]:
|
|
249
|
-
config = EvalConfig(
|
|
250
|
-
legacy={"id": env_id, "args": args or {}},
|
|
251
|
-
model=CI_MODEL,
|
|
252
|
-
num_tasks=1,
|
|
253
|
-
num_rollouts=n,
|
|
254
|
-
sampling={"max_tokens": max_tokens},
|
|
255
|
-
rich=False,
|
|
256
|
-
output_dir=output_dir,
|
|
257
|
-
)
|
|
258
|
-
records = await run_legacy_eval(config)
|
|
259
|
-
return [t for r in records for t in r.traces]
|
|
260
|
-
|
|
261
|
-
return _run
|
|
@@ -44,9 +44,9 @@ class CounterTaskset(vf.Taskset[CounterTask, CounterConfig]):
|
|
|
44
44
|
vf.TaskData(
|
|
45
45
|
idx=0,
|
|
46
46
|
prompt=(
|
|
47
|
-
f"Call the `
|
|
48
|
-
"for each result before the next. After the
|
|
49
|
-
"<answer>done</answer>."
|
|
47
|
+
f"Call the `bump` tool from the `counter` MCP server {TARGET} times, "
|
|
48
|
+
"one call per turn — wait for each result before the next. After the "
|
|
49
|
+
"last result, reply with <answer>done</answer>."
|
|
50
50
|
),
|
|
51
51
|
),
|
|
52
52
|
self.config.task,
|
|
@@ -59,8 +59,9 @@ class ACPResumeEnv(vf.SingleAgentEnv):
|
|
|
59
59
|
if not first.terminated:
|
|
60
60
|
segments.append(
|
|
61
61
|
await interaction.turn(
|
|
62
|
-
"Call `
|
|
63
|
-
"message, then reply with exactly the
|
|
62
|
+
"Call the `recall` tool from the `resume` MCP server with the "
|
|
63
|
+
"codeword from my previous message, then reply with exactly the "
|
|
64
|
+
"tool result."
|
|
64
65
|
)
|
|
65
66
|
)
|
|
66
67
|
interaction.trace.info["acp_segments"] = [
|
|
@@ -18,7 +18,7 @@ ECHO_TOKEN = "ok-7f3" # the tool stamps this; only a real tool call can surface
|
|
|
18
18
|
|
|
19
19
|
|
|
20
20
|
class EchoToolset(vf.Toolset[vf.ToolsetConfig]):
|
|
21
|
-
TOOL_PREFIX = "echo"
|
|
21
|
+
TOOL_PREFIX = "echo"
|
|
22
22
|
|
|
23
23
|
@vf.tool
|
|
24
24
|
def back(self, message: str) -> str:
|
|
@@ -53,7 +53,8 @@ class EchoToolTaskset(vf.Taskset[EchoToolTask, EchoToolConfig]):
|
|
|
53
53
|
vf.TaskData(
|
|
54
54
|
idx=0,
|
|
55
55
|
prompt=(
|
|
56
|
-
f
|
|
56
|
+
f"Call the `back` tool from the `echo` MCP server with the message "
|
|
57
|
+
f'"{PHRASE}", then reply '
|
|
57
58
|
"with exactly what it returns inside <answer></answer> tags."
|
|
58
59
|
),
|
|
59
60
|
),
|
|
@@ -13,7 +13,7 @@ SYSTEM = "Call the requested tool before answering."
|
|
|
13
13
|
|
|
14
14
|
|
|
15
15
|
class VisionToolset(vf.Toolset[vf.ToolsetConfig]):
|
|
16
|
-
TOOL_PREFIX = "vision"
|
|
16
|
+
TOOL_PREFIX = "vision"
|
|
17
17
|
|
|
18
18
|
@vf.tool
|
|
19
19
|
def snapshot(self) -> list:
|
|
@@ -60,8 +60,8 @@ class ToolResponseImageTaskset(
|
|
|
60
60
|
vf.TaskData(
|
|
61
61
|
idx=0,
|
|
62
62
|
prompt=(
|
|
63
|
-
"Call the `
|
|
64
|
-
"reply with exactly `done`."
|
|
63
|
+
"Call the `snapshot` tool from the `vision` MCP server exactly once. "
|
|
64
|
+
"After it returns, reply with exactly `done`."
|
|
65
65
|
),
|
|
66
66
|
system_prompt=SYSTEM,
|
|
67
67
|
),
|
|
@@ -23,5 +23,4 @@ CONFIGS = sorted(
|
|
|
23
23
|
@pytest.mark.parametrize("path", CONFIGS, ids=lambda p: p.name)
|
|
24
24
|
def test_eval_config_parses(path: Path) -> None:
|
|
25
25
|
config = EvalConfig.model_validate(tomllib.load(path.open("rb")))
|
|
26
|
-
|
|
27
|
-
assert config.env.taskset.id or config.id
|
|
26
|
+
assert config.env.taskset.id
|
|
@@ -23,7 +23,12 @@ CHAT_PLACEMENTS = [
|
|
|
23
23
|
pair("null", "subprocess", "null-harness-in-subprocess"),
|
|
24
24
|
pair("bash", "docker", "bash-harness-in-docker"),
|
|
25
25
|
pair("rlm", "docker", "rlm-harness-in-docker"),
|
|
26
|
-
|
|
26
|
+
pytest.param(
|
|
27
|
+
{"id": "kimi-code", "transport": "responses"},
|
|
28
|
+
"docker",
|
|
29
|
+
marks=[mark.kimi_code, mark.docker],
|
|
30
|
+
id="kimi-code-responses-harness-in-docker",
|
|
31
|
+
),
|
|
27
32
|
pair("bash", "prime", "bash-harness-in-prime"),
|
|
28
33
|
pair("bash", "modal", "bash-harness-in-modal"),
|
|
29
34
|
]
|
|
@@ -34,7 +39,12 @@ CHAT_PLACEMENTS = [
|
|
|
34
39
|
AGENTIC_PLACEMENTS = [
|
|
35
40
|
pair("bash", "subprocess", "bash-harness-in-subprocess"),
|
|
36
41
|
pair("rlm", "docker", "rlm-harness-in-docker"),
|
|
37
|
-
|
|
42
|
+
pytest.param(
|
|
43
|
+
{"id": "kimi-code", "transport": "responses"},
|
|
44
|
+
"docker",
|
|
45
|
+
marks=[mark.kimi_code, mark.docker],
|
|
46
|
+
id="kimi-code-responses-harness-in-docker",
|
|
47
|
+
),
|
|
38
48
|
pair("codex", "docker", "codex-harness-in-docker"),
|
|
39
49
|
pair("claude-code", "docker", "claude-code-harness-in-docker"),
|
|
40
50
|
pair("hermes-agent", "docker", "hermes-agent-harness-in-docker"),
|
|
@@ -59,8 +69,18 @@ ACP_RESUME_PLACEMENTS = [
|
|
|
59
69
|
pair("claude-code", "docker", "claude-code-acp-in-docker"),
|
|
60
70
|
pair("hermes-agent", "docker", "hermes-agent-acp-in-docker"),
|
|
61
71
|
pair("rlm", "docker", "rlm-acp-in-docker"),
|
|
62
|
-
|
|
63
|
-
|
|
72
|
+
pytest.param(
|
|
73
|
+
{"id": "kimi-code", "transport": "responses"},
|
|
74
|
+
"docker",
|
|
75
|
+
marks=[mark.kimi_code, mark.docker],
|
|
76
|
+
id="kimi-code-responses-acp-in-docker",
|
|
77
|
+
),
|
|
78
|
+
pytest.param(
|
|
79
|
+
{"id": "pi", "transport": "responses"},
|
|
80
|
+
"docker",
|
|
81
|
+
marks=[mark.pi, mark.docker],
|
|
82
|
+
id="pi-responses-acp-in-docker",
|
|
83
|
+
),
|
|
64
84
|
pair("pool", "docker", "pool-acp-in-docker"),
|
|
65
85
|
pair("openclaw", "docker", "openclaw-acp-in-docker"),
|
|
66
86
|
pair("pool", "prime", "pool-acp-in-prime"),
|
|
@@ -116,6 +136,8 @@ async def test_single_turn(run_v1, harness, harness_runtime, tmp_path):
|
|
|
116
136
|
assert trace.num_turns == 1
|
|
117
137
|
assert trace.stop_condition == "agent_completed"
|
|
118
138
|
assert trace.reward == 1.0
|
|
139
|
+
assert trace.task.key == f"echo:{trace.task.data.answer}"
|
|
140
|
+
assert trace.task.hash is not None
|
|
119
141
|
# The seat's resolved identity rides the trace (policy metadata for trainers).
|
|
120
142
|
assert trace.agent is not None
|
|
121
143
|
assert trace.agent.config.sampling.max_tokens == 2048
|
|
@@ -235,11 +257,14 @@ async def test_acp_resume_with_tool(run_v1, harness, harness_runtime, tmp_path):
|
|
|
235
257
|
assert len(segments) == 2
|
|
236
258
|
assert segments[0]["terminated"] is False
|
|
237
259
|
assert segments[1]["terminated"] is False
|
|
260
|
+
# Kimi Code is broken upstream: its Responses adapter drops message `phase` on replay.
|
|
261
|
+
if harness.id != "kimi-code":
|
|
262
|
+
assert trace.num_branches == 1
|
|
238
263
|
# Native MCP tools need not appear in the intercepted model request that
|
|
239
264
|
# populates trace.tools; the ACP transcript is the source of truth for use.
|
|
240
265
|
assert "tool" in segments[1]["roles"]
|
|
241
266
|
assert segments[1]["tool_outputs"]
|
|
242
|
-
if harness == "rlm":
|
|
267
|
+
if harness.id == "rlm":
|
|
243
268
|
assert "turns_since_last_compaction" in trace.metrics
|
|
244
269
|
|
|
245
270
|
|
|
@@ -263,10 +288,10 @@ async def test_tool(run_v1, harness_runtime, tool_runtime, tmp_path):
|
|
|
263
288
|
assert trace.ok
|
|
264
289
|
assert trace.num_turns >= 2 # tool call + answer
|
|
265
290
|
assert trace.reward == 1.0
|
|
266
|
-
# The interception server captured the advertised
|
|
267
|
-
#
|
|
291
|
+
# The interception server captured the harness's advertised name and schema. Harnesses
|
|
292
|
+
# may qualify the same raw MCP tool differently, so the test checks its stable suffix.
|
|
268
293
|
assert trace.tools
|
|
269
|
-
(echo_tool,) = [
|
|
294
|
+
(echo_tool,) = [tool for tool in trace.tools if tool.name.endswith("back")]
|
|
270
295
|
assert "message" in echo_tool.parameters.get("properties", {})
|
|
271
296
|
|
|
272
297
|
|
|
@@ -301,7 +326,7 @@ async def test_shared_tool_isolation(
|
|
|
301
326
|
):
|
|
302
327
|
"""A shared writable tool isolates state across concurrent rollouts and runtimes."""
|
|
303
328
|
traces = await run_v1_server(
|
|
304
|
-
"scratchpad
|
|
329
|
+
"scratchpad",
|
|
305
330
|
harness="null",
|
|
306
331
|
runtime={"type": harness_runtime},
|
|
307
332
|
output_dir=tmp_path,
|
|
@@ -574,9 +599,9 @@ async def test_env_id_user_sim_with_tools(run_v1, tmp_path):
|
|
|
574
599
|
assert assistant.task.data.prompt is None # the scenario stayed off the wire
|
|
575
600
|
assert user.num_turns >= 1 # the modeled user actually drove the exchange
|
|
576
601
|
assert assistant.rewards["echoed"].score == 1.0 # the tool ran, mid-conversation
|
|
577
|
-
# The tool was advertised to the masked chat
|
|
602
|
+
# The tool was advertised to the masked chat, regardless of harness qualification.
|
|
578
603
|
assert assistant.tools
|
|
579
|
-
assert any(tool.name
|
|
604
|
+
assert any(tool.name.endswith("back") for tool in assistant.tools)
|
|
580
605
|
|
|
581
606
|
|
|
582
607
|
@pytest.mark.e2e
|
|
@@ -584,7 +609,7 @@ async def test_kuhn_poker_self_play(run_v1, tmp_path):
|
|
|
584
609
|
"""The turn-coupled proof env: one Kuhn poker hand, both seats live interactions
|
|
585
610
|
of the run's own model (self-play), refereed host-side, paid out zero-sum."""
|
|
586
611
|
traces = await run_v1(
|
|
587
|
-
"kuhn-poker
|
|
612
|
+
"kuhn-poker",
|
|
588
613
|
harness=None, # both seats pin the null harness themselves
|
|
589
614
|
output_dir=tmp_path,
|
|
590
615
|
max_turns=8,
|
|
@@ -637,16 +662,15 @@ async def test_replay_round_trip(run_v1, tmp_path):
|
|
|
637
662
|
typed rebuild fails and the trace-only `@reward` silently stops running (the
|
|
638
663
|
wire-narrowing regression). Trace-only rewards are deterministic given the transcript,
|
|
639
664
|
so all three generations must agree."""
|
|
640
|
-
import tomllib
|
|
641
665
|
from pathlib import Path
|
|
642
666
|
|
|
643
|
-
from verifiers.v1.cli.output import
|
|
667
|
+
from verifiers.v1.cli.output import saved_config_path
|
|
644
668
|
from verifiers.v1.cli.replay import run_replay
|
|
645
669
|
from verifiers.v1.configs.cli.replay import ReplayConfig
|
|
646
670
|
|
|
647
671
|
run_dir = tmp_path / "run"
|
|
648
672
|
(source,) = await run_v1(
|
|
649
|
-
"reverse-text
|
|
673
|
+
"reverse-text",
|
|
650
674
|
harness="null",
|
|
651
675
|
runtime={"type": "subprocess"},
|
|
652
676
|
output_dir=run_dir,
|
|
@@ -658,7 +682,9 @@ async def test_replay_round_trip(run_v1, tmp_path):
|
|
|
658
682
|
async def replay(source_dir: Path, out: Path):
|
|
659
683
|
# The CLI's layering, minus the argv plumbing: the saved run's config is the base
|
|
660
684
|
# (`ReplayConfig` ignores its eval-only keys), the source's output_dir is dropped.
|
|
661
|
-
|
|
685
|
+
import json
|
|
686
|
+
|
|
687
|
+
data = json.loads(saved_config_path(source_dir).read_text())
|
|
662
688
|
data.pop("output_dir", None)
|
|
663
689
|
config = ReplayConfig(**{**data, "rich": False})
|
|
664
690
|
(trace,) = await run_replay(config, source_dir, out)
|