@tangle-network/agent-eval 0.128.2 → 0.130.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 (424) hide show
  1. package/CHANGELOG.md +279 -0
  2. package/README.md +19 -0
  3. package/dist/active-curriculum-C4mk67HP.js +214 -0
  4. package/dist/active-curriculum-C4mk67HP.js.map +1 -0
  5. package/dist/adversarial-smnADNFS.d.ts +21 -0
  6. package/dist/adversarial-smnADNFS.d.ts.map +1 -0
  7. package/dist/analyst/index.d.ts +83 -2932
  8. package/dist/analyst/index.d.ts.map +1 -0
  9. package/dist/analyst/index.js +319 -364
  10. package/dist/analyst/index.js.map +1 -1
  11. package/dist/analyst-BkTS3C58.d.ts +89 -0
  12. package/dist/analyst-BkTS3C58.d.ts.map +1 -0
  13. package/dist/analyst-LsnNpSkm.js +152 -0
  14. package/dist/analyst-LsnNpSkm.js.map +1 -0
  15. package/dist/analyze-runs-C1CavBMk.js +1067 -0
  16. package/dist/analyze-runs-C1CavBMk.js.map +1 -0
  17. package/dist/analyze-runs-FsgYCinh.d.ts +72 -0
  18. package/dist/analyze-runs-FsgYCinh.d.ts.map +1 -0
  19. package/dist/attribute-vocabulary-DLJ6303h.d.ts +54 -0
  20. package/dist/attribute-vocabulary-DLJ6303h.d.ts.map +1 -0
  21. package/dist/authenticity/index.d.ts +81 -79
  22. package/dist/authenticity/index.d.ts.map +1 -0
  23. package/dist/authenticity/index.js +209 -193
  24. package/dist/authenticity/index.js.map +1 -1
  25. package/dist/baseline-HsBvw_dk.js +550 -0
  26. package/dist/baseline-HsBvw_dk.js.map +1 -0
  27. package/dist/baseline-hG3K85h4.d.ts +125 -0
  28. package/dist/baseline-hG3K85h4.d.ts.map +1 -0
  29. package/dist/belief-state/index.d.ts +448 -1205
  30. package/dist/belief-state/index.d.ts.map +1 -0
  31. package/dist/belief-state/index.js +1617 -1710
  32. package/dist/belief-state/index.js.map +1 -1
  33. package/dist/benchmarks/index.d.ts +2 -894
  34. package/dist/benchmarks/index.js +2 -59
  35. package/dist/benchmarks-DviOvUNr.js +754 -0
  36. package/dist/benchmarks-DviOvUNr.js.map +1 -0
  37. package/dist/builder-eval/index.d.ts +150 -662
  38. package/dist/builder-eval/index.d.ts.map +1 -0
  39. package/dist/builder-eval/index.js +356 -345
  40. package/dist/builder-eval/index.js.map +1 -1
  41. package/dist/calibration-CNWWA6K8.js +94 -0
  42. package/dist/calibration-CNWWA6K8.js.map +1 -0
  43. package/dist/campaign/index.d.ts +5 -6390
  44. package/dist/campaign/index.js +3 -212
  45. package/dist/campaign-CBKZvQ1H.js +3885 -0
  46. package/dist/campaign-CBKZvQ1H.js.map +1 -0
  47. package/dist/cli.d.ts +1 -1
  48. package/dist/cli.js +164 -174
  49. package/dist/cli.js.map +1 -1
  50. package/dist/client-C97NMzqi.d.ts +581 -0
  51. package/dist/client-C97NMzqi.d.ts.map +1 -0
  52. package/dist/client-CYzbdJOZ.js +637 -0
  53. package/dist/client-CYzbdJOZ.js.map +1 -0
  54. package/dist/code-agent-session-BjkMTQ7H.js +1390 -0
  55. package/dist/code-agent-session-BjkMTQ7H.js.map +1 -0
  56. package/dist/code-agent-session-DqqgOJaz.d.ts +143 -0
  57. package/dist/code-agent-session-DqqgOJaz.d.ts.map +1 -0
  58. package/dist/concurrency-DIxRZF_J.js +85 -0
  59. package/dist/concurrency-DIxRZF_J.js.map +1 -0
  60. package/dist/contract/index.d.ts +645 -5605
  61. package/dist/contract/index.d.ts.map +1 -0
  62. package/dist/contract/index.js +1730 -1937
  63. package/dist/contract/index.js.map +1 -1
  64. package/dist/control.d.ts +3 -1030
  65. package/dist/control.js +2 -32
  66. package/dist/cost-ledger-DIgQUFZZ.js +801 -0
  67. package/dist/cost-ledger-DIgQUFZZ.js.map +1 -0
  68. package/dist/cost-ledger-Dye6jCgg.d.ts +236 -0
  69. package/dist/cost-ledger-Dye6jCgg.d.ts.map +1 -0
  70. package/dist/dataset-BvtnC8Dc.d.ts +115 -0
  71. package/dist/dataset-BvtnC8Dc.d.ts.map +1 -0
  72. package/dist/default-registry-C-vFCSEc.js +2579 -0
  73. package/dist/default-registry-C-vFCSEc.js.map +1 -0
  74. package/dist/default-registry-CNPo-Vsb.d.ts +540 -0
  75. package/dist/default-registry-CNPo-Vsb.d.ts.map +1 -0
  76. package/dist/emitter-CPBAhxum.js +266 -0
  77. package/dist/emitter-CPBAhxum.js.map +1 -0
  78. package/dist/emitter-DGQGoLyj.d.ts +113 -0
  79. package/dist/emitter-DGQGoLyj.d.ts.map +1 -0
  80. package/dist/errors-8YnH8WlF.js +64 -0
  81. package/dist/errors-8YnH8WlF.js.map +1 -0
  82. package/dist/errors-CEk209JS.d.ts +76 -0
  83. package/dist/errors-CEk209JS.d.ts.map +1 -0
  84. package/dist/eval-campaign-DEm6c8ru.js +349 -0
  85. package/dist/eval-campaign-DEm6c8ru.js.map +1 -0
  86. package/dist/execution-tracks-CpgFPpS5.js +93 -0
  87. package/dist/execution-tracks-CpgFPpS5.js.map +1 -0
  88. package/dist/exporters-q9iL-2Jf.js +148 -0
  89. package/dist/exporters-q9iL-2Jf.js.map +1 -0
  90. package/dist/extract-usage-BrQ8mCLX.js +155 -0
  91. package/dist/extract-usage-BrQ8mCLX.js.map +1 -0
  92. package/dist/failure-cluster-CqcvCcdR.d.ts +59 -0
  93. package/dist/failure-cluster-CqcvCcdR.d.ts.map +1 -0
  94. package/dist/feedback-trajectory-CVaeREXV.d.ts +340 -0
  95. package/dist/feedback-trajectory-CVaeREXV.d.ts.map +1 -0
  96. package/dist/fuzz.d.ts +320 -646
  97. package/dist/fuzz.d.ts.map +1 -0
  98. package/dist/fuzz.js +670 -617
  99. package/dist/fuzz.js.map +1 -1
  100. package/dist/hf-dataset-DBJXXoY1.js +763 -0
  101. package/dist/hf-dataset-DBJXXoY1.js.map +1 -0
  102. package/dist/hosted/index.d.ts +11 -831
  103. package/dist/hosted/index.d.ts.map +1 -0
  104. package/dist/hosted/index.js +2 -37
  105. package/dist/index-2JJSA6-r2.d.ts +926 -0
  106. package/dist/index-2JJSA6-r2.d.ts.map +1 -0
  107. package/dist/index-6N0aYmpW.d.ts +217 -0
  108. package/dist/index-6N0aYmpW.d.ts.map +1 -0
  109. package/dist/index-BAvgST_9.d.ts +131 -0
  110. package/dist/index-BAvgST_9.d.ts.map +1 -0
  111. package/dist/index-BvnJuTGD.d.ts +68 -0
  112. package/dist/index-BvnJuTGD.d.ts.map +1 -0
  113. package/dist/index-C61Wi7yg.d.ts +547 -0
  114. package/dist/index-C61Wi7yg.d.ts.map +1 -0
  115. package/dist/index-CAPUUKaM.d.ts +335 -0
  116. package/dist/index-CAPUUKaM.d.ts.map +1 -0
  117. package/dist/index-DE5fb3EC.d.ts +2244 -0
  118. package/dist/index-DE5fb3EC.d.ts.map +1 -0
  119. package/dist/index-DSC51roc.d.ts +102 -0
  120. package/dist/index-DSC51roc.d.ts.map +1 -0
  121. package/dist/index.d.ts +3776 -15120
  122. package/dist/index.d.ts.map +1 -0
  123. package/dist/index.js +11185 -11191
  124. package/dist/index.js.map +1 -1
  125. package/dist/integrity-BzRbCHzi.js +424 -0
  126. package/dist/integrity-BzRbCHzi.js.map +1 -0
  127. package/dist/integrity-rmVhXWA7.d.ts +61 -0
  128. package/dist/integrity-rmVhXWA7.d.ts.map +1 -0
  129. package/dist/judge-calibration-DFtEMlde.d.ts +146 -0
  130. package/dist/judge-calibration-DFtEMlde.d.ts.map +1 -0
  131. package/dist/ledger-core/index.d.ts +2 -0
  132. package/dist/ledger-core/index.js +2 -0
  133. package/dist/ledger-core-DtZz1RG0.js +388 -0
  134. package/dist/ledger-core-DtZz1RG0.js.map +1 -0
  135. package/dist/llm-client--GR4JbZE.js +687 -0
  136. package/dist/llm-client--GR4JbZE.js.map +1 -0
  137. package/dist/llm-client-B_nIBlYo.d.ts +290 -0
  138. package/dist/llm-client-B_nIBlYo.d.ts.map +1 -0
  139. package/dist/matrix/index.d.ts +3 -155
  140. package/dist/matrix/index.js +2 -8
  141. package/dist/matrix-BzQnu2S6.js +270 -0
  142. package/dist/matrix-BzQnu2S6.js.map +1 -0
  143. package/dist/meta-eval/index.d.ts +4 -1027
  144. package/dist/meta-eval/index.js +393 -390
  145. package/dist/meta-eval/index.js.map +1 -1
  146. package/dist/metrics-C9YY1OcL.js +239 -0
  147. package/dist/metrics-C9YY1OcL.js.map +1 -0
  148. package/dist/mint-yN2M2eh0.js +201 -0
  149. package/dist/mint-yN2M2eh0.js.map +1 -0
  150. package/dist/multi-layer-verifier-BHY1gWAc.d.ts +138 -0
  151. package/dist/multi-layer-verifier-BHY1gWAc.d.ts.map +1 -0
  152. package/dist/multishot/index.d.ts +273 -481
  153. package/dist/multishot/index.d.ts.map +1 -0
  154. package/dist/multishot/index.js +595 -548
  155. package/dist/multishot/index.js.map +1 -1
  156. package/dist/off-policy-DvgzvtIx.js +220 -0
  157. package/dist/off-policy-DvgzvtIx.js.map +1 -0
  158. package/dist/off-policy-mskQw8Mb.d.ts +153 -0
  159. package/dist/off-policy-mskQw8Mb.d.ts.map +1 -0
  160. package/dist/openapi.json +1 -1
  161. package/dist/opencode-sqlite-BGrHeDu3.js +318 -0
  162. package/dist/opencode-sqlite-BGrHeDu3.js.map +1 -0
  163. package/dist/outcome-store-BYHIuO0e.d.ts +65 -0
  164. package/dist/outcome-store-BYHIuO0e.d.ts.map +1 -0
  165. package/dist/outcome-store-ChBKlTd_.js +75 -0
  166. package/dist/outcome-store-ChBKlTd_.js.map +1 -0
  167. package/dist/paired-arms-D9D0wXj2.js +260 -0
  168. package/dist/paired-arms-D9D0wXj2.js.map +1 -0
  169. package/dist/pipelines/index.d.ts +95 -532
  170. package/dist/pipelines/index.d.ts.map +1 -0
  171. package/dist/pipelines/index.js +497 -478
  172. package/dist/pipelines/index.js.map +1 -1
  173. package/dist/pre-registration-DakwTRXk.js +96 -0
  174. package/dist/pre-registration-DakwTRXk.js.map +1 -0
  175. package/dist/propose-review-control-LhIWGzHl.js +1458 -0
  176. package/dist/propose-review-control-LhIWGzHl.js.map +1 -0
  177. package/dist/query-CJ_DX8vl.d.ts +28 -0
  178. package/dist/query-CJ_DX8vl.d.ts.map +1 -0
  179. package/dist/query-Di7eEQ79.js +83 -0
  180. package/dist/query-Di7eEQ79.js.map +1 -0
  181. package/dist/raw-provider-sink-BQd7mzyT.js +201 -0
  182. package/dist/raw-provider-sink-BQd7mzyT.js.map +1 -0
  183. package/dist/raw-provider-sink-BU29Sh8h.d.ts +134 -0
  184. package/dist/raw-provider-sink-BU29Sh8h.d.ts.map +1 -0
  185. package/dist/redact-7Aq1ukl-.js +107 -0
  186. package/dist/redact-7Aq1ukl-.js.map +1 -0
  187. package/dist/release-report-Cz9NKH39.js +603 -0
  188. package/dist/release-report-Cz9NKH39.js.map +1 -0
  189. package/dist/release-report-mvB2G4_J.d.ts +244 -0
  190. package/dist/release-report-mvB2G4_J.d.ts.map +1 -0
  191. package/dist/replay-GnyotH0J.js +1741 -0
  192. package/dist/replay-GnyotH0J.js.map +1 -0
  193. package/dist/replay-OoidtG1E.d.ts +749 -0
  194. package/dist/replay-OoidtG1E.d.ts.map +1 -0
  195. package/dist/reporting.d.ts +6 -1298
  196. package/dist/reporting.js +6 -50
  197. package/dist/researcher-CwTdwXG1.d.ts +314 -0
  198. package/dist/researcher-CwTdwXG1.d.ts.map +1 -0
  199. package/dist/reward-hacking-eAnOsynk.d.ts +224 -0
  200. package/dist/reward-hacking-eAnOsynk.d.ts.map +1 -0
  201. package/dist/reward-hacking-qipEpKvY.js +596 -0
  202. package/dist/reward-hacking-qipEpKvY.js.map +1 -0
  203. package/dist/reward-nw2xZGZG.js +137 -0
  204. package/dist/reward-nw2xZGZG.js.map +1 -0
  205. package/dist/rl.d.ts +916 -3596
  206. package/dist/rl.d.ts.map +1 -0
  207. package/dist/rl.js +2362 -1751
  208. package/dist/rl.js.map +1 -1
  209. package/dist/rolldown-runtime-8H4AJuhK.js +14 -0
  210. package/dist/rollout/index.d.ts +3 -1048
  211. package/dist/rollout/index.js +8 -110
  212. package/dist/rollout-BOYjemfR.js +624 -0
  213. package/dist/rollout-BOYjemfR.js.map +1 -0
  214. package/dist/rubric-predictive-validity-B3xmbmS1.js +141 -0
  215. package/dist/rubric-predictive-validity-B3xmbmS1.js.map +1 -0
  216. package/dist/rubric-predictive-validity-Ku_clp_1.d.ts +74 -0
  217. package/dist/rubric-predictive-validity-Ku_clp_1.d.ts.map +1 -0
  218. package/dist/run-evidence-ClRX_8A9.d.ts +225 -0
  219. package/dist/run-evidence-ClRX_8A9.d.ts.map +1 -0
  220. package/dist/run-record-BuoE80Dq.js +467 -0
  221. package/dist/run-record-BuoE80Dq.js.map +1 -0
  222. package/dist/run-record-CnZu_gjl.d.ts +357 -0
  223. package/dist/run-record-CnZu_gjl.d.ts.map +1 -0
  224. package/dist/run-score-iEEAWiBY.js +41 -0
  225. package/dist/run-score-iEEAWiBY.js.map +1 -0
  226. package/dist/runtime-trajectory-1gyaTOoC.js +93 -0
  227. package/dist/runtime-trajectory-1gyaTOoC.js.map +1 -0
  228. package/dist/runtime-trajectory-BvSZcCHD.d.ts +50 -0
  229. package/dist/runtime-trajectory-BvSZcCHD.d.ts.map +1 -0
  230. package/dist/schema-BtVldJ3T.d.ts +206 -0
  231. package/dist/schema-BtVldJ3T.d.ts.map +1 -0
  232. package/dist/schema-C6DW4ZHR.js +821 -0
  233. package/dist/schema-C6DW4ZHR.js.map +1 -0
  234. package/dist/schema-CRhEY1SO.js +69 -0
  235. package/dist/schema-CRhEY1SO.js.map +1 -0
  236. package/dist/schema-Cef2cFmb.d.ts +408 -0
  237. package/dist/schema-Cef2cFmb.d.ts.map +1 -0
  238. package/dist/semantic-concept-judge-B6cWNJ2K.js +725 -0
  239. package/dist/semantic-concept-judge-B6cWNJ2K.js.map +1 -0
  240. package/dist/sequential-Br0mAPHA.js +148 -0
  241. package/dist/sequential-Br0mAPHA.js.map +1 -0
  242. package/dist/sequential-CYwq6Ff_.d.ts +141 -0
  243. package/dist/sequential-CYwq6Ff_.d.ts.map +1 -0
  244. package/dist/series-convergence-CjO2QdRW.js +43 -0
  245. package/dist/series-convergence-CjO2QdRW.js.map +1 -0
  246. package/dist/series-convergence-ofsqPWhs.d.ts +35 -0
  247. package/dist/series-convergence-ofsqPWhs.d.ts.map +1 -0
  248. package/dist/server-m5D9cvnG.js +1040 -0
  249. package/dist/server-m5D9cvnG.js.map +1 -0
  250. package/dist/skill-usage-C_pXm7lP.d.ts +534 -0
  251. package/dist/skill-usage-C_pXm7lP.d.ts.map +1 -0
  252. package/dist/skillopt-optimization-method-B7wX7XkF.d.ts +1739 -0
  253. package/dist/skillopt-optimization-method-B7wX7XkF.d.ts.map +1 -0
  254. package/dist/skillopt-optimization-method-D4ODwFVV.js +7712 -0
  255. package/dist/skillopt-optimization-method-D4ODwFVV.js.map +1 -0
  256. package/dist/statistics-Cmj6nynr.d.ts +514 -0
  257. package/dist/statistics-Cmj6nynr.d.ts.map +1 -0
  258. package/dist/statistics-CnnxdpOg.js +1437 -0
  259. package/dist/statistics-CnnxdpOg.js.map +1 -0
  260. package/dist/store-CT9YIIve.d.ts +117 -0
  261. package/dist/store-CT9YIIve.d.ts.map +1 -0
  262. package/dist/store-CxJry_cs.d.ts +229 -0
  263. package/dist/store-CxJry_cs.d.ts.map +1 -0
  264. package/dist/storyboard/index.d.ts +84 -203
  265. package/dist/storyboard/index.d.ts.map +1 -0
  266. package/dist/storyboard/index.js +609 -542
  267. package/dist/storyboard/index.js.map +1 -1
  268. package/dist/summary-report-BNs5nmXI.js +862 -0
  269. package/dist/summary-report-BNs5nmXI.js.map +1 -0
  270. package/dist/summary-report-Cj9gdw4i.d.ts +407 -0
  271. package/dist/summary-report-Cj9gdw4i.d.ts.map +1 -0
  272. package/dist/supervisor-run/index.d.ts +2 -849
  273. package/dist/supervisor-run/index.js +2 -64
  274. package/dist/supervisor-run-_lnTLM3z.js +1679 -0
  275. package/dist/supervisor-run-_lnTLM3z.js.map +1 -0
  276. package/dist/task-failure-attributes-CQZlB3et.js +311 -0
  277. package/dist/task-failure-attributes-CQZlB3et.js.map +1 -0
  278. package/dist/test-graded-scenario-BsqWLmPt.js +318 -0
  279. package/dist/test-graded-scenario-BsqWLmPt.js.map +1 -0
  280. package/dist/test-graded-scenario-D1TaI2va.d.ts +141 -0
  281. package/dist/test-graded-scenario-D1TaI2va.d.ts.map +1 -0
  282. package/dist/tools-BmuN627J.js +1085 -0
  283. package/dist/tools-BmuN627J.js.map +1 -0
  284. package/dist/trace-attributes.d.ts +2 -52
  285. package/dist/trace-attributes.js +131 -61
  286. package/dist/trace-attributes.js.map +1 -1
  287. package/dist/traces.d.ts +12 -2365
  288. package/dist/traces.js +12 -251
  289. package/dist/trajectory-D_7rLrvE.js +56 -0
  290. package/dist/trajectory-D_7rLrvE.js.map +1 -0
  291. package/dist/types-DGsxbAEd.d.ts +387 -0
  292. package/dist/types-DGsxbAEd.d.ts.map +1 -0
  293. package/dist/types-k9tZGKUg.d.ts +640 -0
  294. package/dist/types-k9tZGKUg.d.ts.map +1 -0
  295. package/dist/verdict-Dps8_okt.d.ts +37 -0
  296. package/dist/verdict-Dps8_okt.d.ts.map +1 -0
  297. package/dist/wire/index.d.ts +702 -1174
  298. package/dist/wire/index.d.ts.map +1 -0
  299. package/dist/wire/index.js +2 -81
  300. package/docs/feature-guide.md +1 -1
  301. package/docs/rollout.md +116 -2
  302. package/package.json +18 -10
  303. package/dist/benchmarks/index.js.map +0 -1
  304. package/dist/campaign/index.js.map +0 -1
  305. package/dist/chunk-2JX3CFMB.js +0 -695
  306. package/dist/chunk-2JX3CFMB.js.map +0 -1
  307. package/dist/chunk-2MKQIFS4.js +0 -183
  308. package/dist/chunk-2MKQIFS4.js.map +0 -1
  309. package/dist/chunk-3RF76KTD.js +0 -84
  310. package/dist/chunk-3RF76KTD.js.map +0 -1
  311. package/dist/chunk-5DTSBUL2.js +0 -159
  312. package/dist/chunk-5DTSBUL2.js.map +0 -1
  313. package/dist/chunk-7ZZMD7UK.js +0 -386
  314. package/dist/chunk-7ZZMD7UK.js.map +0 -1
  315. package/dist/chunk-BOD4O7OF.js +0 -40
  316. package/dist/chunk-BOD4O7OF.js.map +0 -1
  317. package/dist/chunk-BYT7ELPS.js +0 -1553
  318. package/dist/chunk-BYT7ELPS.js.map +0 -1
  319. package/dist/chunk-DJKY2TSY.js +0 -2428
  320. package/dist/chunk-DJKY2TSY.js.map +0 -1
  321. package/dist/chunk-DPUHNQLN.js +0 -232
  322. package/dist/chunk-DPUHNQLN.js.map +0 -1
  323. package/dist/chunk-DRYIUNWY.js +0 -622
  324. package/dist/chunk-DRYIUNWY.js.map +0 -1
  325. package/dist/chunk-EJGRPCO3.js +0 -617
  326. package/dist/chunk-EJGRPCO3.js.map +0 -1
  327. package/dist/chunk-EOSZT7PL.js +0 -2001
  328. package/dist/chunk-EOSZT7PL.js.map +0 -1
  329. package/dist/chunk-EZJEIH2R.js +0 -1559
  330. package/dist/chunk-EZJEIH2R.js.map +0 -1
  331. package/dist/chunk-GGE4NNQT.js +0 -65
  332. package/dist/chunk-GGE4NNQT.js.map +0 -1
  333. package/dist/chunk-HHWE3POT.js +0 -94
  334. package/dist/chunk-HHWE3POT.js.map +0 -1
  335. package/dist/chunk-IHQDPH7D.js +0 -171
  336. package/dist/chunk-IHQDPH7D.js.map +0 -1
  337. package/dist/chunk-JHCHEVET.js +0 -274
  338. package/dist/chunk-JHCHEVET.js.map +0 -1
  339. package/dist/chunk-K4DBDHLK.js +0 -158
  340. package/dist/chunk-K4DBDHLK.js.map +0 -1
  341. package/dist/chunk-K6N6XJJX.js +0 -306
  342. package/dist/chunk-K6N6XJJX.js.map +0 -1
  343. package/dist/chunk-MA6HLL3S.js +0 -65
  344. package/dist/chunk-MA6HLL3S.js.map +0 -1
  345. package/dist/chunk-MAZ26DC7.js +0 -99
  346. package/dist/chunk-MAZ26DC7.js.map +0 -1
  347. package/dist/chunk-MHELPNRP.js +0 -1212
  348. package/dist/chunk-MHELPNRP.js.map +0 -1
  349. package/dist/chunk-NACAGYSY.js +0 -1040
  350. package/dist/chunk-NACAGYSY.js.map +0 -1
  351. package/dist/chunk-NKAGIDE2.js +0 -7633
  352. package/dist/chunk-NKAGIDE2.js.map +0 -1
  353. package/dist/chunk-NPCTHQIO.js +0 -91
  354. package/dist/chunk-NPCTHQIO.js.map +0 -1
  355. package/dist/chunk-NYLOYM6N.js +0 -332
  356. package/dist/chunk-NYLOYM6N.js.map +0 -1
  357. package/dist/chunk-ONWEPEDO.js +0 -57
  358. package/dist/chunk-ONWEPEDO.js.map +0 -1
  359. package/dist/chunk-P5W7RQKK.js +0 -576
  360. package/dist/chunk-P5W7RQKK.js.map +0 -1
  361. package/dist/chunk-P6FYH6K4.js +0 -1161
  362. package/dist/chunk-P6FYH6K4.js.map +0 -1
  363. package/dist/chunk-PBE2LOSS.js +0 -669
  364. package/dist/chunk-PBE2LOSS.js.map +0 -1
  365. package/dist/chunk-PC4UYEBM.js +0 -166
  366. package/dist/chunk-PC4UYEBM.js.map +0 -1
  367. package/dist/chunk-PXE2VKMX.js +0 -140
  368. package/dist/chunk-PXE2VKMX.js.map +0 -1
  369. package/dist/chunk-PZ5AY32C.js +0 -10
  370. package/dist/chunk-PZ5AY32C.js.map +0 -1
  371. package/dist/chunk-RZTMDUO7.js +0 -49
  372. package/dist/chunk-RZTMDUO7.js.map +0 -1
  373. package/dist/chunk-S5YLIBFX.js +0 -136
  374. package/dist/chunk-S5YLIBFX.js.map +0 -1
  375. package/dist/chunk-SZLVEKMJ.js +0 -1446
  376. package/dist/chunk-SZLVEKMJ.js.map +0 -1
  377. package/dist/chunk-T4SQEITX.js +0 -95
  378. package/dist/chunk-T4SQEITX.js.map +0 -1
  379. package/dist/chunk-TBL77AUT.js +0 -355
  380. package/dist/chunk-TBL77AUT.js.map +0 -1
  381. package/dist/chunk-TSN7JT6D.js +0 -1646
  382. package/dist/chunk-TSN7JT6D.js.map +0 -1
  383. package/dist/chunk-TT4KNT67.js +0 -124
  384. package/dist/chunk-TT4KNT67.js.map +0 -1
  385. package/dist/chunk-UB2LOJ6Q.js +0 -4461
  386. package/dist/chunk-UB2LOJ6Q.js.map +0 -1
  387. package/dist/chunk-UWZZKKU7.js +0 -237
  388. package/dist/chunk-UWZZKKU7.js.map +0 -1
  389. package/dist/chunk-VBQ3CRKH.js +0 -291
  390. package/dist/chunk-VBQ3CRKH.js.map +0 -1
  391. package/dist/chunk-VGRCHJON.js +0 -163
  392. package/dist/chunk-VGRCHJON.js.map +0 -1
  393. package/dist/chunk-VI2UW6B6.js +0 -162
  394. package/dist/chunk-VI2UW6B6.js.map +0 -1
  395. package/dist/chunk-VLOATJQ2.js +0 -908
  396. package/dist/chunk-VLOATJQ2.js.map +0 -1
  397. package/dist/chunk-VQMK5FMP.js +0 -247
  398. package/dist/chunk-VQMK5FMP.js.map +0 -1
  399. package/dist/chunk-VZSRQ272.js +0 -149
  400. package/dist/chunk-VZSRQ272.js.map +0 -1
  401. package/dist/chunk-WGXIEX7P.js +0 -116
  402. package/dist/chunk-WGXIEX7P.js.map +0 -1
  403. package/dist/chunk-WS3NZZQQ.js +0 -929
  404. package/dist/chunk-WS3NZZQQ.js.map +0 -1
  405. package/dist/chunk-XDWDC2MP.js +0 -695
  406. package/dist/chunk-XDWDC2MP.js.map +0 -1
  407. package/dist/chunk-XPRT64IE.js +0 -766
  408. package/dist/chunk-XPRT64IE.js.map +0 -1
  409. package/dist/chunk-YJBNWCAA.js +0 -1056
  410. package/dist/chunk-YJBNWCAA.js.map +0 -1
  411. package/dist/chunk-ZET2UAYW.js +0 -89
  412. package/dist/chunk-ZET2UAYW.js.map +0 -1
  413. package/dist/chunk-ZUUWPZCV.js +0 -752
  414. package/dist/chunk-ZUUWPZCV.js.map +0 -1
  415. package/dist/control.js.map +0 -1
  416. package/dist/hosted/index.js.map +0 -1
  417. package/dist/matrix/index.js.map +0 -1
  418. package/dist/reporting.js.map +0 -1
  419. package/dist/rollout/index.js.map +0 -1
  420. package/dist/run-campaign-ISHFZ7FJ.js +0 -17
  421. package/dist/run-campaign-ISHFZ7FJ.js.map +0 -1
  422. package/dist/supervisor-run/index.js.map +0 -1
  423. package/dist/traces.js.map +0 -1
  424. package/dist/wire/index.js.map +0 -1
