verifiers 0.1.15.dev165__tar.gz → 0.1.15.dev166__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.
Files changed (324) hide show
  1. {verifiers-0.1.15.dev165 → verifiers-0.1.15.dev166}/PKG-INFO +1 -1
  2. {verifiers-0.1.15.dev165 → verifiers-0.1.15.dev166}/tests/test_environment.py +4 -4
  3. {verifiers-0.1.15.dev165 → verifiers-0.1.15.dev166}/tests/test_v1_config_extension.py +6 -3
  4. {verifiers-0.1.15.dev165 → verifiers-0.1.15.dev166}/tests/test_v1_runtime_lifecycle.py +7 -2
  5. {verifiers-0.1.15.dev165 → verifiers-0.1.15.dev166}/verifiers/envs/experimental/cli_agent_env.py +3 -3
  6. {verifiers-0.1.15.dev165 → verifiers-0.1.15.dev166}/verifiers/types.py +21 -6
  7. {verifiers-0.1.15.dev165 → verifiers-0.1.15.dev166}/verifiers/utils/async_utils.py +3 -3
  8. {verifiers-0.1.15.dev165 → verifiers-0.1.15.dev166}/verifiers/utils/env_utils.py +24 -9
  9. {verifiers-0.1.15.dev165 → verifiers-0.1.15.dev166}/verifiers/utils/error_utils.py +58 -9
  10. {verifiers-0.1.15.dev165 → verifiers-0.1.15.dev166}/verifiers/utils/logging_utils.py +2 -2
  11. {verifiers-0.1.15.dev165 → verifiers-0.1.15.dev166}/verifiers/utils/save_utils.py +4 -19
  12. {verifiers-0.1.15.dev165 → verifiers-0.1.15.dev166}/verifiers/v1/harness.py +2 -2
  13. {verifiers-0.1.15.dev165 → verifiers-0.1.15.dev166}/verifiers/v1/model.py +6 -3
  14. {verifiers-0.1.15.dev165 → verifiers-0.1.15.dev166}/verifiers/v1/program.py +0 -2
  15. {verifiers-0.1.15.dev165 → verifiers-0.1.15.dev166}/verifiers/v1/runtime.py +3 -3
  16. {verifiers-0.1.15.dev165 → verifiers-0.1.15.dev166}/verifiers/v1/utils/binding_utils.py +7 -3
  17. {verifiers-0.1.15.dev165 → verifiers-0.1.15.dev166}/verifiers/v1/utils/config_utils.py +7 -5
  18. {verifiers-0.1.15.dev165 → verifiers-0.1.15.dev166}/verifiers/v1/utils/endpoint_utils.py +24 -16
  19. {verifiers-0.1.15.dev165 → verifiers-0.1.15.dev166}/verifiers/v1/utils/logging_utils.py +6 -2
  20. {verifiers-0.1.15.dev165 → verifiers-0.1.15.dev166}/verifiers/v1/utils/program_utils.py +53 -24
  21. {verifiers-0.1.15.dev165 → verifiers-0.1.15.dev166}/verifiers/v1/utils/runtime_owner_utils.py +12 -4
  22. {verifiers-0.1.15.dev165 → verifiers-0.1.15.dev166}/verifiers/v1/utils/sandbox_program_utils.py +29 -6
  23. {verifiers-0.1.15.dev165 → verifiers-0.1.15.dev166}/verifiers/v1/utils/sandbox_utils.py +11 -3
  24. {verifiers-0.1.15.dev165 → verifiers-0.1.15.dev166}/verifiers/v1/utils/toolset_utils.py +2 -2
  25. {verifiers-0.1.15.dev165 → verifiers-0.1.15.dev166}/.gitignore +0 -0
  26. {verifiers-0.1.15.dev165 → verifiers-0.1.15.dev166}/LICENSE +0 -0
  27. {verifiers-0.1.15.dev165 → verifiers-0.1.15.dev166}/README.md +0 -0
  28. {verifiers-0.1.15.dev165 → verifiers-0.1.15.dev166}/pyproject.toml +0 -0
  29. {verifiers-0.1.15.dev165 → verifiers-0.1.15.dev166}/tests/AGENTS.md +0 -0
  30. {verifiers-0.1.15.dev165 → verifiers-0.1.15.dev166}/tests/README.md +0 -0
  31. {verifiers-0.1.15.dev165 → verifiers-0.1.15.dev166}/tests/__init__.py +0 -0
  32. {verifiers-0.1.15.dev165 → verifiers-0.1.15.dev166}/tests/conftest.py +0 -0
  33. {verifiers-0.1.15.dev165 → verifiers-0.1.15.dev166}/tests/test_browser_env.py +0 -0
  34. {verifiers-0.1.15.dev165 → verifiers-0.1.15.dev166}/tests/test_build_script.py +0 -0
  35. {verifiers-0.1.15.dev165 → verifiers-0.1.15.dev166}/tests/test_cli_agent_env.py +0 -0
  36. {verifiers-0.1.15.dev165 → verifiers-0.1.15.dev166}/tests/test_client_auth_errors.py +0 -0
  37. {verifiers-0.1.15.dev165 → verifiers-0.1.15.dev166}/tests/test_client_config.py +0 -0
  38. {verifiers-0.1.15.dev165 → verifiers-0.1.15.dev166}/tests/test_client_multimodal_types.py +0 -0
  39. {verifiers-0.1.15.dev165 → verifiers-0.1.15.dev166}/tests/test_composable_env.py +0 -0
  40. {verifiers-0.1.15.dev165 → verifiers-0.1.15.dev166}/tests/test_context_token_metrics.py +0 -0
  41. {verifiers-0.1.15.dev165 → verifiers-0.1.15.dev166}/tests/test_decorator_ranks.py +0 -0
  42. {verifiers-0.1.15.dev165 → verifiers-0.1.15.dev166}/tests/test_endpoint_registry.py +0 -0
  43. {verifiers-0.1.15.dev165 → verifiers-0.1.15.dev166}/tests/test_env_group.py +0 -0
  44. {verifiers-0.1.15.dev165 → verifiers-0.1.15.dev166}/tests/test_env_server.py +0 -0
  45. {verifiers-0.1.15.dev165 → verifiers-0.1.15.dev166}/tests/test_environment_extra.py +0 -0
  46. {verifiers-0.1.15.dev165 → verifiers-0.1.15.dev166}/tests/test_envs.py +0 -0
  47. {verifiers-0.1.15.dev165 → verifiers-0.1.15.dev166}/tests/test_error_chain.py +0 -0
  48. {verifiers-0.1.15.dev165 → verifiers-0.1.15.dev166}/tests/test_eval_cli.py +0 -0
  49. {verifiers-0.1.15.dev165 → verifiers-0.1.15.dev166}/tests/test_eval_display.py +0 -0
  50. {verifiers-0.1.15.dev165 → verifiers-0.1.15.dev166}/tests/test_eval_utils.py +0 -0
  51. {verifiers-0.1.15.dev165 → verifiers-0.1.15.dev166}/tests/test_gepa_cli.py +0 -0
  52. {verifiers-0.1.15.dev165 → verifiers-0.1.15.dev166}/tests/test_gepa_utils.py +0 -0
  53. {verifiers-0.1.15.dev165 → verifiers-0.1.15.dev166}/tests/test_gym_env.py +0 -0
  54. {verifiers-0.1.15.dev165 → verifiers-0.1.15.dev166}/tests/test_harbor_env_mcp.py +0 -0
  55. {verifiers-0.1.15.dev165 → verifiers-0.1.15.dev166}/tests/test_imports.py +0 -0
  56. {verifiers-0.1.15.dev165 → verifiers-0.1.15.dev166}/tests/test_init_script.py +0 -0
  57. {verifiers-0.1.15.dev165 → verifiers-0.1.15.dev166}/tests/test_install_utils.py +0 -0
  58. {verifiers-0.1.15.dev165 → verifiers-0.1.15.dev166}/tests/test_interception_utils.py +0 -0
  59. {verifiers-0.1.15.dev165 → verifiers-0.1.15.dev166}/tests/test_langchain_deep_agents_wikispeedia.py +0 -0
  60. {verifiers-0.1.15.dev165 → verifiers-0.1.15.dev166}/tests/test_lean_task.py +0 -0
  61. {verifiers-0.1.15.dev165 → verifiers-0.1.15.dev166}/tests/test_logging.py +0 -0
  62. {verifiers-0.1.15.dev165 → verifiers-0.1.15.dev166}/tests/test_math_rubric.py +0 -0
  63. {verifiers-0.1.15.dev165 → verifiers-0.1.15.dev166}/tests/test_maybe_think_parser.py +0 -0
  64. {verifiers-0.1.15.dev165 → verifiers-0.1.15.dev166}/tests/test_mcp_search_env.py +0 -0
  65. {verifiers-0.1.15.dev165 → verifiers-0.1.15.dev166}/tests/test_message_utils.py +0 -0
  66. {verifiers-0.1.15.dev165 → verifiers-0.1.15.dev166}/tests/test_message_utils_multimodal.py +0 -0
  67. {verifiers-0.1.15.dev165 → verifiers-0.1.15.dev166}/tests/test_multiturn_env.py +0 -0
  68. {verifiers-0.1.15.dev165 → verifiers-0.1.15.dev166}/tests/test_nemorl_client.py +0 -0
  69. {verifiers-0.1.15.dev165 → verifiers-0.1.15.dev166}/tests/test_openai_chat_completions_token_client.py +0 -0
  70. {verifiers-0.1.15.dev165 → verifiers-0.1.15.dev166}/tests/test_openai_responses_client.py +0 -0
  71. {verifiers-0.1.15.dev165 → verifiers-0.1.15.dev166}/tests/test_opencode_harbor.py +0 -0
  72. {verifiers-0.1.15.dev165 → verifiers-0.1.15.dev166}/tests/test_opencode_rlm_env.py +0 -0
  73. {verifiers-0.1.15.dev165 → verifiers-0.1.15.dev166}/tests/test_openenv_client.py +0 -0
  74. {verifiers-0.1.15.dev165 → verifiers-0.1.15.dev166}/tests/test_parser.py +0 -0
  75. {verifiers-0.1.15.dev165 → verifiers-0.1.15.dev166}/tests/test_path_utils.py +0 -0
  76. {verifiers-0.1.15.dev165 → verifiers-0.1.15.dev166}/tests/test_per_turn_timing.py +0 -0
  77. {verifiers-0.1.15.dev165 → verifiers-0.1.15.dev166}/tests/test_pricing_utils.py +0 -0
  78. {verifiers-0.1.15.dev165 → verifiers-0.1.15.dev166}/tests/test_prime_plugin.py +0 -0
  79. {verifiers-0.1.15.dev165 → verifiers-0.1.15.dev166}/tests/test_renderer_client.py +0 -0
  80. {verifiers-0.1.15.dev165 → verifiers-0.1.15.dev166}/tests/test_renderer_e2e.py +0 -0
  81. {verifiers-0.1.15.dev165 → verifiers-0.1.15.dev166}/tests/test_rlm_composable_env.py +0 -0
  82. {verifiers-0.1.15.dev165 → verifiers-0.1.15.dev166}/tests/test_rubric.py +0 -0
  83. {verifiers-0.1.15.dev165 → verifiers-0.1.15.dev166}/tests/test_rubric_group.py +0 -0
  84. {verifiers-0.1.15.dev165 → verifiers-0.1.15.dev166}/tests/test_sandbox_env.py +0 -0
  85. {verifiers-0.1.15.dev165 → verifiers-0.1.15.dev166}/tests/test_sandbox_mixin.py +0 -0
  86. {verifiers-0.1.15.dev165 → verifiers-0.1.15.dev166}/tests/test_save_utils.py +0 -0
  87. {verifiers-0.1.15.dev165 → verifiers-0.1.15.dev166}/tests/test_setup_script.py +0 -0
  88. {verifiers-0.1.15.dev165 → verifiers-0.1.15.dev166}/tests/test_singleturn_env.py +0 -0
  89. {verifiers-0.1.15.dev165 → verifiers-0.1.15.dev166}/tests/test_stateful_tool_env.py +0 -0
  90. {verifiers-0.1.15.dev165 → verifiers-0.1.15.dev166}/tests/test_think_parser.py +0 -0
  91. {verifiers-0.1.15.dev165 → verifiers-0.1.15.dev166}/tests/test_tool_env.py +0 -0
  92. {verifiers-0.1.15.dev165 → verifiers-0.1.15.dev166}/tests/test_tool_utils.py +0 -0
  93. {verifiers-0.1.15.dev165 → verifiers-0.1.15.dev166}/tests/test_trajectory_processing.py +0 -0
  94. {verifiers-0.1.15.dev165 → verifiers-0.1.15.dev166}/tests/test_tui_info_formatting.py +0 -0
  95. {verifiers-0.1.15.dev165 → verifiers-0.1.15.dev166}/tests/test_types.py +0 -0
  96. {verifiers-0.1.15.dev165 → verifiers-0.1.15.dev166}/tests/test_v1_bfcl.py +0 -0
  97. {verifiers-0.1.15.dev165 → verifiers-0.1.15.dev166}/tests/test_v1_empty_completions.py +0 -0
  98. {verifiers-0.1.15.dev165 → verifiers-0.1.15.dev166}/tests/test_v1_endpoint_protocols.py +0 -0
  99. {verifiers-0.1.15.dev165 → verifiers-0.1.15.dev166}/tests/test_v1_example_counts.py +0 -0
  100. {verifiers-0.1.15.dev165 → verifiers-0.1.15.dev166}/tests/test_v1_group_reward_env.py +0 -0
  101. {verifiers-0.1.15.dev165 → verifiers-0.1.15.dev166}/tests/test_v1_harbor_cli.py +0 -0
  102. {verifiers-0.1.15.dev165 → verifiers-0.1.15.dev166}/tests/test_v1_mini_swe_agent.py +0 -0
  103. {verifiers-0.1.15.dev165 → verifiers-0.1.15.dev166}/tests/test_v1_nemo_gym_harness.py +0 -0
  104. {verifiers-0.1.15.dev165 → verifiers-0.1.15.dev166}/tests/test_v1_openenv_taskset.py +0 -0
  105. {verifiers-0.1.15.dev165 → verifiers-0.1.15.dev166}/tests/test_v1_openreward_taskset.py +0 -0
  106. {verifiers-0.1.15.dev165 → verifiers-0.1.15.dev166}/tests/test_v1_replay_harness.py +0 -0
  107. {verifiers-0.1.15.dev165 → verifiers-0.1.15.dev166}/tests/test_v1_rlm_swe.py +0 -0
  108. {verifiers-0.1.15.dev165 → verifiers-0.1.15.dev166}/tests/test_v1_scoring_functions.py +0 -0
  109. {verifiers-0.1.15.dev165 → verifiers-0.1.15.dev166}/tests/test_v1_taskset_bindings.py +0 -0
  110. {verifiers-0.1.15.dev165 → verifiers-0.1.15.dev166}/tests/test_v1_taskset_utils.py +0 -0
  111. {verifiers-0.1.15.dev165 → verifiers-0.1.15.dev166}/tests/test_v1_textarena_taskset.py +0 -0
  112. {verifiers-0.1.15.dev165 → verifiers-0.1.15.dev166}/tests/test_wiki_search_v1.py +0 -0
  113. {verifiers-0.1.15.dev165 → verifiers-0.1.15.dev166}/tests/test_wordle_env.py +0 -0
  114. {verifiers-0.1.15.dev165 → verifiers-0.1.15.dev166}/tests/test_wordle_v1_env.py +0 -0
  115. {verifiers-0.1.15.dev165 → verifiers-0.1.15.dev166}/tests/test_xml_parser.py +0 -0
  116. {verifiers-0.1.15.dev165 → verifiers-0.1.15.dev166}/verifiers/AGENTS.md +0 -0
  117. {verifiers-0.1.15.dev165 → verifiers-0.1.15.dev166}/verifiers/__init__.py +0 -0
  118. {verifiers-0.1.15.dev165 → verifiers-0.1.15.dev166}/verifiers/cli/__init__.py +0 -0
  119. {verifiers-0.1.15.dev165 → verifiers-0.1.15.dev166}/verifiers/cli/commands/__init__.py +0 -0
  120. {verifiers-0.1.15.dev165 → verifiers-0.1.15.dev166}/verifiers/cli/commands/build.py +0 -0
  121. {verifiers-0.1.15.dev165 → verifiers-0.1.15.dev166}/verifiers/cli/commands/eval.py +0 -0
  122. {verifiers-0.1.15.dev165 → verifiers-0.1.15.dev166}/verifiers/cli/commands/gepa.py +0 -0
  123. {verifiers-0.1.15.dev165 → verifiers-0.1.15.dev166}/verifiers/cli/commands/init.py +0 -0
  124. {verifiers-0.1.15.dev165 → verifiers-0.1.15.dev166}/verifiers/cli/commands/install.py +0 -0
  125. {verifiers-0.1.15.dev165 → verifiers-0.1.15.dev166}/verifiers/cli/commands/setup.py +0 -0
  126. {verifiers-0.1.15.dev165 → verifiers-0.1.15.dev166}/verifiers/cli/plugins/__init__.py +0 -0
  127. {verifiers-0.1.15.dev165 → verifiers-0.1.15.dev166}/verifiers/cli/plugins/prime.py +0 -0
  128. {verifiers-0.1.15.dev165 → verifiers-0.1.15.dev166}/verifiers/cli/tui.py +0 -0
  129. {verifiers-0.1.15.dev165 → verifiers-0.1.15.dev166}/verifiers/clients/__init__.py +0 -0
  130. {verifiers-0.1.15.dev165 → verifiers-0.1.15.dev166}/verifiers/clients/anthropic_messages_client.py +0 -0
  131. {verifiers-0.1.15.dev165 → verifiers-0.1.15.dev166}/verifiers/clients/client.py +0 -0
  132. {verifiers-0.1.15.dev165 → verifiers-0.1.15.dev166}/verifiers/clients/nemorl_chat_completions_client.py +0 -0
  133. {verifiers-0.1.15.dev165 → verifiers-0.1.15.dev166}/verifiers/clients/openai_chat_completions_client.py +0 -0
  134. {verifiers-0.1.15.dev165 → verifiers-0.1.15.dev166}/verifiers/clients/openai_chat_completions_token_client.py +0 -0
  135. {verifiers-0.1.15.dev165 → verifiers-0.1.15.dev166}/verifiers/clients/openai_completions_client.py +0 -0
  136. {verifiers-0.1.15.dev165 → verifiers-0.1.15.dev166}/verifiers/clients/openai_responses_client.py +0 -0
  137. {verifiers-0.1.15.dev165 → verifiers-0.1.15.dev166}/verifiers/clients/renderer_client.py +0 -0
  138. {verifiers-0.1.15.dev165 → verifiers-0.1.15.dev166}/verifiers/decorators.py +0 -0
  139. {verifiers-0.1.15.dev165 → verifiers-0.1.15.dev166}/verifiers/envs/AGENTS.md +0 -0
  140. {verifiers-0.1.15.dev165 → verifiers-0.1.15.dev166}/verifiers/envs/__init__.py +0 -0
  141. {verifiers-0.1.15.dev165 → verifiers-0.1.15.dev166}/verifiers/envs/env_group.py +0 -0
  142. {verifiers-0.1.15.dev165 → verifiers-0.1.15.dev166}/verifiers/envs/environment.py +0 -0
  143. {verifiers-0.1.15.dev165 → verifiers-0.1.15.dev166}/verifiers/envs/experimental/README.md +0 -0
  144. {verifiers-0.1.15.dev165 → verifiers-0.1.15.dev166}/verifiers/envs/experimental/__init__.py +0 -0
  145. {verifiers-0.1.15.dev165 → verifiers-0.1.15.dev166}/verifiers/envs/experimental/composable/README.md +0 -0
  146. {verifiers-0.1.15.dev165 → verifiers-0.1.15.dev166}/verifiers/envs/experimental/composable/__init__.py +0 -0
  147. {verifiers-0.1.15.dev165 → verifiers-0.1.15.dev166}/verifiers/envs/experimental/composable/_filter.py +0 -0
  148. {verifiers-0.1.15.dev165 → verifiers-0.1.15.dev166}/verifiers/envs/experimental/composable/composable_env.py +0 -0
  149. {verifiers-0.1.15.dev165 → verifiers-0.1.15.dev166}/verifiers/envs/experimental/composable/harness.py +0 -0
  150. {verifiers-0.1.15.dev165 → verifiers-0.1.15.dev166}/verifiers/envs/experimental/composable/harnesses/__init__.py +0 -0
  151. {verifiers-0.1.15.dev165 → verifiers-0.1.15.dev166}/verifiers/envs/experimental/composable/harnesses/mini_swe_agent.py +0 -0
  152. {verifiers-0.1.15.dev165 → verifiers-0.1.15.dev166}/verifiers/envs/experimental/composable/harnesses/opencode.py +0 -0
  153. {verifiers-0.1.15.dev165 → verifiers-0.1.15.dev166}/verifiers/envs/experimental/composable/harnesses/prompt.txt +0 -0
  154. {verifiers-0.1.15.dev165 → verifiers-0.1.15.dev166}/verifiers/envs/experimental/composable/harnesses/rlm.py +0 -0
  155. {verifiers-0.1.15.dev165 → verifiers-0.1.15.dev166}/verifiers/envs/experimental/composable/swe_debug_env.py +0 -0
  156. {verifiers-0.1.15.dev165 → verifiers-0.1.15.dev166}/verifiers/envs/experimental/composable/task.py +0 -0
  157. {verifiers-0.1.15.dev165 → verifiers-0.1.15.dev166}/verifiers/envs/experimental/composable/tasksets/__init__.py +0 -0
  158. {verifiers-0.1.15.dev165 → verifiers-0.1.15.dev166}/verifiers/envs/experimental/composable/tasksets/cp/__init__.py +0 -0
  159. {verifiers-0.1.15.dev165 → verifiers-0.1.15.dev166}/verifiers/envs/experimental/composable/tasksets/cp/cp_task.py +0 -0
  160. {verifiers-0.1.15.dev165 → verifiers-0.1.15.dev166}/verifiers/envs/experimental/composable/tasksets/cp/test_utils.py +0 -0
  161. {verifiers-0.1.15.dev165 → verifiers-0.1.15.dev166}/verifiers/envs/experimental/composable/tasksets/harbor/__init__.py +0 -0
  162. {verifiers-0.1.15.dev165 → verifiers-0.1.15.dev166}/verifiers/envs/experimental/composable/tasksets/harbor/harbor.py +0 -0
  163. {verifiers-0.1.15.dev165 → verifiers-0.1.15.dev166}/verifiers/envs/experimental/composable/tasksets/lean/__init__.py +0 -0
  164. {verifiers-0.1.15.dev165 → verifiers-0.1.15.dev166}/verifiers/envs/experimental/composable/tasksets/lean/lean_task.py +0 -0
  165. {verifiers-0.1.15.dev165 → verifiers-0.1.15.dev166}/verifiers/envs/experimental/composable/tasksets/math/__init__.py +0 -0
  166. {verifiers-0.1.15.dev165 → verifiers-0.1.15.dev166}/verifiers/envs/experimental/composable/tasksets/math/math_task.py +0 -0
  167. {verifiers-0.1.15.dev165 → verifiers-0.1.15.dev166}/verifiers/envs/experimental/composable/tasksets/swe/README.md +0 -0
  168. {verifiers-0.1.15.dev165 → verifiers-0.1.15.dev166}/verifiers/envs/experimental/composable/tasksets/swe/__init__.py +0 -0
  169. {verifiers-0.1.15.dev165 → verifiers-0.1.15.dev166}/verifiers/envs/experimental/composable/tasksets/swe/multi_swe/__init__.py +0 -0
  170. {verifiers-0.1.15.dev165 → verifiers-0.1.15.dev166}/verifiers/envs/experimental/composable/tasksets/swe/multi_swe/extract_fix_patch.sh +0 -0
  171. {verifiers-0.1.15.dev165 → verifiers-0.1.15.dev166}/verifiers/envs/experimental/composable/tasksets/swe/multi_swe/taskset.py +0 -0
  172. {verifiers-0.1.15.dev165 → verifiers-0.1.15.dev166}/verifiers/envs/experimental/composable/tasksets/swe/openswe/__init__.py +0 -0
  173. {verifiers-0.1.15.dev165 → verifiers-0.1.15.dev166}/verifiers/envs/experimental/composable/tasksets/swe/openswe/taskset.py +0 -0
  174. {verifiers-0.1.15.dev165 → verifiers-0.1.15.dev166}/verifiers/envs/experimental/composable/tasksets/swe/r2e_gym/__init__.py +0 -0
  175. {verifiers-0.1.15.dev165 → verifiers-0.1.15.dev166}/verifiers/envs/experimental/composable/tasksets/swe/r2e_gym/log_parser.py +0 -0
  176. {verifiers-0.1.15.dev165 → verifiers-0.1.15.dev166}/verifiers/envs/experimental/composable/tasksets/swe/r2e_gym/taskset.py +0 -0
  177. {verifiers-0.1.15.dev165 → verifiers-0.1.15.dev166}/verifiers/envs/experimental/composable/tasksets/swe/scale_swe/__init__.py +0 -0
  178. {verifiers-0.1.15.dev165 → verifiers-0.1.15.dev166}/verifiers/envs/experimental/composable/tasksets/swe/scale_swe/taskset.py +0 -0
  179. {verifiers-0.1.15.dev165 → verifiers-0.1.15.dev166}/verifiers/envs/experimental/composable/tasksets/swe/shared/__init__.py +0 -0
  180. {verifiers-0.1.15.dev165 → verifiers-0.1.15.dev166}/verifiers/envs/experimental/composable/tasksets/swe/shared/test_patch.py +0 -0
  181. {verifiers-0.1.15.dev165 → verifiers-0.1.15.dev166}/verifiers/envs/experimental/composable/tasksets/swe/swe_bench/__init__.py +0 -0
  182. {verifiers-0.1.15.dev165 → verifiers-0.1.15.dev166}/verifiers/envs/experimental/composable/tasksets/swe/swe_bench/taskset.py +0 -0
  183. {verifiers-0.1.15.dev165 → verifiers-0.1.15.dev166}/verifiers/envs/experimental/composable/tasksets/swe/swe_lego/__init__.py +0 -0
  184. {verifiers-0.1.15.dev165 → verifiers-0.1.15.dev166}/verifiers/envs/experimental/composable/tasksets/swe/swe_lego/taskset.py +0 -0
  185. {verifiers-0.1.15.dev165 → verifiers-0.1.15.dev166}/verifiers/envs/experimental/composable/tasksets/swe/swe_rebench_v2/__init__.py +0 -0
  186. {verifiers-0.1.15.dev165 → verifiers-0.1.15.dev166}/verifiers/envs/experimental/composable/tasksets/swe/swe_rebench_v2/log_parsers.py +0 -0
  187. {verifiers-0.1.15.dev165 → verifiers-0.1.15.dev166}/verifiers/envs/experimental/composable/tasksets/swe/swe_rebench_v2/taskset.py +0 -0
  188. {verifiers-0.1.15.dev165 → verifiers-0.1.15.dev166}/verifiers/envs/experimental/composable/tasksets/swe/swe_smith/__init__.py +0 -0
  189. {verifiers-0.1.15.dev165 → verifiers-0.1.15.dev166}/verifiers/envs/experimental/composable/tasksets/swe/swe_smith/taskset.py +0 -0
  190. {verifiers-0.1.15.dev165 → verifiers-0.1.15.dev166}/verifiers/envs/experimental/composable/tasksets/swe/swe_tasksets.py +0 -0
  191. {verifiers-0.1.15.dev165 → verifiers-0.1.15.dev166}/verifiers/envs/experimental/gym_env.py +0 -0
  192. {verifiers-0.1.15.dev165 → verifiers-0.1.15.dev166}/verifiers/envs/experimental/harbor_env/__init__.py +0 -0
  193. {verifiers-0.1.15.dev165 → verifiers-0.1.15.dev166}/verifiers/envs/experimental/harbor_env/env.py +0 -0
  194. {verifiers-0.1.15.dev165 → verifiers-0.1.15.dev166}/verifiers/envs/experimental/harbor_env/mcp.py +0 -0
  195. {verifiers-0.1.15.dev165 → verifiers-0.1.15.dev166}/verifiers/envs/experimental/mcp_env.py +0 -0
  196. {verifiers-0.1.15.dev165 → verifiers-0.1.15.dev166}/verifiers/envs/experimental/opencode_env.py +0 -0
  197. {verifiers-0.1.15.dev165 → verifiers-0.1.15.dev166}/verifiers/envs/experimental/opencode_qa_env.py +0 -0
  198. {verifiers-0.1.15.dev165 → verifiers-0.1.15.dev166}/verifiers/envs/experimental/opencode_rlm_env.py +0 -0
  199. {verifiers-0.1.15.dev165 → verifiers-0.1.15.dev166}/verifiers/envs/experimental/sandbox_mixin.py +0 -0
  200. {verifiers-0.1.15.dev165 → verifiers-0.1.15.dev166}/verifiers/envs/experimental/utils/__init__.py +0 -0
  201. {verifiers-0.1.15.dev165 → verifiers-0.1.15.dev166}/verifiers/envs/experimental/utils/file_locks.py +0 -0
  202. {verifiers-0.1.15.dev165 → verifiers-0.1.15.dev166}/verifiers/envs/experimental/utils/git_checkout_cache.py +0 -0
  203. {verifiers-0.1.15.dev165 → verifiers-0.1.15.dev166}/verifiers/envs/integrations/README.md +0 -0
  204. {verifiers-0.1.15.dev165 → verifiers-0.1.15.dev166}/verifiers/envs/integrations/__init__.py +0 -0
  205. {verifiers-0.1.15.dev165 → verifiers-0.1.15.dev166}/verifiers/envs/integrations/browser_env/README.md +0 -0
  206. {verifiers-0.1.15.dev165 → verifiers-0.1.15.dev166}/verifiers/envs/integrations/browser_env/__init__.py +0 -0
  207. {verifiers-0.1.15.dev165 → verifiers-0.1.15.dev166}/verifiers/envs/integrations/browser_env/browser_env.py +0 -0
  208. {verifiers-0.1.15.dev165 → verifiers-0.1.15.dev166}/verifiers/envs/integrations/browser_env/modes/__init__.py +0 -0
  209. {verifiers-0.1.15.dev165 → verifiers-0.1.15.dev166}/verifiers/envs/integrations/browser_env/modes/base.py +0 -0
  210. {verifiers-0.1.15.dev165 → verifiers-0.1.15.dev166}/verifiers/envs/integrations/browser_env/modes/cua_mode.py +0 -0
  211. {verifiers-0.1.15.dev165 → verifiers-0.1.15.dev166}/verifiers/envs/integrations/browser_env/modes/dom_mode.py +0 -0
  212. {verifiers-0.1.15.dev165 → verifiers-0.1.15.dev166}/verifiers/envs/integrations/openenv_env.py +0 -0
  213. {verifiers-0.1.15.dev165 → verifiers-0.1.15.dev166}/verifiers/envs/integrations/reasoninggym_env.py +0 -0
  214. {verifiers-0.1.15.dev165 → verifiers-0.1.15.dev166}/verifiers/envs/integrations/textarena_env.py +0 -0
  215. {verifiers-0.1.15.dev165 → verifiers-0.1.15.dev166}/verifiers/envs/multiturn_env.py +0 -0
  216. {verifiers-0.1.15.dev165 → verifiers-0.1.15.dev166}/verifiers/envs/python_env.py +0 -0
  217. {verifiers-0.1.15.dev165 → verifiers-0.1.15.dev166}/verifiers/envs/sandbox_env.py +0 -0
  218. {verifiers-0.1.15.dev165 → verifiers-0.1.15.dev166}/verifiers/envs/singleturn_env.py +0 -0
  219. {verifiers-0.1.15.dev165 → verifiers-0.1.15.dev166}/verifiers/envs/stateful_tool_env.py +0 -0
  220. {verifiers-0.1.15.dev165 → verifiers-0.1.15.dev166}/verifiers/envs/tool_env.py +0 -0
  221. {verifiers-0.1.15.dev165 → verifiers-0.1.15.dev166}/verifiers/errors.py +0 -0
  222. {verifiers-0.1.15.dev165 → verifiers-0.1.15.dev166}/verifiers/gepa/__init__.py +0 -0
  223. {verifiers-0.1.15.dev165 → verifiers-0.1.15.dev166}/verifiers/gepa/adapter.py +0 -0
  224. {verifiers-0.1.15.dev165 → verifiers-0.1.15.dev166}/verifiers/gepa/config.py +0 -0
  225. {verifiers-0.1.15.dev165 → verifiers-0.1.15.dev166}/verifiers/gepa/display.py +0 -0
  226. {verifiers-0.1.15.dev165 → verifiers-0.1.15.dev166}/verifiers/gepa/gepa_utils.py +0 -0
  227. {verifiers-0.1.15.dev165 → verifiers-0.1.15.dev166}/verifiers/parsers/__init__.py +0 -0
  228. {verifiers-0.1.15.dev165 → verifiers-0.1.15.dev166}/verifiers/parsers/maybe_think_parser.py +0 -0
  229. {verifiers-0.1.15.dev165 → verifiers-0.1.15.dev166}/verifiers/parsers/parser.py +0 -0
  230. {verifiers-0.1.15.dev165 → verifiers-0.1.15.dev166}/verifiers/parsers/think_parser.py +0 -0
  231. {verifiers-0.1.15.dev165 → verifiers-0.1.15.dev166}/verifiers/parsers/xml_parser.py +0 -0
  232. {verifiers-0.1.15.dev165 → verifiers-0.1.15.dev166}/verifiers/rl/README.md +0 -0
  233. {verifiers-0.1.15.dev165 → verifiers-0.1.15.dev166}/verifiers/rl/__init__.py +0 -0
  234. {verifiers-0.1.15.dev165 → verifiers-0.1.15.dev166}/verifiers/rl/inference/__init__.py +0 -0
  235. {verifiers-0.1.15.dev165 → verifiers-0.1.15.dev166}/verifiers/rl/inference/client.py +0 -0
  236. {verifiers-0.1.15.dev165 → verifiers-0.1.15.dev166}/verifiers/rl/inference/server.py +0 -0
  237. {verifiers-0.1.15.dev165 → verifiers-0.1.15.dev166}/verifiers/rl/trainer/__init__.py +0 -0
  238. {verifiers-0.1.15.dev165 → verifiers-0.1.15.dev166}/verifiers/rl/trainer/config.py +0 -0
  239. {verifiers-0.1.15.dev165 → verifiers-0.1.15.dev166}/verifiers/rl/trainer/orchestrator.py +0 -0
  240. {verifiers-0.1.15.dev165 → verifiers-0.1.15.dev166}/verifiers/rl/trainer/trainer.py +0 -0
  241. {verifiers-0.1.15.dev165 → verifiers-0.1.15.dev166}/verifiers/rl/trainer/utils.py +0 -0
  242. {verifiers-0.1.15.dev165 → verifiers-0.1.15.dev166}/verifiers/rubrics/__init__.py +0 -0
  243. {verifiers-0.1.15.dev165 → verifiers-0.1.15.dev166}/verifiers/rubrics/experimental/hybrid_math_rubric.py +0 -0
  244. {verifiers-0.1.15.dev165 → verifiers-0.1.15.dev166}/verifiers/rubrics/judge_rubric.py +0 -0
  245. {verifiers-0.1.15.dev165 → verifiers-0.1.15.dev166}/verifiers/rubrics/math_rubric.py +0 -0
  246. {verifiers-0.1.15.dev165 → verifiers-0.1.15.dev166}/verifiers/rubrics/rubric.py +0 -0
  247. {verifiers-0.1.15.dev165 → verifiers-0.1.15.dev166}/verifiers/rubrics/rubric_group.py +0 -0
  248. {verifiers-0.1.15.dev165 → verifiers-0.1.15.dev166}/verifiers/scripts/__init__.py +0 -0
  249. {verifiers-0.1.15.dev165 → verifiers-0.1.15.dev166}/verifiers/scripts/build.py +0 -0
  250. {verifiers-0.1.15.dev165 → verifiers-0.1.15.dev166}/verifiers/scripts/eval.py +0 -0
  251. {verifiers-0.1.15.dev165 → verifiers-0.1.15.dev166}/verifiers/scripts/gepa.py +0 -0
  252. {verifiers-0.1.15.dev165 → verifiers-0.1.15.dev166}/verifiers/scripts/init.py +0 -0
  253. {verifiers-0.1.15.dev165 → verifiers-0.1.15.dev166}/verifiers/scripts/install.py +0 -0
  254. {verifiers-0.1.15.dev165 → verifiers-0.1.15.dev166}/verifiers/scripts/rl.py +0 -0
  255. {verifiers-0.1.15.dev165 → verifiers-0.1.15.dev166}/verifiers/scripts/setup.py +0 -0
  256. {verifiers-0.1.15.dev165 → verifiers-0.1.15.dev166}/verifiers/scripts/train.py +0 -0
  257. {verifiers-0.1.15.dev165 → verifiers-0.1.15.dev166}/verifiers/scripts/tui.py +0 -0
  258. {verifiers-0.1.15.dev165 → verifiers-0.1.15.dev166}/verifiers/scripts/vllm.py +0 -0
  259. {verifiers-0.1.15.dev165 → verifiers-0.1.15.dev166}/verifiers/serve/__init__.py +0 -0
  260. {verifiers-0.1.15.dev165 → verifiers-0.1.15.dev166}/verifiers/serve/client/env_client.py +0 -0
  261. {verifiers-0.1.15.dev165 → verifiers-0.1.15.dev166}/verifiers/serve/client/zmq_env_client.py +0 -0
  262. {verifiers-0.1.15.dev165 → verifiers-0.1.15.dev166}/verifiers/serve/server/__init__.py +0 -0
  263. {verifiers-0.1.15.dev165 → verifiers-0.1.15.dev166}/verifiers/serve/server/env_router.py +0 -0
  264. {verifiers-0.1.15.dev165 → verifiers-0.1.15.dev166}/verifiers/serve/server/env_server.py +0 -0
  265. {verifiers-0.1.15.dev165 → verifiers-0.1.15.dev166}/verifiers/serve/server/env_worker.py +0 -0
  266. {verifiers-0.1.15.dev165 → verifiers-0.1.15.dev166}/verifiers/serve/server/zmq_env_server.py +0 -0
  267. {verifiers-0.1.15.dev165 → verifiers-0.1.15.dev166}/verifiers/serve/types.py +0 -0
  268. {verifiers-0.1.15.dev165 → verifiers-0.1.15.dev166}/verifiers/utils/__init__.py +0 -0
  269. {verifiers-0.1.15.dev165 → verifiers-0.1.15.dev166}/verifiers/utils/client_utils.py +0 -0
  270. {verifiers-0.1.15.dev165 → verifiers-0.1.15.dev166}/verifiers/utils/config_utils.py +0 -0
  271. {verifiers-0.1.15.dev165 → verifiers-0.1.15.dev166}/verifiers/utils/data_utils.py +0 -0
  272. {verifiers-0.1.15.dev165 → verifiers-0.1.15.dev166}/verifiers/utils/display_utils.py +0 -0
  273. {verifiers-0.1.15.dev165 → verifiers-0.1.15.dev166}/verifiers/utils/env_config_utils.py +0 -0
  274. {verifiers-0.1.15.dev165 → verifiers-0.1.15.dev166}/verifiers/utils/eval_display.py +0 -0
  275. {verifiers-0.1.15.dev165 → verifiers-0.1.15.dev166}/verifiers/utils/eval_utils.py +0 -0
  276. {verifiers-0.1.15.dev165 → verifiers-0.1.15.dev166}/verifiers/utils/heartbeat.py +0 -0
  277. {verifiers-0.1.15.dev165 → verifiers-0.1.15.dev166}/verifiers/utils/import_utils.py +0 -0
  278. {verifiers-0.1.15.dev165 → verifiers-0.1.15.dev166}/verifiers/utils/install_utils.py +0 -0
  279. {verifiers-0.1.15.dev165 → verifiers-0.1.15.dev166}/verifiers/utils/interception_utils.py +0 -0
  280. {verifiers-0.1.15.dev165 → verifiers-0.1.15.dev166}/verifiers/utils/message_utils.py +0 -0
  281. {verifiers-0.1.15.dev165 → verifiers-0.1.15.dev166}/verifiers/utils/metric_utils.py +0 -0
  282. {verifiers-0.1.15.dev165 → verifiers-0.1.15.dev166}/verifiers/utils/path_utils.py +0 -0
  283. {verifiers-0.1.15.dev165 → verifiers-0.1.15.dev166}/verifiers/utils/pricing_utils.py +0 -0
  284. {verifiers-0.1.15.dev165 → verifiers-0.1.15.dev166}/verifiers/utils/process_utils.py +0 -0
  285. {verifiers-0.1.15.dev165 → verifiers-0.1.15.dev166}/verifiers/utils/response_utils.py +0 -0
  286. {verifiers-0.1.15.dev165 → verifiers-0.1.15.dev166}/verifiers/utils/serve_utils.py +0 -0
  287. {verifiers-0.1.15.dev165 → verifiers-0.1.15.dev166}/verifiers/utils/thread_utils.py +0 -0
  288. {verifiers-0.1.15.dev165 → verifiers-0.1.15.dev166}/verifiers/utils/threaded_sandbox_client.py +0 -0
  289. {verifiers-0.1.15.dev165 → verifiers-0.1.15.dev166}/verifiers/utils/tool_utils.py +0 -0
  290. {verifiers-0.1.15.dev165 → verifiers-0.1.15.dev166}/verifiers/utils/usage_utils.py +0 -0
  291. {verifiers-0.1.15.dev165 → verifiers-0.1.15.dev166}/verifiers/utils/version_utils.py +0 -0
  292. {verifiers-0.1.15.dev165 → verifiers-0.1.15.dev166}/verifiers/v1/ENVIRONMENT_BEST_PRACTICES.md +0 -0
  293. {verifiers-0.1.15.dev165 → verifiers-0.1.15.dev166}/verifiers/v1/README.md +0 -0
  294. {verifiers-0.1.15.dev165 → verifiers-0.1.15.dev166}/verifiers/v1/RE_MIGRATION.md +0 -0
  295. {verifiers-0.1.15.dev165 → verifiers-0.1.15.dev166}/verifiers/v1/__init__.py +0 -0
  296. {verifiers-0.1.15.dev165 → verifiers-0.1.15.dev166}/verifiers/v1/artifact.py +0 -0
  297. {verifiers-0.1.15.dev165 → verifiers-0.1.15.dev166}/verifiers/v1/config.py +0 -0
  298. {verifiers-0.1.15.dev165 → verifiers-0.1.15.dev166}/verifiers/v1/env.py +0 -0
  299. {verifiers-0.1.15.dev165 → verifiers-0.1.15.dev166}/verifiers/v1/runtime_handles.py +0 -0
  300. {verifiers-0.1.15.dev165 → verifiers-0.1.15.dev166}/verifiers/v1/sandbox.py +0 -0
  301. {verifiers-0.1.15.dev165 → verifiers-0.1.15.dev166}/verifiers/v1/state.py +0 -0
  302. {verifiers-0.1.15.dev165 → verifiers-0.1.15.dev166}/verifiers/v1/task.py +0 -0
  303. {verifiers-0.1.15.dev165 → verifiers-0.1.15.dev166}/verifiers/v1/taskset.py +0 -0
  304. {verifiers-0.1.15.dev165 → verifiers-0.1.15.dev166}/verifiers/v1/toolset.py +0 -0
  305. {verifiers-0.1.15.dev165 → verifiers-0.1.15.dev166}/verifiers/v1/types.py +0 -0
  306. {verifiers-0.1.15.dev165 → verifiers-0.1.15.dev166}/verifiers/v1/user.py +0 -0
  307. {verifiers-0.1.15.dev165 → verifiers-0.1.15.dev166}/verifiers/v1/utils/__init__.py +0 -0
  308. {verifiers-0.1.15.dev165 → verifiers-0.1.15.dev166}/verifiers/v1/utils/config_callable_utils.py +0 -0
  309. {verifiers-0.1.15.dev165 → verifiers-0.1.15.dev166}/verifiers/v1/utils/json_utils.py +0 -0
  310. {verifiers-0.1.15.dev165 → verifiers-0.1.15.dev166}/verifiers/v1/utils/judge_utils.py +0 -0
  311. {verifiers-0.1.15.dev165 → verifiers-0.1.15.dev166}/verifiers/v1/utils/lifecycle_utils.py +0 -0
  312. {verifiers-0.1.15.dev165 → verifiers-0.1.15.dev166}/verifiers/v1/utils/mcp_proxy_utils.py +0 -0
  313. {verifiers-0.1.15.dev165 → verifiers-0.1.15.dev166}/verifiers/v1/utils/mcp_utils.py +0 -0
  314. {verifiers-0.1.15.dev165 → verifiers-0.1.15.dev166}/verifiers/v1/utils/object_utils.py +0 -0
  315. {verifiers-0.1.15.dev165 → verifiers-0.1.15.dev166}/verifiers/v1/utils/prompt_utils.py +0 -0
  316. {verifiers-0.1.15.dev165 → verifiers-0.1.15.dev166}/verifiers/v1/utils/runtime_registry.py +0 -0
  317. {verifiers-0.1.15.dev165 → verifiers-0.1.15.dev166}/verifiers/v1/utils/sandbox_python_utils.py +0 -0
  318. {verifiers-0.1.15.dev165 → verifiers-0.1.15.dev166}/verifiers/v1/utils/scoring_utils.py +0 -0
  319. {verifiers-0.1.15.dev165 → verifiers-0.1.15.dev166}/verifiers/v1/utils/serialization_utils.py +0 -0
  320. {verifiers-0.1.15.dev165 → verifiers-0.1.15.dev166}/verifiers/v1/utils/task_freeze_utils.py +0 -0
  321. {verifiers-0.1.15.dev165 → verifiers-0.1.15.dev166}/verifiers/v1/utils/taskset_utils.py +0 -0
  322. {verifiers-0.1.15.dev165 → verifiers-0.1.15.dev166}/verifiers/v1/utils/tool_utils.py +0 -0
  323. {verifiers-0.1.15.dev165 → verifiers-0.1.15.dev166}/verifiers/v1/utils/trajectory_utils.py +0 -0
  324. {verifiers-0.1.15.dev165 → verifiers-0.1.15.dev166}/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.dev165
