@anvia/core 1.1.2 → 1.2.1

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 (598) hide show
  1. package/README.md +226 -0
  2. package/dist/agent/agent-stream.js +7 -0
  3. package/dist/agent/agent-stream.js.map +1 -0
  4. package/dist/agent/agent-tool.js +24 -0
  5. package/dist/agent/agent-tool.js.map +1 -0
  6. package/dist/agent/agent.js +89 -0
  7. package/dist/agent/agent.js.map +1 -0
  8. package/dist/agent/errors.js +17 -0
  9. package/dist/agent/errors.js.map +1 -0
  10. package/dist/agent/ids.js +7 -0
  11. package/dist/agent/ids.js.map +1 -0
  12. package/dist/agent/index.d.ts +127 -9
  13. package/dist/agent/index.js +103 -21
  14. package/dist/agent/interactions/index.js +2 -2
  15. package/dist/agent/interactions.js +22 -0
  16. package/dist/agent/interactions.js.map +1 -0
  17. package/dist/agent/lifecycle.js +9 -0
  18. package/dist/agent/lifecycle.js.map +1 -0
  19. package/dist/agent/output-schema.js +10 -0
  20. package/dist/agent/output-schema.js.map +1 -0
  21. package/dist/agent/resolve-options.js +46 -0
  22. package/dist/agent/resolve-options.js.map +1 -0
  23. package/dist/agent/resolved-agent.js +92 -0
  24. package/dist/agent/resolved-agent.js.map +1 -0
  25. package/dist/agent/run-types.js +1 -0
  26. package/dist/agent/run-types.js.map +1 -0
  27. package/dist/agent/snapshot.js +17 -0
  28. package/dist/agent/snapshot.js.map +1 -0
  29. package/dist/agent/team/agent-team.js +98 -0
  30. package/dist/agent/team/agent-team.js.map +1 -0
  31. package/dist/agent/team/errors.js +9 -0
  32. package/dist/agent/team/errors.js.map +1 -0
  33. package/dist/agent/team/index.js +104 -0
  34. package/dist/agent/team/index.js.map +1 -0
  35. package/dist/agent/team/types.js +1 -0
  36. package/dist/agent/team/types.js.map +1 -0
  37. package/dist/agent/tool-catalog.js +37 -0
  38. package/dist/agent/tool-catalog.js.map +1 -0
  39. package/dist/agent/tool-state.js +11 -0
  40. package/dist/agent/tool-state.js.map +1 -0
  41. package/dist/agent/types.js +1 -0
  42. package/dist/agent/types.js.map +1 -0
  43. package/dist/agent/vector-context.js +10 -0
  44. package/dist/agent/vector-context.js.map +1 -0
  45. package/dist/{agent-DTmzs1Qr.d.ts → agent-C9VhENdj.d.ts} +2 -3
  46. package/dist/{chunk-I3Q7XSBB.js → chunk-23LRXKQX.js} +6 -4
  47. package/dist/{chunk-I3Q7XSBB.js.map → chunk-23LRXKQX.js.map} +1 -1
  48. package/dist/{chunk-YK4WAAS4.js → chunk-2NLINXRF.js} +1 -1
  49. package/dist/{chunk-SPD4XVR7.js → chunk-2XSMGVBG.js} +1 -1
  50. package/dist/chunk-3J2CSVPR.js +1 -0
  51. package/dist/chunk-3J2CSVPR.js.map +1 -0
  52. package/dist/chunk-3P3YVJ7V.js +1 -0
  53. package/dist/chunk-3P3YVJ7V.js.map +1 -0
  54. package/dist/chunk-3TAQXJBC.js +107 -0
  55. package/dist/chunk-3TAQXJBC.js.map +1 -0
  56. package/dist/chunk-47NTHIVB.js +76 -0
  57. package/dist/chunk-47NTHIVB.js.map +1 -0
  58. package/dist/chunk-4AW2633B.js +9 -0
  59. package/dist/chunk-4AW2633B.js.map +1 -0
  60. package/dist/{chunk-3XQGVDU5.js → chunk-4C7AXYOM.js} +1 -1
  61. package/dist/{chunk-IZNOP6JG.js → chunk-4FIVU53H.js} +1 -1
  62. package/dist/chunk-4ITAV7YA.js +1 -0
  63. package/dist/chunk-4ITAV7YA.js.map +1 -0
  64. package/dist/{chunk-7JLAIN6E.js → chunk-4ONUNWGC.js} +2 -2
  65. package/dist/chunk-4S4OECPW.js +158 -0
  66. package/dist/chunk-4S4OECPW.js.map +1 -0
  67. package/dist/chunk-4UUIGAIX.js +1 -0
  68. package/dist/chunk-4UUIGAIX.js.map +1 -0
  69. package/dist/chunk-53TPAXYR.js +1 -0
  70. package/dist/chunk-53TPAXYR.js.map +1 -0
  71. package/dist/chunk-54ZZJRP2.js +57 -0
  72. package/dist/chunk-54ZZJRP2.js.map +1 -0
  73. package/dist/chunk-5FCZ64HM.js +112 -0
  74. package/dist/chunk-5FCZ64HM.js.map +1 -0
  75. package/dist/chunk-5I2NVRHC.js +146 -0
  76. package/dist/chunk-5I2NVRHC.js.map +1 -0
  77. package/dist/chunk-5IURMWFN.js +53 -0
  78. package/dist/chunk-5IURMWFN.js.map +1 -0
  79. package/dist/chunk-5M6GTA3T.js +1 -0
  80. package/dist/chunk-5M6GTA3T.js.map +1 -0
  81. package/dist/chunk-5N5W7CX7.js +18 -0
  82. package/dist/chunk-5N5W7CX7.js.map +1 -0
  83. package/dist/chunk-5S7T2URX.js +1 -0
  84. package/dist/chunk-5S7T2URX.js.map +1 -0
  85. package/dist/chunk-5V533R7F.js +19 -0
  86. package/dist/chunk-5V533R7F.js.map +1 -0
  87. package/dist/chunk-5WLIHNNJ.js +56 -0
  88. package/dist/chunk-5WLIHNNJ.js.map +1 -0
  89. package/dist/chunk-6BTJC3ES.js +37 -0
  90. package/dist/chunk-6BTJC3ES.js.map +1 -0
  91. package/dist/chunk-6N4ENZO4.js +24 -0
  92. package/dist/chunk-6N4ENZO4.js.map +1 -0
  93. package/dist/{chunk-4UQALF5Y.js → chunk-6RQYWZI3.js} +2 -36
  94. package/dist/chunk-6RQYWZI3.js.map +1 -0
  95. package/dist/chunk-6TAWRKFK.js +86 -0
  96. package/dist/chunk-6TAWRKFK.js.map +1 -0
  97. package/dist/chunk-72LBHKYP.js +236 -0
  98. package/dist/chunk-72LBHKYP.js.map +1 -0
  99. package/dist/chunk-7F53DOML.js +53 -0
  100. package/dist/chunk-7F53DOML.js.map +1 -0
  101. package/dist/chunk-7LBPRXZP.js +1 -0
  102. package/dist/chunk-7LBPRXZP.js.map +1 -0
  103. package/dist/chunk-A7BXVZXZ.js +25 -0
  104. package/dist/chunk-A7BXVZXZ.js.map +1 -0
  105. package/dist/chunk-AOG6KSV4.js +107 -0
  106. package/dist/chunk-AOG6KSV4.js.map +1 -0
  107. package/dist/chunk-B47EXUHL.js +67 -0
  108. package/dist/chunk-B47EXUHL.js.map +1 -0
  109. package/dist/chunk-B5JQDR33.js +14 -0
  110. package/dist/chunk-B5JQDR33.js.map +1 -0
  111. package/dist/chunk-BDDC72GF.js +189 -0
  112. package/dist/chunk-BDDC72GF.js.map +1 -0
  113. package/dist/chunk-BDKFFFVX.js +342 -0
  114. package/dist/chunk-BDKFFFVX.js.map +1 -0
  115. package/dist/{chunk-QGX73TSQ.js → chunk-BONQTXRQ.js} +3 -12
  116. package/dist/chunk-BONQTXRQ.js.map +1 -0
  117. package/dist/chunk-BUPC72Y2.js +1007 -0
  118. package/dist/chunk-BUPC72Y2.js.map +1 -0
  119. package/dist/chunk-CKKNO4XB.js +70 -0
  120. package/dist/chunk-CKKNO4XB.js.map +1 -0
  121. package/dist/chunk-CX7ZVTO5.js +22 -0
  122. package/dist/chunk-CX7ZVTO5.js.map +1 -0
  123. package/dist/chunk-DU4WA6LQ.js +1 -0
  124. package/dist/chunk-DU4WA6LQ.js.map +1 -0
  125. package/dist/chunk-EJR6VVB3.js +63 -0
  126. package/dist/chunk-EJR6VVB3.js.map +1 -0
  127. package/dist/chunk-EKZRAWBP.js +110 -0
  128. package/dist/chunk-EKZRAWBP.js.map +1 -0
  129. package/dist/chunk-ENZ2XX27.js +26 -0
  130. package/dist/chunk-ENZ2XX27.js.map +1 -0
  131. package/dist/chunk-EOAJBBII.js +1 -0
  132. package/dist/chunk-EOAJBBII.js.map +1 -0
  133. package/dist/chunk-ERN7P6Q4.js +1 -0
  134. package/dist/chunk-ERN7P6Q4.js.map +1 -0
  135. package/dist/chunk-ESOFEAYK.js +57 -0
  136. package/dist/chunk-ESOFEAYK.js.map +1 -0
  137. package/dist/chunk-ETYB5JO6.js +175 -0
  138. package/dist/chunk-ETYB5JO6.js.map +1 -0
  139. package/dist/chunk-EZR5AV3J.js +74 -0
  140. package/dist/chunk-EZR5AV3J.js.map +1 -0
  141. package/dist/chunk-F2OKLHGB.js +9 -0
  142. package/dist/chunk-F2OKLHGB.js.map +1 -0
  143. package/dist/chunk-F3E2RLC7.js +342 -0
  144. package/dist/chunk-F3E2RLC7.js.map +1 -0
  145. package/dist/chunk-FAPIZJS2.js +54 -0
  146. package/dist/chunk-FAPIZJS2.js.map +1 -0
  147. package/dist/{chunk-2QZJTG2E.js → chunk-G336L2IE.js} +11 -71
  148. package/dist/chunk-G336L2IE.js.map +1 -0
  149. package/dist/chunk-GDJNOZ47.js +1 -0
  150. package/dist/chunk-GDJNOZ47.js.map +1 -0
  151. package/dist/chunk-GDY2Z2SZ.js +83 -0
  152. package/dist/chunk-GDY2Z2SZ.js.map +1 -0
  153. package/dist/chunk-GLMYZ6OA.js +20 -0
  154. package/dist/chunk-GLMYZ6OA.js.map +1 -0
  155. package/dist/{chunk-XEVOC433.js → chunk-GPVXCY5I.js} +2 -73
  156. package/dist/chunk-GPVXCY5I.js.map +1 -0
  157. package/dist/{chunk-KSKST3KP.js → chunk-H3H74RWJ.js} +1 -1
  158. package/dist/chunk-HAAGSIZH.js +89 -0
  159. package/dist/chunk-HAAGSIZH.js.map +1 -0
  160. package/dist/{chunk-K5L7R7XM.js → chunk-HHMLE3TZ.js} +6 -54
  161. package/dist/chunk-HHMLE3TZ.js.map +1 -0
  162. package/dist/{chunk-JLJMVRRE.js → chunk-HP34GRQX.js} +10 -83
  163. package/dist/chunk-HP34GRQX.js.map +1 -0
  164. package/dist/chunk-HTI343NP.js +1 -0
  165. package/dist/chunk-HTI343NP.js.map +1 -0
  166. package/dist/{chunk-T2C3CGDQ.js → chunk-HTI7DZJM.js} +6 -4
  167. package/dist/{chunk-T2C3CGDQ.js.map → chunk-HTI7DZJM.js.map} +1 -1
  168. package/dist/chunk-IDNL6IH4.js +294 -0
  169. package/dist/chunk-IDNL6IH4.js.map +1 -0
  170. package/dist/chunk-IV6YQTY2.js +47 -0
  171. package/dist/chunk-IV6YQTY2.js.map +1 -0
  172. package/dist/chunk-J4SINPUA.js +939 -0
  173. package/dist/chunk-J4SINPUA.js.map +1 -0
  174. package/dist/chunk-J6S6MT7O.js +32 -0
  175. package/dist/chunk-J6S6MT7O.js.map +1 -0
  176. package/dist/chunk-JBQNCUXA.js +34 -0
  177. package/dist/chunk-JBQNCUXA.js.map +1 -0
  178. package/dist/chunk-JMJFK3A4.js +1 -0
  179. package/dist/chunk-JMJFK3A4.js.map +1 -0
  180. package/dist/chunk-JMMZICU7.js +74 -0
  181. package/dist/chunk-JMMZICU7.js.map +1 -0
  182. package/dist/chunk-K4IBS7VB.js +55 -0
  183. package/dist/chunk-K4IBS7VB.js.map +1 -0
  184. package/dist/chunk-KBBQSP4M.js +16 -0
  185. package/dist/chunk-KBBQSP4M.js.map +1 -0
  186. package/dist/chunk-KFAVEL5F.js +68 -0
  187. package/dist/chunk-KFAVEL5F.js.map +1 -0
  188. package/dist/chunk-KITX3HDN.js +17 -0
  189. package/dist/chunk-KITX3HDN.js.map +1 -0
  190. package/dist/chunk-KO5NMTAM.js +1 -0
  191. package/dist/chunk-KO5NMTAM.js.map +1 -0
  192. package/dist/chunk-KY4VXIN2.js +118 -0
  193. package/dist/chunk-KY4VXIN2.js.map +1 -0
  194. package/dist/chunk-KZGSXJKU.js +29 -0
  195. package/dist/chunk-KZGSXJKU.js.map +1 -0
  196. package/dist/chunk-LAIATEUB.js +24 -0
  197. package/dist/chunk-LAIATEUB.js.map +1 -0
  198. package/dist/{chunk-OJBFDBLG.js → chunk-LBYJPMHC.js} +2 -2
  199. package/dist/chunk-LKIABZNR.js +49 -0
  200. package/dist/chunk-LKIABZNR.js.map +1 -0
  201. package/dist/chunk-LQJ4KHMY.js +23 -0
  202. package/dist/chunk-LQJ4KHMY.js.map +1 -0
  203. package/dist/chunk-MEN4AFDZ.js +1 -0
  204. package/dist/chunk-MEN4AFDZ.js.map +1 -0
  205. package/dist/chunk-MHOJJYDK.js +93 -0
  206. package/dist/chunk-MHOJJYDK.js.map +1 -0
  207. package/dist/chunk-MJCMKZFP.js +30 -0
  208. package/dist/chunk-MJCMKZFP.js.map +1 -0
  209. package/dist/chunk-MNYMLWWA.js +168 -0
  210. package/dist/chunk-MNYMLWWA.js.map +1 -0
  211. package/dist/chunk-MT3BLVYN.js +31 -0
  212. package/dist/chunk-MT3BLVYN.js.map +1 -0
  213. package/dist/chunk-NF6WBPFG.js +37 -0
  214. package/dist/chunk-NF6WBPFG.js.map +1 -0
  215. package/dist/chunk-NNEKBZSM.js +66 -0
  216. package/dist/chunk-NNEKBZSM.js.map +1 -0
  217. package/dist/chunk-NPJ2T3L5.js +19 -0
  218. package/dist/chunk-NPJ2T3L5.js.map +1 -0
  219. package/dist/chunk-NVALGVQG.js +150 -0
  220. package/dist/chunk-NVALGVQG.js.map +1 -0
  221. package/dist/chunk-O6DTOCBM.js +355 -0
  222. package/dist/chunk-O6DTOCBM.js.map +1 -0
  223. package/dist/chunk-OJF67RNM.js +1 -0
  224. package/dist/chunk-OJF67RNM.js.map +1 -0
  225. package/dist/chunk-PHLGGRHC.js +89 -0
  226. package/dist/chunk-PHLGGRHC.js.map +1 -0
  227. package/dist/chunk-PIMD4DYG.js +104 -0
  228. package/dist/chunk-PIMD4DYG.js.map +1 -0
  229. package/dist/chunk-PJNE75WC.js +1 -0
  230. package/dist/chunk-PJNE75WC.js.map +1 -0
  231. package/dist/{chunk-J6LVLV6P.js → chunk-PLDJCCVL.js} +1 -1
  232. package/dist/{chunk-3RWESPUG.js → chunk-POXHJF3H.js} +6 -51
  233. package/dist/chunk-POXHJF3H.js.map +1 -0
  234. package/dist/chunk-PPJ7SYQL.js +81 -0
  235. package/dist/chunk-PPJ7SYQL.js.map +1 -0
  236. package/dist/chunk-QHGYCYV6.js +91 -0
  237. package/dist/chunk-QHGYCYV6.js.map +1 -0
  238. package/dist/chunk-QUS6S2NB.js +663 -0
  239. package/dist/chunk-QUS6S2NB.js.map +1 -0
  240. package/dist/chunk-R6722CIU.js +28 -0
  241. package/dist/chunk-R6722CIU.js.map +1 -0
  242. package/dist/chunk-RA4YVN43.js +1 -0
  243. package/dist/chunk-RA4YVN43.js.map +1 -0
  244. package/dist/chunk-RT5LUEO3.js +2339 -0
  245. package/dist/chunk-RT5LUEO3.js.map +1 -0
  246. package/dist/chunk-SC4SUIEY.js +1 -0
  247. package/dist/chunk-SC4SUIEY.js.map +1 -0
  248. package/dist/chunk-SIYZDPVH.js +613 -0
  249. package/dist/chunk-SIYZDPVH.js.map +1 -0
  250. package/dist/chunk-SQAAVYJG.js +12 -0
  251. package/dist/chunk-SQAAVYJG.js.map +1 -0
  252. package/dist/chunk-SXE4J43E.js +59 -0
  253. package/dist/chunk-SXE4J43E.js.map +1 -0
  254. package/dist/{chunk-EFLT7XZD.js → chunk-SYULMZGL.js} +6 -4
  255. package/dist/{chunk-EFLT7XZD.js.map → chunk-SYULMZGL.js.map} +1 -1
  256. package/dist/chunk-T4IAJJUU.js +48 -0
  257. package/dist/chunk-T4IAJJUU.js.map +1 -0
  258. package/dist/chunk-T4KS577P.js +58 -0
  259. package/dist/chunk-T4KS577P.js.map +1 -0
  260. package/dist/chunk-TFIOU6UR.js +78 -0
  261. package/dist/chunk-TFIOU6UR.js.map +1 -0
  262. package/dist/chunk-TIZGADU4.js +375 -0
  263. package/dist/chunk-TIZGADU4.js.map +1 -0
  264. package/dist/chunk-TP3MCUXS.js +1 -0
  265. package/dist/chunk-TP3MCUXS.js.map +1 -0
  266. package/dist/{chunk-JTJU56ZV.js → chunk-UOGM62JL.js} +11 -7
  267. package/dist/{chunk-JTJU56ZV.js.map → chunk-UOGM62JL.js.map} +1 -1
  268. package/dist/chunk-USRKPEQN.js +55 -0
  269. package/dist/chunk-USRKPEQN.js.map +1 -0
  270. package/dist/chunk-UTAB3XQI.js +667 -0
  271. package/dist/chunk-UTAB3XQI.js.map +1 -0
  272. package/dist/chunk-V3FFZWF3.js +182 -0
  273. package/dist/chunk-V3FFZWF3.js.map +1 -0
  274. package/dist/chunk-V4OZ7ISA.js +9 -0
  275. package/dist/chunk-V4OZ7ISA.js.map +1 -0
  276. package/dist/chunk-VZ5ZZBNX.js +139 -0
  277. package/dist/chunk-VZ5ZZBNX.js.map +1 -0
  278. package/dist/{chunk-AHLKV6KP.js → chunk-WN6AVBO4.js} +1 -1
  279. package/dist/chunk-WXR5CWSC.js +1 -0
  280. package/dist/chunk-WXR5CWSC.js.map +1 -0
  281. package/dist/chunk-X6WS3XWL.js +36 -0
  282. package/dist/chunk-X6WS3XWL.js.map +1 -0
  283. package/dist/{chunk-Q5BCNYED.js → chunk-XJRNBTIV.js} +7 -4
  284. package/dist/chunk-XQV3XNVT.js +225 -0
  285. package/dist/chunk-XQV3XNVT.js.map +1 -0
  286. package/dist/chunk-XV3DH5GC.js +58 -0
  287. package/dist/chunk-XV3DH5GC.js.map +1 -0
  288. package/dist/chunk-Y7JTHNCU.js +318 -0
  289. package/dist/chunk-Y7JTHNCU.js.map +1 -0
  290. package/dist/chunk-YWRXOPHC.js +43 -0
  291. package/dist/chunk-YWRXOPHC.js.map +1 -0
  292. package/dist/chunk-YZVFIW5D.js +27 -0
  293. package/dist/chunk-YZVFIW5D.js.map +1 -0
  294. package/dist/chunk-ZHC5CD6J.js +33 -0
  295. package/dist/chunk-ZHC5CD6J.js.map +1 -0
  296. package/dist/chunk-ZPJFXRQZ.js +23 -0
  297. package/dist/chunk-ZPJFXRQZ.js.map +1 -0
  298. package/dist/chunk-ZPXOBQDS.js +57 -0
  299. package/dist/chunk-ZPXOBQDS.js.map +1 -0
  300. package/dist/chunk-ZUFS6R7L.js +155 -0
  301. package/dist/chunk-ZUFS6R7L.js.map +1 -0
  302. package/dist/chunk-ZXLCTQUX.js +62 -0
  303. package/dist/chunk-ZXLCTQUX.js.map +1 -0
  304. package/dist/chunk-ZYXMWEL4.js +59 -0
  305. package/dist/chunk-ZYXMWEL4.js.map +1 -0
  306. package/dist/completion/controls.js +11 -0
  307. package/dist/completion/controls.js.map +1 -0
  308. package/dist/completion/documents.js +9 -0
  309. package/dist/completion/documents.js.map +1 -0
  310. package/dist/completion/generate-completion.js +23 -0
  311. package/dist/completion/generate-completion.js.map +1 -0
  312. package/dist/completion/index.js +23 -12
  313. package/dist/completion/json.js +7 -0
  314. package/dist/completion/json.js.map +1 -0
  315. package/dist/completion/message-schema.js +18 -0
  316. package/dist/completion/message-schema.js.map +1 -0
  317. package/dist/completion/provider-output-error.js +12 -0
  318. package/dist/completion/provider-output-error.js.map +1 -0
  319. package/dist/completion/stream-accumulator.js +10 -0
  320. package/dist/completion/stream-accumulator.js.map +1 -0
  321. package/dist/completion/types.js +28 -0
  322. package/dist/completion/types.js.map +1 -0
  323. package/dist/documents/chunk-text.js +7 -0
  324. package/dist/documents/chunk-text.js.map +1 -0
  325. package/dist/documents/index.js +5 -2
  326. package/dist/documents/text-document.js +8 -0
  327. package/dist/documents/text-document.js.map +1 -0
  328. package/dist/embeddings/distance.js +17 -0
  329. package/dist/embeddings/distance.js.map +1 -0
  330. package/dist/embeddings/embed.js +18 -0
  331. package/dist/embeddings/embed.js.map +1 -0
  332. package/dist/embeddings/index.js +11 -6
  333. package/dist/embeddings/types.js +2 -0
  334. package/dist/embeddings/types.js.map +1 -0
  335. package/dist/evals/advanced-metrics.js +46 -0
  336. package/dist/evals/advanced-metrics.js.map +1 -0
  337. package/dist/evals/agent-target.js +10 -0
  338. package/dist/evals/agent-target.js.map +1 -0
  339. package/dist/evals/cli.js +40 -0
  340. package/dist/evals/cli.js.map +1 -0
  341. package/dist/evals/execution.js +15 -0
  342. package/dist/evals/execution.js.map +1 -0
  343. package/dist/evals/format.js +13 -0
  344. package/dist/evals/format.js.map +1 -0
  345. package/dist/evals/index.d.ts +4 -4
  346. package/dist/evals/index.js +87 -2660
  347. package/dist/evals/index.js.map +1 -1
  348. package/dist/evals/judge.js +27 -0
  349. package/dist/evals/judge.js.map +1 -0
  350. package/dist/evals/metric.js +7 -0
  351. package/dist/evals/metric.js.map +1 -0
  352. package/dist/evals/metrics.js +53 -0
  353. package/dist/evals/metrics.js.map +1 -0
  354. package/dist/evals/outcome.js +7 -0
  355. package/dist/evals/outcome.js.map +1 -0
  356. package/dist/evals/reporting.js +11 -0
  357. package/dist/evals/reporting.js.map +1 -0
  358. package/dist/evals/runner.js +29 -0
  359. package/dist/evals/runner.js.map +1 -0
  360. package/dist/evals/selectors.js +18 -0
  361. package/dist/evals/selectors.js.map +1 -0
  362. package/dist/evals/suite.js +11 -0
  363. package/dist/evals/suite.js.map +1 -0
  364. package/dist/evals/types.js +1 -0
  365. package/dist/evals/types.js.map +1 -0
  366. package/dist/extractor/extractor.js +23 -0
  367. package/dist/extractor/extractor.js.map +1 -0
  368. package/dist/extractor/index.js +16 -7
  369. package/dist/guardrails/actions.js +13 -0
  370. package/dist/guardrails/actions.js.map +1 -0
  371. package/dist/guardrails/index.d.ts +3 -4
  372. package/dist/guardrails/index.js +15 -7
  373. package/dist/guardrails/message.js +9 -0
  374. package/dist/guardrails/message.js.map +1 -0
  375. package/dist/guardrails/policy.js +17 -0
  376. package/dist/guardrails/policy.js.map +1 -0
  377. package/dist/guardrails/runtime.js +11 -0
  378. package/dist/guardrails/runtime.js.map +1 -0
  379. package/dist/guardrails/text.js +9 -0
  380. package/dist/guardrails/text.js.map +1 -0
  381. package/dist/guardrails/types.js +1 -0
  382. package/dist/guardrails/types.js.map +1 -0
  383. package/dist/hooks/control.js +17 -0
  384. package/dist/hooks/control.js.map +1 -0
  385. package/dist/hooks/index.js +19 -0
  386. package/dist/hooks/index.js.map +1 -0
  387. package/dist/hooks/types.js +2 -0
  388. package/dist/hooks/types.js.map +1 -0
  389. package/dist/image-generation/generate-image.js +11 -0
  390. package/dist/image-generation/generate-image.js.map +1 -0
  391. package/dist/image-generation/index.js +7 -4
  392. package/dist/image-generation/types.js +2 -0
  393. package/dist/image-generation/types.js.map +1 -0
  394. package/dist/index.d.ts +5 -7
  395. package/dist/index.js +163 -57
  396. package/dist/internal/abort.js +13 -0
  397. package/dist/internal/abort.js.map +1 -0
  398. package/dist/internal/agent-runtime/agent-run.js +81 -0
  399. package/dist/internal/agent-runtime/agent-run.js.map +1 -0
  400. package/dist/internal/agent-runtime/approval-request.js +1 -0
  401. package/dist/internal/agent-runtime/approval-request.js.map +1 -0
  402. package/dist/internal/agent-runtime/approval-requirement.js +9 -0
  403. package/dist/internal/agent-runtime/approval-requirement.js.map +1 -0
  404. package/dist/internal/agent-runtime/continuation-state.js +26 -0
  405. package/dist/internal/agent-runtime/continuation-state.js.map +1 -0
  406. package/dist/internal/agent-runtime/interaction-suspension.js +25 -0
  407. package/dist/internal/agent-runtime/interaction-suspension.js.map +1 -0
  408. package/dist/internal/agent-runtime/memory-scope.js +8 -0
  409. package/dist/internal/agent-runtime/memory-scope.js.map +1 -0
  410. package/dist/internal/agent-runtime/memory.js +24 -0
  411. package/dist/internal/agent-runtime/memory.js.map +1 -0
  412. package/dist/internal/agent-runtime/prepared-tool-call.js +19 -0
  413. package/dist/internal/agent-runtime/prepared-tool-call.js.map +1 -0
  414. package/dist/internal/agent-runtime/retrieval.js +35 -0
  415. package/dist/internal/agent-runtime/retrieval.js.map +1 -0
  416. package/dist/internal/agent-runtime/run-options.js +9 -0
  417. package/dist/internal/agent-runtime/run-options.js.map +1 -0
  418. package/dist/internal/agent-runtime/run-validation.js +9 -0
  419. package/dist/internal/agent-runtime/run-validation.js.map +1 -0
  420. package/dist/internal/agent-runtime/stream-events.js +11 -0
  421. package/dist/internal/agent-runtime/stream-events.js.map +1 -0
  422. package/dist/internal/agent-runtime/structured-output.js +13 -0
  423. package/dist/internal/agent-runtime/structured-output.js.map +1 -0
  424. package/dist/internal/agent-runtime/tool-execution.js +55 -0
  425. package/dist/internal/agent-runtime/tool-execution.js.map +1 -0
  426. package/dist/internal/agent.d.ts +5 -5
  427. package/dist/internal/agent.js +93 -57
  428. package/dist/internal/agent.js.map +1 -1
  429. package/dist/internal/async-queue.js +7 -0
  430. package/dist/internal/async-queue.js.map +1 -0
  431. package/dist/internal/completion-request.js +11 -0
  432. package/dist/internal/completion-request.js.map +1 -0
  433. package/dist/internal/concurrency.js +7 -0
  434. package/dist/internal/concurrency.js.map +1 -0
  435. package/dist/internal/json-object.js +8 -0
  436. package/dist/internal/json-object.js.map +1 -0
  437. package/dist/internal/rag-text.js +7 -0
  438. package/dist/internal/rag-text.js.map +1 -0
  439. package/dist/internal/record.js +7 -0
  440. package/dist/internal/record.js.map +1 -0
  441. package/dist/internal/team-runtime/coordination.js +12 -0
  442. package/dist/internal/team-runtime/coordination.js.map +1 -0
  443. package/dist/internal/team-runtime/member.js +26 -0
  444. package/dist/internal/team-runtime/member.js.map +1 -0
  445. package/dist/internal/team-runtime/policy.js +7 -0
  446. package/dist/internal/team-runtime/policy.js.map +1 -0
  447. package/dist/internal/team-runtime/run.js +95 -0
  448. package/dist/internal/team-runtime/run.js.map +1 -0
  449. package/dist/internal/team-runtime/stream.js +9 -0
  450. package/dist/internal/team-runtime/stream.js.map +1 -0
  451. package/dist/internal/team-runtime/tools.js +17 -0
  452. package/dist/internal/team-runtime/tools.js.map +1 -0
  453. package/dist/internal/type-utils.js +1 -0
  454. package/dist/internal/type-utils.js.map +1 -0
  455. package/dist/internal/vector-search-options.js +9 -0
  456. package/dist/internal/vector-search-options.js.map +1 -0
  457. package/dist/mcp/index.js +3 -1
  458. package/dist/mcp/tool.js +7 -0
  459. package/dist/mcp/tool.js.map +1 -0
  460. package/dist/mcp/types.js +2 -0
  461. package/dist/mcp/types.js.map +1 -0
  462. package/dist/memory/assert.js +11 -0
  463. package/dist/memory/assert.js.map +1 -0
  464. package/dist/memory/compaction.js +26 -0
  465. package/dist/memory/compaction.js.map +1 -0
  466. package/dist/memory/errors.js +9 -0
  467. package/dist/memory/errors.js.map +1 -0
  468. package/dist/memory/index.js +23 -10
  469. package/dist/memory/options.js +10 -0
  470. package/dist/memory/options.js.map +1 -0
  471. package/dist/memory/scope-key.js +7 -0
  472. package/dist/memory/scope-key.js.map +1 -0
  473. package/dist/memory/types.js +2 -0
  474. package/dist/memory/types.js.map +1 -0
  475. package/dist/{types-CRda8x7p.d.ts → middleware-CWjnMbiH.d.ts} +64 -5
  476. package/dist/model-call-options.js +1 -0
  477. package/dist/model-call-options.js.map +1 -0
  478. package/dist/model-listing/errors.js +7 -0
  479. package/dist/model-listing/errors.js.map +1 -0
  480. package/dist/model-listing/index.js +4 -13
  481. package/dist/model-listing/index.js.map +1 -1
  482. package/dist/model-listing/types.js +2 -0
  483. package/dist/model-listing/types.js.map +1 -0
  484. package/dist/observability/group.js +30 -0
  485. package/dist/observability/group.js.map +1 -0
  486. package/dist/observability/index.d.ts +4 -6
  487. package/dist/observability/index.js +16 -8
  488. package/dist/observability/snapshot.js +7 -0
  489. package/dist/observability/snapshot.js.map +1 -0
  490. package/dist/observability/types.js +1 -0
  491. package/dist/observability/types.js.map +1 -0
  492. package/dist/pipeline/errors.js +9 -0
  493. package/dist/pipeline/errors.js.map +1 -0
  494. package/dist/pipeline/graph.js +21 -0
  495. package/dist/pipeline/graph.js.map +1 -0
  496. package/dist/pipeline/index.d.ts +4 -6
  497. package/dist/pipeline/index.js +27 -805
  498. package/dist/pipeline/index.js.map +1 -1
  499. package/dist/pipeline/observability.js +15 -0
  500. package/dist/pipeline/observability.js.map +1 -0
  501. package/dist/pipeline/pipeline.js +30 -0
  502. package/dist/pipeline/pipeline.js.map +1 -0
  503. package/dist/pipeline/runtime.js +17 -0
  504. package/dist/pipeline/runtime.js.map +1 -0
  505. package/dist/pipeline/types.js +1 -0
  506. package/dist/pipeline/types.js.map +1 -0
  507. package/dist/retry.js +20 -0
  508. package/dist/retry.js.map +1 -0
  509. package/dist/schema/index.js +1 -0
  510. package/dist/schema/index.js.map +1 -0
  511. package/dist/schema/zod-schema.js +7 -0
  512. package/dist/schema/zod-schema.js.map +1 -0
  513. package/dist/skills/index.js +41 -12
  514. package/dist/skills/instructions.js +7 -0
  515. package/dist/skills/instructions.js.map +1 -0
  516. package/dist/skills/load.js +39 -0
  517. package/dist/skills/load.js.map +1 -0
  518. package/dist/skills/local.js +9 -0
  519. package/dist/skills/local.js.map +1 -0
  520. package/dist/skills/tools.js +37 -0
  521. package/dist/skills/tools.js.map +1 -0
  522. package/dist/skills/types.js +7 -0
  523. package/dist/skills/types.js.map +1 -0
  524. package/dist/speech-generation/generate-speech.js +11 -0
  525. package/dist/speech-generation/generate-speech.js.map +1 -0
  526. package/dist/speech-generation/index.js +7 -4
  527. package/dist/speech-generation/types.js +2 -0
  528. package/dist/speech-generation/types.js.map +1 -0
  529. package/dist/streaming/index.js +4 -37
  530. package/dist/streaming/index.js.map +1 -1
  531. package/dist/streaming/readable-stream.js +8 -0
  532. package/dist/streaming/readable-stream.js.map +1 -0
  533. package/dist/{text-CmjXxakS.d.ts → text-GbW4WYMg.d.ts} +1 -1
  534. package/dist/tool/create-tool.js +14 -0
  535. package/dist/tool/create-tool.js.map +1 -0
  536. package/dist/tool/dynamic-tools.js +35 -0
  537. package/dist/tool/dynamic-tools.js.map +1 -0
  538. package/dist/tool/errors.js +11 -0
  539. package/dist/tool/errors.js.map +1 -0
  540. package/dist/tool/index.d.ts +3 -2
  541. package/dist/tool/index.js +41 -15
  542. package/dist/tool/middleware.js +7 -0
  543. package/dist/tool/middleware.js.map +1 -0
  544. package/dist/tool/question-tool.js +17 -0
  545. package/dist/tool/question-tool.js.map +1 -0
  546. package/dist/tool/skill-tool-marker.js +9 -0
  547. package/dist/tool/skill-tool-marker.js.map +1 -0
  548. package/dist/tool/think-tool.js +15 -0
  549. package/dist/tool/think-tool.js.map +1 -0
  550. package/dist/tool/tool.js +17 -0
  551. package/dist/tool/tool.js.map +1 -0
  552. package/dist/transcription/index.js +7 -4
  553. package/dist/transcription/transcribe.js +11 -0
  554. package/dist/transcription/transcribe.js.map +1 -0
  555. package/dist/transcription/types.js +2 -0
  556. package/dist/transcription/types.js.map +1 -0
  557. package/dist/{types-h0EL6Xn0.d.ts → types-Bqw0AuFl.d.ts} +6 -2
  558. package/dist/vector-store/filter.js +9 -0
  559. package/dist/vector-store/filter.js.map +1 -0
  560. package/dist/vector-store/index.js +31 -11
  561. package/dist/vector-store/ingest.js +19 -0
  562. package/dist/vector-store/ingest.js.map +1 -0
  563. package/dist/vector-store/lsh.js +7 -0
  564. package/dist/vector-store/lsh.js.map +1 -0
  565. package/dist/vector-store/retrieve.js +15 -0
  566. package/dist/vector-store/retrieve.js.map +1 -0
  567. package/dist/vector-store/types.js +1 -0
  568. package/dist/vector-store/types.js.map +1 -0
  569. package/package.json +2 -2
  570. package/dist/chunk-2QZJTG2E.js.map +0 -1
  571. package/dist/chunk-3RWESPUG.js.map +0 -1
  572. package/dist/chunk-4UQALF5Y.js.map +0 -1
  573. package/dist/chunk-AZB6N7P4.js +0 -320
  574. package/dist/chunk-AZB6N7P4.js.map +0 -1
  575. package/dist/chunk-JLJMVRRE.js.map +0 -1
  576. package/dist/chunk-K5L7R7XM.js.map +0 -1
  577. package/dist/chunk-OI3LSMJG.js +0 -1545
  578. package/dist/chunk-OI3LSMJG.js.map +0 -1
  579. package/dist/chunk-QGX73TSQ.js.map +0 -1
  580. package/dist/chunk-XC3LVC4K.js +0 -753
  581. package/dist/chunk-XC3LVC4K.js.map +0 -1
  582. package/dist/chunk-XEVOC433.js.map +0 -1
  583. package/dist/chunk-XSV5C4R5.js +0 -400
  584. package/dist/chunk-XSV5C4R5.js.map +0 -1
  585. package/dist/chunk-XU54PLSD.js +0 -4786
  586. package/dist/chunk-XU54PLSD.js.map +0 -1
  587. package/dist/middleware-mY_lpjDp.d.ts +0 -59
  588. package/dist/type-utils-CtHVDRn_.d.ts +0 -6
  589. /package/dist/{chunk-YK4WAAS4.js.map → chunk-2NLINXRF.js.map} +0 -0
  590. /package/dist/{chunk-SPD4XVR7.js.map → chunk-2XSMGVBG.js.map} +0 -0
  591. /package/dist/{chunk-3XQGVDU5.js.map → chunk-4C7AXYOM.js.map} +0 -0
  592. /package/dist/{chunk-IZNOP6JG.js.map → chunk-4FIVU53H.js.map} +0 -0
  593. /package/dist/{chunk-7JLAIN6E.js.map → chunk-4ONUNWGC.js.map} +0 -0
  594. /package/dist/{chunk-KSKST3KP.js.map → chunk-H3H74RWJ.js.map} +0 -0
  595. /package/dist/{chunk-OJBFDBLG.js.map → chunk-LBYJPMHC.js.map} +0 -0
  596. /package/dist/{chunk-J6LVLV6P.js.map → chunk-PLDJCCVL.js.map} +0 -0
  597. /package/dist/{chunk-AHLKV6KP.js.map → chunk-WN6AVBO4.js.map} +0 -0
  598. /package/dist/{chunk-Q5BCNYED.js.map → chunk-XJRNBTIV.js.map} +0 -0
