@tangle-network/agent-eval 0.217.1 → 0.219.0

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 (258) hide show
  1. package/CHANGELOG.md +57 -1
  2. package/dist/adapters/http.d.ts +3 -3
  3. package/dist/adapters/http.d.ts.map +1 -1
  4. package/dist/adapters/http.js +1 -0
  5. package/dist/adapters/http.js.map +1 -1
  6. package/dist/{agent-profile-DTt8uGP9.d.ts → agent-profile-D01Io2Xw.d.ts} +4 -4
  7. package/dist/{agent-profile-DTt8uGP9.d.ts.map → agent-profile-D01Io2Xw.d.ts.map} +1 -1
  8. package/dist/analyst/index.d.ts +13 -13
  9. package/dist/analyst/index.d.ts.map +1 -1
  10. package/dist/analyst/index.js +10 -10
  11. package/dist/analyst/index.js.map +1 -1
  12. package/dist/{analyze-runs-DyeNcenW.d.ts → analyze-runs-BWAHBDAw.d.ts} +4 -4
  13. package/dist/{analyze-runs-DyeNcenW.d.ts.map → analyze-runs-BWAHBDAw.d.ts.map} +1 -1
  14. package/dist/{benchmark-command-xQK8nOI6.js → benchmark-command-BzmMTnvC.js} +664 -565
  15. package/dist/benchmark-command-BzmMTnvC.js.map +1 -0
  16. package/dist/benchmarks/index.d.ts +5 -5
  17. package/dist/benchmarks/index.js +3 -3
  18. package/dist/benchmarks/index.js.map +1 -1
  19. package/dist/campaign/index.d.ts +8 -8
  20. package/dist/campaign/index.js +11 -11
  21. package/dist/{campaign-CJGkxAQ6.js → campaign-BVPC6ODQ.js} +452 -282
  22. package/dist/campaign-BVPC6ODQ.js.map +1 -0
  23. package/dist/{campaign-evidence-CQYw8_0H.js → campaign-evidence-DunzcJGv.js} +2 -2
  24. package/dist/campaign-evidence-DunzcJGv.js.map +1 -0
  25. package/dist/{chat-client-ldqxYYTN.js → chat-client-CMQ8_h4J.js} +2 -2
  26. package/dist/{chat-client-ldqxYYTN.js.map → chat-client-CMQ8_h4J.js.map} +1 -1
  27. package/dist/{chat-json-call-DavzexSp.js → chat-json-call-BrZKn0L3.js} +2 -2
  28. package/dist/{chat-json-call-DavzexSp.js.map → chat-json-call-BrZKn0L3.js.map} +1 -1
  29. package/dist/cli.js +10 -10
  30. package/dist/{completion-verifier-B_jw6C9p.js → completion-verifier-Cigap8CG.js} +5 -5
  31. package/dist/{completion-verifier-B_jw6C9p.js.map → completion-verifier-Cigap8CG.js.map} +1 -1
  32. package/dist/contract/index.d.ts +11 -11
  33. package/dist/contract/index.js +91 -11
  34. package/dist/contract/index.js.map +1 -1
  35. package/dist/{cost-ledger-D0352Z4d.js → cost-ledger-BGZB6yY2.js} +75 -2
  36. package/dist/cost-ledger-BGZB6yY2.js.map +1 -0
  37. package/dist/{cost-ledger-Jk62OBfF.d.ts → cost-ledger-C1W3ICmP.d.ts} +26 -2
  38. package/dist/cost-ledger-C1W3ICmP.d.ts.map +1 -0
  39. package/dist/{default-registry-ClYjq3QE.js → default-registry-BrKmT01n.js} +310 -278
  40. package/dist/{default-registry-ClYjq3QE.js.map → default-registry-BrKmT01n.js.map} +1 -1
  41. package/dist/{default-registry-DXgLmoDI.d.ts → default-registry-Cwg_QN3d.d.ts} +6 -6
  42. package/dist/{default-registry-DXgLmoDI.d.ts.map → default-registry-Cwg_QN3d.d.ts.map} +1 -1
  43. package/dist/{define-agent-eval-BIkH_gAR.d.ts → define-agent-eval-C2nFhHPu.d.ts} +8 -8
  44. package/dist/{define-agent-eval-BIkH_gAR.d.ts.map → define-agent-eval-C2nFhHPu.d.ts.map} +1 -1
  45. package/dist/{define-agent-eval-BDxNlP3D.js → define-agent-eval-UQY3VbJ2.js} +165 -105
  46. package/dist/define-agent-eval-UQY3VbJ2.js.map +1 -0
  47. package/dist/diagnosis/index.d.ts +2 -2
  48. package/dist/{dspy-rlm-engine-DhdCr1Dc.js → dspy-rlm-engine-Bn_Mt_LW.js} +3 -3
  49. package/dist/{dspy-rlm-engine-DhdCr1Dc.js.map → dspy-rlm-engine-Bn_Mt_LW.js.map} +1 -1
  50. package/dist/{engine-BvZ0R-36.d.ts → engine-BpGGw6cd.d.ts} +3 -3
  51. package/dist/{engine-BvZ0R-36.d.ts.map → engine-BpGGw6cd.d.ts.map} +1 -1
  52. package/dist/eval-campaign-BUMIxKTE.js +393 -0
  53. package/dist/eval-campaign-BUMIxKTE.js.map +1 -0
  54. package/dist/{evaluation-jTjC_QQD.d.ts → evaluation-CBdQt_kr.d.ts} +4 -4
  55. package/dist/{evaluation-jTjC_QQD.d.ts.map → evaluation-CBdQt_kr.d.ts.map} +1 -1
  56. package/dist/evaluation.d.ts +1 -1
  57. package/dist/evaluation.js +1 -1
  58. package/dist/{exact-types-CflbJ9f3.d.ts → exact-types-BYFmYq44.d.ts} +2 -2
  59. package/dist/{exact-types-CflbJ9f3.d.ts.map → exact-types-BYFmYq44.d.ts.map} +1 -1
  60. package/dist/experiment/index.d.ts +24 -1
  61. package/dist/experiment/index.d.ts.map +1 -1
  62. package/dist/experiment/index.js +110 -71
  63. package/dist/experiment/index.js.map +1 -1
  64. package/dist/{exporters-Cl6IeNAu.js → exporters-DWvM16LE.js} +2 -2
  65. package/dist/{exporters-Cl6IeNAu.js.map → exporters-DWvM16LE.js.map} +1 -1
  66. package/dist/{external-optimizer-process-KVFGvYX1.js → external-optimizer-process-wOLfzsCC.js} +2 -2
  67. package/dist/{external-optimizer-process-KVFGvYX1.js.map → external-optimizer-process-wOLfzsCC.js.map} +1 -1
  68. package/dist/{external-optimizer-subprocess-XIHBOSKt.js → external-optimizer-subprocess-D670Oxf2.js} +4 -4
  69. package/dist/{external-optimizer-subprocess-XIHBOSKt.js.map → external-optimizer-subprocess-D670Oxf2.js.map} +1 -1
  70. package/dist/{feedback-trajectory-BWmhRBGu.d.ts → feedback-trajectory-DhB9WzYg.d.ts} +3 -3
  71. package/dist/{feedback-trajectory-BWmhRBGu.d.ts.map → feedback-trajectory-DhB9WzYg.d.ts.map} +1 -1
  72. package/dist/{findings-store-BMVQtEsm.js → findings-store-CvNo712L.js} +6 -6
  73. package/dist/{findings-store-BMVQtEsm.js.map → findings-store-CvNo712L.js.map} +1 -1
  74. package/dist/fuzz.d.ts +1 -1
  75. package/dist/fuzz.js +1 -1
  76. package/dist/{hf-dataset-D9f7-oX7.js → hf-dataset-CKxIJQba.js} +3 -3
  77. package/dist/{hf-dataset-D9f7-oX7.js.map → hf-dataset-CKxIJQba.js.map} +1 -1
  78. package/dist/hosted/index.js +1 -1
  79. package/dist/{index-CX-GAUpw.d.ts → index-CHxwfW5g.d.ts} +2 -2
  80. package/dist/{index-CX-GAUpw.d.ts.map → index-CHxwfW5g.d.ts.map} +1 -1
  81. package/dist/{index-BLGqZ81N.d.ts → index-CVFStrQD.d.ts} +8 -8
  82. package/dist/{index-BLGqZ81N.d.ts.map → index-CVFStrQD.d.ts.map} +1 -1
  83. package/dist/{index-9jJ2fKSX.d.ts → index-CalAsXMR.d.ts} +7 -5
  84. package/dist/index-CalAsXMR.d.ts.map +1 -0
  85. package/dist/{index-CiRwLv2R.d.ts → index-D7fmC-1K.d.ts} +3 -4
  86. package/dist/index-D7fmC-1K.d.ts.map +1 -0
  87. package/dist/{index-BiT6RtNH.d.ts → index-DAXfpVf7.d.ts} +10 -10
  88. package/dist/{index-BiT6RtNH.d.ts.map → index-DAXfpVf7.d.ts.map} +1 -1
  89. package/dist/{index-ZuWx52WG.d.ts → index-Q6DvdcwI.d.ts} +67 -24
  90. package/dist/index-Q6DvdcwI.d.ts.map +1 -0
  91. package/dist/index.d.ts +26 -26
  92. package/dist/index.d.ts.map +1 -1
  93. package/dist/index.js +615 -692
  94. package/dist/index.js.map +1 -1
  95. package/dist/{integrity-DOd9Q86O.js → integrity-C8oUeB0g.js} +322 -197
  96. package/dist/integrity-C8oUeB0g.js.map +1 -0
  97. package/dist/{integrity-_qgZLA5p.d.ts → integrity-CCwvezWS.d.ts} +2 -2
  98. package/dist/{integrity-_qgZLA5p.d.ts.map → integrity-CCwvezWS.d.ts.map} +1 -1
  99. package/dist/{journal-CR4QikYp.js → journal-C7om8Gum.js} +48 -38
  100. package/dist/journal-C7om8Gum.js.map +1 -0
  101. package/dist/judge-gate-Co5tuh57.js.map +1 -1
  102. package/dist/{judge-gate-DsL0yFcb.d.ts → judge-gate-Dc_mXQsL.d.ts} +2 -2
  103. package/dist/judge-gate-Dc_mXQsL.d.ts.map +1 -0
  104. package/dist/{kind-factory-Gy4fXixd.js → kind-factory-BhxbtUsQ.js} +2 -2
  105. package/dist/{kind-factory-Gy4fXixd.js.map → kind-factory-BhxbtUsQ.js.map} +1 -1
  106. package/dist/ledger-core/index.d.ts +1 -1
  107. package/dist/ledger-core/index.js +2 -2
  108. package/dist/ledger-core/lock-holder.d.ts +2 -0
  109. package/dist/ledger-core/lock-holder.js +181 -0
  110. package/dist/ledger-core/lock-holder.js.map +1 -0
  111. package/dist/{ledger-core-DrJhbms9.js → ledger-core-CAxUdDk0.js} +2 -2
  112. package/dist/{ledger-core-DrJhbms9.js.map → ledger-core-CAxUdDk0.js.map} +1 -1
  113. package/dist/{llm-client-BshCREn6.js → llm-client-DXuOTseU.js} +239 -249
  114. package/dist/llm-client-DXuOTseU.js.map +1 -0
  115. package/dist/{llm-judge-C8jMTNNG.js → llm-judge-Cc8vDJh_.js} +648 -459
  116. package/dist/llm-judge-Cc8vDJh_.js.map +1 -0
  117. package/dist/lock-holder-DaJbfpci.d.ts +86 -0
  118. package/dist/lock-holder-DaJbfpci.d.ts.map +1 -0
  119. package/dist/matrix/index.d.ts +2 -2
  120. package/dist/{matrix-DHe-dwVJ.d.ts → matrix-Cf-AGxGh.d.ts} +4 -4
  121. package/dist/{matrix-DHe-dwVJ.d.ts.map → matrix-Cf-AGxGh.d.ts.map} +1 -1
  122. package/dist/meta-eval/index.d.ts +2 -2
  123. package/dist/{mint-zszyYlpA.js → mint-CbdwjTPW.js} +2 -2
  124. package/dist/{mint-zszyYlpA.js.map → mint-CbdwjTPW.js.map} +1 -1
  125. package/dist/{mint-BRZXuwRi.d.ts → mint-CkzpVPdz.d.ts} +3 -3
  126. package/dist/{mint-BRZXuwRi.d.ts.map → mint-CkzpVPdz.d.ts.map} +1 -1
  127. package/dist/multishot/golden/index.d.ts +1 -1
  128. package/dist/multishot/index.d.ts +2 -2
  129. package/dist/multishot/index.js.map +1 -1
  130. package/dist/openapi.json +1 -1
  131. package/dist/{pareto-BzsxidFD.js → pareto-BiBnQXAE.js} +306 -212
  132. package/dist/pareto-BiBnQXAE.js.map +1 -0
  133. package/dist/pipelines/index.d.ts.map +1 -1
  134. package/dist/pipelines/index.js.map +1 -1
  135. package/dist/{prime-protocol-BWG2DQIk.d.ts → prime-protocol-CckHBxGu.d.ts} +3 -3
  136. package/dist/{prime-protocol-BWG2DQIk.d.ts.map → prime-protocol-CckHBxGu.d.ts.map} +1 -1
  137. package/dist/{promotion-gate-DaY95yU6.d.ts → promotion-gate-CkVZHagC.d.ts} +3 -3
  138. package/dist/{promotion-gate-DaY95yU6.d.ts.map → promotion-gate-CkVZHagC.d.ts.map} +1 -1
  139. package/dist/{proposal-findings-BbWidvUk.js → proposal-findings-E1aSC_cU.js} +2 -2
  140. package/dist/{proposal-findings-BbWidvUk.js.map → proposal-findings-E1aSC_cU.js.map} +1 -1
  141. package/dist/{registry-ssNoHzwD.d.ts → registry-B_yG-1jh.d.ts} +5 -5
  142. package/dist/{registry-ssNoHzwD.d.ts.map → registry-B_yG-1jh.d.ts.map} +1 -1
  143. package/dist/{render-C-w2EZ6p.js → render-Cs34y0iX.js} +404 -208
  144. package/dist/render-Cs34y0iX.js.map +1 -0
  145. package/dist/reporting.d.ts +3 -3
  146. package/dist/{researcher-0ABVIdGa.d.ts → researcher-H0p44OYC.d.ts} +5 -5
  147. package/dist/{researcher-0ABVIdGa.d.ts.map → researcher-H0p44OYC.d.ts.map} +1 -1
  148. package/dist/{reward-DrZ71vnf.d.ts → reward-BeUgVVC_.d.ts} +2 -2
  149. package/dist/{reward-DrZ71vnf.d.ts.map → reward-BeUgVVC_.d.ts.map} +1 -1
  150. package/dist/{reward-hacking-E52wq86n.d.ts → reward-hacking-WTxUbtbb.d.ts} +2 -2
  151. package/dist/{reward-hacking-E52wq86n.d.ts.map → reward-hacking-WTxUbtbb.d.ts.map} +1 -1
  152. package/dist/rl.d.ts +8 -8
  153. package/dist/rl.js +4 -4
  154. package/dist/rollout/index.d.ts +3 -3
  155. package/dist/rollout/index.js +5 -5
  156. package/dist/{rollout-D6C50mfA.js → rollout-Dd1ucT_M.js} +5 -5
  157. package/dist/{rollout-D6C50mfA.js.map → rollout-Dd1ucT_M.js.map} +1 -1
  158. package/dist/{rubric-predictive-validity-DiwT8PbL.d.ts → rubric-predictive-validity-noY7uE03.d.ts} +2 -2
  159. package/dist/{rubric-predictive-validity-DiwT8PbL.d.ts.map → rubric-predictive-validity-noY7uE03.d.ts.map} +1 -1
  160. package/dist/{run-record-CaxbLq6Y.d.ts → run-record-C3awiXPf.d.ts} +2 -2
  161. package/dist/{run-record-CaxbLq6Y.d.ts.map → run-record-C3awiXPf.d.ts.map} +1 -1
  162. package/dist/schema-C-ziyJD7.d.ts.map +1 -1
  163. package/dist/{schema-DxcKTzbi.js → schema-CvhfLjtZ.js} +77 -47
  164. package/dist/schema-CvhfLjtZ.js.map +1 -0
  165. package/dist/search/index.d.ts +2 -2
  166. package/dist/search/index.d.ts.map +1 -1
  167. package/dist/search/index.js +2 -2
  168. package/dist/{search-kernel-DxqjBxA-.d.ts → search-kernel-Dloxd6gs.d.ts} +5 -5
  169. package/dist/{search-kernel-DxqjBxA-.d.ts.map → search-kernel-Dloxd6gs.d.ts.map} +1 -1
  170. package/dist/{search-ledger-TUvB5gWH.js → search-ledger-CZRqtFbW.js} +252 -245
  171. package/dist/search-ledger-CZRqtFbW.js.map +1 -0
  172. package/dist/{search-ledger-file-UKCO2r8a.js → search-ledger-file-Bd5Tioq6.js} +3 -3
  173. package/dist/{search-ledger-file-UKCO2r8a.js.map → search-ledger-file-Bd5Tioq6.js.map} +1 -1
  174. package/dist/{search-shipper-Cw2z3-td.js → search-shipper-Dn3NLsuH.js} +3 -3
  175. package/dist/{search-shipper-Cw2z3-td.js.map → search-shipper-Dn3NLsuH.js.map} +1 -1
  176. package/dist/{search-summary-DQIvJsSB.js → search-summary-D4bwYnAE.js} +3 -3
  177. package/dist/{search-summary-DQIvJsSB.js.map → search-summary-D4bwYnAE.js.map} +1 -1
  178. package/dist/{server-DoVbqqtJ.js → server-8TS8XCvg.js} +3 -3
  179. package/dist/{server-DoVbqqtJ.js.map → server-8TS8XCvg.js.map} +1 -1
  180. package/dist/{single-run-lock-U58yf8N6.js → single-run-lock-Dekd8_Wv.js} +7 -7
  181. package/dist/single-run-lock-Dekd8_Wv.js.map +1 -0
  182. package/dist/{skillopt-optimization-method-kyL94-ri.js → skillopt-optimization-method-DLKqdhcR.js} +1384 -1059
  183. package/dist/skillopt-optimization-method-DLKqdhcR.js.map +1 -0
  184. package/dist/{statistical-heldout-C9AbgREN.d.ts → statistical-heldout-3z3I-kJN.d.ts} +3 -3
  185. package/dist/{statistical-heldout-C9AbgREN.d.ts.map → statistical-heldout-3z3I-kJN.d.ts.map} +1 -1
  186. package/dist/{store-otlp-BteDAbHK.js → store-otlp-dyWE3wAG.js} +2 -2
  187. package/dist/{store-otlp-BteDAbHK.js.map → store-otlp-dyWE3wAG.js.map} +1 -1
  188. package/dist/{store-tool-spans-D5l_OfTJ.js → store-tool-spans-DIUgZbzu.js} +3 -3
  189. package/dist/{store-tool-spans-D5l_OfTJ.js.map → store-tool-spans-DIUgZbzu.js.map} +1 -1
  190. package/dist/{store-tool-spans-DZS0HWVf.d.ts → store-tool-spans-DPwXHQkH.d.ts} +7 -7
  191. package/dist/{store-tool-spans-DZS0HWVf.d.ts.map → store-tool-spans-DPwXHQkH.d.ts.map} +1 -1
  192. package/dist/{summary-report-DM7tlml1.d.ts → summary-report-C8V49Jt3.d.ts} +18 -3
  193. package/dist/summary-report-C8V49Jt3.d.ts.map +1 -0
  194. package/dist/supervisor-run/index.d.ts.map +1 -1
  195. package/dist/supervisor-run/index.js +3 -3
  196. package/dist/{systemone-Bp_Ac0p1.d.ts → systemone-DVA7t76V.d.ts} +6 -6
  197. package/dist/{systemone-Bp_Ac0p1.d.ts.map → systemone-DVA7t76V.d.ts.map} +1 -1
  198. package/dist/{systemone-review-CwE6JGIp.d.ts → systemone-review-CUBMuTLi.d.ts} +2 -2
  199. package/dist/{systemone-review-CwE6JGIp.d.ts.map → systemone-review-CUBMuTLi.d.ts.map} +1 -1
  200. package/dist/systemone.d.ts +3 -3
  201. package/dist/{terminal-record-78g6E4vh.js → terminal-record-D4Rv-j1W.js} +241 -193
  202. package/dist/{terminal-record-78g6E4vh.js.map → terminal-record-D4Rv-j1W.js.map} +1 -1
  203. package/dist/{tool-groups-DyNz2JZ_.d.ts → tool-groups-LISbBWCg.d.ts} +3 -3
  204. package/dist/tool-groups-LISbBWCg.d.ts.map +1 -0
  205. package/dist/{trace-questions-xxwgsuMi.d.ts → trace-questions-C42fYEE4.d.ts} +4 -4
  206. package/dist/{trace-questions-xxwgsuMi.d.ts.map → trace-questions-C42fYEE4.d.ts.map} +1 -1
  207. package/dist/trace-repair/index.d.ts +3 -3
  208. package/dist/traces.d.ts +6 -6
  209. package/dist/traces.js +3 -3
  210. package/dist/trajectory-replay/index.d.ts +4 -1
  211. package/dist/trajectory-replay/index.d.ts.map +1 -1
  212. package/dist/trajectory-replay/index.js +854 -823
  213. package/dist/trajectory-replay/index.js.map +1 -1
  214. package/dist/{tree-BGRglkKd.js → tree-DSqwJpL9.js} +122 -14
  215. package/dist/tree-DSqwJpL9.js.map +1 -0
  216. package/dist/{types-CW8ewATZ.d.ts → types-8yQzNm8u.d.ts} +4 -4
  217. package/dist/{types-CW8ewATZ.d.ts.map → types-8yQzNm8u.d.ts.map} +1 -1
  218. package/dist/{types-D8GhJoHk.d.ts → types-CHfn1zg5.d.ts} +70 -72
  219. package/dist/types-CHfn1zg5.d.ts.map +1 -0
  220. package/dist/{types-DtMbFw6U.d.ts → types-D8GXK9Z5.d.ts} +3 -3
  221. package/dist/{types-DtMbFw6U.d.ts.map → types-D8GXK9Z5.d.ts.map} +1 -1
  222. package/dist/{types-D-mgRzlh.d.ts → types-eMhdacVp.d.ts} +2 -2
  223. package/dist/{types-D-mgRzlh.d.ts.map → types-eMhdacVp.d.ts.map} +1 -1
  224. package/dist/wire/index.d.ts +3 -3
  225. package/dist/wire/index.js +1 -1
  226. package/docs/campaign-proposers.md +16 -0
  227. package/docs/concepts.md +31 -0
  228. package/docs/design/statistics-decisions.md +1 -1
  229. package/docs/eval-surface-map.md +1 -0
  230. package/docs/profile-json-identity.md +1 -2
  231. package/docs/public-api.md +100 -88
  232. package/package.json +8 -6
  233. package/dist/benchmark-command-xQK8nOI6.js.map +0 -1
  234. package/dist/campaign-CJGkxAQ6.js.map +0 -1
  235. package/dist/campaign-evidence-CQYw8_0H.js.map +0 -1
  236. package/dist/cost-ledger-D0352Z4d.js.map +0 -1
  237. package/dist/cost-ledger-Jk62OBfF.d.ts.map +0 -1
  238. package/dist/define-agent-eval-BDxNlP3D.js.map +0 -1
  239. package/dist/eval-campaign-BLEfBGbA.js +0 -343
  240. package/dist/eval-campaign-BLEfBGbA.js.map +0 -1
  241. package/dist/index-9jJ2fKSX.d.ts.map +0 -1
  242. package/dist/index-CiRwLv2R.d.ts.map +0 -1
  243. package/dist/index-ZuWx52WG.d.ts.map +0 -1
  244. package/dist/integrity-DOd9Q86O.js.map +0 -1
  245. package/dist/journal-CR4QikYp.js.map +0 -1
  246. package/dist/judge-gate-DsL0yFcb.d.ts.map +0 -1
  247. package/dist/llm-client-BshCREn6.js.map +0 -1
  248. package/dist/llm-judge-C8jMTNNG.js.map +0 -1
  249. package/dist/pareto-BzsxidFD.js.map +0 -1
  250. package/dist/render-C-w2EZ6p.js.map +0 -1
  251. package/dist/schema-DxcKTzbi.js.map +0 -1
  252. package/dist/search-ledger-TUvB5gWH.js.map +0 -1
  253. package/dist/single-run-lock-U58yf8N6.js.map +0 -1
  254. package/dist/skillopt-optimization-method-kyL94-ri.js.map +0 -1
  255. package/dist/summary-report-DM7tlml1.d.ts.map +0 -1
  256. package/dist/tool-groups-DyNz2JZ_.d.ts.map +0 -1
  257. package/dist/tree-BGRglkKd.js.map +0 -1
  258. package/dist/types-D8GhJoHk.d.ts.map +0 -1
