verifiers 0.3.2.dev115__tar.gz → 0.3.2.dev117__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.3.2.dev115 → verifiers-0.3.2.dev117}/PKG-INFO +1 -1
- {verifiers-0.3.2.dev115 → verifiers-0.3.2.dev117}/tests/v1/fixtures/echo_acp_resume_v1.py +4 -2
- {verifiers-0.3.2.dev115 → verifiers-0.3.2.dev117}/tests/v1/test_trace.py +7 -2
- {verifiers-0.3.2.dev115 → verifiers-0.3.2.dev117}/verifiers/v1/harnesses/browser_use/program.py +1 -1
- {verifiers-0.3.2.dev115 → verifiers-0.3.2.dev117}/verifiers/v1/harnesses/claude_code/harness.py +4 -2
- {verifiers-0.3.2.dev115 → verifiers-0.3.2.dev117}/verifiers/v1/harnesses/codex/harness.py +2 -2
- {verifiers-0.3.2.dev115 → verifiers-0.3.2.dev117}/verifiers/v1/harnesses/hermes_agent/harness.py +34 -9
- {verifiers-0.3.2.dev115 → verifiers-0.3.2.dev117}/verifiers/v1/harnesses/hermes_agent/program.py +2 -2
- {verifiers-0.3.2.dev115 → verifiers-0.3.2.dev117}/verifiers/v1/harnesses/kimi_code/harness.py +1 -1
- {verifiers-0.3.2.dev115 → verifiers-0.3.2.dev117}/verifiers/v1/harnesses/mini_swe_agent/program.py +1 -1
- {verifiers-0.3.2.dev115 → verifiers-0.3.2.dev117}/verifiers/v1/harnesses/openclaw/harness.py +3 -2
- {verifiers-0.3.2.dev115 → verifiers-0.3.2.dev117}/verifiers/v1/harnesses/pi/harness.py +2 -2
- {verifiers-0.3.2.dev115 → verifiers-0.3.2.dev117}/verifiers/v1/harnesses/prime_agent/harness.py +9 -9
- {verifiers-0.3.2.dev115 → verifiers-0.3.2.dev117}/verifiers/v1/harnesses/rlm/harness.py +1 -1
- {verifiers-0.3.2.dev115 → verifiers-0.3.2.dev117}/verifiers/v1/harnesses/terminus_2/harness.py +1 -1
- {verifiers-0.3.2.dev115 → verifiers-0.3.2.dev117}/verifiers/v1/rollout.py +3 -1
- {verifiers-0.3.2.dev115 → verifiers-0.3.2.dev117}/verifiers/v1/runtimes/prime.py +19 -8
- {verifiers-0.3.2.dev115 → verifiers-0.3.2.dev117}/verifiers/v1/task.py +3 -1
- {verifiers-0.3.2.dev115 → verifiers-0.3.2.dev117}/verifiers/v1/tasksets/harbor/taskset.py +7 -2
- {verifiers-0.3.2.dev115 → verifiers-0.3.2.dev117}/verifiers/v1/utils/artifacts.py +6 -3
- {verifiers-0.3.2.dev115 → verifiers-0.3.2.dev117}/.gitignore +0 -0
- {verifiers-0.3.2.dev115 → verifiers-0.3.2.dev117}/LICENSE +0 -0
- {verifiers-0.3.2.dev115 → verifiers-0.3.2.dev117}/README.md +0 -0
- {verifiers-0.3.2.dev115 → verifiers-0.3.2.dev117}/pyproject.toml +0 -0
- {verifiers-0.3.2.dev115 → verifiers-0.3.2.dev117}/tests/v1/conftest.py +0 -0
- {verifiers-0.3.2.dev115 → verifiers-0.3.2.dev117}/tests/v1/fixtures/counter_tool_v1.py +0 -0
- {verifiers-0.3.2.dev115 → verifiers-0.3.2.dev117}/tests/v1/fixtures/duet_v1.py +0 -0
- {verifiers-0.3.2.dev115 → verifiers-0.3.2.dev117}/tests/v1/fixtures/echo_agentic_v1.py +0 -0
- {verifiers-0.3.2.dev115 → verifiers-0.3.2.dev117}/tests/v1/fixtures/echo_tool_v1.py +0 -0
- {verifiers-0.3.2.dev115 → verifiers-0.3.2.dev117}/tests/v1/fixtures/echo_user_sim_v1.py +0 -0
- {verifiers-0.3.2.dev115 → verifiers-0.3.2.dev117}/tests/v1/fixtures/echo_v1.py +0 -0
- {verifiers-0.3.2.dev115 → verifiers-0.3.2.dev117}/tests/v1/fixtures/pyproject.toml +0 -0
- {verifiers-0.3.2.dev115 → verifiers-0.3.2.dev117}/tests/v1/fixtures/tool_response_image_v1.py +0 -0
- {verifiers-0.3.2.dev115 → verifiers-0.3.2.dev117}/tests/v1/test_color_codeword_tasks.py +0 -0
- {verifiers-0.3.2.dev115 → verifiers-0.3.2.dev117}/tests/v1/test_configs.py +0 -0
- {verifiers-0.3.2.dev115 → verifiers-0.3.2.dev117}/tests/v1/test_e2e.py +0 -0
- {verifiers-0.3.2.dev115 → verifiers-0.3.2.dev117}/tests/v1/test_envs.py +0 -0
- {verifiers-0.3.2.dev115 → verifiers-0.3.2.dev117}/tests/v1/test_graph.py +0 -0
- {verifiers-0.3.2.dev115 → verifiers-0.3.2.dev117}/tests/v1/test_judges.py +0 -0
- {verifiers-0.3.2.dev115 → verifiers-0.3.2.dev117}/tests/v1/test_platform_run.py +0 -0
- {verifiers-0.3.2.dev115 → verifiers-0.3.2.dev117}/tests/v1/test_scoring.py +0 -0
- {verifiers-0.3.2.dev115 → verifiers-0.3.2.dev117}/tests/v1/test_serve_delta.py +0 -0
- {verifiers-0.3.2.dev115 → verifiers-0.3.2.dev117}/tests/v1/test_taskset.py +0 -0
- {verifiers-0.3.2.dev115 → verifiers-0.3.2.dev117}/verifiers/__init__.py +0 -0
- {verifiers-0.3.2.dev115 → verifiers-0.3.2.dev117}/verifiers/cli/commands/init.py +0 -0
- {verifiers-0.3.2.dev115 → verifiers-0.3.2.dev117}/verifiers/v1/__init__.py +0 -0
- {verifiers-0.3.2.dev115 → verifiers-0.3.2.dev117}/verifiers/v1/acp/__init__.py +0 -0
- {verifiers-0.3.2.dev115 → verifiers-0.3.2.dev117}/verifiers/v1/acp/runner.py +0 -0
- {verifiers-0.3.2.dev115 → verifiers-0.3.2.dev117}/verifiers/v1/agent.py +0 -0
- {verifiers-0.3.2.dev115 → verifiers-0.3.2.dev117}/verifiers/v1/cli/__init__.py +0 -0
- {verifiers-0.3.2.dev115 → verifiers-0.3.2.dev117}/verifiers/v1/cli/dashboard/__init__.py +0 -0
- {verifiers-0.3.2.dev115 → verifiers-0.3.2.dev117}/verifiers/v1/cli/dashboard/base.py +0 -0
- {verifiers-0.3.2.dev115 → verifiers-0.3.2.dev117}/verifiers/v1/cli/dashboard/eval.py +0 -0
- {verifiers-0.3.2.dev115 → verifiers-0.3.2.dev117}/verifiers/v1/cli/dashboard/replay.py +0 -0
- {verifiers-0.3.2.dev115 → verifiers-0.3.2.dev117}/verifiers/v1/cli/dashboard/validate.py +0 -0
- {verifiers-0.3.2.dev115 → verifiers-0.3.2.dev117}/verifiers/v1/cli/debug.py +0 -0
- {verifiers-0.3.2.dev115 → verifiers-0.3.2.dev117}/verifiers/v1/cli/eval/__init__.py +0 -0
- {verifiers-0.3.2.dev115 → verifiers-0.3.2.dev117}/verifiers/v1/cli/eval/hint.py +0 -0
- {verifiers-0.3.2.dev115 → verifiers-0.3.2.dev117}/verifiers/v1/cli/eval/main.py +0 -0
- {verifiers-0.3.2.dev115 → verifiers-0.3.2.dev117}/verifiers/v1/cli/eval/resume.py +0 -0
- {verifiers-0.3.2.dev115 → verifiers-0.3.2.dev117}/verifiers/v1/cli/eval/runner.py +0 -0
- {verifiers-0.3.2.dev115 → verifiers-0.3.2.dev117}/verifiers/v1/cli/gepa.py +0 -0
- {verifiers-0.3.2.dev115 → verifiers-0.3.2.dev117}/verifiers/v1/cli/init.py +0 -0
- {verifiers-0.3.2.dev115 → verifiers-0.3.2.dev117}/verifiers/v1/cli/output.py +0 -0
- {verifiers-0.3.2.dev115 → verifiers-0.3.2.dev117}/verifiers/v1/cli/replay.py +0 -0
- {verifiers-0.3.2.dev115 → verifiers-0.3.2.dev117}/verifiers/v1/cli/resolve.py +0 -0
- {verifiers-0.3.2.dev115 → verifiers-0.3.2.dev117}/verifiers/v1/cli/resume.py +0 -0
- {verifiers-0.3.2.dev115 → verifiers-0.3.2.dev117}/verifiers/v1/cli/validate.py +0 -0
- {verifiers-0.3.2.dev115 → verifiers-0.3.2.dev117}/verifiers/v1/clients/__init__.py +0 -0
- {verifiers-0.3.2.dev115 → verifiers-0.3.2.dev117}/verifiers/v1/clients/base.py +0 -0
- {verifiers-0.3.2.dev115 → verifiers-0.3.2.dev117}/verifiers/v1/clients/client.py +0 -0
- {verifiers-0.3.2.dev115 → verifiers-0.3.2.dev117}/verifiers/v1/clients/eval.py +0 -0
- {verifiers-0.3.2.dev115 → verifiers-0.3.2.dev117}/verifiers/v1/clients/train.py +0 -0
- {verifiers-0.3.2.dev115 → verifiers-0.3.2.dev117}/verifiers/v1/configs/__init__.py +0 -0
- {verifiers-0.3.2.dev115 → verifiers-0.3.2.dev117}/verifiers/v1/configs/agent.py +0 -0
- {verifiers-0.3.2.dev115 → verifiers-0.3.2.dev117}/verifiers/v1/configs/cli/__init__.py +0 -0
- {verifiers-0.3.2.dev115 → verifiers-0.3.2.dev117}/verifiers/v1/configs/cli/debug.py +0 -0
- {verifiers-0.3.2.dev115 → verifiers-0.3.2.dev117}/verifiers/v1/configs/cli/env.py +0 -0
- {verifiers-0.3.2.dev115 → verifiers-0.3.2.dev117}/verifiers/v1/configs/cli/eval.py +0 -0
- {verifiers-0.3.2.dev115 → verifiers-0.3.2.dev117}/verifiers/v1/configs/cli/init.py +0 -0
- {verifiers-0.3.2.dev115 → verifiers-0.3.2.dev117}/verifiers/v1/configs/cli/replay.py +0 -0
- {verifiers-0.3.2.dev115 → verifiers-0.3.2.dev117}/verifiers/v1/configs/cli/validate.py +0 -0
- {verifiers-0.3.2.dev115 → verifiers-0.3.2.dev117}/verifiers/v1/configs/client.py +0 -0
- {verifiers-0.3.2.dev115 → verifiers-0.3.2.dev117}/verifiers/v1/configs/env.py +0 -0
- {verifiers-0.3.2.dev115 → verifiers-0.3.2.dev117}/verifiers/v1/configs/harness.py +0 -0
- {verifiers-0.3.2.dev115 → verifiers-0.3.2.dev117}/verifiers/v1/configs/judge.py +0 -0
- {verifiers-0.3.2.dev115 → verifiers-0.3.2.dev117}/verifiers/v1/configs/retries.py +0 -0
- {verifiers-0.3.2.dev115 → verifiers-0.3.2.dev117}/verifiers/v1/configs/runtime.py +0 -0
- {verifiers-0.3.2.dev115 → verifiers-0.3.2.dev117}/verifiers/v1/configs/serve.py +0 -0
- {verifiers-0.3.2.dev115 → verifiers-0.3.2.dev117}/verifiers/v1/configs/task.py +0 -0
- {verifiers-0.3.2.dev115 → verifiers-0.3.2.dev117}/verifiers/v1/configs/taskset.py +0 -0
- {verifiers-0.3.2.dev115 → verifiers-0.3.2.dev117}/verifiers/v1/dialects/__init__.py +0 -0
- {verifiers-0.3.2.dev115 → verifiers-0.3.2.dev117}/verifiers/v1/dialects/anthropic.py +0 -0
- {verifiers-0.3.2.dev115 → verifiers-0.3.2.dev117}/verifiers/v1/dialects/base.py +0 -0
- {verifiers-0.3.2.dev115 → verifiers-0.3.2.dev117}/verifiers/v1/dialects/chat.py +0 -0
- {verifiers-0.3.2.dev115 → verifiers-0.3.2.dev117}/verifiers/v1/dialects/responses.py +0 -0
- {verifiers-0.3.2.dev115 → verifiers-0.3.2.dev117}/verifiers/v1/env.py +0 -0
- {verifiers-0.3.2.dev115 → verifiers-0.3.2.dev117}/verifiers/v1/envs/__init__.py +0 -0
- {verifiers-0.3.2.dev115 → verifiers-0.3.2.dev117}/verifiers/v1/envs/agentic_judge/__init__.py +0 -0
- {verifiers-0.3.2.dev115 → verifiers-0.3.2.dev117}/verifiers/v1/envs/agentic_judge/env.py +0 -0
- {verifiers-0.3.2.dev115 → verifiers-0.3.2.dev117}/verifiers/v1/envs/best_of_n/__init__.py +0 -0
- {verifiers-0.3.2.dev115 → verifiers-0.3.2.dev117}/verifiers/v1/envs/best_of_n/env.py +0 -0
- {verifiers-0.3.2.dev115 → verifiers-0.3.2.dev117}/verifiers/v1/envs/isolated_verifier/__init__.py +0 -0
- {verifiers-0.3.2.dev115 → verifiers-0.3.2.dev117}/verifiers/v1/envs/isolated_verifier/env.py +0 -0
- {verifiers-0.3.2.dev115 → verifiers-0.3.2.dev117}/verifiers/v1/envs/shared_agentic_judge/__init__.py +0 -0
- {verifiers-0.3.2.dev115 → verifiers-0.3.2.dev117}/verifiers/v1/envs/single_agent/__init__.py +0 -0
- {verifiers-0.3.2.dev115 → verifiers-0.3.2.dev117}/verifiers/v1/envs/single_agent/env.py +0 -0
- {verifiers-0.3.2.dev115 → verifiers-0.3.2.dev117}/verifiers/v1/envs/user_sim/__init__.py +0 -0
- {verifiers-0.3.2.dev115 → verifiers-0.3.2.dev117}/verifiers/v1/envs/user_sim/env.py +0 -0
- {verifiers-0.3.2.dev115 → verifiers-0.3.2.dev117}/verifiers/v1/episode.py +0 -0
- {verifiers-0.3.2.dev115 → verifiers-0.3.2.dev117}/verifiers/v1/errors.py +0 -0
- {verifiers-0.3.2.dev115 → verifiers-0.3.2.dev117}/verifiers/v1/gepa/__init__.py +0 -0
- {verifiers-0.3.2.dev115 → verifiers-0.3.2.dev117}/verifiers/v1/gepa/adapter.py +0 -0
- {verifiers-0.3.2.dev115 → verifiers-0.3.2.dev117}/verifiers/v1/gepa/config.py +0 -0
- {verifiers-0.3.2.dev115 → verifiers-0.3.2.dev117}/verifiers/v1/gepa/dataset.py +0 -0
- {verifiers-0.3.2.dev115 → verifiers-0.3.2.dev117}/verifiers/v1/gepa/reflection.py +0 -0
- {verifiers-0.3.2.dev115 → verifiers-0.3.2.dev117}/verifiers/v1/gepa/runner.py +0 -0
- {verifiers-0.3.2.dev115 → verifiers-0.3.2.dev117}/verifiers/v1/graph.py +0 -0
- {verifiers-0.3.2.dev115 → verifiers-0.3.2.dev117}/verifiers/v1/harness.py +0 -0
- {verifiers-0.3.2.dev115 → verifiers-0.3.2.dev117}/verifiers/v1/harnesses/__init__.py +0 -0
- {verifiers-0.3.2.dev115 → verifiers-0.3.2.dev117}/verifiers/v1/harnesses/bash/__init__.py +0 -0
- {verifiers-0.3.2.dev115 → verifiers-0.3.2.dev117}/verifiers/v1/harnesses/bash/harness.py +0 -0
- {verifiers-0.3.2.dev115 → verifiers-0.3.2.dev117}/verifiers/v1/harnesses/browser_use/__init__.py +0 -0
- {verifiers-0.3.2.dev115 → verifiers-0.3.2.dev117}/verifiers/v1/harnesses/browser_use/harness.py +0 -0
- {verifiers-0.3.2.dev115 → verifiers-0.3.2.dev117}/verifiers/v1/harnesses/claude_code/__init__.py +0 -0
- {verifiers-0.3.2.dev115 → verifiers-0.3.2.dev117}/verifiers/v1/harnesses/codex/__init__.py +0 -0
- {verifiers-0.3.2.dev115 → verifiers-0.3.2.dev117}/verifiers/v1/harnesses/hermes_agent/__init__.py +0 -0
- {verifiers-0.3.2.dev115 → verifiers-0.3.2.dev117}/verifiers/v1/harnesses/kimi_code/__init__.py +0 -0
- {verifiers-0.3.2.dev115 → verifiers-0.3.2.dev117}/verifiers/v1/harnesses/mini_swe_agent/__init__.py +0 -0
- {verifiers-0.3.2.dev115 → verifiers-0.3.2.dev117}/verifiers/v1/harnesses/mini_swe_agent/harness.py +0 -0
- {verifiers-0.3.2.dev115 → verifiers-0.3.2.dev117}/verifiers/v1/harnesses/node.py +0 -0
- {verifiers-0.3.2.dev115 → verifiers-0.3.2.dev117}/verifiers/v1/harnesses/null/__init__.py +0 -0
- {verifiers-0.3.2.dev115 → verifiers-0.3.2.dev117}/verifiers/v1/harnesses/null/harness.py +0 -0
- {verifiers-0.3.2.dev115 → verifiers-0.3.2.dev117}/verifiers/v1/harnesses/openclaw/__init__.py +0 -0
- {verifiers-0.3.2.dev115 → verifiers-0.3.2.dev117}/verifiers/v1/harnesses/pi/__init__.py +0 -0
- {verifiers-0.3.2.dev115 → verifiers-0.3.2.dev117}/verifiers/v1/harnesses/prime_agent/__init__.py +0 -0
- {verifiers-0.3.2.dev115 → verifiers-0.3.2.dev117}/verifiers/v1/harnesses/rlm/__init__.py +0 -0
- {verifiers-0.3.2.dev115 → verifiers-0.3.2.dev117}/verifiers/v1/harnesses/terminus_2/__init__.py +0 -0
- {verifiers-0.3.2.dev115 → verifiers-0.3.2.dev117}/verifiers/v1/harnesses/terminus_2/program.py +0 -0
- {verifiers-0.3.2.dev115 → verifiers-0.3.2.dev117}/verifiers/v1/harnesses/utils/__init__.py +0 -0
- {verifiers-0.3.2.dev115 → verifiers-0.3.2.dev117}/verifiers/v1/harnesses/utils/compaction.py +0 -0
- {verifiers-0.3.2.dev115 → verifiers-0.3.2.dev117}/verifiers/v1/harnesses/utils/core.py +0 -0
- {verifiers-0.3.2.dev115 → verifiers-0.3.2.dev117}/verifiers/v1/harnesses/utils/install.py +0 -0
- {verifiers-0.3.2.dev115 → verifiers-0.3.2.dev117}/verifiers/v1/harnesses/utils/launch.py +0 -0
- {verifiers-0.3.2.dev115 → verifiers-0.3.2.dev117}/verifiers/v1/harnesses/utils/mcp.py +0 -0
- {verifiers-0.3.2.dev115 → verifiers-0.3.2.dev117}/verifiers/v1/interception/__init__.py +0 -0
- {verifiers-0.3.2.dev115 → verifiers-0.3.2.dev117}/verifiers/v1/interception/base.py +0 -0
- {verifiers-0.3.2.dev115 → verifiers-0.3.2.dev117}/verifiers/v1/interception/pool.py +0 -0
- {verifiers-0.3.2.dev115 → verifiers-0.3.2.dev117}/verifiers/v1/interception/server.py +0 -0
- {verifiers-0.3.2.dev115 → verifiers-0.3.2.dev117}/verifiers/v1/interception/tool.py +0 -0
- {verifiers-0.3.2.dev115 → verifiers-0.3.2.dev117}/verifiers/v1/interception/tunnel/__init__.py +0 -0
- {verifiers-0.3.2.dev115 → verifiers-0.3.2.dev117}/verifiers/v1/interception/tunnel/base.py +0 -0
- {verifiers-0.3.2.dev115 → verifiers-0.3.2.dev117}/verifiers/v1/interception/tunnel/custom.py +0 -0
- {verifiers-0.3.2.dev115 → verifiers-0.3.2.dev117}/verifiers/v1/interception/tunnel/prime.py +0 -0
- {verifiers-0.3.2.dev115 → verifiers-0.3.2.dev117}/verifiers/v1/judge.py +0 -0
- {verifiers-0.3.2.dev115 → verifiers-0.3.2.dev117}/verifiers/v1/judges/__init__.py +0 -0
- {verifiers-0.3.2.dev115 → verifiers-0.3.2.dev117}/verifiers/v1/judges/reference.py +0 -0
- {verifiers-0.3.2.dev115 → verifiers-0.3.2.dev117}/verifiers/v1/judges/reference.txt +0 -0
- {verifiers-0.3.2.dev115 → verifiers-0.3.2.dev117}/verifiers/v1/judges/rubric.py +0 -0
- {verifiers-0.3.2.dev115 → verifiers-0.3.2.dev117}/verifiers/v1/judges/rubric.txt +0 -0
- {verifiers-0.3.2.dev115 → verifiers-0.3.2.dev117}/verifiers/v1/mcp/__init__.py +0 -0
- {verifiers-0.3.2.dev115 → verifiers-0.3.2.dev117}/verifiers/v1/mcp/launch.py +0 -0
- {verifiers-0.3.2.dev115 → verifiers-0.3.2.dev117}/verifiers/v1/mcp/server.py +0 -0
- {verifiers-0.3.2.dev115 → verifiers-0.3.2.dev117}/verifiers/v1/mcp/toolset.py +0 -0
- {verifiers-0.3.2.dev115 → verifiers-0.3.2.dev117}/verifiers/v1/runtimes/__init__.py +0 -0
- {verifiers-0.3.2.dev115 → verifiers-0.3.2.dev117}/verifiers/v1/runtimes/apptainer.py +0 -0
- {verifiers-0.3.2.dev115 → verifiers-0.3.2.dev117}/verifiers/v1/runtimes/base.py +0 -0
- {verifiers-0.3.2.dev115 → verifiers-0.3.2.dev117}/verifiers/v1/runtimes/container.py +0 -0
- {verifiers-0.3.2.dev115 → verifiers-0.3.2.dev117}/verifiers/v1/runtimes/docker/__init__.py +0 -0
- {verifiers-0.3.2.dev115 → verifiers-0.3.2.dev117}/verifiers/v1/runtimes/docker/egress.py +0 -0
- {verifiers-0.3.2.dev115 → verifiers-0.3.2.dev117}/verifiers/v1/runtimes/limiters.py +0 -0
- {verifiers-0.3.2.dev115 → verifiers-0.3.2.dev117}/verifiers/v1/runtimes/modal.py +0 -0
- {verifiers-0.3.2.dev115 → verifiers-0.3.2.dev117}/verifiers/v1/runtimes/subprocess.py +0 -0
- {verifiers-0.3.2.dev115 → verifiers-0.3.2.dev117}/verifiers/v1/semantic.py +0 -0
- {verifiers-0.3.2.dev115 → verifiers-0.3.2.dev117}/verifiers/v1/serve/__init__.py +0 -0
- {verifiers-0.3.2.dev115 → verifiers-0.3.2.dev117}/verifiers/v1/serve/client.py +0 -0
- {verifiers-0.3.2.dev115 → verifiers-0.3.2.dev117}/verifiers/v1/serve/delta.py +0 -0
- {verifiers-0.3.2.dev115 → verifiers-0.3.2.dev117}/verifiers/v1/serve/encoding.py +0 -0
- {verifiers-0.3.2.dev115 → verifiers-0.3.2.dev117}/verifiers/v1/serve/pool.py +0 -0
- {verifiers-0.3.2.dev115 → verifiers-0.3.2.dev117}/verifiers/v1/serve/server.py +0 -0
- {verifiers-0.3.2.dev115 → verifiers-0.3.2.dev117}/verifiers/v1/serve/types.py +0 -0
- {verifiers-0.3.2.dev115 → verifiers-0.3.2.dev117}/verifiers/v1/session.py +0 -0
- {verifiers-0.3.2.dev115 → verifiers-0.3.2.dev117}/verifiers/v1/state.py +0 -0
- {verifiers-0.3.2.dev115 → verifiers-0.3.2.dev117}/verifiers/v1/taskset.py +0 -0
- {verifiers-0.3.2.dev115 → verifiers-0.3.2.dev117}/verifiers/v1/tasksets/__init__.py +0 -0
- {verifiers-0.3.2.dev115 → verifiers-0.3.2.dev117}/verifiers/v1/tasksets/harbor/__init__.py +0 -0
- {verifiers-0.3.2.dev115 → verifiers-0.3.2.dev117}/verifiers/v1/tasksets/harbor/env.py +0 -0
- {verifiers-0.3.2.dev115 → verifiers-0.3.2.dev117}/verifiers/v1/tasksets/harbor/toolset.py +0 -0
- {verifiers-0.3.2.dev115 → verifiers-0.3.2.dev117}/verifiers/v1/tasksets/lean/__init__.py +0 -0
- {verifiers-0.3.2.dev115 → verifiers-0.3.2.dev117}/verifiers/v1/tasksets/lean/scoring.py +0 -0
- {verifiers-0.3.2.dev115 → verifiers-0.3.2.dev117}/verifiers/v1/tasksets/lean/taskset.py +0 -0
- {verifiers-0.3.2.dev115 → verifiers-0.3.2.dev117}/verifiers/v1/tasksets/nemo_gym/__init__.py +0 -0
- {verifiers-0.3.2.dev115 → verifiers-0.3.2.dev117}/verifiers/v1/tasksets/nemo_gym/response.py +0 -0
- {verifiers-0.3.2.dev115 → verifiers-0.3.2.dev117}/verifiers/v1/tasksets/nemo_gym/server.py +0 -0
- {verifiers-0.3.2.dev115 → verifiers-0.3.2.dev117}/verifiers/v1/tasksets/nemo_gym/taskset.py +0 -0
- {verifiers-0.3.2.dev115 → verifiers-0.3.2.dev117}/verifiers/v1/tasksets/nemo_gym/toolset.py +0 -0
- {verifiers-0.3.2.dev115 → verifiers-0.3.2.dev117}/verifiers/v1/tasksets/openenv/__init__.py +0 -0
- {verifiers-0.3.2.dev115 → verifiers-0.3.2.dev117}/verifiers/v1/tasksets/openenv/taskset.py +0 -0
- {verifiers-0.3.2.dev115 → verifiers-0.3.2.dev117}/verifiers/v1/tasksets/textarena/__init__.py +0 -0
- {verifiers-0.3.2.dev115 → verifiers-0.3.2.dev117}/verifiers/v1/tasksets/textarena/taskset.py +0 -0
- {verifiers-0.3.2.dev115 → verifiers-0.3.2.dev117}/verifiers/v1/trace.py +0 -0
- {verifiers-0.3.2.dev115 → verifiers-0.3.2.dev117}/verifiers/v1/types.py +0 -0
- {verifiers-0.3.2.dev115 → verifiers-0.3.2.dev117}/verifiers/v1/utils/__init__.py +0 -0
- {verifiers-0.3.2.dev115 → verifiers-0.3.2.dev117}/verifiers/v1/utils/aio.py +0 -0
- {verifiers-0.3.2.dev115 → verifiers-0.3.2.dev117}/verifiers/v1/utils/compile.py +0 -0
- {verifiers-0.3.2.dev115 → verifiers-0.3.2.dev117}/verifiers/v1/utils/decorators.py +0 -0
- {verifiers-0.3.2.dev115 → verifiers-0.3.2.dev117}/verifiers/v1/utils/format.py +0 -0
- {verifiers-0.3.2.dev115 → verifiers-0.3.2.dev117}/verifiers/v1/utils/generic.py +0 -0
- {verifiers-0.3.2.dev115 → verifiers-0.3.2.dev117}/verifiers/v1/utils/git.py +0 -0
- {verifiers-0.3.2.dev115 → verifiers-0.3.2.dev117}/verifiers/v1/utils/image.py +0 -0
- {verifiers-0.3.2.dev115 → verifiers-0.3.2.dev117}/verifiers/v1/utils/interrupt.py +0 -0
- {verifiers-0.3.2.dev115 → verifiers-0.3.2.dev117}/verifiers/v1/utils/loaders.py +0 -0
- {verifiers-0.3.2.dev115 → verifiers-0.3.2.dev117}/verifiers/v1/utils/logging.py +0 -0
- {verifiers-0.3.2.dev115 → verifiers-0.3.2.dev117}/verifiers/v1/utils/memory.py +0 -0
- {verifiers-0.3.2.dev115 → verifiers-0.3.2.dev117}/verifiers/v1/utils/paths.py +0 -0
- {verifiers-0.3.2.dev115 → verifiers-0.3.2.dev117}/verifiers/v1/utils/platform.py +0 -0
- {verifiers-0.3.2.dev115 → verifiers-0.3.2.dev117}/verifiers/v1/utils/prime.py +0 -0
- {verifiers-0.3.2.dev115 → verifiers-0.3.2.dev117}/verifiers/v1/utils/retries.py +0 -0
- {verifiers-0.3.2.dev115 → verifiers-0.3.2.dev117}/verifiers/v1/utils/score.py +0 -0
- {verifiers-0.3.2.dev115 → verifiers-0.3.2.dev117}/verifiers/v1/utils/version.py +0 -0
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
Metadata-Version: 2.5
|
|
2
2
|
Name: verifiers
|
|
3
|
-
Version: 0.3.2.
|
|
3
|
+
Version: 0.3.2.dev117
|
|
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
|
|
@@ -53,13 +53,15 @@ class ACPResumeEnv(vf.SingleAgentEnv):
|
|
|
53
53
|
async def run(self, task, agents):
|
|
54
54
|
async with agents.agent.interaction(task) as interaction:
|
|
55
55
|
first = await interaction.turn(
|
|
56
|
-
f"Remember the codeword {CODEWORD}
|
|
56
|
+
f"Remember the codeword {CODEWORD} for this conversation only. "
|
|
57
|
+
"Do not call tools or store it in persistent memory. Reply with exactly READY."
|
|
57
58
|
)
|
|
58
59
|
segments = [first]
|
|
59
60
|
if not first.terminated:
|
|
60
61
|
segments.append(
|
|
61
62
|
await interaction.turn(
|
|
62
|
-
"
|
|
63
|
+
"Use your tools or pre-imported Python skills to call `resume`'s "
|
|
64
|
+
"`recall` with the "
|
|
63
65
|
"codeword from my previous message, then reply with exactly the "
|
|
64
66
|
"tool result."
|
|
65
67
|
)
|
|
@@ -10,6 +10,7 @@ import pytest
|
|
|
10
10
|
|
|
11
11
|
import verifiers.v1 as vf
|
|
12
12
|
from verifiers.v1.agent import Interaction
|
|
13
|
+
from verifiers.v1.cli.output import write_episode
|
|
13
14
|
from verifiers.v1.graph import MessageNode
|
|
14
15
|
from verifiers.v1.harnesses.rlm.harness import (
|
|
15
16
|
RLM_SESSION_METADATA_KEY,
|
|
@@ -144,13 +145,13 @@ def test_bare_trace_round_trip():
|
|
|
144
145
|
assert rt.reward == 0.0 and rt.errors == []
|
|
145
146
|
|
|
146
147
|
|
|
147
|
-
def test_custom_task_state_round_trip():
|
|
148
|
+
def test_custom_task_state_round_trip(tmp_path):
|
|
148
149
|
# Custom data and state round-trip into the same parameterization. Data fields are
|
|
149
150
|
# typed (not just `model_extra`); `state` is runtime-only and never crosses the wire.
|
|
150
151
|
tr = vf.Trace[MyTask, MyState](
|
|
151
152
|
agent=vf.AgentInfo(config=vf.AgentConfig()),
|
|
152
153
|
task=vf.TraceTask(type="MyTask", data=MyTask(idx=0, prompt="q", answer="gold")),
|
|
153
|
-
state=MyState(score=7),
|
|
154
|
+
state=MyState(score=7, artifacts={"/artifact.bin": b"\xff\x00\xfe"}),
|
|
154
155
|
nodes=[
|
|
155
156
|
MessageNode(parent=None, message=UserMessage(content="q"), sampled=False),
|
|
156
157
|
MessageNode(parent=0, message=AssistantMessage(content="a"), sampled=True),
|
|
@@ -167,6 +168,10 @@ def test_custom_task_state_round_trip():
|
|
|
167
168
|
assert rt.task.type == "MyTask" # the producing class's name survives the wire
|
|
168
169
|
assert rt.num_turns == 1 and rt.num_branches == 1
|
|
169
170
|
assert rt.reward == 0.5 # property recomputed from `rewards`
|
|
171
|
+
write_episode(tmp_path, vf.Episode(task=tr.task, traces=[tr], ok=True))
|
|
172
|
+
saved = json.loads((tmp_path / "traces.jsonl").read_bytes())
|
|
173
|
+
assert "state" not in saved["traces"][0]
|
|
174
|
+
assert tr.state.artifacts["/artifact.bin"] == b"\xff\x00\xfe"
|
|
170
175
|
|
|
171
176
|
|
|
172
177
|
def test_wire_trace_round_trip():
|
{verifiers-0.3.2.dev115 → verifiers-0.3.2.dev117}/verifiers/v1/harnesses/claude_code/harness.py
RENAMED
|
@@ -11,7 +11,7 @@ from verifiers.v1.trace import Trace
|
|
|
11
11
|
|
|
12
12
|
CLAUDE_ACP_DIR = "/var/tmp/vf-claude-agent-acp-{version}-{acp_version}"
|
|
13
13
|
PACKAGES_DIR = f"{CLAUDE_ACP_DIR}/packages"
|
|
14
|
-
ACP_VERSION = "0.
|
|
14
|
+
ACP_VERSION = "0.79.0"
|
|
15
15
|
CLAUDE_BIN = f"{PACKAGES_DIR}/node_modules/.bin/claude"
|
|
16
16
|
ACP_BIN = f"{PACKAGES_DIR}/node_modules/.bin/claude-agent-acp"
|
|
17
17
|
CLAUDE_CONFIG_ROOT = ".vf-claude"
|
|
@@ -28,7 +28,7 @@ touch {ready}
|
|
|
28
28
|
|
|
29
29
|
|
|
30
30
|
class ClaudeCodeHarnessConfig(HarnessConfig):
|
|
31
|
-
version: PinnedVersion = "2.1.
|
|
31
|
+
version: PinnedVersion = "2.1.278"
|
|
32
32
|
"""Claude Code release to install, pinned for reproducibility."""
|
|
33
33
|
|
|
34
34
|
|
|
@@ -79,6 +79,8 @@ class ClaudeCodeHarness(ACPHarness[ClaudeCodeHarnessConfig]):
|
|
|
79
79
|
"options": {
|
|
80
80
|
"strictMcpConfig": True,
|
|
81
81
|
"disallowedTools": self.config.disabled_tools or [],
|
|
82
|
+
# A supplied title prevents the adapter's background title-model call.
|
|
83
|
+
"extraArgs": {"name": trace.id},
|
|
82
84
|
}
|
|
83
85
|
},
|
|
84
86
|
**({"systemPrompt": {"append": system_prompt}} if system_prompt else {}),
|
|
@@ -19,7 +19,7 @@ logger = logging.getLogger(__name__)
|
|
|
19
19
|
|
|
20
20
|
CODEX_DIR = "/var/tmp/vf-codex-{version}-{acp_version}"
|
|
21
21
|
PACKAGES_DIR = f"{CODEX_DIR}/acp"
|
|
22
|
-
ACP_VERSION = "1.
|
|
22
|
+
ACP_VERSION = "1.12.0"
|
|
23
23
|
CODEX_BIN = f"{PACKAGES_DIR}/node_modules/.bin/codex"
|
|
24
24
|
ACP_BIN = f"{PACKAGES_DIR}/node_modules/.bin/codex-acp"
|
|
25
25
|
INSTALL = r"""
|
|
@@ -35,7 +35,7 @@ touch {ready}
|
|
|
35
35
|
|
|
36
36
|
|
|
37
37
|
class CodexHarnessConfig(HarnessConfig):
|
|
38
|
-
version: PinnedVersion = "0.
|
|
38
|
+
version: PinnedVersion = "0.155.1"
|
|
39
39
|
"""Codex release to install, pinned for reproducibility."""
|
|
40
40
|
multi_agent: bool = False
|
|
41
41
|
"""Enable Codex's native multi-agent v2 tools."""
|
{verifiers-0.3.2.dev115 → verifiers-0.3.2.dev117}/verifiers/v1/harnesses/hermes_agent/harness.py
RENAMED
|
@@ -6,17 +6,28 @@ from pathlib import Path
|
|
|
6
6
|
from verifiers.v1.acp import ACPConfig, ACPHarness
|
|
7
7
|
from verifiers.v1.clients import ModelContext
|
|
8
8
|
from verifiers.v1.configs.harness import HarnessConfig, PinnedVersion
|
|
9
|
-
from verifiers.v1.harnesses.utils.install import remove_dir
|
|
9
|
+
from verifiers.v1.harnesses.utils.install import ensure_installed, remove_dir
|
|
10
10
|
from verifiers.v1.runtimes import Runtime
|
|
11
|
+
from verifiers.v1.runtimes.base import _ENSURE_UV
|
|
11
12
|
from verifiers.v1.task import TaskData
|
|
12
13
|
from verifiers.v1.trace import Trace
|
|
13
14
|
|
|
14
15
|
PROGRAM_SOURCE = (Path(__file__).resolve().parent / "program.py").read_text()
|
|
16
|
+
HERMES_DIR = "/var/tmp/vf-hermes-agent-{version}"
|
|
17
|
+
INSTALL = f"""
|
|
18
|
+
set -e
|
|
19
|
+
{_ENSURE_UV}
|
|
20
|
+
command -v curl >/dev/null || (apt-get update -qq && apt-get install -y -qq curl ca-certificates >/dev/null)
|
|
21
|
+
curl -fsSL "https://github.com/NousResearch/hermes-agent/archive/refs/tags/$VF_HERMES_VERSION.tar.gz" \\
|
|
22
|
+
| tar -xz --strip-components=1 -C "$VF_HERMES_DIR"
|
|
23
|
+
uv sync --project "$VF_HERMES_DIR" --locked --no-dev --extra acp --extra mcp
|
|
24
|
+
touch "$VF_HERMES_DIR/.ready"
|
|
25
|
+
"""
|
|
15
26
|
|
|
16
27
|
|
|
17
28
|
class HermesAgentHarnessConfig(HarnessConfig):
|
|
18
|
-
version: PinnedVersion = "
|
|
19
|
-
"""Hermes Agent release to install, pinned for reproducibility."""
|
|
29
|
+
version: PinnedVersion = "v2026.9.14"
|
|
30
|
+
"""Hermes Agent Git release tag to install, pinned for reproducibility."""
|
|
20
31
|
use_bundled_skill: bool = False
|
|
21
32
|
"""Enable Hermes Agent's bundled skill catalog in addition to uploaded skills."""
|
|
22
33
|
|
|
@@ -27,9 +38,20 @@ class HermesAgentHarness(ACPHarness[HermesAgentHarnessConfig]):
|
|
|
27
38
|
SUPPORTS_SKILLS = True
|
|
28
39
|
|
|
29
40
|
async def setup(self, runtime: Runtime) -> None:
|
|
30
|
-
|
|
31
|
-
|
|
32
|
-
|
|
41
|
+
# Hermes needs its source-tree assets and supports editable installs only.
|
|
42
|
+
directory = HERMES_DIR.format(version=self.config.version)
|
|
43
|
+
await ensure_installed(
|
|
44
|
+
runtime,
|
|
45
|
+
directory=directory,
|
|
46
|
+
ready=f"test -f {directory}/.ready",
|
|
47
|
+
install=INSTALL,
|
|
48
|
+
env={
|
|
49
|
+
**self.config.resolved_env,
|
|
50
|
+
"VF_HERMES_DIR": directory,
|
|
51
|
+
"VF_HERMES_VERSION": self.config.version,
|
|
52
|
+
},
|
|
53
|
+
label="Hermes Agent",
|
|
54
|
+
shell=("bash", "-o", "pipefail", "-c"),
|
|
33
55
|
)
|
|
34
56
|
await super().setup(runtime)
|
|
35
57
|
|
|
@@ -87,9 +109,12 @@ class HermesAgentHarness(ACPHarness[HermesAgentHarnessConfig]):
|
|
|
87
109
|
system_prompt, prompt = self.resolve_prompt(data)
|
|
88
110
|
return ACPConfig(
|
|
89
111
|
env=env,
|
|
90
|
-
command=
|
|
91
|
-
|
|
92
|
-
|
|
112
|
+
command=[
|
|
113
|
+
f"{HERMES_DIR.format(version=self.config.version)}/.venv/bin/python",
|
|
114
|
+
"-P", # Keep task files from shadowing installed Hermes modules.
|
|
115
|
+
"-c",
|
|
116
|
+
PROGRAM_SOURCE,
|
|
117
|
+
],
|
|
93
118
|
prompt=prompt,
|
|
94
119
|
system_prompt=system_prompt,
|
|
95
120
|
)
|
{verifiers-0.3.2.dev115 → verifiers-0.3.2.dev117}/verifiers/v1/harnesses/hermes_agent/program.py
RENAMED
|
@@ -1,8 +1,8 @@
|
|
|
1
1
|
# /// script
|
|
2
2
|
# requires-python = ">=3.11,<3.14"
|
|
3
|
-
# dependencies = [
|
|
3
|
+
# dependencies = []
|
|
4
4
|
# ///
|
|
5
|
-
"""Start Hermes Agent's native ACP server."""
|
|
5
|
+
"""Start Hermes Agent's native ACP server in its installed project environment."""
|
|
6
6
|
|
|
7
7
|
import os
|
|
8
8
|
|
{verifiers-0.3.2.dev115 → verifiers-0.3.2.dev117}/verifiers/v1/harnesses/kimi_code/harness.py
RENAMED
|
@@ -37,7 +37,7 @@ env \
|
|
|
37
37
|
|
|
38
38
|
|
|
39
39
|
class KimiCodeHarnessConfig(HarnessConfig):
|
|
40
|
-
version: PinnedVersion = "0.
|
|
40
|
+
version: PinnedVersion = "2.0.2"
|
|
41
41
|
"""Kimi Code release to install, pinned for reproducibility."""
|
|
42
42
|
transport: Literal["chat_completions", "responses", "anthropic_messages"] = (
|
|
43
43
|
"chat_completions"
|
{verifiers-0.3.2.dev115 → verifiers-0.3.2.dev117}/verifiers/v1/harnesses/openclaw/harness.py
RENAMED
|
@@ -23,7 +23,7 @@ if [ ! -x "$VF_OPENCLAW_BIN" ]; then
|
|
|
23
23
|
curl -fsSL --proto '=https' --tlsv1.2 https://openclaw.ai/install-cli.sh \
|
|
24
24
|
| bash -s -- --prefix "$VF_OPENCLAW_DIR" --version "$VF_OPENCLAW_VERSION" --no-onboard
|
|
25
25
|
fi
|
|
26
|
-
set -- $(find "$VF_OPENCLAW_DIR/tools" -type f -path '*/openclaw/dist/
|
|
26
|
+
set -- $(find "$VF_OPENCLAW_DIR/tools" -type f -path '*/openclaw/dist/transcript-redact-*.mjs')
|
|
27
27
|
[ "$#" -eq 1 ] || { echo "could not locate OpenClaw's transcript sanitizer for replay patch" >&2; exit 1; }
|
|
28
28
|
"$VF_OPENCLAW_DIR/tools/node/bin/node" - "$1" <<'NODE'
|
|
29
29
|
const fs = require("node:fs");
|
|
@@ -116,7 +116,7 @@ wait "$acp_pid"
|
|
|
116
116
|
|
|
117
117
|
|
|
118
118
|
class OpenClawHarnessConfig(HarnessConfig):
|
|
119
|
-
version: PinnedVersion = "2026.
|
|
119
|
+
version: PinnedVersion = "2026.9.5"
|
|
120
120
|
"""OpenClaw release to install, pinned for reproducibility."""
|
|
121
121
|
use_bundled_skill: bool = True
|
|
122
122
|
"""Enable OpenClaw's bundled skill catalog in addition to uploaded harness skills."""
|
|
@@ -180,6 +180,7 @@ class OpenClawHarness(ACPHarness[OpenClawHarnessConfig]):
|
|
|
180
180
|
"heartbeat": {"every": "0m"},
|
|
181
181
|
"sandbox": {"mode": "off"},
|
|
182
182
|
"model": {"primary": ctx.model},
|
|
183
|
+
"utilityModel": "", # Disable background recap model calls.
|
|
183
184
|
}
|
|
184
185
|
},
|
|
185
186
|
"tools": {
|
|
@@ -21,7 +21,7 @@ KEY_VAR = "PI_INTERCEPT_KEY"
|
|
|
21
21
|
PI_DIR = "/var/tmp/vf-pi"
|
|
22
22
|
PACKAGES_DIR = f"{PI_DIR}/mcp"
|
|
23
23
|
PI_BIN = f"{PACKAGES_DIR}/node_modules/.bin/pi"
|
|
24
|
-
MCP_VERSION = "2.
|
|
24
|
+
MCP_VERSION = "2.34.0"
|
|
25
25
|
ACP_VERSION = "0.0.33"
|
|
26
26
|
MCP_ADAPTER = f"{PACKAGES_DIR}/node_modules/pi-mcp-adapter/index.ts"
|
|
27
27
|
ACP_BIN = f"{PACKAGES_DIR}/node_modules/.bin/pi-acp"
|
|
@@ -44,7 +44,7 @@ fi
|
|
|
44
44
|
|
|
45
45
|
|
|
46
46
|
class PiHarnessConfig(HarnessConfig):
|
|
47
|
-
version: PinnedVersion = "0.
|
|
47
|
+
version: PinnedVersion = "0.86.1"
|
|
48
48
|
"""Pi release to install, pinned for reproducibility."""
|
|
49
49
|
transport: Literal["chat_completions", "responses", "anthropic_messages"] = (
|
|
50
50
|
"chat_completions"
|
{verifiers-0.3.2.dev115 → verifiers-0.3.2.dev117}/verifiers/v1/harnesses/prime_agent/harness.py
RENAMED
|
@@ -19,10 +19,10 @@ logger = logging.getLogger(__name__)
|
|
|
19
19
|
GITHUB_RELEASE_URL = (
|
|
20
20
|
"https://github.com/PrimeIntellect-ai/prime-agent/releases/download"
|
|
21
21
|
)
|
|
22
|
-
PRIME_AGENT_COMMIT: Literal["
|
|
23
|
-
"
|
|
22
|
+
PRIME_AGENT_COMMIT: Literal["a7d791bc1be09793ed5f3ec05bf4cccbc60679ea"] = (
|
|
23
|
+
"a7d791bc1be09793ed5f3ec05bf4cccbc60679ea"
|
|
24
24
|
)
|
|
25
|
-
PRIME_AGENT_VERSION = "0.9.
|
|
25
|
+
PRIME_AGENT_VERSION = "0.9.5"
|
|
26
26
|
PRIME_AGENT_DIR = "/var/tmp/vf-prime-agent"
|
|
27
27
|
STATE_ROOT = "/tmp/vf-prime-agent-runs"
|
|
28
28
|
PROVIDER = "intercept"
|
|
@@ -50,10 +50,10 @@ for tarball in "$agent_tarball" "$ai_tarball" "$core_tarball" "$tui_tarball"; do
|
|
|
50
50
|
"$release_url/$tarball" -o "$download_dir/$tarball"
|
|
51
51
|
done
|
|
52
52
|
printf '%s %s\n' \
|
|
53
|
-
'
|
|
54
|
-
'
|
|
55
|
-
'
|
|
56
|
-
'
|
|
53
|
+
'349f1682c7909550842f1b04a71ba95814341b136474ade736df93f8ec006876' "$agent_tarball" \
|
|
54
|
+
'9ad0184b7b5f3d5c3b1677c0663335de32c092cbdb72697aeaf997f17910bb92' "$ai_tarball" \
|
|
55
|
+
'59aafeffb4b64eb997399d56a03f529b2f6604b228e5674372195277db52f04a' "$core_tarball" \
|
|
56
|
+
'e49f41170edfd1d0e72418729d2c117969ccf8df784dc55fe8c1a9d91778e103' "$tui_tarball" \
|
|
57
57
|
> "$download_dir/SHA256SUMS"
|
|
58
58
|
(cd "$download_dir" && sha256sum -c SHA256SUMS)
|
|
59
59
|
mkdir "$download_dir/package-root"
|
|
@@ -87,8 +87,8 @@ PRIME_AGENT_BOOTSTRAP_TOOLS_ON_INSTALL=1 npm install -g \
|
|
|
87
87
|
|
|
88
88
|
|
|
89
89
|
class PrimeAgentHarnessConfig(HarnessConfig):
|
|
90
|
-
commit: Literal["
|
|
91
|
-
"""Prime Agent
|
|
90
|
+
commit: Literal["a7d791bc1be09793ed5f3ec05bf4cccbc60679ea"] = PRIME_AGENT_COMMIT
|
|
91
|
+
"""Prime Agent release commit to install."""
|
|
92
92
|
|
|
93
93
|
autonomous: bool = False
|
|
94
94
|
"""Enable Prime Agent's autonomous continuation loop."""
|
|
@@ -69,7 +69,7 @@ class CompactionConfig(BaseConfig):
|
|
|
69
69
|
|
|
70
70
|
class RLMHarnessConfig(HarnessConfig):
|
|
71
71
|
version: str = Field(
|
|
72
|
-
default="
|
|
72
|
+
default="fc5734d20c5fe74f6ab527ecb7ab10299f3bb965", min_length=1
|
|
73
73
|
)
|
|
74
74
|
"""Git ref (branch, tag, or commit) of nano-rlm to install. Must know every
|
|
75
75
|
field this harness puts on the wire, i.e. be at least the default ref."""
|
|
@@ -485,7 +485,9 @@ class Rollout:
|
|
|
485
485
|
)
|
|
486
486
|
if self._collect_artifacts and not trace.state.artifacts:
|
|
487
487
|
trace.state.artifacts = await collect(
|
|
488
|
-
runtime,
|
|
488
|
+
runtime,
|
|
489
|
+
self.task.data.artifacts,
|
|
490
|
+
max_bytes=self.task.data.artifact_max_bytes,
|
|
489
491
|
)
|
|
490
492
|
now = time.time()
|
|
491
493
|
trace.timing.finalize.end = now
|
|
@@ -1,8 +1,8 @@
|
|
|
1
1
|
"""Remote Prime VM sandbox runtime."""
|
|
2
2
|
|
|
3
3
|
import asyncio
|
|
4
|
-
import base64
|
|
5
4
|
import contextlib
|
|
5
|
+
import io
|
|
6
6
|
import logging
|
|
7
7
|
import math
|
|
8
8
|
import shlex
|
|
@@ -329,19 +329,30 @@ class PrimeRuntime(Runtime):
|
|
|
329
329
|
async def _read(self, path: str, max_bytes: int | None = None) -> bytes:
|
|
330
330
|
if max_bytes is not None:
|
|
331
331
|
try:
|
|
332
|
-
#
|
|
333
|
-
|
|
332
|
+
# Stream binary output: execute_command buffers base64 text for the
|
|
333
|
+
# entire file. Bound the source read and the host buffer independently.
|
|
334
|
+
process = await self._client.open_process(
|
|
334
335
|
self.info.id,
|
|
335
|
-
f"
|
|
336
|
+
f"head -c {max_bytes} -- {shlex.quote(path)}",
|
|
336
337
|
working_dir=self.config.workdir,
|
|
337
338
|
env=self.process_env({}),
|
|
338
|
-
timeout=EFFECTIVELY_UNBOUNDED_SECONDS,
|
|
339
339
|
)
|
|
340
|
+
async with contextlib.aclosing(process):
|
|
341
|
+
with io.BytesIO() as data:
|
|
342
|
+
async for chunk in process.stdout:
|
|
343
|
+
if data.tell() + len(chunk) > max_bytes:
|
|
344
|
+
raise SandboxError(
|
|
345
|
+
"read stream exceeded its byte limit"
|
|
346
|
+
)
|
|
347
|
+
data.write(chunk)
|
|
348
|
+
stderr = b""
|
|
349
|
+
async for chunk in process.stderr:
|
|
350
|
+
stderr = (stderr + chunk)[-500:]
|
|
351
|
+
if await process.wait():
|
|
352
|
+
raise SandboxError(stderr.decode(errors="replace").strip())
|
|
353
|
+
return data.getvalue()
|
|
340
354
|
except Exception as exc:
|
|
341
355
|
raise SandboxError(f"read {path!r}: {exc}") from exc
|
|
342
|
-
if result.exit_code:
|
|
343
|
-
raise SandboxError(f"read {path!r}: {result.stderr.strip()[-500:]}")
|
|
344
|
-
return base64.b64decode(result.stdout)
|
|
345
356
|
# Avoid background-job log limits and base64 overhead by downloading binary data directly.
|
|
346
357
|
# The temporary file is removed on every exit, and its byte read stays off the event loop.
|
|
347
358
|
target = (
|
|
@@ -25,7 +25,7 @@ from verifiers.v1.configs.task import TaskConfig
|
|
|
25
25
|
from verifiers.v1.errors import TaskError, boundary
|
|
26
26
|
from verifiers.v1.state import StateT
|
|
27
27
|
from verifiers.v1.types import Messages, content_text
|
|
28
|
-
from verifiers.v1.utils.artifacts import Artifact
|
|
28
|
+
from verifiers.v1.utils.artifacts import MAX_ARTIFACT_BYTES, Artifact
|
|
29
29
|
from verifiers.v1.utils.decorators import (
|
|
30
30
|
discover_decorated,
|
|
31
31
|
invoke_all,
|
|
@@ -115,6 +115,8 @@ class TaskData(BaseModel):
|
|
|
115
115
|
on top of the implicitly collected `/logs/artifacts/` convention dir. Declare
|
|
116
116
|
runtime outputs that must cross that boundary. A declared path that is missing at
|
|
117
117
|
collection time fails the rollout."""
|
|
118
|
+
artifact_max_bytes: int = Field(MAX_ARTIFACT_BYTES, gt=0)
|
|
119
|
+
"""Total byte limit for collected artifact archives, including the convention dir."""
|
|
118
120
|
|
|
119
121
|
timeout: TaskTimeout = TaskTimeout()
|
|
120
122
|
resources: TaskResources = TaskResources()
|
|
@@ -40,7 +40,7 @@ from verifiers.v1.state import State
|
|
|
40
40
|
from verifiers.v1.task import Task, TaskData, TaskResources, TaskTimeout
|
|
41
41
|
from verifiers.v1.taskset import Taskset
|
|
42
42
|
from verifiers.v1.trace import Trace
|
|
43
|
-
from verifiers.v1.utils.artifacts import Artifact, collect
|
|
43
|
+
from verifiers.v1.utils.artifacts import MAX_ARTIFACT_BYTES, Artifact, collect
|
|
44
44
|
from verifiers.v1.utils.decorators import reward
|
|
45
45
|
|
|
46
46
|
logger = logging.getLogger(__name__)
|
|
@@ -61,6 +61,8 @@ class HarborTaskConfig(TaskConfig):
|
|
|
61
61
|
|
|
62
62
|
|
|
63
63
|
class HarborConfig(TasksetConfig):
|
|
64
|
+
artifact_max_bytes: int = Field(MAX_ARTIFACT_BYTES, gt=0)
|
|
65
|
+
"""Total byte limit for artifact archives transferred out of each solver runtime."""
|
|
64
66
|
task: HarborTaskConfig = HarborTaskConfig()
|
|
65
67
|
dataset: str = "harbor/hello-world"
|
|
66
68
|
"""A Harbor Hub package id ("org/name" or "org/name@ref"), where ref is a
|
|
@@ -272,7 +274,9 @@ class HarborTask(Task[HarborData, State, HarborTaskConfig]):
|
|
|
272
274
|
f"{hook.command}\n{detail}"
|
|
273
275
|
)
|
|
274
276
|
if not self.scoring_deferred:
|
|
275
|
-
trace.state.artifacts = await collect(
|
|
277
|
+
trace.state.artifacts = await collect(
|
|
278
|
+
runtime, self.data.artifacts, max_bytes=self.data.artifact_max_bytes
|
|
279
|
+
)
|
|
276
280
|
|
|
277
281
|
async def stage_verifier(self, trace: Trace, runtime: Runtime) -> None:
|
|
278
282
|
if any(
|
|
@@ -582,6 +586,7 @@ def parse_task(task_dir: Path, idx: int, harbor_config: HarborConfig) -> HarborD
|
|
|
582
586
|
)
|
|
583
587
|
return HarborData(
|
|
584
588
|
idx=idx,
|
|
589
|
+
artifact_max_bytes=harbor_config.artifact_max_bytes,
|
|
585
590
|
name=harbor_task.name,
|
|
586
591
|
description=task.description if task else None,
|
|
587
592
|
prompt=harbor_task.instruction.strip(),
|
|
@@ -21,7 +21,7 @@ ARTIFACTS_DIR = "/logs/artifacts"
|
|
|
21
21
|
"""Implicit artifact directory; tasks that write here need no declaration."""
|
|
22
22
|
|
|
23
23
|
MAX_ARTIFACT_BYTES = 32 * 1024 * 1024
|
|
24
|
-
"""
|
|
24
|
+
"""Default ceiling per collection. Sized for a delta, not a tree: the grading box boots from the
|
|
25
25
|
agent's image, so the repo is already there and only its output has to travel."""
|
|
26
26
|
|
|
27
27
|
|
|
@@ -35,7 +35,10 @@ class Artifact(BaseModel):
|
|
|
35
35
|
|
|
36
36
|
|
|
37
37
|
async def collect(
|
|
38
|
-
runtime: Runtime,
|
|
38
|
+
runtime: Runtime,
|
|
39
|
+
artifacts: list[Artifact] | None = None,
|
|
40
|
+
*,
|
|
41
|
+
max_bytes: int = MAX_ARTIFACT_BYTES,
|
|
39
42
|
) -> dict[str, bytes | None]:
|
|
40
43
|
"""Tar the convention dir and every declared path out of `runtime`.
|
|
41
44
|
|
|
@@ -114,7 +117,7 @@ async def collect(
|
|
|
114
117
|
)
|
|
115
118
|
existence.extend(output.splitlines())
|
|
116
119
|
collected: dict[str, bytes | None] = {}
|
|
117
|
-
budget =
|
|
120
|
+
budget = max_bytes
|
|
118
121
|
for artifact, exists in zip(entries, existence, strict=True):
|
|
119
122
|
source = artifact.source
|
|
120
123
|
if exists != "1":
|
|
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
|
{verifiers-0.3.2.dev115 → verifiers-0.3.2.dev117}/tests/v1/fixtures/tool_response_image_v1.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
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|