verifiers 0.2.2.dev6__tar.gz → 0.2.2.dev7__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.2.2.dev6 → verifiers-0.2.2.dev7}/.gitignore +1 -1
- {verifiers-0.2.2.dev6 → verifiers-0.2.2.dev7}/PKG-INFO +1 -1
- {verifiers-0.2.2.dev6 → verifiers-0.2.2.dev7}/pyproject.toml +2 -1
- {verifiers-0.2.2.dev6 → verifiers-0.2.2.dev7}/tests/v1/conftest.py +64 -80
- verifiers-0.2.2.dev7/tests/v1/fixtures/duet_v1.py +45 -0
- {verifiers-0.2.2.dev6 → verifiers-0.2.2.dev7}/tests/v1/test_configs.py +2 -1
- verifiers-0.2.2.dev7/tests/v1/test_e2e.py +411 -0
- {verifiers-0.2.2.dev6 → verifiers-0.2.2.dev7}/tests/v1/test_envs.py +14 -5
- {verifiers-0.2.2.dev6 → verifiers-0.2.2.dev7}/verifiers/v1/__init__.py +38 -16
- verifiers-0.2.2.dev7/verifiers/v1/agent.py +476 -0
- verifiers-0.2.2.dev7/verifiers/v1/cli/__init__.py +0 -0
- {verifiers-0.2.2.dev6 → verifiers-0.2.2.dev7}/verifiers/v1/cli/dashboard/__init__.py +0 -2
- {verifiers-0.2.2.dev6 → verifiers-0.2.2.dev7}/verifiers/v1/cli/dashboard/eval.py +298 -153
- {verifiers-0.2.2.dev6 → verifiers-0.2.2.dev7}/verifiers/v1/cli/debug.py +11 -6
- verifiers-0.2.2.dev7/verifiers/v1/cli/eval/__init__.py +0 -0
- {verifiers-0.2.2.dev6 → verifiers-0.2.2.dev7}/verifiers/v1/cli/eval/main.py +32 -18
- verifiers-0.2.2.dev7/verifiers/v1/cli/eval/resume.py +134 -0
- {verifiers-0.2.2.dev6 → verifiers-0.2.2.dev7}/verifiers/v1/cli/eval/runner.py +64 -66
- {verifiers-0.2.2.dev6 → verifiers-0.2.2.dev7}/verifiers/v1/cli/gepa.py +36 -16
- {verifiers-0.2.2.dev6 → verifiers-0.2.2.dev7}/verifiers/v1/cli/init.py +3 -3
- verifiers-0.2.2.dev7/verifiers/v1/cli/output.py +134 -0
- {verifiers-0.2.2.dev6 → verifiers-0.2.2.dev7}/verifiers/v1/cli/replay.py +55 -41
- verifiers-0.2.2.dev7/verifiers/v1/cli/resolve.py +98 -0
- {verifiers-0.2.2.dev6 → verifiers-0.2.2.dev7}/verifiers/v1/cli/serve.py +17 -9
- {verifiers-0.2.2.dev6 → verifiers-0.2.2.dev7}/verifiers/v1/cli/validate.py +14 -6
- {verifiers-0.2.2.dev6 → verifiers-0.2.2.dev7}/verifiers/v1/clients/__init__.py +0 -2
- {verifiers-0.2.2.dev6 → verifiers-0.2.2.dev7}/verifiers/v1/clients/client.py +2 -2
- {verifiers-0.2.2.dev6 → verifiers-0.2.2.dev7}/verifiers/v1/configs/__init__.py +0 -2
- verifiers-0.2.2.dev7/verifiers/v1/configs/env.py +169 -0
- {verifiers-0.2.2.dev6 → verifiers-0.2.2.dev7}/verifiers/v1/configs/eval.py +14 -6
- {verifiers-0.2.2.dev6 → verifiers-0.2.2.dev7}/verifiers/v1/configs/init.py +1 -1
- {verifiers-0.2.2.dev6 → verifiers-0.2.2.dev7}/verifiers/v1/configs/replay.py +12 -5
- {verifiers-0.2.2.dev6 → verifiers-0.2.2.dev7}/verifiers/v1/configs/serve.py +1 -1
- {verifiers-0.2.2.dev6 → verifiers-0.2.2.dev7}/verifiers/v1/decorators.py +7 -16
- {verifiers-0.2.2.dev6 → verifiers-0.2.2.dev7}/verifiers/v1/dialects/__init__.py +1 -4
- {verifiers-0.2.2.dev6 → verifiers-0.2.2.dev7}/verifiers/v1/dialects/base.py +0 -21
- verifiers-0.2.2.dev7/verifiers/v1/env.py +543 -0
- verifiers-0.2.2.dev7/verifiers/v1/envs/__init__.py +0 -0
- verifiers-0.2.2.dev7/verifiers/v1/envs/agentic_judge/__init__.py +3 -0
- verifiers-0.2.2.dev7/verifiers/v1/envs/agentic_judge/env.py +174 -0
- verifiers-0.2.2.dev7/verifiers/v1/envs/best_of_n/__init__.py +3 -0
- verifiers-0.2.2.dev7/verifiers/v1/envs/best_of_n/env.py +44 -0
- verifiers-0.2.2.dev7/verifiers/v1/envs/single_agent/__init__.py +3 -0
- verifiers-0.2.2.dev7/verifiers/v1/envs/single_agent/env.py +27 -0
- verifiers-0.2.2.dev7/verifiers/v1/episode.py +53 -0
- {verifiers-0.2.2.dev6 → verifiers-0.2.2.dev7}/verifiers/v1/errors.py +8 -2
- verifiers-0.2.2.dev7/verifiers/v1/gepa/__init__.py +5 -0
- {verifiers-0.2.2.dev6 → verifiers-0.2.2.dev7}/verifiers/v1/gepa/adapter.py +57 -40
- {verifiers-0.2.2.dev6 → verifiers-0.2.2.dev7}/verifiers/v1/gepa/config.py +23 -10
- {verifiers-0.2.2.dev6 → verifiers-0.2.2.dev7}/verifiers/v1/gepa/dataset.py +0 -15
- {verifiers-0.2.2.dev6 → verifiers-0.2.2.dev7}/verifiers/v1/gepa/runner.py +8 -12
- {verifiers-0.2.2.dev6 → verifiers-0.2.2.dev7}/verifiers/v1/graph.py +0 -4
- {verifiers-0.2.2.dev6 → verifiers-0.2.2.dev7}/verifiers/v1/harness.py +22 -15
- {verifiers-0.2.2.dev6 → verifiers-0.2.2.dev7}/verifiers/v1/harnesses/bash/harness.py +3 -3
- {verifiers-0.2.2.dev6 → verifiers-0.2.2.dev7}/verifiers/v1/harnesses/null/harness.py +1 -0
- {verifiers-0.2.2.dev6 → verifiers-0.2.2.dev7}/verifiers/v1/harnesses/terminus_2/harness.py +1 -1
- {verifiers-0.2.2.dev6 → verifiers-0.2.2.dev7}/verifiers/v1/interception/__init__.py +1 -11
- {verifiers-0.2.2.dev6 → verifiers-0.2.2.dev7}/verifiers/v1/interception/server.py +35 -4
- {verifiers-0.2.2.dev6 → verifiers-0.2.2.dev7}/verifiers/v1/interception/tunnel/__init__.py +0 -9
- {verifiers-0.2.2.dev6 → verifiers-0.2.2.dev7}/verifiers/v1/judge.py +9 -1
- {verifiers-0.2.2.dev6 → verifiers-0.2.2.dev7}/verifiers/v1/judges/__init__.py +0 -2
- {verifiers-0.2.2.dev6 → verifiers-0.2.2.dev7}/verifiers/v1/legacy.py +27 -15
- {verifiers-0.2.2.dev6 → verifiers-0.2.2.dev7}/verifiers/v1/loaders.py +111 -8
- {verifiers-0.2.2.dev6 → verifiers-0.2.2.dev7}/verifiers/v1/mcp/__init__.py +0 -2
- {verifiers-0.2.2.dev6 → verifiers-0.2.2.dev7}/verifiers/v1/mcp/launch.py +4 -5
- {verifiers-0.2.2.dev6 → verifiers-0.2.2.dev7}/verifiers/v1/push.py +81 -55
- verifiers-0.2.2.dev7/verifiers/v1/retries.py +152 -0
- verifiers-0.2.2.dev7/verifiers/v1/rollout.py +397 -0
- {verifiers-0.2.2.dev6 → verifiers-0.2.2.dev7}/verifiers/v1/runtimes/__init__.py +0 -2
- {verifiers-0.2.2.dev6 → verifiers-0.2.2.dev7}/verifiers/v1/runtimes/base.py +8 -0
- {verifiers-0.2.2.dev6 → verifiers-0.2.2.dev7}/verifiers/v1/runtimes/modal.py +1 -1
- {verifiers-0.2.2.dev6 → verifiers-0.2.2.dev7}/verifiers/v1/runtimes/prime.py +1 -1
- {verifiers-0.2.2.dev6 → verifiers-0.2.2.dev7}/verifiers/v1/serve/__init__.py +4 -6
- {verifiers-0.2.2.dev6 → verifiers-0.2.2.dev7}/verifiers/v1/serve/client.py +13 -10
- {verifiers-0.2.2.dev6 → verifiers-0.2.2.dev7}/verifiers/v1/serve/pool.py +8 -7
- {verifiers-0.2.2.dev6 → verifiers-0.2.2.dev7}/verifiers/v1/serve/server.py +36 -40
- {verifiers-0.2.2.dev6 → verifiers-0.2.2.dev7}/verifiers/v1/serve/types.py +16 -9
- {verifiers-0.2.2.dev6 → verifiers-0.2.2.dev7}/verifiers/v1/session.py +27 -0
- {verifiers-0.2.2.dev6 → verifiers-0.2.2.dev7}/verifiers/v1/task.py +35 -77
- {verifiers-0.2.2.dev6 → verifiers-0.2.2.dev7}/verifiers/v1/taskset.py +21 -30
- {verifiers-0.2.2.dev6 → verifiers-0.2.2.dev7}/verifiers/v1/tasksets/__init__.py +0 -2
- {verifiers-0.2.2.dev6 → verifiers-0.2.2.dev7}/verifiers/v1/tasksets/harbor/taskset.py +1 -1
- {verifiers-0.2.2.dev6 → verifiers-0.2.2.dev7}/verifiers/v1/tasksets/textarena/taskset.py +1 -1
- {verifiers-0.2.2.dev6 → verifiers-0.2.2.dev7}/verifiers/v1/trace.py +37 -26
- verifiers-0.2.2.dev7/verifiers/v1/utils/__init__.py +0 -0
- verifiers-0.2.2.dev7/verifiers/v1/utils/compile.py +108 -0
- verifiers-0.2.2.dev7/verifiers/v1/utils/generic.py +53 -0
- verifiers-0.2.2.dev6/tests/v1/test_e2e.py +0 -256
- verifiers-0.2.2.dev6/verifiers/v1/cli/__init__.py +0 -1
- verifiers-0.2.2.dev6/verifiers/v1/cli/eval/__init__.py +0 -1
- verifiers-0.2.2.dev6/verifiers/v1/cli/eval/resume.py +0 -115
- verifiers-0.2.2.dev6/verifiers/v1/cli/output.py +0 -90
- verifiers-0.2.2.dev6/verifiers/v1/cli/resolve.py +0 -67
- verifiers-0.2.2.dev6/verifiers/v1/env.py +0 -416
- verifiers-0.2.2.dev6/verifiers/v1/episode.py +0 -55
- verifiers-0.2.2.dev6/verifiers/v1/gepa/__init__.py +0 -12
- verifiers-0.2.2.dev6/verifiers/v1/retries.py +0 -141
- verifiers-0.2.2.dev6/verifiers/v1/rollout.py +0 -267
- verifiers-0.2.2.dev6/verifiers/v1/utils/__init__.py +0 -1
- verifiers-0.2.2.dev6/verifiers/v1/utils/generic.py +0 -19
- {verifiers-0.2.2.dev6 → verifiers-0.2.2.dev7}/LICENSE +0 -0
- {verifiers-0.2.2.dev6 → verifiers-0.2.2.dev7}/README.md +0 -0
- {verifiers-0.2.2.dev6 → verifiers-0.2.2.dev7}/tests/AGENTS.md +0 -0
- {verifiers-0.2.2.dev6 → verifiers-0.2.2.dev7}/tests/__init__.py +0 -0
- {verifiers-0.2.2.dev6 → verifiers-0.2.2.dev7}/tests/conftest.py +0 -0
- {verifiers-0.2.2.dev6 → verifiers-0.2.2.dev7}/tests/test_browser_env.py +0 -0
- {verifiers-0.2.2.dev6 → verifiers-0.2.2.dev7}/tests/test_build_script.py +0 -0
- {verifiers-0.2.2.dev6 → verifiers-0.2.2.dev7}/tests/test_cli_agent_env.py +0 -0
- {verifiers-0.2.2.dev6 → verifiers-0.2.2.dev7}/tests/test_client_auth_errors.py +0 -0
- {verifiers-0.2.2.dev6 → verifiers-0.2.2.dev7}/tests/test_client_config.py +0 -0
- {verifiers-0.2.2.dev6 → verifiers-0.2.2.dev7}/tests/test_client_multimodal_types.py +0 -0
- {verifiers-0.2.2.dev6 → verifiers-0.2.2.dev7}/tests/test_composable_env.py +0 -0
- {verifiers-0.2.2.dev6 → verifiers-0.2.2.dev7}/tests/test_context_token_metrics.py +0 -0
- {verifiers-0.2.2.dev6 → verifiers-0.2.2.dev7}/tests/test_decorator_ranks.py +0 -0
- {verifiers-0.2.2.dev6 → verifiers-0.2.2.dev7}/tests/test_endpoint_registry.py +0 -0
- {verifiers-0.2.2.dev6 → verifiers-0.2.2.dev7}/tests/test_env_group.py +0 -0
- {verifiers-0.2.2.dev6 → verifiers-0.2.2.dev7}/tests/test_env_server.py +0 -0
- {verifiers-0.2.2.dev6 → verifiers-0.2.2.dev7}/tests/test_environment.py +0 -0
- {verifiers-0.2.2.dev6 → verifiers-0.2.2.dev7}/tests/test_environment_extra.py +0 -0
- {verifiers-0.2.2.dev6 → verifiers-0.2.2.dev7}/tests/test_error_chain.py +0 -0
- {verifiers-0.2.2.dev6 → verifiers-0.2.2.dev7}/tests/test_eval_display.py +0 -0
- {verifiers-0.2.2.dev6 → verifiers-0.2.2.dev7}/tests/test_eval_utils.py +0 -0
- {verifiers-0.2.2.dev6 → verifiers-0.2.2.dev7}/tests/test_gepa_cli.py +0 -0
- {verifiers-0.2.2.dev6 → verifiers-0.2.2.dev7}/tests/test_gepa_utils.py +0 -0
- {verifiers-0.2.2.dev6 → verifiers-0.2.2.dev7}/tests/test_gym_env.py +0 -0
- {verifiers-0.2.2.dev6 → verifiers-0.2.2.dev7}/tests/test_harbor_env_mcp.py +0 -0
- {verifiers-0.2.2.dev6 → verifiers-0.2.2.dev7}/tests/test_imports.py +0 -0
- {verifiers-0.2.2.dev6 → verifiers-0.2.2.dev7}/tests/test_init_script.py +0 -0
- {verifiers-0.2.2.dev6 → verifiers-0.2.2.dev7}/tests/test_install_utils.py +0 -0
- {verifiers-0.2.2.dev6 → verifiers-0.2.2.dev7}/tests/test_interception_utils.py +0 -0
- {verifiers-0.2.2.dev6 → verifiers-0.2.2.dev7}/tests/test_logging.py +0 -0
- {verifiers-0.2.2.dev6 → verifiers-0.2.2.dev7}/tests/test_math_rubric.py +0 -0
- {verifiers-0.2.2.dev6 → verifiers-0.2.2.dev7}/tests/test_maybe_think_parser.py +0 -0
- {verifiers-0.2.2.dev6 → verifiers-0.2.2.dev7}/tests/test_message_utils.py +0 -0
- {verifiers-0.2.2.dev6 → verifiers-0.2.2.dev7}/tests/test_message_utils_multimodal.py +0 -0
- {verifiers-0.2.2.dev6 → verifiers-0.2.2.dev7}/tests/test_multiturn_env.py +0 -0
- {verifiers-0.2.2.dev6 → verifiers-0.2.2.dev7}/tests/test_nemorl_client.py +0 -0
- {verifiers-0.2.2.dev6 → verifiers-0.2.2.dev7}/tests/test_openai_chat_completions_token_client.py +0 -0
- {verifiers-0.2.2.dev6 → verifiers-0.2.2.dev7}/tests/test_openai_responses_client.py +0 -0
- {verifiers-0.2.2.dev6 → verifiers-0.2.2.dev7}/tests/test_opencode_rlm_env.py +0 -0
- {verifiers-0.2.2.dev6 → verifiers-0.2.2.dev7}/tests/test_openenv_client.py +0 -0
- {verifiers-0.2.2.dev6 → verifiers-0.2.2.dev7}/tests/test_parser.py +0 -0
- {verifiers-0.2.2.dev6 → verifiers-0.2.2.dev7}/tests/test_path_utils.py +0 -0
- {verifiers-0.2.2.dev6 → verifiers-0.2.2.dev7}/tests/test_per_turn_timing.py +0 -0
- {verifiers-0.2.2.dev6 → verifiers-0.2.2.dev7}/tests/test_pricing_utils.py +0 -0
- {verifiers-0.2.2.dev6 → verifiers-0.2.2.dev7}/tests/test_prime_plugin.py +0 -0
- {verifiers-0.2.2.dev6 → verifiers-0.2.2.dev7}/tests/test_renderer_client.py +0 -0
- {verifiers-0.2.2.dev6 → verifiers-0.2.2.dev7}/tests/test_renderer_e2e.py +0 -0
- {verifiers-0.2.2.dev6 → verifiers-0.2.2.dev7}/tests/test_rlm_composable_env.py +0 -0
- {verifiers-0.2.2.dev6 → verifiers-0.2.2.dev7}/tests/test_rubric.py +0 -0
- {verifiers-0.2.2.dev6 → verifiers-0.2.2.dev7}/tests/test_rubric_group.py +0 -0
- {verifiers-0.2.2.dev6 → verifiers-0.2.2.dev7}/tests/test_sandbox_debug_env.py +0 -0
- {verifiers-0.2.2.dev6 → verifiers-0.2.2.dev7}/tests/test_sandbox_env.py +0 -0
- {verifiers-0.2.2.dev6 → verifiers-0.2.2.dev7}/tests/test_sandbox_mixin.py +0 -0
- {verifiers-0.2.2.dev6 → verifiers-0.2.2.dev7}/tests/test_save_utils.py +0 -0
- {verifiers-0.2.2.dev6 → verifiers-0.2.2.dev7}/tests/test_setup_script.py +0 -0
- {verifiers-0.2.2.dev6 → verifiers-0.2.2.dev7}/tests/test_singleturn_env.py +0 -0
- {verifiers-0.2.2.dev6 → verifiers-0.2.2.dev7}/tests/test_stateful_tool_env.py +0 -0
- {verifiers-0.2.2.dev6 → verifiers-0.2.2.dev7}/tests/test_think_parser.py +0 -0
- {verifiers-0.2.2.dev6 → verifiers-0.2.2.dev7}/tests/test_tool_env.py +0 -0
- {verifiers-0.2.2.dev6 → verifiers-0.2.2.dev7}/tests/test_tool_utils.py +0 -0
- {verifiers-0.2.2.dev6 → verifiers-0.2.2.dev7}/tests/test_trajectory_processing.py +0 -0
- {verifiers-0.2.2.dev6 → verifiers-0.2.2.dev7}/tests/test_tui_info_formatting.py +0 -0
- {verifiers-0.2.2.dev6 → verifiers-0.2.2.dev7}/tests/test_types.py +0 -0
- {verifiers-0.2.2.dev6 → verifiers-0.2.2.dev7}/tests/test_xml_parser.py +0 -0
- {verifiers-0.2.2.dev6 → verifiers-0.2.2.dev7}/tests/v1/fixtures/counter_tool_v1.py +0 -0
- {verifiers-0.2.2.dev6 → verifiers-0.2.2.dev7}/tests/v1/fixtures/echo_agentic_v1.py +0 -0
- {verifiers-0.2.2.dev6 → verifiers-0.2.2.dev7}/tests/v1/fixtures/echo_multi_v0.py +0 -0
- {verifiers-0.2.2.dev6 → verifiers-0.2.2.dev7}/tests/v1/fixtures/echo_tool_v1.py +0 -0
- {verifiers-0.2.2.dev6 → verifiers-0.2.2.dev7}/tests/v1/fixtures/echo_user_sim_v1.py +0 -0
- {verifiers-0.2.2.dev6 → verifiers-0.2.2.dev7}/tests/v1/fixtures/echo_v0.py +0 -0
- {verifiers-0.2.2.dev6 → verifiers-0.2.2.dev7}/tests/v1/fixtures/echo_v1.py +0 -0
- {verifiers-0.2.2.dev6 → verifiers-0.2.2.dev7}/tests/v1/fixtures/pyproject.toml +0 -0
- {verifiers-0.2.2.dev6 → verifiers-0.2.2.dev7}/tests/v1/fixtures/tool_response_image_v1.py +0 -0
- {verifiers-0.2.2.dev6 → verifiers-0.2.2.dev7}/tests/v1/test_color_codeword_tasks.py +0 -0
- {verifiers-0.2.2.dev6 → verifiers-0.2.2.dev7}/tests/v1/test_graph.py +0 -0
- {verifiers-0.2.2.dev6 → verifiers-0.2.2.dev7}/tests/v1/test_judges.py +0 -0
- {verifiers-0.2.2.dev6 → verifiers-0.2.2.dev7}/tests/v1/test_legacy.py +0 -0
- {verifiers-0.2.2.dev6 → verifiers-0.2.2.dev7}/tests/v1/test_scoring.py +0 -0
- {verifiers-0.2.2.dev6 → verifiers-0.2.2.dev7}/tests/v1/test_taskset.py +0 -0
- {verifiers-0.2.2.dev6 → verifiers-0.2.2.dev7}/tests/v1/test_trace.py +0 -0
- {verifiers-0.2.2.dev6 → verifiers-0.2.2.dev7}/verifiers/__init__.py +0 -0
- {verifiers-0.2.2.dev6 → verifiers-0.2.2.dev7}/verifiers/cli/__init__.py +0 -0
- {verifiers-0.2.2.dev6 → verifiers-0.2.2.dev7}/verifiers/cli/commands/__init__.py +0 -0
- {verifiers-0.2.2.dev6 → verifiers-0.2.2.dev7}/verifiers/cli/commands/build.py +0 -0
- {verifiers-0.2.2.dev6 → verifiers-0.2.2.dev7}/verifiers/cli/commands/eval.py +0 -0
- {verifiers-0.2.2.dev6 → verifiers-0.2.2.dev7}/verifiers/cli/commands/gepa.py +0 -0
- {verifiers-0.2.2.dev6 → verifiers-0.2.2.dev7}/verifiers/cli/commands/init.py +0 -0
- {verifiers-0.2.2.dev6 → verifiers-0.2.2.dev7}/verifiers/cli/commands/install.py +0 -0
- {verifiers-0.2.2.dev6 → verifiers-0.2.2.dev7}/verifiers/cli/commands/setup.py +0 -0
- {verifiers-0.2.2.dev6 → verifiers-0.2.2.dev7}/verifiers/cli/plugins/__init__.py +0 -0
- {verifiers-0.2.2.dev6 → verifiers-0.2.2.dev7}/verifiers/cli/plugins/prime.py +0 -0
- {verifiers-0.2.2.dev6 → verifiers-0.2.2.dev7}/verifiers/cli/tui.py +0 -0
- {verifiers-0.2.2.dev6 → verifiers-0.2.2.dev7}/verifiers/clients/__init__.py +0 -0
- {verifiers-0.2.2.dev6 → verifiers-0.2.2.dev7}/verifiers/clients/anthropic_messages_client.py +0 -0
- {verifiers-0.2.2.dev6 → verifiers-0.2.2.dev7}/verifiers/clients/client.py +0 -0
- {verifiers-0.2.2.dev6 → verifiers-0.2.2.dev7}/verifiers/clients/nemorl_chat_completions_client.py +0 -0
- {verifiers-0.2.2.dev6 → verifiers-0.2.2.dev7}/verifiers/clients/openai_chat_completions_client.py +0 -0
- {verifiers-0.2.2.dev6 → verifiers-0.2.2.dev7}/verifiers/clients/openai_chat_completions_token_client.py +0 -0
- {verifiers-0.2.2.dev6 → verifiers-0.2.2.dev7}/verifiers/clients/openai_completions_client.py +0 -0
- {verifiers-0.2.2.dev6 → verifiers-0.2.2.dev7}/verifiers/clients/openai_responses_client.py +0 -0
- {verifiers-0.2.2.dev6 → verifiers-0.2.2.dev7}/verifiers/clients/renderer_client.py +0 -0
- {verifiers-0.2.2.dev6 → verifiers-0.2.2.dev7}/verifiers/decorators.py +0 -0
- {verifiers-0.2.2.dev6 → verifiers-0.2.2.dev7}/verifiers/envs/AGENTS.md +0 -0
- {verifiers-0.2.2.dev6 → verifiers-0.2.2.dev7}/verifiers/envs/__init__.py +0 -0
- {verifiers-0.2.2.dev6 → verifiers-0.2.2.dev7}/verifiers/envs/env_group.py +0 -0
- {verifiers-0.2.2.dev6 → verifiers-0.2.2.dev7}/verifiers/envs/environment.py +0 -0
- {verifiers-0.2.2.dev6 → verifiers-0.2.2.dev7}/verifiers/envs/experimental/README.md +0 -0
- {verifiers-0.2.2.dev6 → verifiers-0.2.2.dev7}/verifiers/envs/experimental/__init__.py +0 -0
- {verifiers-0.2.2.dev6 → verifiers-0.2.2.dev7}/verifiers/envs/experimental/cli_agent_env.py +0 -0
- {verifiers-0.2.2.dev6 → verifiers-0.2.2.dev7}/verifiers/envs/experimental/composable/README.md +0 -0
- {verifiers-0.2.2.dev6 → verifiers-0.2.2.dev7}/verifiers/envs/experimental/composable/__init__.py +0 -0
- {verifiers-0.2.2.dev6 → verifiers-0.2.2.dev7}/verifiers/envs/experimental/composable/_filter.py +0 -0
- {verifiers-0.2.2.dev6 → verifiers-0.2.2.dev7}/verifiers/envs/experimental/composable/composable_env.py +0 -0
- {verifiers-0.2.2.dev6 → verifiers-0.2.2.dev7}/verifiers/envs/experimental/composable/harness.py +0 -0
- {verifiers-0.2.2.dev6 → verifiers-0.2.2.dev7}/verifiers/envs/experimental/composable/harnesses/__init__.py +0 -0
- {verifiers-0.2.2.dev6 → verifiers-0.2.2.dev7}/verifiers/envs/experimental/composable/harnesses/mini_swe_agent.py +0 -0
- {verifiers-0.2.2.dev6 → verifiers-0.2.2.dev7}/verifiers/envs/experimental/composable/harnesses/opencode.py +0 -0
- {verifiers-0.2.2.dev6 → verifiers-0.2.2.dev7}/verifiers/envs/experimental/composable/harnesses/prompt.txt +0 -0
- {verifiers-0.2.2.dev6 → verifiers-0.2.2.dev7}/verifiers/envs/experimental/composable/harnesses/rlm.py +0 -0
- {verifiers-0.2.2.dev6 → verifiers-0.2.2.dev7}/verifiers/envs/experimental/composable/sandbox_debug_env.py +0 -0
- {verifiers-0.2.2.dev6 → verifiers-0.2.2.dev7}/verifiers/envs/experimental/composable/swe_debug_env.py +0 -0
- {verifiers-0.2.2.dev6 → verifiers-0.2.2.dev7}/verifiers/envs/experimental/composable/task.py +0 -0
- {verifiers-0.2.2.dev6 → verifiers-0.2.2.dev7}/verifiers/envs/experimental/composable/tasksets/__init__.py +0 -0
- {verifiers-0.2.2.dev6 → verifiers-0.2.2.dev7}/verifiers/envs/experimental/composable/tasksets/cp/__init__.py +0 -0
- {verifiers-0.2.2.dev6 → verifiers-0.2.2.dev7}/verifiers/envs/experimental/composable/tasksets/cp/cp_task.py +0 -0
- {verifiers-0.2.2.dev6 → verifiers-0.2.2.dev7}/verifiers/envs/experimental/composable/tasksets/cp/test_utils.py +0 -0
- {verifiers-0.2.2.dev6 → verifiers-0.2.2.dev7}/verifiers/envs/experimental/composable/tasksets/harbor/__init__.py +0 -0
- {verifiers-0.2.2.dev6 → verifiers-0.2.2.dev7}/verifiers/envs/experimental/composable/tasksets/harbor/cli_gym.py +0 -0
- {verifiers-0.2.2.dev6 → verifiers-0.2.2.dev7}/verifiers/envs/experimental/composable/tasksets/harbor/harbor.py +0 -0
- {verifiers-0.2.2.dev6 → verifiers-0.2.2.dev7}/verifiers/envs/experimental/composable/tasksets/harbor/terminal_lego.py +0 -0
- {verifiers-0.2.2.dev6 → verifiers-0.2.2.dev7}/verifiers/envs/experimental/composable/tasksets/math/__init__.py +0 -0
- {verifiers-0.2.2.dev6 → verifiers-0.2.2.dev7}/verifiers/envs/experimental/composable/tasksets/math/math_task.py +0 -0
- {verifiers-0.2.2.dev6 → verifiers-0.2.2.dev7}/verifiers/envs/experimental/composable/tasksets/swe/README.md +0 -0
- {verifiers-0.2.2.dev6 → verifiers-0.2.2.dev7}/verifiers/envs/experimental/composable/tasksets/swe/__init__.py +0 -0
- {verifiers-0.2.2.dev6 → verifiers-0.2.2.dev7}/verifiers/envs/experimental/composable/tasksets/swe/multi_swe/__init__.py +0 -0
- {verifiers-0.2.2.dev6 → verifiers-0.2.2.dev7}/verifiers/envs/experimental/composable/tasksets/swe/multi_swe/extract_fix_patch.sh +0 -0
- {verifiers-0.2.2.dev6 → verifiers-0.2.2.dev7}/verifiers/envs/experimental/composable/tasksets/swe/multi_swe/taskset.py +0 -0
- {verifiers-0.2.2.dev6 → verifiers-0.2.2.dev7}/verifiers/envs/experimental/composable/tasksets/swe/openswe/__init__.py +0 -0
- {verifiers-0.2.2.dev6 → verifiers-0.2.2.dev7}/verifiers/envs/experimental/composable/tasksets/swe/openswe/taskset.py +0 -0
- {verifiers-0.2.2.dev6 → verifiers-0.2.2.dev7}/verifiers/envs/experimental/composable/tasksets/swe/r2e_gym/__init__.py +0 -0
- {verifiers-0.2.2.dev6 → verifiers-0.2.2.dev7}/verifiers/envs/experimental/composable/tasksets/swe/r2e_gym/log_parser.py +0 -0
- {verifiers-0.2.2.dev6 → verifiers-0.2.2.dev7}/verifiers/envs/experimental/composable/tasksets/swe/r2e_gym/taskset.py +0 -0
- {verifiers-0.2.2.dev6 → verifiers-0.2.2.dev7}/verifiers/envs/experimental/composable/tasksets/swe/scale_swe/__init__.py +0 -0
- {verifiers-0.2.2.dev6 → verifiers-0.2.2.dev7}/verifiers/envs/experimental/composable/tasksets/swe/scale_swe/taskset.py +0 -0
- {verifiers-0.2.2.dev6 → verifiers-0.2.2.dev7}/verifiers/envs/experimental/composable/tasksets/swe/shared/__init__.py +0 -0
- {verifiers-0.2.2.dev6 → verifiers-0.2.2.dev7}/verifiers/envs/experimental/composable/tasksets/swe/shared/test_patch.py +0 -0
- {verifiers-0.2.2.dev6 → verifiers-0.2.2.dev7}/verifiers/envs/experimental/composable/tasksets/swe/swe_bench/__init__.py +0 -0
- {verifiers-0.2.2.dev6 → verifiers-0.2.2.dev7}/verifiers/envs/experimental/composable/tasksets/swe/swe_bench/taskset.py +0 -0
- {verifiers-0.2.2.dev6 → verifiers-0.2.2.dev7}/verifiers/envs/experimental/composable/tasksets/swe/swe_lego/__init__.py +0 -0
- {verifiers-0.2.2.dev6 → verifiers-0.2.2.dev7}/verifiers/envs/experimental/composable/tasksets/swe/swe_lego/taskset.py +0 -0
- {verifiers-0.2.2.dev6 → verifiers-0.2.2.dev7}/verifiers/envs/experimental/composable/tasksets/swe/swe_rebench_v2/__init__.py +0 -0
- {verifiers-0.2.2.dev6 → verifiers-0.2.2.dev7}/verifiers/envs/experimental/composable/tasksets/swe/swe_rebench_v2/log_parsers.py +0 -0
- {verifiers-0.2.2.dev6 → verifiers-0.2.2.dev7}/verifiers/envs/experimental/composable/tasksets/swe/swe_rebench_v2/taskset.py +0 -0
- {verifiers-0.2.2.dev6 → verifiers-0.2.2.dev7}/verifiers/envs/experimental/composable/tasksets/swe/swe_smith/__init__.py +0 -0
- {verifiers-0.2.2.dev6 → verifiers-0.2.2.dev7}/verifiers/envs/experimental/composable/tasksets/swe/swe_smith/taskset.py +0 -0
- {verifiers-0.2.2.dev6 → verifiers-0.2.2.dev7}/verifiers/envs/experimental/composable/tasksets/swe/swe_tasksets.py +0 -0
- {verifiers-0.2.2.dev6 → verifiers-0.2.2.dev7}/verifiers/envs/experimental/gym_env.py +0 -0
- {verifiers-0.2.2.dev6 → verifiers-0.2.2.dev7}/verifiers/envs/experimental/harbor_env/__init__.py +0 -0
- {verifiers-0.2.2.dev6 → verifiers-0.2.2.dev7}/verifiers/envs/experimental/harbor_env/env.py +0 -0
- {verifiers-0.2.2.dev6 → verifiers-0.2.2.dev7}/verifiers/envs/experimental/harbor_env/mcp.py +0 -0
- {verifiers-0.2.2.dev6 → verifiers-0.2.2.dev7}/verifiers/envs/experimental/mcp_env.py +0 -0
- {verifiers-0.2.2.dev6 → verifiers-0.2.2.dev7}/verifiers/envs/experimental/opencode_env.py +0 -0
- {verifiers-0.2.2.dev6 → verifiers-0.2.2.dev7}/verifiers/envs/experimental/opencode_qa_env.py +0 -0
- {verifiers-0.2.2.dev6 → verifiers-0.2.2.dev7}/verifiers/envs/experimental/opencode_rlm_env.py +0 -0
- {verifiers-0.2.2.dev6 → verifiers-0.2.2.dev7}/verifiers/envs/experimental/sandbox_mixin.py +0 -0
- {verifiers-0.2.2.dev6 → verifiers-0.2.2.dev7}/verifiers/envs/experimental/utils/__init__.py +0 -0
- {verifiers-0.2.2.dev6 → verifiers-0.2.2.dev7}/verifiers/envs/experimental/utils/file_locks.py +0 -0
- {verifiers-0.2.2.dev6 → verifiers-0.2.2.dev7}/verifiers/envs/experimental/utils/git_checkout_cache.py +0 -0
- {verifiers-0.2.2.dev6 → verifiers-0.2.2.dev7}/verifiers/envs/integrations/README.md +0 -0
- {verifiers-0.2.2.dev6 → verifiers-0.2.2.dev7}/verifiers/envs/integrations/__init__.py +0 -0
- {verifiers-0.2.2.dev6 → verifiers-0.2.2.dev7}/verifiers/envs/integrations/browser_env/README.md +0 -0
- {verifiers-0.2.2.dev6 → verifiers-0.2.2.dev7}/verifiers/envs/integrations/browser_env/__init__.py +0 -0
- {verifiers-0.2.2.dev6 → verifiers-0.2.2.dev7}/verifiers/envs/integrations/browser_env/browser_env.py +0 -0
- {verifiers-0.2.2.dev6 → verifiers-0.2.2.dev7}/verifiers/envs/integrations/browser_env/modes/__init__.py +0 -0
- {verifiers-0.2.2.dev6 → verifiers-0.2.2.dev7}/verifiers/envs/integrations/browser_env/modes/base.py +0 -0
- {verifiers-0.2.2.dev6 → verifiers-0.2.2.dev7}/verifiers/envs/integrations/browser_env/modes/cua_mode.py +0 -0
- {verifiers-0.2.2.dev6 → verifiers-0.2.2.dev7}/verifiers/envs/integrations/browser_env/modes/dom_mode.py +0 -0
- {verifiers-0.2.2.dev6 → verifiers-0.2.2.dev7}/verifiers/envs/integrations/openenv_env.py +0 -0
- {verifiers-0.2.2.dev6 → verifiers-0.2.2.dev7}/verifiers/envs/integrations/reasoninggym_env.py +0 -0
- {verifiers-0.2.2.dev6 → verifiers-0.2.2.dev7}/verifiers/envs/integrations/textarena_env.py +0 -0
- {verifiers-0.2.2.dev6 → verifiers-0.2.2.dev7}/verifiers/envs/multiturn_env.py +0 -0
- {verifiers-0.2.2.dev6 → verifiers-0.2.2.dev7}/verifiers/envs/python_env.py +0 -0
- {verifiers-0.2.2.dev6 → verifiers-0.2.2.dev7}/verifiers/envs/sandbox_env.py +0 -0
- {verifiers-0.2.2.dev6 → verifiers-0.2.2.dev7}/verifiers/envs/singleturn_env.py +0 -0
- {verifiers-0.2.2.dev6 → verifiers-0.2.2.dev7}/verifiers/envs/stateful_tool_env.py +0 -0
- {verifiers-0.2.2.dev6 → verifiers-0.2.2.dev7}/verifiers/envs/tool_env.py +0 -0
- {verifiers-0.2.2.dev6 → verifiers-0.2.2.dev7}/verifiers/errors.py +0 -0
- {verifiers-0.2.2.dev6 → verifiers-0.2.2.dev7}/verifiers/gepa/__init__.py +0 -0
- {verifiers-0.2.2.dev6 → verifiers-0.2.2.dev7}/verifiers/gepa/adapter.py +0 -0
- {verifiers-0.2.2.dev6 → verifiers-0.2.2.dev7}/verifiers/gepa/config.py +0 -0
- {verifiers-0.2.2.dev6 → verifiers-0.2.2.dev7}/verifiers/gepa/display.py +0 -0
- {verifiers-0.2.2.dev6 → verifiers-0.2.2.dev7}/verifiers/gepa/gepa_utils.py +0 -0
- {verifiers-0.2.2.dev6 → verifiers-0.2.2.dev7}/verifiers/parsers/__init__.py +0 -0
- {verifiers-0.2.2.dev6 → verifiers-0.2.2.dev7}/verifiers/parsers/maybe_think_parser.py +0 -0
- {verifiers-0.2.2.dev6 → verifiers-0.2.2.dev7}/verifiers/parsers/parser.py +0 -0
- {verifiers-0.2.2.dev6 → verifiers-0.2.2.dev7}/verifiers/parsers/think_parser.py +0 -0
- {verifiers-0.2.2.dev6 → verifiers-0.2.2.dev7}/verifiers/parsers/xml_parser.py +0 -0
- {verifiers-0.2.2.dev6 → verifiers-0.2.2.dev7}/verifiers/rubrics/__init__.py +0 -0
- {verifiers-0.2.2.dev6 → verifiers-0.2.2.dev7}/verifiers/rubrics/experimental/hybrid_math_rubric.py +0 -0
- {verifiers-0.2.2.dev6 → verifiers-0.2.2.dev7}/verifiers/rubrics/judge_rubric.py +0 -0
- {verifiers-0.2.2.dev6 → verifiers-0.2.2.dev7}/verifiers/rubrics/math_rubric.py +0 -0
- {verifiers-0.2.2.dev6 → verifiers-0.2.2.dev7}/verifiers/rubrics/rubric.py +0 -0
- {verifiers-0.2.2.dev6 → verifiers-0.2.2.dev7}/verifiers/rubrics/rubric_group.py +0 -0
- {verifiers-0.2.2.dev6 → verifiers-0.2.2.dev7}/verifiers/scripts/__init__.py +0 -0
- {verifiers-0.2.2.dev6 → verifiers-0.2.2.dev7}/verifiers/scripts/build.py +0 -0
- {verifiers-0.2.2.dev6 → verifiers-0.2.2.dev7}/verifiers/scripts/eval.py +0 -0
- {verifiers-0.2.2.dev6 → verifiers-0.2.2.dev7}/verifiers/scripts/gepa.py +0 -0
- {verifiers-0.2.2.dev6 → verifiers-0.2.2.dev7}/verifiers/scripts/init.py +0 -0
- {verifiers-0.2.2.dev6 → verifiers-0.2.2.dev7}/verifiers/scripts/install.py +0 -0
- {verifiers-0.2.2.dev6 → verifiers-0.2.2.dev7}/verifiers/scripts/setup.py +0 -0
- {verifiers-0.2.2.dev6 → verifiers-0.2.2.dev7}/verifiers/scripts/tui.py +0 -0
- {verifiers-0.2.2.dev6 → verifiers-0.2.2.dev7}/verifiers/serve/__init__.py +0 -0
- {verifiers-0.2.2.dev6 → verifiers-0.2.2.dev7}/verifiers/serve/client/env_client.py +0 -0
- {verifiers-0.2.2.dev6 → verifiers-0.2.2.dev7}/verifiers/serve/client/zmq_env_client.py +0 -0
- {verifiers-0.2.2.dev6 → verifiers-0.2.2.dev7}/verifiers/serve/server/__init__.py +0 -0
- {verifiers-0.2.2.dev6 → verifiers-0.2.2.dev7}/verifiers/serve/server/env_router.py +0 -0
- {verifiers-0.2.2.dev6 → verifiers-0.2.2.dev7}/verifiers/serve/server/env_server.py +0 -0
- {verifiers-0.2.2.dev6 → verifiers-0.2.2.dev7}/verifiers/serve/server/env_worker.py +0 -0
- {verifiers-0.2.2.dev6 → verifiers-0.2.2.dev7}/verifiers/serve/server/zmq_env_server.py +0 -0
- {verifiers-0.2.2.dev6 → verifiers-0.2.2.dev7}/verifiers/serve/types.py +0 -0
- {verifiers-0.2.2.dev6 → verifiers-0.2.2.dev7}/verifiers/types.py +0 -0
- {verifiers-0.2.2.dev6 → verifiers-0.2.2.dev7}/verifiers/utils/__init__.py +0 -0
- {verifiers-0.2.2.dev6 → verifiers-0.2.2.dev7}/verifiers/utils/async_utils.py +0 -0
- {verifiers-0.2.2.dev6 → verifiers-0.2.2.dev7}/verifiers/utils/client_utils.py +0 -0
- {verifiers-0.2.2.dev6 → verifiers-0.2.2.dev7}/verifiers/utils/config_utils.py +0 -0
- {verifiers-0.2.2.dev6 → verifiers-0.2.2.dev7}/verifiers/utils/data_utils.py +0 -0
- {verifiers-0.2.2.dev6 → verifiers-0.2.2.dev7}/verifiers/utils/display_utils.py +0 -0
- {verifiers-0.2.2.dev6 → verifiers-0.2.2.dev7}/verifiers/utils/env_config_utils.py +0 -0
- {verifiers-0.2.2.dev6 → verifiers-0.2.2.dev7}/verifiers/utils/env_utils.py +0 -0
- {verifiers-0.2.2.dev6 → verifiers-0.2.2.dev7}/verifiers/utils/error_utils.py +0 -0
- {verifiers-0.2.2.dev6 → verifiers-0.2.2.dev7}/verifiers/utils/eval_display.py +0 -0
- {verifiers-0.2.2.dev6 → verifiers-0.2.2.dev7}/verifiers/utils/eval_utils.py +0 -0
- {verifiers-0.2.2.dev6 → verifiers-0.2.2.dev7}/verifiers/utils/heartbeat.py +0 -0
- {verifiers-0.2.2.dev6 → verifiers-0.2.2.dev7}/verifiers/utils/import_utils.py +0 -0
- {verifiers-0.2.2.dev6 → verifiers-0.2.2.dev7}/verifiers/utils/install_utils.py +0 -0
- {verifiers-0.2.2.dev6 → verifiers-0.2.2.dev7}/verifiers/utils/interception_utils.py +0 -0
- {verifiers-0.2.2.dev6 → verifiers-0.2.2.dev7}/verifiers/utils/logging_utils.py +0 -0
- {verifiers-0.2.2.dev6 → verifiers-0.2.2.dev7}/verifiers/utils/message_utils.py +0 -0
- {verifiers-0.2.2.dev6 → verifiers-0.2.2.dev7}/verifiers/utils/metric_utils.py +0 -0
- {verifiers-0.2.2.dev6 → verifiers-0.2.2.dev7}/verifiers/utils/path_utils.py +0 -0
- {verifiers-0.2.2.dev6 → verifiers-0.2.2.dev7}/verifiers/utils/pricing_utils.py +0 -0
- {verifiers-0.2.2.dev6 → verifiers-0.2.2.dev7}/verifiers/utils/process_utils.py +0 -0
- {verifiers-0.2.2.dev6 → verifiers-0.2.2.dev7}/verifiers/utils/response_utils.py +0 -0
- {verifiers-0.2.2.dev6 → verifiers-0.2.2.dev7}/verifiers/utils/save_utils.py +0 -0
- {verifiers-0.2.2.dev6 → verifiers-0.2.2.dev7}/verifiers/utils/serve_utils.py +0 -0
- {verifiers-0.2.2.dev6 → verifiers-0.2.2.dev7}/verifiers/utils/thread_utils.py +0 -0
- {verifiers-0.2.2.dev6 → verifiers-0.2.2.dev7}/verifiers/utils/threaded_sandbox_client.py +0 -0
- {verifiers-0.2.2.dev6 → verifiers-0.2.2.dev7}/verifiers/utils/tool_utils.py +0 -0
- {verifiers-0.2.2.dev6 → verifiers-0.2.2.dev7}/verifiers/utils/usage_utils.py +0 -0
- {verifiers-0.2.2.dev6 → verifiers-0.2.2.dev7}/verifiers/utils/version_utils.py +0 -0
- {verifiers-0.2.2.dev6 → verifiers-0.2.2.dev7}/verifiers/v1/cli/dashboard/base.py +0 -0
- {verifiers-0.2.2.dev6 → verifiers-0.2.2.dev7}/verifiers/v1/cli/dashboard/replay.py +0 -0
- {verifiers-0.2.2.dev6 → verifiers-0.2.2.dev7}/verifiers/v1/cli/dashboard/validate.py +0 -0
- {verifiers-0.2.2.dev6 → verifiers-0.2.2.dev7}/verifiers/v1/clients/config.py +0 -0
- {verifiers-0.2.2.dev6 → verifiers-0.2.2.dev7}/verifiers/v1/clients/eval.py +0 -0
- {verifiers-0.2.2.dev6 → verifiers-0.2.2.dev7}/verifiers/v1/clients/train.py +0 -0
- {verifiers-0.2.2.dev6 → verifiers-0.2.2.dev7}/verifiers/v1/configs/debug.py +0 -0
- {verifiers-0.2.2.dev6 → verifiers-0.2.2.dev7}/verifiers/v1/configs/validate.py +0 -0
- {verifiers-0.2.2.dev6 → verifiers-0.2.2.dev7}/verifiers/v1/dialects/anthropic.py +0 -0
- {verifiers-0.2.2.dev6 → verifiers-0.2.2.dev7}/verifiers/v1/dialects/chat.py +0 -0
- {verifiers-0.2.2.dev6 → verifiers-0.2.2.dev7}/verifiers/v1/dialects/responses.py +0 -0
- {verifiers-0.2.2.dev6 → verifiers-0.2.2.dev7}/verifiers/v1/gepa/reflection.py +0 -0
- {verifiers-0.2.2.dev6 → verifiers-0.2.2.dev7}/verifiers/v1/harnesses/__init__.py +0 -0
- {verifiers-0.2.2.dev6 → verifiers-0.2.2.dev7}/verifiers/v1/harnesses/bash/__init__.py +0 -0
- {verifiers-0.2.2.dev6 → verifiers-0.2.2.dev7}/verifiers/v1/harnesses/bash/program.py +0 -0
- {verifiers-0.2.2.dev6 → verifiers-0.2.2.dev7}/verifiers/v1/harnesses/claude_code/__init__.py +0 -0
- {verifiers-0.2.2.dev6 → verifiers-0.2.2.dev7}/verifiers/v1/harnesses/claude_code/harness.py +0 -0
- {verifiers-0.2.2.dev6 → verifiers-0.2.2.dev7}/verifiers/v1/harnesses/codex/__init__.py +0 -0
- {verifiers-0.2.2.dev6 → verifiers-0.2.2.dev7}/verifiers/v1/harnesses/codex/harness.py +0 -0
- {verifiers-0.2.2.dev6 → verifiers-0.2.2.dev7}/verifiers/v1/harnesses/kimi_code/__init__.py +0 -0
- {verifiers-0.2.2.dev6 → verifiers-0.2.2.dev7}/verifiers/v1/harnesses/kimi_code/harness.py +0 -0
- {verifiers-0.2.2.dev6 → verifiers-0.2.2.dev7}/verifiers/v1/harnesses/mini_swe_agent/__init__.py +0 -0
- {verifiers-0.2.2.dev6 → verifiers-0.2.2.dev7}/verifiers/v1/harnesses/mini_swe_agent/harness.py +0 -0
- {verifiers-0.2.2.dev6 → verifiers-0.2.2.dev7}/verifiers/v1/harnesses/mini_swe_agent/program.py +0 -0
- {verifiers-0.2.2.dev6 → verifiers-0.2.2.dev7}/verifiers/v1/harnesses/null/__init__.py +0 -0
- {verifiers-0.2.2.dev6 → verifiers-0.2.2.dev7}/verifiers/v1/harnesses/null/program.py +0 -0
- {verifiers-0.2.2.dev6 → verifiers-0.2.2.dev7}/verifiers/v1/harnesses/pi/__init__.py +0 -0
- {verifiers-0.2.2.dev6 → verifiers-0.2.2.dev7}/verifiers/v1/harnesses/pi/harness.py +0 -0
- {verifiers-0.2.2.dev6 → verifiers-0.2.2.dev7}/verifiers/v1/harnesses/pool/__init__.py +0 -0
- {verifiers-0.2.2.dev6 → verifiers-0.2.2.dev7}/verifiers/v1/harnesses/pool/harness.py +0 -0
- {verifiers-0.2.2.dev6 → verifiers-0.2.2.dev7}/verifiers/v1/harnesses/rlm/__init__.py +0 -0
- {verifiers-0.2.2.dev6 → verifiers-0.2.2.dev7}/verifiers/v1/harnesses/rlm/harness.py +0 -0
- {verifiers-0.2.2.dev6 → verifiers-0.2.2.dev7}/verifiers/v1/harnesses/terminus_2/__init__.py +0 -0
- {verifiers-0.2.2.dev6 → verifiers-0.2.2.dev7}/verifiers/v1/harnesses/terminus_2/program.py +0 -0
- {verifiers-0.2.2.dev6 → verifiers-0.2.2.dev7}/verifiers/v1/interception/base.py +0 -0
- {verifiers-0.2.2.dev6 → verifiers-0.2.2.dev7}/verifiers/v1/interception/pool.py +0 -0
- {verifiers-0.2.2.dev6 → verifiers-0.2.2.dev7}/verifiers/v1/interception/tunnel/base.py +0 -0
- {verifiers-0.2.2.dev6 → verifiers-0.2.2.dev7}/verifiers/v1/interception/tunnel/custom.py +0 -0
- {verifiers-0.2.2.dev6 → verifiers-0.2.2.dev7}/verifiers/v1/interception/tunnel/prime.py +0 -0
- {verifiers-0.2.2.dev6 → verifiers-0.2.2.dev7}/verifiers/v1/judges/reference.py +0 -0
- {verifiers-0.2.2.dev6 → verifiers-0.2.2.dev7}/verifiers/v1/judges/reference.txt +0 -0
- {verifiers-0.2.2.dev6 → verifiers-0.2.2.dev7}/verifiers/v1/judges/rubric.py +0 -0
- {verifiers-0.2.2.dev6 → verifiers-0.2.2.dev7}/verifiers/v1/judges/rubric.txt +0 -0
- {verifiers-0.2.2.dev6 → verifiers-0.2.2.dev7}/verifiers/v1/mcp/server.py +0 -0
- {verifiers-0.2.2.dev6 → verifiers-0.2.2.dev7}/verifiers/v1/mcp/toolset.py +0 -0
- {verifiers-0.2.2.dev6 → verifiers-0.2.2.dev7}/verifiers/v1/mcp/user.py +0 -0
- {verifiers-0.2.2.dev6 → verifiers-0.2.2.dev7}/verifiers/v1/runtimes/docker.py +0 -0
- {verifiers-0.2.2.dev6 → verifiers-0.2.2.dev7}/verifiers/v1/runtimes/limiters.py +0 -0
- {verifiers-0.2.2.dev6 → verifiers-0.2.2.dev7}/verifiers/v1/runtimes/subprocess.py +0 -0
- {verifiers-0.2.2.dev6 → verifiers-0.2.2.dev7}/verifiers/v1/scoring.py +0 -0
- {verifiers-0.2.2.dev6 → verifiers-0.2.2.dev7}/verifiers/v1/state.py +0 -0
- {verifiers-0.2.2.dev6 → verifiers-0.2.2.dev7}/verifiers/v1/tasksets/harbor/__init__.py +0 -0
- {verifiers-0.2.2.dev6 → verifiers-0.2.2.dev7}/verifiers/v1/tasksets/lean/__init__.py +0 -0
- {verifiers-0.2.2.dev6 → verifiers-0.2.2.dev7}/verifiers/v1/tasksets/lean/scoring.py +0 -0
- {verifiers-0.2.2.dev6 → verifiers-0.2.2.dev7}/verifiers/v1/tasksets/lean/taskset.py +0 -0
- {verifiers-0.2.2.dev6 → verifiers-0.2.2.dev7}/verifiers/v1/tasksets/openenv/__init__.py +0 -0
- {verifiers-0.2.2.dev6 → verifiers-0.2.2.dev7}/verifiers/v1/tasksets/openenv/taskset.py +0 -0
- {verifiers-0.2.2.dev6 → verifiers-0.2.2.dev7}/verifiers/v1/tasksets/textarena/__init__.py +0 -0
- {verifiers-0.2.2.dev6 → verifiers-0.2.2.dev7}/verifiers/v1/types.py +0 -0
- {verifiers-0.2.2.dev6 → verifiers-0.2.2.dev7}/verifiers/v1/utils/aio.py +0 -0
- {verifiers-0.2.2.dev6 → verifiers-0.2.2.dev7}/verifiers/v1/utils/format.py +0 -0
- {verifiers-0.2.2.dev6 → verifiers-0.2.2.dev7}/verifiers/v1/utils/git.py +0 -0
- {verifiers-0.2.2.dev6 → verifiers-0.2.2.dev7}/verifiers/v1/utils/image.py +0 -0
- {verifiers-0.2.2.dev6 → verifiers-0.2.2.dev7}/verifiers/v1/utils/install.py +0 -0
- {verifiers-0.2.2.dev6 → verifiers-0.2.2.dev7}/verifiers/v1/utils/interrupt.py +0 -0
- {verifiers-0.2.2.dev6 → verifiers-0.2.2.dev7}/verifiers/v1/utils/logging.py +0 -0
- {verifiers-0.2.2.dev6 → verifiers-0.2.2.dev7}/verifiers/v1/utils/memory.py +0 -0
- {verifiers-0.2.2.dev6 → verifiers-0.2.2.dev7}/verifiers/v1/utils/sampling.py +0 -0
- {verifiers-0.2.2.dev6 → verifiers-0.2.2.dev7}/verifiers/v1/utils/version.py +0 -0
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
Metadata-Version: 2.4
|
|
2
2
|
Name: verifiers
|
|
3
|
-
Version: 0.2.2.
|
|
3
|
+
Version: 0.2.2.dev7
|
|
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
|
|
@@ -77,7 +77,7 @@ dev = [
|
|
|
77
77
|
examples = [
|
|
78
78
|
"compact",
|
|
79
79
|
"gsm8k-v1", "glossary-v1", "deepwiki-v1", "wiki-search-v1", "code-golf-v1",
|
|
80
|
-
"reverse-text-v1", "color-codeword-v1",
|
|
80
|
+
"proposer-solver-v1", "reverse-text-v1", "color-codeword-v1",
|
|
81
81
|
"wordle-v1", "openenv-wordle-v1", "alphabet-sort-v1", "scratchpad-v1",
|
|
82
82
|
]
|
|
83
83
|
|
|
@@ -124,6 +124,7 @@ deepwiki-v1 = { path = "environments/deepwiki_v1", editable = true }
|
|
|
124
124
|
wiki-search-v1 = { path = "environments/wiki_search_v1", editable = true }
|
|
125
125
|
gsm8k-v1 = { path = "environments/gsm8k_v1", editable = true }
|
|
126
126
|
code-golf-v1 = { path = "environments/code_golf_v1", editable = true }
|
|
127
|
+
proposer-solver-v1 = { path = "environments/proposer_solver_v1", editable = true }
|
|
127
128
|
reverse-text-v1 = { path = "environments/reverse_text_v1", editable = true }
|
|
128
129
|
wordle-v1 = { path = "environments/wordle_v1", editable = true }
|
|
129
130
|
openenv-wordle-v1 = { path = "environments/openenv_wordle_v1", editable = true }
|
|
@@ -6,14 +6,18 @@ not unit tests of individual components. They need a model API key (`PRIME_API_K
|
|
|
6
6
|
without one the `e2e`-marked tests skip (config parsing still runs).
|
|
7
7
|
|
|
8
8
|
`run_v1` / `run_v0` mirror the eval CLI's two paths (`run_eval` for a v1 taskset,
|
|
9
|
-
`run_legacy_eval` for a v0 env).
|
|
10
|
-
|
|
11
|
-
|
|
12
|
-
|
|
13
|
-
|
|
14
|
-
|
|
15
|
-
|
|
16
|
-
|
|
9
|
+
`run_legacy_eval` for a v0 env). Placement coverage (harness x harness runtime x user/tool
|
|
10
|
+
server runtime) is PAIRWISE, not a full cross product: each test carries a curated list of
|
|
11
|
+
combinations (in test_e2e.py) that hits every axis value and the cross-boundary pairs with
|
|
12
|
+
distinct networking. The full cross bought flake exposure and CI minutes, not coverage — add
|
|
13
|
+
a combination to a test's list when it exercises a genuinely new reachability pair. The
|
|
14
|
+
placement fixtures below are indirect-only: they translate a parametrized value, and using
|
|
15
|
+
one without `indirect=True` fails loudly.
|
|
16
|
+
|
|
17
|
+
Every combination carries its axes' pytest marks, so subsets select with `-m`:
|
|
18
|
+
|
|
19
|
+
uv run pytest tests/v1 -n auto # everything (needs modal setup)
|
|
20
|
+
uv run pytest tests/v1 -n auto -m "not prime and not modal" # the CI set (host + docker only)
|
|
17
21
|
uv run pytest tests/v1 -n auto -m docker # any case touching the docker runtime
|
|
18
22
|
uv run pytest tests/v1 -n auto -m bash # only the bash harness
|
|
19
23
|
uv run pytest tests/v1 -n auto -m prime # only prime (real sandboxes; local)
|
|
@@ -32,8 +36,9 @@ from pathlib import Path
|
|
|
32
36
|
|
|
33
37
|
import pytest
|
|
34
38
|
|
|
39
|
+
import verifiers.v1 as vf
|
|
35
40
|
from verifiers.v1.configs.eval import EvalConfig
|
|
36
|
-
from verifiers.v1.
|
|
41
|
+
from verifiers.v1.loaders import load_environment
|
|
37
42
|
from verifiers.v1.cli.eval.runner import run_eval
|
|
38
43
|
from verifiers.v1.trace import Trace
|
|
39
44
|
|
|
@@ -41,40 +46,17 @@ from verifiers.v1.trace import Trace
|
|
|
41
46
|
# tests/v1/fixtures, added to the path via `pythonpath` in pyproject so the v1 loader and the
|
|
42
47
|
# v0 legacy bridge both resolve them by id (no install).
|
|
43
48
|
|
|
44
|
-
# The
|
|
45
|
-
#
|
|
46
|
-
#
|
|
47
|
-
# not modal"`. The `id`s make a test read like `<harness>-harness-in-<rt>` /
|
|
48
|
-
# `harness-in-<rt>-with-<user|tool>-...`.
|
|
49
|
-
HARNESS_RUNTIMES = [
|
|
50
|
-
pytest.param(
|
|
51
|
-
"subprocess", marks=pytest.mark.subprocess, id="harness-in-subprocess"
|
|
52
|
-
),
|
|
53
|
-
pytest.param("docker", marks=pytest.mark.docker, id="harness-in-docker"),
|
|
54
|
-
pytest.param("prime", marks=pytest.mark.prime, id="harness-in-prime"),
|
|
55
|
-
pytest.param("modal", marks=pytest.mark.modal, id="harness-in-modal"),
|
|
56
|
-
]
|
|
57
|
-
|
|
58
|
-
|
|
59
|
-
@pytest.fixture(params=HARNESS_RUNTIMES)
|
|
60
|
-
def harness_runtime(request) -> str:
|
|
61
|
-
return request.param
|
|
49
|
+
# The placement fixtures translate one parametrized value each; the combinations live on
|
|
50
|
+
# the tests (`indirect=True`), so coverage is a visible, curated list — never an implicit
|
|
51
|
+
# cross product.
|
|
62
52
|
|
|
63
53
|
|
|
64
|
-
|
|
65
|
-
|
|
66
|
-
|
|
67
|
-
pytest.param("colocated", marks=pytest.mark.colocated, id="with-user-colocated"),
|
|
68
|
-
pytest.param(
|
|
69
|
-
"subprocess", marks=pytest.mark.subprocess, id="with-user-in-subprocess"
|
|
70
|
-
),
|
|
71
|
-
pytest.param("docker", marks=pytest.mark.docker, id="with-user-in-docker"),
|
|
72
|
-
pytest.param("prime", marks=pytest.mark.prime, id="with-user-in-prime"),
|
|
73
|
-
pytest.param("modal", marks=pytest.mark.modal, id="with-user-in-modal"),
|
|
74
|
-
]
|
|
54
|
+
@pytest.fixture
|
|
55
|
+
def harness_runtime(request) -> str:
|
|
56
|
+
return request.param
|
|
75
57
|
|
|
76
58
|
|
|
77
|
-
@pytest.fixture
|
|
59
|
+
@pytest.fixture
|
|
78
60
|
def user_runtime(request) -> dict:
|
|
79
61
|
"""A `taskset.task.user` override placing the user simulator: `colocated` (inside the harness's
|
|
80
62
|
runtime) or its own runtime, by type."""
|
|
@@ -83,19 +65,7 @@ def user_runtime(request) -> dict:
|
|
|
83
65
|
return {"colocated": False, "runtime": {"type": request.param}}
|
|
84
66
|
|
|
85
67
|
|
|
86
|
-
|
|
87
|
-
TOOL_RUNTIMES = [
|
|
88
|
-
pytest.param("colocated", marks=pytest.mark.colocated, id="with-tool-colocated"),
|
|
89
|
-
pytest.param(
|
|
90
|
-
"subprocess", marks=pytest.mark.subprocess, id="with-tool-in-subprocess"
|
|
91
|
-
),
|
|
92
|
-
pytest.param("docker", marks=pytest.mark.docker, id="with-tool-in-docker"),
|
|
93
|
-
pytest.param("prime", marks=pytest.mark.prime, id="with-tool-in-prime"),
|
|
94
|
-
pytest.param("modal", marks=pytest.mark.modal, id="with-tool-in-modal"),
|
|
95
|
-
]
|
|
96
|
-
|
|
97
|
-
|
|
98
|
-
@pytest.fixture(params=TOOL_RUNTIMES)
|
|
68
|
+
@pytest.fixture
|
|
99
69
|
def tool_runtime(request) -> dict:
|
|
100
70
|
"""A `taskset.task.tools` override placing the tool server: `colocated` (inside the harness's
|
|
101
71
|
runtime) or its own runtime, by type."""
|
|
@@ -104,21 +74,10 @@ def tool_runtime(request) -> dict:
|
|
|
104
74
|
return {"runtime": {"type": request.param}}
|
|
105
75
|
|
|
106
76
|
|
|
107
|
-
#
|
|
108
|
-
#
|
|
109
|
-
# `
|
|
110
|
-
|
|
111
|
-
# shell); `test_single_turn` skips the coding agents, which are unreliable on a no-op echo.
|
|
112
|
-
@pytest.fixture(
|
|
113
|
-
params=[
|
|
114
|
-
pytest.param("null", marks=pytest.mark.null, id="null"),
|
|
115
|
-
pytest.param("bash", marks=pytest.mark.bash, id="bash"),
|
|
116
|
-
pytest.param("rlm", marks=pytest.mark.rlm, id="rlm"),
|
|
117
|
-
pytest.param("kimi-code", marks=pytest.mark.kimi_code, id="kimi-code"),
|
|
118
|
-
pytest.param("codex", marks=pytest.mark.codex, id="codex"),
|
|
119
|
-
pytest.param("claude-code", marks=pytest.mark.claude_code, id="claude-code"),
|
|
120
|
-
]
|
|
121
|
-
)
|
|
77
|
+
# Built-in harnesses are bundled in the `harnesses` package; the agent CLIs (`rlm` /
|
|
78
|
+
# `kimi-code` / `codex` / `claude-code`) install their dependencies at rollout. `compact` (an
|
|
79
|
+
# example harness) and `terminus-2` (drives the host tmux) are excluded from e2e.
|
|
80
|
+
@pytest.fixture
|
|
122
81
|
def harness(request) -> str:
|
|
123
82
|
return request.param
|
|
124
83
|
|
|
@@ -164,7 +123,7 @@ def _eval_config(
|
|
|
164
123
|
taskset: str,
|
|
165
124
|
*,
|
|
166
125
|
output_dir: Path,
|
|
167
|
-
harness: str = "null",
|
|
126
|
+
harness: str | None = "null",
|
|
168
127
|
n: int = 1,
|
|
169
128
|
num_tasks: int = 1,
|
|
170
129
|
max_tokens: int = 2048,
|
|
@@ -172,6 +131,7 @@ def _eval_config(
|
|
|
172
131
|
rollout_timeout: float = 180,
|
|
173
132
|
taskset_overrides: dict | None = None,
|
|
174
133
|
harness_overrides: dict | None = None,
|
|
134
|
+
env: dict | None = None,
|
|
175
135
|
pool: dict | None = None,
|
|
176
136
|
model: str | None = None,
|
|
177
137
|
reasoning_effort: str | None = None,
|
|
@@ -183,25 +143,45 @@ def _eval_config(
|
|
|
183
143
|
|
|
184
144
|
`temperature=0` (greedy) makes the run reproducible; `max_tokens` is generous headroom,
|
|
185
145
|
not a target — these trivial tasks finish in a few hundred tokens, so capping tighter only
|
|
186
|
-
risks truncating the reasoning before the answer (which tanks the reward).
|
|
146
|
+
risks truncating the reasoning before the answer (which tanks the reward).
|
|
147
|
+
|
|
148
|
+
`harness=None` leaves every seat on its own story — the multi-agent case: there
|
|
149
|
+
is no run-level harness, so a single-agent test's `harness` lands on the `agent`
|
|
150
|
+
seat and a multi-agent test pins its seats through `env` role fields instead."""
|
|
187
151
|
taskset_cfg = {"id": taskset, **(taskset_overrides or {})}
|
|
188
|
-
|
|
152
|
+
env_cfg = dict(env or {})
|
|
189
153
|
_configure_prime_runtimes(taskset_cfg)
|
|
190
|
-
|
|
154
|
+
if harness:
|
|
155
|
+
harness_cfg = {"id": harness, **(harness_overrides or {})}
|
|
156
|
+
_configure_prime_runtimes(harness_cfg)
|
|
157
|
+
env_cfg.setdefault("agent", {})["harness"] = harness_cfg
|
|
158
|
+
# Per-run caps live on the seats: resolve the env's declared roles and cap
|
|
159
|
+
# each one (a test's own seat dict wins over the shared defaults).
|
|
160
|
+
config_cls = vf.env_config_type(taskset, env_cfg.get("id", ""))
|
|
161
|
+
seats = [
|
|
162
|
+
name
|
|
163
|
+
for name, field in config_cls.model_fields.items()
|
|
164
|
+
if isinstance(field.default, vf.AgentConfig)
|
|
165
|
+
]
|
|
166
|
+
for seat in seats:
|
|
167
|
+
seat_cfg = env_cfg.setdefault(seat, {})
|
|
168
|
+
seat_cfg.setdefault("max_turns", max_turns)
|
|
169
|
+
seat_cfg.setdefault("max_output_tokens", max_tokens)
|
|
170
|
+
seat_cfg.setdefault("timeout", {"rollout": rollout_timeout, "scoring": 60})
|
|
171
|
+
# Flake resilience: retries are per-agent now (flat RetryConfig).
|
|
172
|
+
seat_cfg.setdefault("retries", {"max_retries": 2, "include": ["ProviderError"]})
|
|
191
173
|
return EvalConfig(
|
|
192
|
-
|
|
193
|
-
|
|
174
|
+
env={
|
|
175
|
+
"taskset": taskset_cfg,
|
|
176
|
+
**env_cfg,
|
|
177
|
+
},
|
|
194
178
|
num_tasks=num_tasks,
|
|
195
179
|
num_rollouts=n,
|
|
196
|
-
max_turns=max_turns,
|
|
197
|
-
max_output_tokens=max_tokens,
|
|
198
180
|
sampling={
|
|
199
181
|
"max_tokens": max_tokens,
|
|
200
182
|
"temperature": 0,
|
|
201
183
|
"reasoning_effort": reasoning_effort,
|
|
202
184
|
},
|
|
203
|
-
timeout={"rollout": rollout_timeout, "scoring": 60},
|
|
204
|
-
retries={"rollout": {"max_retries": 2, "include": ["ProviderError"]}},
|
|
205
185
|
rich=False,
|
|
206
186
|
output_dir=output_dir,
|
|
207
187
|
**({"pool": pool} if pool else {}),
|
|
@@ -216,7 +196,9 @@ def run_v1():
|
|
|
216
196
|
|
|
217
197
|
async def _run(taskset: str, **kwargs) -> list[Trace]:
|
|
218
198
|
config = _eval_config(taskset, **kwargs)
|
|
219
|
-
|
|
199
|
+
records = await run_eval(load_environment(config.env), config)
|
|
200
|
+
# The runner answers durability envelopes; the tests assert on traces.
|
|
201
|
+
return [t for r in records for t in r.traces]
|
|
220
202
|
|
|
221
203
|
return _run
|
|
222
204
|
|
|
@@ -233,7 +215,8 @@ def run_v1_server():
|
|
|
233
215
|
async def _run(taskset: str, **kwargs) -> list[Trace]:
|
|
234
216
|
kwargs.setdefault("pool", {"type": "static", "num_workers": 1})
|
|
235
217
|
config = _eval_config(taskset, **kwargs)
|
|
236
|
-
|
|
218
|
+
records = await run_eval_server(config)
|
|
219
|
+
return [t for r in records for t in r.traces]
|
|
237
220
|
|
|
238
221
|
return _run
|
|
239
222
|
|
|
@@ -260,6 +243,7 @@ def run_v0():
|
|
|
260
243
|
rich=False,
|
|
261
244
|
output_dir=output_dir,
|
|
262
245
|
)
|
|
263
|
-
|
|
246
|
+
records = await run_legacy_eval(config)
|
|
247
|
+
return [t for r in records for t in r.traces]
|
|
264
248
|
|
|
265
249
|
return _run
|
|
@@ -0,0 +1,45 @@
|
|
|
1
|
+
"""duet: the smallest multi-agent environment — two roles echo the same phrase.
|
|
2
|
+
|
|
3
|
+
The multi-agent fixture for the v1 e2e suite (resolved by id `duet-v1`): an
|
|
4
|
+
`Env` subclass exported alongside its taskset, with two roles ("a", a trainable
|
|
5
|
+
seat on the run's model; "b", pinned untrainable), a `run()` that fans both out on
|
|
6
|
+
the task, and a `finalize()` that records a sibling-dependent signal. One eval rollout
|
|
7
|
+
should land one record carrying two role-stamped traces.
|
|
8
|
+
"""
|
|
9
|
+
|
|
10
|
+
import asyncio
|
|
11
|
+
|
|
12
|
+
import verifiers.v1 as vf
|
|
13
|
+
|
|
14
|
+
from echo_v1 import EchoTaskset, lenient_match
|
|
15
|
+
|
|
16
|
+
|
|
17
|
+
class DuetEnvConfig(vf.EnvConfig):
|
|
18
|
+
# Both seats pin the lean `null` chat loop.
|
|
19
|
+
a: vf.AgentConfig = vf.AgentConfig(harness=vf.HarnessConfig(id="null"))
|
|
20
|
+
b: vf.AgentConfig = vf.AgentConfig(harness=vf.HarnessConfig(id="null"))
|
|
21
|
+
|
|
22
|
+
|
|
23
|
+
class DuetEnv(vf.Env[DuetEnvConfig]):
|
|
24
|
+
async def setup(self, agents):
|
|
25
|
+
# "b" plays a fixed, untrainable participant.
|
|
26
|
+
agents.b.trainable = False
|
|
27
|
+
|
|
28
|
+
async def run(self, task, agents):
|
|
29
|
+
await asyncio.gather(agents.a.run(task), agents.b.run(task))
|
|
30
|
+
|
|
31
|
+
async def finalize(self, task, episode):
|
|
32
|
+
# A sibling-dependent signal: did every seat echo the phrase?
|
|
33
|
+
echoed = all(
|
|
34
|
+
lenient_match(task.data.answer, t.last_reply) and not t.has_error
|
|
35
|
+
for t in episode.traces
|
|
36
|
+
)
|
|
37
|
+
for trace in episode.traces:
|
|
38
|
+
trace.record_metric("duet", float(echoed))
|
|
39
|
+
|
|
40
|
+
|
|
41
|
+
class DuetTaskset(EchoTaskset):
|
|
42
|
+
pass
|
|
43
|
+
|
|
44
|
+
|
|
45
|
+
__all__ = ["DuetTaskset", "DuetEnv"]
|
|
@@ -23,4 +23,5 @@ CONFIGS = sorted(
|
|
|
23
23
|
@pytest.mark.parametrize("path", CONFIGS, ids=lambda p: p.name)
|
|
24
24
|
def test_eval_config_parses(path: Path) -> None:
|
|
25
25
|
config = EvalConfig.model_validate(tomllib.load(path.open("rb")))
|
|
26
|
-
|
|
26
|
+
# resolved to a v1 taskset or a v0 env id
|
|
27
|
+
assert (config.env.taskset is not None and config.env.taskset.id) or config.id
|