@sixb/core 0.1.16 → 0.1.17

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 (563) hide show
  1. package/dist/actions/index.js +25 -25
  2. package/dist/actions/types/context.d.ts +2 -2
  3. package/dist/actions/types/context.d.ts.map +1 -1
  4. package/dist/actions/worker.js +1 -1
  5. package/dist/agents/index.js +41 -40
  6. package/dist/agents/index.js.map +1 -1
  7. package/dist/auth/index.js +5 -5
  8. package/dist/authorization/index.js +2 -2
  9. package/dist/blob-storage/download-urls.d.ts +41 -0
  10. package/dist/blob-storage/download-urls.d.ts.map +1 -0
  11. package/dist/blob-storage/execution.d.ts +9 -1
  12. package/dist/blob-storage/execution.d.ts.map +1 -1
  13. package/dist/blob-storage/index.js +5 -3
  14. package/dist/blob-storage/index.js.map +1 -1
  15. package/dist/blob-storage/internal.d.ts +2 -0
  16. package/dist/blob-storage/internal.d.ts.map +1 -0
  17. package/dist/blob-storage/internal.js +11 -0
  18. package/dist/blob-storage/internal.js.map +9 -0
  19. package/dist/bootstrap/index.js +45 -44
  20. package/dist/bootstrap/index.js.map +1 -1
  21. package/dist/{chunk-8x74221e.js → chunk-10styjgk.js} +18 -13
  22. package/dist/{chunk-8x74221e.js.map → chunk-10styjgk.js.map} +3 -3
  23. package/dist/{chunk-hgqpcmyr.js → chunk-1hqwggsn.js} +47 -19
  24. package/dist/chunk-1hqwggsn.js.map +12 -0
  25. package/dist/{chunk-zb47r1c8.js → chunk-23xs4qp9.js} +2 -2
  26. package/dist/{chunk-gmdvns8f.js → chunk-2am3db31.js} +2 -2
  27. package/dist/{chunk-fj1dvp37.js → chunk-2vhg6ysa.js} +1 -1
  28. package/dist/{chunk-dp7yk20b.js → chunk-33saed7g.js} +1 -1
  29. package/dist/{chunk-mdnw7nj8.js → chunk-3rrezgyc.js} +33 -8
  30. package/dist/chunk-3rrezgyc.js.map +15 -0
  31. package/dist/{chunk-jgwb25gc.js → chunk-4as3wt1c.js} +13 -5
  32. package/dist/chunk-4as3wt1c.js.map +12 -0
  33. package/dist/chunk-4ra628t7.js +88 -0
  34. package/dist/chunk-4ra628t7.js.map +10 -0
  35. package/dist/{chunk-chdg6eqq.js → chunk-52c5zb0z.js} +2 -2
  36. package/dist/{chunk-69kt9q43.js → chunk-5be2ath4.js} +1 -1
  37. package/dist/{chunk-qnd7ehe5.js → chunk-5thzcb8g.js} +2 -2
  38. package/dist/{chunk-6z1q7j19.js → chunk-5yd8cchh.js} +1126 -780
  39. package/dist/chunk-5yd8cchh.js.map +66 -0
  40. package/dist/{chunk-3q7z9hd4.js → chunk-6wbm6ymz.js} +234 -40
  41. package/dist/{chunk-3q7z9hd4.js.map → chunk-6wbm6ymz.js.map} +8 -6
  42. package/dist/{chunk-kvysp909.js → chunk-7ecp4v7a.js} +26 -19
  43. package/dist/chunk-7ecp4v7a.js.map +17 -0
  44. package/dist/{chunk-f85hpqnm.js → chunk-99nd4rc1.js} +3 -3
  45. package/dist/{chunk-f85hpqnm.js.map → chunk-99nd4rc1.js.map} +3 -3
  46. package/dist/{chunk-dsv8kdgk.js → chunk-9g6jz9kk.js} +5 -5
  47. package/dist/{chunk-39tqv9hz.js → chunk-9se093qz.js} +5 -6
  48. package/dist/{chunk-39tqv9hz.js.map → chunk-9se093qz.js.map} +3 -4
  49. package/dist/{chunk-7g2gjvah.js → chunk-a7er86jd.js} +1 -1
  50. package/dist/{chunk-zdkcdshk.js → chunk-aq39q04r.js} +41 -3
  51. package/dist/{chunk-zdkcdshk.js.map → chunk-aq39q04r.js.map} +4 -3
  52. package/dist/chunk-b9affek3.js +261 -0
  53. package/dist/chunk-b9affek3.js.map +12 -0
  54. package/dist/{chunk-b9y8hcm2.js → chunk-c2rga5cx.js} +1 -1
  55. package/dist/{chunk-f72rbvsb.js → chunk-cnb5kv05.js} +2 -2
  56. package/dist/chunk-d62kjtbg.js.map +2 -2
  57. package/dist/{chunk-vjqt7q3a.js → chunk-dam456ve.js} +233 -34
  58. package/dist/{chunk-vjqt7q3a.js.map → chunk-dam456ve.js.map} +7 -5
  59. package/dist/{chunk-sbcm1b92.js → chunk-e67ynxcr.js} +3 -3
  60. package/dist/{chunk-xnx96gfy.js → chunk-ere85b8y.js} +17 -8
  61. package/dist/chunk-ere85b8y.js.map +15 -0
  62. package/dist/{chunk-k4kkp58d.js → chunk-ewqa58h9.js} +12 -2
  63. package/dist/chunk-ewqa58h9.js.map +11 -0
  64. package/dist/{chunk-cq44v1a6.js → chunk-f1xh7a32.js} +3 -3
  65. package/dist/{chunk-h4138ww2.js → chunk-fggq3d9k.js} +450 -799
  66. package/dist/chunk-fggq3d9k.js.map +49 -0
  67. package/dist/{chunk-kttr5ftm.js → chunk-gf7yht60.js} +3 -3
  68. package/dist/chunk-h8teetr0.js +9 -0
  69. package/dist/chunk-h8teetr0.js.map +10 -0
  70. package/dist/chunk-hn2r7z41.js.map +1 -1
  71. package/dist/{chunk-nj0020ay.js → chunk-jjrn5v0p.js} +1 -1
  72. package/dist/{chunk-nvymebc1.js → chunk-jnfxmr3f.js} +1 -1
  73. package/dist/{chunk-nkbev3tr.js → chunk-k4g51s47.js} +3 -3
  74. package/dist/{chunk-a0073121.js → chunk-kpx7jrmn.js} +3 -1
  75. package/dist/chunk-kpx7jrmn.js.map +12 -0
  76. package/dist/{chunk-h044jb97.js → chunk-pja9jfz6.js} +172 -10
  77. package/dist/chunk-pja9jfz6.js.map +19 -0
  78. package/dist/chunk-pqajwytd.js.map +1 -1
  79. package/dist/{chunk-mr60an99.js → chunk-qczk96d9.js} +22 -2
  80. package/dist/{chunk-mr60an99.js.map → chunk-qczk96d9.js.map} +3 -3
  81. package/dist/{chunk-s3csryxe.js → chunk-rj69qcrd.js} +8 -2
  82. package/dist/chunk-rj69qcrd.js.map +11 -0
  83. package/dist/{chunk-swxzncrv.js → chunk-rpxz486p.js} +32 -5
  84. package/dist/{chunk-swxzncrv.js.map → chunk-rpxz486p.js.map} +4 -4
  85. package/dist/{chunk-tkdbge6v.js → chunk-rx7h5fdx.js} +1 -1
  86. package/dist/{chunk-tnvafr7g.js → chunk-s7ftxrdr.js} +105 -7
  87. package/dist/chunk-s7ftxrdr.js.map +22 -0
  88. package/dist/{chunk-h866d223.js → chunk-sk0hcjsz.js} +1 -1
  89. package/dist/{chunk-2xvgy3x5.js → chunk-svabwqdq.js} +2 -2
  90. package/dist/{chunk-667x4drs.js → chunk-t9shqx3w.js} +2 -2
  91. package/dist/{chunk-40qb8wpe.js → chunk-tjjgy3z4.js} +26 -23
  92. package/dist/{chunk-40qb8wpe.js.map → chunk-tjjgy3z4.js.map} +3 -3
  93. package/dist/{chunk-gkxsenvp.js → chunk-vp3z1ckh.js} +31 -7
  94. package/dist/{chunk-gkxsenvp.js.map → chunk-vp3z1ckh.js.map} +5 -4
  95. package/dist/{chunk-cxj8y8t0.js → chunk-vre348sb.js} +2 -2
  96. package/dist/{chunk-vsvrv7n8.js → chunk-w9yycd3t.js} +1 -1
  97. package/dist/{chunk-g4rbm4a6.js → chunk-wt4szfec.js} +379 -331
  98. package/dist/chunk-wt4szfec.js.map +14 -0
  99. package/dist/{chunk-a7ne02hk.js → chunk-xcy5ddha.js} +6 -6
  100. package/dist/{chunk-zvmr2hqk.js → chunk-xyvy73tj.js} +4 -3
  101. package/dist/{chunk-zvmr2hqk.js.map → chunk-xyvy73tj.js.map} +3 -3
  102. package/dist/datasets/write.js +1 -1
  103. package/dist/execution/agent.js +38 -37
  104. package/dist/execution/agent.js.map +1 -1
  105. package/dist/execution/authorized-object-reader.d.ts +3 -1
  106. package/dist/execution/authorized-object-reader.d.ts.map +1 -1
  107. package/dist/execution/primitive.js +36 -35
  108. package/dist/execution/primitive.js.map +2 -2
  109. package/dist/execution/request.js +37 -36
  110. package/dist/execution/request.js.map +2 -2
  111. package/dist/index.d.ts +8 -4
  112. package/dist/index.d.ts.map +1 -1
  113. package/dist/index.js +62 -59
  114. package/dist/index.js.map +1 -1
  115. package/dist/lake-storage/in-memory.d.ts +5 -1
  116. package/dist/lake-storage/in-memory.d.ts.map +1 -1
  117. package/dist/lake-storage/index.d.ts +1 -1
  118. package/dist/lake-storage/index.d.ts.map +1 -1
  119. package/dist/lake-storage/index.js +2 -2
  120. package/dist/lake-storage/types.d.ts +26 -0
  121. package/dist/lake-storage/types.d.ts.map +1 -1
  122. package/dist/maintenance/ontology-maintenance.d.ts +5 -1
  123. package/dist/maintenance/ontology-maintenance.d.ts.map +1 -1
  124. package/dist/maintenance/types.d.ts +1 -4
  125. package/dist/maintenance/types.d.ts.map +1 -1
  126. package/dist/materialization/event-envelopes.d.ts +20 -0
  127. package/dist/materialization/event-envelopes.d.ts.map +1 -0
  128. package/dist/materialization/events.d.ts +29 -3
  129. package/dist/materialization/events.d.ts.map +1 -1
  130. package/dist/materialization/index.d.ts +4 -1
  131. package/dist/materialization/index.d.ts.map +1 -1
  132. package/dist/materialization/index.js +9 -3
  133. package/dist/materialization/index.js.map +1 -1
  134. package/dist/materializer/edits/plan.d.ts +2 -10
  135. package/dist/materializer/edits/plan.d.ts.map +1 -1
  136. package/dist/materializer/effective/build-events.d.ts +5 -21
  137. package/dist/materializer/effective/build-events.d.ts.map +1 -1
  138. package/dist/materializer/effective/vector-indexing.d.ts +2 -3
  139. package/dist/materializer/effective/vector-indexing.d.ts.map +1 -1
  140. package/dist/materializer/effective/vectors.d.ts +2 -3
  141. package/dist/materializer/effective/vectors.d.ts.map +1 -1
  142. package/dist/materializer/execution/scope.d.ts +1 -11
  143. package/dist/materializer/execution/scope.d.ts.map +1 -1
  144. package/dist/materializer/execution/work-executor.d.ts +5 -7
  145. package/dist/materializer/execution/work-executor.d.ts.map +1 -1
  146. package/dist/materializer/execution/work-records.d.ts +1 -3
  147. package/dist/materializer/execution/work-records.d.ts.map +1 -1
  148. package/dist/materializer/index.js +31 -32
  149. package/dist/materializer/index.js.map +1 -1
  150. package/dist/materializer/projections/replace.d.ts.map +1 -1
  151. package/dist/materializer/projections/replacement-plan.d.ts +8 -11
  152. package/dist/materializer/projections/replacement-plan.d.ts.map +1 -1
  153. package/dist/materializer/shared/batching.d.ts +5 -0
  154. package/dist/materializer/shared/batching.d.ts.map +1 -1
  155. package/dist/materializer/telemetry/plan.d.ts +2 -8
  156. package/dist/materializer/telemetry/plan.d.ts.map +1 -1
  157. package/dist/models/audio/catalog.d.ts +20 -0
  158. package/dist/models/audio/catalog.d.ts.map +1 -0
  159. package/dist/models/audio/errors.d.ts +8 -0
  160. package/dist/models/audio/errors.d.ts.map +1 -0
  161. package/dist/models/audio/file.d.ts +9 -0
  162. package/dist/models/audio/file.d.ts.map +1 -0
  163. package/dist/models/audio/runtime.d.ts +8 -0
  164. package/dist/models/audio/runtime.d.ts.map +1 -0
  165. package/dist/models/audio/types.d.ts +60 -0
  166. package/dist/models/audio/types.d.ts.map +1 -0
  167. package/dist/models/catalog.d.ts +23 -1
  168. package/dist/models/catalog.d.ts.map +1 -1
  169. package/dist/models/definitions.d.ts +1 -1
  170. package/dist/models/definitions.d.ts.map +1 -1
  171. package/dist/models/events.d.ts +3 -0
  172. package/dist/models/events.d.ts.map +1 -1
  173. package/dist/models/execution/index.js +22 -22
  174. package/dist/models/execution/model-call-admission.d.ts +6 -1
  175. package/dist/models/execution/model-call-admission.d.ts.map +1 -1
  176. package/dist/models/execution/model-call-limits.d.ts.map +1 -1
  177. package/dist/models/execution/model-call-recorder.d.ts.map +1 -1
  178. package/dist/models/execution/reranking.d.ts +4 -0
  179. package/dist/models/execution/reranking.d.ts.map +1 -0
  180. package/dist/models/execution/usage.d.ts.map +1 -1
  181. package/dist/models/execution.d.ts +2 -1
  182. package/dist/models/execution.d.ts.map +1 -1
  183. package/dist/models/generation-types.d.ts +2 -0
  184. package/dist/models/generation-types.d.ts.map +1 -1
  185. package/dist/models/index.d.ts +7 -1
  186. package/dist/models/index.d.ts.map +1 -1
  187. package/dist/models/index.js +6 -2
  188. package/dist/models/index.js.map +1 -1
  189. package/dist/models/pricing.d.ts +2 -2
  190. package/dist/models/pricing.d.ts.map +1 -1
  191. package/dist/models/reranking-model.d.ts +49 -0
  192. package/dist/models/reranking-model.d.ts.map +1 -0
  193. package/dist/objects/index.js +25 -25
  194. package/dist/objects/query/executor.d.ts +2 -1
  195. package/dist/objects/query/executor.d.ts.map +1 -1
  196. package/dist/objects/query/index.d.ts +1 -1
  197. package/dist/objects/query/index.d.ts.map +1 -1
  198. package/dist/objects/query/index.js +22 -22
  199. package/dist/objects/query/ir.d.ts +8 -1
  200. package/dist/objects/query/ir.d.ts.map +1 -1
  201. package/dist/objects/query/normalize.d.ts.map +1 -1
  202. package/dist/objects/query/planner.d.ts +1 -1
  203. package/dist/objects/query/planner.d.ts.map +1 -1
  204. package/dist/objects/query/primary-id.d.ts +7 -0
  205. package/dist/objects/query/primary-id.d.ts.map +1 -0
  206. package/dist/objects/query/reranking-executor.d.ts +13 -0
  207. package/dist/objects/query/reranking-executor.d.ts.map +1 -0
  208. package/dist/objects/query/reranking-limits.d.ts +3 -0
  209. package/dist/objects/query/reranking-limits.d.ts.map +1 -0
  210. package/dist/objects/query/reranking-query.d.ts +4 -0
  211. package/dist/objects/query/reranking-query.d.ts.map +1 -0
  212. package/dist/objects/query/validate.d.ts.map +1 -1
  213. package/dist/objects/sdk/query-builder.d.ts +8 -0
  214. package/dist/objects/sdk/query-builder.d.ts.map +1 -1
  215. package/dist/objects/sdk/query-executor.d.ts +2 -2
  216. package/dist/objects/sdk/query-executor.d.ts.map +1 -1
  217. package/dist/objects/sdk/runtime-query-executor.d.ts.map +1 -1
  218. package/dist/objects/vectors/indexing-dispatch.d.ts +21 -0
  219. package/dist/objects/vectors/indexing-dispatch.d.ts.map +1 -0
  220. package/dist/objects/vectors/query.d.ts.map +1 -1
  221. package/dist/ontology/builders.d.ts.map +1 -1
  222. package/dist/ontology/index.d.ts +1 -1
  223. package/dist/ontology/index.d.ts.map +1 -1
  224. package/dist/ontology/index.js +3 -3
  225. package/dist/ontology/internal.js +2 -2
  226. package/dist/ontology/query-capabilities.d.ts +1 -0
  227. package/dist/ontology/query-capabilities.d.ts.map +1 -1
  228. package/dist/ontology/types.d.ts +20 -0
  229. package/dist/ontology/types.d.ts.map +1 -1
  230. package/dist/ontology/validation/query.d.ts.map +1 -1
  231. package/dist/pipelines/index.js +23 -23
  232. package/dist/projections/internal.js +22 -22
  233. package/dist/query.d.ts +4 -2
  234. package/dist/query.d.ts.map +1 -1
  235. package/dist/query.js +2 -2
  236. package/dist/queues/in-memory.d.ts +3 -0
  237. package/dist/queues/in-memory.d.ts.map +1 -1
  238. package/dist/queues/index.js +1 -1
  239. package/dist/queues/types.d.ts +4 -0
  240. package/dist/queues/types.d.ts.map +1 -1
  241. package/dist/runtime/host.d.ts +1 -0
  242. package/dist/runtime/host.d.ts.map +1 -1
  243. package/dist/runtime/index.d.ts +1 -1
  244. package/dist/runtime/index.d.ts.map +1 -1
  245. package/dist/runtime/internal.d.ts +1 -0
  246. package/dist/runtime/internal.d.ts.map +1 -1
  247. package/dist/runtime/internal.js +28 -26
  248. package/dist/runtime/internal.js.map +1 -1
  249. package/dist/runtime/public-origin.d.ts +10 -0
  250. package/dist/runtime/public-origin.d.ts.map +1 -0
  251. package/dist/runtime/sixb.d.ts +1 -0
  252. package/dist/runtime/sixb.d.ts.map +1 -1
  253. package/dist/runtime/types.d.ts +12 -2
  254. package/dist/runtime/types.d.ts.map +1 -1
  255. package/dist/sandboxes/index.js +5 -5
  256. package/dist/shares/internal.js +19 -19
  257. package/dist/storage/agents/provider.js +2 -2
  258. package/dist/storage/ai-cost/analytics.d.ts +1 -0
  259. package/dist/storage/ai-cost/analytics.d.ts.map +1 -1
  260. package/dist/storage/ai-cost/provider.js +3 -3
  261. package/dist/storage/ai-cost/types.d.ts +1 -1
  262. package/dist/storage/ai-cost/types.d.ts.map +1 -1
  263. package/dist/storage/ai-cost/validation.d.ts.map +1 -1
  264. package/dist/storage/ai-limits/enforcement.js +2 -2
  265. package/dist/storage/ai-limits/in-memory.d.ts.map +1 -1
  266. package/dist/storage/ai-limits/provider.d.ts +7 -2
  267. package/dist/storage/ai-limits/provider.d.ts.map +1 -1
  268. package/dist/storage/ai-limits/provider.js +4 -2
  269. package/dist/storage/ai-limits/provider.js.map +1 -1
  270. package/dist/storage/ai-limits/types.d.ts +3 -0
  271. package/dist/storage/ai-limits/types.d.ts.map +1 -1
  272. package/dist/storage/ai-usage/record.d.ts.map +1 -1
  273. package/dist/storage/ai-usage/types.d.ts +8 -4
  274. package/dist/storage/ai-usage/types.d.ts.map +1 -1
  275. package/dist/storage/ai-usage/usage.d.ts.map +1 -1
  276. package/dist/storage/file-download-grants/in-memory.d.ts +11 -0
  277. package/dist/storage/file-download-grants/in-memory.d.ts.map +1 -0
  278. package/dist/storage/file-download-grants/index.d.ts +3 -0
  279. package/dist/storage/file-download-grants/index.d.ts.map +1 -0
  280. package/dist/storage/file-download-grants/record.d.ts +11 -0
  281. package/dist/storage/file-download-grants/record.d.ts.map +1 -0
  282. package/dist/storage/file-download-grants/types.d.ts +44 -0
  283. package/dist/storage/file-download-grants/types.d.ts.map +1 -0
  284. package/dist/storage/file-upload-sessions/provider.js +6 -6
  285. package/dist/storage/in-memory/index.d.ts +4 -0
  286. package/dist/storage/in-memory/index.d.ts.map +1 -1
  287. package/dist/storage/index.d.ts +5 -3
  288. package/dist/storage/index.d.ts.map +1 -1
  289. package/dist/storage/index.js +30 -30
  290. package/dist/storage/index.js.map +1 -1
  291. package/dist/storage/internal.d.ts +1 -0
  292. package/dist/storage/internal.d.ts.map +1 -1
  293. package/dist/storage/internal.js +8 -4
  294. package/dist/storage/internal.js.map +1 -1
  295. package/dist/storage/migrations/index.d.ts +1 -1
  296. package/dist/storage/migrations/index.d.ts.map +1 -1
  297. package/dist/storage/migrations/migrate-storage.d.ts +3 -3
  298. package/dist/storage/migrations/migrate-storage.d.ts.map +1 -1
  299. package/dist/storage/migrations/types.d.ts +7 -0
  300. package/dist/storage/migrations/types.d.ts.map +1 -1
  301. package/dist/storage/objects/in-memory/query.d.ts.map +1 -1
  302. package/dist/storage/objects/in-memory/selected-reader.d.ts.map +1 -1
  303. package/dist/storage/objects/in-memory/storage.d.ts.map +1 -1
  304. package/dist/storage/objects/query-preparation.d.ts +39 -0
  305. package/dist/storage/objects/query-preparation.d.ts.map +1 -0
  306. package/dist/storage/objects/types.d.ts +2 -0
  307. package/dist/storage/objects/types.d.ts.map +1 -1
  308. package/dist/storage/ontology/commits.d.ts +1 -6
  309. package/dist/storage/ontology/commits.d.ts.map +1 -1
  310. package/dist/storage/ontology/in-memory/index.d.ts +4 -2
  311. package/dist/storage/ontology/in-memory/index.d.ts.map +1 -1
  312. package/dist/storage/ontology/in-memory/materializations-state.d.ts +0 -2
  313. package/dist/storage/ontology/in-memory/materializations-state.d.ts.map +1 -1
  314. package/dist/storage/ontology/in-memory/materializations-work.d.ts +1 -3
  315. package/dist/storage/ontology/in-memory/materializations-work.d.ts.map +1 -1
  316. package/dist/storage/ontology/in-memory/materializations.d.ts +23 -57
  317. package/dist/storage/ontology/in-memory/materializations.d.ts.map +1 -1
  318. package/dist/storage/ontology/in-memory/outbox.d.ts +3 -2
  319. package/dist/storage/ontology/in-memory/outbox.d.ts.map +1 -1
  320. package/dist/storage/ontology/in-memory/replacement-plans.d.ts +104 -0
  321. package/dist/storage/ontology/in-memory/replacement-plans.d.ts.map +1 -0
  322. package/dist/storage/ontology/in-memory/shared-state.d.ts +17 -2
  323. package/dist/storage/ontology/in-memory/shared-state.d.ts.map +1 -1
  324. package/dist/storage/ontology/in-memory/source-roots.d.ts +3 -1
  325. package/dist/storage/ontology/in-memory/source-roots.d.ts.map +1 -1
  326. package/dist/storage/ontology/in-memory/sources.d.ts +1 -2
  327. package/dist/storage/ontology/in-memory/sources.d.ts.map +1 -1
  328. package/dist/storage/ontology/in-memory/state-reader.d.ts +25 -0
  329. package/dist/storage/ontology/in-memory/state-reader.d.ts.map +1 -0
  330. package/dist/storage/ontology/index.d.ts +6 -3
  331. package/dist/storage/ontology/index.d.ts.map +1 -1
  332. package/dist/storage/ontology/materializations.d.ts +40 -59
  333. package/dist/storage/ontology/materializations.d.ts.map +1 -1
  334. package/dist/storage/ontology/outbox.d.ts +4 -6
  335. package/dist/storage/ontology/outbox.d.ts.map +1 -1
  336. package/dist/storage/ontology/provider-work.d.ts +114 -3
  337. package/dist/storage/ontology/provider-work.d.ts.map +1 -1
  338. package/dist/storage/ontology/provider.d.ts +14 -39
  339. package/dist/storage/ontology/provider.d.ts.map +1 -1
  340. package/dist/storage/ontology/provider.js +26 -12
  341. package/dist/storage/ontology/provider.js.map +1 -1
  342. package/dist/storage/ontology/replacement-plans.d.ts +103 -0
  343. package/dist/storage/ontology/replacement-plans.d.ts.map +1 -0
  344. package/dist/storage/ontology/sources.d.ts +0 -8
  345. package/dist/storage/ontology/sources.d.ts.map +1 -1
  346. package/dist/storage/operation-scope.d.ts.map +1 -1
  347. package/dist/storage/operation-scope.js +1 -1
  348. package/dist/storage/projection-runs/in-memory.d.ts.map +1 -1
  349. package/dist/storage/projection-runs/types.d.ts +2 -0
  350. package/dist/storage/projection-runs/types.d.ts.map +1 -1
  351. package/dist/storage/types.d.ts +2 -0
  352. package/dist/storage/types.d.ts.map +1 -1
  353. package/dist/storage/workflow-runs/provider.js +6 -6
  354. package/dist/syncs/index.js +24 -24
  355. package/dist/testing/ai-cost-storage-contract.d.ts.map +1 -1
  356. package/dist/testing/ai-limit-storage-contract.d.ts.map +1 -1
  357. package/dist/testing/ai-usage-storage-contract.d.ts.map +1 -1
  358. package/dist/testing/file-download-grant-storage-contract.d.ts +9 -0
  359. package/dist/testing/file-download-grant-storage-contract.d.ts.map +1 -0
  360. package/dist/testing/index.d.ts +1 -0
  361. package/dist/testing/index.d.ts.map +1 -1
  362. package/dist/testing/index.js +2549 -1490
  363. package/dist/testing/index.js.map +14 -13
  364. package/dist/testing/lake-storage-contract.d.ts.map +1 -1
  365. package/dist/testing/materializer-storage-contract.d.ts +14 -0
  366. package/dist/testing/materializer-storage-contract.d.ts.map +1 -1
  367. package/dist/testing/object-read-scope-contract.d.ts.map +1 -1
  368. package/dist/testing/ontology-contract-fixture.d.ts +5 -1
  369. package/dist/testing/ontology-contract-fixture.d.ts.map +1 -1
  370. package/dist/testing/ontology-storage-contract.d.ts.map +1 -1
  371. package/dist/testing/projection-run-storage-contract.d.ts.map +1 -1
  372. package/dist/testing/queues-contract.d.ts.map +1 -1
  373. package/dist/webhooks/internal.js +20 -20
  374. package/dist/workers/index.js +15 -17
  375. package/dist/workers/index.js.map +3 -3
  376. package/dist/workers/queue-worker.d.ts +3 -2
  377. package/dist/workers/queue-worker.d.ts.map +1 -1
  378. package/dist/workflows/index.js +42 -41
  379. package/dist/workflows/index.js.map +1 -1
  380. package/package.json +7 -1
  381. package/src/actions/types/context.ts +5 -2
  382. package/src/blob-storage/download-urls.ts +138 -0
  383. package/src/blob-storage/execution.ts +32 -1
  384. package/src/blob-storage/internal.ts +1 -0
  385. package/src/execution/authorized-object-reader.ts +8 -1
  386. package/src/index.ts +25 -0
  387. package/src/lake-storage/in-memory.ts +38 -9
  388. package/src/lake-storage/index.ts +2 -0
  389. package/src/lake-storage/types.ts +30 -0
  390. package/src/maintenance/ontology-maintenance.ts +50 -23
  391. package/src/maintenance/types.ts +1 -4
  392. package/src/materialization/event-envelopes.ts +168 -0
  393. package/src/materialization/events.ts +40 -4
  394. package/src/materialization/index.ts +9 -1
  395. package/src/materializer/README.md +55 -10
  396. package/src/materializer/edits/commit.ts +3 -19
  397. package/src/materializer/edits/plan.ts +20 -71
  398. package/src/materializer/effective/build-events.ts +42 -136
  399. package/src/materializer/effective/vector-indexing.ts +2 -3
  400. package/src/materializer/effective/vectors.ts +2 -3
  401. package/src/materializer/execution/scope.ts +1 -38
  402. package/src/materializer/execution/work-executor.ts +21 -115
  403. package/src/materializer/execution/work-records.ts +0 -15
  404. package/src/materializer/projections/replace.ts +106 -63
  405. package/src/materializer/projections/replacement-plan.ts +73 -218
  406. package/src/materializer/shared/batching.ts +7 -0
  407. package/src/materializer/telemetry/append.ts +2 -14
  408. package/src/materializer/telemetry/plan.ts +6 -43
  409. package/src/models/audio/catalog.ts +90 -0
  410. package/src/models/audio/errors.ts +19 -0
  411. package/src/models/audio/file.ts +78 -0
  412. package/src/models/audio/runtime.ts +182 -0
  413. package/src/models/audio/types.ts +69 -0
  414. package/src/models/catalog.ts +52 -5
  415. package/src/models/definitions.ts +8 -1
  416. package/src/models/events.ts +3 -0
  417. package/src/models/execution/README.md +20 -1
  418. package/src/models/execution/model-call-admission.ts +6 -1
  419. package/src/models/execution/model-call-limits.ts +21 -11
  420. package/src/models/execution/model-call-recorder.ts +1 -0
  421. package/src/models/execution/model-call-recovery.ts +1 -0
  422. package/src/models/execution/reranking.ts +137 -0
  423. package/src/models/execution/usage.ts +1 -0
  424. package/src/models/execution.ts +5 -1
  425. package/src/models/generation-types.ts +2 -0
  426. package/src/models/index.ts +32 -0
  427. package/src/models/pricing.ts +2 -1
  428. package/src/models/reranking-model.ts +114 -0
  429. package/src/objects/query/executor.ts +42 -2
  430. package/src/objects/query/explain.ts +8 -0
  431. package/src/objects/query/index.ts +1 -0
  432. package/src/objects/query/ir.ts +10 -0
  433. package/src/objects/query/normalize.ts +2 -0
  434. package/src/objects/query/planner.ts +12 -1
  435. package/src/objects/query/primary-id.ts +56 -0
  436. package/src/objects/query/reranking-executor.ts +91 -0
  437. package/src/objects/query/reranking-limits.ts +3 -0
  438. package/src/objects/query/reranking-query.ts +8 -0
  439. package/src/objects/query/validate.ts +33 -1
  440. package/src/objects/sdk/query-builder.ts +15 -2
  441. package/src/objects/sdk/query-executor.ts +2 -2
  442. package/src/objects/sdk/runtime-query-executor.ts +7 -4
  443. package/src/objects/vectors/README.md +6 -2
  444. package/src/objects/vectors/indexing-dispatch.ts +83 -0
  445. package/src/objects/vectors/query.ts +3 -0
  446. package/src/ontology/builders.ts +1 -0
  447. package/src/ontology/index.ts +2 -0
  448. package/src/ontology/query-capabilities.ts +1 -1
  449. package/src/ontology/types.ts +21 -0
  450. package/src/ontology/validation/query.ts +57 -0
  451. package/src/query.ts +4 -0
  452. package/src/queues/in-memory.ts +54 -19
  453. package/src/queues/types.ts +4 -0
  454. package/src/runtime/host.ts +28 -1
  455. package/src/runtime/index.ts +1 -0
  456. package/src/runtime/internal.ts +1 -0
  457. package/src/runtime/public-origin.ts +33 -0
  458. package/src/runtime/sixb.ts +13 -2
  459. package/src/runtime/types.ts +12 -2
  460. package/src/storage/ai-cost/analytics.ts +2 -0
  461. package/src/storage/ai-cost/codec.ts +2 -1
  462. package/src/storage/ai-cost/types.ts +1 -0
  463. package/src/storage/ai-cost/validation.ts +21 -8
  464. package/src/storage/ai-limits/in-memory.ts +10 -2
  465. package/src/storage/ai-limits/provider.ts +29 -2
  466. package/src/storage/ai-limits/types.ts +3 -0
  467. package/src/storage/ai-usage/record.ts +9 -0
  468. package/src/storage/ai-usage/types.ts +8 -4
  469. package/src/storage/ai-usage/usage.ts +2 -0
  470. package/src/storage/file-download-grants/in-memory.ts +73 -0
  471. package/src/storage/file-download-grants/index.ts +8 -0
  472. package/src/storage/file-download-grants/record.ts +47 -0
  473. package/src/storage/file-download-grants/types.ts +48 -0
  474. package/src/storage/in-memory/index.ts +13 -2
  475. package/src/storage/index.ts +31 -13
  476. package/src/storage/internal.ts +1 -0
  477. package/src/storage/migrations/index.ts +1 -0
  478. package/src/storage/migrations/migrate-storage.ts +36 -12
  479. package/src/storage/migrations/types.ts +8 -0
  480. package/src/storage/objects/in-memory/query.ts +2 -0
  481. package/src/storage/objects/in-memory/selected-reader.ts +1 -0
  482. package/src/storage/objects/in-memory/storage.ts +1 -0
  483. package/src/storage/objects/query-preparation.ts +77 -0
  484. package/src/storage/objects/types.ts +2 -0
  485. package/src/storage/ontology/commits.ts +1 -6
  486. package/src/storage/ontology/in-memory/index.ts +28 -9
  487. package/src/storage/ontology/in-memory/materializations-finalization.ts +35 -68
  488. package/src/storage/ontology/in-memory/materializations-state.ts +0 -22
  489. package/src/storage/ontology/in-memory/materializations-work.ts +0 -45
  490. package/src/storage/ontology/in-memory/materializations.ts +172 -653
  491. package/src/storage/ontology/in-memory/outbox.ts +37 -29
  492. package/src/storage/ontology/in-memory/replacement-plans.ts +697 -0
  493. package/src/storage/ontology/in-memory/shared-state.ts +24 -2
  494. package/src/storage/ontology/in-memory/source-roots.ts +7 -2
  495. package/src/storage/ontology/in-memory/sources.ts +7 -33
  496. package/src/storage/ontology/in-memory/state-reader.ts +245 -0
  497. package/src/storage/ontology/index.ts +19 -13
  498. package/src/storage/ontology/materializations.ts +45 -74
  499. package/src/storage/ontology/outbox.ts +4 -7
  500. package/src/storage/ontology/provider-header-validation.ts +0 -57
  501. package/src/storage/ontology/provider-work.ts +381 -90
  502. package/src/storage/ontology/provider.ts +74 -171
  503. package/src/storage/ontology/replacement-plans.ts +117 -0
  504. package/src/storage/ontology/sources.ts +0 -12
  505. package/src/storage/operation-scope.ts +33 -1
  506. package/src/storage/projection-runs/in-memory.ts +7 -1
  507. package/src/storage/projection-runs/types.ts +2 -0
  508. package/src/storage/types.ts +2 -0
  509. package/src/testing/ai-cost-storage-contract.ts +1 -0
  510. package/src/testing/ai-limit-storage-contract.ts +62 -0
  511. package/src/testing/ai-usage-storage-contract.ts +31 -0
  512. package/src/testing/file-download-grant-storage-contract.ts +139 -0
  513. package/src/testing/index.ts +4 -0
  514. package/src/testing/lake-storage-contract.ts +87 -1
  515. package/src/testing/materializer-storage-contract.ts +1008 -1
  516. package/src/testing/object-read-scope-contract.ts +1 -0
  517. package/src/testing/ontology-contract-fixture.ts +11 -87
  518. package/src/testing/ontology-storage-contract.ts +70 -39
  519. package/src/testing/projection-run-storage-contract.ts +14 -0
  520. package/src/testing/queues-contract.ts +59 -0
  521. package/src/workers/queue-worker.ts +19 -16
  522. package/dist/chunk-6z1q7j19.js.map +0 -62
  523. package/dist/chunk-7ytf06d3.js +0 -113
  524. package/dist/chunk-7ytf06d3.js.map +0 -10
  525. package/dist/chunk-a0073121.js.map +0 -12
  526. package/dist/chunk-g4rbm4a6.js.map +0 -15
  527. package/dist/chunk-h044jb97.js.map +0 -15
  528. package/dist/chunk-h4138ww2.js.map +0 -50
  529. package/dist/chunk-hgqpcmyr.js.map +0 -12
  530. package/dist/chunk-jgwb25gc.js.map +0 -12
  531. package/dist/chunk-k4kkp58d.js.map +0 -11
  532. package/dist/chunk-kvysp909.js.map +0 -17
  533. package/dist/chunk-mdnw7nj8.js.map +0 -15
  534. package/dist/chunk-s3csryxe.js.map +0 -11
  535. package/dist/chunk-tnvafr7g.js.map +0 -19
  536. package/dist/chunk-xnx96gfy.js.map +0 -15
  537. package/dist/materializer/execution/plan-stream.d.ts +0 -8
  538. package/dist/materializer/execution/plan-stream.d.ts.map +0 -1
  539. package/src/materializer/execution/plan-stream.ts +0 -121
  540. /package/dist/{chunk-zb47r1c8.js.map → chunk-23xs4qp9.js.map} +0 -0
  541. /package/dist/{chunk-gmdvns8f.js.map → chunk-2am3db31.js.map} +0 -0
  542. /package/dist/{chunk-fj1dvp37.js.map → chunk-2vhg6ysa.js.map} +0 -0
  543. /package/dist/{chunk-dp7yk20b.js.map → chunk-33saed7g.js.map} +0 -0
  544. /package/dist/{chunk-chdg6eqq.js.map → chunk-52c5zb0z.js.map} +0 -0
  545. /package/dist/{chunk-69kt9q43.js.map → chunk-5be2ath4.js.map} +0 -0
  546. /package/dist/{chunk-qnd7ehe5.js.map → chunk-5thzcb8g.js.map} +0 -0
  547. /package/dist/{chunk-dsv8kdgk.js.map → chunk-9g6jz9kk.js.map} +0 -0
  548. /package/dist/{chunk-7g2gjvah.js.map → chunk-a7er86jd.js.map} +0 -0
  549. /package/dist/{chunk-b9y8hcm2.js.map → chunk-c2rga5cx.js.map} +0 -0
  550. /package/dist/{chunk-f72rbvsb.js.map → chunk-cnb5kv05.js.map} +0 -0
  551. /package/dist/{chunk-sbcm1b92.js.map → chunk-e67ynxcr.js.map} +0 -0
  552. /package/dist/{chunk-cq44v1a6.js.map → chunk-f1xh7a32.js.map} +0 -0
  553. /package/dist/{chunk-kttr5ftm.js.map → chunk-gf7yht60.js.map} +0 -0
  554. /package/dist/{chunk-nj0020ay.js.map → chunk-jjrn5v0p.js.map} +0 -0
  555. /package/dist/{chunk-nvymebc1.js.map → chunk-jnfxmr3f.js.map} +0 -0
  556. /package/dist/{chunk-nkbev3tr.js.map → chunk-k4g51s47.js.map} +0 -0
  557. /package/dist/{chunk-tkdbge6v.js.map → chunk-rx7h5fdx.js.map} +0 -0
  558. /package/dist/{chunk-h866d223.js.map → chunk-sk0hcjsz.js.map} +0 -0
  559. /package/dist/{chunk-2xvgy3x5.js.map → chunk-svabwqdq.js.map} +0 -0
  560. /package/dist/{chunk-667x4drs.js.map → chunk-t9shqx3w.js.map} +0 -0
  561. /package/dist/{chunk-cxj8y8t0.js.map → chunk-vre348sb.js.map} +0 -0
  562. /package/dist/{chunk-vsvrv7n8.js.map → chunk-w9yycd3t.js.map} +0 -0
  563. /package/dist/{chunk-a7ne02hk.js.map → chunk-xcy5ddha.js.map} +0 -0
