verifiers 0.4.1.dev37__tar.gz → 0.4.1.dev38__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 (271) hide show
  1. {verifiers-0.4.1.dev37 → verifiers-0.4.1.dev38}/PKG-INFO +1 -1
  2. {verifiers-0.4.1.dev37 → verifiers-0.4.1.dev38}/verifiers/v1/dialects/anthropic.py +10 -6
  3. {verifiers-0.4.1.dev37 → verifiers-0.4.1.dev38}/verifiers/v1/dialects/base.py +1 -1
  4. {verifiers-0.4.1.dev37 → verifiers-0.4.1.dev38}/verifiers/v1/interception/server.py +37 -45
  5. {verifiers-0.4.1.dev37 → verifiers-0.4.1.dev38}/.gitignore +0 -0
  6. {verifiers-0.4.1.dev37 → verifiers-0.4.1.dev38}/LICENSE +0 -0
  7. {verifiers-0.4.1.dev37 → verifiers-0.4.1.dev38}/README.md +0 -0
  8. {verifiers-0.4.1.dev37 → verifiers-0.4.1.dev38}/pyproject.toml +0 -0
  9. {verifiers-0.4.1.dev37 → verifiers-0.4.1.dev38}/tests/integration/conftest.py +0 -0
  10. {verifiers-0.4.1.dev37 → verifiers-0.4.1.dev38}/tests/integration/fixtures/agent_user_harness_v1.py +0 -0
  11. {verifiers-0.4.1.dev37 → verifiers-0.4.1.dev38}/tests/integration/fixtures/agent_user_v1.py +0 -0
  12. {verifiers-0.4.1.dev37 → verifiers-0.4.1.dev38}/tests/integration/fixtures/counter_tool_v1.py +0 -0
  13. {verifiers-0.4.1.dev37 → verifiers-0.4.1.dev38}/tests/integration/fixtures/duet_v1.py +0 -0
  14. {verifiers-0.4.1.dev37 → verifiers-0.4.1.dev38}/tests/integration/fixtures/echo_acp_resume_v1.py +0 -0
  15. {verifiers-0.4.1.dev37 → verifiers-0.4.1.dev38}/tests/integration/fixtures/echo_agentic_v1.py +0 -0
  16. {verifiers-0.4.1.dev37 → verifiers-0.4.1.dev38}/tests/integration/fixtures/echo_tool_compose/docker-compose.yaml +0 -0
  17. {verifiers-0.4.1.dev37 → verifiers-0.4.1.dev38}/tests/integration/fixtures/echo_tool_v1.py +0 -0
  18. {verifiers-0.4.1.dev37 → verifiers-0.4.1.dev38}/tests/integration/fixtures/echo_user_sim_v1.py +0 -0
  19. {verifiers-0.4.1.dev37 → verifiers-0.4.1.dev38}/tests/integration/fixtures/echo_v1.py +0 -0
  20. {verifiers-0.4.1.dev37 → verifiers-0.4.1.dev38}/tests/integration/fixtures/network_policy_v1.py +0 -0
  21. {verifiers-0.4.1.dev37 → verifiers-0.4.1.dev38}/tests/integration/fixtures/pyproject.toml +0 -0
  22. {verifiers-0.4.1.dev37 → verifiers-0.4.1.dev38}/tests/integration/fixtures/skill_codeword_v1.py +0 -0
  23. {verifiers-0.4.1.dev37 → verifiers-0.4.1.dev38}/tests/integration/fixtures/skills/project-codeword/SKILL.md +0 -0
  24. {verifiers-0.4.1.dev37 → verifiers-0.4.1.dev38}/tests/integration/fixtures/tool_response_image_v1.py +0 -0
  25. {verifiers-0.4.1.dev37 → verifiers-0.4.1.dev38}/tests/integration/grid.py +0 -0
  26. {verifiers-0.4.1.dev37 → verifiers-0.4.1.dev38}/tests/integration/test_agent_user.py +0 -0
  27. {verifiers-0.4.1.dev37 → verifiers-0.4.1.dev38}/tests/integration/test_agentic_judge.py +0 -0
  28. {verifiers-0.4.1.dev37 → verifiers-0.4.1.dev38}/tests/integration/test_compose_scoring.py +0 -0
  29. {verifiers-0.4.1.dev37 → verifiers-0.4.1.dev38}/tests/integration/test_examples.py +0 -0
  30. {verifiers-0.4.1.dev37 → verifiers-0.4.1.dev38}/tests/integration/test_limits.py +0 -0
  31. {verifiers-0.4.1.dev37 → verifiers-0.4.1.dev38}/tests/integration/test_multi_agent.py +0 -0
  32. {verifiers-0.4.1.dev37 → verifiers-0.4.1.dev38}/tests/integration/test_multi_turn.py +0 -0
  33. {verifiers-0.4.1.dev37 → verifiers-0.4.1.dev38}/tests/integration/test_multi_turn_tool.py +0 -0
  34. {verifiers-0.4.1.dev37 → verifiers-0.4.1.dev38}/tests/integration/test_multimodal_tool.py +0 -0
  35. {verifiers-0.4.1.dev37 → verifiers-0.4.1.dev38}/tests/integration/test_network_policy.py +0 -0
  36. {verifiers-0.4.1.dev37 → verifiers-0.4.1.dev38}/tests/integration/test_resume_tool.py +0 -0
  37. {verifiers-0.4.1.dev37 → verifiers-0.4.1.dev38}/tests/integration/test_rubric_judge.py +0 -0
  38. {verifiers-0.4.1.dev37 → verifiers-0.4.1.dev38}/tests/integration/test_sampling.py +0 -0
  39. {verifiers-0.4.1.dev37 → verifiers-0.4.1.dev38}/tests/integration/test_shared_tool.py +0 -0
  40. {verifiers-0.4.1.dev37 → verifiers-0.4.1.dev38}/tests/integration/test_single_turn.py +0 -0
  41. {verifiers-0.4.1.dev37 → verifiers-0.4.1.dev38}/tests/integration/test_skills.py +0 -0
  42. {verifiers-0.4.1.dev37 → verifiers-0.4.1.dev38}/tests/integration/test_stateful_tool.py +0 -0
  43. {verifiers-0.4.1.dev37 → verifiers-0.4.1.dev38}/tests/integration/test_user_echo.py +0 -0
  44. {verifiers-0.4.1.dev37 → verifiers-0.4.1.dev38}/tests/integration/test_user_sim.py +0 -0
  45. {verifiers-0.4.1.dev37 → verifiers-0.4.1.dev38}/tests/unit/cli/test_replay.py +0 -0
  46. {verifiers-0.4.1.dev37 → verifiers-0.4.1.dev38}/tests/unit/conftest.py +0 -0
  47. {verifiers-0.4.1.dev37 → verifiers-0.4.1.dev38}/tests/unit/harnesses/test_core.py +0 -0
  48. {verifiers-0.4.1.dev37 → verifiers-0.4.1.dev38}/tests/unit/harnesses/test_rlm.py +0 -0
  49. {verifiers-0.4.1.dev37 → verifiers-0.4.1.dev38}/tests/unit/interception/test_tunnel.py +0 -0
  50. {verifiers-0.4.1.dev37 → verifiers-0.4.1.dev38}/tests/unit/judges/conftest.py +0 -0
  51. {verifiers-0.4.1.dev37 → verifiers-0.4.1.dev38}/tests/unit/judges/test_judge.py +0 -0
  52. {verifiers-0.4.1.dev37 → verifiers-0.4.1.dev38}/tests/unit/judges/test_reference.py +0 -0
  53. {verifiers-0.4.1.dev37 → verifiers-0.4.1.dev38}/tests/unit/judges/test_rubric.py +0 -0
  54. {verifiers-0.4.1.dev37 → verifiers-0.4.1.dev38}/tests/unit/runtimes/test_e2b.py +0 -0
  55. {verifiers-0.4.1.dev37 → verifiers-0.4.1.dev38}/tests/unit/serve/test_client.py +0 -0
  56. {verifiers-0.4.1.dev37 → verifiers-0.4.1.dev38}/tests/unit/serve/test_delta.py +0 -0
  57. {verifiers-0.4.1.dev37 → verifiers-0.4.1.dev38}/tests/unit/serve/test_pool.py +0 -0
  58. {verifiers-0.4.1.dev37 → verifiers-0.4.1.dev38}/tests/unit/test_agent.py +0 -0
  59. {verifiers-0.4.1.dev37 → verifiers-0.4.1.dev38}/tests/unit/test_dialects.py +0 -0
  60. {verifiers-0.4.1.dev37 → verifiers-0.4.1.dev38}/tests/unit/test_graph.py +0 -0
  61. {verifiers-0.4.1.dev37 → verifiers-0.4.1.dev38}/tests/unit/test_semantic.py +0 -0
  62. {verifiers-0.4.1.dev37 → verifiers-0.4.1.dev38}/tests/unit/test_task.py +0 -0
  63. {verifiers-0.4.1.dev37 → verifiers-0.4.1.dev38}/tests/unit/test_taskset.py +0 -0
  64. {verifiers-0.4.1.dev37 → verifiers-0.4.1.dev38}/tests/unit/test_trace.py +0 -0
  65. {verifiers-0.4.1.dev37 → verifiers-0.4.1.dev38}/tests/unit/utils/test_compile.py +0 -0
  66. {verifiers-0.4.1.dev37 → verifiers-0.4.1.dev38}/tests/unit/utils/test_loaders.py +0 -0
  67. {verifiers-0.4.1.dev37 → verifiers-0.4.1.dev38}/tests/unit/utils/test_platform.py +0 -0
  68. {verifiers-0.4.1.dev37 → verifiers-0.4.1.dev38}/tests/unit/utils/test_score.py +0 -0
  69. {verifiers-0.4.1.dev37 → verifiers-0.4.1.dev38}/verifiers/__init__.py +0 -0
  70. {verifiers-0.4.1.dev37 → verifiers-0.4.1.dev38}/verifiers/v1/__init__.py +0 -0
  71. {verifiers-0.4.1.dev37 → verifiers-0.4.1.dev38}/verifiers/v1/acp/__init__.py +0 -0
  72. {verifiers-0.4.1.dev37 → verifiers-0.4.1.dev38}/verifiers/v1/acp/runner.py +0 -0
  73. {verifiers-0.4.1.dev37 → verifiers-0.4.1.dev38}/verifiers/v1/agent.py +0 -0
  74. {verifiers-0.4.1.dev37 → verifiers-0.4.1.dev38}/verifiers/v1/cli/__init__.py +0 -0
  75. {verifiers-0.4.1.dev37 → verifiers-0.4.1.dev38}/verifiers/v1/cli/dashboard/__init__.py +0 -0
  76. {verifiers-0.4.1.dev37 → verifiers-0.4.1.dev38}/verifiers/v1/cli/dashboard/base.py +0 -0
  77. {verifiers-0.4.1.dev37 → verifiers-0.4.1.dev38}/verifiers/v1/cli/dashboard/eval.py +0 -0
  78. {verifiers-0.4.1.dev37 → verifiers-0.4.1.dev38}/verifiers/v1/cli/dashboard/replay.py +0 -0
  79. {verifiers-0.4.1.dev37 → verifiers-0.4.1.dev38}/verifiers/v1/cli/dashboard/validate.py +0 -0
  80. {verifiers-0.4.1.dev37 → verifiers-0.4.1.dev38}/verifiers/v1/cli/debug.py +0 -0
  81. {verifiers-0.4.1.dev37 → verifiers-0.4.1.dev38}/verifiers/v1/cli/eval/__init__.py +0 -0
  82. {verifiers-0.4.1.dev37 → verifiers-0.4.1.dev38}/verifiers/v1/cli/eval/hint.py +0 -0
  83. {verifiers-0.4.1.dev37 → verifiers-0.4.1.dev38}/verifiers/v1/cli/eval/main.py +0 -0
  84. {verifiers-0.4.1.dev37 → verifiers-0.4.1.dev38}/verifiers/v1/cli/eval/resume.py +0 -0
  85. {verifiers-0.4.1.dev37 → verifiers-0.4.1.dev38}/verifiers/v1/cli/eval/runner.py +0 -0
  86. {verifiers-0.4.1.dev37 → verifiers-0.4.1.dev38}/verifiers/v1/cli/gepa.py +0 -0
  87. {verifiers-0.4.1.dev37 → verifiers-0.4.1.dev38}/verifiers/v1/cli/output.py +0 -0
  88. {verifiers-0.4.1.dev37 → verifiers-0.4.1.dev38}/verifiers/v1/cli/replay.py +0 -0
  89. {verifiers-0.4.1.dev37 → verifiers-0.4.1.dev38}/verifiers/v1/cli/resolve.py +0 -0
  90. {verifiers-0.4.1.dev37 → verifiers-0.4.1.dev38}/verifiers/v1/cli/resume.py +0 -0
  91. {verifiers-0.4.1.dev37 → verifiers-0.4.1.dev38}/verifiers/v1/cli/validate.py +0 -0
  92. {verifiers-0.4.1.dev37 → verifiers-0.4.1.dev38}/verifiers/v1/clients/__init__.py +0 -0
  93. {verifiers-0.4.1.dev37 → verifiers-0.4.1.dev38}/verifiers/v1/clients/base.py +0 -0
  94. {verifiers-0.4.1.dev37 → verifiers-0.4.1.dev38}/verifiers/v1/clients/client.py +0 -0
  95. {verifiers-0.4.1.dev37 → verifiers-0.4.1.dev38}/verifiers/v1/clients/eval.py +0 -0
  96. {verifiers-0.4.1.dev37 → verifiers-0.4.1.dev38}/verifiers/v1/clients/train.py +0 -0
  97. {verifiers-0.4.1.dev37 → verifiers-0.4.1.dev38}/verifiers/v1/configs/__init__.py +0 -0
  98. {verifiers-0.4.1.dev37 → verifiers-0.4.1.dev38}/verifiers/v1/configs/agent.py +0 -0
  99. {verifiers-0.4.1.dev37 → verifiers-0.4.1.dev38}/verifiers/v1/configs/cli/__init__.py +0 -0
  100. {verifiers-0.4.1.dev37 → verifiers-0.4.1.dev38}/verifiers/v1/configs/cli/debug.py +0 -0
  101. {verifiers-0.4.1.dev37 → verifiers-0.4.1.dev38}/verifiers/v1/configs/cli/env.py +0 -0
  102. {verifiers-0.4.1.dev37 → verifiers-0.4.1.dev38}/verifiers/v1/configs/cli/eval.py +0 -0
  103. {verifiers-0.4.1.dev37 → verifiers-0.4.1.dev38}/verifiers/v1/configs/cli/replay.py +0 -0
  104. {verifiers-0.4.1.dev37 → verifiers-0.4.1.dev38}/verifiers/v1/configs/cli/validate.py +0 -0
  105. {verifiers-0.4.1.dev37 → verifiers-0.4.1.dev38}/verifiers/v1/configs/client.py +0 -0
  106. {verifiers-0.4.1.dev37 → verifiers-0.4.1.dev38}/verifiers/v1/configs/env.py +0 -0
  107. {verifiers-0.4.1.dev37 → verifiers-0.4.1.dev38}/verifiers/v1/configs/harness.py +0 -0
  108. {verifiers-0.4.1.dev37 → verifiers-0.4.1.dev38}/verifiers/v1/configs/judge.py +0 -0
  109. {verifiers-0.4.1.dev37 → verifiers-0.4.1.dev38}/verifiers/v1/configs/retries.py +0 -0
  110. {verifiers-0.4.1.dev37 → verifiers-0.4.1.dev38}/verifiers/v1/configs/runtime.py +0 -0
  111. {verifiers-0.4.1.dev37 → verifiers-0.4.1.dev38}/verifiers/v1/configs/scoring.py +0 -0
  112. {verifiers-0.4.1.dev37 → verifiers-0.4.1.dev38}/verifiers/v1/configs/select.py +0 -0
  113. {verifiers-0.4.1.dev37 → verifiers-0.4.1.dev38}/verifiers/v1/configs/serve.py +0 -0
  114. {verifiers-0.4.1.dev37 → verifiers-0.4.1.dev38}/verifiers/v1/configs/task.py +0 -0
  115. {verifiers-0.4.1.dev37 → verifiers-0.4.1.dev38}/verifiers/v1/configs/taskset.py +0 -0
  116. {verifiers-0.4.1.dev37 → verifiers-0.4.1.dev38}/verifiers/v1/dialects/__init__.py +0 -0
  117. {verifiers-0.4.1.dev37 → verifiers-0.4.1.dev38}/verifiers/v1/dialects/chat.py +0 -0
  118. {verifiers-0.4.1.dev37 → verifiers-0.4.1.dev38}/verifiers/v1/dialects/responses.py +0 -0
  119. {verifiers-0.4.1.dev37 → verifiers-0.4.1.dev38}/verifiers/v1/env.py +0 -0
  120. {verifiers-0.4.1.dev37 → verifiers-0.4.1.dev38}/verifiers/v1/envs/__init__.py +0 -0
  121. {verifiers-0.4.1.dev37 → verifiers-0.4.1.dev38}/verifiers/v1/envs/agentic_judge/__init__.py +0 -0
  122. {verifiers-0.4.1.dev37 → verifiers-0.4.1.dev38}/verifiers/v1/envs/agentic_judge/env.py +0 -0
  123. {verifiers-0.4.1.dev37 → verifiers-0.4.1.dev38}/verifiers/v1/envs/best_of_n/__init__.py +0 -0
  124. {verifiers-0.4.1.dev37 → verifiers-0.4.1.dev38}/verifiers/v1/envs/best_of_n/env.py +0 -0
  125. {verifiers-0.4.1.dev37 → verifiers-0.4.1.dev38}/verifiers/v1/envs/single_agent/__init__.py +0 -0
  126. {verifiers-0.4.1.dev37 → verifiers-0.4.1.dev38}/verifiers/v1/envs/single_agent/env.py +0 -0
  127. {verifiers-0.4.1.dev37 → verifiers-0.4.1.dev38}/verifiers/v1/envs/user_sim/__init__.py +0 -0
  128. {verifiers-0.4.1.dev37 → verifiers-0.4.1.dev38}/verifiers/v1/envs/user_sim/env.py +0 -0
  129. {verifiers-0.4.1.dev37 → verifiers-0.4.1.dev38}/verifiers/v1/episode.py +0 -0
  130. {verifiers-0.4.1.dev37 → verifiers-0.4.1.dev38}/verifiers/v1/errors.py +0 -0
  131. {verifiers-0.4.1.dev37 → verifiers-0.4.1.dev38}/verifiers/v1/gepa/__init__.py +0 -0
  132. {verifiers-0.4.1.dev37 → verifiers-0.4.1.dev38}/verifiers/v1/gepa/adapter.py +0 -0
  133. {verifiers-0.4.1.dev37 → verifiers-0.4.1.dev38}/verifiers/v1/gepa/config.py +0 -0
  134. {verifiers-0.4.1.dev37 → verifiers-0.4.1.dev38}/verifiers/v1/gepa/dataset.py +0 -0
  135. {verifiers-0.4.1.dev37 → verifiers-0.4.1.dev38}/verifiers/v1/gepa/reflection.py +0 -0
  136. {verifiers-0.4.1.dev37 → verifiers-0.4.1.dev38}/verifiers/v1/gepa/runner.py +0 -0
  137. {verifiers-0.4.1.dev37 → verifiers-0.4.1.dev38}/verifiers/v1/grading.py +0 -0
  138. {verifiers-0.4.1.dev37 → verifiers-0.4.1.dev38}/verifiers/v1/graph.py +0 -0
  139. {verifiers-0.4.1.dev37 → verifiers-0.4.1.dev38}/verifiers/v1/harness.py +0 -0
  140. {verifiers-0.4.1.dev37 → verifiers-0.4.1.dev38}/verifiers/v1/harnesses/__init__.py +0 -0
  141. {verifiers-0.4.1.dev37 → verifiers-0.4.1.dev38}/verifiers/v1/harnesses/bash/__init__.py +0 -0
  142. {verifiers-0.4.1.dev37 → verifiers-0.4.1.dev38}/verifiers/v1/harnesses/bash/harness.py +0 -0
  143. {verifiers-0.4.1.dev37 → verifiers-0.4.1.dev38}/verifiers/v1/harnesses/browser_use/__init__.py +0 -0
  144. {verifiers-0.4.1.dev37 → verifiers-0.4.1.dev38}/verifiers/v1/harnesses/browser_use/harness.py +0 -0
  145. {verifiers-0.4.1.dev37 → verifiers-0.4.1.dev38}/verifiers/v1/harnesses/browser_use/program.py +0 -0
  146. {verifiers-0.4.1.dev37 → verifiers-0.4.1.dev38}/verifiers/v1/harnesses/claude_code/__init__.py +0 -0
  147. {verifiers-0.4.1.dev37 → verifiers-0.4.1.dev38}/verifiers/v1/harnesses/claude_code/harness.py +0 -0
  148. {verifiers-0.4.1.dev37 → verifiers-0.4.1.dev38}/verifiers/v1/harnesses/codex/__init__.py +0 -0
  149. {verifiers-0.4.1.dev37 → verifiers-0.4.1.dev38}/verifiers/v1/harnesses/codex/gate.mjs +0 -0
  150. {verifiers-0.4.1.dev37 → verifiers-0.4.1.dev38}/verifiers/v1/harnesses/codex/harness.py +0 -0
  151. {verifiers-0.4.1.dev37 → verifiers-0.4.1.dev38}/verifiers/v1/harnesses/deepseek/__init__.py +0 -0
  152. {verifiers-0.4.1.dev37 → verifiers-0.4.1.dev38}/verifiers/v1/harnesses/deepseek/gate.mjs +0 -0
  153. {verifiers-0.4.1.dev37 → verifiers-0.4.1.dev38}/verifiers/v1/harnesses/deepseek/harness.py +0 -0
  154. {verifiers-0.4.1.dev37 → verifiers-0.4.1.dev38}/verifiers/v1/harnesses/deepseek/usage.mjs +0 -0
  155. {verifiers-0.4.1.dev37 → verifiers-0.4.1.dev38}/verifiers/v1/harnesses/hermes_agent/__init__.py +0 -0
  156. {verifiers-0.4.1.dev37 → verifiers-0.4.1.dev38}/verifiers/v1/harnesses/hermes_agent/harness.py +0 -0
  157. {verifiers-0.4.1.dev37 → verifiers-0.4.1.dev38}/verifiers/v1/harnesses/hermes_agent/program.py +0 -0
  158. {verifiers-0.4.1.dev37 → verifiers-0.4.1.dev38}/verifiers/v1/harnesses/kimi_code/__init__.py +0 -0
  159. {verifiers-0.4.1.dev37 → verifiers-0.4.1.dev38}/verifiers/v1/harnesses/kimi_code/harness.py +0 -0
  160. {verifiers-0.4.1.dev37 → verifiers-0.4.1.dev38}/verifiers/v1/harnesses/mini_swe_agent/__init__.py +0 -0
  161. {verifiers-0.4.1.dev37 → verifiers-0.4.1.dev38}/verifiers/v1/harnesses/mini_swe_agent/harness.py +0 -0
  162. {verifiers-0.4.1.dev37 → verifiers-0.4.1.dev38}/verifiers/v1/harnesses/mini_swe_agent/program.py +0 -0
  163. {verifiers-0.4.1.dev37 → verifiers-0.4.1.dev38}/verifiers/v1/harnesses/node.py +0 -0
  164. {verifiers-0.4.1.dev37 → verifiers-0.4.1.dev38}/verifiers/v1/harnesses/null/__init__.py +0 -0
  165. {verifiers-0.4.1.dev37 → verifiers-0.4.1.dev38}/verifiers/v1/harnesses/null/harness.py +0 -0
  166. {verifiers-0.4.1.dev37 → verifiers-0.4.1.dev38}/verifiers/v1/harnesses/openclaw/__init__.py +0 -0
  167. {verifiers-0.4.1.dev37 → verifiers-0.4.1.dev38}/verifiers/v1/harnesses/openclaw/harness.py +0 -0
  168. {verifiers-0.4.1.dev37 → verifiers-0.4.1.dev38}/verifiers/v1/harnesses/opencode/__init__.py +0 -0
  169. {verifiers-0.4.1.dev37 → verifiers-0.4.1.dev38}/verifiers/v1/harnesses/opencode/harness.py +0 -0
  170. {verifiers-0.4.1.dev37 → verifiers-0.4.1.dev38}/verifiers/v1/harnesses/opencode/mcp-ready.js +0 -0
  171. {verifiers-0.4.1.dev37 → verifiers-0.4.1.dev38}/verifiers/v1/harnesses/pi/__init__.py +0 -0
  172. {verifiers-0.4.1.dev37 → verifiers-0.4.1.dev38}/verifiers/v1/harnesses/pi/gate.mjs +0 -0
  173. {verifiers-0.4.1.dev37 → verifiers-0.4.1.dev38}/verifiers/v1/harnesses/pi/harness.py +0 -0
  174. {verifiers-0.4.1.dev37 → verifiers-0.4.1.dev38}/verifiers/v1/harnesses/prime_agent/__init__.py +0 -0
  175. {verifiers-0.4.1.dev37 → verifiers-0.4.1.dev38}/verifiers/v1/harnesses/prime_agent/harness.py +0 -0
  176. {verifiers-0.4.1.dev37 → verifiers-0.4.1.dev38}/verifiers/v1/harnesses/rlm/__init__.py +0 -0
  177. {verifiers-0.4.1.dev37 → verifiers-0.4.1.dev38}/verifiers/v1/harnesses/rlm/harness.py +0 -0
  178. {verifiers-0.4.1.dev37 → verifiers-0.4.1.dev38}/verifiers/v1/harnesses/terminus_2/__init__.py +0 -0
  179. {verifiers-0.4.1.dev37 → verifiers-0.4.1.dev38}/verifiers/v1/harnesses/terminus_2/harness.py +0 -0
  180. {verifiers-0.4.1.dev37 → verifiers-0.4.1.dev38}/verifiers/v1/harnesses/terminus_2/program.py +0 -0
  181. {verifiers-0.4.1.dev37 → verifiers-0.4.1.dev38}/verifiers/v1/harnesses/utils/__init__.py +0 -0
  182. {verifiers-0.4.1.dev37 → verifiers-0.4.1.dev38}/verifiers/v1/harnesses/utils/compaction.py +0 -0
  183. {verifiers-0.4.1.dev37 → verifiers-0.4.1.dev38}/verifiers/v1/harnesses/utils/core.py +0 -0
  184. {verifiers-0.4.1.dev37 → verifiers-0.4.1.dev38}/verifiers/v1/harnesses/utils/install.py +0 -0
  185. {verifiers-0.4.1.dev37 → verifiers-0.4.1.dev38}/verifiers/v1/harnesses/utils/launch.py +0 -0
  186. {verifiers-0.4.1.dev37 → verifiers-0.4.1.dev38}/verifiers/v1/harnesses/utils/mcp.py +0 -0
  187. {verifiers-0.4.1.dev37 → verifiers-0.4.1.dev38}/verifiers/v1/harnesses/utils/replay.py +0 -0
  188. {verifiers-0.4.1.dev37 → verifiers-0.4.1.dev38}/verifiers/v1/interception/__init__.py +0 -0
  189. {verifiers-0.4.1.dev37 → verifiers-0.4.1.dev38}/verifiers/v1/interception/base.py +0 -0
  190. {verifiers-0.4.1.dev37 → verifiers-0.4.1.dev38}/verifiers/v1/interception/pool.py +0 -0
  191. {verifiers-0.4.1.dev37 → verifiers-0.4.1.dev38}/verifiers/v1/interception/tunnel/__init__.py +0 -0
  192. {verifiers-0.4.1.dev37 → verifiers-0.4.1.dev38}/verifiers/v1/interception/tunnel/base.py +0 -0
  193. {verifiers-0.4.1.dev37 → verifiers-0.4.1.dev38}/verifiers/v1/interception/tunnel/custom.py +0 -0
  194. {verifiers-0.4.1.dev37 → verifiers-0.4.1.dev38}/verifiers/v1/interception/tunnel/prime.py +0 -0
  195. {verifiers-0.4.1.dev37 → verifiers-0.4.1.dev38}/verifiers/v1/judge.py +0 -0
  196. {verifiers-0.4.1.dev37 → verifiers-0.4.1.dev38}/verifiers/v1/judges/__init__.py +0 -0
  197. {verifiers-0.4.1.dev37 → verifiers-0.4.1.dev38}/verifiers/v1/judges/decision.py +0 -0
  198. {verifiers-0.4.1.dev37 → verifiers-0.4.1.dev38}/verifiers/v1/judges/reference.py +0 -0
  199. {verifiers-0.4.1.dev37 → verifiers-0.4.1.dev38}/verifiers/v1/judges/reference.txt +0 -0
  200. {verifiers-0.4.1.dev37 → verifiers-0.4.1.dev38}/verifiers/v1/judges/rubric.py +0 -0
  201. {verifiers-0.4.1.dev37 → verifiers-0.4.1.dev38}/verifiers/v1/judges/rubric.txt +0 -0
  202. {verifiers-0.4.1.dev37 → verifiers-0.4.1.dev38}/verifiers/v1/mcp/__init__.py +0 -0
  203. {verifiers-0.4.1.dev37 → verifiers-0.4.1.dev38}/verifiers/v1/mcp/launch.py +0 -0
  204. {verifiers-0.4.1.dev37 → verifiers-0.4.1.dev38}/verifiers/v1/mcp/server.py +0 -0
  205. {verifiers-0.4.1.dev37 → verifiers-0.4.1.dev38}/verifiers/v1/mcp/toolset.py +0 -0
  206. {verifiers-0.4.1.dev37 → verifiers-0.4.1.dev38}/verifiers/v1/rollout.py +0 -0
  207. {verifiers-0.4.1.dev37 → verifiers-0.4.1.dev38}/verifiers/v1/runtimes/__init__.py +0 -0
  208. {verifiers-0.4.1.dev37 → verifiers-0.4.1.dev38}/verifiers/v1/runtimes/apptainer.py +0 -0
  209. {verifiers-0.4.1.dev37 → verifiers-0.4.1.dev38}/verifiers/v1/runtimes/base.py +0 -0
  210. {verifiers-0.4.1.dev37 → verifiers-0.4.1.dev38}/verifiers/v1/runtimes/compose.py +0 -0
  211. {verifiers-0.4.1.dev37 → verifiers-0.4.1.dev38}/verifiers/v1/runtimes/container.py +0 -0
  212. {verifiers-0.4.1.dev37 → verifiers-0.4.1.dev38}/verifiers/v1/runtimes/deployment.py +0 -0
  213. {verifiers-0.4.1.dev37 → verifiers-0.4.1.dev38}/verifiers/v1/runtimes/docker/__init__.py +0 -0
  214. {verifiers-0.4.1.dev37 → verifiers-0.4.1.dev38}/verifiers/v1/runtimes/docker/egress.py +0 -0
  215. {verifiers-0.4.1.dev37 → verifiers-0.4.1.dev38}/verifiers/v1/runtimes/e2b.py +0 -0
  216. {verifiers-0.4.1.dev37 → verifiers-0.4.1.dev38}/verifiers/v1/runtimes/limiters.py +0 -0
  217. {verifiers-0.4.1.dev37 → verifiers-0.4.1.dev38}/verifiers/v1/runtimes/modal.py +0 -0
  218. {verifiers-0.4.1.dev37 → verifiers-0.4.1.dev38}/verifiers/v1/runtimes/prime.py +0 -0
  219. {verifiers-0.4.1.dev37 → verifiers-0.4.1.dev38}/verifiers/v1/runtimes/runtime.py +0 -0
  220. {verifiers-0.4.1.dev37 → verifiers-0.4.1.dev38}/verifiers/v1/runtimes/strategies.py +0 -0
  221. {verifiers-0.4.1.dev37 → verifiers-0.4.1.dev38}/verifiers/v1/runtimes/subprocess.py +0 -0
  222. {verifiers-0.4.1.dev37 → verifiers-0.4.1.dev38}/verifiers/v1/semantic.py +0 -0
  223. {verifiers-0.4.1.dev37 → verifiers-0.4.1.dev38}/verifiers/v1/serve/__init__.py +0 -0
  224. {verifiers-0.4.1.dev37 → verifiers-0.4.1.dev38}/verifiers/v1/serve/client.py +0 -0
  225. {verifiers-0.4.1.dev37 → verifiers-0.4.1.dev38}/verifiers/v1/serve/delta.py +0 -0
  226. {verifiers-0.4.1.dev37 → verifiers-0.4.1.dev38}/verifiers/v1/serve/encoding.py +0 -0
  227. {verifiers-0.4.1.dev37 → verifiers-0.4.1.dev38}/verifiers/v1/serve/pool.py +0 -0
  228. {verifiers-0.4.1.dev37 → verifiers-0.4.1.dev38}/verifiers/v1/serve/server.py +0 -0
  229. {verifiers-0.4.1.dev37 → verifiers-0.4.1.dev38}/verifiers/v1/serve/types.py +0 -0
  230. {verifiers-0.4.1.dev37 → verifiers-0.4.1.dev38}/verifiers/v1/session.py +0 -0
  231. {verifiers-0.4.1.dev37 → verifiers-0.4.1.dev38}/verifiers/v1/state.py +0 -0
  232. {verifiers-0.4.1.dev37 → verifiers-0.4.1.dev38}/verifiers/v1/task.py +0 -0
  233. {verifiers-0.4.1.dev37 → verifiers-0.4.1.dev38}/verifiers/v1/taskset.py +0 -0
  234. {verifiers-0.4.1.dev37 → verifiers-0.4.1.dev38}/verifiers/v1/tasksets/__init__.py +0 -0
  235. {verifiers-0.4.1.dev37 → verifiers-0.4.1.dev38}/verifiers/v1/tasksets/harbor/__init__.py +0 -0
  236. {verifiers-0.4.1.dev37 → verifiers-0.4.1.dev38}/verifiers/v1/tasksets/harbor/taskset.py +0 -0
  237. {verifiers-0.4.1.dev37 → verifiers-0.4.1.dev38}/verifiers/v1/tasksets/harbor/toolset.py +0 -0
  238. {verifiers-0.4.1.dev37 → verifiers-0.4.1.dev38}/verifiers/v1/tasksets/nemo_gym/__init__.py +0 -0
  239. {verifiers-0.4.1.dev37 → verifiers-0.4.1.dev38}/verifiers/v1/tasksets/nemo_gym/response.py +0 -0
  240. {verifiers-0.4.1.dev37 → verifiers-0.4.1.dev38}/verifiers/v1/tasksets/nemo_gym/server.py +0 -0
  241. {verifiers-0.4.1.dev37 → verifiers-0.4.1.dev38}/verifiers/v1/tasksets/nemo_gym/taskset.py +0 -0
  242. {verifiers-0.4.1.dev37 → verifiers-0.4.1.dev38}/verifiers/v1/tasksets/nemo_gym/toolset.py +0 -0
  243. {verifiers-0.4.1.dev37 → verifiers-0.4.1.dev38}/verifiers/v1/tasksets/openenv/__init__.py +0 -0
  244. {verifiers-0.4.1.dev37 → verifiers-0.4.1.dev38}/verifiers/v1/tasksets/openenv/taskset.py +0 -0
  245. {verifiers-0.4.1.dev37 → verifiers-0.4.1.dev38}/verifiers/v1/tasksets/textarena/__init__.py +0 -0
  246. {verifiers-0.4.1.dev37 → verifiers-0.4.1.dev38}/verifiers/v1/tasksets/textarena/taskset.py +0 -0
  247. {verifiers-0.4.1.dev37 → verifiers-0.4.1.dev38}/verifiers/v1/trace.py +0 -0
  248. {verifiers-0.4.1.dev37 → verifiers-0.4.1.dev38}/verifiers/v1/types.py +0 -0
  249. {verifiers-0.4.1.dev37 → verifiers-0.4.1.dev38}/verifiers/v1/utils/__init__.py +0 -0
  250. {verifiers-0.4.1.dev37 → verifiers-0.4.1.dev38}/verifiers/v1/utils/aio.py +0 -0
  251. {verifiers-0.4.1.dev37 → verifiers-0.4.1.dev38}/verifiers/v1/utils/artifacts.py +0 -0
  252. {verifiers-0.4.1.dev37 → verifiers-0.4.1.dev38}/verifiers/v1/utils/compile.py +0 -0
  253. {verifiers-0.4.1.dev37 → verifiers-0.4.1.dev38}/verifiers/v1/utils/decorators.py +0 -0
  254. {verifiers-0.4.1.dev37 → verifiers-0.4.1.dev38}/verifiers/v1/utils/env.py +0 -0
  255. {verifiers-0.4.1.dev37 → verifiers-0.4.1.dev38}/verifiers/v1/utils/eval.py +0 -0
  256. {verifiers-0.4.1.dev37 → verifiers-0.4.1.dev38}/verifiers/v1/utils/format.py +0 -0
  257. {verifiers-0.4.1.dev37 → verifiers-0.4.1.dev38}/verifiers/v1/utils/generic.py +0 -0
  258. {verifiers-0.4.1.dev37 → verifiers-0.4.1.dev38}/verifiers/v1/utils/git.py +0 -0
  259. {verifiers-0.4.1.dev37 → verifiers-0.4.1.dev38}/verifiers/v1/utils/image.py +0 -0
  260. {verifiers-0.4.1.dev37 → verifiers-0.4.1.dev38}/verifiers/v1/utils/interrupt.py +0 -0
  261. {verifiers-0.4.1.dev37 → verifiers-0.4.1.dev38}/verifiers/v1/utils/loaders.py +0 -0
  262. {verifiers-0.4.1.dev37 → verifiers-0.4.1.dev38}/verifiers/v1/utils/logging.py +0 -0
  263. {verifiers-0.4.1.dev37 → verifiers-0.4.1.dev38}/verifiers/v1/utils/memory.py +0 -0
  264. {verifiers-0.4.1.dev37 → verifiers-0.4.1.dev38}/verifiers/v1/utils/paths.py +0 -0
  265. {verifiers-0.4.1.dev37 → verifiers-0.4.1.dev38}/verifiers/v1/utils/platform.py +0 -0
  266. {verifiers-0.4.1.dev37 → verifiers-0.4.1.dev38}/verifiers/v1/utils/prime.py +0 -0
  267. {verifiers-0.4.1.dev37 → verifiers-0.4.1.dev38}/verifiers/v1/utils/retries.py +0 -0
  268. {verifiers-0.4.1.dev37 → verifiers-0.4.1.dev38}/verifiers/v1/utils/scope.py +0 -0
  269. {verifiers-0.4.1.dev37 → verifiers-0.4.1.dev38}/verifiers/v1/utils/score.py +0 -0
  270. {verifiers-0.4.1.dev37 → verifiers-0.4.1.dev38}/verifiers/v1/utils/trace_store.py +0 -0
  271. {verifiers-0.4.1.dev37 → verifiers-0.4.1.dev38}/verifiers/v1/utils/version.py +0 -0
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.5
2
2
  Name: verifiers
