verifiers 0.1.15.dev165__tar.gz → 0.1.15.dev167__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.dev165 → verifiers-0.1.15.dev167}/PKG-INFO +1 -1
- {verifiers-0.1.15.dev165 → verifiers-0.1.15.dev167}/tests/test_composable_env.py +22 -0
- {verifiers-0.1.15.dev165 → verifiers-0.1.15.dev167}/tests/test_environment.py +4 -4
- {verifiers-0.1.15.dev165 → verifiers-0.1.15.dev167}/tests/test_environment_extra.py +24 -0
- {verifiers-0.1.15.dev165 → verifiers-0.1.15.dev167}/tests/test_eval_cli.py +25 -0
- {verifiers-0.1.15.dev165 → verifiers-0.1.15.dev167}/tests/test_path_utils.py +47 -0
- {verifiers-0.1.15.dev165 → verifiers-0.1.15.dev167}/tests/test_save_utils.py +61 -0
- {verifiers-0.1.15.dev165 → verifiers-0.1.15.dev167}/tests/test_v1_config_extension.py +6 -3
- {verifiers-0.1.15.dev165 → verifiers-0.1.15.dev167}/tests/test_v1_runtime_lifecycle.py +7 -2
- {verifiers-0.1.15.dev165 → verifiers-0.1.15.dev167}/tests/test_v1_taskset_utils.py +23 -1
- {verifiers-0.1.15.dev165 → verifiers-0.1.15.dev167}/verifiers/envs/environment.py +52 -12
- {verifiers-0.1.15.dev165 → verifiers-0.1.15.dev167}/verifiers/envs/experimental/cli_agent_env.py +3 -3
- {verifiers-0.1.15.dev165 → verifiers-0.1.15.dev167}/verifiers/scripts/eval.py +22 -0
- {verifiers-0.1.15.dev165 → verifiers-0.1.15.dev167}/verifiers/types.py +25 -6
- {verifiers-0.1.15.dev165 → verifiers-0.1.15.dev167}/verifiers/utils/async_utils.py +3 -3
- {verifiers-0.1.15.dev165 → verifiers-0.1.15.dev167}/verifiers/utils/env_utils.py +24 -9
- {verifiers-0.1.15.dev165 → verifiers-0.1.15.dev167}/verifiers/utils/error_utils.py +58 -9
- {verifiers-0.1.15.dev165 → verifiers-0.1.15.dev167}/verifiers/utils/eval_utils.py +5 -1
- {verifiers-0.1.15.dev165 → verifiers-0.1.15.dev167}/verifiers/utils/logging_utils.py +2 -2
- {verifiers-0.1.15.dev165 → verifiers-0.1.15.dev167}/verifiers/utils/path_utils.py +8 -0
- {verifiers-0.1.15.dev165 → verifiers-0.1.15.dev167}/verifiers/utils/save_utils.py +25 -19
- {verifiers-0.1.15.dev165 → verifiers-0.1.15.dev167}/verifiers/v1/harness.py +2 -2
- {verifiers-0.1.15.dev165 → verifiers-0.1.15.dev167}/verifiers/v1/model.py +6 -3
- {verifiers-0.1.15.dev165 → verifiers-0.1.15.dev167}/verifiers/v1/program.py +0 -2
- {verifiers-0.1.15.dev165 → verifiers-0.1.15.dev167}/verifiers/v1/runtime.py +3 -3
- {verifiers-0.1.15.dev165 → verifiers-0.1.15.dev167}/verifiers/v1/utils/binding_utils.py +7 -3
- {verifiers-0.1.15.dev165 → verifiers-0.1.15.dev167}/verifiers/v1/utils/config_utils.py +7 -5
- {verifiers-0.1.15.dev165 → verifiers-0.1.15.dev167}/verifiers/v1/utils/endpoint_utils.py +24 -16
- {verifiers-0.1.15.dev165 → verifiers-0.1.15.dev167}/verifiers/v1/utils/logging_utils.py +6 -2
- {verifiers-0.1.15.dev165 → verifiers-0.1.15.dev167}/verifiers/v1/utils/program_utils.py +53 -24
- {verifiers-0.1.15.dev165 → verifiers-0.1.15.dev167}/verifiers/v1/utils/runtime_owner_utils.py +12 -4
- {verifiers-0.1.15.dev165 → verifiers-0.1.15.dev167}/verifiers/v1/utils/sandbox_program_utils.py +29 -6
- {verifiers-0.1.15.dev165 → verifiers-0.1.15.dev167}/verifiers/v1/utils/sandbox_utils.py +11 -3
- {verifiers-0.1.15.dev165 → verifiers-0.1.15.dev167}/verifiers/v1/utils/toolset_utils.py +2 -2
- {verifiers-0.1.15.dev165 → verifiers-0.1.15.dev167}/.gitignore +0 -0
- {verifiers-0.1.15.dev165 → verifiers-0.1.15.dev167}/LICENSE +0 -0
- {verifiers-0.1.15.dev165 → verifiers-0.1.15.dev167}/README.md +0 -0
- {verifiers-0.1.15.dev165 → verifiers-0.1.15.dev167}/pyproject.toml +0 -0
- {verifiers-0.1.15.dev165 → verifiers-0.1.15.dev167}/tests/AGENTS.md +0 -0
- {verifiers-0.1.15.dev165 → verifiers-0.1.15.dev167}/tests/README.md +0 -0
- {verifiers-0.1.15.dev165 → verifiers-0.1.15.dev167}/tests/__init__.py +0 -0
- {verifiers-0.1.15.dev165 → verifiers-0.1.15.dev167}/tests/conftest.py +0 -0
- {verifiers-0.1.15.dev165 → verifiers-0.1.15.dev167}/tests/test_browser_env.py +0 -0
- {verifiers-0.1.15.dev165 → verifiers-0.1.15.dev167}/tests/test_build_script.py +0 -0
- {verifiers-0.1.15.dev165 → verifiers-0.1.15.dev167}/tests/test_cli_agent_env.py +0 -0
- {verifiers-0.1.15.dev165 → verifiers-0.1.15.dev167}/tests/test_client_auth_errors.py +0 -0
- {verifiers-0.1.15.dev165 → verifiers-0.1.15.dev167}/tests/test_client_config.py +0 -0
- {verifiers-0.1.15.dev165 → verifiers-0.1.15.dev167}/tests/test_client_multimodal_types.py +0 -0
- {verifiers-0.1.15.dev165 → verifiers-0.1.15.dev167}/tests/test_context_token_metrics.py +0 -0
- {verifiers-0.1.15.dev165 → verifiers-0.1.15.dev167}/tests/test_decorator_ranks.py +0 -0
- {verifiers-0.1.15.dev165 → verifiers-0.1.15.dev167}/tests/test_endpoint_registry.py +0 -0
- {verifiers-0.1.15.dev165 → verifiers-0.1.15.dev167}/tests/test_env_group.py +0 -0
- {verifiers-0.1.15.dev165 → verifiers-0.1.15.dev167}/tests/test_env_server.py +0 -0
- {verifiers-0.1.15.dev165 → verifiers-0.1.15.dev167}/tests/test_envs.py +0 -0
- {verifiers-0.1.15.dev165 → verifiers-0.1.15.dev167}/tests/test_error_chain.py +0 -0
- {verifiers-0.1.15.dev165 → verifiers-0.1.15.dev167}/tests/test_eval_display.py +0 -0
- {verifiers-0.1.15.dev165 → verifiers-0.1.15.dev167}/tests/test_eval_utils.py +0 -0
- {verifiers-0.1.15.dev165 → verifiers-0.1.15.dev167}/tests/test_gepa_cli.py +0 -0
- {verifiers-0.1.15.dev165 → verifiers-0.1.15.dev167}/tests/test_gepa_utils.py +0 -0
- {verifiers-0.1.15.dev165 → verifiers-0.1.15.dev167}/tests/test_gym_env.py +0 -0
- {verifiers-0.1.15.dev165 → verifiers-0.1.15.dev167}/tests/test_harbor_env_mcp.py +0 -0
- {verifiers-0.1.15.dev165 → verifiers-0.1.15.dev167}/tests/test_imports.py +0 -0
- {verifiers-0.1.15.dev165 → verifiers-0.1.15.dev167}/tests/test_init_script.py +0 -0
- {verifiers-0.1.15.dev165 → verifiers-0.1.15.dev167}/tests/test_install_utils.py +0 -0
- {verifiers-0.1.15.dev165 → verifiers-0.1.15.dev167}/tests/test_interception_utils.py +0 -0
- {verifiers-0.1.15.dev165 → verifiers-0.1.15.dev167}/tests/test_langchain_deep_agents_wikispeedia.py +0 -0
- {verifiers-0.1.15.dev165 → verifiers-0.1.15.dev167}/tests/test_lean_task.py +0 -0
- {verifiers-0.1.15.dev165 → verifiers-0.1.15.dev167}/tests/test_logging.py +0 -0
- {verifiers-0.1.15.dev165 → verifiers-0.1.15.dev167}/tests/test_math_rubric.py +0 -0
- {verifiers-0.1.15.dev165 → verifiers-0.1.15.dev167}/tests/test_maybe_think_parser.py +0 -0
- {verifiers-0.1.15.dev165 → verifiers-0.1.15.dev167}/tests/test_mcp_search_env.py +0 -0
- {verifiers-0.1.15.dev165 → verifiers-0.1.15.dev167}/tests/test_message_utils.py +0 -0
- {verifiers-0.1.15.dev165 → verifiers-0.1.15.dev167}/tests/test_message_utils_multimodal.py +0 -0
- {verifiers-0.1.15.dev165 → verifiers-0.1.15.dev167}/tests/test_multiturn_env.py +0 -0
- {verifiers-0.1.15.dev165 → verifiers-0.1.15.dev167}/tests/test_nemorl_client.py +0 -0
- {verifiers-0.1.15.dev165 → verifiers-0.1.15.dev167}/tests/test_openai_chat_completions_token_client.py +0 -0
- {verifiers-0.1.15.dev165 → verifiers-0.1.15.dev167}/tests/test_openai_responses_client.py +0 -0
- {verifiers-0.1.15.dev165 → verifiers-0.1.15.dev167}/tests/test_opencode_harbor.py +0 -0
- {verifiers-0.1.15.dev165 → verifiers-0.1.15.dev167}/tests/test_opencode_rlm_env.py +0 -0
- {verifiers-0.1.15.dev165 → verifiers-0.1.15.dev167}/tests/test_openenv_client.py +0 -0
- {verifiers-0.1.15.dev165 → verifiers-0.1.15.dev167}/tests/test_parser.py +0 -0
- {verifiers-0.1.15.dev165 → verifiers-0.1.15.dev167}/tests/test_per_turn_timing.py +0 -0
- {verifiers-0.1.15.dev165 → verifiers-0.1.15.dev167}/tests/test_pricing_utils.py +0 -0
- {verifiers-0.1.15.dev165 → verifiers-0.1.15.dev167}/tests/test_prime_plugin.py +0 -0
- {verifiers-0.1.15.dev165 → verifiers-0.1.15.dev167}/tests/test_renderer_client.py +0 -0
- {verifiers-0.1.15.dev165 → verifiers-0.1.15.dev167}/tests/test_renderer_e2e.py +0 -0
- {verifiers-0.1.15.dev165 → verifiers-0.1.15.dev167}/tests/test_rlm_composable_env.py +0 -0
- {verifiers-0.1.15.dev165 → verifiers-0.1.15.dev167}/tests/test_rubric.py +0 -0
- {verifiers-0.1.15.dev165 → verifiers-0.1.15.dev167}/tests/test_rubric_group.py +0 -0
- {verifiers-0.1.15.dev165 → verifiers-0.1.15.dev167}/tests/test_sandbox_env.py +0 -0
- {verifiers-0.1.15.dev165 → verifiers-0.1.15.dev167}/tests/test_sandbox_mixin.py +0 -0
- {verifiers-0.1.15.dev165 → verifiers-0.1.15.dev167}/tests/test_setup_script.py +0 -0
- {verifiers-0.1.15.dev165 → verifiers-0.1.15.dev167}/tests/test_singleturn_env.py +0 -0
- {verifiers-0.1.15.dev165 → verifiers-0.1.15.dev167}/tests/test_stateful_tool_env.py +0 -0
- {verifiers-0.1.15.dev165 → verifiers-0.1.15.dev167}/tests/test_think_parser.py +0 -0
- {verifiers-0.1.15.dev165 → verifiers-0.1.15.dev167}/tests/test_tool_env.py +0 -0
- {verifiers-0.1.15.dev165 → verifiers-0.1.15.dev167}/tests/test_tool_utils.py +0 -0
- {verifiers-0.1.15.dev165 → verifiers-0.1.15.dev167}/tests/test_trajectory_processing.py +0 -0
- {verifiers-0.1.15.dev165 → verifiers-0.1.15.dev167}/tests/test_tui_info_formatting.py +0 -0
- {verifiers-0.1.15.dev165 → verifiers-0.1.15.dev167}/tests/test_types.py +0 -0
- {verifiers-0.1.15.dev165 → verifiers-0.1.15.dev167}/tests/test_v1_bfcl.py +0 -0
- {verifiers-0.1.15.dev165 → verifiers-0.1.15.dev167}/tests/test_v1_empty_completions.py +0 -0
- {verifiers-0.1.15.dev165 → verifiers-0.1.15.dev167}/tests/test_v1_endpoint_protocols.py +0 -0
- {verifiers-0.1.15.dev165 → verifiers-0.1.15.dev167}/tests/test_v1_example_counts.py +0 -0
- {verifiers-0.1.15.dev165 → verifiers-0.1.15.dev167}/tests/test_v1_group_reward_env.py +0 -0
- {verifiers-0.1.15.dev165 → verifiers-0.1.15.dev167}/tests/test_v1_harbor_cli.py +0 -0
- {verifiers-0.1.15.dev165 → verifiers-0.1.15.dev167}/tests/test_v1_mini_swe_agent.py +0 -0
- {verifiers-0.1.15.dev165 → verifiers-0.1.15.dev167}/tests/test_v1_nemo_gym_harness.py +0 -0
- {verifiers-0.1.15.dev165 → verifiers-0.1.15.dev167}/tests/test_v1_openenv_taskset.py +0 -0
- {verifiers-0.1.15.dev165 → verifiers-0.1.15.dev167}/tests/test_v1_openreward_taskset.py +0 -0
- {verifiers-0.1.15.dev165 → verifiers-0.1.15.dev167}/tests/test_v1_replay_harness.py +0 -0
- {verifiers-0.1.15.dev165 → verifiers-0.1.15.dev167}/tests/test_v1_rlm_swe.py +0 -0
- {verifiers-0.1.15.dev165 → verifiers-0.1.15.dev167}/tests/test_v1_scoring_functions.py +0 -0
- {verifiers-0.1.15.dev165 → verifiers-0.1.15.dev167}/tests/test_v1_taskset_bindings.py +0 -0
- {verifiers-0.1.15.dev165 → verifiers-0.1.15.dev167}/tests/test_v1_textarena_taskset.py +0 -0
- {verifiers-0.1.15.dev165 → verifiers-0.1.15.dev167}/tests/test_wiki_search_v1.py +0 -0
- {verifiers-0.1.15.dev165 → verifiers-0.1.15.dev167}/tests/test_wordle_env.py +0 -0
- {verifiers-0.1.15.dev165 → verifiers-0.1.15.dev167}/tests/test_wordle_v1_env.py +0 -0
- {verifiers-0.1.15.dev165 → verifiers-0.1.15.dev167}/tests/test_xml_parser.py +0 -0
- {verifiers-0.1.15.dev165 → verifiers-0.1.15.dev167}/verifiers/AGENTS.md +0 -0
- {verifiers-0.1.15.dev165 → verifiers-0.1.15.dev167}/verifiers/__init__.py +0 -0
- {verifiers-0.1.15.dev165 → verifiers-0.1.15.dev167}/verifiers/cli/__init__.py +0 -0
- {verifiers-0.1.15.dev165 → verifiers-0.1.15.dev167}/verifiers/cli/commands/__init__.py +0 -0
- {verifiers-0.1.15.dev165 → verifiers-0.1.15.dev167}/verifiers/cli/commands/build.py +0 -0
- {verifiers-0.1.15.dev165 → verifiers-0.1.15.dev167}/verifiers/cli/commands/eval.py +0 -0
- {verifiers-0.1.15.dev165 → verifiers-0.1.15.dev167}/verifiers/cli/commands/gepa.py +0 -0
- {verifiers-0.1.15.dev165 → verifiers-0.1.15.dev167}/verifiers/cli/commands/init.py +0 -0
- {verifiers-0.1.15.dev165 → verifiers-0.1.15.dev167}/verifiers/cli/commands/install.py +0 -0
- {verifiers-0.1.15.dev165 → verifiers-0.1.15.dev167}/verifiers/cli/commands/setup.py +0 -0
- {verifiers-0.1.15.dev165 → verifiers-0.1.15.dev167}/verifiers/cli/plugins/__init__.py +0 -0
- {verifiers-0.1.15.dev165 → verifiers-0.1.15.dev167}/verifiers/cli/plugins/prime.py +0 -0
- {verifiers-0.1.15.dev165 → verifiers-0.1.15.dev167}/verifiers/cli/tui.py +0 -0
- {verifiers-0.1.15.dev165 → verifiers-0.1.15.dev167}/verifiers/clients/__init__.py +0 -0
- {verifiers-0.1.15.dev165 → verifiers-0.1.15.dev167}/verifiers/clients/anthropic_messages_client.py +0 -0
- {verifiers-0.1.15.dev165 → verifiers-0.1.15.dev167}/verifiers/clients/client.py +0 -0
- {verifiers-0.1.15.dev165 → verifiers-0.1.15.dev167}/verifiers/clients/nemorl_chat_completions_client.py +0 -0
- {verifiers-0.1.15.dev165 → verifiers-0.1.15.dev167}/verifiers/clients/openai_chat_completions_client.py +0 -0
- {verifiers-0.1.15.dev165 → verifiers-0.1.15.dev167}/verifiers/clients/openai_chat_completions_token_client.py +0 -0
- {verifiers-0.1.15.dev165 → verifiers-0.1.15.dev167}/verifiers/clients/openai_completions_client.py +0 -0
- {verifiers-0.1.15.dev165 → verifiers-0.1.15.dev167}/verifiers/clients/openai_responses_client.py +0 -0
- {verifiers-0.1.15.dev165 → verifiers-0.1.15.dev167}/verifiers/clients/renderer_client.py +0 -0
- {verifiers-0.1.15.dev165 → verifiers-0.1.15.dev167}/verifiers/decorators.py +0 -0
- {verifiers-0.1.15.dev165 → verifiers-0.1.15.dev167}/verifiers/envs/AGENTS.md +0 -0
- {verifiers-0.1.15.dev165 → verifiers-0.1.15.dev167}/verifiers/envs/__init__.py +0 -0
- {verifiers-0.1.15.dev165 → verifiers-0.1.15.dev167}/verifiers/envs/env_group.py +0 -0
- {verifiers-0.1.15.dev165 → verifiers-0.1.15.dev167}/verifiers/envs/experimental/README.md +0 -0
- {verifiers-0.1.15.dev165 → verifiers-0.1.15.dev167}/verifiers/envs/experimental/__init__.py +0 -0
- {verifiers-0.1.15.dev165 → verifiers-0.1.15.dev167}/verifiers/envs/experimental/composable/README.md +0 -0
- {verifiers-0.1.15.dev165 → verifiers-0.1.15.dev167}/verifiers/envs/experimental/composable/__init__.py +0 -0
- {verifiers-0.1.15.dev165 → verifiers-0.1.15.dev167}/verifiers/envs/experimental/composable/_filter.py +0 -0
- {verifiers-0.1.15.dev165 → verifiers-0.1.15.dev167}/verifiers/envs/experimental/composable/composable_env.py +0 -0
- {verifiers-0.1.15.dev165 → verifiers-0.1.15.dev167}/verifiers/envs/experimental/composable/harness.py +0 -0
- {verifiers-0.1.15.dev165 → verifiers-0.1.15.dev167}/verifiers/envs/experimental/composable/harnesses/__init__.py +0 -0
- {verifiers-0.1.15.dev165 → verifiers-0.1.15.dev167}/verifiers/envs/experimental/composable/harnesses/mini_swe_agent.py +0 -0
- {verifiers-0.1.15.dev165 → verifiers-0.1.15.dev167}/verifiers/envs/experimental/composable/harnesses/opencode.py +0 -0
- {verifiers-0.1.15.dev165 → verifiers-0.1.15.dev167}/verifiers/envs/experimental/composable/harnesses/prompt.txt +0 -0
- {verifiers-0.1.15.dev165 → verifiers-0.1.15.dev167}/verifiers/envs/experimental/composable/harnesses/rlm.py +0 -0
- {verifiers-0.1.15.dev165 → verifiers-0.1.15.dev167}/verifiers/envs/experimental/composable/swe_debug_env.py +0 -0
- {verifiers-0.1.15.dev165 → verifiers-0.1.15.dev167}/verifiers/envs/experimental/composable/task.py +0 -0
- {verifiers-0.1.15.dev165 → verifiers-0.1.15.dev167}/verifiers/envs/experimental/composable/tasksets/__init__.py +0 -0
- {verifiers-0.1.15.dev165 → verifiers-0.1.15.dev167}/verifiers/envs/experimental/composable/tasksets/cp/__init__.py +0 -0
- {verifiers-0.1.15.dev165 → verifiers-0.1.15.dev167}/verifiers/envs/experimental/composable/tasksets/cp/cp_task.py +0 -0
- {verifiers-0.1.15.dev165 → verifiers-0.1.15.dev167}/verifiers/envs/experimental/composable/tasksets/cp/test_utils.py +0 -0
- {verifiers-0.1.15.dev165 → verifiers-0.1.15.dev167}/verifiers/envs/experimental/composable/tasksets/harbor/__init__.py +0 -0
- {verifiers-0.1.15.dev165 → verifiers-0.1.15.dev167}/verifiers/envs/experimental/composable/tasksets/harbor/harbor.py +0 -0
- {verifiers-0.1.15.dev165 → verifiers-0.1.15.dev167}/verifiers/envs/experimental/composable/tasksets/lean/__init__.py +0 -0
- {verifiers-0.1.15.dev165 → verifiers-0.1.15.dev167}/verifiers/envs/experimental/composable/tasksets/lean/lean_task.py +0 -0
- {verifiers-0.1.15.dev165 → verifiers-0.1.15.dev167}/verifiers/envs/experimental/composable/tasksets/math/__init__.py +0 -0
- {verifiers-0.1.15.dev165 → verifiers-0.1.15.dev167}/verifiers/envs/experimental/composable/tasksets/math/math_task.py +0 -0
- {verifiers-0.1.15.dev165 → verifiers-0.1.15.dev167}/verifiers/envs/experimental/composable/tasksets/swe/README.md +0 -0
- {verifiers-0.1.15.dev165 → verifiers-0.1.15.dev167}/verifiers/envs/experimental/composable/tasksets/swe/__init__.py +0 -0
- {verifiers-0.1.15.dev165 → verifiers-0.1.15.dev167}/verifiers/envs/experimental/composable/tasksets/swe/multi_swe/__init__.py +0 -0
- {verifiers-0.1.15.dev165 → verifiers-0.1.15.dev167}/verifiers/envs/experimental/composable/tasksets/swe/multi_swe/extract_fix_patch.sh +0 -0
- {verifiers-0.1.15.dev165 → verifiers-0.1.15.dev167}/verifiers/envs/experimental/composable/tasksets/swe/multi_swe/taskset.py +0 -0
- {verifiers-0.1.15.dev165 → verifiers-0.1.15.dev167}/verifiers/envs/experimental/composable/tasksets/swe/openswe/__init__.py +0 -0
- {verifiers-0.1.15.dev165 → verifiers-0.1.15.dev167}/verifiers/envs/experimental/composable/tasksets/swe/openswe/taskset.py +0 -0
- {verifiers-0.1.15.dev165 → verifiers-0.1.15.dev167}/verifiers/envs/experimental/composable/tasksets/swe/r2e_gym/__init__.py +0 -0
- {verifiers-0.1.15.dev165 → verifiers-0.1.15.dev167}/verifiers/envs/experimental/composable/tasksets/swe/r2e_gym/log_parser.py +0 -0
- {verifiers-0.1.15.dev165 → verifiers-0.1.15.dev167}/verifiers/envs/experimental/composable/tasksets/swe/r2e_gym/taskset.py +0 -0
- {verifiers-0.1.15.dev165 → verifiers-0.1.15.dev167}/verifiers/envs/experimental/composable/tasksets/swe/scale_swe/__init__.py +0 -0
- {verifiers-0.1.15.dev165 → verifiers-0.1.15.dev167}/verifiers/envs/experimental/composable/tasksets/swe/scale_swe/taskset.py +0 -0
- {verifiers-0.1.15.dev165 → verifiers-0.1.15.dev167}/verifiers/envs/experimental/composable/tasksets/swe/shared/__init__.py +0 -0
- {verifiers-0.1.15.dev165 → verifiers-0.1.15.dev167}/verifiers/envs/experimental/composable/tasksets/swe/shared/test_patch.py +0 -0
- {verifiers-0.1.15.dev165 → verifiers-0.1.15.dev167}/verifiers/envs/experimental/composable/tasksets/swe/swe_bench/__init__.py +0 -0
- {verifiers-0.1.15.dev165 → verifiers-0.1.15.dev167}/verifiers/envs/experimental/composable/tasksets/swe/swe_bench/taskset.py +0 -0
- {verifiers-0.1.15.dev165 → verifiers-0.1.15.dev167}/verifiers/envs/experimental/composable/tasksets/swe/swe_lego/__init__.py +0 -0
- {verifiers-0.1.15.dev165 → verifiers-0.1.15.dev167}/verifiers/envs/experimental/composable/tasksets/swe/swe_lego/taskset.py +0 -0
- {verifiers-0.1.15.dev165 → verifiers-0.1.15.dev167}/verifiers/envs/experimental/composable/tasksets/swe/swe_rebench_v2/__init__.py +0 -0
- {verifiers-0.1.15.dev165 → verifiers-0.1.15.dev167}/verifiers/envs/experimental/composable/tasksets/swe/swe_rebench_v2/log_parsers.py +0 -0
- {verifiers-0.1.15.dev165 → verifiers-0.1.15.dev167}/verifiers/envs/experimental/composable/tasksets/swe/swe_rebench_v2/taskset.py +0 -0
- {verifiers-0.1.15.dev165 → verifiers-0.1.15.dev167}/verifiers/envs/experimental/composable/tasksets/swe/swe_smith/__init__.py +0 -0
- {verifiers-0.1.15.dev165 → verifiers-0.1.15.dev167}/verifiers/envs/experimental/composable/tasksets/swe/swe_smith/taskset.py +0 -0
- {verifiers-0.1.15.dev165 → verifiers-0.1.15.dev167}/verifiers/envs/experimental/composable/tasksets/swe/swe_tasksets.py +0 -0
- {verifiers-0.1.15.dev165 → verifiers-0.1.15.dev167}/verifiers/envs/experimental/gym_env.py +0 -0
- {verifiers-0.1.15.dev165 → verifiers-0.1.15.dev167}/verifiers/envs/experimental/harbor_env/__init__.py +0 -0
- {verifiers-0.1.15.dev165 → verifiers-0.1.15.dev167}/verifiers/envs/experimental/harbor_env/env.py +0 -0
- {verifiers-0.1.15.dev165 → verifiers-0.1.15.dev167}/verifiers/envs/experimental/harbor_env/mcp.py +0 -0
- {verifiers-0.1.15.dev165 → verifiers-0.1.15.dev167}/verifiers/envs/experimental/mcp_env.py +0 -0
- {verifiers-0.1.15.dev165 → verifiers-0.1.15.dev167}/verifiers/envs/experimental/opencode_env.py +0 -0
- {verifiers-0.1.15.dev165 → verifiers-0.1.15.dev167}/verifiers/envs/experimental/opencode_qa_env.py +0 -0
- {verifiers-0.1.15.dev165 → verifiers-0.1.15.dev167}/verifiers/envs/experimental/opencode_rlm_env.py +0 -0
- {verifiers-0.1.15.dev165 → verifiers-0.1.15.dev167}/verifiers/envs/experimental/sandbox_mixin.py +0 -0
- {verifiers-0.1.15.dev165 → verifiers-0.1.15.dev167}/verifiers/envs/experimental/utils/__init__.py +0 -0
- {verifiers-0.1.15.dev165 → verifiers-0.1.15.dev167}/verifiers/envs/experimental/utils/file_locks.py +0 -0
- {verifiers-0.1.15.dev165 → verifiers-0.1.15.dev167}/verifiers/envs/experimental/utils/git_checkout_cache.py +0 -0
- {verifiers-0.1.15.dev165 → verifiers-0.1.15.dev167}/verifiers/envs/integrations/README.md +0 -0
- {verifiers-0.1.15.dev165 → verifiers-0.1.15.dev167}/verifiers/envs/integrations/__init__.py +0 -0
- {verifiers-0.1.15.dev165 → verifiers-0.1.15.dev167}/verifiers/envs/integrations/browser_env/README.md +0 -0
- {verifiers-0.1.15.dev165 → verifiers-0.1.15.dev167}/verifiers/envs/integrations/browser_env/__init__.py +0 -0
- {verifiers-0.1.15.dev165 → verifiers-0.1.15.dev167}/verifiers/envs/integrations/browser_env/browser_env.py +0 -0
- {verifiers-0.1.15.dev165 → verifiers-0.1.15.dev167}/verifiers/envs/integrations/browser_env/modes/__init__.py +0 -0
- {verifiers-0.1.15.dev165 → verifiers-0.1.15.dev167}/verifiers/envs/integrations/browser_env/modes/base.py +0 -0
- {verifiers-0.1.15.dev165 → verifiers-0.1.15.dev167}/verifiers/envs/integrations/browser_env/modes/cua_mode.py +0 -0
- {verifiers-0.1.15.dev165 → verifiers-0.1.15.dev167}/verifiers/envs/integrations/browser_env/modes/dom_mode.py +0 -0
- {verifiers-0.1.15.dev165 → verifiers-0.1.15.dev167}/verifiers/envs/integrations/openenv_env.py +0 -0
- {verifiers-0.1.15.dev165 → verifiers-0.1.15.dev167}/verifiers/envs/integrations/reasoninggym_env.py +0 -0
- {verifiers-0.1.15.dev165 → verifiers-0.1.15.dev167}/verifiers/envs/integrations/textarena_env.py +0 -0
- {verifiers-0.1.15.dev165 → verifiers-0.1.15.dev167}/verifiers/envs/multiturn_env.py +0 -0
- {verifiers-0.1.15.dev165 → verifiers-0.1.15.dev167}/verifiers/envs/python_env.py +0 -0
- {verifiers-0.1.15.dev165 → verifiers-0.1.15.dev167}/verifiers/envs/sandbox_env.py +0 -0
- {verifiers-0.1.15.dev165 → verifiers-0.1.15.dev167}/verifiers/envs/singleturn_env.py +0 -0
- {verifiers-0.1.15.dev165 → verifiers-0.1.15.dev167}/verifiers/envs/stateful_tool_env.py +0 -0
- {verifiers-0.1.15.dev165 → verifiers-0.1.15.dev167}/verifiers/envs/tool_env.py +0 -0
- {verifiers-0.1.15.dev165 → verifiers-0.1.15.dev167}/verifiers/errors.py +0 -0
- {verifiers-0.1.15.dev165 → verifiers-0.1.15.dev167}/verifiers/gepa/__init__.py +0 -0
- {verifiers-0.1.15.dev165 → verifiers-0.1.15.dev167}/verifiers/gepa/adapter.py +0 -0
- {verifiers-0.1.15.dev165 → verifiers-0.1.15.dev167}/verifiers/gepa/config.py +0 -0
- {verifiers-0.1.15.dev165 → verifiers-0.1.15.dev167}/verifiers/gepa/display.py +0 -0
- {verifiers-0.1.15.dev165 → verifiers-0.1.15.dev167}/verifiers/gepa/gepa_utils.py +0 -0
- {verifiers-0.1.15.dev165 → verifiers-0.1.15.dev167}/verifiers/parsers/__init__.py +0 -0
- {verifiers-0.1.15.dev165 → verifiers-0.1.15.dev167}/verifiers/parsers/maybe_think_parser.py +0 -0
- {verifiers-0.1.15.dev165 → verifiers-0.1.15.dev167}/verifiers/parsers/parser.py +0 -0
- {verifiers-0.1.15.dev165 → verifiers-0.1.15.dev167}/verifiers/parsers/think_parser.py +0 -0
- {verifiers-0.1.15.dev165 → verifiers-0.1.15.dev167}/verifiers/parsers/xml_parser.py +0 -0
- {verifiers-0.1.15.dev165 → verifiers-0.1.15.dev167}/verifiers/rl/README.md +0 -0
- {verifiers-0.1.15.dev165 → verifiers-0.1.15.dev167}/verifiers/rl/__init__.py +0 -0
- {verifiers-0.1.15.dev165 → verifiers-0.1.15.dev167}/verifiers/rl/inference/__init__.py +0 -0
- {verifiers-0.1.15.dev165 → verifiers-0.1.15.dev167}/verifiers/rl/inference/client.py +0 -0
- {verifiers-0.1.15.dev165 → verifiers-0.1.15.dev167}/verifiers/rl/inference/server.py +0 -0
- {verifiers-0.1.15.dev165 → verifiers-0.1.15.dev167}/verifiers/rl/trainer/__init__.py +0 -0
- {verifiers-0.1.15.dev165 → verifiers-0.1.15.dev167}/verifiers/rl/trainer/config.py +0 -0
- {verifiers-0.1.15.dev165 → verifiers-0.1.15.dev167}/verifiers/rl/trainer/orchestrator.py +0 -0
- {verifiers-0.1.15.dev165 → verifiers-0.1.15.dev167}/verifiers/rl/trainer/trainer.py +0 -0
- {verifiers-0.1.15.dev165 → verifiers-0.1.15.dev167}/verifiers/rl/trainer/utils.py +0 -0
- {verifiers-0.1.15.dev165 → verifiers-0.1.15.dev167}/verifiers/rubrics/__init__.py +0 -0
- {verifiers-0.1.15.dev165 → verifiers-0.1.15.dev167}/verifiers/rubrics/experimental/hybrid_math_rubric.py +0 -0
- {verifiers-0.1.15.dev165 → verifiers-0.1.15.dev167}/verifiers/rubrics/judge_rubric.py +0 -0
- {verifiers-0.1.15.dev165 → verifiers-0.1.15.dev167}/verifiers/rubrics/math_rubric.py +0 -0
- {verifiers-0.1.15.dev165 → verifiers-0.1.15.dev167}/verifiers/rubrics/rubric.py +0 -0
- {verifiers-0.1.15.dev165 → verifiers-0.1.15.dev167}/verifiers/rubrics/rubric_group.py +0 -0
- {verifiers-0.1.15.dev165 → verifiers-0.1.15.dev167}/verifiers/scripts/__init__.py +0 -0
- {verifiers-0.1.15.dev165 → verifiers-0.1.15.dev167}/verifiers/scripts/build.py +0 -0
- {verifiers-0.1.15.dev165 → verifiers-0.1.15.dev167}/verifiers/scripts/gepa.py +0 -0
- {verifiers-0.1.15.dev165 → verifiers-0.1.15.dev167}/verifiers/scripts/init.py +0 -0
- {verifiers-0.1.15.dev165 → verifiers-0.1.15.dev167}/verifiers/scripts/install.py +0 -0
- {verifiers-0.1.15.dev165 → verifiers-0.1.15.dev167}/verifiers/scripts/rl.py +0 -0
- {verifiers-0.1.15.dev165 → verifiers-0.1.15.dev167}/verifiers/scripts/setup.py +0 -0
- {verifiers-0.1.15.dev165 → verifiers-0.1.15.dev167}/verifiers/scripts/train.py +0 -0
- {verifiers-0.1.15.dev165 → verifiers-0.1.15.dev167}/verifiers/scripts/tui.py +0 -0
- {verifiers-0.1.15.dev165 → verifiers-0.1.15.dev167}/verifiers/scripts/vllm.py +0 -0
- {verifiers-0.1.15.dev165 → verifiers-0.1.15.dev167}/verifiers/serve/__init__.py +0 -0
- {verifiers-0.1.15.dev165 → verifiers-0.1.15.dev167}/verifiers/serve/client/env_client.py +0 -0
- {verifiers-0.1.15.dev165 → verifiers-0.1.15.dev167}/verifiers/serve/client/zmq_env_client.py +0 -0
- {verifiers-0.1.15.dev165 → verifiers-0.1.15.dev167}/verifiers/serve/server/__init__.py +0 -0
- {verifiers-0.1.15.dev165 → verifiers-0.1.15.dev167}/verifiers/serve/server/env_router.py +0 -0
- {verifiers-0.1.15.dev165 → verifiers-0.1.15.dev167}/verifiers/serve/server/env_server.py +0 -0
- {verifiers-0.1.15.dev165 → verifiers-0.1.15.dev167}/verifiers/serve/server/env_worker.py +0 -0
- {verifiers-0.1.15.dev165 → verifiers-0.1.15.dev167}/verifiers/serve/server/zmq_env_server.py +0 -0
- {verifiers-0.1.15.dev165 → verifiers-0.1.15.dev167}/verifiers/serve/types.py +0 -0
- {verifiers-0.1.15.dev165 → verifiers-0.1.15.dev167}/verifiers/utils/__init__.py +0 -0
- {verifiers-0.1.15.dev165 → verifiers-0.1.15.dev167}/verifiers/utils/client_utils.py +0 -0
- {verifiers-0.1.15.dev165 → verifiers-0.1.15.dev167}/verifiers/utils/config_utils.py +0 -0
- {verifiers-0.1.15.dev165 → verifiers-0.1.15.dev167}/verifiers/utils/data_utils.py +0 -0
- {verifiers-0.1.15.dev165 → verifiers-0.1.15.dev167}/verifiers/utils/display_utils.py +0 -0
- {verifiers-0.1.15.dev165 → verifiers-0.1.15.dev167}/verifiers/utils/env_config_utils.py +0 -0
- {verifiers-0.1.15.dev165 → verifiers-0.1.15.dev167}/verifiers/utils/eval_display.py +0 -0
- {verifiers-0.1.15.dev165 → verifiers-0.1.15.dev167}/verifiers/utils/heartbeat.py +0 -0
- {verifiers-0.1.15.dev165 → verifiers-0.1.15.dev167}/verifiers/utils/import_utils.py +0 -0
- {verifiers-0.1.15.dev165 → verifiers-0.1.15.dev167}/verifiers/utils/install_utils.py +0 -0
- {verifiers-0.1.15.dev165 → verifiers-0.1.15.dev167}/verifiers/utils/interception_utils.py +0 -0
- {verifiers-0.1.15.dev165 → verifiers-0.1.15.dev167}/verifiers/utils/message_utils.py +0 -0
- {verifiers-0.1.15.dev165 → verifiers-0.1.15.dev167}/verifiers/utils/metric_utils.py +0 -0
- {verifiers-0.1.15.dev165 → verifiers-0.1.15.dev167}/verifiers/utils/pricing_utils.py +0 -0
- {verifiers-0.1.15.dev165 → verifiers-0.1.15.dev167}/verifiers/utils/process_utils.py +0 -0
- {verifiers-0.1.15.dev165 → verifiers-0.1.15.dev167}/verifiers/utils/response_utils.py +0 -0
- {verifiers-0.1.15.dev165 → verifiers-0.1.15.dev167}/verifiers/utils/serve_utils.py +0 -0
- {verifiers-0.1.15.dev165 → verifiers-0.1.15.dev167}/verifiers/utils/thread_utils.py +0 -0
- {verifiers-0.1.15.dev165 → verifiers-0.1.15.dev167}/verifiers/utils/threaded_sandbox_client.py +0 -0
- {verifiers-0.1.15.dev165 → verifiers-0.1.15.dev167}/verifiers/utils/tool_utils.py +0 -0
- {verifiers-0.1.15.dev165 → verifiers-0.1.15.dev167}/verifiers/utils/usage_utils.py +0 -0
- {verifiers-0.1.15.dev165 → verifiers-0.1.15.dev167}/verifiers/utils/version_utils.py +0 -0
- {verifiers-0.1.15.dev165 → verifiers-0.1.15.dev167}/verifiers/v1/ENVIRONMENT_BEST_PRACTICES.md +0 -0
- {verifiers-0.1.15.dev165 → verifiers-0.1.15.dev167}/verifiers/v1/README.md +0 -0
- {verifiers-0.1.15.dev165 → verifiers-0.1.15.dev167}/verifiers/v1/RE_MIGRATION.md +0 -0
- {verifiers-0.1.15.dev165 → verifiers-0.1.15.dev167}/verifiers/v1/__init__.py +0 -0
- {verifiers-0.1.15.dev165 → verifiers-0.1.15.dev167}/verifiers/v1/artifact.py +0 -0
- {verifiers-0.1.15.dev165 → verifiers-0.1.15.dev167}/verifiers/v1/config.py +0 -0
- {verifiers-0.1.15.dev165 → verifiers-0.1.15.dev167}/verifiers/v1/env.py +0 -0
- {verifiers-0.1.15.dev165 → verifiers-0.1.15.dev167}/verifiers/v1/runtime_handles.py +0 -0
- {verifiers-0.1.15.dev165 → verifiers-0.1.15.dev167}/verifiers/v1/sandbox.py +0 -0
- {verifiers-0.1.15.dev165 → verifiers-0.1.15.dev167}/verifiers/v1/state.py +0 -0
- {verifiers-0.1.15.dev165 → verifiers-0.1.15.dev167}/verifiers/v1/task.py +0 -0
- {verifiers-0.1.15.dev165 → verifiers-0.1.15.dev167}/verifiers/v1/taskset.py +0 -0
- {verifiers-0.1.15.dev165 → verifiers-0.1.15.dev167}/verifiers/v1/toolset.py +0 -0
- {verifiers-0.1.15.dev165 → verifiers-0.1.15.dev167}/verifiers/v1/types.py +0 -0
- {verifiers-0.1.15.dev165 → verifiers-0.1.15.dev167}/verifiers/v1/user.py +0 -0
- {verifiers-0.1.15.dev165 → verifiers-0.1.15.dev167}/verifiers/v1/utils/__init__.py +0 -0
- {verifiers-0.1.15.dev165 → verifiers-0.1.15.dev167}/verifiers/v1/utils/config_callable_utils.py +0 -0
- {verifiers-0.1.15.dev165 → verifiers-0.1.15.dev167}/verifiers/v1/utils/json_utils.py +0 -0
- {verifiers-0.1.15.dev165 → verifiers-0.1.15.dev167}/verifiers/v1/utils/judge_utils.py +0 -0
- {verifiers-0.1.15.dev165 → verifiers-0.1.15.dev167}/verifiers/v1/utils/lifecycle_utils.py +0 -0
- {verifiers-0.1.15.dev165 → verifiers-0.1.15.dev167}/verifiers/v1/utils/mcp_proxy_utils.py +0 -0
- {verifiers-0.1.15.dev165 → verifiers-0.1.15.dev167}/verifiers/v1/utils/mcp_utils.py +0 -0
- {verifiers-0.1.15.dev165 → verifiers-0.1.15.dev167}/verifiers/v1/utils/object_utils.py +0 -0
- {verifiers-0.1.15.dev165 → verifiers-0.1.15.dev167}/verifiers/v1/utils/prompt_utils.py +0 -0
- {verifiers-0.1.15.dev165 → verifiers-0.1.15.dev167}/verifiers/v1/utils/runtime_registry.py +0 -0
- {verifiers-0.1.15.dev165 → verifiers-0.1.15.dev167}/verifiers/v1/utils/sandbox_python_utils.py +0 -0
- {verifiers-0.1.15.dev165 → verifiers-0.1.15.dev167}/verifiers/v1/utils/scoring_utils.py +0 -0
- {verifiers-0.1.15.dev165 → verifiers-0.1.15.dev167}/verifiers/v1/utils/serialization_utils.py +0 -0
- {verifiers-0.1.15.dev165 → verifiers-0.1.15.dev167}/verifiers/v1/utils/task_freeze_utils.py +0 -0
- {verifiers-0.1.15.dev165 → verifiers-0.1.15.dev167}/verifiers/v1/utils/taskset_utils.py +0 -0
- {verifiers-0.1.15.dev165 → verifiers-0.1.15.dev167}/verifiers/v1/utils/tool_utils.py +0 -0
- {verifiers-0.1.15.dev165 → verifiers-0.1.15.dev167}/verifiers/v1/utils/trajectory_utils.py +0 -0
- {verifiers-0.1.15.dev165 → verifiers-0.1.15.dev167}/verifiers/v1/utils/usage_utils.py +0 -0
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
Metadata-Version: 2.4
|
|
2
2
|
Name: verifiers
|
|
3
|
-
Version: 0.1.15.
|
|
3
|
+
Version: 0.1.15.dev167
|
|
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
|
|
@@ -187,6 +187,28 @@ def test_taskset_take():
|
|
|
187
187
|
assert isinstance(taken, MockSandboxTaskSet)
|
|
188
188
|
|
|
189
189
|
|
|
190
|
+
def test_composable_env_eval_inputs_can_shuffle_taskset_dataset():
|
|
191
|
+
taskset = MockTaskSet(dataset=_make_dataset(6), name="math")
|
|
192
|
+
env = ComposableEnv(
|
|
193
|
+
taskset=taskset,
|
|
194
|
+
harness=Harness(run_command="true"),
|
|
195
|
+
)
|
|
196
|
+
|
|
197
|
+
inputs = env._get_eval_inputs(
|
|
198
|
+
num_examples=3,
|
|
199
|
+
rollouts_per_example=2,
|
|
200
|
+
shuffle=True,
|
|
201
|
+
shuffle_seed=11,
|
|
202
|
+
)
|
|
203
|
+
expected = (
|
|
204
|
+
env.get_eval_dataset().shuffle(seed=11).select(range(3)).repeat(2).to_list()
|
|
205
|
+
)
|
|
206
|
+
|
|
207
|
+
assert [row["example_id"] for row in inputs] == [
|
|
208
|
+
row["example_id"] for row in expected
|
|
209
|
+
]
|
|
210
|
+
|
|
211
|
+
|
|
190
212
|
def test_taskset_repr():
|
|
191
213
|
ts = MockTaskSet(dataset=_make_dataset(), name="mytest")
|
|
192
214
|
assert "mytest" in repr(ts)
|
|
@@ -673,8 +673,8 @@ class TestMaybeRetry:
|
|
|
673
673
|
rollout_outputs = outputs["outputs"]
|
|
674
674
|
assert env.call_counts[0] == 1 # No retries for non-retryable error
|
|
675
675
|
assert rollout_outputs[0].get("error") is not None
|
|
676
|
-
|
|
677
|
-
assert "ToolError" ==
|
|
676
|
+
error_data = rollout_outputs[0]["error"]
|
|
677
|
+
assert "ToolError" == error_data["error"]
|
|
678
678
|
|
|
679
679
|
@pytest.mark.asyncio
|
|
680
680
|
async def test_error_in_state_after_max_retries_exhausted(
|
|
@@ -694,8 +694,8 @@ class TestMaybeRetry:
|
|
|
694
694
|
rollout_outputs = outputs["outputs"]
|
|
695
695
|
assert env.call_counts[0] == 3 # 1 initial + 2 retries
|
|
696
696
|
assert rollout_outputs[0].get("error") is not None
|
|
697
|
-
|
|
698
|
-
assert "InfraError" ==
|
|
697
|
+
error_data = rollout_outputs[0]["error"]
|
|
698
|
+
assert "InfraError" == error_data["error"]
|
|
699
699
|
|
|
700
700
|
|
|
701
701
|
class TestEmptyModelResponseErrors:
|
|
@@ -302,6 +302,30 @@ def test_evaluate_fallback_and_repeat(mock_client, make_dummy_env, make_input):
|
|
|
302
302
|
assert len(states) == 2 * 2
|
|
303
303
|
|
|
304
304
|
|
|
305
|
+
def test_get_eval_inputs_shuffles_before_take_and_repeat(mock_client, make_dummy_env):
|
|
306
|
+
ds = Dataset.from_dict(
|
|
307
|
+
{
|
|
308
|
+
"question": [f"q{i}" for i in range(6)],
|
|
309
|
+
"answer": [f"a{i}" for i in range(6)],
|
|
310
|
+
}
|
|
311
|
+
)
|
|
312
|
+
env = make_dummy_env(mock_client, dataset=ds)
|
|
313
|
+
|
|
314
|
+
inputs = env._get_eval_inputs(
|
|
315
|
+
num_examples=3,
|
|
316
|
+
rollouts_per_example=2,
|
|
317
|
+
shuffle=True,
|
|
318
|
+
shuffle_seed=123,
|
|
319
|
+
)
|
|
320
|
+
expected = (
|
|
321
|
+
env.get_eval_dataset().shuffle(seed=123).select(range(3)).repeat(2).to_list()
|
|
322
|
+
)
|
|
323
|
+
|
|
324
|
+
assert [row["example_id"] for row in inputs] == [
|
|
325
|
+
row["example_id"] for row in expected
|
|
326
|
+
]
|
|
327
|
+
|
|
328
|
+
|
|
305
329
|
@pytest.mark.asyncio
|
|
306
330
|
async def test_generate_inside_running_loop(mock_client, make_dummy_env, make_input):
|
|
307
331
|
env = make_dummy_env(mock_client)
|
|
@@ -72,6 +72,8 @@ def run_cli(make_metadata, make_state, make_input):
|
|
|
72
72
|
"headers_from_state": None,
|
|
73
73
|
"num_examples": 1,
|
|
74
74
|
"rollouts_per_example": 1,
|
|
75
|
+
"shuffle": False,
|
|
76
|
+
"shuffle_seed": None,
|
|
75
77
|
"max_concurrent": 1,
|
|
76
78
|
"independent_scoring": False,
|
|
77
79
|
"max_tokens": 42,
|
|
@@ -177,6 +179,20 @@ def test_parse_args_rejects_unknown_eval_flags():
|
|
|
177
179
|
vf_eval.parse_args(["env1", "--unknown-flag", "value"])
|
|
178
180
|
|
|
179
181
|
|
|
182
|
+
def test_cli_shuffle_defaults_seed_when_enabled(monkeypatch, run_cli):
|
|
183
|
+
captured = run_cli(
|
|
184
|
+
monkeypatch,
|
|
185
|
+
{
|
|
186
|
+
"shuffle": True,
|
|
187
|
+
"shuffle_seed": None,
|
|
188
|
+
},
|
|
189
|
+
)
|
|
190
|
+
|
|
191
|
+
config = captured["configs"][0]
|
|
192
|
+
assert config.shuffle is True
|
|
193
|
+
assert config.shuffle_seed == 0
|
|
194
|
+
|
|
195
|
+
|
|
180
196
|
def test_cli_v1_env_config_overrides_preserve_env_args_config(
|
|
181
197
|
tmp_path: Path, monkeypatch, run_cli
|
|
182
198
|
):
|
|
@@ -1188,6 +1204,15 @@ def test_cli_toml_per_env_rollouts_per_example(monkeypatch, run_cli):
|
|
|
1188
1204
|
assert configs[1].rollouts_per_example == 5
|
|
1189
1205
|
|
|
1190
1206
|
|
|
1207
|
+
def test_cli_toml_per_env_shuffle(monkeypatch, run_cli):
|
|
1208
|
+
with tempfile.NamedTemporaryFile(suffix=".toml", delete=False, mode="w") as f:
|
|
1209
|
+
f.write('[[eval]]\nenv_id = "env1"\nshuffle = true\nshuffle_seed = 321\n')
|
|
1210
|
+
f.flush()
|
|
1211
|
+
captured = run_cli(monkeypatch, {"env_id_or_config": f.name})
|
|
1212
|
+
|
|
1213
|
+
assert captured["configs"][0].shuffle_seed == 321
|
|
1214
|
+
|
|
1215
|
+
|
|
1191
1216
|
def test_cli_toml_per_eval_settings_used(monkeypatch, run_cli):
|
|
1192
1217
|
"""TOML per-eval settings are used (CLI args ignored when using config)."""
|
|
1193
1218
|
with tempfile.NamedTemporaryFile(suffix=".toml", delete=False, mode="w") as f:
|
|
@@ -70,6 +70,53 @@ def test_find_latest_incomplete_eval_results_path_returns_none_when_no_match(
|
|
|
70
70
|
assert result is None
|
|
71
71
|
|
|
72
72
|
|
|
73
|
+
def test_find_latest_incomplete_eval_results_path_matches_shuffle_metadata(
|
|
74
|
+
tmp_path: Path, monkeypatch
|
|
75
|
+
):
|
|
76
|
+
env_id = "dummy-env"
|
|
77
|
+
model = "openai/gpt-4.1-mini"
|
|
78
|
+
runs_dir = tmp_path / "outputs" / "evals" / f"{env_id}--{model.replace('/', '--')}"
|
|
79
|
+
|
|
80
|
+
matching_run = runs_dir / "matching"
|
|
81
|
+
wrong_seed_run = runs_dir / "wrong-seed"
|
|
82
|
+
for run in [matching_run, wrong_seed_run]:
|
|
83
|
+
run.mkdir(parents=True)
|
|
84
|
+
(run / "results.jsonl").write_text('{"example_id":0}\n', encoding="utf-8")
|
|
85
|
+
|
|
86
|
+
matching_run.joinpath("metadata.json").write_text(
|
|
87
|
+
(
|
|
88
|
+
'{"env_id":"dummy-env","model":"openai/gpt-4.1-mini",'
|
|
89
|
+
'"num_examples":4,"rollouts_per_example":1,'
|
|
90
|
+
'"shuffle":true,"shuffle_seed":123}'
|
|
91
|
+
),
|
|
92
|
+
encoding="utf-8",
|
|
93
|
+
)
|
|
94
|
+
wrong_seed_run.joinpath("metadata.json").write_text(
|
|
95
|
+
(
|
|
96
|
+
'{"env_id":"dummy-env","model":"openai/gpt-4.1-mini",'
|
|
97
|
+
'"num_examples":4,"rollouts_per_example":1,'
|
|
98
|
+
'"shuffle":true,"shuffle_seed":456}'
|
|
99
|
+
),
|
|
100
|
+
encoding="utf-8",
|
|
101
|
+
)
|
|
102
|
+
|
|
103
|
+
os.utime(matching_run, (1, 1))
|
|
104
|
+
os.utime(wrong_seed_run, (2, 2))
|
|
105
|
+
monkeypatch.chdir(tmp_path)
|
|
106
|
+
|
|
107
|
+
result = find_latest_incomplete_eval_results_path(
|
|
108
|
+
env_id=env_id,
|
|
109
|
+
model=model,
|
|
110
|
+
num_examples=4,
|
|
111
|
+
rollouts_per_example=1,
|
|
112
|
+
shuffle=True,
|
|
113
|
+
shuffle_seed=123,
|
|
114
|
+
env_dir_path=str(tmp_path / "environments"),
|
|
115
|
+
)
|
|
116
|
+
|
|
117
|
+
assert result.resolve() == matching_run
|
|
118
|
+
|
|
119
|
+
|
|
73
120
|
def test_get_eval_runs_dir_uses_name_as_result_label(tmp_path: Path):
|
|
74
121
|
runs_dir = get_eval_runs_dir(
|
|
75
122
|
env_id="dummy-env",
|
|
@@ -31,6 +31,7 @@ from verifiers.utils.save_utils import (
|
|
|
31
31
|
load_outputs,
|
|
32
32
|
make_serializable,
|
|
33
33
|
save_new_outputs,
|
|
34
|
+
save_metadata,
|
|
34
35
|
states_to_outputs,
|
|
35
36
|
truncate_malformed_trailing_line,
|
|
36
37
|
validate_resume_metadata,
|
|
@@ -199,6 +200,37 @@ class TestSavingMetadata:
|
|
|
199
200
|
metadata["base_url"] == "http://localhost:8000/v1,http://localhost:8001/v1"
|
|
200
201
|
)
|
|
201
202
|
|
|
203
|
+
def test_save_metadata_records_default_shuffle_seed_for_resume(
|
|
204
|
+
self, tmp_path: Path
|
|
205
|
+
):
|
|
206
|
+
results_path = tmp_path / "results"
|
|
207
|
+
builder = GenerateOutputsBuilder(
|
|
208
|
+
env_id="math-env",
|
|
209
|
+
env_args={},
|
|
210
|
+
model="test-model",
|
|
211
|
+
client=ClientConfig(api_base_url="http://localhost:8000/v1"),
|
|
212
|
+
num_examples=3,
|
|
213
|
+
rollouts_per_example=2,
|
|
214
|
+
state_columns=[],
|
|
215
|
+
sampling_args={},
|
|
216
|
+
results_path=results_path,
|
|
217
|
+
shuffle=True,
|
|
218
|
+
)
|
|
219
|
+
save_metadata(builder.build_metadata(), results_path)
|
|
220
|
+
|
|
221
|
+
assert (
|
|
222
|
+
json.loads((results_path / "metadata.json").read_text())["shuffle_seed"]
|
|
223
|
+
== 0
|
|
224
|
+
)
|
|
225
|
+
validate_resume_metadata(
|
|
226
|
+
results_path=results_path,
|
|
227
|
+
env_id="math-env",
|
|
228
|
+
model="test-model",
|
|
229
|
+
num_examples=3,
|
|
230
|
+
rollouts_per_example=2,
|
|
231
|
+
shuffle=True,
|
|
232
|
+
)
|
|
233
|
+
|
|
202
234
|
|
|
203
235
|
class TestSavingResults:
|
|
204
236
|
def test_response_usage_tokens_prompt_completion(self):
|
|
@@ -595,6 +627,35 @@ class TestResumeMetadataValidation:
|
|
|
595
627
|
rollouts_per_example=2,
|
|
596
628
|
)
|
|
597
629
|
|
|
630
|
+
def test_validate_resume_metadata_rejects_shuffle_mismatch(self, tmp_path: Path):
|
|
631
|
+
results_path = tmp_path / "results"
|
|
632
|
+
results_path.mkdir()
|
|
633
|
+
metadata_path = results_path / "metadata.json"
|
|
634
|
+
metadata_path.write_text(
|
|
635
|
+
json.dumps(
|
|
636
|
+
{
|
|
637
|
+
"env_id": "math-env",
|
|
638
|
+
"model": "test-model",
|
|
639
|
+
"num_examples": 3,
|
|
640
|
+
"rollouts_per_example": 2,
|
|
641
|
+
"shuffle": True,
|
|
642
|
+
"shuffle_seed": 123,
|
|
643
|
+
}
|
|
644
|
+
),
|
|
645
|
+
encoding="utf-8",
|
|
646
|
+
)
|
|
647
|
+
|
|
648
|
+
with pytest.raises(ValueError, match="shuffle_seed"):
|
|
649
|
+
validate_resume_metadata(
|
|
650
|
+
results_path=results_path,
|
|
651
|
+
env_id="math-env",
|
|
652
|
+
model="test-model",
|
|
653
|
+
num_examples=3,
|
|
654
|
+
rollouts_per_example=2,
|
|
655
|
+
shuffle=True,
|
|
656
|
+
shuffle_seed=456,
|
|
657
|
+
)
|
|
658
|
+
|
|
598
659
|
|
|
599
660
|
class TestBuilderPassAtK:
|
|
600
661
|
"""Tests for pass@k integration in GenerateOutputsBuilder."""
|
|
@@ -1156,12 +1156,13 @@ def test_lifecycle_fields_are_framework_managed() -> None:
|
|
|
1156
1156
|
task = Task({"prompt": [{"role": "user", "content": "hi"}]}).freeze()
|
|
1157
1157
|
state = vf.State.for_task(task)
|
|
1158
1158
|
assert state.uses_v1_contract is True
|
|
1159
|
+
error = vf.Error("boom")
|
|
1159
1160
|
|
|
1160
1161
|
for key, value in {
|
|
1161
1162
|
"is_completed": True,
|
|
1162
1163
|
"stop_condition": "done",
|
|
1163
1164
|
"is_truncated": True,
|
|
1164
|
-
"error":
|
|
1165
|
+
"error": error,
|
|
1165
1166
|
}.items():
|
|
1166
1167
|
assert State({key: value})[key] == value
|
|
1167
1168
|
with pytest.raises(RuntimeError, match="framework-managed"):
|
|
@@ -1188,12 +1189,14 @@ def test_lifecycle_fields_are_framework_managed() -> None:
|
|
|
1188
1189
|
state._set_completed(True)
|
|
1189
1190
|
state._set_stop_condition("done")
|
|
1190
1191
|
state._set_truncated(True)
|
|
1191
|
-
|
|
1192
|
+
with pytest.raises(TypeError, match="vf.Error"):
|
|
1193
|
+
state._set_error(cast(Any, {"message": "boom"}))
|
|
1194
|
+
state._set_error(error)
|
|
1192
1195
|
|
|
1193
1196
|
assert state["is_completed"] is True
|
|
1194
1197
|
assert state["stop_condition"] == "done"
|
|
1195
1198
|
assert state["is_truncated"] is True
|
|
1196
|
-
assert state["error"]
|
|
1199
|
+
assert state["error"] is error
|
|
1197
1200
|
|
|
1198
1201
|
|
|
1199
1202
|
def test_toolsets_config_accepts_addressable_map_and_fn_tables() -> None:
|
|
@@ -1646,14 +1646,19 @@ def test_sandbox_program_patch_cannot_set_lifecycle_fields() -> None:
|
|
|
1646
1646
|
patch = {
|
|
1647
1647
|
"stop_condition": "no_tools",
|
|
1648
1648
|
"is_truncated": True,
|
|
1649
|
-
"error":
|
|
1649
|
+
"error": vf.ErrorData(
|
|
1650
|
+
error="SandboxError",
|
|
1651
|
+
message="handled",
|
|
1652
|
+
error_chain_repr="SandboxError('handled')",
|
|
1653
|
+
error_chain_str="SandboxError",
|
|
1654
|
+
),
|
|
1650
1655
|
}
|
|
1651
1656
|
apply_internal_state_patch(state, patch, mode="base")
|
|
1652
1657
|
|
|
1653
1658
|
assert patch == {}
|
|
1654
1659
|
assert state["stop_condition"] == "no_tools"
|
|
1655
1660
|
assert state["is_truncated"] is True
|
|
1656
|
-
assert state["error"]
|
|
1661
|
+
assert isinstance(state["error"], vf.SandboxError)
|
|
1657
1662
|
|
|
1658
1663
|
|
|
1659
1664
|
def test_program_channels_mcp_injects_proxy_into_sandbox_program() -> None:
|
|
@@ -4,7 +4,7 @@ import types
|
|
|
4
4
|
|
|
5
5
|
from datasets import Dataset
|
|
6
6
|
|
|
7
|
-
from verifiers.v1 import Taskset
|
|
7
|
+
from verifiers.v1 import Env, Taskset
|
|
8
8
|
from verifiers.v1.utils.taskset_utils import dataset_from_result, discover_sibling_dir
|
|
9
9
|
|
|
10
10
|
|
|
@@ -118,3 +118,25 @@ def test_taskset_skips_empty_skills_dir(tmp_path, monkeypatch) -> None:
|
|
|
118
118
|
|
|
119
119
|
assert taskset.get_skills_dir() == skills_dir
|
|
120
120
|
assert taskset.get_upload_dirs() == {"skills": skills_dir}
|
|
121
|
+
|
|
122
|
+
|
|
123
|
+
def test_v1_env_eval_inputs_can_shuffle_taskset_dataset() -> None:
|
|
124
|
+
class DemoTaskset(Taskset):
|
|
125
|
+
def load_tasks(self, split: str = "train"):
|
|
126
|
+
return [{"question": f"Reverse {i}.", "answer": str(i)} for i in range(6)]
|
|
127
|
+
|
|
128
|
+
env = Env(taskset=DemoTaskset())
|
|
129
|
+
|
|
130
|
+
inputs = env._get_eval_inputs(
|
|
131
|
+
num_examples=3,
|
|
132
|
+
rollouts_per_example=2,
|
|
133
|
+
shuffle=True,
|
|
134
|
+
shuffle_seed=7,
|
|
135
|
+
)
|
|
136
|
+
expected = (
|
|
137
|
+
env.get_eval_dataset().shuffle(seed=7).select(range(3)).repeat(2).to_list()
|
|
138
|
+
)
|
|
139
|
+
|
|
140
|
+
assert [row["example_id"] for row in inputs] == [
|
|
141
|
+
row["example_id"] for row in expected
|
|
142
|
+
]
|
|
@@ -400,12 +400,13 @@ class Environment(ABC):
|
|
|
400
400
|
self.build_dataset()
|
|
401
401
|
if self.dataset is None:
|
|
402
402
|
raise ValueError("dataset is not set")
|
|
403
|
+
dataset = self.dataset
|
|
403
404
|
if seed is not None:
|
|
404
|
-
|
|
405
|
+
dataset = dataset.shuffle(seed=seed)
|
|
405
406
|
if n > 0:
|
|
406
|
-
n = min(n, len(
|
|
407
|
-
return
|
|
408
|
-
return
|
|
407
|
+
n = min(n, len(dataset))
|
|
408
|
+
return dataset.select(range(n))
|
|
409
|
+
return dataset
|
|
409
410
|
|
|
410
411
|
@final
|
|
411
412
|
def get_eval_dataset(self, n: int = -1, seed: int | None = None) -> "Dataset":
|
|
@@ -415,12 +416,13 @@ class Environment(ABC):
|
|
|
415
416
|
"eval_dataset is not set, falling back to train dataset"
|
|
416
417
|
)
|
|
417
418
|
return self.get_dataset(n, seed)
|
|
419
|
+
eval_dataset = self.eval_dataset
|
|
418
420
|
if seed is not None:
|
|
419
|
-
|
|
421
|
+
eval_dataset = eval_dataset.shuffle(seed=seed)
|
|
420
422
|
if n > 0:
|
|
421
|
-
n = min(n, len(
|
|
422
|
-
return
|
|
423
|
-
return
|
|
423
|
+
n = min(n, len(eval_dataset))
|
|
424
|
+
return eval_dataset.select(range(n))
|
|
425
|
+
return eval_dataset
|
|
424
426
|
|
|
425
427
|
@final
|
|
426
428
|
def _get_usage_tracker(
|
|
@@ -831,6 +833,8 @@ class Environment(ABC):
|
|
|
831
833
|
hf_hub_dataset_name: str | None = None,
|
|
832
834
|
independent_scoring: bool = False,
|
|
833
835
|
max_retries: int = 0,
|
|
836
|
+
shuffle: bool = False,
|
|
837
|
+
shuffle_seed: int | None = None,
|
|
834
838
|
on_start: StartCallback | None = None,
|
|
835
839
|
on_progress: ProgressCallback | list[ProgressCallback] | None = None,
|
|
836
840
|
on_log: LogCallback | None = None,
|
|
@@ -934,6 +938,9 @@ class Environment(ABC):
|
|
|
934
938
|
total_rollouts = len(raw_inputs)
|
|
935
939
|
num_examples = len(set([i["example_id"] for i in raw_inputs]))
|
|
936
940
|
rollouts_per_example = total_rollouts // num_examples if num_examples > 0 else 0
|
|
941
|
+
resolved_shuffle_seed = (
|
|
942
|
+
(0 if shuffle_seed is None else shuffle_seed) if shuffle else None
|
|
943
|
+
)
|
|
937
944
|
builder = GenerateOutputsBuilder(
|
|
938
945
|
env_id=self.env_id,
|
|
939
946
|
env_args=self.env_args,
|
|
@@ -945,6 +952,8 @@ class Environment(ABC):
|
|
|
945
952
|
sampling_args=sampling_args,
|
|
946
953
|
results_path=results_path,
|
|
947
954
|
pass_threshold=self.pass_threshold,
|
|
955
|
+
shuffle=shuffle,
|
|
956
|
+
shuffle_seed=resolved_shuffle_seed,
|
|
948
957
|
)
|
|
949
958
|
|
|
950
959
|
single_client: Client | None = None
|
|
@@ -989,6 +998,8 @@ class Environment(ABC):
|
|
|
989
998
|
model=model,
|
|
990
999
|
num_examples=num_examples,
|
|
991
1000
|
rollouts_per_example=rollouts_per_example,
|
|
1001
|
+
shuffle=shuffle,
|
|
1002
|
+
shuffle_seed=resolved_shuffle_seed,
|
|
992
1003
|
)
|
|
993
1004
|
on_log(f"Resuming evaluation from {results_path}")
|
|
994
1005
|
outputs = load_outputs(results_path)
|
|
@@ -1152,11 +1163,20 @@ class Environment(ABC):
|
|
|
1152
1163
|
|
|
1153
1164
|
# evaluation
|
|
1154
1165
|
def _get_eval_inputs(
|
|
1155
|
-
self,
|
|
1166
|
+
self,
|
|
1167
|
+
num_examples: int = -1,
|
|
1168
|
+
rollouts_per_example: int = 1,
|
|
1169
|
+
shuffle: bool = False,
|
|
1170
|
+
shuffle_seed: int | None = None,
|
|
1156
1171
|
) -> List[RolloutInput]:
|
|
1157
1172
|
# get_eval_dataset handles fallback to train dataset if no eval source exists
|
|
1158
|
-
inputs = self.get_eval_dataset(
|
|
1173
|
+
inputs = self.get_eval_dataset()
|
|
1159
1174
|
assert inputs is not None, "No dataset found"
|
|
1175
|
+
if shuffle:
|
|
1176
|
+
inputs = inputs.shuffle(seed=0 if shuffle_seed is None else shuffle_seed)
|
|
1177
|
+
if num_examples > 0:
|
|
1178
|
+
num_examples = min(num_examples, len(inputs))
|
|
1179
|
+
inputs = inputs.select(range(num_examples))
|
|
1160
1180
|
if rollouts_per_example > 1:
|
|
1161
1181
|
inputs = inputs.repeat(rollouts_per_example)
|
|
1162
1182
|
return inputs.to_list()
|
|
@@ -1176,6 +1196,8 @@ class Environment(ABC):
|
|
|
1176
1196
|
hf_hub_dataset_name: str | None = None,
|
|
1177
1197
|
independent_scoring: bool = False,
|
|
1178
1198
|
max_retries: int = 0,
|
|
1199
|
+
shuffle: bool = False,
|
|
1200
|
+
shuffle_seed: int | None = None,
|
|
1179
1201
|
on_start: StartCallback | None = None,
|
|
1180
1202
|
on_progress: ProgressCallback | list[ProgressCallback] | None = None,
|
|
1181
1203
|
on_log: LogCallback | None = None,
|
|
@@ -1189,7 +1211,13 @@ class Environment(ABC):
|
|
|
1189
1211
|
A single callback replaces the default. A list of callbacks runs
|
|
1190
1212
|
alongside the default.
|
|
1191
1213
|
"""
|
|
1192
|
-
|
|
1214
|
+
resolved_shuffle_seed = 0 if shuffle and shuffle_seed is None else shuffle_seed
|
|
1215
|
+
inputs = self._get_eval_inputs(
|
|
1216
|
+
num_examples,
|
|
1217
|
+
rollouts_per_example,
|
|
1218
|
+
shuffle=shuffle,
|
|
1219
|
+
shuffle_seed=resolved_shuffle_seed,
|
|
1220
|
+
)
|
|
1193
1221
|
return await self.generate(
|
|
1194
1222
|
inputs,
|
|
1195
1223
|
client=client,
|
|
@@ -1203,6 +1231,8 @@ class Environment(ABC):
|
|
|
1203
1231
|
hf_hub_dataset_name=hf_hub_dataset_name,
|
|
1204
1232
|
independent_scoring=independent_scoring,
|
|
1205
1233
|
max_retries=max_retries,
|
|
1234
|
+
shuffle=shuffle,
|
|
1235
|
+
shuffle_seed=resolved_shuffle_seed,
|
|
1206
1236
|
on_start=on_start,
|
|
1207
1237
|
on_progress=on_progress,
|
|
1208
1238
|
on_log=on_log,
|
|
@@ -1224,11 +1254,19 @@ class Environment(ABC):
|
|
|
1224
1254
|
hf_hub_dataset_name: str | None = None,
|
|
1225
1255
|
independent_scoring: bool = False,
|
|
1226
1256
|
max_retries: int = 0,
|
|
1257
|
+
shuffle: bool = False,
|
|
1258
|
+
shuffle_seed: int | None = None,
|
|
1227
1259
|
) -> GenerateOutputs:
|
|
1228
1260
|
"""
|
|
1229
1261
|
Evaluate model on the Environment evaluation dataset synchronously.
|
|
1230
1262
|
"""
|
|
1231
|
-
|
|
1263
|
+
resolved_shuffle_seed = 0 if shuffle and shuffle_seed is None else shuffle_seed
|
|
1264
|
+
inputs = self._get_eval_inputs(
|
|
1265
|
+
num_examples,
|
|
1266
|
+
rollouts_per_example,
|
|
1267
|
+
shuffle=shuffle,
|
|
1268
|
+
shuffle_seed=resolved_shuffle_seed,
|
|
1269
|
+
)
|
|
1232
1270
|
return self.generate_sync(
|
|
1233
1271
|
inputs,
|
|
1234
1272
|
client=client,
|
|
@@ -1242,6 +1280,8 @@ class Environment(ABC):
|
|
|
1242
1280
|
hf_hub_dataset_name=hf_hub_dataset_name,
|
|
1243
1281
|
independent_scoring=independent_scoring,
|
|
1244
1282
|
max_retries=max_retries,
|
|
1283
|
+
shuffle=shuffle,
|
|
1284
|
+
shuffle_seed=resolved_shuffle_seed,
|
|
1245
1285
|
)
|
|
1246
1286
|
|
|
1247
1287
|
# setters for use by trainers
|
{verifiers-0.1.15.dev165 → verifiers-0.1.15.dev167}/verifiers/envs/experimental/cli_agent_env.py
RENAMED
|
@@ -717,7 +717,7 @@ class CliAgentEnv(SandboxMixin, vf.MultiTurnEnv):
|
|
|
717
717
|
num_turns = len(state.get("trajectory", []))
|
|
718
718
|
stop_condition = state.get("stop_condition", "unknown")
|
|
719
719
|
error = state.get("error")
|
|
720
|
-
|
|
720
|
+
error_summary = (
|
|
721
721
|
f"{type(error).__name__}: {truncate(str(error), 80)}" if error else None
|
|
722
722
|
)
|
|
723
723
|
exit_code = state.get("agent_exit_code")
|
|
@@ -741,8 +741,8 @@ class CliAgentEnv(SandboxMixin, vf.MultiTurnEnv):
|
|
|
741
741
|
]
|
|
742
742
|
if timed_out:
|
|
743
743
|
parts.append("timed_out=True")
|
|
744
|
-
if
|
|
745
|
-
parts.append(f"error={
|
|
744
|
+
if error_summary:
|
|
745
|
+
parts.append(f"error={error_summary}")
|
|
746
746
|
self.logger.info(" | ".join(parts))
|
|
747
747
|
|
|
748
748
|
@vf.cleanup
|
|
@@ -473,6 +473,18 @@ def build_parser() -> argparse.ArgumentParser:
|
|
|
473
473
|
default=None,
|
|
474
474
|
help="Number of rollouts per example",
|
|
475
475
|
)
|
|
476
|
+
parser.add_argument(
|
|
477
|
+
"--shuffle",
|
|
478
|
+
default=False,
|
|
479
|
+
action="store_true",
|
|
480
|
+
help="Shuffle the evaluation dataset before selecting examples",
|
|
481
|
+
)
|
|
482
|
+
parser.add_argument(
|
|
483
|
+
"--shuffle-seed",
|
|
484
|
+
type=int,
|
|
485
|
+
default=None,
|
|
486
|
+
help="Seed for --shuffle. Defaults to 0 when --shuffle is enabled.",
|
|
487
|
+
)
|
|
476
488
|
parser.add_argument(
|
|
477
489
|
"--max-concurrent",
|
|
478
490
|
"-c",
|
|
@@ -712,6 +724,12 @@ def main(argv: list[str] | None = None):
|
|
|
712
724
|
logger.debug(
|
|
713
725
|
f"Using rollouts_per_example={rollouts_per_example} from {source}"
|
|
714
726
|
)
|
|
727
|
+
shuffle = bool(raw.get("shuffle", False))
|
|
728
|
+
shuffle_seed = raw.get("shuffle_seed")
|
|
729
|
+
if shuffle and shuffle_seed is None:
|
|
730
|
+
shuffle_seed = 0
|
|
731
|
+
if not shuffle:
|
|
732
|
+
shuffle_seed = None
|
|
715
733
|
|
|
716
734
|
raw_endpoint_id = raw.get("endpoint_id")
|
|
717
735
|
raw_model_field = raw.get("model")
|
|
@@ -918,6 +936,8 @@ def main(argv: list[str] | None = None):
|
|
|
918
936
|
model=model,
|
|
919
937
|
num_examples=num_examples,
|
|
920
938
|
rollouts_per_example=rollouts_per_example,
|
|
939
|
+
shuffle=shuffle,
|
|
940
|
+
shuffle_seed=shuffle_seed,
|
|
921
941
|
env_dir_path=raw.get("env_dir_path", DEFAULT_ENV_DIR_PATH),
|
|
922
942
|
output_dir=raw.get("output_dir"),
|
|
923
943
|
name=name,
|
|
@@ -957,6 +977,8 @@ def main(argv: list[str] | None = None):
|
|
|
957
977
|
sampling_args=merged_sampling_args,
|
|
958
978
|
num_examples=num_examples,
|
|
959
979
|
rollouts_per_example=rollouts_per_example,
|
|
980
|
+
shuffle=shuffle,
|
|
981
|
+
shuffle_seed=shuffle_seed,
|
|
960
982
|
max_concurrent=raw.get("max_concurrent", DEFAULT_MAX_CONCURRENT),
|
|
961
983
|
max_retries=raw.get("max_retries", 3),
|
|
962
984
|
num_workers=raw.get("num_workers", "auto"),
|