verifiers 0.2.1.dev51__tar.gz → 0.2.1.dev53__tar.gz
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- {verifiers-0.2.1.dev51 → verifiers-0.2.1.dev53}/PKG-INFO +1 -1
- {verifiers-0.2.1.dev51 → verifiers-0.2.1.dev53}/pyproject.toml +1 -3
- {verifiers-0.2.1.dev51 → verifiers-0.2.1.dev53}/tests/test_browser_env.py +0 -92
- {verifiers-0.2.1.dev51 → verifiers-0.2.1.dev53}/tests/test_install_utils.py +1 -1
- {verifiers-0.2.1.dev51 → verifiers-0.2.1.dev53}/tests/v1/test_envs.py +4 -6
- {verifiers-0.2.1.dev51 → verifiers-0.2.1.dev53}/verifiers/envs/integrations/browser_env/README.md +0 -13
- {verifiers-0.2.1.dev51 → verifiers-0.2.1.dev53}/verifiers/scripts/install.py +6 -6
- verifiers-0.2.1.dev51/tests/test_envs.py +0 -195
- verifiers-0.2.1.dev51/tests/test_wordle_env.py +0 -22
- verifiers-0.2.1.dev51/verifiers/envs/experimental/composable/tasksets/search/README.md +0 -42
- verifiers-0.2.1.dev51/verifiers/envs/experimental/composable/tasksets/search/__init__.py +0 -15
- verifiers-0.2.1.dev51/verifiers/envs/experimental/composable/tasksets/search/openseeker/README.md +0 -46
- verifiers-0.2.1.dev51/verifiers/envs/experimental/composable/tasksets/search/openseeker/__init__.py +0 -5
- verifiers-0.2.1.dev51/verifiers/envs/experimental/composable/tasksets/search/openseeker/taskset.py +0 -564
- verifiers-0.2.1.dev51/verifiers/envs/experimental/composable/tasksets/search/quest/README.md +0 -66
- verifiers-0.2.1.dev51/verifiers/envs/experimental/composable/tasksets/search/quest/__init__.py +0 -5
- verifiers-0.2.1.dev51/verifiers/envs/experimental/composable/tasksets/search/quest/obj_task_eval/__init__.py +0 -17
- verifiers-0.2.1.dev51/verifiers/envs/experimental/composable/tasksets/search/quest/obj_task_eval/api_tools/__init__.py +0 -5
- verifiers-0.2.1.dev51/verifiers/envs/experimental/composable/tasksets/search/quest/obj_task_eval/api_tools/tool_pdf.py +0 -284
- verifiers-0.2.1.dev51/verifiers/envs/experimental/composable/tasksets/search/quest/obj_task_eval/eval_toolkit.py +0 -1119
- verifiers-0.2.1.dev51/verifiers/envs/experimental/composable/tasksets/search/quest/obj_task_eval/evaluator.py +0 -1271
- verifiers-0.2.1.dev51/verifiers/envs/experimental/composable/tasksets/search/quest/obj_task_eval/llm_client/__init__.py +0 -5
- verifiers-0.2.1.dev51/verifiers/envs/experimental/composable/tasksets/search/quest/obj_task_eval/llm_client/base_client.py +0 -15
- verifiers-0.2.1.dev51/verifiers/envs/experimental/composable/tasksets/search/quest/obj_task_eval/prompts/__init__.py +0 -4
- verifiers-0.2.1.dev51/verifiers/envs/experimental/composable/tasksets/search/quest/obj_task_eval/prompts/cache_prompts.py +0 -15
- verifiers-0.2.1.dev51/verifiers/envs/experimental/composable/tasksets/search/quest/obj_task_eval/utils/__init__.py +0 -7
- verifiers-0.2.1.dev51/verifiers/envs/experimental/composable/tasksets/search/quest/obj_task_eval/utils/cache_filesys.py +0 -45
- verifiers-0.2.1.dev51/verifiers/envs/experimental/composable/tasksets/search/quest/obj_task_eval/utils/load_eval_script.py +0 -107
- verifiers-0.2.1.dev51/verifiers/envs/experimental/composable/tasksets/search/quest/obj_task_eval/utils/misc.py +0 -106
- verifiers-0.2.1.dev51/verifiers/envs/experimental/composable/tasksets/search/quest/obj_task_eval/utils/tool_visit.py +0 -69
- verifiers-0.2.1.dev51/verifiers/envs/experimental/composable/tasksets/search/quest/obj_task_eval/utils/url_tools.py +0 -27
- verifiers-0.2.1.dev51/verifiers/envs/experimental/composable/tasksets/search/quest/obj_task_eval/verification_tree.py +0 -153
- verifiers-0.2.1.dev51/verifiers/envs/experimental/composable/tasksets/search/quest/open_ended.py +0 -329
- verifiers-0.2.1.dev51/verifiers/envs/experimental/composable/tasksets/search/quest/taskset.py +0 -763
- verifiers-0.2.1.dev51/verifiers/envs/experimental/composable/tasksets/search/redsearcher/README.md +0 -38
- verifiers-0.2.1.dev51/verifiers/envs/experimental/composable/tasksets/search/redsearcher/__init__.py +0 -5
- verifiers-0.2.1.dev51/verifiers/envs/experimental/composable/tasksets/search/redsearcher/taskset.py +0 -594
- verifiers-0.2.1.dev51/verifiers/envs/experimental/composable/tasksets/search/search_tasksets.py +0 -46
- {verifiers-0.2.1.dev51 → verifiers-0.2.1.dev53}/.gitignore +0 -0
- {verifiers-0.2.1.dev51 → verifiers-0.2.1.dev53}/LICENSE +0 -0
- {verifiers-0.2.1.dev51 → verifiers-0.2.1.dev53}/README.md +0 -0
- {verifiers-0.2.1.dev51 → verifiers-0.2.1.dev53}/tests/AGENTS.md +0 -0
- {verifiers-0.2.1.dev51 → verifiers-0.2.1.dev53}/tests/__init__.py +0 -0
- {verifiers-0.2.1.dev51 → verifiers-0.2.1.dev53}/tests/conftest.py +0 -0
- {verifiers-0.2.1.dev51 → verifiers-0.2.1.dev53}/tests/test_build_script.py +0 -0
- {verifiers-0.2.1.dev51 → verifiers-0.2.1.dev53}/tests/test_cli_agent_env.py +0 -0
- {verifiers-0.2.1.dev51 → verifiers-0.2.1.dev53}/tests/test_client_auth_errors.py +0 -0
- {verifiers-0.2.1.dev51 → verifiers-0.2.1.dev53}/tests/test_client_config.py +0 -0
- {verifiers-0.2.1.dev51 → verifiers-0.2.1.dev53}/tests/test_client_multimodal_types.py +0 -0
- {verifiers-0.2.1.dev51 → verifiers-0.2.1.dev53}/tests/test_composable_env.py +0 -0
- {verifiers-0.2.1.dev51 → verifiers-0.2.1.dev53}/tests/test_context_token_metrics.py +0 -0
- {verifiers-0.2.1.dev51 → verifiers-0.2.1.dev53}/tests/test_decorator_ranks.py +0 -0
- {verifiers-0.2.1.dev51 → verifiers-0.2.1.dev53}/tests/test_endpoint_registry.py +0 -0
- {verifiers-0.2.1.dev51 → verifiers-0.2.1.dev53}/tests/test_env_group.py +0 -0
- {verifiers-0.2.1.dev51 → verifiers-0.2.1.dev53}/tests/test_env_server.py +0 -0
- {verifiers-0.2.1.dev51 → verifiers-0.2.1.dev53}/tests/test_environment.py +0 -0
- {verifiers-0.2.1.dev51 → verifiers-0.2.1.dev53}/tests/test_environment_extra.py +0 -0
- {verifiers-0.2.1.dev51 → verifiers-0.2.1.dev53}/tests/test_error_chain.py +0 -0
- {verifiers-0.2.1.dev51 → verifiers-0.2.1.dev53}/tests/test_eval_display.py +0 -0
- {verifiers-0.2.1.dev51 → verifiers-0.2.1.dev53}/tests/test_eval_utils.py +0 -0
- {verifiers-0.2.1.dev51 → verifiers-0.2.1.dev53}/tests/test_gepa_cli.py +0 -0
- {verifiers-0.2.1.dev51 → verifiers-0.2.1.dev53}/tests/test_gepa_utils.py +0 -0
- {verifiers-0.2.1.dev51 → verifiers-0.2.1.dev53}/tests/test_gym_env.py +0 -0
- {verifiers-0.2.1.dev51 → verifiers-0.2.1.dev53}/tests/test_harbor_env_mcp.py +0 -0
- {verifiers-0.2.1.dev51 → verifiers-0.2.1.dev53}/tests/test_imports.py +0 -0
- {verifiers-0.2.1.dev51 → verifiers-0.2.1.dev53}/tests/test_init_script.py +0 -0
- {verifiers-0.2.1.dev51 → verifiers-0.2.1.dev53}/tests/test_interception_utils.py +0 -0
- {verifiers-0.2.1.dev51 → verifiers-0.2.1.dev53}/tests/test_logging.py +0 -0
- {verifiers-0.2.1.dev51 → verifiers-0.2.1.dev53}/tests/test_math_rubric.py +0 -0
- {verifiers-0.2.1.dev51 → verifiers-0.2.1.dev53}/tests/test_maybe_think_parser.py +0 -0
- {verifiers-0.2.1.dev51 → verifiers-0.2.1.dev53}/tests/test_message_utils.py +0 -0
- {verifiers-0.2.1.dev51 → verifiers-0.2.1.dev53}/tests/test_message_utils_multimodal.py +0 -0
- {verifiers-0.2.1.dev51 → verifiers-0.2.1.dev53}/tests/test_multiturn_env.py +0 -0
- {verifiers-0.2.1.dev51 → verifiers-0.2.1.dev53}/tests/test_nemorl_client.py +0 -0
- {verifiers-0.2.1.dev51 → verifiers-0.2.1.dev53}/tests/test_openai_chat_completions_token_client.py +0 -0
- {verifiers-0.2.1.dev51 → verifiers-0.2.1.dev53}/tests/test_openai_responses_client.py +0 -0
- {verifiers-0.2.1.dev51 → verifiers-0.2.1.dev53}/tests/test_opencode_rlm_env.py +0 -0
- {verifiers-0.2.1.dev51 → verifiers-0.2.1.dev53}/tests/test_openenv_client.py +0 -0
- {verifiers-0.2.1.dev51 → verifiers-0.2.1.dev53}/tests/test_parser.py +0 -0
- {verifiers-0.2.1.dev51 → verifiers-0.2.1.dev53}/tests/test_path_utils.py +0 -0
- {verifiers-0.2.1.dev51 → verifiers-0.2.1.dev53}/tests/test_per_turn_timing.py +0 -0
- {verifiers-0.2.1.dev51 → verifiers-0.2.1.dev53}/tests/test_pricing_utils.py +0 -0
- {verifiers-0.2.1.dev51 → verifiers-0.2.1.dev53}/tests/test_prime_plugin.py +0 -0
- {verifiers-0.2.1.dev51 → verifiers-0.2.1.dev53}/tests/test_renderer_client.py +0 -0
- {verifiers-0.2.1.dev51 → verifiers-0.2.1.dev53}/tests/test_renderer_e2e.py +0 -0
- {verifiers-0.2.1.dev51 → verifiers-0.2.1.dev53}/tests/test_rlm_composable_env.py +0 -0
- {verifiers-0.2.1.dev51 → verifiers-0.2.1.dev53}/tests/test_rubric.py +0 -0
- {verifiers-0.2.1.dev51 → verifiers-0.2.1.dev53}/tests/test_rubric_group.py +0 -0
- {verifiers-0.2.1.dev51 → verifiers-0.2.1.dev53}/tests/test_sandbox_debug_env.py +0 -0
- {verifiers-0.2.1.dev51 → verifiers-0.2.1.dev53}/tests/test_sandbox_env.py +0 -0
- {verifiers-0.2.1.dev51 → verifiers-0.2.1.dev53}/tests/test_sandbox_mixin.py +0 -0
- {verifiers-0.2.1.dev51 → verifiers-0.2.1.dev53}/tests/test_save_utils.py +0 -0
- {verifiers-0.2.1.dev51 → verifiers-0.2.1.dev53}/tests/test_setup_script.py +0 -0
- {verifiers-0.2.1.dev51 → verifiers-0.2.1.dev53}/tests/test_singleturn_env.py +0 -0
- {verifiers-0.2.1.dev51 → verifiers-0.2.1.dev53}/tests/test_stateful_tool_env.py +0 -0
- {verifiers-0.2.1.dev51 → verifiers-0.2.1.dev53}/tests/test_think_parser.py +0 -0
- {verifiers-0.2.1.dev51 → verifiers-0.2.1.dev53}/tests/test_tool_env.py +0 -0
- {verifiers-0.2.1.dev51 → verifiers-0.2.1.dev53}/tests/test_tool_utils.py +0 -0
- {verifiers-0.2.1.dev51 → verifiers-0.2.1.dev53}/tests/test_trajectory_processing.py +0 -0
- {verifiers-0.2.1.dev51 → verifiers-0.2.1.dev53}/tests/test_tui_info_formatting.py +0 -0
- {verifiers-0.2.1.dev51 → verifiers-0.2.1.dev53}/tests/test_types.py +0 -0
- {verifiers-0.2.1.dev51 → verifiers-0.2.1.dev53}/tests/test_xml_parser.py +0 -0
- {verifiers-0.2.1.dev51 → verifiers-0.2.1.dev53}/tests/v1/conftest.py +0 -0
- {verifiers-0.2.1.dev51 → verifiers-0.2.1.dev53}/tests/v1/fixtures/counter_tool_v1.py +0 -0
- {verifiers-0.2.1.dev51 → verifiers-0.2.1.dev53}/tests/v1/fixtures/echo_agentic_v1.py +0 -0
- {verifiers-0.2.1.dev51 → verifiers-0.2.1.dev53}/tests/v1/fixtures/echo_multi_v0.py +0 -0
- {verifiers-0.2.1.dev51 → verifiers-0.2.1.dev53}/tests/v1/fixtures/echo_tool_v1.py +0 -0
- {verifiers-0.2.1.dev51 → verifiers-0.2.1.dev53}/tests/v1/fixtures/echo_user_sim_v1.py +0 -0
- {verifiers-0.2.1.dev51 → verifiers-0.2.1.dev53}/tests/v1/fixtures/echo_v0.py +0 -0
- {verifiers-0.2.1.dev51 → verifiers-0.2.1.dev53}/tests/v1/fixtures/echo_v1.py +0 -0
- {verifiers-0.2.1.dev51 → verifiers-0.2.1.dev53}/tests/v1/fixtures/pyproject.toml +0 -0
- {verifiers-0.2.1.dev51 → verifiers-0.2.1.dev53}/tests/v1/fixtures/tool_response_image_v1.py +0 -0
- {verifiers-0.2.1.dev51 → verifiers-0.2.1.dev53}/tests/v1/test_color_codeword_tasks.py +0 -0
- {verifiers-0.2.1.dev51 → verifiers-0.2.1.dev53}/tests/v1/test_configs.py +0 -0
- {verifiers-0.2.1.dev51 → verifiers-0.2.1.dev53}/tests/v1/test_e2e.py +0 -0
- {verifiers-0.2.1.dev51 → verifiers-0.2.1.dev53}/tests/v1/test_graph.py +0 -0
- {verifiers-0.2.1.dev51 → verifiers-0.2.1.dev53}/tests/v1/test_judges.py +0 -0
- {verifiers-0.2.1.dev51 → verifiers-0.2.1.dev53}/tests/v1/test_legacy.py +0 -0
- {verifiers-0.2.1.dev51 → verifiers-0.2.1.dev53}/tests/v1/test_scoring.py +0 -0
- {verifiers-0.2.1.dev51 → verifiers-0.2.1.dev53}/tests/v1/test_taskset.py +0 -0
- {verifiers-0.2.1.dev51 → verifiers-0.2.1.dev53}/tests/v1/test_trace.py +0 -0
- {verifiers-0.2.1.dev51 → verifiers-0.2.1.dev53}/verifiers/__init__.py +0 -0
- {verifiers-0.2.1.dev51 → verifiers-0.2.1.dev53}/verifiers/cli/__init__.py +0 -0
- {verifiers-0.2.1.dev51 → verifiers-0.2.1.dev53}/verifiers/cli/commands/__init__.py +0 -0
- {verifiers-0.2.1.dev51 → verifiers-0.2.1.dev53}/verifiers/cli/commands/build.py +0 -0
- {verifiers-0.2.1.dev51 → verifiers-0.2.1.dev53}/verifiers/cli/commands/eval.py +0 -0
- {verifiers-0.2.1.dev51 → verifiers-0.2.1.dev53}/verifiers/cli/commands/gepa.py +0 -0
- {verifiers-0.2.1.dev51 → verifiers-0.2.1.dev53}/verifiers/cli/commands/init.py +0 -0
- {verifiers-0.2.1.dev51 → verifiers-0.2.1.dev53}/verifiers/cli/commands/install.py +0 -0
- {verifiers-0.2.1.dev51 → verifiers-0.2.1.dev53}/verifiers/cli/commands/setup.py +0 -0
- {verifiers-0.2.1.dev51 → verifiers-0.2.1.dev53}/verifiers/cli/plugins/__init__.py +0 -0
- {verifiers-0.2.1.dev51 → verifiers-0.2.1.dev53}/verifiers/cli/plugins/prime.py +0 -0
- {verifiers-0.2.1.dev51 → verifiers-0.2.1.dev53}/verifiers/cli/tui.py +0 -0
- {verifiers-0.2.1.dev51 → verifiers-0.2.1.dev53}/verifiers/clients/__init__.py +0 -0
- {verifiers-0.2.1.dev51 → verifiers-0.2.1.dev53}/verifiers/clients/anthropic_messages_client.py +0 -0
- {verifiers-0.2.1.dev51 → verifiers-0.2.1.dev53}/verifiers/clients/client.py +0 -0
- {verifiers-0.2.1.dev51 → verifiers-0.2.1.dev53}/verifiers/clients/nemorl_chat_completions_client.py +0 -0
- {verifiers-0.2.1.dev51 → verifiers-0.2.1.dev53}/verifiers/clients/openai_chat_completions_client.py +0 -0
- {verifiers-0.2.1.dev51 → verifiers-0.2.1.dev53}/verifiers/clients/openai_chat_completions_token_client.py +0 -0
- {verifiers-0.2.1.dev51 → verifiers-0.2.1.dev53}/verifiers/clients/openai_completions_client.py +0 -0
- {verifiers-0.2.1.dev51 → verifiers-0.2.1.dev53}/verifiers/clients/openai_responses_client.py +0 -0
- {verifiers-0.2.1.dev51 → verifiers-0.2.1.dev53}/verifiers/clients/renderer_client.py +0 -0
- {verifiers-0.2.1.dev51 → verifiers-0.2.1.dev53}/verifiers/decorators.py +0 -0
- {verifiers-0.2.1.dev51 → verifiers-0.2.1.dev53}/verifiers/envs/AGENTS.md +0 -0
- {verifiers-0.2.1.dev51 → verifiers-0.2.1.dev53}/verifiers/envs/__init__.py +0 -0
- {verifiers-0.2.1.dev51 → verifiers-0.2.1.dev53}/verifiers/envs/env_group.py +0 -0
- {verifiers-0.2.1.dev51 → verifiers-0.2.1.dev53}/verifiers/envs/environment.py +0 -0
- {verifiers-0.2.1.dev51 → verifiers-0.2.1.dev53}/verifiers/envs/experimental/README.md +0 -0
- {verifiers-0.2.1.dev51 → verifiers-0.2.1.dev53}/verifiers/envs/experimental/__init__.py +0 -0
- {verifiers-0.2.1.dev51 → verifiers-0.2.1.dev53}/verifiers/envs/experimental/cli_agent_env.py +0 -0
- {verifiers-0.2.1.dev51 → verifiers-0.2.1.dev53}/verifiers/envs/experimental/composable/README.md +0 -0
- {verifiers-0.2.1.dev51 → verifiers-0.2.1.dev53}/verifiers/envs/experimental/composable/__init__.py +0 -0
- {verifiers-0.2.1.dev51 → verifiers-0.2.1.dev53}/verifiers/envs/experimental/composable/_filter.py +0 -0
- {verifiers-0.2.1.dev51 → verifiers-0.2.1.dev53}/verifiers/envs/experimental/composable/composable_env.py +0 -0
- {verifiers-0.2.1.dev51 → verifiers-0.2.1.dev53}/verifiers/envs/experimental/composable/harness.py +0 -0
- {verifiers-0.2.1.dev51 → verifiers-0.2.1.dev53}/verifiers/envs/experimental/composable/harnesses/__init__.py +0 -0
- {verifiers-0.2.1.dev51 → verifiers-0.2.1.dev53}/verifiers/envs/experimental/composable/harnesses/mini_swe_agent.py +0 -0
- {verifiers-0.2.1.dev51 → verifiers-0.2.1.dev53}/verifiers/envs/experimental/composable/harnesses/opencode.py +0 -0
- {verifiers-0.2.1.dev51 → verifiers-0.2.1.dev53}/verifiers/envs/experimental/composable/harnesses/prompt.txt +0 -0
- {verifiers-0.2.1.dev51 → verifiers-0.2.1.dev53}/verifiers/envs/experimental/composable/harnesses/rlm.py +0 -0
- {verifiers-0.2.1.dev51 → verifiers-0.2.1.dev53}/verifiers/envs/experimental/composable/sandbox_debug_env.py +0 -0
- {verifiers-0.2.1.dev51 → verifiers-0.2.1.dev53}/verifiers/envs/experimental/composable/swe_debug_env.py +0 -0
- {verifiers-0.2.1.dev51 → verifiers-0.2.1.dev53}/verifiers/envs/experimental/composable/task.py +0 -0
- {verifiers-0.2.1.dev51 → verifiers-0.2.1.dev53}/verifiers/envs/experimental/composable/tasksets/__init__.py +0 -0
- {verifiers-0.2.1.dev51 → verifiers-0.2.1.dev53}/verifiers/envs/experimental/composable/tasksets/cp/__init__.py +0 -0
- {verifiers-0.2.1.dev51 → verifiers-0.2.1.dev53}/verifiers/envs/experimental/composable/tasksets/cp/cp_task.py +0 -0
- {verifiers-0.2.1.dev51 → verifiers-0.2.1.dev53}/verifiers/envs/experimental/composable/tasksets/cp/test_utils.py +0 -0
- {verifiers-0.2.1.dev51 → verifiers-0.2.1.dev53}/verifiers/envs/experimental/composable/tasksets/harbor/__init__.py +0 -0
- {verifiers-0.2.1.dev51 → verifiers-0.2.1.dev53}/verifiers/envs/experimental/composable/tasksets/harbor/cli_gym.py +0 -0
- {verifiers-0.2.1.dev51 → verifiers-0.2.1.dev53}/verifiers/envs/experimental/composable/tasksets/harbor/harbor.py +0 -0
- {verifiers-0.2.1.dev51 → verifiers-0.2.1.dev53}/verifiers/envs/experimental/composable/tasksets/harbor/terminal_lego.py +0 -0
- {verifiers-0.2.1.dev51 → verifiers-0.2.1.dev53}/verifiers/envs/experimental/composable/tasksets/math/__init__.py +0 -0
- {verifiers-0.2.1.dev51 → verifiers-0.2.1.dev53}/verifiers/envs/experimental/composable/tasksets/math/math_task.py +0 -0
- {verifiers-0.2.1.dev51 → verifiers-0.2.1.dev53}/verifiers/envs/experimental/composable/tasksets/swe/README.md +0 -0
- {verifiers-0.2.1.dev51 → verifiers-0.2.1.dev53}/verifiers/envs/experimental/composable/tasksets/swe/__init__.py +0 -0
- {verifiers-0.2.1.dev51 → verifiers-0.2.1.dev53}/verifiers/envs/experimental/composable/tasksets/swe/multi_swe/__init__.py +0 -0
- {verifiers-0.2.1.dev51 → verifiers-0.2.1.dev53}/verifiers/envs/experimental/composable/tasksets/swe/multi_swe/extract_fix_patch.sh +0 -0
- {verifiers-0.2.1.dev51 → verifiers-0.2.1.dev53}/verifiers/envs/experimental/composable/tasksets/swe/multi_swe/taskset.py +0 -0
- {verifiers-0.2.1.dev51 → verifiers-0.2.1.dev53}/verifiers/envs/experimental/composable/tasksets/swe/openswe/__init__.py +0 -0
- {verifiers-0.2.1.dev51 → verifiers-0.2.1.dev53}/verifiers/envs/experimental/composable/tasksets/swe/openswe/taskset.py +0 -0
- {verifiers-0.2.1.dev51 → verifiers-0.2.1.dev53}/verifiers/envs/experimental/composable/tasksets/swe/r2e_gym/__init__.py +0 -0
- {verifiers-0.2.1.dev51 → verifiers-0.2.1.dev53}/verifiers/envs/experimental/composable/tasksets/swe/r2e_gym/log_parser.py +0 -0
- {verifiers-0.2.1.dev51 → verifiers-0.2.1.dev53}/verifiers/envs/experimental/composable/tasksets/swe/r2e_gym/taskset.py +0 -0
- {verifiers-0.2.1.dev51 → verifiers-0.2.1.dev53}/verifiers/envs/experimental/composable/tasksets/swe/scale_swe/__init__.py +0 -0
- {verifiers-0.2.1.dev51 → verifiers-0.2.1.dev53}/verifiers/envs/experimental/composable/tasksets/swe/scale_swe/taskset.py +0 -0
- {verifiers-0.2.1.dev51 → verifiers-0.2.1.dev53}/verifiers/envs/experimental/composable/tasksets/swe/shared/__init__.py +0 -0
- {verifiers-0.2.1.dev51 → verifiers-0.2.1.dev53}/verifiers/envs/experimental/composable/tasksets/swe/shared/test_patch.py +0 -0
- {verifiers-0.2.1.dev51 → verifiers-0.2.1.dev53}/verifiers/envs/experimental/composable/tasksets/swe/swe_bench/__init__.py +0 -0
- {verifiers-0.2.1.dev51 → verifiers-0.2.1.dev53}/verifiers/envs/experimental/composable/tasksets/swe/swe_bench/taskset.py +0 -0
- {verifiers-0.2.1.dev51 → verifiers-0.2.1.dev53}/verifiers/envs/experimental/composable/tasksets/swe/swe_lego/__init__.py +0 -0
- {verifiers-0.2.1.dev51 → verifiers-0.2.1.dev53}/verifiers/envs/experimental/composable/tasksets/swe/swe_lego/taskset.py +0 -0
- {verifiers-0.2.1.dev51 → verifiers-0.2.1.dev53}/verifiers/envs/experimental/composable/tasksets/swe/swe_rebench_v2/__init__.py +0 -0
- {verifiers-0.2.1.dev51 → verifiers-0.2.1.dev53}/verifiers/envs/experimental/composable/tasksets/swe/swe_rebench_v2/log_parsers.py +0 -0
- {verifiers-0.2.1.dev51 → verifiers-0.2.1.dev53}/verifiers/envs/experimental/composable/tasksets/swe/swe_rebench_v2/taskset.py +0 -0
- {verifiers-0.2.1.dev51 → verifiers-0.2.1.dev53}/verifiers/envs/experimental/composable/tasksets/swe/swe_smith/__init__.py +0 -0
- {verifiers-0.2.1.dev51 → verifiers-0.2.1.dev53}/verifiers/envs/experimental/composable/tasksets/swe/swe_smith/taskset.py +0 -0
- {verifiers-0.2.1.dev51 → verifiers-0.2.1.dev53}/verifiers/envs/experimental/composable/tasksets/swe/swe_tasksets.py +0 -0
- {verifiers-0.2.1.dev51 → verifiers-0.2.1.dev53}/verifiers/envs/experimental/gym_env.py +0 -0
- {verifiers-0.2.1.dev51 → verifiers-0.2.1.dev53}/verifiers/envs/experimental/harbor_env/__init__.py +0 -0
- {verifiers-0.2.1.dev51 → verifiers-0.2.1.dev53}/verifiers/envs/experimental/harbor_env/env.py +0 -0
- {verifiers-0.2.1.dev51 → verifiers-0.2.1.dev53}/verifiers/envs/experimental/harbor_env/mcp.py +0 -0
- {verifiers-0.2.1.dev51 → verifiers-0.2.1.dev53}/verifiers/envs/experimental/mcp_env.py +0 -0
- {verifiers-0.2.1.dev51 → verifiers-0.2.1.dev53}/verifiers/envs/experimental/opencode_env.py +0 -0
- {verifiers-0.2.1.dev51 → verifiers-0.2.1.dev53}/verifiers/envs/experimental/opencode_qa_env.py +0 -0
- {verifiers-0.2.1.dev51 → verifiers-0.2.1.dev53}/verifiers/envs/experimental/opencode_rlm_env.py +0 -0
- {verifiers-0.2.1.dev51 → verifiers-0.2.1.dev53}/verifiers/envs/experimental/sandbox_mixin.py +0 -0
- {verifiers-0.2.1.dev51 → verifiers-0.2.1.dev53}/verifiers/envs/experimental/utils/__init__.py +0 -0
- {verifiers-0.2.1.dev51 → verifiers-0.2.1.dev53}/verifiers/envs/experimental/utils/file_locks.py +0 -0
- {verifiers-0.2.1.dev51 → verifiers-0.2.1.dev53}/verifiers/envs/experimental/utils/git_checkout_cache.py +0 -0
- {verifiers-0.2.1.dev51 → verifiers-0.2.1.dev53}/verifiers/envs/integrations/README.md +0 -0
- {verifiers-0.2.1.dev51 → verifiers-0.2.1.dev53}/verifiers/envs/integrations/__init__.py +0 -0
- {verifiers-0.2.1.dev51 → verifiers-0.2.1.dev53}/verifiers/envs/integrations/browser_env/__init__.py +0 -0
- {verifiers-0.2.1.dev51 → verifiers-0.2.1.dev53}/verifiers/envs/integrations/browser_env/browser_env.py +0 -0
- {verifiers-0.2.1.dev51 → verifiers-0.2.1.dev53}/verifiers/envs/integrations/browser_env/modes/__init__.py +0 -0
- {verifiers-0.2.1.dev51 → verifiers-0.2.1.dev53}/verifiers/envs/integrations/browser_env/modes/base.py +0 -0
- {verifiers-0.2.1.dev51 → verifiers-0.2.1.dev53}/verifiers/envs/integrations/browser_env/modes/cua_mode.py +0 -0
- {verifiers-0.2.1.dev51 → verifiers-0.2.1.dev53}/verifiers/envs/integrations/browser_env/modes/dom_mode.py +0 -0
- {verifiers-0.2.1.dev51 → verifiers-0.2.1.dev53}/verifiers/envs/integrations/openenv_env.py +0 -0
- {verifiers-0.2.1.dev51 → verifiers-0.2.1.dev53}/verifiers/envs/integrations/reasoninggym_env.py +0 -0
- {verifiers-0.2.1.dev51 → verifiers-0.2.1.dev53}/verifiers/envs/integrations/textarena_env.py +0 -0
- {verifiers-0.2.1.dev51 → verifiers-0.2.1.dev53}/verifiers/envs/multiturn_env.py +0 -0
- {verifiers-0.2.1.dev51 → verifiers-0.2.1.dev53}/verifiers/envs/python_env.py +0 -0
- {verifiers-0.2.1.dev51 → verifiers-0.2.1.dev53}/verifiers/envs/sandbox_env.py +0 -0
- {verifiers-0.2.1.dev51 → verifiers-0.2.1.dev53}/verifiers/envs/singleturn_env.py +0 -0
- {verifiers-0.2.1.dev51 → verifiers-0.2.1.dev53}/verifiers/envs/stateful_tool_env.py +0 -0
- {verifiers-0.2.1.dev51 → verifiers-0.2.1.dev53}/verifiers/envs/tool_env.py +0 -0
- {verifiers-0.2.1.dev51 → verifiers-0.2.1.dev53}/verifiers/errors.py +0 -0
- {verifiers-0.2.1.dev51 → verifiers-0.2.1.dev53}/verifiers/gepa/__init__.py +0 -0
- {verifiers-0.2.1.dev51 → verifiers-0.2.1.dev53}/verifiers/gepa/adapter.py +0 -0
- {verifiers-0.2.1.dev51 → verifiers-0.2.1.dev53}/verifiers/gepa/config.py +0 -0
- {verifiers-0.2.1.dev51 → verifiers-0.2.1.dev53}/verifiers/gepa/display.py +0 -0
- {verifiers-0.2.1.dev51 → verifiers-0.2.1.dev53}/verifiers/gepa/gepa_utils.py +0 -0
- {verifiers-0.2.1.dev51 → verifiers-0.2.1.dev53}/verifiers/parsers/__init__.py +0 -0
- {verifiers-0.2.1.dev51 → verifiers-0.2.1.dev53}/verifiers/parsers/maybe_think_parser.py +0 -0
- {verifiers-0.2.1.dev51 → verifiers-0.2.1.dev53}/verifiers/parsers/parser.py +0 -0
- {verifiers-0.2.1.dev51 → verifiers-0.2.1.dev53}/verifiers/parsers/think_parser.py +0 -0
- {verifiers-0.2.1.dev51 → verifiers-0.2.1.dev53}/verifiers/parsers/xml_parser.py +0 -0
- {verifiers-0.2.1.dev51 → verifiers-0.2.1.dev53}/verifiers/rubrics/__init__.py +0 -0
- {verifiers-0.2.1.dev51 → verifiers-0.2.1.dev53}/verifiers/rubrics/experimental/hybrid_math_rubric.py +0 -0
- {verifiers-0.2.1.dev51 → verifiers-0.2.1.dev53}/verifiers/rubrics/judge_rubric.py +0 -0
- {verifiers-0.2.1.dev51 → verifiers-0.2.1.dev53}/verifiers/rubrics/math_rubric.py +0 -0
- {verifiers-0.2.1.dev51 → verifiers-0.2.1.dev53}/verifiers/rubrics/rubric.py +0 -0
- {verifiers-0.2.1.dev51 → verifiers-0.2.1.dev53}/verifiers/rubrics/rubric_group.py +0 -0
- {verifiers-0.2.1.dev51 → verifiers-0.2.1.dev53}/verifiers/scripts/__init__.py +0 -0
- {verifiers-0.2.1.dev51 → verifiers-0.2.1.dev53}/verifiers/scripts/build.py +0 -0
- {verifiers-0.2.1.dev51 → verifiers-0.2.1.dev53}/verifiers/scripts/eval.py +0 -0
- {verifiers-0.2.1.dev51 → verifiers-0.2.1.dev53}/verifiers/scripts/gepa.py +0 -0
- {verifiers-0.2.1.dev51 → verifiers-0.2.1.dev53}/verifiers/scripts/init.py +0 -0
- {verifiers-0.2.1.dev51 → verifiers-0.2.1.dev53}/verifiers/scripts/setup.py +0 -0
- {verifiers-0.2.1.dev51 → verifiers-0.2.1.dev53}/verifiers/scripts/tui.py +0 -0
- {verifiers-0.2.1.dev51 → verifiers-0.2.1.dev53}/verifiers/serve/__init__.py +0 -0
- {verifiers-0.2.1.dev51 → verifiers-0.2.1.dev53}/verifiers/serve/client/env_client.py +0 -0
- {verifiers-0.2.1.dev51 → verifiers-0.2.1.dev53}/verifiers/serve/client/zmq_env_client.py +0 -0
- {verifiers-0.2.1.dev51 → verifiers-0.2.1.dev53}/verifiers/serve/server/__init__.py +0 -0
- {verifiers-0.2.1.dev51 → verifiers-0.2.1.dev53}/verifiers/serve/server/env_router.py +0 -0
- {verifiers-0.2.1.dev51 → verifiers-0.2.1.dev53}/verifiers/serve/server/env_server.py +0 -0
- {verifiers-0.2.1.dev51 → verifiers-0.2.1.dev53}/verifiers/serve/server/env_worker.py +0 -0
- {verifiers-0.2.1.dev51 → verifiers-0.2.1.dev53}/verifiers/serve/server/zmq_env_server.py +0 -0
- {verifiers-0.2.1.dev51 → verifiers-0.2.1.dev53}/verifiers/serve/types.py +0 -0
- {verifiers-0.2.1.dev51 → verifiers-0.2.1.dev53}/verifiers/types.py +0 -0
- {verifiers-0.2.1.dev51 → verifiers-0.2.1.dev53}/verifiers/utils/__init__.py +0 -0
- {verifiers-0.2.1.dev51 → verifiers-0.2.1.dev53}/verifiers/utils/async_utils.py +0 -0
- {verifiers-0.2.1.dev51 → verifiers-0.2.1.dev53}/verifiers/utils/client_utils.py +0 -0
- {verifiers-0.2.1.dev51 → verifiers-0.2.1.dev53}/verifiers/utils/config_utils.py +0 -0
- {verifiers-0.2.1.dev51 → verifiers-0.2.1.dev53}/verifiers/utils/data_utils.py +0 -0
- {verifiers-0.2.1.dev51 → verifiers-0.2.1.dev53}/verifiers/utils/display_utils.py +0 -0
- {verifiers-0.2.1.dev51 → verifiers-0.2.1.dev53}/verifiers/utils/env_config_utils.py +0 -0
- {verifiers-0.2.1.dev51 → verifiers-0.2.1.dev53}/verifiers/utils/env_utils.py +0 -0
- {verifiers-0.2.1.dev51 → verifiers-0.2.1.dev53}/verifiers/utils/error_utils.py +0 -0
- {verifiers-0.2.1.dev51 → verifiers-0.2.1.dev53}/verifiers/utils/eval_display.py +0 -0
- {verifiers-0.2.1.dev51 → verifiers-0.2.1.dev53}/verifiers/utils/eval_utils.py +0 -0
- {verifiers-0.2.1.dev51 → verifiers-0.2.1.dev53}/verifiers/utils/heartbeat.py +0 -0
- {verifiers-0.2.1.dev51 → verifiers-0.2.1.dev53}/verifiers/utils/import_utils.py +0 -0
- {verifiers-0.2.1.dev51 → verifiers-0.2.1.dev53}/verifiers/utils/install_utils.py +0 -0
- {verifiers-0.2.1.dev51 → verifiers-0.2.1.dev53}/verifiers/utils/interception_utils.py +0 -0
- {verifiers-0.2.1.dev51 → verifiers-0.2.1.dev53}/verifiers/utils/logging_utils.py +0 -0
- {verifiers-0.2.1.dev51 → verifiers-0.2.1.dev53}/verifiers/utils/message_utils.py +0 -0
- {verifiers-0.2.1.dev51 → verifiers-0.2.1.dev53}/verifiers/utils/metric_utils.py +0 -0
- {verifiers-0.2.1.dev51 → verifiers-0.2.1.dev53}/verifiers/utils/path_utils.py +0 -0
- {verifiers-0.2.1.dev51 → verifiers-0.2.1.dev53}/verifiers/utils/pricing_utils.py +0 -0
- {verifiers-0.2.1.dev51 → verifiers-0.2.1.dev53}/verifiers/utils/process_utils.py +0 -0
- {verifiers-0.2.1.dev51 → verifiers-0.2.1.dev53}/verifiers/utils/response_utils.py +0 -0
- {verifiers-0.2.1.dev51 → verifiers-0.2.1.dev53}/verifiers/utils/save_utils.py +0 -0
- {verifiers-0.2.1.dev51 → verifiers-0.2.1.dev53}/verifiers/utils/serve_utils.py +0 -0
- {verifiers-0.2.1.dev51 → verifiers-0.2.1.dev53}/verifiers/utils/thread_utils.py +0 -0
- {verifiers-0.2.1.dev51 → verifiers-0.2.1.dev53}/verifiers/utils/threaded_sandbox_client.py +0 -0
- {verifiers-0.2.1.dev51 → verifiers-0.2.1.dev53}/verifiers/utils/tool_utils.py +0 -0
- {verifiers-0.2.1.dev51 → verifiers-0.2.1.dev53}/verifiers/utils/usage_utils.py +0 -0
- {verifiers-0.2.1.dev51 → verifiers-0.2.1.dev53}/verifiers/utils/version_utils.py +0 -0
- {verifiers-0.2.1.dev51 → verifiers-0.2.1.dev53}/verifiers/v1/__init__.py +0 -0
- {verifiers-0.2.1.dev51 → verifiers-0.2.1.dev53}/verifiers/v1/cli/__init__.py +0 -0
- {verifiers-0.2.1.dev51 → verifiers-0.2.1.dev53}/verifiers/v1/cli/dashboard/__init__.py +0 -0
- {verifiers-0.2.1.dev51 → verifiers-0.2.1.dev53}/verifiers/v1/cli/dashboard/base.py +0 -0
- {verifiers-0.2.1.dev51 → verifiers-0.2.1.dev53}/verifiers/v1/cli/dashboard/eval.py +0 -0
- {verifiers-0.2.1.dev51 → verifiers-0.2.1.dev53}/verifiers/v1/cli/dashboard/replay.py +0 -0
- {verifiers-0.2.1.dev51 → verifiers-0.2.1.dev53}/verifiers/v1/cli/dashboard/validate.py +0 -0
- {verifiers-0.2.1.dev51 → verifiers-0.2.1.dev53}/verifiers/v1/cli/debug.py +0 -0
- {verifiers-0.2.1.dev51 → verifiers-0.2.1.dev53}/verifiers/v1/cli/eval/__init__.py +0 -0
- {verifiers-0.2.1.dev51 → verifiers-0.2.1.dev53}/verifiers/v1/cli/eval/main.py +0 -0
- {verifiers-0.2.1.dev51 → verifiers-0.2.1.dev53}/verifiers/v1/cli/eval/resume.py +0 -0
- {verifiers-0.2.1.dev51 → verifiers-0.2.1.dev53}/verifiers/v1/cli/eval/runner.py +0 -0
- {verifiers-0.2.1.dev51 → verifiers-0.2.1.dev53}/verifiers/v1/cli/gepa.py +0 -0
- {verifiers-0.2.1.dev51 → verifiers-0.2.1.dev53}/verifiers/v1/cli/init.py +0 -0
- {verifiers-0.2.1.dev51 → verifiers-0.2.1.dev53}/verifiers/v1/cli/output.py +0 -0
- {verifiers-0.2.1.dev51 → verifiers-0.2.1.dev53}/verifiers/v1/cli/replay.py +0 -0
- {verifiers-0.2.1.dev51 → verifiers-0.2.1.dev53}/verifiers/v1/cli/resolve.py +0 -0
- {verifiers-0.2.1.dev51 → verifiers-0.2.1.dev53}/verifiers/v1/cli/serve.py +0 -0
- {verifiers-0.2.1.dev51 → verifiers-0.2.1.dev53}/verifiers/v1/cli/validate.py +0 -0
- {verifiers-0.2.1.dev51 → verifiers-0.2.1.dev53}/verifiers/v1/clients/__init__.py +0 -0
- {verifiers-0.2.1.dev51 → verifiers-0.2.1.dev53}/verifiers/v1/clients/client.py +0 -0
- {verifiers-0.2.1.dev51 → verifiers-0.2.1.dev53}/verifiers/v1/clients/config.py +0 -0
- {verifiers-0.2.1.dev51 → verifiers-0.2.1.dev53}/verifiers/v1/clients/eval.py +0 -0
- {verifiers-0.2.1.dev51 → verifiers-0.2.1.dev53}/verifiers/v1/clients/train.py +0 -0
- {verifiers-0.2.1.dev51 → verifiers-0.2.1.dev53}/verifiers/v1/configs/__init__.py +0 -0
- {verifiers-0.2.1.dev51 → verifiers-0.2.1.dev53}/verifiers/v1/configs/debug.py +0 -0
- {verifiers-0.2.1.dev51 → verifiers-0.2.1.dev53}/verifiers/v1/configs/eval.py +0 -0
- {verifiers-0.2.1.dev51 → verifiers-0.2.1.dev53}/verifiers/v1/configs/init.py +0 -0
- {verifiers-0.2.1.dev51 → verifiers-0.2.1.dev53}/verifiers/v1/configs/replay.py +0 -0
- {verifiers-0.2.1.dev51 → verifiers-0.2.1.dev53}/verifiers/v1/configs/serve.py +0 -0
- {verifiers-0.2.1.dev51 → verifiers-0.2.1.dev53}/verifiers/v1/configs/validate.py +0 -0
- {verifiers-0.2.1.dev51 → verifiers-0.2.1.dev53}/verifiers/v1/decorators.py +0 -0
- {verifiers-0.2.1.dev51 → verifiers-0.2.1.dev53}/verifiers/v1/dialects/__init__.py +0 -0
- {verifiers-0.2.1.dev51 → verifiers-0.2.1.dev53}/verifiers/v1/dialects/anthropic.py +0 -0
- {verifiers-0.2.1.dev51 → verifiers-0.2.1.dev53}/verifiers/v1/dialects/base.py +0 -0
- {verifiers-0.2.1.dev51 → verifiers-0.2.1.dev53}/verifiers/v1/dialects/chat.py +0 -0
- {verifiers-0.2.1.dev51 → verifiers-0.2.1.dev53}/verifiers/v1/dialects/responses.py +0 -0
- {verifiers-0.2.1.dev51 → verifiers-0.2.1.dev53}/verifiers/v1/env.py +0 -0
- {verifiers-0.2.1.dev51 → verifiers-0.2.1.dev53}/verifiers/v1/episode.py +0 -0
- {verifiers-0.2.1.dev51 → verifiers-0.2.1.dev53}/verifiers/v1/errors.py +0 -0
- {verifiers-0.2.1.dev51 → verifiers-0.2.1.dev53}/verifiers/v1/gepa/__init__.py +0 -0
- {verifiers-0.2.1.dev51 → verifiers-0.2.1.dev53}/verifiers/v1/gepa/adapter.py +0 -0
- {verifiers-0.2.1.dev51 → verifiers-0.2.1.dev53}/verifiers/v1/gepa/config.py +0 -0
- {verifiers-0.2.1.dev51 → verifiers-0.2.1.dev53}/verifiers/v1/gepa/dataset.py +0 -0
- {verifiers-0.2.1.dev51 → verifiers-0.2.1.dev53}/verifiers/v1/gepa/reflection.py +0 -0
- {verifiers-0.2.1.dev51 → verifiers-0.2.1.dev53}/verifiers/v1/gepa/runner.py +0 -0
- {verifiers-0.2.1.dev51 → verifiers-0.2.1.dev53}/verifiers/v1/graph.py +0 -0
- {verifiers-0.2.1.dev51 → verifiers-0.2.1.dev53}/verifiers/v1/harness.py +0 -0
- {verifiers-0.2.1.dev51 → verifiers-0.2.1.dev53}/verifiers/v1/harnesses/__init__.py +0 -0
- {verifiers-0.2.1.dev51 → verifiers-0.2.1.dev53}/verifiers/v1/harnesses/claude_code/__init__.py +0 -0
- {verifiers-0.2.1.dev51 → verifiers-0.2.1.dev53}/verifiers/v1/harnesses/claude_code/harness.py +0 -0
- {verifiers-0.2.1.dev51 → verifiers-0.2.1.dev53}/verifiers/v1/harnesses/codex/__init__.py +0 -0
- {verifiers-0.2.1.dev51 → verifiers-0.2.1.dev53}/verifiers/v1/harnesses/codex/harness.py +0 -0
- {verifiers-0.2.1.dev51 → verifiers-0.2.1.dev53}/verifiers/v1/harnesses/default/__init__.py +0 -0
- {verifiers-0.2.1.dev51 → verifiers-0.2.1.dev53}/verifiers/v1/harnesses/default/harness.py +0 -0
- {verifiers-0.2.1.dev51 → verifiers-0.2.1.dev53}/verifiers/v1/harnesses/default/program.py +0 -0
- {verifiers-0.2.1.dev51 → verifiers-0.2.1.dev53}/verifiers/v1/harnesses/kimi_code/__init__.py +0 -0
- {verifiers-0.2.1.dev51 → verifiers-0.2.1.dev53}/verifiers/v1/harnesses/kimi_code/harness.py +0 -0
- {verifiers-0.2.1.dev51 → verifiers-0.2.1.dev53}/verifiers/v1/harnesses/mini_swe_agent/__init__.py +0 -0
- {verifiers-0.2.1.dev51 → verifiers-0.2.1.dev53}/verifiers/v1/harnesses/mini_swe_agent/harness.py +0 -0
- {verifiers-0.2.1.dev51 → verifiers-0.2.1.dev53}/verifiers/v1/harnesses/mini_swe_agent/program.py +0 -0
- {verifiers-0.2.1.dev51 → verifiers-0.2.1.dev53}/verifiers/v1/harnesses/null/__init__.py +0 -0
- {verifiers-0.2.1.dev51 → verifiers-0.2.1.dev53}/verifiers/v1/harnesses/null/harness.py +0 -0
- {verifiers-0.2.1.dev51 → verifiers-0.2.1.dev53}/verifiers/v1/harnesses/null/program.py +0 -0
- {verifiers-0.2.1.dev51 → verifiers-0.2.1.dev53}/verifiers/v1/harnesses/pi/__init__.py +0 -0
- {verifiers-0.2.1.dev51 → verifiers-0.2.1.dev53}/verifiers/v1/harnesses/pi/harness.py +0 -0
- {verifiers-0.2.1.dev51 → verifiers-0.2.1.dev53}/verifiers/v1/harnesses/rlm/__init__.py +0 -0
- {verifiers-0.2.1.dev51 → verifiers-0.2.1.dev53}/verifiers/v1/harnesses/rlm/harness.py +0 -0
- {verifiers-0.2.1.dev51 → verifiers-0.2.1.dev53}/verifiers/v1/harnesses/terminus_2/__init__.py +0 -0
- {verifiers-0.2.1.dev51 → verifiers-0.2.1.dev53}/verifiers/v1/harnesses/terminus_2/harness.py +0 -0
- {verifiers-0.2.1.dev51 → verifiers-0.2.1.dev53}/verifiers/v1/harnesses/terminus_2/program.py +0 -0
- {verifiers-0.2.1.dev51 → verifiers-0.2.1.dev53}/verifiers/v1/interception/__init__.py +0 -0
- {verifiers-0.2.1.dev51 → verifiers-0.2.1.dev53}/verifiers/v1/interception/base.py +0 -0
- {verifiers-0.2.1.dev51 → verifiers-0.2.1.dev53}/verifiers/v1/interception/pool.py +0 -0
- {verifiers-0.2.1.dev51 → verifiers-0.2.1.dev53}/verifiers/v1/interception/server.py +0 -0
- {verifiers-0.2.1.dev51 → verifiers-0.2.1.dev53}/verifiers/v1/interception/tunnel/__init__.py +0 -0
- {verifiers-0.2.1.dev51 → verifiers-0.2.1.dev53}/verifiers/v1/interception/tunnel/base.py +0 -0
- {verifiers-0.2.1.dev51 → verifiers-0.2.1.dev53}/verifiers/v1/interception/tunnel/custom.py +0 -0
- {verifiers-0.2.1.dev51 → verifiers-0.2.1.dev53}/verifiers/v1/interception/tunnel/prime.py +0 -0
- {verifiers-0.2.1.dev51 → verifiers-0.2.1.dev53}/verifiers/v1/judge.py +0 -0
- {verifiers-0.2.1.dev51 → verifiers-0.2.1.dev53}/verifiers/v1/judges/__init__.py +0 -0
- {verifiers-0.2.1.dev51 → verifiers-0.2.1.dev53}/verifiers/v1/judges/reference.py +0 -0
- {verifiers-0.2.1.dev51 → verifiers-0.2.1.dev53}/verifiers/v1/judges/reference.txt +0 -0
- {verifiers-0.2.1.dev51 → verifiers-0.2.1.dev53}/verifiers/v1/judges/rubric.py +0 -0
- {verifiers-0.2.1.dev51 → verifiers-0.2.1.dev53}/verifiers/v1/judges/rubric.txt +0 -0
- {verifiers-0.2.1.dev51 → verifiers-0.2.1.dev53}/verifiers/v1/legacy.py +0 -0
- {verifiers-0.2.1.dev51 → verifiers-0.2.1.dev53}/verifiers/v1/loaders.py +0 -0
- {verifiers-0.2.1.dev51 → verifiers-0.2.1.dev53}/verifiers/v1/mcp/__init__.py +0 -0
- {verifiers-0.2.1.dev51 → verifiers-0.2.1.dev53}/verifiers/v1/mcp/launch.py +0 -0
- {verifiers-0.2.1.dev51 → verifiers-0.2.1.dev53}/verifiers/v1/mcp/server.py +0 -0
- {verifiers-0.2.1.dev51 → verifiers-0.2.1.dev53}/verifiers/v1/mcp/toolset.py +0 -0
- {verifiers-0.2.1.dev51 → verifiers-0.2.1.dev53}/verifiers/v1/mcp/user.py +0 -0
- {verifiers-0.2.1.dev51 → verifiers-0.2.1.dev53}/verifiers/v1/push.py +0 -0
- {verifiers-0.2.1.dev51 → verifiers-0.2.1.dev53}/verifiers/v1/retries.py +0 -0
- {verifiers-0.2.1.dev51 → verifiers-0.2.1.dev53}/verifiers/v1/rollout.py +0 -0
- {verifiers-0.2.1.dev51 → verifiers-0.2.1.dev53}/verifiers/v1/runtimes/__init__.py +0 -0
- {verifiers-0.2.1.dev51 → verifiers-0.2.1.dev53}/verifiers/v1/runtimes/base.py +0 -0
- {verifiers-0.2.1.dev51 → verifiers-0.2.1.dev53}/verifiers/v1/runtimes/docker.py +0 -0
- {verifiers-0.2.1.dev51 → verifiers-0.2.1.dev53}/verifiers/v1/runtimes/limiters.py +0 -0
- {verifiers-0.2.1.dev51 → verifiers-0.2.1.dev53}/verifiers/v1/runtimes/modal.py +0 -0
- {verifiers-0.2.1.dev51 → verifiers-0.2.1.dev53}/verifiers/v1/runtimes/prime.py +0 -0
- {verifiers-0.2.1.dev51 → verifiers-0.2.1.dev53}/verifiers/v1/runtimes/subprocess.py +0 -0
- {verifiers-0.2.1.dev51 → verifiers-0.2.1.dev53}/verifiers/v1/scoring.py +0 -0
- {verifiers-0.2.1.dev51 → verifiers-0.2.1.dev53}/verifiers/v1/serve/__init__.py +0 -0
- {verifiers-0.2.1.dev51 → verifiers-0.2.1.dev53}/verifiers/v1/serve/client.py +0 -0
- {verifiers-0.2.1.dev51 → verifiers-0.2.1.dev53}/verifiers/v1/serve/pool.py +0 -0
- {verifiers-0.2.1.dev51 → verifiers-0.2.1.dev53}/verifiers/v1/serve/server.py +0 -0
- {verifiers-0.2.1.dev51 → verifiers-0.2.1.dev53}/verifiers/v1/serve/types.py +0 -0
- {verifiers-0.2.1.dev51 → verifiers-0.2.1.dev53}/verifiers/v1/session.py +0 -0
- {verifiers-0.2.1.dev51 → verifiers-0.2.1.dev53}/verifiers/v1/state.py +0 -0
- {verifiers-0.2.1.dev51 → verifiers-0.2.1.dev53}/verifiers/v1/task.py +0 -0
- {verifiers-0.2.1.dev51 → verifiers-0.2.1.dev53}/verifiers/v1/taskset.py +0 -0
- {verifiers-0.2.1.dev51 → verifiers-0.2.1.dev53}/verifiers/v1/tasksets/__init__.py +0 -0
- {verifiers-0.2.1.dev51 → verifiers-0.2.1.dev53}/verifiers/v1/tasksets/harbor/__init__.py +0 -0
- {verifiers-0.2.1.dev51 → verifiers-0.2.1.dev53}/verifiers/v1/tasksets/harbor/taskset.py +0 -0
- {verifiers-0.2.1.dev51 → verifiers-0.2.1.dev53}/verifiers/v1/tasksets/lean/__init__.py +0 -0
- {verifiers-0.2.1.dev51 → verifiers-0.2.1.dev53}/verifiers/v1/tasksets/lean/scoring.py +0 -0
- {verifiers-0.2.1.dev51 → verifiers-0.2.1.dev53}/verifiers/v1/tasksets/lean/taskset.py +0 -0
- {verifiers-0.2.1.dev51 → verifiers-0.2.1.dev53}/verifiers/v1/tasksets/textarena/__init__.py +0 -0
- {verifiers-0.2.1.dev51 → verifiers-0.2.1.dev53}/verifiers/v1/tasksets/textarena/taskset.py +0 -0
- {verifiers-0.2.1.dev51 → verifiers-0.2.1.dev53}/verifiers/v1/trace.py +0 -0
- {verifiers-0.2.1.dev51 → verifiers-0.2.1.dev53}/verifiers/v1/types.py +0 -0
- {verifiers-0.2.1.dev51 → verifiers-0.2.1.dev53}/verifiers/v1/utils/__init__.py +0 -0
- {verifiers-0.2.1.dev51 → verifiers-0.2.1.dev53}/verifiers/v1/utils/aio.py +0 -0
- {verifiers-0.2.1.dev51 → verifiers-0.2.1.dev53}/verifiers/v1/utils/format.py +0 -0
- {verifiers-0.2.1.dev51 → verifiers-0.2.1.dev53}/verifiers/v1/utils/generic.py +0 -0
- {verifiers-0.2.1.dev51 → verifiers-0.2.1.dev53}/verifiers/v1/utils/image.py +0 -0
- {verifiers-0.2.1.dev51 → verifiers-0.2.1.dev53}/verifiers/v1/utils/install.py +0 -0
- {verifiers-0.2.1.dev51 → verifiers-0.2.1.dev53}/verifiers/v1/utils/interrupt.py +0 -0
- {verifiers-0.2.1.dev51 → verifiers-0.2.1.dev53}/verifiers/v1/utils/logging.py +0 -0
- {verifiers-0.2.1.dev51 → verifiers-0.2.1.dev53}/verifiers/v1/utils/memory.py +0 -0
- {verifiers-0.2.1.dev51 → verifiers-0.2.1.dev53}/verifiers/v1/utils/sampling.py +0 -0
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
Metadata-Version: 2.4
|
|
2
2
|
Name: verifiers
|
|
3
|
-
Version: 0.2.1.
|
|
3
|
+
Version: 0.2.1.dev53
|
|
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
|
|
@@ -80,7 +80,7 @@ examples = [
|
|
|
80
80
|
"compact",
|
|
81
81
|
"gsm8k-v1", "glossary-v1", "deepwiki-v1", "wiki-search-v1", "code-golf-v1",
|
|
82
82
|
"reverse-text-v1", "color-codeword-v1",
|
|
83
|
-
"wordle-v1", "alphabet-sort-v1", "scratchpad-v1",
|
|
83
|
+
"wordle-v1", "alphabet-sort-v1", "scratchpad-v1",
|
|
84
84
|
]
|
|
85
85
|
|
|
86
86
|
[project.optional-dependencies]
|
|
@@ -143,12 +143,10 @@ wiki-search-v1 = { path = "environments/wiki_search_v1", editable = true }
|
|
|
143
143
|
gsm8k-v1 = { path = "environments/gsm8k_v1", editable = true }
|
|
144
144
|
code-golf-v1 = { path = "environments/code_golf_v1", editable = true }
|
|
145
145
|
reverse-text-v1 = { path = "environments/reverse_text_v1", editable = true }
|
|
146
|
-
reverse-text = { path = "environments/reverse_text", editable = true }
|
|
147
146
|
wordle-v1 = { path = "environments/wordle_v1", editable = true }
|
|
148
147
|
color-codeword-v1 = { path = "environments/color_codeword_v1", editable = true }
|
|
149
148
|
alphabet-sort-v1 = { path = "environments/alphabet_sort_v1", editable = true }
|
|
150
149
|
scratchpad-v1 = { path = "environments/scratchpad_v1", editable = true }
|
|
151
|
-
mmmu-v1 = { path = "environments/mmmu_v1", editable = true }
|
|
152
150
|
|
|
153
151
|
[tool.uv.exclude-newer-package]
|
|
154
152
|
# PrimeIntellect-published on PyPI (trusted publisher)
|
|
@@ -452,98 +452,6 @@ class TestDOMModeLLMConfig:
|
|
|
452
452
|
assert config is None
|
|
453
453
|
|
|
454
454
|
|
|
455
|
-
# ============================================================================
|
|
456
|
-
# Example Environment Tests
|
|
457
|
-
# ============================================================================
|
|
458
|
-
|
|
459
|
-
|
|
460
|
-
class TestExampleDatasets:
|
|
461
|
-
"""Tests for example environment datasets."""
|
|
462
|
-
|
|
463
|
-
def test_dom_example_dataset_structure(self):
|
|
464
|
-
"""Test DOM example dataset has correct structure."""
|
|
465
|
-
from environments.browser_dom_example.browser_dom_example import (
|
|
466
|
-
create_example_dataset,
|
|
467
|
-
)
|
|
468
|
-
|
|
469
|
-
dataset = create_example_dataset()
|
|
470
|
-
|
|
471
|
-
assert "question" in dataset.column_names
|
|
472
|
-
assert "answer" in dataset.column_names
|
|
473
|
-
assert "start_url" in dataset.column_names
|
|
474
|
-
assert "task_id" in dataset.column_names
|
|
475
|
-
assert len(dataset) >= 1
|
|
476
|
-
|
|
477
|
-
def test_cua_example_dataset_structure(self):
|
|
478
|
-
"""Test CUA example dataset has correct structure."""
|
|
479
|
-
from environments.browser_cua_example.browser_cua_example import (
|
|
480
|
-
create_example_dataset,
|
|
481
|
-
)
|
|
482
|
-
|
|
483
|
-
dataset = create_example_dataset()
|
|
484
|
-
|
|
485
|
-
assert "question" in dataset.column_names
|
|
486
|
-
assert "answer" in dataset.column_names
|
|
487
|
-
assert "start_url" in dataset.column_names
|
|
488
|
-
assert "task_id" in dataset.column_names
|
|
489
|
-
assert len(dataset) >= 1
|
|
490
|
-
|
|
491
|
-
|
|
492
|
-
class TestJudgeAnswer:
|
|
493
|
-
"""Tests for judge_answer reward function."""
|
|
494
|
-
|
|
495
|
-
@pytest.mark.asyncio
|
|
496
|
-
async def test_judge_answer_returns_1_for_yes(self):
|
|
497
|
-
"""Test that judge_answer returns 1.0 when judge says yes."""
|
|
498
|
-
from environments.browser_dom_example.browser_dom_example import judge_answer
|
|
499
|
-
|
|
500
|
-
async def mock_judge(prompt, completion, answer, state):
|
|
501
|
-
return "yes, the answer is correct"
|
|
502
|
-
|
|
503
|
-
result = await judge_answer(
|
|
504
|
-
judge=mock_judge,
|
|
505
|
-
prompt="What is 2+2?",
|
|
506
|
-
completion=[{"role": "assistant", "content": "The answer is 4"}],
|
|
507
|
-
answer="4",
|
|
508
|
-
state={},
|
|
509
|
-
)
|
|
510
|
-
assert result == 1.0
|
|
511
|
-
|
|
512
|
-
@pytest.mark.asyncio
|
|
513
|
-
async def test_judge_answer_returns_0_for_no(self):
|
|
514
|
-
"""Test that judge_answer returns 0.0 when judge says no."""
|
|
515
|
-
from environments.browser_dom_example.browser_dom_example import judge_answer
|
|
516
|
-
|
|
517
|
-
async def mock_judge(prompt, completion, answer, state):
|
|
518
|
-
return "no, the answer is incorrect"
|
|
519
|
-
|
|
520
|
-
result = await judge_answer(
|
|
521
|
-
judge=mock_judge,
|
|
522
|
-
prompt="What is 2+2?",
|
|
523
|
-
completion=[{"role": "assistant", "content": "The answer is 5"}],
|
|
524
|
-
answer="4",
|
|
525
|
-
state={},
|
|
526
|
-
)
|
|
527
|
-
assert result == 0.0
|
|
528
|
-
|
|
529
|
-
@pytest.mark.asyncio
|
|
530
|
-
async def test_judge_answer_case_insensitive(self):
|
|
531
|
-
"""Test that judge response check is case insensitive."""
|
|
532
|
-
from environments.browser_dom_example.browser_dom_example import judge_answer
|
|
533
|
-
|
|
534
|
-
async def mock_judge(prompt, completion, answer, state):
|
|
535
|
-
return "YES"
|
|
536
|
-
|
|
537
|
-
result = await judge_answer(
|
|
538
|
-
judge=mock_judge,
|
|
539
|
-
prompt="test",
|
|
540
|
-
completion="test",
|
|
541
|
-
answer="test",
|
|
542
|
-
state={},
|
|
543
|
-
)
|
|
544
|
-
assert result == 1.0
|
|
545
|
-
|
|
546
|
-
|
|
547
455
|
# ============================================================================
|
|
548
456
|
# Constants Tests
|
|
549
457
|
# ============================================================================
|
|
@@ -73,7 +73,7 @@ class TestIsHubEnv:
|
|
|
73
73
|
assert is_hub_env("gsm8k") is False
|
|
74
74
|
|
|
75
75
|
def test_local_env_relative_path(self):
|
|
76
|
-
assert is_hub_env("./environments/
|
|
76
|
+
assert is_hub_env("./environments/gsm8k_v1") is False
|
|
77
77
|
|
|
78
78
|
def test_local_env_absolute_path(self):
|
|
79
79
|
assert is_hub_env("/path/to/gsm8k") is False
|
|
@@ -1,10 +1,8 @@
|
|
|
1
|
-
"""Smoke-eval every
|
|
1
|
+
"""Smoke-eval every V1 example taskset in `environments/` through the `eval` CLI.
|
|
2
2
|
|
|
3
|
-
|
|
4
|
-
|
|
5
|
-
|
|
6
|
-
harness, not a taskset); SWE/container tasksets need a docker/prime runtime and are covered by
|
|
7
|
-
the dedicated v1 e2e tests instead.
|
|
3
|
+
Each `_v1` taskset runs with its required harness for one short, capped rollout, so a broken
|
|
4
|
+
example taskset fails CI. `compact` is excluded (it's a harness, not a taskset);
|
|
5
|
+
SWE/container tasksets need a docker/prime runtime and are covered by dedicated V1 e2e tests.
|
|
8
6
|
"""
|
|
9
7
|
|
|
10
8
|
import os
|
{verifiers-0.2.1.dev51 → verifiers-0.2.1.dev53}/verifiers/envs/integrations/browser_env/README.md
RENAMED
|
@@ -139,16 +139,3 @@ CUA execution options:
|
|
|
139
139
|
1. **Prebuilt image** (default): fastest startup
|
|
140
140
|
2. **Binary upload** (`use_prebuilt_image=False`): custom server workflows
|
|
141
141
|
3. **Manual local server** (`use_sandbox=False`): local development/debugging
|
|
142
|
-
|
|
143
|
-
## Example Environments
|
|
144
|
-
|
|
145
|
-
For complete reference implementations, see:
|
|
146
|
-
|
|
147
|
-
- **DOM example:** `environments/browser_dom_example/`
|
|
148
|
-
- `environments/browser_dom_example/browser_dom_example.py`
|
|
149
|
-
- `environments/browser_dom_example/README.md`
|
|
150
|
-
- **CUA example:** `environments/browser_cua_example/`
|
|
151
|
-
- `environments/browser_cua_example/browser_cua_example.py`
|
|
152
|
-
- `environments/browser_cua_example/README.md`
|
|
153
|
-
|
|
154
|
-
These examples show end-to-end `load_environment()` setup, evaluation commands, and recommended runtime flags.
|
|
@@ -17,9 +17,9 @@ Usage:
|
|
|
17
17
|
|
|
18
18
|
Examples:
|
|
19
19
|
vf-install primeintellect/gsm8k # Install from Hub
|
|
20
|
-
vf-install gsm8k
|
|
21
|
-
vf-install gsm8k -p /path/to/envs
|
|
22
|
-
vf-install gsm8k -r
|
|
20
|
+
vf-install gsm8k-v1 # Install from ./environments/gsm8k_v1
|
|
21
|
+
vf-install gsm8k-v1 -p /path/to/envs # Install from custom local path
|
|
22
|
+
vf-install gsm8k-v1 -r # Install from GitHub repo
|
|
23
23
|
"""
|
|
24
24
|
|
|
25
25
|
|
|
@@ -30,9 +30,9 @@ def main():
|
|
|
30
30
|
epilog="""
|
|
31
31
|
Examples:
|
|
32
32
|
vf-install primeintellect/gsm8k Install from Environments Hub
|
|
33
|
-
vf-install gsm8k
|
|
34
|
-
vf-install gsm8k -p /path/to/envs
|
|
35
|
-
vf-install gsm8k -r
|
|
33
|
+
vf-install gsm8k-v1 Install from ./environments/gsm8k_v1
|
|
34
|
+
vf-install gsm8k-v1 -p /path/to/envs Install from custom local path
|
|
35
|
+
vf-install gsm8k-v1 -r Install from GitHub repo
|
|
36
36
|
""",
|
|
37
37
|
)
|
|
38
38
|
parser.add_argument(
|
|
@@ -1,195 +0,0 @@
|
|
|
1
|
-
import os
|
|
2
|
-
import subprocess
|
|
3
|
-
from pathlib import Path
|
|
4
|
-
|
|
5
|
-
import pytest
|
|
6
|
-
import tomllib
|
|
7
|
-
|
|
8
|
-
# Timeout in seconds for each subprocess step
|
|
9
|
-
INSTALL_TIMEOUT = 600 # 10 minutes for venv creation + package install
|
|
10
|
-
IMPORT_TIMEOUT = 120 # 2 minutes for importing a package
|
|
11
|
-
LOAD_TIMEOUT = 300 # 5 minutes for loading an environment (may download datasets)
|
|
12
|
-
EVAL_TIMEOUT = 600 # 10 minutes for running vf-eval with -n 1 -r 1
|
|
13
|
-
|
|
14
|
-
SKIPPED_ENVS = [
|
|
15
|
-
# Requires fix for completion dataset setup
|
|
16
|
-
# uv run pytest tests/test_envs.py -vv -k continuation_quality
|
|
17
|
-
#
|
|
18
|
-
# example_id = input_item["example_id"]
|
|
19
|
-
# ~~~~~~~~~~^^^^^^^^^^^^^^
|
|
20
|
-
# KeyError: 'example_id'
|
|
21
|
-
"continuation_quality",
|
|
22
|
-
# Different project structure (uses src/ layout, no pyproject.toml at root)
|
|
23
|
-
"mcp_env",
|
|
24
|
-
# Requires BROWSERBASE_API_KEY, BROWSERBASE_PROJECT_ID, MODEL_API_KEY
|
|
25
|
-
"browser_dom_example",
|
|
26
|
-
# Requires BROWSERBASE_API_KEY, BROWSERBASE_PROJECT_ID, and running CUA server
|
|
27
|
-
"browser_cua_example",
|
|
28
|
-
# Uses prime-tunnel which is still experimental and has low usage limits
|
|
29
|
-
"opencode_harbor",
|
|
30
|
-
]
|
|
31
|
-
|
|
32
|
-
SKIPPED_ENV_LOADING_ENVS = [
|
|
33
|
-
# OpenEnv datasets are built by resetting seeds in sandbox-backed env servers.
|
|
34
|
-
# Skip generic load checks here and cover via dedicated OpenEnv tests.
|
|
35
|
-
"openenv_echo",
|
|
36
|
-
"openenv_textarena",
|
|
37
|
-
# R2E-Gym pulls a full image-backed SWE taskset; cover it with dedicated v1 tests.
|
|
38
|
-
"rlm_swe_v1",
|
|
39
|
-
]
|
|
40
|
-
|
|
41
|
-
|
|
42
|
-
def get_environments() -> list[Path]:
|
|
43
|
-
"""Get all subdirectories of `environments/`, or only changed environments if CHANGED_ENVS is set."""
|
|
44
|
-
all_envs = list(x for x in Path("environments").iterdir() if x.is_dir())
|
|
45
|
-
|
|
46
|
-
# Filter out skipped environments
|
|
47
|
-
all_envs = [env for env in all_envs if env.name not in SKIPPED_ENVS]
|
|
48
|
-
|
|
49
|
-
# These are v0 smoke tests (vf.load_environment + vf-eval). The v1 plugins (the `_v1`
|
|
50
|
-
# tasksets + the `compact` harness) are id-referenced and covered by tests/v1/test_envs.py.
|
|
51
|
-
all_envs = [
|
|
52
|
-
env
|
|
53
|
-
for env in all_envs
|
|
54
|
-
if not env.name.endswith("_v1") and env.name != "compact"
|
|
55
|
-
]
|
|
56
|
-
|
|
57
|
-
# Filter environments if CHANGED_ENVS is set (for PRs)
|
|
58
|
-
changed_envs = os.getenv("CHANGED_ENVS")
|
|
59
|
-
if changed_envs == "none":
|
|
60
|
-
return []
|
|
61
|
-
if changed_envs:
|
|
62
|
-
changed_list = [e.strip() for e in changed_envs.split(",") if e.strip()]
|
|
63
|
-
if changed_list:
|
|
64
|
-
all_envs = [env for env in all_envs if env.name in changed_list]
|
|
65
|
-
|
|
66
|
-
return all_envs
|
|
67
|
-
|
|
68
|
-
|
|
69
|
-
@pytest.mark.parametrize("env_dir", get_environments(), ids=lambda x: x.name)
|
|
70
|
-
def test_pyproject_exists(env_dir: Path):
|
|
71
|
-
"""Test that the pyproject.toml file exists for the given environment directory."""
|
|
72
|
-
assert (env_dir / "pyproject.toml").exists(), "pyproject.toml does not exist"
|
|
73
|
-
|
|
74
|
-
|
|
75
|
-
@pytest.mark.parametrize("env_dir", get_environments(), ids=lambda x: x.name)
|
|
76
|
-
def test_pyproject_has_metadata(env_dir: Path):
|
|
77
|
-
"""Test that the pyproject.toml file has the required metadata."""
|
|
78
|
-
with open(env_dir / "pyproject.toml", "rb") as f:
|
|
79
|
-
pyproject = tomllib.load(f)
|
|
80
|
-
assert "name" in pyproject["project"], "pyproject.toml does not have a name"
|
|
81
|
-
assert "version" in pyproject["project"], "pyproject.toml does not have a version"
|
|
82
|
-
assert "description" in pyproject["project"], (
|
|
83
|
-
"pyproject.toml does not have a description"
|
|
84
|
-
)
|
|
85
|
-
assert pyproject["project"]["description"] != "Your environment description here", (
|
|
86
|
-
"Still uses placeholder description"
|
|
87
|
-
)
|
|
88
|
-
assert "tags" in pyproject["project"], "pyproject.toml does not have tags"
|
|
89
|
-
assert pyproject["project"]["tags"] != ["placeholder-tag", "train", "eval"], (
|
|
90
|
-
"Still uses placeholder tags"
|
|
91
|
-
)
|
|
92
|
-
|
|
93
|
-
|
|
94
|
-
@pytest.mark.parametrize("env_dir", get_environments(), ids=lambda x: x.name)
|
|
95
|
-
def test_readme_exists(env_dir: Path):
|
|
96
|
-
"""Test that the README.md file exists for the given environment directory."""
|
|
97
|
-
assert (env_dir / "README.md").exists(), "README.md does not exist"
|
|
98
|
-
|
|
99
|
-
|
|
100
|
-
@pytest.mark.slow
|
|
101
|
-
@pytest.mark.parametrize("env_dir", get_environments(), ids=lambda x: x.name)
|
|
102
|
-
def test_env(env_dir: Path, tmp_path_factory: pytest.TempPathFactory):
|
|
103
|
-
"""Test environment in a fresh venv with local verifiers installed first."""
|
|
104
|
-
if env_dir.name in SKIPPED_ENVS:
|
|
105
|
-
pytest.skip(f"Skipping {env_dir.name}")
|
|
106
|
-
if env_dir.name in SKIPPED_ENV_LOADING_ENVS:
|
|
107
|
-
pytest.skip(f"Skipping dedicated-runtime smoke test for {env_dir.name}")
|
|
108
|
-
tmp_venv_dir = tmp_path_factory.mktemp(f"venv_{env_dir.name}")
|
|
109
|
-
repo_root = Path(__file__).parent.parent
|
|
110
|
-
cmd = (
|
|
111
|
-
f"cd {tmp_venv_dir} && uv venv --clear && source .venv/bin/activate && "
|
|
112
|
-
"uv pip install "
|
|
113
|
-
f"{repo_root.as_posix()} && "
|
|
114
|
-
"uv pip install "
|
|
115
|
-
f"{env_dir.absolute().as_posix()}"
|
|
116
|
-
)
|
|
117
|
-
try:
|
|
118
|
-
process = subprocess.run(
|
|
119
|
-
cmd,
|
|
120
|
-
shell=True,
|
|
121
|
-
executable="/bin/bash",
|
|
122
|
-
capture_output=True,
|
|
123
|
-
text=True,
|
|
124
|
-
timeout=INSTALL_TIMEOUT,
|
|
125
|
-
)
|
|
126
|
-
except subprocess.TimeoutExpired:
|
|
127
|
-
pytest.fail(f"Timed out after {INSTALL_TIMEOUT}s installing {env_dir.name}")
|
|
128
|
-
assert process.returncode == 0, (
|
|
129
|
-
f"Failed to create virtual environment: {process.stderr}"
|
|
130
|
-
)
|
|
131
|
-
|
|
132
|
-
help_test_can_import_env(tmp_venv_dir, env_dir)
|
|
133
|
-
help_test_can_load_env(tmp_venv_dir, env_dir)
|
|
134
|
-
help_test_can_eval_env(tmp_venv_dir, env_dir)
|
|
135
|
-
|
|
136
|
-
|
|
137
|
-
def help_test_can_import_env(tmp_venv_dir: Path, env_dir: Path):
|
|
138
|
-
"""Test that the environment can be imported as a package."""
|
|
139
|
-
import_cmd = f"cd {tmp_venv_dir} && source .venv/bin/activate && uv run python -c 'import {env_dir.name}'"
|
|
140
|
-
try:
|
|
141
|
-
process = subprocess.run(
|
|
142
|
-
import_cmd,
|
|
143
|
-
shell=True,
|
|
144
|
-
executable="/bin/bash",
|
|
145
|
-
capture_output=True,
|
|
146
|
-
text=True,
|
|
147
|
-
timeout=IMPORT_TIMEOUT,
|
|
148
|
-
)
|
|
149
|
-
except subprocess.TimeoutExpired:
|
|
150
|
-
pytest.fail(f"Timed out after {IMPORT_TIMEOUT}s importing {env_dir.name}")
|
|
151
|
-
assert process.returncode == 0, "Failed to import environment"
|
|
152
|
-
|
|
153
|
-
|
|
154
|
-
def help_test_can_load_env(tmp_venv_dir: Path, env_dir: Path):
|
|
155
|
-
"""Test that the environment can be loaded."""
|
|
156
|
-
load_cmd = f"""cd {tmp_venv_dir} && source .venv/bin/activate && uv run python -c 'import verifiers as vf; vf.load_environment("{env_dir.name}")'"""
|
|
157
|
-
try:
|
|
158
|
-
process = subprocess.run(
|
|
159
|
-
load_cmd,
|
|
160
|
-
shell=True,
|
|
161
|
-
executable="/bin/bash",
|
|
162
|
-
capture_output=True,
|
|
163
|
-
text=True,
|
|
164
|
-
timeout=LOAD_TIMEOUT,
|
|
165
|
-
)
|
|
166
|
-
except subprocess.TimeoutExpired:
|
|
167
|
-
pytest.fail(f"Timed out after {LOAD_TIMEOUT}s loading {env_dir.name}")
|
|
168
|
-
assert process.returncode == 0, "Failed to load environment"
|
|
169
|
-
|
|
170
|
-
|
|
171
|
-
def help_test_can_eval_env(tmp_venv_dir: Path, env_dir: Path):
|
|
172
|
-
"""Test that the environment can be run via vf-eval."""
|
|
173
|
-
if os.getenv("PRIME_API_KEY"):
|
|
174
|
-
model_flags = "-m openai/gpt-4.1-mini -b https://api.pinference.ai/api/v1 -k PRIME_API_KEY"
|
|
175
|
-
elif os.getenv("OPENAI_API_KEY"):
|
|
176
|
-
model_flags = "-m gpt-4.1-mini -b https://api.openai.com/v1 -k OPENAI_API_KEY"
|
|
177
|
-
else:
|
|
178
|
-
pytest.skip("Skipping vf-eval smoke test because no API key is configured")
|
|
179
|
-
|
|
180
|
-
eval_cmd = (
|
|
181
|
-
f"cd {tmp_venv_dir} && source .venv/bin/activate && "
|
|
182
|
-
f"uv run vf-eval {env_dir.name} {model_flags} -n 1 -r 1 -t 512"
|
|
183
|
-
)
|
|
184
|
-
try:
|
|
185
|
-
process = subprocess.run(
|
|
186
|
-
eval_cmd,
|
|
187
|
-
shell=True,
|
|
188
|
-
executable="/bin/bash",
|
|
189
|
-
capture_output=True,
|
|
190
|
-
text=True,
|
|
191
|
-
timeout=EVAL_TIMEOUT,
|
|
192
|
-
)
|
|
193
|
-
except subprocess.TimeoutExpired:
|
|
194
|
-
pytest.fail(f"Timed out after {EVAL_TIMEOUT}s evaluating {env_dir.name}")
|
|
195
|
-
assert process.returncode == 0, "Failed to evaluate environment"
|
|
@@ -1,22 +0,0 @@
|
|
|
1
|
-
from pathlib import Path
|
|
2
|
-
|
|
3
|
-
import pytest
|
|
4
|
-
|
|
5
|
-
|
|
6
|
-
def test_wordle_load_environment_reads_system_prompt_path(tmp_path, monkeypatch):
|
|
7
|
-
pytest.importorskip("nltk")
|
|
8
|
-
pytest.importorskip("textarena")
|
|
9
|
-
from environments.wordle import wordle
|
|
10
|
-
|
|
11
|
-
class CapturingTextArenaEnv:
|
|
12
|
-
def __init__(self, **kwargs):
|
|
13
|
-
self.kwargs = kwargs
|
|
14
|
-
|
|
15
|
-
prompt = "Optimized Wordle prompt.\n\nPreserve exact text.\n"
|
|
16
|
-
prompt_path = tmp_path / "system_prompt.txt"
|
|
17
|
-
prompt_path.write_text(prompt, encoding="utf-8")
|
|
18
|
-
monkeypatch.setattr(wordle, "TextArenaEnv", CapturingTextArenaEnv)
|
|
19
|
-
|
|
20
|
-
env = wordle.load_environment(path_to_system_prompt=Path(prompt_path))
|
|
21
|
-
|
|
22
|
-
assert env.kwargs["system_prompt"] == prompt
|
|
@@ -1,42 +0,0 @@
|
|
|
1
|
-
# Search Tasksets
|
|
2
|
-
|
|
3
|
-
Composable search/research tasksets for agents that solve live information-seeking tasks in a sandbox.
|
|
4
|
-
|
|
5
|
-
The search family is intentionally backend-oriented, mirroring the SWE taskset pattern while keeping the task contract research-centric: each task expects a single final answer rather than a code patch. Agents may use web/search tools, browser helpers, or other sandbox resources provided by the paired environment.
|
|
6
|
-
|
|
7
|
-
## Backends
|
|
8
|
-
|
|
9
|
-
| Backend | Source | Default dataset | Status |
|
|
10
|
-
|---|---|---|---|
|
|
11
|
-
| `openseeker` | [PolarSeeker/OpenSeeker](https://github.com/PolarSeeker/OpenSeeker) | [`PolarSeeker/OpenSeeker-v1-Data`](https://huggingface.co/datasets/PolarSeeker/OpenSeeker-v1-Data) | Binary semantic answer judge |
|
|
12
|
-
| `quest` | [OSU-NLP-Group/QUEST](https://github.com/OSU-NLP-Group/QUEST) | [`osunlp/QUEST-RL-Data`](https://huggingface.co/datasets/osunlp/QUEST-RL-Data) | Objective tasks supported |
|
|
13
|
-
| `redsearcher` | [RedSearchAgent/REDSearcher](https://github.com/RedSearchAgent/REDSearcher) | [`Zchu/REDSearcher_RL_1K`](https://huggingface.co/datasets/Zchu/REDSearcher_RL_1K) | Text RL query set supported |
|
|
14
|
-
|
|
15
|
-
## Usage
|
|
16
|
-
|
|
17
|
-
```python
|
|
18
|
-
from verifiers.envs.experimental.composable.tasksets.search import make_search_taskset
|
|
19
|
-
|
|
20
|
-
taskset = make_search_taskset(backend="openseeker")
|
|
21
|
-
taskset = make_search_taskset(backend="quest", category="objective")
|
|
22
|
-
redsearcher = make_search_taskset(
|
|
23
|
-
backend="redsearcher",
|
|
24
|
-
filter_fn="lambda x: x['info']['difficulty'] == 'easy'",
|
|
25
|
-
)
|
|
26
|
-
```
|
|
27
|
-
|
|
28
|
-
`make_search_taskset()` dispatches by backend name. Unknown backends raise `ValueError` with the available backend list.
|
|
29
|
-
|
|
30
|
-
## Output Contract
|
|
31
|
-
|
|
32
|
-
Search tasksets should define their own output contract. The `quest`, `openseeker`, and `redsearcher` backends expect the agent to write one final researched response to `/task/answer.txt`, including supporting URLs/citations when available. Scratch reasoning, tool traces, and logs should not be written as the final answer.
|
|
33
|
-
|
|
34
|
-
## Error Handling
|
|
35
|
-
|
|
36
|
-
Search tasksets should use the framework error taxonomy for infrastructure failures:
|
|
37
|
-
|
|
38
|
-
- `vf.SandboxError` for sandbox setup, command, or lifecycle failures.
|
|
39
|
-
- `vf.ModelError` for judge/model provider failures.
|
|
40
|
-
- `vf.InfraError` for dataset, evaluator, or external runtime failures.
|
|
41
|
-
|
|
42
|
-
Incorrect answers should not set `state["error"]`; they should score normally, often as `0.0`.
|
|
@@ -1,15 +0,0 @@
|
|
|
1
|
-
"""Composable search/research tasksets."""
|
|
2
|
-
|
|
3
|
-
from .search_tasksets import (
|
|
4
|
-
make_openseeker_taskset,
|
|
5
|
-
make_quest_taskset,
|
|
6
|
-
make_redsearcher_taskset,
|
|
7
|
-
make_search_taskset,
|
|
8
|
-
)
|
|
9
|
-
|
|
10
|
-
__all__ = [
|
|
11
|
-
"make_openseeker_taskset",
|
|
12
|
-
"make_quest_taskset",
|
|
13
|
-
"make_redsearcher_taskset",
|
|
14
|
-
"make_search_taskset",
|
|
15
|
-
]
|
verifiers-0.2.1.dev51/verifiers/envs/experimental/composable/tasksets/search/openseeker/README.md
DELETED
|
@@ -1,46 +0,0 @@
|
|
|
1
|
-
# OpenSeeker Search Taskset
|
|
2
|
-
|
|
3
|
-
Composable search taskset for [`PolarSeeker/OpenSeeker-v1-Data`](https://huggingface.co/datasets/PolarSeeker/OpenSeeker-v1-Data), the OpenSeeker v1 release associated with arXiv `2603.15594`.
|
|
4
|
-
|
|
5
|
-
OpenSeeker v1 data contains synthesized deep-search QA pairs plus trajectories generated with `search` and `visit` tools. The public OpenSeeker evaluator scores only the final answer: it sends the question, gold answer, and model response to an LLM judge and expects `A` for correct or `B` for incorrect. This backend preserves that binary semantic answer-judge contract.
|
|
6
|
-
|
|
7
|
-
By default, the taskset uses the full dataset. Use the shared `filter_fn`
|
|
8
|
-
argument for row subsets such as source trajectory quality or tool-call count.
|
|
9
|
-
The `trajectory_correctness` metadata describes the stored OpenSeeker source
|
|
10
|
-
trajectory, not the validity of the question or gold answer.
|
|
11
|
-
|
|
12
|
-
## Usage
|
|
13
|
-
|
|
14
|
-
```python
|
|
15
|
-
from verifiers.envs.experimental.composable.tasksets.search import make_search_taskset
|
|
16
|
-
|
|
17
|
-
taskset = make_search_taskset(backend="openseeker")
|
|
18
|
-
|
|
19
|
-
correct_source_trajectories = make_search_taskset(
|
|
20
|
-
backend="openseeker",
|
|
21
|
-
filter_fn="lambda x: x['info']['trajectory_correctness'] == 'Correct'",
|
|
22
|
-
)
|
|
23
|
-
|
|
24
|
-
shorter_source_trajectories = make_search_taskset(
|
|
25
|
-
backend="openseeker",
|
|
26
|
-
filter_fn="lambda x: (x['info']['number_of_tool_calls'] or 0) <= 20",
|
|
27
|
-
)
|
|
28
|
-
```
|
|
29
|
-
|
|
30
|
-
## Arguments
|
|
31
|
-
|
|
32
|
-
| Argument | Default | Description |
|
|
33
|
-
|---|---:|---|
|
|
34
|
-
| `dataset_name` | `PolarSeeker/OpenSeeker-v1-Data` | Hugging Face dataset name. |
|
|
35
|
-
| `split` | `train` | Dataset split. |
|
|
36
|
-
| `filter_fn` | `None` | Optional composable taskset filter over normalized rows. |
|
|
37
|
-
| `include_trajectory` | `False` | Include the large source trajectory in task metadata. |
|
|
38
|
-
| `answer_file` | `/task/answer.txt` | Final answer path in the sandbox. |
|
|
39
|
-
| `judge_model` | `openai/gpt-5.4-mini` | OpenAI-compatible model used for binary answer judging. |
|
|
40
|
-
| `judge_base_url` | `https://api.pinference.ai/api/v1` | Judge API base URL. |
|
|
41
|
-
| `judge_api_key_var` | `PRIME_API_KEY` | Env var containing the judge API key. |
|
|
42
|
-
| `judge_sampling_args` | `None` | Extra sampling args for judge calls. |
|
|
43
|
-
|
|
44
|
-
## Output Contract
|
|
45
|
-
|
|
46
|
-
Agents should write one final answer to `/task/answer.txt`. The answer should directly satisfy the question and may include supporting URLs/citations. The judge ignores citation verification and evaluates whether the final response semantically contains the gold answer without contradictions.
|