verifiers 0.1.15.dev387__tar.gz → 0.1.15.dev389__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.dev387 → verifiers-0.1.15.dev389}/PKG-INFO +1 -1
- verifiers-0.1.15.dev389/verifiers/v1/harnesses/bash_edit/__init__.py +10 -0
- verifiers-0.1.15.dev389/verifiers/v1/harnesses/bash_edit/harness.py +84 -0
- verifiers-0.1.15.dev389/verifiers/v1/harnesses/bash_edit/program.py +250 -0
- {verifiers-0.1.15.dev387 → verifiers-0.1.15.dev389}/verifiers/v1/harnesses/rlm/harness.py +5 -2
- {verifiers-0.1.15.dev387 → verifiers-0.1.15.dev389}/.gitignore +0 -0
- {verifiers-0.1.15.dev387 → verifiers-0.1.15.dev389}/LICENSE +0 -0
- {verifiers-0.1.15.dev387 → verifiers-0.1.15.dev389}/README.md +0 -0
- {verifiers-0.1.15.dev387 → verifiers-0.1.15.dev389}/pyproject.toml +0 -0
- {verifiers-0.1.15.dev387 → verifiers-0.1.15.dev389}/tests/AGENTS.md +0 -0
- {verifiers-0.1.15.dev387 → verifiers-0.1.15.dev389}/tests/README.md +0 -0
- {verifiers-0.1.15.dev387 → verifiers-0.1.15.dev389}/tests/__init__.py +0 -0
- {verifiers-0.1.15.dev387 → verifiers-0.1.15.dev389}/tests/conftest.py +0 -0
- {verifiers-0.1.15.dev387 → verifiers-0.1.15.dev389}/tests/test_browser_env.py +0 -0
- {verifiers-0.1.15.dev387 → verifiers-0.1.15.dev389}/tests/test_build_script.py +0 -0
- {verifiers-0.1.15.dev387 → verifiers-0.1.15.dev389}/tests/test_cli_agent_env.py +0 -0
- {verifiers-0.1.15.dev387 → verifiers-0.1.15.dev389}/tests/test_client_auth_errors.py +0 -0
- {verifiers-0.1.15.dev387 → verifiers-0.1.15.dev389}/tests/test_client_config.py +0 -0
- {verifiers-0.1.15.dev387 → verifiers-0.1.15.dev389}/tests/test_client_multimodal_types.py +0 -0
- {verifiers-0.1.15.dev387 → verifiers-0.1.15.dev389}/tests/test_composable_env.py +0 -0
- {verifiers-0.1.15.dev387 → verifiers-0.1.15.dev389}/tests/test_context_token_metrics.py +0 -0
- {verifiers-0.1.15.dev387 → verifiers-0.1.15.dev389}/tests/test_decorator_ranks.py +0 -0
- {verifiers-0.1.15.dev387 → verifiers-0.1.15.dev389}/tests/test_endpoint_registry.py +0 -0
- {verifiers-0.1.15.dev387 → verifiers-0.1.15.dev389}/tests/test_env_group.py +0 -0
- {verifiers-0.1.15.dev387 → verifiers-0.1.15.dev389}/tests/test_env_server.py +0 -0
- {verifiers-0.1.15.dev387 → verifiers-0.1.15.dev389}/tests/test_environment.py +0 -0
- {verifiers-0.1.15.dev387 → verifiers-0.1.15.dev389}/tests/test_environment_extra.py +0 -0
- {verifiers-0.1.15.dev387 → verifiers-0.1.15.dev389}/tests/test_envs.py +0 -0
- {verifiers-0.1.15.dev387 → verifiers-0.1.15.dev389}/tests/test_error_chain.py +0 -0
- {verifiers-0.1.15.dev387 → verifiers-0.1.15.dev389}/tests/test_eval_display.py +0 -0
- {verifiers-0.1.15.dev387 → verifiers-0.1.15.dev389}/tests/test_eval_utils.py +0 -0
- {verifiers-0.1.15.dev387 → verifiers-0.1.15.dev389}/tests/test_gepa_cli.py +0 -0
- {verifiers-0.1.15.dev387 → verifiers-0.1.15.dev389}/tests/test_gepa_utils.py +0 -0
- {verifiers-0.1.15.dev387 → verifiers-0.1.15.dev389}/tests/test_gym_env.py +0 -0
- {verifiers-0.1.15.dev387 → verifiers-0.1.15.dev389}/tests/test_harbor_env_mcp.py +0 -0
- {verifiers-0.1.15.dev387 → verifiers-0.1.15.dev389}/tests/test_imports.py +0 -0
- {verifiers-0.1.15.dev387 → verifiers-0.1.15.dev389}/tests/test_init_script.py +0 -0
- {verifiers-0.1.15.dev387 → verifiers-0.1.15.dev389}/tests/test_install_utils.py +0 -0
- {verifiers-0.1.15.dev387 → verifiers-0.1.15.dev389}/tests/test_interception_utils.py +0 -0
- {verifiers-0.1.15.dev387 → verifiers-0.1.15.dev389}/tests/test_lean_task.py +0 -0
- {verifiers-0.1.15.dev387 → verifiers-0.1.15.dev389}/tests/test_logging.py +0 -0
- {verifiers-0.1.15.dev387 → verifiers-0.1.15.dev389}/tests/test_math_rubric.py +0 -0
- {verifiers-0.1.15.dev387 → verifiers-0.1.15.dev389}/tests/test_maybe_think_parser.py +0 -0
- {verifiers-0.1.15.dev387 → verifiers-0.1.15.dev389}/tests/test_message_utils.py +0 -0
- {verifiers-0.1.15.dev387 → verifiers-0.1.15.dev389}/tests/test_message_utils_multimodal.py +0 -0
- {verifiers-0.1.15.dev387 → verifiers-0.1.15.dev389}/tests/test_multiturn_env.py +0 -0
- {verifiers-0.1.15.dev387 → verifiers-0.1.15.dev389}/tests/test_nemorl_client.py +0 -0
- {verifiers-0.1.15.dev387 → verifiers-0.1.15.dev389}/tests/test_openai_chat_completions_token_client.py +0 -0
- {verifiers-0.1.15.dev387 → verifiers-0.1.15.dev389}/tests/test_openai_responses_client.py +0 -0
- {verifiers-0.1.15.dev387 → verifiers-0.1.15.dev389}/tests/test_opencode_rlm_env.py +0 -0
- {verifiers-0.1.15.dev387 → verifiers-0.1.15.dev389}/tests/test_openenv_client.py +0 -0
- {verifiers-0.1.15.dev387 → verifiers-0.1.15.dev389}/tests/test_parser.py +0 -0
- {verifiers-0.1.15.dev387 → verifiers-0.1.15.dev389}/tests/test_path_utils.py +0 -0
- {verifiers-0.1.15.dev387 → verifiers-0.1.15.dev389}/tests/test_per_turn_timing.py +0 -0
- {verifiers-0.1.15.dev387 → verifiers-0.1.15.dev389}/tests/test_pricing_utils.py +0 -0
- {verifiers-0.1.15.dev387 → verifiers-0.1.15.dev389}/tests/test_prime_plugin.py +0 -0
- {verifiers-0.1.15.dev387 → verifiers-0.1.15.dev389}/tests/test_renderer_client.py +0 -0
- {verifiers-0.1.15.dev387 → verifiers-0.1.15.dev389}/tests/test_renderer_e2e.py +0 -0
- {verifiers-0.1.15.dev387 → verifiers-0.1.15.dev389}/tests/test_rlm_composable_env.py +0 -0
- {verifiers-0.1.15.dev387 → verifiers-0.1.15.dev389}/tests/test_rubric.py +0 -0
- {verifiers-0.1.15.dev387 → verifiers-0.1.15.dev389}/tests/test_rubric_group.py +0 -0
- {verifiers-0.1.15.dev387 → verifiers-0.1.15.dev389}/tests/test_sandbox_debug_env.py +0 -0
- {verifiers-0.1.15.dev387 → verifiers-0.1.15.dev389}/tests/test_sandbox_env.py +0 -0
- {verifiers-0.1.15.dev387 → verifiers-0.1.15.dev389}/tests/test_sandbox_mixin.py +0 -0
- {verifiers-0.1.15.dev387 → verifiers-0.1.15.dev389}/tests/test_save_utils.py +0 -0
- {verifiers-0.1.15.dev387 → verifiers-0.1.15.dev389}/tests/test_setup_script.py +0 -0
- {verifiers-0.1.15.dev387 → verifiers-0.1.15.dev389}/tests/test_singleturn_env.py +0 -0
- {verifiers-0.1.15.dev387 → verifiers-0.1.15.dev389}/tests/test_stateful_tool_env.py +0 -0
- {verifiers-0.1.15.dev387 → verifiers-0.1.15.dev389}/tests/test_think_parser.py +0 -0
- {verifiers-0.1.15.dev387 → verifiers-0.1.15.dev389}/tests/test_tool_env.py +0 -0
- {verifiers-0.1.15.dev387 → verifiers-0.1.15.dev389}/tests/test_tool_utils.py +0 -0
- {verifiers-0.1.15.dev387 → verifiers-0.1.15.dev389}/tests/test_trajectory_processing.py +0 -0
- {verifiers-0.1.15.dev387 → verifiers-0.1.15.dev389}/tests/test_tui_info_formatting.py +0 -0
- {verifiers-0.1.15.dev387 → verifiers-0.1.15.dev389}/tests/test_types.py +0 -0
- {verifiers-0.1.15.dev387 → verifiers-0.1.15.dev389}/tests/test_wordle_env.py +0 -0
- {verifiers-0.1.15.dev387 → verifiers-0.1.15.dev389}/tests/test_xml_parser.py +0 -0
- {verifiers-0.1.15.dev387 → verifiers-0.1.15.dev389}/tests/v1/conftest.py +0 -0
- {verifiers-0.1.15.dev387 → verifiers-0.1.15.dev389}/tests/v1/fixtures/counter_tool_v1.py +0 -0
- {verifiers-0.1.15.dev387 → verifiers-0.1.15.dev389}/tests/v1/fixtures/echo_agentic_v1.py +0 -0
- {verifiers-0.1.15.dev387 → verifiers-0.1.15.dev389}/tests/v1/fixtures/echo_multi_v0.py +0 -0
- {verifiers-0.1.15.dev387 → verifiers-0.1.15.dev389}/tests/v1/fixtures/echo_tool_v1.py +0 -0
- {verifiers-0.1.15.dev387 → verifiers-0.1.15.dev389}/tests/v1/fixtures/echo_user_sim_v1.py +0 -0
- {verifiers-0.1.15.dev387 → verifiers-0.1.15.dev389}/tests/v1/fixtures/echo_v0.py +0 -0
- {verifiers-0.1.15.dev387 → verifiers-0.1.15.dev389}/tests/v1/fixtures/echo_v1.py +0 -0
- {verifiers-0.1.15.dev387 → verifiers-0.1.15.dev389}/tests/v1/fixtures/pyproject.toml +0 -0
- {verifiers-0.1.15.dev387 → verifiers-0.1.15.dev389}/tests/v1/fixtures/tool_response_image_v1.py +0 -0
- {verifiers-0.1.15.dev387 → verifiers-0.1.15.dev389}/tests/v1/test_color_codeword_tasks.py +0 -0
- {verifiers-0.1.15.dev387 → verifiers-0.1.15.dev389}/tests/v1/test_configs.py +0 -0
- {verifiers-0.1.15.dev387 → verifiers-0.1.15.dev389}/tests/v1/test_e2e.py +0 -0
- {verifiers-0.1.15.dev387 → verifiers-0.1.15.dev389}/tests/v1/test_envs.py +0 -0
- {verifiers-0.1.15.dev387 → verifiers-0.1.15.dev389}/tests/v1/test_graph.py +0 -0
- {verifiers-0.1.15.dev387 → verifiers-0.1.15.dev389}/tests/v1/test_legacy.py +0 -0
- {verifiers-0.1.15.dev387 → verifiers-0.1.15.dev389}/tests/v1/test_trace.py +0 -0
- {verifiers-0.1.15.dev387 → verifiers-0.1.15.dev389}/verifiers/AGENTS.md +0 -0
- {verifiers-0.1.15.dev387 → verifiers-0.1.15.dev389}/verifiers/__init__.py +0 -0
- {verifiers-0.1.15.dev387 → verifiers-0.1.15.dev389}/verifiers/cli/__init__.py +0 -0
- {verifiers-0.1.15.dev387 → verifiers-0.1.15.dev389}/verifiers/cli/commands/__init__.py +0 -0
- {verifiers-0.1.15.dev387 → verifiers-0.1.15.dev389}/verifiers/cli/commands/build.py +0 -0
- {verifiers-0.1.15.dev387 → verifiers-0.1.15.dev389}/verifiers/cli/commands/eval.py +0 -0
- {verifiers-0.1.15.dev387 → verifiers-0.1.15.dev389}/verifiers/cli/commands/gepa.py +0 -0
- {verifiers-0.1.15.dev387 → verifiers-0.1.15.dev389}/verifiers/cli/commands/init.py +0 -0
- {verifiers-0.1.15.dev387 → verifiers-0.1.15.dev389}/verifiers/cli/commands/install.py +0 -0
- {verifiers-0.1.15.dev387 → verifiers-0.1.15.dev389}/verifiers/cli/commands/setup.py +0 -0
- {verifiers-0.1.15.dev387 → verifiers-0.1.15.dev389}/verifiers/cli/plugins/__init__.py +0 -0
- {verifiers-0.1.15.dev387 → verifiers-0.1.15.dev389}/verifiers/cli/plugins/prime.py +0 -0
- {verifiers-0.1.15.dev387 → verifiers-0.1.15.dev389}/verifiers/cli/tui.py +0 -0
- {verifiers-0.1.15.dev387 → verifiers-0.1.15.dev389}/verifiers/clients/__init__.py +0 -0
- {verifiers-0.1.15.dev387 → verifiers-0.1.15.dev389}/verifiers/clients/anthropic_messages_client.py +0 -0
- {verifiers-0.1.15.dev387 → verifiers-0.1.15.dev389}/verifiers/clients/client.py +0 -0
- {verifiers-0.1.15.dev387 → verifiers-0.1.15.dev389}/verifiers/clients/nemorl_chat_completions_client.py +0 -0
- {verifiers-0.1.15.dev387 → verifiers-0.1.15.dev389}/verifiers/clients/openai_chat_completions_client.py +0 -0
- {verifiers-0.1.15.dev387 → verifiers-0.1.15.dev389}/verifiers/clients/openai_chat_completions_token_client.py +0 -0
- {verifiers-0.1.15.dev387 → verifiers-0.1.15.dev389}/verifiers/clients/openai_completions_client.py +0 -0
- {verifiers-0.1.15.dev387 → verifiers-0.1.15.dev389}/verifiers/clients/openai_responses_client.py +0 -0
- {verifiers-0.1.15.dev387 → verifiers-0.1.15.dev389}/verifiers/clients/renderer_client.py +0 -0
- {verifiers-0.1.15.dev387 → verifiers-0.1.15.dev389}/verifiers/decorators.py +0 -0
- {verifiers-0.1.15.dev387 → verifiers-0.1.15.dev389}/verifiers/envs/AGENTS.md +0 -0
- {verifiers-0.1.15.dev387 → verifiers-0.1.15.dev389}/verifiers/envs/__init__.py +0 -0
- {verifiers-0.1.15.dev387 → verifiers-0.1.15.dev389}/verifiers/envs/env_group.py +0 -0
- {verifiers-0.1.15.dev387 → verifiers-0.1.15.dev389}/verifiers/envs/environment.py +0 -0
- {verifiers-0.1.15.dev387 → verifiers-0.1.15.dev389}/verifiers/envs/experimental/README.md +0 -0
- {verifiers-0.1.15.dev387 → verifiers-0.1.15.dev389}/verifiers/envs/experimental/__init__.py +0 -0
- {verifiers-0.1.15.dev387 → verifiers-0.1.15.dev389}/verifiers/envs/experimental/cli_agent_env.py +0 -0
- {verifiers-0.1.15.dev387 → verifiers-0.1.15.dev389}/verifiers/envs/experimental/composable/README.md +0 -0
- {verifiers-0.1.15.dev387 → verifiers-0.1.15.dev389}/verifiers/envs/experimental/composable/__init__.py +0 -0
- {verifiers-0.1.15.dev387 → verifiers-0.1.15.dev389}/verifiers/envs/experimental/composable/_filter.py +0 -0
- {verifiers-0.1.15.dev387 → verifiers-0.1.15.dev389}/verifiers/envs/experimental/composable/composable_env.py +0 -0
- {verifiers-0.1.15.dev387 → verifiers-0.1.15.dev389}/verifiers/envs/experimental/composable/harness.py +0 -0
- {verifiers-0.1.15.dev387 → verifiers-0.1.15.dev389}/verifiers/envs/experimental/composable/harnesses/__init__.py +0 -0
- {verifiers-0.1.15.dev387 → verifiers-0.1.15.dev389}/verifiers/envs/experimental/composable/harnesses/mini_swe_agent.py +0 -0
- {verifiers-0.1.15.dev387 → verifiers-0.1.15.dev389}/verifiers/envs/experimental/composable/harnesses/opencode.py +0 -0
- {verifiers-0.1.15.dev387 → verifiers-0.1.15.dev389}/verifiers/envs/experimental/composable/harnesses/prompt.txt +0 -0
- {verifiers-0.1.15.dev387 → verifiers-0.1.15.dev389}/verifiers/envs/experimental/composable/harnesses/rlm.py +0 -0
- {verifiers-0.1.15.dev387 → verifiers-0.1.15.dev389}/verifiers/envs/experimental/composable/sandbox_debug_env.py +0 -0
- {verifiers-0.1.15.dev387 → verifiers-0.1.15.dev389}/verifiers/envs/experimental/composable/swe_debug_env.py +0 -0
- {verifiers-0.1.15.dev387 → verifiers-0.1.15.dev389}/verifiers/envs/experimental/composable/task.py +0 -0
- {verifiers-0.1.15.dev387 → verifiers-0.1.15.dev389}/verifiers/envs/experimental/composable/tasksets/__init__.py +0 -0
- {verifiers-0.1.15.dev387 → verifiers-0.1.15.dev389}/verifiers/envs/experimental/composable/tasksets/cp/__init__.py +0 -0
- {verifiers-0.1.15.dev387 → verifiers-0.1.15.dev389}/verifiers/envs/experimental/composable/tasksets/cp/cp_task.py +0 -0
- {verifiers-0.1.15.dev387 → verifiers-0.1.15.dev389}/verifiers/envs/experimental/composable/tasksets/cp/test_utils.py +0 -0
- {verifiers-0.1.15.dev387 → verifiers-0.1.15.dev389}/verifiers/envs/experimental/composable/tasksets/harbor/__init__.py +0 -0
- {verifiers-0.1.15.dev387 → verifiers-0.1.15.dev389}/verifiers/envs/experimental/composable/tasksets/harbor/cli_gym.py +0 -0
- {verifiers-0.1.15.dev387 → verifiers-0.1.15.dev389}/verifiers/envs/experimental/composable/tasksets/harbor/harbor.py +0 -0
- {verifiers-0.1.15.dev387 → verifiers-0.1.15.dev389}/verifiers/envs/experimental/composable/tasksets/harbor/terminal_lego.py +0 -0
- {verifiers-0.1.15.dev387 → verifiers-0.1.15.dev389}/verifiers/envs/experimental/composable/tasksets/lean/__init__.py +0 -0
- {verifiers-0.1.15.dev387 → verifiers-0.1.15.dev389}/verifiers/envs/experimental/composable/tasksets/lean/lean_task.py +0 -0
- {verifiers-0.1.15.dev387 → verifiers-0.1.15.dev389}/verifiers/envs/experimental/composable/tasksets/math/__init__.py +0 -0
- {verifiers-0.1.15.dev387 → verifiers-0.1.15.dev389}/verifiers/envs/experimental/composable/tasksets/math/math_task.py +0 -0
- {verifiers-0.1.15.dev387 → verifiers-0.1.15.dev389}/verifiers/envs/experimental/composable/tasksets/search/README.md +0 -0
- {verifiers-0.1.15.dev387 → verifiers-0.1.15.dev389}/verifiers/envs/experimental/composable/tasksets/search/__init__.py +0 -0
- {verifiers-0.1.15.dev387 → verifiers-0.1.15.dev389}/verifiers/envs/experimental/composable/tasksets/search/openseeker/README.md +0 -0
- {verifiers-0.1.15.dev387 → verifiers-0.1.15.dev389}/verifiers/envs/experimental/composable/tasksets/search/openseeker/__init__.py +0 -0
- {verifiers-0.1.15.dev387 → verifiers-0.1.15.dev389}/verifiers/envs/experimental/composable/tasksets/search/openseeker/taskset.py +0 -0
- {verifiers-0.1.15.dev387 → verifiers-0.1.15.dev389}/verifiers/envs/experimental/composable/tasksets/search/quest/README.md +0 -0
- {verifiers-0.1.15.dev387 → verifiers-0.1.15.dev389}/verifiers/envs/experimental/composable/tasksets/search/quest/__init__.py +0 -0
- {verifiers-0.1.15.dev387 → verifiers-0.1.15.dev389}/verifiers/envs/experimental/composable/tasksets/search/quest/obj_task_eval/__init__.py +0 -0
- {verifiers-0.1.15.dev387 → verifiers-0.1.15.dev389}/verifiers/envs/experimental/composable/tasksets/search/quest/obj_task_eval/api_tools/__init__.py +0 -0
- {verifiers-0.1.15.dev387 → verifiers-0.1.15.dev389}/verifiers/envs/experimental/composable/tasksets/search/quest/obj_task_eval/api_tools/tool_pdf.py +0 -0
- {verifiers-0.1.15.dev387 → verifiers-0.1.15.dev389}/verifiers/envs/experimental/composable/tasksets/search/quest/obj_task_eval/eval_toolkit.py +0 -0
- {verifiers-0.1.15.dev387 → verifiers-0.1.15.dev389}/verifiers/envs/experimental/composable/tasksets/search/quest/obj_task_eval/evaluator.py +0 -0
- {verifiers-0.1.15.dev387 → verifiers-0.1.15.dev389}/verifiers/envs/experimental/composable/tasksets/search/quest/obj_task_eval/llm_client/__init__.py +0 -0
- {verifiers-0.1.15.dev387 → verifiers-0.1.15.dev389}/verifiers/envs/experimental/composable/tasksets/search/quest/obj_task_eval/llm_client/base_client.py +0 -0
- {verifiers-0.1.15.dev387 → verifiers-0.1.15.dev389}/verifiers/envs/experimental/composable/tasksets/search/quest/obj_task_eval/prompts/__init__.py +0 -0
- {verifiers-0.1.15.dev387 → verifiers-0.1.15.dev389}/verifiers/envs/experimental/composable/tasksets/search/quest/obj_task_eval/prompts/cache_prompts.py +0 -0
- {verifiers-0.1.15.dev387 → verifiers-0.1.15.dev389}/verifiers/envs/experimental/composable/tasksets/search/quest/obj_task_eval/utils/__init__.py +0 -0
- {verifiers-0.1.15.dev387 → verifiers-0.1.15.dev389}/verifiers/envs/experimental/composable/tasksets/search/quest/obj_task_eval/utils/cache_filesys.py +0 -0
- {verifiers-0.1.15.dev387 → verifiers-0.1.15.dev389}/verifiers/envs/experimental/composable/tasksets/search/quest/obj_task_eval/utils/load_eval_script.py +0 -0
- {verifiers-0.1.15.dev387 → verifiers-0.1.15.dev389}/verifiers/envs/experimental/composable/tasksets/search/quest/obj_task_eval/utils/misc.py +0 -0
- {verifiers-0.1.15.dev387 → verifiers-0.1.15.dev389}/verifiers/envs/experimental/composable/tasksets/search/quest/obj_task_eval/utils/tool_visit.py +0 -0
- {verifiers-0.1.15.dev387 → verifiers-0.1.15.dev389}/verifiers/envs/experimental/composable/tasksets/search/quest/obj_task_eval/utils/url_tools.py +0 -0
- {verifiers-0.1.15.dev387 → verifiers-0.1.15.dev389}/verifiers/envs/experimental/composable/tasksets/search/quest/obj_task_eval/verification_tree.py +0 -0
- {verifiers-0.1.15.dev387 → verifiers-0.1.15.dev389}/verifiers/envs/experimental/composable/tasksets/search/quest/open_ended.py +0 -0
- {verifiers-0.1.15.dev387 → verifiers-0.1.15.dev389}/verifiers/envs/experimental/composable/tasksets/search/quest/taskset.py +0 -0
- {verifiers-0.1.15.dev387 → verifiers-0.1.15.dev389}/verifiers/envs/experimental/composable/tasksets/search/redsearcher/README.md +0 -0
- {verifiers-0.1.15.dev387 → verifiers-0.1.15.dev389}/verifiers/envs/experimental/composable/tasksets/search/redsearcher/__init__.py +0 -0
- {verifiers-0.1.15.dev387 → verifiers-0.1.15.dev389}/verifiers/envs/experimental/composable/tasksets/search/redsearcher/taskset.py +0 -0
- {verifiers-0.1.15.dev387 → verifiers-0.1.15.dev389}/verifiers/envs/experimental/composable/tasksets/search/search_tasksets.py +0 -0
- {verifiers-0.1.15.dev387 → verifiers-0.1.15.dev389}/verifiers/envs/experimental/composable/tasksets/swe/README.md +0 -0
- {verifiers-0.1.15.dev387 → verifiers-0.1.15.dev389}/verifiers/envs/experimental/composable/tasksets/swe/__init__.py +0 -0
- {verifiers-0.1.15.dev387 → verifiers-0.1.15.dev389}/verifiers/envs/experimental/composable/tasksets/swe/multi_swe/__init__.py +0 -0
- {verifiers-0.1.15.dev387 → verifiers-0.1.15.dev389}/verifiers/envs/experimental/composable/tasksets/swe/multi_swe/extract_fix_patch.sh +0 -0
- {verifiers-0.1.15.dev387 → verifiers-0.1.15.dev389}/verifiers/envs/experimental/composable/tasksets/swe/multi_swe/taskset.py +0 -0
- {verifiers-0.1.15.dev387 → verifiers-0.1.15.dev389}/verifiers/envs/experimental/composable/tasksets/swe/openswe/__init__.py +0 -0
- {verifiers-0.1.15.dev387 → verifiers-0.1.15.dev389}/verifiers/envs/experimental/composable/tasksets/swe/openswe/taskset.py +0 -0
- {verifiers-0.1.15.dev387 → verifiers-0.1.15.dev389}/verifiers/envs/experimental/composable/tasksets/swe/r2e_gym/__init__.py +0 -0
- {verifiers-0.1.15.dev387 → verifiers-0.1.15.dev389}/verifiers/envs/experimental/composable/tasksets/swe/r2e_gym/log_parser.py +0 -0
- {verifiers-0.1.15.dev387 → verifiers-0.1.15.dev389}/verifiers/envs/experimental/composable/tasksets/swe/r2e_gym/taskset.py +0 -0
- {verifiers-0.1.15.dev387 → verifiers-0.1.15.dev389}/verifiers/envs/experimental/composable/tasksets/swe/scale_swe/__init__.py +0 -0
- {verifiers-0.1.15.dev387 → verifiers-0.1.15.dev389}/verifiers/envs/experimental/composable/tasksets/swe/scale_swe/taskset.py +0 -0
- {verifiers-0.1.15.dev387 → verifiers-0.1.15.dev389}/verifiers/envs/experimental/composable/tasksets/swe/shared/__init__.py +0 -0
- {verifiers-0.1.15.dev387 → verifiers-0.1.15.dev389}/verifiers/envs/experimental/composable/tasksets/swe/shared/test_patch.py +0 -0
- {verifiers-0.1.15.dev387 → verifiers-0.1.15.dev389}/verifiers/envs/experimental/composable/tasksets/swe/swe_bench/__init__.py +0 -0
- {verifiers-0.1.15.dev387 → verifiers-0.1.15.dev389}/verifiers/envs/experimental/composable/tasksets/swe/swe_bench/taskset.py +0 -0
- {verifiers-0.1.15.dev387 → verifiers-0.1.15.dev389}/verifiers/envs/experimental/composable/tasksets/swe/swe_lego/__init__.py +0 -0
- {verifiers-0.1.15.dev387 → verifiers-0.1.15.dev389}/verifiers/envs/experimental/composable/tasksets/swe/swe_lego/taskset.py +0 -0
- {verifiers-0.1.15.dev387 → verifiers-0.1.15.dev389}/verifiers/envs/experimental/composable/tasksets/swe/swe_rebench_v2/__init__.py +0 -0
- {verifiers-0.1.15.dev387 → verifiers-0.1.15.dev389}/verifiers/envs/experimental/composable/tasksets/swe/swe_rebench_v2/log_parsers.py +0 -0
- {verifiers-0.1.15.dev387 → verifiers-0.1.15.dev389}/verifiers/envs/experimental/composable/tasksets/swe/swe_rebench_v2/taskset.py +0 -0
- {verifiers-0.1.15.dev387 → verifiers-0.1.15.dev389}/verifiers/envs/experimental/composable/tasksets/swe/swe_smith/__init__.py +0 -0
- {verifiers-0.1.15.dev387 → verifiers-0.1.15.dev389}/verifiers/envs/experimental/composable/tasksets/swe/swe_smith/taskset.py +0 -0
- {verifiers-0.1.15.dev387 → verifiers-0.1.15.dev389}/verifiers/envs/experimental/composable/tasksets/swe/swe_tasksets.py +0 -0
- {verifiers-0.1.15.dev387 → verifiers-0.1.15.dev389}/verifiers/envs/experimental/gym_env.py +0 -0
- {verifiers-0.1.15.dev387 → verifiers-0.1.15.dev389}/verifiers/envs/experimental/harbor_env/__init__.py +0 -0
- {verifiers-0.1.15.dev387 → verifiers-0.1.15.dev389}/verifiers/envs/experimental/harbor_env/env.py +0 -0
- {verifiers-0.1.15.dev387 → verifiers-0.1.15.dev389}/verifiers/envs/experimental/harbor_env/mcp.py +0 -0
- {verifiers-0.1.15.dev387 → verifiers-0.1.15.dev389}/verifiers/envs/experimental/mcp_env.py +0 -0
- {verifiers-0.1.15.dev387 → verifiers-0.1.15.dev389}/verifiers/envs/experimental/opencode_env.py +0 -0
- {verifiers-0.1.15.dev387 → verifiers-0.1.15.dev389}/verifiers/envs/experimental/opencode_qa_env.py +0 -0
- {verifiers-0.1.15.dev387 → verifiers-0.1.15.dev389}/verifiers/envs/experimental/opencode_rlm_env.py +0 -0
- {verifiers-0.1.15.dev387 → verifiers-0.1.15.dev389}/verifiers/envs/experimental/sandbox_mixin.py +0 -0
- {verifiers-0.1.15.dev387 → verifiers-0.1.15.dev389}/verifiers/envs/experimental/utils/__init__.py +0 -0
- {verifiers-0.1.15.dev387 → verifiers-0.1.15.dev389}/verifiers/envs/experimental/utils/file_locks.py +0 -0
- {verifiers-0.1.15.dev387 → verifiers-0.1.15.dev389}/verifiers/envs/experimental/utils/git_checkout_cache.py +0 -0
- {verifiers-0.1.15.dev387 → verifiers-0.1.15.dev389}/verifiers/envs/integrations/README.md +0 -0
- {verifiers-0.1.15.dev387 → verifiers-0.1.15.dev389}/verifiers/envs/integrations/__init__.py +0 -0
- {verifiers-0.1.15.dev387 → verifiers-0.1.15.dev389}/verifiers/envs/integrations/browser_env/README.md +0 -0
- {verifiers-0.1.15.dev387 → verifiers-0.1.15.dev389}/verifiers/envs/integrations/browser_env/__init__.py +0 -0
- {verifiers-0.1.15.dev387 → verifiers-0.1.15.dev389}/verifiers/envs/integrations/browser_env/browser_env.py +0 -0
- {verifiers-0.1.15.dev387 → verifiers-0.1.15.dev389}/verifiers/envs/integrations/browser_env/modes/__init__.py +0 -0
- {verifiers-0.1.15.dev387 → verifiers-0.1.15.dev389}/verifiers/envs/integrations/browser_env/modes/base.py +0 -0
- {verifiers-0.1.15.dev387 → verifiers-0.1.15.dev389}/verifiers/envs/integrations/browser_env/modes/cua_mode.py +0 -0
- {verifiers-0.1.15.dev387 → verifiers-0.1.15.dev389}/verifiers/envs/integrations/browser_env/modes/dom_mode.py +0 -0
- {verifiers-0.1.15.dev387 → verifiers-0.1.15.dev389}/verifiers/envs/integrations/openenv_env.py +0 -0
- {verifiers-0.1.15.dev387 → verifiers-0.1.15.dev389}/verifiers/envs/integrations/reasoninggym_env.py +0 -0
- {verifiers-0.1.15.dev387 → verifiers-0.1.15.dev389}/verifiers/envs/integrations/textarena_env.py +0 -0
- {verifiers-0.1.15.dev387 → verifiers-0.1.15.dev389}/verifiers/envs/multiturn_env.py +0 -0
- {verifiers-0.1.15.dev387 → verifiers-0.1.15.dev389}/verifiers/envs/python_env.py +0 -0
- {verifiers-0.1.15.dev387 → verifiers-0.1.15.dev389}/verifiers/envs/sandbox_env.py +0 -0
- {verifiers-0.1.15.dev387 → verifiers-0.1.15.dev389}/verifiers/envs/singleturn_env.py +0 -0
- {verifiers-0.1.15.dev387 → verifiers-0.1.15.dev389}/verifiers/envs/stateful_tool_env.py +0 -0
- {verifiers-0.1.15.dev387 → verifiers-0.1.15.dev389}/verifiers/envs/tool_env.py +0 -0
- {verifiers-0.1.15.dev387 → verifiers-0.1.15.dev389}/verifiers/errors.py +0 -0
- {verifiers-0.1.15.dev387 → verifiers-0.1.15.dev389}/verifiers/gepa/__init__.py +0 -0
- {verifiers-0.1.15.dev387 → verifiers-0.1.15.dev389}/verifiers/gepa/adapter.py +0 -0
- {verifiers-0.1.15.dev387 → verifiers-0.1.15.dev389}/verifiers/gepa/config.py +0 -0
- {verifiers-0.1.15.dev387 → verifiers-0.1.15.dev389}/verifiers/gepa/display.py +0 -0
- {verifiers-0.1.15.dev387 → verifiers-0.1.15.dev389}/verifiers/gepa/gepa_utils.py +0 -0
- {verifiers-0.1.15.dev387 → verifiers-0.1.15.dev389}/verifiers/parsers/__init__.py +0 -0
- {verifiers-0.1.15.dev387 → verifiers-0.1.15.dev389}/verifiers/parsers/maybe_think_parser.py +0 -0
- {verifiers-0.1.15.dev387 → verifiers-0.1.15.dev389}/verifiers/parsers/parser.py +0 -0
- {verifiers-0.1.15.dev387 → verifiers-0.1.15.dev389}/verifiers/parsers/think_parser.py +0 -0
- {verifiers-0.1.15.dev387 → verifiers-0.1.15.dev389}/verifiers/parsers/xml_parser.py +0 -0
- {verifiers-0.1.15.dev387 → verifiers-0.1.15.dev389}/verifiers/rl/README.md +0 -0
- {verifiers-0.1.15.dev387 → verifiers-0.1.15.dev389}/verifiers/rl/__init__.py +0 -0
- {verifiers-0.1.15.dev387 → verifiers-0.1.15.dev389}/verifiers/rl/inference/__init__.py +0 -0
- {verifiers-0.1.15.dev387 → verifiers-0.1.15.dev389}/verifiers/rl/inference/client.py +0 -0
- {verifiers-0.1.15.dev387 → verifiers-0.1.15.dev389}/verifiers/rl/inference/server.py +0 -0
- {verifiers-0.1.15.dev387 → verifiers-0.1.15.dev389}/verifiers/rl/trainer/__init__.py +0 -0
- {verifiers-0.1.15.dev387 → verifiers-0.1.15.dev389}/verifiers/rl/trainer/config.py +0 -0
- {verifiers-0.1.15.dev387 → verifiers-0.1.15.dev389}/verifiers/rl/trainer/orchestrator.py +0 -0
- {verifiers-0.1.15.dev387 → verifiers-0.1.15.dev389}/verifiers/rl/trainer/trainer.py +0 -0
- {verifiers-0.1.15.dev387 → verifiers-0.1.15.dev389}/verifiers/rl/trainer/utils.py +0 -0
- {verifiers-0.1.15.dev387 → verifiers-0.1.15.dev389}/verifiers/rubrics/__init__.py +0 -0
- {verifiers-0.1.15.dev387 → verifiers-0.1.15.dev389}/verifiers/rubrics/experimental/hybrid_math_rubric.py +0 -0
- {verifiers-0.1.15.dev387 → verifiers-0.1.15.dev389}/verifiers/rubrics/judge_rubric.py +0 -0
- {verifiers-0.1.15.dev387 → verifiers-0.1.15.dev389}/verifiers/rubrics/math_rubric.py +0 -0
- {verifiers-0.1.15.dev387 → verifiers-0.1.15.dev389}/verifiers/rubrics/rubric.py +0 -0
- {verifiers-0.1.15.dev387 → verifiers-0.1.15.dev389}/verifiers/rubrics/rubric_group.py +0 -0
- {verifiers-0.1.15.dev387 → verifiers-0.1.15.dev389}/verifiers/scripts/__init__.py +0 -0
- {verifiers-0.1.15.dev387 → verifiers-0.1.15.dev389}/verifiers/scripts/build.py +0 -0
- {verifiers-0.1.15.dev387 → verifiers-0.1.15.dev389}/verifiers/scripts/eval.py +0 -0
- {verifiers-0.1.15.dev387 → verifiers-0.1.15.dev389}/verifiers/scripts/gepa.py +0 -0
- {verifiers-0.1.15.dev387 → verifiers-0.1.15.dev389}/verifiers/scripts/init.py +0 -0
- {verifiers-0.1.15.dev387 → verifiers-0.1.15.dev389}/verifiers/scripts/install.py +0 -0
- {verifiers-0.1.15.dev387 → verifiers-0.1.15.dev389}/verifiers/scripts/rl.py +0 -0
- {verifiers-0.1.15.dev387 → verifiers-0.1.15.dev389}/verifiers/scripts/setup.py +0 -0
- {verifiers-0.1.15.dev387 → verifiers-0.1.15.dev389}/verifiers/scripts/train.py +0 -0
- {verifiers-0.1.15.dev387 → verifiers-0.1.15.dev389}/verifiers/scripts/tui.py +0 -0
- {verifiers-0.1.15.dev387 → verifiers-0.1.15.dev389}/verifiers/scripts/vllm.py +0 -0
- {verifiers-0.1.15.dev387 → verifiers-0.1.15.dev389}/verifiers/serve/__init__.py +0 -0
- {verifiers-0.1.15.dev387 → verifiers-0.1.15.dev389}/verifiers/serve/client/env_client.py +0 -0
- {verifiers-0.1.15.dev387 → verifiers-0.1.15.dev389}/verifiers/serve/client/zmq_env_client.py +0 -0
- {verifiers-0.1.15.dev387 → verifiers-0.1.15.dev389}/verifiers/serve/server/__init__.py +0 -0
- {verifiers-0.1.15.dev387 → verifiers-0.1.15.dev389}/verifiers/serve/server/env_router.py +0 -0
- {verifiers-0.1.15.dev387 → verifiers-0.1.15.dev389}/verifiers/serve/server/env_server.py +0 -0
- {verifiers-0.1.15.dev387 → verifiers-0.1.15.dev389}/verifiers/serve/server/env_worker.py +0 -0
- {verifiers-0.1.15.dev387 → verifiers-0.1.15.dev389}/verifiers/serve/server/zmq_env_server.py +0 -0
- {verifiers-0.1.15.dev387 → verifiers-0.1.15.dev389}/verifiers/serve/types.py +0 -0
- {verifiers-0.1.15.dev387 → verifiers-0.1.15.dev389}/verifiers/types.py +0 -0
- {verifiers-0.1.15.dev387 → verifiers-0.1.15.dev389}/verifiers/utils/__init__.py +0 -0
- {verifiers-0.1.15.dev387 → verifiers-0.1.15.dev389}/verifiers/utils/async_utils.py +0 -0
- {verifiers-0.1.15.dev387 → verifiers-0.1.15.dev389}/verifiers/utils/client_utils.py +0 -0
- {verifiers-0.1.15.dev387 → verifiers-0.1.15.dev389}/verifiers/utils/config_utils.py +0 -0
- {verifiers-0.1.15.dev387 → verifiers-0.1.15.dev389}/verifiers/utils/data_utils.py +0 -0
- {verifiers-0.1.15.dev387 → verifiers-0.1.15.dev389}/verifiers/utils/display_utils.py +0 -0
- {verifiers-0.1.15.dev387 → verifiers-0.1.15.dev389}/verifiers/utils/env_config_utils.py +0 -0
- {verifiers-0.1.15.dev387 → verifiers-0.1.15.dev389}/verifiers/utils/env_utils.py +0 -0
- {verifiers-0.1.15.dev387 → verifiers-0.1.15.dev389}/verifiers/utils/error_utils.py +0 -0
- {verifiers-0.1.15.dev387 → verifiers-0.1.15.dev389}/verifiers/utils/eval_display.py +0 -0
- {verifiers-0.1.15.dev387 → verifiers-0.1.15.dev389}/verifiers/utils/eval_utils.py +0 -0
- {verifiers-0.1.15.dev387 → verifiers-0.1.15.dev389}/verifiers/utils/heartbeat.py +0 -0
- {verifiers-0.1.15.dev387 → verifiers-0.1.15.dev389}/verifiers/utils/import_utils.py +0 -0
- {verifiers-0.1.15.dev387 → verifiers-0.1.15.dev389}/verifiers/utils/install_utils.py +0 -0
- {verifiers-0.1.15.dev387 → verifiers-0.1.15.dev389}/verifiers/utils/interception_utils.py +0 -0
- {verifiers-0.1.15.dev387 → verifiers-0.1.15.dev389}/verifiers/utils/logging_utils.py +0 -0
- {verifiers-0.1.15.dev387 → verifiers-0.1.15.dev389}/verifiers/utils/message_utils.py +0 -0
- {verifiers-0.1.15.dev387 → verifiers-0.1.15.dev389}/verifiers/utils/metric_utils.py +0 -0
- {verifiers-0.1.15.dev387 → verifiers-0.1.15.dev389}/verifiers/utils/path_utils.py +0 -0
- {verifiers-0.1.15.dev387 → verifiers-0.1.15.dev389}/verifiers/utils/pricing_utils.py +0 -0
- {verifiers-0.1.15.dev387 → verifiers-0.1.15.dev389}/verifiers/utils/process_utils.py +0 -0
- {verifiers-0.1.15.dev387 → verifiers-0.1.15.dev389}/verifiers/utils/response_utils.py +0 -0
- {verifiers-0.1.15.dev387 → verifiers-0.1.15.dev389}/verifiers/utils/save_utils.py +0 -0
- {verifiers-0.1.15.dev387 → verifiers-0.1.15.dev389}/verifiers/utils/serve_utils.py +0 -0
- {verifiers-0.1.15.dev387 → verifiers-0.1.15.dev389}/verifiers/utils/thread_utils.py +0 -0
- {verifiers-0.1.15.dev387 → verifiers-0.1.15.dev389}/verifiers/utils/threaded_sandbox_client.py +0 -0
- {verifiers-0.1.15.dev387 → verifiers-0.1.15.dev389}/verifiers/utils/tool_utils.py +0 -0
- {verifiers-0.1.15.dev387 → verifiers-0.1.15.dev389}/verifiers/utils/usage_utils.py +0 -0
- {verifiers-0.1.15.dev387 → verifiers-0.1.15.dev389}/verifiers/utils/version_utils.py +0 -0
- {verifiers-0.1.15.dev387 → verifiers-0.1.15.dev389}/verifiers/v1/ARCHITECTURE.md +0 -0
- {verifiers-0.1.15.dev387 → verifiers-0.1.15.dev389}/verifiers/v1/GUIDE.md +0 -0
- {verifiers-0.1.15.dev387 → verifiers-0.1.15.dev389}/verifiers/v1/README.md +0 -0
- {verifiers-0.1.15.dev387 → verifiers-0.1.15.dev389}/verifiers/v1/__init__.py +0 -0
- {verifiers-0.1.15.dev387 → verifiers-0.1.15.dev389}/verifiers/v1/cli/__init__.py +0 -0
- {verifiers-0.1.15.dev387 → verifiers-0.1.15.dev389}/verifiers/v1/cli/dashboard/__init__.py +0 -0
- {verifiers-0.1.15.dev387 → verifiers-0.1.15.dev389}/verifiers/v1/cli/dashboard/base.py +0 -0
- {verifiers-0.1.15.dev387 → verifiers-0.1.15.dev389}/verifiers/v1/cli/dashboard/eval.py +0 -0
- {verifiers-0.1.15.dev387 → verifiers-0.1.15.dev389}/verifiers/v1/cli/dashboard/validate.py +0 -0
- {verifiers-0.1.15.dev387 → verifiers-0.1.15.dev389}/verifiers/v1/cli/eval/__init__.py +0 -0
- {verifiers-0.1.15.dev387 → verifiers-0.1.15.dev389}/verifiers/v1/cli/eval/main.py +0 -0
- {verifiers-0.1.15.dev387 → verifiers-0.1.15.dev389}/verifiers/v1/cli/eval/resume.py +0 -0
- {verifiers-0.1.15.dev387 → verifiers-0.1.15.dev389}/verifiers/v1/cli/eval/runner.py +0 -0
- {verifiers-0.1.15.dev387 → verifiers-0.1.15.dev389}/verifiers/v1/cli/init.py +0 -0
- {verifiers-0.1.15.dev387 → verifiers-0.1.15.dev389}/verifiers/v1/cli/output.py +0 -0
- {verifiers-0.1.15.dev387 → verifiers-0.1.15.dev389}/verifiers/v1/cli/resolve.py +0 -0
- {verifiers-0.1.15.dev387 → verifiers-0.1.15.dev389}/verifiers/v1/cli/serve.py +0 -0
- {verifiers-0.1.15.dev387 → verifiers-0.1.15.dev389}/verifiers/v1/cli/validate.py +0 -0
- {verifiers-0.1.15.dev387 → verifiers-0.1.15.dev389}/verifiers/v1/clients/__init__.py +0 -0
- {verifiers-0.1.15.dev387 → verifiers-0.1.15.dev389}/verifiers/v1/clients/client.py +0 -0
- {verifiers-0.1.15.dev387 → verifiers-0.1.15.dev389}/verifiers/v1/clients/config.py +0 -0
- {verifiers-0.1.15.dev387 → verifiers-0.1.15.dev389}/verifiers/v1/clients/eval.py +0 -0
- {verifiers-0.1.15.dev387 → verifiers-0.1.15.dev389}/verifiers/v1/clients/train.py +0 -0
- {verifiers-0.1.15.dev387 → verifiers-0.1.15.dev389}/verifiers/v1/configs/__init__.py +0 -0
- {verifiers-0.1.15.dev387 → verifiers-0.1.15.dev389}/verifiers/v1/configs/eval.py +0 -0
- {verifiers-0.1.15.dev387 → verifiers-0.1.15.dev389}/verifiers/v1/configs/init.py +0 -0
- {verifiers-0.1.15.dev387 → verifiers-0.1.15.dev389}/verifiers/v1/configs/serve.py +0 -0
- {verifiers-0.1.15.dev387 → verifiers-0.1.15.dev389}/verifiers/v1/configs/validate.py +0 -0
- {verifiers-0.1.15.dev387 → verifiers-0.1.15.dev389}/verifiers/v1/decorators.py +0 -0
- {verifiers-0.1.15.dev387 → verifiers-0.1.15.dev389}/verifiers/v1/dialects/__init__.py +0 -0
- {verifiers-0.1.15.dev387 → verifiers-0.1.15.dev389}/verifiers/v1/dialects/anthropic.py +0 -0
- {verifiers-0.1.15.dev387 → verifiers-0.1.15.dev389}/verifiers/v1/dialects/base.py +0 -0
- {verifiers-0.1.15.dev387 → verifiers-0.1.15.dev389}/verifiers/v1/dialects/chat.py +0 -0
- {verifiers-0.1.15.dev387 → verifiers-0.1.15.dev389}/verifiers/v1/dialects/responses.py +0 -0
- {verifiers-0.1.15.dev387 → verifiers-0.1.15.dev389}/verifiers/v1/env.py +0 -0
- {verifiers-0.1.15.dev387 → verifiers-0.1.15.dev389}/verifiers/v1/episode.py +0 -0
- {verifiers-0.1.15.dev387 → verifiers-0.1.15.dev389}/verifiers/v1/errors.py +0 -0
- {verifiers-0.1.15.dev387 → verifiers-0.1.15.dev389}/verifiers/v1/graph.py +0 -0
- {verifiers-0.1.15.dev387 → verifiers-0.1.15.dev389}/verifiers/v1/harness.py +0 -0
- {verifiers-0.1.15.dev387 → verifiers-0.1.15.dev389}/verifiers/v1/harnesses/__init__.py +0 -0
- {verifiers-0.1.15.dev387 → verifiers-0.1.15.dev389}/verifiers/v1/harnesses/bash/__init__.py +0 -0
- {verifiers-0.1.15.dev387 → verifiers-0.1.15.dev389}/verifiers/v1/harnesses/bash/harness.py +0 -0
- {verifiers-0.1.15.dev387 → verifiers-0.1.15.dev389}/verifiers/v1/harnesses/bash/program.py +0 -0
- {verifiers-0.1.15.dev387 → verifiers-0.1.15.dev389}/verifiers/v1/harnesses/codex/__init__.py +0 -0
- {verifiers-0.1.15.dev387 → verifiers-0.1.15.dev389}/verifiers/v1/harnesses/codex/harness.py +0 -0
- {verifiers-0.1.15.dev387 → verifiers-0.1.15.dev389}/verifiers/v1/harnesses/default/__init__.py +0 -0
- {verifiers-0.1.15.dev387 → verifiers-0.1.15.dev389}/verifiers/v1/harnesses/default/harness.py +0 -0
- {verifiers-0.1.15.dev387 → verifiers-0.1.15.dev389}/verifiers/v1/harnesses/default/program.py +0 -0
- {verifiers-0.1.15.dev387 → verifiers-0.1.15.dev389}/verifiers/v1/harnesses/kimi_code/__init__.py +0 -0
- {verifiers-0.1.15.dev387 → verifiers-0.1.15.dev389}/verifiers/v1/harnesses/kimi_code/harness.py +0 -0
- {verifiers-0.1.15.dev387 → verifiers-0.1.15.dev389}/verifiers/v1/harnesses/mini_swe_agent/__init__.py +0 -0
- {verifiers-0.1.15.dev387 → verifiers-0.1.15.dev389}/verifiers/v1/harnesses/mini_swe_agent/harness.py +0 -0
- {verifiers-0.1.15.dev387 → verifiers-0.1.15.dev389}/verifiers/v1/harnesses/mini_swe_agent/program.py +0 -0
- {verifiers-0.1.15.dev387 → verifiers-0.1.15.dev389}/verifiers/v1/harnesses/rlm/__init__.py +0 -0
- {verifiers-0.1.15.dev387 → verifiers-0.1.15.dev389}/verifiers/v1/harnesses/terminus_2/__init__.py +0 -0
- {verifiers-0.1.15.dev387 → verifiers-0.1.15.dev389}/verifiers/v1/harnesses/terminus_2/harness.py +0 -0
- {verifiers-0.1.15.dev387 → verifiers-0.1.15.dev389}/verifiers/v1/harnesses/terminus_2/program.py +0 -0
- {verifiers-0.1.15.dev387 → verifiers-0.1.15.dev389}/verifiers/v1/interception/__init__.py +0 -0
- {verifiers-0.1.15.dev387 → verifiers-0.1.15.dev389}/verifiers/v1/interception/pool.py +0 -0
- {verifiers-0.1.15.dev387 → verifiers-0.1.15.dev389}/verifiers/v1/interception/server.py +0 -0
- {verifiers-0.1.15.dev387 → verifiers-0.1.15.dev389}/verifiers/v1/legacy.py +0 -0
- {verifiers-0.1.15.dev387 → verifiers-0.1.15.dev389}/verifiers/v1/loaders.py +0 -0
- {verifiers-0.1.15.dev387 → verifiers-0.1.15.dev389}/verifiers/v1/mcp/__init__.py +0 -0
- {verifiers-0.1.15.dev387 → verifiers-0.1.15.dev389}/verifiers/v1/mcp/launch.py +0 -0
- {verifiers-0.1.15.dev387 → verifiers-0.1.15.dev389}/verifiers/v1/mcp/multiplex.py +0 -0
- {verifiers-0.1.15.dev387 → verifiers-0.1.15.dev389}/verifiers/v1/mcp/server.py +0 -0
- {verifiers-0.1.15.dev387 → verifiers-0.1.15.dev389}/verifiers/v1/mcp/toolset.py +0 -0
- {verifiers-0.1.15.dev387 → verifiers-0.1.15.dev389}/verifiers/v1/mcp/user.py +0 -0
- {verifiers-0.1.15.dev387 → verifiers-0.1.15.dev389}/verifiers/v1/retries.py +0 -0
- {verifiers-0.1.15.dev387 → verifiers-0.1.15.dev389}/verifiers/v1/rollout.py +0 -0
- {verifiers-0.1.15.dev387 → verifiers-0.1.15.dev389}/verifiers/v1/runtimes/__init__.py +0 -0
- {verifiers-0.1.15.dev387 → verifiers-0.1.15.dev389}/verifiers/v1/runtimes/base.py +0 -0
- {verifiers-0.1.15.dev387 → verifiers-0.1.15.dev389}/verifiers/v1/runtimes/docker.py +0 -0
- {verifiers-0.1.15.dev387 → verifiers-0.1.15.dev389}/verifiers/v1/runtimes/limiters.py +0 -0
- {verifiers-0.1.15.dev387 → verifiers-0.1.15.dev389}/verifiers/v1/runtimes/modal.py +0 -0
- {verifiers-0.1.15.dev387 → verifiers-0.1.15.dev389}/verifiers/v1/runtimes/prime.py +0 -0
- {verifiers-0.1.15.dev387 → verifiers-0.1.15.dev389}/verifiers/v1/runtimes/subprocess.py +0 -0
- {verifiers-0.1.15.dev387 → verifiers-0.1.15.dev389}/verifiers/v1/serve/__init__.py +0 -0
- {verifiers-0.1.15.dev387 → verifiers-0.1.15.dev389}/verifiers/v1/serve/client.py +0 -0
- {verifiers-0.1.15.dev387 → verifiers-0.1.15.dev389}/verifiers/v1/serve/pool.py +0 -0
- {verifiers-0.1.15.dev387 → verifiers-0.1.15.dev389}/verifiers/v1/serve/server.py +0 -0
- {verifiers-0.1.15.dev387 → verifiers-0.1.15.dev389}/verifiers/v1/serve/types.py +0 -0
- {verifiers-0.1.15.dev387 → verifiers-0.1.15.dev389}/verifiers/v1/state.py +0 -0
- {verifiers-0.1.15.dev387 → verifiers-0.1.15.dev389}/verifiers/v1/task.py +0 -0
- {verifiers-0.1.15.dev387 → verifiers-0.1.15.dev389}/verifiers/v1/taskset.py +0 -0
- {verifiers-0.1.15.dev387 → verifiers-0.1.15.dev389}/verifiers/v1/tasksets/__init__.py +0 -0
- {verifiers-0.1.15.dev387 → verifiers-0.1.15.dev389}/verifiers/v1/tasksets/harbor/__init__.py +0 -0
- {verifiers-0.1.15.dev387 → verifiers-0.1.15.dev389}/verifiers/v1/tasksets/harbor/taskset.py +0 -0
- {verifiers-0.1.15.dev387 → verifiers-0.1.15.dev389}/verifiers/v1/tasksets/textarena/__init__.py +0 -0
- {verifiers-0.1.15.dev387 → verifiers-0.1.15.dev389}/verifiers/v1/tasksets/textarena/taskset.py +0 -0
- {verifiers-0.1.15.dev387 → verifiers-0.1.15.dev389}/verifiers/v1/trace.py +0 -0
- {verifiers-0.1.15.dev387 → verifiers-0.1.15.dev389}/verifiers/v1/types.py +0 -0
- {verifiers-0.1.15.dev387 → verifiers-0.1.15.dev389}/verifiers/v1/utils/__init__.py +0 -0
- {verifiers-0.1.15.dev387 → verifiers-0.1.15.dev389}/verifiers/v1/utils/format.py +0 -0
- {verifiers-0.1.15.dev387 → verifiers-0.1.15.dev389}/verifiers/v1/utils/install.py +0 -0
- {verifiers-0.1.15.dev387 → verifiers-0.1.15.dev389}/verifiers/v1/utils/logging.py +0 -0
- {verifiers-0.1.15.dev387 → verifiers-0.1.15.dev389}/verifiers/v1/utils/memory.py +0 -0
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
Metadata-Version: 2.4
|
|
2
2
|
Name: verifiers
|
|
3
|
-
Version: 0.1.15.
|
|
3
|
+
Version: 0.1.15.dev389
|
|
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
|
|
@@ -0,0 +1,10 @@
|
|
|
1
|
+
"""bash_edit — v1's built-in agentic harness: the `bash` chat loop plus a local `edit` tool
|
|
2
|
+
(single-occurrence string replacement, ported from rlm). Its `harness.py` (class + config) and
|
|
3
|
+
the `program.py` script staged into the runtime. Resolved by id via `load_harness`."""
|
|
4
|
+
|
|
5
|
+
from verifiers.v1.harnesses.bash_edit.harness import (
|
|
6
|
+
BashEditHarness,
|
|
7
|
+
BashEditHarnessConfig,
|
|
8
|
+
)
|
|
9
|
+
|
|
10
|
+
__all__ = ["BashEditHarness", "BashEditHarnessConfig"]
|
|
@@ -0,0 +1,84 @@
|
|
|
1
|
+
"""The built-in bash_edit harness: the `bash` chat loop plus a local `edit` tool.
|
|
2
|
+
|
|
3
|
+
Same growing-message-list chat loop as the `bash` harness — a local `bash` tool that runs shell
|
|
4
|
+
commands in the runtime, plus the taskset's MCP tools — with one extra local tool: `edit`, a
|
|
5
|
+
single-occurrence string replacement in a file (ported from the rlm `edit` skill). For agentic
|
|
6
|
+
tasks where targeted file edits are common and a model handles `edit` more reliably than
|
|
7
|
+
hand-built `sed`/heredoc shell. Its uv script (deps: openai, mcp) is prepared during setup, then
|
|
8
|
+
launched as the harness program.
|
|
9
|
+
"""
|
|
10
|
+
|
|
11
|
+
import json
|
|
12
|
+
from pathlib import Path
|
|
13
|
+
|
|
14
|
+
from verifiers.v1.harness import Harness, HarnessConfig
|
|
15
|
+
from verifiers.v1.clients import RolloutContext
|
|
16
|
+
from verifiers.v1.dialects.chat import message_to_wire
|
|
17
|
+
from verifiers.v1.runtimes import ProgramResult, Runtime
|
|
18
|
+
from verifiers.v1.trace import Trace
|
|
19
|
+
|
|
20
|
+
PROGRAM_SOURCE = (Path(__file__).resolve().parent / "program.py").read_text()
|
|
21
|
+
|
|
22
|
+
# Frames the model as a coding agent and names its local tools (a pure-text chat loop gets no
|
|
23
|
+
# harness-injected prompt).
|
|
24
|
+
BASH_EDIT_SYSTEM_PROMPT = (
|
|
25
|
+
"You are a coding agent. You have access to a bash tool for running shell commands and "
|
|
26
|
+
"an edit tool for single-occurrence string replacement in a file."
|
|
27
|
+
)
|
|
28
|
+
|
|
29
|
+
|
|
30
|
+
class BashEditHarnessConfig(HarnessConfig):
|
|
31
|
+
"""The built-in bash_edit harness. A uv script (deps: openai, mcp), so it runs in any runtime
|
|
32
|
+
that has `uv` (the harness bootstraps it) with no other setup."""
|
|
33
|
+
|
|
34
|
+
|
|
35
|
+
class BashEditHarness(Harness[BashEditHarnessConfig]):
|
|
36
|
+
APPENDS_SYSTEM_PROMPT = True
|
|
37
|
+
SUPPORTS_USER_SIM = True
|
|
38
|
+
SUPPORTS_MESSAGE_PROMPT = True
|
|
39
|
+
|
|
40
|
+
async def setup(self, runtime: Runtime) -> None:
|
|
41
|
+
await runtime.prepare_uv_script(PROGRAM_SOURCE, self.config.env)
|
|
42
|
+
|
|
43
|
+
async def launch(
|
|
44
|
+
self,
|
|
45
|
+
ctx: RolloutContext,
|
|
46
|
+
trace: Trace,
|
|
47
|
+
runtime: Runtime,
|
|
48
|
+
endpoint: str,
|
|
49
|
+
secret: str,
|
|
50
|
+
mcp_urls: dict[str, str],
|
|
51
|
+
) -> ProgramResult:
|
|
52
|
+
system_prompt, prompt = self.resolve_prompt(trace.task)
|
|
53
|
+
system_prompt = "\n\n".join(
|
|
54
|
+
p for p in (BASH_EDIT_SYSTEM_PROMPT, system_prompt) if p
|
|
55
|
+
)
|
|
56
|
+
env = {**self.config.env}
|
|
57
|
+
args = [
|
|
58
|
+
f"--base-url={endpoint}",
|
|
59
|
+
f"--api-key={secret}",
|
|
60
|
+
f"--model={ctx.model}",
|
|
61
|
+
f"--system-prompt={system_prompt}",
|
|
62
|
+
]
|
|
63
|
+
if mcp_urls:
|
|
64
|
+
# The program connects to the tool servers over HTTP; hand it a standard
|
|
65
|
+
# `mcpServers` URL config (the `mcp` client itself comes from the uv deps).
|
|
66
|
+
args.append(
|
|
67
|
+
"--mcp-config="
|
|
68
|
+
+ json.dumps(
|
|
69
|
+
{
|
|
70
|
+
"mcpServers": {
|
|
71
|
+
name: {"url": url} for name, url in mcp_urls.items()
|
|
72
|
+
}
|
|
73
|
+
}
|
|
74
|
+
)
|
|
75
|
+
)
|
|
76
|
+
# A Messages prompt (e.g. an image-bearing prompt) seeds the chat loop directly via env
|
|
77
|
+
# (it can be large multimodal content that overflows argv); a plain string is the single
|
|
78
|
+
# first user message; None means the task has no prompt and the user simulator opens it.
|
|
79
|
+
if isinstance(prompt, str):
|
|
80
|
+
args.append(f"--prompt={prompt}")
|
|
81
|
+
elif prompt is not None:
|
|
82
|
+
env["INITIAL_MESSAGES"] = json.dumps([message_to_wire(m) for m in prompt])
|
|
83
|
+
program = await runtime.prepare_uv_script(PROGRAM_SOURCE, self.config.env)
|
|
84
|
+
return await runtime.run_program([*program, *args], env)
|
|
@@ -0,0 +1,250 @@
|
|
|
1
|
+
# /// script
|
|
2
|
+
# requires-python = ">=3.10"
|
|
3
|
+
# dependencies = ["openai", "mcp"]
|
|
4
|
+
# ///
|
|
5
|
+
"""The bash_edit harness's program: a chat loop with local `bash` + `edit` tools (+ optional MCP).
|
|
6
|
+
|
|
7
|
+
A growing-message-list chat loop. It always offers a local `bash` tool that runs shell commands in
|
|
8
|
+
the runtime and a local `edit` tool that replaces a unique string in a file; when the harness sets
|
|
9
|
+
MCP_CONFIG (a standard `mcpServers` URL map) it also connects to those servers over streamable
|
|
10
|
+
HTTP, exposes their tools to the model as `<server>_<tool>`, and routes those calls to the server.
|
|
11
|
+
The loop runs until the model answers without a tool call.
|
|
12
|
+
|
|
13
|
+
It runs as a uv script (deps: openai, mcp), so the chat + tool plumbing is just the SDKs — the
|
|
14
|
+
harness bootstraps `uv` in the runtime. The interception endpoint, per-rollout secret, and model
|
|
15
|
+
arrive as argv (not env), so the local tools' subprocesses never inherit them.
|
|
16
|
+
"""
|
|
17
|
+
|
|
18
|
+
import argparse
|
|
19
|
+
import asyncio
|
|
20
|
+
import json
|
|
21
|
+
import os
|
|
22
|
+
import subprocess
|
|
23
|
+
from contextlib import AsyncExitStack
|
|
24
|
+
from pathlib import Path
|
|
25
|
+
|
|
26
|
+
from openai import AsyncOpenAI
|
|
27
|
+
|
|
28
|
+
BASH_TOOL = {
|
|
29
|
+
"type": "function",
|
|
30
|
+
"function": {
|
|
31
|
+
"name": "bash",
|
|
32
|
+
"description": "Run a bash command and return its combined stdout and stderr.",
|
|
33
|
+
"parameters": {
|
|
34
|
+
"type": "object",
|
|
35
|
+
"properties": {
|
|
36
|
+
"command": {"type": "string", "description": "The bash command to run."}
|
|
37
|
+
},
|
|
38
|
+
"required": ["command"],
|
|
39
|
+
},
|
|
40
|
+
},
|
|
41
|
+
}
|
|
42
|
+
|
|
43
|
+
EDIT_TOOL = {
|
|
44
|
+
"type": "function",
|
|
45
|
+
"function": {
|
|
46
|
+
"name": "edit",
|
|
47
|
+
"description": (
|
|
48
|
+
"Replace a unique string in a file. old_str must appear exactly once in the file."
|
|
49
|
+
),
|
|
50
|
+
"parameters": {
|
|
51
|
+
"type": "object",
|
|
52
|
+
"properties": {
|
|
53
|
+
"path": {
|
|
54
|
+
"type": "string",
|
|
55
|
+
"description": "File path (relative to cwd or absolute).",
|
|
56
|
+
},
|
|
57
|
+
"old_str": {
|
|
58
|
+
"type": "string",
|
|
59
|
+
"description": "Exact string to find (must appear exactly once).",
|
|
60
|
+
},
|
|
61
|
+
"new_str": {"type": "string", "description": "Replacement string."},
|
|
62
|
+
},
|
|
63
|
+
"required": ["path", "old_str", "new_str"],
|
|
64
|
+
},
|
|
65
|
+
},
|
|
66
|
+
}
|
|
67
|
+
|
|
68
|
+
|
|
69
|
+
def run_bash(command: str) -> str:
|
|
70
|
+
try:
|
|
71
|
+
result = subprocess.run(
|
|
72
|
+
["bash", "-c", command], capture_output=True, text=True, timeout=3600
|
|
73
|
+
)
|
|
74
|
+
return result.stdout + result.stderr
|
|
75
|
+
except Exception as e:
|
|
76
|
+
return f"error: {e}"
|
|
77
|
+
|
|
78
|
+
|
|
79
|
+
def run_edit(path: str, old_str: str, new_str: str) -> str:
|
|
80
|
+
if not isinstance(path, str) or not path:
|
|
81
|
+
return "error: 'path' is required"
|
|
82
|
+
if not isinstance(old_str, str) or not isinstance(new_str, str):
|
|
83
|
+
return "error: 'old_str' and 'new_str' must be strings"
|
|
84
|
+
if not old_str:
|
|
85
|
+
# '' matches everywhere (''.count('') == 1 on an empty file), so it would insert
|
|
86
|
+
# rather than replace — reject it to keep the "exactly once" contract honest.
|
|
87
|
+
return "error: 'old_str' must be a non-empty string"
|
|
88
|
+
filepath = Path(path)
|
|
89
|
+
if not filepath.is_absolute():
|
|
90
|
+
filepath = Path.cwd() / filepath
|
|
91
|
+
if not filepath.exists():
|
|
92
|
+
return f"error: {path} not found"
|
|
93
|
+
# Reading/writing can fail on a directory, permissions, or non-text content; return the
|
|
94
|
+
# error as a tool result instead of letting it abort the chat loop.
|
|
95
|
+
try:
|
|
96
|
+
content = filepath.read_text()
|
|
97
|
+
except Exception as e:
|
|
98
|
+
return f"error: could not read {path}: {e}"
|
|
99
|
+
count = content.count(old_str)
|
|
100
|
+
if count != 1:
|
|
101
|
+
return f"error: old_str must appear exactly once in {path} (found {count})"
|
|
102
|
+
try:
|
|
103
|
+
filepath.write_text(content.replace(old_str, new_str, 1))
|
|
104
|
+
except Exception as e:
|
|
105
|
+
return f"error: could not write {path}: {e}"
|
|
106
|
+
return f"Edited {path}"
|
|
107
|
+
|
|
108
|
+
|
|
109
|
+
async def chat(
|
|
110
|
+
client: AsyncOpenAI, model: str, messages: list[dict], tools: list[dict]
|
|
111
|
+
):
|
|
112
|
+
completion = await client.chat.completions.create(
|
|
113
|
+
model=model, messages=messages, tools=tools or None
|
|
114
|
+
)
|
|
115
|
+
return completion.choices[0].message
|
|
116
|
+
|
|
117
|
+
|
|
118
|
+
async def connect_mcp(stack: AsyncExitStack, config: dict) -> tuple[list[dict], dict]:
|
|
119
|
+
"""Connect to each configured MCP server (a streamable-HTTP `url`); return
|
|
120
|
+
(tool schemas, dispatch mapping `<server>_<tool>` -> (session, raw tool name))."""
|
|
121
|
+
from mcp import ClientSession
|
|
122
|
+
from mcp.client.streamable_http import (
|
|
123
|
+
create_mcp_http_client,
|
|
124
|
+
streamable_http_client,
|
|
125
|
+
)
|
|
126
|
+
|
|
127
|
+
tool_schemas: list[dict] = []
|
|
128
|
+
dispatch: dict[str, tuple] = {}
|
|
129
|
+
for name, spec in config.get("mcpServers", {}).items():
|
|
130
|
+
http_client = await stack.enter_async_context(
|
|
131
|
+
create_mcp_http_client(headers=spec.get("headers") or None)
|
|
132
|
+
)
|
|
133
|
+
read, write, *_ = await stack.enter_async_context(
|
|
134
|
+
streamable_http_client(spec["url"], http_client=http_client)
|
|
135
|
+
)
|
|
136
|
+
session = await stack.enter_async_context(ClientSession(read, write))
|
|
137
|
+
await session.initialize()
|
|
138
|
+
for tool in (await session.list_tools()).tools:
|
|
139
|
+
full = f"{name}_{tool.name}"
|
|
140
|
+
tool_schemas.append(
|
|
141
|
+
{
|
|
142
|
+
"type": "function",
|
|
143
|
+
"function": {
|
|
144
|
+
"name": full,
|
|
145
|
+
"description": tool.description or "",
|
|
146
|
+
"parameters": tool.inputSchema,
|
|
147
|
+
},
|
|
148
|
+
}
|
|
149
|
+
)
|
|
150
|
+
dispatch[full] = (session, tool.name)
|
|
151
|
+
return tool_schemas, dispatch
|
|
152
|
+
|
|
153
|
+
|
|
154
|
+
def mcp_content_to_chat_content(blocks) -> str | list[dict]:
|
|
155
|
+
parts = []
|
|
156
|
+
for block in blocks:
|
|
157
|
+
if block.type == "text":
|
|
158
|
+
parts.append({"type": "text", "text": block.text})
|
|
159
|
+
elif block.type == "image":
|
|
160
|
+
url = f"data:{block.mimeType};base64,{block.data}"
|
|
161
|
+
parts.append({"type": "image_url", "image_url": {"url": url}})
|
|
162
|
+
else:
|
|
163
|
+
parts.append({"type": "text", "text": str(block)})
|
|
164
|
+
if not parts:
|
|
165
|
+
return str(blocks)
|
|
166
|
+
if all(part["type"] == "text" for part in parts):
|
|
167
|
+
return "\n".join(part["text"] for part in parts)
|
|
168
|
+
return parts
|
|
169
|
+
|
|
170
|
+
|
|
171
|
+
async def call_mcp(dispatch: dict, name: str, arguments: dict) -> str | list[dict]:
|
|
172
|
+
session, raw = dispatch[name]
|
|
173
|
+
result = await session.call_tool(raw, arguments)
|
|
174
|
+
return mcp_content_to_chat_content(result.content)
|
|
175
|
+
|
|
176
|
+
|
|
177
|
+
def parse_args() -> argparse.Namespace:
|
|
178
|
+
parser = argparse.ArgumentParser()
|
|
179
|
+
parser.add_argument("--base-url", required=True)
|
|
180
|
+
parser.add_argument("--api-key", required=True)
|
|
181
|
+
parser.add_argument("--model", required=True)
|
|
182
|
+
parser.add_argument("--system-prompt", default="")
|
|
183
|
+
parser.add_argument("--prompt", default="")
|
|
184
|
+
parser.add_argument("--mcp-config", default="")
|
|
185
|
+
return parser.parse_args()
|
|
186
|
+
|
|
187
|
+
|
|
188
|
+
async def main() -> None:
|
|
189
|
+
args = parse_args()
|
|
190
|
+
client = AsyncOpenAI(base_url=args.base_url, api_key=args.api_key)
|
|
191
|
+
config = json.loads(args.mcp_config or "{}")
|
|
192
|
+
async with AsyncExitStack() as stack:
|
|
193
|
+
mcp_tools, dispatch = (
|
|
194
|
+
await connect_mcp(stack, config) if config.get("mcpServers") else ([], {})
|
|
195
|
+
)
|
|
196
|
+
tools = [BASH_TOOL, EDIT_TOOL] + mcp_tools
|
|
197
|
+
messages = (
|
|
198
|
+
[{"role": "system", "content": args.system_prompt}]
|
|
199
|
+
if args.system_prompt
|
|
200
|
+
else []
|
|
201
|
+
)
|
|
202
|
+
# A Messages prompt (e.g. an image-bearing prompt) arrives pre-built as OpenAI wire dicts
|
|
203
|
+
# via INITIAL_MESSAGES (kept in env: it can be large multimodal content that overflows
|
|
204
|
+
# argv, and it's prompt content, not a credential); otherwise --prompt is the opening
|
|
205
|
+
# message. Both empty means the task has no prompt — the user simulator seeds the opening.
|
|
206
|
+
initial = json.loads(os.environ.get("INITIAL_MESSAGES", "[]"))
|
|
207
|
+
if initial:
|
|
208
|
+
messages.extend(initial)
|
|
209
|
+
elif args.prompt:
|
|
210
|
+
messages.append({"role": "user", "content": args.prompt})
|
|
211
|
+
while True:
|
|
212
|
+
message = await chat(client, args.model, messages, tools)
|
|
213
|
+
messages.append(message.model_dump(exclude_none=True))
|
|
214
|
+
if not message.tool_calls:
|
|
215
|
+
break
|
|
216
|
+
for call in message.tool_calls:
|
|
217
|
+
name = call.function.name
|
|
218
|
+
try:
|
|
219
|
+
tool_args = json.loads(call.function.arguments or "{}")
|
|
220
|
+
except json.JSONDecodeError as e:
|
|
221
|
+
messages.append(
|
|
222
|
+
{
|
|
223
|
+
"role": "tool",
|
|
224
|
+
"tool_call_id": call.id,
|
|
225
|
+
"content": f"error: invalid JSON in tool arguments ({e}); resend the call with valid JSON",
|
|
226
|
+
}
|
|
227
|
+
)
|
|
228
|
+
continue
|
|
229
|
+
if name in dispatch:
|
|
230
|
+
content = await call_mcp(dispatch, name, tool_args)
|
|
231
|
+
elif name == "bash":
|
|
232
|
+
content = await asyncio.to_thread(
|
|
233
|
+
run_bash, tool_args.get("command", "")
|
|
234
|
+
)
|
|
235
|
+
elif name == "edit":
|
|
236
|
+
content = await asyncio.to_thread(
|
|
237
|
+
run_edit,
|
|
238
|
+
tool_args.get("path"),
|
|
239
|
+
tool_args.get("old_str"),
|
|
240
|
+
tool_args.get("new_str"),
|
|
241
|
+
)
|
|
242
|
+
else:
|
|
243
|
+
content = f"error: unknown tool {name!r}"
|
|
244
|
+
messages.append(
|
|
245
|
+
{"role": "tool", "tool_call_id": call.id, "content": content}
|
|
246
|
+
)
|
|
247
|
+
|
|
248
|
+
|
|
249
|
+
if __name__ == "__main__":
|
|
250
|
+
asyncio.run(main())
|
|
@@ -11,6 +11,7 @@ programmatically (`await tools_<name>(...)`), rather than via a native MCP clien
|
|
|
11
11
|
import json
|
|
12
12
|
import logging
|
|
13
13
|
import shlex
|
|
14
|
+
from typing import Literal
|
|
14
15
|
|
|
15
16
|
from pydantic import model_validator
|
|
16
17
|
|
|
@@ -22,6 +23,8 @@ from verifiers.v1.trace import Trace
|
|
|
22
23
|
|
|
23
24
|
logger = logging.getLogger(__name__)
|
|
24
25
|
|
|
26
|
+
BuiltinSkill = Literal["edit", "search"]
|
|
27
|
+
|
|
25
28
|
RLM_REPO = "github.com/PrimeIntellect-ai/rlm.git"
|
|
26
29
|
# rlm writes its session under $RLM_HOME/sessions/<id>/; point it at a workdir-
|
|
27
30
|
# relative dir so it stays in the runtime (and is cleaned up with the workdir).
|
|
@@ -37,8 +40,8 @@ class RLMHarnessConfig(HarnessConfig):
|
|
|
37
40
|
"""Git ref (branch, tag, or commit) of rlm to install."""
|
|
38
41
|
max_depth: int = 0
|
|
39
42
|
"""Recursion depth rlm may spawn sub-harnesses to (RLM_MAX_DEPTH)."""
|
|
40
|
-
skills: list[
|
|
41
|
-
"""Built-in rlm skills to enable (RLM_SKILLS), e.g. `["edit"]`;
|
|
43
|
+
skills: list[BuiltinSkill] = []
|
|
44
|
+
"""Built-in rlm skills to enable (RLM_SKILLS), e.g. `["edit"]`; empty enables none.
|
|
42
45
|
The tool set is fixed (ipython); only built-in skills are selectable."""
|
|
43
46
|
|
|
44
47
|
@model_validator(mode="after")
|
|
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
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
{verifiers-0.1.15.dev387 → verifiers-0.1.15.dev389}/tests/v1/fixtures/tool_response_image_v1.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
|