@@ -6,6 +6,11 @@ export interface MaterializationBatching {
6
6
  readonly statePageRows: number
7
7
  readonly planChunkRows: number
8
8
  readonly planChunkBytes: number
9
+ /**
10
+ * Stale identities a projection commit plans again inside its own transaction. A refresh that
11
+ * finds more gives them back to a round outside it.
12
+ */
13
+ readonly transactionReplanRows: number
9
14
  }
10
15
 
11
16
  export const DEFAULT_MATERIALIZATION_BATCHING: MaterializationBatching = Object.freeze({
@@ -17,6 +22,8 @@ export const DEFAULT_MATERIALIZATION_BATCHING: MaterializationBatching = Object.
17
22
  statePageRows: 1_000,
18
23
  planChunkRows: 1_000,
19
24
  planChunkBytes: 4 * 1024 * 1024,
25
+ // One state page: a few hundred milliseconds of planning while the commit holds its locks.
26
+ transactionReplanRows: 1_000,
20
27
  })
21
28
 
22
29
  /** Internal test/provider override. Application configuration never exposes these chunk targets. */
@@ -32,7 +32,7 @@ import {
32
32
  type MaterializerExecution,
33
33
  prepareMaterializerExecution,
34
34
  } from "../execution/scope"
35
- import { drainStagedEvents, drainStagedWork } from "../execution/work-executor"
35
+ import { applyStagedWork } from "../execution/work-executor"
36
36
  import type { MaterializerCommand } from "../materializer"
