verifiers 0.3.2.dev205__tar.gz → 0.3.2.dev207__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.dev205 → verifiers-0.3.2.dev207}/PKG-INFO +1 -1
- {verifiers-0.3.2.dev205 → verifiers-0.3.2.dev207}/tests/v1/test_judges.py +1 -1
- {verifiers-0.3.2.dev205 → verifiers-0.3.2.dev207}/tests/v1/test_trace.py +41 -9
- {verifiers-0.3.2.dev205 → verifiers-0.3.2.dev207}/verifiers/v1/agent.py +7 -4
- {verifiers-0.3.2.dev205 → verifiers-0.3.2.dev207}/verifiers/v1/clients/train.py +1 -1
- {verifiers-0.3.2.dev205 → verifiers-0.3.2.dev207}/verifiers/v1/configs/agent.py +13 -14
- {verifiers-0.3.2.dev205 → verifiers-0.3.2.dev207}/verifiers/v1/configs/judge.py +1 -1
- {verifiers-0.3.2.dev205 → verifiers-0.3.2.dev207}/verifiers/v1/dialects/anthropic.py +1 -1
- {verifiers-0.3.2.dev205 → verifiers-0.3.2.dev207}/verifiers/v1/dialects/chat.py +1 -1
- {verifiers-0.3.2.dev205 → verifiers-0.3.2.dev207}/verifiers/v1/dialects/responses.py +1 -1
- {verifiers-0.3.2.dev205 → verifiers-0.3.2.dev207}/verifiers/v1/judge.py +23 -4
- {verifiers-0.3.2.dev205 → verifiers-0.3.2.dev207}/verifiers/v1/types.py +21 -12
- {verifiers-0.3.2.dev205 → verifiers-0.3.2.dev207}/verifiers/v1/utils/generic.py +11 -3
- {verifiers-0.3.2.dev205 → verifiers-0.3.2.dev207}/.gitignore +0 -0
- {verifiers-0.3.2.dev205 → verifiers-0.3.2.dev207}/LICENSE +0 -0
- {verifiers-0.3.2.dev205 → verifiers-0.3.2.dev207}/README.md +0 -0
- {verifiers-0.3.2.dev205 → verifiers-0.3.2.dev207}/pyproject.toml +0 -0
- {verifiers-0.3.2.dev205 → verifiers-0.3.2.dev207}/tests/v1/conftest.py +0 -0
- {verifiers-0.3.2.dev205 → verifiers-0.3.2.dev207}/tests/v1/fixtures/agent_user_v1.py +0 -0
- {verifiers-0.3.2.dev205 → verifiers-0.3.2.dev207}/tests/v1/fixtures/counter_tool_v1.py +0 -0
- {verifiers-0.3.2.dev205 → verifiers-0.3.2.dev207}/tests/v1/fixtures/delivery_behaviors.py +0 -0
- {verifiers-0.3.2.dev205 → verifiers-0.3.2.dev207}/tests/v1/fixtures/duet_v1.py +0 -0
- {verifiers-0.3.2.dev205 → verifiers-0.3.2.dev207}/tests/v1/fixtures/echo_acp_resume_v1.py +0 -0
- {verifiers-0.3.2.dev205 → verifiers-0.3.2.dev207}/tests/v1/fixtures/echo_agentic_v1.py +0 -0
- {verifiers-0.3.2.dev205 → verifiers-0.3.2.dev207}/tests/v1/fixtures/echo_tool_v1.py +0 -0
- {verifiers-0.3.2.dev205 → verifiers-0.3.2.dev207}/tests/v1/fixtures/echo_user_sim_v1.py +0 -0
- {verifiers-0.3.2.dev205 → verifiers-0.3.2.dev207}/tests/v1/fixtures/echo_v1.py +0 -0
- {verifiers-0.3.2.dev205 → verifiers-0.3.2.dev207}/tests/v1/fixtures/pyproject.toml +0 -0
- {verifiers-0.3.2.dev205 → verifiers-0.3.2.dev207}/tests/v1/fixtures/tool_response_image_v1.py +0 -0
- {verifiers-0.3.2.dev205 → verifiers-0.3.2.dev207}/tests/v1/test_color_codeword_tasks.py +0 -0
- {verifiers-0.3.2.dev205 → verifiers-0.3.2.dev207}/tests/v1/test_configs.py +0 -0
- {verifiers-0.3.2.dev205 → verifiers-0.3.2.dev207}/tests/v1/test_delivery_behaviors.py +0 -0
- {verifiers-0.3.2.dev205 → verifiers-0.3.2.dev207}/tests/v1/test_e2e.py +0 -0
- {verifiers-0.3.2.dev205 → verifiers-0.3.2.dev207}/tests/v1/test_envs.py +0 -0
- {verifiers-0.3.2.dev205 → verifiers-0.3.2.dev207}/tests/v1/test_graph.py +0 -0
- {verifiers-0.3.2.dev205 → verifiers-0.3.2.dev207}/tests/v1/test_platform_run.py +0 -0
- {verifiers-0.3.2.dev205 → verifiers-0.3.2.dev207}/tests/v1/test_scoring.py +0 -0
- {verifiers-0.3.2.dev205 → verifiers-0.3.2.dev207}/tests/v1/test_serve_delta.py +0 -0
- {verifiers-0.3.2.dev205 → verifiers-0.3.2.dev207}/tests/v1/test_taskset.py +0 -0
- {verifiers-0.3.2.dev205 → verifiers-0.3.2.dev207}/tests/v1/test_tunnel_watchdog.py +0 -0
- {verifiers-0.3.2.dev205 → verifiers-0.3.2.dev207}/verifiers/__init__.py +0 -0
- {verifiers-0.3.2.dev205 → verifiers-0.3.2.dev207}/verifiers/v1/__init__.py +0 -0
- {verifiers-0.3.2.dev205 → verifiers-0.3.2.dev207}/verifiers/v1/acp/__init__.py +0 -0
- {verifiers-0.3.2.dev205 → verifiers-0.3.2.dev207}/verifiers/v1/acp/runner.py +0 -0
- {verifiers-0.3.2.dev205 → verifiers-0.3.2.dev207}/verifiers/v1/cli/__init__.py +0 -0
- {verifiers-0.3.2.dev205 → verifiers-0.3.2.dev207}/verifiers/v1/cli/dashboard/__init__.py +0 -0
- {verifiers-0.3.2.dev205 → verifiers-0.3.2.dev207}/verifiers/v1/cli/dashboard/base.py +0 -0
- {verifiers-0.3.2.dev205 → verifiers-0.3.2.dev207}/verifiers/v1/cli/dashboard/eval.py +0 -0
- {verifiers-0.3.2.dev205 → verifiers-0.3.2.dev207}/verifiers/v1/cli/dashboard/replay.py +0 -0
- {verifiers-0.3.2.dev205 → verifiers-0.3.2.dev207}/verifiers/v1/cli/dashboard/validate.py +0 -0
- {verifiers-0.3.2.dev205 → verifiers-0.3.2.dev207}/verifiers/v1/cli/debug.py +0 -0
- {verifiers-0.3.2.dev205 → verifiers-0.3.2.dev207}/verifiers/v1/cli/eval/__init__.py +0 -0
- {verifiers-0.3.2.dev205 → verifiers-0.3.2.dev207}/verifiers/v1/cli/eval/hint.py +0 -0
- {verifiers-0.3.2.dev205 → verifiers-0.3.2.dev207}/verifiers/v1/cli/eval/main.py +0 -0
- {verifiers-0.3.2.dev205 → verifiers-0.3.2.dev207}/verifiers/v1/cli/eval/resume.py +0 -0
- {verifiers-0.3.2.dev205 → verifiers-0.3.2.dev207}/verifiers/v1/cli/eval/runner.py +0 -0
- {verifiers-0.3.2.dev205 → verifiers-0.3.2.dev207}/verifiers/v1/cli/gepa.py +0 -0
- {verifiers-0.3.2.dev205 → verifiers-0.3.2.dev207}/verifiers/v1/cli/init.py +0 -0
- {verifiers-0.3.2.dev205 → verifiers-0.3.2.dev207}/verifiers/v1/cli/output.py +0 -0
- {verifiers-0.3.2.dev205 → verifiers-0.3.2.dev207}/verifiers/v1/cli/replay.py +0 -0
- {verifiers-0.3.2.dev205 → verifiers-0.3.2.dev207}/verifiers/v1/cli/resolve.py +0 -0
- {verifiers-0.3.2.dev205 → verifiers-0.3.2.dev207}/verifiers/v1/cli/resume.py +0 -0
- {verifiers-0.3.2.dev205 → verifiers-0.3.2.dev207}/verifiers/v1/cli/validate.py +0 -0
- {verifiers-0.3.2.dev205 → verifiers-0.3.2.dev207}/verifiers/v1/clients/__init__.py +0 -0
- {verifiers-0.3.2.dev205 → verifiers-0.3.2.dev207}/verifiers/v1/clients/base.py +0 -0
- {verifiers-0.3.2.dev205 → verifiers-0.3.2.dev207}/verifiers/v1/clients/client.py +0 -0
- {verifiers-0.3.2.dev205 → verifiers-0.3.2.dev207}/verifiers/v1/clients/eval.py +0 -0
- {verifiers-0.3.2.dev205 → verifiers-0.3.2.dev207}/verifiers/v1/configs/__init__.py +0 -0
- {verifiers-0.3.2.dev205 → verifiers-0.3.2.dev207}/verifiers/v1/configs/cli/__init__.py +0 -0
- {verifiers-0.3.2.dev205 → verifiers-0.3.2.dev207}/verifiers/v1/configs/cli/debug.py +0 -0
- {verifiers-0.3.2.dev205 → verifiers-0.3.2.dev207}/verifiers/v1/configs/cli/env.py +0 -0
- {verifiers-0.3.2.dev205 → verifiers-0.3.2.dev207}/verifiers/v1/configs/cli/eval.py +0 -0
- {verifiers-0.3.2.dev205 → verifiers-0.3.2.dev207}/verifiers/v1/configs/cli/init.py +0 -0
- {verifiers-0.3.2.dev205 → verifiers-0.3.2.dev207}/verifiers/v1/configs/cli/replay.py +0 -0
- {verifiers-0.3.2.dev205 → verifiers-0.3.2.dev207}/verifiers/v1/configs/cli/validate.py +0 -0
- {verifiers-0.3.2.dev205 → verifiers-0.3.2.dev207}/verifiers/v1/configs/client.py +0 -0
- {verifiers-0.3.2.dev205 → verifiers-0.3.2.dev207}/verifiers/v1/configs/env.py +0 -0
- {verifiers-0.3.2.dev205 → verifiers-0.3.2.dev207}/verifiers/v1/configs/harness.py +0 -0
- {verifiers-0.3.2.dev205 → verifiers-0.3.2.dev207}/verifiers/v1/configs/retries.py +0 -0
- {verifiers-0.3.2.dev205 → verifiers-0.3.2.dev207}/verifiers/v1/configs/runtime.py +0 -0
- {verifiers-0.3.2.dev205 → verifiers-0.3.2.dev207}/verifiers/v1/configs/select.py +0 -0
- {verifiers-0.3.2.dev205 → verifiers-0.3.2.dev207}/verifiers/v1/configs/serve.py +0 -0
- {verifiers-0.3.2.dev205 → verifiers-0.3.2.dev207}/verifiers/v1/configs/task.py +0 -0
- {verifiers-0.3.2.dev205 → verifiers-0.3.2.dev207}/verifiers/v1/configs/taskset.py +0 -0
- {verifiers-0.3.2.dev205 → verifiers-0.3.2.dev207}/verifiers/v1/dialects/__init__.py +0 -0
- {verifiers-0.3.2.dev205 → verifiers-0.3.2.dev207}/verifiers/v1/dialects/base.py +0 -0
- {verifiers-0.3.2.dev205 → verifiers-0.3.2.dev207}/verifiers/v1/env.py +0 -0
- {verifiers-0.3.2.dev205 → verifiers-0.3.2.dev207}/verifiers/v1/envs/__init__.py +0 -0
- {verifiers-0.3.2.dev205 → verifiers-0.3.2.dev207}/verifiers/v1/envs/agentic_judge/__init__.py +0 -0
- {verifiers-0.3.2.dev205 → verifiers-0.3.2.dev207}/verifiers/v1/envs/agentic_judge/env.py +0 -0
- {verifiers-0.3.2.dev205 → verifiers-0.3.2.dev207}/verifiers/v1/envs/best_of_n/__init__.py +0 -0
- {verifiers-0.3.2.dev205 → verifiers-0.3.2.dev207}/verifiers/v1/envs/best_of_n/env.py +0 -0
- {verifiers-0.3.2.dev205 → verifiers-0.3.2.dev207}/verifiers/v1/envs/isolated_verifier/__init__.py +0 -0
- {verifiers-0.3.2.dev205 → verifiers-0.3.2.dev207}/verifiers/v1/envs/isolated_verifier/env.py +0 -0
- {verifiers-0.3.2.dev205 → verifiers-0.3.2.dev207}/verifiers/v1/envs/shared_agentic_judge/__init__.py +0 -0
- {verifiers-0.3.2.dev205 → verifiers-0.3.2.dev207}/verifiers/v1/envs/single_agent/__init__.py +0 -0
- {verifiers-0.3.2.dev205 → verifiers-0.3.2.dev207}/verifiers/v1/envs/single_agent/env.py +0 -0
- {verifiers-0.3.2.dev205 → verifiers-0.3.2.dev207}/verifiers/v1/envs/user_sim/__init__.py +0 -0
- {verifiers-0.3.2.dev205 → verifiers-0.3.2.dev207}/verifiers/v1/envs/user_sim/env.py +0 -0
- {verifiers-0.3.2.dev205 → verifiers-0.3.2.dev207}/verifiers/v1/episode.py +0 -0
- {verifiers-0.3.2.dev205 → verifiers-0.3.2.dev207}/verifiers/v1/errors.py +0 -0
- {verifiers-0.3.2.dev205 → verifiers-0.3.2.dev207}/verifiers/v1/gepa/__init__.py +0 -0
- {verifiers-0.3.2.dev205 → verifiers-0.3.2.dev207}/verifiers/v1/gepa/adapter.py +0 -0
- {verifiers-0.3.2.dev205 → verifiers-0.3.2.dev207}/verifiers/v1/gepa/config.py +0 -0
- {verifiers-0.3.2.dev205 → verifiers-0.3.2.dev207}/verifiers/v1/gepa/dataset.py +0 -0
- {verifiers-0.3.2.dev205 → verifiers-0.3.2.dev207}/verifiers/v1/gepa/reflection.py +0 -0
- {verifiers-0.3.2.dev205 → verifiers-0.3.2.dev207}/verifiers/v1/gepa/runner.py +0 -0
- {verifiers-0.3.2.dev205 → verifiers-0.3.2.dev207}/verifiers/v1/graph.py +0 -0
- {verifiers-0.3.2.dev205 → verifiers-0.3.2.dev207}/verifiers/v1/harness.py +0 -0
- {verifiers-0.3.2.dev205 → verifiers-0.3.2.dev207}/verifiers/v1/harnesses/__init__.py +0 -0
- {verifiers-0.3.2.dev205 → verifiers-0.3.2.dev207}/verifiers/v1/harnesses/bash/__init__.py +0 -0
- {verifiers-0.3.2.dev205 → verifiers-0.3.2.dev207}/verifiers/v1/harnesses/bash/harness.py +0 -0
- {verifiers-0.3.2.dev205 → verifiers-0.3.2.dev207}/verifiers/v1/harnesses/browser_use/__init__.py +0 -0
- {verifiers-0.3.2.dev205 → verifiers-0.3.2.dev207}/verifiers/v1/harnesses/browser_use/harness.py +0 -0
- {verifiers-0.3.2.dev205 → verifiers-0.3.2.dev207}/verifiers/v1/harnesses/browser_use/program.py +0 -0
- {verifiers-0.3.2.dev205 → verifiers-0.3.2.dev207}/verifiers/v1/harnesses/claude_code/__init__.py +0 -0
- {verifiers-0.3.2.dev205 → verifiers-0.3.2.dev207}/verifiers/v1/harnesses/claude_code/harness.py +0 -0
- {verifiers-0.3.2.dev205 → verifiers-0.3.2.dev207}/verifiers/v1/harnesses/codex/__init__.py +0 -0
- {verifiers-0.3.2.dev205 → verifiers-0.3.2.dev207}/verifiers/v1/harnesses/codex/gate.mjs +0 -0
- {verifiers-0.3.2.dev205 → verifiers-0.3.2.dev207}/verifiers/v1/harnesses/codex/harness.py +0 -0
- {verifiers-0.3.2.dev205 → verifiers-0.3.2.dev207}/verifiers/v1/harnesses/hermes_agent/__init__.py +0 -0
- {verifiers-0.3.2.dev205 → verifiers-0.3.2.dev207}/verifiers/v1/harnesses/hermes_agent/harness.py +0 -0
- {verifiers-0.3.2.dev205 → verifiers-0.3.2.dev207}/verifiers/v1/harnesses/hermes_agent/program.py +0 -0
- {verifiers-0.3.2.dev205 → verifiers-0.3.2.dev207}/verifiers/v1/harnesses/kimi_code/__init__.py +0 -0
- {verifiers-0.3.2.dev205 → verifiers-0.3.2.dev207}/verifiers/v1/harnesses/kimi_code/harness.py +0 -0
- {verifiers-0.3.2.dev205 → verifiers-0.3.2.dev207}/verifiers/v1/harnesses/mini_swe_agent/__init__.py +0 -0
- {verifiers-0.3.2.dev205 → verifiers-0.3.2.dev207}/verifiers/v1/harnesses/mini_swe_agent/harness.py +0 -0
- {verifiers-0.3.2.dev205 → verifiers-0.3.2.dev207}/verifiers/v1/harnesses/mini_swe_agent/program.py +0 -0
- {verifiers-0.3.2.dev205 → verifiers-0.3.2.dev207}/verifiers/v1/harnesses/node.py +0 -0
- {verifiers-0.3.2.dev205 → verifiers-0.3.2.dev207}/verifiers/v1/harnesses/null/__init__.py +0 -0
- {verifiers-0.3.2.dev205 → verifiers-0.3.2.dev207}/verifiers/v1/harnesses/null/harness.py +0 -0
- {verifiers-0.3.2.dev205 → verifiers-0.3.2.dev207}/verifiers/v1/harnesses/openclaw/__init__.py +0 -0
- {verifiers-0.3.2.dev205 → verifiers-0.3.2.dev207}/verifiers/v1/harnesses/openclaw/harness.py +0 -0
- {verifiers-0.3.2.dev205 → verifiers-0.3.2.dev207}/verifiers/v1/harnesses/pi/__init__.py +0 -0
- {verifiers-0.3.2.dev205 → verifiers-0.3.2.dev207}/verifiers/v1/harnesses/pi/gate.mjs +0 -0
- {verifiers-0.3.2.dev205 → verifiers-0.3.2.dev207}/verifiers/v1/harnesses/pi/harness.py +0 -0
- {verifiers-0.3.2.dev205 → verifiers-0.3.2.dev207}/verifiers/v1/harnesses/prime_agent/__init__.py +0 -0
- {verifiers-0.3.2.dev205 → verifiers-0.3.2.dev207}/verifiers/v1/harnesses/prime_agent/harness.py +0 -0
- {verifiers-0.3.2.dev205 → verifiers-0.3.2.dev207}/verifiers/v1/harnesses/rlm/__init__.py +0 -0
- {verifiers-0.3.2.dev205 → verifiers-0.3.2.dev207}/verifiers/v1/harnesses/rlm/harness.py +0 -0
- {verifiers-0.3.2.dev205 → verifiers-0.3.2.dev207}/verifiers/v1/harnesses/terminus_2/__init__.py +0 -0
- {verifiers-0.3.2.dev205 → verifiers-0.3.2.dev207}/verifiers/v1/harnesses/terminus_2/harness.py +0 -0
- {verifiers-0.3.2.dev205 → verifiers-0.3.2.dev207}/verifiers/v1/harnesses/terminus_2/program.py +0 -0
- {verifiers-0.3.2.dev205 → verifiers-0.3.2.dev207}/verifiers/v1/harnesses/utils/__init__.py +0 -0
- {verifiers-0.3.2.dev205 → verifiers-0.3.2.dev207}/verifiers/v1/harnesses/utils/compaction.py +0 -0
- {verifiers-0.3.2.dev205 → verifiers-0.3.2.dev207}/verifiers/v1/harnesses/utils/core.py +0 -0
- {verifiers-0.3.2.dev205 → verifiers-0.3.2.dev207}/verifiers/v1/harnesses/utils/install.py +0 -0
- {verifiers-0.3.2.dev205 → verifiers-0.3.2.dev207}/verifiers/v1/harnesses/utils/launch.py +0 -0
- {verifiers-0.3.2.dev205 → verifiers-0.3.2.dev207}/verifiers/v1/harnesses/utils/mcp.py +0 -0
- {verifiers-0.3.2.dev205 → verifiers-0.3.2.dev207}/verifiers/v1/interception/__init__.py +0 -0
- {verifiers-0.3.2.dev205 → verifiers-0.3.2.dev207}/verifiers/v1/interception/base.py +0 -0
- {verifiers-0.3.2.dev205 → verifiers-0.3.2.dev207}/verifiers/v1/interception/pool.py +0 -0
- {verifiers-0.3.2.dev205 → verifiers-0.3.2.dev207}/verifiers/v1/interception/server.py +0 -0
- {verifiers-0.3.2.dev205 → verifiers-0.3.2.dev207}/verifiers/v1/interception/tunnel/__init__.py +0 -0
- {verifiers-0.3.2.dev205 → verifiers-0.3.2.dev207}/verifiers/v1/interception/tunnel/base.py +0 -0
- {verifiers-0.3.2.dev205 → verifiers-0.3.2.dev207}/verifiers/v1/interception/tunnel/custom.py +0 -0
- {verifiers-0.3.2.dev205 → verifiers-0.3.2.dev207}/verifiers/v1/interception/tunnel/prime.py +0 -0
- {verifiers-0.3.2.dev205 → verifiers-0.3.2.dev207}/verifiers/v1/judges/__init__.py +0 -0
- {verifiers-0.3.2.dev205 → verifiers-0.3.2.dev207}/verifiers/v1/judges/decision.py +0 -0
- {verifiers-0.3.2.dev205 → verifiers-0.3.2.dev207}/verifiers/v1/judges/reference.py +0 -0
- {verifiers-0.3.2.dev205 → verifiers-0.3.2.dev207}/verifiers/v1/judges/reference.txt +0 -0
- {verifiers-0.3.2.dev205 → verifiers-0.3.2.dev207}/verifiers/v1/judges/rubric.py +0 -0
- {verifiers-0.3.2.dev205 → verifiers-0.3.2.dev207}/verifiers/v1/judges/rubric.txt +0 -0
- {verifiers-0.3.2.dev205 → verifiers-0.3.2.dev207}/verifiers/v1/mcp/__init__.py +0 -0
- {verifiers-0.3.2.dev205 → verifiers-0.3.2.dev207}/verifiers/v1/mcp/launch.py +0 -0
- {verifiers-0.3.2.dev205 → verifiers-0.3.2.dev207}/verifiers/v1/mcp/server.py +0 -0
- {verifiers-0.3.2.dev205 → verifiers-0.3.2.dev207}/verifiers/v1/mcp/toolset.py +0 -0
- {verifiers-0.3.2.dev205 → verifiers-0.3.2.dev207}/verifiers/v1/rollout.py +0 -0
- {verifiers-0.3.2.dev205 → verifiers-0.3.2.dev207}/verifiers/v1/runtimes/__init__.py +0 -0
- {verifiers-0.3.2.dev205 → verifiers-0.3.2.dev207}/verifiers/v1/runtimes/apptainer.py +0 -0
- {verifiers-0.3.2.dev205 → verifiers-0.3.2.dev207}/verifiers/v1/runtimes/base.py +0 -0
- {verifiers-0.3.2.dev205 → verifiers-0.3.2.dev207}/verifiers/v1/runtimes/container.py +0 -0
- {verifiers-0.3.2.dev205 → verifiers-0.3.2.dev207}/verifiers/v1/runtimes/docker/__init__.py +0 -0
- {verifiers-0.3.2.dev205 → verifiers-0.3.2.dev207}/verifiers/v1/runtimes/docker/egress.py +0 -0
- {verifiers-0.3.2.dev205 → verifiers-0.3.2.dev207}/verifiers/v1/runtimes/e2b.py +0 -0
- {verifiers-0.3.2.dev205 → verifiers-0.3.2.dev207}/verifiers/v1/runtimes/limiters.py +0 -0
- {verifiers-0.3.2.dev205 → verifiers-0.3.2.dev207}/verifiers/v1/runtimes/modal.py +0 -0
- {verifiers-0.3.2.dev205 → verifiers-0.3.2.dev207}/verifiers/v1/runtimes/prime.py +0 -0
- {verifiers-0.3.2.dev205 → verifiers-0.3.2.dev207}/verifiers/v1/runtimes/subprocess.py +0 -0
- {verifiers-0.3.2.dev205 → verifiers-0.3.2.dev207}/verifiers/v1/semantic.py +0 -0
- {verifiers-0.3.2.dev205 → verifiers-0.3.2.dev207}/verifiers/v1/serve/__init__.py +0 -0
- {verifiers-0.3.2.dev205 → verifiers-0.3.2.dev207}/verifiers/v1/serve/client.py +0 -0
- {verifiers-0.3.2.dev205 → verifiers-0.3.2.dev207}/verifiers/v1/serve/delta.py +0 -0
- {verifiers-0.3.2.dev205 → verifiers-0.3.2.dev207}/verifiers/v1/serve/encoding.py +0 -0
- {verifiers-0.3.2.dev205 → verifiers-0.3.2.dev207}/verifiers/v1/serve/pool.py +0 -0
- {verifiers-0.3.2.dev205 → verifiers-0.3.2.dev207}/verifiers/v1/serve/server.py +0 -0
- {verifiers-0.3.2.dev205 → verifiers-0.3.2.dev207}/verifiers/v1/serve/types.py +0 -0
- {verifiers-0.3.2.dev205 → verifiers-0.3.2.dev207}/verifiers/v1/session.py +0 -0
- {verifiers-0.3.2.dev205 → verifiers-0.3.2.dev207}/verifiers/v1/state.py +0 -0
- {verifiers-0.3.2.dev205 → verifiers-0.3.2.dev207}/verifiers/v1/task.py +0 -0
- {verifiers-0.3.2.dev205 → verifiers-0.3.2.dev207}/verifiers/v1/taskset.py +0 -0
- {verifiers-0.3.2.dev205 → verifiers-0.3.2.dev207}/verifiers/v1/tasksets/__init__.py +0 -0
- {verifiers-0.3.2.dev205 → verifiers-0.3.2.dev207}/verifiers/v1/tasksets/harbor/__init__.py +0 -0
- {verifiers-0.3.2.dev205 → verifiers-0.3.2.dev207}/verifiers/v1/tasksets/harbor/compose.py +0 -0
- {verifiers-0.3.2.dev205 → verifiers-0.3.2.dev207}/verifiers/v1/tasksets/harbor/env.py +0 -0
- {verifiers-0.3.2.dev205 → verifiers-0.3.2.dev207}/verifiers/v1/tasksets/harbor/taskset.py +0 -0
- {verifiers-0.3.2.dev205 → verifiers-0.3.2.dev207}/verifiers/v1/tasksets/harbor/toolset.py +0 -0
- {verifiers-0.3.2.dev205 → verifiers-0.3.2.dev207}/verifiers/v1/tasksets/nemo_gym/__init__.py +0 -0
- {verifiers-0.3.2.dev205 → verifiers-0.3.2.dev207}/verifiers/v1/tasksets/nemo_gym/response.py +0 -0
- {verifiers-0.3.2.dev205 → verifiers-0.3.2.dev207}/verifiers/v1/tasksets/nemo_gym/server.py +0 -0
- {verifiers-0.3.2.dev205 → verifiers-0.3.2.dev207}/verifiers/v1/tasksets/nemo_gym/taskset.py +0 -0
- {verifiers-0.3.2.dev205 → verifiers-0.3.2.dev207}/verifiers/v1/tasksets/nemo_gym/toolset.py +0 -0
- {verifiers-0.3.2.dev205 → verifiers-0.3.2.dev207}/verifiers/v1/tasksets/openenv/__init__.py +0 -0
- {verifiers-0.3.2.dev205 → verifiers-0.3.2.dev207}/verifiers/v1/tasksets/openenv/taskset.py +0 -0
- {verifiers-0.3.2.dev205 → verifiers-0.3.2.dev207}/verifiers/v1/tasksets/textarena/__init__.py +0 -0
- {verifiers-0.3.2.dev205 → verifiers-0.3.2.dev207}/verifiers/v1/tasksets/textarena/taskset.py +0 -0
- {verifiers-0.3.2.dev205 → verifiers-0.3.2.dev207}/verifiers/v1/trace.py +0 -0
- {verifiers-0.3.2.dev205 → verifiers-0.3.2.dev207}/verifiers/v1/utils/__init__.py +0 -0
- {verifiers-0.3.2.dev205 → verifiers-0.3.2.dev207}/verifiers/v1/utils/aio.py +0 -0
- {verifiers-0.3.2.dev205 → verifiers-0.3.2.dev207}/verifiers/v1/utils/artifacts.py +0 -0
- {verifiers-0.3.2.dev205 → verifiers-0.3.2.dev207}/verifiers/v1/utils/compile.py +0 -0
- {verifiers-0.3.2.dev205 → verifiers-0.3.2.dev207}/verifiers/v1/utils/decorators.py +0 -0
- {verifiers-0.3.2.dev205 → verifiers-0.3.2.dev207}/verifiers/v1/utils/eval.py +0 -0
- {verifiers-0.3.2.dev205 → verifiers-0.3.2.dev207}/verifiers/v1/utils/format.py +0 -0
- {verifiers-0.3.2.dev205 → verifiers-0.3.2.dev207}/verifiers/v1/utils/git.py +0 -0
- {verifiers-0.3.2.dev205 → verifiers-0.3.2.dev207}/verifiers/v1/utils/image.py +0 -0
- {verifiers-0.3.2.dev205 → verifiers-0.3.2.dev207}/verifiers/v1/utils/interrupt.py +0 -0
- {verifiers-0.3.2.dev205 → verifiers-0.3.2.dev207}/verifiers/v1/utils/loaders.py +0 -0
- {verifiers-0.3.2.dev205 → verifiers-0.3.2.dev207}/verifiers/v1/utils/logging.py +0 -0
- {verifiers-0.3.2.dev205 → verifiers-0.3.2.dev207}/verifiers/v1/utils/memory.py +0 -0
- {verifiers-0.3.2.dev205 → verifiers-0.3.2.dev207}/verifiers/v1/utils/paths.py +0 -0
- {verifiers-0.3.2.dev205 → verifiers-0.3.2.dev207}/verifiers/v1/utils/platform.py +0 -0
- {verifiers-0.3.2.dev205 → verifiers-0.3.2.dev207}/verifiers/v1/utils/prime.py +0 -0
- {verifiers-0.3.2.dev205 → verifiers-0.3.2.dev207}/verifiers/v1/utils/retries.py +0 -0
- {verifiers-0.3.2.dev205 → verifiers-0.3.2.dev207}/verifiers/v1/utils/scope.py +0 -0
- {verifiers-0.3.2.dev205 → verifiers-0.3.2.dev207}/verifiers/v1/utils/score.py +0 -0
- {verifiers-0.3.2.dev205 → verifiers-0.3.2.dev207}/verifiers/v1/utils/trace_store.py +0 -0
- {verifiers-0.3.2.dev205 → verifiers-0.3.2.dev207}/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.dev207
|
|
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
|
|
@@ -242,7 +242,7 @@ async def test_reference_score(fake_judge_model):
|
|
|
242
242
|
assert len(trace.info["judge_calls"]) == 1 # the call is recorded onto the trace
|
|
243
243
|
judge_record = trace.info["judge_calls"][0]
|
|
244
244
|
assert judge_record["name"] == "reference"
|
|
245
|
-
assert judge_record["request"]["model"] == "openai/gpt-
|
|
245
|
+
assert judge_record["request"]["model"] == "openai/gpt-6-luna"
|
|
246
246
|
assert "Capital of France?" in judge_record["request"]["messages"][0]["content"]
|
|
247
247
|
assert judge_record["response"]["message"] == {
|
|
248
248
|
"role": "assistant",
|
|
@@ -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.configs.agent import resolve_agent
|
|
13
14
|
from verifiers.v1.dialects.chat import ChatDialect
|
|
14
15
|
from verifiers.v1.dialects.responses import ResponsesDialect, fold_assistant
|
|
15
16
|
from verifiers.v1.graph import MessageNode, prepare_turn
|
|
@@ -127,10 +128,30 @@ async def test_failed_segment_does_not_reuse_prior_root_reply():
|
|
|
127
128
|
assert trace.last_reply == "current partial reply"
|
|
128
129
|
|
|
129
130
|
|
|
130
|
-
|
|
131
|
+
@pytest.mark.parametrize(
|
|
132
|
+
"sampling",
|
|
133
|
+
[
|
|
134
|
+
None,
|
|
135
|
+
{},
|
|
136
|
+
{"reasoning_effort": "high"},
|
|
137
|
+
{"temperature": 0.7, "max_tokens": 128, "reasoning_effort": "high"},
|
|
138
|
+
{"temperature": None},
|
|
139
|
+
{"max_completion_tokens": None},
|
|
140
|
+
{"extra_body": {"top_k": None}},
|
|
141
|
+
{"extra_body": None},
|
|
142
|
+
{"top_k": 10, "extra_body": {"frequency_penalty": 0.5}},
|
|
143
|
+
{"extra_body": {"top_k": 20, "max_completion_tokens": None}},
|
|
144
|
+
],
|
|
145
|
+
)
|
|
146
|
+
def test_bare_trace_round_trip(sampling):
|
|
147
|
+
spec = vf.AgentConfig(sampling=sampling)
|
|
148
|
+
defaults = vf.SamplingConfig(temperature=0.7, max_tokens=128, top_k=40)
|
|
149
|
+
# Resolve the live overrides before serializing the effective config on a trace.
|
|
150
|
+
resolved = resolve_agent(spec, sampling=defaults)
|
|
151
|
+
assert set(vf.SamplingConfig.model_fields) <= resolved.sampling.model_fields_set
|
|
131
152
|
# The minimal trace: a base task, no nodes, no extras — dump and back into a plain Trace.
|
|
132
153
|
tr = vf.Trace(
|
|
133
|
-
agent=vf.AgentInfo(config=
|
|
154
|
+
agent=vf.AgentInfo(config=resolved),
|
|
134
155
|
task=vf.TraceTask(
|
|
135
156
|
type="Task",
|
|
136
157
|
data=vf.TaskData(idx=3, prompt="hello"),
|
|
@@ -138,13 +159,24 @@ def test_bare_trace_round_trip():
|
|
|
138
159
|
hash="content-digest",
|
|
139
160
|
),
|
|
140
161
|
)
|
|
141
|
-
|
|
142
|
-
|
|
143
|
-
|
|
144
|
-
|
|
145
|
-
|
|
146
|
-
|
|
147
|
-
|
|
162
|
+
episode = vf.Episode(task=tr.task, traces=[tr], ok=True)
|
|
163
|
+
for rt in (
|
|
164
|
+
vf.Trace.model_validate(tr.model_dump()),
|
|
165
|
+
vf.Trace.model_validate_json(tr.model_dump_json(exclude_none=True)),
|
|
166
|
+
vf.Trace.model_validate(tr.to_record()),
|
|
167
|
+
vf.Episode.model_validate_json(
|
|
168
|
+
episode.model_dump_json(exclude_none=True)
|
|
169
|
+
).traces[0],
|
|
170
|
+
vf.Episode.model_validate(episode.to_record()).traces[0],
|
|
171
|
+
):
|
|
172
|
+
assert rt.id == tr.id
|
|
173
|
+
assert rt.task.type == "Task"
|
|
174
|
+
assert rt.task.data.idx == 3 and rt.task.data.prompt == "hello"
|
|
175
|
+
assert rt.task.key == "dataset/example-3" and rt.task.hash == "content-digest"
|
|
176
|
+
assert rt.num_turns == 0 and rt.num_branches == 0
|
|
177
|
+
assert rt.reward == 0.0 and rt.errors == []
|
|
178
|
+
assert rt.agent.config == tr.agent.config
|
|
179
|
+
assert rt.agent.config.sampling.model_dump() == resolved.sampling.model_dump()
|
|
148
180
|
|
|
149
181
|
|
|
150
182
|
def test_custom_task_state_round_trip(tmp_path):
|
|
@@ -21,7 +21,12 @@ from verifiers.v1.clients import (
|
|
|
21
21
|
EvalClientConfig,
|
|
22
22
|
ModelContext,
|
|
23
23
|
)
|
|
24
|
-
from verifiers.v1.configs.agent import
|
|
24
|
+
from verifiers.v1.configs.agent import (
|
|
25
|
+
AgentConfig,
|
|
26
|
+
TimeoutConfig,
|
|
27
|
+
agent_config_fields,
|
|
28
|
+
resolve_agent,
|
|
29
|
+
)
|
|
25
30
|
from verifiers.v1.configs.runtime import NetworkPolicyConfig
|
|
26
31
|
from verifiers.v1.dialects import parse_message
|
|
27
32
|
from verifiers.v1.harness import Harness
|
|
@@ -41,7 +46,6 @@ from verifiers.v1.trace import Trace
|
|
|
41
46
|
from verifiers.v1.types import (
|
|
42
47
|
AssistantMessage,
|
|
43
48
|
Messages,
|
|
44
|
-
Sampling,
|
|
45
49
|
ToolMessage,
|
|
46
50
|
UserMessage,
|
|
47
51
|
)
|
|
@@ -550,8 +554,7 @@ class Agent:
|
|
|
550
554
|
config = config.model_copy(
|
|
551
555
|
update={"harness": harness_config_type("bash")(id="bash")}
|
|
552
556
|
)
|
|
553
|
-
|
|
554
|
-
config = config.model_copy(update={"sampling": Sampling()})
|
|
557
|
+
config = resolve_agent(config)
|
|
555
558
|
self.config = config
|
|
556
559
|
self.harness = load_harness(config.harness)
|
|
557
560
|
self.ctx = ModelContext(
|
|
@@ -375,7 +375,7 @@ class TrainClient(Client):
|
|
|
375
375
|
prompt_ids: list[int] | None = None
|
|
376
376
|
prompt_attribution: RenderedTokens | None = None
|
|
377
377
|
model = body["model"]
|
|
378
|
-
sampling_params = sampling.
|
|
378
|
+
sampling_params = sampling.model_dump(exclude_none=True)
|
|
379
379
|
chat_template_kwargs = sampling_params.pop("chat_template_kwargs", None)
|
|
380
380
|
cache_salt = sampling_params.pop("cache_salt", None)
|
|
381
381
|
pool = ElasticRendererPool(
|
|
@@ -2,7 +2,7 @@
|
|
|
2
2
|
|
|
3
3
|
from typing import Any
|
|
4
4
|
|
|
5
|
-
from pydantic import BaseModel, Field, SerializeAsAny, model_validator
|
|
5
|
+
from pydantic import BaseModel, Field, SerializeAsAny, field_serializer, model_validator
|
|
6
6
|
from pydantic_config import BaseConfig
|
|
7
7
|
|
|
8
8
|
from verifiers.v1.clients import ClientConfig
|
|
@@ -10,7 +10,7 @@ from verifiers.v1.configs.harness import HarnessConfig, WireHarnessConfig
|
|
|
10
10
|
from verifiers.v1.configs.retries import RetryConfig
|
|
11
11
|
from verifiers.v1.runtimes import PrimeConfig, RuntimeConfig
|
|
12
12
|
from verifiers.v1.types import SamplingConfig
|
|
13
|
-
from verifiers.v1.utils.generic import
|
|
13
|
+
from verifiers.v1.utils.generic import merge_defaults
|
|
14
14
|
|
|
15
15
|
|
|
16
16
|
class TimeoutConfig(BaseConfig):
|
|
@@ -57,6 +57,12 @@ class AgentConfig(BaseConfig):
|
|
|
57
57
|
network_notice: bool = True
|
|
58
58
|
"""Include the runtime's network restrictions in the agent's prompt."""
|
|
59
59
|
|
|
60
|
+
@field_serializer("sampling")
|
|
61
|
+
def _sampling_overrides(self, sampling: SamplingConfig | None) -> dict | None:
|
|
62
|
+
# An unresolved agent carries only overrides across env-server boundaries.
|
|
63
|
+
# resolve_agent fills every field before the config is recorded on a trace.
|
|
64
|
+
return sampling.model_dump(exclude_unset=True) if sampling is not None else None
|
|
65
|
+
|
|
60
66
|
@model_validator(mode="before")
|
|
61
67
|
@classmethod
|
|
62
68
|
def _resolve_harness(cls, data):
|
|
@@ -99,9 +105,7 @@ def merge_agent_defaults(config: type[BaseModel], data: Any) -> Any:
|
|
|
99
105
|
if isinstance(field.default, AgentConfig) and isinstance(
|
|
100
106
|
data.get(name), dict
|
|
101
107
|
):
|
|
102
|
-
data[name] =
|
|
103
|
-
field.default.model_dump(exclude_none=True), data[name]
|
|
104
|
-
)
|
|
108
|
+
data[name] = merge_defaults(field.default, data[name])
|
|
105
109
|
return data
|
|
106
110
|
|
|
107
111
|
|
|
@@ -116,19 +120,14 @@ def resolve_agent(
|
|
|
116
120
|
"""`spec` with what it leaves unset filled from the run's defaults; its own
|
|
117
121
|
sampling values merge over the run's. The one place a seat's identity resolves,
|
|
118
122
|
for configured agent roles."""
|
|
119
|
-
|
|
120
|
-
|
|
121
|
-
|
|
122
|
-
update=deep_merge(
|
|
123
|
-
sampling.model_dump(exclude_unset=True),
|
|
124
|
-
spec.sampling.model_dump(exclude_unset=True),
|
|
125
|
-
)
|
|
126
|
-
)
|
|
123
|
+
defaults = sampling or SamplingConfig()
|
|
124
|
+
overrides = (spec.sampling or SamplingConfig()).model_dump(exclude_unset=True)
|
|
125
|
+
merged = {**defaults.model_dump(), **merge_defaults(defaults, overrides)}
|
|
127
126
|
return spec.model_copy(
|
|
128
127
|
update={
|
|
129
128
|
"harness": spec.harness if spec.harness is not None else harness,
|
|
130
129
|
"model": spec.model if spec.model is not None else model,
|
|
131
130
|
"client": spec.client if spec.client is not None else client,
|
|
132
|
-
"sampling": merged,
|
|
131
|
+
"sampling": SamplingConfig.model_validate(merged),
|
|
133
132
|
}
|
|
134
133
|
)
|
|
@@ -17,7 +17,7 @@ class JudgeConfig(BaseClientConfig):
|
|
|
17
17
|
name: str = ""
|
|
18
18
|
"""Reward key override for a plugged judge."""
|
|
19
19
|
weight: FiniteFloat = 1.0
|
|
20
|
-
model: str = "openai/gpt-
|
|
20
|
+
model: str = "openai/gpt-6-luna"
|
|
21
21
|
sampling: SamplingConfig = SamplingConfig()
|
|
22
22
|
prompt: Path | None = None
|
|
23
23
|
"""File whose text overrides the judge's default prompt template."""
|
|
@@ -660,7 +660,7 @@ class AnthropicDialect(Dialect[AnthropicMessage]):
|
|
|
660
660
|
# Preserve native fields except the eval's model + sampling. `temperature`/`top_p` are
|
|
661
661
|
# authoritative (always dropped, the eval's applied if set); `max_tokens` is required by
|
|
662
662
|
# the API, so the program's is kept unless the eval sets one.
|
|
663
|
-
s = sampling.
|
|
663
|
+
s = sampling.model_dump(exclude_none=True)
|
|
664
664
|
reasoning_effort = s.pop("reasoning_effort", None)
|
|
665
665
|
sampling_output_config = s.pop("output_config", None)
|
|
666
666
|
overrides: dict = {**s, "model": model}
|
|
@@ -586,7 +586,7 @@ class ChatDialect(Dialect[ChatCompletion]):
|
|
|
586
586
|
# Preserve the program's native fields, overlaying only what the eval owns: the model and
|
|
587
587
|
# the sampling knobs it set. The selected model is authoritative even if a permissive
|
|
588
588
|
# sampling config carries an extra field named `model`.
|
|
589
|
-
overrides = sampling.
|
|
589
|
+
overrides = sampling.model_dump(exclude_none=True)
|
|
590
590
|
max_token_keys = {"max_tokens", "max_completion_tokens"}
|
|
591
591
|
max_tokens_overridden = not max_token_keys.isdisjoint(overrides)
|
|
592
592
|
steered = {
|
|
@@ -754,7 +754,7 @@ class ResponsesDialect(Dialect[OpenAIResponse]):
|
|
|
754
754
|
) -> RawRequest:
|
|
755
755
|
# Preserve native fields except the eval's model + sampling, mapped to the Responses shape
|
|
756
756
|
# (`max_tokens` -> `max_output_tokens`); sampling is authoritative.
|
|
757
|
-
s = sampling.
|
|
757
|
+
s = sampling.model_dump(exclude_none=True)
|
|
758
758
|
max_tokens = s.pop("max_tokens", None)
|
|
759
759
|
reasoning_effort = s.pop("reasoning_effort", None)
|
|
760
760
|
sampling_reasoning = s.pop("reasoning", None)
|
|
@@ -53,6 +53,9 @@ import re
|
|
|
53
53
|
from collections.abc import Callable, Mapping, Sequence
|
|
54
54
|
from typing import TYPE_CHECKING, Any, Generic, Literal, cast
|
|
55
55
|
|
|
56
|
+
from openai.types.chat.completion_create_params import (
|
|
57
|
+
CompletionCreateParamsNonStreaming,
|
|
58
|
+
)
|
|
56
59
|
from pydantic import BaseModel
|
|
57
60
|
from typing_extensions import TypeVar
|
|
58
61
|
|
|
@@ -62,8 +65,8 @@ from verifiers.v1.configs.judge import (
|
|
|
62
65
|
judge_key,
|
|
63
66
|
)
|
|
64
67
|
from verifiers.v1.dialects.chat import message_to_wire
|
|
65
|
-
from verifiers.v1.types import Messages, Usage
|
|
66
|
-
from verifiers.v1.utils.generic import concrete_type
|
|
68
|
+
from verifiers.v1.types import Messages, SamplingConfig, Usage
|
|
69
|
+
from verifiers.v1.utils.generic import concrete_type, merge_defaults
|
|
67
70
|
from verifiers.v1.utils.score import parse_judge_choice
|
|
68
71
|
|
|
69
72
|
if TYPE_CHECKING:
|
|
@@ -176,8 +179,24 @@ class Judge(Generic[ParsedT, ConfigT]):
|
|
|
176
179
|
else [message_to_wire(m) for m in messages]
|
|
177
180
|
)
|
|
178
181
|
kwargs: dict[str, Any] = {"model": self.config.model, "messages": wire}
|
|
179
|
-
|
|
180
|
-
|
|
182
|
+
# Transport options are SDK arguments, not model sampling parameters.
|
|
183
|
+
request_options = {
|
|
184
|
+
key: sampling.pop(key)
|
|
185
|
+
for key in ("extra_headers", "extra_query", "timeout")
|
|
186
|
+
if key in sampling
|
|
187
|
+
}
|
|
188
|
+
params = SamplingConfig.model_validate(
|
|
189
|
+
merge_defaults(self.config.sampling, sampling)
|
|
190
|
+
).model_dump(exclude_none=True)
|
|
191
|
+
sdk_fields = CompletionCreateParamsNonStreaming.__annotations__
|
|
192
|
+
kwargs.update(
|
|
193
|
+
{key: value for key, value in params.items() if key in sdk_fields}
|
|
194
|
+
)
|
|
195
|
+
# The SDK accepts provider-specific parameters only through extra_body.
|
|
196
|
+
kwargs["extra_body"] = {
|
|
197
|
+
key: value for key, value in params.items() if key not in sdk_fields
|
|
198
|
+
}
|
|
199
|
+
kwargs.update(request_options)
|
|
181
200
|
|
|
182
201
|
response: JudgeResponse[Any] | None = None
|
|
183
202
|
try:
|
|
@@ -3,7 +3,13 @@ from dataclasses import dataclass
|
|
|
3
3
|
from typing import Annotated, Any, Literal
|
|
4
4
|
|
|
5
5
|
import numpy as np
|
|
6
|
-
from pydantic import
|
|
6
|
+
from pydantic import (
|
|
7
|
+
AliasChoices,
|
|
8
|
+
BaseModel,
|
|
9
|
+
ConfigDict,
|
|
10
|
+
Field,
|
|
11
|
+
model_validator,
|
|
12
|
+
)
|
|
7
13
|
from typing_extensions import TypedDict
|
|
8
14
|
|
|
9
15
|
|
|
@@ -276,17 +282,20 @@ class SamplingConfig(BaseModel):
|
|
|
276
282
|
None, validation_alias=AliasChoices("max_tokens", "max_completion_tokens")
|
|
277
283
|
)
|
|
278
284
|
|
|
279
|
-
|
|
280
|
-
|
|
281
|
-
|
|
282
|
-
|
|
283
|
-
|
|
284
|
-
|
|
285
|
-
|
|
286
|
-
}
|
|
287
|
-
|
|
288
|
-
|
|
289
|
-
|
|
285
|
+
@model_validator(mode="before")
|
|
286
|
+
@classmethod
|
|
287
|
+
def normalize(cls, data: Any) -> Any:
|
|
288
|
+
"""Use one key per parameter before merging overrides, retaining null clears."""
|
|
289
|
+
if not isinstance(data, dict):
|
|
290
|
+
return data
|
|
291
|
+
normalized = {}
|
|
292
|
+
for layer in (data.get("extra_body") or {}, data):
|
|
293
|
+
layer = dict(layer)
|
|
294
|
+
if "max_completion_tokens" in layer:
|
|
295
|
+
layer.setdefault("max_tokens", layer.pop("max_completion_tokens"))
|
|
296
|
+
layer.pop("extra_body", None)
|
|
297
|
+
normalized.update(layer)
|
|
298
|
+
return normalized
|
|
290
299
|
|
|
291
300
|
|
|
292
301
|
Sampling = SamplingConfig
|
|
@@ -4,6 +4,8 @@ from typing import TypeVar, get_args, get_origin
|
|
|
4
4
|
|
|
5
5
|
from pydantic import BaseModel, ValidationError
|
|
6
6
|
|
|
7
|
+
from verifiers.v1.types import SamplingConfig
|
|
8
|
+
|
|
7
9
|
T = TypeVar("T")
|
|
8
10
|
|
|
9
11
|
|
|
@@ -52,15 +54,21 @@ def merge_defaults(defaults: BaseModel, raw: dict | None) -> dict:
|
|
|
52
54
|
`{}` becomes `{type = "grpo", kl = 0.1}`, `{kl = 0.5}` becomes
|
|
53
55
|
`{type = "grpo", kl = 0.5}`, and `{type = "max_rl"}` stays `{type = "max_rl"}`.
|
|
54
56
|
"""
|
|
55
|
-
|
|
56
|
-
|
|
57
|
+
raw = dict(raw or {})
|
|
58
|
+
if isinstance(defaults, SamplingConfig):
|
|
59
|
+
raw = SamplingConfig.model_validate(raw).model_dump(exclude_unset=True)
|
|
57
60
|
identity = {
|
|
58
61
|
k: getattr(defaults, k)
|
|
59
62
|
for k in ("id", "type")
|
|
60
63
|
if k in type(defaults).model_fields
|
|
61
64
|
}
|
|
65
|
+
if any(key in raw and raw[key] != value for key, value in identity.items()):
|
|
66
|
+
return raw
|
|
67
|
+
for name, value in defaults:
|
|
68
|
+
if isinstance(value, BaseModel) and isinstance(raw.get(name), dict):
|
|
69
|
+
raw[name] = merge_defaults(value, raw[name])
|
|
62
70
|
block = {**identity, **_dump_set(defaults)}
|
|
63
|
-
return deep_merge(
|
|
71
|
+
return deep_merge(block, raw)
|
|
64
72
|
|
|
65
73
|
|
|
66
74
|
def _dump_set(config: BaseModel) -> dict:
|
|
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
|
{verifiers-0.3.2.dev205 → verifiers-0.3.2.dev207}/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
|
|
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
|
{verifiers-0.3.2.dev205 → verifiers-0.3.2.dev207}/verifiers/v1/envs/agentic_judge/__init__.py
RENAMED
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
{verifiers-0.3.2.dev205 → verifiers-0.3.2.dev207}/verifiers/v1/envs/isolated_verifier/__init__.py
RENAMED
|
File without changes
|
{verifiers-0.3.2.dev205 → verifiers-0.3.2.dev207}/verifiers/v1/envs/isolated_verifier/env.py
RENAMED
|
File without changes
|
{verifiers-0.3.2.dev205 → verifiers-0.3.2.dev207}/verifiers/v1/envs/shared_agentic_judge/__init__.py
RENAMED
|
File without changes
|
{verifiers-0.3.2.dev205 → verifiers-0.3.2.dev207}/verifiers/v1/envs/single_agent/__init__.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
|