verifiers 0.3.1.dev25__tar.gz → 0.3.1.dev32__tar.gz
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- {verifiers-0.3.1.dev25 → verifiers-0.3.1.dev32}/PKG-INFO +1 -1
- {verifiers-0.3.1.dev25 → verifiers-0.3.1.dev32}/pyproject.toml +20 -3
- {verifiers-0.3.1.dev25 → verifiers-0.3.1.dev32}/tests/v1/test_scoring.py +4 -1
- {verifiers-0.3.1.dev25 → verifiers-0.3.1.dev32}/verifiers/v1/__init__.py +13 -1
- {verifiers-0.3.1.dev25 → verifiers-0.3.1.dev32}/verifiers/v1/agent.py +2 -6
- {verifiers-0.3.1.dev25 → verifiers-0.3.1.dev32}/verifiers/v1/clients/train.py +3 -1
- {verifiers-0.3.1.dev25 → verifiers-0.3.1.dev32}/verifiers/v1/configs/agent.py +2 -2
- {verifiers-0.3.1.dev25 → verifiers-0.3.1.dev32}/verifiers/v1/configs/cli/debug.py +2 -2
- {verifiers-0.3.1.dev25 → verifiers-0.3.1.dev32}/verifiers/v1/configs/cli/validate.py +2 -2
- {verifiers-0.3.1.dev25 → verifiers-0.3.1.dev32}/verifiers/v1/configs/client.py +1 -1
- {verifiers-0.3.1.dev25 → verifiers-0.3.1.dev32}/verifiers/v1/configs/task.py +3 -3
- {verifiers-0.3.1.dev25 → verifiers-0.3.1.dev32}/verifiers/v1/dialects/anthropic.py +136 -5
- {verifiers-0.3.1.dev25 → verifiers-0.3.1.dev32}/verifiers/v1/dialects/base.py +15 -3
- {verifiers-0.3.1.dev25 → verifiers-0.3.1.dev32}/verifiers/v1/dialects/chat.py +44 -5
- {verifiers-0.3.1.dev25 → verifiers-0.3.1.dev32}/verifiers/v1/dialects/responses.py +122 -5
- {verifiers-0.3.1.dev25 → verifiers-0.3.1.dev32}/verifiers/v1/graph.py +12 -0
- {verifiers-0.3.1.dev25 → verifiers-0.3.1.dev32}/verifiers/v1/harness.py +27 -1
- {verifiers-0.3.1.dev25 → verifiers-0.3.1.dev32}/verifiers/v1/harnesses/bash/harness.py +4 -0
- {verifiers-0.3.1.dev25 → verifiers-0.3.1.dev32}/verifiers/v1/harnesses/bash/program.py +84 -43
- {verifiers-0.3.1.dev25 → verifiers-0.3.1.dev32}/verifiers/v1/interception/server.py +256 -88
- verifiers-0.3.1.dev32/verifiers/v1/interception/tool.py +12 -0
- {verifiers-0.3.1.dev25 → verifiers-0.3.1.dev32}/verifiers/v1/interception/tunnel/prime.py +5 -0
- {verifiers-0.3.1.dev25 → verifiers-0.3.1.dev32}/verifiers/v1/rollout.py +88 -14
- {verifiers-0.3.1.dev25 → verifiers-0.3.1.dev32}/verifiers/v1/runtimes/prime.py +3 -1
- verifiers-0.3.1.dev32/verifiers/v1/session.py +402 -0
- {verifiers-0.3.1.dev25 → verifiers-0.3.1.dev32}/verifiers/v1/tasksets/nemo_gym/taskset.py +2 -2
- {verifiers-0.3.1.dev25 → verifiers-0.3.1.dev32}/verifiers/v1/trace.py +22 -0
- {verifiers-0.3.1.dev25 → verifiers-0.3.1.dev32}/verifiers/v1/types.py +7 -0
- {verifiers-0.3.1.dev25 → verifiers-0.3.1.dev32}/verifiers/v1/utils/decorators.py +21 -4
- {verifiers-0.3.1.dev25 → verifiers-0.3.1.dev32}/verifiers/v1/utils/platform.py +1 -1
- verifiers-0.3.1.dev25/verifiers/v1/utils/prime_config.py → verifiers-0.3.1.dev32/verifiers/v1/utils/prime.py +10 -0
- verifiers-0.3.1.dev25/verifiers/v1/session.py +0 -147
- {verifiers-0.3.1.dev25 → verifiers-0.3.1.dev32}/.gitignore +0 -0
- {verifiers-0.3.1.dev25 → verifiers-0.3.1.dev32}/LICENSE +0 -0
- {verifiers-0.3.1.dev25 → verifiers-0.3.1.dev32}/README.md +0 -0
- {verifiers-0.3.1.dev25 → verifiers-0.3.1.dev32}/tests/__init__.py +0 -0
- {verifiers-0.3.1.dev25 → verifiers-0.3.1.dev32}/tests/conftest.py +0 -0
- {verifiers-0.3.1.dev25 → verifiers-0.3.1.dev32}/tests/test_browser_env.py +0 -0
- {verifiers-0.3.1.dev25 → verifiers-0.3.1.dev32}/tests/test_build_script.py +0 -0
- {verifiers-0.3.1.dev25 → verifiers-0.3.1.dev32}/tests/test_cli_agent_env.py +0 -0
- {verifiers-0.3.1.dev25 → verifiers-0.3.1.dev32}/tests/test_client_auth_errors.py +0 -0
- {verifiers-0.3.1.dev25 → verifiers-0.3.1.dev32}/tests/test_client_config.py +0 -0
- {verifiers-0.3.1.dev25 → verifiers-0.3.1.dev32}/tests/test_client_multimodal_types.py +0 -0
- {verifiers-0.3.1.dev25 → verifiers-0.3.1.dev32}/tests/test_composable_env.py +0 -0
- {verifiers-0.3.1.dev25 → verifiers-0.3.1.dev32}/tests/test_context_token_metrics.py +0 -0
- {verifiers-0.3.1.dev25 → verifiers-0.3.1.dev32}/tests/test_decorator_ranks.py +0 -0
- {verifiers-0.3.1.dev25 → verifiers-0.3.1.dev32}/tests/test_endpoint_registry.py +0 -0
- {verifiers-0.3.1.dev25 → verifiers-0.3.1.dev32}/tests/test_env_group.py +0 -0
- {verifiers-0.3.1.dev25 → verifiers-0.3.1.dev32}/tests/test_env_server.py +0 -0
- {verifiers-0.3.1.dev25 → verifiers-0.3.1.dev32}/tests/test_environment.py +0 -0
- {verifiers-0.3.1.dev25 → verifiers-0.3.1.dev32}/tests/test_environment_extra.py +0 -0
- {verifiers-0.3.1.dev25 → verifiers-0.3.1.dev32}/tests/test_error_chain.py +0 -0
- {verifiers-0.3.1.dev25 → verifiers-0.3.1.dev32}/tests/test_eval_display.py +0 -0
- {verifiers-0.3.1.dev25 → verifiers-0.3.1.dev32}/tests/test_eval_utils.py +0 -0
- {verifiers-0.3.1.dev25 → verifiers-0.3.1.dev32}/tests/test_gepa_cli.py +0 -0
- {verifiers-0.3.1.dev25 → verifiers-0.3.1.dev32}/tests/test_gepa_utils.py +0 -0
- {verifiers-0.3.1.dev25 → verifiers-0.3.1.dev32}/tests/test_gym_env.py +0 -0
- {verifiers-0.3.1.dev25 → verifiers-0.3.1.dev32}/tests/test_harbor_env_mcp.py +0 -0
- {verifiers-0.3.1.dev25 → verifiers-0.3.1.dev32}/tests/test_imports.py +0 -0
- {verifiers-0.3.1.dev25 → verifiers-0.3.1.dev32}/tests/test_init_script.py +0 -0
- {verifiers-0.3.1.dev25 → verifiers-0.3.1.dev32}/tests/test_install_utils.py +0 -0
- {verifiers-0.3.1.dev25 → verifiers-0.3.1.dev32}/tests/test_interception_utils.py +0 -0
- {verifiers-0.3.1.dev25 → verifiers-0.3.1.dev32}/tests/test_logging.py +0 -0
- {verifiers-0.3.1.dev25 → verifiers-0.3.1.dev32}/tests/test_math_rubric.py +0 -0
- {verifiers-0.3.1.dev25 → verifiers-0.3.1.dev32}/tests/test_maybe_think_parser.py +0 -0
- {verifiers-0.3.1.dev25 → verifiers-0.3.1.dev32}/tests/test_message_utils.py +0 -0
- {verifiers-0.3.1.dev25 → verifiers-0.3.1.dev32}/tests/test_message_utils_multimodal.py +0 -0
- {verifiers-0.3.1.dev25 → verifiers-0.3.1.dev32}/tests/test_multiturn_env.py +0 -0
- {verifiers-0.3.1.dev25 → verifiers-0.3.1.dev32}/tests/test_nemorl_client.py +0 -0
- {verifiers-0.3.1.dev25 → verifiers-0.3.1.dev32}/tests/test_openai_chat_completions_token_client.py +0 -0
- {verifiers-0.3.1.dev25 → verifiers-0.3.1.dev32}/tests/test_openai_responses_client.py +0 -0
- {verifiers-0.3.1.dev25 → verifiers-0.3.1.dev32}/tests/test_opencode_rlm_env.py +0 -0
- {verifiers-0.3.1.dev25 → verifiers-0.3.1.dev32}/tests/test_openenv_client.py +0 -0
- {verifiers-0.3.1.dev25 → verifiers-0.3.1.dev32}/tests/test_parser.py +0 -0
- {verifiers-0.3.1.dev25 → verifiers-0.3.1.dev32}/tests/test_path_utils.py +0 -0
- {verifiers-0.3.1.dev25 → verifiers-0.3.1.dev32}/tests/test_per_turn_timing.py +0 -0
- {verifiers-0.3.1.dev25 → verifiers-0.3.1.dev32}/tests/test_pricing_utils.py +0 -0
- {verifiers-0.3.1.dev25 → verifiers-0.3.1.dev32}/tests/test_prime_plugin.py +0 -0
- {verifiers-0.3.1.dev25 → verifiers-0.3.1.dev32}/tests/test_renderer_client.py +0 -0
- {verifiers-0.3.1.dev25 → verifiers-0.3.1.dev32}/tests/test_renderer_e2e.py +0 -0
- {verifiers-0.3.1.dev25 → verifiers-0.3.1.dev32}/tests/test_rlm_composable_env.py +0 -0
- {verifiers-0.3.1.dev25 → verifiers-0.3.1.dev32}/tests/test_rubric.py +0 -0
- {verifiers-0.3.1.dev25 → verifiers-0.3.1.dev32}/tests/test_rubric_group.py +0 -0
- {verifiers-0.3.1.dev25 → verifiers-0.3.1.dev32}/tests/test_sandbox_debug_env.py +0 -0
- {verifiers-0.3.1.dev25 → verifiers-0.3.1.dev32}/tests/test_sandbox_env.py +0 -0
- {verifiers-0.3.1.dev25 → verifiers-0.3.1.dev32}/tests/test_sandbox_mixin.py +0 -0
- {verifiers-0.3.1.dev25 → verifiers-0.3.1.dev32}/tests/test_save_utils.py +0 -0
- {verifiers-0.3.1.dev25 → verifiers-0.3.1.dev32}/tests/test_setup_script.py +0 -0
- {verifiers-0.3.1.dev25 → verifiers-0.3.1.dev32}/tests/test_singleturn_env.py +0 -0
- {verifiers-0.3.1.dev25 → verifiers-0.3.1.dev32}/tests/test_stateful_tool_env.py +0 -0
- {verifiers-0.3.1.dev25 → verifiers-0.3.1.dev32}/tests/test_think_parser.py +0 -0
- {verifiers-0.3.1.dev25 → verifiers-0.3.1.dev32}/tests/test_tool_env.py +0 -0
- {verifiers-0.3.1.dev25 → verifiers-0.3.1.dev32}/tests/test_tool_utils.py +0 -0
- {verifiers-0.3.1.dev25 → verifiers-0.3.1.dev32}/tests/test_trajectory_processing.py +0 -0
- {verifiers-0.3.1.dev25 → verifiers-0.3.1.dev32}/tests/test_tui_info_formatting.py +0 -0
- {verifiers-0.3.1.dev25 → verifiers-0.3.1.dev32}/tests/test_types.py +0 -0
- {verifiers-0.3.1.dev25 → verifiers-0.3.1.dev32}/tests/test_xml_parser.py +0 -0
- {verifiers-0.3.1.dev25 → verifiers-0.3.1.dev32}/tests/v1/conftest.py +0 -0
- {verifiers-0.3.1.dev25 → verifiers-0.3.1.dev32}/tests/v1/fixtures/counter_tool_v1.py +0 -0
- {verifiers-0.3.1.dev25 → verifiers-0.3.1.dev32}/tests/v1/fixtures/duet_v1.py +0 -0
- {verifiers-0.3.1.dev25 → verifiers-0.3.1.dev32}/tests/v1/fixtures/echo_acp_resume_v1.py +0 -0
- {verifiers-0.3.1.dev25 → verifiers-0.3.1.dev32}/tests/v1/fixtures/echo_agentic_v1.py +0 -0
- {verifiers-0.3.1.dev25 → verifiers-0.3.1.dev32}/tests/v1/fixtures/echo_tool_v1.py +0 -0
- {verifiers-0.3.1.dev25 → verifiers-0.3.1.dev32}/tests/v1/fixtures/echo_user_sim_v1.py +0 -0
- {verifiers-0.3.1.dev25 → verifiers-0.3.1.dev32}/tests/v1/fixtures/echo_v1.py +0 -0
- {verifiers-0.3.1.dev25 → verifiers-0.3.1.dev32}/tests/v1/fixtures/pyproject.toml +0 -0
- {verifiers-0.3.1.dev25 → verifiers-0.3.1.dev32}/tests/v1/fixtures/tool_response_image_v1.py +0 -0
- {verifiers-0.3.1.dev25 → verifiers-0.3.1.dev32}/tests/v1/test_color_codeword_tasks.py +0 -0
- {verifiers-0.3.1.dev25 → verifiers-0.3.1.dev32}/tests/v1/test_configs.py +0 -0
- {verifiers-0.3.1.dev25 → verifiers-0.3.1.dev32}/tests/v1/test_e2e.py +0 -0
- {verifiers-0.3.1.dev25 → verifiers-0.3.1.dev32}/tests/v1/test_envs.py +0 -0
- {verifiers-0.3.1.dev25 → verifiers-0.3.1.dev32}/tests/v1/test_graph.py +0 -0
- {verifiers-0.3.1.dev25 → verifiers-0.3.1.dev32}/tests/v1/test_judges.py +0 -0
- {verifiers-0.3.1.dev25 → verifiers-0.3.1.dev32}/tests/v1/test_taskset.py +0 -0
- {verifiers-0.3.1.dev25 → verifiers-0.3.1.dev32}/tests/v1/test_trace.py +0 -0
- {verifiers-0.3.1.dev25 → verifiers-0.3.1.dev32}/verifiers/__init__.py +0 -0
- {verifiers-0.3.1.dev25 → verifiers-0.3.1.dev32}/verifiers/cli/__init__.py +0 -0
- {verifiers-0.3.1.dev25 → verifiers-0.3.1.dev32}/verifiers/cli/commands/__init__.py +0 -0
- {verifiers-0.3.1.dev25 → verifiers-0.3.1.dev32}/verifiers/cli/commands/build.py +0 -0
- {verifiers-0.3.1.dev25 → verifiers-0.3.1.dev32}/verifiers/cli/commands/eval.py +0 -0
- {verifiers-0.3.1.dev25 → verifiers-0.3.1.dev32}/verifiers/cli/commands/gepa.py +0 -0
- {verifiers-0.3.1.dev25 → verifiers-0.3.1.dev32}/verifiers/cli/commands/init.py +0 -0
- {verifiers-0.3.1.dev25 → verifiers-0.3.1.dev32}/verifiers/cli/commands/install.py +0 -0
- {verifiers-0.3.1.dev25 → verifiers-0.3.1.dev32}/verifiers/cli/commands/setup.py +0 -0
- {verifiers-0.3.1.dev25 → verifiers-0.3.1.dev32}/verifiers/cli/plugins/__init__.py +0 -0
- {verifiers-0.3.1.dev25 → verifiers-0.3.1.dev32}/verifiers/cli/plugins/prime.py +0 -0
- {verifiers-0.3.1.dev25 → verifiers-0.3.1.dev32}/verifiers/cli/tui.py +0 -0
- {verifiers-0.3.1.dev25 → verifiers-0.3.1.dev32}/verifiers/legacy/__init__.py +0 -0
- {verifiers-0.3.1.dev25 → verifiers-0.3.1.dev32}/verifiers/legacy/clients/__init__.py +0 -0
- {verifiers-0.3.1.dev25 → verifiers-0.3.1.dev32}/verifiers/legacy/clients/anthropic_messages_client.py +0 -0
- {verifiers-0.3.1.dev25 → verifiers-0.3.1.dev32}/verifiers/legacy/clients/client.py +0 -0
- {verifiers-0.3.1.dev25 → verifiers-0.3.1.dev32}/verifiers/legacy/clients/nemorl_chat_completions_client.py +0 -0
- {verifiers-0.3.1.dev25 → verifiers-0.3.1.dev32}/verifiers/legacy/clients/openai_chat_completions_client.py +0 -0
- {verifiers-0.3.1.dev25 → verifiers-0.3.1.dev32}/verifiers/legacy/clients/openai_chat_completions_token_client.py +0 -0
- {verifiers-0.3.1.dev25 → verifiers-0.3.1.dev32}/verifiers/legacy/clients/openai_completions_client.py +0 -0
- {verifiers-0.3.1.dev25 → verifiers-0.3.1.dev32}/verifiers/legacy/clients/openai_responses_client.py +0 -0
- {verifiers-0.3.1.dev25 → verifiers-0.3.1.dev32}/verifiers/legacy/clients/renderer_client.py +0 -0
- {verifiers-0.3.1.dev25 → verifiers-0.3.1.dev32}/verifiers/legacy/decorators.py +0 -0
- {verifiers-0.3.1.dev25 → verifiers-0.3.1.dev32}/verifiers/legacy/envs/__init__.py +0 -0
- {verifiers-0.3.1.dev25 → verifiers-0.3.1.dev32}/verifiers/legacy/envs/env_group.py +0 -0
- {verifiers-0.3.1.dev25 → verifiers-0.3.1.dev32}/verifiers/legacy/envs/environment.py +0 -0
- {verifiers-0.3.1.dev25 → verifiers-0.3.1.dev32}/verifiers/legacy/envs/experimental/README.md +0 -0
- {verifiers-0.3.1.dev25 → verifiers-0.3.1.dev32}/verifiers/legacy/envs/experimental/__init__.py +0 -0
- {verifiers-0.3.1.dev25 → verifiers-0.3.1.dev32}/verifiers/legacy/envs/experimental/cli_agent_env.py +0 -0
- {verifiers-0.3.1.dev25 → verifiers-0.3.1.dev32}/verifiers/legacy/envs/experimental/composable/README.md +0 -0
- {verifiers-0.3.1.dev25 → verifiers-0.3.1.dev32}/verifiers/legacy/envs/experimental/composable/__init__.py +0 -0
- {verifiers-0.3.1.dev25 → verifiers-0.3.1.dev32}/verifiers/legacy/envs/experimental/composable/_filter.py +0 -0
- {verifiers-0.3.1.dev25 → verifiers-0.3.1.dev32}/verifiers/legacy/envs/experimental/composable/composable_env.py +0 -0
- {verifiers-0.3.1.dev25 → verifiers-0.3.1.dev32}/verifiers/legacy/envs/experimental/composable/harness.py +0 -0
- {verifiers-0.3.1.dev25 → verifiers-0.3.1.dev32}/verifiers/legacy/envs/experimental/composable/harnesses/__init__.py +0 -0
- {verifiers-0.3.1.dev25 → verifiers-0.3.1.dev32}/verifiers/legacy/envs/experimental/composable/harnesses/mini_swe_agent.py +0 -0
- {verifiers-0.3.1.dev25 → verifiers-0.3.1.dev32}/verifiers/legacy/envs/experimental/composable/harnesses/opencode.py +0 -0
- {verifiers-0.3.1.dev25 → verifiers-0.3.1.dev32}/verifiers/legacy/envs/experimental/composable/harnesses/prompt.txt +0 -0
- {verifiers-0.3.1.dev25 → verifiers-0.3.1.dev32}/verifiers/legacy/envs/experimental/composable/harnesses/rlm.py +0 -0
- {verifiers-0.3.1.dev25 → verifiers-0.3.1.dev32}/verifiers/legacy/envs/experimental/composable/sandbox_debug_env.py +0 -0
- {verifiers-0.3.1.dev25 → verifiers-0.3.1.dev32}/verifiers/legacy/envs/experimental/composable/swe_debug_env.py +0 -0
- {verifiers-0.3.1.dev25 → verifiers-0.3.1.dev32}/verifiers/legacy/envs/experimental/composable/task.py +0 -0
- {verifiers-0.3.1.dev25 → verifiers-0.3.1.dev32}/verifiers/legacy/envs/experimental/composable/tasksets/__init__.py +0 -0
- {verifiers-0.3.1.dev25 → verifiers-0.3.1.dev32}/verifiers/legacy/envs/experimental/composable/tasksets/cp/__init__.py +0 -0
- {verifiers-0.3.1.dev25 → verifiers-0.3.1.dev32}/verifiers/legacy/envs/experimental/composable/tasksets/cp/cp_task.py +0 -0
- {verifiers-0.3.1.dev25 → verifiers-0.3.1.dev32}/verifiers/legacy/envs/experimental/composable/tasksets/cp/test_utils.py +0 -0
- {verifiers-0.3.1.dev25 → verifiers-0.3.1.dev32}/verifiers/legacy/envs/experimental/composable/tasksets/harbor/__init__.py +0 -0
- {verifiers-0.3.1.dev25 → verifiers-0.3.1.dev32}/verifiers/legacy/envs/experimental/composable/tasksets/harbor/cli_gym.py +0 -0
- {verifiers-0.3.1.dev25 → verifiers-0.3.1.dev32}/verifiers/legacy/envs/experimental/composable/tasksets/harbor/harbor.py +0 -0
- {verifiers-0.3.1.dev25 → verifiers-0.3.1.dev32}/verifiers/legacy/envs/experimental/composable/tasksets/harbor/terminal_lego.py +0 -0
- {verifiers-0.3.1.dev25 → verifiers-0.3.1.dev32}/verifiers/legacy/envs/experimental/composable/tasksets/math/__init__.py +0 -0
- {verifiers-0.3.1.dev25 → verifiers-0.3.1.dev32}/verifiers/legacy/envs/experimental/composable/tasksets/math/math_task.py +0 -0
- {verifiers-0.3.1.dev25 → verifiers-0.3.1.dev32}/verifiers/legacy/envs/experimental/composable/tasksets/swe/README.md +0 -0
- {verifiers-0.3.1.dev25 → verifiers-0.3.1.dev32}/verifiers/legacy/envs/experimental/composable/tasksets/swe/__init__.py +0 -0
- {verifiers-0.3.1.dev25 → verifiers-0.3.1.dev32}/verifiers/legacy/envs/experimental/composable/tasksets/swe/multi_swe/__init__.py +0 -0
- {verifiers-0.3.1.dev25 → verifiers-0.3.1.dev32}/verifiers/legacy/envs/experimental/composable/tasksets/swe/multi_swe/extract_fix_patch.sh +0 -0
- {verifiers-0.3.1.dev25 → verifiers-0.3.1.dev32}/verifiers/legacy/envs/experimental/composable/tasksets/swe/multi_swe/taskset.py +0 -0
- {verifiers-0.3.1.dev25 → verifiers-0.3.1.dev32}/verifiers/legacy/envs/experimental/composable/tasksets/swe/openswe/__init__.py +0 -0
- {verifiers-0.3.1.dev25 → verifiers-0.3.1.dev32}/verifiers/legacy/envs/experimental/composable/tasksets/swe/openswe/taskset.py +0 -0
- {verifiers-0.3.1.dev25 → verifiers-0.3.1.dev32}/verifiers/legacy/envs/experimental/composable/tasksets/swe/r2e_gym/__init__.py +0 -0
- {verifiers-0.3.1.dev25 → verifiers-0.3.1.dev32}/verifiers/legacy/envs/experimental/composable/tasksets/swe/r2e_gym/log_parser.py +0 -0
- {verifiers-0.3.1.dev25 → verifiers-0.3.1.dev32}/verifiers/legacy/envs/experimental/composable/tasksets/swe/r2e_gym/taskset.py +0 -0
- {verifiers-0.3.1.dev25 → verifiers-0.3.1.dev32}/verifiers/legacy/envs/experimental/composable/tasksets/swe/scale_swe/__init__.py +0 -0
- {verifiers-0.3.1.dev25 → verifiers-0.3.1.dev32}/verifiers/legacy/envs/experimental/composable/tasksets/swe/scale_swe/taskset.py +0 -0
- {verifiers-0.3.1.dev25 → verifiers-0.3.1.dev32}/verifiers/legacy/envs/experimental/composable/tasksets/swe/shared/__init__.py +0 -0
- {verifiers-0.3.1.dev25 → verifiers-0.3.1.dev32}/verifiers/legacy/envs/experimental/composable/tasksets/swe/shared/test_patch.py +0 -0
- {verifiers-0.3.1.dev25 → verifiers-0.3.1.dev32}/verifiers/legacy/envs/experimental/composable/tasksets/swe/swe_bench/__init__.py +0 -0
- {verifiers-0.3.1.dev25 → verifiers-0.3.1.dev32}/verifiers/legacy/envs/experimental/composable/tasksets/swe/swe_bench/taskset.py +0 -0
- {verifiers-0.3.1.dev25 → verifiers-0.3.1.dev32}/verifiers/legacy/envs/experimental/composable/tasksets/swe/swe_lego/__init__.py +0 -0
- {verifiers-0.3.1.dev25 → verifiers-0.3.1.dev32}/verifiers/legacy/envs/experimental/composable/tasksets/swe/swe_lego/taskset.py +0 -0
- {verifiers-0.3.1.dev25 → verifiers-0.3.1.dev32}/verifiers/legacy/envs/experimental/composable/tasksets/swe/swe_rebench_v2/__init__.py +0 -0
- {verifiers-0.3.1.dev25 → verifiers-0.3.1.dev32}/verifiers/legacy/envs/experimental/composable/tasksets/swe/swe_rebench_v2/log_parsers.py +0 -0
- {verifiers-0.3.1.dev25 → verifiers-0.3.1.dev32}/verifiers/legacy/envs/experimental/composable/tasksets/swe/swe_rebench_v2/taskset.py +0 -0
- {verifiers-0.3.1.dev25 → verifiers-0.3.1.dev32}/verifiers/legacy/envs/experimental/composable/tasksets/swe/swe_smith/__init__.py +0 -0
- {verifiers-0.3.1.dev25 → verifiers-0.3.1.dev32}/verifiers/legacy/envs/experimental/composable/tasksets/swe/swe_smith/taskset.py +0 -0
- {verifiers-0.3.1.dev25 → verifiers-0.3.1.dev32}/verifiers/legacy/envs/experimental/composable/tasksets/swe/swe_tasksets.py +0 -0
- {verifiers-0.3.1.dev25 → verifiers-0.3.1.dev32}/verifiers/legacy/envs/experimental/gym_env.py +0 -0
- {verifiers-0.3.1.dev25 → verifiers-0.3.1.dev32}/verifiers/legacy/envs/experimental/harbor_env/__init__.py +0 -0
- {verifiers-0.3.1.dev25 → verifiers-0.3.1.dev32}/verifiers/legacy/envs/experimental/harbor_env/env.py +0 -0
- {verifiers-0.3.1.dev25 → verifiers-0.3.1.dev32}/verifiers/legacy/envs/experimental/harbor_env/mcp.py +0 -0
- {verifiers-0.3.1.dev25 → verifiers-0.3.1.dev32}/verifiers/legacy/envs/experimental/mcp_env.py +0 -0
- {verifiers-0.3.1.dev25 → verifiers-0.3.1.dev32}/verifiers/legacy/envs/experimental/opencode_env.py +0 -0
- {verifiers-0.3.1.dev25 → verifiers-0.3.1.dev32}/verifiers/legacy/envs/experimental/opencode_qa_env.py +0 -0
- {verifiers-0.3.1.dev25 → verifiers-0.3.1.dev32}/verifiers/legacy/envs/experimental/opencode_rlm_env.py +0 -0
- {verifiers-0.3.1.dev25 → verifiers-0.3.1.dev32}/verifiers/legacy/envs/experimental/sandbox_mixin.py +0 -0
- {verifiers-0.3.1.dev25 → verifiers-0.3.1.dev32}/verifiers/legacy/envs/experimental/utils/__init__.py +0 -0
- {verifiers-0.3.1.dev25 → verifiers-0.3.1.dev32}/verifiers/legacy/envs/experimental/utils/file_locks.py +0 -0
- {verifiers-0.3.1.dev25 → verifiers-0.3.1.dev32}/verifiers/legacy/envs/experimental/utils/git_checkout_cache.py +0 -0
- {verifiers-0.3.1.dev25 → verifiers-0.3.1.dev32}/verifiers/legacy/envs/integrations/README.md +0 -0
- {verifiers-0.3.1.dev25 → verifiers-0.3.1.dev32}/verifiers/legacy/envs/integrations/__init__.py +0 -0
- {verifiers-0.3.1.dev25 → verifiers-0.3.1.dev32}/verifiers/legacy/envs/integrations/browser_env/README.md +0 -0
- {verifiers-0.3.1.dev25 → verifiers-0.3.1.dev32}/verifiers/legacy/envs/integrations/browser_env/__init__.py +0 -0
- {verifiers-0.3.1.dev25 → verifiers-0.3.1.dev32}/verifiers/legacy/envs/integrations/browser_env/browser_env.py +0 -0
- {verifiers-0.3.1.dev25 → verifiers-0.3.1.dev32}/verifiers/legacy/envs/integrations/browser_env/modes/__init__.py +0 -0
- {verifiers-0.3.1.dev25 → verifiers-0.3.1.dev32}/verifiers/legacy/envs/integrations/browser_env/modes/base.py +0 -0
- {verifiers-0.3.1.dev25 → verifiers-0.3.1.dev32}/verifiers/legacy/envs/integrations/browser_env/modes/cua_mode.py +0 -0
- {verifiers-0.3.1.dev25 → verifiers-0.3.1.dev32}/verifiers/legacy/envs/integrations/browser_env/modes/dom_mode.py +0 -0
- {verifiers-0.3.1.dev25 → verifiers-0.3.1.dev32}/verifiers/legacy/envs/integrations/openenv_env.py +0 -0
- {verifiers-0.3.1.dev25 → verifiers-0.3.1.dev32}/verifiers/legacy/envs/integrations/reasoninggym_env.py +0 -0
- {verifiers-0.3.1.dev25 → verifiers-0.3.1.dev32}/verifiers/legacy/envs/integrations/textarena_env.py +0 -0
- {verifiers-0.3.1.dev25 → verifiers-0.3.1.dev32}/verifiers/legacy/envs/multiturn_env.py +0 -0
- {verifiers-0.3.1.dev25 → verifiers-0.3.1.dev32}/verifiers/legacy/envs/python_env.py +0 -0
- {verifiers-0.3.1.dev25 → verifiers-0.3.1.dev32}/verifiers/legacy/envs/sandbox_env.py +0 -0
- {verifiers-0.3.1.dev25 → verifiers-0.3.1.dev32}/verifiers/legacy/envs/singleturn_env.py +0 -0
- {verifiers-0.3.1.dev25 → verifiers-0.3.1.dev32}/verifiers/legacy/envs/stateful_tool_env.py +0 -0
- {verifiers-0.3.1.dev25 → verifiers-0.3.1.dev32}/verifiers/legacy/envs/tool_env.py +0 -0
- {verifiers-0.3.1.dev25 → verifiers-0.3.1.dev32}/verifiers/legacy/errors.py +0 -0
- {verifiers-0.3.1.dev25 → verifiers-0.3.1.dev32}/verifiers/legacy/gepa/__init__.py +0 -0
- {verifiers-0.3.1.dev25 → verifiers-0.3.1.dev32}/verifiers/legacy/gepa/adapter.py +0 -0
- {verifiers-0.3.1.dev25 → verifiers-0.3.1.dev32}/verifiers/legacy/gepa/config.py +0 -0
- {verifiers-0.3.1.dev25 → verifiers-0.3.1.dev32}/verifiers/legacy/gepa/display.py +0 -0
- {verifiers-0.3.1.dev25 → verifiers-0.3.1.dev32}/verifiers/legacy/gepa/gepa_utils.py +0 -0
- {verifiers-0.3.1.dev25 → verifiers-0.3.1.dev32}/verifiers/legacy/parsers/__init__.py +0 -0
- {verifiers-0.3.1.dev25 → verifiers-0.3.1.dev32}/verifiers/legacy/parsers/maybe_think_parser.py +0 -0
- {verifiers-0.3.1.dev25 → verifiers-0.3.1.dev32}/verifiers/legacy/parsers/parser.py +0 -0
- {verifiers-0.3.1.dev25 → verifiers-0.3.1.dev32}/verifiers/legacy/parsers/think_parser.py +0 -0
- {verifiers-0.3.1.dev25 → verifiers-0.3.1.dev32}/verifiers/legacy/parsers/xml_parser.py +0 -0
- {verifiers-0.3.1.dev25 → verifiers-0.3.1.dev32}/verifiers/legacy/rubrics/__init__.py +0 -0
- {verifiers-0.3.1.dev25 → verifiers-0.3.1.dev32}/verifiers/legacy/rubrics/experimental/hybrid_math_rubric.py +0 -0
- {verifiers-0.3.1.dev25 → verifiers-0.3.1.dev32}/verifiers/legacy/rubrics/judge_rubric.py +0 -0
- {verifiers-0.3.1.dev25 → verifiers-0.3.1.dev32}/verifiers/legacy/rubrics/math_rubric.py +0 -0
- {verifiers-0.3.1.dev25 → verifiers-0.3.1.dev32}/verifiers/legacy/rubrics/rubric.py +0 -0
- {verifiers-0.3.1.dev25 → verifiers-0.3.1.dev32}/verifiers/legacy/rubrics/rubric_group.py +0 -0
- {verifiers-0.3.1.dev25 → verifiers-0.3.1.dev32}/verifiers/legacy/scripts/__init__.py +0 -0
- {verifiers-0.3.1.dev25 → verifiers-0.3.1.dev32}/verifiers/legacy/scripts/build.py +0 -0
- {verifiers-0.3.1.dev25 → verifiers-0.3.1.dev32}/verifiers/legacy/scripts/eval.py +0 -0
- {verifiers-0.3.1.dev25 → verifiers-0.3.1.dev32}/verifiers/legacy/scripts/gepa.py +0 -0
- {verifiers-0.3.1.dev25 → verifiers-0.3.1.dev32}/verifiers/legacy/scripts/init.py +0 -0
- {verifiers-0.3.1.dev25 → verifiers-0.3.1.dev32}/verifiers/legacy/scripts/install.py +0 -0
- {verifiers-0.3.1.dev25 → verifiers-0.3.1.dev32}/verifiers/legacy/scripts/setup.py +0 -0
- {verifiers-0.3.1.dev25 → verifiers-0.3.1.dev32}/verifiers/legacy/scripts/tui.py +0 -0
- {verifiers-0.3.1.dev25 → verifiers-0.3.1.dev32}/verifiers/legacy/serve/__init__.py +0 -0
- {verifiers-0.3.1.dev25 → verifiers-0.3.1.dev32}/verifiers/legacy/serve/client/env_client.py +0 -0
- {verifiers-0.3.1.dev25 → verifiers-0.3.1.dev32}/verifiers/legacy/serve/client/zmq_env_client.py +0 -0
- {verifiers-0.3.1.dev25 → verifiers-0.3.1.dev32}/verifiers/legacy/serve/server/__init__.py +0 -0
- {verifiers-0.3.1.dev25 → verifiers-0.3.1.dev32}/verifiers/legacy/serve/server/env_router.py +0 -0
- {verifiers-0.3.1.dev25 → verifiers-0.3.1.dev32}/verifiers/legacy/serve/server/env_server.py +0 -0
- {verifiers-0.3.1.dev25 → verifiers-0.3.1.dev32}/verifiers/legacy/serve/server/env_worker.py +0 -0
- {verifiers-0.3.1.dev25 → verifiers-0.3.1.dev32}/verifiers/legacy/serve/server/zmq_env_server.py +0 -0
- {verifiers-0.3.1.dev25 → verifiers-0.3.1.dev32}/verifiers/legacy/serve/types.py +0 -0
- {verifiers-0.3.1.dev25 → verifiers-0.3.1.dev32}/verifiers/legacy/types.py +0 -0
- {verifiers-0.3.1.dev25 → verifiers-0.3.1.dev32}/verifiers/legacy/utils/__init__.py +0 -0
- {verifiers-0.3.1.dev25 → verifiers-0.3.1.dev32}/verifiers/legacy/utils/async_utils.py +0 -0
- {verifiers-0.3.1.dev25 → verifiers-0.3.1.dev32}/verifiers/legacy/utils/client_utils.py +0 -0
- {verifiers-0.3.1.dev25 → verifiers-0.3.1.dev32}/verifiers/legacy/utils/config_utils.py +0 -0
- {verifiers-0.3.1.dev25 → verifiers-0.3.1.dev32}/verifiers/legacy/utils/data_utils.py +0 -0
- {verifiers-0.3.1.dev25 → verifiers-0.3.1.dev32}/verifiers/legacy/utils/display_utils.py +0 -0
- {verifiers-0.3.1.dev25 → verifiers-0.3.1.dev32}/verifiers/legacy/utils/env_config_utils.py +0 -0
- {verifiers-0.3.1.dev25 → verifiers-0.3.1.dev32}/verifiers/legacy/utils/env_utils.py +0 -0
- {verifiers-0.3.1.dev25 → verifiers-0.3.1.dev32}/verifiers/legacy/utils/error_utils.py +0 -0
- {verifiers-0.3.1.dev25 → verifiers-0.3.1.dev32}/verifiers/legacy/utils/eval_display.py +0 -0
- {verifiers-0.3.1.dev25 → verifiers-0.3.1.dev32}/verifiers/legacy/utils/eval_utils.py +0 -0
- {verifiers-0.3.1.dev25 → verifiers-0.3.1.dev32}/verifiers/legacy/utils/heartbeat.py +0 -0
- {verifiers-0.3.1.dev25 → verifiers-0.3.1.dev32}/verifiers/legacy/utils/import_utils.py +0 -0
- {verifiers-0.3.1.dev25 → verifiers-0.3.1.dev32}/verifiers/legacy/utils/install_utils.py +0 -0
- {verifiers-0.3.1.dev25 → verifiers-0.3.1.dev32}/verifiers/legacy/utils/interception_utils.py +0 -0
- {verifiers-0.3.1.dev25 → verifiers-0.3.1.dev32}/verifiers/legacy/utils/logging_utils.py +0 -0
- {verifiers-0.3.1.dev25 → verifiers-0.3.1.dev32}/verifiers/legacy/utils/message_utils.py +0 -0
- {verifiers-0.3.1.dev25 → verifiers-0.3.1.dev32}/verifiers/legacy/utils/metric_utils.py +0 -0
- {verifiers-0.3.1.dev25 → verifiers-0.3.1.dev32}/verifiers/legacy/utils/path_utils.py +0 -0
- {verifiers-0.3.1.dev25 → verifiers-0.3.1.dev32}/verifiers/legacy/utils/pricing_utils.py +0 -0
- {verifiers-0.3.1.dev25 → verifiers-0.3.1.dev32}/verifiers/legacy/utils/process_utils.py +0 -0
- {verifiers-0.3.1.dev25 → verifiers-0.3.1.dev32}/verifiers/legacy/utils/response_utils.py +0 -0
- {verifiers-0.3.1.dev25 → verifiers-0.3.1.dev32}/verifiers/legacy/utils/save_utils.py +0 -0
- {verifiers-0.3.1.dev25 → verifiers-0.3.1.dev32}/verifiers/legacy/utils/serve_utils.py +0 -0
- {verifiers-0.3.1.dev25 → verifiers-0.3.1.dev32}/verifiers/legacy/utils/thread_utils.py +0 -0
- {verifiers-0.3.1.dev25 → verifiers-0.3.1.dev32}/verifiers/legacy/utils/threaded_sandbox_client.py +0 -0
- {verifiers-0.3.1.dev25 → verifiers-0.3.1.dev32}/verifiers/legacy/utils/tool_utils.py +0 -0
- {verifiers-0.3.1.dev25 → verifiers-0.3.1.dev32}/verifiers/legacy/utils/usage_utils.py +0 -0
- {verifiers-0.3.1.dev25 → verifiers-0.3.1.dev32}/verifiers/legacy/utils/version_utils.py +0 -0
- {verifiers-0.3.1.dev25 → verifiers-0.3.1.dev32}/verifiers/v1/acp/__init__.py +0 -0
- {verifiers-0.3.1.dev25 → verifiers-0.3.1.dev32}/verifiers/v1/acp/runner.py +0 -0
- {verifiers-0.3.1.dev25 → verifiers-0.3.1.dev32}/verifiers/v1/cli/__init__.py +0 -0
- {verifiers-0.3.1.dev25 → verifiers-0.3.1.dev32}/verifiers/v1/cli/dashboard/__init__.py +0 -0
- {verifiers-0.3.1.dev25 → verifiers-0.3.1.dev32}/verifiers/v1/cli/dashboard/base.py +0 -0
- {verifiers-0.3.1.dev25 → verifiers-0.3.1.dev32}/verifiers/v1/cli/dashboard/eval.py +0 -0
- {verifiers-0.3.1.dev25 → verifiers-0.3.1.dev32}/verifiers/v1/cli/dashboard/replay.py +0 -0
- {verifiers-0.3.1.dev25 → verifiers-0.3.1.dev32}/verifiers/v1/cli/dashboard/validate.py +0 -0
- {verifiers-0.3.1.dev25 → verifiers-0.3.1.dev32}/verifiers/v1/cli/debug.py +0 -0
- {verifiers-0.3.1.dev25 → verifiers-0.3.1.dev32}/verifiers/v1/cli/eval/__init__.py +0 -0
- {verifiers-0.3.1.dev25 → verifiers-0.3.1.dev32}/verifiers/v1/cli/eval/main.py +0 -0
- {verifiers-0.3.1.dev25 → verifiers-0.3.1.dev32}/verifiers/v1/cli/eval/resume.py +0 -0
- {verifiers-0.3.1.dev25 → verifiers-0.3.1.dev32}/verifiers/v1/cli/eval/runner.py +0 -0
- {verifiers-0.3.1.dev25 → verifiers-0.3.1.dev32}/verifiers/v1/cli/gepa.py +0 -0
- {verifiers-0.3.1.dev25 → verifiers-0.3.1.dev32}/verifiers/v1/cli/init.py +0 -0
- {verifiers-0.3.1.dev25 → verifiers-0.3.1.dev32}/verifiers/v1/cli/output.py +0 -0
- {verifiers-0.3.1.dev25 → verifiers-0.3.1.dev32}/verifiers/v1/cli/replay.py +0 -0
- {verifiers-0.3.1.dev25 → verifiers-0.3.1.dev32}/verifiers/v1/cli/resolve.py +0 -0
- {verifiers-0.3.1.dev25 → verifiers-0.3.1.dev32}/verifiers/v1/cli/resume.py +0 -0
- {verifiers-0.3.1.dev25 → verifiers-0.3.1.dev32}/verifiers/v1/cli/validate.py +0 -0
- {verifiers-0.3.1.dev25 → verifiers-0.3.1.dev32}/verifiers/v1/clients/__init__.py +0 -0
- {verifiers-0.3.1.dev25 → verifiers-0.3.1.dev32}/verifiers/v1/clients/base.py +0 -0
- {verifiers-0.3.1.dev25 → verifiers-0.3.1.dev32}/verifiers/v1/clients/client.py +0 -0
- {verifiers-0.3.1.dev25 → verifiers-0.3.1.dev32}/verifiers/v1/clients/eval.py +0 -0
- {verifiers-0.3.1.dev25 → verifiers-0.3.1.dev32}/verifiers/v1/configs/__init__.py +0 -0
- {verifiers-0.3.1.dev25 → verifiers-0.3.1.dev32}/verifiers/v1/configs/cli/__init__.py +0 -0
- {verifiers-0.3.1.dev25 → verifiers-0.3.1.dev32}/verifiers/v1/configs/cli/env.py +0 -0
- {verifiers-0.3.1.dev25 → verifiers-0.3.1.dev32}/verifiers/v1/configs/cli/eval.py +0 -0
- {verifiers-0.3.1.dev25 → verifiers-0.3.1.dev32}/verifiers/v1/configs/cli/init.py +0 -0
- {verifiers-0.3.1.dev25 → verifiers-0.3.1.dev32}/verifiers/v1/configs/cli/replay.py +0 -0
- {verifiers-0.3.1.dev25 → verifiers-0.3.1.dev32}/verifiers/v1/configs/env.py +0 -0
- {verifiers-0.3.1.dev25 → verifiers-0.3.1.dev32}/verifiers/v1/configs/harness.py +0 -0
- {verifiers-0.3.1.dev25 → verifiers-0.3.1.dev32}/verifiers/v1/configs/judge.py +0 -0
- {verifiers-0.3.1.dev25 → verifiers-0.3.1.dev32}/verifiers/v1/configs/retries.py +0 -0
- {verifiers-0.3.1.dev25 → verifiers-0.3.1.dev32}/verifiers/v1/configs/runtime.py +0 -0
- {verifiers-0.3.1.dev25 → verifiers-0.3.1.dev32}/verifiers/v1/configs/serve.py +0 -0
- {verifiers-0.3.1.dev25 → verifiers-0.3.1.dev32}/verifiers/v1/configs/taskset.py +0 -0
- {verifiers-0.3.1.dev25 → verifiers-0.3.1.dev32}/verifiers/v1/dialects/__init__.py +0 -0
- {verifiers-0.3.1.dev25 → verifiers-0.3.1.dev32}/verifiers/v1/env.py +0 -0
- {verifiers-0.3.1.dev25 → verifiers-0.3.1.dev32}/verifiers/v1/envs/__init__.py +0 -0
- {verifiers-0.3.1.dev25 → verifiers-0.3.1.dev32}/verifiers/v1/envs/agentic_judge/__init__.py +0 -0
- {verifiers-0.3.1.dev25 → verifiers-0.3.1.dev32}/verifiers/v1/envs/agentic_judge/env.py +0 -0
- {verifiers-0.3.1.dev25 → verifiers-0.3.1.dev32}/verifiers/v1/envs/best_of_n/__init__.py +0 -0
- {verifiers-0.3.1.dev25 → verifiers-0.3.1.dev32}/verifiers/v1/envs/best_of_n/env.py +0 -0
- {verifiers-0.3.1.dev25 → verifiers-0.3.1.dev32}/verifiers/v1/envs/shared_agentic_judge/__init__.py +0 -0
- {verifiers-0.3.1.dev25 → verifiers-0.3.1.dev32}/verifiers/v1/envs/single_agent/__init__.py +0 -0
- {verifiers-0.3.1.dev25 → verifiers-0.3.1.dev32}/verifiers/v1/envs/single_agent/env.py +0 -0
- {verifiers-0.3.1.dev25 → verifiers-0.3.1.dev32}/verifiers/v1/envs/user_sim/__init__.py +0 -0
- {verifiers-0.3.1.dev25 → verifiers-0.3.1.dev32}/verifiers/v1/envs/user_sim/env.py +0 -0
- {verifiers-0.3.1.dev25 → verifiers-0.3.1.dev32}/verifiers/v1/episode.py +0 -0
- {verifiers-0.3.1.dev25 → verifiers-0.3.1.dev32}/verifiers/v1/errors.py +0 -0
- {verifiers-0.3.1.dev25 → verifiers-0.3.1.dev32}/verifiers/v1/gepa/__init__.py +0 -0
- {verifiers-0.3.1.dev25 → verifiers-0.3.1.dev32}/verifiers/v1/gepa/adapter.py +0 -0
- {verifiers-0.3.1.dev25 → verifiers-0.3.1.dev32}/verifiers/v1/gepa/config.py +0 -0
- {verifiers-0.3.1.dev25 → verifiers-0.3.1.dev32}/verifiers/v1/gepa/dataset.py +0 -0
- {verifiers-0.3.1.dev25 → verifiers-0.3.1.dev32}/verifiers/v1/gepa/reflection.py +0 -0
- {verifiers-0.3.1.dev25 → verifiers-0.3.1.dev32}/verifiers/v1/gepa/runner.py +0 -0
- {verifiers-0.3.1.dev25 → verifiers-0.3.1.dev32}/verifiers/v1/harnesses/__init__.py +0 -0
- {verifiers-0.3.1.dev25 → verifiers-0.3.1.dev32}/verifiers/v1/harnesses/bash/__init__.py +0 -0
- {verifiers-0.3.1.dev25 → verifiers-0.3.1.dev32}/verifiers/v1/harnesses/browser_use/__init__.py +0 -0
- {verifiers-0.3.1.dev25 → verifiers-0.3.1.dev32}/verifiers/v1/harnesses/browser_use/harness.py +0 -0
- {verifiers-0.3.1.dev25 → verifiers-0.3.1.dev32}/verifiers/v1/harnesses/browser_use/program.py +0 -0
- {verifiers-0.3.1.dev25 → verifiers-0.3.1.dev32}/verifiers/v1/harnesses/claude_code/__init__.py +0 -0
- {verifiers-0.3.1.dev25 → verifiers-0.3.1.dev32}/verifiers/v1/harnesses/claude_code/harness.py +0 -0
- {verifiers-0.3.1.dev25 → verifiers-0.3.1.dev32}/verifiers/v1/harnesses/codex/__init__.py +0 -0
- {verifiers-0.3.1.dev25 → verifiers-0.3.1.dev32}/verifiers/v1/harnesses/codex/harness.py +0 -0
- {verifiers-0.3.1.dev25 → verifiers-0.3.1.dev32}/verifiers/v1/harnesses/hermes_agent/__init__.py +0 -0
- {verifiers-0.3.1.dev25 → verifiers-0.3.1.dev32}/verifiers/v1/harnesses/hermes_agent/harness.py +0 -0
- {verifiers-0.3.1.dev25 → verifiers-0.3.1.dev32}/verifiers/v1/harnesses/hermes_agent/program.py +0 -0
- {verifiers-0.3.1.dev25 → verifiers-0.3.1.dev32}/verifiers/v1/harnesses/kimi_code/__init__.py +0 -0
- {verifiers-0.3.1.dev25 → verifiers-0.3.1.dev32}/verifiers/v1/harnesses/kimi_code/harness.py +0 -0
- {verifiers-0.3.1.dev25 → verifiers-0.3.1.dev32}/verifiers/v1/harnesses/mini_swe_agent/__init__.py +0 -0
- {verifiers-0.3.1.dev25 → verifiers-0.3.1.dev32}/verifiers/v1/harnesses/mini_swe_agent/harness.py +0 -0
- {verifiers-0.3.1.dev25 → verifiers-0.3.1.dev32}/verifiers/v1/harnesses/mini_swe_agent/program.py +0 -0
- {verifiers-0.3.1.dev25 → verifiers-0.3.1.dev32}/verifiers/v1/harnesses/node.py +0 -0
- {verifiers-0.3.1.dev25 → verifiers-0.3.1.dev32}/verifiers/v1/harnesses/null/__init__.py +0 -0
- {verifiers-0.3.1.dev25 → verifiers-0.3.1.dev32}/verifiers/v1/harnesses/null/harness.py +0 -0
- {verifiers-0.3.1.dev25 → verifiers-0.3.1.dev32}/verifiers/v1/harnesses/null/program.py +0 -0
- {verifiers-0.3.1.dev25 → verifiers-0.3.1.dev32}/verifiers/v1/harnesses/openclaw/__init__.py +0 -0
- {verifiers-0.3.1.dev25 → verifiers-0.3.1.dev32}/verifiers/v1/harnesses/openclaw/harness.py +0 -0
- {verifiers-0.3.1.dev25 → verifiers-0.3.1.dev32}/verifiers/v1/harnesses/pi/__init__.py +0 -0
- {verifiers-0.3.1.dev25 → verifiers-0.3.1.dev32}/verifiers/v1/harnesses/pi/harness.py +0 -0
- {verifiers-0.3.1.dev25 → verifiers-0.3.1.dev32}/verifiers/v1/harnesses/pool/__init__.py +0 -0
- {verifiers-0.3.1.dev25 → verifiers-0.3.1.dev32}/verifiers/v1/harnesses/pool/harness.py +0 -0
- {verifiers-0.3.1.dev25 → verifiers-0.3.1.dev32}/verifiers/v1/harnesses/rlm/__init__.py +0 -0
- {verifiers-0.3.1.dev25 → verifiers-0.3.1.dev32}/verifiers/v1/harnesses/rlm/harness.py +0 -0
- {verifiers-0.3.1.dev25 → verifiers-0.3.1.dev32}/verifiers/v1/harnesses/terminus_2/__init__.py +0 -0
- {verifiers-0.3.1.dev25 → verifiers-0.3.1.dev32}/verifiers/v1/harnesses/terminus_2/harness.py +0 -0
- {verifiers-0.3.1.dev25 → verifiers-0.3.1.dev32}/verifiers/v1/harnesses/terminus_2/program.py +0 -0
- {verifiers-0.3.1.dev25 → verifiers-0.3.1.dev32}/verifiers/v1/interception/__init__.py +0 -0
- {verifiers-0.3.1.dev25 → verifiers-0.3.1.dev32}/verifiers/v1/interception/base.py +0 -0
- {verifiers-0.3.1.dev25 → verifiers-0.3.1.dev32}/verifiers/v1/interception/pool.py +0 -0
- {verifiers-0.3.1.dev25 → verifiers-0.3.1.dev32}/verifiers/v1/interception/tunnel/__init__.py +0 -0
- {verifiers-0.3.1.dev25 → verifiers-0.3.1.dev32}/verifiers/v1/interception/tunnel/base.py +0 -0
- {verifiers-0.3.1.dev25 → verifiers-0.3.1.dev32}/verifiers/v1/interception/tunnel/custom.py +0 -0
- {verifiers-0.3.1.dev25 → verifiers-0.3.1.dev32}/verifiers/v1/judge.py +0 -0
- {verifiers-0.3.1.dev25 → verifiers-0.3.1.dev32}/verifiers/v1/judges/__init__.py +0 -0
- {verifiers-0.3.1.dev25 → verifiers-0.3.1.dev32}/verifiers/v1/judges/reference.py +0 -0
- {verifiers-0.3.1.dev25 → verifiers-0.3.1.dev32}/verifiers/v1/judges/reference.txt +0 -0
- {verifiers-0.3.1.dev25 → verifiers-0.3.1.dev32}/verifiers/v1/judges/rubric.py +0 -0
- {verifiers-0.3.1.dev25 → verifiers-0.3.1.dev32}/verifiers/v1/judges/rubric.txt +0 -0
- {verifiers-0.3.1.dev25 → verifiers-0.3.1.dev32}/verifiers/v1/mcp/__init__.py +0 -0
- {verifiers-0.3.1.dev25 → verifiers-0.3.1.dev32}/verifiers/v1/mcp/launch.py +0 -0
- {verifiers-0.3.1.dev25 → verifiers-0.3.1.dev32}/verifiers/v1/mcp/server.py +0 -0
- {verifiers-0.3.1.dev25 → verifiers-0.3.1.dev32}/verifiers/v1/mcp/toolset.py +0 -0
- {verifiers-0.3.1.dev25 → verifiers-0.3.1.dev32}/verifiers/v1/runtimes/__init__.py +0 -0
- {verifiers-0.3.1.dev25 → verifiers-0.3.1.dev32}/verifiers/v1/runtimes/base.py +0 -0
- {verifiers-0.3.1.dev25 → verifiers-0.3.1.dev32}/verifiers/v1/runtimes/docker/__init__.py +0 -0
- {verifiers-0.3.1.dev25 → verifiers-0.3.1.dev32}/verifiers/v1/runtimes/docker/egress.py +0 -0
- {verifiers-0.3.1.dev25 → verifiers-0.3.1.dev32}/verifiers/v1/runtimes/limiters.py +0 -0
- {verifiers-0.3.1.dev25 → verifiers-0.3.1.dev32}/verifiers/v1/runtimes/modal.py +0 -0
- {verifiers-0.3.1.dev25 → verifiers-0.3.1.dev32}/verifiers/v1/runtimes/subprocess.py +0 -0
- {verifiers-0.3.1.dev25 → verifiers-0.3.1.dev32}/verifiers/v1/serve/__init__.py +0 -0
- {verifiers-0.3.1.dev25 → verifiers-0.3.1.dev32}/verifiers/v1/serve/client.py +0 -0
- {verifiers-0.3.1.dev25 → verifiers-0.3.1.dev32}/verifiers/v1/serve/encoding.py +0 -0
- {verifiers-0.3.1.dev25 → verifiers-0.3.1.dev32}/verifiers/v1/serve/pool.py +0 -0
- {verifiers-0.3.1.dev25 → verifiers-0.3.1.dev32}/verifiers/v1/serve/server.py +0 -0
- {verifiers-0.3.1.dev25 → verifiers-0.3.1.dev32}/verifiers/v1/serve/types.py +0 -0
- {verifiers-0.3.1.dev25 → verifiers-0.3.1.dev32}/verifiers/v1/state.py +0 -0
- {verifiers-0.3.1.dev25 → verifiers-0.3.1.dev32}/verifiers/v1/task.py +0 -0
- {verifiers-0.3.1.dev25 → verifiers-0.3.1.dev32}/verifiers/v1/taskset.py +0 -0
- {verifiers-0.3.1.dev25 → verifiers-0.3.1.dev32}/verifiers/v1/tasksets/__init__.py +0 -0
- {verifiers-0.3.1.dev25 → verifiers-0.3.1.dev32}/verifiers/v1/tasksets/harbor/__init__.py +0 -0
- {verifiers-0.3.1.dev25 → verifiers-0.3.1.dev32}/verifiers/v1/tasksets/harbor/env.py +0 -0
- {verifiers-0.3.1.dev25 → verifiers-0.3.1.dev32}/verifiers/v1/tasksets/harbor/taskset.py +0 -0
- {verifiers-0.3.1.dev25 → verifiers-0.3.1.dev32}/verifiers/v1/tasksets/lean/__init__.py +0 -0
- {verifiers-0.3.1.dev25 → verifiers-0.3.1.dev32}/verifiers/v1/tasksets/lean/scoring.py +0 -0
- {verifiers-0.3.1.dev25 → verifiers-0.3.1.dev32}/verifiers/v1/tasksets/lean/taskset.py +0 -0
- {verifiers-0.3.1.dev25 → verifiers-0.3.1.dev32}/verifiers/v1/tasksets/nemo_gym/__init__.py +0 -0
- {verifiers-0.3.1.dev25 → verifiers-0.3.1.dev32}/verifiers/v1/tasksets/nemo_gym/response.py +0 -0
- {verifiers-0.3.1.dev25 → verifiers-0.3.1.dev32}/verifiers/v1/tasksets/nemo_gym/server.py +0 -0
- {verifiers-0.3.1.dev25 → verifiers-0.3.1.dev32}/verifiers/v1/tasksets/nemo_gym/toolset.py +0 -0
- {verifiers-0.3.1.dev25 → verifiers-0.3.1.dev32}/verifiers/v1/tasksets/openenv/__init__.py +0 -0
- {verifiers-0.3.1.dev25 → verifiers-0.3.1.dev32}/verifiers/v1/tasksets/openenv/taskset.py +0 -0
- {verifiers-0.3.1.dev25 → verifiers-0.3.1.dev32}/verifiers/v1/tasksets/textarena/__init__.py +0 -0
- {verifiers-0.3.1.dev25 → verifiers-0.3.1.dev32}/verifiers/v1/tasksets/textarena/taskset.py +0 -0
- {verifiers-0.3.1.dev25 → verifiers-0.3.1.dev32}/verifiers/v1/utils/__init__.py +0 -0
- {verifiers-0.3.1.dev25 → verifiers-0.3.1.dev32}/verifiers/v1/utils/aio.py +0 -0
- {verifiers-0.3.1.dev25 → verifiers-0.3.1.dev32}/verifiers/v1/utils/artifacts.py +0 -0
- {verifiers-0.3.1.dev25 → verifiers-0.3.1.dev32}/verifiers/v1/utils/compile.py +0 -0
- {verifiers-0.3.1.dev25 → verifiers-0.3.1.dev32}/verifiers/v1/utils/format.py +0 -0
- {verifiers-0.3.1.dev25 → verifiers-0.3.1.dev32}/verifiers/v1/utils/generic.py +0 -0
- {verifiers-0.3.1.dev25 → verifiers-0.3.1.dev32}/verifiers/v1/utils/git.py +0 -0
- {verifiers-0.3.1.dev25 → verifiers-0.3.1.dev32}/verifiers/v1/utils/image.py +0 -0
- {verifiers-0.3.1.dev25 → verifiers-0.3.1.dev32}/verifiers/v1/utils/install.py +0 -0
- {verifiers-0.3.1.dev25 → verifiers-0.3.1.dev32}/verifiers/v1/utils/install_utils.py +0 -0
- {verifiers-0.3.1.dev25 → verifiers-0.3.1.dev32}/verifiers/v1/utils/interrupt.py +0 -0
- {verifiers-0.3.1.dev25 → verifiers-0.3.1.dev32}/verifiers/v1/utils/loaders.py +0 -0
- {verifiers-0.3.1.dev25 → verifiers-0.3.1.dev32}/verifiers/v1/utils/logging.py +0 -0
- {verifiers-0.3.1.dev25 → verifiers-0.3.1.dev32}/verifiers/v1/utils/memory.py +0 -0
- {verifiers-0.3.1.dev25 → verifiers-0.3.1.dev32}/verifiers/v1/utils/paths.py +0 -0
- {verifiers-0.3.1.dev25 → verifiers-0.3.1.dev32}/verifiers/v1/utils/retries.py +0 -0
- {verifiers-0.3.1.dev25 → verifiers-0.3.1.dev32}/verifiers/v1/utils/score.py +0 -0
- {verifiers-0.3.1.dev25 → verifiers-0.3.1.dev32}/verifiers/v1/utils/version.py +0 -0
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
Metadata-Version: 2.4
|
|
2
2
|
Name: verifiers
|
|
3
|
-
Version: 0.3.1.
|
|
3
|
+
Version: 0.3.1.dev32
|
|
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
|
|
@@ -76,10 +76,23 @@ dev = [
|
|
|
76
76
|
# from this repo. The built-in tasksets/harnesses ship inside verifiers (verifiers/v1/...).
|
|
77
77
|
examples = [
|
|
78
78
|
"compact",
|
|
79
|
-
"gsm8k",
|
|
80
|
-
"
|
|
81
|
-
"
|
|
79
|
+
"gsm8k",
|
|
80
|
+
"glossary",
|
|
81
|
+
"deepwiki",
|
|
82
|
+
"wiki-search",
|
|
83
|
+
"code-golf",
|
|
84
|
+
"proposer-solver",
|
|
85
|
+
"reverse-text",
|
|
86
|
+
"color-codeword",
|
|
87
|
+
"wordle",
|
|
88
|
+
"openenv-wordle",
|
|
89
|
+
"alphabet-sort",
|
|
90
|
+
"scratchpad",
|
|
82
91
|
"kuhn-poker",
|
|
92
|
+
"interception",
|
|
93
|
+
"grayscale-interception",
|
|
94
|
+
"bash-interception",
|
|
95
|
+
"web-search-interception",
|
|
83
96
|
]
|
|
84
97
|
|
|
85
98
|
[project.optional-dependencies]
|
|
@@ -164,6 +177,10 @@ color-codeword = { path = "environments/color_codeword", editable = true }
|
|
|
164
177
|
alphabet-sort = { path = "environments/alphabet_sort", editable = true }
|
|
165
178
|
scratchpad = { path = "environments/scratchpad", editable = true }
|
|
166
179
|
kuhn-poker = { path = "environments/kuhn_poker", editable = true }
|
|
180
|
+
interception = { path = "environments/interception", editable = true }
|
|
181
|
+
grayscale-interception = { path = "environments/grayscale_interception", editable = true }
|
|
182
|
+
bash-interception = { path = "environments/bash_interception", editable = true }
|
|
183
|
+
web-search-interception = { path = "environments/web_search_interception", editable = true }
|
|
167
184
|
|
|
168
185
|
[tool.uv.exclude-newer-package]
|
|
169
186
|
# Bounded cutoffs for the explicitly requested tool upgrades.
|
|
@@ -5,6 +5,9 @@ from verifiers.v1.graph import MessageNode
|
|
|
5
5
|
from verifiers.v1.types import AssistantMessage, UserMessage
|
|
6
6
|
|
|
7
7
|
PLUGGED_FNS_PY = """
|
|
8
|
+
from verifiers.v1 import Trace
|
|
9
|
+
|
|
10
|
+
|
|
8
11
|
async def reply_length(trace) -> float:
|
|
9
12
|
return float(len(trace.last_reply or ""))
|
|
10
13
|
|
|
@@ -17,7 +20,7 @@ async def marker(trace) -> float:
|
|
|
17
20
|
return 0.125
|
|
18
21
|
|
|
19
22
|
|
|
20
|
-
async def two_turns(trace) -> bool:
|
|
23
|
+
async def two_turns(trace: Trace) -> bool:
|
|
21
24
|
return trace.num_turns >= 2
|
|
22
25
|
"""
|
|
23
26
|
|
|
@@ -80,6 +80,7 @@ from verifiers.v1.trace import (
|
|
|
80
80
|
Branch,
|
|
81
81
|
Error,
|
|
82
82
|
EvalRunInfo,
|
|
83
|
+
InterceptRecord,
|
|
83
84
|
ModelCall,
|
|
84
85
|
PolicyEvent,
|
|
85
86
|
Reward,
|
|
@@ -103,6 +104,7 @@ from verifiers.v1.types import (
|
|
|
103
104
|
Message,
|
|
104
105
|
MessageContent,
|
|
105
106
|
Messages,
|
|
107
|
+
Request,
|
|
106
108
|
Response,
|
|
107
109
|
Sampling,
|
|
108
110
|
SamplingConfig,
|
|
@@ -121,7 +123,13 @@ from verifiers.v1.utils.artifacts import (
|
|
|
121
123
|
collect,
|
|
122
124
|
restore,
|
|
123
125
|
)
|
|
124
|
-
from verifiers.v1.utils.decorators import
|
|
126
|
+
from verifiers.v1.utils.decorators import (
|
|
127
|
+
intercept,
|
|
128
|
+
metric,
|
|
129
|
+
reward,
|
|
130
|
+
stop,
|
|
131
|
+
tool,
|
|
132
|
+
)
|
|
125
133
|
from verifiers.v1.utils.git import (
|
|
126
134
|
PATCH_CAP_BYTES as PATCH_CAP_BYTES,
|
|
127
135
|
)
|
|
@@ -178,6 +186,7 @@ __all__ = [ # noqa: RUF022 - grouped by public API area
|
|
|
178
186
|
"Message",
|
|
179
187
|
"MessageContent",
|
|
180
188
|
"Messages",
|
|
189
|
+
"Request",
|
|
181
190
|
"Response",
|
|
182
191
|
"Sampling",
|
|
183
192
|
"SamplingConfig",
|
|
@@ -220,10 +229,13 @@ __all__ = [ # noqa: RUF022 - grouped by public API area
|
|
|
220
229
|
"AgentSpan",
|
|
221
230
|
"Error",
|
|
222
231
|
# decorators
|
|
232
|
+
"intercept",
|
|
223
233
|
"stop",
|
|
224
234
|
"tool",
|
|
225
235
|
"metric",
|
|
226
236
|
"reward",
|
|
237
|
+
# interception
|
|
238
|
+
"InterceptRecord",
|
|
227
239
|
# errors
|
|
228
240
|
"RolloutError",
|
|
229
241
|
"EnvError",
|
|
@@ -465,15 +465,11 @@ class Agent:
|
|
|
465
465
|
interaction = Interaction(run, gate=self._gate)
|
|
466
466
|
async with self._gate or nullcontext():
|
|
467
467
|
opened = await run.open()
|
|
468
|
-
if not opened:
|
|
468
|
+
if not opened and (failure := run.failure) is not None:
|
|
469
469
|
trace = await run.close()
|
|
470
470
|
if trace.agent.runtime is not None:
|
|
471
471
|
trace.agent.runtime.borrowed = runtime is not None
|
|
472
|
-
|
|
473
|
-
failure = run.failure
|
|
474
|
-
if failure is None: # `open()` returning False always captures one.
|
|
475
|
-
raise RuntimeError("rollout setup failed without a captured error")
|
|
476
|
-
raise failure
|
|
472
|
+
raise failure
|
|
477
473
|
try:
|
|
478
474
|
yield interaction
|
|
479
475
|
except Exception as e:
|
|
@@ -342,7 +342,9 @@ class TrainClient(Client):
|
|
|
342
342
|
prompt = turn.prompt
|
|
343
343
|
tools = parse_tools(body.get("tools"))
|
|
344
344
|
else:
|
|
345
|
-
|
|
345
|
+
request = dialect.parse_request(body)
|
|
346
|
+
prompt = request.messages
|
|
347
|
+
tools = request.tools
|
|
346
348
|
from renderers.client import generate
|
|
347
349
|
|
|
348
350
|
wire_tools = [tool_to_wire(t) for t in tools] if tools else None
|
|
@@ -6,7 +6,7 @@ from pydantic_config import BaseConfig
|
|
|
6
6
|
from verifiers.v1.clients import ClientConfig
|
|
7
7
|
from verifiers.v1.configs.harness import HarnessConfig, WireHarnessConfig
|
|
8
8
|
from verifiers.v1.configs.retries import RetryConfig
|
|
9
|
-
from verifiers.v1.runtimes import
|
|
9
|
+
from verifiers.v1.runtimes import PrimeConfig, RuntimeConfig
|
|
10
10
|
from verifiers.v1.types import SamplingConfig
|
|
11
11
|
|
|
12
12
|
|
|
@@ -26,7 +26,7 @@ class TimeoutConfig(BaseConfig):
|
|
|
26
26
|
class AgentConfig(BaseConfig):
|
|
27
27
|
harness: SerializeAsAny[HarnessConfig] | None = None
|
|
28
28
|
"""The agent's program (None = the taskset's default harness)."""
|
|
29
|
-
runtime: RuntimeConfig =
|
|
29
|
+
runtime: RuntimeConfig = PrimeConfig()
|
|
30
30
|
"""Runtime for the harness program — the policy each run provisions its box
|
|
31
31
|
from; tool servers choose their placement separately."""
|
|
32
32
|
|
|
@@ -8,14 +8,14 @@ from pydantic_config import BaseConfig
|
|
|
8
8
|
|
|
9
9
|
from verifiers.v1.configs.cli.validate import CheckTimeoutConfig
|
|
10
10
|
from verifiers.v1.configs.taskset import TasksetConfig
|
|
11
|
-
from verifiers.v1.runtimes import
|
|
11
|
+
from verifiers.v1.runtimes import PrimeConfig, RuntimeConfig
|
|
12
12
|
|
|
13
13
|
|
|
14
14
|
class DebugConfig(BaseConfig):
|
|
15
15
|
uuid: str = Field(default_factory=lambda: str(uuid4()), exclude=True)
|
|
16
16
|
"""Auto-generated run id, used as the default output directory leaf."""
|
|
17
17
|
taskset: SerializeAsAny[TasksetConfig] = TasksetConfig()
|
|
18
|
-
runtime: RuntimeConfig =
|
|
18
|
+
runtime: RuntimeConfig = PrimeConfig()
|
|
19
19
|
"""Where each task's setup hook and debug action run."""
|
|
20
20
|
command: str | None = None
|
|
21
21
|
"""Inline shell command executed as `sh -lc <command>` after setup."""
|
|
@@ -7,7 +7,7 @@ from pydantic import AliasChoices, Field, SerializeAsAny, model_validator
|
|
|
7
7
|
from pydantic_config import BaseConfig
|
|
8
8
|
|
|
9
9
|
from verifiers.v1.configs.taskset import TasksetConfig
|
|
10
|
-
from verifiers.v1.runtimes import
|
|
10
|
+
from verifiers.v1.runtimes import PrimeConfig, RuntimeConfig
|
|
11
11
|
|
|
12
12
|
|
|
13
13
|
class CheckTimeoutConfig(BaseConfig):
|
|
@@ -23,7 +23,7 @@ class ValidateConfig(BaseConfig):
|
|
|
23
23
|
"""Auto-generated run id — the default output directory leaf. Excluded from the
|
|
24
24
|
saved config so re-running it starts a fresh run."""
|
|
25
25
|
taskset: SerializeAsAny[TasksetConfig] = TasksetConfig()
|
|
26
|
-
runtime: RuntimeConfig =
|
|
26
|
+
runtime: RuntimeConfig = PrimeConfig()
|
|
27
27
|
"""Where each task's validation hooks run."""
|
|
28
28
|
timeout: CheckTimeoutConfig = CheckTimeoutConfig()
|
|
29
29
|
only_setup: bool = False
|
|
@@ -18,7 +18,7 @@ from pydantic import Field, model_validator
|
|
|
18
18
|
from pydantic_config import BaseConfig
|
|
19
19
|
from renderers import RendererConfig
|
|
20
20
|
|
|
21
|
-
from verifiers.v1.utils.
|
|
21
|
+
from verifiers.v1.utils.prime import load_prime_config
|
|
22
22
|
|
|
23
23
|
DEFAULT_PRIME_INFERENCE_URL = "https://api.pinference.ai/api/v1"
|
|
24
24
|
|
|
@@ -40,9 +40,9 @@ class TaskConfig(BaseConfig):
|
|
|
40
40
|
"""Judge plugins run after task rewards, set through `--env.taskset.task.judges`."""
|
|
41
41
|
|
|
42
42
|
stops: dict[str, DecoratedFunctionConfig] = Field(default_factory=dict)
|
|
43
|
-
"""
|
|
44
|
-
`@vf.stop` methods (a plugged function replaces a
|
|
45
|
-
name)."""
|
|
43
|
+
"""Typed `Request`, `Response`, or `Trace` stop predicates plugged by name and
|
|
44
|
+
merged with the task's `@vf.stop` methods (a plugged function replaces a
|
|
45
|
+
decorated one with the same name)."""
|
|
46
46
|
metrics: dict[str, DecoratedFunctionConfig] = Field(default_factory=dict)
|
|
47
47
|
"""Metrics `(task, trace, runtime) -> float` plugged by name, merged with the
|
|
48
48
|
task's `@vf.metric` methods."""
|
|
@@ -30,6 +30,7 @@ from verifiers.v1.types import (
|
|
|
30
30
|
ImageUrlContentPart,
|
|
31
31
|
ImageUrlSource,
|
|
32
32
|
Messages,
|
|
33
|
+
Request,
|
|
33
34
|
Response,
|
|
34
35
|
Sampling,
|
|
35
36
|
SamplingConfig,
|
|
@@ -198,6 +199,37 @@ def mediate_content(value, path: str):
|
|
|
198
199
|
return mediated, capabilities
|
|
199
200
|
|
|
200
201
|
|
|
202
|
+
def content_to_wire(content) -> str | list[dict]:
|
|
203
|
+
"""Typed text/image content in Anthropic's native request shape."""
|
|
204
|
+
if isinstance(content, str):
|
|
205
|
+
return content
|
|
206
|
+
blocks = []
|
|
207
|
+
for part in content:
|
|
208
|
+
if isinstance(part, TextContentPart):
|
|
209
|
+
blocks.append({"type": "text", "text": part.text})
|
|
210
|
+
continue
|
|
211
|
+
metadata, separator, data = part.image_url.url.partition(",")
|
|
212
|
+
if separator and metadata.startswith("data:") and metadata.endswith(";base64"):
|
|
213
|
+
blocks.append(
|
|
214
|
+
{
|
|
215
|
+
"type": "image",
|
|
216
|
+
"source": {
|
|
217
|
+
"type": "base64",
|
|
218
|
+
"media_type": metadata[5:-7],
|
|
219
|
+
"data": data,
|
|
220
|
+
},
|
|
221
|
+
}
|
|
222
|
+
)
|
|
223
|
+
else:
|
|
224
|
+
blocks.append(
|
|
225
|
+
{
|
|
226
|
+
"type": "image",
|
|
227
|
+
"source": {"type": "url", "url": part.image_url.url},
|
|
228
|
+
}
|
|
229
|
+
)
|
|
230
|
+
return blocks
|
|
231
|
+
|
|
232
|
+
|
|
201
233
|
def parse_messages(body: dict) -> Messages:
|
|
202
234
|
"""The request's top-level `system` + `messages` -> typed messages. Assistant turns fold
|
|
203
235
|
their blocks into one message (thinking -> reasoning, tool_use -> tool calls); a user turn's
|
|
@@ -380,7 +412,9 @@ class AnthropicStreamParser(StreamParser):
|
|
|
380
412
|
for index, parts in self.partial_json.items():
|
|
381
413
|
self.blocks[index]["input"] = json.loads("".join(parts) or "{}")
|
|
382
414
|
self.message["content"] = [self.blocks[index] for index in sorted(self.blocks)]
|
|
383
|
-
|
|
415
|
+
response = response_from_wire(self.validate_response(self.message))
|
|
416
|
+
response.raw = self.message
|
|
417
|
+
return response
|
|
384
418
|
|
|
385
419
|
|
|
386
420
|
class ModdedUsage(AnthropicUsage):
|
|
@@ -480,6 +514,12 @@ class AnthropicDialect(Dialect[MessageCreateParams, AnthropicMessage]):
|
|
|
480
514
|
append_user_notice(mediated.setdefault("messages", []))
|
|
481
515
|
return mediated, capabilities
|
|
482
516
|
|
|
517
|
+
def is_terminal_event(self, chunk: bytes) -> bool:
|
|
518
|
+
return any(
|
|
519
|
+
line.removeprefix(b"event:").strip() == b"message_stop"
|
|
520
|
+
for line in chunk.splitlines()
|
|
521
|
+
)
|
|
522
|
+
|
|
483
523
|
def auth_headers(self, api_key: str) -> dict[str, str]:
|
|
484
524
|
return {"x-api-key": api_key, "anthropic-version": "2023-06-01"}
|
|
485
525
|
|
|
@@ -493,9 +533,7 @@ class AnthropicDialect(Dialect[MessageCreateParams, AnthropicMessage]):
|
|
|
493
533
|
"error": {"type": "invalid_request_error", "message": message},
|
|
494
534
|
}
|
|
495
535
|
|
|
496
|
-
def parse_request(
|
|
497
|
-
self, body: MessageCreateParams
|
|
498
|
-
) -> tuple[Messages, list[Tool] | None]:
|
|
536
|
+
def parse_request(self, body: MessageCreateParams) -> Request:
|
|
499
537
|
tools = [
|
|
500
538
|
Tool(
|
|
501
539
|
name=t["name"],
|
|
@@ -505,11 +543,104 @@ class AnthropicDialect(Dialect[MessageCreateParams, AnthropicMessage]):
|
|
|
505
543
|
for t in body.get("tools") or []
|
|
506
544
|
if "input_schema" in t # skip server tools (web_search etc.)
|
|
507
545
|
] or None
|
|
508
|
-
return parse_messages(body), tools
|
|
546
|
+
return Request(messages=parse_messages(body), tools=tools)
|
|
509
547
|
|
|
510
548
|
def parse_response(self, response: AnthropicMessage) -> Response:
|
|
511
549
|
return response_from_wire(response)
|
|
512
550
|
|
|
551
|
+
def rewrite_request(self, body: dict, before: Request, after: Request) -> None:
|
|
552
|
+
original = [
|
|
553
|
+
m for m in before.messages if isinstance(m, (UserMessage, ToolMessage))
|
|
554
|
+
]
|
|
555
|
+
rewritten = [
|
|
556
|
+
m for m in after.messages if isinstance(m, (UserMessage, ToolMessage))
|
|
557
|
+
]
|
|
558
|
+
targets: list[tuple[dict, dict | None]] = []
|
|
559
|
+
for native in body.get("messages", []):
|
|
560
|
+
if native.get("role") == "assistant":
|
|
561
|
+
continue
|
|
562
|
+
content = native.get("content")
|
|
563
|
+
if isinstance(content, str):
|
|
564
|
+
targets.append((native, None))
|
|
565
|
+
continue
|
|
566
|
+
blocks = content or []
|
|
567
|
+
targets.extend(
|
|
568
|
+
(native, block)
|
|
569
|
+
for block in blocks
|
|
570
|
+
if block.get("type") == "tool_result"
|
|
571
|
+
)
|
|
572
|
+
if any(block.get("type") != "tool_result" for block in blocks):
|
|
573
|
+
targets.append((native, None))
|
|
574
|
+
|
|
575
|
+
for (native, block), old, new in zip(targets, original, rewritten, strict=True):
|
|
576
|
+
if old == new:
|
|
577
|
+
continue
|
|
578
|
+
if block is not None:
|
|
579
|
+
block["content"] = content_to_wire(new.content)
|
|
580
|
+
continue
|
|
581
|
+
replacement = content_to_wire(new.content)
|
|
582
|
+
if isinstance(native.get("content"), str):
|
|
583
|
+
native["content"] = replacement
|
|
584
|
+
continue
|
|
585
|
+
replacement = (
|
|
586
|
+
[{"type": "text", "text": replacement}]
|
|
587
|
+
if isinstance(replacement, str)
|
|
588
|
+
else replacement
|
|
589
|
+
)
|
|
590
|
+
blocks = native.get("content") or []
|
|
591
|
+
updated = []
|
|
592
|
+
inserted = False
|
|
593
|
+
for current in blocks:
|
|
594
|
+
if current.get("type") == "tool_result":
|
|
595
|
+
updated.append(current)
|
|
596
|
+
elif not inserted:
|
|
597
|
+
updated.extend(replacement)
|
|
598
|
+
inserted = True
|
|
599
|
+
native["content"] = updated
|
|
600
|
+
|
|
601
|
+
def rewrite_response(self, raw: dict, text: str) -> None:
|
|
602
|
+
raw["content"] = [{"type": "text", "text": text}]
|
|
603
|
+
raw["stop_reason"] = "end_turn"
|
|
604
|
+
raw["stop_sequence"] = None
|
|
605
|
+
|
|
606
|
+
def stream_events(self, raw: dict) -> list[bytes]:
|
|
607
|
+
def event(kind: str, payload: dict) -> bytes:
|
|
608
|
+
return f"event: {kind}\ndata: {json.dumps(payload)}\n\n".encode()
|
|
609
|
+
|
|
610
|
+
text = raw["content"][0]["text"]
|
|
611
|
+
head = {**raw, "content": [], "stop_reason": None, "stop_sequence": None}
|
|
612
|
+
if isinstance(usage := head.get("usage"), dict):
|
|
613
|
+
head["usage"] = {**usage, "output_tokens": 0}
|
|
614
|
+
return [
|
|
615
|
+
event("message_start", {"type": "message_start", "message": head}),
|
|
616
|
+
event(
|
|
617
|
+
"content_block_start",
|
|
618
|
+
{
|
|
619
|
+
"type": "content_block_start",
|
|
620
|
+
"index": 0,
|
|
621
|
+
"content_block": {"type": "text", "text": ""},
|
|
622
|
+
},
|
|
623
|
+
),
|
|
624
|
+
event(
|
|
625
|
+
"content_block_delta",
|
|
626
|
+
{
|
|
627
|
+
"type": "content_block_delta",
|
|
628
|
+
"index": 0,
|
|
629
|
+
"delta": {"type": "text_delta", "text": text},
|
|
630
|
+
},
|
|
631
|
+
),
|
|
632
|
+
event("content_block_stop", {"type": "content_block_stop", "index": 0}),
|
|
633
|
+
event(
|
|
634
|
+
"message_delta",
|
|
635
|
+
{
|
|
636
|
+
"type": "message_delta",
|
|
637
|
+
"delta": {"stop_reason": "end_turn", "stop_sequence": None},
|
|
638
|
+
"usage": raw.get("usage") or {},
|
|
639
|
+
},
|
|
640
|
+
),
|
|
641
|
+
event("message_stop", {"type": "message_stop"}),
|
|
642
|
+
]
|
|
643
|
+
|
|
513
644
|
def stream_parser(self) -> StreamParser:
|
|
514
645
|
return AnthropicStreamParser(self.validate_response)
|
|
515
646
|
|
|
@@ -20,7 +20,7 @@ from typing import ClassVar, Generic, TypeVar
|
|
|
20
20
|
from pydantic import BaseModel
|
|
21
21
|
from pydantic_core import from_json
|
|
22
22
|
|
|
23
|
-
from verifiers.v1.types import
|
|
23
|
+
from verifiers.v1.types import Request, Response, Sampling, SamplingConfig
|
|
24
24
|
|
|
25
25
|
ReqT = TypeVar("ReqT")
|
|
26
26
|
RespT = TypeVar("RespT", bound=BaseModel)
|
|
@@ -193,8 +193,8 @@ class Dialect(ABC, Generic[ReqT, RespT]):
|
|
|
193
193
|
content. Returned paths never contain request values."""
|
|
194
194
|
|
|
195
195
|
@abstractmethod
|
|
196
|
-
def parse_request(self, body: ReqT) ->
|
|
197
|
-
"""The native request ->
|
|
196
|
+
def parse_request(self, body: ReqT) -> Request:
|
|
197
|
+
"""The native request -> the typed model request."""
|
|
198
198
|
|
|
199
199
|
def parse_sampling(self, body: ReqT) -> Sampling:
|
|
200
200
|
"""The native request's call settings -> the canonical `Sampling` (for the
|
|
@@ -212,6 +212,18 @@ class Dialect(ABC, Generic[ReqT, RespT]):
|
|
|
212
212
|
"""Validate a native response, normalizing provider-compatible extensions if needed."""
|
|
213
213
|
return self.response_type.model_validate(raw)
|
|
214
214
|
|
|
215
|
+
@abstractmethod
|
|
216
|
+
def rewrite_request(self, body: ReqT, before: Request, after: Request) -> None:
|
|
217
|
+
"""Patch rewritten user/tool messages into the native conversation."""
|
|
218
|
+
|
|
219
|
+
@abstractmethod
|
|
220
|
+
def rewrite_response(self, raw: dict, text: str) -> None:
|
|
221
|
+
"""Replace the native assistant response with inert text."""
|
|
222
|
+
|
|
223
|
+
@abstractmethod
|
|
224
|
+
def stream_events(self, raw: dict) -> list[bytes]:
|
|
225
|
+
"""Serialize a rewritten response as a minimal native SSE stream."""
|
|
226
|
+
|
|
215
227
|
@abstractmethod
|
|
216
228
|
def stream_parser(self) -> StreamParser:
|
|
217
229
|
"""Create the per-request incremental parser for a native SSE response."""
|
|
@@ -6,6 +6,7 @@ and responses (`parse_response`). Reasoning extraction mirrors the v0 chat clien
|
|
|
6
6
|
read them in the same precedence (`reasoning` / `reasoning_content` / `reasoning_details`).
|
|
7
7
|
"""
|
|
8
8
|
|
|
9
|
+
import json
|
|
9
10
|
import time
|
|
10
11
|
from collections.abc import Mapping
|
|
11
12
|
from dataclasses import dataclass
|
|
@@ -28,6 +29,7 @@ from verifiers.v1.types import (
|
|
|
28
29
|
FinishReason,
|
|
29
30
|
Message,
|
|
30
31
|
Messages,
|
|
32
|
+
Request,
|
|
31
33
|
Response,
|
|
32
34
|
Sampling,
|
|
33
35
|
SamplingConfig,
|
|
@@ -319,7 +321,9 @@ class ChatStreamParser(StreamParser):
|
|
|
319
321
|
],
|
|
320
322
|
"usage": self.usage,
|
|
321
323
|
}
|
|
322
|
-
|
|
324
|
+
response = response_from_wire(ModdedChatCompletion.model_validate(completion))
|
|
325
|
+
response.raw = completion
|
|
326
|
+
return response
|
|
323
327
|
|
|
324
328
|
|
|
325
329
|
class ChatDialect(Dialect[CompletionCreateParams, ChatCompletion]):
|
|
@@ -473,9 +477,9 @@ class ChatDialect(Dialect[CompletionCreateParams, ChatCompletion]):
|
|
|
473
477
|
append_user_notice(mediated.setdefault("messages", []))
|
|
474
478
|
return mediated, capabilities
|
|
475
479
|
|
|
476
|
-
def parse_request(
|
|
477
|
-
|
|
478
|
-
|
|
480
|
+
def parse_request(self, body: CompletionCreateParams) -> Request:
|
|
481
|
+
if body.get("n", 1) != 1:
|
|
482
|
+
raise ValueError("chat completions require n=1")
|
|
479
483
|
messages: Messages = []
|
|
480
484
|
tool_names: dict[str, str] = {}
|
|
481
485
|
for raw in body.get("messages", []):
|
|
@@ -488,7 +492,7 @@ class ChatDialect(Dialect[CompletionCreateParams, ChatCompletion]):
|
|
|
488
492
|
if isinstance(message, AssistantMessage):
|
|
489
493
|
for call in message.tool_calls or []:
|
|
490
494
|
tool_names[call.id] = call.name
|
|
491
|
-
return messages, parse_tools(body.get("tools"))
|
|
495
|
+
return Request(messages=messages, tools=parse_tools(body.get("tools")))
|
|
492
496
|
|
|
493
497
|
def parse_sampling(self, body: CompletionCreateParams) -> Sampling:
|
|
494
498
|
settings = {k: v for k, v in body.items() if k in self.sampling_fields}
|
|
@@ -501,6 +505,41 @@ class ChatDialect(Dialect[CompletionCreateParams, ChatCompletion]):
|
|
|
501
505
|
def parse_response(self, response: ChatCompletion) -> Response:
|
|
502
506
|
return response_from_wire(response)
|
|
503
507
|
|
|
508
|
+
def rewrite_request(self, body: dict, before: Request, after: Request) -> None:
|
|
509
|
+
for native, original, rewritten in zip(
|
|
510
|
+
body.get("messages", []), before.messages, after.messages, strict=True
|
|
511
|
+
):
|
|
512
|
+
if rewritten != original:
|
|
513
|
+
native["content"] = message_to_wire(rewritten)["content"]
|
|
514
|
+
if isinstance(rewritten, ToolMessage):
|
|
515
|
+
if rewritten.name is None:
|
|
516
|
+
native.pop("name", None)
|
|
517
|
+
else:
|
|
518
|
+
native["name"] = rewritten.name
|
|
519
|
+
|
|
520
|
+
def rewrite_response(self, raw: dict, text: str) -> None:
|
|
521
|
+
for choice in raw.get("choices") or []:
|
|
522
|
+
if isinstance(choice.get("message"), dict):
|
|
523
|
+
choice["message"] = {"role": "assistant", "content": text}
|
|
524
|
+
choice["finish_reason"] = "stop"
|
|
525
|
+
choice.pop("logprobs", None)
|
|
526
|
+
|
|
527
|
+
def stream_events(self, raw: dict) -> list[bytes]:
|
|
528
|
+
choice = (raw.get("choices") or [{}])[0]
|
|
529
|
+
chunk = {
|
|
530
|
+
**{key: value for key, value in raw.items() if key != "choices"},
|
|
531
|
+
"object": "chat.completion.chunk",
|
|
532
|
+
"choices": [
|
|
533
|
+
{
|
|
534
|
+
"index": 0,
|
|
535
|
+
"delta": choice.get("message")
|
|
536
|
+
or {"role": "assistant", "content": ""},
|
|
537
|
+
"finish_reason": choice.get("finish_reason"),
|
|
538
|
+
}
|
|
539
|
+
],
|
|
540
|
+
}
|
|
541
|
+
return [f"data: {json.dumps(chunk)}\n\n".encode(), b"data: [DONE]\n\n"]
|
|
542
|
+
|
|
504
543
|
def stream_parser(self) -> StreamParser:
|
|
505
544
|
return ChatStreamParser()
|
|
506
545
|
|