3
+ Version: 0.1.15.dev166
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
@@ -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
- error_info = rollout_outputs[0]["error"]
677
- assert "ToolError" == error_info["error"]
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
- error_info = rollout_outputs[0]["error"]
698
- assert "InfraError" == error_info["error"]
697
+ error_data = rollout_outputs[0]["error"]
698
+ assert "InfraError" == error_data["error"]
699
699
 
700
700
 
701
701
  class TestEmptyModelResponseErrors:
@@ -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": {"message": "boom"},
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
- state._set_error({"message": "boom"})
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"] == {"message": "boom"}
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": {"message": "handled"},
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"] == {"message": "handled"}
1661
+ assert isinstance(state["error"], vf.SandboxError)
1657
1662
 
1658
1663
 
1659
1664
  def test_program_channels_mcp_injects_proxy_into_sandbox_program() -> None:
@@ -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
- error_info = (
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 error_info:
745
- parts.append(f"error={error_info}")
744
+ if error_summary:
745
+ parts.append(f"error={error_summary}")
746
746
  self.logger.info(" | ".join(parts))
747
747
 
748
748
  @vf.cleanup
@@ -17,6 +17,8 @@ from typing import (
17
17
  cast,
18
18
  )
19
19
 
20
+ from anthropic import Anthropic, AsyncAnthropic
21
+ from openai import AsyncOpenAI, OpenAI
20
22
  from pydantic import (
21
23
  AliasChoices,
22
24
  BaseModel,
@@ -26,6 +28,8 @@ from pydantic import (
26
28
  field_validator,
27
29
  )
28
30
 
31
+ from verifiers.errors import Error
32
+
29
33
  if TYPE_CHECKING:
30
34
  from anthropic.types import RedactedThinkingBlock
31
35
  from anthropic.types import ThinkingBlock as AnthropicThinkingBlock
@@ -33,7 +37,6 @@ if TYPE_CHECKING:
33
37
  from renderers import RendererConfig
34
38
 
35
39
  from verifiers.clients import Client
36
- from verifiers.errors import Error
37
40
  else:
38
41
  RedactedThinkingBlock = Any
39
42
  AnthropicThinkingBlock = Any
@@ -72,6 +75,7 @@ EndpointApi = Literal[
72
75
  "openai_responses",
73
76
  "anthropic_messages",
74
77
  ]
78
+ EndpointClient: TypeAlias = AsyncOpenAI | OpenAI | AsyncAnthropic | Anthropic
75
79
  MessageType = Literal["chat", "completion"] # deprecated
76
80
 
77
81
 
@@ -388,8 +392,9 @@ class RolloutTiming(CustomBaseModel):
388
392
  )
389
393
 
390
394
 
391
- class ErrorInfo(TypedDict):
395
+ class ErrorData(TypedDict):
392
396
  error: str
397
+ message: str
393
398
  error_chain_repr: str
394
399
  error_chain_str: str
395
400
 
@@ -420,7 +425,7 @@ class RolloutOutput(dict):
420
425
  # Optional fields
421
426
  answer: str
422
427
  info: Info
423
- error: ErrorInfo | None
428
+ error: ErrorData | None
424
429
  stop_condition: str | None
425
430
  trajectory: list["TrajectoryStep"]
426
431
  tool_defs: list[Tool]
@@ -489,7 +494,7 @@ class State(dict):
489
494
  advantage: float | None
490
495
  metrics: dict[str, float] | None
491
496
  timing: RolloutTiming | None
492
- error: "Error | ErrorInfo | None"
497
+ error: Error | None
493
498
  usage: TokenUsage | None
494
499
  usage_tracker: object
495
500
  _vf_state_contract: Literal["legacy", "v1"]
@@ -589,7 +594,9 @@ class State(dict):
589
594
  def _set_completed(self, value: bool = True) -> None:
590
595
  self._set_internal("is_completed", value)
591
596
 
592
- def _set_error(self, value: Any) -> None:
597
+ def _set_error(self, value: Error | None) -> None:
598
+ if value is not None and not isinstance(value, Error):
599
+ raise TypeError("state.error must be a vf.Error or None.")
593
600
  self._set_internal("error", value)
594
601
 
595
602
  def _set_stop_condition(
@@ -656,7 +663,7 @@ class State(dict):
656
663
  api: EndpointApi | ClientType = "chat_completions",
657
664
  *,
658
665
  sync: bool = False,
659
- ) -> object:
666
+ ) -> EndpointClient:
660
667
  from verifiers.v1.utils.endpoint_utils import client_from_state
