verifiers 0.1.15.dev442__tar.gz → 0.1.15.dev443__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.1.15.dev442 → verifiers-0.1.15.dev443}/PKG-INFO +1 -1
- {verifiers-0.1.15.dev442 → verifiers-0.1.15.dev443}/pyproject.toml +0 -1
- {verifiers-0.1.15.dev442 → verifiers-0.1.15.dev443}/tests/v1/conftest.py +5 -10
- verifiers-0.1.15.dev443/tests/v1/fixtures/counter_tool_v1.py +59 -0
- {verifiers-0.1.15.dev442 → verifiers-0.1.15.dev443}/tests/v1/fixtures/echo_agentic_v1.py +21 -18
- {verifiers-0.1.15.dev442 → verifiers-0.1.15.dev443}/tests/v1/fixtures/echo_tool_v1.py +29 -27
- {verifiers-0.1.15.dev442 → verifiers-0.1.15.dev443}/tests/v1/fixtures/echo_user_sim_v1.py +29 -28
- {verifiers-0.1.15.dev442 → verifiers-0.1.15.dev443}/tests/v1/fixtures/echo_v1.py +22 -17
- {verifiers-0.1.15.dev442 → verifiers-0.1.15.dev443}/tests/v1/fixtures/tool_response_image_v1.py +18 -18
- {verifiers-0.1.15.dev442 → verifiers-0.1.15.dev443}/tests/v1/test_color_codeword_tasks.py +1 -1
- {verifiers-0.1.15.dev442 → verifiers-0.1.15.dev443}/tests/v1/test_e2e.py +66 -58
- {verifiers-0.1.15.dev442 → verifiers-0.1.15.dev443}/tests/v1/test_envs.py +1 -1
- {verifiers-0.1.15.dev442 → verifiers-0.1.15.dev443}/tests/v1/test_graph.py +16 -8
- {verifiers-0.1.15.dev442 → verifiers-0.1.15.dev443}/tests/v1/test_judges.py +69 -65
- {verifiers-0.1.15.dev442 → verifiers-0.1.15.dev443}/tests/v1/test_trace.py +14 -10
- {verifiers-0.1.15.dev442 → verifiers-0.1.15.dev443}/verifiers/v1/__init__.py +18 -9
- verifiers-0.1.15.dev443/verifiers/v1/cli/__init__.py +1 -0
- {verifiers-0.1.15.dev442 → verifiers-0.1.15.dev443}/verifiers/v1/cli/dashboard/__init__.py +1 -1
- {verifiers-0.1.15.dev442 → verifiers-0.1.15.dev443}/verifiers/v1/cli/dashboard/base.py +2 -11
- {verifiers-0.1.15.dev442 → verifiers-0.1.15.dev443}/verifiers/v1/cli/dashboard/eval.py +5 -46
- {verifiers-0.1.15.dev442 → verifiers-0.1.15.dev443}/verifiers/v1/cli/dashboard/replay.py +1 -5
- {verifiers-0.1.15.dev442 → verifiers-0.1.15.dev443}/verifiers/v1/cli/dashboard/validate.py +1 -11
- {verifiers-0.1.15.dev442 → verifiers-0.1.15.dev443}/verifiers/v1/cli/debug.py +23 -14
- verifiers-0.1.15.dev443/verifiers/v1/cli/eval/__init__.py +1 -0
- {verifiers-0.1.15.dev442 → verifiers-0.1.15.dev443}/verifiers/v1/cli/eval/main.py +1 -11
- {verifiers-0.1.15.dev442 → verifiers-0.1.15.dev443}/verifiers/v1/cli/eval/resume.py +3 -6
- {verifiers-0.1.15.dev442 → verifiers-0.1.15.dev443}/verifiers/v1/cli/eval/runner.py +21 -25
- {verifiers-0.1.15.dev442 → verifiers-0.1.15.dev443}/verifiers/v1/cli/init.py +52 -55
- {verifiers-0.1.15.dev442 → verifiers-0.1.15.dev443}/verifiers/v1/cli/output.py +3 -3
- verifiers-0.1.15.dev443/verifiers/v1/cli/replay.py +229 -0
- {verifiers-0.1.15.dev442 → verifiers-0.1.15.dev443}/verifiers/v1/cli/serve.py +1 -7
- {verifiers-0.1.15.dev442 → verifiers-0.1.15.dev443}/verifiers/v1/cli/validate.py +47 -52
- {verifiers-0.1.15.dev442 → verifiers-0.1.15.dev443}/verifiers/v1/clients/client.py +4 -9
- {verifiers-0.1.15.dev442 → verifiers-0.1.15.dev443}/verifiers/v1/clients/eval.py +2 -1
- {verifiers-0.1.15.dev442 → verifiers-0.1.15.dev443}/verifiers/v1/clients/train.py +0 -1
- {verifiers-0.1.15.dev442 → verifiers-0.1.15.dev443}/verifiers/v1/configs/debug.py +0 -5
- {verifiers-0.1.15.dev442 → verifiers-0.1.15.dev443}/verifiers/v1/configs/eval.py +6 -11
- {verifiers-0.1.15.dev442 → verifiers-0.1.15.dev443}/verifiers/v1/configs/init.py +3 -12
- {verifiers-0.1.15.dev442 → verifiers-0.1.15.dev443}/verifiers/v1/configs/replay.py +3 -15
- {verifiers-0.1.15.dev442 → verifiers-0.1.15.dev443}/verifiers/v1/configs/serve.py +1 -7
- verifiers-0.1.15.dev443/verifiers/v1/configs/validate.py +59 -0
- {verifiers-0.1.15.dev442 → verifiers-0.1.15.dev443}/verifiers/v1/decorators.py +24 -44
- {verifiers-0.1.15.dev442 → verifiers-0.1.15.dev443}/verifiers/v1/dialects/__init__.py +1 -6
- {verifiers-0.1.15.dev442 → verifiers-0.1.15.dev443}/verifiers/v1/dialects/anthropic.py +3 -5
- {verifiers-0.1.15.dev442 → verifiers-0.1.15.dev443}/verifiers/v1/dialects/base.py +4 -4
- {verifiers-0.1.15.dev442 → verifiers-0.1.15.dev443}/verifiers/v1/dialects/chat.py +3 -7
- {verifiers-0.1.15.dev442 → verifiers-0.1.15.dev443}/verifiers/v1/dialects/responses.py +4 -4
- {verifiers-0.1.15.dev442 → verifiers-0.1.15.dev443}/verifiers/v1/env.py +79 -100
- verifiers-0.1.15.dev443/verifiers/v1/episode.py +55 -0
- {verifiers-0.1.15.dev442 → verifiers-0.1.15.dev443}/verifiers/v1/errors.py +4 -4
- {verifiers-0.1.15.dev442 → verifiers-0.1.15.dev443}/verifiers/v1/graph.py +1 -9
- {verifiers-0.1.15.dev442 → verifiers-0.1.15.dev443}/verifiers/v1/harness.py +14 -60
- {verifiers-0.1.15.dev442 → verifiers-0.1.15.dev443}/verifiers/v1/harnesses/__init__.py +0 -4
- {verifiers-0.1.15.dev442 → verifiers-0.1.15.dev443}/verifiers/v1/harnesses/codex/harness.py +13 -9
- verifiers-0.1.15.dev443/verifiers/v1/harnesses/default/__init__.py +6 -0
- {verifiers-0.1.15.dev442 → verifiers-0.1.15.dev443}/verifiers/v1/harnesses/default/harness.py +1 -15
- {verifiers-0.1.15.dev442 → verifiers-0.1.15.dev443}/verifiers/v1/harnesses/default/program.py +1 -13
- {verifiers-0.1.15.dev442 → verifiers-0.1.15.dev443}/verifiers/v1/harnesses/kimi_code/harness.py +2 -9
- {verifiers-0.1.15.dev442 → verifiers-0.1.15.dev443}/verifiers/v1/harnesses/mini_swe_agent/harness.py +1 -5
- verifiers-0.1.15.dev443/verifiers/v1/harnesses/null/__init__.py +3 -0
- {verifiers-0.1.15.dev442 → verifiers-0.1.15.dev443}/verifiers/v1/harnesses/null/harness.py +2 -12
- {verifiers-0.1.15.dev442 → verifiers-0.1.15.dev443}/verifiers/v1/harnesses/null/program.py +1 -11
- {verifiers-0.1.15.dev442 → verifiers-0.1.15.dev443}/verifiers/v1/harnesses/rlm/harness.py +3 -14
- {verifiers-0.1.15.dev442 → verifiers-0.1.15.dev443}/verifiers/v1/harnesses/terminus_2/harness.py +1 -5
- {verifiers-0.1.15.dev442 → verifiers-0.1.15.dev443}/verifiers/v1/interception/__init__.py +1 -6
- {verifiers-0.1.15.dev442 → verifiers-0.1.15.dev443}/verifiers/v1/interception/server.py +17 -38
- verifiers-0.1.15.dev443/verifiers/v1/judge.py +275 -0
- verifiers-0.1.15.dev443/verifiers/v1/judges/__init__.py +12 -0
- {verifiers-0.1.15.dev442 → verifiers-0.1.15.dev443}/verifiers/v1/judges/reference.py +6 -23
- {verifiers-0.1.15.dev442 → verifiers-0.1.15.dev443}/verifiers/v1/judges/rubric.py +12 -70
- {verifiers-0.1.15.dev442 → verifiers-0.1.15.dev443}/verifiers/v1/legacy.py +13 -17
- verifiers-0.1.15.dev443/verifiers/v1/loaders.py +147 -0
- verifiers-0.1.15.dev443/verifiers/v1/mcp/__init__.py +30 -0
- verifiers-0.1.15.dev443/verifiers/v1/mcp/launch.py +485 -0
- verifiers-0.1.15.dev443/verifiers/v1/mcp/server.py +302 -0
- verifiers-0.1.15.dev443/verifiers/v1/mcp/toolset.py +34 -0
- verifiers-0.1.15.dev443/verifiers/v1/mcp/user.py +52 -0
- {verifiers-0.1.15.dev442 → verifiers-0.1.15.dev443}/verifiers/v1/push.py +5 -9
- {verifiers-0.1.15.dev442 → verifiers-0.1.15.dev443}/verifiers/v1/rollout.py +42 -98
- {verifiers-0.1.15.dev442 → verifiers-0.1.15.dev443}/verifiers/v1/runtimes/__init__.py +1 -11
- {verifiers-0.1.15.dev442 → verifiers-0.1.15.dev443}/verifiers/v1/runtimes/base.py +10 -63
- {verifiers-0.1.15.dev442 → verifiers-0.1.15.dev443}/verifiers/v1/runtimes/docker.py +3 -10
- {verifiers-0.1.15.dev442 → verifiers-0.1.15.dev443}/verifiers/v1/runtimes/modal.py +3 -6
- {verifiers-0.1.15.dev442 → verifiers-0.1.15.dev443}/verifiers/v1/runtimes/prime.py +4 -8
- {verifiers-0.1.15.dev442 → verifiers-0.1.15.dev443}/verifiers/v1/runtimes/subprocess.py +6 -19
- {verifiers-0.1.15.dev442 → verifiers-0.1.15.dev443}/verifiers/v1/scoring.py +1 -1
- {verifiers-0.1.15.dev442 → verifiers-0.1.15.dev443}/verifiers/v1/serve/__init__.py +1 -6
- {verifiers-0.1.15.dev442 → verifiers-0.1.15.dev443}/verifiers/v1/serve/client.py +7 -7
- {verifiers-0.1.15.dev442 → verifiers-0.1.15.dev443}/verifiers/v1/serve/server.py +9 -35
- {verifiers-0.1.15.dev442 → verifiers-0.1.15.dev443}/verifiers/v1/serve/types.py +10 -16
- verifiers-0.1.15.dev443/verifiers/v1/state.py +23 -0
- verifiers-0.1.15.dev443/verifiers/v1/task.py +333 -0
- verifiers-0.1.15.dev443/verifiers/v1/taskset.py +74 -0
- {verifiers-0.1.15.dev442 → verifiers-0.1.15.dev443}/verifiers/v1/tasksets/__init__.py +1 -5
- {verifiers-0.1.15.dev442 → verifiers-0.1.15.dev443}/verifiers/v1/tasksets/harbor/__init__.py +2 -1
- {verifiers-0.1.15.dev442 → verifiers-0.1.15.dev443}/verifiers/v1/tasksets/harbor/taskset.py +65 -77
- {verifiers-0.1.15.dev442 → verifiers-0.1.15.dev443}/verifiers/v1/tasksets/lean/__init__.py +2 -0
- {verifiers-0.1.15.dev442 → verifiers-0.1.15.dev443}/verifiers/v1/tasksets/lean/taskset.py +119 -155
- {verifiers-0.1.15.dev442 → verifiers-0.1.15.dev443}/verifiers/v1/tasksets/textarena/__init__.py +4 -0
- verifiers-0.1.15.dev443/verifiers/v1/tasksets/textarena/taskset.py +149 -0
- {verifiers-0.1.15.dev442 → verifiers-0.1.15.dev443}/verifiers/v1/trace.py +48 -137
- {verifiers-0.1.15.dev442 → verifiers-0.1.15.dev443}/verifiers/v1/types.py +12 -86
- verifiers-0.1.15.dev443/verifiers/v1/utils/__init__.py +1 -0
- verifiers-0.1.15.dev443/verifiers/v1/utils/generic.py +19 -0
- {verifiers-0.1.15.dev442 → verifiers-0.1.15.dev443}/verifiers/v1/utils/install.py +1 -5
- verifiers-0.1.15.dev442/tests/v1/fixtures/counter_tool_v1.py +0 -67
- verifiers-0.1.15.dev442/verifiers/v1/cli/__init__.py +0 -3
- verifiers-0.1.15.dev442/verifiers/v1/cli/eval/__init__.py +0 -1
- verifiers-0.1.15.dev442/verifiers/v1/cli/replay.py +0 -189
- verifiers-0.1.15.dev442/verifiers/v1/configs/validate.py +0 -84
- verifiers-0.1.15.dev442/verifiers/v1/episode.py +0 -79
- verifiers-0.1.15.dev442/verifiers/v1/harnesses/default/__init__.py +0 -11
- verifiers-0.1.15.dev442/verifiers/v1/harnesses/null/__init__.py +0 -7
- verifiers-0.1.15.dev442/verifiers/v1/judge.py +0 -316
- verifiers-0.1.15.dev442/verifiers/v1/judges/__init__.py +0 -18
- verifiers-0.1.15.dev442/verifiers/v1/loaders.py +0 -201
- verifiers-0.1.15.dev442/verifiers/v1/mcp/__init__.py +0 -34
- verifiers-0.1.15.dev442/verifiers/v1/mcp/launch.py +0 -542
- verifiers-0.1.15.dev442/verifiers/v1/mcp/server.py +0 -401
- verifiers-0.1.15.dev442/verifiers/v1/mcp/toolset.py +0 -90
- verifiers-0.1.15.dev442/verifiers/v1/mcp/user.py +0 -89
- verifiers-0.1.15.dev442/verifiers/v1/state.py +0 -46
- verifiers-0.1.15.dev442/verifiers/v1/task.py +0 -108
- verifiers-0.1.15.dev442/verifiers/v1/taskset.py +0 -286
- verifiers-0.1.15.dev442/verifiers/v1/tasksets/textarena/taskset.py +0 -182
- verifiers-0.1.15.dev442/verifiers/v1/utils/__init__.py +0 -3
- {verifiers-0.1.15.dev442 → verifiers-0.1.15.dev443}/.gitignore +0 -0
- {verifiers-0.1.15.dev442 → verifiers-0.1.15.dev443}/LICENSE +0 -0
- {verifiers-0.1.15.dev442 → verifiers-0.1.15.dev443}/README.md +0 -0
- {verifiers-0.1.15.dev442 → verifiers-0.1.15.dev443}/tests/AGENTS.md +0 -0
- {verifiers-0.1.15.dev442 → verifiers-0.1.15.dev443}/tests/__init__.py +0 -0
- {verifiers-0.1.15.dev442 → verifiers-0.1.15.dev443}/tests/conftest.py +0 -0
- {verifiers-0.1.15.dev442 → verifiers-0.1.15.dev443}/tests/test_browser_env.py +0 -0
- {verifiers-0.1.15.dev442 → verifiers-0.1.15.dev443}/tests/test_build_script.py +0 -0
- {verifiers-0.1.15.dev442 → verifiers-0.1.15.dev443}/tests/test_cli_agent_env.py +0 -0
- {verifiers-0.1.15.dev442 → verifiers-0.1.15.dev443}/tests/test_client_auth_errors.py +0 -0
- {verifiers-0.1.15.dev442 → verifiers-0.1.15.dev443}/tests/test_client_config.py +0 -0
- {verifiers-0.1.15.dev442 → verifiers-0.1.15.dev443}/tests/test_client_multimodal_types.py +0 -0
- {verifiers-0.1.15.dev442 → verifiers-0.1.15.dev443}/tests/test_composable_env.py +0 -0
- {verifiers-0.1.15.dev442 → verifiers-0.1.15.dev443}/tests/test_context_token_metrics.py +0 -0
- {verifiers-0.1.15.dev442 → verifiers-0.1.15.dev443}/tests/test_decorator_ranks.py +0 -0
- {verifiers-0.1.15.dev442 → verifiers-0.1.15.dev443}/tests/test_endpoint_registry.py +0 -0
- {verifiers-0.1.15.dev442 → verifiers-0.1.15.dev443}/tests/test_env_group.py +0 -0
- {verifiers-0.1.15.dev442 → verifiers-0.1.15.dev443}/tests/test_env_server.py +0 -0
- {verifiers-0.1.15.dev442 → verifiers-0.1.15.dev443}/tests/test_environment.py +0 -0
- {verifiers-0.1.15.dev442 → verifiers-0.1.15.dev443}/tests/test_environment_extra.py +0 -0
- {verifiers-0.1.15.dev442 → verifiers-0.1.15.dev443}/tests/test_envs.py +0 -0
- {verifiers-0.1.15.dev442 → verifiers-0.1.15.dev443}/tests/test_error_chain.py +0 -0
- {verifiers-0.1.15.dev442 → verifiers-0.1.15.dev443}/tests/test_eval_display.py +0 -0
- {verifiers-0.1.15.dev442 → verifiers-0.1.15.dev443}/tests/test_eval_utils.py +0 -0
- {verifiers-0.1.15.dev442 → verifiers-0.1.15.dev443}/tests/test_gepa_cli.py +0 -0
- {verifiers-0.1.15.dev442 → verifiers-0.1.15.dev443}/tests/test_gepa_utils.py +0 -0
- {verifiers-0.1.15.dev442 → verifiers-0.1.15.dev443}/tests/test_gym_env.py +0 -0
- {verifiers-0.1.15.dev442 → verifiers-0.1.15.dev443}/tests/test_harbor_env_mcp.py +0 -0
- {verifiers-0.1.15.dev442 → verifiers-0.1.15.dev443}/tests/test_imports.py +0 -0
- {verifiers-0.1.15.dev442 → verifiers-0.1.15.dev443}/tests/test_init_script.py +0 -0
- {verifiers-0.1.15.dev442 → verifiers-0.1.15.dev443}/tests/test_install_utils.py +0 -0
- {verifiers-0.1.15.dev442 → verifiers-0.1.15.dev443}/tests/test_interception_utils.py +0 -0
- {verifiers-0.1.15.dev442 → verifiers-0.1.15.dev443}/tests/test_logging.py +0 -0
- {verifiers-0.1.15.dev442 → verifiers-0.1.15.dev443}/tests/test_math_rubric.py +0 -0
- {verifiers-0.1.15.dev442 → verifiers-0.1.15.dev443}/tests/test_maybe_think_parser.py +0 -0
- {verifiers-0.1.15.dev442 → verifiers-0.1.15.dev443}/tests/test_message_utils.py +0 -0
- {verifiers-0.1.15.dev442 → verifiers-0.1.15.dev443}/tests/test_message_utils_multimodal.py +0 -0
- {verifiers-0.1.15.dev442 → verifiers-0.1.15.dev443}/tests/test_multiturn_env.py +0 -0
- {verifiers-0.1.15.dev442 → verifiers-0.1.15.dev443}/tests/test_nemorl_client.py +0 -0
- {verifiers-0.1.15.dev442 → verifiers-0.1.15.dev443}/tests/test_openai_chat_completions_token_client.py +0 -0
- {verifiers-0.1.15.dev442 → verifiers-0.1.15.dev443}/tests/test_openai_responses_client.py +0 -0
- {verifiers-0.1.15.dev442 → verifiers-0.1.15.dev443}/tests/test_opencode_rlm_env.py +0 -0
- {verifiers-0.1.15.dev442 → verifiers-0.1.15.dev443}/tests/test_openenv_client.py +0 -0
- {verifiers-0.1.15.dev442 → verifiers-0.1.15.dev443}/tests/test_parser.py +0 -0
- {verifiers-0.1.15.dev442 → verifiers-0.1.15.dev443}/tests/test_path_utils.py +0 -0
- {verifiers-0.1.15.dev442 → verifiers-0.1.15.dev443}/tests/test_per_turn_timing.py +0 -0
- {verifiers-0.1.15.dev442 → verifiers-0.1.15.dev443}/tests/test_pricing_utils.py +0 -0
- {verifiers-0.1.15.dev442 → verifiers-0.1.15.dev443}/tests/test_prime_plugin.py +0 -0
- {verifiers-0.1.15.dev442 → verifiers-0.1.15.dev443}/tests/test_renderer_client.py +0 -0
- {verifiers-0.1.15.dev442 → verifiers-0.1.15.dev443}/tests/test_renderer_e2e.py +0 -0
- {verifiers-0.1.15.dev442 → verifiers-0.1.15.dev443}/tests/test_rlm_composable_env.py +0 -0
- {verifiers-0.1.15.dev442 → verifiers-0.1.15.dev443}/tests/test_rubric.py +0 -0
- {verifiers-0.1.15.dev442 → verifiers-0.1.15.dev443}/tests/test_rubric_group.py +0 -0
- {verifiers-0.1.15.dev442 → verifiers-0.1.15.dev443}/tests/test_sandbox_debug_env.py +0 -0
- {verifiers-0.1.15.dev442 → verifiers-0.1.15.dev443}/tests/test_sandbox_env.py +0 -0
- {verifiers-0.1.15.dev442 → verifiers-0.1.15.dev443}/tests/test_sandbox_mixin.py +0 -0
- {verifiers-0.1.15.dev442 → verifiers-0.1.15.dev443}/tests/test_save_utils.py +0 -0
- {verifiers-0.1.15.dev442 → verifiers-0.1.15.dev443}/tests/test_setup_script.py +0 -0
- {verifiers-0.1.15.dev442 → verifiers-0.1.15.dev443}/tests/test_singleturn_env.py +0 -0
- {verifiers-0.1.15.dev442 → verifiers-0.1.15.dev443}/tests/test_stateful_tool_env.py +0 -0
- {verifiers-0.1.15.dev442 → verifiers-0.1.15.dev443}/tests/test_think_parser.py +0 -0
- {verifiers-0.1.15.dev442 → verifiers-0.1.15.dev443}/tests/test_tool_env.py +0 -0
- {verifiers-0.1.15.dev442 → verifiers-0.1.15.dev443}/tests/test_tool_utils.py +0 -0
- {verifiers-0.1.15.dev442 → verifiers-0.1.15.dev443}/tests/test_trajectory_processing.py +0 -0
- {verifiers-0.1.15.dev442 → verifiers-0.1.15.dev443}/tests/test_tui_info_formatting.py +0 -0
- {verifiers-0.1.15.dev442 → verifiers-0.1.15.dev443}/tests/test_types.py +0 -0
- {verifiers-0.1.15.dev442 → verifiers-0.1.15.dev443}/tests/test_wordle_env.py +0 -0
- {verifiers-0.1.15.dev442 → verifiers-0.1.15.dev443}/tests/test_xml_parser.py +0 -0
- {verifiers-0.1.15.dev442 → verifiers-0.1.15.dev443}/tests/v1/fixtures/echo_multi_v0.py +0 -0
- {verifiers-0.1.15.dev442 → verifiers-0.1.15.dev443}/tests/v1/fixtures/echo_v0.py +0 -0
- {verifiers-0.1.15.dev442 → verifiers-0.1.15.dev443}/tests/v1/fixtures/pyproject.toml +0 -0
- {verifiers-0.1.15.dev442 → verifiers-0.1.15.dev443}/tests/v1/test_configs.py +0 -0
- {verifiers-0.1.15.dev442 → verifiers-0.1.15.dev443}/tests/v1/test_legacy.py +0 -0
- {verifiers-0.1.15.dev442 → verifiers-0.1.15.dev443}/tests/v1/test_scoring.py +0 -0
- {verifiers-0.1.15.dev442 → verifiers-0.1.15.dev443}/verifiers/__init__.py +0 -0
- {verifiers-0.1.15.dev442 → verifiers-0.1.15.dev443}/verifiers/cli/__init__.py +0 -0
- {verifiers-0.1.15.dev442 → verifiers-0.1.15.dev443}/verifiers/cli/commands/__init__.py +0 -0
- {verifiers-0.1.15.dev442 → verifiers-0.1.15.dev443}/verifiers/cli/commands/build.py +0 -0
- {verifiers-0.1.15.dev442 → verifiers-0.1.15.dev443}/verifiers/cli/commands/eval.py +0 -0
- {verifiers-0.1.15.dev442 → verifiers-0.1.15.dev443}/verifiers/cli/commands/gepa.py +0 -0
- {verifiers-0.1.15.dev442 → verifiers-0.1.15.dev443}/verifiers/cli/commands/init.py +0 -0
- {verifiers-0.1.15.dev442 → verifiers-0.1.15.dev443}/verifiers/cli/commands/install.py +0 -0
- {verifiers-0.1.15.dev442 → verifiers-0.1.15.dev443}/verifiers/cli/commands/setup.py +0 -0
- {verifiers-0.1.15.dev442 → verifiers-0.1.15.dev443}/verifiers/cli/plugins/__init__.py +0 -0
- {verifiers-0.1.15.dev442 → verifiers-0.1.15.dev443}/verifiers/cli/plugins/prime.py +0 -0
- {verifiers-0.1.15.dev442 → verifiers-0.1.15.dev443}/verifiers/cli/tui.py +0 -0
- {verifiers-0.1.15.dev442 → verifiers-0.1.15.dev443}/verifiers/clients/__init__.py +0 -0
- {verifiers-0.1.15.dev442 → verifiers-0.1.15.dev443}/verifiers/clients/anthropic_messages_client.py +0 -0
- {verifiers-0.1.15.dev442 → verifiers-0.1.15.dev443}/verifiers/clients/client.py +0 -0
- {verifiers-0.1.15.dev442 → verifiers-0.1.15.dev443}/verifiers/clients/nemorl_chat_completions_client.py +0 -0
- {verifiers-0.1.15.dev442 → verifiers-0.1.15.dev443}/verifiers/clients/openai_chat_completions_client.py +0 -0
- {verifiers-0.1.15.dev442 → verifiers-0.1.15.dev443}/verifiers/clients/openai_chat_completions_token_client.py +0 -0
- {verifiers-0.1.15.dev442 → verifiers-0.1.15.dev443}/verifiers/clients/openai_completions_client.py +0 -0
- {verifiers-0.1.15.dev442 → verifiers-0.1.15.dev443}/verifiers/clients/openai_responses_client.py +0 -0
- {verifiers-0.1.15.dev442 → verifiers-0.1.15.dev443}/verifiers/clients/renderer_client.py +0 -0
- {verifiers-0.1.15.dev442 → verifiers-0.1.15.dev443}/verifiers/decorators.py +0 -0
- {verifiers-0.1.15.dev442 → verifiers-0.1.15.dev443}/verifiers/envs/AGENTS.md +0 -0
- {verifiers-0.1.15.dev442 → verifiers-0.1.15.dev443}/verifiers/envs/__init__.py +0 -0
- {verifiers-0.1.15.dev442 → verifiers-0.1.15.dev443}/verifiers/envs/env_group.py +0 -0
- {verifiers-0.1.15.dev442 → verifiers-0.1.15.dev443}/verifiers/envs/environment.py +0 -0
- {verifiers-0.1.15.dev442 → verifiers-0.1.15.dev443}/verifiers/envs/experimental/README.md +0 -0
- {verifiers-0.1.15.dev442 → verifiers-0.1.15.dev443}/verifiers/envs/experimental/__init__.py +0 -0
- {verifiers-0.1.15.dev442 → verifiers-0.1.15.dev443}/verifiers/envs/experimental/cli_agent_env.py +0 -0
- {verifiers-0.1.15.dev442 → verifiers-0.1.15.dev443}/verifiers/envs/experimental/composable/README.md +0 -0
- {verifiers-0.1.15.dev442 → verifiers-0.1.15.dev443}/verifiers/envs/experimental/composable/__init__.py +0 -0
- {verifiers-0.1.15.dev442 → verifiers-0.1.15.dev443}/verifiers/envs/experimental/composable/_filter.py +0 -0
- {verifiers-0.1.15.dev442 → verifiers-0.1.15.dev443}/verifiers/envs/experimental/composable/composable_env.py +0 -0
- {verifiers-0.1.15.dev442 → verifiers-0.1.15.dev443}/verifiers/envs/experimental/composable/harness.py +0 -0
- {verifiers-0.1.15.dev442 → verifiers-0.1.15.dev443}/verifiers/envs/experimental/composable/harnesses/__init__.py +0 -0
- {verifiers-0.1.15.dev442 → verifiers-0.1.15.dev443}/verifiers/envs/experimental/composable/harnesses/mini_swe_agent.py +0 -0
- {verifiers-0.1.15.dev442 → verifiers-0.1.15.dev443}/verifiers/envs/experimental/composable/harnesses/opencode.py +0 -0
- {verifiers-0.1.15.dev442 → verifiers-0.1.15.dev443}/verifiers/envs/experimental/composable/harnesses/prompt.txt +0 -0
- {verifiers-0.1.15.dev442 → verifiers-0.1.15.dev443}/verifiers/envs/experimental/composable/harnesses/rlm.py +0 -0
- {verifiers-0.1.15.dev442 → verifiers-0.1.15.dev443}/verifiers/envs/experimental/composable/sandbox_debug_env.py +0 -0
- {verifiers-0.1.15.dev442 → verifiers-0.1.15.dev443}/verifiers/envs/experimental/composable/swe_debug_env.py +0 -0
- {verifiers-0.1.15.dev442 → verifiers-0.1.15.dev443}/verifiers/envs/experimental/composable/task.py +0 -0
- {verifiers-0.1.15.dev442 → verifiers-0.1.15.dev443}/verifiers/envs/experimental/composable/tasksets/__init__.py +0 -0
- {verifiers-0.1.15.dev442 → verifiers-0.1.15.dev443}/verifiers/envs/experimental/composable/tasksets/cp/__init__.py +0 -0
- {verifiers-0.1.15.dev442 → verifiers-0.1.15.dev443}/verifiers/envs/experimental/composable/tasksets/cp/cp_task.py +0 -0
- {verifiers-0.1.15.dev442 → verifiers-0.1.15.dev443}/verifiers/envs/experimental/composable/tasksets/cp/test_utils.py +0 -0
- {verifiers-0.1.15.dev442 → verifiers-0.1.15.dev443}/verifiers/envs/experimental/composable/tasksets/harbor/__init__.py +0 -0
- {verifiers-0.1.15.dev442 → verifiers-0.1.15.dev443}/verifiers/envs/experimental/composable/tasksets/harbor/cli_gym.py +0 -0
- {verifiers-0.1.15.dev442 → verifiers-0.1.15.dev443}/verifiers/envs/experimental/composable/tasksets/harbor/harbor.py +0 -0
- {verifiers-0.1.15.dev442 → verifiers-0.1.15.dev443}/verifiers/envs/experimental/composable/tasksets/harbor/terminal_lego.py +0 -0
- {verifiers-0.1.15.dev442 → verifiers-0.1.15.dev443}/verifiers/envs/experimental/composable/tasksets/math/__init__.py +0 -0
- {verifiers-0.1.15.dev442 → verifiers-0.1.15.dev443}/verifiers/envs/experimental/composable/tasksets/math/math_task.py +0 -0
- {verifiers-0.1.15.dev442 → verifiers-0.1.15.dev443}/verifiers/envs/experimental/composable/tasksets/search/README.md +0 -0
- {verifiers-0.1.15.dev442 → verifiers-0.1.15.dev443}/verifiers/envs/experimental/composable/tasksets/search/__init__.py +0 -0
- {verifiers-0.1.15.dev442 → verifiers-0.1.15.dev443}/verifiers/envs/experimental/composable/tasksets/search/openseeker/README.md +0 -0
- {verifiers-0.1.15.dev442 → verifiers-0.1.15.dev443}/verifiers/envs/experimental/composable/tasksets/search/openseeker/__init__.py +0 -0
- {verifiers-0.1.15.dev442 → verifiers-0.1.15.dev443}/verifiers/envs/experimental/composable/tasksets/search/openseeker/taskset.py +0 -0
- {verifiers-0.1.15.dev442 → verifiers-0.1.15.dev443}/verifiers/envs/experimental/composable/tasksets/search/quest/README.md +0 -0
- {verifiers-0.1.15.dev442 → verifiers-0.1.15.dev443}/verifiers/envs/experimental/composable/tasksets/search/quest/__init__.py +0 -0
- {verifiers-0.1.15.dev442 → verifiers-0.1.15.dev443}/verifiers/envs/experimental/composable/tasksets/search/quest/obj_task_eval/__init__.py +0 -0
- {verifiers-0.1.15.dev442 → verifiers-0.1.15.dev443}/verifiers/envs/experimental/composable/tasksets/search/quest/obj_task_eval/api_tools/__init__.py +0 -0
- {verifiers-0.1.15.dev442 → verifiers-0.1.15.dev443}/verifiers/envs/experimental/composable/tasksets/search/quest/obj_task_eval/api_tools/tool_pdf.py +0 -0
- {verifiers-0.1.15.dev442 → verifiers-0.1.15.dev443}/verifiers/envs/experimental/composable/tasksets/search/quest/obj_task_eval/eval_toolkit.py +0 -0
- {verifiers-0.1.15.dev442 → verifiers-0.1.15.dev443}/verifiers/envs/experimental/composable/tasksets/search/quest/obj_task_eval/evaluator.py +0 -0
- {verifiers-0.1.15.dev442 → verifiers-0.1.15.dev443}/verifiers/envs/experimental/composable/tasksets/search/quest/obj_task_eval/llm_client/__init__.py +0 -0
- {verifiers-0.1.15.dev442 → verifiers-0.1.15.dev443}/verifiers/envs/experimental/composable/tasksets/search/quest/obj_task_eval/llm_client/base_client.py +0 -0
- {verifiers-0.1.15.dev442 → verifiers-0.1.15.dev443}/verifiers/envs/experimental/composable/tasksets/search/quest/obj_task_eval/prompts/__init__.py +0 -0
- {verifiers-0.1.15.dev442 → verifiers-0.1.15.dev443}/verifiers/envs/experimental/composable/tasksets/search/quest/obj_task_eval/prompts/cache_prompts.py +0 -0
- {verifiers-0.1.15.dev442 → verifiers-0.1.15.dev443}/verifiers/envs/experimental/composable/tasksets/search/quest/obj_task_eval/utils/__init__.py +0 -0
- {verifiers-0.1.15.dev442 → verifiers-0.1.15.dev443}/verifiers/envs/experimental/composable/tasksets/search/quest/obj_task_eval/utils/cache_filesys.py +0 -0
- {verifiers-0.1.15.dev442 → verifiers-0.1.15.dev443}/verifiers/envs/experimental/composable/tasksets/search/quest/obj_task_eval/utils/load_eval_script.py +0 -0
- {verifiers-0.1.15.dev442 → verifiers-0.1.15.dev443}/verifiers/envs/experimental/composable/tasksets/search/quest/obj_task_eval/utils/misc.py +0 -0
- {verifiers-0.1.15.dev442 → verifiers-0.1.15.dev443}/verifiers/envs/experimental/composable/tasksets/search/quest/obj_task_eval/utils/tool_visit.py +0 -0
- {verifiers-0.1.15.dev442 → verifiers-0.1.15.dev443}/verifiers/envs/experimental/composable/tasksets/search/quest/obj_task_eval/utils/url_tools.py +0 -0
- {verifiers-0.1.15.dev442 → verifiers-0.1.15.dev443}/verifiers/envs/experimental/composable/tasksets/search/quest/obj_task_eval/verification_tree.py +0 -0
- {verifiers-0.1.15.dev442 → verifiers-0.1.15.dev443}/verifiers/envs/experimental/composable/tasksets/search/quest/open_ended.py +0 -0
- {verifiers-0.1.15.dev442 → verifiers-0.1.15.dev443}/verifiers/envs/experimental/composable/tasksets/search/quest/taskset.py +0 -0
- {verifiers-0.1.15.dev442 → verifiers-0.1.15.dev443}/verifiers/envs/experimental/composable/tasksets/search/redsearcher/README.md +0 -0
- {verifiers-0.1.15.dev442 → verifiers-0.1.15.dev443}/verifiers/envs/experimental/composable/tasksets/search/redsearcher/__init__.py +0 -0
- {verifiers-0.1.15.dev442 → verifiers-0.1.15.dev443}/verifiers/envs/experimental/composable/tasksets/search/redsearcher/taskset.py +0 -0
- {verifiers-0.1.15.dev442 → verifiers-0.1.15.dev443}/verifiers/envs/experimental/composable/tasksets/search/search_tasksets.py +0 -0
- {verifiers-0.1.15.dev442 → verifiers-0.1.15.dev443}/verifiers/envs/experimental/composable/tasksets/swe/README.md +0 -0
- {verifiers-0.1.15.dev442 → verifiers-0.1.15.dev443}/verifiers/envs/experimental/composable/tasksets/swe/__init__.py +0 -0
- {verifiers-0.1.15.dev442 → verifiers-0.1.15.dev443}/verifiers/envs/experimental/composable/tasksets/swe/multi_swe/__init__.py +0 -0
- {verifiers-0.1.15.dev442 → verifiers-0.1.15.dev443}/verifiers/envs/experimental/composable/tasksets/swe/multi_swe/extract_fix_patch.sh +0 -0
- {verifiers-0.1.15.dev442 → verifiers-0.1.15.dev443}/verifiers/envs/experimental/composable/tasksets/swe/multi_swe/taskset.py +0 -0
- {verifiers-0.1.15.dev442 → verifiers-0.1.15.dev443}/verifiers/envs/experimental/composable/tasksets/swe/openswe/__init__.py +0 -0
- {verifiers-0.1.15.dev442 → verifiers-0.1.15.dev443}/verifiers/envs/experimental/composable/tasksets/swe/openswe/taskset.py +0 -0
- {verifiers-0.1.15.dev442 → verifiers-0.1.15.dev443}/verifiers/envs/experimental/composable/tasksets/swe/r2e_gym/__init__.py +0 -0
- {verifiers-0.1.15.dev442 → verifiers-0.1.15.dev443}/verifiers/envs/experimental/composable/tasksets/swe/r2e_gym/log_parser.py +0 -0
- {verifiers-0.1.15.dev442 → verifiers-0.1.15.dev443}/verifiers/envs/experimental/composable/tasksets/swe/r2e_gym/taskset.py +0 -0
- {verifiers-0.1.15.dev442 → verifiers-0.1.15.dev443}/verifiers/envs/experimental/composable/tasksets/swe/scale_swe/__init__.py +0 -0
- {verifiers-0.1.15.dev442 → verifiers-0.1.15.dev443}/verifiers/envs/experimental/composable/tasksets/swe/scale_swe/taskset.py +0 -0
- {verifiers-0.1.15.dev442 → verifiers-0.1.15.dev443}/verifiers/envs/experimental/composable/tasksets/swe/shared/__init__.py +0 -0
- {verifiers-0.1.15.dev442 → verifiers-0.1.15.dev443}/verifiers/envs/experimental/composable/tasksets/swe/shared/test_patch.py +0 -0
- {verifiers-0.1.15.dev442 → verifiers-0.1.15.dev443}/verifiers/envs/experimental/composable/tasksets/swe/swe_bench/__init__.py +0 -0
- {verifiers-0.1.15.dev442 → verifiers-0.1.15.dev443}/verifiers/envs/experimental/composable/tasksets/swe/swe_bench/taskset.py +0 -0
- {verifiers-0.1.15.dev442 → verifiers-0.1.15.dev443}/verifiers/envs/experimental/composable/tasksets/swe/swe_lego/__init__.py +0 -0
- {verifiers-0.1.15.dev442 → verifiers-0.1.15.dev443}/verifiers/envs/experimental/composable/tasksets/swe/swe_lego/taskset.py +0 -0
- {verifiers-0.1.15.dev442 → verifiers-0.1.15.dev443}/verifiers/envs/experimental/composable/tasksets/swe/swe_rebench_v2/__init__.py +0 -0
- {verifiers-0.1.15.dev442 → verifiers-0.1.15.dev443}/verifiers/envs/experimental/composable/tasksets/swe/swe_rebench_v2/log_parsers.py +0 -0
- {verifiers-0.1.15.dev442 → verifiers-0.1.15.dev443}/verifiers/envs/experimental/composable/tasksets/swe/swe_rebench_v2/taskset.py +0 -0
- {verifiers-0.1.15.dev442 → verifiers-0.1.15.dev443}/verifiers/envs/experimental/composable/tasksets/swe/swe_smith/__init__.py +0 -0
- {verifiers-0.1.15.dev442 → verifiers-0.1.15.dev443}/verifiers/envs/experimental/composable/tasksets/swe/swe_smith/taskset.py +0 -0
- {verifiers-0.1.15.dev442 → verifiers-0.1.15.dev443}/verifiers/envs/experimental/composable/tasksets/swe/swe_tasksets.py +0 -0
- {verifiers-0.1.15.dev442 → verifiers-0.1.15.dev443}/verifiers/envs/experimental/gym_env.py +0 -0
- {verifiers-0.1.15.dev442 → verifiers-0.1.15.dev443}/verifiers/envs/experimental/harbor_env/__init__.py +0 -0
- {verifiers-0.1.15.dev442 → verifiers-0.1.15.dev443}/verifiers/envs/experimental/harbor_env/env.py +0 -0
- {verifiers-0.1.15.dev442 → verifiers-0.1.15.dev443}/verifiers/envs/experimental/harbor_env/mcp.py +0 -0
- {verifiers-0.1.15.dev442 → verifiers-0.1.15.dev443}/verifiers/envs/experimental/mcp_env.py +0 -0
- {verifiers-0.1.15.dev442 → verifiers-0.1.15.dev443}/verifiers/envs/experimental/opencode_env.py +0 -0
- {verifiers-0.1.15.dev442 → verifiers-0.1.15.dev443}/verifiers/envs/experimental/opencode_qa_env.py +0 -0
- {verifiers-0.1.15.dev442 → verifiers-0.1.15.dev443}/verifiers/envs/experimental/opencode_rlm_env.py +0 -0
- {verifiers-0.1.15.dev442 → verifiers-0.1.15.dev443}/verifiers/envs/experimental/sandbox_mixin.py +0 -0
- {verifiers-0.1.15.dev442 → verifiers-0.1.15.dev443}/verifiers/envs/experimental/utils/__init__.py +0 -0
- {verifiers-0.1.15.dev442 → verifiers-0.1.15.dev443}/verifiers/envs/experimental/utils/file_locks.py +0 -0
- {verifiers-0.1.15.dev442 → verifiers-0.1.15.dev443}/verifiers/envs/experimental/utils/git_checkout_cache.py +0 -0
- {verifiers-0.1.15.dev442 → verifiers-0.1.15.dev443}/verifiers/envs/integrations/README.md +0 -0
- {verifiers-0.1.15.dev442 → verifiers-0.1.15.dev443}/verifiers/envs/integrations/__init__.py +0 -0
- {verifiers-0.1.15.dev442 → verifiers-0.1.15.dev443}/verifiers/envs/integrations/browser_env/README.md +0 -0
- {verifiers-0.1.15.dev442 → verifiers-0.1.15.dev443}/verifiers/envs/integrations/browser_env/__init__.py +0 -0
- {verifiers-0.1.15.dev442 → verifiers-0.1.15.dev443}/verifiers/envs/integrations/browser_env/browser_env.py +0 -0
- {verifiers-0.1.15.dev442 → verifiers-0.1.15.dev443}/verifiers/envs/integrations/browser_env/modes/__init__.py +0 -0
- {verifiers-0.1.15.dev442 → verifiers-0.1.15.dev443}/verifiers/envs/integrations/browser_env/modes/base.py +0 -0
- {verifiers-0.1.15.dev442 → verifiers-0.1.15.dev443}/verifiers/envs/integrations/browser_env/modes/cua_mode.py +0 -0
- {verifiers-0.1.15.dev442 → verifiers-0.1.15.dev443}/verifiers/envs/integrations/browser_env/modes/dom_mode.py +0 -0
- {verifiers-0.1.15.dev442 → verifiers-0.1.15.dev443}/verifiers/envs/integrations/openenv_env.py +0 -0
- {verifiers-0.1.15.dev442 → verifiers-0.1.15.dev443}/verifiers/envs/integrations/reasoninggym_env.py +0 -0
- {verifiers-0.1.15.dev442 → verifiers-0.1.15.dev443}/verifiers/envs/integrations/textarena_env.py +0 -0
- {verifiers-0.1.15.dev442 → verifiers-0.1.15.dev443}/verifiers/envs/multiturn_env.py +0 -0
- {verifiers-0.1.15.dev442 → verifiers-0.1.15.dev443}/verifiers/envs/python_env.py +0 -0
- {verifiers-0.1.15.dev442 → verifiers-0.1.15.dev443}/verifiers/envs/sandbox_env.py +0 -0
- {verifiers-0.1.15.dev442 → verifiers-0.1.15.dev443}/verifiers/envs/singleturn_env.py +0 -0
- {verifiers-0.1.15.dev442 → verifiers-0.1.15.dev443}/verifiers/envs/stateful_tool_env.py +0 -0
- {verifiers-0.1.15.dev442 → verifiers-0.1.15.dev443}/verifiers/envs/tool_env.py +0 -0
- {verifiers-0.1.15.dev442 → verifiers-0.1.15.dev443}/verifiers/errors.py +0 -0
- {verifiers-0.1.15.dev442 → verifiers-0.1.15.dev443}/verifiers/gepa/__init__.py +0 -0
- {verifiers-0.1.15.dev442 → verifiers-0.1.15.dev443}/verifiers/gepa/adapter.py +0 -0
- {verifiers-0.1.15.dev442 → verifiers-0.1.15.dev443}/verifiers/gepa/config.py +0 -0
- {verifiers-0.1.15.dev442 → verifiers-0.1.15.dev443}/verifiers/gepa/display.py +0 -0
- {verifiers-0.1.15.dev442 → verifiers-0.1.15.dev443}/verifiers/gepa/gepa_utils.py +0 -0
- {verifiers-0.1.15.dev442 → verifiers-0.1.15.dev443}/verifiers/parsers/__init__.py +0 -0
- {verifiers-0.1.15.dev442 → verifiers-0.1.15.dev443}/verifiers/parsers/maybe_think_parser.py +0 -0
- {verifiers-0.1.15.dev442 → verifiers-0.1.15.dev443}/verifiers/parsers/parser.py +0 -0
- {verifiers-0.1.15.dev442 → verifiers-0.1.15.dev443}/verifiers/parsers/think_parser.py +0 -0
- {verifiers-0.1.15.dev442 → verifiers-0.1.15.dev443}/verifiers/parsers/xml_parser.py +0 -0
- {verifiers-0.1.15.dev442 → verifiers-0.1.15.dev443}/verifiers/rubrics/__init__.py +0 -0
- {verifiers-0.1.15.dev442 → verifiers-0.1.15.dev443}/verifiers/rubrics/experimental/hybrid_math_rubric.py +0 -0
- {verifiers-0.1.15.dev442 → verifiers-0.1.15.dev443}/verifiers/rubrics/judge_rubric.py +0 -0
- {verifiers-0.1.15.dev442 → verifiers-0.1.15.dev443}/verifiers/rubrics/math_rubric.py +0 -0
- {verifiers-0.1.15.dev442 → verifiers-0.1.15.dev443}/verifiers/rubrics/rubric.py +0 -0
- {verifiers-0.1.15.dev442 → verifiers-0.1.15.dev443}/verifiers/rubrics/rubric_group.py +0 -0
- {verifiers-0.1.15.dev442 → verifiers-0.1.15.dev443}/verifiers/scripts/__init__.py +0 -0
- {verifiers-0.1.15.dev442 → verifiers-0.1.15.dev443}/verifiers/scripts/build.py +0 -0
- {verifiers-0.1.15.dev442 → verifiers-0.1.15.dev443}/verifiers/scripts/eval.py +0 -0
- {verifiers-0.1.15.dev442 → verifiers-0.1.15.dev443}/verifiers/scripts/gepa.py +0 -0
- {verifiers-0.1.15.dev442 → verifiers-0.1.15.dev443}/verifiers/scripts/init.py +0 -0
- {verifiers-0.1.15.dev442 → verifiers-0.1.15.dev443}/verifiers/scripts/install.py +0 -0
- {verifiers-0.1.15.dev442 → verifiers-0.1.15.dev443}/verifiers/scripts/setup.py +0 -0
- {verifiers-0.1.15.dev442 → verifiers-0.1.15.dev443}/verifiers/scripts/tui.py +0 -0
- {verifiers-0.1.15.dev442 → verifiers-0.1.15.dev443}/verifiers/serve/__init__.py +0 -0
- {verifiers-0.1.15.dev442 → verifiers-0.1.15.dev443}/verifiers/serve/client/env_client.py +0 -0
- {verifiers-0.1.15.dev442 → verifiers-0.1.15.dev443}/verifiers/serve/client/zmq_env_client.py +0 -0
- {verifiers-0.1.15.dev442 → verifiers-0.1.15.dev443}/verifiers/serve/server/__init__.py +0 -0
- {verifiers-0.1.15.dev442 → verifiers-0.1.15.dev443}/verifiers/serve/server/env_router.py +0 -0
- {verifiers-0.1.15.dev442 → verifiers-0.1.15.dev443}/verifiers/serve/server/env_server.py +0 -0
- {verifiers-0.1.15.dev442 → verifiers-0.1.15.dev443}/verifiers/serve/server/env_worker.py +0 -0
- {verifiers-0.1.15.dev442 → verifiers-0.1.15.dev443}/verifiers/serve/server/zmq_env_server.py +0 -0
- {verifiers-0.1.15.dev442 → verifiers-0.1.15.dev443}/verifiers/serve/types.py +0 -0
- {verifiers-0.1.15.dev442 → verifiers-0.1.15.dev443}/verifiers/types.py +0 -0
- {verifiers-0.1.15.dev442 → verifiers-0.1.15.dev443}/verifiers/utils/__init__.py +0 -0
- {verifiers-0.1.15.dev442 → verifiers-0.1.15.dev443}/verifiers/utils/async_utils.py +0 -0
- {verifiers-0.1.15.dev442 → verifiers-0.1.15.dev443}/verifiers/utils/client_utils.py +0 -0
- {verifiers-0.1.15.dev442 → verifiers-0.1.15.dev443}/verifiers/utils/config_utils.py +0 -0
- {verifiers-0.1.15.dev442 → verifiers-0.1.15.dev443}/verifiers/utils/data_utils.py +0 -0
- {verifiers-0.1.15.dev442 → verifiers-0.1.15.dev443}/verifiers/utils/display_utils.py +0 -0
- {verifiers-0.1.15.dev442 → verifiers-0.1.15.dev443}/verifiers/utils/env_config_utils.py +0 -0
- {verifiers-0.1.15.dev442 → verifiers-0.1.15.dev443}/verifiers/utils/env_utils.py +0 -0
- {verifiers-0.1.15.dev442 → verifiers-0.1.15.dev443}/verifiers/utils/error_utils.py +0 -0
- {verifiers-0.1.15.dev442 → verifiers-0.1.15.dev443}/verifiers/utils/eval_display.py +0 -0
- {verifiers-0.1.15.dev442 → verifiers-0.1.15.dev443}/verifiers/utils/eval_utils.py +0 -0
- {verifiers-0.1.15.dev442 → verifiers-0.1.15.dev443}/verifiers/utils/heartbeat.py +0 -0
- {verifiers-0.1.15.dev442 → verifiers-0.1.15.dev443}/verifiers/utils/import_utils.py +0 -0
- {verifiers-0.1.15.dev442 → verifiers-0.1.15.dev443}/verifiers/utils/install_utils.py +0 -0
- {verifiers-0.1.15.dev442 → verifiers-0.1.15.dev443}/verifiers/utils/interception_utils.py +0 -0
- {verifiers-0.1.15.dev442 → verifiers-0.1.15.dev443}/verifiers/utils/logging_utils.py +0 -0
- {verifiers-0.1.15.dev442 → verifiers-0.1.15.dev443}/verifiers/utils/message_utils.py +0 -0
- {verifiers-0.1.15.dev442 → verifiers-0.1.15.dev443}/verifiers/utils/metric_utils.py +0 -0
- {verifiers-0.1.15.dev442 → verifiers-0.1.15.dev443}/verifiers/utils/path_utils.py +0 -0
- {verifiers-0.1.15.dev442 → verifiers-0.1.15.dev443}/verifiers/utils/pricing_utils.py +0 -0
- {verifiers-0.1.15.dev442 → verifiers-0.1.15.dev443}/verifiers/utils/process_utils.py +0 -0
- {verifiers-0.1.15.dev442 → verifiers-0.1.15.dev443}/verifiers/utils/response_utils.py +0 -0
- {verifiers-0.1.15.dev442 → verifiers-0.1.15.dev443}/verifiers/utils/save_utils.py +0 -0
- {verifiers-0.1.15.dev442 → verifiers-0.1.15.dev443}/verifiers/utils/serve_utils.py +0 -0
- {verifiers-0.1.15.dev442 → verifiers-0.1.15.dev443}/verifiers/utils/thread_utils.py +0 -0
- {verifiers-0.1.15.dev442 → verifiers-0.1.15.dev443}/verifiers/utils/threaded_sandbox_client.py +0 -0
- {verifiers-0.1.15.dev442 → verifiers-0.1.15.dev443}/verifiers/utils/tool_utils.py +0 -0
- {verifiers-0.1.15.dev442 → verifiers-0.1.15.dev443}/verifiers/utils/usage_utils.py +0 -0
- {verifiers-0.1.15.dev442 → verifiers-0.1.15.dev443}/verifiers/utils/version_utils.py +0 -0
- {verifiers-0.1.15.dev442 → verifiers-0.1.15.dev443}/verifiers/v1/cli/resolve.py +0 -0
- {verifiers-0.1.15.dev442 → verifiers-0.1.15.dev443}/verifiers/v1/clients/__init__.py +0 -0
- {verifiers-0.1.15.dev442 → verifiers-0.1.15.dev443}/verifiers/v1/clients/config.py +0 -0
- {verifiers-0.1.15.dev442 → verifiers-0.1.15.dev443}/verifiers/v1/configs/__init__.py +0 -0
- {verifiers-0.1.15.dev442 → verifiers-0.1.15.dev443}/verifiers/v1/harnesses/codex/__init__.py +0 -0
- {verifiers-0.1.15.dev442 → verifiers-0.1.15.dev443}/verifiers/v1/harnesses/kimi_code/__init__.py +0 -0
- {verifiers-0.1.15.dev442 → verifiers-0.1.15.dev443}/verifiers/v1/harnesses/mini_swe_agent/__init__.py +0 -0
- {verifiers-0.1.15.dev442 → verifiers-0.1.15.dev443}/verifiers/v1/harnesses/mini_swe_agent/program.py +0 -0
- {verifiers-0.1.15.dev442 → verifiers-0.1.15.dev443}/verifiers/v1/harnesses/rlm/__init__.py +0 -0
- {verifiers-0.1.15.dev442 → verifiers-0.1.15.dev443}/verifiers/v1/harnesses/terminus_2/__init__.py +0 -0
- {verifiers-0.1.15.dev442 → verifiers-0.1.15.dev443}/verifiers/v1/harnesses/terminus_2/program.py +0 -0
- {verifiers-0.1.15.dev442 → verifiers-0.1.15.dev443}/verifiers/v1/interception/pool.py +0 -0
- {verifiers-0.1.15.dev442 → verifiers-0.1.15.dev443}/verifiers/v1/judges/reference.txt +0 -0
- {verifiers-0.1.15.dev442 → verifiers-0.1.15.dev443}/verifiers/v1/judges/rubric.txt +0 -0
- {verifiers-0.1.15.dev442 → verifiers-0.1.15.dev443}/verifiers/v1/retries.py +0 -0
- {verifiers-0.1.15.dev442 → verifiers-0.1.15.dev443}/verifiers/v1/runtimes/limiters.py +0 -0
- {verifiers-0.1.15.dev442 → verifiers-0.1.15.dev443}/verifiers/v1/serve/pool.py +0 -0
- {verifiers-0.1.15.dev442 → verifiers-0.1.15.dev443}/verifiers/v1/tasksets/lean/scoring.py +0 -0
- {verifiers-0.1.15.dev442 → verifiers-0.1.15.dev443}/verifiers/v1/utils/aio.py +0 -0
- {verifiers-0.1.15.dev442 → verifiers-0.1.15.dev443}/verifiers/v1/utils/format.py +0 -0
- {verifiers-0.1.15.dev442 → verifiers-0.1.15.dev443}/verifiers/v1/utils/logging.py +0 -0
- {verifiers-0.1.15.dev442 → verifiers-0.1.15.dev443}/verifiers/v1/utils/memory.py +0 -0
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
Metadata-Version: 2.4
|
|
2
2
|
Name: verifiers
|
|
3
|
-
Version: 0.1.15.
|
|
3
|
+
Version: 0.1.15.dev443
|
|
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
|
|
@@ -247,7 +247,6 @@ markers = [
|
|
|
247
247
|
"prime: v1 e2e cases touching the prime runtime (real sandbox + tunnel; local-only, excluded in CI)",
|
|
248
248
|
"modal: v1 e2e cases touching the modal runtime (local-only setup; excluded in CI)",
|
|
249
249
|
"colocated: v1 e2e cases with a user/tool server colocated in the harness runtime",
|
|
250
|
-
"shared: v1 e2e cases with a shared (one-per-eval) tool server",
|
|
251
250
|
"null: v1 e2e cases on the null harness",
|
|
252
251
|
"default: v1 e2e cases on the default harness",
|
|
253
252
|
"rlm: v1 e2e cases on the rlm harness",
|
|
@@ -19,7 +19,7 @@ Every matrix value carries a pytest mark, so subsets select with `-m`:
|
|
|
19
19
|
uv run pytest tests/v1 -n auto -m prime # only prime (real sandboxes; local)
|
|
20
20
|
uv run pytest tests/v1 -n auto -m modal # only modal (needs local setup)
|
|
21
21
|
|
|
22
|
-
Marks: runtimes `subprocess` / `docker` / `prime` / `modal`,
|
|
22
|
+
Marks: runtimes `subprocess` / `docker` / `prime` / `modal`, placement `colocated`,
|
|
23
23
|
harnesses `null` / `default` / `rlm` / `kimi_code` / `codex`. A mark is applied per axis, so it
|
|
24
24
|
selects every case touching that value on ANY axis; for one exact combination use `-k` on the test
|
|
25
25
|
id (e.g. `-k "harness-in-docker-with-tool-in-subprocess"`). prime/modal provision real remote
|
|
@@ -75,19 +75,16 @@ USER_RUNTIMES = [
|
|
|
75
75
|
|
|
76
76
|
@pytest.fixture(params=USER_RUNTIMES)
|
|
77
77
|
def user_runtime(request) -> dict:
|
|
78
|
-
"""A `taskset.user` override placing the user simulator: `colocated` (inside the harness's
|
|
78
|
+
"""A `taskset.task.user` override placing the user simulator: `colocated` (inside the harness's
|
|
79
79
|
runtime) or its own runtime, by type."""
|
|
80
80
|
if request.param == "colocated":
|
|
81
81
|
return {"colocated": True}
|
|
82
82
|
return {"colocated": False, "runtime": {"type": request.param}}
|
|
83
83
|
|
|
84
84
|
|
|
85
|
-
#
|
|
86
|
-
# own runtime per rollout; this fans the tool test across all of them, each carrying its
|
|
87
|
-
# placement/runtime mark (colocated/shared use the host subprocess runtime).
|
|
85
|
+
# Task-scoped and shared tool tests both use these runtime placements.
|
|
88
86
|
TOOL_RUNTIMES = [
|
|
89
87
|
pytest.param("colocated", marks=pytest.mark.colocated, id="with-tool-colocated"),
|
|
90
|
-
pytest.param("shared", marks=pytest.mark.shared, id="with-tool-shared"),
|
|
91
88
|
pytest.param(
|
|
92
89
|
"subprocess", marks=pytest.mark.subprocess, id="with-tool-in-subprocess"
|
|
93
90
|
),
|
|
@@ -99,12 +96,10 @@ TOOL_RUNTIMES = [
|
|
|
99
96
|
|
|
100
97
|
@pytest.fixture(params=TOOL_RUNTIMES)
|
|
101
98
|
def tool_runtime(request) -> dict:
|
|
102
|
-
"""A `taskset.tools` override placing the tool server: `colocated` (inside the harness's
|
|
103
|
-
runtime)
|
|
99
|
+
"""A `taskset.task.tools` override placing the tool server: `colocated` (inside the harness's
|
|
100
|
+
runtime) or its own runtime, by type."""
|
|
104
101
|
if request.param == "colocated":
|
|
105
102
|
return {"colocated": True}
|
|
106
|
-
if request.param == "shared":
|
|
107
|
-
return {"shared": True}
|
|
108
103
|
return {"runtime": {"type": request.param}}
|
|
109
104
|
|
|
110
105
|
|
|
@@ -0,0 +1,59 @@
|
|
|
1
|
+
"""Task-scoped counter tool with typed rollout state."""
|
|
2
|
+
|
|
3
|
+
import verifiers.v1 as vf
|
|
4
|
+
|
|
5
|
+
TARGET = 3
|
|
6
|
+
|
|
7
|
+
|
|
8
|
+
class CounterState(vf.State):
|
|
9
|
+
count: int = 0
|
|
10
|
+
|
|
11
|
+
|
|
12
|
+
class CounterToolset(vf.Toolset[vf.ToolsetConfig, CounterState]):
|
|
13
|
+
TOOL_PREFIX = "counter"
|
|
14
|
+
|
|
15
|
+
@vf.tool
|
|
16
|
+
def bump(self) -> str:
|
|
17
|
+
"""Increment the shared counter and return its new value."""
|
|
18
|
+
self.state.count += 1
|
|
19
|
+
return f"count={self.state.count}"
|
|
20
|
+
|
|
21
|
+
|
|
22
|
+
class CounterTaskConfig(vf.TaskConfig):
|
|
23
|
+
tools: vf.ToolsetConfig = vf.ToolsetConfig()
|
|
24
|
+
|
|
25
|
+
|
|
26
|
+
class CounterTask(vf.Task[vf.TaskData, CounterState, CounterTaskConfig]):
|
|
27
|
+
tools = (CounterToolset,)
|
|
28
|
+
|
|
29
|
+
@vf.reward(weight=1.0)
|
|
30
|
+
async def counted(self, trace: vf.Trace) -> float:
|
|
31
|
+
return float(trace.state.count >= 2)
|
|
32
|
+
|
|
33
|
+
|
|
34
|
+
class CounterConfig(vf.TasksetConfig):
|
|
35
|
+
task: CounterTaskConfig = CounterTaskConfig()
|
|
36
|
+
|
|
37
|
+
|
|
38
|
+
class CounterTaskset(vf.Taskset[CounterTask, CounterConfig]):
|
|
39
|
+
def load(self) -> list[CounterTask]:
|
|
40
|
+
return [
|
|
41
|
+
CounterTask(
|
|
42
|
+
vf.TaskData(
|
|
43
|
+
idx=0,
|
|
44
|
+
prompt=(
|
|
45
|
+
f"Call the `counter_bump` tool {TARGET} times, one call per turn — wait "
|
|
46
|
+
"for each result before the next. After the last result, reply with "
|
|
47
|
+
"<answer>done</answer>."
|
|
48
|
+
),
|
|
49
|
+
),
|
|
50
|
+
self.config.task,
|
|
51
|
+
)
|
|
52
|
+
]
|
|
53
|
+
|
|
54
|
+
|
|
55
|
+
__all__ = ["CounterTaskset"]
|
|
56
|
+
|
|
57
|
+
|
|
58
|
+
if __name__ == "__main__":
|
|
59
|
+
CounterToolset.run()
|
|
@@ -25,39 +25,42 @@ def lenient_match(answer: str, text: str) -> bool:
|
|
|
25
25
|
return _key(answer) in _key(text)
|
|
26
26
|
|
|
27
27
|
|
|
28
|
-
class
|
|
28
|
+
class EchoAgenticData(vf.TaskData):
|
|
29
29
|
answer: str
|
|
30
30
|
"""The phrase the model should write into the file."""
|
|
31
31
|
|
|
32
32
|
|
|
33
|
+
class EchoAgenticTask(vf.Task[EchoAgenticData]):
|
|
34
|
+
@vf.reward(weight=1.0)
|
|
35
|
+
async def wrote_phrase(self, runtime: Runtime) -> float:
|
|
36
|
+
try:
|
|
37
|
+
content = (await runtime.read(TARGET)).decode(errors="replace")
|
|
38
|
+
except (SandboxError, OSError, ValueError):
|
|
39
|
+
return 0.0 # the model never wrote the file
|
|
40
|
+
return float(lenient_match(self.data.answer, content))
|
|
41
|
+
|
|
42
|
+
|
|
33
43
|
class EchoAgenticConfig(vf.TasksetConfig):
|
|
34
44
|
phrase: str = "hello world"
|
|
35
45
|
|
|
36
46
|
|
|
37
47
|
class EchoAgenticTaskset(vf.Taskset[EchoAgenticTask, EchoAgenticConfig]):
|
|
38
|
-
def
|
|
48
|
+
def load(self) -> list[EchoAgenticTask]:
|
|
39
49
|
phrase = self.config.phrase
|
|
40
50
|
return [
|
|
41
51
|
EchoAgenticTask(
|
|
42
|
-
|
|
43
|
-
|
|
44
|
-
|
|
45
|
-
|
|
52
|
+
EchoAgenticData(
|
|
53
|
+
idx=0,
|
|
54
|
+
prompt=(
|
|
55
|
+
f"Use the bash tool to write exactly the text '{phrase}' to a file "
|
|
56
|
+
f"named {TARGET} in the current directory, then finish."
|
|
57
|
+
),
|
|
58
|
+
system_prompt=SYSTEM,
|
|
59
|
+
answer=phrase,
|
|
46
60
|
),
|
|
47
|
-
|
|
48
|
-
answer=phrase,
|
|
61
|
+
self.config.task,
|
|
49
62
|
)
|
|
50
63
|
]
|
|
51
64
|
|
|
52
|
-
@vf.reward(weight=1.0)
|
|
53
|
-
async def wrote_phrase(
|
|
54
|
-
self, task: EchoAgenticTask, trace: vf.Trace, runtime: Runtime
|
|
55
|
-
) -> float:
|
|
56
|
-
try:
|
|
57
|
-
content = (await runtime.read(TARGET)).decode(errors="replace")
|
|
58
|
-
except (SandboxError, OSError, ValueError):
|
|
59
|
-
return 0.0 # the model never wrote the file
|
|
60
|
-
return float(lenient_match(task.answer, content))
|
|
61
|
-
|
|
62
65
|
|
|
63
66
|
__all__ = ["EchoAgenticTaskset"]
|
|
@@ -1,12 +1,12 @@
|
|
|
1
1
|
"""echo (v1, MCP tool): retrieve a stamped echo from a `vf.Toolset`, then report it.
|
|
2
2
|
|
|
3
|
-
The v1 tool fixture for the e2e matrix. The
|
|
4
|
-
with one `@vf.tool` method whose placement is CLI-tunable (`--taskset.tools.colocated`,
|
|
5
|
-
`--taskset.
|
|
6
|
-
|
|
7
|
-
|
|
8
|
-
|
|
9
|
-
|
|
3
|
+
The v1 tool fixture for the e2e matrix. The task declares an `EchoToolset` (`vf.Toolset`)
|
|
4
|
+
with one `@vf.tool` method whose placement is CLI-tunable (`--taskset.task.tools.colocated`,
|
|
5
|
+
`--taskset.task.tools.runtime.type`): it runs colocated in the harness's runtime or in its
|
|
6
|
+
own runtime, and the harness must reach it wherever it lives. The tool stamps its output
|
|
7
|
+
with a token the prompt never reveals, so the reward is 1.0 only if the model actually
|
|
8
|
+
called the tool — trivial when the infra works, impossible when it doesn't. The tool is
|
|
9
|
+
task-agnostic, so it would also serve taskset-scoped (`Taskset.tools`).
|
|
10
10
|
"""
|
|
11
11
|
|
|
12
12
|
import verifiers.v1 as vf
|
|
@@ -24,38 +24,40 @@ class EchoToolset(vf.Toolset[vf.ToolsetConfig]):
|
|
|
24
24
|
return f"{message} [{ECHO_TOKEN}]"
|
|
25
25
|
|
|
26
26
|
|
|
27
|
-
class
|
|
28
|
-
|
|
27
|
+
class EchoToolTaskConfig(vf.TaskConfig):
|
|
28
|
+
tools: vf.ToolsetConfig = vf.ToolsetConfig()
|
|
29
|
+
|
|
30
|
+
|
|
31
|
+
class EchoToolTask(vf.Task[vf.TaskData, vf.State, EchoToolTaskConfig]):
|
|
32
|
+
tools = (EchoToolset,)
|
|
33
|
+
|
|
34
|
+
@vf.reward(weight=1.0)
|
|
35
|
+
async def echoed(self, trace: vf.Trace) -> float:
|
|
36
|
+
# The stamped token reaches the answer only if the model called the MCP tool.
|
|
37
|
+
last = trace.assistant_messages[-1].content if trace.assistant_messages else ""
|
|
38
|
+
last = (last or "").lower()
|
|
39
|
+
return float(PHRASE in last and ECHO_TOKEN in last)
|
|
29
40
|
|
|
30
41
|
|
|
31
42
|
class EchoToolConfig(vf.TasksetConfig):
|
|
32
|
-
|
|
43
|
+
task: EchoToolTaskConfig = EchoToolTaskConfig()
|
|
33
44
|
|
|
34
45
|
|
|
35
46
|
class EchoToolTaskset(vf.Taskset[EchoToolTask, EchoToolConfig]):
|
|
36
|
-
def
|
|
47
|
+
def load(self) -> list[EchoToolTask]:
|
|
37
48
|
return [
|
|
38
49
|
EchoToolTask(
|
|
39
|
-
|
|
40
|
-
|
|
41
|
-
|
|
42
|
-
|
|
50
|
+
vf.TaskData(
|
|
51
|
+
idx=0,
|
|
52
|
+
prompt=(
|
|
53
|
+
f'Call the `echo_back` tool with the message "{PHRASE}", then reply '
|
|
54
|
+
"with exactly what it returns inside <answer></answer> tags."
|
|
55
|
+
),
|
|
43
56
|
),
|
|
57
|
+
self.config.task,
|
|
44
58
|
)
|
|
45
59
|
]
|
|
46
60
|
|
|
47
|
-
def tools(self, task: EchoToolTask) -> list[vf.Toolset]:
|
|
48
|
-
return [EchoToolset(self.config.tools)]
|
|
49
|
-
|
|
50
|
-
@vf.reward(weight=1.0)
|
|
51
|
-
async def echoed(
|
|
52
|
-
self, task: EchoToolTask, trace: vf.Trace, runtime: vf.Runtime
|
|
53
|
-
) -> float:
|
|
54
|
-
# The stamped token reaches the answer only if the model called the MCP tool.
|
|
55
|
-
last = trace.assistant_messages[-1].content if trace.assistant_messages else ""
|
|
56
|
-
last = (last or "").lower()
|
|
57
|
-
return float(PHRASE in last and ECHO_TOKEN in last)
|
|
58
|
-
|
|
59
61
|
|
|
60
62
|
__all__ = ["EchoToolTaskset"]
|
|
61
63
|
|
|
@@ -1,11 +1,4 @@
|
|
|
1
|
-
"""
|
|
2
|
-
|
|
3
|
-
The v1 user-sim fixture for the e2e matrix. The user simulator is a `vf.User` class whose
|
|
4
|
-
placement is CLI-tunable (`--taskset.user.colocated`, `--taskset.user.runtime.type`): it runs
|
|
5
|
-
either inside the harness's runtime (`colocated`) or in its own runtime (the default), and
|
|
6
|
-
either way the framework drives it and reaches it from wherever the harness runs. A user-sim is
|
|
7
|
-
a task tool, so this needs a tool-supporting harness.
|
|
8
|
-
"""
|
|
1
|
+
"""Multi-turn echo task driven by a `vf.User` simulator."""
|
|
9
2
|
|
|
10
3
|
import verifiers.v1 as vf
|
|
11
4
|
|
|
@@ -17,13 +10,13 @@ def _key(text: str) -> str:
|
|
|
17
10
|
return "".join(c for c in text.casefold() if c.isalnum())
|
|
18
11
|
|
|
19
12
|
|
|
20
|
-
class
|
|
21
|
-
|
|
13
|
+
class EchoUserSimTaskConfig(vf.TaskConfig):
|
|
14
|
+
user: vf.UserConfig = vf.UserConfig()
|
|
22
15
|
|
|
23
16
|
|
|
24
17
|
class EchoUserSimConfig(vf.TasksetConfig):
|
|
25
18
|
phrases: list[str] = PHRASES
|
|
26
|
-
|
|
19
|
+
task: EchoUserSimTaskConfig = EchoUserSimTaskConfig()
|
|
27
20
|
|
|
28
21
|
|
|
29
22
|
class EchoUserSimState(vf.State):
|
|
@@ -45,36 +38,44 @@ class EchoUserSimUser(vf.User[vf.UserConfig, EchoUserSimState]):
|
|
|
45
38
|
return [{"role": "user", "content": self.phrases[self.turns]}]
|
|
46
39
|
|
|
47
40
|
|
|
48
|
-
class
|
|
49
|
-
|
|
41
|
+
class EchoUserSimData(vf.TaskData):
|
|
42
|
+
phrases: list[str]
|
|
43
|
+
|
|
44
|
+
|
|
45
|
+
class EchoUserSimTask(
|
|
46
|
+
vf.Task[EchoUserSimData, EchoUserSimState, EchoUserSimTaskConfig]
|
|
50
47
|
):
|
|
48
|
+
user = EchoUserSimUser
|
|
49
|
+
|
|
51
50
|
@vf.stop
|
|
52
51
|
async def user_finished(self, trace: vf.Trace) -> bool:
|
|
53
52
|
return trace.state.user_finished
|
|
54
53
|
|
|
55
|
-
def load_tasks(self) -> list[EchoUserSimTask]:
|
|
56
|
-
return [
|
|
57
|
-
EchoUserSimTask(
|
|
58
|
-
idx=0,
|
|
59
|
-
prompt=self.config.phrases[0],
|
|
60
|
-
system_prompt=SYSTEM,
|
|
61
|
-
phrases=self.config.phrases,
|
|
62
|
-
)
|
|
63
|
-
]
|
|
64
|
-
|
|
65
|
-
def user(self, task: EchoUserSimTask) -> vf.User:
|
|
66
|
-
return EchoUserSimUser(self.config.user)
|
|
67
|
-
|
|
68
54
|
@vf.reward(weight=1.0)
|
|
69
|
-
async def echoed(self,
|
|
55
|
+
async def echoed(self, trace: vf.Trace) -> float:
|
|
70
56
|
replies = [m.content for m in trace.assistant_messages]
|
|
71
|
-
phrases =
|
|
57
|
+
phrases = self.data.phrases
|
|
72
58
|
if len(replies) < len(phrases):
|
|
73
59
|
return 0.0
|
|
74
60
|
matched = sum(_key(p) in _key(r or "") for r, p in zip(replies, phrases))
|
|
75
61
|
return matched / len(phrases)
|
|
76
62
|
|
|
77
63
|
|
|
64
|
+
class EchoUserSimTaskset(vf.Taskset[EchoUserSimTask, EchoUserSimConfig]):
|
|
65
|
+
def load(self) -> list[EchoUserSimTask]:
|
|
66
|
+
return [
|
|
67
|
+
EchoUserSimTask(
|
|
68
|
+
EchoUserSimData(
|
|
69
|
+
idx=0,
|
|
70
|
+
prompt=self.config.phrases[0],
|
|
71
|
+
system_prompt=SYSTEM,
|
|
72
|
+
phrases=self.config.phrases,
|
|
73
|
+
),
|
|
74
|
+
self.config.task,
|
|
75
|
+
)
|
|
76
|
+
]
|
|
77
|
+
|
|
78
|
+
|
|
78
79
|
__all__ = ["EchoUserSimTaskset"]
|
|
79
80
|
|
|
80
81
|
|
|
@@ -22,40 +22,45 @@ def lenient_match(answer: str, text: str) -> bool:
|
|
|
22
22
|
return _key(answer) in _key(text)
|
|
23
23
|
|
|
24
24
|
|
|
25
|
-
class
|
|
25
|
+
class EchoData(vf.TaskData):
|
|
26
26
|
answer: str
|
|
27
27
|
"""The phrase the model should echo back."""
|
|
28
28
|
|
|
29
29
|
|
|
30
|
+
class EchoTask(vf.Task[EchoData]):
|
|
31
|
+
@vf.stop
|
|
32
|
+
async def single_turn(self, trace: vf.Trace) -> bool:
|
|
33
|
+
return trace.num_turns >= 1
|
|
34
|
+
|
|
35
|
+
@vf.reward(weight=1.0)
|
|
36
|
+
async def echoed(self, trace: vf.Trace) -> float:
|
|
37
|
+
reply = trace.assistant_messages[-1].content if trace.assistant_messages else ""
|
|
38
|
+
return float(lenient_match(self.data.answer, reply or ""))
|
|
39
|
+
|
|
40
|
+
|
|
30
41
|
class EchoConfig(vf.TasksetConfig):
|
|
31
42
|
phrases: list[str] = ["hello world", "ping", "verifiers"]
|
|
32
43
|
|
|
33
44
|
|
|
34
45
|
class EchoTaskset(vf.Taskset[EchoTask, EchoConfig]):
|
|
35
|
-
def
|
|
46
|
+
def load(self) -> list[EchoTask]:
|
|
36
47
|
return [
|
|
37
48
|
# Keep coding-agent harnesses on the direct-response path instead of
|
|
38
49
|
# spending this single-turn smoke task on a tool call.
|
|
39
50
|
EchoTask(
|
|
40
|
-
|
|
41
|
-
|
|
42
|
-
|
|
43
|
-
|
|
51
|
+
EchoData(
|
|
52
|
+
idx=i,
|
|
53
|
+
prompt=(
|
|
54
|
+
"Do not call tools or execute code. Reply immediately and include "
|
|
55
|
+
f"this exact phrase in your final response: {phrase}"
|
|
56
|
+
),
|
|
57
|
+
system_prompt=SYSTEM,
|
|
58
|
+
answer=phrase,
|
|
44
59
|
),
|
|
45
|
-
|
|
46
|
-
answer=phrase,
|
|
60
|
+
self.config.task,
|
|
47
61
|
)
|
|
48
62
|
for i, phrase in enumerate(self.config.phrases)
|
|
49
63
|
]
|
|
50
64
|
|
|
51
|
-
@vf.stop
|
|
52
|
-
async def single_turn(self, trace: vf.Trace) -> bool:
|
|
53
|
-
return trace.num_turns >= 1
|
|
54
|
-
|
|
55
|
-
@vf.reward(weight=1.0)
|
|
56
|
-
async def echoed(self, task: EchoTask, trace: vf.Trace) -> float:
|
|
57
|
-
reply = trace.assistant_messages[-1].content if trace.assistant_messages else ""
|
|
58
|
-
return float(lenient_match(task.answer, reply or ""))
|
|
59
|
-
|
|
60
65
|
|
|
61
66
|
__all__ = ["EchoTaskset"]
|
{verifiers-0.1.15.dev442 → verifiers-0.1.15.dev443}/tests/v1/fixtures/tool_response_image_v1.py
RENAMED
|
@@ -27,24 +27,7 @@ class VisionToolset(vf.Toolset[vf.ToolsetConfig]):
|
|
|
27
27
|
|
|
28
28
|
|
|
29
29
|
class ToolResponseImageTask(vf.Task):
|
|
30
|
-
|
|
31
|
-
|
|
32
|
-
|
|
33
|
-
class ToolResponseImageTaskset(vf.Taskset[ToolResponseImageTask, vf.TasksetConfig]):
|
|
34
|
-
def load_tasks(self) -> list[ToolResponseImageTask]:
|
|
35
|
-
return [
|
|
36
|
-
ToolResponseImageTask(
|
|
37
|
-
idx=0,
|
|
38
|
-
prompt=(
|
|
39
|
-
"Call the `vision_snapshot` tool exactly once. After it returns, "
|
|
40
|
-
"reply with exactly `done`."
|
|
41
|
-
),
|
|
42
|
-
system_prompt=SYSTEM,
|
|
43
|
-
)
|
|
44
|
-
]
|
|
45
|
-
|
|
46
|
-
def tools(self, task: ToolResponseImageTask) -> list[vf.Toolset]:
|
|
47
|
-
return [VisionToolset(vf.ToolsetConfig())]
|
|
30
|
+
tools = (VisionToolset,)
|
|
48
31
|
|
|
49
32
|
@vf.reward(weight=1.0)
|
|
50
33
|
async def preserved_image_tool_result(self, trace: vf.Trace) -> float:
|
|
@@ -56,6 +39,23 @@ class ToolResponseImageTaskset(vf.Taskset[ToolResponseImageTask, vf.TasksetConfi
|
|
|
56
39
|
return 0.0
|
|
57
40
|
|
|
58
41
|
|
|
42
|
+
class ToolResponseImageTaskset(vf.Taskset[ToolResponseImageTask, vf.TasksetConfig]):
|
|
43
|
+
def load(self) -> list[ToolResponseImageTask]:
|
|
44
|
+
return [
|
|
45
|
+
ToolResponseImageTask(
|
|
46
|
+
vf.TaskData(
|
|
47
|
+
idx=0,
|
|
48
|
+
prompt=(
|
|
49
|
+
"Call the `vision_snapshot` tool exactly once. After it returns, "
|
|
50
|
+
"reply with exactly `done`."
|
|
51
|
+
),
|
|
52
|
+
system_prompt=SYSTEM,
|
|
53
|
+
),
|
|
54
|
+
self.config.task,
|
|
55
|
+
)
|
|
56
|
+
]
|
|
57
|
+
|
|
58
|
+
|
|
59
59
|
__all__ = ["ToolResponseImageTaskset"]
|
|
60
60
|
|
|
61
61
|
|
|
@@ -12,7 +12,7 @@ def test_color_images_are_rendered_once(monkeypatch) -> None:
|
|
|
12
12
|
monkeypatch.setattr(taskset, "color_data_url", counted)
|
|
13
13
|
tasks = taskset.ColorCodewordTaskset(
|
|
14
14
|
taskset.ColorCodewordConfig(num_examples=100)
|
|
15
|
-
).
|
|
15
|
+
).load()
|
|
16
16
|
|
|
17
17
|
assert len(tasks) == 100
|
|
18
18
|
assert calls == list(taskset.COLOR_MAP)
|