@sixb/core 0.1.8 → 0.1.9

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 (615) hide show
  1. package/dist/actions/index.js +77 -89
  2. package/dist/actions/index.js.map +1 -1
  3. package/dist/actions/run-dispatch.d.ts.map +1 -1
  4. package/dist/actions/types/context.d.ts +2 -0
  5. package/dist/actions/types/context.d.ts.map +1 -1
  6. package/dist/actions/validation.d.ts +1 -1
  7. package/dist/actions/validation.d.ts.map +1 -1
  8. package/dist/actions/worker.js +33 -37
  9. package/dist/actions/worker.js.map +2 -2
  10. package/dist/agents/adapters.d.ts +3 -3
  11. package/dist/agents/{context.d.ts → context/entries.d.ts} +3 -3
  12. package/dist/agents/context/entries.d.ts.map +1 -0
  13. package/dist/agents/context/index.d.ts +4 -0
  14. package/dist/agents/context/index.d.ts.map +1 -0
  15. package/dist/agents/context/index.js +19 -0
  16. package/dist/agents/{streams.js.map → context/index.js.map} +1 -1
  17. package/dist/agents/context-model.d.ts +1 -1
  18. package/dist/agents/context-model.d.ts.map +1 -1
  19. package/dist/agents/context-resolution.d.ts +1 -1
  20. package/dist/agents/context-resolution.d.ts.map +1 -1
  21. package/dist/agents/index.d.ts +4 -4
  22. package/dist/agents/index.d.ts.map +1 -1
  23. package/dist/agents/index.js +192 -204
  24. package/dist/agents/index.js.map +1 -1
  25. package/dist/agents/message.d.ts +1 -1
  26. package/dist/agents/message.d.ts.map +1 -1
  27. package/dist/agents/model-loop.d.ts +2 -0
  28. package/dist/agents/model-loop.d.ts.map +1 -1
  29. package/dist/agents/request.d.ts +1 -1
  30. package/dist/agents/request.d.ts.map +1 -1
  31. package/dist/agents/streams/index.d.ts +4 -0
  32. package/dist/agents/streams/index.d.ts.map +1 -0
  33. package/dist/agents/streams/index.js +20 -0
  34. package/dist/{chunk-y64skrwp.js.map → agents/streams/index.js.map} +1 -1
  35. package/dist/agents/streams/internal.d.ts +3 -0
  36. package/dist/agents/streams/internal.d.ts.map +1 -0
  37. package/dist/agents/streams/internal.js +40 -0
  38. package/dist/agents/{context.js.map → streams/internal.js.map} +1 -1
  39. package/dist/agents/{streams.d.ts → streams/protocol.d.ts} +5 -5
  40. package/dist/agents/streams/protocol.d.ts.map +1 -0
  41. package/dist/agents/types.d.ts +1 -1
  42. package/dist/agents/types.d.ts.map +1 -1
  43. package/dist/agents/validation.d.ts.map +1 -1
  44. package/dist/auth/index.d.ts +0 -1
  45. package/dist/auth/index.d.ts.map +1 -1
  46. package/dist/auth/index.js +96 -108
  47. package/dist/auth/index.js.map +1 -1
  48. package/dist/auth/strategy.js +8 -9
  49. package/dist/auth/strategy.js.map +1 -1
  50. package/dist/authorization/index.js +51 -56
  51. package/dist/authorization/index.js.map +1 -1
  52. package/dist/blob-storage/browser.js +15 -17
  53. package/dist/blob-storage/browser.js.map +1 -1
  54. package/dist/blob-storage/index.js +36 -38
  55. package/dist/blob-storage/index.js.map +1 -1
  56. package/dist/bootstrap/discovery.d.ts +14 -1
  57. package/dist/bootstrap/discovery.d.ts.map +1 -1
  58. package/dist/bootstrap/index.d.ts +2 -2
  59. package/dist/bootstrap/index.d.ts.map +1 -1
  60. package/dist/bootstrap/index.js +79 -88
  61. package/dist/bootstrap/index.js.map +1 -1
  62. package/dist/broker/index.js +8 -10
  63. package/dist/broker/index.js.map +1 -1
  64. package/dist/{chunk-k34z5rvh.js → chunk-0rdrecsb.js} +18 -18
  65. package/dist/{chunk-k34z5rvh.js.map → chunk-0rdrecsb.js.map} +2 -2
  66. package/dist/{chunk-q0k9nc5a.js → chunk-0w35wavj.js} +98 -98
  67. package/dist/{chunk-q0k9nc5a.js.map → chunk-0w35wavj.js.map} +2 -2
  68. package/dist/chunk-0y39rgsb.js +43 -0
  69. package/dist/{chunk-c15dr03f.js.map → chunk-0y39rgsb.js.map} +2 -2
  70. package/dist/{chunk-k522z7v6.js → chunk-17kfctj6.js} +16 -11
  71. package/dist/chunk-17kfctj6.js.map +10 -0
  72. package/dist/{chunk-aa2pen2v.js → chunk-1enhpacz.js} +188 -175
  73. package/dist/{chunk-aa2pen2v.js.map → chunk-1enhpacz.js.map} +2 -2
  74. package/dist/{chunk-5gd7tpv6.js → chunk-2c4j899j.js} +4 -4
  75. package/dist/{chunk-5gd7tpv6.js.map → chunk-2c4j899j.js.map} +2 -2
  76. package/dist/{chunk-fvt9rjsa.js → chunk-38zv5rkr.js} +4 -4
  77. package/dist/{chunk-fvt9rjsa.js.map → chunk-38zv5rkr.js.map} +1 -1
  78. package/dist/{chunk-w3e09qqk.js → chunk-39tqv9hz.js} +24 -24
  79. package/dist/{chunk-w3e09qqk.js.map → chunk-39tqv9hz.js.map} +2 -2
  80. package/dist/{chunk-04b07a9q.js → chunk-3bh94gbw.js} +13 -13
  81. package/dist/{chunk-04b07a9q.js.map → chunk-3bh94gbw.js.map} +2 -2
  82. package/dist/{chunk-8m5ejdpn.js → chunk-3f7veca0.js} +4 -4
  83. package/dist/{chunk-8m5ejdpn.js.map → chunk-3f7veca0.js.map} +2 -2
  84. package/dist/chunk-3frsnm7x.js +32 -0
  85. package/dist/chunk-3frsnm7x.js.map +11 -0
  86. package/dist/{chunk-n2w475r0.js → chunk-3tgwrcyh.js} +81 -81
  87. package/dist/{chunk-n2w475r0.js.map → chunk-3tgwrcyh.js.map} +2 -2
  88. package/dist/{chunk-mwsxn98e.js → chunk-52hbv0ak.js} +170 -170
  89. package/dist/{chunk-mwsxn98e.js.map → chunk-52hbv0ak.js.map} +4 -4
  90. package/dist/{chunk-nf4r78r4.js → chunk-5a4a52tq.js} +4 -4
  91. package/dist/{chunk-nf4r78r4.js.map → chunk-5a4a52tq.js.map} +2 -2
  92. package/dist/{chunk-rte5sm3z.js → chunk-5hz0fnca.js} +23 -23
  93. package/dist/{chunk-rte5sm3z.js.map → chunk-5hz0fnca.js.map} +2 -2
  94. package/dist/chunk-653vwrzr.js +39 -0
  95. package/dist/chunk-653vwrzr.js.map +10 -0
  96. package/dist/{chunk-qw9gvjv5.js → chunk-72w2pxk7.js} +13 -13
  97. package/dist/{chunk-qw9gvjv5.js.map → chunk-72w2pxk7.js.map} +2 -2
  98. package/dist/chunk-7apz6hg4.js +50 -0
  99. package/dist/{chunk-jq43kdvk.js.map → chunk-7apz6hg4.js.map} +2 -2
  100. package/dist/chunk-7bs40fe1.js +218 -0
  101. package/dist/{chunk-p1rzczbt.js.map → chunk-7bs40fe1.js.map} +3 -3
  102. package/dist/chunk-7zgecwy1.js +113 -0
  103. package/dist/chunk-7zgecwy1.js.map +10 -0
  104. package/dist/{chunk-pc7ys28c.js → chunk-860dwwy0.js} +29 -29
  105. package/dist/{chunk-pc7ys28c.js.map → chunk-860dwwy0.js.map} +2 -2
  106. package/dist/chunk-8vj0rjgs.js +165 -0
  107. package/dist/chunk-8vj0rjgs.js.map +15 -0
  108. package/dist/{chunk-7y0f6rf1.js → chunk-92vk7gta.js} +58 -58
  109. package/dist/chunk-92vk7gta.js.map +10 -0
  110. package/dist/{chunk-rafagrwr.js → chunk-93csa55g.js} +45 -17
  111. package/dist/chunk-93csa55g.js.map +11 -0
  112. package/dist/{chunk-d8qkxt2v.js → chunk-98cw09sw.js} +7 -7
  113. package/dist/chunk-98cw09sw.js.map +10 -0
  114. package/dist/{chunk-n4khvw9n.js → chunk-9qsh3p5y.js} +17 -17
  115. package/dist/{chunk-n4khvw9n.js.map → chunk-9qsh3p5y.js.map} +2 -2
  116. package/dist/{chunk-4a849fr1.js → chunk-9tc8dxmn.js} +1 -1
  117. package/dist/{chunk-9nbmsvn5.js → chunk-9vx5e9g1.js} +9 -9
  118. package/dist/{chunk-9nbmsvn5.js.map → chunk-9vx5e9g1.js.map} +2 -2
  119. package/dist/{chunk-f26bck4t.js → chunk-an5tt9y0.js} +353 -353
  120. package/dist/{chunk-f26bck4t.js.map → chunk-an5tt9y0.js.map} +2 -2
  121. package/dist/{chunk-2dw777qw.js → chunk-ap0g1g74.js} +37 -82
  122. package/dist/{chunk-2dw777qw.js.map → chunk-ap0g1g74.js.map} +3 -4
  123. package/dist/{chunk-v4en4jc2.js → chunk-awbhdqyc.js} +7 -7
  124. package/dist/{chunk-v4en4jc2.js.map → chunk-awbhdqyc.js.map} +2 -2
  125. package/dist/{chunk-ka3a2ft3.js → chunk-b19g04jk.js} +12 -12
  126. package/dist/{chunk-ka3a2ft3.js.map → chunk-b19g04jk.js.map} +2 -2
  127. package/dist/{chunk-nx7k8tpr.js → chunk-br3k6qbf.js} +23 -23
  128. package/dist/{chunk-nx7k8tpr.js.map → chunk-br3k6qbf.js.map} +2 -2
  129. package/dist/{chunk-dbc80ad7.js → chunk-c5rkjrgp.js} +28 -28
  130. package/dist/{chunk-dbc80ad7.js.map → chunk-c5rkjrgp.js.map} +2 -2
  131. package/dist/{chunk-dktq02ne.js → chunk-cqr3acm1.js} +4 -4
  132. package/dist/{chunk-dktq02ne.js.map → chunk-cqr3acm1.js.map} +2 -2
  133. package/dist/chunk-d62kjtbg.js +7 -0
  134. package/dist/{chunk-zcnhxkvd.js.map → chunk-d62kjtbg.js.map} +2 -2
  135. package/dist/{chunk-74drx9gd.js → chunk-dfm066qg.js} +10 -10
  136. package/dist/{chunk-74drx9gd.js.map → chunk-dfm066qg.js.map} +2 -2
  137. package/dist/{chunk-5e3pq99w.js → chunk-dmn70ztd.js} +30 -30
  138. package/dist/chunk-dmn70ztd.js.map +11 -0
  139. package/dist/{chunk-p1x242ad.js → chunk-dz5h08xv.js} +175 -175
  140. package/dist/{chunk-p1x242ad.js.map → chunk-dz5h08xv.js.map} +2 -2
  141. package/dist/{chunk-p2vqaxkc.js → chunk-e0d1rzef.js} +27 -22
  142. package/dist/{chunk-p2vqaxkc.js.map → chunk-e0d1rzef.js.map} +3 -3
  143. package/dist/{chunk-5sz8ta9r.js → chunk-e1c18xjx.js} +52 -52
  144. package/dist/{chunk-5sz8ta9r.js.map → chunk-e1c18xjx.js.map} +2 -2
  145. package/dist/{chunk-wtf06et8.js → chunk-emyyk7dx.js} +55 -55
  146. package/dist/{chunk-wtf06et8.js.map → chunk-emyyk7dx.js.map} +2 -2
  147. package/dist/{chunk-19jp6g9d.js → chunk-f0rwz2vh.js} +54 -33
  148. package/dist/chunk-f0rwz2vh.js.map +11 -0
  149. package/dist/{chunk-2xns679x.js → chunk-f4w3yp4f.js} +171 -36
  150. package/dist/chunk-f4w3yp4f.js.map +12 -0
  151. package/dist/{chunk-979ww6b3.js → chunk-fb3feg1e.js} +29 -29
  152. package/dist/{chunk-979ww6b3.js.map → chunk-fb3feg1e.js.map} +2 -2
  153. package/dist/{chunk-4sm0aznx.js → chunk-g00bfdq6.js} +254 -256
  154. package/dist/{chunk-4sm0aznx.js.map → chunk-g00bfdq6.js.map} +3 -3
  155. package/dist/{chunk-p03r0h5s.js → chunk-g53f0e4j.js} +76 -202
  156. package/dist/chunk-g53f0e4j.js.map +15 -0
  157. package/dist/chunk-g6cke204.js +124 -0
  158. package/dist/chunk-g6cke204.js.map +10 -0
  159. package/dist/{chunk-51fjndv0.js → chunk-gfdh9kqa.js} +4 -4
  160. package/dist/{chunk-51fjndv0.js.map → chunk-gfdh9kqa.js.map} +2 -2
  161. package/dist/chunk-h1gfhhbh.js +602 -0
  162. package/dist/chunk-h1gfhhbh.js.map +18 -0
  163. package/dist/chunk-h3v76ams.js +32 -0
  164. package/dist/{chunk-08m3b6w8.js.map → chunk-h3v76ams.js.map} +2 -2
  165. package/dist/{chunk-xajtptbw.js → chunk-hpr1r6av.js} +1367 -418
  166. package/dist/chunk-hpr1r6av.js.map +44 -0
  167. package/dist/{chunk-jecn6t54.js → chunk-jgwb25gc.js} +74 -74
  168. package/dist/{chunk-jecn6t54.js.map → chunk-jgwb25gc.js.map} +2 -2
  169. package/dist/{chunk-w9tg6yyb.js → chunk-jjy0fhrn.js} +36 -36
  170. package/dist/{chunk-w9tg6yyb.js.map → chunk-jjy0fhrn.js.map} +2 -2
  171. package/dist/{chunk-wdage1eb.js → chunk-jmfet9r4.js} +6 -6
  172. package/dist/{chunk-wdage1eb.js.map → chunk-jmfet9r4.js.map} +2 -2
  173. package/dist/{chunk-ajnan18g.js → chunk-k3cqkkn2.js} +58 -55
  174. package/dist/chunk-k3cqkkn2.js.map +12 -0
  175. package/dist/{chunk-s5y30bc9.js → chunk-kxwa347f.js} +51 -49
  176. package/dist/{chunk-s5y30bc9.js.map → chunk-kxwa347f.js.map} +4 -4
  177. package/dist/{chunk-2ab72m2h.js → chunk-m2ca93my.js} +3 -3
  178. package/dist/{chunk-2ab72m2h.js.map → chunk-m2ca93my.js.map} +2 -2
  179. package/dist/{chunk-3z1qec12.js → chunk-m3z3x9v0.js} +107 -64
  180. package/dist/{chunk-3z1qec12.js.map → chunk-m3z3x9v0.js.map} +3 -3
  181. package/dist/{chunk-sbzzr4kx.js → chunk-mjbk2djy.js} +1061 -1195
  182. package/dist/{chunk-sbzzr4kx.js.map → chunk-mjbk2djy.js.map} +9 -15
  183. package/dist/{chunk-4jjp5k14.js → chunk-mmagke4x.js} +6 -6
  184. package/dist/{chunk-4jjp5k14.js.map → chunk-mmagke4x.js.map} +2 -2
  185. package/dist/{chunk-359jm1jw.js → chunk-mrp7k0pw.js} +20 -20
  186. package/dist/{chunk-359jm1jw.js.map → chunk-mrp7k0pw.js.map} +2 -2
  187. package/dist/{chunk-h0k55pc7.js → chunk-ms2tmn1k.js} +139 -139
  188. package/dist/{chunk-h0k55pc7.js.map → chunk-ms2tmn1k.js.map} +2 -2
  189. package/dist/{chunk-rv2hkwwa.js → chunk-ppytyr6w.js} +156 -179
  190. package/dist/{chunk-rv2hkwwa.js.map → chunk-ppytyr6w.js.map} +3 -5
  191. package/dist/{chunk-trxxmgnf.js → chunk-pqajwytd.js} +10 -10
  192. package/dist/{chunk-trxxmgnf.js.map → chunk-pqajwytd.js.map} +3 -3
  193. package/dist/{chunk-nn0tekr1.js → chunk-pr2h4bv4.js} +33 -33
  194. package/dist/{chunk-nn0tekr1.js.map → chunk-pr2h4bv4.js.map} +2 -2
  195. package/dist/{chunk-xwnf87e1.js → chunk-q5gz3g2j.js} +64 -64
  196. package/dist/{chunk-xwnf87e1.js.map → chunk-q5gz3g2j.js.map} +2 -2
  197. package/dist/{chunk-5ntny1qx.js → chunk-qf954wje.js} +6 -6
  198. package/dist/{chunk-5ntny1qx.js.map → chunk-qf954wje.js.map} +2 -2
  199. package/dist/{chunk-mth82m8t.js → chunk-qhcpj9wc.js} +77 -77
  200. package/dist/{chunk-mth82m8t.js.map → chunk-qhcpj9wc.js.map} +2 -2
  201. package/dist/{chunk-tpnd31c1.js → chunk-r29fxdhn.js} +12 -12
  202. package/dist/{chunk-tpnd31c1.js.map → chunk-r29fxdhn.js.map} +2 -2
  203. package/dist/{chunk-b49dgvsj.js → chunk-r2y23egw.js} +3 -3
  204. package/dist/{chunk-b49dgvsj.js.map → chunk-r2y23egw.js.map} +2 -2
  205. package/dist/{chunk-3xep5cjx.js → chunk-r4tfx1sf.js} +104 -86
  206. package/dist/chunk-r4tfx1sf.js.map +15 -0
  207. package/dist/{chunk-4rh2m6zg.js → chunk-rb1xx120.js} +13 -13
  208. package/dist/{chunk-4rh2m6zg.js.map → chunk-rb1xx120.js.map} +2 -2
  209. package/dist/chunk-s3csryxe.js +152 -0
  210. package/dist/chunk-s3csryxe.js.map +11 -0
  211. package/dist/chunk-s670k14v.js +60 -0
  212. package/dist/{chunk-407j3msh.js.map → chunk-s670k14v.js.map} +2 -2
  213. package/dist/chunk-skz0hst3.js +788 -0
  214. package/dist/chunk-skz0hst3.js.map +19 -0
  215. package/dist/{chunk-r8jrnexe.js → chunk-v4jbb3rs.js} +4 -4
  216. package/dist/{chunk-r8jrnexe.js.map → chunk-v4jbb3rs.js.map} +2 -2
  217. package/dist/{chunk-v1xppd0y.js → chunk-vf691g1r.js} +60 -60
  218. package/dist/{chunk-v1xppd0y.js.map → chunk-vf691g1r.js.map} +2 -2
  219. package/dist/{chunk-w1tvjszy.js → chunk-vsj3mdfj.js} +8 -8
  220. package/dist/{chunk-w1tvjszy.js.map → chunk-vsj3mdfj.js.map} +2 -2
  221. package/dist/{chunk-9dzba0f2.js → chunk-wjasrj67.js} +8 -8
  222. package/dist/{chunk-9dzba0f2.js.map → chunk-wjasrj67.js.map} +2 -2
  223. package/dist/{chunk-1evzqhks.js → chunk-wr8qp979.js} +6 -6
  224. package/dist/{chunk-1evzqhks.js.map → chunk-wr8qp979.js.map} +2 -2
  225. package/dist/{chunk-n6jxh8sw.js → chunk-wy0qdqfm.js} +18 -18
  226. package/dist/{chunk-n6jxh8sw.js.map → chunk-wy0qdqfm.js.map} +2 -2
  227. package/dist/{chunk-8tsf6dmc.js → chunk-x57ycxq0.js} +204 -204
  228. package/dist/{chunk-8tsf6dmc.js.map → chunk-x57ycxq0.js.map} +2 -2
  229. package/dist/{chunk-z4ccwbkz.js → chunk-x9v4cx1d.js} +1 -1
  230. package/dist/{chunk-gbejpkex.js → chunk-xfbydgzy.js} +26 -26
  231. package/dist/{chunk-gbejpkex.js.map → chunk-xfbydgzy.js.map} +2 -2
  232. package/dist/{chunk-gzasd5b6.js → chunk-xyr8kppc.js} +22 -22
  233. package/dist/{chunk-gzasd5b6.js.map → chunk-xyr8kppc.js.map} +2 -2
  234. package/dist/{chunk-h5vqbfmd.js → chunk-ypbtykv6.js} +117 -117
  235. package/dist/{chunk-h5vqbfmd.js.map → chunk-ypbtykv6.js.map} +3 -3
  236. package/dist/{chunk-ry24jbr1.js → chunk-yv79ncbv.js} +10 -10
  237. package/dist/{chunk-ry24jbr1.js.map → chunk-yv79ncbv.js.map} +2 -2
  238. package/dist/{chunk-yp8ee62z.js → chunk-z30bv4ga.js} +35 -35
  239. package/dist/{chunk-yp8ee62z.js.map → chunk-z30bv4ga.js.map} +2 -2
  240. package/dist/{chunk-8ydjhh27.js → chunk-z3y411fq.js} +11 -7
  241. package/dist/{chunk-8ydjhh27.js.map → chunk-z3y411fq.js.map} +3 -3
  242. package/dist/{chunk-9t8f5xfx.js → chunk-z5rnrmz1.js} +10 -10
  243. package/dist/{chunk-9t8f5xfx.js.map → chunk-z5rnrmz1.js.map} +2 -2
  244. package/dist/{chunk-96swp2wd.js → chunk-z667z3sg.js} +3 -3
  245. package/dist/{chunk-96swp2wd.js.map → chunk-z667z3sg.js.map} +2 -2
  246. package/dist/{chunk-4yqmp43v.js → chunk-z8fx5cgb.js} +12 -12
  247. package/dist/{chunk-4yqmp43v.js.map → chunk-z8fx5cgb.js.map} +2 -2
  248. package/dist/{chunk-xhy826cz.js → chunk-zcnq6105.js} +7 -7
  249. package/dist/{chunk-xhy826cz.js.map → chunk-zcnq6105.js.map} +2 -2
  250. package/dist/{chunk-yt8wphsx.js → chunk-zvx7h87b.js} +3 -3
  251. package/dist/{chunk-yt8wphsx.js.map → chunk-zvx7h87b.js.map} +2 -2
  252. package/dist/connectors/connections/internal.js +9 -10
  253. package/dist/connectors/connections/internal.js.map +1 -1
  254. package/dist/datasets/write.js +8 -12
  255. package/dist/datasets/write.js.map +1 -1
  256. package/dist/edits/index.js +7 -8
  257. package/dist/edits/index.js.map +1 -1
  258. package/dist/error-reporting/internal.js +22 -24
  259. package/dist/error-reporting/internal.js.map +1 -1
  260. package/dist/errors/internal.d.ts +1 -1
  261. package/dist/errors/internal.d.ts.map +1 -1
  262. package/dist/errors/internal.js +22 -24
  263. package/dist/errors/internal.js.map +1 -1
  264. package/dist/errors/redaction.d.ts +8 -0
  265. package/dist/errors/redaction.d.ts.map +1 -0
  266. package/dist/errors/types.d.ts +4 -0
  267. package/dist/errors/types.d.ts.map +1 -1
  268. package/dist/events/index.js +60 -63
  269. package/dist/events/index.js.map +1 -1
  270. package/dist/events/scope.js +4 -5
  271. package/dist/events/scope.js.map +1 -1
  272. package/dist/events/selectors/index.js +9 -10
  273. package/dist/events/selectors/index.js.map +1 -1
  274. package/dist/execution/agent.d.ts +3 -3
  275. package/dist/execution/agent.d.ts.map +1 -1
  276. package/dist/execution/agent.js +70 -82
  277. package/dist/execution/agent.js.map +1 -1
  278. package/dist/execution/durable.d.ts +1 -0
  279. package/dist/execution/durable.d.ts.map +1 -1
  280. package/dist/execution/primitive.d.ts +2 -0
  281. package/dist/execution/primitive.d.ts.map +1 -1
  282. package/dist/execution/primitive.js +63 -71
  283. package/dist/execution/primitive.js.map +3 -3
  284. package/dist/execution/request.d.ts +1 -0
  285. package/dist/execution/request.d.ts.map +1 -1
  286. package/dist/execution/request.js +65 -75
  287. package/dist/execution/request.js.map +3 -3
  288. package/dist/http/index.js +10 -11
  289. package/dist/http/index.js.map +1 -1
  290. package/dist/index.d.ts +14 -10
  291. package/dist/index.d.ts.map +1 -1
  292. package/dist/index.js +455 -477
  293. package/dist/index.js.map +1 -1
  294. package/dist/lake-storage/index.js +38 -42
  295. package/dist/lake-storage/index.js.map +1 -1
  296. package/dist/logging/index.d.ts +3 -4
  297. package/dist/logging/index.d.ts.map +1 -1
  298. package/dist/logging/index.js +18 -40
  299. package/dist/logging/index.js.map +1 -1
  300. package/dist/logging/internal.d.ts +5 -0
  301. package/dist/logging/internal.d.ts.map +1 -0
  302. package/dist/logging/internal.js +43 -0
  303. package/dist/logging/internal.js.map +9 -0
  304. package/dist/materialization/index.js +46 -49
  305. package/dist/materialization/index.js.map +1 -1
  306. package/dist/materializer/index.js +137 -145
  307. package/dist/materializer/index.js.map +1 -1
  308. package/dist/models/errors.d.ts +4 -0
  309. package/dist/models/errors.d.ts.map +1 -1
  310. package/dist/models/execution/binding.d.ts +9 -0
  311. package/dist/models/execution/binding.d.ts.map +1 -0
  312. package/dist/models/execution/errors.d.ts +9 -0
  313. package/dist/models/execution/errors.d.ts.map +1 -0
  314. package/dist/models/execution/index.d.ts +11 -0
  315. package/dist/models/execution/index.d.ts.map +1 -0
  316. package/dist/models/execution/index.js +55 -0
  317. package/dist/models/execution/index.js.map +9 -0
  318. package/dist/models/execution/model-call-accounting.d.ts +17 -0
  319. package/dist/models/execution/model-call-accounting.d.ts.map +1 -0
  320. package/dist/models/execution/model-call-admission.d.ts +47 -0
  321. package/dist/models/execution/model-call-admission.d.ts.map +1 -0
  322. package/dist/models/execution/model-call-limits.d.ts +15 -0
  323. package/dist/models/execution/model-call-limits.d.ts.map +1 -0
  324. package/dist/models/execution/model-call-recorder.d.ts +40 -0
  325. package/dist/models/execution/model-call-recorder.d.ts.map +1 -0
  326. package/dist/models/execution/model-call-recovery.d.ts +12 -0
  327. package/dist/models/execution/model-call-recovery.d.ts.map +1 -0
  328. package/dist/models/execution/recovery-queue.d.ts +5 -0
  329. package/dist/models/execution/recovery-queue.d.ts.map +1 -0
  330. package/dist/models/execution/types.d.ts +44 -0
  331. package/dist/models/execution/types.d.ts.map +1 -0
  332. package/dist/models/execution/usage.d.ts +5 -0
  333. package/dist/models/execution/usage.d.ts.map +1 -0
  334. package/dist/models/execution.d.ts +6 -0
  335. package/dist/models/execution.d.ts.map +1 -0
  336. package/dist/models/generation-types.d.ts +40 -0
  337. package/dist/models/generation-types.d.ts.map +1 -0
  338. package/dist/models/index.d.ts +1 -0
  339. package/dist/models/index.d.ts.map +1 -1
  340. package/dist/models/index.js +42 -43
  341. package/dist/models/index.js.map +1 -1
  342. package/dist/models/language-model.d.ts +3 -0
  343. package/dist/models/language-model.d.ts.map +1 -1
  344. package/dist/models/output.d.ts +5 -0
  345. package/dist/models/output.d.ts.map +1 -0
  346. package/dist/models/resolve.d.ts +4 -0
  347. package/dist/models/resolve.d.ts.map +1 -0
  348. package/dist/objects/execution.d.ts.map +1 -1
  349. package/dist/objects/index.js +75 -87
  350. package/dist/objects/index.js.map +1 -1
  351. package/dist/objects/query/index.js +67 -76
  352. package/dist/objects/query/index.js.map +1 -1
  353. package/dist/ontology/index.d.ts +1 -2
  354. package/dist/ontology/index.d.ts.map +1 -1
  355. package/dist/ontology/index.js +62 -113
  356. package/dist/ontology/index.js.map +1 -1
  357. package/dist/ontology/internal.d.ts +7 -0
  358. package/dist/ontology/internal.d.ts.map +1 -1
  359. package/dist/ontology/internal.js +65 -116
  360. package/dist/ontology/internal.js.map +3 -4
  361. package/dist/pipelines/index.js +57 -66
  362. package/dist/pipelines/index.js.map +1 -1
  363. package/dist/projections/internal.js +58 -67
  364. package/dist/projections/internal.js.map +1 -1
  365. package/dist/query.d.ts +0 -1
  366. package/dist/query.d.ts.map +1 -1
  367. package/dist/query.js +11 -15
  368. package/dist/query.js.map +1 -1
  369. package/dist/queues/index.d.ts +2 -1
  370. package/dist/queues/index.d.ts.map +1 -1
  371. package/dist/queues/index.js +6 -7
  372. package/dist/queues/index.js.map +1 -1
  373. package/dist/queues/types.d.ts +3 -20
  374. package/dist/queues/types.d.ts.map +1 -1
  375. package/dist/rules/internal.js +4 -5
  376. package/dist/rules/internal.js.map +1 -1
  377. package/dist/runtime/create.d.ts +2 -1
  378. package/dist/runtime/create.d.ts.map +1 -1
  379. package/dist/runtime/host.d.ts +2 -1
  380. package/dist/runtime/host.d.ts.map +1 -1
  381. package/dist/runtime/internal.js +13 -14
  382. package/dist/runtime/internal.js.map +1 -1
  383. package/dist/runtime/sixb.d.ts +2 -0
  384. package/dist/runtime/sixb.d.ts.map +1 -1
  385. package/dist/sandboxes/errors.d.ts +4 -0
  386. package/dist/sandboxes/errors.d.ts.map +1 -1
  387. package/dist/sandboxes/index.d.ts +2 -2
  388. package/dist/sandboxes/index.d.ts.map +1 -1
  389. package/dist/sandboxes/index.js +14 -13
  390. package/dist/sandboxes/index.js.map +1 -1
  391. package/dist/sandboxes/sandbox.d.ts +35 -7
  392. package/dist/sandboxes/sandbox.d.ts.map +1 -1
  393. package/dist/scheduler/index.js +9 -10
  394. package/dist/scheduler/index.js.map +1 -1
  395. package/dist/schedules/index.js +31 -33
  396. package/dist/schedules/index.js.map +1 -1
  397. package/dist/shares/internal.js +46 -54
  398. package/dist/shares/internal.js.map +2 -2
  399. package/dist/storage/action-runs/failure.js +7 -9
  400. package/dist/storage/action-runs/failure.js.map +1 -1
  401. package/dist/storage/action-runs/provider.js +4 -8
  402. package/dist/storage/action-runs/provider.js.map +1 -1
  403. package/dist/storage/agents/in-memory.d.ts.map +1 -1
  404. package/dist/storage/agents/provider.js +26 -30
  405. package/dist/storage/agents/provider.js.map +1 -1
  406. package/dist/storage/agents/types.d.ts +0 -3
  407. package/dist/storage/agents/types.d.ts.map +1 -1
  408. package/dist/storage/ai-cost/attribution.d.ts +4 -0
  409. package/dist/storage/ai-cost/attribution.d.ts.map +1 -0
  410. package/dist/storage/ai-cost/groups.d.ts +3 -0
  411. package/dist/storage/ai-cost/groups.d.ts.map +1 -1
  412. package/dist/storage/ai-cost/provider.d.ts +1 -0
  413. package/dist/storage/ai-cost/provider.d.ts.map +1 -1
  414. package/dist/storage/ai-cost/provider.js +30 -143
  415. package/dist/storage/ai-cost/provider.js.map +3 -4
  416. package/dist/storage/ai-cost/types.d.ts +15 -0
  417. package/dist/storage/ai-cost/types.d.ts.map +1 -1
  418. package/dist/storage/ai-limits/enforcement.js +14 -16
  419. package/dist/storage/ai-limits/enforcement.js.map +1 -1
  420. package/dist/storage/ai-limits/provider.js +56 -57
  421. package/dist/storage/ai-limits/provider.js.map +1 -1
  422. package/dist/storage/auth/in-memory.d.ts +1 -1
  423. package/dist/storage/auth/in-memory.d.ts.map +1 -1
  424. package/dist/storage/connector-connections/provider.js +34 -36
  425. package/dist/storage/connector-connections/provider.js.map +2 -2
  426. package/dist/storage/executions/in-memory.d.ts.map +1 -1
  427. package/dist/storage/executions/provider.d.ts +2 -1
  428. package/dist/storage/executions/provider.d.ts.map +1 -1
  429. package/dist/storage/executions/provider.js +14 -11
  430. package/dist/storage/executions/provider.js.map +3 -3
  431. package/dist/storage/executions/types.d.ts +6 -2
  432. package/dist/storage/executions/types.d.ts.map +1 -1
  433. package/dist/storage/executions/validation.d.ts +2 -0
  434. package/dist/storage/executions/validation.d.ts.map +1 -1
  435. package/dist/storage/in-memory/index.d.ts.map +1 -1
  436. package/dist/storage/index.d.ts +6 -7
  437. package/dist/storage/index.d.ts.map +1 -1
  438. package/dist/storage/index.js +221 -256
  439. package/dist/storage/index.js.map +1 -1
  440. package/dist/storage/internal.d.ts +10 -0
  441. package/dist/storage/internal.d.ts.map +1 -0
  442. package/dist/storage/internal.js +47 -0
  443. package/dist/storage/internal.js.map +9 -0
  444. package/dist/storage/ontology/provider.js +105 -109
  445. package/dist/storage/ontology/provider.js.map +1 -1
  446. package/dist/storage/operation-scope.js +18 -19
  447. package/dist/storage/operation-scope.js.map +1 -1
  448. package/dist/storage/pipeline-runs/provider.js +4 -6
  449. package/dist/storage/pipeline-runs/provider.js.map +1 -1
  450. package/dist/storage/projection-runs/provider.js +66 -70
  451. package/dist/storage/projection-runs/provider.js.map +1 -1
  452. package/dist/storage/share-grants/provider.js +17 -19
  453. package/dist/storage/share-grants/provider.js.map +1 -1
  454. package/dist/storage/share-sessions/provider.js +14 -15
  455. package/dist/storage/share-sessions/provider.js.map +1 -1
  456. package/dist/storage/sync-runs/provider.js +4 -6
  457. package/dist/storage/sync-runs/provider.js.map +1 -1
  458. package/dist/storage/webhook-runs/provider.js +4 -6
  459. package/dist/storage/webhook-runs/provider.js.map +1 -1
  460. package/dist/storage/workflow-runs/in-memory.d.ts.map +1 -1
  461. package/dist/storage/workflow-runs/provider.js +13 -21
  462. package/dist/storage/workflow-runs/provider.js.map +1 -1
  463. package/dist/storage/workflow-runs/types.d.ts +0 -3
  464. package/dist/storage/workflow-runs/types.d.ts.map +1 -1
  465. package/dist/syncs/index.js +55 -65
  466. package/dist/syncs/index.js.map +1 -1
  467. package/dist/testing/action-execution.d.ts +4 -1
  468. package/dist/testing/action-execution.d.ts.map +1 -1
  469. package/dist/testing/agent-execution.d.ts +1 -0
  470. package/dist/testing/agent-execution.d.ts.map +1 -1
  471. package/dist/testing/agent-storage-contract.d.ts.map +1 -1
  472. package/dist/testing/ai-model-call-groups-contract.d.ts.map +1 -1
  473. package/dist/testing/execution-storage-contract.d.ts.map +1 -1
  474. package/dist/testing/execution.d.ts +1 -0
  475. package/dist/testing/execution.d.ts.map +1 -1
  476. package/dist/testing/index.js +911 -799
  477. package/dist/testing/index.js.map +9 -9
  478. package/dist/testing/workflow-execution.d.ts +1 -0
  479. package/dist/testing/workflow-execution.d.ts.map +1 -1
  480. package/dist/webhooks/internal.js +51 -59
  481. package/dist/webhooks/internal.js.map +2 -2
  482. package/dist/workers/index.js +11 -13
  483. package/dist/workers/index.js.map +2 -2
  484. package/dist/workflows/failure.d.ts +2 -0
  485. package/dist/workflows/failure.d.ts.map +1 -1
  486. package/dist/workflows/index.js +135 -147
  487. package/dist/workflows/index.js.map +1 -1
  488. package/dist/workflows/request.d.ts.map +1 -1
  489. package/dist/workflows/run-dispatch.d.ts +0 -1
  490. package/dist/workflows/run-dispatch.d.ts.map +1 -1
  491. package/dist/workflows/types.d.ts +2 -0
  492. package/dist/workflows/types.d.ts.map +1 -1
  493. package/package.json +48 -30
  494. package/src/actions/run-dispatch.ts +2 -6
  495. package/src/actions/types/context.ts +2 -0
  496. package/src/actions/validation.ts +2 -1
  497. package/src/agents/adapters.ts +4 -9
  498. package/src/agents/{context.ts → context/entries.ts} +4 -4
  499. package/src/agents/context/index.ts +15 -0
  500. package/src/agents/context-model.ts +1 -1
  501. package/src/agents/context-resolution.ts +1 -1
  502. package/src/agents/index.ts +4 -4
  503. package/src/agents/message.ts +1 -1
  504. package/src/agents/model-loop.ts +8 -0
  505. package/src/agents/request.ts +11 -26
  506. package/src/agents/streams/index.ts +18 -0
  507. package/src/agents/streams/internal.ts +19 -0
  508. package/src/agents/{streams.ts → streams/protocol.ts} +5 -5
  509. package/src/agents/types.ts +1 -1
  510. package/src/agents/validation.ts +3 -7
  511. package/src/auth/index.ts +0 -1
  512. package/src/bootstrap/discovery.ts +81 -24
  513. package/src/bootstrap/index.ts +8 -1
  514. package/src/errors/internal.ts +90 -10
  515. package/src/errors/redaction.ts +98 -0
  516. package/src/errors/types.ts +4 -0
  517. package/src/execution/agent.ts +5 -3
  518. package/src/execution/durable.ts +11 -1
  519. package/src/execution/primitive.ts +5 -1
  520. package/src/execution/request.ts +3 -0
  521. package/src/index.ts +20 -18
  522. package/src/logging/index.ts +2 -33
  523. package/src/logging/internal.ts +43 -0
  524. package/src/models/errors.ts +12 -0
  525. package/src/models/execution/binding.ts +29 -0
  526. package/src/models/execution/errors.ts +18 -0
  527. package/src/models/execution/index.ts +26 -0
  528. package/src/models/execution/model-call-accounting.ts +211 -0
  529. package/src/models/execution/model-call-admission.ts +127 -0
  530. package/src/models/execution/model-call-limits.ts +135 -0
  531. package/src/models/execution/model-call-recorder.ts +235 -0
  532. package/src/models/execution/model-call-recovery.ts +125 -0
  533. package/src/models/execution/recovery-queue.ts +31 -0
  534. package/src/models/execution/types.ts +58 -0
  535. package/src/models/execution/usage.ts +23 -0
  536. package/src/models/execution.ts +207 -0
  537. package/src/models/generation-types.ts +50 -0
  538. package/src/models/index.ts +8 -0
  539. package/src/models/language-model.ts +3 -0
  540. package/src/models/output.ts +45 -0
  541. package/src/models/resolve.ts +27 -0
  542. package/src/objects/execution.ts +1 -1
  543. package/src/ontology/index.ts +1 -2
  544. package/src/ontology/internal.ts +35 -0
  545. package/src/projections/run-dispatch.ts +1 -0
  546. package/src/query.ts +0 -1
  547. package/src/queues/index.ts +4 -2
  548. package/src/queues/types.ts +6 -25
  549. package/src/runtime/create.ts +2 -1
  550. package/src/runtime/host.ts +2 -1
  551. package/src/runtime/sixb.ts +4 -0
  552. package/src/sandboxes/errors.ts +5 -0
  553. package/src/sandboxes/index.ts +3 -0
  554. package/src/sandboxes/sandbox.ts +35 -7
  555. package/src/storage/agents/in-memory.ts +0 -3
  556. package/src/storage/agents/types.ts +0 -3
  557. package/src/storage/ai-cost/analytics.ts +1 -1
  558. package/src/storage/ai-cost/attribution.ts +15 -0
  559. package/src/storage/ai-cost/groups.ts +5 -1
  560. package/src/storage/ai-cost/provider.ts +1 -0
  561. package/src/storage/ai-cost/types.ts +7 -0
  562. package/src/storage/auth/in-memory.ts +1 -1
  563. package/src/storage/executions/in-memory.ts +4 -9
  564. package/src/storage/executions/provider.ts +4 -0
  565. package/src/storage/executions/types.ts +6 -2
  566. package/src/storage/executions/validation.ts +32 -0
  567. package/src/storage/in-memory/index.ts +16 -1
  568. package/src/storage/index.ts +3 -29
  569. package/src/storage/internal.ts +20 -0
  570. package/src/storage/workflow-runs/in-memory.ts +0 -2
  571. package/src/storage/workflow-runs/types.ts +0 -3
  572. package/src/testing/action-execution.ts +9 -2
  573. package/src/testing/agent-execution.ts +3 -0
  574. package/src/testing/agent-storage-contract.ts +0 -5
  575. package/src/testing/ai-model-call-groups-contract.ts +74 -2
  576. package/src/testing/execution-storage-contract.ts +59 -1
  577. package/src/testing/execution.ts +6 -0
  578. package/src/testing/workflow-execution.ts +4 -0
  579. package/src/workflows/failure.ts +62 -1
  580. package/src/workflows/request.ts +0 -9
  581. package/src/workflows/run-dispatch.ts +0 -3
  582. package/src/workflows/types.ts +2 -0
  583. package/src/workflows/validation.ts +1 -1
  584. package/dist/agents/context.d.ts.map +0 -1
  585. package/dist/agents/context.js +0 -23
  586. package/dist/agents/streams.d.ts.map +0 -1
  587. package/dist/agents/streams.js +0 -55
  588. package/dist/chunk-08m3b6w8.js +0 -32
  589. package/dist/chunk-19jp6g9d.js.map +0 -11
  590. package/dist/chunk-2xns679x.js.map +0 -11
  591. package/dist/chunk-3xep5cjx.js.map +0 -15
  592. package/dist/chunk-407j3msh.js +0 -60
  593. package/dist/chunk-4qfkag59.js +0 -1568
  594. package/dist/chunk-4qfkag59.js.map +0 -20
  595. package/dist/chunk-5e3pq99w.js.map +0 -11
  596. package/dist/chunk-7y0f6rf1.js.map +0 -10
  597. package/dist/chunk-ajnan18g.js.map +0 -12
  598. package/dist/chunk-c15dr03f.js +0 -43
  599. package/dist/chunk-d8qkxt2v.js.map +0 -10
  600. package/dist/chunk-jq43kdvk.js +0 -50
  601. package/dist/chunk-k522z7v6.js.map +0 -10
  602. package/dist/chunk-p03r0h5s.js.map +0 -16
  603. package/dist/chunk-p1rzczbt.js +0 -218
  604. package/dist/chunk-rafagrwr.js.map +0 -11
  605. package/dist/chunk-xajtptbw.js.map +0 -40
  606. package/dist/chunk-y64skrwp.js +0 -19
  607. package/dist/chunk-zcnhxkvd.js +0 -7
  608. package/dist/logging/types.js +0 -27
  609. package/dist/logging/types.js.map +0 -9
  610. /package/dist/{chunk-zqqz8052.js → chunk-7n30ybym.js} +0 -0
  611. /package/dist/{chunk-zqqz8052.js.map → chunk-7n30ybym.js.map} +0 -0
  612. /package/dist/{chunk-4a849fr1.js.map → chunk-9tc8dxmn.js.map} +0 -0
  613. /package/dist/{chunk-j1sbhm7p.js → chunk-ey1nk510.js} +0 -0
  614. /package/dist/{chunk-j1sbhm7p.js.map → chunk-ey1nk510.js.map} +0 -0
  615. /package/dist/{chunk-z4ccwbkz.js.map → chunk-x9v4cx1d.js.map} +0 -0
