@sixb/core 0.1.11 → 0.1.12

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 (641) hide show
  1. package/dist/actions/builders/params.d.ts +1 -22
  2. package/dist/actions/builders/params.d.ts.map +1 -1
  3. package/dist/actions/index.js +29 -28
  4. package/dist/actions/index.js.map +1 -1
  5. package/dist/actions/types/params.d.ts +10 -44
  6. package/dist/actions/types/params.d.ts.map +1 -1
  7. package/dist/actions/validation.d.ts.map +1 -1
  8. package/dist/actions/worker.js +3 -2
  9. package/dist/actions/worker.js.map +2 -2
  10. package/dist/agents/errors.d.ts +1 -1
  11. package/dist/agents/errors.d.ts.map +1 -1
  12. package/dist/agents/execution.d.ts +15 -9
  13. package/dist/agents/execution.d.ts.map +1 -1
  14. package/dist/agents/ids.d.ts +2 -0
  15. package/dist/agents/ids.d.ts.map +1 -1
  16. package/dist/agents/index.d.ts +1 -1
  17. package/dist/agents/index.d.ts.map +1 -1
  18. package/dist/agents/index.js +48 -42
  19. package/dist/agents/index.js.map +1 -1
  20. package/dist/agents/request.d.ts.map +1 -1
  21. package/dist/agents/sandbox.d.ts +5 -0
  22. package/dist/agents/sandbox.d.ts.map +1 -0
  23. package/dist/agents/streams/index.js +4 -3
  24. package/dist/agents/streams/index.js.map +1 -1
  25. package/dist/agents/streams/internal.js +4 -3
  26. package/dist/agents/streams/internal.js.map +1 -1
  27. package/dist/agents/validation.d.ts.map +1 -1
  28. package/dist/auth/index.js +8 -6
  29. package/dist/auth/index.js.map +1 -1
  30. package/dist/authorization/index.js +5 -4
  31. package/dist/authorization/index.js.map +1 -1
  32. package/dist/bootstrap/index.js +50 -46
  33. package/dist/bootstrap/index.js.map +1 -1
  34. package/dist/{chunk-17kfctj6.js → chunk-0mza4xb2.js} +2 -2
  35. package/dist/{chunk-g00bfdq6.js → chunk-2cxv584m.js} +12 -56
  36. package/dist/{chunk-g00bfdq6.js.map → chunk-2cxv584m.js.map} +3 -3
  37. package/dist/{chunk-jsy70480.js → chunk-2h63nrde.js} +365 -95
  38. package/dist/chunk-2h63nrde.js.map +20 -0
  39. package/dist/{chunk-1yefycb1.js → chunk-3bnt2wna.js} +2 -2
  40. package/dist/{chunk-awbhdqyc.js → chunk-3ghw2t5q.js} +1 -1
  41. package/dist/{chunk-b19g04jk.js → chunk-3h7ctayx.js} +1 -1
  42. package/dist/{chunk-wjasrj67.js → chunk-3qpcrcj8.js} +1 -1
  43. package/dist/{chunk-5hz0fnca.js → chunk-4k53sm9e.js} +6 -2
  44. package/dist/chunk-4k53sm9e.js.map +12 -0
  45. package/dist/chunk-4ph94nhd.js +81 -0
  46. package/dist/chunk-4ph94nhd.js.map +10 -0
  47. package/dist/chunk-58geavnf.js +29 -0
  48. package/dist/chunk-58geavnf.js.map +10 -0
  49. package/dist/{chunk-0y39rgsb.js → chunk-5tetw4hn.js} +1 -1
  50. package/dist/{chunk-7bs40fe1.js → chunk-69266efg.js} +83 -2
  51. package/dist/chunk-69266efg.js.map +12 -0
  52. package/dist/{chunk-a0e6x5hd.js → chunk-6ma8dvzc.js} +121 -53
  53. package/dist/chunk-6ma8dvzc.js.map +15 -0
  54. package/dist/{chunk-skz0hst3.js → chunk-7c2g3sz9.js} +6 -86
  55. package/dist/{chunk-skz0hst3.js.map → chunk-7c2g3sz9.js.map} +3 -3
  56. package/dist/{chunk-z0s4axeh.js → chunk-7qnvhtcd.js} +93 -17
  57. package/dist/{chunk-z0s4axeh.js.map → chunk-7qnvhtcd.js.map} +7 -6
  58. package/dist/{chunk-c5rkjrgp.js → chunk-7ytf06d3.js} +1 -1
  59. package/dist/{chunk-mrp7k0pw.js → chunk-91kcnbf0.js} +9 -14
  60. package/dist/chunk-91kcnbf0.js.map +10 -0
  61. package/dist/{chunk-yv79ncbv.js → chunk-96yw3pwd.js} +3 -3
  62. package/dist/chunk-96yw3pwd.js.map +10 -0
  63. package/dist/chunk-98cw09sw.js.map +2 -2
  64. package/dist/{chunk-93csa55g.js → chunk-axndsymr.js} +10 -4
  65. package/dist/chunk-axndsymr.js.map +11 -0
  66. package/dist/{chunk-4zhmdsx6.js → chunk-b768c93y.js} +61 -23
  67. package/dist/{chunk-4zhmdsx6.js.map → chunk-b768c93y.js.map} +5 -5
  68. package/dist/{chunk-dz5h08xv.js → chunk-bbaa1fet.js} +24 -9
  69. package/dist/{chunk-dz5h08xv.js.map → chunk-bbaa1fet.js.map} +4 -4
  70. package/dist/{chunk-7apz6hg4.js → chunk-bet1rb9h.js} +8 -4
  71. package/dist/chunk-bet1rb9h.js.map +10 -0
  72. package/dist/{chunk-358caqf5.js → chunk-bfjv1adk.js} +2 -2
  73. package/dist/{chunk-g91qxjj0.js → chunk-bg2bs62d.js} +5 -5
  74. package/dist/{chunk-860dwwy0.js → chunk-cd234ba4.js} +22 -12
  75. package/dist/chunk-cd234ba4.js.map +14 -0
  76. package/dist/chunk-dmn70ztd.js.map +2 -2
  77. package/dist/{chunk-d63nnr5b.js → chunk-e1f1sqba.js} +39 -53
  78. package/dist/{chunk-d63nnr5b.js.map → chunk-e1f1sqba.js.map} +5 -6
  79. package/dist/{chunk-ap0g1g74.js → chunk-eyjzgav0.js} +39 -4
  80. package/dist/chunk-eyjzgav0.js.map +12 -0
  81. package/dist/{chunk-rb1xx120.js → chunk-f06sf7rr.js} +9 -5
  82. package/dist/chunk-f06sf7rr.js.map +11 -0
  83. package/dist/{chunk-g6cke204.js → chunk-f85hpqnm.js} +1 -1
  84. package/dist/{chunk-vsj3mdfj.js → chunk-fc5zfxy1.js} +1 -1
  85. package/dist/{chunk-38zv5rkr.js → chunk-g2gezsg5.js} +1 -1
  86. package/dist/{chunk-38zv5rkr.js.map → chunk-g2gezsg5.js.map} +2 -2
  87. package/dist/{chunk-01kj2pbh.js → chunk-g50nxqs5.js} +53 -66
  88. package/dist/chunk-g50nxqs5.js.map +18 -0
  89. package/dist/{chunk-1824gssz.js → chunk-gswwr35f.js} +4 -4
  90. package/dist/{chunk-92vk7gta.js → chunk-gzt6v1ja.js} +1 -1
  91. package/dist/{chunk-aa6z4a19.js → chunk-hgqpcmyr.js} +2 -1
  92. package/dist/chunk-hgqpcmyr.js.map +12 -0
  93. package/dist/{chunk-gqh45d2n.js → chunk-hkw8rykk.js} +2 -2
  94. package/dist/{chunk-f4w3yp4f.js → chunk-hzw7yv5g.js} +104 -21
  95. package/dist/chunk-hzw7yv5g.js.map +13 -0
  96. package/dist/{chunk-cfvakeax.js → chunk-jjwhy3rs.js} +5 -5
  97. package/dist/chunk-kept9cdd.js +29 -0
  98. package/dist/chunk-kept9cdd.js.map +10 -0
  99. package/dist/{chunk-ftv470j8.js → chunk-m7cx05vp.js} +247 -16
  100. package/dist/{chunk-ftv470j8.js.map → chunk-m7cx05vp.js.map} +14 -10
  101. package/dist/{chunk-z0271qkp.js → chunk-mdnw7nj8.js} +8 -6
  102. package/dist/chunk-mdnw7nj8.js.map +15 -0
  103. package/dist/{chunk-gq8vhakp.js → chunk-nzsy3xrp.js} +249 -86
  104. package/dist/{chunk-gq8vhakp.js.map → chunk-nzsy3xrp.js.map} +13 -11
  105. package/dist/chunk-p1683c0v.js +104 -0
  106. package/dist/chunk-p1683c0v.js.map +11 -0
  107. package/dist/chunk-p6r1ex7t.js +93 -0
  108. package/dist/chunk-p6r1ex7t.js.map +10 -0
  109. package/dist/{chunk-sepyxgpc.js → chunk-qm535afa.js} +10 -10
  110. package/dist/{chunk-sepyxgpc.js.map → chunk-qm535afa.js.map} +4 -4
  111. package/dist/chunk-r5zythxp.js +552 -0
  112. package/dist/chunk-r5zythxp.js.map +17 -0
  113. package/dist/{chunk-9qsh3p5y.js → chunk-rb143ggb.js} +1 -1
  114. package/dist/{chunk-653vwrzr.js → chunk-rdghfsss.js} +1 -1
  115. package/dist/{chunk-3ckk0xfj.js → chunk-sfypc7mk.js} +18 -13
  116. package/dist/{chunk-3ckk0xfj.js.map → chunk-sfypc7mk.js.map} +3 -3
  117. package/dist/{chunk-f0rwz2vh.js → chunk-t6f3tdnr.js} +2 -54
  118. package/dist/chunk-t6f3tdnr.js.map +10 -0
  119. package/dist/{chunk-x9m9x2eq.js → chunk-t7dzd1tm.js} +3 -3
  120. package/dist/{chunk-pr2h4bv4.js → chunk-tg4g4zh0.js} +3 -3
  121. package/dist/chunk-vpxss818.js +56 -0
  122. package/dist/chunk-vpxss818.js.map +10 -0
  123. package/dist/{chunk-ms2tmn1k.js → chunk-vsg0g7h9.js} +53 -57
  124. package/dist/chunk-vsg0g7h9.js.map +17 -0
  125. package/dist/{chunk-8vj0rjgs.js → chunk-wjffn5m4.js} +1 -1
  126. package/dist/{chunk-wf88w4kp.js → chunk-x9tmx3fc.js} +2 -2
  127. package/dist/{chunk-fh8kgex1.js → chunk-xn686q2e.js} +8 -8
  128. package/dist/{chunk-g53f0e4j.js → chunk-xnx96gfy.js} +45 -17
  129. package/dist/{chunk-g53f0e4j.js.map → chunk-xnx96gfy.js.map} +3 -3
  130. package/dist/{chunk-v2vcg0w6.js → chunk-xtfryrfb.js} +2 -2
  131. package/dist/chunk-y0v18c2j.js +363 -0
  132. package/dist/chunk-y0v18c2j.js.map +14 -0
  133. package/dist/{chunk-72w2pxk7.js → chunk-y1ahv8b7.js} +11 -3
  134. package/dist/{chunk-72w2pxk7.js.map → chunk-y1ahv8b7.js.map} +3 -3
  135. package/dist/chunk-y3ev53cq.js +84 -0
  136. package/dist/chunk-y3ev53cq.js.map +10 -0
  137. package/dist/{chunk-gqm76kse.js → chunk-ybhz3j9g.js} +342 -41
  138. package/dist/{chunk-gqm76kse.js.map → chunk-ybhz3j9g.js.map} +17 -12
  139. package/dist/{chunk-z30bv4ga.js → chunk-yxb4c62x.js} +3 -2
  140. package/dist/{chunk-z30bv4ga.js.map → chunk-yxb4c62x.js.map} +3 -3
  141. package/dist/chunk-z3y5kg1x.js +14 -0
  142. package/dist/chunk-z3y5kg1x.js.map +10 -0
  143. package/dist/datasets/validation.d.ts +4 -0
  144. package/dist/datasets/validation.d.ts.map +1 -1
  145. package/dist/datasets/write.d.ts.map +1 -1
  146. package/dist/datasets/write.js +5 -4
  147. package/dist/datasets/write.js.map +1 -1
  148. package/dist/error-reporting/capability.d.ts +3 -2
  149. package/dist/error-reporting/capability.d.ts.map +1 -1
  150. package/dist/error-reporting/internal.js +5 -4
  151. package/dist/error-reporting/internal.js.map +1 -1
  152. package/dist/error-reporting/reports.d.ts +10 -0
  153. package/dist/error-reporting/reports.d.ts.map +1 -1
  154. package/dist/error-reporting/types.d.ts +10 -2
  155. package/dist/error-reporting/types.d.ts.map +1 -1
  156. package/dist/errors/catalog.d.ts +12 -0
  157. package/dist/errors/catalog.d.ts.map +1 -1
  158. package/dist/errors/failure-message.d.ts +8 -0
  159. package/dist/errors/failure-message.d.ts.map +1 -0
  160. package/dist/errors/internal.d.ts.map +1 -1
  161. package/dist/errors/internal.js +3 -2
  162. package/dist/errors/internal.js.map +1 -1
  163. package/dist/events/index.js +5 -4
  164. package/dist/events/index.js.map +1 -1
  165. package/dist/execution/agent.js +44 -41
  166. package/dist/execution/agent.js.map +1 -1
  167. package/dist/execution/authorization.d.ts.map +1 -1
  168. package/dist/execution/authorized-object-reader.d.ts +3 -0
  169. package/dist/execution/authorized-object-reader.d.ts.map +1 -1
  170. package/dist/execution/kernel-operation.d.ts +4 -0
  171. package/dist/execution/kernel-operation.d.ts.map +1 -0
  172. package/dist/execution/primitive.js +44 -41
  173. package/dist/execution/primitive.js.map +2 -2
  174. package/dist/execution/request.js +45 -42
  175. package/dist/execution/request.js.map +2 -2
  176. package/dist/execution/types.d.ts +6 -0
  177. package/dist/execution/types.d.ts.map +1 -1
  178. package/dist/index.d.ts +15 -5
  179. package/dist/index.d.ts.map +1 -1
  180. package/dist/index.js +68 -59
  181. package/dist/index.js.map +1 -1
  182. package/dist/lake-storage/in-memory.d.ts.map +1 -1
  183. package/dist/lake-storage/index.js +5 -4
  184. package/dist/lake-storage/index.js.map +1 -1
  185. package/dist/materialization/errors.d.ts +1 -1
  186. package/dist/materialization/errors.d.ts.map +1 -1
  187. package/dist/materialization/index.d.ts +1 -0
  188. package/dist/materialization/index.d.ts.map +1 -1
  189. package/dist/materialization/index.js +3 -3
  190. package/dist/materialization/model.d.ts +2 -0
  191. package/dist/materialization/model.d.ts.map +1 -1
  192. package/dist/materialization/vectors.d.ts +19 -0
  193. package/dist/materialization/vectors.d.ts.map +1 -0
  194. package/dist/materializer/context.d.ts.map +1 -1
  195. package/dist/materializer/edits/commit.d.ts.map +1 -1
  196. package/dist/materializer/edits/vector-authority.d.ts +6 -0
  197. package/dist/materializer/edits/vector-authority.d.ts.map +1 -0
  198. package/dist/materializer/edits/vectors.d.ts +6 -0
  199. package/dist/materializer/edits/vectors.d.ts.map +1 -0
  200. package/dist/materializer/effective/validate.d.ts.map +1 -1
  201. package/dist/materializer/effective/vector-indexing.d.ts +7 -0
  202. package/dist/materializer/effective/vector-indexing.d.ts.map +1 -0
  203. package/dist/materializer/effective/vectors.d.ts +6 -0
  204. package/dist/materializer/effective/vectors.d.ts.map +1 -0
  205. package/dist/materializer/execution/work-executor.d.ts +2 -1
  206. package/dist/materializer/execution/work-executor.d.ts.map +1 -1
  207. package/dist/materializer/index.js +26 -25
  208. package/dist/materializer/index.js.map +1 -1
  209. package/dist/materializer/shared/normalize.d.ts.map +1 -1
  210. package/dist/models/catalog-index.d.ts +15 -0
  211. package/dist/models/catalog-index.d.ts.map +1 -0
  212. package/dist/models/catalog.d.ts +27 -6
  213. package/dist/models/catalog.d.ts.map +1 -1
  214. package/dist/models/decision/catalog.d.ts +12 -0
  215. package/dist/models/decision/catalog.d.ts.map +1 -0
  216. package/dist/models/decision/errors.d.ts +7 -0
  217. package/dist/models/decision/errors.d.ts.map +1 -0
  218. package/dist/models/decision/output.d.ts +50 -0
  219. package/dist/models/decision/output.d.ts.map +1 -0
  220. package/dist/models/decision/questions.d.ts +14 -0
  221. package/dist/models/decision/questions.d.ts.map +1 -0
  222. package/dist/models/decision/runtime.d.ts +7 -0
  223. package/dist/models/decision/runtime.d.ts.map +1 -0
  224. package/dist/models/decision/types.d.ts +92 -0
  225. package/dist/models/decision/types.d.ts.map +1 -0
  226. package/dist/models/decision/validation.d.ts +7 -0
  227. package/dist/models/decision/validation.d.ts.map +1 -0
  228. package/dist/models/definitions.d.ts +1 -1
  229. package/dist/models/definitions.d.ts.map +1 -1
  230. package/dist/models/embedding-model.d.ts +60 -0
  231. package/dist/models/embedding-model.d.ts.map +1 -0
  232. package/dist/models/execution/binding.d.ts +2 -0
  233. package/dist/models/execution/binding.d.ts.map +1 -1
  234. package/dist/models/execution/embedding.d.ts +5 -0
  235. package/dist/models/execution/embedding.d.ts.map +1 -0
  236. package/dist/models/execution/index.js +29 -26
  237. package/dist/models/execution/index.js.map +1 -1
  238. package/dist/models/execution/model-call-recorder.d.ts +5 -1
  239. package/dist/models/execution/model-call-recorder.d.ts.map +1 -1
  240. package/dist/models/execution/session.d.ts +21 -0
  241. package/dist/models/execution/session.d.ts.map +1 -0
  242. package/dist/models/execution.d.ts.map +1 -1
  243. package/dist/models/generation-types.d.ts +2 -0
  244. package/dist/models/generation-types.d.ts.map +1 -1
  245. package/dist/models/index.d.ts +9 -1
  246. package/dist/models/index.d.ts.map +1 -1
  247. package/dist/models/index.js +17 -7
  248. package/dist/models/index.js.map +1 -1
  249. package/dist/models/pricing.d.ts +3 -2
  250. package/dist/models/pricing.d.ts.map +1 -1
  251. package/dist/objects/authorized-ontology-view.d.ts.map +1 -1
  252. package/dist/objects/execution.d.ts +1 -0
  253. package/dist/objects/execution.d.ts.map +1 -1
  254. package/dist/objects/index.js +29 -28
  255. package/dist/objects/index.js.map +1 -1
  256. package/dist/objects/query/executor.d.ts +3 -0
  257. package/dist/objects/query/executor.d.ts.map +1 -1
  258. package/dist/objects/query/index.d.ts +2 -0
  259. package/dist/objects/query/index.d.ts.map +1 -1
  260. package/dist/objects/query/index.js +34 -24
  261. package/dist/objects/query/index.js.map +1 -1
  262. package/dist/objects/query/ir.d.ts +6 -2
  263. package/dist/objects/query/ir.d.ts.map +1 -1
  264. package/dist/objects/query/normalize.d.ts.map +1 -1
  265. package/dist/objects/query/validate.d.ts.map +1 -1
  266. package/dist/objects/sdk/object-handle.d.ts +5 -0
  267. package/dist/objects/sdk/object-handle.d.ts.map +1 -1
  268. package/dist/objects/sdk/object-set.d.ts.map +1 -1
  269. package/dist/objects/sdk/query-executor.d.ts +2 -0
  270. package/dist/objects/sdk/query-executor.d.ts.map +1 -1
  271. package/dist/objects/sdk/runtime-query-executor.d.ts.map +1 -1
  272. package/dist/objects/vectors/handle.d.ts +4 -0
  273. package/dist/objects/vectors/handle.d.ts.map +1 -0
  274. package/dist/objects/vectors/indexing-batch.d.ts +6 -0
  275. package/dist/objects/vectors/indexing-batch.d.ts.map +1 -0
  276. package/dist/objects/vectors/indexing-generate.d.ts +11 -0
  277. package/dist/objects/vectors/indexing-generate.d.ts.map +1 -0
  278. package/dist/objects/vectors/indexing-runtime.d.ts +7 -0
  279. package/dist/objects/vectors/indexing-runtime.d.ts.map +1 -0
  280. package/dist/objects/vectors/indexing-shared.d.ts +17 -0
  281. package/dist/objects/vectors/indexing-shared.d.ts.map +1 -0
  282. package/dist/objects/vectors/indexing-single.d.ts +4 -0
  283. package/dist/objects/vectors/indexing-single.d.ts.map +1 -0
  284. package/dist/objects/vectors/indexing-store-batch.d.ts +6 -0
  285. package/dist/objects/vectors/indexing-store-batch.d.ts.map +1 -0
  286. package/dist/objects/vectors/indexing.d.ts +7 -0
  287. package/dist/objects/vectors/indexing.d.ts.map +1 -0
  288. package/dist/objects/vectors/profile.d.ts +13 -0
  289. package/dist/objects/vectors/profile.d.ts.map +1 -0
  290. package/dist/objects/vectors/query.d.ts +5 -0
  291. package/dist/objects/vectors/query.d.ts.map +1 -0
  292. package/dist/objects/vectors/resolve-query.d.ts +6 -0
  293. package/dist/objects/vectors/resolve-query.d.ts.map +1 -0
  294. package/dist/objects/vectors/types.d.ts +11 -0
  295. package/dist/objects/vectors/types.d.ts.map +1 -0
  296. package/dist/ontology/index.d.ts +2 -1
  297. package/dist/ontology/index.d.ts.map +1 -1
  298. package/dist/ontology/index.js +5 -5
  299. package/dist/ontology/index.js.map +1 -1
  300. package/dist/ontology/internal.js +5 -4
  301. package/dist/ontology/internal.js.map +1 -1
  302. package/dist/ontology/registry.d.ts.map +1 -1
  303. package/dist/ontology/types.d.ts +8 -9
  304. package/dist/ontology/types.d.ts.map +1 -1
  305. package/dist/ontology/validation/definition.d.ts +3 -0
  306. package/dist/ontology/validation/definition.d.ts.map +1 -0
  307. package/dist/ontology/validation/properties.d.ts.map +1 -1
  308. package/dist/ontology/validation/query.d.ts.map +1 -1
  309. package/dist/ontology/validation/schema.d.ts +1 -1
  310. package/dist/ontology/validation/schema.d.ts.map +1 -1
  311. package/dist/ontology/vector-profiles.d.ts +4 -0
  312. package/dist/ontology/vector-profiles.d.ts.map +1 -0
  313. package/dist/pipelines/index.js +28 -27
  314. package/dist/pipelines/index.js.map +1 -1
  315. package/dist/projections/internal.js +24 -23
  316. package/dist/projections/internal.js.map +1 -1
  317. package/dist/query.js +2 -2
  318. package/dist/queues/in-memory.d.ts +2 -1
  319. package/dist/queues/in-memory.d.ts.map +1 -1
  320. package/dist/queues/index.d.ts +1 -1
  321. package/dist/queues/index.d.ts.map +1 -1
  322. package/dist/queues/index.js +1 -1
  323. package/dist/queues/types.d.ts +5 -0
  324. package/dist/queues/types.d.ts.map +1 -1
  325. package/dist/runtime/create.d.ts +4 -3
  326. package/dist/runtime/create.d.ts.map +1 -1
  327. package/dist/runtime/host.d.ts +9 -6
  328. package/dist/runtime/host.d.ts.map +1 -1
  329. package/dist/runtime/internal.d.ts +3 -0
  330. package/dist/runtime/internal.d.ts.map +1 -1
  331. package/dist/runtime/internal.js +47 -1
  332. package/dist/runtime/internal.js.map +1 -1
  333. package/dist/runtime/resolve-definitions.d.ts.map +1 -1
  334. package/dist/runtime/sixb.d.ts +9 -4
  335. package/dist/runtime/sixb.d.ts.map +1 -1
  336. package/dist/runtime/types.d.ts +15 -3
  337. package/dist/runtime/types.d.ts.map +1 -1
  338. package/dist/sandboxes/auth.d.ts +16 -0
  339. package/dist/sandboxes/auth.d.ts.map +1 -0
  340. package/dist/sandboxes/config.d.ts +5 -0
  341. package/dist/sandboxes/config.d.ts.map +1 -0
  342. package/dist/sandboxes/configuration.d.ts +41 -0
  343. package/dist/sandboxes/configuration.d.ts.map +1 -0
  344. package/dist/sandboxes/environment.d.ts +13 -0
  345. package/dist/sandboxes/environment.d.ts.map +1 -0
  346. package/dist/sandboxes/errors.d.ts +1 -1
  347. package/dist/sandboxes/errors.d.ts.map +1 -1
  348. package/dist/sandboxes/index.d.ts +6 -1
  349. package/dist/sandboxes/index.d.ts.map +1 -1
  350. package/dist/sandboxes/index.js +16 -3
  351. package/dist/sandboxes/index.js.map +1 -1
  352. package/dist/sandboxes/sandbox.d.ts +35 -3
  353. package/dist/sandboxes/sandbox.d.ts.map +1 -1
  354. package/dist/shared/params/builders.d.ts +25 -0
  355. package/dist/shared/params/builders.d.ts.map +1 -0
  356. package/dist/shared/params/types.d.ts +47 -0
  357. package/dist/shared/params/types.d.ts.map +1 -0
  358. package/dist/shared/params/validation.d.ts +15 -0
  359. package/dist/shared/params/validation.d.ts.map +1 -0
  360. package/dist/shares/internal.js +23 -22
  361. package/dist/shares/internal.js.map +2 -2
  362. package/dist/storage/action-runs/failure.js +4 -3
  363. package/dist/storage/action-runs/failure.js.map +1 -1
  364. package/dist/storage/action-runs/provider.js +1 -1
  365. package/dist/storage/agents/in-memory.d.ts +2 -1
  366. package/dist/storage/agents/in-memory.d.ts.map +1 -1
  367. package/dist/storage/agents/index.d.ts +1 -1
  368. package/dist/storage/agents/index.d.ts.map +1 -1
  369. package/dist/storage/agents/provider.d.ts +5 -1
  370. package/dist/storage/agents/provider.d.ts.map +1 -1
  371. package/dist/storage/agents/provider.js +8 -4
  372. package/dist/storage/agents/provider.js.map +1 -1
  373. package/dist/storage/agents/types.d.ts +49 -0
  374. package/dist/storage/agents/types.d.ts.map +1 -1
  375. package/dist/storage/ai-cost/analytics.d.ts +1 -0
  376. package/dist/storage/ai-cost/analytics.d.ts.map +1 -1
  377. package/dist/storage/ai-cost/index.d.ts +1 -1
  378. package/dist/storage/ai-cost/index.d.ts.map +1 -1
  379. package/dist/storage/ai-cost/provider.js +2 -2
  380. package/dist/storage/ai-cost/types.d.ts +14 -2
  381. package/dist/storage/ai-cost/types.d.ts.map +1 -1
  382. package/dist/storage/ai-limits/enforcement.js +4 -3
  383. package/dist/storage/ai-limits/enforcement.js.map +1 -1
  384. package/dist/storage/connector-connections/provider.js +3 -2
  385. package/dist/storage/connector-connections/provider.js.map +2 -2
  386. package/dist/storage/executions/provider.d.ts +3 -3
  387. package/dist/storage/executions/provider.d.ts.map +1 -1
  388. package/dist/storage/executions/provider.js +13 -11
  389. package/dist/storage/executions/provider.js.map +3 -3
  390. package/dist/storage/executions/types.d.ts +3 -0
  391. package/dist/storage/executions/types.d.ts.map +1 -1
  392. package/dist/storage/executions/validation.d.ts.map +1 -1
  393. package/dist/storage/index.d.ts +5 -3
  394. package/dist/storage/index.d.ts.map +1 -1
  395. package/dist/storage/index.js +25 -22
  396. package/dist/storage/index.js.map +1 -1
  397. package/dist/storage/internal.js +2 -2
  398. package/dist/storage/objects/in-memory/query.d.ts.map +1 -1
  399. package/dist/storage/objects/in-memory/read-source.d.ts +5 -0
  400. package/dist/storage/objects/in-memory/read-source.d.ts.map +1 -1
  401. package/dist/storage/objects/in-memory/selected-reader.d.ts.map +1 -1
  402. package/dist/storage/objects/in-memory/storage.d.ts +7 -0
  403. package/dist/storage/objects/in-memory/storage.d.ts.map +1 -1
  404. package/dist/storage/objects/types.d.ts +2 -0
  405. package/dist/storage/objects/types.d.ts.map +1 -1
  406. package/dist/storage/ontology/commits.d.ts +1 -0
  407. package/dist/storage/ontology/commits.d.ts.map +1 -1
  408. package/dist/storage/ontology/in-memory/index.d.ts +4 -0
  409. package/dist/storage/ontology/in-memory/index.d.ts.map +1 -1
  410. package/dist/storage/ontology/in-memory/materializations.d.ts +2 -0
  411. package/dist/storage/ontology/in-memory/materializations.d.ts.map +1 -1
  412. package/dist/storage/ontology/in-memory/shared-state.d.ts +7 -0
  413. package/dist/storage/ontology/in-memory/shared-state.d.ts.map +1 -1
  414. package/dist/storage/ontology/in-memory/vector-indexing.d.ts +44 -0
  415. package/dist/storage/ontology/in-memory/vector-indexing.d.ts.map +1 -0
  416. package/dist/storage/ontology/in-memory/vectors.d.ts +31 -0
  417. package/dist/storage/ontology/in-memory/vectors.d.ts.map +1 -0
  418. package/dist/storage/ontology/index.d.ts +6 -0
  419. package/dist/storage/ontology/index.d.ts.map +1 -1
  420. package/dist/storage/ontology/provider.js +2 -2
  421. package/dist/storage/ontology/vector-indexing.d.ts +94 -0
  422. package/dist/storage/ontology/vector-indexing.d.ts.map +1 -0
  423. package/dist/storage/ontology/vectors.d.ts +56 -0
  424. package/dist/storage/ontology/vectors.d.ts.map +1 -0
  425. package/dist/storage/operation-scope.d.ts.map +1 -1
  426. package/dist/storage/operation-scope.js +1 -1
  427. package/dist/storage/projection-runs/provider.js +4 -3
  428. package/dist/storage/projection-runs/provider.js.map +1 -1
  429. package/dist/storage/types.d.ts +1 -1
  430. package/dist/storage/types.d.ts.map +1 -1
  431. package/dist/storage/workflow-runs/provider.js +9 -7
  432. package/dist/storage/workflow-runs/provider.js.map +1 -1
  433. package/dist/syncs/index.js +29 -28
  434. package/dist/syncs/index.js.map +1 -1
  435. package/dist/testing/agent-storage-contract.d.ts.map +1 -1
  436. package/dist/testing/ai-cost-storage-contract.d.ts.map +1 -1
  437. package/dist/testing/index.js +448 -69
  438. package/dist/testing/index.js.map +7 -7
  439. package/dist/testing/object-query-contract.d.ts.map +1 -1
  440. package/dist/testing/object-read-scope-contract.d.ts.map +1 -1
  441. package/dist/testing/queues-contract.d.ts.map +1 -1
  442. package/dist/webhooks/internal.js +24 -23
  443. package/dist/webhooks/internal.js.map +2 -2
  444. package/dist/workers/index.js +3 -2
  445. package/dist/workers/index.js.map +2 -2
  446. package/dist/workflows/failure.d.ts.map +1 -1
  447. package/dist/workflows/index.js +47 -43
  448. package/dist/workflows/index.js.map +1 -1
  449. package/package.json +1 -1
  450. package/src/actions/builders/params.ts +1 -48
  451. package/src/actions/types/params.ts +14 -74
  452. package/src/actions/validation.ts +7 -84
  453. package/src/agents/errors.ts +3 -0
  454. package/src/agents/execution.ts +67 -15
  455. package/src/agents/ids.ts +8 -0
  456. package/src/agents/index.ts +1 -0
  457. package/src/agents/request.ts +11 -0
  458. package/src/agents/sandbox.ts +44 -0
  459. package/src/agents/validation.ts +2 -108
  460. package/src/datasets/validation.ts +40 -11
  461. package/src/datasets/write.ts +8 -11
  462. package/src/error-reporting/capability.ts +11 -0
  463. package/src/error-reporting/reports.ts +23 -0
  464. package/src/error-reporting/types.ts +12 -1
  465. package/src/errors/catalog.ts +12 -0
  466. package/src/errors/failure-message.ts +15 -0
  467. package/src/errors/internal.ts +57 -25
  468. package/src/execution/authorization.ts +12 -5
  469. package/src/execution/authorized-object-reader.ts +37 -2
  470. package/src/execution/kernel-operation.ts +27 -0
  471. package/src/execution/scopes.ts +2 -0
  472. package/src/execution/types.ts +4 -4
  473. package/src/index.ts +60 -1
  474. package/src/lake-storage/in-memory.ts +5 -3
  475. package/src/materialization/errors.ts +2 -2
  476. package/src/materialization/index.ts +1 -0
  477. package/src/materialization/model.ts +2 -0
  478. package/src/materialization/vectors.ts +18 -0
  479. package/src/materializer/README.md +14 -0
  480. package/src/materializer/context.ts +10 -0
  481. package/src/materializer/edits/commit.ts +8 -1
  482. package/src/materializer/edits/vector-authority.ts +108 -0
  483. package/src/materializer/edits/vectors.ts +100 -0
  484. package/src/materializer/effective/validate.ts +10 -3
  485. package/src/materializer/effective/vector-indexing.ts +84 -0
  486. package/src/materializer/effective/vectors.ts +47 -0
  487. package/src/materializer/execution/work-executor.ts +11 -3
  488. package/src/materializer/projections/replace.ts +1 -1
  489. package/src/materializer/shared/normalize.ts +11 -0
  490. package/src/materializer/telemetry/append.ts +1 -1
  491. package/src/models/catalog-index.ts +38 -0
  492. package/src/models/catalog.ts +66 -38
  493. package/src/models/decision/catalog.ts +32 -0
  494. package/src/models/decision/errors.ts +18 -0
  495. package/src/models/decision/output.ts +101 -0
  496. package/src/models/decision/questions.ts +29 -0
  497. package/src/models/decision/runtime.ts +188 -0
  498. package/src/models/decision/types.ts +109 -0
  499. package/src/models/decision/validation.ts +335 -0
  500. package/src/models/definitions.ts +1 -1
  501. package/src/models/embedding-model.ts +129 -0
  502. package/src/models/execution/README.md +63 -0
  503. package/src/models/execution/binding.ts +2 -0
  504. package/src/models/execution/embedding.ts +133 -0
  505. package/src/models/execution/model-call-recorder.ts +42 -30
  506. package/src/models/execution/session.ts +81 -0
  507. package/src/models/execution.ts +10 -52
  508. package/src/models/generation-types.ts +2 -0
  509. package/src/models/index.ts +37 -0
  510. package/src/models/pricing.ts +1 -2
  511. package/src/objects/authorized-ontology-view.ts +12 -8
  512. package/src/objects/execution.ts +2 -0
  513. package/src/objects/query/executor.ts +13 -4
  514. package/src/objects/query/explain.ts +7 -2
  515. package/src/objects/query/index.ts +2 -0
  516. package/src/objects/query/ir.ts +6 -2
  517. package/src/objects/query/normalize.ts +5 -1
  518. package/src/objects/query/validate.ts +74 -73
  519. package/src/objects/sdk/object-handle.ts +3 -0
  520. package/src/objects/sdk/object-set.ts +1 -0
  521. package/src/objects/sdk/query-builder.ts +9 -3
  522. package/src/objects/sdk/query-executor.ts +2 -1
  523. package/src/objects/sdk/runtime-query-executor.ts +6 -2
  524. package/src/objects/vectors/README.md +59 -0
  525. package/src/objects/vectors/handle.ts +91 -0
  526. package/src/objects/vectors/indexing-batch.ts +163 -0
  527. package/src/objects/vectors/indexing-generate.ts +184 -0
  528. package/src/objects/vectors/indexing-runtime.ts +17 -0
  529. package/src/objects/vectors/indexing-shared.ts +188 -0
  530. package/src/objects/vectors/indexing-single.ts +51 -0
  531. package/src/objects/vectors/indexing-store-batch.ts +62 -0
  532. package/src/objects/vectors/indexing.ts +23 -0
  533. package/src/objects/vectors/profile.ts +64 -0
  534. package/src/objects/vectors/query.ts +16 -0
  535. package/src/objects/vectors/resolve-query.ts +89 -0
  536. package/src/objects/vectors/types.ts +10 -0
  537. package/src/ontology/index.ts +2 -0
  538. package/src/ontology/registry.ts +8 -0
  539. package/src/ontology/types.ts +9 -9
  540. package/src/ontology/validation/definition.ts +104 -0
  541. package/src/ontology/validation/properties.ts +14 -4
  542. package/src/ontology/validation/query.ts +34 -51
  543. package/src/ontology/validation/schema.ts +85 -23
  544. package/src/ontology/vector-profiles.ts +35 -0
  545. package/src/queues/in-memory.ts +5 -0
  546. package/src/queues/index.ts +1 -0
  547. package/src/queues/types.ts +10 -0
  548. package/src/runtime/create.ts +7 -6
  549. package/src/runtime/host.ts +42 -6
  550. package/src/runtime/internal.ts +3 -0
  551. package/src/runtime/resolve-definitions.ts +19 -1
  552. package/src/runtime/sixb.ts +27 -9
  553. package/src/runtime/types.ts +16 -4
  554. package/src/sandboxes/README.md +41 -0
  555. package/src/sandboxes/auth.ts +17 -0
  556. package/src/sandboxes/config.ts +37 -0
  557. package/src/sandboxes/configuration.ts +268 -0
  558. package/src/sandboxes/environment.ts +107 -0
  559. package/src/sandboxes/errors.ts +1 -1
  560. package/src/sandboxes/index.ts +15 -0
  561. package/src/sandboxes/sandbox.ts +38 -3
  562. package/src/shared/params/builders.ts +50 -0
  563. package/src/shared/params/types.ts +84 -0
  564. package/src/shared/params/validation.ts +114 -0
  565. package/src/storage/agents/in-memory.ts +25 -1
  566. package/src/storage/agents/index.ts +3 -0
  567. package/src/storage/agents/provider.ts +105 -0
  568. package/src/storage/agents/types.ts +54 -0
  569. package/src/storage/ai-cost/analytics.ts +59 -21
  570. package/src/storage/ai-cost/index.ts +1 -0
  571. package/src/storage/ai-cost/types.ts +19 -2
  572. package/src/storage/executions/provider.ts +24 -12
  573. package/src/storage/executions/types.ts +1 -0
  574. package/src/storage/executions/validation.ts +7 -3
  575. package/src/storage/index.ts +15 -1
  576. package/src/storage/objects/in-memory/query.ts +25 -11
  577. package/src/storage/objects/in-memory/read-scope.ts +9 -2
  578. package/src/storage/objects/in-memory/read-source.ts +5 -0
  579. package/src/storage/objects/in-memory/selected-reader.ts +5 -1
  580. package/src/storage/objects/in-memory/storage.ts +19 -1
  581. package/src/storage/objects/types.ts +2 -0
  582. package/src/storage/ontology/commits.ts +1 -0
  583. package/src/storage/ontology/in-memory/index.ts +20 -0
  584. package/src/storage/ontology/in-memory/materializations.ts +13 -0
  585. package/src/storage/ontology/in-memory/shared-state.ts +9 -0
  586. package/src/storage/ontology/in-memory/vector-indexing.ts +179 -0
  587. package/src/storage/ontology/in-memory/vectors.ts +73 -0
  588. package/src/storage/ontology/index.ts +14 -0
  589. package/src/storage/ontology/vector-indexing.ts +98 -0
  590. package/src/storage/ontology/vectors.ts +48 -0
  591. package/src/storage/operation-scope.ts +1 -0
  592. package/src/storage/types.ts +3 -0
  593. package/src/testing/agent-storage-contract.ts +246 -0
  594. package/src/testing/ai-cost-storage-contract.ts +134 -0
  595. package/src/testing/object-query-contract.ts +41 -25
  596. package/src/testing/object-read-scope-contract.ts +1 -5
  597. package/src/testing/queues-contract.ts +31 -0
  598. package/src/workflows/failure.ts +10 -4
  599. package/src/workflows/validation.ts +2 -2
  600. package/dist/chunk-01kj2pbh.js.map +0 -19
  601. package/dist/chunk-5hz0fnca.js.map +0 -12
  602. package/dist/chunk-7apz6hg4.js.map +0 -10
  603. package/dist/chunk-7bs40fe1.js.map +0 -12
  604. package/dist/chunk-860dwwy0.js.map +0 -14
  605. package/dist/chunk-93csa55g.js.map +0 -11
  606. package/dist/chunk-a0e6x5hd.js.map +0 -14
  607. package/dist/chunk-aa6z4a19.js.map +0 -12
  608. package/dist/chunk-ap0g1g74.js.map +0 -11
  609. package/dist/chunk-f0rwz2vh.js.map +0 -11
  610. package/dist/chunk-f4w3yp4f.js.map +0 -12
  611. package/dist/chunk-jsy70480.js.map +0 -15
  612. package/dist/chunk-mrp7k0pw.js.map +0 -10
  613. package/dist/chunk-ms2tmn1k.js.map +0 -17
  614. package/dist/chunk-rb1xx120.js.map +0 -11
  615. package/dist/chunk-yv79ncbv.js.map +0 -10
  616. package/dist/chunk-z0271qkp.js.map +0 -15
  617. package/dist/chunk-z3y411fq.js +0 -99
  618. package/dist/chunk-z3y411fq.js.map +0 -11
  619. /package/dist/{chunk-17kfctj6.js.map → chunk-0mza4xb2.js.map} +0 -0
  620. /package/dist/{chunk-1yefycb1.js.map → chunk-3bnt2wna.js.map} +0 -0
  621. /package/dist/{chunk-awbhdqyc.js.map → chunk-3ghw2t5q.js.map} +0 -0
  622. /package/dist/{chunk-b19g04jk.js.map → chunk-3h7ctayx.js.map} +0 -0
  623. /package/dist/{chunk-wjasrj67.js.map → chunk-3qpcrcj8.js.map} +0 -0
  624. /package/dist/{chunk-0y39rgsb.js.map → chunk-5tetw4hn.js.map} +0 -0
  625. /package/dist/{chunk-c5rkjrgp.js.map → chunk-7ytf06d3.js.map} +0 -0
  626. /package/dist/{chunk-358caqf5.js.map → chunk-bfjv1adk.js.map} +0 -0
  627. /package/dist/{chunk-g91qxjj0.js.map → chunk-bg2bs62d.js.map} +0 -0
  628. /package/dist/{chunk-g6cke204.js.map → chunk-f85hpqnm.js.map} +0 -0
  629. /package/dist/{chunk-vsj3mdfj.js.map → chunk-fc5zfxy1.js.map} +0 -0
  630. /package/dist/{chunk-1824gssz.js.map → chunk-gswwr35f.js.map} +0 -0
  631. /package/dist/{chunk-92vk7gta.js.map → chunk-gzt6v1ja.js.map} +0 -0
  632. /package/dist/{chunk-gqh45d2n.js.map → chunk-hkw8rykk.js.map} +0 -0
  633. /package/dist/{chunk-cfvakeax.js.map → chunk-jjwhy3rs.js.map} +0 -0
  634. /package/dist/{chunk-9qsh3p5y.js.map → chunk-rb143ggb.js.map} +0 -0
  635. /package/dist/{chunk-653vwrzr.js.map → chunk-rdghfsss.js.map} +0 -0
  636. /package/dist/{chunk-x9m9x2eq.js.map → chunk-t7dzd1tm.js.map} +0 -0
  637. /package/dist/{chunk-pr2h4bv4.js.map → chunk-tg4g4zh0.js.map} +0 -0
  638. /package/dist/{chunk-8vj0rjgs.js.map → chunk-wjffn5m4.js.map} +0 -0
  639. /package/dist/{chunk-wf88w4kp.js.map → chunk-x9tmx3fc.js.map} +0 -0
  640. /package/dist/{chunk-fh8kgex1.js.map → chunk-xn686q2e.js.map} +0 -0
  641. /package/dist/{chunk-v2vcg0w6.js.map → chunk-xtfryrfb.js.map} +0 -0