@@ -1,5 +1,5 @@
1
1
  import { t as AgentEvalError } from "./errors-BcOs5MKW.js";
2
- import { c as costForTokenPricing } from "./cost-ledger-D0352Z4d.js";
2
+ import { c as costForTokenPricing } from "./cost-ledger-BGZB6yY2.js";
3
3
  import { a as LlmCallError, o as LlmResponseError, r as parseJsonResult } from "./json-BhdsJaOQ.js";
4
4
  import { a as providerFromBaseUrl, i as defaultProviderRedactor } from "./raw-provider-sink-75w4FWBj.js";
5
5
  import { t as newRecordId } from "./record-id-DUgsK5qp.js";
@@ -588,269 +588,259 @@ function costReceiptFromLlmError(error, customTokenPricing) {
588
588
  async function callLlm(req, opts = {}) {
589
589
  return callLlmAttempts(req, opts, false);
590
590
  }
591
- /** One retry owner for raw and structured calls. Fallback changes the next
592
- * request, not the attempt allowance, deadline origin, or raw-event sequence. */
593
- async function callLlmAttempts(req, opts, allowSchemaFallback) {
591
+ const ENDPOINT = "/chat/completions";
592
+ function startAttemptRun(req, opts, allowSchemaFallback) {
594
593
  if (!opts.baseUrl) throw new Error("callLlm: opts.baseUrl is required");
595
594
  const baseUrl = opts.baseUrl.replace(/\/+$/, "");
596
- const url = `${baseUrl}/chat/completions`;
597
- const endpoint = "/chat/completions";
598
- const timeoutMs = req.timeoutMs ?? opts.defaultTimeoutMs ?? DEFAULT_TIMEOUT_MS;
599
- const maximumAttempts = resolveMaximumAttempts(opts.maximumAttempts);
600
- const minIntervalMs = resolveMinIntervalMs(opts.minIntervalMs);
601
- const pacing = pacingStateFor(opts);
602
- const fetchFn = opts.fetch ?? globalThis.fetch;
603
- const headers = buildHeaders(opts);
604
- const provider = opts.provider ?? providerFromBaseUrl(baseUrl);
605
- const sink = opts.rawSink;
606
- const redactor = opts.redactor ?? defaultProviderRedactor;
607
- const traceContext = opts.traceContext;
608
- const callerSignal = opts.signal;
609
595
  const deadlineMs = opts.deadlineMs;
610
596
  const deadlineStart = Date.now();
597
+ const remainingMs = () => deadlineMs === void 0 ? Infinity : Math.max(0, deadlineMs - (Date.now() - deadlineStart));
598
+ const run = {
599
+ req,
600
+ opts,
601
+ allowSchemaFallback,
602
+ baseUrl,
603
+ url: `${baseUrl}${ENDPOINT}`,
604
+ timeoutMs: req.timeoutMs ?? opts.defaultTimeoutMs ?? DEFAULT_TIMEOUT_MS,
605
+ maximumAttempts: resolveMaximumAttempts(opts.maximumAttempts),
606
+ minIntervalMs: resolveMinIntervalMs(opts.minIntervalMs),
607
+ pacing: pacingStateFor(opts),
608
+ headers: buildHeaders(opts),
609
+ provider: opts.provider ?? providerFromBaseUrl(baseUrl),
610
+ deadlineStart,
611
+ remainingMs,
612
+ retryDelay: (ms) => sleep(Math.min(ms, remainingMs()), opts.signal),
613
+ effectiveRequest: req,
614
+ lastErr: void 0
615
+ };
611
616
  if (opts.customTokenPricing) costForTokenPricing(opts.customTokenPricing, {
612
617
  inputTokens: 0,
613
618
  outputTokens: 0
614
619
  });
615
- let lastErr;
616
- let effectiveRequest = req;
617
- const remainingMs = () => deadlineMs === void 0 ? Infinity : Math.max(0, deadlineMs - (Date.now() - deadlineStart));
618
- const retryDelay = (ms) => sleep(Math.min(ms, remainingMs()), callerSignal);
619
- for (let attempt = 0; attempt < maximumAttempts; attempt++) {
620
- if (callerSignal?.aborted) throw new DOMException("callLlm aborted by caller signal", "AbortError");
621
- if (deadlineExceeded(deadlineStart, deadlineMs)) throw lastErr instanceof Error ? lastErr : new DOMException("callLlm deadline exceeded", "TimeoutError");
622
- const requestBody = buildBody(effectiveRequest, opts.jsonSchemaTransport === "json-object", opts.thinking);
623
- const controller = new AbortController();
624
- const attemptSignal = combineAbortSignals(controller.signal, callerSignal);
625
- let timeoutHandle;
626
- let started = Date.now();
627
- let dispatched = false;
628
- let attemptErrorRecorded = false;
629
- try {
630
- if (minIntervalMs > 0) {
631
- while (true) {
632
- callerSignal?.throwIfAborted();
633
- if (deadlineExceeded(deadlineStart, deadlineMs)) throw lastErr instanceof Error ? lastErr : new DOMException("callLlm deadline exceeded", "TimeoutError");
634
- const waitMs = pacing.lastStartedAt === void 0 ? 0 : pacing.lastStartedAt + minIntervalMs - Date.now();
635
- if (waitMs <= 0) break;
636
- await retryDelay(waitMs);
637
- }
638
- started = Date.now();
639
- }
620
+ return run;
621
+ }
622
+ function deadlineError(run) {
623
+ return run.lastErr instanceof Error ? run.lastErr : new DOMException("callLlm deadline exceeded", "TimeoutError");
624
+ }
625
+ /** Write one raw provider event for this attempt. Does nothing without a sink. */
626
+ async function recordAttemptEvent(run, attempt, fields) {
627
+ const { opts } = run;
628
+ if (!opts.rawSink) return;
629
+ await recordRaw(opts.rawSink, opts.redactor ?? defaultProviderRedactor, {
630
+ eventId: newRecordId(),
631
+ runId: opts.traceContext?.runId,
632
+ spanId: opts.traceContext?.spanId,
633
+ provider: run.provider,
634
+ model: run.req.model,
635
+ endpoint: ENDPOINT,
636
+ baseUrl: run.baseUrl,
637
+ attemptIndex: attempt,
638
+ ...fields,
639
+ redactedFields: []
640
+ });
641
+ }
642
+ /**
643
+ * Wait for this client's pacing slot, and claim it. Every wake rechecks, so concurrent waiters
644
+ * cannot dispatch a catch-up burst; the claim is made in the same synchronous step that finds the
645
+ * slot free, so no other waiter can slip in between the check and the claim.
646
+ */
647
+ async function awaitPacingSlot(run) {
648
+ const { opts, pacing, minIntervalMs } = run;
649
+ while (true) {
650
+ opts.signal?.throwIfAborted();
651
+ if (deadlineExceeded(run.deadlineStart, opts.deadlineMs)) throw deadlineError(run);
652
+ const waitMs = pacing.lastStartedAt === void 0 ? 0 : pacing.lastStartedAt + minIntervalMs - Date.now();
653
+ if (waitMs <= 0) {
654
+ const started = Date.now();
640
655
  pacing.lastStartedAt = started;
641
- dispatched = true;
642
- timeoutHandle = setTimeout(() => controller.abort(), Math.min(timeoutMs, remainingMs()));
643
- if (sink) await recordRaw(sink, redactor, {
644
- eventId: newRecordId(),
645
- runId: traceContext?.runId,
646
- spanId: traceContext?.spanId,
647
- provider,
648
- model: req.model,
649
- endpoint,
650
- baseUrl,
651
- attemptIndex: attempt,
652
- direction: "request",
653
- timestamp: started,
654
- requestHeaders: headers,
655
- requestBody,
656
- redactedFields: []
657
- });
658
- attemptSignal.throwIfAborted();
659
- const res = await fetchFn(url, {
660
- method: "POST",
661
- headers,
662
- body: JSON.stringify(requestBody),
663
- signal: attemptSignal
664
- });
665
- const responseHeaders = sink ? headersToObject(res.headers) : void 0;
666
- const text = await res.text();
667
- attemptSignal.throwIfAborted();
668
- clearTimeout(timeoutHandle);
669
- if (!res.ok) {
670
- const body = text;
671
- if (sink) {
672
- await recordRaw(sink, redactor, {
673
- eventId: newRecordId(),
674
- runId: traceContext?.runId,
675
- spanId: traceContext?.spanId,
676
- provider,
677
- model: req.model,
678
- endpoint,
679
- baseUrl,
680
- attemptIndex: attempt,
681
- direction: "error",
682
- timestamp: Date.now(),
683
- durationMs: Date.now() - started,
684
- statusCode: res.status,
685
- responseHeaders,
686
- responseBody: body,
687
- errorMessage: `HTTP ${res.status}`,
688
- redactedFields: []
689
- });
690
- attemptErrorRecorded = true;
691
- }
692
- const err = new LlmCallError(`LLM call failed with HTTP ${res.status}`, res.status, body, req.model);
693
- if (isTemperatureOneRejection(res.status, body) && effectiveRequest.temperature !== 1 && attempt < maximumAttempts - 1 && !deadlineExceeded(deadlineStart, deadlineMs)) {
694
- lastErr = err;
695
- effectiveRequest = {
696
- ...effectiveRequest,
697
- temperature: 1
698
- };
699
- continue;
700
- }
701
- if (allowSchemaFallback && opts.jsonSchemaTransport !== "json-object" && effectiveRequest.jsonSchema && isSchemaRejection(res.status, body) && attempt < maximumAttempts - 1 && !deadlineExceeded(deadlineStart, deadlineMs)) {
702
- lastErr = err;
703
- effectiveRequest = {
704
- ...effectiveRequest,
705
- jsonMode: true,
706
- jsonSchema: void 0
707
- };
708
- continue;
709
- }
710
- if (RETRYABLE_STATUS.has(res.status) && attempt < maximumAttempts - 1 && !deadlineExceeded(deadlineStart, deadlineMs)) {
711
- lastErr = err;
712
- const wait = parseRetryAfter(res.headers) ?? backoffMs(attempt);
713
- if (wait >= remainingMs()) {
714
- callerSignal?.throwIfAborted();
715
- break;
716
- }
717
- await retryDelay(wait);
718
- continue;
719
- }
720
- throw err;
721
- }
722
- let json;
723
- try {
724
- json = JSON.parse(text);
725
- } catch (parseErr) {
726
- if (sink) {
727
- await recordRaw(sink, redactor, {
728
- eventId: newRecordId(),
729
- runId: traceContext?.runId,
730
- spanId: traceContext?.spanId,
731
- provider,
732
- model: req.model,
733
- endpoint,
734
- baseUrl,
735
- attemptIndex: attempt,
736
- direction: "error",
737
- timestamp: Date.now(),
738
- durationMs: Date.now() - started,
739
- statusCode: res.status,
740
- responseHeaders,
741
- responseBody: text,
742
- errorMessage: `non-JSON response: ${parseErr instanceof Error ? parseErr.message : String(parseErr)}`,
743
- redactedFields: []
744
- });
745
- attemptErrorRecorded = true;
746
- }
747
- throw parseErr;
748
- }
749
- if (sink) await recordRaw(sink, redactor, {
750
- eventId: newRecordId(),
751
- runId: traceContext?.runId,
752
- spanId: traceContext?.spanId,
753
- provider,
754
- model: req.model,
755
- endpoint,
756
- baseUrl,
757
- attemptIndex: attempt,
758
- direction: "response",
656
+ return started;
657
+ }
658
+ await run.retryDelay(waitMs);
659
+ }
660
+ }
661
+ /** Answer a non-2xx response: retry with an adjusted request or after a wait, give up, or throw its error. */
662
+ async function handleHttpFailure(run, attempt, res, body, responseHeaders, started, state) {
663
+ const { req, opts, maximumAttempts, deadlineStart } = run;
664
+ await recordAttemptEvent(run, attempt, {
665
+ direction: "error",
666
+ timestamp: Date.now(),
667
+ durationMs: Date.now() - started,
668
+ statusCode: res.status,
669
+ responseHeaders,
670
+ responseBody: body,
671
+ errorMessage: `HTTP ${res.status}`
672
+ });
673
+ if (opts.rawSink) state.errorRecorded = true;
674
+ const err = new LlmCallError(`LLM call failed with HTTP ${res.status}`, res.status, body, req.model);
675
+ const canRetry = attempt < maximumAttempts - 1 && !deadlineExceeded(deadlineStart, opts.deadlineMs);
676
+ if (isTemperatureOneRejection(res.status, body) && run.effectiveRequest.temperature !== 1 && canRetry) {
677
+ run.lastErr = err;
678
+ run.effectiveRequest = {
679
+ ...run.effectiveRequest,
680
+ temperature: 1
681
+ };
682
+ return { kind: "retry" };
683
+ }
684
+ if (run.allowSchemaFallback && opts.jsonSchemaTransport !== "json-object" && run.effectiveRequest.jsonSchema && isSchemaRejection(res.status, body) && canRetry) {
685
+ run.lastErr = err;
686
+ run.effectiveRequest = {
687
+ ...run.effectiveRequest,
688
+ jsonMode: true,
689
+ jsonSchema: void 0
690
+ };
691
+ return { kind: "retry" };
692
+ }
693
+ if (RETRYABLE_STATUS.has(res.status) && canRetry) {
694
+ run.lastErr = err;
695
+ const wait = parseRetryAfter(res.headers) ?? backoffMs(attempt);
696
+ if (wait >= run.remainingMs()) {
697
+ opts.signal?.throwIfAborted();
698
+ return { kind: "exhausted" };
699
+ }
700
+ await run.retryDelay(wait);
701
+ return { kind: "retry" };
702
+ }
703
+ throw err;
704
+ }
705
+ /** Turn a parsed completion into the call result: content, tool calls, usage with its completeness, and cost. */
706
+ function parseCompletion(run, json, started) {
707
+ const { req, opts } = run;
708
+ const choice = json.choices?.[0];
709
+ const toolCalls = parseWireToolCalls(choice?.message?.tool_calls, req.model);
710
+ const usageRaw = json.usage && typeof json.usage === "object" && !Array.isArray(json.usage) ? json.usage : void 0;
711
+ const promptTokens = providerTokenCount(usageRaw?.prompt_tokens);
712
+ const completionTokens = providerTokenCount(usageRaw?.completion_tokens);
713
+ const totalTokens = providerTokenCount(usageRaw?.total_tokens);
714
+ const reasoningRaw = (usageRaw?.completion_tokens_details && typeof usageRaw.completion_tokens_details === "object" && !Array.isArray(usageRaw.completion_tokens_details) ? usageRaw.completion_tokens_details : void 0)?.reasoning_tokens;
715
+ const reasoningTokens = reasoningRaw === void 0 ? void 0 : providerTokenCount(reasoningRaw);
716
+ const cachedRaw = usageRaw?.prompt_tokens_details && typeof usageRaw.prompt_tokens_details === "object" && !Array.isArray(usageRaw.prompt_tokens_details) ? usageRaw.prompt_tokens_details.cached_tokens : void 0;
717
+ const cachedPromptTokens = cachedRaw === void 0 ? void 0 : providerTokenCount(cachedRaw);
718
+ const usageCaptured = promptTokens !== void 0 && completionTokens !== void 0 && (reasoningRaw === void 0 || reasoningTokens !== void 0 && reasoningTokens <= completionTokens) && (cachedRaw === void 0 || cachedPromptTokens !== void 0 && cachedPromptTokens <= promptTokens) && (totalTokens === void 0 || totalTokens === promptTokens + completionTokens);
719
+ const costFromProxy = providerReportedCost(json);
720
+ const content = choice?.message?.content ?? "";
721
+ const configuredCost = typeof costFromProxy !== "number" && usageCaptured && opts.customTokenPricing ? costForTokenPricing(opts.customTokenPricing, {
722
+ inputTokens: promptTokens - (cachedPromptTokens ?? 0),
723
+ ...cachedPromptTokens ? { cachedTokens: cachedPromptTokens } : {},
724
+ outputTokens: completionTokens
725
+ }) : void 0;
726
+ const servedModel = typeof json.model === "string" && json.model.trim() !== "" ? json.model : null;
727
+ if (opts.assertServedModel) assertServedModel(req.model, servedModel, opts.assertServedModel === true ? {} : opts.assertServedModel);
728
+ return {
729
+ content,
730
+ ...toolCalls === void 0 ? {} : { toolCalls },
731
+ ...req.logprobs === void 0 ? {} : { logprobs: parseWireLogprobs(choice?.logprobs?.content, req.model) },
732
+ finishReason: choice?.finish_reason ?? null,
733
+ contentEmpty: content.trim().length === 0,
734
+ usage: {
735
+ promptTokens: promptTokens ?? 0,
736
+ completionTokens: completionTokens ?? 0,
737
+ totalTokens: totalTokens ?? (promptTokens ?? 0) + (completionTokens ?? 0),
738
+ captured: usageCaptured,
739
+ reasoningTokens,
740
+ cachedPromptTokens
741
+ },
742
+ costUsd: typeof costFromProxy === "number" ? costFromProxy : configuredCost ?? null,
743
+ model: servedModel ?? req.model,
744
+ servedModel,
745
+ durationMs: Date.now() - started,
746
+ raw: json
747
+ };
748
+ }
749
+ /** One attempt: pace, dispatch, read the answer. A failure either becomes a retry outcome or is thrown. */
750
+ async function runAttempt(run, attempt) {
751
+ const { opts } = run;
752
+ const callerSignal = opts.signal;
753
+ if (callerSignal?.aborted) throw new DOMException("callLlm aborted by caller signal", "AbortError");
754
+ if (deadlineExceeded(run.deadlineStart, opts.deadlineMs)) throw deadlineError(run);
755
+ const requestBody = buildBody(run.effectiveRequest, opts.jsonSchemaTransport === "json-object", opts.thinking);
756
+ const controller = new AbortController();
757
+ const attemptSignal = combineAbortSignals(controller.signal, callerSignal);
758
+ let timeoutHandle;
759
+ let started = Date.now();
760
+ const state = {
761
+ dispatched: false,
762
+ errorRecorded: false
763
+ };
764
+ try {
765
+ if (run.minIntervalMs > 0) started = await awaitPacingSlot(run);
766
+ else run.pacing.lastStartedAt = started;
767
+ state.dispatched = true;
768
+ timeoutHandle = setTimeout(() => controller.abort(), Math.min(run.timeoutMs, run.remainingMs()));
769
+ await recordAttemptEvent(run, attempt, {
770
+ direction: "request",
771
+ timestamp: started,
772
+ requestHeaders: run.headers,
773
+ requestBody
774
+ });
775
+ attemptSignal.throwIfAborted();
776
+ const res = await (opts.fetch ?? globalThis.fetch)(run.url, {
777
+ method: "POST",
778
+ headers: run.headers,
779
+ body: JSON.stringify(requestBody),
780
+ signal: attemptSignal
781
+ });
782
+ const responseHeaders = opts.rawSink ? headersToObject(res.headers) : void 0;
783
+ const text = await res.text();
784
+ attemptSignal.throwIfAborted();
785
+ clearTimeout(timeoutHandle);
786
+ if (!res.ok) return await handleHttpFailure(run, attempt, res, text, responseHeaders, started, state);
787
+ let json;
788
+ try {
789
+ json = JSON.parse(text);
790
+ } catch (parseErr) {
791
+ await recordAttemptEvent(run, attempt, {
792
+ direction: "error",
759
793
  timestamp: Date.now(),
760
794
  durationMs: Date.now() - started,
761
795
  statusCode: res.status,
762
796
  responseHeaders,
763
- responseBody: json,
764
- redactedFields: []
797
+ responseBody: text,
798
+ errorMessage: `non-JSON response: ${parseErr instanceof Error ? parseErr.message : String(parseErr)}`
765
799
  });
766
- const choice = json.choices?.[0];
767
- const toolCalls = parseWireToolCalls(choice?.message?.tool_calls, req.model);
768
- const usageRaw = json.usage && typeof json.usage === "object" && !Array.isArray(json.usage) ? json.usage : void 0;
769
- const promptTokens = providerTokenCount(usageRaw?.prompt_tokens);
770
- const completionTokens = providerTokenCount(usageRaw?.completion_tokens);
771
- const totalTokens = providerTokenCount(usageRaw?.total_tokens);
772
- const reasoningRaw = (usageRaw?.completion_tokens_details && typeof usageRaw.completion_tokens_details === "object" && !Array.isArray(usageRaw.completion_tokens_details) ? usageRaw.completion_tokens_details : void 0)?.reasoning_tokens;
773
- const reasoningTokens = reasoningRaw === void 0 ? void 0 : providerTokenCount(reasoningRaw);
774
- const cachedRaw = usageRaw?.prompt_tokens_details && typeof usageRaw.prompt_tokens_details === "object" && !Array.isArray(usageRaw.prompt_tokens_details) ? usageRaw.prompt_tokens_details.cached_tokens : void 0;
775
- const cachedPromptTokens = cachedRaw === void 0 ? void 0 : providerTokenCount(cachedRaw);
776
- const usageCaptured = promptTokens !== void 0 && completionTokens !== void 0 && (reasoningRaw === void 0 || reasoningTokens !== void 0 && reasoningTokens <= completionTokens) && (cachedRaw === void 0 || cachedPromptTokens !== void 0 && cachedPromptTokens <= promptTokens) && (totalTokens === void 0 || totalTokens === promptTokens + completionTokens);
777
- const costFromProxy = providerReportedCost(json);
778
- const content = choice?.message?.content ?? "";
779
- const configuredCost = typeof costFromProxy !== "number" && usageCaptured && opts.customTokenPricing ? costForTokenPricing(opts.customTokenPricing, {
780
- inputTokens: promptTokens - (cachedPromptTokens ?? 0),
781
- ...cachedPromptTokens ? { cachedTokens: cachedPromptTokens } : {},
782
- outputTokens: completionTokens
783
- }) : void 0;
784
- const servedModel = typeof json.model === "string" && json.model.trim() !== "" ? json.model : null;
785
- if (opts.assertServedModel) assertServedModel(req.model, servedModel, opts.assertServedModel === true ? {} : opts.assertServedModel);
786
- return {
787
- content,
788
- ...toolCalls === void 0 ? {} : { toolCalls },
789
- ...req.logprobs === void 0 ? {} : { logprobs: parseWireLogprobs(choice?.logprobs?.content, req.model) },
790
- finishReason: choice?.finish_reason ?? null,
791
- contentEmpty: content.trim().length === 0,
792
- usage: {
793
- promptTokens: promptTokens ?? 0,
794
- completionTokens: completionTokens ?? 0,
795
- totalTokens: totalTokens ?? (promptTokens ?? 0) + (completionTokens ?? 0),
796
- captured: usageCaptured,
797
- reasoningTokens,
798
- cachedPromptTokens
799
- },
800
- costUsd: typeof costFromProxy === "number" ? costFromProxy : configuredCost ?? null,
801
- model: servedModel ?? req.model,
802
- servedModel,
803
- durationMs: Date.now() - started,
804
- raw: json
805
- };
806
- } catch (err) {
807
- clearTimeout(timeoutHandle);
808
- lastErr = err;
809
- if (callerSignal?.aborted) {
810
- if (sink && dispatched && !attemptErrorRecorded) await recordRaw(sink, redactor, {
811
- eventId: newRecordId(),
812
- runId: traceContext?.runId,
813
- spanId: traceContext?.spanId,
814
- provider,
815
- model: req.model,
816
- endpoint,
817
- baseUrl,
818
- attemptIndex: attempt,
819
- direction: "error",
820
- timestamp: Date.now(),
821
- durationMs: Date.now() - started,
822
- errorMessage: err instanceof Error ? err.message : String(err),
823
- redactedFields: []
824
- });
825
- throw err;
826
- }
827
- if (sink && dispatched && !attemptErrorRecorded) await recordRaw(sink, redactor, {
828
- eventId: newRecordId(),
829
- runId: traceContext?.runId,
830
- spanId: traceContext?.spanId,
831
- provider,
832
- model: req.model,
833
- endpoint,
834
- baseUrl,
835
- attemptIndex: attempt,
836
- direction: "error",
837
- timestamp: Date.now(),
838
- durationMs: Date.now() - started,
839
- errorMessage: err instanceof Error ? err.message : String(err),
840
- redactedFields: []
841
- });
842
- const wait = backoffMs(attempt);
843
- if (attempt < maximumAttempts - 1 && isTransientLlmError(err) && !deadlineExceeded(deadlineStart, deadlineMs) && wait < remainingMs()) {
844
- await retryDelay(wait);
845
- continue;
846
- }
847
- callerSignal?.throwIfAborted();
848
- throw err;
849
- } finally {
850
- clearTimeout(timeoutHandle);
800
+ if (opts.rawSink) state.errorRecorded = true;
801
+ throw parseErr;
802
+ }
803
+ await recordAttemptEvent(run, attempt, {
804
+ direction: "response",
805
+ timestamp: Date.now(),
806
+ durationMs: Date.now() - started,
807
+ statusCode: res.status,
808
+ responseHeaders,
809
+ responseBody: json
810
+ });
811
+ return {
812
+ kind: "result",
813
+ result: parseCompletion(run, json, started)
814
+ };
815
+ } catch (err) {
816
+ clearTimeout(timeoutHandle);
817
+ run.lastErr = err;
818
+ if (state.dispatched && !state.errorRecorded) await recordAttemptEvent(run, attempt, {
819
+ direction: "error",
820
+ timestamp: Date.now(),
821
+ durationMs: Date.now() - started,
822
+ errorMessage: err instanceof Error ? err.message : String(err)
823
+ });
824
+ if (callerSignal?.aborted) throw err;
825
+ const wait = backoffMs(attempt);
826
+ if (attempt < run.maximumAttempts - 1 && isTransientLlmError(err) && !deadlineExceeded(run.deadlineStart, opts.deadlineMs) && wait < run.remainingMs()) {
827
+ await run.retryDelay(wait);
828
+ return { kind: "retry" };
851
829
  }
830
+ callerSignal?.throwIfAborted();
831
+ throw err;
832
+ } finally {
833
+ clearTimeout(timeoutHandle);
834
+ }
835
+ }
836
+ async function callLlmAttempts(req, opts, allowSchemaFallback) {
837
+ const run = startAttemptRun(req, opts, allowSchemaFallback);
838
+ for (let attempt = 0; attempt < run.maximumAttempts; attempt++) {
839
+ const outcome = await runAttempt(run, attempt);
840
+ if (outcome.kind === "result") return outcome.result;
841
+ if (outcome.kind === "exhausted") break;
852
842
  }
853
- throw lastErr instanceof Error ? lastErr : new Error(String(lastErr));
843
+ throw run.lastErr instanceof Error ? run.lastErr : new Error(String(run.lastErr));
854
844
  }
855
845
  async function recordRaw(sink, redactor, event) {
856
846
  try {
@@ -918,4 +908,4 @@ var LlmClient = class {
918
908
  //#endregion
919
909
  export { combineAbortSignals as _, maximumChargeForLlmRequest as a, ModelSubstitutionError as c, assertServedModelPolicy as d, assertServedModels as f, judgeFamily as g, assertCrossFamily as h, costReceiptFromLlmError as i, assertCrossFamilyServed as l, CrossFamilyError as m, callLlmJson as n, backoffMs as o, checkServedModel as p, costReceiptFromLlm as r, isTransientLlmError as s, LlmClient as t, assertServedModel as u };
920
910
 
921
- //# sourceMappingURL=llm-client-BshCREn6.js.map
911
+ //# sourceMappingURL=llm-client-DXuOTseU.js.map