@@ -1,669 +0,0 @@
1
- import {
2
- costForTokenPricing
3
- } from "./chunk-WS3NZZQQ.js";
4
- import {
5
- defaultProviderRedactor,
6
- providerFromBaseUrl
7
- } from "./chunk-PC4UYEBM.js";
8
- import {
9
- AgentEvalError,
10
- CaptureIntegrityError
11
- } from "./chunk-ONWEPEDO.js";
12
-
13
- // src/llm-client.ts
14
- function maximumChargeForLlmRequest(request, options = {}) {
15
- if (request.maxTokens === void 0) return void 0;
16
- if (!Number.isInteger(request.maxTokens) || request.maxTokens <= 0) {
17
- throw new RangeError(`maximumChargeForLlmRequest: maxTokens must be a positive integer`);
18
- }
19
- if (request.messages.some(
20
- (message) => Array.isArray(message.content) && message.content.some((part) => part.type === "image_url")
21
- )) {
22
- return void 0;
23
- }
24
- const attempts = resolveMaximumAttempts(options.maxRetries);
25
- const forceJsonObject = options.jsonSchemaTransport === "json-object";
26
- const requestBytes = new TextEncoder().encode(
27
- JSON.stringify(buildBody(request, forceJsonObject, options.thinking))
28
- ).byteLength;
29
- const batches = request.jsonSchema && !forceJsonObject ? 2 : 1;
30
- const usage = {
31
- inputTokens: requestBytes * attempts * batches,
32
- outputTokens: request.maxTokens * attempts * batches
33
- };
34
- return options.customTokenPricing ? { customTokenPricing: options.customTokenPricing, ...usage } : { model: request.model, ...usage };
35
- }
36
- function costReceiptFromLlm(result, customTokenPricing) {
37
- const cachedTokens = result.usage.cachedPromptTokens ?? 0;
38
- const inputTokens = Math.max(0, result.usage.promptTokens - cachedTokens);
39
- const configuredCostUsd = result.costUsd === null && customTokenPricing && result.usage.captured !== false ? costForTokenPricing(customTokenPricing, {
40
- inputTokens,
41
- ...cachedTokens > 0 ? { cachedTokens } : {},
42
- outputTokens: result.usage.completionTokens
43
- }) : void 0;
44
- return {
45
- model: result.model,
46
- inputTokens,
47
- outputTokens: result.usage.completionTokens,
48
- reasoningTokens: result.usage.reasoningTokens,
49
- cachedTokens: cachedTokens > 0 ? cachedTokens : void 0,
50
- actualCostUsd: result.costUsd ?? configuredCostUsd,
51
- usageUnknown: result.usage.captured === false
52
- };
53
- }
54
- function costReceiptFromLlmError(error, customTokenPricing) {
55
- return error instanceof LlmResponseError ? costReceiptFromLlm(error.result, customTokenPricing) : void 0;
56
- }
57
- var LlmCallError = class extends AgentEvalError {
58
- constructor(message, status, body, model) {
59
- super("judge", message);
60
- this.status = status;
61
- this.body = body;
62
- this.model = model;
63
- }
64
- status;
65
- body;
66
- model;
67
- };
68
- var LlmResponseError = class extends AgentEvalError {
69
- constructor(message, result, options) {
70
- super("judge", message, options);
71
- this.result = result;
72
- }
73
- result;
74
- };
75
- var DEFAULT_BASE_URL = "https://router.tangle.tools/v1";
76
- var DEFAULT_TIMEOUT_MS = Number(process.env.TANGLE_LLM_TIMEOUT_MS) || 3e5;
77
- var DEFAULT_MAX_RETRIES = Number(process.env.TANGLE_LLM_MAX_RETRIES) || 3;
78
- function resolveMaximumAttempts(configured) {
79
- const attempts = configured ?? DEFAULT_MAX_RETRIES;
80
- if (!Number.isInteger(attempts) || attempts <= 0) {
81
- throw new RangeError("LLM maximum attempts must be a positive integer");
82
- }
83
- return attempts;
84
- }
85
- function providerTokenCount(value) {
86
- return typeof value === "number" && Number.isSafeInteger(value) && value >= 0 ? value : void 0;
87
- }
88
- var RETRYABLE_STATUS = /* @__PURE__ */ new Set([429, 502, 503, 504]);
89
- var TRANSIENT_ERROR_PATTERNS = [
90
- /AbortError/i,
91
- /TimeoutError/i,
92
- /this operation was aborted/i,
93
- /fetch failed/i,
94
- /ECONNRESET/i,
95
- /ETIMEDOUT/i,
96
- /EAI_AGAIN/i,
97
- /socket hang up/i,
98
- /stream.*ended.*unexpectedly/i,
99
- /terminated/i,
100
- /other side closed/i,
101
- /NGHTTP2/i,
102
- /UND_ERR/i
103
- ];
104
- function isTransientLlmError(err) {
105
- return classifyTransient(err, 0);
106
- }
107
- function classifyTransient(err, depth) {
108
- if (err instanceof LlmCallError) return RETRYABLE_STATUS.has(err.status);
109
- if (!(err instanceof Error)) return false;
110
- const status = err.status;
111
- if (typeof status === "number" && RETRYABLE_STATUS.has(status)) return true;
112
- const code = err.code;
113
- const haystack = `${err.name}
114
- ${err.message}
115
- ${typeof code === "string" ? code : ""}`;
116
- if (TRANSIENT_ERROR_PATTERNS.some((p) => p.test(haystack))) return true;
117
- const cause = err.cause;
118
- if (depth < 4 && cause instanceof Error && cause !== err) {
119
- return classifyTransient(cause, depth + 1);
120
- }
121
- return false;
122
- }
123
- function parseRetryAfter(headers) {
124
- const h = headers.get("retry-after");
125
- if (!h) return null;
126
- const asNumber = Number(h);
127
- if (Number.isFinite(asNumber) && asNumber > 0) return asNumber * 1e3;
128
- const asDate = Date.parse(h);
129
- if (Number.isFinite(asDate)) return Math.max(0, asDate - Date.now());
130
- return null;
131
- }
132
- function backoffMs(attempt) {
133
- return Math.min(500 * 2 ** attempt, 16e3);
134
- }
135
- function buildHeaders(opts) {
136
- const headers = {
137
- "Content-Type": "application/json",
138
- Accept: "application/json"
139
- };
140
- if (opts.authHeader) {
141
- headers[opts.authHeader.name] = opts.authHeader.value;
142
- } else if (opts.bearer || opts.apiKey) {
143
- headers.Authorization = `Bearer ${opts.bearer ?? opts.apiKey}`;
144
- }
145
- if (opts.idempotencyKey) headers["Idempotency-Key"] = opts.idempotencyKey;
146
- return headers;
147
- }
148
- function isSchemaRejection(status, body) {
149
- if (status !== 400) return false;
150
- const lower = body.toLowerCase();
151
- return lower.includes("response_format") || lower.includes("json_schema") || lower.includes("is unavailable") || lower.includes("not supported");
152
- }
153
- function isTemperatureOneRejection(status, body) {
154
- if (status !== 400 || !/temperature/i.test(body)) return false;
155
- return /temperature[^.\n]{0,120}\b(?:only|must|should|required|requires?)\b[^.\n]{0,40}\b1(?:\.0+)?\b/i.test(
156
- body
157
- ) || /\bonly\s+1(?:\.0+)?\s+is\s+allowed\b[^.\n]{0,120}\btemperature\b/i.test(body);
158
- }
159
- function buildBody(req, forceJsonObject, defaultThinking) {
160
- const body = {
161
- model: req.model,
162
- messages: req.messages,
163
- temperature: req.temperature ?? 0
164
- };
165
- if (req.maxTokens != null) {
166
- if (usesMaxCompletionTokens(req.model)) body.max_completion_tokens = req.maxTokens;
167
- else body.max_tokens = req.maxTokens;
168
- }
169
- const thinking = req.thinking ?? defaultThinking;
170
- if (thinking !== void 0) {
171
- body.thinking = { type: thinking };
172
- }
173
- if (req.jsonSchema && !forceJsonObject) {
174
- body.response_format = {
175
- type: "json_schema",
176
- json_schema: { name: req.jsonSchema.name, schema: req.jsonSchema.schema, strict: true }
177
- };
178
- } else if (req.jsonMode || req.jsonSchema) {
179
- body.response_format = { type: "json_object" };
180
- }
181
- return body;
182
- }
183
- function usesMaxCompletionTokens(model) {
184
- return /^gpt-5(?:[.-]|$)/i.test(model);
185
- }
186
- async function sleep(ms) {
187
- return new Promise((resolve) => setTimeout(resolve, ms));
188
- }
189
- function linkSignals(timeoutController, caller) {
190
- if (!caller) return timeoutController.signal;
191
- if (typeof AbortSignal.any === "function") {
192
- return AbortSignal.any([timeoutController.signal, caller]);
193
- }
194
- if (caller.aborted) {
195
- timeoutController.abort();
196
- } else {
197
- caller.addEventListener("abort", () => timeoutController.abort(), { once: true });
198
- }
199
- return timeoutController.signal;
200
- }
201
- function deadlineExceeded(start, deadlineMs) {
202
- return deadlineMs != null && Date.now() - start >= deadlineMs;
203
- }
204
- function stripFencedJson(raw) {
205
- const trimmed = raw.trim();
206
- const m = trimmed.match(/^```(?:json)?\s*\n?([\s\S]*?)\n?```\s*$/);
207
- return m ? m[1].trim() : trimmed;
208
- }
209
- function extractJsonPayload(raw) {
210
- const stripped = stripFencedJson(raw);
211
- try {
212
- JSON.parse(stripped);
213
- return stripped;
214
- } catch {
215
- if (stripped.startsWith("{") || stripped.startsWith("[")) return stripped;
216
- }
217
- const starts = [...stripped.matchAll(/[[{]/g)].map((match) => match.index).filter((index) => index != null);
218
- for (const start of starts) {
219
- const candidate = extractBalancedJson(stripped, start);
220
- if (!candidate) continue;
221
- try {
222
- JSON.parse(candidate);
223
- return candidate;
224
- } catch {
225
- }
226
- }
227
- return stripped;
228
- }
229
- function extractBalancedJson(input, start) {
230
- const opener = input[start];
231
- const closer = opener === "{" ? "}" : opener === "[" ? "]" : null;
232
- if (!closer) return null;
233
- const stack = [closer];
234
- let isInString = false;
235
- let isEscaped = false;
236
- for (let i = start + 1; i < input.length; i++) {
237
- const char = input[i];
238
- if (isEscaped) {
239
- isEscaped = false;
240
- continue;
241
- }
242
- if (char === "\\") {
243
- isEscaped = isInString;
244
- continue;
245
- }
246
- if (char === '"') {
247
- isInString = !isInString;
248
- continue;
249
- }
250
- if (isInString) continue;
251
- if (char === "{") stack.push("}");
252
- else if (char === "[") stack.push("]");
253
- else if (char === stack[stack.length - 1]) {
254
- stack.pop();
255
- if (stack.length === 0) return input.slice(start, i + 1);
256
- }
257
- }
258
- return null;
259
- }
260
- async function callLlm(req, opts = {}) {
261
- const baseUrl = (opts.baseUrl ?? DEFAULT_BASE_URL).replace(/\/+$/, "");
262
- const url = `${baseUrl}/chat/completions`;
263
- const endpoint = "/chat/completions";
264
- const timeoutMs = req.timeoutMs ?? opts.defaultTimeoutMs ?? DEFAULT_TIMEOUT_MS;
265
- const maximumAttempts = resolveMaximumAttempts(opts.maxRetries);
266
- const fetchFn = opts.fetch ?? globalThis.fetch;
267
- const headers = buildHeaders(opts);
268
- const provider = opts.provider ?? providerFromBaseUrl(baseUrl);
269
- const sink = opts.rawSink;
270
- const redactor = opts.redactor ?? defaultProviderRedactor;
271
- const traceContext = opts.traceContext;
272
- const callerSignal = opts.signal;
273
- const deadlineMs = opts.deadlineMs;
274
- const deadlineStart = Date.now();
275
- if (opts.customTokenPricing) {
276
- costForTokenPricing(opts.customTokenPricing, { inputTokens: 0, outputTokens: 0 });
277
- }
278
- let lastErr;
279
- let effectiveRequest = req;
280
- for (let attempt = 0; attempt < maximumAttempts; attempt++) {
281
- if (callerSignal?.aborted) {
282
- throw new DOMException("callLlm aborted by caller signal", "AbortError");
283
- }
284
- if (attempt > 0 && deadlineExceeded(deadlineStart, deadlineMs)) {
285
- throw lastErr instanceof Error ? lastErr : new Error(String(lastErr));
286
- }
287
- const controller = new AbortController();
288
- const attemptSignal = linkSignals(controller, callerSignal);
289
- const timeoutHandle = setTimeout(() => controller.abort(), timeoutMs);
290
- const started = Date.now();
291
- const requestBody = buildBody(
292
- effectiveRequest,
293
- opts.jsonSchemaTransport === "json-object",
294
- opts.thinking
295
- );
296
- let attemptErrorRecorded = false;
297
- if (sink) {
298
- await recordRaw(sink, redactor, {
299
- eventId: cryptoEventId(),
300
- runId: traceContext?.runId,
301
- spanId: traceContext?.spanId,
302
- provider,
303
- model: req.model,
304
- endpoint,
305
- baseUrl,
306
- attemptIndex: attempt,
307
- direction: "request",
308
- timestamp: started,
309
- requestHeaders: headers,
310
- requestBody,
311
- redactedFields: []
312
- });
313
- }
314
- try {
315
- const res = await fetchFn(url, {
316
- method: "POST",
317
- headers,
318
- body: JSON.stringify(requestBody),
319
- signal: attemptSignal
320
- });
321
- clearTimeout(timeoutHandle);
322
- const responseHeaders = sink ? headersToObject(res.headers) : void 0;
323
- if (!res.ok) {
324
- const body = await res.text();
325
- if (sink) {
326
- await recordRaw(sink, redactor, {
327
- eventId: cryptoEventId(),
328
- runId: traceContext?.runId,
329
- spanId: traceContext?.spanId,
330
- provider,
331
- model: req.model,
332
- endpoint,
333
- baseUrl,
334
- attemptIndex: attempt,
335
- direction: "error",
336
- timestamp: Date.now(),
337
- durationMs: Date.now() - started,
338
- statusCode: res.status,
339
- responseHeaders,
340
- responseBody: body,
341
- errorMessage: `HTTP ${res.status}`,
342
- redactedFields: []
343
- });
344
- attemptErrorRecorded = true;
345
- }
346
- const err = new LlmCallError(
347
- `LLM call ${res.status}: ${body.slice(0, 300)}`,
348
- res.status,
349
- body,
350
- req.model
351
- );
352
- if (isTemperatureOneRejection(res.status, body) && effectiveRequest.temperature !== 1 && attempt < maximumAttempts - 1 && !deadlineExceeded(deadlineStart, deadlineMs)) {
353
- lastErr = err;
354
- effectiveRequest = { ...effectiveRequest, temperature: 1 };
355
- continue;
356
- }
357
- if (RETRYABLE_STATUS.has(res.status) && attempt < maximumAttempts - 1 && !deadlineExceeded(deadlineStart, deadlineMs)) {
358
- lastErr = err;
359
- const retryAfter = parseRetryAfter(res.headers);
360
- await sleep(retryAfter ?? backoffMs(attempt));
361
- continue;
362
- }
363
- throw err;
364
- }
365
- const text = await res.text();
366
- let json;
367
- try {
368
- json = JSON.parse(text);
369
- } catch (parseErr) {
370
- if (sink) {
371
- await recordRaw(sink, redactor, {
372
- eventId: cryptoEventId(),
373
- runId: traceContext?.runId,
374
- spanId: traceContext?.spanId,
375
- provider,
376
- model: req.model,
377
- endpoint,
378
- baseUrl,
379
- attemptIndex: attempt,
380
- direction: "error",
381
- timestamp: Date.now(),
382
- durationMs: Date.now() - started,
383
- statusCode: res.status,
384
- responseHeaders,
385
- responseBody: text,
386
- errorMessage: `non-JSON response: ${parseErr instanceof Error ? parseErr.message : String(parseErr)}`,
387
- redactedFields: []
388
- });
389
- attemptErrorRecorded = true;
390
- }
391
- throw parseErr;
392
- }
393
- if (sink) {
394
- await recordRaw(sink, redactor, {
395
- eventId: cryptoEventId(),
396
- runId: traceContext?.runId,
397
- spanId: traceContext?.spanId,
398
- provider,
399
- model: req.model,
400
- endpoint,
401
- baseUrl,
402
- attemptIndex: attempt,
403
- direction: "response",
404
- timestamp: Date.now(),
405
- durationMs: Date.now() - started,
406
- statusCode: res.status,
407
- responseHeaders,
408
- responseBody: json,
409
- redactedFields: []
410
- });
411
- }
412
- const choice = json.choices?.[0];
413
- const usageRaw = json.usage && typeof json.usage === "object" && !Array.isArray(json.usage) ? json.usage : void 0;
414
- const promptTokens = providerTokenCount(usageRaw?.prompt_tokens);
415
- const completionTokens = providerTokenCount(usageRaw?.completion_tokens);
416
- const totalTokens = providerTokenCount(usageRaw?.total_tokens);
417
- const completionDetails = usageRaw?.completion_tokens_details && typeof usageRaw.completion_tokens_details === "object" && !Array.isArray(usageRaw.completion_tokens_details) ? usageRaw.completion_tokens_details : void 0;
418
- const reasoningRaw = completionDetails?.reasoning_tokens;
419
- const reasoningTokens = reasoningRaw === void 0 ? void 0 : providerTokenCount(reasoningRaw);
420
- 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;
421
- const cachedPromptTokens = cachedRaw === void 0 ? void 0 : providerTokenCount(cachedRaw);
422
- 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);
423
- const costFromProxy = json._response_cost ?? json.cost_usd;
424
- const content = choice?.message?.content ?? "";
425
- const configuredCost = typeof costFromProxy !== "number" && usageCaptured && opts.customTokenPricing ? costForTokenPricing(opts.customTokenPricing, {
426
- inputTokens: promptTokens - (cachedPromptTokens ?? 0),
427
- ...cachedPromptTokens ? { cachedTokens: cachedPromptTokens } : {},
428
- outputTokens: completionTokens
429
- }) : void 0;
430
- return {
431
- content,
432
- finishReason: choice?.finish_reason ?? null,
433
- contentEmpty: content.trim().length === 0,
434
- usage: {
435
- promptTokens: promptTokens ?? 0,
436
- completionTokens: completionTokens ?? 0,
437
- totalTokens: totalTokens ?? (promptTokens ?? 0) + (completionTokens ?? 0),
438
- captured: usageCaptured,
439
- reasoningTokens,
440
- cachedPromptTokens
441
- },
442
- costUsd: typeof costFromProxy === "number" ? costFromProxy : configuredCost ?? null,
443
- model: json.model ?? req.model,
444
- durationMs: Date.now() - started,
445
- raw: json
446
- };
447
- } catch (err) {
448
- clearTimeout(timeoutHandle);
449
- lastErr = err;
450
- if (callerSignal?.aborted) {
451
- if (sink && !attemptErrorRecorded) {
452
- await recordRaw(sink, redactor, {
453
- eventId: cryptoEventId(),
454
- runId: traceContext?.runId,
455
- spanId: traceContext?.spanId,
456
- provider,
457
- model: req.model,
458
- endpoint,
459
- baseUrl,
460
- attemptIndex: attempt,
461
- direction: "error",
462
- timestamp: Date.now(),
463
- durationMs: Date.now() - started,
464
- errorMessage: err instanceof Error ? err.message : String(err),
465
- redactedFields: []
466
- });
467
- }
468
- throw err;
469
- }
470
- if (sink && !attemptErrorRecorded) {
471
- await recordRaw(sink, redactor, {
472
- eventId: cryptoEventId(),
473
- runId: traceContext?.runId,
474
- spanId: traceContext?.spanId,
475
- provider,
476
- model: req.model,
477
- endpoint,
478
- baseUrl,
479
- attemptIndex: attempt,
480
- direction: "error",
481
- timestamp: Date.now(),
482
- durationMs: Date.now() - started,
483
- errorMessage: err instanceof Error ? err.message : String(err),
484
- redactedFields: []
485
- });
486
- }
487
- if (attempt < maximumAttempts - 1 && isTransientLlmError(err) && !deadlineExceeded(deadlineStart, deadlineMs)) {
488
- await sleep(backoffMs(attempt));
489
- continue;
490
- }
491
- throw err;
492
- }
493
- }
494
- throw lastErr instanceof Error ? lastErr : new Error(String(lastErr));
495
- }
496
- async function recordRaw(sink, redactor, event) {
497
- try {
498
- await sink.record(redactor(event));
499
- } catch {
500
- }
501
- }
502
- function headersToObject(h) {
503
- const out = {};
504
- h.forEach((value, key) => {
505
- out[key] = value;
506
- });
507
- return out;
508
- }
509
- function cryptoEventId() {
510
- if (typeof globalThis.crypto?.randomUUID === "function") return globalThis.crypto.randomUUID();
511
- return `${Date.now().toString(36)}-${Math.random().toString(36).slice(2, 10)}`;
512
- }
513
- async function callLlmJson(req, opts = {}) {
514
- const result = await callLlmStructured(req, opts);
515
- const value = parseJsonResult(result, opts.jsonPayloadMode ?? "extract");
516
- return { value, result };
517
- }
518
- async function callLlmStructured(req, opts = {}) {
519
- try {
520
- return await callLlm({ ...req, jsonMode: req.jsonMode ?? !req.jsonSchema }, opts);
521
- } catch (err) {
522
- if (opts.jsonSchemaTransport !== "json-object" && err instanceof LlmCallError && isSchemaRejection(err.status, err.body) && req.jsonSchema) {
523
- const degradedReq = { ...req, jsonMode: true, jsonSchema: void 0 };
524
- return await callLlm(degradedReq, opts);
525
- }
526
- throw err;
527
- }
528
- }
529
- function parseJsonResult(result, jsonPayloadMode) {
530
- try {
531
- if (result.finishReason === "length") {
532
- throw new Error(
533
- `LLM returned truncated JSON content (model=${result.model}, finishReason=length)`
534
- );
535
- }
536
- return parseJsonSafely(result.content, result.model, jsonPayloadMode);
537
- } catch (error) {
538
- if (error instanceof LlmResponseError) throw error;
539
- const cause = error instanceof Error ? error : new Error(String(error));
540
- throw new LlmResponseError(cause.message, result, { cause });
541
- }
542
- }
543
- function parseJsonSafely(content, model, jsonPayloadMode) {
544
- const payload = jsonPayloadMode === "exact" ? content : extractJsonPayload(content);
545
- try {
546
- return JSON.parse(payload);
547
- } catch (err) {
548
- throw new Error(
549
- `LLM returned non-JSON content (model=${model}): ${err instanceof Error ? err.message : String(err)}
550
- --- raw content ---
551
- ${content.slice(0, 800)}`
552
- );
553
- }
554
- }
555
- var LlmRouteAssertionError = class extends CaptureIntegrityError {
556
- constructor(message, reason, baseUrl) {
557
- super(message);
558
- this.reason = reason;
559
- this.baseUrl = baseUrl;
560
- }
561
- reason;
562
- baseUrl;
563
- };
564
- function assertLlmRoute(opts, req = {}) {
565
- const baseUrlExplicit = opts.baseUrl !== void 0;
566
- const baseUrl = (opts.baseUrl ?? DEFAULT_BASE_URL).replace(/\/+$/, "");
567
- if (req.requireExplicitBaseUrl && !baseUrlExplicit) {
568
- throw new LlmRouteAssertionError(
569
- `assertLlmRoute: requireExplicitBaseUrl set but opts.baseUrl is undefined; would fall back to ${DEFAULT_BASE_URL}.`,
570
- "no_explicit_base_url",
571
- baseUrl
572
- );
573
- }
574
- if (req.blockedBaseUrls?.some((p) => matchUrl(baseUrl, p))) {
575
- throw new LlmRouteAssertionError(
576
- `assertLlmRoute: baseUrl ${baseUrl} matches a blocked pattern.`,
577
- "base_url_blocked",
578
- baseUrl
579
- );
580
- }
581
- if (req.allowedBaseUrls && req.allowedBaseUrls.length > 0) {
582
- const ok = req.allowedBaseUrls.some((p) => matchUrl(baseUrl, p));
583
- if (!ok) {
584
- throw new LlmRouteAssertionError(
585
- `assertLlmRoute: baseUrl ${baseUrl} is not in the allowed list (${req.allowedBaseUrls.map(describePattern).join(", ")}).`,
586
- "base_url_not_allowed",
587
- baseUrl
588
- );
589
- }
590
- }
591
- if (req.requireAuth && !opts.apiKey && !opts.bearer && !opts.authHeader) {
592
- throw new LlmRouteAssertionError(
593
- `assertLlmRoute: requireAuth set but no apiKey, bearer, or authHeader was supplied.`,
594
- "no_auth",
595
- baseUrl
596
- );
597
- }
598
- if (req.expectedProvider) {
599
- const actual = opts.provider ?? providerFromBaseUrl(baseUrl);
600
- if (actual !== req.expectedProvider) {
601
- throw new LlmRouteAssertionError(
602
- `assertLlmRoute: expected provider ${req.expectedProvider} but baseUrl ${baseUrl} resolves to ${actual}.`,
603
- "wrong_provider",
604
- baseUrl
605
- );
606
- }
607
- }
608
- }
609
- function matchUrl(url, pattern) {
610
- if (pattern instanceof RegExp) return pattern.test(url);
611
- return url.toLowerCase().startsWith(pattern.toLowerCase());
612
- }
613
- function describePattern(p) {
614
- return p instanceof RegExp ? p.source : p;
615
- }
616
- async function probeLlm(model, opts = {}) {
617
- const start = Date.now();
618
- try {
619
- await callLlm(
620
- {
621
- model,
622
- messages: [{ role: "user", content: "ping" }],
623
- maxTokens: 64,
624
- timeoutMs: opts.timeoutMs ?? 3e4
625
- },
626
- opts
627
- );
628
- return { ok: true, latencyMs: Date.now() - start, error: null };
629
- } catch (err) {
630
- return {
631
- ok: false,
632
- latencyMs: Date.now() - start,
633
- error: err instanceof Error ? err.message : String(err)
634
- };
635
- }
636
- }
637
- var LlmClient = class {
638
- maximumAttempts;
639
- opts;
640
- constructor(opts = {}) {
641
- this.opts = opts;
642
- this.maximumAttempts = resolveMaximumAttempts(opts.maxRetries);
643
- }
644
- call(req, per) {
645
- const options = { ...this.opts, ...per };
646
- return req.jsonSchema ? callLlmStructured(req, options) : callLlm(req, options);
647
- }
648
- callJson(req, per) {
649
- return callLlmJson(req, { ...this.opts, ...per });
650
- }
651
- };
652
-
653
- export {
654
- maximumChargeForLlmRequest,
655
- costReceiptFromLlm,
656
- costReceiptFromLlmError,
657
- LlmCallError,
658
- LlmResponseError,
659
- isTransientLlmError,
660
- backoffMs,
661
- stripFencedJson,
662
- callLlm,
663
- callLlmJson,
664
- LlmRouteAssertionError,
665
- assertLlmRoute,
666
- probeLlm,
667
- LlmClient
668
- };
669
- //# sourceMappingURL=chunk-PBE2LOSS.js.map