verifiers 0.1.15.dev154__tar.gz → 0.1.15.dev155__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.dev154 → verifiers-0.1.15.dev155}/PKG-INFO +1 -1
- {verifiers-0.1.15.dev154 → verifiers-0.1.15.dev155}/tests/test_client_multimodal_types.py +73 -1
- {verifiers-0.1.15.dev154 → verifiers-0.1.15.dev155}/tests/test_openai_responses_client.py +19 -0
- {verifiers-0.1.15.dev154 → verifiers-0.1.15.dev155}/tests/test_renderer_client.py +8 -0
- {verifiers-0.1.15.dev154 → verifiers-0.1.15.dev155}/verifiers/clients/anthropic_messages_client.py +24 -2
- {verifiers-0.1.15.dev154 → verifiers-0.1.15.dev155}/verifiers/clients/openai_chat_completions_client.py +27 -4
- {verifiers-0.1.15.dev154 → verifiers-0.1.15.dev155}/verifiers/clients/openai_responses_client.py +6 -2
- {verifiers-0.1.15.dev154 → verifiers-0.1.15.dev155}/verifiers/clients/renderer_client.py +6 -2
- {verifiers-0.1.15.dev154 → verifiers-0.1.15.dev155}/.gitignore +0 -0
- {verifiers-0.1.15.dev154 → verifiers-0.1.15.dev155}/LICENSE +0 -0
- {verifiers-0.1.15.dev154 → verifiers-0.1.15.dev155}/README.md +0 -0
- {verifiers-0.1.15.dev154 → verifiers-0.1.15.dev155}/pyproject.toml +0 -0
- {verifiers-0.1.15.dev154 → verifiers-0.1.15.dev155}/tests/AGENTS.md +0 -0
- {verifiers-0.1.15.dev154 → verifiers-0.1.15.dev155}/tests/README.md +0 -0
- {verifiers-0.1.15.dev154 → verifiers-0.1.15.dev155}/tests/__init__.py +0 -0
- {verifiers-0.1.15.dev154 → verifiers-0.1.15.dev155}/tests/conftest.py +0 -0
- {verifiers-0.1.15.dev154 → verifiers-0.1.15.dev155}/tests/test_browser_env.py +0 -0
- {verifiers-0.1.15.dev154 → verifiers-0.1.15.dev155}/tests/test_build_script.py +0 -0
- {verifiers-0.1.15.dev154 → verifiers-0.1.15.dev155}/tests/test_cli_agent_env.py +0 -0
- {verifiers-0.1.15.dev154 → verifiers-0.1.15.dev155}/tests/test_client_auth_errors.py +0 -0
- {verifiers-0.1.15.dev154 → verifiers-0.1.15.dev155}/tests/test_client_config.py +0 -0
- {verifiers-0.1.15.dev154 → verifiers-0.1.15.dev155}/tests/test_composable_env.py +0 -0
- {verifiers-0.1.15.dev154 → verifiers-0.1.15.dev155}/tests/test_context_token_metrics.py +0 -0
- {verifiers-0.1.15.dev154 → verifiers-0.1.15.dev155}/tests/test_decorator_ranks.py +0 -0
- {verifiers-0.1.15.dev154 → verifiers-0.1.15.dev155}/tests/test_endpoint_registry.py +0 -0
- {verifiers-0.1.15.dev154 → verifiers-0.1.15.dev155}/tests/test_env_group.py +0 -0
- {verifiers-0.1.15.dev154 → verifiers-0.1.15.dev155}/tests/test_env_server.py +0 -0
- {verifiers-0.1.15.dev154 → verifiers-0.1.15.dev155}/tests/test_environment.py +0 -0
- {verifiers-0.1.15.dev154 → verifiers-0.1.15.dev155}/tests/test_environment_extra.py +0 -0
- {verifiers-0.1.15.dev154 → verifiers-0.1.15.dev155}/tests/test_envs.py +0 -0
- {verifiers-0.1.15.dev154 → verifiers-0.1.15.dev155}/tests/test_error_chain.py +0 -0
- {verifiers-0.1.15.dev154 → verifiers-0.1.15.dev155}/tests/test_eval_cli.py +0 -0
- {verifiers-0.1.15.dev154 → verifiers-0.1.15.dev155}/tests/test_eval_display.py +0 -0
- {verifiers-0.1.15.dev154 → verifiers-0.1.15.dev155}/tests/test_eval_utils.py +0 -0
- {verifiers-0.1.15.dev154 → verifiers-0.1.15.dev155}/tests/test_gepa_cli.py +0 -0
- {verifiers-0.1.15.dev154 → verifiers-0.1.15.dev155}/tests/test_gepa_utils.py +0 -0
- {verifiers-0.1.15.dev154 → verifiers-0.1.15.dev155}/tests/test_gym_env.py +0 -0
- {verifiers-0.1.15.dev154 → verifiers-0.1.15.dev155}/tests/test_harbor_env_mcp.py +0 -0
- {verifiers-0.1.15.dev154 → verifiers-0.1.15.dev155}/tests/test_imports.py +0 -0
- {verifiers-0.1.15.dev154 → verifiers-0.1.15.dev155}/tests/test_init_script.py +0 -0
- {verifiers-0.1.15.dev154 → verifiers-0.1.15.dev155}/tests/test_install_utils.py +0 -0
- {verifiers-0.1.15.dev154 → verifiers-0.1.15.dev155}/tests/test_interception_utils.py +0 -0
- {verifiers-0.1.15.dev154 → verifiers-0.1.15.dev155}/tests/test_langchain_deep_agents_wikispeedia.py +0 -0
- {verifiers-0.1.15.dev154 → verifiers-0.1.15.dev155}/tests/test_lean_task.py +0 -0
- {verifiers-0.1.15.dev154 → verifiers-0.1.15.dev155}/tests/test_logging.py +0 -0
- {verifiers-0.1.15.dev154 → verifiers-0.1.15.dev155}/tests/test_math_rubric.py +0 -0
- {verifiers-0.1.15.dev154 → verifiers-0.1.15.dev155}/tests/test_maybe_think_parser.py +0 -0
- {verifiers-0.1.15.dev154 → verifiers-0.1.15.dev155}/tests/test_mcp_search_env.py +0 -0
- {verifiers-0.1.15.dev154 → verifiers-0.1.15.dev155}/tests/test_message_utils.py +0 -0
- {verifiers-0.1.15.dev154 → verifiers-0.1.15.dev155}/tests/test_message_utils_multimodal.py +0 -0
- {verifiers-0.1.15.dev154 → verifiers-0.1.15.dev155}/tests/test_multiturn_env.py +0 -0
- {verifiers-0.1.15.dev154 → verifiers-0.1.15.dev155}/tests/test_nemorl_client.py +0 -0
- {verifiers-0.1.15.dev154 → verifiers-0.1.15.dev155}/tests/test_openai_chat_completions_token_client.py +0 -0
- {verifiers-0.1.15.dev154 → verifiers-0.1.15.dev155}/tests/test_opencode_harbor.py +0 -0
- {verifiers-0.1.15.dev154 → verifiers-0.1.15.dev155}/tests/test_opencode_rlm_env.py +0 -0
- {verifiers-0.1.15.dev154 → verifiers-0.1.15.dev155}/tests/test_openenv_client.py +0 -0
- {verifiers-0.1.15.dev154 → verifiers-0.1.15.dev155}/tests/test_parser.py +0 -0
- {verifiers-0.1.15.dev154 → verifiers-0.1.15.dev155}/tests/test_path_utils.py +0 -0
- {verifiers-0.1.15.dev154 → verifiers-0.1.15.dev155}/tests/test_per_turn_timing.py +0 -0
- {verifiers-0.1.15.dev154 → verifiers-0.1.15.dev155}/tests/test_pricing_utils.py +0 -0
- {verifiers-0.1.15.dev154 → verifiers-0.1.15.dev155}/tests/test_prime_plugin.py +0 -0
- {verifiers-0.1.15.dev154 → verifiers-0.1.15.dev155}/tests/test_renderer_e2e.py +0 -0
- {verifiers-0.1.15.dev154 → verifiers-0.1.15.dev155}/tests/test_rlm_composable_env.py +0 -0
- {verifiers-0.1.15.dev154 → verifiers-0.1.15.dev155}/tests/test_rlm_env.py +0 -0
- {verifiers-0.1.15.dev154 → verifiers-0.1.15.dev155}/tests/test_rubric.py +0 -0
- {verifiers-0.1.15.dev154 → verifiers-0.1.15.dev155}/tests/test_rubric_group.py +0 -0
- {verifiers-0.1.15.dev154 → verifiers-0.1.15.dev155}/tests/test_sandbox_env.py +0 -0
- {verifiers-0.1.15.dev154 → verifiers-0.1.15.dev155}/tests/test_sandbox_mixin.py +0 -0
- {verifiers-0.1.15.dev154 → verifiers-0.1.15.dev155}/tests/test_save_utils.py +0 -0
- {verifiers-0.1.15.dev154 → verifiers-0.1.15.dev155}/tests/test_setup_script.py +0 -0
- {verifiers-0.1.15.dev154 → verifiers-0.1.15.dev155}/tests/test_singleturn_env.py +0 -0
- {verifiers-0.1.15.dev154 → verifiers-0.1.15.dev155}/tests/test_stateful_tool_env.py +0 -0
- {verifiers-0.1.15.dev154 → verifiers-0.1.15.dev155}/tests/test_think_parser.py +0 -0
- {verifiers-0.1.15.dev154 → verifiers-0.1.15.dev155}/tests/test_tool_env.py +0 -0
- {verifiers-0.1.15.dev154 → verifiers-0.1.15.dev155}/tests/test_tool_utils.py +0 -0
- {verifiers-0.1.15.dev154 → verifiers-0.1.15.dev155}/tests/test_trajectory_processing.py +0 -0
- {verifiers-0.1.15.dev154 → verifiers-0.1.15.dev155}/tests/test_tui_info_formatting.py +0 -0
- {verifiers-0.1.15.dev154 → verifiers-0.1.15.dev155}/tests/test_types.py +0 -0
- {verifiers-0.1.15.dev154 → verifiers-0.1.15.dev155}/tests/test_v1_bfcl.py +0 -0
- {verifiers-0.1.15.dev154 → verifiers-0.1.15.dev155}/tests/test_v1_config_extension.py +0 -0
- {verifiers-0.1.15.dev154 → verifiers-0.1.15.dev155}/tests/test_v1_empty_completions.py +0 -0
- {verifiers-0.1.15.dev154 → verifiers-0.1.15.dev155}/tests/test_v1_endpoint_protocols.py +0 -0
- {verifiers-0.1.15.dev154 → verifiers-0.1.15.dev155}/tests/test_v1_example_counts.py +0 -0
- {verifiers-0.1.15.dev154 → verifiers-0.1.15.dev155}/tests/test_v1_group_reward_env.py +0 -0
- {verifiers-0.1.15.dev154 → verifiers-0.1.15.dev155}/tests/test_v1_harbor_cli.py +0 -0
- {verifiers-0.1.15.dev154 → verifiers-0.1.15.dev155}/tests/test_v1_mini_swe_agent.py +0 -0
- {verifiers-0.1.15.dev154 → verifiers-0.1.15.dev155}/tests/test_v1_nemo_gym_harness.py +0 -0
- {verifiers-0.1.15.dev154 → verifiers-0.1.15.dev155}/tests/test_v1_openenv_taskset.py +0 -0
- {verifiers-0.1.15.dev154 → verifiers-0.1.15.dev155}/tests/test_v1_openreward_taskset.py +0 -0
- {verifiers-0.1.15.dev154 → verifiers-0.1.15.dev155}/tests/test_v1_rlm_swe.py +0 -0
- {verifiers-0.1.15.dev154 → verifiers-0.1.15.dev155}/tests/test_v1_runtime_lifecycle.py +0 -0
- {verifiers-0.1.15.dev154 → verifiers-0.1.15.dev155}/tests/test_v1_scoring_functions.py +0 -0
- {verifiers-0.1.15.dev154 → verifiers-0.1.15.dev155}/tests/test_v1_taskset_bindings.py +0 -0
- {verifiers-0.1.15.dev154 → verifiers-0.1.15.dev155}/tests/test_v1_taskset_utils.py +0 -0
- {verifiers-0.1.15.dev154 → verifiers-0.1.15.dev155}/tests/test_v1_textarena_taskset.py +0 -0
- {verifiers-0.1.15.dev154 → verifiers-0.1.15.dev155}/tests/test_wiki_search_v1.py +0 -0
- {verifiers-0.1.15.dev154 → verifiers-0.1.15.dev155}/tests/test_wordle_env.py +0 -0
- {verifiers-0.1.15.dev154 → verifiers-0.1.15.dev155}/tests/test_wordle_v1_env.py +0 -0
- {verifiers-0.1.15.dev154 → verifiers-0.1.15.dev155}/tests/test_xml_parser.py +0 -0
- {verifiers-0.1.15.dev154 → verifiers-0.1.15.dev155}/verifiers/AGENTS.md +0 -0
- {verifiers-0.1.15.dev154 → verifiers-0.1.15.dev155}/verifiers/__init__.py +0 -0
- {verifiers-0.1.15.dev154 → verifiers-0.1.15.dev155}/verifiers/cli/__init__.py +0 -0
- {verifiers-0.1.15.dev154 → verifiers-0.1.15.dev155}/verifiers/cli/commands/__init__.py +0 -0
- {verifiers-0.1.15.dev154 → verifiers-0.1.15.dev155}/verifiers/cli/commands/build.py +0 -0
- {verifiers-0.1.15.dev154 → verifiers-0.1.15.dev155}/verifiers/cli/commands/eval.py +0 -0
- {verifiers-0.1.15.dev154 → verifiers-0.1.15.dev155}/verifiers/cli/commands/gepa.py +0 -0
- {verifiers-0.1.15.dev154 → verifiers-0.1.15.dev155}/verifiers/cli/commands/init.py +0 -0
- {verifiers-0.1.15.dev154 → verifiers-0.1.15.dev155}/verifiers/cli/commands/install.py +0 -0
- {verifiers-0.1.15.dev154 → verifiers-0.1.15.dev155}/verifiers/cli/commands/setup.py +0 -0
- {verifiers-0.1.15.dev154 → verifiers-0.1.15.dev155}/verifiers/cli/plugins/__init__.py +0 -0
- {verifiers-0.1.15.dev154 → verifiers-0.1.15.dev155}/verifiers/cli/plugins/prime.py +0 -0
- {verifiers-0.1.15.dev154 → verifiers-0.1.15.dev155}/verifiers/cli/tui.py +0 -0
- {verifiers-0.1.15.dev154 → verifiers-0.1.15.dev155}/verifiers/clients/__init__.py +0 -0
- {verifiers-0.1.15.dev154 → verifiers-0.1.15.dev155}/verifiers/clients/client.py +0 -0
- {verifiers-0.1.15.dev154 → verifiers-0.1.15.dev155}/verifiers/clients/nemorl_chat_completions_client.py +0 -0
- {verifiers-0.1.15.dev154 → verifiers-0.1.15.dev155}/verifiers/clients/openai_chat_completions_token_client.py +0 -0
- {verifiers-0.1.15.dev154 → verifiers-0.1.15.dev155}/verifiers/clients/openai_completions_client.py +0 -0
- {verifiers-0.1.15.dev154 → verifiers-0.1.15.dev155}/verifiers/decorators.py +0 -0
- {verifiers-0.1.15.dev154 → verifiers-0.1.15.dev155}/verifiers/envs/AGENTS.md +0 -0
- {verifiers-0.1.15.dev154 → verifiers-0.1.15.dev155}/verifiers/envs/__init__.py +0 -0
- {verifiers-0.1.15.dev154 → verifiers-0.1.15.dev155}/verifiers/envs/env_group.py +0 -0
- {verifiers-0.1.15.dev154 → verifiers-0.1.15.dev155}/verifiers/envs/environment.py +0 -0
- {verifiers-0.1.15.dev154 → verifiers-0.1.15.dev155}/verifiers/envs/experimental/README.md +0 -0
- {verifiers-0.1.15.dev154 → verifiers-0.1.15.dev155}/verifiers/envs/experimental/__init__.py +0 -0
- {verifiers-0.1.15.dev154 → verifiers-0.1.15.dev155}/verifiers/envs/experimental/cli_agent_env.py +0 -0
- {verifiers-0.1.15.dev154 → verifiers-0.1.15.dev155}/verifiers/envs/experimental/composable/README.md +0 -0
- {verifiers-0.1.15.dev154 → verifiers-0.1.15.dev155}/verifiers/envs/experimental/composable/__init__.py +0 -0
- {verifiers-0.1.15.dev154 → verifiers-0.1.15.dev155}/verifiers/envs/experimental/composable/_filter.py +0 -0
- {verifiers-0.1.15.dev154 → verifiers-0.1.15.dev155}/verifiers/envs/experimental/composable/composable_env.py +0 -0
- {verifiers-0.1.15.dev154 → verifiers-0.1.15.dev155}/verifiers/envs/experimental/composable/harness.py +0 -0
- {verifiers-0.1.15.dev154 → verifiers-0.1.15.dev155}/verifiers/envs/experimental/composable/harnesses/__init__.py +0 -0
- {verifiers-0.1.15.dev154 → verifiers-0.1.15.dev155}/verifiers/envs/experimental/composable/harnesses/mini_swe_agent.py +0 -0
- {verifiers-0.1.15.dev154 → verifiers-0.1.15.dev155}/verifiers/envs/experimental/composable/harnesses/opencode.py +0 -0
- {verifiers-0.1.15.dev154 → verifiers-0.1.15.dev155}/verifiers/envs/experimental/composable/harnesses/prompt.txt +0 -0
- {verifiers-0.1.15.dev154 → verifiers-0.1.15.dev155}/verifiers/envs/experimental/composable/harnesses/rlm.py +0 -0
- {verifiers-0.1.15.dev154 → verifiers-0.1.15.dev155}/verifiers/envs/experimental/composable/swe_debug_env.py +0 -0
- {verifiers-0.1.15.dev154 → verifiers-0.1.15.dev155}/verifiers/envs/experimental/composable/task.py +0 -0
- {verifiers-0.1.15.dev154 → verifiers-0.1.15.dev155}/verifiers/envs/experimental/composable/tasksets/__init__.py +0 -0
- {verifiers-0.1.15.dev154 → verifiers-0.1.15.dev155}/verifiers/envs/experimental/composable/tasksets/cp/__init__.py +0 -0
- {verifiers-0.1.15.dev154 → verifiers-0.1.15.dev155}/verifiers/envs/experimental/composable/tasksets/cp/cp_task.py +0 -0
- {verifiers-0.1.15.dev154 → verifiers-0.1.15.dev155}/verifiers/envs/experimental/composable/tasksets/cp/test_utils.py +0 -0
- {verifiers-0.1.15.dev154 → verifiers-0.1.15.dev155}/verifiers/envs/experimental/composable/tasksets/harbor/__init__.py +0 -0
- {verifiers-0.1.15.dev154 → verifiers-0.1.15.dev155}/verifiers/envs/experimental/composable/tasksets/harbor/harbor.py +0 -0
- {verifiers-0.1.15.dev154 → verifiers-0.1.15.dev155}/verifiers/envs/experimental/composable/tasksets/lean/__init__.py +0 -0
- {verifiers-0.1.15.dev154 → verifiers-0.1.15.dev155}/verifiers/envs/experimental/composable/tasksets/lean/lean_task.py +0 -0
- {verifiers-0.1.15.dev154 → verifiers-0.1.15.dev155}/verifiers/envs/experimental/composable/tasksets/math/__init__.py +0 -0
- {verifiers-0.1.15.dev154 → verifiers-0.1.15.dev155}/verifiers/envs/experimental/composable/tasksets/math/math_task.py +0 -0
- {verifiers-0.1.15.dev154 → verifiers-0.1.15.dev155}/verifiers/envs/experimental/composable/tasksets/swe/__init__.py +0 -0
- {verifiers-0.1.15.dev154 → verifiers-0.1.15.dev155}/verifiers/envs/experimental/composable/tasksets/swe/multi_swe/__init__.py +0 -0
- {verifiers-0.1.15.dev154 → verifiers-0.1.15.dev155}/verifiers/envs/experimental/composable/tasksets/swe/multi_swe/extract_fix_patch.sh +0 -0
- {verifiers-0.1.15.dev154 → verifiers-0.1.15.dev155}/verifiers/envs/experimental/composable/tasksets/swe/multi_swe/taskset.py +0 -0
- {verifiers-0.1.15.dev154 → verifiers-0.1.15.dev155}/verifiers/envs/experimental/composable/tasksets/swe/openswe/__init__.py +0 -0
- {verifiers-0.1.15.dev154 → verifiers-0.1.15.dev155}/verifiers/envs/experimental/composable/tasksets/swe/openswe/taskset.py +0 -0
- {verifiers-0.1.15.dev154 → verifiers-0.1.15.dev155}/verifiers/envs/experimental/composable/tasksets/swe/r2e_gym/__init__.py +0 -0
- {verifiers-0.1.15.dev154 → verifiers-0.1.15.dev155}/verifiers/envs/experimental/composable/tasksets/swe/r2e_gym/log_parser.py +0 -0
- {verifiers-0.1.15.dev154 → verifiers-0.1.15.dev155}/verifiers/envs/experimental/composable/tasksets/swe/r2e_gym/taskset.py +0 -0
- {verifiers-0.1.15.dev154 → verifiers-0.1.15.dev155}/verifiers/envs/experimental/composable/tasksets/swe/scale_swe/__init__.py +0 -0
- {verifiers-0.1.15.dev154 → verifiers-0.1.15.dev155}/verifiers/envs/experimental/composable/tasksets/swe/scale_swe/taskset.py +0 -0
- {verifiers-0.1.15.dev154 → verifiers-0.1.15.dev155}/verifiers/envs/experimental/composable/tasksets/swe/shared/__init__.py +0 -0
- {verifiers-0.1.15.dev154 → verifiers-0.1.15.dev155}/verifiers/envs/experimental/composable/tasksets/swe/shared/test_patch.py +0 -0
- {verifiers-0.1.15.dev154 → verifiers-0.1.15.dev155}/verifiers/envs/experimental/composable/tasksets/swe/swe_bench/__init__.py +0 -0
- {verifiers-0.1.15.dev154 → verifiers-0.1.15.dev155}/verifiers/envs/experimental/composable/tasksets/swe/swe_bench/taskset.py +0 -0
- {verifiers-0.1.15.dev154 → verifiers-0.1.15.dev155}/verifiers/envs/experimental/composable/tasksets/swe/swe_lego/__init__.py +0 -0
- {verifiers-0.1.15.dev154 → verifiers-0.1.15.dev155}/verifiers/envs/experimental/composable/tasksets/swe/swe_lego/taskset.py +0 -0
- {verifiers-0.1.15.dev154 → verifiers-0.1.15.dev155}/verifiers/envs/experimental/composable/tasksets/swe/swe_rebench_v2/__init__.py +0 -0
- {verifiers-0.1.15.dev154 → verifiers-0.1.15.dev155}/verifiers/envs/experimental/composable/tasksets/swe/swe_rebench_v2/log_parsers.py +0 -0
- {verifiers-0.1.15.dev154 → verifiers-0.1.15.dev155}/verifiers/envs/experimental/composable/tasksets/swe/swe_rebench_v2/taskset.py +0 -0
- {verifiers-0.1.15.dev154 → verifiers-0.1.15.dev155}/verifiers/envs/experimental/composable/tasksets/swe/swe_smith/__init__.py +0 -0
- {verifiers-0.1.15.dev154 → verifiers-0.1.15.dev155}/verifiers/envs/experimental/composable/tasksets/swe/swe_smith/taskset.py +0 -0
- {verifiers-0.1.15.dev154 → verifiers-0.1.15.dev155}/verifiers/envs/experimental/composable/tasksets/swe/swe_tasksets.py +0 -0
- {verifiers-0.1.15.dev154 → verifiers-0.1.15.dev155}/verifiers/envs/experimental/gym_env.py +0 -0
- {verifiers-0.1.15.dev154 → verifiers-0.1.15.dev155}/verifiers/envs/experimental/harbor_env/__init__.py +0 -0
- {verifiers-0.1.15.dev154 → verifiers-0.1.15.dev155}/verifiers/envs/experimental/harbor_env/env.py +0 -0
- {verifiers-0.1.15.dev154 → verifiers-0.1.15.dev155}/verifiers/envs/experimental/harbor_env/mcp.py +0 -0
- {verifiers-0.1.15.dev154 → verifiers-0.1.15.dev155}/verifiers/envs/experimental/mcp_env.py +0 -0
- {verifiers-0.1.15.dev154 → verifiers-0.1.15.dev155}/verifiers/envs/experimental/opencode_env.py +0 -0
- {verifiers-0.1.15.dev154 → verifiers-0.1.15.dev155}/verifiers/envs/experimental/opencode_qa_env.py +0 -0
- {verifiers-0.1.15.dev154 → verifiers-0.1.15.dev155}/verifiers/envs/experimental/opencode_rlm_env.py +0 -0
- {verifiers-0.1.15.dev154 → verifiers-0.1.15.dev155}/verifiers/envs/experimental/rlm_env.py +0 -0
- {verifiers-0.1.15.dev154 → verifiers-0.1.15.dev155}/verifiers/envs/experimental/sandbox_mixin.py +0 -0
- {verifiers-0.1.15.dev154 → verifiers-0.1.15.dev155}/verifiers/envs/experimental/utils/__init__.py +0 -0
- {verifiers-0.1.15.dev154 → verifiers-0.1.15.dev155}/verifiers/envs/experimental/utils/file_locks.py +0 -0
- {verifiers-0.1.15.dev154 → verifiers-0.1.15.dev155}/verifiers/envs/experimental/utils/git_checkout_cache.py +0 -0
- {verifiers-0.1.15.dev154 → verifiers-0.1.15.dev155}/verifiers/envs/integrations/README.md +0 -0
- {verifiers-0.1.15.dev154 → verifiers-0.1.15.dev155}/verifiers/envs/integrations/__init__.py +0 -0
- {verifiers-0.1.15.dev154 → verifiers-0.1.15.dev155}/verifiers/envs/integrations/browser_env/README.md +0 -0
- {verifiers-0.1.15.dev154 → verifiers-0.1.15.dev155}/verifiers/envs/integrations/browser_env/__init__.py +0 -0
- {verifiers-0.1.15.dev154 → verifiers-0.1.15.dev155}/verifiers/envs/integrations/browser_env/browser_env.py +0 -0
- {verifiers-0.1.15.dev154 → verifiers-0.1.15.dev155}/verifiers/envs/integrations/browser_env/modes/__init__.py +0 -0
- {verifiers-0.1.15.dev154 → verifiers-0.1.15.dev155}/verifiers/envs/integrations/browser_env/modes/base.py +0 -0
- {verifiers-0.1.15.dev154 → verifiers-0.1.15.dev155}/verifiers/envs/integrations/browser_env/modes/cua_mode.py +0 -0
- {verifiers-0.1.15.dev154 → verifiers-0.1.15.dev155}/verifiers/envs/integrations/browser_env/modes/dom_mode.py +0 -0
- {verifiers-0.1.15.dev154 → verifiers-0.1.15.dev155}/verifiers/envs/integrations/openenv_env.py +0 -0
- {verifiers-0.1.15.dev154 → verifiers-0.1.15.dev155}/verifiers/envs/integrations/reasoninggym_env.py +0 -0
- {verifiers-0.1.15.dev154 → verifiers-0.1.15.dev155}/verifiers/envs/integrations/textarena_env.py +0 -0
- {verifiers-0.1.15.dev154 → verifiers-0.1.15.dev155}/verifiers/envs/multiturn_env.py +0 -0
- {verifiers-0.1.15.dev154 → verifiers-0.1.15.dev155}/verifiers/envs/python_env.py +0 -0
- {verifiers-0.1.15.dev154 → verifiers-0.1.15.dev155}/verifiers/envs/sandbox_env.py +0 -0
- {verifiers-0.1.15.dev154 → verifiers-0.1.15.dev155}/verifiers/envs/singleturn_env.py +0 -0
- {verifiers-0.1.15.dev154 → verifiers-0.1.15.dev155}/verifiers/envs/stateful_tool_env.py +0 -0
- {verifiers-0.1.15.dev154 → verifiers-0.1.15.dev155}/verifiers/envs/tool_env.py +0 -0
- {verifiers-0.1.15.dev154 → verifiers-0.1.15.dev155}/verifiers/errors.py +0 -0
- {verifiers-0.1.15.dev154 → verifiers-0.1.15.dev155}/verifiers/gepa/__init__.py +0 -0
- {verifiers-0.1.15.dev154 → verifiers-0.1.15.dev155}/verifiers/gepa/adapter.py +0 -0
- {verifiers-0.1.15.dev154 → verifiers-0.1.15.dev155}/verifiers/gepa/config.py +0 -0
- {verifiers-0.1.15.dev154 → verifiers-0.1.15.dev155}/verifiers/gepa/display.py +0 -0
- {verifiers-0.1.15.dev154 → verifiers-0.1.15.dev155}/verifiers/gepa/gepa_utils.py +0 -0
- {verifiers-0.1.15.dev154 → verifiers-0.1.15.dev155}/verifiers/parsers/__init__.py +0 -0
- {verifiers-0.1.15.dev154 → verifiers-0.1.15.dev155}/verifiers/parsers/maybe_think_parser.py +0 -0
- {verifiers-0.1.15.dev154 → verifiers-0.1.15.dev155}/verifiers/parsers/parser.py +0 -0
- {verifiers-0.1.15.dev154 → verifiers-0.1.15.dev155}/verifiers/parsers/think_parser.py +0 -0
- {verifiers-0.1.15.dev154 → verifiers-0.1.15.dev155}/verifiers/parsers/xml_parser.py +0 -0
- {verifiers-0.1.15.dev154 → verifiers-0.1.15.dev155}/verifiers/rl/README.md +0 -0
- {verifiers-0.1.15.dev154 → verifiers-0.1.15.dev155}/verifiers/rl/__init__.py +0 -0
- {verifiers-0.1.15.dev154 → verifiers-0.1.15.dev155}/verifiers/rl/inference/__init__.py +0 -0
- {verifiers-0.1.15.dev154 → verifiers-0.1.15.dev155}/verifiers/rl/inference/client.py +0 -0
- {verifiers-0.1.15.dev154 → verifiers-0.1.15.dev155}/verifiers/rl/inference/server.py +0 -0
- {verifiers-0.1.15.dev154 → verifiers-0.1.15.dev155}/verifiers/rl/trainer/__init__.py +0 -0
- {verifiers-0.1.15.dev154 → verifiers-0.1.15.dev155}/verifiers/rl/trainer/config.py +0 -0
- {verifiers-0.1.15.dev154 → verifiers-0.1.15.dev155}/verifiers/rl/trainer/orchestrator.py +0 -0
- {verifiers-0.1.15.dev154 → verifiers-0.1.15.dev155}/verifiers/rl/trainer/trainer.py +0 -0
- {verifiers-0.1.15.dev154 → verifiers-0.1.15.dev155}/verifiers/rl/trainer/utils.py +0 -0
- {verifiers-0.1.15.dev154 → verifiers-0.1.15.dev155}/verifiers/rubrics/__init__.py +0 -0
- {verifiers-0.1.15.dev154 → verifiers-0.1.15.dev155}/verifiers/rubrics/experimental/hybrid_math_rubric.py +0 -0
- {verifiers-0.1.15.dev154 → verifiers-0.1.15.dev155}/verifiers/rubrics/judge_rubric.py +0 -0
- {verifiers-0.1.15.dev154 → verifiers-0.1.15.dev155}/verifiers/rubrics/math_rubric.py +0 -0
- {verifiers-0.1.15.dev154 → verifiers-0.1.15.dev155}/verifiers/rubrics/rubric.py +0 -0
- {verifiers-0.1.15.dev154 → verifiers-0.1.15.dev155}/verifiers/rubrics/rubric_group.py +0 -0
- {verifiers-0.1.15.dev154 → verifiers-0.1.15.dev155}/verifiers/scripts/__init__.py +0 -0
- {verifiers-0.1.15.dev154 → verifiers-0.1.15.dev155}/verifiers/scripts/build.py +0 -0
- {verifiers-0.1.15.dev154 → verifiers-0.1.15.dev155}/verifiers/scripts/eval.py +0 -0
- {verifiers-0.1.15.dev154 → verifiers-0.1.15.dev155}/verifiers/scripts/gepa.py +0 -0
- {verifiers-0.1.15.dev154 → verifiers-0.1.15.dev155}/verifiers/scripts/init.py +0 -0
- {verifiers-0.1.15.dev154 → verifiers-0.1.15.dev155}/verifiers/scripts/install.py +0 -0
- {verifiers-0.1.15.dev154 → verifiers-0.1.15.dev155}/verifiers/scripts/rl.py +0 -0
- {verifiers-0.1.15.dev154 → verifiers-0.1.15.dev155}/verifiers/scripts/setup.py +0 -0
- {verifiers-0.1.15.dev154 → verifiers-0.1.15.dev155}/verifiers/scripts/train.py +0 -0
- {verifiers-0.1.15.dev154 → verifiers-0.1.15.dev155}/verifiers/scripts/tui.py +0 -0
- {verifiers-0.1.15.dev154 → verifiers-0.1.15.dev155}/verifiers/scripts/vllm.py +0 -0
- {verifiers-0.1.15.dev154 → verifiers-0.1.15.dev155}/verifiers/serve/__init__.py +0 -0
- {verifiers-0.1.15.dev154 → verifiers-0.1.15.dev155}/verifiers/serve/client/env_client.py +0 -0
- {verifiers-0.1.15.dev154 → verifiers-0.1.15.dev155}/verifiers/serve/client/zmq_env_client.py +0 -0
- {verifiers-0.1.15.dev154 → verifiers-0.1.15.dev155}/verifiers/serve/server/__init__.py +0 -0
- {verifiers-0.1.15.dev154 → verifiers-0.1.15.dev155}/verifiers/serve/server/env_router.py +0 -0
- {verifiers-0.1.15.dev154 → verifiers-0.1.15.dev155}/verifiers/serve/server/env_server.py +0 -0
- {verifiers-0.1.15.dev154 → verifiers-0.1.15.dev155}/verifiers/serve/server/env_worker.py +0 -0
- {verifiers-0.1.15.dev154 → verifiers-0.1.15.dev155}/verifiers/serve/server/zmq_env_server.py +0 -0
- {verifiers-0.1.15.dev154 → verifiers-0.1.15.dev155}/verifiers/serve/types.py +0 -0
- {verifiers-0.1.15.dev154 → verifiers-0.1.15.dev155}/verifiers/types.py +0 -0
- {verifiers-0.1.15.dev154 → verifiers-0.1.15.dev155}/verifiers/utils/__init__.py +0 -0
- {verifiers-0.1.15.dev154 → verifiers-0.1.15.dev155}/verifiers/utils/async_utils.py +0 -0
- {verifiers-0.1.15.dev154 → verifiers-0.1.15.dev155}/verifiers/utils/client_utils.py +0 -0
- {verifiers-0.1.15.dev154 → verifiers-0.1.15.dev155}/verifiers/utils/config_utils.py +0 -0
- {verifiers-0.1.15.dev154 → verifiers-0.1.15.dev155}/verifiers/utils/data_utils.py +0 -0
- {verifiers-0.1.15.dev154 → verifiers-0.1.15.dev155}/verifiers/utils/display_utils.py +0 -0
- {verifiers-0.1.15.dev154 → verifiers-0.1.15.dev155}/verifiers/utils/env_config_utils.py +0 -0
- {verifiers-0.1.15.dev154 → verifiers-0.1.15.dev155}/verifiers/utils/env_utils.py +0 -0
- {verifiers-0.1.15.dev154 → verifiers-0.1.15.dev155}/verifiers/utils/error_utils.py +0 -0
- {verifiers-0.1.15.dev154 → verifiers-0.1.15.dev155}/verifiers/utils/eval_display.py +0 -0
- {verifiers-0.1.15.dev154 → verifiers-0.1.15.dev155}/verifiers/utils/eval_utils.py +0 -0
- {verifiers-0.1.15.dev154 → verifiers-0.1.15.dev155}/verifiers/utils/heartbeat.py +0 -0
- {verifiers-0.1.15.dev154 → verifiers-0.1.15.dev155}/verifiers/utils/import_utils.py +0 -0
- {verifiers-0.1.15.dev154 → verifiers-0.1.15.dev155}/verifiers/utils/install_utils.py +0 -0
- {verifiers-0.1.15.dev154 → verifiers-0.1.15.dev155}/verifiers/utils/interception_utils.py +0 -0
- {verifiers-0.1.15.dev154 → verifiers-0.1.15.dev155}/verifiers/utils/logging_utils.py +0 -0
- {verifiers-0.1.15.dev154 → verifiers-0.1.15.dev155}/verifiers/utils/message_utils.py +0 -0
- {verifiers-0.1.15.dev154 → verifiers-0.1.15.dev155}/verifiers/utils/metric_utils.py +0 -0
- {verifiers-0.1.15.dev154 → verifiers-0.1.15.dev155}/verifiers/utils/path_utils.py +0 -0
- {verifiers-0.1.15.dev154 → verifiers-0.1.15.dev155}/verifiers/utils/pricing_utils.py +0 -0
- {verifiers-0.1.15.dev154 → verifiers-0.1.15.dev155}/verifiers/utils/process_utils.py +0 -0
- {verifiers-0.1.15.dev154 → verifiers-0.1.15.dev155}/verifiers/utils/response_utils.py +0 -0
- {verifiers-0.1.15.dev154 → verifiers-0.1.15.dev155}/verifiers/utils/save_utils.py +0 -0
- {verifiers-0.1.15.dev154 → verifiers-0.1.15.dev155}/verifiers/utils/serve_utils.py +0 -0
- {verifiers-0.1.15.dev154 → verifiers-0.1.15.dev155}/verifiers/utils/thread_utils.py +0 -0
- {verifiers-0.1.15.dev154 → verifiers-0.1.15.dev155}/verifiers/utils/threaded_sandbox_client.py +0 -0
- {verifiers-0.1.15.dev154 → verifiers-0.1.15.dev155}/verifiers/utils/tool_utils.py +0 -0
- {verifiers-0.1.15.dev154 → verifiers-0.1.15.dev155}/verifiers/utils/usage_utils.py +0 -0
- {verifiers-0.1.15.dev154 → verifiers-0.1.15.dev155}/verifiers/utils/version_utils.py +0 -0
- {verifiers-0.1.15.dev154 → verifiers-0.1.15.dev155}/verifiers/v1/ENVIRONMENT_BEST_PRACTICES.md +0 -0
- {verifiers-0.1.15.dev154 → verifiers-0.1.15.dev155}/verifiers/v1/README.md +0 -0
- {verifiers-0.1.15.dev154 → verifiers-0.1.15.dev155}/verifiers/v1/RE_MIGRATION.md +0 -0
- {verifiers-0.1.15.dev154 → verifiers-0.1.15.dev155}/verifiers/v1/__init__.py +0 -0
- {verifiers-0.1.15.dev154 → verifiers-0.1.15.dev155}/verifiers/v1/artifact.py +0 -0
- {verifiers-0.1.15.dev154 → verifiers-0.1.15.dev155}/verifiers/v1/config.py +0 -0
- {verifiers-0.1.15.dev154 → verifiers-0.1.15.dev155}/verifiers/v1/env.py +0 -0
- {verifiers-0.1.15.dev154 → verifiers-0.1.15.dev155}/verifiers/v1/harness.py +0 -0
- {verifiers-0.1.15.dev154 → verifiers-0.1.15.dev155}/verifiers/v1/model.py +0 -0
- {verifiers-0.1.15.dev154 → verifiers-0.1.15.dev155}/verifiers/v1/program.py +0 -0
- {verifiers-0.1.15.dev154 → verifiers-0.1.15.dev155}/verifiers/v1/runtime.py +0 -0
- {verifiers-0.1.15.dev154 → verifiers-0.1.15.dev155}/verifiers/v1/runtime_handles.py +0 -0
- {verifiers-0.1.15.dev154 → verifiers-0.1.15.dev155}/verifiers/v1/sandbox.py +0 -0
- {verifiers-0.1.15.dev154 → verifiers-0.1.15.dev155}/verifiers/v1/state.py +0 -0
- {verifiers-0.1.15.dev154 → verifiers-0.1.15.dev155}/verifiers/v1/task.py +0 -0
- {verifiers-0.1.15.dev154 → verifiers-0.1.15.dev155}/verifiers/v1/taskset.py +0 -0
- {verifiers-0.1.15.dev154 → verifiers-0.1.15.dev155}/verifiers/v1/toolset.py +0 -0
- {verifiers-0.1.15.dev154 → verifiers-0.1.15.dev155}/verifiers/v1/types.py +0 -0
- {verifiers-0.1.15.dev154 → verifiers-0.1.15.dev155}/verifiers/v1/user.py +0 -0
- {verifiers-0.1.15.dev154 → verifiers-0.1.15.dev155}/verifiers/v1/utils/__init__.py +0 -0
- {verifiers-0.1.15.dev154 → verifiers-0.1.15.dev155}/verifiers/v1/utils/binding_utils.py +0 -0
- {verifiers-0.1.15.dev154 → verifiers-0.1.15.dev155}/verifiers/v1/utils/config_callable_utils.py +0 -0
- {verifiers-0.1.15.dev154 → verifiers-0.1.15.dev155}/verifiers/v1/utils/config_utils.py +0 -0
- {verifiers-0.1.15.dev154 → verifiers-0.1.15.dev155}/verifiers/v1/utils/endpoint_utils.py +0 -0
- {verifiers-0.1.15.dev154 → verifiers-0.1.15.dev155}/verifiers/v1/utils/json_utils.py +0 -0
- {verifiers-0.1.15.dev154 → verifiers-0.1.15.dev155}/verifiers/v1/utils/judge_utils.py +0 -0
- {verifiers-0.1.15.dev154 → verifiers-0.1.15.dev155}/verifiers/v1/utils/lifecycle_utils.py +0 -0
- {verifiers-0.1.15.dev154 → verifiers-0.1.15.dev155}/verifiers/v1/utils/logging_utils.py +0 -0
- {verifiers-0.1.15.dev154 → verifiers-0.1.15.dev155}/verifiers/v1/utils/mcp_proxy_utils.py +0 -0
- {verifiers-0.1.15.dev154 → verifiers-0.1.15.dev155}/verifiers/v1/utils/mcp_utils.py +0 -0
- {verifiers-0.1.15.dev154 → verifiers-0.1.15.dev155}/verifiers/v1/utils/object_utils.py +0 -0
- {verifiers-0.1.15.dev154 → verifiers-0.1.15.dev155}/verifiers/v1/utils/program_utils.py +0 -0
- {verifiers-0.1.15.dev154 → verifiers-0.1.15.dev155}/verifiers/v1/utils/prompt_utils.py +0 -0
- {verifiers-0.1.15.dev154 → verifiers-0.1.15.dev155}/verifiers/v1/utils/runtime_owner_utils.py +0 -0
- {verifiers-0.1.15.dev154 → verifiers-0.1.15.dev155}/verifiers/v1/utils/runtime_registry.py +0 -0
- {verifiers-0.1.15.dev154 → verifiers-0.1.15.dev155}/verifiers/v1/utils/sandbox_program_utils.py +0 -0
- {verifiers-0.1.15.dev154 → verifiers-0.1.15.dev155}/verifiers/v1/utils/sandbox_python_utils.py +0 -0
- {verifiers-0.1.15.dev154 → verifiers-0.1.15.dev155}/verifiers/v1/utils/sandbox_utils.py +0 -0
- {verifiers-0.1.15.dev154 → verifiers-0.1.15.dev155}/verifiers/v1/utils/scoring_utils.py +0 -0
- {verifiers-0.1.15.dev154 → verifiers-0.1.15.dev155}/verifiers/v1/utils/serialization_utils.py +0 -0
- {verifiers-0.1.15.dev154 → verifiers-0.1.15.dev155}/verifiers/v1/utils/task_freeze_utils.py +0 -0
- {verifiers-0.1.15.dev154 → verifiers-0.1.15.dev155}/verifiers/v1/utils/taskset_utils.py +0 -0
- {verifiers-0.1.15.dev154 → verifiers-0.1.15.dev155}/verifiers/v1/utils/tool_utils.py +0 -0
- {verifiers-0.1.15.dev154 → verifiers-0.1.15.dev155}/verifiers/v1/utils/toolset_utils.py +0 -0
- {verifiers-0.1.15.dev154 → verifiers-0.1.15.dev155}/verifiers/v1/utils/trajectory_utils.py +0 -0
- {verifiers-0.1.15.dev154 → verifiers-0.1.15.dev155}/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.dev155
|
|
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
|
|
@@ -1,7 +1,9 @@
|
|
|
1
|
-
import pytest
|
|
2
1
|
from types import SimpleNamespace
|
|
3
2
|
|
|
3
|
+
import pytest
|
|
4
|
+
|
|
4
5
|
from verifiers.clients.openai_chat_completions_client import OpenAIChatCompletionsClient
|
|
6
|
+
from verifiers.errors import EmptyModelResponseError
|
|
5
7
|
from verifiers.types import (
|
|
6
8
|
AssistantMessage,
|
|
7
9
|
ImageUrlContentPart,
|
|
@@ -18,6 +20,11 @@ from verifiers.types import (
|
|
|
18
20
|
from verifiers.utils.response_utils import parse_response_message
|
|
19
21
|
|
|
20
22
|
|
|
23
|
+
class _OpenAIMessage(SimpleNamespace):
|
|
24
|
+
def model_dump(self):
|
|
25
|
+
return self.__dict__
|
|
26
|
+
|
|
27
|
+
|
|
21
28
|
@pytest.mark.asyncio
|
|
22
29
|
async def test_openai_to_native_prompt_with_typed_multimodal_content_parts():
|
|
23
30
|
client = OpenAIChatCompletionsClient(object())
|
|
@@ -52,6 +59,53 @@ async def test_openai_to_native_prompt_with_typed_multimodal_content_parts():
|
|
|
52
59
|
]
|
|
53
60
|
|
|
54
61
|
|
|
62
|
+
@pytest.mark.asyncio
|
|
63
|
+
async def test_openai_chat_rejects_reasoning_only_native_response():
|
|
64
|
+
client = OpenAIChatCompletionsClient(object())
|
|
65
|
+
native_response = SimpleNamespace(
|
|
66
|
+
choices=[
|
|
67
|
+
SimpleNamespace(
|
|
68
|
+
message=_OpenAIMessage(
|
|
69
|
+
content=None,
|
|
70
|
+
reasoning_content="hidden chain",
|
|
71
|
+
tool_calls=None,
|
|
72
|
+
)
|
|
73
|
+
)
|
|
74
|
+
]
|
|
75
|
+
)
|
|
76
|
+
|
|
77
|
+
with pytest.raises(EmptyModelResponseError, match="reasoning but no content"):
|
|
78
|
+
await client.raise_from_native_response(native_response)
|
|
79
|
+
|
|
80
|
+
|
|
81
|
+
@pytest.mark.asyncio
|
|
82
|
+
async def test_openai_chat_accepts_refusal_with_reasoning_native_response():
|
|
83
|
+
client = OpenAIChatCompletionsClient(object())
|
|
84
|
+
native_response = SimpleNamespace(
|
|
85
|
+
id="chatcmpl_refusal",
|
|
86
|
+
created=0,
|
|
87
|
+
model="gpt-5.2",
|
|
88
|
+
usage=None,
|
|
89
|
+
choices=[
|
|
90
|
+
SimpleNamespace(
|
|
91
|
+
finish_reason="stop",
|
|
92
|
+
message=_OpenAIMessage(
|
|
93
|
+
content=None,
|
|
94
|
+
refusal="I cannot help with that.",
|
|
95
|
+
reasoning_content="hidden chain",
|
|
96
|
+
tool_calls=None,
|
|
97
|
+
),
|
|
98
|
+
)
|
|
99
|
+
],
|
|
100
|
+
)
|
|
101
|
+
|
|
102
|
+
await client.raise_from_native_response(native_response)
|
|
103
|
+
response = await client.from_native_response(native_response)
|
|
104
|
+
|
|
105
|
+
assert response.message.content == "I cannot help with that."
|
|
106
|
+
assert response.message.reasoning_content == "hidden chain"
|
|
107
|
+
|
|
108
|
+
|
|
55
109
|
@pytest.mark.asyncio
|
|
56
110
|
async def test_anthropic_to_native_prompt_with_typed_multimodal_content_parts():
|
|
57
111
|
pytest.importorskip("anthropic")
|
|
@@ -228,6 +282,24 @@ async def test_anthropic_from_native_response_always_parses_reasoning():
|
|
|
228
282
|
assert response.message.content == "final answer"
|
|
229
283
|
|
|
230
284
|
|
|
285
|
+
@pytest.mark.asyncio
|
|
286
|
+
async def test_anthropic_rejects_reasoning_only_native_response():
|
|
287
|
+
pytest.importorskip("anthropic")
|
|
288
|
+
from verifiers.clients.anthropic_messages_client import AnthropicMessagesClient
|
|
289
|
+
|
|
290
|
+
client = AnthropicMessagesClient(object())
|
|
291
|
+
native_response = SimpleNamespace(
|
|
292
|
+
id="msg_think",
|
|
293
|
+
model="claude-haiku-4-5",
|
|
294
|
+
stop_reason="end_turn",
|
|
295
|
+
usage=SimpleNamespace(input_tokens=1, output_tokens=1),
|
|
296
|
+
content=[SimpleNamespace(type="thinking", thinking="hidden chain")],
|
|
297
|
+
)
|
|
298
|
+
|
|
299
|
+
with pytest.raises(EmptyModelResponseError, match="reasoning but no content"):
|
|
300
|
+
await client.raise_from_native_response(native_response)
|
|
301
|
+
|
|
302
|
+
|
|
231
303
|
@pytest.mark.asyncio
|
|
232
304
|
async def test_anthropic_tool_call_round_trips_thinking_blocks():
|
|
233
305
|
pytest.importorskip("anthropic")
|
|
@@ -8,6 +8,7 @@ from verifiers.clients.openai_responses_client import (
|
|
|
8
8
|
OPENAI_RESPONSES_OUTPUT_FIELD,
|
|
9
9
|
OpenAIResponsesClient,
|
|
10
10
|
)
|
|
11
|
+
from verifiers.errors import EmptyModelResponseError
|
|
11
12
|
from verifiers.types import (
|
|
12
13
|
AssistantMessage,
|
|
13
14
|
ClientConfig,
|
|
@@ -133,6 +134,24 @@ async def test_get_native_response_normalizes_sampling_args_and_tools():
|
|
|
133
134
|
]
|
|
134
135
|
|
|
135
136
|
|
|
137
|
+
@pytest.mark.asyncio
|
|
138
|
+
async def test_raise_from_native_response_rejects_reasoning_only_response():
|
|
139
|
+
native_response = SimpleNamespace(
|
|
140
|
+
output=[
|
|
141
|
+
{
|
|
142
|
+
"type": "reasoning",
|
|
143
|
+
"id": "rs_1",
|
|
144
|
+
"summary": [{"type": "summary_text", "text": "thinking"}],
|
|
145
|
+
"status": "completed",
|
|
146
|
+
}
|
|
147
|
+
]
|
|
148
|
+
)
|
|
149
|
+
client = OpenAIResponsesClient(object())
|
|
150
|
+
|
|
151
|
+
with pytest.raises(EmptyModelResponseError, match="reasoning but no content"):
|
|
152
|
+
await client.raise_from_native_response(native_response)
|
|
153
|
+
|
|
154
|
+
|
|
136
155
|
@pytest.mark.asyncio
|
|
137
156
|
async def test_to_native_tool_omits_strict_when_unset():
|
|
138
157
|
client = OpenAIResponsesClient(object())
|
|
@@ -355,6 +355,14 @@ async def test_renderer_client_rejects_empty_dict_native_response():
|
|
|
355
355
|
await client.raise_from_native_response({})
|
|
356
356
|
|
|
357
357
|
|
|
358
|
+
@pytest.mark.asyncio
|
|
359
|
+
async def test_renderer_client_rejects_reasoning_only_native_response():
|
|
360
|
+
client = object.__new__(RendererClient)
|
|
361
|
+
|
|
362
|
+
with pytest.raises(EmptyModelResponseError, match="reasoning but no content"):
|
|
363
|
+
await client.raise_from_native_response({"reasoning_content": "hidden chain"})
|
|
364
|
+
|
|
365
|
+
|
|
358
366
|
@pytest.mark.asyncio
|
|
359
367
|
async def test_from_native_response_uses_request_id_and_token_lengths():
|
|
360
368
|
"""vLLM's /inference/v1/generate returns ``request_id`` (not ``id``) and
|
{verifiers-0.1.15.dev154 → verifiers-0.1.15.dev155}/verifiers/clients/anthropic_messages_client.py
RENAMED
|
@@ -29,7 +29,7 @@ from anthropic.types import (
|
|
|
29
29
|
)
|
|
30
30
|
|
|
31
31
|
from verifiers.clients.client import Client
|
|
32
|
-
from verifiers.errors import OverlongPromptError
|
|
32
|
+
from verifiers.errors import EmptyModelResponseError, OverlongPromptError
|
|
33
33
|
from verifiers.types import (
|
|
34
34
|
AssistantMessage,
|
|
35
35
|
ClientConfig,
|
|
@@ -378,7 +378,29 @@ class AnthropicMessagesClient(
|
|
|
378
378
|
)
|
|
379
379
|
|
|
380
380
|
async def raise_from_native_response(self, response: AnthropicMessage) -> None:
|
|
381
|
-
|
|
381
|
+
if response is None:
|
|
382
|
+
raise EmptyModelResponseError("Model returned no response")
|
|
383
|
+
|
|
384
|
+
has_text = False
|
|
385
|
+
has_tool_call = False
|
|
386
|
+
has_reasoning = False
|
|
387
|
+
for content_block in getattr(response, "content", []) or []:
|
|
388
|
+
block_type = getattr(content_block, "type", None)
|
|
389
|
+
if block_type == "text" and getattr(content_block, "text", None):
|
|
390
|
+
has_text = True
|
|
391
|
+
elif block_type == "tool_use":
|
|
392
|
+
has_tool_call = True
|
|
393
|
+
elif block_type in {"thinking", "redacted_thinking"}:
|
|
394
|
+
has_reasoning = True
|
|
395
|
+
|
|
396
|
+
if not (has_text or has_tool_call):
|
|
397
|
+
if has_reasoning:
|
|
398
|
+
raise EmptyModelResponseError(
|
|
399
|
+
"Model returned reasoning but no content and did not call any tools"
|
|
400
|
+
)
|
|
401
|
+
raise EmptyModelResponseError(
|
|
402
|
+
"Model returned no content and did not call any tools"
|
|
403
|
+
)
|
|
382
404
|
|
|
383
405
|
async def from_native_response(self, response: AnthropicMessage) -> Response:
|
|
384
406
|
def parse_content(
|
|
@@ -43,6 +43,7 @@ from verifiers.types import (
|
|
|
43
43
|
ClientConfig,
|
|
44
44
|
FinishReason,
|
|
45
45
|
Message,
|
|
46
|
+
MessageContent,
|
|
46
47
|
Messages,
|
|
47
48
|
Response,
|
|
48
49
|
ResponseMessage,
|
|
@@ -119,6 +120,14 @@ def content_to_text(content: Any) -> str:
|
|
|
119
120
|
return ""
|
|
120
121
|
|
|
121
122
|
|
|
123
|
+
def parse_refusal_content(message: Any) -> str | None:
|
|
124
|
+
if isinstance(message, Mapping):
|
|
125
|
+
refusal = message.get("refusal")
|
|
126
|
+
else:
|
|
127
|
+
refusal = getattr(message, "refusal", None)
|
|
128
|
+
return refusal if isinstance(refusal, str) and refusal else None
|
|
129
|
+
|
|
130
|
+
|
|
122
131
|
DEFAULT_REASONING_FIELDS = [
|
|
123
132
|
"reasoning", # vLLM, Together AI, OpenRouter
|
|
124
133
|
"reasoning_content", # DeepSeek, Qwen/DashScope, SGLang, Fireworks AI, Kimi/Moonshot
|
|
@@ -331,15 +340,29 @@ class OpenAIChatCompletionsClient(
|
|
|
331
340
|
f"Model returned {len(response.choices)} choices, expected 1"
|
|
332
341
|
)
|
|
333
342
|
message = response.choices[0].message
|
|
334
|
-
has_content = bool(
|
|
343
|
+
has_content = bool(
|
|
344
|
+
content_to_text(getattr(message, "content", None))
|
|
345
|
+
or parse_refusal_content(message)
|
|
346
|
+
)
|
|
335
347
|
has_tool_calls = bool(getattr(message, "tool_calls", None))
|
|
336
348
|
has_reasoning = bool(parse_reasoning_content(message))
|
|
337
|
-
if not (has_content or has_tool_calls
|
|
349
|
+
if not (has_content or has_tool_calls):
|
|
350
|
+
if has_reasoning:
|
|
351
|
+
raise EmptyModelResponseError(
|
|
352
|
+
"Model returned reasoning but no content and did not call any tools"
|
|
353
|
+
)
|
|
338
354
|
raise EmptyModelResponseError(
|
|
339
|
-
"Model returned no content
|
|
355
|
+
"Model returned no content and did not call any tools"
|
|
340
356
|
)
|
|
341
357
|
|
|
342
358
|
async def from_native_response(self, response: OpenAIChatResponse) -> Response:
|
|
359
|
+
def parse_content(response: OpenAIChatResponse) -> MessageContent | None:
|
|
360
|
+
message = response.choices[0].message
|
|
361
|
+
content = message.content
|
|
362
|
+
if content_to_text(content):
|
|
363
|
+
return content
|
|
364
|
+
return parse_refusal_content(message)
|
|
365
|
+
|
|
343
366
|
def parse_single_tool_call(tool_call: Any) -> ToolCall | None:
|
|
344
367
|
if isinstance(tool_call, ChatCompletionMessageFunctionToolCall):
|
|
345
368
|
return ToolCall(
|
|
@@ -511,7 +534,7 @@ class OpenAIChatCompletionsClient(
|
|
|
511
534
|
model=model,
|
|
512
535
|
usage=parse_usage(response),
|
|
513
536
|
message=ResponseMessage(
|
|
514
|
-
content=response
|
|
537
|
+
content=parse_content(response),
|
|
515
538
|
reasoning_content=parse_reasoning_content(response.choices[0].message),
|
|
516
539
|
finish_reason=parse_finish_reason(response),
|
|
517
540
|
is_truncated=parse_is_truncated(response),
|
{verifiers-0.1.15.dev154 → verifiers-0.1.15.dev155}/verifiers/clients/openai_responses_client.py
RENAMED
|
@@ -293,9 +293,13 @@ class OpenAIResponsesClient(
|
|
|
293
293
|
):
|
|
294
294
|
has_text = True
|
|
295
295
|
|
|
296
|
-
if not (has_text or has_tool_call
|
|
296
|
+
if not (has_text or has_tool_call):
|
|
297
|
+
if has_reasoning:
|
|
298
|
+
raise EmptyModelResponseError(
|
|
299
|
+
"Model returned reasoning but no content and did not call any tools"
|
|
300
|
+
)
|
|
297
301
|
raise EmptyModelResponseError(
|
|
298
|
-
"Model returned no content
|
|
302
|
+
"Model returned no content and did not call any tools"
|
|
299
303
|
)
|
|
300
304
|
|
|
301
305
|
async def from_native_response(
|
|
@@ -641,9 +641,13 @@ class RendererClient(
|
|
|
641
641
|
# model having tried to call a tool, so we don't filter by status here.
|
|
642
642
|
has_tool_calls = bool(response.get("tool_calls"))
|
|
643
643
|
has_reasoning = bool(response.get("reasoning_content"))
|
|
644
|
-
if not (has_content or has_tool_calls
|
|
644
|
+
if not (has_content or has_tool_calls):
|
|
645
|
+
if has_reasoning:
|
|
646
|
+
raise EmptyModelResponseError(
|
|
647
|
+
"Model returned reasoning but no content and did not call any tools"
|
|
648
|
+
)
|
|
645
649
|
raise EmptyModelResponseError(
|
|
646
|
-
"Model returned no content
|
|
650
|
+
"Model returned no content and did not call any tools"
|
|
647
651
|
)
|
|
648
652
|
|
|
649
653
|
async def from_native_response(self, response: dict[str, Any]) -> Response:
|
|
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.dev154 → verifiers-0.1.15.dev155}/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
|
|
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.dev154 → verifiers-0.1.15.dev155}/verifiers/clients/openai_completions_client.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
|
{verifiers-0.1.15.dev154 → verifiers-0.1.15.dev155}/verifiers/envs/experimental/cli_agent_env.py
RENAMED
|
File without changes
|
{verifiers-0.1.15.dev154 → verifiers-0.1.15.dev155}/verifiers/envs/experimental/composable/README.md
RENAMED
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|