verifiers 0.4.1.dev54__tar.gz → 0.4.1.dev56__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.dev54 → verifiers-0.4.1.dev56}/PKG-INFO +1 -1
- {verifiers-0.4.1.dev54 → verifiers-0.4.1.dev56}/tests/integration/test_compose_scoring.py +43 -9
- {verifiers-0.4.1.dev54 → verifiers-0.4.1.dev56}/tests/unit/test_runtimes.py +1 -1
- {verifiers-0.4.1.dev54 → verifiers-0.4.1.dev56}/verifiers/v1/harnesses/rlm/harness.py +1 -1
- {verifiers-0.4.1.dev54 → verifiers-0.4.1.dev56}/verifiers/v1/runtimes/compose.py +21 -2
- {verifiers-0.4.1.dev54 → verifiers-0.4.1.dev56}/verifiers/v1/runtimes/strategies.py +24 -2
- {verifiers-0.4.1.dev54 → verifiers-0.4.1.dev56}/verifiers/v1/tasksets/harbor/taskset.py +5 -1
- {verifiers-0.4.1.dev54 → verifiers-0.4.1.dev56}/.gitignore +0 -0
- {verifiers-0.4.1.dev54 → verifiers-0.4.1.dev56}/LICENSE +0 -0
- {verifiers-0.4.1.dev54 → verifiers-0.4.1.dev56}/README.md +0 -0
- {verifiers-0.4.1.dev54 → verifiers-0.4.1.dev56}/pyproject.toml +0 -0
- {verifiers-0.4.1.dev54 → verifiers-0.4.1.dev56}/tests/integration/conftest.py +0 -0
- {verifiers-0.4.1.dev54 → verifiers-0.4.1.dev56}/tests/integration/fixtures/agent_user.py +0 -0
- {verifiers-0.4.1.dev54 → verifiers-0.4.1.dev56}/tests/integration/fixtures/agent_user_harness.py +0 -0
- {verifiers-0.4.1.dev54 → verifiers-0.4.1.dev56}/tests/integration/fixtures/counter_tool.py +0 -0
- {verifiers-0.4.1.dev54 → verifiers-0.4.1.dev56}/tests/integration/fixtures/duet.py +0 -0
- {verifiers-0.4.1.dev54 → verifiers-0.4.1.dev56}/tests/integration/fixtures/echo.py +0 -0
- {verifiers-0.4.1.dev54 → verifiers-0.4.1.dev56}/tests/integration/fixtures/echo_acp_resume.py +0 -0
- {verifiers-0.4.1.dev54 → verifiers-0.4.1.dev56}/tests/integration/fixtures/echo_agentic.py +0 -0
- {verifiers-0.4.1.dev54 → verifiers-0.4.1.dev56}/tests/integration/fixtures/echo_tool.py +0 -0
- {verifiers-0.4.1.dev54 → verifiers-0.4.1.dev56}/tests/integration/fixtures/echo_tool_compose/docker-compose.yaml +0 -0
- {verifiers-0.4.1.dev54 → verifiers-0.4.1.dev56}/tests/integration/fixtures/echo_user_sim.py +0 -0
- {verifiers-0.4.1.dev54 → verifiers-0.4.1.dev56}/tests/integration/fixtures/fetch_tool.py +0 -0
- {verifiers-0.4.1.dev54 → verifiers-0.4.1.dev56}/tests/integration/fixtures/network_policy.py +0 -0
- {verifiers-0.4.1.dev54 → verifiers-0.4.1.dev56}/tests/integration/fixtures/parallel.py +0 -0
- {verifiers-0.4.1.dev54 → verifiers-0.4.1.dev56}/tests/integration/fixtures/pyproject.toml +0 -0
- {verifiers-0.4.1.dev54 → verifiers-0.4.1.dev56}/tests/integration/fixtures/skill_codeword.py +0 -0
- {verifiers-0.4.1.dev54 → verifiers-0.4.1.dev56}/tests/integration/fixtures/skills/project-codeword/SKILL.md +0 -0
- {verifiers-0.4.1.dev54 → verifiers-0.4.1.dev56}/tests/integration/fixtures/tool_response_image.py +0 -0
- {verifiers-0.4.1.dev54 → verifiers-0.4.1.dev56}/tests/integration/grid.py +0 -0
- {verifiers-0.4.1.dev54 → verifiers-0.4.1.dev56}/tests/integration/test_agent_user.py +0 -0
- {verifiers-0.4.1.dev54 → verifiers-0.4.1.dev56}/tests/integration/test_agentic_judge.py +0 -0
- {verifiers-0.4.1.dev54 → verifiers-0.4.1.dev56}/tests/integration/test_examples.py +0 -0
- {verifiers-0.4.1.dev54 → verifiers-0.4.1.dev56}/tests/integration/test_limits.py +0 -0
- {verifiers-0.4.1.dev54 → verifiers-0.4.1.dev56}/tests/integration/test_multi_agent.py +0 -0
- {verifiers-0.4.1.dev54 → verifiers-0.4.1.dev56}/tests/integration/test_multi_turn.py +0 -0
- {verifiers-0.4.1.dev54 → verifiers-0.4.1.dev56}/tests/integration/test_multi_turn_tool.py +0 -0
- {verifiers-0.4.1.dev54 → verifiers-0.4.1.dev56}/tests/integration/test_multimodal_tool.py +0 -0
- {verifiers-0.4.1.dev54 → verifiers-0.4.1.dev56}/tests/integration/test_network_policy.py +0 -0
- {verifiers-0.4.1.dev54 → verifiers-0.4.1.dev56}/tests/integration/test_parallel.py +0 -0
- {verifiers-0.4.1.dev54 → verifiers-0.4.1.dev56}/tests/integration/test_resume_tool.py +0 -0
- {verifiers-0.4.1.dev54 → verifiers-0.4.1.dev56}/tests/integration/test_rubric_judge.py +0 -0
- {verifiers-0.4.1.dev54 → verifiers-0.4.1.dev56}/tests/integration/test_sampling.py +0 -0
- {verifiers-0.4.1.dev54 → verifiers-0.4.1.dev56}/tests/integration/test_scoring_network.py +0 -0
- {verifiers-0.4.1.dev54 → verifiers-0.4.1.dev56}/tests/integration/test_shared_tool.py +0 -0
- {verifiers-0.4.1.dev54 → verifiers-0.4.1.dev56}/tests/integration/test_single_turn.py +0 -0
- {verifiers-0.4.1.dev54 → verifiers-0.4.1.dev56}/tests/integration/test_skills.py +0 -0
- {verifiers-0.4.1.dev54 → verifiers-0.4.1.dev56}/tests/integration/test_stateful_tool.py +0 -0
- {verifiers-0.4.1.dev54 → verifiers-0.4.1.dev56}/tests/integration/test_tool_vms.py +0 -0
- {verifiers-0.4.1.dev54 → verifiers-0.4.1.dev56}/tests/integration/test_user_echo.py +0 -0
- {verifiers-0.4.1.dev54 → verifiers-0.4.1.dev56}/tests/integration/test_user_sim.py +0 -0
- {verifiers-0.4.1.dev54 → verifiers-0.4.1.dev56}/tests/unit/cli/test_replay.py +0 -0
- {verifiers-0.4.1.dev54 → verifiers-0.4.1.dev56}/tests/unit/conftest.py +0 -0
- {verifiers-0.4.1.dev54 → verifiers-0.4.1.dev56}/tests/unit/harnesses/test_core.py +0 -0
- {verifiers-0.4.1.dev54 → verifiers-0.4.1.dev56}/tests/unit/harnesses/test_rlm.py +0 -0
- {verifiers-0.4.1.dev54 → verifiers-0.4.1.dev56}/tests/unit/interception/test_tunnel.py +0 -0
- {verifiers-0.4.1.dev54 → verifiers-0.4.1.dev56}/tests/unit/judges/conftest.py +0 -0
- {verifiers-0.4.1.dev54 → verifiers-0.4.1.dev56}/tests/unit/judges/test_judge.py +0 -0
- {verifiers-0.4.1.dev54 → verifiers-0.4.1.dev56}/tests/unit/judges/test_reference.py +0 -0
- {verifiers-0.4.1.dev54 → verifiers-0.4.1.dev56}/tests/unit/judges/test_rubric.py +0 -0
- {verifiers-0.4.1.dev54 → verifiers-0.4.1.dev56}/tests/unit/runtimes/test_private_network.py +0 -0
- {verifiers-0.4.1.dev54 → verifiers-0.4.1.dev56}/tests/unit/serve/test_client.py +0 -0
- {verifiers-0.4.1.dev54 → verifiers-0.4.1.dev56}/tests/unit/serve/test_delta.py +0 -0
- {verifiers-0.4.1.dev54 → verifiers-0.4.1.dev56}/tests/unit/serve/test_pool.py +0 -0
- {verifiers-0.4.1.dev54 → verifiers-0.4.1.dev56}/tests/unit/test_agent.py +0 -0
- {verifiers-0.4.1.dev54 → verifiers-0.4.1.dev56}/tests/unit/test_dialects.py +0 -0
- {verifiers-0.4.1.dev54 → verifiers-0.4.1.dev56}/tests/unit/test_graph.py +0 -0
- {verifiers-0.4.1.dev54 → verifiers-0.4.1.dev56}/tests/unit/test_harbor_grading_network.py +0 -0
- {verifiers-0.4.1.dev54 → verifiers-0.4.1.dev56}/tests/unit/test_scoring_network.py +0 -0
- {verifiers-0.4.1.dev54 → verifiers-0.4.1.dev56}/tests/unit/test_semantic.py +0 -0
- {verifiers-0.4.1.dev54 → verifiers-0.4.1.dev56}/tests/unit/test_task.py +0 -0
- {verifiers-0.4.1.dev54 → verifiers-0.4.1.dev56}/tests/unit/test_taskset.py +0 -0
- {verifiers-0.4.1.dev54 → verifiers-0.4.1.dev56}/tests/unit/test_trace.py +0 -0
- {verifiers-0.4.1.dev54 → verifiers-0.4.1.dev56}/tests/unit/utils/test_compile.py +0 -0
- {verifiers-0.4.1.dev54 → verifiers-0.4.1.dev56}/tests/unit/utils/test_loaders.py +0 -0
- {verifiers-0.4.1.dev54 → verifiers-0.4.1.dev56}/tests/unit/utils/test_platform.py +0 -0
- {verifiers-0.4.1.dev54 → verifiers-0.4.1.dev56}/tests/unit/utils/test_score.py +0 -0
- {verifiers-0.4.1.dev54 → verifiers-0.4.1.dev56}/verifiers/__init__.py +0 -0
- {verifiers-0.4.1.dev54 → verifiers-0.4.1.dev56}/verifiers/v1/__init__.py +0 -0
- {verifiers-0.4.1.dev54 → verifiers-0.4.1.dev56}/verifiers/v1/acp/__init__.py +0 -0
- {verifiers-0.4.1.dev54 → verifiers-0.4.1.dev56}/verifiers/v1/acp/runner.py +0 -0
- {verifiers-0.4.1.dev54 → verifiers-0.4.1.dev56}/verifiers/v1/agent.py +0 -0
- {verifiers-0.4.1.dev54 → verifiers-0.4.1.dev56}/verifiers/v1/cli/__init__.py +0 -0
- {verifiers-0.4.1.dev54 → verifiers-0.4.1.dev56}/verifiers/v1/cli/dashboard/__init__.py +0 -0
- {verifiers-0.4.1.dev54 → verifiers-0.4.1.dev56}/verifiers/v1/cli/dashboard/base.py +0 -0
- {verifiers-0.4.1.dev54 → verifiers-0.4.1.dev56}/verifiers/v1/cli/dashboard/eval.py +0 -0
- {verifiers-0.4.1.dev54 → verifiers-0.4.1.dev56}/verifiers/v1/cli/dashboard/replay.py +0 -0
- {verifiers-0.4.1.dev54 → verifiers-0.4.1.dev56}/verifiers/v1/cli/dashboard/validate.py +0 -0
- {verifiers-0.4.1.dev54 → verifiers-0.4.1.dev56}/verifiers/v1/cli/debug.py +0 -0
- {verifiers-0.4.1.dev54 → verifiers-0.4.1.dev56}/verifiers/v1/cli/eval/__init__.py +0 -0
- {verifiers-0.4.1.dev54 → verifiers-0.4.1.dev56}/verifiers/v1/cli/eval/hint.py +0 -0
- {verifiers-0.4.1.dev54 → verifiers-0.4.1.dev56}/verifiers/v1/cli/eval/main.py +0 -0
- {verifiers-0.4.1.dev54 → verifiers-0.4.1.dev56}/verifiers/v1/cli/eval/resume.py +0 -0
- {verifiers-0.4.1.dev54 → verifiers-0.4.1.dev56}/verifiers/v1/cli/eval/runner.py +0 -0
- {verifiers-0.4.1.dev54 → verifiers-0.4.1.dev56}/verifiers/v1/cli/gepa.py +0 -0
- {verifiers-0.4.1.dev54 → verifiers-0.4.1.dev56}/verifiers/v1/cli/output.py +0 -0
- {verifiers-0.4.1.dev54 → verifiers-0.4.1.dev56}/verifiers/v1/cli/replay.py +0 -0
- {verifiers-0.4.1.dev54 → verifiers-0.4.1.dev56}/verifiers/v1/cli/resolve.py +0 -0
- {verifiers-0.4.1.dev54 → verifiers-0.4.1.dev56}/verifiers/v1/cli/resume.py +0 -0
- {verifiers-0.4.1.dev54 → verifiers-0.4.1.dev56}/verifiers/v1/cli/validate.py +0 -0
- {verifiers-0.4.1.dev54 → verifiers-0.4.1.dev56}/verifiers/v1/clients/__init__.py +0 -0
- {verifiers-0.4.1.dev54 → verifiers-0.4.1.dev56}/verifiers/v1/clients/base.py +0 -0
- {verifiers-0.4.1.dev54 → verifiers-0.4.1.dev56}/verifiers/v1/clients/client.py +0 -0
- {verifiers-0.4.1.dev54 → verifiers-0.4.1.dev56}/verifiers/v1/clients/eval.py +0 -0
- {verifiers-0.4.1.dev54 → verifiers-0.4.1.dev56}/verifiers/v1/clients/train.py +0 -0
- {verifiers-0.4.1.dev54 → verifiers-0.4.1.dev56}/verifiers/v1/configs/__init__.py +0 -0
- {verifiers-0.4.1.dev54 → verifiers-0.4.1.dev56}/verifiers/v1/configs/agent.py +0 -0
- {verifiers-0.4.1.dev54 → verifiers-0.4.1.dev56}/verifiers/v1/configs/cli/__init__.py +0 -0
- {verifiers-0.4.1.dev54 → verifiers-0.4.1.dev56}/verifiers/v1/configs/cli/debug.py +0 -0
- {verifiers-0.4.1.dev54 → verifiers-0.4.1.dev56}/verifiers/v1/configs/cli/env.py +0 -0
- {verifiers-0.4.1.dev54 → verifiers-0.4.1.dev56}/verifiers/v1/configs/cli/eval.py +0 -0
- {verifiers-0.4.1.dev54 → verifiers-0.4.1.dev56}/verifiers/v1/configs/cli/replay.py +0 -0
- {verifiers-0.4.1.dev54 → verifiers-0.4.1.dev56}/verifiers/v1/configs/cli/validate.py +0 -0
- {verifiers-0.4.1.dev54 → verifiers-0.4.1.dev56}/verifiers/v1/configs/client.py +0 -0
- {verifiers-0.4.1.dev54 → verifiers-0.4.1.dev56}/verifiers/v1/configs/env.py +0 -0
- {verifiers-0.4.1.dev54 → verifiers-0.4.1.dev56}/verifiers/v1/configs/harness.py +0 -0
- {verifiers-0.4.1.dev54 → verifiers-0.4.1.dev56}/verifiers/v1/configs/judge.py +0 -0
- {verifiers-0.4.1.dev54 → verifiers-0.4.1.dev56}/verifiers/v1/configs/retries.py +0 -0
- {verifiers-0.4.1.dev54 → verifiers-0.4.1.dev56}/verifiers/v1/configs/runtime.py +0 -0
- {verifiers-0.4.1.dev54 → verifiers-0.4.1.dev56}/verifiers/v1/configs/scoring.py +0 -0
- {verifiers-0.4.1.dev54 → verifiers-0.4.1.dev56}/verifiers/v1/configs/select.py +0 -0
- {verifiers-0.4.1.dev54 → verifiers-0.4.1.dev56}/verifiers/v1/configs/serve.py +0 -0
- {verifiers-0.4.1.dev54 → verifiers-0.4.1.dev56}/verifiers/v1/configs/task.py +0 -0
- {verifiers-0.4.1.dev54 → verifiers-0.4.1.dev56}/verifiers/v1/configs/taskset.py +0 -0
- {verifiers-0.4.1.dev54 → verifiers-0.4.1.dev56}/verifiers/v1/dialects/__init__.py +0 -0
- {verifiers-0.4.1.dev54 → verifiers-0.4.1.dev56}/verifiers/v1/dialects/anthropic.py +0 -0
- {verifiers-0.4.1.dev54 → verifiers-0.4.1.dev56}/verifiers/v1/dialects/base.py +0 -0
- {verifiers-0.4.1.dev54 → verifiers-0.4.1.dev56}/verifiers/v1/dialects/chat.py +0 -0
- {verifiers-0.4.1.dev54 → verifiers-0.4.1.dev56}/verifiers/v1/dialects/responses.py +0 -0
- {verifiers-0.4.1.dev54 → verifiers-0.4.1.dev56}/verifiers/v1/env.py +0 -0
- {verifiers-0.4.1.dev54 → verifiers-0.4.1.dev56}/verifiers/v1/envs/__init__.py +0 -0
- {verifiers-0.4.1.dev54 → verifiers-0.4.1.dev56}/verifiers/v1/envs/agentic_judge/__init__.py +0 -0
- {verifiers-0.4.1.dev54 → verifiers-0.4.1.dev56}/verifiers/v1/envs/agentic_judge/env.py +0 -0
- {verifiers-0.4.1.dev54 → verifiers-0.4.1.dev56}/verifiers/v1/envs/best_of_n/__init__.py +0 -0
- {verifiers-0.4.1.dev54 → verifiers-0.4.1.dev56}/verifiers/v1/envs/best_of_n/env.py +0 -0
- {verifiers-0.4.1.dev54 → verifiers-0.4.1.dev56}/verifiers/v1/envs/single_agent/__init__.py +0 -0
- {verifiers-0.4.1.dev54 → verifiers-0.4.1.dev56}/verifiers/v1/envs/single_agent/env.py +0 -0
- {verifiers-0.4.1.dev54 → verifiers-0.4.1.dev56}/verifiers/v1/envs/user_sim/__init__.py +0 -0
- {verifiers-0.4.1.dev54 → verifiers-0.4.1.dev56}/verifiers/v1/envs/user_sim/env.py +0 -0
- {verifiers-0.4.1.dev54 → verifiers-0.4.1.dev56}/verifiers/v1/episode.py +0 -0
- {verifiers-0.4.1.dev54 → verifiers-0.4.1.dev56}/verifiers/v1/errors.py +0 -0
- {verifiers-0.4.1.dev54 → verifiers-0.4.1.dev56}/verifiers/v1/gepa/__init__.py +0 -0
- {verifiers-0.4.1.dev54 → verifiers-0.4.1.dev56}/verifiers/v1/gepa/adapter.py +0 -0
- {verifiers-0.4.1.dev54 → verifiers-0.4.1.dev56}/verifiers/v1/gepa/config.py +0 -0
- {verifiers-0.4.1.dev54 → verifiers-0.4.1.dev56}/verifiers/v1/gepa/dataset.py +0 -0
- {verifiers-0.4.1.dev54 → verifiers-0.4.1.dev56}/verifiers/v1/gepa/reflection.py +0 -0
- {verifiers-0.4.1.dev54 → verifiers-0.4.1.dev56}/verifiers/v1/gepa/runner.py +0 -0
- {verifiers-0.4.1.dev54 → verifiers-0.4.1.dev56}/verifiers/v1/grading.py +0 -0
- {verifiers-0.4.1.dev54 → verifiers-0.4.1.dev56}/verifiers/v1/graph.py +0 -0
- {verifiers-0.4.1.dev54 → verifiers-0.4.1.dev56}/verifiers/v1/harness.py +0 -0
- {verifiers-0.4.1.dev54 → verifiers-0.4.1.dev56}/verifiers/v1/harnesses/__init__.py +0 -0
- {verifiers-0.4.1.dev54 → verifiers-0.4.1.dev56}/verifiers/v1/harnesses/bash/__init__.py +0 -0
- {verifiers-0.4.1.dev54 → verifiers-0.4.1.dev56}/verifiers/v1/harnesses/bash/harness.py +0 -0
- {verifiers-0.4.1.dev54 → verifiers-0.4.1.dev56}/verifiers/v1/harnesses/browser_use/__init__.py +0 -0
- {verifiers-0.4.1.dev54 → verifiers-0.4.1.dev56}/verifiers/v1/harnesses/browser_use/harness.py +0 -0
- {verifiers-0.4.1.dev54 → verifiers-0.4.1.dev56}/verifiers/v1/harnesses/browser_use/program.py +0 -0
- {verifiers-0.4.1.dev54 → verifiers-0.4.1.dev56}/verifiers/v1/harnesses/claude_code/__init__.py +0 -0
- {verifiers-0.4.1.dev54 → verifiers-0.4.1.dev56}/verifiers/v1/harnesses/claude_code/harness.py +0 -0
- {verifiers-0.4.1.dev54 → verifiers-0.4.1.dev56}/verifiers/v1/harnesses/codex/__init__.py +0 -0
- {verifiers-0.4.1.dev54 → verifiers-0.4.1.dev56}/verifiers/v1/harnesses/codex/gate.mjs +0 -0
- {verifiers-0.4.1.dev54 → verifiers-0.4.1.dev56}/verifiers/v1/harnesses/codex/harness.py +0 -0
- {verifiers-0.4.1.dev54 → verifiers-0.4.1.dev56}/verifiers/v1/harnesses/deepseek/__init__.py +0 -0
- {verifiers-0.4.1.dev54 → verifiers-0.4.1.dev56}/verifiers/v1/harnesses/deepseek/gate.mjs +0 -0
- {verifiers-0.4.1.dev54 → verifiers-0.4.1.dev56}/verifiers/v1/harnesses/deepseek/harness.py +0 -0
- {verifiers-0.4.1.dev54 → verifiers-0.4.1.dev56}/verifiers/v1/harnesses/deepseek/usage.mjs +0 -0
- {verifiers-0.4.1.dev54 → verifiers-0.4.1.dev56}/verifiers/v1/harnesses/hermes_agent/__init__.py +0 -0
- {verifiers-0.4.1.dev54 → verifiers-0.4.1.dev56}/verifiers/v1/harnesses/hermes_agent/harness.py +0 -0
- {verifiers-0.4.1.dev54 → verifiers-0.4.1.dev56}/verifiers/v1/harnesses/hermes_agent/program.py +0 -0
- {verifiers-0.4.1.dev54 → verifiers-0.4.1.dev56}/verifiers/v1/harnesses/kimi_code/__init__.py +0 -0
- {verifiers-0.4.1.dev54 → verifiers-0.4.1.dev56}/verifiers/v1/harnesses/kimi_code/harness.py +0 -0
- {verifiers-0.4.1.dev54 → verifiers-0.4.1.dev56}/verifiers/v1/harnesses/mini_swe_agent/__init__.py +0 -0
- {verifiers-0.4.1.dev54 → verifiers-0.4.1.dev56}/verifiers/v1/harnesses/mini_swe_agent/harness.py +0 -0
- {verifiers-0.4.1.dev54 → verifiers-0.4.1.dev56}/verifiers/v1/harnesses/mini_swe_agent/program.py +0 -0
- {verifiers-0.4.1.dev54 → verifiers-0.4.1.dev56}/verifiers/v1/harnesses/node.py +0 -0
- {verifiers-0.4.1.dev54 → verifiers-0.4.1.dev56}/verifiers/v1/harnesses/null/__init__.py +0 -0
- {verifiers-0.4.1.dev54 → verifiers-0.4.1.dev56}/verifiers/v1/harnesses/null/harness.py +0 -0
- {verifiers-0.4.1.dev54 → verifiers-0.4.1.dev56}/verifiers/v1/harnesses/openclaw/__init__.py +0 -0
- {verifiers-0.4.1.dev54 → verifiers-0.4.1.dev56}/verifiers/v1/harnesses/openclaw/harness.py +0 -0
- {verifiers-0.4.1.dev54 → verifiers-0.4.1.dev56}/verifiers/v1/harnesses/opencode/__init__.py +0 -0
- {verifiers-0.4.1.dev54 → verifiers-0.4.1.dev56}/verifiers/v1/harnesses/opencode/harness.py +0 -0
- {verifiers-0.4.1.dev54 → verifiers-0.4.1.dev56}/verifiers/v1/harnesses/opencode/mcp-ready.js +0 -0
- {verifiers-0.4.1.dev54 → verifiers-0.4.1.dev56}/verifiers/v1/harnesses/pi/__init__.py +0 -0
- {verifiers-0.4.1.dev54 → verifiers-0.4.1.dev56}/verifiers/v1/harnesses/pi/gate.mjs +0 -0
- {verifiers-0.4.1.dev54 → verifiers-0.4.1.dev56}/verifiers/v1/harnesses/pi/harness.py +0 -0
- {verifiers-0.4.1.dev54 → verifiers-0.4.1.dev56}/verifiers/v1/harnesses/prime_agent/__init__.py +0 -0
- {verifiers-0.4.1.dev54 → verifiers-0.4.1.dev56}/verifiers/v1/harnesses/prime_agent/harness.py +0 -0
- {verifiers-0.4.1.dev54 → verifiers-0.4.1.dev56}/verifiers/v1/harnesses/rlm/__init__.py +0 -0
- {verifiers-0.4.1.dev54 → verifiers-0.4.1.dev56}/verifiers/v1/harnesses/terminus_2/__init__.py +0 -0
- {verifiers-0.4.1.dev54 → verifiers-0.4.1.dev56}/verifiers/v1/harnesses/terminus_2/harness.py +0 -0
- {verifiers-0.4.1.dev54 → verifiers-0.4.1.dev56}/verifiers/v1/harnesses/terminus_2/program.py +0 -0
- {verifiers-0.4.1.dev54 → verifiers-0.4.1.dev56}/verifiers/v1/harnesses/utils/__init__.py +0 -0
- {verifiers-0.4.1.dev54 → verifiers-0.4.1.dev56}/verifiers/v1/harnesses/utils/compaction.py +0 -0
- {verifiers-0.4.1.dev54 → verifiers-0.4.1.dev56}/verifiers/v1/harnesses/utils/core.py +0 -0
- {verifiers-0.4.1.dev54 → verifiers-0.4.1.dev56}/verifiers/v1/harnesses/utils/install.py +0 -0
- {verifiers-0.4.1.dev54 → verifiers-0.4.1.dev56}/verifiers/v1/harnesses/utils/launch.py +0 -0
- {verifiers-0.4.1.dev54 → verifiers-0.4.1.dev56}/verifiers/v1/harnesses/utils/mcp.py +0 -0
- {verifiers-0.4.1.dev54 → verifiers-0.4.1.dev56}/verifiers/v1/harnesses/utils/replay.py +0 -0
- {verifiers-0.4.1.dev54 → verifiers-0.4.1.dev56}/verifiers/v1/interception/__init__.py +0 -0
- {verifiers-0.4.1.dev54 → verifiers-0.4.1.dev56}/verifiers/v1/interception/base.py +0 -0
- {verifiers-0.4.1.dev54 → verifiers-0.4.1.dev56}/verifiers/v1/interception/pool.py +0 -0
- {verifiers-0.4.1.dev54 → verifiers-0.4.1.dev56}/verifiers/v1/interception/server.py +0 -0
- {verifiers-0.4.1.dev54 → verifiers-0.4.1.dev56}/verifiers/v1/interception/tunnel/__init__.py +0 -0
- {verifiers-0.4.1.dev54 → verifiers-0.4.1.dev56}/verifiers/v1/interception/tunnel/base.py +0 -0
- {verifiers-0.4.1.dev54 → verifiers-0.4.1.dev56}/verifiers/v1/interception/tunnel/custom.py +0 -0
- {verifiers-0.4.1.dev54 → verifiers-0.4.1.dev56}/verifiers/v1/interception/tunnel/prime.py +0 -0
- {verifiers-0.4.1.dev54 → verifiers-0.4.1.dev56}/verifiers/v1/judge.py +0 -0
- {verifiers-0.4.1.dev54 → verifiers-0.4.1.dev56}/verifiers/v1/judges/__init__.py +0 -0
- {verifiers-0.4.1.dev54 → verifiers-0.4.1.dev56}/verifiers/v1/judges/decision.py +0 -0
- {verifiers-0.4.1.dev54 → verifiers-0.4.1.dev56}/verifiers/v1/judges/reference.py +0 -0
- {verifiers-0.4.1.dev54 → verifiers-0.4.1.dev56}/verifiers/v1/judges/reference.txt +0 -0
- {verifiers-0.4.1.dev54 → verifiers-0.4.1.dev56}/verifiers/v1/judges/rubric.py +0 -0
- {verifiers-0.4.1.dev54 → verifiers-0.4.1.dev56}/verifiers/v1/judges/rubric.txt +0 -0
- {verifiers-0.4.1.dev54 → verifiers-0.4.1.dev56}/verifiers/v1/mcp/__init__.py +0 -0
- {verifiers-0.4.1.dev54 → verifiers-0.4.1.dev56}/verifiers/v1/mcp/launch.py +0 -0
- {verifiers-0.4.1.dev54 → verifiers-0.4.1.dev56}/verifiers/v1/mcp/server.py +0 -0
- {verifiers-0.4.1.dev54 → verifiers-0.4.1.dev56}/verifiers/v1/mcp/toolset.py +0 -0
- {verifiers-0.4.1.dev54 → verifiers-0.4.1.dev56}/verifiers/v1/rollout.py +0 -0
- {verifiers-0.4.1.dev54 → verifiers-0.4.1.dev56}/verifiers/v1/runtimes/__init__.py +0 -0
- {verifiers-0.4.1.dev54 → verifiers-0.4.1.dev56}/verifiers/v1/runtimes/backends/custom.py +0 -0
- {verifiers-0.4.1.dev54 → verifiers-0.4.1.dev56}/verifiers/v1/runtimes/backends/docker.py +0 -0
- {verifiers-0.4.1.dev54 → verifiers-0.4.1.dev56}/verifiers/v1/runtimes/backends/prime.py +0 -0
- {verifiers-0.4.1.dev54 → verifiers-0.4.1.dev56}/verifiers/v1/runtimes/backends/subprocess.py +0 -0
- {verifiers-0.4.1.dev54 → verifiers-0.4.1.dev56}/verifiers/v1/runtimes/base.py +0 -0
- {verifiers-0.4.1.dev54 → verifiers-0.4.1.dev56}/verifiers/v1/runtimes/deployment.py +0 -0
- {verifiers-0.4.1.dev54 → verifiers-0.4.1.dev56}/verifiers/v1/runtimes/egress.py +0 -0
- {verifiers-0.4.1.dev54 → verifiers-0.4.1.dev56}/verifiers/v1/runtimes/limiters.py +0 -0
- {verifiers-0.4.1.dev54 → verifiers-0.4.1.dev56}/verifiers/v1/runtimes/private_network.py +0 -0
- {verifiers-0.4.1.dev54 → verifiers-0.4.1.dev56}/verifiers/v1/runtimes/runtime.py +0 -0
- {verifiers-0.4.1.dev54 → verifiers-0.4.1.dev56}/verifiers/v1/semantic.py +0 -0
- {verifiers-0.4.1.dev54 → verifiers-0.4.1.dev56}/verifiers/v1/serve/__init__.py +0 -0
- {verifiers-0.4.1.dev54 → verifiers-0.4.1.dev56}/verifiers/v1/serve/client.py +0 -0
- {verifiers-0.4.1.dev54 → verifiers-0.4.1.dev56}/verifiers/v1/serve/delta.py +0 -0
- {verifiers-0.4.1.dev54 → verifiers-0.4.1.dev56}/verifiers/v1/serve/encoding.py +0 -0
- {verifiers-0.4.1.dev54 → verifiers-0.4.1.dev56}/verifiers/v1/serve/pool.py +0 -0
- {verifiers-0.4.1.dev54 → verifiers-0.4.1.dev56}/verifiers/v1/serve/server.py +0 -0
- {verifiers-0.4.1.dev54 → verifiers-0.4.1.dev56}/verifiers/v1/serve/types.py +0 -0
- {verifiers-0.4.1.dev54 → verifiers-0.4.1.dev56}/verifiers/v1/session.py +0 -0
- {verifiers-0.4.1.dev54 → verifiers-0.4.1.dev56}/verifiers/v1/state.py +0 -0
- {verifiers-0.4.1.dev54 → verifiers-0.4.1.dev56}/verifiers/v1/task.py +0 -0
- {verifiers-0.4.1.dev54 → verifiers-0.4.1.dev56}/verifiers/v1/taskset.py +0 -0
- {verifiers-0.4.1.dev54 → verifiers-0.4.1.dev56}/verifiers/v1/tasksets/__init__.py +0 -0
- {verifiers-0.4.1.dev54 → verifiers-0.4.1.dev56}/verifiers/v1/tasksets/harbor/__init__.py +0 -0
- {verifiers-0.4.1.dev54 → verifiers-0.4.1.dev56}/verifiers/v1/tasksets/harbor/toolset.py +0 -0
- {verifiers-0.4.1.dev54 → verifiers-0.4.1.dev56}/verifiers/v1/tasksets/nemo_gym/__init__.py +0 -0
- {verifiers-0.4.1.dev54 → verifiers-0.4.1.dev56}/verifiers/v1/tasksets/nemo_gym/response.py +0 -0
- {verifiers-0.4.1.dev54 → verifiers-0.4.1.dev56}/verifiers/v1/tasksets/nemo_gym/server.py +0 -0
- {verifiers-0.4.1.dev54 → verifiers-0.4.1.dev56}/verifiers/v1/tasksets/nemo_gym/taskset.py +0 -0
- {verifiers-0.4.1.dev54 → verifiers-0.4.1.dev56}/verifiers/v1/tasksets/nemo_gym/toolset.py +0 -0
- {verifiers-0.4.1.dev54 → verifiers-0.4.1.dev56}/verifiers/v1/tasksets/openenv/__init__.py +0 -0
- {verifiers-0.4.1.dev54 → verifiers-0.4.1.dev56}/verifiers/v1/tasksets/openenv/taskset.py +0 -0
- {verifiers-0.4.1.dev54 → verifiers-0.4.1.dev56}/verifiers/v1/tasksets/textarena/__init__.py +0 -0
- {verifiers-0.4.1.dev54 → verifiers-0.4.1.dev56}/verifiers/v1/tasksets/textarena/taskset.py +0 -0
- {verifiers-0.4.1.dev54 → verifiers-0.4.1.dev56}/verifiers/v1/trace.py +0 -0
- {verifiers-0.4.1.dev54 → verifiers-0.4.1.dev56}/verifiers/v1/types.py +0 -0
- {verifiers-0.4.1.dev54 → verifiers-0.4.1.dev56}/verifiers/v1/utils/__init__.py +0 -0
- {verifiers-0.4.1.dev54 → verifiers-0.4.1.dev56}/verifiers/v1/utils/aio.py +0 -0
- {verifiers-0.4.1.dev54 → verifiers-0.4.1.dev56}/verifiers/v1/utils/artifacts.py +0 -0
- {verifiers-0.4.1.dev54 → verifiers-0.4.1.dev56}/verifiers/v1/utils/compile.py +0 -0
- {verifiers-0.4.1.dev54 → verifiers-0.4.1.dev56}/verifiers/v1/utils/decorators.py +0 -0
- {verifiers-0.4.1.dev54 → verifiers-0.4.1.dev56}/verifiers/v1/utils/env.py +0 -0
- {verifiers-0.4.1.dev54 → verifiers-0.4.1.dev56}/verifiers/v1/utils/eval.py +0 -0
- {verifiers-0.4.1.dev54 → verifiers-0.4.1.dev56}/verifiers/v1/utils/format.py +0 -0
- {verifiers-0.4.1.dev54 → verifiers-0.4.1.dev56}/verifiers/v1/utils/generic.py +0 -0
- {verifiers-0.4.1.dev54 → verifiers-0.4.1.dev56}/verifiers/v1/utils/git.py +0 -0
- {verifiers-0.4.1.dev54 → verifiers-0.4.1.dev56}/verifiers/v1/utils/image.py +0 -0
- {verifiers-0.4.1.dev54 → verifiers-0.4.1.dev56}/verifiers/v1/utils/interrupt.py +0 -0
- {verifiers-0.4.1.dev54 → verifiers-0.4.1.dev56}/verifiers/v1/utils/loaders.py +0 -0
- {verifiers-0.4.1.dev54 → verifiers-0.4.1.dev56}/verifiers/v1/utils/logging.py +0 -0
- {verifiers-0.4.1.dev54 → verifiers-0.4.1.dev56}/verifiers/v1/utils/memory.py +0 -0
- {verifiers-0.4.1.dev54 → verifiers-0.4.1.dev56}/verifiers/v1/utils/paths.py +0 -0
- {verifiers-0.4.1.dev54 → verifiers-0.4.1.dev56}/verifiers/v1/utils/platform.py +0 -0
- {verifiers-0.4.1.dev54 → verifiers-0.4.1.dev56}/verifiers/v1/utils/prime.py +0 -0
- {verifiers-0.4.1.dev54 → verifiers-0.4.1.dev56}/verifiers/v1/utils/retries.py +0 -0
- {verifiers-0.4.1.dev54 → verifiers-0.4.1.dev56}/verifiers/v1/utils/scope.py +0 -0
- {verifiers-0.4.1.dev54 → verifiers-0.4.1.dev56}/verifiers/v1/utils/score.py +0 -0
- {verifiers-0.4.1.dev54 → verifiers-0.4.1.dev56}/verifiers/v1/utils/trace_store.py +0 -0
- {verifiers-0.4.1.dev54 → verifiers-0.4.1.dev56}/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.dev56
|
|
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
|
|
@@ -42,6 +42,9 @@ services:
|
|
|
42
42
|
|
|
43
43
|
class ComposeHarness(vf.Harness):
|
|
44
44
|
async def launch(self, ctx, trace, runtime, endpoint, secret, mcp_urls, data):
|
|
45
|
+
if "build-main" in data.tags:
|
|
46
|
+
result = await runtime.run(["test", "-f", "/built-from-dockerfile"], {})
|
|
47
|
+
assert result.exit_code == 0, "workspace did not use its Dockerfile"
|
|
45
48
|
return await runtime.run(
|
|
46
49
|
[
|
|
47
50
|
"python",
|
|
@@ -65,6 +68,19 @@ class ComposeTask(HarborTask):
|
|
|
65
68
|
assert all(
|
|
66
69
|
backend._host_backend.stopped for backend in SOLVERS[trace.id]
|
|
67
70
|
), "solver services survived into grading"
|
|
71
|
+
if "build-main" in self.data.tags:
|
|
72
|
+
result = await runtime.run(
|
|
73
|
+
[
|
|
74
|
+
"sh",
|
|
75
|
+
"-c",
|
|
76
|
+
"test -f /built-from-dockerfile && test ! -e /app/answer",
|
|
77
|
+
],
|
|
78
|
+
{},
|
|
79
|
+
)
|
|
80
|
+
assert result.exit_code == 0, (
|
|
81
|
+
"verifier was not rebuilt from clean inputs"
|
|
82
|
+
)
|
|
83
|
+
trace.info["verifier_rebuilt_from_dockerfile"] = True
|
|
68
84
|
trace.info["solver_released_before_grading"] = True
|
|
69
85
|
|
|
70
86
|
async def finalize_services(self, trace, targets):
|
|
@@ -80,24 +96,30 @@ class ComposeTask(HarborTask):
|
|
|
80
96
|
|
|
81
97
|
|
|
82
98
|
@pytest.mark.parametrize(
|
|
83
|
-
("mode", "collect_fails", "scoring_timeout"),
|
|
99
|
+
("mode", "collect_fails", "scoring_timeout", "build_main"),
|
|
84
100
|
[
|
|
85
|
-
("shared", True, False),
|
|
86
|
-
("isolated", False, False),
|
|
87
|
-
("isolated", True, False),
|
|
88
|
-
("isolated", False, True),
|
|
101
|
+
("shared", True, False, False),
|
|
102
|
+
("isolated", False, False, False),
|
|
103
|
+
("isolated", True, False, False),
|
|
104
|
+
("isolated", False, True, False),
|
|
105
|
+
("shared", True, False, True),
|
|
106
|
+
("isolated", False, False, True),
|
|
89
107
|
],
|
|
90
108
|
ids=[
|
|
91
109
|
"shared-skips-sidecars",
|
|
92
110
|
"isolated-restores-sidecars",
|
|
93
111
|
"isolated-collect-failure",
|
|
94
112
|
"isolated-scoring-timeout",
|
|
113
|
+
"shared-builds-main",
|
|
114
|
+
"isolated-builds-main",
|
|
95
115
|
],
|
|
96
116
|
)
|
|
97
117
|
@pytest.mark.prime
|
|
98
118
|
@pytest.mark.skipif(not os.environ.get("PRIME_API_KEY"), reason="needs PRIME_API_KEY")
|
|
99
|
-
async def test_compose_scoring(
|
|
100
|
-
|
|
119
|
+
async def test_compose_scoring(
|
|
120
|
+
tmp_path, mode, collect_fails, scoring_timeout, build_main
|
|
121
|
+
):
|
|
122
|
+
task = compose_task(tmp_path, collect_fails, scoring_timeout, mode, build_main)
|
|
101
123
|
config = vf.AgentConfig(
|
|
102
124
|
model="unused",
|
|
103
125
|
runtime=vf.PrimeConfig(labels=["vf-ci"]),
|
|
@@ -128,12 +150,23 @@ async def test_compose_scoring(tmp_path, mode, collect_fails, scoring_timeout):
|
|
|
128
150
|
assert bool(trace.info.get("solver_released_before_grading")) == (
|
|
129
151
|
mode == "isolated"
|
|
130
152
|
)
|
|
153
|
+
assert bool(trace.info.get("verifier_rebuilt_from_dockerfile")) == (
|
|
154
|
+
mode == "isolated" and build_main
|
|
155
|
+
)
|
|
131
156
|
|
|
132
157
|
|
|
133
|
-
def compose_task(
|
|
158
|
+
def compose_task(
|
|
159
|
+
tmp_path, collect_fails: bool, scoring_timeout: bool, mode: str, build_main: bool
|
|
160
|
+
):
|
|
134
161
|
environment = tmp_path / "environment"
|
|
135
162
|
environment.mkdir()
|
|
136
|
-
|
|
163
|
+
compose = COMPOSE
|
|
164
|
+
if build_main:
|
|
165
|
+
compose = compose.replace(f" image: {IMAGE}\n", "", 1)
|
|
166
|
+
(environment / "Dockerfile").write_text(
|
|
167
|
+
f"FROM {IMAGE}\nRUN touch /built-from-dockerfile\n"
|
|
168
|
+
)
|
|
169
|
+
(environment / "docker-compose.yaml").write_text(compose)
|
|
137
170
|
tests = tmp_path / "tests"
|
|
138
171
|
tests.mkdir()
|
|
139
172
|
(tests / "test.sh").write_text(
|
|
@@ -146,6 +179,7 @@ def compose_task(tmp_path, collect_fails: bool, scoring_timeout: bool, mode: str
|
|
|
146
179
|
return ComposeTask(
|
|
147
180
|
HarborData(
|
|
148
181
|
prompt="Copy the sidecar answer",
|
|
182
|
+
tags=["build-main"] if build_main else [],
|
|
149
183
|
task_dir=str(tmp_path),
|
|
150
184
|
env={"COLLECTION_SCOPE": "workspace"},
|
|
151
185
|
# Exercise agent overrides in both directions, not just task defaults.
|
|
@@ -300,7 +300,7 @@ async def test_compose(runtime, tmp_path) -> None:
|
|
|
300
300
|
spec = ComposeSpec(directory=str(tmp_path), file="docker-compose.yaml")
|
|
301
301
|
async with (
|
|
302
302
|
asyncio.timeout(TIMEOUT),
|
|
303
|
-
compose_services(runtime, spec, {}, trust_compose=True) as (services, _, _),
|
|
303
|
+
compose_services(runtime, spec, {}, trust_compose=True) as (services, _, _, _),
|
|
304
304
|
):
|
|
305
305
|
assert set(services) == {"main", "sidecar"}
|
|
306
306
|
resolved = await services["main"].bind().run(["getent", "hosts", "sidecar"], {})
|
|
@@ -69,7 +69,7 @@ class CompactionConfig(BaseConfig):
|
|
|
69
69
|
class RLMHarnessConfig(HarnessConfig):
|
|
70
70
|
dialect: Literal["chat_completions"] = "chat_completions"
|
|
71
71
|
version: str = Field(
|
|
72
|
-
default="
|
|
72
|
+
default="4cd7f399f5ba79c350d693af63144e2609062235", 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."""
|
|
@@ -85,7 +85,12 @@ async def compose_services(
|
|
|
85
85
|
trust_compose: bool = False,
|
|
86
86
|
setup_timeout: float | None = None,
|
|
87
87
|
) -> AsyncIterator[
|
|
88
|
-
tuple[
|
|
88
|
+
tuple[
|
|
89
|
+
dict[str, DockerBackend],
|
|
90
|
+
Callable[[], Awaitable[str]],
|
|
91
|
+
RuntimeBackend | None,
|
|
92
|
+
str | None,
|
|
93
|
+
]
|
|
89
94
|
]:
|
|
90
95
|
"""Own one Compose attempt and lend its services until the context exits."""
|
|
91
96
|
local = isinstance(config, DockerConfig)
|
|
@@ -186,9 +191,20 @@ async def compose_services(
|
|
|
186
191
|
}
|
|
187
192
|
}
|
|
188
193
|
}
|
|
189
|
-
|
|
194
|
+
main = authored["services"].get(spec.workspace, {})
|
|
195
|
+
if {"image", "build"} & main.keys():
|
|
190
196
|
# A template default must not replace an authored image or skip its build.
|
|
191
197
|
del base["services"][spec.workspace]["image"]
|
|
198
|
+
elif (
|
|
199
|
+
not spec.image_override
|
|
200
|
+
and (
|
|
201
|
+
directory / "task" / Path(spec.file).parent / "Dockerfile"
|
|
202
|
+
).is_file()
|
|
203
|
+
):
|
|
204
|
+
main = base["services"][spec.workspace]
|
|
205
|
+
del main["image"]
|
|
206
|
+
main["build"] = {"context": "${CONTEXT_DIR}"}
|
|
207
|
+
main["pull_policy"] = "build"
|
|
192
208
|
(directory / "base.json").write_text(json.dumps(base))
|
|
193
209
|
(directory / "env.json").write_text(
|
|
194
210
|
json.dumps({"services": {spec.workspace: {"environment": environment}}})
|
|
@@ -334,6 +350,9 @@ async def compose_services(
|
|
|
334
350
|
backends,
|
|
335
351
|
partial(compose, "stop", spec.workspace, timeout=60),
|
|
336
352
|
host_backend,
|
|
353
|
+
backends[spec.workspace].config.image
|
|
354
|
+
if services[spec.workspace].get("build")
|
|
355
|
+
else None,
|
|
337
356
|
)
|
|
338
357
|
finally:
|
|
339
358
|
await run_shielded(stack.aclose())
|
|
@@ -2,7 +2,7 @@
|
|
|
2
2
|
|
|
3
3
|
import asyncio
|
|
4
4
|
import logging
|
|
5
|
-
from contextlib import AsyncExitStack
|
|
5
|
+
from contextlib import AsyncExitStack, asynccontextmanager
|
|
6
6
|
from functools import partial
|
|
7
7
|
|
|
8
8
|
from verifiers.v1.runtimes.compose import compose_services
|
|
@@ -37,13 +37,19 @@ class _ContainerDeployment(_DeploymentStrategy):
|
|
|
37
37
|
if d.borrowed_runtime is not None:
|
|
38
38
|
raise ValueError("a composed deployment cannot borrow a single target")
|
|
39
39
|
self._services = await d.enter(AsyncExitStack())
|
|
40
|
-
|
|
40
|
+
(
|
|
41
|
+
services,
|
|
42
|
+
self._stop_main,
|
|
43
|
+
host,
|
|
44
|
+
built_image,
|
|
45
|
+
) = await self._services.enter_async_context(
|
|
41
46
|
compose_services(
|
|
42
47
|
d.backend.config, d.spec, d.env, trust_compose=d.config.trust_compose
|
|
43
48
|
)
|
|
44
49
|
)
|
|
45
50
|
d.target_backends = dict(services)
|
|
46
51
|
d.execution_backend = d.harness_backend = services[d.spec.workspace]
|
|
52
|
+
self._remote_built_image = built_image if host is not None else None
|
|
47
53
|
|
|
48
54
|
async def stop_execution(self, d):
|
|
49
55
|
await self._stop_main()
|
|
@@ -57,6 +63,22 @@ class _ContainerDeployment(_DeploymentStrategy):
|
|
|
57
63
|
"solver services teardown failed before grading", exc_info=True
|
|
58
64
|
)
|
|
59
65
|
|
|
66
|
+
@asynccontextmanager
|
|
67
|
+
async def verifier(self, deployment, config, env):
|
|
68
|
+
if self._remote_built_image is None or config.image != self._remote_built_image:
|
|
69
|
+
async with super().verifier(deployment, config, env) as backend:
|
|
70
|
+
yield backend
|
|
71
|
+
return
|
|
72
|
+
# Rebuild from trusted task inputs on a fresh host: the solver's Docker tag
|
|
73
|
+
# is local to its released VM, and its modified container must never travel.
|
|
74
|
+
async with compose_services(
|
|
75
|
+
config,
|
|
76
|
+
deployment.spec,
|
|
77
|
+
env,
|
|
78
|
+
trust_compose=deployment.config.trust_compose,
|
|
79
|
+
) as (services, _, _, _):
|
|
80
|
+
yield services[deployment.spec.workspace]
|
|
81
|
+
|
|
60
82
|
|
|
61
83
|
class _PrivateNetworkDeployment(_DeploymentStrategy):
|
|
62
84
|
async def start(self, d):
|
|
@@ -708,7 +708,11 @@ def resolve_image(
|
|
|
708
708
|
import yaml
|
|
709
709
|
|
|
710
710
|
main = yaml.safe_load(compose.read_text())["services"].get("main", {})
|
|
711
|
-
if
|
|
711
|
+
if (
|
|
712
|
+
main.get("image")
|
|
713
|
+
or "build" in main
|
|
714
|
+
or (task_dir / "environment/Dockerfile").is_file()
|
|
715
|
+
):
|
|
712
716
|
return None
|
|
713
717
|
section = "verifier.environment" if verifier else "environment"
|
|
714
718
|
dockerfile = "tests/Dockerfile" if verifier else "environment/Dockerfile"
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
{verifiers-0.4.1.dev54 → verifiers-0.4.1.dev56}/tests/integration/fixtures/agent_user_harness.py
RENAMED
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
{verifiers-0.4.1.dev54 → verifiers-0.4.1.dev56}/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.dev54 → verifiers-0.4.1.dev56}/tests/integration/fixtures/network_policy.py
RENAMED
|
File without changes
|
|
File without changes
|
|
File without changes
|
{verifiers-0.4.1.dev54 → verifiers-0.4.1.dev56}/tests/integration/fixtures/skill_codeword.py
RENAMED
|
File without changes
|
|
File without changes
|
{verifiers-0.4.1.dev54 → verifiers-0.4.1.dev56}/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
|
|
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
|
|
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
|