37
37
  import {
38
38
  createProjectionTelemetryIdempotencyKey,
@@ -397,20 +397,9 @@ async function executeTelemetryTransaction(
397
397
  storage.ontology.materializations,
398
398
  session,
399
399
  command.input,
400
- command.identity,
401
- origin,
402
- {
403
- correlationId: command.execution.correlationId,
404
- attribution: command.execution.attribution,
405
- }
406
- )
407
- await drainStagedWork(context, storage, session)
408
- const eventCount = await drainStagedEvents(
409
- context,
410
- storage.ontology.materializations,
411
- session,
412
400
  command.identity
413
401
  )
402
+ const eventCount = await applyStagedWork(context, storage, session)
414
403
  const result: TelemetryCommitResult = {
415
404
  kind: "telemetry",
416
405
  commitId: command.identity.commitId,
@@ -475,7 +464,6 @@ function telemetryCommit(
475
464
  requestHash: command.identity.requestHash,
476
465
  executionId: command.execution.executionId,
477
466
  origin,
478
- ...command.execution.attribution,
479
467
  ontologyRevision: command.ontologyRevision,
480
468
  intent: telemetryCommitIntent(command),
481
469
  committedAt: command.identity.committedAt,
@@ -1,7 +1,6 @@
1
1
  import { stableJsonStringify } from "../../json"
2
2
  import { MaterializationObjectNotFoundError } from "../../materialization/errors"
3
3
  import type {
4
- OntologyMaterializationOrigin,
5
4
  OntologyObjectRef,
6
5
  TelemetryAppend,
7
6
  TelemetryPointWrite,
@@ -29,7 +28,6 @@ import {
29
28
  import { diffEffectiveObject } from "../effective/diff"
30
29
  import { loadState, oneStateRequest } from "../effective/load-state"
31
30
  import { validateEffectiveObject } from "../effective/validate"
32
- import type { MaterializerAttribution } from "../execution/scope"
33
31
  import { stageWorkBounded } from "../execution/work-executor"
34
32
  import {
35
33
  appendEffectiveObjectWork,
@@ -62,13 +60,6 @@ interface TelemetryObjectGroup {
62
60
  interface TelemetryPlanContext {
63
61
  readonly input: TelemetryAppend
64
62
  readonly identity: TimedCommitIdentity
65
- readonly origin: OntologyMaterializationOrigin
66
- readonly event: TelemetryEventContext
67
- }
68
-
69
- interface TelemetryEventContext {
70
- readonly correlationId: string
71
- readonly attribution: MaterializerAttribution
72
63
  }
73
64
 
74
65
  export async function planTelemetryAppend(
@@ -76,12 +67,10 @@ export async function planTelemetryAppend(
76
67
  storage: OntologyMaterializationStorage,
77
68
  session: MaterializationSession,
78
69
  input: TelemetryAppend,
79
- identity: TimedCommitIdentity,
80
- origin: OntologyMaterializationOrigin,
81
- event: TelemetryEventContext
70
+ identity: TimedCommitIdentity
82
71
  ): Promise<TelemetryPlanCounts> {
83
72
  const counts = emptyTelemetryCounts()
84
- const planContext = { input, identity, origin, event }
73
+ const planContext = { input, identity }
85
74
  const objects = await loadTelemetryObjects(context, storage, session, input.points)
86
75
  const existingPoints = await loadExistingPoints(context, storage, session, input.points)
87
76
  for (const group of telemetryObjectGroups(input.points)) {
@@ -137,7 +126,7 @@ async function planTelemetryObject(
137
126
  for (let start = group.start; start < group.end; start += context.batching.statePageRows) {
138
127
  const end = Math.min(group.end, start + context.batching.statePageRows)
139
128
  const points = planContext.input.points.slice(start, end)
140
- const work = planTelemetryChunk(context, planContext, points, existingPoints, latest, counts)
129
+ const work = planTelemetryChunk(planContext, points, existingPoints, latest, counts)
141
130
  await stageWorkBounded(context, storage, session, work)
142
131
  }
143
132
 
@@ -164,7 +153,6 @@ async function loadTelemetryObjects(
164
153
  }
165
154
 
166
155
  function planTelemetryChunk(
167
- context: Pick<MaterializerContext, "projectId">,
168
156
  planContext: TelemetryPlanContext,
169
157
  points: readonly TelemetryPointWrite[],
170
158
  existingPoints: ReadonlyMap<string, StoredTelemetryPoint>,
@@ -173,7 +161,7 @@ function planTelemetryChunk(
173
161
  ): MaterializationWorkRecord[] {
174
162
  const work: MaterializationWorkRecord[] = []
175
163
  for (const point of points) {
176
- work.push(...planTelemetryPoint(context, planContext, point, existingPoints, latest, counts))
164
+ work.push(...planTelemetryPoint(planContext, point, existingPoints, latest, counts))
177
165
  }
178
166
  return work
179
167
  }
@@ -205,7 +193,6 @@ async function loadExistingPoints(
205
193
  }
206
194
 
207
195
  function planTelemetryPoint(
208
- context: Pick<MaterializerContext, "projectId">,
209
196
  planContext: TelemetryPlanContext,
210
197
  point: TelemetryPointWrite,
211
198
  existingPoints: ReadonlyMap<string, StoredTelemetryPoint>,
@@ -223,7 +210,7 @@ function planTelemetryPoint(
223
210
  } else {
224
211
  countTelemetryPointChange(counts, existing)
225
212
  work.push(planWork(telemetryPointUpsert(point, existing, planContext.identity), sortKey))
226
- work.push(eventWork(buildTelemetryEvent(context, planContext, point)))
213
+ work.push(eventWork(buildTelemetryMaterializationEventDraft(point)))
227
214
  }
228
215
 
229
216
  updateLatestPoint(latest, point, existing, unchanged, planContext.identity)
@@ -282,15 +269,6 @@ function storedTelemetryPointWithUnit<T extends object>(
282
269
  return { ...point, unit }
283
270
  }
284
271
 
285
- function buildTelemetryEvent(
286
- context: Pick<MaterializerContext, "projectId">,
287
- planContext: TelemetryPlanContext,
288
- point: TelemetryPointWrite
289
- ) {
290
- const eventContext = telemetryEventContext(context, planContext)
291
- return buildTelemetryMaterializationEventDraft({ ...eventContext, point })
292
- }
293
-
294
272
  function updateLatestPoint(
295
273
  latest: Map<string, StoredTelemetryPoint>,
296
274
  point: TelemetryPointWrite,
@@ -341,26 +319,11 @@ async function stageTelemetryObjectPlan(
341
319
  const items: MaterializationPlanWorkItem[] = []
342
320
  appendEffectiveObjectWork(items, change)
343
321
  work.push(...items.map((item) => planWork(item, sortKey)))
344
- const eventContext = telemetryEventContext(context, planContext)
345
- work.push(eventWork(buildObjectMaterializationEventDraft({ ...eventContext, change })))
322
+ work.push(eventWork(buildObjectMaterializationEventDraft(change)))
346
323
  }
347
324
  await stageWorkBounded(context, storage, session, work)
348
325
  }
349
326
 
350
- function telemetryEventContext(
351
- context: Pick<MaterializerContext, "projectId">,
352
- planContext: TelemetryPlanContext
353
- ) {
354
- return {
355
- projectId: context.projectId,
356
- commitId: planContext.identity.commitId,
357
- committedAt: planContext.identity.committedAt,
358
- origin: planContext.origin,
359
- correlationId: planContext.event.correlationId,
360
- attribution: planContext.event.attribution,
361
- }
362
- }
363
-
364
327
  function emptyTelemetryCounts(): MutableTelemetryPlanCounts {
365
328
  return {
366
329
  pointsCreated: 0,
@@ -0,0 +1,90 @@
1
+ import type { ModelRef } from "../catalog"
2
+ import { indexModelBindings } from "../catalog-index"
3
+ import type { TranscriptionModel } from "./types"
4
+
5
+ export interface TranscriptionModelEntry extends ModelRef {
6
+ readonly model: TranscriptionModel
7
+ }
8
+
9
+ export interface TranscriptionModelCatalog {
10
+ readonly default: TranscriptionModelEntry
11
+ list(): readonly TranscriptionModelEntry[]
12
+ getByRef(ref: ModelRef): TranscriptionModelEntry | null
13
+ }
14
+
15
+ export interface AudioModelCatalog {
16
+ readonly transcription?: TranscriptionModelCatalog
17
+ }
18
+
19
+ export interface AudioModelCatalogInput {
20
+ /** Ordered; the first entry is the default transcriber. */
21
+ readonly transcription?: readonly TranscriptionModel[]
22
+ }
23
+
24
+ export function createAudioCatalog(
25
+ input: AudioModelCatalogInput | undefined
26
+ ): AudioModelCatalog | undefined {
27
+ if (input === undefined) return undefined
28
+ if (
29
+ !input ||
30
+ typeof input !== "object" ||
31
+ Array.isArray(input) ||
32
+ !Array.isArray(input.transcription)
33
+ ) {
34
+ throw new TypeError(
35
+ "[Sixb] models.audio.transcription must be a nonempty array of transcription models."
36
+ )
37
+ }
38
+
39
+ const index = indexModelBindings(
40
+ input.transcription,
41
+ "audio.transcription",
42
+ assertTranscriptionModel
43
+ )
44
+ const [defaultEntry] = index.list()
45
+ if (!defaultEntry) {
46
+ throw new TypeError("[Sixb] models.audio.transcription must contain at least one model.")
47
+ }
48
+
49
+ return Object.freeze({ transcription: Object.freeze({ ...index, default: defaultEntry }) })
50
+ }
51
+
52
+ export function assertTranscriptionModel(model: unknown): asserts model is TranscriptionModel {
53
+ const candidate = model as Partial<TranscriptionModel> | null
54
+ const definition = candidate?.definition
55
+ if (
56
+ !candidate ||
57
+ !isValidId(candidate.providerId) ||
58
+ !isValidId(candidate.modelId) ||
59
+ typeof candidate.transcribe !== "function" ||
60
+ definition?.kind !== "transcription" ||
61
+ definition.providerId !== candidate.providerId ||
62
+ definition.modelId !== candidate.modelId
63
+ ) {
64
+ throw invalidModel()
65
+ }
66
+
67
+ if (!Number.isSafeInteger(definition.maxInputBytes) || definition.maxInputBytes <= 0) {
68
+ throw invalidModel()
69
+ }
70
+
71
+ const mediaTypes = definition.mediaTypes
72
+ if (
73
+ mediaTypes !== undefined &&
74
+ (!Array.isArray(mediaTypes) ||
75
+ mediaTypes.length === 0 ||
76
+ !mediaTypes.every((type) => typeof type === "string" && /^audio\/[a-z0-9.+-]+$/.test(type)))
77
+ ) {
78
+ throw invalidModel()
79
+ }
80
+ }
81
+
82
+ function isValidId(value: unknown): value is string {
83
+ return typeof value === "string" && value.length > 0 && value.trim() === value
84
+ }
85
+
86
+ function invalidModel(): TypeError {
87
+ return new TypeError(
88
+ "[SixbModels] Invalid transcription model identity, definition or input limits."
89
+ )
90
+ }
@@ -0,0 +1,19 @@
1
+ import { ModelProviderError } from "../errors"
2
+ import type { TranscriptionModelResponseMetadata } from "./types"
3
+
4
+ /** Retains billing metadata even when the provider returns an invalid transcript. */
5
+ export class TranscriptionModelResponseError extends ModelProviderError {
6
+ constructor(
7
+ message: string,
8
+ providerId: string,
9
+ modelId: string,
10
+ readonly metadata: TranscriptionModelResponseMetadata,
11
+ options?: ErrorOptions
12
+ ) {
13
+ super(message, providerId, modelId, {
14
+ ...options,
15
+ code: "invalid_transcription_response",
16
+ retryable: false,
17
+ })
18
+ }
19
+ }
@@ -0,0 +1,78 @@
1
+ import { createHash } from "node:crypto"
2
+ import type { BlobStorage, FileRef } from "../../blob-storage/types"
3
+ import { isFileRef } from "../../blob-storage/validation"
4
+
5
+ /** Snapshot caller-owned metadata before model resolution or storage introduces an await. */
6
+ export function prepareTranscriptionFile(input: FileRef): { audio: FileRef; mediaType: string } {
7
+ if (!isFileRef(input) || !Number.isSafeInteger(input.sizeBytes) || input.sizeBytes <= 0) {
8
+ throw new TypeError("[SixbModels] Transcription requires a nonempty FileRef.")
9
+ }
10
+
11
+ const audio = { ...input }
12
+ const mediaType = audio.mediaType?.split(";", 1)[0]?.trim().toLowerCase()
13
+ if (!mediaType || !/^audio\/[a-z0-9.+-]+$/.test(mediaType)) {
14
+ throw new TypeError("[SixbModels] Audio FileRef must declare an audio mediaType.")
15
+ }
16
+
17
+ return { audio, mediaType }
18
+ }
19
+
20
+ /** Read an already validated reference, bounded by its verified size and the model's limit. */
21
+ export async function readTranscriptionFile(
22
+ storage: BlobStorage,
23
+ file: FileRef,
24
+ signal: AbortSignal
25
+ ): Promise<Uint8Array> {
26
+ const info = await storage.stat(file.blobId)
27
+ signal.throwIfAborted()
28
+ if (
29
+ !info ||
30
+ info.blobId !== file.blobId ||
31
+ info.digest !== file.digest ||
32
+ info.sizeBytes !== file.sizeBytes
33
+ ) {
34
+ throw new Error("[SixbModels] Audio reference does not match the stored file.")
35
+ }
36
+
37
+ const stream = await storage.open(file.blobId)
38
+ const reader = stream.getReader()
39
+ const cancel = () => {
40
+ void reader.cancel(signal.reason).catch(() => undefined)
41
+ }
42
+ signal.addEventListener("abort", cancel, { once: true })
43
+
44
+ let complete = false
45
+ try {
46
+ signal.throwIfAborted()
47
+
48
+ const bytes = new Uint8Array(file.sizeBytes)
49
+ const hash = createHash("sha256")
50
+ let offset = 0
51
+
52
+ while (true) {
53
+ const { value, done } = await reader.read()
54
+ signal.throwIfAborted()
55
+ if (done) break
56
+ if (!(value instanceof Uint8Array) || value.byteLength > bytes.byteLength - offset) {
57
+ throw new Error("[SixbModels] Audio stream exceeds its declared size.")
58
+ }
59
+
60
+ bytes.set(value, offset)
61
+ hash.update(value)
62
+ offset += value.byteLength
63
+ }
64
+
65
+ if (offset !== file.sizeBytes || `sha256:${hash.digest("hex")}` !== file.digest) {
66
+ throw new Error("[SixbModels] Audio stream does not match its content-addressed reference.")
67
+ }
68
+
69
+ complete = true
70
+ return bytes
71
+ } finally {
72
+ signal.removeEventListener("abort", cancel)
73
+ if (!complete) {
74
+ void reader.cancel().catch(() => undefined)
75
+ }
76
+ reader.releaseLock()
77
+ }
78
+ }
@@ -0,0 +1,182 @@
1
+ import { randomUUID } from "node:crypto"
2
+ import { assertProviderAccess } from "../../authorization"
3
+ import type { BlobStorage } from "../../blob-storage/types"
4
+ import type { ExecutionContext } from "../../execution"
5
+ import type { SixbRuntimeContext } from "../../runtime/types"
6
+ import type { ModelCatalog } from "../catalog"
7
+ import type { ModelCallEndEvent } from "../events"
8
+ import type { AiModelCallRecorder } from "../execution/model-call-recorder"
9
+ import type { ModelExecutionSession } from "../execution/session"
10
+ import { estimateModelCall, type ModelMoney } from "../pricing"
11
+ import { assertTranscriptionModel } from "./catalog"
12
+ import { TranscriptionModelResponseError } from "./errors"
13
+ import { prepareTranscriptionFile, readTranscriptionFile } from "./file"
14
+ import type {
15
+ AudioModelsRuntime,
16
+ TranscriptionModel,
17
+ TranscriptionModelResponseMetadata,
18
+ TranscriptionModelResult,
19
+ } from "./types"
20
+
21
+ export function createAudioRuntime(
22
+ runtime: SixbRuntimeContext,
23
+ execution: ExecutionContext,
24
+ catalog: ModelCatalog | undefined,
25
+ session: ModelExecutionSession,
26
+ blobs: BlobStorage | undefined
27
+ ): AudioModelsRuntime {
28
+ return {
29
+ async transcribe(input) {
30
+ assertProviderAccess(runtime, execution, "models.audio.transcribe")
31
+
32
+ const { audio, mediaType } = prepareTranscriptionFile(input.audio)
33
+ if (!blobs) {
34
+ throw new Error("[SixbModels] Transcription requires blob storage.")
35
+ }
36
+
37
+ const signal = session.signal(input.signal)
38
+ signal.throwIfAborted()
39
+
40
+ const binding = selectModel(catalog, input.model)
41
+ assertTranscriptionModel(binding)
42
+ assertFileSupport(binding, audio.sizeBytes, mediaType)
43
+
44
+ const accounting = await session.accounting()
45
+ accounting.assertHealthy()
46
+
47
+ const model = binding.resolve ? await binding.resolve() : binding
48
+ assertTranscriptionModel(model)
49
+ if (model.providerId !== binding.providerId || model.modelId !== binding.modelId) {
50
+ throw new TypeError(
51
+ "[SixbModels] Resolved transcription model identity does not match the selected model."
52
+ )
53
+ }
54
+ assertFileSupport(model, audio.sizeBytes, mediaType)
55
+
56
+ signal.throwIfAborted()
57
+ const bytes = await readTranscriptionFile(blobs, audio, signal)
58
+ accounting.assertHealthy()
59
+
60
+ const reservationCost = estimateReservationCost(model, bytes.byteLength, mediaType)
61
+ const callId = `call_${randomUUID()}`
62
+ await accounting.admitCall({
63
+ callId,
64
+ providerId: model.providerId,
65
+ modelId: model.modelId,
66
+ modelKind: "transcription",
67
+ inputTokens: { status: "unavailable", reason: "nonTextInput" },
68
+ outputTokenAllowance: 0,
69
+ reservationCost,
70
+ })
71
+
72
+ let result: TranscriptionModelResult
73
+ try {
74
+ signal.throwIfAborted()
75
+ result = await model.transcribe({ audio: bytes, mediaType, signal })
76
+ } catch (error) {
77
+ await recordTranscription(
78
+ accounting,
79
+ model,
80
+ callId,
81
+ error instanceof TranscriptionModelResponseError ? error.metadata : {}
82
+ )
83
+ throw error
84
+ }
85
+
86
+ // A completed, billable reply must survive cancellation and transcript validation failures.
87
+ const event = await recordTranscription(accounting, model, callId, result ?? {})
88
+ signal.throwIfAborted()
89
+ if (typeof result?.output?.text !== "string") {
90
+ throw new TranscriptionModelResponseError(
91
+ "[SixbModels] Invalid transcription response.",
92
+ model.providerId,
93
+ model.modelId,
94
+ result ?? {}
95
+ )
96
+ }
97
+
98
+ return {
99
+ output: { text: result.output.text },
100
+ usage: event.usage,
101
+ cost: event.cost,
102
+ callId,
103
+ }
104
+ },
105
+ }
106
+ }
107
+
108
+ function selectModel(
109
+ catalog: ModelCatalog | undefined,
110
+ requested: TranscriptionModel | undefined
111
+ ): TranscriptionModel {
112
+ if (!catalog && requested) return requested
113
+
114
+ const transcribers = catalog?.audio?.transcription
115
+ const selected = requested
116
+ ? transcribers?.getByRef({ provider: requested.providerId, modelId: requested.modelId })?.model
117
+ : transcribers?.default.model
118
+
119
+ if (!selected) {
120
+ throw new Error(
121
+ "[SixbModels] Configure the selected model in models.audio.transcription, or supply a model when no catalog is configured."
122
+ )
123
+ }
124
+
125
+ return selected
126
+ }
127
+
128
+ function assertFileSupport(model: TranscriptionModel, sizeBytes: number, mediaType: string): void {
129
+ if (sizeBytes > model.definition.maxInputBytes) {
130
+ throw new RangeError(
131
+ `[SixbModels] Audio exceeds the model's ${model.definition.maxInputBytes}-byte input limit.`
132
+ )
133
+ }
134
+ if (model.definition.mediaTypes && !model.definition.mediaTypes.includes(mediaType)) {
135
+ throw new TypeError(
136
+ `[SixbModels] Audio media type '${mediaType}' is not supported by the selected model.`
137
+ )
138
+ }
139
+ }
140
+
141
+ function estimateReservationCost(
142
+ model: TranscriptionModel,
143
+ sizeBytes: number,
144
+ mediaType: string
145
+ ): ModelMoney | undefined {
146
+ try {
147
+ return model.costEstimator?.estimateReservation?.({ sizeBytes, mediaType })
148
+ } catch {
149
+ // Optional pricing cannot bypass an enforced budget: admission fails closed without it.
150
+ return undefined
151
+ }
152
+ }
153
+
154
+ async function recordTranscription(
155
+ accounting: AiModelCallRecorder,
156
+ model: TranscriptionModel,
157
+ callId: string,
158
+ metadata: TranscriptionModelResponseMetadata
159
+ ): Promise<ModelCallEndEvent> {
160
+ const usage = metadata.usage ?? {}
161
+ const estimate = estimateModelCall(model, {
162
+ usage,
163
+ route: metadata.route,
164
+ responseModelId: metadata.responseModelId,
165
+ })
166
+ const event: ModelCallEndEvent = {
167
+ callId,
168
+ modelKind: "transcription",
169
+ providerId: model.providerId,
170
+ modelId: model.modelId,
171
+ responseId: metadata.providerIds?.responseId ?? callId,
172
+ providerIds: metadata.providerIds,
173
+ responseModelId: metadata.responseModelId,
174
+ usage,
175
+ cost: metadata.reportedCost ? { status: "reported", ...metadata.reportedCost } : estimate,
176
+ ...(metadata.reportedCost ? { estimate } : {}),
177
+ route: metadata.route,
178
+ }
179
+
180
+ await accounting.onModelCallEnd(event)
181
+ return event
182
+ }
@@ -0,0 +1,69 @@
1
+ import type { FileRef } from "../../blob-storage/types"
2
+ import type { ModelDefinition } from "../definitions"
3
+ import type { ModelProviderIds, ModelRoute, ModelUsage } from "../events"
4
+ import type { ModelCallCost, ModelCostEstimator, ModelMoney, ModelReportedCost } from "../pricing"
5
+
6
+ export interface TranscriptionModelDefinition extends ModelDefinition {
7
+ readonly kind: "transcription"
8
+ /** Bounds memory consumption before a file is opened. Providers may impose lower limits. */
9
+ readonly maxInputBytes: number
10
+ /** Omitted when the provider does not publish a reliable format list. */
11
+ readonly mediaTypes?: readonly string[]
12
+ }
13
+
14
+ export interface TranscriptionModelRequest {
15
+ readonly audio: Uint8Array
16
+ readonly mediaType: string
17
+ readonly signal?: AbortSignal
18
+ }
19
+
20
+ export interface TranscriptionOutput {
21
+ readonly text: string
22
+ }
23
+
24
+ export interface TranscriptionModelResponseMetadata {
25
+ readonly usage?: ModelUsage
26
+ readonly providerIds?: ModelProviderIds
27
+ readonly responseModelId?: string
28
+ readonly reportedCost?: ModelReportedCost
29
+ readonly route?: ModelRoute
30
+ }
31
+
32
+ export interface TranscriptionModelResult extends TranscriptionModelResponseMetadata {
33
+ readonly output: TranscriptionOutput
34
+ }
35
+
36
+ export interface TranscriptionCostEstimator extends Pick<ModelCostEstimator, "estimate"> {
37
+ /** Return undefined if the request cannot be priced safely before inference. */
38
+ estimateReservation?(input: {
39
+ readonly sizeBytes: number
40
+ readonly mediaType: string
41
+ }): ModelMoney | undefined
42
+ }
43
+
44
+ /** Provider binding. Resolving it may fetch metadata, but must never perform inference. */
45
+ export interface TranscriptionModel {
46
+ readonly providerId: string
47
+ readonly modelId: string
48
+ readonly definition: TranscriptionModelDefinition
49
+ readonly costEstimator?: TranscriptionCostEstimator
50
+ resolve?(): Promise<TranscriptionModel>
51
+ transcribe(request: TranscriptionModelRequest): Promise<TranscriptionModelResult>
52
+ }
53
+
54
+ export interface AudioTranscribeInput {
55
+ readonly audio: FileRef
56
+ readonly model?: TranscriptionModel
57
+ readonly signal?: AbortSignal
58
+ }
59
+
60
+ export interface AudioTranscribeResult {
61
+ readonly output: TranscriptionOutput
62
+ readonly usage: ModelUsage
63
+ readonly cost: ModelCallCost
64
+ readonly callId: string
65
+ }
66
+
67
+ export interface AudioModelsRuntime {
68
+ transcribe(input: AudioTranscribeInput): Promise<AudioTranscribeResult>
69
+ }