@@ -0,0 +1,335 @@
1
+ import { assertJsonValue, cloneJsonValue } from "../../json"
2
+ import { UnsupportedModelFeatureError } from "../errors"
3
+ import type {
4
+ ChoiceQuestion,
5
+ DecisionAnswers,
6
+ DecisionContent,
7
+ DecisionModel,
8
+ DecisionModelDefinition,
9
+ DecisionQuestion,
10
+ DecisionQuestions,
11
+ ScoreQuestion,
12
+ } from "./types"
13
+
14
+ type DecisionCapabilities = DecisionModelDefinition["capabilities"]
15
+
16
+ // Allow serialization rounding without normalizing provider answers.
17
+ const DISTRIBUTION_TOLERANCE = 1e-4
18
+ const CHOICE_TOLERANCE = 1e-6
19
+
20
+ export function assertDecisionContent(
21
+ value: unknown,
22
+ path: string
23
+ ): asserts value is DecisionContent {
24
+ assertJsonValue(value, path)
25
+ if (value === null || (typeof value !== "string" && typeof value !== "object")) {
26
+ throw new TypeError(`[SixbModels] ${path} must be text, a JSON object or an array.`)
27
+ }
28
+ }
29
+
30
+ export function assertDecisionQuestions(value: unknown): asserts value is DecisionQuestions {
31
+ assertJsonValue(value, "questions")
32
+ const questions = readRecord(value, "questions")
33
+ if (!Object.keys(questions).length) {
34
+ fail("questions must not be empty")
35
+ }
36
+
37
+ for (const [key, question] of Object.entries(questions)) {
38
+ if (!key.trim()) {
39
+ fail("question names must not be empty")
40
+ }
41
+ assertQuestion(question, `questions.${key}`)
42
+ }
43
+ }
44
+
45
+ function assertQuestion(value: unknown, path: string): void {
46
+ const question = readRecord(value, path)
47
+ assertDecisionContent(question.instructions, `${path}.instructions`)
48
+ if (typeof question.instructions === "string" && !question.instructions.trim()) {
49
+ fail(`${path}.instructions must not be empty`)
50
+ }
51
+
52
+ switch (question.type) {
53
+ case "choice":
54
+ assertOnlyKeys(question, ["type", "instructions", "options"], path)
55
+ assertChoiceOptions(question.options, `${path}.options`)
56
+ break
57
+ case "score":
58
+ assertOnlyKeys(question, ["type", "instructions", "levels"], path)
59
+ assertScoreLevels(question.levels, `${path}.levels`)
60
+ break
61
+ case "probability":
62
+ assertOnlyKeys(question, ["type", "instructions"], path)
63
+ break
64
+ default:
65
+ fail(`${path}.type is not a supported decision primitive`)
66
+ }
67
+ }
68
+
69
+ function assertChoiceOptions(value: unknown, path: string): void {
70
+ const options = readRecord(value, path)
71
+ if (!Object.keys(options).length) {
72
+ fail(`${path} must not be empty`)
73
+ }
74
+
75
+ for (const [option, description] of Object.entries(options)) {
76
+ if (!option.trim()) {
77
+ fail(`${path} contains an empty label`)
78
+ }
79
+ if (description !== null) {
80
+ assertDecisionContent(description, `${path}.${option}`)
81
+ }
82
+ }
83
+ }
84
+
85
+ function assertScoreLevels(value: unknown, path: string): void {
86
+ if (!Array.isArray(value) || value.length < 2) {
87
+ fail(`${path} needs at least two levels`)
88
+ }
89
+
90
+ for (const level of value) {
91
+ assertDecisionContent(level, path)
92
+ }
93
+ }
94
+
95
+ export function assertDecisionModel(model: DecisionModel): void {
96
+ const definition = model?.definition
97
+ if (
98
+ !model ||
99
+ typeof model.evaluate !== "function" ||
100
+ !isValidId(model.providerId) ||
101
+ !isValidId(model.modelId) ||
102
+ definition?.kind !== "decision" ||
103
+ definition.providerId !== model.providerId ||
104
+ definition.modelId !== model.modelId
105
+ ) {
106
+ fail("Expected a DecisionModel with matching provider/model identity")
107
+ }
108
+
109
+ const capabilities = definition.capabilities
110
+ if (
111
+ !capabilities ||
112
+ !Array.isArray(capabilities.questions) ||
113
+ !capabilities.questions.length ||
114
+ capabilities.questions.some((kind) => !["choice", "score", "probability"].includes(kind)) ||
115
+ new Set(capabilities.questions).size !== capabilities.questions.length
116
+ ) {
117
+ fail("Decision model capabilities must list distinct supported question types")
118
+ }
119
+
120
+ assertCapabilityLimit(capabilities.maxChoices, "maxChoices", 1)
121
+ assertCapabilityLimit(capabilities.maxScoreLevels, "maxScoreLevels", 2)
122
+ const decimals = capabilities.answerDecimalPlaces
123
+ if (
124
+ decimals !== undefined &&
125
+ (!Number.isSafeInteger(decimals) || decimals < 1 || decimals > 15)
126
+ ) {
127
+ fail("Invalid decision answerDecimalPlaces (expected 1–15)")
128
+ }
129
+ }
130
+
131
+ function assertCapabilityLimit(value: number | undefined, name: string, minimum: number): void {
132
+ if (value !== undefined && (!Number.isSafeInteger(value) || value < minimum)) {
133
+ fail(`Invalid decision capability '${name}'`)
134
+ }
135
+ }
136
+
137
+ export function assertDecisionSupport(model: DecisionModel, questions: DecisionQuestions): void {
138
+ for (const [key, question] of Object.entries(questions)) {
139
+ if (!supportsQuestion(model.definition.capabilities, question)) {
140
+ throw new UnsupportedModelFeatureError(
141
+ `[SixbModels] Model '${model.providerId}/${model.modelId}' does not support questions.${key}.`
142
+ )
143
+ }
144
+ }
145
+ }
146
+
147
+ function supportsQuestion(capabilities: DecisionCapabilities, question: DecisionQuestion): boolean {
148
+ if (!capabilities.questions.includes(question.type)) return false
149
+
150
+ switch (question.type) {
151
+ case "choice":
152
+ return Object.keys(question.options).length <= (capabilities.maxChoices ?? Infinity)
153
+ case "score":
154
+ return question.levels.length <= (capabilities.maxScoreLevels ?? Infinity)
155
+ case "probability":
156
+ return true
157
+ }
158
+ }
159
+
160
+ export function validateDecisionAnswers<const Q extends DecisionQuestions>(
161
+ questions: Q,
162
+ value: unknown,
163
+ answerDecimalPlaces?: number
164
+ ): DecisionAnswers<Q> {
165
+ assertJsonValue(value, "decision output")
166
+ const answers = readRecord(value, "decision output")
167
+ assertExactKeys(answers, Object.keys(questions), "decision output")
168
+
169
+ const roundingError = answerDecimalPlaces === undefined ? 0 : 0.5 * 10 ** -answerDecimalPlaces
170
+ for (const [key, question] of Object.entries(questions)) {
171
+ assertAnswer(question, answers[key], `output.${key}`, roundingError)
172
+ }
173
+
174
+ // Validation establishes the mapped type; callers receive an independent JSON snapshot.
175
+ return cloneJsonValue(value) as DecisionAnswers<Q>
176
+ }
177
+
178
+ function assertAnswer(
179
+ question: DecisionQuestion,
180
+ value: unknown,
181
+ path: string,
182
+ roundingError: number
183
+ ): void {
184
+ const answer = readRecord(value, path)
185
+ if (question.type === "probability") {
186
+ assertExactKeys(answer, ["probability"], path)
187
+ readProbability(answer.probability, path)
188
+ return
189
+ }
190
+
191
+ assertOnlyKeys(answer, [question.type, "probabilities", "confidence"], path)
192
+ if (answer.confidence !== undefined) {
193
+ readProbability(answer.confidence, `${path}.confidence`)
194
+ }
195
+
196
+ const distribution =
197
+ question.type === "choice"
198
+ ? validateChoiceAnswer(question, answer, path)
199
+ : validateScoreAnswer(question, answer, path, roundingError)
200
+
201
+ const total = distribution.reduce((sum, probability) => sum + probability, 0)
202
+ const tolerance = Math.max(DISTRIBUTION_TOLERANCE, distribution.length * roundingError)
203
+ if (Math.abs(total - 1) > tolerance + Number.EPSILON * distribution.length) {
204
+ fail(`${path}.probabilities must sum to one`)
205
+ }
206
+ }
207
+
208
+ function validateChoiceAnswer(
209
+ question: ChoiceQuestion,
210
+ answer: Record<string, unknown>,
211
+ path: string
212
+ ): number[] {
213
+ const probabilities = readRecord(answer.probabilities, `${path}.probabilities`)
214
+ assertExactKeys(probabilities, Object.keys(question.options), `${path}.probabilities`)
215
+ const distribution = Object.values(probabilities).map((value) => readProbability(value, path))
216
+
217
+ if (typeof answer.choice !== "string" || !Object.hasOwn(question.options, answer.choice)) {
218
+ fail(`${path}.choice is not a declared option`)
219
+ }
220
+
221
+ const winner = readProbability(probabilities[answer.choice], path)
222
+ if (winner + CHOICE_TOLERANCE < Math.max(...distribution)) {
223
+ fail(`${path}.choice is not a highest-probability option`)
224
+ }
225
+
226
+ return distribution
227
+ }
228
+
229
+ function validateScoreAnswer(
230
+ question: ScoreQuestion,
231
+ answer: Record<string, unknown>,
232
+ path: string,
233
+ roundingError: number
234
+ ): number[] {
235
+ if (
236
+ !Array.isArray(answer.probabilities) ||
237
+ answer.probabilities.length !== question.levels.length
238
+ ) {
239
+ fail(`${path}.probabilities must match the score levels`)
240
+ }
241
+
242
+ const distribution = answer.probabilities.map((value) => readProbability(value, path))
243
+ const expected = distribution.reduce((sum, probability, index) => sum + probability * index, 0)
244
+ const levels = question.levels.length
245
+ const [minimum, maximum] = roundingError
246
+ ? roundedScoreBounds(distribution, roundingError, path)
247
+ : [expected, expected]
248
+ const tolerance = roundingError || DISTRIBUTION_TOLERANCE * levels
249
+ if (
250
+ typeof answer.score !== "number" ||
251
+ !Number.isFinite(answer.score) ||
252
+ answer.score < 0 ||
253
+ answer.score > question.levels.length - 1 ||
254
+ answer.score < minimum - tolerance - Number.EPSILON * levels ** 2 ||
255
+ answer.score > maximum + tolerance + Number.EPSILON * levels ** 2
256
+ ) {
257
+ fail(`${path}.score is inconsistent with its distribution`)
258
+ }
259
+
260
+ return distribution
261
+ }
262
+
263
+ /** Find possible means without changing the returned probabilities. */
264
+ function roundedScoreBounds(
265
+ distribution: readonly number[],
266
+ roundingError: number,
267
+ path: string
268
+ ): readonly [number, number] {
269
+ const lower = distribution.map((value) => Math.max(0, value - roundingError))
270
+ const upper = distribution.map((value) => Math.min(1, value + roundingError))
271
+ const remaining = 1 - lower.reduce((sum, value) => sum + value, 0)
272
+ const epsilon = Number.EPSILON * distribution.length
273
+ if (remaining < -epsilon || upper.reduce((sum, value) => sum + value, 0) < 1 - epsilon) {
274
+ fail(`${path}.probabilities must sum to one`)
275
+ }
276
+
277
+ const base = lower.reduce((sum, value, index) => sum + value * index, 0)
278
+ function extreme(highestFirst: boolean): number {
279
+ let mass = Math.max(0, remaining)
280
+ let mean = base
281
+ // Start at each probability's lower bound, then allocate exactly the remaining mass.
282
+ // Filling lower levels first minimizes the mean; filling higher levels maximizes it.
283
+ for (let offset = 0; offset < distribution.length && mass > 0; offset++) {
284
+ const index = highestFirst ? distribution.length - 1 - offset : offset
285
+ const added = Math.min(mass, upper[index]! - lower[index]!)
286
+ mean += added * index
287
+ mass -= added
288
+ }
289
+ return mean
290
+ }
291
+ return [extreme(false), extreme(true)]
292
+ }
293
+
294
+ function readProbability(value: unknown, path: string): number {
295
+ if (typeof value !== "number" || !Number.isFinite(value) || value < 0 || value > 1) {
296
+ fail(`${path} must contain probabilities between zero and one`)
297
+ }
298
+ return value
299
+ }
300
+
301
+ function readRecord(value: unknown, path: string): Record<string, unknown> {
302
+ if (value === null || typeof value !== "object" || Array.isArray(value)) {
303
+ fail(`${path} must be an object`)
304
+ }
305
+ return value as Record<string, unknown>
306
+ }
307
+
308
+ function assertOnlyKeys(
309
+ value: Record<string, unknown>,
310
+ keys: readonly string[],
311
+ path: string
312
+ ): void {
313
+ if (Object.keys(value).some((key) => !keys.includes(key))) {
314
+ fail(`${path} contains an unknown field`)
315
+ }
316
+ }
317
+
318
+ function assertExactKeys(
319
+ value: Record<string, unknown>,
320
+ keys: readonly string[],
321
+ path: string
322
+ ): void {
323
+ assertOnlyKeys(value, keys, path)
324
+ if (keys.some((key) => !Object.hasOwn(value, key))) {
325
+ fail(`${path} is missing an expected field`)
326
+ }
327
+ }
328
+
329
+ function isValidId(value: unknown): value is string {
330
+ return typeof value === "string" && !!value.trim() && value.trim() === value
331
+ }
332
+
333
+ function fail(detail: string): never {
334
+ throw new TypeError(`[SixbModels] ${detail}.`)
335
+ }
@@ -5,7 +5,7 @@ import {
5
5
  type ModelReasoningCapabilities,
6
6
  } from "./language-model"