@@ -0,0 +1,375 @@
1
+ import {
2
+ snapshotPipelineObservability,
3
+ startPipelineRunObservers
4
+ } from "./chunk-ETYB5JO6.js";
5
+ import {
6
+ childContext,
7
+ combineAbortSignals,
8
+ pipelineAbortError,
9
+ runNode,
10
+ stageContext
11
+ } from "./chunk-EKZRAWBP.js";
12
+ import {
13
+ PipelineAgentSuspensionError
14
+ } from "./chunk-R6722CIU.js";
15
+ import {
16
+ appendComposedGraph,
17
+ appendParallelBranch,
18
+ appendStageNode,
19
+ cloneGraph,
20
+ initialPipelineState,
21
+ withOutputNode,
22
+ withTerminalPaths
23
+ } from "./chunk-V3FFZWF3.js";
24
+ import {
25
+ extract
26
+ } from "./chunk-UOGM62JL.js";
27
+ import {
28
+ mapWithConcurrency
29
+ } from "./chunk-4FIVU53H.js";
30
+ import {
31
+ throwIfAborted
32
+ } from "./chunk-USRKPEQN.js";
33
+ import {
34
+ AgentRunBlockedError
35
+ } from "./chunk-WN6AVBO4.js";
36
+
37
+ // src/pipeline/pipeline.ts
38
+ import { z } from "zod";
39
+ var internalPipelineOptions = /* @__PURE__ */ Symbol("internal-pipeline-options");
40
+ var Pipeline = class {
41
+ id;
42
+ name;
43
+ description;
44
+ metadata;
45
+ observability;
46
+ executor;
47
+ state;
48
+ constructor(options) {
49
+ if (isInternalPipelineOptions(options)) {
50
+ this.executor = options[internalPipelineOptions].executor;
51
+ this.state = options[internalPipelineOptions].state;
52
+ this.observability = options[internalPipelineOptions].observability;
53
+ } else {
54
+ const id = normalizePipelineId(options.id);
55
+ if (!isZodSchema(options.inputSchema)) {
56
+ throw new TypeError("Pipeline inputSchema must be a Zod schema.");
57
+ }
58
+ const inputSchema = options.inputSchema;
59
+ this.executor = (async (input, context) => {
60
+ throwIfAborted(context.abortSignal);
61
+ return inputSchema.parseAsync(input);
62
+ });
63
+ this.state = initialPipelineState({
64
+ id,
65
+ name: options.name,
66
+ description: options.description,
67
+ metadata: options.metadata
68
+ });
69
+ this.observability = snapshotPipelineObservability(options.observability);
70
+ }
71
+ const graph = this.state.graph;
72
+ this.id = graph.id;
73
+ this.name = graph.name;
74
+ this.description = graph.description;
75
+ this.metadata = graph.metadata;
76
+ }
77
+ step(options) {
78
+ const next = appendStageNode(this.state, "step", options);
79
+ const executor = (async (input, context, pathPrefix) => {
80
+ const value = await this.execute(input, context, pathPrefix);
81
+ const path = [...pathPrefix, next.node.id];
82
+ return await runNode(
83
+ context,
84
+ next.node,
85
+ path,
86
+ value,
87
+ () => options.run(stageContext(value, context))
88
+ );
89
+ });
90
+ return this.derive(executor, next.state);
91
+ }
92
+ compose(options) {
93
+ const boundary = appendStageNode(this.state, "pipeline", options, {
94
+ defaultLabel: options.pipeline.name ?? options.pipeline.id,
95
+ pipelineId: options.pipeline.id
96
+ });
97
+ const state = appendComposedGraph(boundary.state, boundary.node, options.pipeline.graph());
98
+ const executor = (async (input, context, pathPrefix) => {
99
+ const value = await this.execute(input, context, pathPrefix);
100
+ const path = [...pathPrefix, boundary.node.id];
101
+ return await runNode(
102
+ context,
103
+ boundary.node,
104
+ path,
105
+ value,
106
+ () => options.pipeline.execute(value, context, path)
107
+ );
108
+ });
109
+ return this.derive(executor, state);
110
+ }
111
+ parallel(options) {
112
+ const branchEntries = normalizeParallelBranches(options.branches);
113
+ if (branchEntries.length === 0) {
114
+ throw new TypeError("Pipeline parallel branches must not be empty.");
115
+ }
116
+ const parallel = appendStageNode(this.state, "parallel", options, {
117
+ defaultLabel: `${branchEntries.length} parallel branches`
118
+ });
119
+ let nextState = parallel.state;
120
+ const branchNodes = /* @__PURE__ */ new Map();
121
+ const terminalPaths = [];
122
+ for (const [key, branch] of branchEntries) {
123
+ const appended = appendParallelBranch(nextState, parallel.node, key, branch.graph());
124
+ nextState = appended.state;
125
+ branchNodes.set(key, appended.node);
126
+ terminalPaths.push(...appended.terminalPaths);
127
+ }
128
+ nextState = withTerminalPaths(nextState, terminalPaths);
129
+ return this.derive(async (input, context, pathPrefix) => {
130
+ const value = await this.execute(input, context, pathPrefix);
131
+ const parallelPath = [...pathPrefix, parallel.node.id];
132
+ return runNode(context, parallel.node, parallelPath, value, async () => {
133
+ const controller = new AbortController();
134
+ const combined = combineAbortSignals(context.abortSignal, controller.signal);
135
+ const branchContext = childContext(context, combined.signal);
136
+ let firstError;
137
+ const promises = branchEntries.map(async ([key, branch]) => {
138
+ const node = branchNodes.get(key);
139
+ const path = [...parallelPath, node.id];
140
+ try {
141
+ const output = await runNode(
142
+ branchContext,
143
+ node,
144
+ path,
145
+ value,
146
+ () => branch.execute(value, branchContext, path)
147
+ );
148
+ return [key, output];
149
+ } catch (error) {
150
+ if (firstError === void 0) firstError = error;
151
+ if (!controller.signal.aborted) controller.abort(error);
152
+ throw error;
153
+ }
154
+ });
155
+ const settled = await Promise.allSettled(promises);
156
+ combined.dispose();
157
+ if (context.abortSignal?.aborted === true) {
158
+ throw pipelineAbortError(context.abortSignal);
159
+ }
160
+ if (firstError !== void 0) throw firstError;
161
+ return Object.fromEntries(
162
+ settled.map(
163
+ (result) => result.value
164
+ )
165
+ );
166
+ });
167
+ }, nextState);
168
+ }
169
+ agent(options) {
170
+ if (options.suspension !== "reject") {
171
+ throw new TypeError('Pipeline Agent stages require suspension: "reject".');
172
+ }
173
+ const next = appendStageNode(this.state, "agent", options, {
174
+ defaultLabel: options.agent.name ?? options.agent.id,
175
+ agentId: options.agent.id,
176
+ agentName: options.agent.name
177
+ });
178
+ return this.derive(async (input, context, pathPrefix) => {
179
+ const value = await this.execute(input, context, pathPrefix);
180
+ const path = [...pathPrefix, next.node.id];
181
+ return runNode(context, next.node, path, value, async (stageTrace) => {
182
+ const request = await options.request(stageContext(value, context));
183
+ const response = await options.agent.generate({
184
+ ...request,
185
+ trace: withPipelineParentTrace(
186
+ request.trace,
187
+ stageTrace,
188
+ options.agent.observability?.primaryTrace
189
+ ),
190
+ abortSignal: context.abortSignal
191
+ });
192
+ if (response.type === "interaction") {
193
+ throw new PipelineAgentSuspensionError(response);
194
+ }
195
+ if (response.type === "blocked") {
196
+ throw new AgentRunBlockedError(response);
197
+ }
198
+ return response.output;
199
+ });
200
+ }, next.state);
201
+ }
202
+ extract(options) {
203
+ const next = appendStageNode(this.state, "extractor", options);
204
+ return this.derive(async (input, context, pathPrefix) => {
205
+ const value = await this.execute(input, context, pathPrefix);
206
+ const path = [...pathPrefix, next.node.id];
207
+ return runNode(context, next.node, path, value, async () => {
208
+ const text = await options.text(stageContext(value, context));
209
+ const result = await extract({
210
+ model: options.model,
211
+ text,
212
+ outputSchema: options.outputSchema,
213
+ instructions: options.instructions,
214
+ retries: options.retries,
215
+ temperature: options.temperature,
216
+ maxTokens: options.maxTokens,
217
+ providerOptions: options.providerOptions,
218
+ abortSignal: context.abortSignal
219
+ });
220
+ return result.output;
221
+ });
222
+ }, next.state);
223
+ }
224
+ async run(options) {
225
+ const runId = normalizeRunId(options.runId ?? globalThis.crypto.randomUUID());
226
+ const startedAt = Date.now();
227
+ const observability = await startPipelineRunObservers(
228
+ this.observability?.observers ?? {},
229
+ {
230
+ runId,
231
+ pipelineId: this.id,
232
+ pipelineName: this.name,
233
+ pipelineDescription: this.description,
234
+ pipelineMetadata: this.metadata,
235
+ runMetadata: options.metadata,
236
+ trace: options.trace,
237
+ input: options.input
238
+ },
239
+ {
240
+ primaryTrace: this.observability?.primaryTrace,
241
+ errorPolicy: this.observability?.errorPolicy ?? "ignore"
242
+ }
243
+ );
244
+ const context = {
245
+ runId,
246
+ pipelineId: this.id,
247
+ runMetadata: options.metadata,
248
+ abortSignal: options.abortSignal,
249
+ observer: options.observer,
250
+ failOnObserverError: options.failOnObserverError === true,
251
+ observability
252
+ };
253
+ try {
254
+ throwIfAborted(context.abortSignal);
255
+ const output = await this.execute(options.input, context, []);
256
+ throwIfAborted(context.abortSignal);
257
+ await observability.end({
258
+ runId,
259
+ pipelineId: this.id,
260
+ output,
261
+ durationMs: Date.now() - startedAt
262
+ });
263
+ return observability.trace === void 0 ? { runId, output } : { runId, output, trace: observability.trace };
264
+ } catch (error) {
265
+ await observability.error({
266
+ runId,
267
+ pipelineId: this.id,
268
+ status: context.abortSignal?.aborted === true ? "cancelled" : "failed",
269
+ error,
270
+ durationMs: Date.now() - startedAt
271
+ });
272
+ throw error;
273
+ }
274
+ }
275
+ async runBatch(options) {
276
+ throwIfAborted(options.abortSignal);
277
+ return mapWithConcurrency([...options.inputs], options.concurrency, async (input) => {
278
+ const runId = globalThis.crypto.randomUUID();
279
+ try {
280
+ const result = await this.run({
281
+ input,
282
+ runId,
283
+ metadata: options.metadata,
284
+ trace: options.trace,
285
+ abortSignal: options.abortSignal,
286
+ observer: options.observer,
287
+ failOnObserverError: options.failOnObserverError
288
+ });
289
+ return { status: "completed", ...result };
290
+ } catch (error) {
291
+ if (options.abortSignal?.aborted === true) {
292
+ throw pipelineAbortError(options.abortSignal);
293
+ }
294
+ return { status: "failed", runId, error };
295
+ }
296
+ });
297
+ }
298
+ graph() {
299
+ return cloneGraph(withOutputNode(this.state));
300
+ }
301
+ derive(executor, state) {
302
+ return createDerivedPipeline(executor, state, this.observability);
303
+ }
304
+ async execute(input, context, pathPrefix) {
305
+ throwIfAborted(context.abortSignal);
306
+ return await this.executor(input, context, pathPrefix);
307
+ }
308
+ };
309
+ function createDerivedPipeline(executor, state, observability) {
310
+ const options = {
311
+ [internalPipelineOptions]: { executor, state, observability }
312
+ };
313
+ return new Pipeline(options);
314
+ }
315
+ function withPipelineParentTrace(trace, parent, agentPrimaryTrace) {
316
+ if (parent?.traceId === void 0) return trace;
317
+ if (parent.observer !== agentPrimaryTrace) return trace;
318
+ if (trace?.traceId !== void 0 && trace.traceId !== parent.traceId) return trace;
319
+ return {
320
+ ...trace,
321
+ traceId: parent.traceId,
322
+ ...trace?.parentObservationId !== void 0 || parent.observationId === void 0 ? {} : { parentObservationId: parent.observationId }
323
+ };
324
+ }
325
+ function isInternalPipelineOptions(options) {
326
+ return internalPipelineOptions in options;
327
+ }
328
+ function isZodSchema(value) {
329
+ return value instanceof z.ZodType;
330
+ }
331
+ function normalizePipelineId(id) {
332
+ if (typeof id !== "string") {
333
+ throw new TypeError("Pipeline id must be a string.");
334
+ }
335
+ const normalized = id.trim();
336
+ if (normalized.length === 0) {
337
+ throw new TypeError("Pipeline id must be a non-empty string.");
338
+ }
339
+ return normalized;
340
+ }
341
+ function normalizeRunId(runId) {
342
+ if (typeof runId !== "string") {
343
+ throw new TypeError("Pipeline runId must be a string.");
344
+ }
345
+ const normalized = runId.trim();
346
+ if (normalized.length === 0) {
347
+ throw new TypeError("Pipeline runId must be a non-empty string.");
348
+ }
349
+ return normalized;
350
+ }
351
+ function normalizeParallelBranches(branches) {
352
+ const entries = [];
353
+ const ids = /* @__PURE__ */ new Set();
354
+ for (const key of Object.keys(branches)) {
355
+ const pipeline = branches[key];
356
+ const id = key.trim();
357
+ if (id.length === 0) {
358
+ throw new TypeError("Pipeline parallel branch id must be a non-empty string.");
359
+ }
360
+ if (ids.has(id)) {
361
+ throw new TypeError(`Pipeline parallel branch id "${id}" is already registered.`);
362
+ }
363
+ ids.add(id);
364
+ if (id !== key) {
365
+ throw new TypeError("Pipeline parallel branch ids must not contain surrounding whitespace.");
366
+ }
367
+ entries.push([id, pipeline]);
368
+ }
369
+ return entries;
370
+ }
371
+
372
+ export {
373
+ Pipeline
374
+ };
375
+ //# sourceMappingURL=chunk-TIZGADU4.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["../src/pipeline/pipeline.ts"],"sourcesContent":["import { z } from \"zod\";\nimport type { Agent } from \"../agent/agent\";\nimport { AgentRunBlockedError } from \"../agent/errors\";\nimport type { AgentInput, AgentRunOptions, AgentRunSettings } from \"../agent/run-types\";\nimport type { CompletionModel, CompletionModelControlsOf, JsonObject } from \"../completion\";\nimport { type ExtractOptions, extract as extractData } from \"../extractor\";\nimport { throwIfAborted } from \"../internal/abort\";\nimport { mapWithConcurrency } from \"../internal/concurrency\";\nimport type { AgentTraceOptions } from \"../observability\";\nimport { PipelineAgentSuspensionError } from \"./errors\";\nimport {\n appendComposedGraph,\n appendParallelBranch,\n appendStageNode,\n cloneGraph,\n initialPipelineState,\n withOutputNode,\n withTerminalPaths,\n} from \"./graph\";\nimport { snapshotPipelineObservability, startPipelineRunObservers } from \"./observability\";\nimport {\n childContext,\n combineAbortSignals,\n pipelineAbortError,\n runNode,\n stageContext,\n} from \"./runtime\";\nimport type {\n ParallelOutput,\n PipelineBatchItem,\n PipelineBatchOptions,\n PipelineExecutor,\n PipelineGraph,\n PipelineGraphNode,\n PipelineNodePath,\n PipelineOptions,\n PipelineRunContext,\n PipelineRunOptions,\n PipelineRunResult,\n PipelineStageContext,\n PipelineStageMetadata,\n PipelineState,\n PipelineTraceInfo,\n} from \"./types\";\n\nconst internalPipelineOptions = Symbol(\"internal-pipeline-options\");\n\ntype RawResponseOf<Model> =\n Model extends CompletionModel<infer RawResponse> ? RawResponse : unknown;\n\ntype PipelineAgentRequest<Output, Model extends CompletionModel> = AgentInput &\n Omit<\n AgentRunSettings<Output, RawResponseOf<Model>, CompletionModelControlsOf<Model>>,\n \"abortSignal\"\n >;\n\nexport type PipelineStepOptions<Input, Output> = PipelineStageMetadata & {\n run(context: PipelineStageContext<Input>): Output | Promise<Output>;\n};\n\nexport type PipelineComposeOptions<Input, Output> = PipelineStageMetadata & {\n pipeline: Pipeline<Input, Output>;\n};\n\nexport type PipelineParallelOptions<\n Input,\n Branches extends Record<string, Pipeline<Input, unknown>>,\n> = PipelineStageMetadata & {\n branches: Branches;\n};\n\nexport type PipelineAgentOptions<\n Input,\n AgentOutput,\n Model extends CompletionModel,\n> = PipelineStageMetadata & {\n agent: Agent<AgentOutput, Model>;\n request(\n context: PipelineStageContext<Input>,\n ): PipelineAgentRequest<AgentOutput, Model> | Promise<PipelineAgentRequest<AgentOutput, Model>>;\n suspension: \"reject\";\n};\n\nexport type PipelineExtractOptions<\n Input,\n Extracted,\n Model extends CompletionModel,\n> = PipelineStageMetadata &\n Omit<ExtractOptions<Extracted, Model>, \"text\" | \"abortSignal\"> & {\n text(context: PipelineStageContext<Input>): string | Promise<string>;\n };\n\ntype InternalPipelineOptions<Input, Output> = {\n [internalPipelineOptions]: {\n executor: PipelineExecutor<Input, Output>;\n state: PipelineState;\n observability: PipelineOptions<Input>[\"observability\"];\n };\n};\n\n/** Immutable, typed Pipeline with explicit stage and execution boundaries. */\nexport class Pipeline<Input, Output = Input> {\n readonly id: string;\n readonly name: string | undefined;\n readonly description: string | undefined;\n readonly metadata: JsonObject | undefined;\n readonly observability: PipelineOptions<Input>[\"observability\"];\n\n private readonly executor: PipelineExecutor<Input, Output>;\n private readonly state: PipelineState;\n\n constructor(options: PipelineOptions<Input, Output>);\n constructor(options: PipelineOptions<Input, Output> | InternalPipelineOptions<Input, Output>) {\n if (isInternalPipelineOptions(options)) {\n this.executor = options[internalPipelineOptions].executor;\n this.state = options[internalPipelineOptions].state;\n this.observability = options[internalPipelineOptions].observability;\n } else {\n const id = normalizePipelineId(options.id);\n if (!isZodSchema(options.inputSchema)) {\n throw new TypeError(\"Pipeline inputSchema must be a Zod schema.\");\n }\n const inputSchema = options.inputSchema;\n this.executor = (async (input, context) => {\n throwIfAborted(context.abortSignal);\n return inputSchema.parseAsync(input) as Promise<Output>;\n }) as PipelineExecutor<Input, Output>;\n this.state = initialPipelineState({\n id,\n name: options.name,\n description: options.description,\n metadata: options.metadata,\n });\n this.observability = snapshotPipelineObservability(options.observability);\n }\n\n const graph = this.state.graph;\n this.id = graph.id;\n this.name = graph.name;\n this.description = graph.description;\n this.metadata = graph.metadata;\n }\n\n step<Next>(options: PipelineStepOptions<Awaited<Output>, Next>): Pipeline<Input, Awaited<Next>> {\n const next = appendStageNode(this.state, \"step\", options);\n const executor = (async (input, context, pathPrefix) => {\n const value = await this.execute(input, context, pathPrefix);\n const path = [...pathPrefix, next.node.id];\n return (await runNode(context, next.node, path, value, () =>\n options.run(stageContext(value, context)),\n )) as Awaited<Next>;\n }) as PipelineExecutor<Input, Awaited<Next>>;\n return this.derive(executor, next.state);\n }\n\n compose<Next>(\n options: PipelineComposeOptions<Awaited<Output>, Next>,\n ): Pipeline<Input, Awaited<Next>> {\n const boundary = appendStageNode(this.state, \"pipeline\", options, {\n defaultLabel: options.pipeline.name ?? options.pipeline.id,\n pipelineId: options.pipeline.id,\n });\n const state = appendComposedGraph(boundary.state, boundary.node, options.pipeline.graph());\n const executor = (async (input, context, pathPrefix) => {\n const value = await this.execute(input, context, pathPrefix);\n const path = [...pathPrefix, boundary.node.id];\n return (await runNode(context, boundary.node, path, value, () =>\n options.pipeline.execute(value, context, path),\n )) as Awaited<Next>;\n }) as PipelineExecutor<Input, Awaited<Next>>;\n return this.derive(executor, state);\n }\n\n parallel<Branches extends Record<string, Pipeline<Awaited<Output>, unknown>>>(\n options: PipelineParallelOptions<Awaited<Output>, Branches>,\n ): Pipeline<Input, ParallelOutput<Branches>> {\n const branchEntries = normalizeParallelBranches(options.branches);\n if (branchEntries.length === 0) {\n throw new TypeError(\"Pipeline parallel branches must not be empty.\");\n }\n const parallel = appendStageNode(this.state, \"parallel\", options, {\n defaultLabel: `${branchEntries.length} parallel branches`,\n });\n let nextState = parallel.state;\n const branchNodes = new Map<string, PipelineGraphNode>();\n const terminalPaths: PipelineNodePath[] = [];\n for (const [key, branch] of branchEntries) {\n const appended = appendParallelBranch(nextState, parallel.node, key, branch.graph());\n nextState = appended.state;\n branchNodes.set(key, appended.node);\n terminalPaths.push(...appended.terminalPaths);\n }\n nextState = withTerminalPaths(nextState, terminalPaths);\n\n return this.derive<ParallelOutput<Branches>>(async (input, context, pathPrefix) => {\n const value = await this.execute(input, context, pathPrefix);\n const parallelPath = [...pathPrefix, parallel.node.id];\n return runNode(context, parallel.node, parallelPath, value, async () => {\n const controller = new AbortController();\n const combined = combineAbortSignals(context.abortSignal, controller.signal);\n const branchContext = childContext(context, combined.signal);\n let firstError: unknown;\n const promises = branchEntries.map(async ([key, branch]) => {\n const node = branchNodes.get(key) as PipelineGraphNode;\n const path = [...parallelPath, node.id];\n try {\n const output = await runNode(branchContext, node, path, value, () =>\n branch.execute(value, branchContext, path),\n );\n return [key, output] as const;\n } catch (error) {\n if (firstError === undefined) firstError = error;\n if (!controller.signal.aborted) controller.abort(error);\n throw error;\n }\n });\n\n const settled = await Promise.allSettled(promises);\n combined.dispose();\n if (context.abortSignal?.aborted === true) {\n throw pipelineAbortError(context.abortSignal);\n }\n if (firstError !== undefined) throw firstError;\n return Object.fromEntries(\n settled.map(\n (result) => (result as PromiseFulfilledResult<readonly [string, unknown]>).value,\n ),\n ) as ParallelOutput<Branches>;\n });\n }, nextState);\n }\n\n agent<AgentOutput, Model extends CompletionModel>(\n options: PipelineAgentOptions<Awaited<Output>, AgentOutput, Model>,\n ): Pipeline<Input, AgentOutput> {\n if (options.suspension !== \"reject\") {\n throw new TypeError('Pipeline Agent stages require suspension: \"reject\".');\n }\n const next = appendStageNode(this.state, \"agent\", options, {\n defaultLabel: options.agent.name ?? options.agent.id,\n agentId: options.agent.id,\n agentName: options.agent.name,\n });\n return this.derive<AgentOutput>(async (input, context, pathPrefix) => {\n const value = await this.execute(input, context, pathPrefix);\n const path = [...pathPrefix, next.node.id];\n return runNode(context, next.node, path, value, async (stageTrace) => {\n const request = await options.request(stageContext(value, context));\n const response = await options.agent.generate({\n ...request,\n trace: withPipelineParentTrace(\n request.trace,\n stageTrace,\n options.agent.observability?.primaryTrace,\n ),\n abortSignal: context.abortSignal,\n } as AgentRunOptions<AgentOutput, RawResponseOf<Model>, CompletionModelControlsOf<Model>>);\n if (response.type === \"interaction\") {\n throw new PipelineAgentSuspensionError(response);\n }\n if (response.type === \"blocked\") {\n throw new AgentRunBlockedError(response);\n }\n return response.output;\n });\n }, next.state);\n }\n\n extract<Extracted, Model extends CompletionModel>(\n options: PipelineExtractOptions<Awaited<Output>, Extracted, Model>,\n ): Pipeline<Input, Extracted> {\n const next = appendStageNode(this.state, \"extractor\", options);\n return this.derive<Extracted>(async (input, context, pathPrefix) => {\n const value = await this.execute(input, context, pathPrefix);\n const path = [...pathPrefix, next.node.id];\n return runNode(context, next.node, path, value, async () => {\n const text = await options.text(stageContext(value, context));\n const result = await extractData({\n model: options.model,\n text,\n outputSchema: options.outputSchema,\n instructions: options.instructions,\n retries: options.retries,\n temperature: options.temperature,\n maxTokens: options.maxTokens,\n providerOptions: options.providerOptions,\n abortSignal: context.abortSignal,\n });\n return result.output;\n });\n }, next.state);\n }\n\n async run(options: PipelineRunOptions<Input>): Promise<PipelineRunResult<Output>> {\n const runId = normalizeRunId(options.runId ?? globalThis.crypto.randomUUID());\n const startedAt = Date.now();\n const observability = await startPipelineRunObservers(\n this.observability?.observers ?? {},\n {\n runId,\n pipelineId: this.id,\n pipelineName: this.name,\n pipelineDescription: this.description,\n pipelineMetadata: this.metadata,\n runMetadata: options.metadata,\n trace: options.trace,\n input: options.input,\n },\n {\n primaryTrace: this.observability?.primaryTrace,\n errorPolicy: this.observability?.errorPolicy ?? \"ignore\",\n },\n );\n const context: PipelineRunContext = {\n runId,\n pipelineId: this.id,\n runMetadata: options.metadata,\n abortSignal: options.abortSignal,\n observer: options.observer,\n failOnObserverError: options.failOnObserverError === true,\n observability,\n };\n try {\n throwIfAborted(context.abortSignal);\n const output = await this.execute(options.input, context, []);\n throwIfAborted(context.abortSignal);\n await observability.end({\n runId,\n pipelineId: this.id,\n output,\n durationMs: Date.now() - startedAt,\n });\n return observability.trace === undefined\n ? { runId, output }\n : { runId, output, trace: observability.trace };\n } catch (error) {\n await observability.error({\n runId,\n pipelineId: this.id,\n status: context.abortSignal?.aborted === true ? \"cancelled\" : \"failed\",\n error,\n durationMs: Date.now() - startedAt,\n });\n throw error;\n }\n }\n\n async runBatch(options: PipelineBatchOptions<Input>): Promise<Array<PipelineBatchItem<Output>>> {\n throwIfAborted(options.abortSignal);\n return mapWithConcurrency([...options.inputs], options.concurrency, async (input) => {\n const runId = globalThis.crypto.randomUUID();\n try {\n const result = await this.run({\n input,\n runId,\n metadata: options.metadata,\n trace: options.trace,\n abortSignal: options.abortSignal,\n observer: options.observer,\n failOnObserverError: options.failOnObserverError,\n });\n return { status: \"completed\", ...result } as const;\n } catch (error) {\n if (options.abortSignal?.aborted === true) {\n throw pipelineAbortError(options.abortSignal);\n }\n return { status: \"failed\", runId, error } as const;\n }\n });\n }\n\n graph(): PipelineGraph {\n return cloneGraph(withOutputNode(this.state));\n }\n\n private derive<DerivedOutput>(\n executor: PipelineExecutor<Input, DerivedOutput>,\n state: PipelineState,\n ): Pipeline<Input, DerivedOutput> {\n return createDerivedPipeline(executor, state, this.observability);\n }\n\n private async execute(\n input: Input,\n context: PipelineRunContext,\n pathPrefix: PipelineNodePath,\n ): Promise<Awaited<Output>> {\n throwIfAborted(context.abortSignal);\n return (await this.executor(input, context, pathPrefix)) as Awaited<Output>;\n }\n}\n\nfunction createDerivedPipeline<Input, Output>(\n executor: PipelineExecutor<Input, Output>,\n state: PipelineState,\n observability: PipelineOptions<Input>[\"observability\"],\n): Pipeline<Input, Output> {\n const options: InternalPipelineOptions<Input, Output> = {\n [internalPipelineOptions]: { executor, state, observability },\n };\n return new Pipeline<Input, Output>(options as unknown as PipelineOptions<Input, Output>);\n}\n\nfunction withPipelineParentTrace(\n trace: AgentTraceOptions | undefined,\n parent: PipelineTraceInfo | undefined,\n agentPrimaryTrace: string | undefined,\n): AgentTraceOptions | undefined {\n if (parent?.traceId === undefined) return trace;\n if (parent.observer !== agentPrimaryTrace) return trace;\n if (trace?.traceId !== undefined && trace.traceId !== parent.traceId) return trace;\n return {\n ...trace,\n traceId: parent.traceId,\n ...(trace?.parentObservationId !== undefined || parent.observationId === undefined\n ? {}\n : { parentObservationId: parent.observationId }),\n };\n}\n\nfunction isInternalPipelineOptions<Input, Output>(\n options: PipelineOptions<Input, Output> | InternalPipelineOptions<Input, Output>,\n): options is InternalPipelineOptions<Input, Output> {\n return internalPipelineOptions in options;\n}\n\nfunction isZodSchema(value: unknown): value is z.ZodType {\n return value instanceof z.ZodType;\n}\n\nfunction normalizePipelineId(id: string): string {\n if (typeof id !== \"string\") {\n throw new TypeError(\"Pipeline id must be a string.\");\n }\n const normalized = id.trim();\n if (normalized.length === 0) {\n throw new TypeError(\"Pipeline id must be a non-empty string.\");\n }\n return normalized;\n}\n\nfunction normalizeRunId(runId: string): string {\n if (typeof runId !== \"string\") {\n throw new TypeError(\"Pipeline runId must be a string.\");\n }\n const normalized = runId.trim();\n if (normalized.length === 0) {\n throw new TypeError(\"Pipeline runId must be a non-empty string.\");\n }\n return normalized;\n}\n\nfunction normalizeParallelBranches<Branch>(\n branches: Readonly<Record<string, Branch>>,\n): Array<readonly [string, Branch]> {\n const entries: Array<readonly [string, Branch]> = [];\n const ids = new Set<string>();\n for (const key of Object.keys(branches)) {\n const pipeline = branches[key] as Branch;\n const id = key.trim();\n if (id.length === 0) {\n throw new TypeError(\"Pipeline parallel branch id must be a non-empty string.\");\n }\n if (ids.has(id)) {\n throw new TypeError(`Pipeline parallel branch id \"${id}\" is already registered.`);\n }\n ids.add(id);\n if (id !== key) {\n throw new TypeError(\"Pipeline parallel branch ids must not contain surrounding whitespace.\");\n }\n entries.push([id, pipeline]);\n }\n return entries;\n}\n"],"mappings":"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","names":[]}
@@ -0,0 +1 @@
1
+ //# sourceMappingURL=chunk-TP3MCUXS.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"sources":[],"sourcesContent":[],"mappings":"","names":[]}
@@ -1,18 +1,22 @@
1
1
  import {
2
- CompletionCapabilityError,
3
- Usage,
4
2
  generateCompletion
5
- } from "./chunk-OI3LSMJG.js";
3
+ } from "./chunk-BDKFFFVX.js";
4
+ import {
5
+ CompletionCapabilityError,
6
+ Usage
7
+ } from "./chunk-IDNL6IH4.js";
6
8
  import {
7
9
  toProviderJsonSchema
8
- } from "./chunk-QGX73TSQ.js";
10
+ } from "./chunk-SQAAVYJG.js";
9
11
  import {
10
- isAbortError,
11
12
  resolveRetryOptions,
12
13
  retryDelayMs,
13
14
  retryOptionsForFailure,
14
15
  waitForRetry
15
- } from "./chunk-3RWESPUG.js";
16
+ } from "./chunk-POXHJF3H.js";
17
+ import {
18
+ isAbortError
19
+ } from "./chunk-USRKPEQN.js";
16
20
 