3
- Version: 0.4.1.dev37
3
+ Version: 0.4.1.dev38
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
@@ -64,6 +64,7 @@ ERROR_TYPES = {
64
64
  }
65
65
  ERROR_STATUSES = {kind: status for status, kind in ERROR_TYPES.items()}
66
66
 
67
+
67
68
  # Claude may reorder mixed thinking block types between a response and its replay.
68
69
  # Native tool events share the final rank, preserving their relative order.
69
70
  THINKING_ORDER = {"redacted_thinking": 0, "thinking": 1}
@@ -118,6 +119,12 @@ _SAFE_CONTENT_TYPES = (
118
119
  )
119
120
 
120
121
 
122
+ def _error_type(status_code: int) -> str:
123
+ return ERROR_TYPES.get(
124
+ status_code, "api_error" if status_code >= 500 else "invalid_request_error"
125
+ )
126
+
127
+
121
128
  def parse_content(content) -> str | list[ContentPart]:
122
129
  """Anthropic user-side content (text + image blocks) -> typed content parts."""
123
130
  if isinstance(content, str):
@@ -525,10 +532,10 @@ class AnthropicDialect(Dialect[AnthropicMessage]):
525
532
  # The SDK sends the key as `x-api-key`; an ANTHROPIC_AUTH_TOKEN arrives as Bearer.
