verifiers 0.1.15.dev157__tar.gz → 0.1.15.dev158__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.dev157 → verifiers-0.1.15.dev158}/PKG-INFO +1 -1
- {verifiers-0.1.15.dev157 → verifiers-0.1.15.dev158}/tests/test_v1_runtime_lifecycle.py +107 -1
- {verifiers-0.1.15.dev157 → verifiers-0.1.15.dev158}/verifiers/v1/harness.py +5 -3
- {verifiers-0.1.15.dev157 → verifiers-0.1.15.dev158}/verifiers/v1/runtime.py +142 -68
- {verifiers-0.1.15.dev157 → verifiers-0.1.15.dev158}/.gitignore +0 -0
- {verifiers-0.1.15.dev157 → verifiers-0.1.15.dev158}/LICENSE +0 -0
- {verifiers-0.1.15.dev157 → verifiers-0.1.15.dev158}/README.md +0 -0
- {verifiers-0.1.15.dev157 → verifiers-0.1.15.dev158}/pyproject.toml +0 -0
- {verifiers-0.1.15.dev157 → verifiers-0.1.15.dev158}/tests/AGENTS.md +0 -0
- {verifiers-0.1.15.dev157 → verifiers-0.1.15.dev158}/tests/README.md +0 -0
- {verifiers-0.1.15.dev157 → verifiers-0.1.15.dev158}/tests/__init__.py +0 -0
- {verifiers-0.1.15.dev157 → verifiers-0.1.15.dev158}/tests/conftest.py +0 -0
- {verifiers-0.1.15.dev157 → verifiers-0.1.15.dev158}/tests/test_browser_env.py +0 -0
- {verifiers-0.1.15.dev157 → verifiers-0.1.15.dev158}/tests/test_build_script.py +0 -0
- {verifiers-0.1.15.dev157 → verifiers-0.1.15.dev158}/tests/test_cli_agent_env.py +0 -0
- {verifiers-0.1.15.dev157 → verifiers-0.1.15.dev158}/tests/test_client_auth_errors.py +0 -0
- {verifiers-0.1.15.dev157 → verifiers-0.1.15.dev158}/tests/test_client_config.py +0 -0
- {verifiers-0.1.15.dev157 → verifiers-0.1.15.dev158}/tests/test_client_multimodal_types.py +0 -0
- {verifiers-0.1.15.dev157 → verifiers-0.1.15.dev158}/tests/test_composable_env.py +0 -0
- {verifiers-0.1.15.dev157 → verifiers-0.1.15.dev158}/tests/test_context_token_metrics.py +0 -0
- {verifiers-0.1.15.dev157 → verifiers-0.1.15.dev158}/tests/test_decorator_ranks.py +0 -0
- {verifiers-0.1.15.dev157 → verifiers-0.1.15.dev158}/tests/test_endpoint_registry.py +0 -0
- {verifiers-0.1.15.dev157 → verifiers-0.1.15.dev158}/tests/test_env_group.py +0 -0
- {verifiers-0.1.15.dev157 → verifiers-0.1.15.dev158}/tests/test_env_server.py +0 -0
- {verifiers-0.1.15.dev157 → verifiers-0.1.15.dev158}/tests/test_environment.py +0 -0
- {verifiers-0.1.15.dev157 → verifiers-0.1.15.dev158}/tests/test_environment_extra.py +0 -0
- {verifiers-0.1.15.dev157 → verifiers-0.1.15.dev158}/tests/test_envs.py +0 -0
- {verifiers-0.1.15.dev157 → verifiers-0.1.15.dev158}/tests/test_error_chain.py +0 -0
- {verifiers-0.1.15.dev157 → verifiers-0.1.15.dev158}/tests/test_eval_cli.py +0 -0
- {verifiers-0.1.15.dev157 → verifiers-0.1.15.dev158}/tests/test_eval_display.py +0 -0
- {verifiers-0.1.15.dev157 → verifiers-0.1.15.dev158}/tests/test_eval_utils.py +0 -0
- {verifiers-0.1.15.dev157 → verifiers-0.1.15.dev158}/tests/test_gepa_cli.py +0 -0
- {verifiers-0.1.15.dev157 → verifiers-0.1.15.dev158}/tests/test_gepa_utils.py +0 -0
- {verifiers-0.1.15.dev157 → verifiers-0.1.15.dev158}/tests/test_gym_env.py +0 -0
- {verifiers-0.1.15.dev157 → verifiers-0.1.15.dev158}/tests/test_harbor_env_mcp.py +0 -0
- {verifiers-0.1.15.dev157 → verifiers-0.1.15.dev158}/tests/test_imports.py +0 -0
- {verifiers-0.1.15.dev157 → verifiers-0.1.15.dev158}/tests/test_init_script.py +0 -0
- {verifiers-0.1.15.dev157 → verifiers-0.1.15.dev158}/tests/test_install_utils.py +0 -0
- {verifiers-0.1.15.dev157 → verifiers-0.1.15.dev158}/tests/test_interception_utils.py +0 -0
- {verifiers-0.1.15.dev157 → verifiers-0.1.15.dev158}/tests/test_langchain_deep_agents_wikispeedia.py +0 -0
- {verifiers-0.1.15.dev157 → verifiers-0.1.15.dev158}/tests/test_lean_task.py +0 -0
- {verifiers-0.1.15.dev157 → verifiers-0.1.15.dev158}/tests/test_logging.py +0 -0
- {verifiers-0.1.15.dev157 → verifiers-0.1.15.dev158}/tests/test_math_rubric.py +0 -0
- {verifiers-0.1.15.dev157 → verifiers-0.1.15.dev158}/tests/test_maybe_think_parser.py +0 -0
- {verifiers-0.1.15.dev157 → verifiers-0.1.15.dev158}/tests/test_mcp_search_env.py +0 -0
- {verifiers-0.1.15.dev157 → verifiers-0.1.15.dev158}/tests/test_message_utils.py +0 -0
- {verifiers-0.1.15.dev157 → verifiers-0.1.15.dev158}/tests/test_message_utils_multimodal.py +0 -0
- {verifiers-0.1.15.dev157 → verifiers-0.1.15.dev158}/tests/test_multiturn_env.py +0 -0
- {verifiers-0.1.15.dev157 → verifiers-0.1.15.dev158}/tests/test_nemorl_client.py +0 -0
- {verifiers-0.1.15.dev157 → verifiers-0.1.15.dev158}/tests/test_openai_chat_completions_token_client.py +0 -0
- {verifiers-0.1.15.dev157 → verifiers-0.1.15.dev158}/tests/test_openai_responses_client.py +0 -0
- {verifiers-0.1.15.dev157 → verifiers-0.1.15.dev158}/tests/test_opencode_harbor.py +0 -0
- {verifiers-0.1.15.dev157 → verifiers-0.1.15.dev158}/tests/test_opencode_rlm_env.py +0 -0
- {verifiers-0.1.15.dev157 → verifiers-0.1.15.dev158}/tests/test_openenv_client.py +0 -0
- {verifiers-0.1.15.dev157 → verifiers-0.1.15.dev158}/tests/test_parser.py +0 -0
- {verifiers-0.1.15.dev157 → verifiers-0.1.15.dev158}/tests/test_path_utils.py +0 -0
- {verifiers-0.1.15.dev157 → verifiers-0.1.15.dev158}/tests/test_per_turn_timing.py +0 -0
- {verifiers-0.1.15.dev157 → verifiers-0.1.15.dev158}/tests/test_pricing_utils.py +0 -0
- {verifiers-0.1.15.dev157 → verifiers-0.1.15.dev158}/tests/test_prime_plugin.py +0 -0
- {verifiers-0.1.15.dev157 → verifiers-0.1.15.dev158}/tests/test_renderer_client.py +0 -0
- {verifiers-0.1.15.dev157 → verifiers-0.1.15.dev158}/tests/test_renderer_e2e.py +0 -0
- {verifiers-0.1.15.dev157 → verifiers-0.1.15.dev158}/tests/test_rlm_composable_env.py +0 -0
- {verifiers-0.1.15.dev157 → verifiers-0.1.15.dev158}/tests/test_rlm_env.py +0 -0
- {verifiers-0.1.15.dev157 → verifiers-0.1.15.dev158}/tests/test_rubric.py +0 -0
- {verifiers-0.1.15.dev157 → verifiers-0.1.15.dev158}/tests/test_rubric_group.py +0 -0
- {verifiers-0.1.15.dev157 → verifiers-0.1.15.dev158}/tests/test_sandbox_env.py +0 -0
- {verifiers-0.1.15.dev157 → verifiers-0.1.15.dev158}/tests/test_sandbox_mixin.py +0 -0
- {verifiers-0.1.15.dev157 → verifiers-0.1.15.dev158}/tests/test_save_utils.py +0 -0
- {verifiers-0.1.15.dev157 → verifiers-0.1.15.dev158}/tests/test_setup_script.py +0 -0
- {verifiers-0.1.15.dev157 → verifiers-0.1.15.dev158}/tests/test_singleturn_env.py +0 -0
- {verifiers-0.1.15.dev157 → verifiers-0.1.15.dev158}/tests/test_stateful_tool_env.py +0 -0
- {verifiers-0.1.15.dev157 → verifiers-0.1.15.dev158}/tests/test_think_parser.py +0 -0
- {verifiers-0.1.15.dev157 → verifiers-0.1.15.dev158}/tests/test_tool_env.py +0 -0
- {verifiers-0.1.15.dev157 → verifiers-0.1.15.dev158}/tests/test_tool_utils.py +0 -0
- {verifiers-0.1.15.dev157 → verifiers-0.1.15.dev158}/tests/test_trajectory_processing.py +0 -0
- {verifiers-0.1.15.dev157 → verifiers-0.1.15.dev158}/tests/test_tui_info_formatting.py +0 -0
- {verifiers-0.1.15.dev157 → verifiers-0.1.15.dev158}/tests/test_types.py +0 -0
- {verifiers-0.1.15.dev157 → verifiers-0.1.15.dev158}/tests/test_v1_bfcl.py +0 -0
- {verifiers-0.1.15.dev157 → verifiers-0.1.15.dev158}/tests/test_v1_config_extension.py +0 -0
- {verifiers-0.1.15.dev157 → verifiers-0.1.15.dev158}/tests/test_v1_empty_completions.py +0 -0
- {verifiers-0.1.15.dev157 → verifiers-0.1.15.dev158}/tests/test_v1_endpoint_protocols.py +0 -0
- {verifiers-0.1.15.dev157 → verifiers-0.1.15.dev158}/tests/test_v1_example_counts.py +0 -0
- {verifiers-0.1.15.dev157 → verifiers-0.1.15.dev158}/tests/test_v1_group_reward_env.py +0 -0
- {verifiers-0.1.15.dev157 → verifiers-0.1.15.dev158}/tests/test_v1_harbor_cli.py +0 -0
- {verifiers-0.1.15.dev157 → verifiers-0.1.15.dev158}/tests/test_v1_mini_swe_agent.py +0 -0
- {verifiers-0.1.15.dev157 → verifiers-0.1.15.dev158}/tests/test_v1_nemo_gym_harness.py +0 -0
- {verifiers-0.1.15.dev157 → verifiers-0.1.15.dev158}/tests/test_v1_openenv_taskset.py +0 -0
- {verifiers-0.1.15.dev157 → verifiers-0.1.15.dev158}/tests/test_v1_openreward_taskset.py +0 -0
- {verifiers-0.1.15.dev157 → verifiers-0.1.15.dev158}/tests/test_v1_rlm_swe.py +0 -0
- {verifiers-0.1.15.dev157 → verifiers-0.1.15.dev158}/tests/test_v1_scoring_functions.py +0 -0
- {verifiers-0.1.15.dev157 → verifiers-0.1.15.dev158}/tests/test_v1_taskset_bindings.py +0 -0
- {verifiers-0.1.15.dev157 → verifiers-0.1.15.dev158}/tests/test_v1_taskset_utils.py +0 -0
- {verifiers-0.1.15.dev157 → verifiers-0.1.15.dev158}/tests/test_v1_textarena_taskset.py +0 -0
- {verifiers-0.1.15.dev157 → verifiers-0.1.15.dev158}/tests/test_wiki_search_v1.py +0 -0
- {verifiers-0.1.15.dev157 → verifiers-0.1.15.dev158}/tests/test_wordle_env.py +0 -0
- {verifiers-0.1.15.dev157 → verifiers-0.1.15.dev158}/tests/test_wordle_v1_env.py +0 -0
- {verifiers-0.1.15.dev157 → verifiers-0.1.15.dev158}/tests/test_xml_parser.py +0 -0
- {verifiers-0.1.15.dev157 → verifiers-0.1.15.dev158}/verifiers/AGENTS.md +0 -0
- {verifiers-0.1.15.dev157 → verifiers-0.1.15.dev158}/verifiers/__init__.py +0 -0
- {verifiers-0.1.15.dev157 → verifiers-0.1.15.dev158}/verifiers/cli/__init__.py +0 -0
- {verifiers-0.1.15.dev157 → verifiers-0.1.15.dev158}/verifiers/cli/commands/__init__.py +0 -0
- {verifiers-0.1.15.dev157 → verifiers-0.1.15.dev158}/verifiers/cli/commands/build.py +0 -0
- {verifiers-0.1.15.dev157 → verifiers-0.1.15.dev158}/verifiers/cli/commands/eval.py +0 -0
- {verifiers-0.1.15.dev157 → verifiers-0.1.15.dev158}/verifiers/cli/commands/gepa.py +0 -0
- {verifiers-0.1.15.dev157 → verifiers-0.1.15.dev158}/verifiers/cli/commands/init.py +0 -0
- {verifiers-0.1.15.dev157 → verifiers-0.1.15.dev158}/verifiers/cli/commands/install.py +0 -0
- {verifiers-0.1.15.dev157 → verifiers-0.1.15.dev158}/verifiers/cli/commands/setup.py +0 -0
- {verifiers-0.1.15.dev157 → verifiers-0.1.15.dev158}/verifiers/cli/plugins/__init__.py +0 -0
- {verifiers-0.1.15.dev157 → verifiers-0.1.15.dev158}/verifiers/cli/plugins/prime.py +0 -0
- {verifiers-0.1.15.dev157 → verifiers-0.1.15.dev158}/verifiers/cli/tui.py +0 -0
- {verifiers-0.1.15.dev157 → verifiers-0.1.15.dev158}/verifiers/clients/__init__.py +0 -0
- {verifiers-0.1.15.dev157 → verifiers-0.1.15.dev158}/verifiers/clients/anthropic_messages_client.py +0 -0
- {verifiers-0.1.15.dev157 → verifiers-0.1.15.dev158}/verifiers/clients/client.py +0 -0
- {verifiers-0.1.15.dev157 → verifiers-0.1.15.dev158}/verifiers/clients/nemorl_chat_completions_client.py +0 -0
- {verifiers-0.1.15.dev157 → verifiers-0.1.15.dev158}/verifiers/clients/openai_chat_completions_client.py +0 -0
- {verifiers-0.1.15.dev157 → verifiers-0.1.15.dev158}/verifiers/clients/openai_chat_completions_token_client.py +0 -0
- {verifiers-0.1.15.dev157 → verifiers-0.1.15.dev158}/verifiers/clients/openai_completions_client.py +0 -0
- {verifiers-0.1.15.dev157 → verifiers-0.1.15.dev158}/verifiers/clients/openai_responses_client.py +0 -0
- {verifiers-0.1.15.dev157 → verifiers-0.1.15.dev158}/verifiers/clients/renderer_client.py +0 -0
- {verifiers-0.1.15.dev157 → verifiers-0.1.15.dev158}/verifiers/decorators.py +0 -0
- {verifiers-0.1.15.dev157 → verifiers-0.1.15.dev158}/verifiers/envs/AGENTS.md +0 -0
- {verifiers-0.1.15.dev157 → verifiers-0.1.15.dev158}/verifiers/envs/__init__.py +0 -0
- {verifiers-0.1.15.dev157 → verifiers-0.1.15.dev158}/verifiers/envs/env_group.py +0 -0
- {verifiers-0.1.15.dev157 → verifiers-0.1.15.dev158}/verifiers/envs/environment.py +0 -0
- {verifiers-0.1.15.dev157 → verifiers-0.1.15.dev158}/verifiers/envs/experimental/README.md +0 -0
- {verifiers-0.1.15.dev157 → verifiers-0.1.15.dev158}/verifiers/envs/experimental/__init__.py +0 -0
- {verifiers-0.1.15.dev157 → verifiers-0.1.15.dev158}/verifiers/envs/experimental/cli_agent_env.py +0 -0
- {verifiers-0.1.15.dev157 → verifiers-0.1.15.dev158}/verifiers/envs/experimental/composable/README.md +0 -0
- {verifiers-0.1.15.dev157 → verifiers-0.1.15.dev158}/verifiers/envs/experimental/composable/__init__.py +0 -0
- {verifiers-0.1.15.dev157 → verifiers-0.1.15.dev158}/verifiers/envs/experimental/composable/_filter.py +0 -0
- {verifiers-0.1.15.dev157 → verifiers-0.1.15.dev158}/verifiers/envs/experimental/composable/composable_env.py +0 -0
- {verifiers-0.1.15.dev157 → verifiers-0.1.15.dev158}/verifiers/envs/experimental/composable/harness.py +0 -0
- {verifiers-0.1.15.dev157 → verifiers-0.1.15.dev158}/verifiers/envs/experimental/composable/harnesses/__init__.py +0 -0
- {verifiers-0.1.15.dev157 → verifiers-0.1.15.dev158}/verifiers/envs/experimental/composable/harnesses/mini_swe_agent.py +0 -0
- {verifiers-0.1.15.dev157 → verifiers-0.1.15.dev158}/verifiers/envs/experimental/composable/harnesses/opencode.py +0 -0
- {verifiers-0.1.15.dev157 → verifiers-0.1.15.dev158}/verifiers/envs/experimental/composable/harnesses/prompt.txt +0 -0
- {verifiers-0.1.15.dev157 → verifiers-0.1.15.dev158}/verifiers/envs/experimental/composable/harnesses/rlm.py +0 -0
- {verifiers-0.1.15.dev157 → verifiers-0.1.15.dev158}/verifiers/envs/experimental/composable/swe_debug_env.py +0 -0
- {verifiers-0.1.15.dev157 → verifiers-0.1.15.dev158}/verifiers/envs/experimental/composable/task.py +0 -0
- {verifiers-0.1.15.dev157 → verifiers-0.1.15.dev158}/verifiers/envs/experimental/composable/tasksets/__init__.py +0 -0
- {verifiers-0.1.15.dev157 → verifiers-0.1.15.dev158}/verifiers/envs/experimental/composable/tasksets/cp/__init__.py +0 -0
- {verifiers-0.1.15.dev157 → verifiers-0.1.15.dev158}/verifiers/envs/experimental/composable/tasksets/cp/cp_task.py +0 -0
- {verifiers-0.1.15.dev157 → verifiers-0.1.15.dev158}/verifiers/envs/experimental/composable/tasksets/cp/test_utils.py +0 -0
- {verifiers-0.1.15.dev157 → verifiers-0.1.15.dev158}/verifiers/envs/experimental/composable/tasksets/harbor/__init__.py +0 -0
- {verifiers-0.1.15.dev157 → verifiers-0.1.15.dev158}/verifiers/envs/experimental/composable/tasksets/harbor/harbor.py +0 -0
- {verifiers-0.1.15.dev157 → verifiers-0.1.15.dev158}/verifiers/envs/experimental/composable/tasksets/lean/__init__.py +0 -0
- {verifiers-0.1.15.dev157 → verifiers-0.1.15.dev158}/verifiers/envs/experimental/composable/tasksets/lean/lean_task.py +0 -0
- {verifiers-0.1.15.dev157 → verifiers-0.1.15.dev158}/verifiers/envs/experimental/composable/tasksets/math/__init__.py +0 -0
- {verifiers-0.1.15.dev157 → verifiers-0.1.15.dev158}/verifiers/envs/experimental/composable/tasksets/math/math_task.py +0 -0
- {verifiers-0.1.15.dev157 → verifiers-0.1.15.dev158}/verifiers/envs/experimental/composable/tasksets/swe/__init__.py +0 -0
- {verifiers-0.1.15.dev157 → verifiers-0.1.15.dev158}/verifiers/envs/experimental/composable/tasksets/swe/multi_swe/__init__.py +0 -0
- {verifiers-0.1.15.dev157 → verifiers-0.1.15.dev158}/verifiers/envs/experimental/composable/tasksets/swe/multi_swe/extract_fix_patch.sh +0 -0
- {verifiers-0.1.15.dev157 → verifiers-0.1.15.dev158}/verifiers/envs/experimental/composable/tasksets/swe/multi_swe/taskset.py +0 -0
- {verifiers-0.1.15.dev157 → verifiers-0.1.15.dev158}/verifiers/envs/experimental/composable/tasksets/swe/openswe/__init__.py +0 -0
- {verifiers-0.1.15.dev157 → verifiers-0.1.15.dev158}/verifiers/envs/experimental/composable/tasksets/swe/openswe/taskset.py +0 -0
- {verifiers-0.1.15.dev157 → verifiers-0.1.15.dev158}/verifiers/envs/experimental/composable/tasksets/swe/r2e_gym/__init__.py +0 -0
- {verifiers-0.1.15.dev157 → verifiers-0.1.15.dev158}/verifiers/envs/experimental/composable/tasksets/swe/r2e_gym/log_parser.py +0 -0
- {verifiers-0.1.15.dev157 → verifiers-0.1.15.dev158}/verifiers/envs/experimental/composable/tasksets/swe/r2e_gym/taskset.py +0 -0
- {verifiers-0.1.15.dev157 → verifiers-0.1.15.dev158}/verifiers/envs/experimental/composable/tasksets/swe/scale_swe/__init__.py +0 -0
- {verifiers-0.1.15.dev157 → verifiers-0.1.15.dev158}/verifiers/envs/experimental/composable/tasksets/swe/scale_swe/taskset.py +0 -0
- {verifiers-0.1.15.dev157 → verifiers-0.1.15.dev158}/verifiers/envs/experimental/composable/tasksets/swe/shared/__init__.py +0 -0
- {verifiers-0.1.15.dev157 → verifiers-0.1.15.dev158}/verifiers/envs/experimental/composable/tasksets/swe/shared/test_patch.py +0 -0
- {verifiers-0.1.15.dev157 → verifiers-0.1.15.dev158}/verifiers/envs/experimental/composable/tasksets/swe/swe_bench/__init__.py +0 -0
- {verifiers-0.1.15.dev157 → verifiers-0.1.15.dev158}/verifiers/envs/experimental/composable/tasksets/swe/swe_bench/taskset.py +0 -0
- {verifiers-0.1.15.dev157 → verifiers-0.1.15.dev158}/verifiers/envs/experimental/composable/tasksets/swe/swe_lego/__init__.py +0 -0
- {verifiers-0.1.15.dev157 → verifiers-0.1.15.dev158}/verifiers/envs/experimental/composable/tasksets/swe/swe_lego/taskset.py +0 -0
- {verifiers-0.1.15.dev157 → verifiers-0.1.15.dev158}/verifiers/envs/experimental/composable/tasksets/swe/swe_rebench_v2/__init__.py +0 -0
- {verifiers-0.1.15.dev157 → verifiers-0.1.15.dev158}/verifiers/envs/experimental/composable/tasksets/swe/swe_rebench_v2/log_parsers.py +0 -0
- {verifiers-0.1.15.dev157 → verifiers-0.1.15.dev158}/verifiers/envs/experimental/composable/tasksets/swe/swe_rebench_v2/taskset.py +0 -0
- {verifiers-0.1.15.dev157 → verifiers-0.1.15.dev158}/verifiers/envs/experimental/composable/tasksets/swe/swe_smith/__init__.py +0 -0
- {verifiers-0.1.15.dev157 → verifiers-0.1.15.dev158}/verifiers/envs/experimental/composable/tasksets/swe/swe_smith/taskset.py +0 -0
- {verifiers-0.1.15.dev157 → verifiers-0.1.15.dev158}/verifiers/envs/experimental/composable/tasksets/swe/swe_tasksets.py +0 -0
- {verifiers-0.1.15.dev157 → verifiers-0.1.15.dev158}/verifiers/envs/experimental/gym_env.py +0 -0
- {verifiers-0.1.15.dev157 → verifiers-0.1.15.dev158}/verifiers/envs/experimental/harbor_env/__init__.py +0 -0
- {verifiers-0.1.15.dev157 → verifiers-0.1.15.dev158}/verifiers/envs/experimental/harbor_env/env.py +0 -0
- {verifiers-0.1.15.dev157 → verifiers-0.1.15.dev158}/verifiers/envs/experimental/harbor_env/mcp.py +0 -0
- {verifiers-0.1.15.dev157 → verifiers-0.1.15.dev158}/verifiers/envs/experimental/mcp_env.py +0 -0
- {verifiers-0.1.15.dev157 → verifiers-0.1.15.dev158}/verifiers/envs/experimental/opencode_env.py +0 -0
- {verifiers-0.1.15.dev157 → verifiers-0.1.15.dev158}/verifiers/envs/experimental/opencode_qa_env.py +0 -0
- {verifiers-0.1.15.dev157 → verifiers-0.1.15.dev158}/verifiers/envs/experimental/opencode_rlm_env.py +0 -0
- {verifiers-0.1.15.dev157 → verifiers-0.1.15.dev158}/verifiers/envs/experimental/rlm_env.py +0 -0
- {verifiers-0.1.15.dev157 → verifiers-0.1.15.dev158}/verifiers/envs/experimental/sandbox_mixin.py +0 -0
- {verifiers-0.1.15.dev157 → verifiers-0.1.15.dev158}/verifiers/envs/experimental/utils/__init__.py +0 -0
- {verifiers-0.1.15.dev157 → verifiers-0.1.15.dev158}/verifiers/envs/experimental/utils/file_locks.py +0 -0
- {verifiers-0.1.15.dev157 → verifiers-0.1.15.dev158}/verifiers/envs/experimental/utils/git_checkout_cache.py +0 -0
- {verifiers-0.1.15.dev157 → verifiers-0.1.15.dev158}/verifiers/envs/integrations/README.md +0 -0
- {verifiers-0.1.15.dev157 → verifiers-0.1.15.dev158}/verifiers/envs/integrations/__init__.py +0 -0
- {verifiers-0.1.15.dev157 → verifiers-0.1.15.dev158}/verifiers/envs/integrations/browser_env/README.md +0 -0
- {verifiers-0.1.15.dev157 → verifiers-0.1.15.dev158}/verifiers/envs/integrations/browser_env/__init__.py +0 -0
- {verifiers-0.1.15.dev157 → verifiers-0.1.15.dev158}/verifiers/envs/integrations/browser_env/browser_env.py +0 -0
- {verifiers-0.1.15.dev157 → verifiers-0.1.15.dev158}/verifiers/envs/integrations/browser_env/modes/__init__.py +0 -0
- {verifiers-0.1.15.dev157 → verifiers-0.1.15.dev158}/verifiers/envs/integrations/browser_env/modes/base.py +0 -0
- {verifiers-0.1.15.dev157 → verifiers-0.1.15.dev158}/verifiers/envs/integrations/browser_env/modes/cua_mode.py +0 -0
- {verifiers-0.1.15.dev157 → verifiers-0.1.15.dev158}/verifiers/envs/integrations/browser_env/modes/dom_mode.py +0 -0
- {verifiers-0.1.15.dev157 → verifiers-0.1.15.dev158}/verifiers/envs/integrations/openenv_env.py +0 -0
- {verifiers-0.1.15.dev157 → verifiers-0.1.15.dev158}/verifiers/envs/integrations/reasoninggym_env.py +0 -0
- {verifiers-0.1.15.dev157 → verifiers-0.1.15.dev158}/verifiers/envs/integrations/textarena_env.py +0 -0
- {verifiers-0.1.15.dev157 → verifiers-0.1.15.dev158}/verifiers/envs/multiturn_env.py +0 -0
- {verifiers-0.1.15.dev157 → verifiers-0.1.15.dev158}/verifiers/envs/python_env.py +0 -0
- {verifiers-0.1.15.dev157 → verifiers-0.1.15.dev158}/verifiers/envs/sandbox_env.py +0 -0
- {verifiers-0.1.15.dev157 → verifiers-0.1.15.dev158}/verifiers/envs/singleturn_env.py +0 -0
- {verifiers-0.1.15.dev157 → verifiers-0.1.15.dev158}/verifiers/envs/stateful_tool_env.py +0 -0
- {verifiers-0.1.15.dev157 → verifiers-0.1.15.dev158}/verifiers/envs/tool_env.py +0 -0
- {verifiers-0.1.15.dev157 → verifiers-0.1.15.dev158}/verifiers/errors.py +0 -0
- {verifiers-0.1.15.dev157 → verifiers-0.1.15.dev158}/verifiers/gepa/__init__.py +0 -0
- {verifiers-0.1.15.dev157 → verifiers-0.1.15.dev158}/verifiers/gepa/adapter.py +0 -0
- {verifiers-0.1.15.dev157 → verifiers-0.1.15.dev158}/verifiers/gepa/config.py +0 -0
- {verifiers-0.1.15.dev157 → verifiers-0.1.15.dev158}/verifiers/gepa/display.py +0 -0
- {verifiers-0.1.15.dev157 → verifiers-0.1.15.dev158}/verifiers/gepa/gepa_utils.py +0 -0
- {verifiers-0.1.15.dev157 → verifiers-0.1.15.dev158}/verifiers/parsers/__init__.py +0 -0
- {verifiers-0.1.15.dev157 → verifiers-0.1.15.dev158}/verifiers/parsers/maybe_think_parser.py +0 -0
- {verifiers-0.1.15.dev157 → verifiers-0.1.15.dev158}/verifiers/parsers/parser.py +0 -0
- {verifiers-0.1.15.dev157 → verifiers-0.1.15.dev158}/verifiers/parsers/think_parser.py +0 -0
- {verifiers-0.1.15.dev157 → verifiers-0.1.15.dev158}/verifiers/parsers/xml_parser.py +0 -0
- {verifiers-0.1.15.dev157 → verifiers-0.1.15.dev158}/verifiers/rl/README.md +0 -0
- {verifiers-0.1.15.dev157 → verifiers-0.1.15.dev158}/verifiers/rl/__init__.py +0 -0
- {verifiers-0.1.15.dev157 → verifiers-0.1.15.dev158}/verifiers/rl/inference/__init__.py +0 -0
- {verifiers-0.1.15.dev157 → verifiers-0.1.15.dev158}/verifiers/rl/inference/client.py +0 -0
- {verifiers-0.1.15.dev157 → verifiers-0.1.15.dev158}/verifiers/rl/inference/server.py +0 -0
- {verifiers-0.1.15.dev157 → verifiers-0.1.15.dev158}/verifiers/rl/trainer/__init__.py +0 -0
- {verifiers-0.1.15.dev157 → verifiers-0.1.15.dev158}/verifiers/rl/trainer/config.py +0 -0
- {verifiers-0.1.15.dev157 → verifiers-0.1.15.dev158}/verifiers/rl/trainer/orchestrator.py +0 -0
- {verifiers-0.1.15.dev157 → verifiers-0.1.15.dev158}/verifiers/rl/trainer/trainer.py +0 -0
- {verifiers-0.1.15.dev157 → verifiers-0.1.15.dev158}/verifiers/rl/trainer/utils.py +0 -0
- {verifiers-0.1.15.dev157 → verifiers-0.1.15.dev158}/verifiers/rubrics/__init__.py +0 -0
- {verifiers-0.1.15.dev157 → verifiers-0.1.15.dev158}/verifiers/rubrics/experimental/hybrid_math_rubric.py +0 -0
- {verifiers-0.1.15.dev157 → verifiers-0.1.15.dev158}/verifiers/rubrics/judge_rubric.py +0 -0
- {verifiers-0.1.15.dev157 → verifiers-0.1.15.dev158}/verifiers/rubrics/math_rubric.py +0 -0
- {verifiers-0.1.15.dev157 → verifiers-0.1.15.dev158}/verifiers/rubrics/rubric.py +0 -0
- {verifiers-0.1.15.dev157 → verifiers-0.1.15.dev158}/verifiers/rubrics/rubric_group.py +0 -0
- {verifiers-0.1.15.dev157 → verifiers-0.1.15.dev158}/verifiers/scripts/__init__.py +0 -0
- {verifiers-0.1.15.dev157 → verifiers-0.1.15.dev158}/verifiers/scripts/build.py +0 -0
- {verifiers-0.1.15.dev157 → verifiers-0.1.15.dev158}/verifiers/scripts/eval.py +0 -0
- {verifiers-0.1.15.dev157 → verifiers-0.1.15.dev158}/verifiers/scripts/gepa.py +0 -0
- {verifiers-0.1.15.dev157 → verifiers-0.1.15.dev158}/verifiers/scripts/init.py +0 -0
- {verifiers-0.1.15.dev157 → verifiers-0.1.15.dev158}/verifiers/scripts/install.py +0 -0
- {verifiers-0.1.15.dev157 → verifiers-0.1.15.dev158}/verifiers/scripts/rl.py +0 -0
- {verifiers-0.1.15.dev157 → verifiers-0.1.15.dev158}/verifiers/scripts/setup.py +0 -0
- {verifiers-0.1.15.dev157 → verifiers-0.1.15.dev158}/verifiers/scripts/train.py +0 -0
- {verifiers-0.1.15.dev157 → verifiers-0.1.15.dev158}/verifiers/scripts/tui.py +0 -0
- {verifiers-0.1.15.dev157 → verifiers-0.1.15.dev158}/verifiers/scripts/vllm.py +0 -0
- {verifiers-0.1.15.dev157 → verifiers-0.1.15.dev158}/verifiers/serve/__init__.py +0 -0
- {verifiers-0.1.15.dev157 → verifiers-0.1.15.dev158}/verifiers/serve/client/env_client.py +0 -0
- {verifiers-0.1.15.dev157 → verifiers-0.1.15.dev158}/verifiers/serve/client/zmq_env_client.py +0 -0
- {verifiers-0.1.15.dev157 → verifiers-0.1.15.dev158}/verifiers/serve/server/__init__.py +0 -0
- {verifiers-0.1.15.dev157 → verifiers-0.1.15.dev158}/verifiers/serve/server/env_router.py +0 -0
- {verifiers-0.1.15.dev157 → verifiers-0.1.15.dev158}/verifiers/serve/server/env_server.py +0 -0
- {verifiers-0.1.15.dev157 → verifiers-0.1.15.dev158}/verifiers/serve/server/env_worker.py +0 -0
- {verifiers-0.1.15.dev157 → verifiers-0.1.15.dev158}/verifiers/serve/server/zmq_env_server.py +0 -0
- {verifiers-0.1.15.dev157 → verifiers-0.1.15.dev158}/verifiers/serve/types.py +0 -0
- {verifiers-0.1.15.dev157 → verifiers-0.1.15.dev158}/verifiers/types.py +0 -0
- {verifiers-0.1.15.dev157 → verifiers-0.1.15.dev158}/verifiers/utils/__init__.py +0 -0
- {verifiers-0.1.15.dev157 → verifiers-0.1.15.dev158}/verifiers/utils/async_utils.py +0 -0
- {verifiers-0.1.15.dev157 → verifiers-0.1.15.dev158}/verifiers/utils/client_utils.py +0 -0
- {verifiers-0.1.15.dev157 → verifiers-0.1.15.dev158}/verifiers/utils/config_utils.py +0 -0
- {verifiers-0.1.15.dev157 → verifiers-0.1.15.dev158}/verifiers/utils/data_utils.py +0 -0
- {verifiers-0.1.15.dev157 → verifiers-0.1.15.dev158}/verifiers/utils/display_utils.py +0 -0
- {verifiers-0.1.15.dev157 → verifiers-0.1.15.dev158}/verifiers/utils/env_config_utils.py +0 -0
- {verifiers-0.1.15.dev157 → verifiers-0.1.15.dev158}/verifiers/utils/env_utils.py +0 -0
- {verifiers-0.1.15.dev157 → verifiers-0.1.15.dev158}/verifiers/utils/error_utils.py +0 -0
- {verifiers-0.1.15.dev157 → verifiers-0.1.15.dev158}/verifiers/utils/eval_display.py +0 -0
- {verifiers-0.1.15.dev157 → verifiers-0.1.15.dev158}/verifiers/utils/eval_utils.py +0 -0
- {verifiers-0.1.15.dev157 → verifiers-0.1.15.dev158}/verifiers/utils/heartbeat.py +0 -0
- {verifiers-0.1.15.dev157 → verifiers-0.1.15.dev158}/verifiers/utils/import_utils.py +0 -0
- {verifiers-0.1.15.dev157 → verifiers-0.1.15.dev158}/verifiers/utils/install_utils.py +0 -0
- {verifiers-0.1.15.dev157 → verifiers-0.1.15.dev158}/verifiers/utils/interception_utils.py +0 -0
- {verifiers-0.1.15.dev157 → verifiers-0.1.15.dev158}/verifiers/utils/logging_utils.py +0 -0
- {verifiers-0.1.15.dev157 → verifiers-0.1.15.dev158}/verifiers/utils/message_utils.py +0 -0
- {verifiers-0.1.15.dev157 → verifiers-0.1.15.dev158}/verifiers/utils/metric_utils.py +0 -0
- {verifiers-0.1.15.dev157 → verifiers-0.1.15.dev158}/verifiers/utils/path_utils.py +0 -0
- {verifiers-0.1.15.dev157 → verifiers-0.1.15.dev158}/verifiers/utils/pricing_utils.py +0 -0
- {verifiers-0.1.15.dev157 → verifiers-0.1.15.dev158}/verifiers/utils/process_utils.py +0 -0
- {verifiers-0.1.15.dev157 → verifiers-0.1.15.dev158}/verifiers/utils/response_utils.py +0 -0
- {verifiers-0.1.15.dev157 → verifiers-0.1.15.dev158}/verifiers/utils/save_utils.py +0 -0
- {verifiers-0.1.15.dev157 → verifiers-0.1.15.dev158}/verifiers/utils/serve_utils.py +0 -0
- {verifiers-0.1.15.dev157 → verifiers-0.1.15.dev158}/verifiers/utils/thread_utils.py +0 -0
- {verifiers-0.1.15.dev157 → verifiers-0.1.15.dev158}/verifiers/utils/threaded_sandbox_client.py +0 -0
- {verifiers-0.1.15.dev157 → verifiers-0.1.15.dev158}/verifiers/utils/tool_utils.py +0 -0
- {verifiers-0.1.15.dev157 → verifiers-0.1.15.dev158}/verifiers/utils/usage_utils.py +0 -0
- {verifiers-0.1.15.dev157 → verifiers-0.1.15.dev158}/verifiers/utils/version_utils.py +0 -0
- {verifiers-0.1.15.dev157 → verifiers-0.1.15.dev158}/verifiers/v1/ENVIRONMENT_BEST_PRACTICES.md +0 -0
- {verifiers-0.1.15.dev157 → verifiers-0.1.15.dev158}/verifiers/v1/README.md +0 -0
- {verifiers-0.1.15.dev157 → verifiers-0.1.15.dev158}/verifiers/v1/RE_MIGRATION.md +0 -0
- {verifiers-0.1.15.dev157 → verifiers-0.1.15.dev158}/verifiers/v1/__init__.py +0 -0
- {verifiers-0.1.15.dev157 → verifiers-0.1.15.dev158}/verifiers/v1/artifact.py +0 -0
- {verifiers-0.1.15.dev157 → verifiers-0.1.15.dev158}/verifiers/v1/config.py +0 -0
- {verifiers-0.1.15.dev157 → verifiers-0.1.15.dev158}/verifiers/v1/env.py +0 -0
- {verifiers-0.1.15.dev157 → verifiers-0.1.15.dev158}/verifiers/v1/model.py +0 -0
- {verifiers-0.1.15.dev157 → verifiers-0.1.15.dev158}/verifiers/v1/program.py +0 -0
- {verifiers-0.1.15.dev157 → verifiers-0.1.15.dev158}/verifiers/v1/runtime_handles.py +0 -0
- {verifiers-0.1.15.dev157 → verifiers-0.1.15.dev158}/verifiers/v1/sandbox.py +0 -0
- {verifiers-0.1.15.dev157 → verifiers-0.1.15.dev158}/verifiers/v1/state.py +0 -0
- {verifiers-0.1.15.dev157 → verifiers-0.1.15.dev158}/verifiers/v1/task.py +0 -0
- {verifiers-0.1.15.dev157 → verifiers-0.1.15.dev158}/verifiers/v1/taskset.py +0 -0
- {verifiers-0.1.15.dev157 → verifiers-0.1.15.dev158}/verifiers/v1/toolset.py +0 -0
- {verifiers-0.1.15.dev157 → verifiers-0.1.15.dev158}/verifiers/v1/types.py +0 -0
- {verifiers-0.1.15.dev157 → verifiers-0.1.15.dev158}/verifiers/v1/user.py +0 -0
- {verifiers-0.1.15.dev157 → verifiers-0.1.15.dev158}/verifiers/v1/utils/__init__.py +0 -0
- {verifiers-0.1.15.dev157 → verifiers-0.1.15.dev158}/verifiers/v1/utils/binding_utils.py +0 -0
- {verifiers-0.1.15.dev157 → verifiers-0.1.15.dev158}/verifiers/v1/utils/config_callable_utils.py +0 -0
- {verifiers-0.1.15.dev157 → verifiers-0.1.15.dev158}/verifiers/v1/utils/config_utils.py +0 -0
- {verifiers-0.1.15.dev157 → verifiers-0.1.15.dev158}/verifiers/v1/utils/endpoint_utils.py +0 -0
- {verifiers-0.1.15.dev157 → verifiers-0.1.15.dev158}/verifiers/v1/utils/json_utils.py +0 -0
- {verifiers-0.1.15.dev157 → verifiers-0.1.15.dev158}/verifiers/v1/utils/judge_utils.py +0 -0
- {verifiers-0.1.15.dev157 → verifiers-0.1.15.dev158}/verifiers/v1/utils/lifecycle_utils.py +0 -0
- {verifiers-0.1.15.dev157 → verifiers-0.1.15.dev158}/verifiers/v1/utils/logging_utils.py +0 -0
- {verifiers-0.1.15.dev157 → verifiers-0.1.15.dev158}/verifiers/v1/utils/mcp_proxy_utils.py +0 -0
- {verifiers-0.1.15.dev157 → verifiers-0.1.15.dev158}/verifiers/v1/utils/mcp_utils.py +0 -0
- {verifiers-0.1.15.dev157 → verifiers-0.1.15.dev158}/verifiers/v1/utils/object_utils.py +0 -0
- {verifiers-0.1.15.dev157 → verifiers-0.1.15.dev158}/verifiers/v1/utils/program_utils.py +0 -0
- {verifiers-0.1.15.dev157 → verifiers-0.1.15.dev158}/verifiers/v1/utils/prompt_utils.py +0 -0
- {verifiers-0.1.15.dev157 → verifiers-0.1.15.dev158}/verifiers/v1/utils/runtime_owner_utils.py +0 -0
- {verifiers-0.1.15.dev157 → verifiers-0.1.15.dev158}/verifiers/v1/utils/runtime_registry.py +0 -0
- {verifiers-0.1.15.dev157 → verifiers-0.1.15.dev158}/verifiers/v1/utils/sandbox_program_utils.py +0 -0
- {verifiers-0.1.15.dev157 → verifiers-0.1.15.dev158}/verifiers/v1/utils/sandbox_python_utils.py +0 -0
- {verifiers-0.1.15.dev157 → verifiers-0.1.15.dev158}/verifiers/v1/utils/sandbox_utils.py +0 -0
- {verifiers-0.1.15.dev157 → verifiers-0.1.15.dev158}/verifiers/v1/utils/scoring_utils.py +0 -0
- {verifiers-0.1.15.dev157 → verifiers-0.1.15.dev158}/verifiers/v1/utils/serialization_utils.py +0 -0
- {verifiers-0.1.15.dev157 → verifiers-0.1.15.dev158}/verifiers/v1/utils/task_freeze_utils.py +0 -0
- {verifiers-0.1.15.dev157 → verifiers-0.1.15.dev158}/verifiers/v1/utils/taskset_utils.py +0 -0
- {verifiers-0.1.15.dev157 → verifiers-0.1.15.dev158}/verifiers/v1/utils/tool_utils.py +0 -0
- {verifiers-0.1.15.dev157 → verifiers-0.1.15.dev158}/verifiers/v1/utils/toolset_utils.py +0 -0
- {verifiers-0.1.15.dev157 → verifiers-0.1.15.dev158}/verifiers/v1/utils/trajectory_utils.py +0 -0
- {verifiers-0.1.15.dev157 → verifiers-0.1.15.dev158}/verifiers/v1/utils/usage_utils.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.dev158
|
|
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
|
|
@@ -18,7 +18,7 @@ from pydantic import BaseModel
|
|
|
18
18
|
|
|
19
19
|
import verifiers as vf
|
|
20
20
|
from verifiers.clients import Client
|
|
21
|
-
from verifiers.types import ClientConfig
|
|
21
|
+
from verifiers.types import ClientConfig, Messages
|
|
22
22
|
from verifiers.types import Response, ResponseMessage, ToolCall
|
|
23
23
|
from verifiers.types import Tool
|
|
24
24
|
from verifiers.types import Usage
|
|
@@ -98,6 +98,18 @@ class CapturingModelClient(FakeModelClient):
|
|
|
98
98
|
return await super().get_response(**kwargs)
|
|
99
99
|
|
|
100
100
|
|
|
101
|
+
class BlockingModelClient(CapturingModelClient):
|
|
102
|
+
def __init__(self, responses: list[Response]):
|
|
103
|
+
super().__init__(responses)
|
|
104
|
+
self.entered = asyncio.Event()
|
|
105
|
+
self.release = asyncio.Event()
|
|
106
|
+
|
|
107
|
+
async def get_response(self, **kwargs: object) -> Response:
|
|
108
|
+
self.entered.set()
|
|
109
|
+
await self.release.wait()
|
|
110
|
+
return await super().get_response(**kwargs)
|
|
111
|
+
|
|
112
|
+
|
|
101
113
|
class FakeCreateSandboxRequest:
|
|
102
114
|
def __init__(self, **kwargs: object):
|
|
103
115
|
self.kwargs = kwargs
|
|
@@ -537,6 +549,37 @@ async def endpoint_trajectory_program(task, state):
|
|
|
537
549
|
return state
|
|
538
550
|
|
|
539
551
|
|
|
552
|
+
async def concurrent_endpoint_program(task, state):
|
|
553
|
+
_ = task
|
|
554
|
+
root = state["endpoint_root_url"].rstrip("/")
|
|
555
|
+
config = state.get_endpoint_config(api="chat")
|
|
556
|
+
endpoint_client = cast(OpenAI, state.get_client(api="chat", sync=True))
|
|
557
|
+
api_key = endpoint_client.api_key
|
|
558
|
+
endpoint_client.close()
|
|
559
|
+
|
|
560
|
+
def post_chat(content: str) -> dict[str, object]:
|
|
561
|
+
payload = {
|
|
562
|
+
"model": config.model,
|
|
563
|
+
"messages": [{"role": "user", "content": content}],
|
|
564
|
+
}
|
|
565
|
+
request = urllib.request.Request(
|
|
566
|
+
f"{root}/v1/chat/completions",
|
|
567
|
+
data=json.dumps(payload).encode(),
|
|
568
|
+
headers={
|
|
569
|
+
"content-type": "application/json",
|
|
570
|
+
"Authorization": f"Bearer {api_key}",
|
|
571
|
+
},
|
|
572
|
+
)
|
|
573
|
+
with urllib.request.urlopen(request) as response:
|
|
574
|
+
return json.loads(response.read().decode())
|
|
575
|
+
|
|
576
|
+
state["endpoint_concurrent_responses"] = await asyncio.gather(
|
|
577
|
+
asyncio.to_thread(post_chat, "first"),
|
|
578
|
+
asyncio.to_thread(post_chat, "second"),
|
|
579
|
+
)
|
|
580
|
+
return state
|
|
581
|
+
|
|
582
|
+
|
|
540
583
|
async def mcp_proxy_program(task, state):
|
|
541
584
|
_ = task
|
|
542
585
|
from mcp import ClientSession, StdioServerParameters
|
|
@@ -683,6 +726,7 @@ for _name, _value in {
|
|
|
683
726
|
"child_reads_program_sandbox": child_reads_program_sandbox,
|
|
684
727
|
"endpoint_program": endpoint_program,
|
|
685
728
|
"endpoint_trajectory_program": endpoint_trajectory_program,
|
|
729
|
+
"concurrent_endpoint_program": concurrent_endpoint_program,
|
|
686
730
|
"mcp_proxy_program": mcp_proxy_program,
|
|
687
731
|
"child_program": child_program,
|
|
688
732
|
"parent_program": parent_program,
|
|
@@ -808,6 +852,36 @@ async def test_endpoint_request_can_hide_internal_model_call_from_trajectory() -
|
|
|
808
852
|
)
|
|
809
853
|
|
|
810
854
|
|
|
855
|
+
@pytest.mark.asyncio
|
|
856
|
+
async def test_endpoint_max_turns_counts_inflight_visible_requests() -> None:
|
|
857
|
+
client = BlockingModelClient(
|
|
858
|
+
[fake_response("allowed"), fake_response("unexpected")]
|
|
859
|
+
)
|
|
860
|
+
harness = make_harness(
|
|
861
|
+
program={"fn": program_ref("concurrent_endpoint_program")},
|
|
862
|
+
client=client,
|
|
863
|
+
model="test-model",
|
|
864
|
+
max_turns=1,
|
|
865
|
+
)
|
|
866
|
+
task = vf.Task({"prompt": [{"role": "user", "content": "hi"}]}).freeze()
|
|
867
|
+
|
|
868
|
+
run_task = asyncio.create_task(harness.run(task))
|
|
869
|
+
await asyncio.wait_for(client.entered.wait(), timeout=1.0)
|
|
870
|
+
await asyncio.sleep(0.05)
|
|
871
|
+
client.release.set()
|
|
872
|
+
state = await run_task
|
|
873
|
+
await harness.teardown()
|
|
874
|
+
|
|
875
|
+
contents = [
|
|
876
|
+
response["choices"][0]["message"]["content"]
|
|
877
|
+
for response in state["endpoint_concurrent_responses"]
|
|
878
|
+
]
|
|
879
|
+
assert sorted(contents) == ["", "allowed"]
|
|
880
|
+
assert len(client.requests) == 1
|
|
881
|
+
assert len(state["trajectory"]) == 1
|
|
882
|
+
assert state["stop_condition"] == "max_turns_reached"
|
|
883
|
+
|
|
884
|
+
|
|
811
885
|
@pytest.mark.asyncio
|
|
812
886
|
async def test_state_helpers_load_runtime_tools_while_rollout_is_active() -> None:
|
|
813
887
|
harness = make_harness(
|
|
@@ -950,6 +1024,38 @@ async def test_base_program_submits_system_prompt_before_prompt() -> None:
|
|
|
950
1024
|
assert state["completion"][-1]["content"] == "ok"
|
|
951
1025
|
|
|
952
1026
|
|
|
1027
|
+
@pytest.mark.asyncio
|
|
1028
|
+
async def test_base_program_max_turns_uses_stop_condition() -> None:
|
|
1029
|
+
client = CapturingModelClient(
|
|
1030
|
+
[fake_response(content="done"), fake_response(content="unexpected")]
|
|
1031
|
+
)
|
|
1032
|
+
harness = make_harness(client=cast(Client, client), model="fake", max_turns=1)
|
|
1033
|
+
task = vf.Task({"prompt": [{"role": "user", "content": "hi"}]}).freeze()
|
|
1034
|
+
|
|
1035
|
+
state = await harness.run(task)
|
|
1036
|
+
|
|
1037
|
+
assert len(client.requests) == 1
|
|
1038
|
+
assert len(state["trajectory"]) == 1
|
|
1039
|
+
assert state["stop_condition"] == "max_turns_reached"
|
|
1040
|
+
|
|
1041
|
+
|
|
1042
|
+
@pytest.mark.asyncio
|
|
1043
|
+
async def test_model_request_reservation_released_when_client_resolution_fails() -> (
|
|
1044
|
+
None
|
|
1045
|
+
):
|
|
1046
|
+
harness = make_harness(model="fake", max_turns=1)
|
|
1047
|
+
task = vf.Task({"prompt": [{"role": "user", "content": "hi"}]}).freeze()
|
|
1048
|
+
state = await harness.setup_state(task, vf.State.for_task(task))
|
|
1049
|
+
|
|
1050
|
+
with pytest.raises(RuntimeError, match="no model client"):
|
|
1051
|
+
await harness.runtime.submit_model_request(
|
|
1052
|
+
cast(Messages, state["prompt"]), task, state
|
|
1053
|
+
)
|
|
1054
|
+
|
|
1055
|
+
assert harness.runtime.visible_model_requests(state) == 0
|
|
1056
|
+
assert state["trajectory"] == []
|
|
1057
|
+
|
|
1058
|
+
|
|
953
1059
|
@pytest.mark.asyncio
|
|
954
1060
|
async def test_taskset_setup_initializes_base_harness_prompt_and_sampling() -> None:
|
|
955
1061
|
class SetupRuntimeTaskset(vf.Taskset):
|
|
@@ -314,6 +314,11 @@ class Harness(RuntimeOwnerMixin[ConfigT], Generic[ConfigT]):
|
|
|
314
314
|
raise TypeError("state.trajectory must be a list.")
|
|
315
315
|
return float(len(trajectory))
|
|
316
316
|
|
|
317
|
+
@vf.stop
|
|
318
|
+
async def max_turns_reached(self, state: State) -> bool:
|
|
319
|
+
max_turns = state.get_max_turns(self.config.max_turns)
|
|
320
|
+
return max_turns > 0 and self.runtime.visible_model_requests(state) >= max_turns
|
|
321
|
+
|
|
317
322
|
async def setup_state(self, task: Task, state: State) -> State:
|
|
318
323
|
await self.setup_runtime_state(task, state)
|
|
319
324
|
await self.setup_model_state(task, state)
|
|
@@ -547,9 +552,6 @@ class Harness(RuntimeOwnerMixin[ConfigT], Generic[ConfigT]):
|
|
|
547
552
|
sync_completion()
|
|
548
553
|
if await self.runtime.is_completed(task, state):
|
|
549
554
|
return state
|
|
550
|
-
if max_turns > 0 and turn >= max_turns:
|
|
551
|
-
state._set_stop_condition("max_turns_reached", overwrite=True)
|
|
552
|
-
return state
|
|
553
555
|
return state
|
|
554
556
|
|
|
555
557
|
def command_program(
|
|
@@ -21,7 +21,7 @@ from typing import (
|
|
|
21
21
|
)
|
|
22
22
|
|
|
23
23
|
from verifiers.clients import Client, resolve_client
|
|
24
|
-
from verifiers.types import Messages, Response, Tool
|
|
24
|
+
from verifiers.types import Messages, Response, ResponseMessage, Tool
|
|
25
25
|
from verifiers.types import ClientConfig, ClientType, SamplingArgs
|
|
26
26
|
from verifiers.utils.async_utils import maybe_call_with_named_args
|
|
27
27
|
from verifiers.utils.client_utils import resolve_client_config
|
|
@@ -226,40 +226,7 @@ class Runtime:
|
|
|
226
226
|
if owner is not None:
|
|
227
227
|
self.toolsets.extend(iter_toolsets(owner.toolsets))
|
|
228
228
|
self.named_toolsets = self._collect_named_toolsets()
|
|
229
|
-
|
|
230
|
-
self.runtime_objects: dict[RuntimeObjectOwner, RuntimeObjectStore] = {
|
|
231
|
-
"toolset": {},
|
|
232
|
-
"user": {},
|
|
233
|
-
"taskset": {},
|
|
234
|
-
"harness": {},
|
|
235
|
-
}
|
|
236
|
-
self.model_clients: dict[str, Client] = {}
|
|
237
|
-
self.owned_model_clients: set[str] = set()
|
|
238
|
-
self._sandbox_client = None
|
|
239
|
-
self.sandbox_leases: dict[tuple[str, str], SandboxLease] = {}
|
|
240
|
-
self.sandbox_creation_tasks: dict[
|
|
241
|
-
tuple[str, str], asyncio.Task[SandboxLease]
|
|
242
|
-
] = {}
|
|
243
|
-
self.upload_archive_tasks: dict[tuple[str, str, str], asyncio.Task[Path]] = {}
|
|
244
|
-
self.sandbox_lock = asyncio.Lock()
|
|
245
|
-
sandbox_config = (
|
|
246
|
-
self.harness.sandbox
|
|
247
|
-
if self.harness is not None and self.harness.sandbox is not None
|
|
248
|
-
else SandboxConfig()
|
|
249
|
-
)
|
|
250
|
-
create_concurrency = sandbox_config.create_concurrency
|
|
251
|
-
create_rate = sandbox_config.create_rate_per_second
|
|
252
|
-
delete_concurrency = sandbox_config.delete_concurrency
|
|
253
|
-
delete_rate = sandbox_config.delete_rate_per_second
|
|
254
|
-
self.sandbox_create_semaphore = asyncio.Semaphore(create_concurrency)
|
|
255
|
-
self.sandbox_create_rate_limiter = AsyncRateLimiter(create_rate)
|
|
256
|
-
self.sandbox_delete_semaphore = asyncio.Semaphore(delete_concurrency)
|
|
257
|
-
self.sandbox_delete_rate_limiter = AsyncRateLimiter(delete_rate)
|
|
258
|
-
self.mcp_exit_stacks: dict[str, AsyncExitStack] = {}
|
|
259
|
-
self.mcp_tools: dict[str, RuntimeTools] = {}
|
|
260
|
-
self.mcp_tool_parents: dict[str, dict[str, tuple[Toolset, ...]]] = {}
|
|
261
|
-
self.trajectories: dict[str, list[JsonData]] = {}
|
|
262
|
-
self.tool_handles: dict[str, tuple[Task, State, tuple[str, ...]]] = {}
|
|
229
|
+
|
|
263
230
|
self.stop_conditions = collect_handlers(
|
|
264
231
|
self._handler_owners(),
|
|
265
232
|
"stop",
|
|
@@ -326,6 +293,46 @@ class Runtime:
|
|
|
326
293
|
),
|
|
327
294
|
)
|
|
328
295
|
|
|
296
|
+
self.trajectories: dict[str, list[JsonData]] = {}
|
|
297
|
+
self.model_clients: dict[str, Client] = {}
|
|
298
|
+
self.owned_model_clients: set[str] = set()
|
|
299
|
+
self._model_request_locks: dict[str, asyncio.Lock] = {}
|
|
300
|
+
self._inflight_visible_model_requests: dict[str, int] = {}
|
|
301
|
+
|
|
302
|
+
self.scoped_tools: dict[tuple[int, str, str], list[ToolEntry]] = {}
|
|
303
|
+
self.tool_handles: dict[str, tuple[Task, State, tuple[str, ...]]] = {}
|
|
304
|
+
self.runtime_objects: dict[RuntimeObjectOwner, RuntimeObjectStore] = {
|
|
305
|
+
"toolset": {},
|
|
306
|
+
"user": {},
|
|
307
|
+
"taskset": {},
|
|
308
|
+
"harness": {},
|
|
309
|
+
}
|
|
310
|
+
|
|
311
|
+
self._sandbox_client = None
|
|
312
|
+
self.sandbox_leases: dict[tuple[str, str], SandboxLease] = {}
|
|
313
|
+
self.sandbox_creation_tasks: dict[
|
|
314
|
+
tuple[str, str], asyncio.Task[SandboxLease]
|
|
315
|
+
] = {}
|
|
316
|
+
self.upload_archive_tasks: dict[tuple[str, str, str], asyncio.Task[Path]] = {}
|
|
317
|
+
self.sandbox_lock = asyncio.Lock()
|
|
318
|
+
sandbox_config = (
|
|
319
|
+
self.harness.sandbox
|
|
320
|
+
if self.harness is not None and self.harness.sandbox is not None
|
|
321
|
+
else SandboxConfig()
|
|
322
|
+
)
|
|
323
|
+
create_concurrency = sandbox_config.create_concurrency
|
|
324
|
+
create_rate = sandbox_config.create_rate_per_second
|
|
325
|
+
delete_concurrency = sandbox_config.delete_concurrency
|
|
326
|
+
delete_rate = sandbox_config.delete_rate_per_second
|
|
327
|
+
self.sandbox_create_semaphore = asyncio.Semaphore(create_concurrency)
|
|
328
|
+
self.sandbox_create_rate_limiter = AsyncRateLimiter(create_rate)
|
|
329
|
+
self.sandbox_delete_semaphore = asyncio.Semaphore(delete_concurrency)
|
|
330
|
+
self.sandbox_delete_rate_limiter = AsyncRateLimiter(delete_rate)
|
|
331
|
+
|
|
332
|
+
self.mcp_exit_stacks: dict[str, AsyncExitStack] = {}
|
|
333
|
+
self.mcp_tools: dict[str, RuntimeTools] = {}
|
|
334
|
+
self.mcp_tool_parents: dict[str, dict[str, tuple[Toolset, ...]]] = {}
|
|
335
|
+
|
|
329
336
|
@property
|
|
330
337
|
def has_group_signals(self) -> bool:
|
|
331
338
|
return bool(self.group_signals)
|
|
@@ -438,6 +445,19 @@ class Runtime:
|
|
|
438
445
|
list[JsonData], trajectory
|
|
439
446
|
)
|
|
440
447
|
|
|
448
|
+
def visible_model_requests(self, state: State) -> int:
|
|
449
|
+
trajectory = state.get("trajectory") or []
|
|
450
|
+
if not isinstance(trajectory, list):
|
|
451
|
+
raise TypeError("state.trajectory must be a list.")
|
|
452
|
+
trajectory_id = str(state["trajectory_id"])
|
|
453
|
+
completed = sum(
|
|
454
|
+
1
|
|
455
|
+
for step in trajectory
|
|
456
|
+
if isinstance(step, dict)
|
|
457
|
+
and str(step.get("trajectory_id")) == trajectory_id
|
|
458
|
+
)
|
|
459
|
+
return completed + self._inflight_visible_model_requests.get(trajectory_id, 0)
|
|
460
|
+
|
|
441
461
|
def resolved_handles(self, state: State) -> ResolvedRuntimeHandlesConfig:
|
|
442
462
|
runtime = state.runtime_state()
|
|
443
463
|
resolved = runtime.get("resolved") or {}
|
|
@@ -858,41 +878,92 @@ class Runtime:
|
|
|
858
878
|
context: ModelRequestContext | None = None,
|
|
859
879
|
) -> Response:
|
|
860
880
|
context = context or ModelRequestContext()
|
|
861
|
-
|
|
862
|
-
|
|
863
|
-
|
|
864
|
-
|
|
881
|
+
reserved = await self._reserve_model_request(task, state, context)
|
|
882
|
+
if not reserved:
|
|
883
|
+
return self._completed_model_response(state)
|
|
884
|
+
released = False
|
|
885
|
+
try:
|
|
886
|
+
client = self.model_client(state)
|
|
887
|
+
request_start = time.time()
|
|
888
|
+
response = await client.get_response(
|
|
889
|
+
prompt=prompt,
|
|
890
|
+
model=self.model(state),
|
|
891
|
+
tools=tool_defs,
|
|
892
|
+
sampling_args=self.sampling_args(state),
|
|
893
|
+
state=state,
|
|
894
|
+
)
|
|
895
|
+
request_end = time.time()
|
|
896
|
+
state.record_model_timing(request_start, request_end)
|
|
897
|
+
record_response_usage(state, response)
|
|
898
|
+
completion = await parse_response_message(response)
|
|
899
|
+
tokens = await parse_response_tokens(response)
|
|
900
|
+
is_truncated = response.message.is_truncated or (
|
|
901
|
+
tokens is not None and bool(tokens.get("is_truncated"))
|
|
902
|
+
)
|
|
903
|
+
step = {
|
|
904
|
+
"prompt": serializable(prompt),
|
|
905
|
+
"completion": serializable(completion),
|
|
906
|
+
"response": serializable(response),
|
|
907
|
+
"tokens": serializable(tokens),
|
|
908
|
+
"reward": None,
|
|
909
|
+
"advantage": None,
|
|
910
|
+
"is_truncated": bool(is_truncated),
|
|
911
|
+
"trajectory_id": str(state["trajectory_id"]),
|
|
912
|
+
"extras": context.extras(),
|
|
913
|
+
}
|
|
914
|
+
if context.trajectory_visibility == "append":
|
|
915
|
+
state["trajectory"].append(step)
|
|
916
|
+
self._release_model_request(state, context)
|
|
917
|
+
released = True
|
|
918
|
+
await self.is_completed(task, state)
|
|
919
|
+
elif context.trajectory_visibility != "hidden":
|
|
920
|
+
raise AssertionError(
|
|
921
|
+
f"Unknown trajectory visibility: {context.trajectory_visibility!r}"
|
|
922
|
+
)
|
|
923
|
+
return response
|
|
924
|
+
finally:
|
|
925
|
+
if not released:
|
|
926
|
+
self._release_model_request(state, context)
|
|
927
|
+
|
|
928
|
+
async def _reserve_model_request(
|
|
929
|
+
self, task: Task, state: State, context: ModelRequestContext
|
|
930
|
+
) -> bool:
|
|
931
|
+
key = str(state["trajectory_id"])
|
|
932
|
+
lock = self._model_request_locks.setdefault(key, asyncio.Lock())
|
|
933
|
+
async with lock:
|
|
934
|
+
if await self.is_completed(task, state):
|
|
935
|
+
return False
|
|
936
|
+
if context.trajectory_visibility != "append":
|
|
937
|
+
return True
|
|
938
|
+
self._inflight_visible_model_requests[key] = (
|
|
939
|
+
self._inflight_visible_model_requests.get(key, 0) + 1
|
|
940
|
+
)
|
|
941
|
+
return True
|
|
942
|
+
|
|
943
|
+
def _release_model_request(
|
|
944
|
+
self, state: State, context: ModelRequestContext
|
|
945
|
+
) -> None:
|
|
946
|
+
if context.trajectory_visibility != "append":
|
|
947
|
+
return
|
|
948
|
+
key = str(state["trajectory_id"])
|
|
949
|
+
count = self._inflight_visible_model_requests.get(key, 0)
|
|
950
|
+
if count <= 1:
|
|
951
|
+
self._inflight_visible_model_requests.pop(key, None)
|
|
952
|
+
else:
|
|
953
|
+
self._inflight_visible_model_requests[key] = count - 1
|
|
954
|
+
|
|
955
|
+
def _completed_model_response(self, state: State) -> Response:
|
|
956
|
+
return Response(
|
|
957
|
+
id=f"completed_{uuid.uuid4().hex}",
|
|
958
|
+
created=int(time.time()),
|
|
865
959
|
model=self.model(state),
|
|
866
|
-
|
|
867
|
-
|
|
868
|
-
|
|
869
|
-
|
|
870
|
-
|
|
871
|
-
|
|
872
|
-
record_response_usage(state, response)
|
|
873
|
-
completion = await parse_response_message(response)
|
|
874
|
-
tokens = await parse_response_tokens(response)
|
|
875
|
-
is_truncated = response.message.is_truncated or (
|
|
876
|
-
tokens is not None and bool(tokens.get("is_truncated"))
|
|
960
|
+
message=ResponseMessage(
|
|
961
|
+
role="assistant",
|
|
962
|
+
content="",
|
|
963
|
+
finish_reason="stop",
|
|
964
|
+
is_truncated=False,
|
|
965
|
+
),
|
|
877
966
|
)
|
|
878
|
-
step = {
|
|
879
|
-
"prompt": serializable(prompt),
|
|
880
|
-
"completion": serializable(completion),
|
|
881
|
-
"response": serializable(response),
|
|
882
|
-
"tokens": serializable(tokens),
|
|
883
|
-
"reward": None,
|
|
884
|
-
"advantage": None,
|
|
885
|
-
"is_truncated": bool(is_truncated),
|
|
886
|
-
"trajectory_id": str(state["trajectory_id"]),
|
|
887
|
-
"extras": context.extras(),
|
|
888
|
-
}
|
|
889
|
-
if context.trajectory_visibility == "append":
|
|
890
|
-
state["trajectory"].append(step)
|
|
891
|
-
elif context.trajectory_visibility != "hidden":
|
|
892
|
-
raise AssertionError(
|
|
893
|
-
f"Unknown trajectory visibility: {context.trajectory_visibility!r}"
|
|
894
|
-
)
|
|
895
|
-
return response
|
|
896
967
|
|
|
897
968
|
async def setup_rollout(
|
|
898
969
|
self,
|
|
@@ -978,6 +1049,9 @@ class Runtime:
|
|
|
978
1049
|
await self.close_mcp_tools(state)
|
|
979
1050
|
self.release_scoped_tools("rollout", state)
|
|
980
1051
|
await self.release_model_client(state)
|
|
1052
|
+
key = str(state["trajectory_id"])
|
|
1053
|
+
self._model_request_locks.pop(key, None)
|
|
1054
|
+
self._inflight_visible_model_requests.pop(key, None)
|
|
981
1055
|
self.release_tool_handles(state)
|
|
982
1056
|
|
|
983
1057
|
async def cleanup_group(self, tasks: list[Task], states: list[State]) -> None:
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
{verifiers-0.1.15.dev157 → verifiers-0.1.15.dev158}/tests/test_langchain_deep_agents_wikispeedia.py
RENAMED
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|