@@ -0,0 +1,235 @@
1
+ import { randomUUID } from "node:crypto"
2
+ import type { ReadonlyJsonObject, RecordAiModelCallInput } from "../../storage"
3
+ import type { ModelCallEndEvent, ModelUsage } from "../events"
4
+ import type { LanguageModel, LanguageModelRequest } from "../language-model"
5
+ import { ModelUsageRecordingError } from "./errors"
6
+ import {
7
+ normalizeModelCallAccounting,
8
+ recordAiModelCallAccounting,
9
+ requireAccountingCapabilities,
10
+ } from "./model-call-accounting"
11
+ import {
12
+ aiModelCallOutputTokenAllowance,
13
+ type BeforeAiModelCall,
14
+ estimateAiModelCallInputTokens,
15
+ estimatedAiModelCallTotalTokens,
16
+ } from "./model-call-admission"
17
+ import type { AiModelCallLimitController } from "./model-call-limits"
18
+ import { isPermanentAiUsageRecoveryError } from "./model-call-recovery"
19
+ import type {
20
+ ModelCallAccountingStorage,
21
+ RecoverAiModelCall,
22
+ RecoverAiModelCallInput,
23
+ } from "./types"
24
+ import { aiModelCallUsageFromModel } from "./usage"
25
+
26
+ const STORAGE_RETRY_DELAYS_MS = [50, 200, 600] as const
27
+
28
+ export interface AiModelCallRecorderInput {
29
+ readonly storage: ModelCallAccountingStorage
30
+ readonly projectId: string
31
+ readonly executionId: string
32
+ readonly attempt: number
33
+ readonly requesterGroupIds: readonly string[]
34
+ readonly limits: AiModelCallLimitController
35
+ readonly recoverAiModelCall: RecoverAiModelCall
36
+ }
37
+
38
+ interface AiModelCallRecorderInternals {
39
+ readonly generateId?: () => string
40
+ readonly now?: () => Date
41
+ readonly retryDelaysMs?: readonly number[]
42
+ readonly sleep?: (ms: number) => Promise<void>
43
+ readonly recordAccounting?: (input: RecoverAiModelCallInput) => Promise<void>
44
+ }
45
+
46
+ /** Persist every completed provider call before another billable loop step can start. */
47
+ export class AiModelCallRecorder {
48
+ private readonly generateId: () => string
49
+ private readonly now: () => Date
50
+ private readonly retryDelaysMs: readonly number[]
51
+ private readonly sleep: (ms: number) => Promise<void>
52
+ private readonly recordAccounting: (input: RecoverAiModelCallInput) => Promise<void>
53
+ private readonly reservations = new Set<string>()
54
+ private admissionError: unknown
55
+ private recordingError: ModelUsageRecordingError | undefined
56
+
57
+ constructor(
58
+ private readonly input: AiModelCallRecorderInput,
59
+ internals: AiModelCallRecorderInternals = {}
60
+ ) {
61
+ requireAccountingCapabilities(input.storage)
62
+ this.generateId = internals.generateId ?? (() => `ai_usage_${randomUUID()}`)
63
+ this.now = internals.now ?? (() => new Date())
64
+ this.retryDelaysMs = internals.retryDelaysMs ?? STORAGE_RETRY_DELAYS_MS
65
+ this.sleep = internals.sleep ?? sleep
66
+ this.recordAccounting =
67
+ internals.recordAccounting ??
68
+ (async (recovery) => {
69
+ await recordAiModelCallAccounting({ storage: this.input.storage, ...recovery })
70
+ })
71
+ }
72
+
73
+ /** Wrap the resolved model so all calls in an execution share admission. */
74
+ wrapModel(model: LanguageModel): LanguageModel {
75
+ return {
76
+ providerId: model.providerId,
77
+ modelId: model.modelId,
78
+ definition: model.definition,
79
+ costEstimator: model.costEstimator,
80
+ ...(model.validateResponseFormat === undefined
81
+ ? {}
82
+ : { validateResponseFormat: model.validateResponseFormat.bind(model) }),
83
+ stream: async (request) => {
84
+ this.assertHealthy()
85
+ const inputTokens = estimateAiModelCallInputTokens({
86
+ prompt: request.messages,
87
+ tools: request.tools,
88
+ responseFormat: request.responseFormat,
89
+ })
90
+ const outputTokenAllowance = aiModelCallOutputTokenAllowance(request.maxOutputTokens)
91
+ let decision: Awaited<ReturnType<BeforeAiModelCall>>
92
+ try {
93
+ decision = await this.input.limits.beforeModelCall({
94
+ ...this.identity(request),
95
+ requesterGroupIds: this.input.requesterGroupIds,
96
+ providerId: model.providerId,
97
+ modelId: model.modelId,
98
+ costEstimator: model.costEstimator,
99
+ inputTokens,
100
+ outputTokenAllowance,
101
+ estimatedTotalTokens: estimatedAiModelCallTotalTokens(
102
+ inputTokens,
103
+ outputTokenAllowance
104
+ ),
105
+ })
106
+ } catch (error) {
107
+ // Execution boundaries must retain the original coded admission failure.
108
+ this.admissionError = error
109
+ throw error
110
+ }
111
+ if (decision.reservation === "active") this.reservations.add(request.callId)
112
+ try {
113
+ return await model.stream(request)
114
+ } catch (error) {
115
+ if (this.reservations.has(request.callId)) {
116
+ await this.input.limits.markModelCallUnknown(this.identity(request))
117
+ }
118
+ throw error
119
+ }
120
+ },
121
+ }
122
+ }
123
+
124
+ private identity(request: Pick<LanguageModelRequest, "callId">) {
125
+ return {
126
+ projectId: this.input.projectId,
127
+ executionId: this.input.executionId,
128
+ attempt: this.input.attempt,
129
+ callId: request.callId,
130
+ }
131
+ }
132
+
133
+ readonly onModelCallEnd = async (event: ModelCallEndEvent): Promise<void> => {
134
+ // Calls already in flight still need their own accounting after another call fails.
135
+ // Only admission is gated by the execution's sticky failure.
136
+ try {
137
+ const occurredAt = this.now()
138
+ const record: RecordAiModelCallInput = {
139
+ id: this.generateId(),
140
+ projectId: this.input.projectId,
141
+ executionId: this.input.executionId,
142
+ attempt: this.input.attempt,
143
+ callId: event.callId,
144
+ requesterGroupIds: this.input.requesterGroupIds,
145
+ providerId: event.providerId,
146
+ ...(event.providerIds === undefined ? {} : { providerIds: event.providerIds }),
147
+ requestedModelId: event.modelId,
148
+ ...(event.requestedReasoning === undefined
149
+ ? {}
150
+ : { requestedReasoning: event.requestedReasoning }),
151
+ ...(event.responseModelId === undefined ? {} : { responseModelId: event.responseModelId }),
152
+ responseId: event.responseId,
153
+ usage: aiModelCallUsageFromModel(event.usage),
154
+ ...(event.usage.raw === undefined ? {} : { rawUsage: rawUsage(event.usage) }),
155
+ occurredAt,
156
+ }
157
+ const recoveryInput = normalizeModelCallAccounting({
158
+ usage: record,
159
+ cost: event.cost,
160
+ ...(event.estimate === undefined ? {} : { estimate: event.estimate }),
161
+ ...(event.route === undefined ? {} : { route: event.route }),
162
+ ratedAt: new Date(occurredAt),
163
+ ...(this.reservations.has(event.callId) ? { reconcileLimitReservation: true } : {}),
164
+ })
165
+
166
+ try {
167
+ await retryOperation(
168
+ () => this.recordAccounting(recoveryInput),
169
+ this.retryDelaysMs,
170
+ this.sleep,
171
+ (error) => !isPermanentAiUsageRecoveryError(error)
172
+ )
173
+ } catch (storageError) {
174
+ if (isPermanentAiUsageRecoveryError(storageError)) throw storageError
175
+
176
+ try {
177
+ await retryOperation(
178
+ () => this.input.recoverAiModelCall(recoveryInput),
179
+ this.retryDelaysMs,
180
+ this.sleep,
181
+ (error) => !isPermanentAiUsageRecoveryError(error)
182
+ )
183
+ } catch (recoveryError) {
184
+ throw new AggregateError(
185
+ [storageError, recoveryError],
186
+ "Direct AI accounting and durable recovery both failed."
187
+ )
188
+ }
189
+ throw new ModelUsageRecordingError(this.input.executionId, event.callId, true, {
190
+ cause: storageError,
191
+ })
192
+ }
193
+ } catch (error) {
194
+ const recordingError =
195
+ error instanceof ModelUsageRecordingError
196
+ ? error
197
+ : new ModelUsageRecordingError(this.input.executionId, event.callId, false, {
198
+ cause: error,
199
+ })
200
+ this.recordingError ??= recordingError
201
+ throw recordingError
202
+ }
203
+ }
204
+
205
+ assertHealthy(): void {
206
+ if (this.admissionError !== undefined) throw this.admissionError
207
+ if (this.recordingError) throw this.recordingError
208
+ }
209
+ }
210
+
211
+ function rawUsage(usage: ModelUsage): ReadonlyJsonObject {
212
+ return structuredClone(usage.raw ?? {})
213
+ }
214
+
215
+ async function retryOperation<TResult>(
216
+ operation: () => Promise<TResult>,
217
+ retryDelaysMs: readonly number[],
218
+ wait: (ms: number) => Promise<void>,
219
+ shouldRetry: (error: unknown) => boolean
220
+ ): Promise<TResult> {
221
+ for (let attempt = 0; ; attempt += 1) {
222
+ try {
223
+ return await operation()
224
+ } catch (error) {
225
+ if (!shouldRetry(error)) throw error
226
+ const delay = retryDelaysMs[attempt]
227
+ if (delay === undefined) throw error
228
+ await wait(delay)
229
+ }
230
+ }
231
+ }
232
+
233
+ function sleep(ms: number): Promise<void> {
234
+ return new Promise((resolve) => setTimeout(resolve, ms))
235
+ }
@@ -0,0 +1,125 @@
1
+ import type { RecordAiModelCallInput, RecordAiModelCallResult } from "../../storage"
2
+ import { AiCostStorageError, AiLimitStorageError, AiUsageStorageError } from "../../storage"
3
+ import { normalizeAiModelCallRecord } from "../../storage/ai-usage/record"
4
+ import { recordAiModelCallAccounting } from "./model-call-accounting"
5
+ import type {
6
+ AiModelCallAccountingPayload,
7
+ AiModelCallRecordPayload,
8
+ AiModelCallRecoveryRecord,
9
+ ModelCallAccountingStorage,
10
+ RecoverAiModelCallInput,
11
+ } from "./types"
12
+ import { aiModelCallUsageFromModel } from "./usage"
13
+
14
+ class InvalidAiUsageRecoveryJobError extends Error {
15
+ readonly name = "InvalidAiUsageRecoveryJobError"
16
+
17
+ constructor(message: string, options?: ErrorOptions) {
18
+ super(`[SixbModels] ${message}`, options)
19
+ }
20
+ }
21
+
22
+ /** Encode one failed accounting transaction for a durable, JSON-safe handoff. */
23
+ export function modelCallRecoveryPayload(input: RecoverAiModelCallInput): {
24
+ readonly record: AiModelCallRecordPayload
25
+ readonly accounting: AiModelCallAccountingPayload
26
+ } {
27
+ normalizeAiModelCallRecord(input.usage)
28
+ return {
29
+ record: toQueuePayload(input.usage),
30
+ accounting: toAccountingPayload(input),
31
+ }
32
+ }
33
+
34
+ /** Replay one durable handoff through the idempotent atomic accounting boundary. */
35
+ export async function recordRecoveredAiModelCall(
36
+ storage: Pick<ModelCallAccountingStorage, "transaction">,
37
+ job: AiModelCallRecoveryRecord
38
+ ): Promise<RecordAiModelCallResult> {
39
+ const usage = fromQueuePayload(job)
40
+ const accounting = accountingFromQueuePayload(job)
41
+ return recordAiModelCallAccounting({ storage, usage, ...accounting })
42
+ }
43
+
44
+ /** Validation and referential-integrity failures cannot become valid through queue redelivery. */
45
+ export function isPermanentAiUsageRecoveryError(error: unknown): boolean {
46
+ return (
47
+ error instanceof InvalidAiUsageRecoveryJobError ||
48
+ error instanceof TypeError ||
49
+ (error instanceof AiUsageStorageError &&
50
+ (error.code === "duplicate_id" || error.code === "missing_execution")) ||
51
+ (error instanceof AiCostStorageError &&
52
+ (error.code === "missing_usage" || error.code === "cost_mismatch")) ||
53
+ (error instanceof AiLimitStorageError &&
54
+ (error.code === "missing_execution" ||
55
+ error.code === "missing_reservation" ||
56
+ error.code === "missing_usage_record" ||
57
+ error.code === "usage_mismatch" ||
58
+ error.code === "reservation_conflict" ||
59
+ error.code === "reconciliation_conflict" ||
60
+ error.code === "invalid_reservation_state"))
61
+ )
62
+ }
63
+
64
+ function toQueuePayload(record: RecordAiModelCallInput): AiModelCallRecordPayload {
65
+ return {
66
+ id: record.id,
67
+ executionId: record.executionId,
68
+ attempt: record.attempt,
69
+ callId: record.callId,
70
+ requesterGroupIds: [...record.requesterGroupIds],
71
+ providerId: record.providerId,
72
+ ...(record.providerIds === undefined
73
+ ? {}
74
+ : { providerIds: structuredClone(record.providerIds) }),
75
+ requestedModelId: record.requestedModelId,
76
+ ...(record.requestedReasoning === undefined
77
+ ? {}
78
+ : { requestedReasoning: structuredClone(record.requestedReasoning) }),
79
+ ...(record.responseModelId === undefined ? {} : { responseModelId: record.responseModelId }),
80
+ responseId: record.responseId,
81
+ usage: aiModelCallUsageFromModel(record.usage),
82
+ ...(record.rawUsage === undefined ? {} : { rawUsage: structuredClone(record.rawUsage) }),
83
+ occurredAt: record.occurredAt.toISOString(),
84
+ }
85
+ }
86
+
87
+ function toAccountingPayload(input: RecoverAiModelCallInput): AiModelCallAccountingPayload {
88
+ return {
89
+ cost: structuredClone(input.cost),
90
+ ...(input.estimate === undefined ? {} : { estimate: structuredClone(input.estimate) }),
91
+ ...(input.route === undefined ? {} : { route: structuredClone(input.route) }),
92
+ ratedAt: input.ratedAt.toISOString(),
93
+ ...(input.reconcileLimitReservation ? { reconcileLimitReservation: true } : {}),
94
+ }
95
+ }
96
+
97
+ function fromQueuePayload(job: AiModelCallRecoveryRecord): RecordAiModelCallInput {
98
+ const occurredAt = parseDate(job.payload.record.occurredAt, job.id, "occurredAt")
99
+ return { ...job.payload.record, projectId: job.projectId, occurredAt }
100
+ }
101
+
102
+ function accountingFromQueuePayload(
103
+ job: AiModelCallRecoveryRecord
104
+ ): Omit<RecoverAiModelCallInput, "usage"> {
105
+ const accounting = job.payload.accounting
106
+ return {
107
+ cost: structuredClone(accounting.cost),
108
+ ...(accounting.estimate === undefined
109
+ ? {}
110
+ : { estimate: structuredClone(accounting.estimate) }),
111
+ ...(accounting.route === undefined ? {} : { route: structuredClone(accounting.route) }),
112
+ ratedAt: parseDate(accounting.ratedAt, job.id, "ratedAt"),
113
+ reconcileLimitReservation: accounting.reconcileLimitReservation === true,
114
+ }
115
+ }
116
+
117
+ function parseDate(value: string, jobId: string, field: string): Date {
118
+ const date = new Date(value)
119
+ if (!Number.isFinite(date.getTime())) {
120
+ throw new InvalidAiUsageRecoveryJobError(
121
+ `AI usage recovery job '${jobId}' has an invalid ${field} timestamp.`
122
+ )
123
+ }
124
+ return date
125
+ }
@@ -0,0 +1,31 @@
1
+ import { createSixbError } from "../../errors/internal"
2
+ import type { AgentQueueJob, Queue } from "../../queues"
3
+ import { modelCallRecoveryPayload } from "./model-call-recovery"
4
+ import type { RecoverAiModelCallInput } from "./types"
5
+
6
+ /** Stable queue identity: a lost enqueue response can safely retry the same accounting handoff. */
7
+ function agentAiUsageRecoveryJobId(recordId: string): string {
8
+ return `agt_usage_job_${recordId}`
9
+ }
10
+
11
+ /** Transport adapter for the agent worker's existing durable recovery lane. */
12
+ export async function enqueueAiModelCallRecovery(
13
+ queue: Pick<Queue<AgentQueueJob>, "enqueue">,
14
+ input: RecoverAiModelCallInput
15
+ ): Promise<void> {
16
+ const payload = modelCallRecoveryPayload(input)
17
+ const record = input.usage
18
+ const jobId = agentAiUsageRecoveryJobId(record.id)
19
+ const [job] = await queue.enqueue({
20
+ projectId: record.projectId,
21
+ jobs: [{ id: jobId, type: "agent.ai-usage.record.requested", payload }],
22
+ })
23
+
24
+ if (job?.id !== jobId || job.type !== "agent.ai-usage.record.requested") {
25
+ throw createSixbError(
26
+ "internal.unexpected",
27
+ `[SixbModels] Agent queue did not confirm AI usage recovery job '${jobId}'.`,
28
+ { details: { jobId } }
29
+ )
30
+ }
31
+ }
@@ -0,0 +1,58 @@
1
+ import type {
2
+ AiCostStorage,
3
+ AiLimitStorage,
4
+ AiUsageStorage,
5
+ RecordAiModelCallInput,
6
+ Storage,
7
+ } from "../../storage"
8
+ import type { ModelRoute } from "../events"
9
+ import type { ModelCallCost, ModelCostEstimate } from "../pricing"
10
+
11
+ /** Only the stores and transaction boundary needed by model-call accounting. */
12
+ export interface ModelCallAccountingStorage extends Pick<Storage, "transaction"> {
13
+ readonly aiUsage: AiUsageStorage
14
+ readonly aiCosts: AiCostStorage
15
+ readonly aiLimits: AiLimitStorage
16
+ }
17
+
18
+ export interface RecoverAiModelCallInput {
19
+ readonly usage: RecordAiModelCallInput
20
+ readonly cost: ModelCallCost
21
+ readonly estimate?: ModelCostEstimate
22
+ readonly route?: ModelRoute
23
+ readonly ratedAt: Date
24
+ /** True only when admission created an aggregate-budget reservation for this provider attempt. */
25
+ readonly reconcileLimitReservation?: boolean
26
+ }
27
+
28
+ export type RecoverAiModelCall = (input: RecoverAiModelCallInput) => Promise<void>
29
+
30
+ /** JSON-safe ledger input shared by durable recovery transports. */
31
+ export type AiModelCallRecordPayload = Omit<
32
+ RecordAiModelCallInput,
33
+ "projectId" | "usage" | "occurredAt" | "recordedAt"
34
+ > & {
35
+ readonly usage: {
36
+ readonly [Field in keyof RecordAiModelCallInput["usage"]]: RecordAiModelCallInput["usage"][Field]
37
+ }
38
+ readonly occurredAt: string
39
+ }
40
+
41
+ export interface AiModelCallAccountingPayload {
42
+ readonly estimate?: ModelCostEstimate
43
+ readonly cost: ModelCallCost
44
+ readonly route?: ModelRoute
45
+ readonly ratedAt: string
46
+ /** True when admission created a reservation that recovery must reconcile. */
47
+ readonly reconcileLimitReservation?: boolean
48
+ }
49
+
50
+ /** Transport identity is used only for recovery diagnostics, not accounting identity. */
51
+ export interface AiModelCallRecoveryRecord {
52
+ readonly id: string
53
+ readonly projectId: string
54
+ readonly payload: {
55
+ readonly record: AiModelCallRecordPayload
56
+ readonly accounting: AiModelCallAccountingPayload
57
+ }
58
+ }
@@ -0,0 +1,23 @@
1
+ import type { AiModelCallUsageInput } from "../../storage"
2
+ import type { ModelUsage } from "../events"
3
+
4
+ /** Map one provider-neutral model call into Sixb's durable accounting vocabulary. */
5
+ export function aiModelCallUsageFromModel(usage: ModelUsage): AiModelCallUsageInput {
6
+ return {
7
+ ...(usage.inputTokens === undefined ? {} : { inputTokens: usage.inputTokens }),
8
+ ...(usage.outputTokens === undefined ? {} : { outputTokens: usage.outputTokens }),
9
+ ...(usage.uncachedInputTokens === undefined
10
+ ? {}
11
+ : { uncachedInputTokens: usage.uncachedInputTokens }),
12
+ ...(usage.cacheReadInputTokens === undefined
13
+ ? {}
14
+ : { cacheReadInputTokens: usage.cacheReadInputTokens }),
15
+ ...(usage.cacheWriteInputTokens === undefined
16
+ ? {}
17
+ : { cacheWriteInputTokens: usage.cacheWriteInputTokens }),
18
+ ...(usage.textOutputTokens === undefined ? {} : { textOutputTokens: usage.textOutputTokens }),
19
+ ...(usage.reasoningOutputTokens === undefined
20
+ ? {}
21
+ : { reasoningOutputTokens: usage.reasoningOutputTokens }),
22
+ }
23
+ }
@@ -0,0 +1,207 @@
1
+ import { runModelLoop } from "../agents/model-loop"
2
+ import { assertProviderAccess } from "../authorization"
3
+ import type { ExecutionContext } from "../execution"
4
+ import { ensureExecutionRecord, executionRecordInputFromRuntime } from "../execution/durable"
5
+ import type { SixbRuntimeContext } from "../runtime/types"
6
+ import type { ModelCatalog } from "./catalog"
7
+ import { ModelProviderError, ModelStreamError, UnsupportedModelFeatureError } from "./errors"
8
+ import type { ModelCallEndEvent } from "./events"
9
+ import { type ModelExecutionAttempt, registerModelExecutionBinding } from "./execution/binding"
10
+ import { requireAccountingCapabilities } from "./execution/model-call-accounting"
11
+ import { aiModelCallOutputTokenAllowance } from "./execution/model-call-admission"
12
+ import { createAiModelCallLimitController } from "./execution/model-call-limits"
13
+ import { AiModelCallRecorder } from "./execution/model-call-recorder"
14
+ import { enqueueAiModelCallRecovery } from "./execution/recovery-queue"
15
+ import type {
16
+ InferLanguageModelOutput,
17
+ LanguageModelGenerateInput,
18
+ LanguageModelGenerateResult,
19
+ LanguageModelOutputShape,
20
+ ModelsRuntime,
21
+ } from "./generation-types"
22
+ import { modelReasoningSupportIssue } from "./language-model"
23
+ import type { ModelMessage } from "./messages"
24
+ import { languageModelOutput } from "./output"
25
+ import { resolveLanguageModel } from "./resolve"
26
+
27
+ export function createModelsRuntime(
28
+ runtime: SixbRuntimeContext,
29
+ execution: ExecutionContext,
30
+ catalog: ModelCatalog | undefined
31
+ ): ModelsRuntime {
32
+ let binding: ModelExecutionAttempt | undefined
33
+ let recorder: Promise<AiModelCallRecorder> | undefined
34
+
35
+ async function createRecorder(): Promise<AiModelCallRecorder> {
36
+ const storage = {
37
+ ...requireAccountingCapabilities(runtime.storage),
38
+ transaction: runtime.storage.transaction.bind(runtime.storage),
39
+ }
40
+ if (!binding) {
41
+ throw new Error(
42
+ "[SixbModels] Generation requires a bound request or worker execution attempt."
43
+ )
44
+ }
45
+ const { requesterGroupIds } = await ensureExecutionRecord(
46
+ runtime.storage.executions,
47
+ executionRecordInputFromRuntime({
48
+ execution,
49
+ runtimeAuthorization: runtime.runtimeAuthorization,
50
+ })
51
+ )
52
+ return new AiModelCallRecorder({
53
+ storage,
54
+ projectId: runtime.projectId,
55
+ executionId: execution.id,
56
+ attempt: binding.attempt,
57
+ requesterGroupIds,
58
+ limits: createAiModelCallLimitController({
59
+ storage,
60
+ projectId: runtime.projectId,
61
+ requestedBy: execution.requestedBy,
62
+ requesterGroupIds,
63
+ }),
64
+ recoverAiModelCall: (input) => enqueueAiModelCallRecovery(runtime.queues.agents, input),
65
+ })
66
+ }
67
+
68
+ function generate<const TShape extends LanguageModelOutputShape | undefined = undefined>(
69
+ input: LanguageModelGenerateInput<TShape>
70
+ ): Promise<
71
+ LanguageModelGenerateResult<
72
+ TShape extends LanguageModelOutputShape ? InferLanguageModelOutput<TShape> : string
73
+ >
74
+ >
75
+ async function generate(
76
+ input: LanguageModelGenerateInput<LanguageModelOutputShape | undefined>
77
+ ): Promise<LanguageModelGenerateResult<unknown>> {
78
+ assertProviderAccess(runtime, execution, "models.language.generate")
79
+ const messages = generationMessages(input)
80
+ if (!binding) {
81
+ throw new Error(
82
+ "[SixbModels] Generation requires a bound request or worker execution attempt."
83
+ )
84
+ }
85
+ const signal = input.signal ? AbortSignal.any([binding.signal, input.signal]) : binding.signal
86
+ signal.throwIfAborted()
87
+ const selected = input.model
88
+ ? catalog
89
+ ? catalog.language.getByRef({
90
+ provider: input.model.providerId,
91
+ modelId: input.model.modelId,
92
+ })?.model
93
+ : input.model
94
+ : catalog?.language.default.model
95
+ if (!selected) {
96
+ throw new Error(
97
+ input.model
98
+ ? `[SixbModels] Model '${input.model.providerId}/${input.model.modelId}' is not configured in models.language.`
99
+ : "[SixbModels] Configure models.language in createSixb() or supply a model to generate()."
100
+ )
101
+ }
102
+ const output =
103
+ input.output === undefined
104
+ ? undefined
105
+ : languageModelOutput(input.output, runtime.ontology.getValueTypesById())
106
+ const model = await resolveLanguageModel(selected)
107
+ const reasoningIssue = modelReasoningSupportIssue(
108
+ model.definition.capabilities.reasoning,
109
+ input.reasoning
110
+ )
111
+ if (reasoningIssue) throw new UnsupportedModelFeatureError(`[SixbModels] ${reasoningIssue}.`)
112
+ if (output && model.definition.capabilities.nativeStructuredOutput === false) {
113
+ throw new UnsupportedModelFeatureError(
114
+ "[SixbModels] Model does not support native structured output."
115
+ )
116
+ }
117
+ const maxOutputTokens = Math.min(
118
+ aiModelCallOutputTokenAllowance(input.maxOutputTokens ?? model.definition.maxOutputTokens),
119
+ model.definition.maxOutputTokens ?? Infinity
120
+ )
121
+ if (typeof input.reasoning === "object" && input.reasoning.budgetTokens >= maxOutputTokens) {
122
+ throw new TypeError("[SixbModels] Output allowance must exceed the reasoning token budget.")
123
+ }
124
+ recorder ??= createRecorder()
125
+ const accounting = await recorder
126
+ accounting.assertHealthy()
127
+ signal.throwIfAborted()
128
+ let event: ModelCallEndEvent | undefined
129
+ const options = {
130
+ model: accounting.wrapModel(model),
131
+ messages,
132
+ maxSteps: 1,
133
+ rejectLocalToolCalls: true,
134
+ maxOutputTokens,
135
+ reasoning: input.reasoning,
136
+ caching: input.caching,
137
+ signal,
138
+ onModelCallEnd: async (completed: ModelCallEndEvent) => {
139
+ await accounting.onModelCallEnd(completed)
140
+ event = completed
141
+ },
142
+ }
143
+ const result = output ? await runModelLoop({ ...options, output }) : await runModelLoop(options)
144
+ if (result.status === "aborted") {
145
+ signal.throwIfAborted()
146
+ throw new DOMException("Model generation aborted", "AbortError")
147
+ }
148
+ if (result.finishReason === "error" || result.finishReason === "content-filter") {
149
+ throw new ModelProviderError(
150
+ `[SixbModels] Generation ended with '${result.finishReason}'.`,
151
+ model.providerId,
152
+ model.modelId
153
+ )
154
+ }
155
+ if (!event)
156
+ throw new ModelStreamError("[SixbModels] Generation completed without accounting metadata.")
157
+ return {
158
+ output: result.output,
159
+ usage: event.usage,
160
+ cost: event.cost,
161
+ callId: event.callId,
162
+ finishReason: result.finishReason,
163
+ }
164
+ }
165
+
166
+ const models: ModelsRuntime = {
167
+ language: { generate },
168
+ }
169
+ registerModelExecutionBinding(models, (input) => {
170
+ binding = { attempt: input.attempt, signal: input.signal }
171
+ })
172
+ return models
173
+ }
174
+
175
+ function generationMessages(
176
+ input: LanguageModelGenerateInput<LanguageModelOutputShape | undefined>
177
+ ): readonly ModelMessage[] {
178
+ if ((input.prompt === undefined) === (input.messages === undefined)) {
179
+ throw new TypeError("[SixbModels] Supply exactly one of prompt or messages.")
180
+ }
181
+ if (input.prompt !== undefined && typeof input.prompt !== "string") {
182
+ throw new TypeError("[SixbModels] prompt must be a string.")
183
+ }
184
+ if (input.messages !== undefined && !Array.isArray(input.messages)) {
185
+ throw new TypeError("[SixbModels] messages must be an array.")
186
+ }
187
+ if (input.instructions !== undefined && typeof input.instructions !== "string") {
188
+ throw new TypeError("[SixbModels] instructions must be a string.")
189
+ }
190
+ if (
191
+ input.maxOutputTokens !== undefined &&
192
+ (!Number.isSafeInteger(input.maxOutputTokens) || input.maxOutputTokens <= 0)
193
+ ) {
194
+ throw new TypeError("[SixbModels] maxOutputTokens must be a positive safe integer.")
195
+ }
196
+ if (input.caching !== undefined && input.caching !== "auto" && input.caching !== "off") {
197
+ throw new TypeError("[SixbModels] caching must be 'auto' or 'off'.")
198
+ }
199
+ return [
200
+ ...(input.instructions === undefined
201
+ ? []
202
+ : [{ role: "system" as const, content: input.instructions }]),
203
+ ...(input.prompt !== undefined
204
+ ? [{ role: "user" as const, content: [{ type: "text" as const, text: input.prompt }] }]
205
+ : (input.messages ?? [])),
206
+ ]
207
+ }