17
21
  // src/extractor/extractor.ts
18
22
  import { z } from "zod";
@@ -124,4 +128,4 @@ export {
124
128
  ExtractionError,
125
129
  extract
126
130
  };
127
- //# sourceMappingURL=chunk-JTJU56ZV.js.map
131
+ //# sourceMappingURL=chunk-UOGM62JL.js.map
@@ -1 +1 @@
1
- {"version":3,"sources":["../src/extractor/extractor.ts"],"sourcesContent":["import { z } from \"zod\";\nimport {\n type AssistantContentPart,\n CompletionCapabilityError,\n type CompletionModel,\n type CompletionResult,\n generateCompletion,\n type JsonObject,\n type ToolDefinition,\n Usage,\n} from \"../completion/index\";\nimport { isAbortError } from \"../internal/abort\";\nimport {\n type ResolvedRetryOptions,\n type RetrySetting,\n resolveRetryOptions,\n retryDelayMs,\n retryOptionsForFailure,\n waitForRetry,\n} from \"../retry\";\nimport { toProviderJsonSchema, type ZodSchema } from \"../schema/zod-schema\";\n\nconst SUBMIT_TOOL_NAME = \"submit\";\n\nconst DEFAULT_EXTRACTOR_INSTRUCTIONS =\n \"You are an AI assistant whose purpose is to extract structured data from the provided text.\\n\" +\n \"You have access to a `submit` function that defines the structure of the data to extract.\\n\" +\n \"Always call the `submit` function with the structured data. Use default or null values when information is missing.\";\n\ntype RawResponseOf<Model> =\n Model extends CompletionModel<infer RawResponse> ? RawResponse : unknown;\n\nexport type ExtractOptions<Output, Model extends CompletionModel = CompletionModel> = {\n model: Model;\n text: string;\n outputSchema: ZodSchema<Output>;\n instructions?: string | undefined;\n retries?: RetrySetting | undefined;\n temperature?: number | undefined;\n maxTokens?: number | undefined;\n providerOptions?: JsonObject | undefined;\n abortSignal?: AbortSignal | undefined;\n};\n\nexport type ExtractionResult<Output, RawResponse = unknown> = Omit<\n CompletionResult<string, RawResponse>,\n \"output\"\n> & {\n output: Output;\n};\n\nexport class ExtractionError extends Error {\n readonly attempts: number;\n readonly usage: Usage;\n\n constructor(\n message: string,\n options: {\n cause?: unknown;\n attempts: number;\n usage: Usage;\n },\n ) {\n super(message, options.cause === undefined ? undefined : { cause: options.cause });\n this.name = \"ExtractionError\";\n this.attempts = options.attempts;\n this.usage = options.usage;\n }\n}\n\n/** Extract structured data from text using a required, schema-backed submit tool. */\nexport async function extract<Output, Model extends CompletionModel>(\n options: ExtractOptions<Output, Model>,\n): Promise<ExtractionResult<Output, RawResponseOf<Model>>> {\n if (!(options.outputSchema instanceof z.ZodType)) {\n throw new TypeError(\"extract outputSchema must be a Zod schema.\");\n }\n if (typeof options.text !== \"string\") {\n throw new TypeError(\"extract text must be a string.\");\n }\n\n const retries = resolveExtractionRetries(options.retries);\n const maxAttempts = retries?.maxAttempts ?? 1;\n const submitTool = createSubmitTool(options.outputSchema);\n const instructions = extractionInstructions(options.instructions);\n let usage = Usage.empty();\n let lastError: unknown;\n\n for (let attempt = 1; attempt <= maxAttempts; attempt += 1) {\n try {\n const result = await generateCompletion({\n model: options.model,\n prompt: options.text,\n instructions,\n tools: [globalThis.structuredClone(submitTool)],\n temperature: options.temperature,\n maxTokens: options.maxTokens,\n providerOptions: options.providerOptions,\n toolChoice: \"required\",\n retries: false,\n abortSignal: options.abortSignal,\n });\n usage = Usage.add(usage, result.usage);\n return {\n ...result,\n output: extractSubmittedData(result.content, options.outputSchema),\n usage,\n };\n } catch (error) {\n if (error instanceof CompletionCapabilityError || isAbortError(error)) {\n throw error;\n }\n lastError = error;\n const retryOptions = retryOptionsForFailure(retries, {\n error,\n attempt,\n streaming: false,\n });\n if (retryOptions === undefined) {\n throw new ExtractionError(\"No data extracted\", {\n cause: lastError,\n attempts: attempt,\n usage,\n });\n }\n await waitForRetry(retryDelayMs(retryOptions, attempt), options.abortSignal);\n }\n }\n\n throw new ExtractionError(\"No data extracted\", {\n cause: lastError,\n attempts: maxAttempts,\n usage,\n });\n}\n\nfunction extractionInstructions(instructions: string | undefined): string {\n return instructions === undefined || instructions.length === 0\n ? DEFAULT_EXTRACTOR_INSTRUCTIONS\n : `${DEFAULT_EXTRACTOR_INSTRUCTIONS}\\n\\n${instructions}`;\n}\n\nfunction createSubmitTool<Output>(outputSchema: ZodSchema<Output>): ToolDefinition {\n return {\n name: SUBMIT_TOOL_NAME,\n description: \"Submit the structured data extracted from the provided text.\",\n parameters: toProviderJsonSchema(outputSchema, { io: \"input\" }),\n };\n}\n\nfunction resolveExtractionRetries(\n options: RetrySetting | undefined,\n): ResolvedRetryOptions | undefined {\n if (options === undefined || options === false) {\n return undefined;\n }\n return resolveRetryOptions({\n ...options,\n shouldRetry: options.shouldRetry ?? (() => true),\n });\n}\n\nfunction extractSubmittedData<Output>(\n content: readonly AssistantContentPart[],\n schema: ZodSchema<Output>,\n): Output {\n const submitted = content\n .filter((item) => item.type === \"tool-call\")\n .filter((toolCall) => toolCall.toolName === SUBMIT_TOOL_NAME)\n .at(-1);\n\n if (submitted === undefined) {\n throw new Error(\"The model did not call the submit tool\");\n }\n\n try {\n return schema.parse(submitted.input);\n } catch (error) {\n throw new Error(\"Submitted data failed output schema validation\", { cause: error });\n }\n}\n"],"mappings":"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","names":[]}
1
+ {"version":3,"sources":["../src/extractor/extractor.ts"],"sourcesContent":["import { z } from \"zod\";\nimport {\n type AssistantContentPart,\n CompletionCapabilityError,\n type CompletionModel,\n type CompletionResult,\n generateCompletion,\n type JsonObject,\n type ToolDefinition,\n Usage,\n} from \"../completion/index\";\nimport { isAbortError } from \"../internal/abort\";\nimport {\n type ResolvedRetryOptions,\n type RetrySetting,\n resolveRetryOptions,\n retryDelayMs,\n retryOptionsForFailure,\n waitForRetry,\n} from \"../retry\";\nimport { toProviderJsonSchema, type ZodSchema } from \"../schema/zod-schema\";\n\nconst SUBMIT_TOOL_NAME = \"submit\";\n\nconst DEFAULT_EXTRACTOR_INSTRUCTIONS =\n \"You are an AI assistant whose purpose is to extract structured data from the provided text.\\n\" +\n \"You have access to a `submit` function that defines the structure of the data to extract.\\n\" +\n \"Always call the `submit` function with the structured data. Use default or null values when information is missing.\";\n\ntype RawResponseOf<Model> =\n Model extends CompletionModel<infer RawResponse> ? RawResponse : unknown;\n\nexport type ExtractOptions<Output, Model extends CompletionModel = CompletionModel> = {\n model: Model;\n text: string;\n outputSchema: ZodSchema<Output>;\n instructions?: string | undefined;\n retries?: RetrySetting | undefined;\n temperature?: number | undefined;\n maxTokens?: number | undefined;\n providerOptions?: JsonObject | undefined;\n abortSignal?: AbortSignal | undefined;\n};\n\nexport type ExtractionResult<Output, RawResponse = unknown> = Omit<\n CompletionResult<string, RawResponse>,\n \"output\"\n> & {\n output: Output;\n};\n\nexport class ExtractionError extends Error {\n readonly attempts: number;\n readonly usage: Usage;\n\n constructor(\n message: string,\n options: {\n cause?: unknown;\n attempts: number;\n usage: Usage;\n },\n ) {\n super(message, options.cause === undefined ? undefined : { cause: options.cause });\n this.name = \"ExtractionError\";\n this.attempts = options.attempts;\n this.usage = options.usage;\n }\n}\n\n/** Extract structured data from text using a required, schema-backed submit tool. */\nexport async function extract<Output, Model extends CompletionModel>(\n options: ExtractOptions<Output, Model>,\n): Promise<ExtractionResult<Output, RawResponseOf<Model>>> {\n if (!(options.outputSchema instanceof z.ZodType)) {\n throw new TypeError(\"extract outputSchema must be a Zod schema.\");\n }\n if (typeof options.text !== \"string\") {\n throw new TypeError(\"extract text must be a string.\");\n }\n\n const retries = resolveExtractionRetries(options.retries);\n const maxAttempts = retries?.maxAttempts ?? 1;\n const submitTool = createSubmitTool(options.outputSchema);\n const instructions = extractionInstructions(options.instructions);\n let usage = Usage.empty();\n let lastError: unknown;\n\n for (let attempt = 1; attempt <= maxAttempts; attempt += 1) {\n try {\n const result = await generateCompletion({\n model: options.model,\n prompt: options.text,\n instructions,\n tools: [globalThis.structuredClone(submitTool)],\n temperature: options.temperature,\n maxTokens: options.maxTokens,\n providerOptions: options.providerOptions,\n toolChoice: \"required\",\n retries: false,\n abortSignal: options.abortSignal,\n });\n usage = Usage.add(usage, result.usage);\n return {\n ...result,\n output: extractSubmittedData(result.content, options.outputSchema),\n usage,\n };\n } catch (error) {\n if (error instanceof CompletionCapabilityError || isAbortError(error)) {\n throw error;\n }\n lastError = error;\n const retryOptions = retryOptionsForFailure(retries, {\n error,\n attempt,\n streaming: false,\n });\n if (retryOptions === undefined) {\n throw new ExtractionError(\"No data extracted\", {\n cause: lastError,\n attempts: attempt,\n usage,\n });\n }\n await waitForRetry(retryDelayMs(retryOptions, attempt), options.abortSignal);\n }\n }\n\n throw new ExtractionError(\"No data extracted\", {\n cause: lastError,\n attempts: maxAttempts,\n usage,\n });\n}\n\nfunction extractionInstructions(instructions: string | undefined): string {\n return instructions === undefined || instructions.length === 0\n ? DEFAULT_EXTRACTOR_INSTRUCTIONS\n : `${DEFAULT_EXTRACTOR_INSTRUCTIONS}\\n\\n${instructions}`;\n}\n\nfunction createSubmitTool<Output>(outputSchema: ZodSchema<Output>): ToolDefinition {\n return {\n name: SUBMIT_TOOL_NAME,\n description: \"Submit the structured data extracted from the provided text.\",\n parameters: toProviderJsonSchema(outputSchema, { io: \"input\" }),\n };\n}\n\nfunction resolveExtractionRetries(\n options: RetrySetting | undefined,\n): ResolvedRetryOptions | undefined {\n if (options === undefined || options === false) {\n return undefined;\n }\n return resolveRetryOptions({\n ...options,\n shouldRetry: options.shouldRetry ?? (() => true),\n });\n}\n\nfunction extractSubmittedData<Output>(\n content: readonly AssistantContentPart[],\n schema: ZodSchema<Output>,\n): Output {\n const submitted = content\n .filter((item) => item.type === \"tool-call\")\n .filter((toolCall) => toolCall.toolName === SUBMIT_TOOL_NAME)\n .at(-1);\n\n if (submitted === undefined) {\n throw new Error(\"The model did not call the submit tool\");\n }\n\n try {\n return schema.parse(submitted.input);\n } catch (error) {\n throw new Error(\"Submitted data failed output schema validation\", { cause: error });\n }\n}\n"],"mappings":"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","names":[]}
@@ -0,0 +1,55 @@
1
+ // src/internal/abort.ts
2
+ function throwIfAborted(signal) {
3
+ if (signal?.aborted === true) {
4
+ throw abortError(signal.reason);
5
+ }
6
+ }
7
+ function abortError(reason) {
8
+ if (isAbortError(reason)) {
9
+ return reason;
10
+ }
11
+ const error = new Error(
12
+ "The operation was aborted.",
13
+ reason === void 0 ? void 0 : { cause: reason }
14
+ );
15
+ error.name = "AbortError";
16
+ return error;
17
+ }
18
+ function isAbortError(error) {
19
+ const seen = /* @__PURE__ */ new Set();
20
+ let current = error;
21
+ while (typeof current === "object" && current !== null && !seen.has(current)) {
22
+ seen.add(current);
23
+ if ("name" in current && current.name === "AbortError") {
24
+ return true;
25
+ }
26
+ current = "cause" in current ? current.cause : void 0;
27
+ }
28
+ return false;
29
+ }
30
+ function waitForAbortableDelay(delayMs, signal) {
31
+ throwIfAborted(signal);
32
+ if (delayMs === 0) return Promise.resolve();
33
+ if (signal === void 0) {
34
+ return new Promise((resolve) => setTimeout(resolve, delayMs));
35
+ }
36
+ return new Promise((resolve, reject) => {
37
+ const timer = setTimeout(() => {
38
+ signal.removeEventListener("abort", onAbort);
39
+ resolve();
40
+ }, delayMs);
41
+ const onAbort = () => {
42
+ clearTimeout(timer);
43
+ reject(abortError(signal.reason));
44
+ };
45
+ signal.addEventListener("abort", onAbort, { once: true });
46
+ });
47
+ }
48
+
49
+ export {
50
+ throwIfAborted,
51
+ abortError,
52
+ isAbortError,
53
+ waitForAbortableDelay
54
+ };
55
+ //# sourceMappingURL=chunk-USRKPEQN.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["../src/internal/abort.ts"],"sourcesContent":["export function throwIfAborted(signal: AbortSignal | undefined): void {\n if (signal?.aborted === true) {\n throw abortError(signal.reason);\n }\n}\n\nexport function abortError(reason?: unknown): Error {\n if (isAbortError(reason)) {\n return reason;\n }\n\n const error = new Error(\n \"The operation was aborted.\",\n reason === undefined ? undefined : { cause: reason },\n );\n error.name = \"AbortError\";\n return error;\n}\n\nexport function isAbortError(error: unknown): error is Error {\n const seen = new Set<object>();\n let current = error;\n while (typeof current === \"object\" && current !== null && !seen.has(current)) {\n seen.add(current);\n if (\"name\" in current && current.name === \"AbortError\") {\n return true;\n }\n current = \"cause\" in current ? current.cause : undefined;\n }\n return false;\n}\n\nexport function waitForAbortableDelay(\n delayMs: number,\n signal: AbortSignal | undefined,\n): Promise<void> {\n throwIfAborted(signal);\n if (delayMs === 0) return Promise.resolve();\n if (signal === undefined) {\n return new Promise<void>((resolve) => setTimeout(resolve, delayMs));\n }\n\n return new Promise<void>((resolve, reject) => {\n const timer = setTimeout(() => {\n signal.removeEventListener(\"abort\", onAbort);\n resolve();\n }, delayMs);\n const onAbort = () => {\n clearTimeout(timer);\n reject(abortError(signal.reason));\n };\n signal.addEventListener(\"abort\", onAbort, { once: true });\n });\n}\n"],"mappings":";AAAO,SAAS,eAAe,QAAuC;AACpE,MAAI,QAAQ,YAAY,MAAM;AAC5B,UAAM,WAAW,OAAO,MAAM;AAAA,EAChC;AACF;AAEO,SAAS,WAAW,QAAyB;AAClD,MAAI,aAAa,MAAM,GAAG;AACxB,WAAO;AAAA,EACT;AAEA,QAAM,QAAQ,IAAI;AAAA,IAChB;AAAA,IACA,WAAW,SAAY,SAAY,EAAE,OAAO,OAAO;AAAA,EACrD;AACA,QAAM,OAAO;AACb,SAAO;AACT;AAEO,SAAS,aAAa,OAAgC;AAC3D,QAAM,OAAO,oBAAI,IAAY;AAC7B,MAAI,UAAU;AACd,SAAO,OAAO,YAAY,YAAY,YAAY,QAAQ,CAAC,KAAK,IAAI,OAAO,GAAG;AAC5E,SAAK,IAAI,OAAO;AAChB,QAAI,UAAU,WAAW,QAAQ,SAAS,cAAc;AACtD,aAAO;AAAA,IACT;AACA,cAAU,WAAW,UAAU,QAAQ,QAAQ;AAAA,EACjD;AACA,SAAO;AACT;AAEO,SAAS,sBACd,SACA,QACe;AACf,iBAAe,MAAM;AACrB,MAAI,YAAY,EAAG,QAAO,QAAQ,QAAQ;AAC1C,MAAI,WAAW,QAAW;AACxB,WAAO,IAAI,QAAc,CAAC,YAAY,WAAW,SAAS,OAAO,CAAC;AAAA,EACpE;AAEA,SAAO,IAAI,QAAc,CAAC,SAAS,WAAW;AAC5C,UAAM,QAAQ,WAAW,MAAM;AAC7B,aAAO,oBAAoB,SAAS,OAAO;AAC3C,cAAQ;AAAA,IACV,GAAG,OAAO;AACV,UAAM,UAAU,MAAM;AACpB,mBAAa,KAAK;AAClB,aAAO,WAAW,OAAO,MAAM,CAAC;AAAA,IAClC;AACA,WAAO,iBAAiB,SAAS,SAAS,EAAE,MAAM,KAAK,CAAC;AAAA,EAC1D,CAAC;AACH;","names":[]}