7
7
 
8
- export type ModelKind = "language" | "image" | "video" | "embedding"
8
+ export type ModelKind = "language" | "image" | "video" | "embedding" | "decision"
9
9
 
10
10
  /** Common catalog identity shared by every present and future model runtime. */
11
11
  export interface ModelDefinition {
@@ -0,0 +1,129 @@
1
+ import type { ModelDefinition } from "./definitions"
2
+ import { ModelProviderError } from "./errors"
3
+ import type { ModelProviderIds, ModelRoute, ModelUsage } from "./events"
4
+ import type { ModelCostEstimator, ModelReportedCost } from "./pricing"
5
+
6
+ /** The identity includes the configured output dimension, not only the vendor's model id. */
7
+ export interface EmbeddingModelDefinition extends ModelDefinition {
8
+ readonly kind: "embedding"
9
+ readonly dimensions: number
10
+ /** Actual representation behind a routing alias. Omit only when modelId identifies it directly. */
11
+ readonly representation?: { readonly name: string; readonly version?: string }
12
+ }
13
+
14
+ export interface EmbeddingModelRequest {
15
+ readonly texts: readonly string[]
16
+ /** Providers must honor cancellation and propagate this signal to their transport. */
17
+ readonly signal?: AbortSignal
18
+ }
19
+
20
+ /** Provider accounting facts; absent meters or prices remain unknown. */
21
+ export interface EmbeddingModelResponseMetadata {
22
+ readonly usage?: ModelUsage
23
+ readonly providerIds?: ModelProviderIds
24
+ readonly responseModelId?: string
25
+ readonly reportedCost?: ModelReportedCost
26
+ readonly route?: ModelRoute
27
+ }
28
+
29
+ export interface EmbeddingModelResult extends EmbeddingModelResponseMetadata {
30
+ readonly vectors: readonly (readonly number[])[]
31
+ }
32
+
33
+ /** Serializable profile reference; executable providers stay on the server. */
34
+ export interface EmbeddingModelRef {
35
+ readonly providerId: string
36
+ readonly modelId: string
37
+ readonly definition: EmbeddingModelDefinition
38
+ }
39
+
40
+ /** Conservative transport bounds for automatic projection batching, not token estimates. */
41
+ export interface EmbeddingBatchLimits {
42
+ readonly maxInputs: number
43
+ readonly maxInputBytes: number
44
+ readonly maxTotalInputBytes: number
45
+ }
46
+
47
+ export interface EmbeddingModel extends EmbeddingModelRef {
48
+ /** Omit when safe multi-input bounds are unknown; automatic indexing then calls one at a time. */
49
+ readonly batching?: EmbeddingBatchLimits
50
+ readonly costEstimator?: ModelCostEstimator
51
+ /** Resolve and pin optional pricing before admission, without an inference call. */
52
+ resolve?(): Promise<EmbeddingModel>
53
+ embed(request: EmbeddingModelRequest): Promise<EmbeddingModelResult>
54
+ }
55
+
56
+ export function assertEmbeddingModel(model: EmbeddingModel): void {
57
+ if (!model || typeof model !== "object" || typeof model.embed !== "function") {
58
+ throw new TypeError("[Sixb] Expected an EmbeddingModel with an embed method.")
59
+ }
60
+ assertEmbeddingModelRef(model)
61
+ if (
62
+ model.batching &&
63
+ [
64
+ model.batching.maxInputs,
65
+ model.batching.maxInputBytes,
66
+ model.batching.maxTotalInputBytes,
67
+ ].some((value) => !Number.isSafeInteger(value) || value < 1)
68
+ ) {
69
+ throw new TypeError("[Sixb] Embedding batch limits must be positive safe integers.")
70
+ }
71
+ }
72
+
73
+ export function assertEmbeddingModelRef(model: EmbeddingModelRef): void {
74
+ const definition = model?.definition
75
+ const representation = definition?.representation
76
+ if (
77
+ representation !== undefined &&
78
+ (!representation ||
79
+ typeof representation !== "object" ||
80
+ !validIdentityPart(representation.name) ||
81
+ (representation.version !== undefined && !validIdentityPart(representation.version)))
82
+ )
83
+ throw new TypeError("[Sixb] Invalid embedding model representation.")
84
+ if (
85
+ !definition ||
86
+ definition.kind !== "embedding" ||
87
+ definition.providerId !== model.providerId ||
88
+ definition.modelId !== model.modelId ||
89
+ typeof model.providerId !== "string" ||
90
+ !model.providerId ||
91
+ model.providerId.trim() !== model.providerId ||
92
+ typeof model.modelId !== "string" ||
93
+ !model.modelId ||
94
+ model.modelId.trim() !== model.modelId ||
95
+ !Number.isSafeInteger(definition.dimensions) ||
96
+ definition.dimensions < 1 ||
97
+ definition.dimensions > 16000
98
+ ) {
99
+ throw new TypeError("[Sixb] Invalid embedding model identity or dimensions (expected 1–16000).")
100
+ }
101
+ }
102
+
103
+ /** Routing identity, representation and dimensions must agree before any inference. */
104
+ export function sameEmbeddingModel(left: EmbeddingModelRef, right: EmbeddingModelRef): boolean {
105
+ return (
106
+ left.providerId === right.providerId &&
107
+ left.modelId === right.modelId &&
108
+ left.definition.dimensions === right.definition.dimensions &&
109
+ (left.definition.representation?.name ?? left.modelId) ===
110
+ (right.definition.representation?.name ?? right.modelId) &&
111
+ left.definition.representation?.version === right.definition.representation?.version
112
+ )
113
+ }
114
+
115
+ function validIdentityPart(value: unknown): value is string {
116
+ return typeof value === "string" && value.length > 0 && value.trim() === value
117
+ }
118
+
119
+ /** A completed provider response whose vectors are unusable, but may still be billable. */
120
+ export class EmbeddingModelResponseError extends ModelProviderError {
121
+ constructor(
122
+ message: string,
123
+ providerId: string,
124
+ modelId: string,
125
+ readonly metadata: EmbeddingModelResponseMetadata
126
+ ) {
127
+ super(message, providerId, modelId, { code: "invalid_embedding_response", retryable: false })
128
+ }
129
+ }
@@ -0,0 +1,63 @@
1
+ # Model execution accounting
2
+
3
+ Internal execution and accounting shared by language, embedding and decision calls. Application usage is
4
+ documented in [Usage and limits](../../../../../docs/models/usage-and-limits.md).
5
+
6
+ ## Execution boundary
7
+
8
+ `ModelExecutionSession` binds one execution attempt and cancellation signal. Its lazy recorder
9
+ uses the durable execution's requester-group snapshot, so redelivery cannot change attribution.
10
+ Language execution and the scoped embedding catalog share that recorder and its failure state.
11
+ Object authorization happens before embedding inference; wrapping a catalog does not grant access.
12
+
13
+ ## Embedding flow
14
+
15
+ ```text
16
+ Authorized index / text search
17
+ → Scoped embedding model
18
+ → Resolve model and pricing; verify identity and dimensions
19
+ → Reserve capacity atomically
20
+ → Call provider once
21
+ → Record usage, valuation, and reconcile reservation
22
+ → Check cancellation; return for vector validation and object write
23
+ ```
24
+
25
+ `embedding.ts` snapshots inputs and combines caller, execution, and 30-second cancellation
26
+ signals. Providers must propagate the signal to their transport; cancellation is cooperative.
27
+ Input reservation uses UTF-8 bytes divided by four, rounded up per text. Output allowance and
28
+ actual output tokens are zero. Missing input usage remains unknown.
29
+
30
+ An optional provider `resolve()` pins pricing before admission. The response can include `usage`,
31
+ `providerIds`, `responseModelId`, `reportedCost`, and `route`. Provider charges take precedence;
32
+ the local estimate is retained separately. `EmbeddingModelResponseError` preserves this evidence
33
+ when a provider rejects an invalid response.
34
+
35
+ Accounting precedes cancellation propagation, vector validation, and the optimistic object write:
36
+ a rejected result or stale write does not erase a billable call. Ambiguous provider failures retain
37
+ unknown input usage and unresolved capacity. Inference is never retried here.
38
+
39
+ ## Recovery and boundaries
40
+
41
+ `AiModelCallRecorder` retries the atomic accounting write, then hands persistent failures to
42
+ `queues.agents`. Its failure state prevents further billable calls in the session. Recovery
43
+ replays accounting only, never inference; see the
44
+ [worker recovery contract](../../../../agent-worker/docs/usage-accounting.md).
45
+
46
+ Direct provider calls bypass this session. Webhook handlers have no bound model execution attempt;
47
+ they must dispatch an action for accounted calls. A process crash before accounting is captured
48
+ can still leave provider billing outside the ledger.
49
+
50
+ ## Decision flow
51
+
52
+ Decision evaluation in `../decision/runtime.ts` uses the same session and recorder. It snapshots JSON input/questions
53
+ before yielding, resolves only a permitted catalog binding, checks primitive capabilities,
54
+ admits one call, invokes the provider, and records usage before validating or returning answers.
55
+ The original question snapshot defines valid answer keys, labels and score levels.
56
+
57
+ Input reservation uses serialized UTF-8 bytes divided by four; output reserves the shared
58
+ 4,096-token estimate. Neither is a tokenizer or a provider-enforced ceiling. Decision providers
59
+ must preserve their actual output-token meters even when their output price is zero.
60
+
61
+ `DecisionModelResponseError` carries accounting metadata when protocol translation fails after
62
+ a billable response. Other errors retain unknown usage. Recovery replays accounting, never
63
+ inference. Decision-only projects use the existing recovery worker without an agent sandbox.
@@ -3,6 +3,8 @@ import type { ModelsRuntime } from "../generation-types"
3
3
  export interface ModelExecutionAttempt {
4
4
  readonly attempt: number
5
5
  readonly signal: AbortSignal
6
+ /** Internal durable fence around admission; it must invoke admit exactly once to proceed. */
7
+ readonly embeddingAdmission?: (admit: () => Promise<void>) => Promise<void>
6
8
  }
7
9
 
8
10
  const bindings = new WeakMap<ModelsRuntime, (input: ModelExecutionAttempt) => void>()
@@ -0,0 +1,133 @@
1
+ import { randomUUID } from "node:crypto"
2
+ import type { EmbeddingModelCatalog, EmbeddingModelEntry, ModelRef } from "../catalog"
3
+ import {
4
+ assertEmbeddingModel,
5
+ type EmbeddingModel,
6
+ type EmbeddingModelRequest,
7
+ EmbeddingModelResponseError,
8
+ type EmbeddingModelResponseMetadata,
9
+ type EmbeddingModelResult,
10
+ sameEmbeddingModel,
11
+ } from "../embedding-model"
12
+ import { estimateModelCall } from "../pricing"
13
+ import type { AiModelCallRecorder } from "./model-call-recorder"
14
+ import type { ModelExecutionSession } from "./session"
15
+
16
+ /** Scope the configured bindings without changing profile identity or object permissions. */
17
+ export function bindEmbeddingModels(
18
+ catalog: EmbeddingModelCatalog | undefined,
19
+ session: ModelExecutionSession
20
+ ): EmbeddingModelCatalog | undefined {
21
+ if (!catalog) return undefined
22
+ const entries: readonly EmbeddingModelEntry[] = Object.freeze(
23
+ catalog.list().map((entry) =>
24
+ Object.freeze({
25
+ ...entry,
26
+ model: Object.freeze({
27
+ providerId: entry.model.providerId,
28
+ modelId: entry.model.modelId,
29
+ definition: entry.model.definition,
30
+ batching: entry.model.batching && Object.freeze({ ...entry.model.batching }),
31
+ embed: (input: EmbeddingModelRequest) => executeEmbedding(session, entry.model, input),
32
+ }),
33
+ })
34
+ )
35
+ )
36
+ const byRef = new Map(
37
+ entries.map((entry) => [JSON.stringify([entry.provider, entry.modelId]), entry])
38
+ )
39
+ return Object.freeze({
40
+ list: () => entries,
41
+ getByRef: (ref: ModelRef) => byRef.get(JSON.stringify([ref.provider, ref.modelId])) ?? null,
42
+ })
43
+ }
44
+
45
+ async function executeEmbedding(
46
+ session: ModelExecutionSession,
47
+ binding: EmbeddingModel,
48
+ input: EmbeddingModelRequest
49
+ ) {
50
+ if (
51
+ !Array.isArray(input.texts) ||
52
+ input.texts.some((text) => typeof text !== "string" || !text.trim())
53
+ ) {
54
+ throw new TypeError("[SixbModels] Embedding inputs must be nonempty strings.")
55
+ }
56
+ const texts = [...input.texts]
57
+ const signal = session.signal(input.signal)
58
+ const requestSignal = AbortSignal.any([signal, AbortSignal.timeout(30_000)])
59
+ requestSignal.throwIfAborted()
60
+ if (!texts.length) return { vectors: [] }
61
+
62
+ const accounting = await session.accounting()
63
+ accounting.assertHealthy()
64
+ const model = (await binding.resolve?.()) ?? binding
65
+ assertEmbeddingModel(model)
66
+ if (!sameEmbeddingModel(model, binding)) {
67
+ throw new TypeError(
68
+ "[SixbModels] Resolved embedding model identity does not match the selected model."
69
+ )
70
+ }
71
+ requestSignal.throwIfAborted()
72
+ const callId = `call_${randomUUID()}`
73
+ const tokens = texts.reduce(
74
+ (sum, text) => sum + Math.ceil(new TextEncoder().encode(text).byteLength / 4),
75
+ 0
76
+ )
77
+ await session.admitEmbeddingCall(() =>
78
+ accounting.admitCall({
79
+ callId,
80
+ providerId: model.providerId,
81
+ modelId: model.modelId,
82
+ costEstimator: model.costEstimator,
83
+ inputTokens: { status: "estimated", tokens, method: "utf8BytesDividedByFour" },
84
+ outputTokenAllowance: 0,
85
+ estimatedTotalTokens: tokens,
86
+ })
87
+ )
88
+
89
+ let result: EmbeddingModelResult
90
+ try {
91
+ requestSignal.throwIfAborted()
92
+ result = await model.embed({ texts, signal: requestSignal })
93
+ } catch (error) {
94
+ if (error instanceof EmbeddingModelResponseError) {
95
+ await recordEmbedding(accounting, model, callId, error.metadata)
96
+ } else {
97
+ // The provider may have accepted the request. Never retry inference or release its budget.
98
+ await recordEmbedding(accounting, model, callId, {})
99
+ }
100
+ throw error
101
+ }
102
+ // Account before cancellation, vector validation or the materializer's optimistic write.
103
+ await recordEmbedding(accounting, model, callId, result ?? {})
104
+ requestSignal.throwIfAborted()
105
+ return result
106
+ }
107
+
108
+ async function recordEmbedding(
109
+ accounting: AiModelCallRecorder,
110
+ model: EmbeddingModel,
111
+ callId: string,
112
+ metadata: EmbeddingModelResponseMetadata
113
+ ): Promise<void> {
114
+ // Embeddings produce no output tokens; missing INPUT usage must remain unknown.
115
+ const usage = { ...metadata.usage, outputTokens: 0 }
116
+ const estimate = estimateModelCall(model, {
117
+ usage,
118
+ route: metadata.route,
119
+ responseModelId: metadata.responseModelId,
120
+ })
121
+ await accounting.onModelCallEnd({
122
+ callId,
123
+ providerId: model.providerId,
124
+ modelId: model.modelId,
125
+ responseId: metadata.providerIds?.responseId ?? callId,
126
+ responseModelId: metadata.responseModelId,
127
+ providerIds: metadata.providerIds,
128
+ usage,
129
+ cost: metadata.reportedCost ? { status: "reported", ...metadata.reportedCost } : estimate,
130
+ ...(metadata.reportedCost ? { estimate } : {}),
131
+ route: metadata.route,
132
+ })
133
+ }