verifiers 0.4.1.dev58__tar.gz → 0.4.1.dev65__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.4.1.dev58 → verifiers-0.4.1.dev65}/PKG-INFO +3 -3
- {verifiers-0.4.1.dev58 → verifiers-0.4.1.dev65}/pyproject.toml +2 -2
- {verifiers-0.4.1.dev58 → verifiers-0.4.1.dev65}/tests/integration/fixtures/counter_tool.py +3 -1
- {verifiers-0.4.1.dev58 → verifiers-0.4.1.dev65}/tests/integration/test_limits.py +38 -0
- verifiers-0.4.1.dev65/tests/unit/test_api.py +66 -0
- {verifiers-0.4.1.dev58 → verifiers-0.4.1.dev65}/tests/unit/test_trace.py +27 -0
- verifiers-0.4.1.dev65/verifiers/v1/__init__.py +599 -0
- {verifiers-0.4.1.dev58 → verifiers-0.4.1.dev65}/verifiers/v1/agent.py +1 -0
- {verifiers-0.4.1.dev58 → verifiers-0.4.1.dev65}/verifiers/v1/configs/agent.py +13 -3
- {verifiers-0.4.1.dev58 → verifiers-0.4.1.dev65}/verifiers/v1/configs/cli/debug.py +1 -1
- {verifiers-0.4.1.dev58 → verifiers-0.4.1.dev65}/verifiers/v1/configs/cli/eval.py +2 -3
- {verifiers-0.4.1.dev58 → verifiers-0.4.1.dev65}/verifiers/v1/configs/cli/validate.py +2 -2
- verifiers-0.4.1.dev65/verifiers/v1/configs/deployment.py +12 -0
- {verifiers-0.4.1.dev58 → verifiers-0.4.1.dev65}/verifiers/v1/configs/env.py +12 -1
- verifiers-0.4.1.dev65/verifiers/v1/configs/interception.py +90 -0
- {verifiers-0.4.1.dev58 → verifiers-0.4.1.dev65}/verifiers/v1/configs/judge.py +1 -1
- {verifiers-0.4.1.dev58 → verifiers-0.4.1.dev65}/verifiers/v1/configs/runtime.py +107 -3
- {verifiers-0.4.1.dev58 → verifiers-0.4.1.dev65}/verifiers/v1/configs/scoring.py +7 -2
- {verifiers-0.4.1.dev58 → verifiers-0.4.1.dev65}/verifiers/v1/envs/single_agent/env.py +1 -10
- {verifiers-0.4.1.dev58 → verifiers-0.4.1.dev65}/verifiers/v1/interception/__init__.py +10 -17
- {verifiers-0.4.1.dev58 → verifiers-0.4.1.dev65}/verifiers/v1/interception/base.py +0 -8
- {verifiers-0.4.1.dev58 → verifiers-0.4.1.dev65}/verifiers/v1/interception/pool.py +6 -28
- {verifiers-0.4.1.dev58 → verifiers-0.4.1.dev65}/verifiers/v1/interception/server.py +3 -19
- {verifiers-0.4.1.dev58 → verifiers-0.4.1.dev65}/verifiers/v1/interception/tunnel/__init__.py +9 -12
- {verifiers-0.4.1.dev58 → verifiers-0.4.1.dev65}/verifiers/v1/interception/tunnel/base.py +1 -7
- verifiers-0.4.1.dev65/verifiers/v1/interception/tunnel/custom.py +23 -0
- {verifiers-0.4.1.dev58 → verifiers-0.4.1.dev65}/verifiers/v1/interception/tunnel/prime.py +3 -9
- {verifiers-0.4.1.dev58 → verifiers-0.4.1.dev65}/verifiers/v1/rollout.py +16 -1
- {verifiers-0.4.1.dev58 → verifiers-0.4.1.dev65}/verifiers/v1/runtimes/__init__.py +8 -19
- {verifiers-0.4.1.dev58 → verifiers-0.4.1.dev65}/verifiers/v1/runtimes/backends/custom.py +3 -24
- {verifiers-0.4.1.dev58 → verifiers-0.4.1.dev65}/verifiers/v1/runtimes/backends/docker.py +2 -20
- {verifiers-0.4.1.dev58 → verifiers-0.4.1.dev65}/verifiers/v1/runtimes/backends/prime.py +2 -48
- {verifiers-0.4.1.dev58 → verifiers-0.4.1.dev65}/verifiers/v1/runtimes/backends/subprocess.py +2 -7
- {verifiers-0.4.1.dev58 → verifiers-0.4.1.dev65}/verifiers/v1/runtimes/deployment.py +1 -10
- {verifiers-0.4.1.dev58 → verifiers-0.4.1.dev65}/verifiers/v1/session.py +16 -1
- {verifiers-0.4.1.dev58 → verifiers-0.4.1.dev65}/verifiers/v1/task.py +11 -1
- {verifiers-0.4.1.dev58 → verifiers-0.4.1.dev65}/verifiers/v1/trace.py +1 -0
- {verifiers-0.4.1.dev58 → verifiers-0.4.1.dev65}/verifiers/v1/types.py +12 -3
- verifiers-0.4.1.dev58/verifiers/v1/__init__.py +0 -420
- verifiers-0.4.1.dev58/verifiers/v1/interception/tunnel/custom.py +0 -42
- {verifiers-0.4.1.dev58 → verifiers-0.4.1.dev65}/.gitignore +0 -0
- {verifiers-0.4.1.dev58 → verifiers-0.4.1.dev65}/LICENSE +0 -0
- {verifiers-0.4.1.dev58 → verifiers-0.4.1.dev65}/README.md +0 -0
- {verifiers-0.4.1.dev58 → verifiers-0.4.1.dev65}/tests/integration/conftest.py +0 -0
- {verifiers-0.4.1.dev58 → verifiers-0.4.1.dev65}/tests/integration/fixtures/agent_user.py +0 -0
- {verifiers-0.4.1.dev58 → verifiers-0.4.1.dev65}/tests/integration/fixtures/agent_user_harness.py +0 -0
- {verifiers-0.4.1.dev58 → verifiers-0.4.1.dev65}/tests/integration/fixtures/duet.py +0 -0
- {verifiers-0.4.1.dev58 → verifiers-0.4.1.dev65}/tests/integration/fixtures/echo.py +0 -0
- {verifiers-0.4.1.dev58 → verifiers-0.4.1.dev65}/tests/integration/fixtures/echo_acp_resume.py +0 -0
- {verifiers-0.4.1.dev58 → verifiers-0.4.1.dev65}/tests/integration/fixtures/echo_agentic.py +0 -0
- {verifiers-0.4.1.dev58 → verifiers-0.4.1.dev65}/tests/integration/fixtures/echo_tool.py +0 -0
- {verifiers-0.4.1.dev58 → verifiers-0.4.1.dev65}/tests/integration/fixtures/echo_tool_compose/docker-compose.yaml +0 -0
- {verifiers-0.4.1.dev58 → verifiers-0.4.1.dev65}/tests/integration/fixtures/echo_user_sim.py +0 -0
- {verifiers-0.4.1.dev58 → verifiers-0.4.1.dev65}/tests/integration/fixtures/fetch_tool.py +0 -0
- {verifiers-0.4.1.dev58 → verifiers-0.4.1.dev65}/tests/integration/fixtures/network_policy.py +0 -0
- {verifiers-0.4.1.dev58 → verifiers-0.4.1.dev65}/tests/integration/fixtures/parallel.py +0 -0
- {verifiers-0.4.1.dev58 → verifiers-0.4.1.dev65}/tests/integration/fixtures/pyproject.toml +0 -0
- {verifiers-0.4.1.dev58 → verifiers-0.4.1.dev65}/tests/integration/fixtures/skill_codeword.py +0 -0
- {verifiers-0.4.1.dev58 → verifiers-0.4.1.dev65}/tests/integration/fixtures/skills/project-codeword/SKILL.md +0 -0
- {verifiers-0.4.1.dev58 → verifiers-0.4.1.dev65}/tests/integration/fixtures/tool_response_image.py +0 -0
- {verifiers-0.4.1.dev58 → verifiers-0.4.1.dev65}/tests/integration/grid.py +0 -0
- {verifiers-0.4.1.dev58 → verifiers-0.4.1.dev65}/tests/integration/test_agent_user.py +0 -0
- {verifiers-0.4.1.dev58 → verifiers-0.4.1.dev65}/tests/integration/test_agentic_judge.py +0 -0
- {verifiers-0.4.1.dev58 → verifiers-0.4.1.dev65}/tests/integration/test_compose_scoring.py +0 -0
- {verifiers-0.4.1.dev58 → verifiers-0.4.1.dev65}/tests/integration/test_examples.py +0 -0
- {verifiers-0.4.1.dev58 → verifiers-0.4.1.dev65}/tests/integration/test_multi_agent.py +0 -0
- {verifiers-0.4.1.dev58 → verifiers-0.4.1.dev65}/tests/integration/test_multi_turn.py +0 -0
- {verifiers-0.4.1.dev58 → verifiers-0.4.1.dev65}/tests/integration/test_multi_turn_tool.py +0 -0
- {verifiers-0.4.1.dev58 → verifiers-0.4.1.dev65}/tests/integration/test_multimodal_tool.py +0 -0
- {verifiers-0.4.1.dev58 → verifiers-0.4.1.dev65}/tests/integration/test_network_policy.py +0 -0
- {verifiers-0.4.1.dev58 → verifiers-0.4.1.dev65}/tests/integration/test_parallel.py +0 -0
- {verifiers-0.4.1.dev58 → verifiers-0.4.1.dev65}/tests/integration/test_resume_tool.py +0 -0
- {verifiers-0.4.1.dev58 → verifiers-0.4.1.dev65}/tests/integration/test_rubric_judge.py +0 -0
- {verifiers-0.4.1.dev58 → verifiers-0.4.1.dev65}/tests/integration/test_sampling.py +0 -0
- {verifiers-0.4.1.dev58 → verifiers-0.4.1.dev65}/tests/integration/test_scoring_network.py +0 -0
- {verifiers-0.4.1.dev58 → verifiers-0.4.1.dev65}/tests/integration/test_shared_tool.py +0 -0
- {verifiers-0.4.1.dev58 → verifiers-0.4.1.dev65}/tests/integration/test_single_turn.py +0 -0
- {verifiers-0.4.1.dev58 → verifiers-0.4.1.dev65}/tests/integration/test_skills.py +0 -0
- {verifiers-0.4.1.dev58 → verifiers-0.4.1.dev65}/tests/integration/test_stateful_tool.py +0 -0
- {verifiers-0.4.1.dev58 → verifiers-0.4.1.dev65}/tests/integration/test_tool_vms.py +0 -0
- {verifiers-0.4.1.dev58 → verifiers-0.4.1.dev65}/tests/integration/test_user_echo.py +0 -0
- {verifiers-0.4.1.dev58 → verifiers-0.4.1.dev65}/tests/integration/test_user_sim.py +0 -0
- {verifiers-0.4.1.dev58 → verifiers-0.4.1.dev65}/tests/unit/cli/test_replay.py +0 -0
- {verifiers-0.4.1.dev58 → verifiers-0.4.1.dev65}/tests/unit/conftest.py +0 -0
- {verifiers-0.4.1.dev58 → verifiers-0.4.1.dev65}/tests/unit/harnesses/test_core.py +0 -0
- {verifiers-0.4.1.dev58 → verifiers-0.4.1.dev65}/tests/unit/harnesses/test_rlm.py +0 -0
- {verifiers-0.4.1.dev58 → verifiers-0.4.1.dev65}/tests/unit/interception/test_tunnel.py +0 -0
- {verifiers-0.4.1.dev58 → verifiers-0.4.1.dev65}/tests/unit/judges/conftest.py +0 -0
- {verifiers-0.4.1.dev58 → verifiers-0.4.1.dev65}/tests/unit/judges/test_judge.py +0 -0
- {verifiers-0.4.1.dev58 → verifiers-0.4.1.dev65}/tests/unit/judges/test_reference.py +0 -0
- {verifiers-0.4.1.dev58 → verifiers-0.4.1.dev65}/tests/unit/judges/test_rubric.py +0 -0
- {verifiers-0.4.1.dev58 → verifiers-0.4.1.dev65}/tests/unit/runtimes/test_private_network.py +0 -0
- {verifiers-0.4.1.dev58 → verifiers-0.4.1.dev65}/tests/unit/serve/test_client.py +0 -0
- {verifiers-0.4.1.dev58 → verifiers-0.4.1.dev65}/tests/unit/serve/test_delta.py +0 -0
- {verifiers-0.4.1.dev58 → verifiers-0.4.1.dev65}/tests/unit/serve/test_pool.py +0 -0
- {verifiers-0.4.1.dev58 → verifiers-0.4.1.dev65}/tests/unit/test_agent.py +0 -0
- {verifiers-0.4.1.dev58 → verifiers-0.4.1.dev65}/tests/unit/test_dialects.py +0 -0
- {verifiers-0.4.1.dev58 → verifiers-0.4.1.dev65}/tests/unit/test_graph.py +0 -0
- {verifiers-0.4.1.dev58 → verifiers-0.4.1.dev65}/tests/unit/test_harbor_grading_network.py +0 -0
- {verifiers-0.4.1.dev58 → verifiers-0.4.1.dev65}/tests/unit/test_runtimes.py +0 -0
- {verifiers-0.4.1.dev58 → verifiers-0.4.1.dev65}/tests/unit/test_scoring_network.py +0 -0
- {verifiers-0.4.1.dev58 → verifiers-0.4.1.dev65}/tests/unit/test_semantic.py +0 -0
- {verifiers-0.4.1.dev58 → verifiers-0.4.1.dev65}/tests/unit/test_task.py +0 -0
- {verifiers-0.4.1.dev58 → verifiers-0.4.1.dev65}/tests/unit/test_taskset.py +0 -0
- {verifiers-0.4.1.dev58 → verifiers-0.4.1.dev65}/tests/unit/utils/test_compile.py +0 -0
- {verifiers-0.4.1.dev58 → verifiers-0.4.1.dev65}/tests/unit/utils/test_loaders.py +0 -0
- {verifiers-0.4.1.dev58 → verifiers-0.4.1.dev65}/tests/unit/utils/test_platform.py +0 -0
- {verifiers-0.4.1.dev58 → verifiers-0.4.1.dev65}/tests/unit/utils/test_score.py +0 -0
- {verifiers-0.4.1.dev58 → verifiers-0.4.1.dev65}/verifiers/__init__.py +0 -0
- {verifiers-0.4.1.dev58 → verifiers-0.4.1.dev65}/verifiers/v1/acp/__init__.py +0 -0
- {verifiers-0.4.1.dev58 → verifiers-0.4.1.dev65}/verifiers/v1/acp/runner.py +0 -0
- {verifiers-0.4.1.dev58 → verifiers-0.4.1.dev65}/verifiers/v1/cli/__init__.py +0 -0
- {verifiers-0.4.1.dev58 → verifiers-0.4.1.dev65}/verifiers/v1/cli/dashboard/__init__.py +0 -0
- {verifiers-0.4.1.dev58 → verifiers-0.4.1.dev65}/verifiers/v1/cli/dashboard/base.py +0 -0
- {verifiers-0.4.1.dev58 → verifiers-0.4.1.dev65}/verifiers/v1/cli/dashboard/eval.py +0 -0
- {verifiers-0.4.1.dev58 → verifiers-0.4.1.dev65}/verifiers/v1/cli/dashboard/replay.py +0 -0
- {verifiers-0.4.1.dev58 → verifiers-0.4.1.dev65}/verifiers/v1/cli/dashboard/validate.py +0 -0
- {verifiers-0.4.1.dev58 → verifiers-0.4.1.dev65}/verifiers/v1/cli/debug.py +0 -0
- {verifiers-0.4.1.dev58 → verifiers-0.4.1.dev65}/verifiers/v1/cli/eval/__init__.py +0 -0
- {verifiers-0.4.1.dev58 → verifiers-0.4.1.dev65}/verifiers/v1/cli/eval/hint.py +0 -0
- {verifiers-0.4.1.dev58 → verifiers-0.4.1.dev65}/verifiers/v1/cli/eval/main.py +0 -0
- {verifiers-0.4.1.dev58 → verifiers-0.4.1.dev65}/verifiers/v1/cli/eval/resume.py +0 -0
- {verifiers-0.4.1.dev58 → verifiers-0.4.1.dev65}/verifiers/v1/cli/eval/runner.py +0 -0
- {verifiers-0.4.1.dev58 → verifiers-0.4.1.dev65}/verifiers/v1/cli/gepa.py +0 -0
- {verifiers-0.4.1.dev58 → verifiers-0.4.1.dev65}/verifiers/v1/cli/output.py +0 -0
- {verifiers-0.4.1.dev58 → verifiers-0.4.1.dev65}/verifiers/v1/cli/replay.py +0 -0
- {verifiers-0.4.1.dev58 → verifiers-0.4.1.dev65}/verifiers/v1/cli/resolve.py +0 -0
- {verifiers-0.4.1.dev58 → verifiers-0.4.1.dev65}/verifiers/v1/cli/resume.py +0 -0
- {verifiers-0.4.1.dev58 → verifiers-0.4.1.dev65}/verifiers/v1/cli/validate.py +0 -0
- {verifiers-0.4.1.dev58 → verifiers-0.4.1.dev65}/verifiers/v1/clients/__init__.py +0 -0
- {verifiers-0.4.1.dev58 → verifiers-0.4.1.dev65}/verifiers/v1/clients/base.py +0 -0
- {verifiers-0.4.1.dev58 → verifiers-0.4.1.dev65}/verifiers/v1/clients/client.py +0 -0
- {verifiers-0.4.1.dev58 → verifiers-0.4.1.dev65}/verifiers/v1/clients/eval.py +0 -0
- {verifiers-0.4.1.dev58 → verifiers-0.4.1.dev65}/verifiers/v1/clients/train.py +0 -0
- {verifiers-0.4.1.dev58 → verifiers-0.4.1.dev65}/verifiers/v1/configs/__init__.py +0 -0
- {verifiers-0.4.1.dev58 → verifiers-0.4.1.dev65}/verifiers/v1/configs/cli/__init__.py +0 -0
- {verifiers-0.4.1.dev58 → verifiers-0.4.1.dev65}/verifiers/v1/configs/cli/env.py +0 -0
- {verifiers-0.4.1.dev58 → verifiers-0.4.1.dev65}/verifiers/v1/configs/cli/replay.py +0 -0
- {verifiers-0.4.1.dev58 → verifiers-0.4.1.dev65}/verifiers/v1/configs/client.py +0 -0
- {verifiers-0.4.1.dev58 → verifiers-0.4.1.dev65}/verifiers/v1/configs/harness.py +0 -0
- {verifiers-0.4.1.dev58 → verifiers-0.4.1.dev65}/verifiers/v1/configs/retries.py +0 -0
- {verifiers-0.4.1.dev58 → verifiers-0.4.1.dev65}/verifiers/v1/configs/select.py +0 -0
- {verifiers-0.4.1.dev58 → verifiers-0.4.1.dev65}/verifiers/v1/configs/serve.py +0 -0
- {verifiers-0.4.1.dev58 → verifiers-0.4.1.dev65}/verifiers/v1/configs/task.py +0 -0
- {verifiers-0.4.1.dev58 → verifiers-0.4.1.dev65}/verifiers/v1/configs/taskset.py +0 -0
- {verifiers-0.4.1.dev58 → verifiers-0.4.1.dev65}/verifiers/v1/dialects/__init__.py +0 -0
- {verifiers-0.4.1.dev58 → verifiers-0.4.1.dev65}/verifiers/v1/dialects/anthropic.py +0 -0
- {verifiers-0.4.1.dev58 → verifiers-0.4.1.dev65}/verifiers/v1/dialects/base.py +0 -0
- {verifiers-0.4.1.dev58 → verifiers-0.4.1.dev65}/verifiers/v1/dialects/chat.py +0 -0
- {verifiers-0.4.1.dev58 → verifiers-0.4.1.dev65}/verifiers/v1/dialects/responses.py +0 -0
- {verifiers-0.4.1.dev58 → verifiers-0.4.1.dev65}/verifiers/v1/env.py +0 -0
- {verifiers-0.4.1.dev58 → verifiers-0.4.1.dev65}/verifiers/v1/envs/__init__.py +0 -0
- {verifiers-0.4.1.dev58 → verifiers-0.4.1.dev65}/verifiers/v1/envs/agentic_judge/__init__.py +0 -0
- {verifiers-0.4.1.dev58 → verifiers-0.4.1.dev65}/verifiers/v1/envs/agentic_judge/env.py +0 -0
- {verifiers-0.4.1.dev58 → verifiers-0.4.1.dev65}/verifiers/v1/envs/best_of_n/__init__.py +0 -0
- {verifiers-0.4.1.dev58 → verifiers-0.4.1.dev65}/verifiers/v1/envs/best_of_n/env.py +0 -0
- {verifiers-0.4.1.dev58 → verifiers-0.4.1.dev65}/verifiers/v1/envs/single_agent/__init__.py +0 -0
- {verifiers-0.4.1.dev58 → verifiers-0.4.1.dev65}/verifiers/v1/envs/user_sim/__init__.py +0 -0
- {verifiers-0.4.1.dev58 → verifiers-0.4.1.dev65}/verifiers/v1/envs/user_sim/env.py +0 -0
- {verifiers-0.4.1.dev58 → verifiers-0.4.1.dev65}/verifiers/v1/episode.py +0 -0
- {verifiers-0.4.1.dev58 → verifiers-0.4.1.dev65}/verifiers/v1/errors.py +0 -0
- {verifiers-0.4.1.dev58 → verifiers-0.4.1.dev65}/verifiers/v1/gepa/__init__.py +0 -0
- {verifiers-0.4.1.dev58 → verifiers-0.4.1.dev65}/verifiers/v1/gepa/adapter.py +0 -0
- {verifiers-0.4.1.dev58 → verifiers-0.4.1.dev65}/verifiers/v1/gepa/config.py +0 -0
- {verifiers-0.4.1.dev58 → verifiers-0.4.1.dev65}/verifiers/v1/gepa/dataset.py +0 -0
- {verifiers-0.4.1.dev58 → verifiers-0.4.1.dev65}/verifiers/v1/gepa/reflection.py +0 -0
- {verifiers-0.4.1.dev58 → verifiers-0.4.1.dev65}/verifiers/v1/gepa/runner.py +0 -0
- {verifiers-0.4.1.dev58 → verifiers-0.4.1.dev65}/verifiers/v1/grading.py +0 -0
- {verifiers-0.4.1.dev58 → verifiers-0.4.1.dev65}/verifiers/v1/graph.py +0 -0
- {verifiers-0.4.1.dev58 → verifiers-0.4.1.dev65}/verifiers/v1/harness.py +0 -0
- {verifiers-0.4.1.dev58 → verifiers-0.4.1.dev65}/verifiers/v1/harnesses/__init__.py +0 -0
- {verifiers-0.4.1.dev58 → verifiers-0.4.1.dev65}/verifiers/v1/harnesses/bash/__init__.py +0 -0
- {verifiers-0.4.1.dev58 → verifiers-0.4.1.dev65}/verifiers/v1/harnesses/bash/harness.py +0 -0
- {verifiers-0.4.1.dev58 → verifiers-0.4.1.dev65}/verifiers/v1/harnesses/browser_use/__init__.py +0 -0
- {verifiers-0.4.1.dev58 → verifiers-0.4.1.dev65}/verifiers/v1/harnesses/browser_use/harness.py +0 -0
- {verifiers-0.4.1.dev58 → verifiers-0.4.1.dev65}/verifiers/v1/harnesses/browser_use/program.py +0 -0
- {verifiers-0.4.1.dev58 → verifiers-0.4.1.dev65}/verifiers/v1/harnesses/claude_code/__init__.py +0 -0
- {verifiers-0.4.1.dev58 → verifiers-0.4.1.dev65}/verifiers/v1/harnesses/claude_code/harness.py +0 -0
- {verifiers-0.4.1.dev58 → verifiers-0.4.1.dev65}/verifiers/v1/harnesses/codex/__init__.py +0 -0
- {verifiers-0.4.1.dev58 → verifiers-0.4.1.dev65}/verifiers/v1/harnesses/codex/gate.mjs +0 -0
- {verifiers-0.4.1.dev58 → verifiers-0.4.1.dev65}/verifiers/v1/harnesses/codex/harness.py +0 -0
- {verifiers-0.4.1.dev58 → verifiers-0.4.1.dev65}/verifiers/v1/harnesses/deepseek/__init__.py +0 -0
- {verifiers-0.4.1.dev58 → verifiers-0.4.1.dev65}/verifiers/v1/harnesses/deepseek/gate.mjs +0 -0
- {verifiers-0.4.1.dev58 → verifiers-0.4.1.dev65}/verifiers/v1/harnesses/deepseek/harness.py +0 -0
- {verifiers-0.4.1.dev58 → verifiers-0.4.1.dev65}/verifiers/v1/harnesses/deepseek/usage.mjs +0 -0
- {verifiers-0.4.1.dev58 → verifiers-0.4.1.dev65}/verifiers/v1/harnesses/hermes_agent/__init__.py +0 -0
- {verifiers-0.4.1.dev58 → verifiers-0.4.1.dev65}/verifiers/v1/harnesses/hermes_agent/harness.py +0 -0
- {verifiers-0.4.1.dev58 → verifiers-0.4.1.dev65}/verifiers/v1/harnesses/hermes_agent/program.py +0 -0
- {verifiers-0.4.1.dev58 → verifiers-0.4.1.dev65}/verifiers/v1/harnesses/kimi_code/__init__.py +0 -0
- {verifiers-0.4.1.dev58 → verifiers-0.4.1.dev65}/verifiers/v1/harnesses/kimi_code/harness.py +0 -0
- {verifiers-0.4.1.dev58 → verifiers-0.4.1.dev65}/verifiers/v1/harnesses/mini_swe_agent/__init__.py +0 -0
- {verifiers-0.4.1.dev58 → verifiers-0.4.1.dev65}/verifiers/v1/harnesses/mini_swe_agent/harness.py +0 -0
- {verifiers-0.4.1.dev58 → verifiers-0.4.1.dev65}/verifiers/v1/harnesses/mini_swe_agent/program.py +0 -0
- {verifiers-0.4.1.dev58 → verifiers-0.4.1.dev65}/verifiers/v1/harnesses/node.py +0 -0
- {verifiers-0.4.1.dev58 → verifiers-0.4.1.dev65}/verifiers/v1/harnesses/null/__init__.py +0 -0
- {verifiers-0.4.1.dev58 → verifiers-0.4.1.dev65}/verifiers/v1/harnesses/null/harness.py +0 -0
- {verifiers-0.4.1.dev58 → verifiers-0.4.1.dev65}/verifiers/v1/harnesses/openclaw/__init__.py +0 -0
- {verifiers-0.4.1.dev58 → verifiers-0.4.1.dev65}/verifiers/v1/harnesses/openclaw/harness.py +0 -0
- {verifiers-0.4.1.dev58 → verifiers-0.4.1.dev65}/verifiers/v1/harnesses/opencode/__init__.py +0 -0
- {verifiers-0.4.1.dev58 → verifiers-0.4.1.dev65}/verifiers/v1/harnesses/opencode/harness.py +0 -0
- {verifiers-0.4.1.dev58 → verifiers-0.4.1.dev65}/verifiers/v1/harnesses/opencode/mcp-ready.js +0 -0
- {verifiers-0.4.1.dev58 → verifiers-0.4.1.dev65}/verifiers/v1/harnesses/pi/__init__.py +0 -0
- {verifiers-0.4.1.dev58 → verifiers-0.4.1.dev65}/verifiers/v1/harnesses/pi/gate.mjs +0 -0
- {verifiers-0.4.1.dev58 → verifiers-0.4.1.dev65}/verifiers/v1/harnesses/pi/harness.py +0 -0
- {verifiers-0.4.1.dev58 → verifiers-0.4.1.dev65}/verifiers/v1/harnesses/prime_agent/__init__.py +0 -0
- {verifiers-0.4.1.dev58 → verifiers-0.4.1.dev65}/verifiers/v1/harnesses/prime_agent/harness.py +0 -0
- {verifiers-0.4.1.dev58 → verifiers-0.4.1.dev65}/verifiers/v1/harnesses/rlm/__init__.py +0 -0
- {verifiers-0.4.1.dev58 → verifiers-0.4.1.dev65}/verifiers/v1/harnesses/rlm/harness.py +0 -0
- {verifiers-0.4.1.dev58 → verifiers-0.4.1.dev65}/verifiers/v1/harnesses/terminus_2/__init__.py +0 -0
- {verifiers-0.4.1.dev58 → verifiers-0.4.1.dev65}/verifiers/v1/harnesses/terminus_2/harness.py +0 -0
- {verifiers-0.4.1.dev58 → verifiers-0.4.1.dev65}/verifiers/v1/harnesses/terminus_2/program.py +0 -0
- {verifiers-0.4.1.dev58 → verifiers-0.4.1.dev65}/verifiers/v1/harnesses/utils/__init__.py +0 -0
- {verifiers-0.4.1.dev58 → verifiers-0.4.1.dev65}/verifiers/v1/harnesses/utils/compaction.py +0 -0
- {verifiers-0.4.1.dev58 → verifiers-0.4.1.dev65}/verifiers/v1/harnesses/utils/core.py +0 -0
- {verifiers-0.4.1.dev58 → verifiers-0.4.1.dev65}/verifiers/v1/harnesses/utils/install.py +0 -0
- {verifiers-0.4.1.dev58 → verifiers-0.4.1.dev65}/verifiers/v1/harnesses/utils/launch.py +0 -0
- {verifiers-0.4.1.dev58 → verifiers-0.4.1.dev65}/verifiers/v1/harnesses/utils/mcp.py +0 -0
- {verifiers-0.4.1.dev58 → verifiers-0.4.1.dev65}/verifiers/v1/harnesses/utils/replay.py +0 -0
- {verifiers-0.4.1.dev58 → verifiers-0.4.1.dev65}/verifiers/v1/judge.py +0 -0
- {verifiers-0.4.1.dev58 → verifiers-0.4.1.dev65}/verifiers/v1/judges/__init__.py +0 -0
- {verifiers-0.4.1.dev58 → verifiers-0.4.1.dev65}/verifiers/v1/judges/decision.py +0 -0
- {verifiers-0.4.1.dev58 → verifiers-0.4.1.dev65}/verifiers/v1/judges/reference.py +0 -0
- {verifiers-0.4.1.dev58 → verifiers-0.4.1.dev65}/verifiers/v1/judges/reference.txt +0 -0
- {verifiers-0.4.1.dev58 → verifiers-0.4.1.dev65}/verifiers/v1/judges/rubric.py +0 -0
- {verifiers-0.4.1.dev58 → verifiers-0.4.1.dev65}/verifiers/v1/judges/rubric.txt +0 -0
- {verifiers-0.4.1.dev58 → verifiers-0.4.1.dev65}/verifiers/v1/mcp/__init__.py +0 -0
- {verifiers-0.4.1.dev58 → verifiers-0.4.1.dev65}/verifiers/v1/mcp/launch.py +0 -0
- {verifiers-0.4.1.dev58 → verifiers-0.4.1.dev65}/verifiers/v1/mcp/server.py +0 -0
- {verifiers-0.4.1.dev58 → verifiers-0.4.1.dev65}/verifiers/v1/mcp/toolset.py +0 -0
- {verifiers-0.4.1.dev58 → verifiers-0.4.1.dev65}/verifiers/v1/runtimes/base.py +0 -0
- {verifiers-0.4.1.dev58 → verifiers-0.4.1.dev65}/verifiers/v1/runtimes/compose.py +0 -0
- {verifiers-0.4.1.dev58 → verifiers-0.4.1.dev65}/verifiers/v1/runtimes/egress.py +0 -0
- {verifiers-0.4.1.dev58 → verifiers-0.4.1.dev65}/verifiers/v1/runtimes/limiters.py +0 -0
- {verifiers-0.4.1.dev58 → verifiers-0.4.1.dev65}/verifiers/v1/runtimes/private_network.py +0 -0
- {verifiers-0.4.1.dev58 → verifiers-0.4.1.dev65}/verifiers/v1/runtimes/runtime.py +0 -0
- {verifiers-0.4.1.dev58 → verifiers-0.4.1.dev65}/verifiers/v1/runtimes/strategies.py +0 -0
- {verifiers-0.4.1.dev58 → verifiers-0.4.1.dev65}/verifiers/v1/semantic.py +0 -0
- {verifiers-0.4.1.dev58 → verifiers-0.4.1.dev65}/verifiers/v1/serve/__init__.py +0 -0
- {verifiers-0.4.1.dev58 → verifiers-0.4.1.dev65}/verifiers/v1/serve/client.py +0 -0
- {verifiers-0.4.1.dev58 → verifiers-0.4.1.dev65}/verifiers/v1/serve/delta.py +0 -0
- {verifiers-0.4.1.dev58 → verifiers-0.4.1.dev65}/verifiers/v1/serve/encoding.py +0 -0
- {verifiers-0.4.1.dev58 → verifiers-0.4.1.dev65}/verifiers/v1/serve/pool.py +0 -0
- {verifiers-0.4.1.dev58 → verifiers-0.4.1.dev65}/verifiers/v1/serve/server.py +0 -0
- {verifiers-0.4.1.dev58 → verifiers-0.4.1.dev65}/verifiers/v1/serve/types.py +0 -0
- {verifiers-0.4.1.dev58 → verifiers-0.4.1.dev65}/verifiers/v1/state.py +0 -0
- {verifiers-0.4.1.dev58 → verifiers-0.4.1.dev65}/verifiers/v1/taskset.py +0 -0
- {verifiers-0.4.1.dev58 → verifiers-0.4.1.dev65}/verifiers/v1/tasksets/__init__.py +0 -0
- {verifiers-0.4.1.dev58 → verifiers-0.4.1.dev65}/verifiers/v1/tasksets/harbor/__init__.py +0 -0
- {verifiers-0.4.1.dev58 → verifiers-0.4.1.dev65}/verifiers/v1/tasksets/harbor/taskset.py +0 -0
- {verifiers-0.4.1.dev58 → verifiers-0.4.1.dev65}/verifiers/v1/tasksets/harbor/toolset.py +0 -0
- {verifiers-0.4.1.dev58 → verifiers-0.4.1.dev65}/verifiers/v1/tasksets/nemo_gym/__init__.py +0 -0
- {verifiers-0.4.1.dev58 → verifiers-0.4.1.dev65}/verifiers/v1/tasksets/nemo_gym/response.py +0 -0
- {verifiers-0.4.1.dev58 → verifiers-0.4.1.dev65}/verifiers/v1/tasksets/nemo_gym/server.py +0 -0
- {verifiers-0.4.1.dev58 → verifiers-0.4.1.dev65}/verifiers/v1/tasksets/nemo_gym/taskset.py +0 -0
- {verifiers-0.4.1.dev58 → verifiers-0.4.1.dev65}/verifiers/v1/tasksets/nemo_gym/toolset.py +0 -0
- {verifiers-0.4.1.dev58 → verifiers-0.4.1.dev65}/verifiers/v1/tasksets/openenv/__init__.py +0 -0
- {verifiers-0.4.1.dev58 → verifiers-0.4.1.dev65}/verifiers/v1/tasksets/openenv/taskset.py +0 -0
- {verifiers-0.4.1.dev58 → verifiers-0.4.1.dev65}/verifiers/v1/tasksets/textarena/__init__.py +0 -0
- {verifiers-0.4.1.dev58 → verifiers-0.4.1.dev65}/verifiers/v1/tasksets/textarena/taskset.py +0 -0
- {verifiers-0.4.1.dev58 → verifiers-0.4.1.dev65}/verifiers/v1/utils/__init__.py +0 -0
- {verifiers-0.4.1.dev58 → verifiers-0.4.1.dev65}/verifiers/v1/utils/aio.py +0 -0
- {verifiers-0.4.1.dev58 → verifiers-0.4.1.dev65}/verifiers/v1/utils/artifacts.py +0 -0
- {verifiers-0.4.1.dev58 → verifiers-0.4.1.dev65}/verifiers/v1/utils/compile.py +0 -0
- {verifiers-0.4.1.dev58 → verifiers-0.4.1.dev65}/verifiers/v1/utils/decorators.py +0 -0
- {verifiers-0.4.1.dev58 → verifiers-0.4.1.dev65}/verifiers/v1/utils/env.py +0 -0
- {verifiers-0.4.1.dev58 → verifiers-0.4.1.dev65}/verifiers/v1/utils/eval.py +0 -0
- {verifiers-0.4.1.dev58 → verifiers-0.4.1.dev65}/verifiers/v1/utils/format.py +0 -0
- {verifiers-0.4.1.dev58 → verifiers-0.4.1.dev65}/verifiers/v1/utils/generic.py +0 -0
- {verifiers-0.4.1.dev58 → verifiers-0.4.1.dev65}/verifiers/v1/utils/git.py +0 -0
- {verifiers-0.4.1.dev58 → verifiers-0.4.1.dev65}/verifiers/v1/utils/image.py +0 -0
- {verifiers-0.4.1.dev58 → verifiers-0.4.1.dev65}/verifiers/v1/utils/interrupt.py +0 -0
- {verifiers-0.4.1.dev58 → verifiers-0.4.1.dev65}/verifiers/v1/utils/loaders.py +0 -0
- {verifiers-0.4.1.dev58 → verifiers-0.4.1.dev65}/verifiers/v1/utils/logging.py +0 -0
- {verifiers-0.4.1.dev58 → verifiers-0.4.1.dev65}/verifiers/v1/utils/memory.py +0 -0
- {verifiers-0.4.1.dev58 → verifiers-0.4.1.dev65}/verifiers/v1/utils/paths.py +0 -0
- {verifiers-0.4.1.dev58 → verifiers-0.4.1.dev65}/verifiers/v1/utils/platform.py +0 -0
- {verifiers-0.4.1.dev58 → verifiers-0.4.1.dev65}/verifiers/v1/utils/prime.py +0 -0
- {verifiers-0.4.1.dev58 → verifiers-0.4.1.dev65}/verifiers/v1/utils/retries.py +0 -0
- {verifiers-0.4.1.dev58 → verifiers-0.4.1.dev65}/verifiers/v1/utils/scope.py +0 -0
- {verifiers-0.4.1.dev58 → verifiers-0.4.1.dev65}/verifiers/v1/utils/score.py +0 -0
- {verifiers-0.4.1.dev58 → verifiers-0.4.1.dev65}/verifiers/v1/utils/trace_store.py +0 -0
- {verifiers-0.4.1.dev58 → verifiers-0.4.1.dev65}/verifiers/v1/utils/version.py +0 -0
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
Metadata-Version: 2.5
|
|
2
2
|
Name: verifiers
|
|
3
|
-
Version: 0.4.1.
|
|
3
|
+
Version: 0.4.1.dev65
|
|
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
|
|
@@ -36,11 +36,11 @@ Requires-Dist: numpy>=2.1.0
|
|
|
36
36
|
Requires-Dist: openai<3.0.0,>=2.54.0
|
|
37
37
|
Requires-Dist: prime-pydantic-config[toml]>=0.4.3
|
|
38
38
|
Requires-Dist: prime-runs>=0.1.4
|
|
39
|
-
Requires-Dist: prime-sandboxes>=0.
|
|
39
|
+
Requires-Dist: prime-sandboxes>=0.5.0
|
|
40
40
|
Requires-Dist: prime-tunnel>=0.1.14
|
|
41
41
|
Requires-Dist: pydantic>=2.12.3
|
|
42
42
|
Requires-Dist: pyzmq>=27.1.0
|
|
43
|
-
Requires-Dist: renderers[multimodal]>=0.1.
|
|
43
|
+
Requires-Dist: renderers[multimodal]>=0.1.13.dev16
|
|
44
44
|
Requires-Dist: rich>=11.0.0
|
|
45
45
|
Requires-Dist: tenacity>=8.5.0
|
|
46
46
|
Requires-Dist: tomli-w>=1.0.0
|
|
@@ -33,7 +33,7 @@ dependencies = [
|
|
|
33
33
|
"math-verify>=0.8.0",
|
|
34
34
|
"openai>=2.54.0,<3.0.0",
|
|
35
35
|
"prime-tunnel>=0.1.14",
|
|
36
|
-
"prime-sandboxes>=0.
|
|
36
|
+
"prime-sandboxes>=0.5.0",
|
|
37
37
|
"prime-runs>=0.1.4",
|
|
38
38
|
"pydantic>=2.12.3",
|
|
39
39
|
"rich>=11.0.0",
|
|
@@ -49,7 +49,7 @@ dependencies = [
|
|
|
49
49
|
"prime-pydantic-config[toml]>=0.4.3",
|
|
50
50
|
"loguru>=0.7.0",
|
|
51
51
|
"tomli-w>=1.0.0",
|
|
52
|
-
"renderers[multimodal]>=0.1.
|
|
52
|
+
"renderers[multimodal]>=0.1.13.dev16",
|
|
53
53
|
"typing_extensions>=4.12.2",
|
|
54
54
|
"mcp==2.0.0",
|
|
55
55
|
]
|
|
@@ -21,6 +21,8 @@ class CounterToolset(vf.Toolset[vf.ToolsetConfig, CounterState]):
|
|
|
21
21
|
|
|
22
22
|
class CounterTaskConfig(vf.TaskConfig):
|
|
23
23
|
tools: vf.ToolsetConfig = vf.ToolsetConfig()
|
|
24
|
+
constant_reward: bool = False
|
|
25
|
+
"""Score every rollout 1, so a skipped score (reward 0) stands out."""
|
|
24
26
|
|
|
25
27
|
|
|
26
28
|
class CounterTask(vf.Task[vf.TaskData, CounterState, CounterTaskConfig]):
|
|
@@ -30,7 +32,7 @@ class CounterTask(vf.Task[vf.TaskData, CounterState, CounterTaskConfig]):
|
|
|
30
32
|
|
|
31
33
|
@vf.reward(weight=1.0)
|
|
32
34
|
async def counted(self, trace: vf.Trace) -> float:
|
|
33
|
-
return float(trace.state.count >= 2)
|
|
35
|
+
return float(self.config.constant_reward or trace.state.count >= 2)
|
|
34
36
|
|
|
35
37
|
|
|
36
38
|
class CounterConfig(vf.TasksetConfig):
|
|
@@ -41,6 +41,44 @@ async def test_rollout_timeout(run):
|
|
|
41
41
|
assert trace.stop_condition == "agent_timeout"
|
|
42
42
|
|
|
43
43
|
|
|
44
|
+
@pytest.mark.parametrize("skip", [False, True], ids=["scored", "skipped"])
|
|
45
|
+
async def test_skip_scoring_on_truncated(run, skip):
|
|
46
|
+
(episode,) = await run(
|
|
47
|
+
"counter-tool",
|
|
48
|
+
harness="null",
|
|
49
|
+
runtime={"type": "prime"},
|
|
50
|
+
taskset_overrides={"task": {"constant_reward": True}},
|
|
51
|
+
env={"agent": {"max_turns": 1, "scoring": {"skip_on_truncated": skip}}},
|
|
52
|
+
)
|
|
53
|
+
(trace,) = episode.traces
|
|
54
|
+
assert trace.is_truncated and trace.ok
|
|
55
|
+
if skip:
|
|
56
|
+
assert trace.reward == 0 and trace.rewards == {}
|
|
57
|
+
assert trace.info["scoring_skipped"] == "truncated"
|
|
58
|
+
else:
|
|
59
|
+
assert trace.reward == 1
|
|
60
|
+
assert "scoring_skipped" not in trace.info
|
|
61
|
+
|
|
62
|
+
|
|
63
|
+
@pytest.mark.parametrize("skip", [False, True], ids=["scored", "skipped"])
|
|
64
|
+
async def test_skip_scoring_on_timeout(run, skip):
|
|
65
|
+
(episode,) = await run(
|
|
66
|
+
"counter-tool",
|
|
67
|
+
harness="null",
|
|
68
|
+
runtime={"type": "prime"},
|
|
69
|
+
rollout_timeout=1,
|
|
70
|
+
taskset_overrides={"task": {"constant_reward": True}},
|
|
71
|
+
env={"agent": {"scoring": {"skip_on_timeout": skip}}},
|
|
72
|
+
)
|
|
73
|
+
(trace,) = episode.traces
|
|
74
|
+
assert trace.is_timeout and trace.ok
|
|
75
|
+
if skip:
|
|
76
|
+
assert trace.reward == 0 and trace.rewards == {}
|
|
77
|
+
assert trace.info["scoring_skipped"] == "timeout"
|
|
78
|
+
else:
|
|
79
|
+
assert trace.reward == 1
|
|
80
|
+
|
|
81
|
+
|
|
44
82
|
@pytest.mark.parametrize("harness,harness_runtime", grid(needs=("mcp",)), indirect=True)
|
|
45
83
|
async def test_max_turns(run, harness, harness_runtime):
|
|
46
84
|
(episode,) = await run(
|
|
@@ -0,0 +1,66 @@
|
|
|
1
|
+
"""The `verifiers.v1` namespace: its lazy names stay in sync with what type checkers
|
|
2
|
+
see, and the config tree imports without the runtime."""
|
|
3
|
+
|
|
4
|
+
import ast
|
|
5
|
+
import json
|
|
6
|
+
import subprocess
|
|
7
|
+
import sys
|
|
8
|
+
from pathlib import Path
|
|
9
|
+
|
|
10
|
+
import verifiers.v1 as vf
|
|
11
|
+
|
|
12
|
+
# What the config tree may load: a trainer validates its configs against it in an
|
|
13
|
+
# environment that installs nothing else.
|
|
14
|
+
CONFIG_TREE_PACKAGES = {
|
|
15
|
+
"annotated_types",
|
|
16
|
+
"pydantic",
|
|
17
|
+
"pydantic_config",
|
|
18
|
+
"pydantic_core",
|
|
19
|
+
"renderers",
|
|
20
|
+
"tomli",
|
|
21
|
+
"tomli_w",
|
|
22
|
+
"typing_extensions",
|
|
23
|
+
"typing_inspection",
|
|
24
|
+
"verifiers",
|
|
25
|
+
}
|
|
26
|
+
|
|
27
|
+
IMPORT_CONFIG_TREE = """
|
|
28
|
+
import importlib, json, pkgutil, sys
|
|
29
|
+
import verifiers.v1.configs as configs
|
|
30
|
+
for module in pkgutil.walk_packages(configs.__path__, "verifiers.v1.configs."):
|
|
31
|
+
importlib.import_module(module.name)
|
|
32
|
+
packages = {name.partition(".")[0] for name in sys.modules if not name.startswith("_")}
|
|
33
|
+
print(json.dumps(sorted(packages - sys.stdlib_module_names)))
|
|
34
|
+
"""
|
|
35
|
+
|
|
36
|
+
|
|
37
|
+
def type_checking_name_to_module() -> dict[str, str]:
|
|
38
|
+
tree = ast.parse(Path(vf.__file__).read_text())
|
|
39
|
+
block = next(node for node in tree.body if isinstance(node, ast.If))
|
|
40
|
+
return {alias.name: node.module for node in block.body for alias in node.names}
|
|
41
|
+
|
|
42
|
+
|
|
43
|
+
def test_lazy_names_match_type_checking_imports():
|
|
44
|
+
assert vf._NAME_TO_MODULE == type_checking_name_to_module()
|
|
45
|
+
|
|
46
|
+
|
|
47
|
+
def test_all_exports_every_lazy_name():
|
|
48
|
+
assert sorted(vf.__all__) == sorted(vf._NAME_TO_MODULE)
|
|
49
|
+
|
|
50
|
+
|
|
51
|
+
def test_every_lazy_name_resolves():
|
|
52
|
+
resolved = {name: getattr(vf, name) for name in vf.__all__}
|
|
53
|
+
|
|
54
|
+
assert sorted(resolved) == sorted(vf.__all__)
|
|
55
|
+
|
|
56
|
+
|
|
57
|
+
def test_config_tree_imports_without_the_runtime():
|
|
58
|
+
result = subprocess.run(
|
|
59
|
+
[sys.executable, "-c", IMPORT_CONFIG_TREE],
|
|
60
|
+
capture_output=True,
|
|
61
|
+
check=True,
|
|
62
|
+
text=True,
|
|
63
|
+
timeout=60,
|
|
64
|
+
)
|
|
65
|
+
|
|
66
|
+
assert set(json.loads(result.stdout)) - CONFIG_TREE_PACKAGES == set()
|
|
@@ -9,6 +9,7 @@ from verifiers.v1.configs.agent import resolve_agent
|
|
|
9
9
|
from verifiers.v1.dialects.chat import ChatDialect
|
|
10
10
|
from verifiers.v1.dialects.responses import ResponsesDialect, fold_assistant
|
|
11
11
|
from verifiers.v1.graph import MessageNode, prepare_turn
|
|
12
|
+
from verifiers.v1.session import RolloutLimits
|
|
12
13
|
from verifiers.v1.types import AssistantMessage, UserMessage
|
|
13
14
|
from verifiers.v1.utils.trace_store import write_episode
|
|
14
15
|
|
|
@@ -266,3 +267,29 @@ def test_sampling_mask_from_packed_matches_lists():
|
|
|
266
267
|
):
|
|
267
268
|
np.testing.assert_array_equal(mask.ids, ids)
|
|
268
269
|
np.testing.assert_array_equal(mask.counts, counts)
|
|
270
|
+
|
|
271
|
+
|
|
272
|
+
def test_max_turn_tokens_limit():
|
|
273
|
+
limits = RolloutLimits(max_turn_tokens=16)
|
|
274
|
+
trace = vf.Trace(
|
|
275
|
+
agent=vf.AgentInfo(config=vf.AgentConfig()),
|
|
276
|
+
task=vf.TraceTask(type="Task", data=vf.TaskData(idx=0, prompt=None)),
|
|
277
|
+
)
|
|
278
|
+
trace.calls.append(vf.ModelCall(finish_reason="stop"))
|
|
279
|
+
assert limits.reached(trace) is None
|
|
280
|
+
# A length finish below the cap ran out of context: not this limit.
|
|
281
|
+
usage = vf.Usage(prompt_tokens=100, completion_tokens=8)
|
|
282
|
+
trace.calls.append(vf.ModelCall(finish_reason="length", usage=usage))
|
|
283
|
+
assert limits.reached(trace) is None
|
|
284
|
+
usage = vf.Usage(prompt_tokens=100, completion_tokens=16)
|
|
285
|
+
trace.calls.append(vf.ModelCall(finish_reason="length", usage=usage))
|
|
286
|
+
assert limits.reached(trace) == "max_turn_tokens"
|
|
287
|
+
trace.stop("max_turn_tokens")
|
|
288
|
+
assert trace.is_truncated
|
|
289
|
+
|
|
290
|
+
|
|
291
|
+
@pytest.mark.parametrize("max_tokens,expected", [(None, 16), (8, 8), (64, 16)])
|
|
292
|
+
def test_max_turn_tokens_caps_sampling(max_tokens, expected):
|
|
293
|
+
spec = vf.AgentConfig(max_turn_tokens=16)
|
|
294
|
+
sampling = vf.SamplingConfig(max_tokens=max_tokens)
|
|
295
|
+
assert resolve_agent(spec, sampling=sampling).sampling.max_tokens == expected
|