526
533
  return headers.get("x-api-key") or super().secret(headers)
527
534
 
528
- def error_body(self, message: str) -> dict:
535
+ def error_body(self, message: str, *, status_code: int = 400) -> dict:
529
536
  return {
530
537
  "type": "error",
531
- "error": {"type": "invalid_request_error", "message": message},
538
+ "error": {"type": _error_type(status_code), "message": message},
532
539
  }
533
540
 
534
541
  def stream_keepalive(self, first: bool) -> bytes:
@@ -538,10 +545,7 @@ class AnthropicDialect(Dialect[AnthropicMessage]):
538
545
  def stream_error(self, error: dict, *, status_code: int | None = None) -> bytes:
539
546
  # Once HTTP 200 is committed, clients classify retries from the SSE error type.
540
547
  if status_code is not None:
541
- kind = ERROR_TYPES.get(
542
- status_code,
543
- "api_error" if status_code >= 500 else "invalid_request_error",
544
- )
548
+ kind = _error_type(status_code)
545
549
  error = {**error, "error": {**error.get("error", {}), "type": kind}}
546
550
  # The Anthropic SDKs raise only on a named `error` event.
547
551
  return b"event: error\ndata: " + json.dumps(error).encode() + b"\n\n"
@@ -316,7 +316,7 @@ class Dialect(ABC, Generic[RespT]):
316
316
  client ends on an earlier event (e.g. Responses' `response.completed`) overrides this."""
317
317
  return is_sse_done_event(chunk)
318
318
 
319
- def error_body(self, message: str) -> dict:
319
+ def error_body(self, message: str, *, status_code: int = 400) -> dict:
320
320
  """An error payload in this format's error shape (OpenAI by default)."""
321
321
  return {"error": {"message": message, "type": "invalid_request_error"}}
322
322
 
@@ -114,6 +114,13 @@ async def _request_digest(raw: bytes) -> bytes:
114
114
  return await asyncio.to_thread(_body_digest, raw)
115
115
 
116
116
 
117
+ def _error_response(dialect: Dialect, message: str, *, status: int) -> web.Response:
118
+ """Keep the native error classification consistent with its HTTP status."""
119
+ return web.json_response(
120
+ dialect.error_body(message, status_code=status), status=status
121
+ )
122
+
123
+
117
124
  def _completion_response(completion: dict | None) -> web.Response:
118
125
  """Serialize a model's JSON-native response without an intermediate string."""
119
126
  try:
@@ -470,9 +477,8 @@ class InterceptionServer(Interception):
470
477
  logger.warning(
471
478
  "rollout %s failed: %s: %s", session.trace.id, type(error).__name__, error
472
479
  )
473
- return web.json_response(
474
- dialect.error_body(str(error)),
475
- status=getattr(error, "status_code", 502),
480
+ return _error_response(
481
+ dialect, str(error), status=getattr(error, "status_code", 502)
476
482
  )
477
483
 
478
484
  def mediate_capabilities(
@@ -589,7 +595,7 @@ class InterceptionServer(Interception):
589
595
  session = self.sessions.get(dialect.secret(request.headers))
590
596
  if session is None:
591
597
  logger.warning("interception: unauthorized request")
592
- return web.json_response(dialect.error_body("unauthorized"), status=401)
598
+ return _error_response(dialect, "unauthorized", status=401)
593
599
  session.adopt(asyncio.current_task())
594
600
  started = time.monotonic()
595
601
  try:
@@ -621,7 +627,7 @@ class InterceptionServer(Interception):
621
627
  try:
622
628
  acp, upstream_headers = extract_acp_info(request.headers)
623
629
  except ValueError as error:
624
- return web.json_response(dialect.error_body(str(error)), status=400)
630
+ return _error_response(dialect, str(error), status=400)
625
631
  logger.debug(
626
632
  "intercept %s: id=%s stream=%s retry=%s",
627
633
  request.path,
@@ -655,10 +661,9 @@ class InterceptionServer(Interception):
655
661
  if idempotency_key or retried:
656
662
  idempotent = session.idempotent_requests.get(replay_key)
657
663
  if idempotent is not None and idempotent.binding != binding:
658
- return web.json_response(
659
- dialect.error_body(
660
- "Idempotency-Key was reused with a different request"
661
- ),
664
+ return _error_response(
665
+ dialect,
666
+ "Idempotency-Key was reused with a different request",
662
667
  status=400,
663
668
  )
664
669
  if idempotent is not None and idempotent.response is not None:
@@ -671,15 +676,12 @@ class InterceptionServer(Interception):
671
676
  try:
672
677
  model_request = dialect.parse_request(body)
673
678
  except ValueError as error:
674
- return web.json_response(dialect.error_body(str(error)), status=400)
679
+ return _error_response(dialect, str(error), status=400)
675
680
  if session.released:
676
- return web.json_response(
677
- dialect.error_body("rollout concluded"), status=409
678
- )
681
+ return _error_response(dialect, "rollout concluded", status=409)
679
682
  if session.stopped:
680
- return web.json_response(
681
- dialect.error_body(f"rollout stopped: {session.trace.stop_condition}"),
682
- status=400,
683
+ return _error_response(
684
+ dialect, f"rollout stopped: {session.trace.stop_condition}", status=400
683
685
  )
684
686
  if idempotent is None:
685
687
  idempotent = IdempotentRequest(binding=binding)
@@ -693,9 +695,7 @@ class InterceptionServer(Interception):
693
695
  )
694
696
  response = await asyncio.shield(inflight)
695
697
  if response is None:
696
- return web.json_response(
697
- dialect.error_body("upstream attempt failed"), status=503
698
- )
698
+ return _error_response(dialect, "upstream attempt failed", status=503)
699
699
  return _replay_response(response)
700
700
 
701
701
  if idempotent.inflight is not None:
@@ -718,8 +718,8 @@ class InterceptionServer(Interception):
718
718
  try:
719
719
  refused = await session.refused()
720
720
  if refused is not None:
721
- return web.json_response(
722
- dialect.error_body(f"rollout stopped: {refused}"), status=400
721
+ return _error_response(
722
+ dialect, f"rollout stopped: {refused}", status=400
723
723
  )
724
724
  original_request = model_request
725
725
  model_request, request_rewrites, stopped = await session.rewrite_request(
@@ -747,10 +747,7 @@ class InterceptionServer(Interception):
747
747
  )
748
748
  turn.commit_prompt()
749
749
  session.trace.stop(stopped)
750
- return web.json_response(
751
- dialect.error_body(f"rollout stopped: {stopped}"),
752
- status=400,
753
- )
750
+ return _error_response(dialect, f"rollout stopped: {stopped}", status=400)
754
751
 
755
752
  try:
756
753
  body, policy_paths = self.mediate_capabilities(session, dialect, body)
@@ -761,7 +758,7 @@ class InterceptionServer(Interception):
761
758
  session.trace, model_request.messages, model_request.tools, dialect.name
762
759
  )
763
760
  except ValueError as error:
764
- return web.json_response(dialect.error_body(str(error)), status=400)
761
+ return _error_response(dialect, str(error), status=400)
765
762
  except RolloutError as error:
766
763
  return self._fail(session, dialect, error)
767
764
  # The tail is what the harness added since the last turn (tool results, user
@@ -822,9 +819,7 @@ class InterceptionServer(Interception):
822
819
  len(call_response.message.tool_calls or []),
823
820
  )
824
821
  if session.released: # concluded while sampling — seal holds
825
- return web.json_response(
826
- dialect.error_body("rollout concluded"), status=409
827
- )
822
+ return _error_response(dialect, "rollout concluded", status=409)
828
823
  response_rewrites = []
829
824
  stopped = None
830
825
  if session.response_interceptors or session.response_stops:
@@ -845,10 +840,9 @@ class InterceptionServer(Interception):
845
840
  )
846
841
  call_response.raw = raw_response
847
842
  if session.stopped:
848
- return web.json_response(
849
- dialect.error_body(
850
- f"rollout stopped: {session.trace.stop_condition}"
851
- ),
843
+ return _error_response(
844
+ dialect,
845
+ f"rollout stopped: {session.trace.stop_condition}",
852
846
  status=400,
853
847
  )
854
848
  node = turn.commit(call_response)
@@ -858,9 +852,8 @@ class InterceptionServer(Interception):
858
852
  stopped = await session.gate_tool_calls(node)
859
853
  if stopped is not None:
860
854
  session.trace.stop(stopped)
861
- return web.json_response(
862
- dialect.error_body(f"rollout stopped: {stopped}"),
863
- status=400,
855
+ return _error_response(
856
+ dialect, f"rollout stopped: {stopped}", status=400
864
857
  )
865
858
  except RolloutError as e:
866
859
  # Stash the real cause; the rollout re-raises it after the harness returns.
@@ -873,9 +866,8 @@ class InterceptionServer(Interception):
873
866
  type(e).__name__,
874
867
  e,
875
868
  )
876
- return web.json_response(
877
- dialect.error_body(str(e)),
878
- status=getattr(e, "status_code", 502),
869
+ return _error_response(
870
+ dialect, str(e), status=getattr(e, "status_code", 502)
879
871
  )
880
872
  except Exception as e: # noqa: BLE001 - surface as an API error
881
873
  error = e
@@ -885,7 +877,7 @@ class InterceptionServer(Interception):
885
877
  type(e).__name__,
886
878
  e,
887
879
  )
888
- return web.json_response(dialect.error_body(str(e)), status=502)
880
+ return _error_response(dialect, str(e), status=502)
889
881
  except BaseException as e:
890
882
  # A cancelled exchange (harness disconnect, shutdown) is still
891
883
  # recorded, coupled to its cancellation.
@@ -923,7 +915,7 @@ class InterceptionServer(Interception):
923
915
  relayed as native JSON, never recorded on the trace."""
924
916
  session = self.sessions.get(dialect.secret(request.headers))
925
917
  if session is None:
926
- return web.json_response(dialect.error_body("unauthorized"), status=401)
918
+ return _error_response(dialect, "unauthorized", status=401)
927
919
  session.adopt(asyncio.current_task())
928
920
  logger.debug("intercept aux %s: id=%s", route, session.trace.id)
929
921
  try:
@@ -942,12 +934,12 @@ class InterceptionServer(Interception):
942
934
  type(e).__name__,
943
935
  e,
944
936
  )
945
- return web.json_response(
946
- dialect.error_body(str(e)), status=getattr(e, "status_code", 502)
937
+ return _error_response(
938
+ dialect, str(e), status=getattr(e, "status_code", 502)
947
939
  )
948
940
  except Exception as e: # noqa: BLE001 - surface auxiliary relay failures
949
941
  logger.warning("aux call failed: id=%s %s", session.trace.id, e)
950
- return web.json_response(dialect.error_body(str(e)), status=502)
942
+ return _error_response(dialect, str(e), status=502)
951
943
  return web.json_response(result)
952
944
 
953
945
  async def handle_models(self, request: web.Request) -> web.Response:
@@ -978,7 +970,7 @@ class InterceptionServer(Interception):
978
970
  )
979
971
  except httpx.HTTPError as e:
980
972
  logger.warning("models call failed: id=%s %s", session.trace.id, e)
981
- return web.json_response(dialect.error_body(str(e)), status=502)
973
+ return _error_response(dialect, str(e), status=502)
982
974
  return web.Response(
983
975
  body=upstream.content,
984
976
  status=upstream.status_code,
File without changes