verifiers 0.4.1.dev46__tar.gz → 0.4.1.dev47__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.dev46 → verifiers-0.4.1.dev47}/PKG-INFO +1 -1
- {verifiers-0.4.1.dev46 → verifiers-0.4.1.dev47}/tests/integration/grid.py +15 -14
- {verifiers-0.4.1.dev46 → verifiers-0.4.1.dev47}/tests/integration/test_multi_turn.py +3 -3
- {verifiers-0.4.1.dev46 → verifiers-0.4.1.dev47}/tests/unit/test_graph.py +8 -0
- {verifiers-0.4.1.dev46 → verifiers-0.4.1.dev47}/tests/unit/utils/test_loaders.py +2 -2
- {verifiers-0.4.1.dev46 → verifiers-0.4.1.dev47}/verifiers/v1/configs/harness.py +4 -1
- {verifiers-0.4.1.dev46 → verifiers-0.4.1.dev47}/verifiers/v1/harnesses/bash/harness.py +2 -0
- {verifiers-0.4.1.dev46 → verifiers-0.4.1.dev47}/verifiers/v1/harnesses/browser_use/harness.py +1 -0
- {verifiers-0.4.1.dev46 → verifiers-0.4.1.dev47}/verifiers/v1/harnesses/claude_code/harness.py +2 -0
- {verifiers-0.4.1.dev46 → verifiers-0.4.1.dev47}/verifiers/v1/harnesses/codex/harness.py +4 -0
- {verifiers-0.4.1.dev46 → verifiers-0.4.1.dev47}/verifiers/v1/harnesses/deepseek/harness.py +4 -0
- {verifiers-0.4.1.dev46 → verifiers-0.4.1.dev47}/verifiers/v1/harnesses/hermes_agent/harness.py +8 -1
- {verifiers-0.4.1.dev46 → verifiers-0.4.1.dev47}/verifiers/v1/harnesses/kimi_code/harness.py +3 -4
- {verifiers-0.4.1.dev46 → verifiers-0.4.1.dev47}/verifiers/v1/harnesses/mini_swe_agent/harness.py +2 -0
- {verifiers-0.4.1.dev46 → verifiers-0.4.1.dev47}/verifiers/v1/harnesses/null/harness.py +3 -1
- {verifiers-0.4.1.dev46 → verifiers-0.4.1.dev47}/verifiers/v1/harnesses/openclaw/harness.py +3 -0
- {verifiers-0.4.1.dev46 → verifiers-0.4.1.dev47}/verifiers/v1/harnesses/opencode/harness.py +2 -3
- {verifiers-0.4.1.dev46 → verifiers-0.4.1.dev47}/verifiers/v1/harnesses/pi/harness.py +5 -6
- {verifiers-0.4.1.dev46 → verifiers-0.4.1.dev47}/verifiers/v1/harnesses/prime_agent/harness.py +11 -2
- {verifiers-0.4.1.dev46 → verifiers-0.4.1.dev47}/verifiers/v1/harnesses/rlm/harness.py +1 -0
- {verifiers-0.4.1.dev46 → verifiers-0.4.1.dev47}/verifiers/v1/harnesses/terminus_2/harness.py +2 -0
- {verifiers-0.4.1.dev46 → verifiers-0.4.1.dev47}/verifiers/v1/harnesses/utils/replay.py +11 -1
- {verifiers-0.4.1.dev46 → verifiers-0.4.1.dev47}/verifiers/v1/types.py +2 -2
- {verifiers-0.4.1.dev46 → verifiers-0.4.1.dev47}/verifiers/v1/utils/loaders.py +2 -1
- {verifiers-0.4.1.dev46 → verifiers-0.4.1.dev47}/.gitignore +0 -0
- {verifiers-0.4.1.dev46 → verifiers-0.4.1.dev47}/LICENSE +0 -0
- {verifiers-0.4.1.dev46 → verifiers-0.4.1.dev47}/README.md +0 -0
- {verifiers-0.4.1.dev46 → verifiers-0.4.1.dev47}/pyproject.toml +0 -0
- {verifiers-0.4.1.dev46 → verifiers-0.4.1.dev47}/tests/integration/conftest.py +0 -0
- {verifiers-0.4.1.dev46 → verifiers-0.4.1.dev47}/tests/integration/fixtures/agent_user.py +0 -0
- {verifiers-0.4.1.dev46 → verifiers-0.4.1.dev47}/tests/integration/fixtures/agent_user_harness.py +0 -0
- {verifiers-0.4.1.dev46 → verifiers-0.4.1.dev47}/tests/integration/fixtures/counter_tool.py +0 -0
- {verifiers-0.4.1.dev46 → verifiers-0.4.1.dev47}/tests/integration/fixtures/duet.py +0 -0
- {verifiers-0.4.1.dev46 → verifiers-0.4.1.dev47}/tests/integration/fixtures/echo.py +0 -0
- {verifiers-0.4.1.dev46 → verifiers-0.4.1.dev47}/tests/integration/fixtures/echo_acp_resume.py +0 -0
- {verifiers-0.4.1.dev46 → verifiers-0.4.1.dev47}/tests/integration/fixtures/echo_agentic.py +0 -0
- {verifiers-0.4.1.dev46 → verifiers-0.4.1.dev47}/tests/integration/fixtures/echo_tool.py +0 -0
- {verifiers-0.4.1.dev46 → verifiers-0.4.1.dev47}/tests/integration/fixtures/echo_tool_compose/docker-compose.yaml +0 -0
- {verifiers-0.4.1.dev46 → verifiers-0.4.1.dev47}/tests/integration/fixtures/echo_user_sim.py +0 -0
- {verifiers-0.4.1.dev46 → verifiers-0.4.1.dev47}/tests/integration/fixtures/fetch_tool.py +0 -0
- {verifiers-0.4.1.dev46 → verifiers-0.4.1.dev47}/tests/integration/fixtures/network_policy.py +0 -0
- {verifiers-0.4.1.dev46 → verifiers-0.4.1.dev47}/tests/integration/fixtures/parallel.py +0 -0
- {verifiers-0.4.1.dev46 → verifiers-0.4.1.dev47}/tests/integration/fixtures/pyproject.toml +0 -0
- {verifiers-0.4.1.dev46 → verifiers-0.4.1.dev47}/tests/integration/fixtures/skill_codeword.py +0 -0
- {verifiers-0.4.1.dev46 → verifiers-0.4.1.dev47}/tests/integration/fixtures/skills/project-codeword/SKILL.md +0 -0
- {verifiers-0.4.1.dev46 → verifiers-0.4.1.dev47}/tests/integration/fixtures/tool_response_image.py +0 -0
- {verifiers-0.4.1.dev46 → verifiers-0.4.1.dev47}/tests/integration/test_agent_user.py +0 -0
- {verifiers-0.4.1.dev46 → verifiers-0.4.1.dev47}/tests/integration/test_agentic_judge.py +0 -0
- {verifiers-0.4.1.dev46 → verifiers-0.4.1.dev47}/tests/integration/test_compose_scoring.py +0 -0
- {verifiers-0.4.1.dev46 → verifiers-0.4.1.dev47}/tests/integration/test_examples.py +0 -0
- {verifiers-0.4.1.dev46 → verifiers-0.4.1.dev47}/tests/integration/test_limits.py +0 -0
- {verifiers-0.4.1.dev46 → verifiers-0.4.1.dev47}/tests/integration/test_multi_agent.py +0 -0
- {verifiers-0.4.1.dev46 → verifiers-0.4.1.dev47}/tests/integration/test_multi_turn_tool.py +0 -0
- {verifiers-0.4.1.dev46 → verifiers-0.4.1.dev47}/tests/integration/test_multimodal_tool.py +0 -0
- {verifiers-0.4.1.dev46 → verifiers-0.4.1.dev47}/tests/integration/test_network_policy.py +0 -0
- {verifiers-0.4.1.dev46 → verifiers-0.4.1.dev47}/tests/integration/test_parallel.py +0 -0
- {verifiers-0.4.1.dev46 → verifiers-0.4.1.dev47}/tests/integration/test_resume_tool.py +0 -0
- {verifiers-0.4.1.dev46 → verifiers-0.4.1.dev47}/tests/integration/test_rubric_judge.py +0 -0
- {verifiers-0.4.1.dev46 → verifiers-0.4.1.dev47}/tests/integration/test_sampling.py +0 -0
- {verifiers-0.4.1.dev46 → verifiers-0.4.1.dev47}/tests/integration/test_shared_tool.py +0 -0
- {verifiers-0.4.1.dev46 → verifiers-0.4.1.dev47}/tests/integration/test_single_turn.py +0 -0
- {verifiers-0.4.1.dev46 → verifiers-0.4.1.dev47}/tests/integration/test_skills.py +0 -0
- {verifiers-0.4.1.dev46 → verifiers-0.4.1.dev47}/tests/integration/test_stateful_tool.py +0 -0
- {verifiers-0.4.1.dev46 → verifiers-0.4.1.dev47}/tests/integration/test_tool_vms.py +0 -0
- {verifiers-0.4.1.dev46 → verifiers-0.4.1.dev47}/tests/integration/test_user_echo.py +0 -0
- {verifiers-0.4.1.dev46 → verifiers-0.4.1.dev47}/tests/integration/test_user_sim.py +0 -0
- {verifiers-0.4.1.dev46 → verifiers-0.4.1.dev47}/tests/unit/cli/test_replay.py +0 -0
- {verifiers-0.4.1.dev46 → verifiers-0.4.1.dev47}/tests/unit/conftest.py +0 -0
- {verifiers-0.4.1.dev46 → verifiers-0.4.1.dev47}/tests/unit/harnesses/test_core.py +0 -0
- {verifiers-0.4.1.dev46 → verifiers-0.4.1.dev47}/tests/unit/harnesses/test_rlm.py +0 -0
- {verifiers-0.4.1.dev46 → verifiers-0.4.1.dev47}/tests/unit/interception/test_tunnel.py +0 -0
- {verifiers-0.4.1.dev46 → verifiers-0.4.1.dev47}/tests/unit/judges/conftest.py +0 -0
- {verifiers-0.4.1.dev46 → verifiers-0.4.1.dev47}/tests/unit/judges/test_judge.py +0 -0
- {verifiers-0.4.1.dev46 → verifiers-0.4.1.dev47}/tests/unit/judges/test_reference.py +0 -0
- {verifiers-0.4.1.dev46 → verifiers-0.4.1.dev47}/tests/unit/judges/test_rubric.py +0 -0
- {verifiers-0.4.1.dev46 → verifiers-0.4.1.dev47}/tests/unit/runtimes/test_e2b.py +0 -0
- {verifiers-0.4.1.dev46 → verifiers-0.4.1.dev47}/tests/unit/runtimes/test_private_network.py +0 -0
- {verifiers-0.4.1.dev46 → verifiers-0.4.1.dev47}/tests/unit/serve/test_client.py +0 -0
- {verifiers-0.4.1.dev46 → verifiers-0.4.1.dev47}/tests/unit/serve/test_delta.py +0 -0
- {verifiers-0.4.1.dev46 → verifiers-0.4.1.dev47}/tests/unit/serve/test_pool.py +0 -0
- {verifiers-0.4.1.dev46 → verifiers-0.4.1.dev47}/tests/unit/test_agent.py +0 -0
- {verifiers-0.4.1.dev46 → verifiers-0.4.1.dev47}/tests/unit/test_dialects.py +0 -0
- {verifiers-0.4.1.dev46 → verifiers-0.4.1.dev47}/tests/unit/test_semantic.py +0 -0
- {verifiers-0.4.1.dev46 → verifiers-0.4.1.dev47}/tests/unit/test_task.py +0 -0
- {verifiers-0.4.1.dev46 → verifiers-0.4.1.dev47}/tests/unit/test_taskset.py +0 -0
- {verifiers-0.4.1.dev46 → verifiers-0.4.1.dev47}/tests/unit/test_trace.py +0 -0
- {verifiers-0.4.1.dev46 → verifiers-0.4.1.dev47}/tests/unit/utils/test_compile.py +0 -0
- {verifiers-0.4.1.dev46 → verifiers-0.4.1.dev47}/tests/unit/utils/test_platform.py +0 -0
- {verifiers-0.4.1.dev46 → verifiers-0.4.1.dev47}/tests/unit/utils/test_score.py +0 -0
- {verifiers-0.4.1.dev46 → verifiers-0.4.1.dev47}/verifiers/__init__.py +0 -0
- {verifiers-0.4.1.dev46 → verifiers-0.4.1.dev47}/verifiers/v1/__init__.py +0 -0
- {verifiers-0.4.1.dev46 → verifiers-0.4.1.dev47}/verifiers/v1/acp/__init__.py +0 -0
- {verifiers-0.4.1.dev46 → verifiers-0.4.1.dev47}/verifiers/v1/acp/runner.py +0 -0
- {verifiers-0.4.1.dev46 → verifiers-0.4.1.dev47}/verifiers/v1/agent.py +0 -0
- {verifiers-0.4.1.dev46 → verifiers-0.4.1.dev47}/verifiers/v1/cli/__init__.py +0 -0
- {verifiers-0.4.1.dev46 → verifiers-0.4.1.dev47}/verifiers/v1/cli/dashboard/__init__.py +0 -0
- {verifiers-0.4.1.dev46 → verifiers-0.4.1.dev47}/verifiers/v1/cli/dashboard/base.py +0 -0
- {verifiers-0.4.1.dev46 → verifiers-0.4.1.dev47}/verifiers/v1/cli/dashboard/eval.py +0 -0
- {verifiers-0.4.1.dev46 → verifiers-0.4.1.dev47}/verifiers/v1/cli/dashboard/replay.py +0 -0
- {verifiers-0.4.1.dev46 → verifiers-0.4.1.dev47}/verifiers/v1/cli/dashboard/validate.py +0 -0
- {verifiers-0.4.1.dev46 → verifiers-0.4.1.dev47}/verifiers/v1/cli/debug.py +0 -0
- {verifiers-0.4.1.dev46 → verifiers-0.4.1.dev47}/verifiers/v1/cli/eval/__init__.py +0 -0
- {verifiers-0.4.1.dev46 → verifiers-0.4.1.dev47}/verifiers/v1/cli/eval/hint.py +0 -0
- {verifiers-0.4.1.dev46 → verifiers-0.4.1.dev47}/verifiers/v1/cli/eval/main.py +0 -0
- {verifiers-0.4.1.dev46 → verifiers-0.4.1.dev47}/verifiers/v1/cli/eval/resume.py +0 -0
- {verifiers-0.4.1.dev46 → verifiers-0.4.1.dev47}/verifiers/v1/cli/eval/runner.py +0 -0
- {verifiers-0.4.1.dev46 → verifiers-0.4.1.dev47}/verifiers/v1/cli/gepa.py +0 -0
- {verifiers-0.4.1.dev46 → verifiers-0.4.1.dev47}/verifiers/v1/cli/output.py +0 -0
- {verifiers-0.4.1.dev46 → verifiers-0.4.1.dev47}/verifiers/v1/cli/replay.py +0 -0
- {verifiers-0.4.1.dev46 → verifiers-0.4.1.dev47}/verifiers/v1/cli/resolve.py +0 -0
- {verifiers-0.4.1.dev46 → verifiers-0.4.1.dev47}/verifiers/v1/cli/resume.py +0 -0
- {verifiers-0.4.1.dev46 → verifiers-0.4.1.dev47}/verifiers/v1/cli/validate.py +0 -0
- {verifiers-0.4.1.dev46 → verifiers-0.4.1.dev47}/verifiers/v1/clients/__init__.py +0 -0
- {verifiers-0.4.1.dev46 → verifiers-0.4.1.dev47}/verifiers/v1/clients/base.py +0 -0
- {verifiers-0.4.1.dev46 → verifiers-0.4.1.dev47}/verifiers/v1/clients/client.py +0 -0
- {verifiers-0.4.1.dev46 → verifiers-0.4.1.dev47}/verifiers/v1/clients/eval.py +0 -0
- {verifiers-0.4.1.dev46 → verifiers-0.4.1.dev47}/verifiers/v1/clients/train.py +0 -0
- {verifiers-0.4.1.dev46 → verifiers-0.4.1.dev47}/verifiers/v1/configs/__init__.py +0 -0
- {verifiers-0.4.1.dev46 → verifiers-0.4.1.dev47}/verifiers/v1/configs/agent.py +0 -0
- {verifiers-0.4.1.dev46 → verifiers-0.4.1.dev47}/verifiers/v1/configs/cli/__init__.py +0 -0
- {verifiers-0.4.1.dev46 → verifiers-0.4.1.dev47}/verifiers/v1/configs/cli/debug.py +0 -0
- {verifiers-0.4.1.dev46 → verifiers-0.4.1.dev47}/verifiers/v1/configs/cli/env.py +0 -0
- {verifiers-0.4.1.dev46 → verifiers-0.4.1.dev47}/verifiers/v1/configs/cli/eval.py +0 -0
- {verifiers-0.4.1.dev46 → verifiers-0.4.1.dev47}/verifiers/v1/configs/cli/replay.py +0 -0
- {verifiers-0.4.1.dev46 → verifiers-0.4.1.dev47}/verifiers/v1/configs/cli/validate.py +0 -0
- {verifiers-0.4.1.dev46 → verifiers-0.4.1.dev47}/verifiers/v1/configs/client.py +0 -0
- {verifiers-0.4.1.dev46 → verifiers-0.4.1.dev47}/verifiers/v1/configs/env.py +0 -0
- {verifiers-0.4.1.dev46 → verifiers-0.4.1.dev47}/verifiers/v1/configs/judge.py +0 -0
- {verifiers-0.4.1.dev46 → verifiers-0.4.1.dev47}/verifiers/v1/configs/retries.py +0 -0
- {verifiers-0.4.1.dev46 → verifiers-0.4.1.dev47}/verifiers/v1/configs/runtime.py +0 -0
- {verifiers-0.4.1.dev46 → verifiers-0.4.1.dev47}/verifiers/v1/configs/scoring.py +0 -0
- {verifiers-0.4.1.dev46 → verifiers-0.4.1.dev47}/verifiers/v1/configs/select.py +0 -0
- {verifiers-0.4.1.dev46 → verifiers-0.4.1.dev47}/verifiers/v1/configs/serve.py +0 -0
- {verifiers-0.4.1.dev46 → verifiers-0.4.1.dev47}/verifiers/v1/configs/task.py +0 -0
- {verifiers-0.4.1.dev46 → verifiers-0.4.1.dev47}/verifiers/v1/configs/taskset.py +0 -0
- {verifiers-0.4.1.dev46 → verifiers-0.4.1.dev47}/verifiers/v1/dialects/__init__.py +0 -0
- {verifiers-0.4.1.dev46 → verifiers-0.4.1.dev47}/verifiers/v1/dialects/anthropic.py +0 -0
- {verifiers-0.4.1.dev46 → verifiers-0.4.1.dev47}/verifiers/v1/dialects/base.py +0 -0
- {verifiers-0.4.1.dev46 → verifiers-0.4.1.dev47}/verifiers/v1/dialects/chat.py +0 -0
- {verifiers-0.4.1.dev46 → verifiers-0.4.1.dev47}/verifiers/v1/dialects/responses.py +0 -0
- {verifiers-0.4.1.dev46 → verifiers-0.4.1.dev47}/verifiers/v1/env.py +0 -0
- {verifiers-0.4.1.dev46 → verifiers-0.4.1.dev47}/verifiers/v1/envs/__init__.py +0 -0
- {verifiers-0.4.1.dev46 → verifiers-0.4.1.dev47}/verifiers/v1/envs/agentic_judge/__init__.py +0 -0
- {verifiers-0.4.1.dev46 → verifiers-0.4.1.dev47}/verifiers/v1/envs/agentic_judge/env.py +0 -0
- {verifiers-0.4.1.dev46 → verifiers-0.4.1.dev47}/verifiers/v1/envs/best_of_n/__init__.py +0 -0
- {verifiers-0.4.1.dev46 → verifiers-0.4.1.dev47}/verifiers/v1/envs/best_of_n/env.py +0 -0
- {verifiers-0.4.1.dev46 → verifiers-0.4.1.dev47}/verifiers/v1/envs/single_agent/__init__.py +0 -0
- {verifiers-0.4.1.dev46 → verifiers-0.4.1.dev47}/verifiers/v1/envs/single_agent/env.py +0 -0
- {verifiers-0.4.1.dev46 → verifiers-0.4.1.dev47}/verifiers/v1/envs/user_sim/__init__.py +0 -0
- {verifiers-0.4.1.dev46 → verifiers-0.4.1.dev47}/verifiers/v1/envs/user_sim/env.py +0 -0
- {verifiers-0.4.1.dev46 → verifiers-0.4.1.dev47}/verifiers/v1/episode.py +0 -0
- {verifiers-0.4.1.dev46 → verifiers-0.4.1.dev47}/verifiers/v1/errors.py +0 -0
- {verifiers-0.4.1.dev46 → verifiers-0.4.1.dev47}/verifiers/v1/gepa/__init__.py +0 -0
- {verifiers-0.4.1.dev46 → verifiers-0.4.1.dev47}/verifiers/v1/gepa/adapter.py +0 -0
- {verifiers-0.4.1.dev46 → verifiers-0.4.1.dev47}/verifiers/v1/gepa/config.py +0 -0
- {verifiers-0.4.1.dev46 → verifiers-0.4.1.dev47}/verifiers/v1/gepa/dataset.py +0 -0
- {verifiers-0.4.1.dev46 → verifiers-0.4.1.dev47}/verifiers/v1/gepa/reflection.py +0 -0
- {verifiers-0.4.1.dev46 → verifiers-0.4.1.dev47}/verifiers/v1/gepa/runner.py +0 -0
- {verifiers-0.4.1.dev46 → verifiers-0.4.1.dev47}/verifiers/v1/grading.py +0 -0
- {verifiers-0.4.1.dev46 → verifiers-0.4.1.dev47}/verifiers/v1/graph.py +0 -0
- {verifiers-0.4.1.dev46 → verifiers-0.4.1.dev47}/verifiers/v1/harness.py +0 -0
- {verifiers-0.4.1.dev46 → verifiers-0.4.1.dev47}/verifiers/v1/harnesses/__init__.py +0 -0
- {verifiers-0.4.1.dev46 → verifiers-0.4.1.dev47}/verifiers/v1/harnesses/bash/__init__.py +0 -0
- {verifiers-0.4.1.dev46 → verifiers-0.4.1.dev47}/verifiers/v1/harnesses/browser_use/__init__.py +0 -0
- {verifiers-0.4.1.dev46 → verifiers-0.4.1.dev47}/verifiers/v1/harnesses/browser_use/program.py +0 -0
- {verifiers-0.4.1.dev46 → verifiers-0.4.1.dev47}/verifiers/v1/harnesses/claude_code/__init__.py +0 -0
- {verifiers-0.4.1.dev46 → verifiers-0.4.1.dev47}/verifiers/v1/harnesses/codex/__init__.py +0 -0
- {verifiers-0.4.1.dev46 → verifiers-0.4.1.dev47}/verifiers/v1/harnesses/codex/gate.mjs +0 -0
- {verifiers-0.4.1.dev46 → verifiers-0.4.1.dev47}/verifiers/v1/harnesses/deepseek/__init__.py +0 -0
- {verifiers-0.4.1.dev46 → verifiers-0.4.1.dev47}/verifiers/v1/harnesses/deepseek/gate.mjs +0 -0
- {verifiers-0.4.1.dev46 → verifiers-0.4.1.dev47}/verifiers/v1/harnesses/deepseek/usage.mjs +0 -0
- {verifiers-0.4.1.dev46 → verifiers-0.4.1.dev47}/verifiers/v1/harnesses/hermes_agent/__init__.py +0 -0
- {verifiers-0.4.1.dev46 → verifiers-0.4.1.dev47}/verifiers/v1/harnesses/hermes_agent/program.py +0 -0
- {verifiers-0.4.1.dev46 → verifiers-0.4.1.dev47}/verifiers/v1/harnesses/kimi_code/__init__.py +0 -0
- {verifiers-0.4.1.dev46 → verifiers-0.4.1.dev47}/verifiers/v1/harnesses/mini_swe_agent/__init__.py +0 -0
- {verifiers-0.4.1.dev46 → verifiers-0.4.1.dev47}/verifiers/v1/harnesses/mini_swe_agent/program.py +0 -0
- {verifiers-0.4.1.dev46 → verifiers-0.4.1.dev47}/verifiers/v1/harnesses/node.py +0 -0
- {verifiers-0.4.1.dev46 → verifiers-0.4.1.dev47}/verifiers/v1/harnesses/null/__init__.py +0 -0
- {verifiers-0.4.1.dev46 → verifiers-0.4.1.dev47}/verifiers/v1/harnesses/openclaw/__init__.py +0 -0
- {verifiers-0.4.1.dev46 → verifiers-0.4.1.dev47}/verifiers/v1/harnesses/opencode/__init__.py +0 -0
- {verifiers-0.4.1.dev46 → verifiers-0.4.1.dev47}/verifiers/v1/harnesses/opencode/mcp-ready.js +0 -0
- {verifiers-0.4.1.dev46 → verifiers-0.4.1.dev47}/verifiers/v1/harnesses/pi/__init__.py +0 -0
- {verifiers-0.4.1.dev46 → verifiers-0.4.1.dev47}/verifiers/v1/harnesses/pi/gate.mjs +0 -0
- {verifiers-0.4.1.dev46 → verifiers-0.4.1.dev47}/verifiers/v1/harnesses/prime_agent/__init__.py +0 -0
- {verifiers-0.4.1.dev46 → verifiers-0.4.1.dev47}/verifiers/v1/harnesses/rlm/__init__.py +0 -0
- {verifiers-0.4.1.dev46 → verifiers-0.4.1.dev47}/verifiers/v1/harnesses/terminus_2/__init__.py +0 -0
- {verifiers-0.4.1.dev46 → verifiers-0.4.1.dev47}/verifiers/v1/harnesses/terminus_2/program.py +0 -0
- {verifiers-0.4.1.dev46 → verifiers-0.4.1.dev47}/verifiers/v1/harnesses/utils/__init__.py +0 -0
- {verifiers-0.4.1.dev46 → verifiers-0.4.1.dev47}/verifiers/v1/harnesses/utils/compaction.py +0 -0
- {verifiers-0.4.1.dev46 → verifiers-0.4.1.dev47}/verifiers/v1/harnesses/utils/core.py +0 -0
- {verifiers-0.4.1.dev46 → verifiers-0.4.1.dev47}/verifiers/v1/harnesses/utils/install.py +0 -0
- {verifiers-0.4.1.dev46 → verifiers-0.4.1.dev47}/verifiers/v1/harnesses/utils/launch.py +0 -0
- {verifiers-0.4.1.dev46 → verifiers-0.4.1.dev47}/verifiers/v1/harnesses/utils/mcp.py +0 -0
- {verifiers-0.4.1.dev46 → verifiers-0.4.1.dev47}/verifiers/v1/interception/__init__.py +0 -0
- {verifiers-0.4.1.dev46 → verifiers-0.4.1.dev47}/verifiers/v1/interception/base.py +0 -0
- {verifiers-0.4.1.dev46 → verifiers-0.4.1.dev47}/verifiers/v1/interception/pool.py +0 -0
- {verifiers-0.4.1.dev46 → verifiers-0.4.1.dev47}/verifiers/v1/interception/server.py +0 -0
- {verifiers-0.4.1.dev46 → verifiers-0.4.1.dev47}/verifiers/v1/interception/tunnel/__init__.py +0 -0
- {verifiers-0.4.1.dev46 → verifiers-0.4.1.dev47}/verifiers/v1/interception/tunnel/base.py +0 -0
- {verifiers-0.4.1.dev46 → verifiers-0.4.1.dev47}/verifiers/v1/interception/tunnel/custom.py +0 -0
- {verifiers-0.4.1.dev46 → verifiers-0.4.1.dev47}/verifiers/v1/interception/tunnel/prime.py +0 -0
- {verifiers-0.4.1.dev46 → verifiers-0.4.1.dev47}/verifiers/v1/judge.py +0 -0
- {verifiers-0.4.1.dev46 → verifiers-0.4.1.dev47}/verifiers/v1/judges/__init__.py +0 -0
- {verifiers-0.4.1.dev46 → verifiers-0.4.1.dev47}/verifiers/v1/judges/decision.py +0 -0
- {verifiers-0.4.1.dev46 → verifiers-0.4.1.dev47}/verifiers/v1/judges/reference.py +0 -0
- {verifiers-0.4.1.dev46 → verifiers-0.4.1.dev47}/verifiers/v1/judges/reference.txt +0 -0
- {verifiers-0.4.1.dev46 → verifiers-0.4.1.dev47}/verifiers/v1/judges/rubric.py +0 -0
- {verifiers-0.4.1.dev46 → verifiers-0.4.1.dev47}/verifiers/v1/judges/rubric.txt +0 -0
- {verifiers-0.4.1.dev46 → verifiers-0.4.1.dev47}/verifiers/v1/mcp/__init__.py +0 -0
- {verifiers-0.4.1.dev46 → verifiers-0.4.1.dev47}/verifiers/v1/mcp/launch.py +0 -0
- {verifiers-0.4.1.dev46 → verifiers-0.4.1.dev47}/verifiers/v1/mcp/server.py +0 -0
- {verifiers-0.4.1.dev46 → verifiers-0.4.1.dev47}/verifiers/v1/mcp/toolset.py +0 -0
- {verifiers-0.4.1.dev46 → verifiers-0.4.1.dev47}/verifiers/v1/rollout.py +0 -0
- {verifiers-0.4.1.dev46 → verifiers-0.4.1.dev47}/verifiers/v1/runtimes/__init__.py +0 -0
- {verifiers-0.4.1.dev46 → verifiers-0.4.1.dev47}/verifiers/v1/runtimes/apptainer.py +0 -0
- {verifiers-0.4.1.dev46 → verifiers-0.4.1.dev47}/verifiers/v1/runtimes/base.py +0 -0
- {verifiers-0.4.1.dev46 → verifiers-0.4.1.dev47}/verifiers/v1/runtimes/compose.py +0 -0
- {verifiers-0.4.1.dev46 → verifiers-0.4.1.dev47}/verifiers/v1/runtimes/container.py +0 -0
- {verifiers-0.4.1.dev46 → verifiers-0.4.1.dev47}/verifiers/v1/runtimes/deployment.py +0 -0
- {verifiers-0.4.1.dev46 → verifiers-0.4.1.dev47}/verifiers/v1/runtimes/docker/__init__.py +0 -0
- {verifiers-0.4.1.dev46 → verifiers-0.4.1.dev47}/verifiers/v1/runtimes/docker/egress.py +0 -0
- {verifiers-0.4.1.dev46 → verifiers-0.4.1.dev47}/verifiers/v1/runtimes/e2b.py +0 -0
- {verifiers-0.4.1.dev46 → verifiers-0.4.1.dev47}/verifiers/v1/runtimes/limiters.py +0 -0
- {verifiers-0.4.1.dev46 → verifiers-0.4.1.dev47}/verifiers/v1/runtimes/modal.py +0 -0
- {verifiers-0.4.1.dev46 → verifiers-0.4.1.dev47}/verifiers/v1/runtimes/prime.py +0 -0
- {verifiers-0.4.1.dev46 → verifiers-0.4.1.dev47}/verifiers/v1/runtimes/private_network.py +0 -0
- {verifiers-0.4.1.dev46 → verifiers-0.4.1.dev47}/verifiers/v1/runtimes/runtime.py +0 -0
- {verifiers-0.4.1.dev46 → verifiers-0.4.1.dev47}/verifiers/v1/runtimes/strategies.py +0 -0
- {verifiers-0.4.1.dev46 → verifiers-0.4.1.dev47}/verifiers/v1/runtimes/subprocess.py +0 -0
- {verifiers-0.4.1.dev46 → verifiers-0.4.1.dev47}/verifiers/v1/semantic.py +0 -0
- {verifiers-0.4.1.dev46 → verifiers-0.4.1.dev47}/verifiers/v1/serve/__init__.py +0 -0
- {verifiers-0.4.1.dev46 → verifiers-0.4.1.dev47}/verifiers/v1/serve/client.py +0 -0
- {verifiers-0.4.1.dev46 → verifiers-0.4.1.dev47}/verifiers/v1/serve/delta.py +0 -0
- {verifiers-0.4.1.dev46 → verifiers-0.4.1.dev47}/verifiers/v1/serve/encoding.py +0 -0
- {verifiers-0.4.1.dev46 → verifiers-0.4.1.dev47}/verifiers/v1/serve/pool.py +0 -0
- {verifiers-0.4.1.dev46 → verifiers-0.4.1.dev47}/verifiers/v1/serve/server.py +0 -0
- {verifiers-0.4.1.dev46 → verifiers-0.4.1.dev47}/verifiers/v1/serve/types.py +0 -0
- {verifiers-0.4.1.dev46 → verifiers-0.4.1.dev47}/verifiers/v1/session.py +0 -0
- {verifiers-0.4.1.dev46 → verifiers-0.4.1.dev47}/verifiers/v1/state.py +0 -0
- {verifiers-0.4.1.dev46 → verifiers-0.4.1.dev47}/verifiers/v1/task.py +0 -0
- {verifiers-0.4.1.dev46 → verifiers-0.4.1.dev47}/verifiers/v1/taskset.py +0 -0
- {verifiers-0.4.1.dev46 → verifiers-0.4.1.dev47}/verifiers/v1/tasksets/__init__.py +0 -0
- {verifiers-0.4.1.dev46 → verifiers-0.4.1.dev47}/verifiers/v1/tasksets/harbor/__init__.py +0 -0
- {verifiers-0.4.1.dev46 → verifiers-0.4.1.dev47}/verifiers/v1/tasksets/harbor/taskset.py +0 -0
- {verifiers-0.4.1.dev46 → verifiers-0.4.1.dev47}/verifiers/v1/tasksets/harbor/toolset.py +0 -0
- {verifiers-0.4.1.dev46 → verifiers-0.4.1.dev47}/verifiers/v1/tasksets/nemo_gym/__init__.py +0 -0
- {verifiers-0.4.1.dev46 → verifiers-0.4.1.dev47}/verifiers/v1/tasksets/nemo_gym/response.py +0 -0
- {verifiers-0.4.1.dev46 → verifiers-0.4.1.dev47}/verifiers/v1/tasksets/nemo_gym/server.py +0 -0
- {verifiers-0.4.1.dev46 → verifiers-0.4.1.dev47}/verifiers/v1/tasksets/nemo_gym/taskset.py +0 -0
- {verifiers-0.4.1.dev46 → verifiers-0.4.1.dev47}/verifiers/v1/tasksets/nemo_gym/toolset.py +0 -0
- {verifiers-0.4.1.dev46 → verifiers-0.4.1.dev47}/verifiers/v1/tasksets/openenv/__init__.py +0 -0
- {verifiers-0.4.1.dev46 → verifiers-0.4.1.dev47}/verifiers/v1/tasksets/openenv/taskset.py +0 -0
- {verifiers-0.4.1.dev46 → verifiers-0.4.1.dev47}/verifiers/v1/tasksets/textarena/__init__.py +0 -0
- {verifiers-0.4.1.dev46 → verifiers-0.4.1.dev47}/verifiers/v1/tasksets/textarena/taskset.py +0 -0
- {verifiers-0.4.1.dev46 → verifiers-0.4.1.dev47}/verifiers/v1/trace.py +0 -0
- {verifiers-0.4.1.dev46 → verifiers-0.4.1.dev47}/verifiers/v1/utils/__init__.py +0 -0
- {verifiers-0.4.1.dev46 → verifiers-0.4.1.dev47}/verifiers/v1/utils/aio.py +0 -0
- {verifiers-0.4.1.dev46 → verifiers-0.4.1.dev47}/verifiers/v1/utils/artifacts.py +0 -0
- {verifiers-0.4.1.dev46 → verifiers-0.4.1.dev47}/verifiers/v1/utils/compile.py +0 -0
- {verifiers-0.4.1.dev46 → verifiers-0.4.1.dev47}/verifiers/v1/utils/decorators.py +0 -0
- {verifiers-0.4.1.dev46 → verifiers-0.4.1.dev47}/verifiers/v1/utils/env.py +0 -0
- {verifiers-0.4.1.dev46 → verifiers-0.4.1.dev47}/verifiers/v1/utils/eval.py +0 -0
- {verifiers-0.4.1.dev46 → verifiers-0.4.1.dev47}/verifiers/v1/utils/format.py +0 -0
- {verifiers-0.4.1.dev46 → verifiers-0.4.1.dev47}/verifiers/v1/utils/generic.py +0 -0
- {verifiers-0.4.1.dev46 → verifiers-0.4.1.dev47}/verifiers/v1/utils/git.py +0 -0
- {verifiers-0.4.1.dev46 → verifiers-0.4.1.dev47}/verifiers/v1/utils/image.py +0 -0
- {verifiers-0.4.1.dev46 → verifiers-0.4.1.dev47}/verifiers/v1/utils/interrupt.py +0 -0
- {verifiers-0.4.1.dev46 → verifiers-0.4.1.dev47}/verifiers/v1/utils/logging.py +0 -0
- {verifiers-0.4.1.dev46 → verifiers-0.4.1.dev47}/verifiers/v1/utils/memory.py +0 -0
- {verifiers-0.4.1.dev46 → verifiers-0.4.1.dev47}/verifiers/v1/utils/paths.py +0 -0
- {verifiers-0.4.1.dev46 → verifiers-0.4.1.dev47}/verifiers/v1/utils/platform.py +0 -0
- {verifiers-0.4.1.dev46 → verifiers-0.4.1.dev47}/verifiers/v1/utils/prime.py +0 -0
- {verifiers-0.4.1.dev46 → verifiers-0.4.1.dev47}/verifiers/v1/utils/retries.py +0 -0
- {verifiers-0.4.1.dev46 → verifiers-0.4.1.dev47}/verifiers/v1/utils/scope.py +0 -0
- {verifiers-0.4.1.dev46 → verifiers-0.4.1.dev47}/verifiers/v1/utils/score.py +0 -0
- {verifiers-0.4.1.dev46 → verifiers-0.4.1.dev47}/verifiers/v1/utils/trace_store.py +0 -0
- {verifiers-0.4.1.dev46 → verifiers-0.4.1.dev47}/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.dev47
|
|
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
|
|
@@ -192,31 +192,32 @@ def grid(
|
|
|
192
192
|
return cells
|
|
193
193
|
|
|
194
194
|
|
|
195
|
-
def
|
|
196
|
-
"""The
|
|
197
|
-
|
|
198
|
-
field = harness_config_type(harness).model_fields
|
|
199
|
-
|
|
200
|
-
|
|
201
|
-
|
|
195
|
+
def dialects(harness: str) -> tuple[str, ...]:
|
|
196
|
+
"""The dialects the harness config can select besides its default. Empty when the
|
|
197
|
+
program speaks one dialect or picks its own."""
|
|
198
|
+
field = harness_config_type(harness).model_fields["dialect"]
|
|
199
|
+
return tuple(
|
|
200
|
+
value
|
|
201
|
+
for arg in get_args(field.annotation)
|
|
202
|
+
for value in get_args(arg) or (arg,)
|
|
203
|
+
if value != field.default
|
|
204
|
+
)
|
|
202
205
|
|
|
203
206
|
|
|
204
|
-
def
|
|
207
|
+
def dialect_grid(
|
|
205
208
|
runtimes: Sequence[str] = ("prime",), *, needs: tuple[str, ...] = ()
|
|
206
209
|
) -> list:
|
|
207
|
-
"""`grid` cells for every non-default `
|
|
210
|
+
"""`grid` cells for every non-default `dialect` each harness config can select."""
|
|
208
211
|
cells = []
|
|
209
212
|
for harness in HARNESSES:
|
|
210
213
|
name = harness_id(harness)
|
|
211
|
-
for
|
|
212
|
-
for cell in grid(
|
|
213
|
-
[{"id": name, "transport": transport}], runtimes, needs=needs
|
|
214
|
-
):
|
|
214
|
+
for dialect in dialects(name):
|
|
215
|
+
for cell in grid([{"id": name, "dialect": dialect}], runtimes, needs=needs):
|
|
215
216
|
cells.append(
|
|
216
217
|
pytest.param(
|
|
217
218
|
*cell.values,
|
|
218
219
|
marks=cell.marks,
|
|
219
|
-
id=cell.id.replace(f"{name}-in-", f"{name}-{
|
|
220
|
+
id=cell.id.replace(f"{name}-in-", f"{name}-{dialect}-in-"),
|
|
220
221
|
)
|
|
221
222
|
)
|
|
222
223
|
return cells
|
|
@@ -1,14 +1,14 @@
|
|
|
1
1
|
"""One task, many turns: the model completes a shell task (echo-agentic: write a phrase
|
|
2
2
|
to a file, checked in the runtime) across the harness x runtime grid, and on prime over
|
|
3
|
-
every other `
|
|
3
|
+
every other `dialect` a harness config can select. A turn the harness re-sends
|
|
4
4
|
differently, beyond what its `replay_view` declares, forks the trace."""
|
|
5
5
|
|
|
6
6
|
import pytest
|
|
7
|
-
from grid import grid, mark
|
|
7
|
+
from grid import dialect_grid, grid, mark
|
|
8
8
|
|
|
9
9
|
MULTI_TURN = [
|
|
10
10
|
*grid(needs=("shell",)),
|
|
11
|
-
*
|
|
11
|
+
*dialect_grid(needs=("shell",)),
|
|
12
12
|
pytest.param(
|
|
13
13
|
"bash",
|
|
14
14
|
{"type": "modal", "allow": []},
|
|
@@ -305,6 +305,14 @@ def _replayed_trace(replay_view, sampled, replayed, dialect=None):
|
|
|
305
305
|
),
|
|
306
306
|
(strip_text, {"content": "Calling it.\n\n"}, {"content": "Calling it."}),
|
|
307
307
|
(strip_text, {"content": None}, {"reasoning_content": " "}),
|
|
308
|
+
(
|
|
309
|
+
strip_text,
|
|
310
|
+
{"content": "\n\n"},
|
|
311
|
+
{
|
|
312
|
+
"reasoning_content": " ",
|
|
313
|
+
"provider_state": [{"type": "thinking", "thinking": " "}],
|
|
314
|
+
},
|
|
315
|
+
),
|
|
308
316
|
],
|
|
309
317
|
)
|
|
310
318
|
def test_replay_view_matches_cosmetically_rewritten_turns(view, sampled, replayed):
|
|
@@ -29,10 +29,10 @@ def test_every_builtin_harness_loads() -> None:
|
|
|
29
29
|
|
|
30
30
|
def test_harness_config_narrows_to_its_own_type() -> None:
|
|
31
31
|
config = vf.AgentConfig.model_validate(
|
|
32
|
-
{"harness": {"id": "kimi-code", "
|
|
32
|
+
{"harness": {"id": "kimi-code", "dialect": "responses"}}
|
|
33
33
|
)
|
|
34
34
|
assert type(config.harness) is harness_config_type("kimi-code")
|
|
35
|
-
assert config.harness.
|
|
35
|
+
assert config.harness.dialect == "responses"
|
|
36
36
|
|
|
37
37
|
|
|
38
38
|
def test_unknown_harness_names_the_builtins() -> None:
|
|
@@ -9,7 +9,7 @@ from typing import Annotated, Literal
|
|
|
9
9
|
from pydantic import ConfigDict, Field, FiniteFloat
|
|
10
10
|
from pydantic_config import BaseConfig
|
|
11
11
|
|
|
12
|
-
from verifiers.v1.types import ID
|
|
12
|
+
from verifiers.v1.types import ID, DialectName
|
|
13
13
|
|
|
14
14
|
PinnedVersion = Annotated[str, Field(pattern=r"^[A-Za-z0-9._+-]+$")]
|
|
15
15
|
"""A release/tag a harness pins its program install to."""
|
|
@@ -52,6 +52,9 @@ class HarnessConfig(BaseConfig):
|
|
|
52
52
|
tool_timeout: FiniteFloat = Field(600.0, gt=0)
|
|
53
53
|
"""Seconds a single MCP tool call may take; raise it for tools that boot a VM."""
|
|
54
54
|
disabled_tools: list[str] | None = None
|
|
55
|
+
dialect: DialectName | Literal["auto"] = "auto"
|
|
56
|
+
"""Model API wire format the program speaks. `auto` lets the program pick, e.g. from
|
|
57
|
+
the model. Each harness narrows this to the formats it can select."""
|
|
55
58
|
skills: list[SkillSource] = Field(default_factory=list)
|
|
56
59
|
"""Host skill folders or `{runtime: path}` roots of skills inside the runtime.
|
|
57
60
|
Sources are installed in order; later files override matching earlier files.
|
|
@@ -1,4 +1,5 @@
|
|
|
1
1
|
import os
|
|
2
|
+
from typing import Literal
|
|
2
3
|
|
|
3
4
|
from pydantic import PositiveInt
|
|
4
5
|
from pydantic_config import BaseConfig
|
|
@@ -38,6 +39,7 @@ class CompactionConfig(BaseConfig):
|
|
|
38
39
|
|
|
39
40
|
|
|
40
41
|
class BashHarnessConfig(HarnessConfig):
|
|
42
|
+
dialect: Literal["chat_completions"] = "chat_completions"
|
|
41
43
|
edit: bool = True
|
|
42
44
|
"""Offer the local `edit` tool (single-occurrence string replacement in a file) alongside
|
|
43
45
|
`bash`. On by default; set `--env.agent.harness.edit false` for a bash-only agent."""
|
{verifiers-0.4.1.dev46 → verifiers-0.4.1.dev47}/verifiers/v1/harnesses/browser_use/harness.py
RENAMED
|
@@ -32,6 +32,7 @@ Finding elements: prefer the accessibility tree over screenshots. cdp("Accessibi
|
|
|
32
32
|
|
|
33
33
|
|
|
34
34
|
class BrowserUseHarnessConfig(HarnessConfig):
|
|
35
|
+
dialect: Literal["chat_completions"] = "chat_completions"
|
|
35
36
|
browser: Literal["chromium", "cdp"] = "chromium"
|
|
36
37
|
"""`chromium` launches locally; `cdp` attaches to `cdp_url` without owning it."""
|
|
37
38
|
|
{verifiers-0.4.1.dev46 → verifiers-0.4.1.dev47}/verifiers/v1/harnesses/claude_code/harness.py
RENAMED
|
@@ -1,6 +1,7 @@
|
|
|
1
1
|
"""Run Claude Code through the Claude Agent SDK ACP adapter."""
|
|
2
2
|
|
|
3
3
|
import json
|
|
4
|
+
from typing import Literal
|
|
4
5
|
|
|
5
6
|
from verifiers.v1.acp import ACPConfig, ACPHarness
|
|
6
7
|
from verifiers.v1.clients import ModelContext
|
|
@@ -32,6 +33,7 @@ touch {ready}
|
|
|
32
33
|
|
|
33
34
|
|
|
34
35
|
class ClaudeCodeHarnessConfig(HarnessConfig):
|
|
36
|
+
dialect: Literal["anthropic_messages"] = "anthropic_messages"
|
|
35
37
|
version: PinnedVersion = "2.1.278"
|
|
36
38
|
"""Claude Code release to install, pinned for reproducibility."""
|
|
37
39
|
|
|
@@ -7,6 +7,7 @@ import re
|
|
|
7
7
|
import tomllib
|
|
8
8
|
from collections import Counter
|
|
9
9
|
from pathlib import Path
|
|
10
|
+
from typing import Literal
|
|
10
11
|
|
|
11
12
|
import tomli_w
|
|
12
13
|
|
|
@@ -48,6 +49,9 @@ GATE_HANDLER = {
|
|
|
48
49
|
|
|
49
50
|
|
|
50
51
|
class CodexHarnessConfig(HarnessConfig):
|
|
52
|
+
# Codex accepts no other wire API:
|
|
53
|
+
# https://github.com/openai/codex/blob/rust-v0.155.1/codex-rs/model-provider-info/src/lib.rs#L61
|
|
54
|
+
dialect: Literal["responses"] = "responses"
|
|
51
55
|
version: PinnedVersion = "0.155.1"
|
|
52
56
|
"""Codex release to install, pinned for reproducibility."""
|
|
53
57
|
multi_agent: bool = False
|
|
@@ -2,6 +2,7 @@
|
|
|
2
2
|
|
|
3
3
|
import json
|
|
4
4
|
from pathlib import Path
|
|
5
|
+
from typing import Literal
|
|
5
6
|
|
|
6
7
|
from verifiers.v1.acp import ACPConfig, ACPHarness
|
|
7
8
|
from verifiers.v1.clients import ModelContext
|
|
@@ -25,6 +26,9 @@ touch "$VF_DEEPSEEK_DIR/.ready"
|
|
|
25
26
|
|
|
26
27
|
|
|
27
28
|
class DeepSeekHarnessConfig(HarnessConfig):
|
|
29
|
+
# The `deepseek-official` route speaks Anthropic messages:
|
|
30
|
+
# https://github.com/deepseek-ai/deepseek-harness/blob/dsh-v0.2.1-alpha.3/packages/llm/llm-deepseek/src/messages-api.ts#L14-L17
|
|
31
|
+
dialect: Literal["anthropic_messages"] = "anthropic_messages"
|
|
28
32
|
version: PinnedVersion = "0.2.1-alpha.3"
|
|
29
33
|
"""DeepSeek CLI release, pinned to its shipped sdk-minimal composition."""
|
|
30
34
|
|
{verifiers-0.4.1.dev46 → verifiers-0.4.1.dev47}/verifiers/v1/harnesses/hermes_agent/harness.py
RENAMED
|
@@ -2,6 +2,7 @@
|
|
|
2
2
|
|
|
3
3
|
import json
|
|
4
4
|
from pathlib import Path
|
|
5
|
+
from typing import Literal
|
|
5
6
|
|
|
6
7
|
from verifiers.v1.acp import ACPConfig, ACPHarness
|
|
7
8
|
from verifiers.v1.clients import ModelContext
|
|
@@ -32,6 +33,10 @@ class HermesAgentHarnessConfig(HarnessConfig):
|
|
|
32
33
|
"""Hermes Agent Git release tag to install, pinned for reproducibility."""
|
|
33
34
|
use_bundled_skill: bool = False
|
|
34
35
|
"""Enable Hermes Agent's bundled skill catalog in addition to uploaded skills."""
|
|
36
|
+
# Over Responses it replays an earlier turn without its reasoning.
|
|
37
|
+
dialect: Literal["chat_completions", "anthropic_messages", "auto"] = "auto"
|
|
38
|
+
"""`auto` lets Hermes pick the transport from the model name on eval clients, and
|
|
39
|
+
chat completions on others."""
|
|
35
40
|
|
|
36
41
|
|
|
37
42
|
class HermesAgentHarness(ACPHarness[HermesAgentHarnessConfig]):
|
|
@@ -94,7 +99,9 @@ class HermesAgentHarness(ACPHarness[HermesAgentHarnessConfig]):
|
|
|
94
99
|
"api_key": secret,
|
|
95
100
|
"discover_models": False,
|
|
96
101
|
}
|
|
97
|
-
if
|
|
102
|
+
if self.config.dialect != "auto":
|
|
103
|
+
provider["transport"] = self.config.dialect
|
|
104
|
+
elif ctx.client.type == "eval":
|
|
98
105
|
provider["transport"] = "${HERMES_INTERCEPT_TRANSPORT}"
|
|
99
106
|
config = {
|
|
100
107
|
"model": model,
|
|
@@ -40,8 +40,7 @@ fi
|
|
|
40
40
|
class KimiCodeHarnessConfig(HarnessConfig):
|
|
41
41
|
version: PinnedVersion = "2.0.2"
|
|
42
42
|
"""Kimi Code release to install, pinned for reproducibility."""
|
|
43
|
-
|
|
44
|
-
"""Model API transport."""
|
|
43
|
+
dialect: DialectName = "chat_completions"
|
|
45
44
|
|
|
46
45
|
|
|
47
46
|
class KimiCodeHarness(ACPHarness[KimiCodeHarnessConfig]):
|
|
@@ -87,10 +86,10 @@ class KimiCodeHarness(ACPHarness[KimiCodeHarnessConfig]):
|
|
|
87
86
|
"chat_completions": "openai",
|
|
88
87
|
"responses": "openai_responses",
|
|
89
88
|
"anthropic_messages": "anthropic",
|
|
90
|
-
}[self.config.
|
|
89
|
+
}[self.config.dialect]
|
|
91
90
|
base_url = (
|
|
92
91
|
endpoint.removesuffix("/v1")
|
|
93
|
-
if self.config.
|
|
92
|
+
if self.config.dialect == "anthropic_messages"
|
|
94
93
|
else endpoint
|
|
95
94
|
)
|
|
96
95
|
config = {
|
{verifiers-0.4.1.dev46 → verifiers-0.4.1.dev47}/verifiers/v1/harnesses/mini_swe_agent/harness.py
RENAMED
|
@@ -1,4 +1,5 @@
|
|
|
1
1
|
from pathlib import Path
|
|
2
|
+
from typing import Literal
|
|
2
3
|
|
|
3
4
|
from verifiers.v1.clients import ModelContext
|
|
4
5
|
from verifiers.v1.configs.harness import HarnessConfig, PinnedVersion
|
|
@@ -11,6 +12,7 @@ PROGRAM_SOURCE = (Path(__file__).resolve().parent / "program.py").read_text()
|
|
|
11
12
|
|
|
12
13
|
|
|
13
14
|
class MiniSWEAgentHarnessConfig(HarnessConfig):
|
|
15
|
+
dialect: Literal["chat_completions"] = "chat_completions"
|
|
14
16
|
version: PinnedVersion = "2.4.6"
|
|
15
17
|
"""mini-swe-agent release to install, pinned for reproducibility."""
|
|
16
18
|
|
|
@@ -1,3 +1,5 @@
|
|
|
1
|
+
from typing import Literal
|
|
2
|
+
|
|
1
3
|
from verifiers.v1.clients import ModelContext
|
|
2
4
|
from verifiers.v1.configs.harness import HarnessConfig
|
|
3
5
|
from verifiers.v1.harness import Harness
|
|
@@ -11,7 +13,7 @@ from verifiers.v1.trace import Trace
|
|
|
11
13
|
|
|
12
14
|
|
|
13
15
|
class NullHarnessConfig(HarnessConfig):
|
|
14
|
-
|
|
16
|
+
dialect: Literal["chat_completions"] = "chat_completions"
|
|
15
17
|
|
|
16
18
|
|
|
17
19
|
class NullHarness(Harness[NullHarnessConfig]):
|
|
@@ -2,6 +2,7 @@
|
|
|
2
2
|
|
|
3
3
|
import json
|
|
4
4
|
import logging
|
|
5
|
+
from typing import Literal
|
|
5
6
|
|
|
6
7
|
from verifiers.v1.acp import ACPConfig, ACPHarness
|
|
7
8
|
from verifiers.v1.clients import ModelContext
|
|
@@ -118,6 +119,8 @@ wait "$acp_pid"
|
|
|
118
119
|
class OpenClawHarnessConfig(HarnessConfig):
|
|
119
120
|
version: PinnedVersion = "2026.9.5"
|
|
120
121
|
"""OpenClaw release to install, pinned for reproducibility."""
|
|
122
|
+
dialect: Literal["auto"] = "auto"
|
|
123
|
+
"""OpenClaw takes the transport from its model catalog."""
|
|
121
124
|
use_bundled_skill: bool = True
|
|
122
125
|
"""Enable OpenClaw's bundled skill catalog in addition to uploaded harness skills."""
|
|
123
126
|
|
|
@@ -30,8 +30,7 @@ npm install --prefix "$VF_OPENCODE_DIR" --no-audit --no-fund --omit=dev \
|
|
|
30
30
|
class OpenCodeHarnessConfig(HarnessConfig):
|
|
31
31
|
version: PinnedVersion = "2.0.26"
|
|
32
32
|
"""OpenCode 2 release to install, pinned for reproducibility."""
|
|
33
|
-
|
|
34
|
-
"""Model API transport."""
|
|
33
|
+
dialect: DialectName = "chat_completions"
|
|
35
34
|
disabled_tools: list[str] | None = None
|
|
36
35
|
"""OpenCode permission actions to deny, such as shell, read, or edit."""
|
|
37
36
|
|
|
@@ -87,7 +86,7 @@ class OpenCodeHarness(ACPHarness[OpenCodeHarnessConfig]):
|
|
|
87
86
|
"chat_completions": "openai-compatible",
|
|
88
87
|
"responses": "openai-compatible/responses",
|
|
89
88
|
"anthropic_messages": "anthropic-compatible",
|
|
90
|
-
}[self.config.
|
|
89
|
+
}[self.config.dialect]
|
|
91
90
|
settings = {
|
|
92
91
|
"model": "intercept/model",
|
|
93
92
|
"providers": {
|
|
@@ -50,8 +50,7 @@ fi
|
|
|
50
50
|
class PiHarnessConfig(HarnessConfig):
|
|
51
51
|
version: PinnedVersion = "0.86.1"
|
|
52
52
|
"""Pi release to install, pinned for reproducibility."""
|
|
53
|
-
|
|
54
|
-
"""Model API transport."""
|
|
53
|
+
dialect: DialectName = "chat_completions"
|
|
55
54
|
supports_developer_role: bool | None = None
|
|
56
55
|
"""Override Pi's chat-completions role detection for custom model endpoints."""
|
|
57
56
|
|
|
@@ -118,10 +117,10 @@ class PiHarness(ACPHarness[PiHarnessConfig]):
|
|
|
118
117
|
"chat_completions": "openai-completions",
|
|
119
118
|
"responses": "openai-responses",
|
|
120
119
|
"anthropic_messages": "anthropic-messages",
|
|
121
|
-
}[self.config.
|
|
120
|
+
}[self.config.dialect]
|
|
122
121
|
base_url = (
|
|
123
122
|
endpoint.removesuffix("/v1")
|
|
124
|
-
if self.config.
|
|
123
|
+
if self.config.dialect == "anthropic_messages"
|
|
125
124
|
else endpoint
|
|
126
125
|
)
|
|
127
126
|
model_config = {
|
|
@@ -130,12 +129,12 @@ class PiHarness(ACPHarness[PiHarnessConfig]):
|
|
|
130
129
|
"input": ["text", "image"],
|
|
131
130
|
**(
|
|
132
131
|
{"compat": {"sessionAffinityFormat": "openai-nosession"}}
|
|
133
|
-
if self.config.
|
|
132
|
+
if self.config.dialect == "responses"
|
|
134
133
|
else {}
|
|
135
134
|
),
|
|
136
135
|
}
|
|
137
136
|
if (
|
|
138
|
-
self.config.
|
|
137
|
+
self.config.dialect == "chat_completions"
|
|
139
138
|
and self.config.supports_developer_role is not None
|
|
140
139
|
):
|
|
141
140
|
model_config["compat"] = {
|
{verifiers-0.4.1.dev46 → verifiers-0.4.1.dev47}/verifiers/v1/harnesses/prime_agent/harness.py
RENAMED
|
@@ -82,6 +82,8 @@ class PrimeAgentHarnessConfig(HarnessConfig):
|
|
|
82
82
|
|
|
83
83
|
autonomous: bool = False
|
|
84
84
|
"""Enable Prime Agent's autonomous continuation loop."""
|
|
85
|
+
# Over Responses it replays an earlier turn without its reasoning.
|
|
86
|
+
dialect: Literal["chat_completions", "anthropic_messages"] = "chat_completions"
|
|
85
87
|
|
|
86
88
|
|
|
87
89
|
class PrimeAgentHarness(ACPHarness[PrimeAgentHarnessConfig]):
|
|
@@ -209,8 +211,15 @@ class PrimeAgentHarness(ACPHarness[PrimeAgentHarnessConfig]):
|
|
|
209
211
|
models = {
|
|
210
212
|
"providers": {
|
|
211
213
|
PROVIDER: {
|
|
212
|
-
|
|
213
|
-
"
|
|
214
|
+
# Its Anthropic provider appends `/v1/messages` to the base URL.
|
|
215
|
+
"baseUrl": endpoint.removesuffix("/v1")
|
|
216
|
+
if self.config.dialect == "anthropic_messages"
|
|
217
|
+
else endpoint,
|
|
218
|
+
"api": {
|
|
219
|
+
"chat_completions": "openai-completions",
|
|
220
|
+
"responses": "openai-responses",
|
|
221
|
+
"anthropic_messages": "anthropic-messages",
|
|
222
|
+
}[self.config.dialect],
|
|
214
223
|
"apiKey": KEY_VAR,
|
|
215
224
|
"models": [
|
|
216
225
|
{
|
{verifiers-0.4.1.dev46 → verifiers-0.4.1.dev47}/verifiers/v1/harnesses/terminus_2/harness.py
RENAMED
|
@@ -1,5 +1,6 @@
|
|
|
1
1
|
import logging
|
|
2
2
|
from pathlib import Path
|
|
3
|
+
from typing import Literal
|
|
3
4
|
|
|
4
5
|
from verifiers.v1.clients import ModelContext
|
|
5
6
|
from verifiers.v1.configs.harness import HarnessConfig, PinnedVersion
|
|
@@ -13,6 +14,7 @@ logger = logging.getLogger(__name__)
|
|
|
13
14
|
|
|
14
15
|
|
|
15
16
|
class Terminus2HarnessConfig(HarnessConfig):
|
|
17
|
+
dialect: Literal["chat_completions"] = "chat_completions"
|
|
16
18
|
version: PinnedVersion = "0.23.0"
|
|
17
19
|
"""Harbor release to install, pinned for reproducibility."""
|
|
18
20
|
|
|
@@ -19,7 +19,7 @@ def drop_blank_text(message: Message) -> Message:
|
|
|
19
19
|
|
|
20
20
|
def strip_text(message: Message) -> Message:
|
|
21
21
|
"""Clients that store assistant text stripped, and pad a missing reasoning field
|
|
22
|
-
with a single space on replay."""
|
|
22
|
+
(or Anthropic thinking block) with a single space on replay."""
|
|
23
23
|
if not isinstance(message, AssistantMessage):
|
|
24
24
|
return message
|
|
25
25
|
update: dict = {}
|
|
@@ -27,4 +27,14 @@ def strip_text(message: Message) -> Message:
|
|
|
27
27
|
update["content"] = message.content.strip() or None
|
|
28
28
|
if message.reasoning_content is not None and not message.reasoning_content.strip():
|
|
29
29
|
update["reasoning_content"] = None
|
|
30
|
+
if message.provider_state and any(
|
|
31
|
+
_blank_thinking(item) for item in message.provider_state
|
|
32
|
+
):
|
|
33
|
+
update["provider_state"] = [
|
|
34
|
+
item for item in message.provider_state if not _blank_thinking(item)
|
|
35
|
+
] or None
|
|
30
36
|
return message.model_copy(update=update) if update else message
|
|
37
|
+
|
|
38
|
+
|
|
39
|
+
def _blank_thinking(item: dict) -> bool:
|
|
40
|
+
return item.get("type") == "thinking" and not str(item.get("thinking", "")).strip()
|
|
@@ -126,8 +126,8 @@ class Request(BaseModel):
|
|
|
126
126
|
FinishReason = Literal["stop", "length", "tool_calls"] | None
|
|
127
127
|
|
|
128
128
|
DialectName = Literal["chat_completions", "responses", "anthropic_messages"]
|
|
129
|
-
"""A model API wire format: a `Dialect.name`, and the values of harness `
|
|
130
|
-
|
|
129
|
+
"""A model API wire format: a `Dialect.name`, and the values of the harness `dialect`
|
|
130
|
+
setting."""
|
|
131
131
|
|
|
132
132
|
|
|
133
133
|
class Usage(BaseModel):
|
|
@@ -52,7 +52,8 @@ def narrow_plugin_field(
|
|
|
52
52
|
) -> None:
|
|
53
53
|
raw = data.get(field)
|
|
54
54
|
if isinstance(raw, BaseConfig):
|
|
55
|
-
|
|
55
|
+
# Unset fields take the concrete type's defaults, which may narrow the base's.
|
|
56
|
+
raw = raw.model_dump(exclude_unset=True)
|
|
56
57
|
raw = dict(raw or {})
|
|
57
58
|
ident = raw.get("id") or default_id
|
|
58
59
|
if not ident:
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
{verifiers-0.4.1.dev46 → verifiers-0.4.1.dev47}/tests/integration/fixtures/agent_user_harness.py
RENAMED
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
{verifiers-0.4.1.dev46 → verifiers-0.4.1.dev47}/tests/integration/fixtures/echo_acp_resume.py
RENAMED
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
{verifiers-0.4.1.dev46 → verifiers-0.4.1.dev47}/tests/integration/fixtures/network_policy.py
RENAMED
|
File without changes
|
|
File without changes
|
|
File without changes
|
{verifiers-0.4.1.dev46 → verifiers-0.4.1.dev47}/tests/integration/fixtures/skill_codeword.py
RENAMED
|
File without changes
|
|
File without changes
|
{verifiers-0.4.1.dev46 → verifiers-0.4.1.dev47}/tests/integration/fixtures/tool_response_image.py
RENAMED
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|