661
668
 
662
669
  return client_from_state(self, api, sync=sync)
@@ -848,9 +855,17 @@ class State(dict):
848
855
 
849
856
  def finalize(self) -> "State":
850
857
  self.strip_runtime_handles()
858
+ self.serialize_error()
851
859
  self.assert_serializable()
852
860
  return self
853
861
 
862
+ def serialize_error(self) -> None:
863
+ error = self.get("error")
864
+ if isinstance(error, Error):
865
+ from verifiers.utils.error_utils import error_data
866
+
867
+ self._set_internal("error", error_data(error))
868
+
854
869
  @classmethod
855
870
  def _legacy_for_task(cls, task: Mapping[str, Any]) -> "State":
856
871
  state = cls(
@@ -13,7 +13,7 @@ from pydantic import BaseModel
13
13
 
14
14
  import verifiers as vf
15
15
  from verifiers.utils.error_utils import ErrorChain
16
- from verifiers.utils.error_utils import error_info_to_exception
16
+ from verifiers.utils.error_utils import error_data_to_exception
17
17
  from verifiers.utils.logging_utils import print_time
18
18
 
19
19
  logger = logging.getLogger(__name__)
@@ -168,7 +168,7 @@ def maybe_retry(
168
168
  if err and any(isinstance(err, err_type) for err_type in error_types):
169
169
  raise err
170
170
  if isinstance(err, Mapping):
171
- retry_error = error_info_to_exception(err, error_types)
171
+ retry_error = error_data_to_exception(err, error_types)
172
172
  if retry_error is not None:
173
173
  raise retry_error
174
174
  elif isinstance(result, list):
@@ -177,7 +177,7 @@ def maybe_retry(
177
177
  if err and any(isinstance(err, err_type) for err_type in error_types):
178
178
  raise err
179
179
  if isinstance(err, Mapping):
180
- retry_error = error_info_to_exception(err, error_types)
180
+ retry_error = error_data_to_exception(err, error_types)
181
181
  if retry_error is not None:
182
182
  raise retry_error
183
183
 
@@ -4,7 +4,15 @@ import logging
4
4
  import sys
5
5
  from collections.abc import Mapping
6
6
  from types import ModuleType, UnionType
7
- from typing import Callable, Union, cast, get_args, get_origin, get_type_hints
7
+ from typing import (
8
+ Callable,
9
+ TypeAlias,
10
+ Union,
11
+ cast,
12
+ get_args,
13
+ get_origin,
14
+ get_type_hints,
15
+ )
8
16
 
9
17
  from pydantic import BaseModel
10
18
  from verifiers.envs.environment import Environment
@@ -12,8 +20,13 @@ from verifiers.utils.config_utils import MissingKeyError
12
20
  from verifiers.v1.env import Env, EnvConfig
13
21
  from verifiers.v1.harness import Harness, HarnessConfig
14
22
  from verifiers.v1.taskset import Taskset, TasksetConfig
23
+ from verifiers.v1.types import ConfigData, ConfigValue
15
24
  from verifiers.v1.utils.config_utils import coerce_config, explicit_config_data
16
25
 
26
+ EnvConfigLoadData: TypeAlias = dict[str, ConfigValue | BaseModel]
27
+ EnvConfigChildInput: TypeAlias = ConfigData | EnvConfigLoadData
28
+ EnvConfigInput: TypeAlias = EnvConfig | ConfigData
29
+
17
30
 
18
31
  def load_environment(env_id: str, **env_args) -> Environment:
19
32
  logger = logging.getLogger("verifiers.utils.env_utils")
@@ -127,7 +140,7 @@ def caller_module() -> ModuleType:
127
140
  def load_taskset(
128
141
  env_id: str | None = None,
129
142
  *,
130
- config: TasksetConfig | Mapping[str, object] | None = None,
143
+ config: TasksetConfig | ConfigData | None = None,
131
144
  ) -> Taskset:
132
145
  module = caller_module() if env_id is None else import_env_module(env_id)
133
146
  return load_taskset_from_module(module, config=config)
@@ -136,7 +149,7 @@ def load_taskset(
136
149
  def load_harness(
137
150
  env_id: str | None = None,
138
151
  *,
139
- config: HarnessConfig | Mapping[str, object] | None = None,
152
+ config: HarnessConfig | ConfigData | None = None,
140
153
  ) -> Harness:
141
154
  module = caller_module() if env_id is None else import_env_module(env_id)
142
155
  return load_harness_from_module(module, config=config)
@@ -145,7 +158,7 @@ def load_harness(
145
158
  def load_taskset_from_module(
146
159
  module: ModuleType,
147
160
  *,
148
- config: TasksetConfig | Mapping[str, object] | None = None,
161
+ config: TasksetConfig | ConfigData | None = None,
149
162
  ) -> Taskset:
150
163
  factory = getattr(module, "load_taskset", None)
151
164
  if factory is None:
@@ -170,7 +183,7 @@ def load_taskset_from_module(
170
183
  def load_harness_from_module(
171
184
  module: ModuleType,
172
185
  *,
173
- config: HarnessConfig | Mapping[str, object] | None = None,
186
+ config: HarnessConfig | ConfigData | None = None,
174
187
  ) -> Harness:
175
188
  factory = getattr(module, "load_harness", None)
176
189
  if factory is None:
@@ -260,11 +273,11 @@ def env_config_type(annotation: object) -> type[EnvConfig] | None:
260
273
  def load_env_config(
261
274
  module: ModuleType,
262
275
  config_type: type[EnvConfig],
263
- value: object,
276
+ value: EnvConfigInput,
264
277
  *,
265
278
  child_types: Mapping[str, type[BaseModel]] | None = None,
266
279
  ) -> EnvConfig:
267
- data: dict[str, object]
280
+ data: EnvConfigLoadData
268
281
  if isinstance(value, config_type):
269
282
  data = dict(explicit_config_data(value))
270
283
  elif isinstance(value, BaseModel):
@@ -275,7 +288,7 @@ def load_env_config(
275
288
  elif not isinstance(value, Mapping):
276
289
  raise TypeError("load_environment config must be a mapping or EnvConfig.")
277
290
  else:
278
- data = dict(explicit_config_data(value))
291
+ data = dict(value)
279
292
  resolved_child_types = (
280
293
  env_config_child_types(module, config_type, data)
281
294
  if child_types is None
@@ -293,6 +306,8 @@ def load_env_config(
293
306
  continue
294
307
  if child is None:
295
308
  raise TypeError(f"config.{field_name} cannot be None.")
309
+ if not isinstance(child, BaseModel | dict):
310
+ raise TypeError(f"config.{field_name} must be a mapping or config object.")
296
311
  data[field_name] = child_type.model_validate(explicit_config_data(child))
297
312
  config = config_type.model_validate(data)
298
313
  for field_name, child_type in resolved_child_types.items():
@@ -308,7 +323,7 @@ def load_env_config(
308
323
  def env_config_child_types(
309
324
  module: ModuleType,
310
325
  config_type: type[EnvConfig],
311
- value: Mapping[str, object] | None = None,
326
+ value: EnvConfigChildInput | None = None,
312
327
  ) -> dict[str, type[BaseModel]]:
313
328
  child_types: dict[str, type[BaseModel]] = {}
314
329
  for field_name, id_field, factory_name, base_type in (
@@ -1,8 +1,7 @@
1
- from collections.abc import Mapping
2
- from typing import Callable, cast
1
+ from typing import Callable, TypeGuard, cast
3
2
 
4
3
  import verifiers as vf
5
- from verifiers.types import ErrorInfo
4
+ from verifiers.types import ErrorData
6
5
 
7
6
 
8
7
  def get_error_chain(
@@ -56,22 +55,72 @@ class ErrorChain:
56
55
  return " -> ".join([repr(e) for e in self.chain])
57
56
 
58
57
 
59
- def error_info(error: BaseException) -> ErrorInfo:
58
+ def error_data(error: BaseException) -> ErrorData:
60
59
  error_chain = ErrorChain(error)
61
- return ErrorInfo(
60
+ return ErrorData(
62
61
  error=type(error).__name__,
62
+ message=str(error) or type(error).__name__,
63
63
  error_chain_repr=repr(error_chain),
64
64
  error_chain_str=str(error_chain),
65
65
  )
66
66
 
67
67
 
68
- def error_info_to_exception(
69
- error: Mapping[str, object],
68
+ def is_error_data(value: object) -> TypeGuard[ErrorData]:
69
+ expected = {"error", "message", "error_chain_repr", "error_chain_str"}
70
+ if not isinstance(value, dict):
71
+ return False
72
+ match value:
73
+ case {
74
+ "error": str(),
75
+ "message": str(),
76
+ "error_chain_repr": str(),
77
+ "error_chain_str": str(),
78
+ }:
79
+ return set(value) == expected
80
+ return False
81
+
82
+
83
+ def validate_error_data(value: object) -> ErrorData:
84
+ if not is_error_data(value):
85
+ raise TypeError(
86
+ "ErrorData must contain string error, message, error_chain_repr, "
87
+ "and error_chain_str fields."
88
+ )
89
+ return value
90
+
91
+
92
+ def error_data_to_exception(
93
+ error: ErrorData,
70
94
  error_types: tuple[type[Exception], ...],
71
95
  ) -> Exception | None:
72
- chain = str(error.get("error_chain_str") or error.get("error") or "")
73
- detail = str(error.get("error_chain_repr") or error.get("error") or "")
96
+ chain = error["error_chain_str"] or error["error"]
97
+ detail = error["error_chain_repr"] or error["error"]
74
98
  for error_type in error_types:
75
99
  if error_type.__name__ in chain:
76
100
  return error_type(detail)
77
101
  return None
102
+
103
+
104
+ def error_from_data(error: ErrorData) -> vf.Error:
105
+ exception = error_data_to_exception(error, vf_error_types())
106
+ if isinstance(exception, vf.Error):
107
+ return exception
108
+ detail = error["error_chain_repr"] or error["error"]
109
+ return vf.Error(detail)
110
+
111
+
112
+ def vf_error_types() -> tuple[type[vf.Error], ...]:
113
+ return (
114
+ vf.BrowserSandboxError,
115
+ vf.SandboxError,
116
+ vf.TunnelError,
117
+ vf.InfraError,
118
+ vf.EmptyModelResponseError,
119
+ vf.InvalidModelResponseError,
120
+ vf.ModelError,
121
+ vf.ToolParseError,
122
+ vf.ToolCallError,
123
+ vf.ToolError,
124
+ vf.OverlongPromptError,
125
+ vf.Error,
126
+ )
@@ -10,7 +10,7 @@ from rich.table import Table
10
10
  from rich.text import Text
11
11
 
12
12
  from verifiers.errors import Error
13
- from verifiers.types import ErrorInfo, Messages
13
+ from verifiers.types import ErrorData, Messages
14
14
  from verifiers.utils.error_utils import ErrorChain
15
15
 
16
16
  LOGGER_NAME = "verifiers"
@@ -156,7 +156,7 @@ def quiet_verifiers():
156
156
  def print_prompt_completions_sample(
157
157
  prompts: list[Messages],
158
158
  completions: list[Messages],
159
- errors: list[Error | ErrorInfo | None],
159
+ errors: list[Error | ErrorData | None],
160
160
  rewards: list[float],
161
161
  step: int,
162
162
  num_samples: int = 1,
@@ -13,7 +13,6 @@ from pydantic import BaseModel
13
13
 
14
14
  from verifiers.types import (
15
15
  ClientConfig,
16
- ErrorInfo,
17
16
  GenerateMetadata,
18
17
  GenerateOutputs,
19
18
  Response,
@@ -23,7 +22,7 @@ from verifiers.types import (
23
22
  TokenUsage,
24
23
  Tool,
25
24
  )
26
- from verifiers.utils.error_utils import ErrorChain
25
+ from verifiers.utils.error_utils import error_data, validate_error_data
27
26
  from verifiers.utils.message_utils import (
28
27
  sanitize_tool_calls,
29
28
  serialize_messages_for_output,
@@ -280,26 +279,12 @@ def state_to_output(
280
279
  serialize_messages_for_output(completion)
281
280
  )
282
281
  output["completion"] = output_completion
283
- # use repr for error
284
282
  error = state.get("error")
285
283
  if error is not None:
286
- if isinstance(error, Mapping) and {
287
- "error",
288
- "error_chain_repr",
289
- "error_chain_str",
290
- } <= set(error):
291
- output["error"] = ErrorInfo(
292
- error=str(error["error"]),
293
- error_chain_repr=str(error["error_chain_repr"]),
294
- error_chain_str=str(error["error_chain_str"]),
295
- )
284
+ if isinstance(error, BaseException):
285
+ output["error"] = error_data(error)
296
286
  else:
297
- error_chain = ErrorChain(cast(BaseException, error))
298
- output["error"] = ErrorInfo(
299
- error=type(error).__name__,
300
- error_chain_repr=repr(error_chain),
301
- error_chain_str=str(error_chain),
302
- )
287
+ output["error"] = validate_error_data(error)
303
288
  output["error_chain"] = output["error"]["error_chain_repr"]
304
289
  output["long_error_chain"] = output["error"]["error_chain_str"]
305
290
  # only include optional fields if non-empty
@@ -15,7 +15,6 @@ from verifiers.types import (
15
15
  ToolMessage,
16
16
  )
17
17
  from verifiers.utils.async_utils import maybe_call_with_named_args
18
- from verifiers.utils.error_utils import error_info
19
18
  from verifiers.utils.message_utils import normalize_messages
20
19
  from verifiers.utils.response_utils import parse_response_message
21
20
  from verifiers.utils.tool_utils import is_valid_tool_content_parts
@@ -277,6 +276,7 @@ class Harness(RuntimeOwnerMixin[ConfigT], Generic[ConfigT]):
277
276
  else:
278
277
  state.strip_runtime_handles()
279
278
  elif completed:
279
+ state.serialize_error()
280
280
  state.assert_serializable()
281
281
  log_rollout_finish(state)
282
282
  return state
@@ -287,7 +287,7 @@ class Harness(RuntimeOwnerMixin[ConfigT], Generic[ConfigT]):
287
287
  state._set_truncated(True)
288
288
  state._set_stop_condition("prompt_too_long", overwrite=True)
289
289
  return
290
- state._set_error(error_info(error))
290
+ state._set_error(error)
291
291
  state._set_stop_condition("has_error", overwrite=True)
292
292
 
293
293
  async def score_group(self, tasks: list[Task], states: list[State]) -> list[State]:
@@ -1,4 +1,4 @@
1
- from typing import TYPE_CHECKING, cast
1
+ from typing import TYPE_CHECKING, TypeAlias, cast
2
2
 
3
3
  from verifiers.types import ClientConfig, SamplingArgs
4
4
 
@@ -28,7 +28,10 @@ class ModelConfig(Config):
28
28
  raise TypeError("model.client must resolve to a Client or ClientConfig.")
29
29
 
30
30
 
31
- def model_config_from_value(value: object = None) -> ModelConfig:
31
+ ModelConfigSource: TypeAlias = ModelConfig | str | ConfigData | None
32
+
33
+
34
+ def model_config_from_value(value: ModelConfigSource = None) -> ModelConfig:
32
35
  if isinstance(value, ModelConfig):
33
36
  return value
34
37
  if isinstance(value, str):
@@ -40,7 +43,7 @@ def model_config_from_value(value: object = None) -> ModelConfig:
40
43
  raise TypeError("model must be a string or mapping.")
41
44
 
42
45
 
43
- def model_config_data(value: object = None) -> ConfigData:
46
+ def model_config_data(value: ModelConfigSource = None) -> ConfigData:
44
47
  return cast(
45
48
  ConfigData, model_config_from_value(value).model_dump(exclude_none=True)
46
49
  )
@@ -277,8 +277,6 @@ def program_list_items(
277
277
  return []
278
278
  if isinstance(value, list):
279
279
  return cast(list[ProgramValue], list(value))
280
- if isinstance(value, tuple):
281
- return cast(list[ProgramValue], list(value))
282
280
  if isinstance(value, str) or isinstance(value, dict):
283
281
  return [cast(ProgramValue, value)]
284
282
  raise TypeError(f"{field_name} must be a string, mapping, or list.")
@@ -1730,7 +1730,7 @@ class Runtime:
1730
1730
  source_root = binding_source_root(source)
1731
1731
  validate_binding_source(source, f"User binding {name!r}")
1732
1732
  if source_root == "objects":
1733
- object_name = binding_object_name(source)
1733
+ object_name = binding_object_name(cast(str, source))
1734
1734
  if object_name not in user.objects:
1735
1735
  raise KeyError(
1736
1736
  f"User binding {name!r} references unknown User object "
@@ -1778,7 +1778,7 @@ class Runtime:
1778
1778
  )
1779
1779
  source_root = binding_source_root(source)
1780
1780
  if source_root == "objects":
1781
- object_name = binding_object_name(source)
1781
+ object_name = binding_object_name(cast(str, source))
1782
1782
  if object_name not in owner.objects:
1783
1783
  raise KeyError(
1784
1784
  f"Binding {binding_key!r} references unknown object "
@@ -1818,7 +1818,7 @@ class Runtime:
1818
1818
  "for callable tools owned by the same Toolset."
1819
1819
  )
1820
1820
  if source_root == "objects":
1821
- object_name = binding_object_name(source)
1821
+ object_name = binding_object_name(cast(str, source))
1822
1822
  if object_name not in toolset.objects:
1823
1823
  raise KeyError(
1824
1824
  f"Binding {binding_key!r} references unknown Toolset object "
@@ -190,8 +190,12 @@ def validate_binding_source(
190
190
  root = binding_source_root(source)
191
191
  validate_binding_source_root(root, context, allow_objects=allow_objects)
192
192
  if root == "objects":
193
+ if not isinstance(source, str):
194
+ raise TypeError(f"{context} must be a string source.")
193
195
  binding_object_name(source)
194
196
  if root in {"taskset", "harness"}:
197
+ if not isinstance(source, str):
198
+ raise TypeError(f"{context} must be a string source.")
195
199
  owner_object_name(source)
196
200
  if isinstance(source, dict):
197
201
  validate_callable_source(cast(ConfigData, source), context)
@@ -212,7 +216,7 @@ def function_name(fn: Handler) -> str:
212
216
  return name
213
217
 
214
218
 
215
- def binding_key_parts(key: object) -> tuple[str, str]:
219
+ def binding_key_parts(key: str) -> tuple[str, str]:
216
220
  if not isinstance(key, str):
217
221
  raise TypeError("Binding keys must be strings.")
218
222
  target, separator, arg_name = key.partition(".")
@@ -242,7 +246,7 @@ def validate_binding_source_root(
242
246
  raise ValueError(f"{context} cannot use objects.* sources.")
243
247
 
244
248
 
245
- def binding_object_name(source: object) -> str:
249
+ def binding_object_name(source: str) -> str:
246
250
  if not isinstance(source, str):
247
251
  raise TypeError("Object binding source must be a string.")
248
252
  root, separator, tail = source.partition(".")
@@ -254,7 +258,7 @@ def binding_object_name(source: object) -> str:
254
258
  return name
255
259
 
256
260
 
257
- def owner_object_name(source: object) -> str:
261
+ def owner_object_name(source: str) -> str:
258
262
  if not isinstance(source, str):
259
263
  raise TypeError("Owner object binding source must be a string.")
260
264
  root, separator, tail = source.partition(".")
@@ -31,7 +31,7 @@ _CONFIG_REF_MODULE: ContextVar[str | None] = ContextVar(
31
31
 
32
32
 
33
33
  def explicit_config_data(
34
- value: object, target: type[BaseModel] | None = None
34
+ value: BaseModel | ConfigData | None, target: type[BaseModel] | None = None
35
35
  ) -> ConfigData:
36
36
  if value is None:
37
37
  data: ConfigData = {}
@@ -48,7 +48,9 @@ def explicit_config_data(
48
48
  return data
49
49
 
50
50
 
51
- def coerce_config(config_cls: type[ConfigT], value: object = None) -> ConfigT:
51
+ def coerce_config(
52
+ config_cls: type[ConfigT], value: BaseModel | ConfigData | None = None
53
+ ) -> ConfigT:
52
54
  if value is None:
53
55
  return config_cls()
54
56
  if isinstance(value, config_cls):
@@ -168,7 +170,7 @@ def resolve_config_annotation(owner_type: ConfigOwner, annotation: object) -> ob
168
170
 
169
171
 
170
172
  def resolved_config_data(
171
- value: object, target: type[BaseModel] | None = None
173
+ value: BaseModel | ConfigData | None, target: type[BaseModel] | None = None
172
174
  ) -> ConfigData:
173
175
  if value is None:
174
176
  data: ConfigData = {}
@@ -248,7 +250,7 @@ def config_ref_parts(ref: str) -> tuple[str, str]:
248
250
 
249
251
 
250
252
  @contextmanager
251
- def config_ref_context(config: object) -> Iterator[None]:
253
+ def config_ref_context(config: BaseModel | ConfigData | None) -> Iterator[None]:
252
254
  module_name = config_ref_module(config)
253
255
  if module_name is None:
254
256
  yield
@@ -260,7 +262,7 @@ def config_ref_context(config: object) -> Iterator[None]:
260
262
  _CONFIG_REF_MODULE.reset(token)
261
263
 
262
264
 
263
- def config_ref_module(config: object) -> str | None:
265
+ def config_ref_module(config: BaseModel | ConfigData | None) -> str | None:
264
266
  if isinstance(config, BaseModel):
265
267
  module_name = type(config).__module__
266
268
  if module_name not in FRAMEWORK_CONFIG_MODULES: