@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.
- package/dist/actions/builders/params.d.ts +1 -22
- package/dist/actions/builders/params.d.ts.map +1 -1
- package/dist/actions/index.js +29 -28
- package/dist/actions/index.js.map +1 -1
- package/dist/actions/types/params.d.ts +10 -44
- package/dist/actions/types/params.d.ts.map +1 -1
- package/dist/actions/validation.d.ts.map +1 -1
- package/dist/actions/worker.js +3 -2
- package/dist/actions/worker.js.map +2 -2
- package/dist/agents/errors.d.ts +1 -1
- package/dist/agents/errors.d.ts.map +1 -1
- package/dist/agents/execution.d.ts +15 -9
- package/dist/agents/execution.d.ts.map +1 -1
- package/dist/agents/ids.d.ts +2 -0
- package/dist/agents/ids.d.ts.map +1 -1
- package/dist/agents/index.d.ts +1 -1
- package/dist/agents/index.d.ts.map +1 -1
- package/dist/agents/index.js +48 -42
- package/dist/agents/index.js.map +1 -1
- package/dist/agents/request.d.ts.map +1 -1
- package/dist/agents/sandbox.d.ts +5 -0
- package/dist/agents/sandbox.d.ts.map +1 -0
- package/dist/agents/streams/index.js +4 -3
- package/dist/agents/streams/index.js.map +1 -1
- package/dist/agents/streams/internal.js +4 -3
- package/dist/agents/streams/internal.js.map +1 -1
- package/dist/agents/validation.d.ts.map +1 -1
- package/dist/auth/index.js +8 -6
- package/dist/auth/index.js.map +1 -1
- package/dist/authorization/index.js +5 -4
- package/dist/authorization/index.js.map +1 -1
- package/dist/bootstrap/index.js +50 -46
- package/dist/bootstrap/index.js.map +1 -1
- package/dist/{chunk-17kfctj6.js → chunk-0mza4xb2.js} +2 -2
- package/dist/{chunk-g00bfdq6.js → chunk-2cxv584m.js} +12 -56
- package/dist/{chunk-g00bfdq6.js.map → chunk-2cxv584m.js.map} +3 -3
- package/dist/{chunk-jsy70480.js → chunk-2h63nrde.js} +365 -95
- package/dist/chunk-2h63nrde.js.map +20 -0
- package/dist/{chunk-1yefycb1.js → chunk-3bnt2wna.js} +2 -2
- package/dist/{chunk-awbhdqyc.js → chunk-3ghw2t5q.js} +1 -1
- package/dist/{chunk-b19g04jk.js → chunk-3h7ctayx.js} +1 -1
- package/dist/{chunk-wjasrj67.js → chunk-3qpcrcj8.js} +1 -1
- package/dist/{chunk-5hz0fnca.js → chunk-4k53sm9e.js} +6 -2
- package/dist/chunk-4k53sm9e.js.map +12 -0
- package/dist/chunk-4ph94nhd.js +81 -0
- package/dist/chunk-4ph94nhd.js.map +10 -0
- package/dist/chunk-58geavnf.js +29 -0
- package/dist/chunk-58geavnf.js.map +10 -0
- package/dist/{chunk-0y39rgsb.js → chunk-5tetw4hn.js} +1 -1
- package/dist/{chunk-7bs40fe1.js → chunk-69266efg.js} +83 -2
- package/dist/chunk-69266efg.js.map +12 -0
- package/dist/{chunk-a0e6x5hd.js → chunk-6ma8dvzc.js} +121 -53
- package/dist/chunk-6ma8dvzc.js.map +15 -0
- package/dist/{chunk-skz0hst3.js → chunk-7c2g3sz9.js} +6 -86
- package/dist/{chunk-skz0hst3.js.map → chunk-7c2g3sz9.js.map} +3 -3
- package/dist/{chunk-z0s4axeh.js → chunk-7qnvhtcd.js} +93 -17
- package/dist/{chunk-z0s4axeh.js.map → chunk-7qnvhtcd.js.map} +7 -6
- package/dist/{chunk-c5rkjrgp.js → chunk-7ytf06d3.js} +1 -1
- package/dist/{chunk-mrp7k0pw.js → chunk-91kcnbf0.js} +9 -14
- package/dist/chunk-91kcnbf0.js.map +10 -0
- package/dist/{chunk-yv79ncbv.js → chunk-96yw3pwd.js} +3 -3
- package/dist/chunk-96yw3pwd.js.map +10 -0
- package/dist/chunk-98cw09sw.js.map +2 -2
- package/dist/{chunk-93csa55g.js → chunk-axndsymr.js} +10 -4
- package/dist/chunk-axndsymr.js.map +11 -0
- package/dist/{chunk-4zhmdsx6.js → chunk-b768c93y.js} +61 -23
- package/dist/{chunk-4zhmdsx6.js.map → chunk-b768c93y.js.map} +5 -5
- package/dist/{chunk-dz5h08xv.js → chunk-bbaa1fet.js} +24 -9
- package/dist/{chunk-dz5h08xv.js.map → chunk-bbaa1fet.js.map} +4 -4
- package/dist/{chunk-7apz6hg4.js → chunk-bet1rb9h.js} +8 -4
- package/dist/chunk-bet1rb9h.js.map +10 -0
- package/dist/{chunk-358caqf5.js → chunk-bfjv1adk.js} +2 -2
- package/dist/{chunk-g91qxjj0.js → chunk-bg2bs62d.js} +5 -5
- package/dist/{chunk-860dwwy0.js → chunk-cd234ba4.js} +22 -12
- package/dist/chunk-cd234ba4.js.map +14 -0
- package/dist/chunk-dmn70ztd.js.map +2 -2
- package/dist/{chunk-d63nnr5b.js → chunk-e1f1sqba.js} +39 -53
- package/dist/{chunk-d63nnr5b.js.map → chunk-e1f1sqba.js.map} +5 -6
- package/dist/{chunk-ap0g1g74.js → chunk-eyjzgav0.js} +39 -4
- package/dist/chunk-eyjzgav0.js.map +12 -0
- package/dist/{chunk-rb1xx120.js → chunk-f06sf7rr.js} +9 -5
- package/dist/chunk-f06sf7rr.js.map +11 -0
- package/dist/{chunk-g6cke204.js → chunk-f85hpqnm.js} +1 -1
- package/dist/{chunk-vsj3mdfj.js → chunk-fc5zfxy1.js} +1 -1
- package/dist/{chunk-38zv5rkr.js → chunk-g2gezsg5.js} +1 -1
- package/dist/{chunk-38zv5rkr.js.map → chunk-g2gezsg5.js.map} +2 -2
- package/dist/{chunk-01kj2pbh.js → chunk-g50nxqs5.js} +53 -66
- package/dist/chunk-g50nxqs5.js.map +18 -0
- package/dist/{chunk-1824gssz.js → chunk-gswwr35f.js} +4 -4
- package/dist/{chunk-92vk7gta.js → chunk-gzt6v1ja.js} +1 -1
- package/dist/{chunk-aa6z4a19.js → chunk-hgqpcmyr.js} +2 -1
- package/dist/chunk-hgqpcmyr.js.map +12 -0
- package/dist/{chunk-gqh45d2n.js → chunk-hkw8rykk.js} +2 -2
- package/dist/{chunk-f4w3yp4f.js → chunk-hzw7yv5g.js} +104 -21
- package/dist/chunk-hzw7yv5g.js.map +13 -0
- package/dist/{chunk-cfvakeax.js → chunk-jjwhy3rs.js} +5 -5
- package/dist/chunk-kept9cdd.js +29 -0
- package/dist/chunk-kept9cdd.js.map +10 -0
- package/dist/{chunk-ftv470j8.js → chunk-m7cx05vp.js} +247 -16
- package/dist/{chunk-ftv470j8.js.map → chunk-m7cx05vp.js.map} +14 -10
- package/dist/{chunk-z0271qkp.js → chunk-mdnw7nj8.js} +8 -6
- package/dist/chunk-mdnw7nj8.js.map +15 -0
- package/dist/{chunk-gq8vhakp.js → chunk-nzsy3xrp.js} +249 -86
- package/dist/{chunk-gq8vhakp.js.map → chunk-nzsy3xrp.js.map} +13 -11
- package/dist/chunk-p1683c0v.js +104 -0
- package/dist/chunk-p1683c0v.js.map +11 -0
- package/dist/chunk-p6r1ex7t.js +93 -0
- package/dist/chunk-p6r1ex7t.js.map +10 -0
- package/dist/{chunk-sepyxgpc.js → chunk-qm535afa.js} +10 -10
- package/dist/{chunk-sepyxgpc.js.map → chunk-qm535afa.js.map} +4 -4
- package/dist/chunk-r5zythxp.js +552 -0
- package/dist/chunk-r5zythxp.js.map +17 -0
- package/dist/{chunk-9qsh3p5y.js → chunk-rb143ggb.js} +1 -1
- package/dist/{chunk-653vwrzr.js → chunk-rdghfsss.js} +1 -1
- package/dist/{chunk-3ckk0xfj.js → chunk-sfypc7mk.js} +18 -13
- package/dist/{chunk-3ckk0xfj.js.map → chunk-sfypc7mk.js.map} +3 -3
- package/dist/{chunk-f0rwz2vh.js → chunk-t6f3tdnr.js} +2 -54
- package/dist/chunk-t6f3tdnr.js.map +10 -0
- package/dist/{chunk-x9m9x2eq.js → chunk-t7dzd1tm.js} +3 -3
- package/dist/{chunk-pr2h4bv4.js → chunk-tg4g4zh0.js} +3 -3
- package/dist/chunk-vpxss818.js +56 -0
- package/dist/chunk-vpxss818.js.map +10 -0
- package/dist/{chunk-ms2tmn1k.js → chunk-vsg0g7h9.js} +53 -57
- package/dist/chunk-vsg0g7h9.js.map +17 -0
- package/dist/{chunk-8vj0rjgs.js → chunk-wjffn5m4.js} +1 -1
- package/dist/{chunk-wf88w4kp.js → chunk-x9tmx3fc.js} +2 -2
- package/dist/{chunk-fh8kgex1.js → chunk-xn686q2e.js} +8 -8
- package/dist/{chunk-g53f0e4j.js → chunk-xnx96gfy.js} +45 -17
- package/dist/{chunk-g53f0e4j.js.map → chunk-xnx96gfy.js.map} +3 -3
- package/dist/{chunk-v2vcg0w6.js → chunk-xtfryrfb.js} +2 -2
- package/dist/chunk-y0v18c2j.js +363 -0
- package/dist/chunk-y0v18c2j.js.map +14 -0
- package/dist/{chunk-72w2pxk7.js → chunk-y1ahv8b7.js} +11 -3
- package/dist/{chunk-72w2pxk7.js.map → chunk-y1ahv8b7.js.map} +3 -3
- package/dist/chunk-y3ev53cq.js +84 -0
- package/dist/chunk-y3ev53cq.js.map +10 -0
- package/dist/{chunk-gqm76kse.js → chunk-ybhz3j9g.js} +342 -41
- package/dist/{chunk-gqm76kse.js.map → chunk-ybhz3j9g.js.map} +17 -12
- package/dist/{chunk-z30bv4ga.js → chunk-yxb4c62x.js} +3 -2
- package/dist/{chunk-z30bv4ga.js.map → chunk-yxb4c62x.js.map} +3 -3
- package/dist/chunk-z3y5kg1x.js +14 -0
- package/dist/chunk-z3y5kg1x.js.map +10 -0
- package/dist/datasets/validation.d.ts +4 -0
- package/dist/datasets/validation.d.ts.map +1 -1
- package/dist/datasets/write.d.ts.map +1 -1
- package/dist/datasets/write.js +5 -4
- package/dist/datasets/write.js.map +1 -1
- package/dist/error-reporting/capability.d.ts +3 -2
- package/dist/error-reporting/capability.d.ts.map +1 -1
- package/dist/error-reporting/internal.js +5 -4
- package/dist/error-reporting/internal.js.map +1 -1
- package/dist/error-reporting/reports.d.ts +10 -0
- package/dist/error-reporting/reports.d.ts.map +1 -1
- package/dist/error-reporting/types.d.ts +10 -2
- package/dist/error-reporting/types.d.ts.map +1 -1
- package/dist/errors/catalog.d.ts +12 -0
- package/dist/errors/catalog.d.ts.map +1 -1
- package/dist/errors/failure-message.d.ts +8 -0
- package/dist/errors/failure-message.d.ts.map +1 -0
- package/dist/errors/internal.d.ts.map +1 -1
- package/dist/errors/internal.js +3 -2
- package/dist/errors/internal.js.map +1 -1
- package/dist/events/index.js +5 -4
- package/dist/events/index.js.map +1 -1
- package/dist/execution/agent.js +44 -41
- package/dist/execution/agent.js.map +1 -1
- package/dist/execution/authorization.d.ts.map +1 -1
- package/dist/execution/authorized-object-reader.d.ts +3 -0
- package/dist/execution/authorized-object-reader.d.ts.map +1 -1
- package/dist/execution/kernel-operation.d.ts +4 -0
- package/dist/execution/kernel-operation.d.ts.map +1 -0
- package/dist/execution/primitive.js +44 -41
- package/dist/execution/primitive.js.map +2 -2
- package/dist/execution/request.js +45 -42
- package/dist/execution/request.js.map +2 -2
- package/dist/execution/types.d.ts +6 -0
- package/dist/execution/types.d.ts.map +1 -1
- package/dist/index.d.ts +15 -5
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +68 -59
- package/dist/index.js.map +1 -1
- package/dist/lake-storage/in-memory.d.ts.map +1 -1
- package/dist/lake-storage/index.js +5 -4
- package/dist/lake-storage/index.js.map +1 -1
- package/dist/materialization/errors.d.ts +1 -1
- package/dist/materialization/errors.d.ts.map +1 -1
- package/dist/materialization/index.d.ts +1 -0
- package/dist/materialization/index.d.ts.map +1 -1
- package/dist/materialization/index.js +3 -3
- package/dist/materialization/model.d.ts +2 -0
- package/dist/materialization/model.d.ts.map +1 -1
- package/dist/materialization/vectors.d.ts +19 -0
- package/dist/materialization/vectors.d.ts.map +1 -0
- package/dist/materializer/context.d.ts.map +1 -1
- package/dist/materializer/edits/commit.d.ts.map +1 -1
- package/dist/materializer/edits/vector-authority.d.ts +6 -0
- package/dist/materializer/edits/vector-authority.d.ts.map +1 -0
- package/dist/materializer/edits/vectors.d.ts +6 -0
- package/dist/materializer/edits/vectors.d.ts.map +1 -0
- package/dist/materializer/effective/validate.d.ts.map +1 -1
- package/dist/materializer/effective/vector-indexing.d.ts +7 -0
- package/dist/materializer/effective/vector-indexing.d.ts.map +1 -0
- package/dist/materializer/effective/vectors.d.ts +6 -0
- package/dist/materializer/effective/vectors.d.ts.map +1 -0
- package/dist/materializer/execution/work-executor.d.ts +2 -1
- package/dist/materializer/execution/work-executor.d.ts.map +1 -1
- package/dist/materializer/index.js +26 -25
- package/dist/materializer/index.js.map +1 -1
- package/dist/materializer/shared/normalize.d.ts.map +1 -1
- package/dist/models/catalog-index.d.ts +15 -0
- package/dist/models/catalog-index.d.ts.map +1 -0
- package/dist/models/catalog.d.ts +27 -6
- package/dist/models/catalog.d.ts.map +1 -1
- package/dist/models/decision/catalog.d.ts +12 -0
- package/dist/models/decision/catalog.d.ts.map +1 -0
- package/dist/models/decision/errors.d.ts +7 -0
- package/dist/models/decision/errors.d.ts.map +1 -0
- package/dist/models/decision/output.d.ts +50 -0
- package/dist/models/decision/output.d.ts.map +1 -0
- package/dist/models/decision/questions.d.ts +14 -0
- package/dist/models/decision/questions.d.ts.map +1 -0
- package/dist/models/decision/runtime.d.ts +7 -0
- package/dist/models/decision/runtime.d.ts.map +1 -0
- package/dist/models/decision/types.d.ts +92 -0
- package/dist/models/decision/types.d.ts.map +1 -0
- package/dist/models/decision/validation.d.ts +7 -0
- package/dist/models/decision/validation.d.ts.map +1 -0
- package/dist/models/definitions.d.ts +1 -1
- package/dist/models/definitions.d.ts.map +1 -1
- package/dist/models/embedding-model.d.ts +60 -0
- package/dist/models/embedding-model.d.ts.map +1 -0
- package/dist/models/execution/binding.d.ts +2 -0
- package/dist/models/execution/binding.d.ts.map +1 -1
- package/dist/models/execution/embedding.d.ts +5 -0
- package/dist/models/execution/embedding.d.ts.map +1 -0
- package/dist/models/execution/index.js +29 -26
- package/dist/models/execution/index.js.map +1 -1
- package/dist/models/execution/model-call-recorder.d.ts +5 -1
- package/dist/models/execution/model-call-recorder.d.ts.map +1 -1
- package/dist/models/execution/session.d.ts +21 -0
- package/dist/models/execution/session.d.ts.map +1 -0
- package/dist/models/execution.d.ts.map +1 -1
- package/dist/models/generation-types.d.ts +2 -0
- package/dist/models/generation-types.d.ts.map +1 -1
- package/dist/models/index.d.ts +9 -1
- package/dist/models/index.d.ts.map +1 -1
- package/dist/models/index.js +17 -7
- package/dist/models/index.js.map +1 -1
- package/dist/models/pricing.d.ts +3 -2
- package/dist/models/pricing.d.ts.map +1 -1
- package/dist/objects/authorized-ontology-view.d.ts.map +1 -1
- package/dist/objects/execution.d.ts +1 -0
- package/dist/objects/execution.d.ts.map +1 -1
- package/dist/objects/index.js +29 -28
- package/dist/objects/index.js.map +1 -1
- package/dist/objects/query/executor.d.ts +3 -0
- package/dist/objects/query/executor.d.ts.map +1 -1
- package/dist/objects/query/index.d.ts +2 -0
- package/dist/objects/query/index.d.ts.map +1 -1
- package/dist/objects/query/index.js +34 -24
- package/dist/objects/query/index.js.map +1 -1
- package/dist/objects/query/ir.d.ts +6 -2
- package/dist/objects/query/ir.d.ts.map +1 -1
- package/dist/objects/query/normalize.d.ts.map +1 -1
- package/dist/objects/query/validate.d.ts.map +1 -1
- package/dist/objects/sdk/object-handle.d.ts +5 -0
- package/dist/objects/sdk/object-handle.d.ts.map +1 -1
- package/dist/objects/sdk/object-set.d.ts.map +1 -1
- package/dist/objects/sdk/query-executor.d.ts +2 -0
- package/dist/objects/sdk/query-executor.d.ts.map +1 -1
- package/dist/objects/sdk/runtime-query-executor.d.ts.map +1 -1
- package/dist/objects/vectors/handle.d.ts +4 -0
- package/dist/objects/vectors/handle.d.ts.map +1 -0
- package/dist/objects/vectors/indexing-batch.d.ts +6 -0
- package/dist/objects/vectors/indexing-batch.d.ts.map +1 -0
- package/dist/objects/vectors/indexing-generate.d.ts +11 -0
- package/dist/objects/vectors/indexing-generate.d.ts.map +1 -0
- package/dist/objects/vectors/indexing-runtime.d.ts +7 -0
- package/dist/objects/vectors/indexing-runtime.d.ts.map +1 -0
- package/dist/objects/vectors/indexing-shared.d.ts +17 -0
- package/dist/objects/vectors/indexing-shared.d.ts.map +1 -0
- package/dist/objects/vectors/indexing-single.d.ts +4 -0
- package/dist/objects/vectors/indexing-single.d.ts.map +1 -0
- package/dist/objects/vectors/indexing-store-batch.d.ts +6 -0
- package/dist/objects/vectors/indexing-store-batch.d.ts.map +1 -0
- package/dist/objects/vectors/indexing.d.ts +7 -0
- package/dist/objects/vectors/indexing.d.ts.map +1 -0
- package/dist/objects/vectors/profile.d.ts +13 -0
- package/dist/objects/vectors/profile.d.ts.map +1 -0
- package/dist/objects/vectors/query.d.ts +5 -0
- package/dist/objects/vectors/query.d.ts.map +1 -0
- package/dist/objects/vectors/resolve-query.d.ts +6 -0
- package/dist/objects/vectors/resolve-query.d.ts.map +1 -0
- package/dist/objects/vectors/types.d.ts +11 -0
- package/dist/objects/vectors/types.d.ts.map +1 -0
- package/dist/ontology/index.d.ts +2 -1
- package/dist/ontology/index.d.ts.map +1 -1
- package/dist/ontology/index.js +5 -5
- package/dist/ontology/index.js.map +1 -1
- package/dist/ontology/internal.js +5 -4
- package/dist/ontology/internal.js.map +1 -1
- package/dist/ontology/registry.d.ts.map +1 -1
- package/dist/ontology/types.d.ts +8 -9
- package/dist/ontology/types.d.ts.map +1 -1
- package/dist/ontology/validation/definition.d.ts +3 -0
- package/dist/ontology/validation/definition.d.ts.map +1 -0
- package/dist/ontology/validation/properties.d.ts.map +1 -1
- package/dist/ontology/validation/query.d.ts.map +1 -1
- package/dist/ontology/validation/schema.d.ts +1 -1
- package/dist/ontology/validation/schema.d.ts.map +1 -1
- package/dist/ontology/vector-profiles.d.ts +4 -0
- package/dist/ontology/vector-profiles.d.ts.map +1 -0
- package/dist/pipelines/index.js +28 -27
- package/dist/pipelines/index.js.map +1 -1
- package/dist/projections/internal.js +24 -23
- package/dist/projections/internal.js.map +1 -1
- package/dist/query.js +2 -2
- package/dist/queues/in-memory.d.ts +2 -1
- package/dist/queues/in-memory.d.ts.map +1 -1
- package/dist/queues/index.d.ts +1 -1
- package/dist/queues/index.d.ts.map +1 -1
- package/dist/queues/index.js +1 -1
- package/dist/queues/types.d.ts +5 -0
- package/dist/queues/types.d.ts.map +1 -1
- package/dist/runtime/create.d.ts +4 -3
- package/dist/runtime/create.d.ts.map +1 -1
- package/dist/runtime/host.d.ts +9 -6
- package/dist/runtime/host.d.ts.map +1 -1
- package/dist/runtime/internal.d.ts +3 -0
- package/dist/runtime/internal.d.ts.map +1 -1
- package/dist/runtime/internal.js +47 -1
- package/dist/runtime/internal.js.map +1 -1
- package/dist/runtime/resolve-definitions.d.ts.map +1 -1
- package/dist/runtime/sixb.d.ts +9 -4
- package/dist/runtime/sixb.d.ts.map +1 -1
- package/dist/runtime/types.d.ts +15 -3
- package/dist/runtime/types.d.ts.map +1 -1
- package/dist/sandboxes/auth.d.ts +16 -0
- package/dist/sandboxes/auth.d.ts.map +1 -0
- package/dist/sandboxes/config.d.ts +5 -0
- package/dist/sandboxes/config.d.ts.map +1 -0
- package/dist/sandboxes/configuration.d.ts +41 -0
- package/dist/sandboxes/configuration.d.ts.map +1 -0
- package/dist/sandboxes/environment.d.ts +13 -0
- package/dist/sandboxes/environment.d.ts.map +1 -0
- package/dist/sandboxes/errors.d.ts +1 -1
- package/dist/sandboxes/errors.d.ts.map +1 -1
- package/dist/sandboxes/index.d.ts +6 -1
- package/dist/sandboxes/index.d.ts.map +1 -1
- package/dist/sandboxes/index.js +16 -3
- package/dist/sandboxes/index.js.map +1 -1
- package/dist/sandboxes/sandbox.d.ts +35 -3
- package/dist/sandboxes/sandbox.d.ts.map +1 -1
- package/dist/shared/params/builders.d.ts +25 -0
- package/dist/shared/params/builders.d.ts.map +1 -0
- package/dist/shared/params/types.d.ts +47 -0
- package/dist/shared/params/types.d.ts.map +1 -0
- package/dist/shared/params/validation.d.ts +15 -0
- package/dist/shared/params/validation.d.ts.map +1 -0
- package/dist/shares/internal.js +23 -22
- package/dist/shares/internal.js.map +2 -2
- package/dist/storage/action-runs/failure.js +4 -3
- package/dist/storage/action-runs/failure.js.map +1 -1
- package/dist/storage/action-runs/provider.js +1 -1
- package/dist/storage/agents/in-memory.d.ts +2 -1
- package/dist/storage/agents/in-memory.d.ts.map +1 -1
- package/dist/storage/agents/index.d.ts +1 -1
- package/dist/storage/agents/index.d.ts.map +1 -1
- package/dist/storage/agents/provider.d.ts +5 -1
- package/dist/storage/agents/provider.d.ts.map +1 -1
- package/dist/storage/agents/provider.js +8 -4
- package/dist/storage/agents/provider.js.map +1 -1
- package/dist/storage/agents/types.d.ts +49 -0
- package/dist/storage/agents/types.d.ts.map +1 -1
- package/dist/storage/ai-cost/analytics.d.ts +1 -0
- package/dist/storage/ai-cost/analytics.d.ts.map +1 -1
- package/dist/storage/ai-cost/index.d.ts +1 -1
- package/dist/storage/ai-cost/index.d.ts.map +1 -1
- package/dist/storage/ai-cost/provider.js +2 -2
- package/dist/storage/ai-cost/types.d.ts +14 -2
- package/dist/storage/ai-cost/types.d.ts.map +1 -1
- package/dist/storage/ai-limits/enforcement.js +4 -3
- package/dist/storage/ai-limits/enforcement.js.map +1 -1
- package/dist/storage/connector-connections/provider.js +3 -2
- package/dist/storage/connector-connections/provider.js.map +2 -2
- package/dist/storage/executions/provider.d.ts +3 -3
- package/dist/storage/executions/provider.d.ts.map +1 -1
- package/dist/storage/executions/provider.js +13 -11
- package/dist/storage/executions/provider.js.map +3 -3
- package/dist/storage/executions/types.d.ts +3 -0
- package/dist/storage/executions/types.d.ts.map +1 -1
- package/dist/storage/executions/validation.d.ts.map +1 -1
- package/dist/storage/index.d.ts +5 -3
- package/dist/storage/index.d.ts.map +1 -1
- package/dist/storage/index.js +25 -22
- package/dist/storage/index.js.map +1 -1
- package/dist/storage/internal.js +2 -2
- package/dist/storage/objects/in-memory/query.d.ts.map +1 -1
- package/dist/storage/objects/in-memory/read-source.d.ts +5 -0
- package/dist/storage/objects/in-memory/read-source.d.ts.map +1 -1
- package/dist/storage/objects/in-memory/selected-reader.d.ts.map +1 -1
- package/dist/storage/objects/in-memory/storage.d.ts +7 -0
- package/dist/storage/objects/in-memory/storage.d.ts.map +1 -1
- package/dist/storage/objects/types.d.ts +2 -0
- package/dist/storage/objects/types.d.ts.map +1 -1
- package/dist/storage/ontology/commits.d.ts +1 -0
- package/dist/storage/ontology/commits.d.ts.map +1 -1
- package/dist/storage/ontology/in-memory/index.d.ts +4 -0
- package/dist/storage/ontology/in-memory/index.d.ts.map +1 -1
- package/dist/storage/ontology/in-memory/materializations.d.ts +2 -0
- package/dist/storage/ontology/in-memory/materializations.d.ts.map +1 -1
- package/dist/storage/ontology/in-memory/shared-state.d.ts +7 -0
- package/dist/storage/ontology/in-memory/shared-state.d.ts.map +1 -1
- package/dist/storage/ontology/in-memory/vector-indexing.d.ts +44 -0
- package/dist/storage/ontology/in-memory/vector-indexing.d.ts.map +1 -0
- package/dist/storage/ontology/in-memory/vectors.d.ts +31 -0
- package/dist/storage/ontology/in-memory/vectors.d.ts.map +1 -0
- package/dist/storage/ontology/index.d.ts +6 -0
- package/dist/storage/ontology/index.d.ts.map +1 -1
- package/dist/storage/ontology/provider.js +2 -2
- package/dist/storage/ontology/vector-indexing.d.ts +94 -0
- package/dist/storage/ontology/vector-indexing.d.ts.map +1 -0
- package/dist/storage/ontology/vectors.d.ts +56 -0
- package/dist/storage/ontology/vectors.d.ts.map +1 -0
- package/dist/storage/operation-scope.d.ts.map +1 -1
- package/dist/storage/operation-scope.js +1 -1
- package/dist/storage/projection-runs/provider.js +4 -3
- package/dist/storage/projection-runs/provider.js.map +1 -1
- package/dist/storage/types.d.ts +1 -1
- package/dist/storage/types.d.ts.map +1 -1
- package/dist/storage/workflow-runs/provider.js +9 -7
- package/dist/storage/workflow-runs/provider.js.map +1 -1
- package/dist/syncs/index.js +29 -28
- package/dist/syncs/index.js.map +1 -1
- package/dist/testing/agent-storage-contract.d.ts.map +1 -1
- package/dist/testing/ai-cost-storage-contract.d.ts.map +1 -1
- package/dist/testing/index.js +448 -69
- package/dist/testing/index.js.map +7 -7
- package/dist/testing/object-query-contract.d.ts.map +1 -1
- package/dist/testing/object-read-scope-contract.d.ts.map +1 -1
- package/dist/testing/queues-contract.d.ts.map +1 -1
- package/dist/webhooks/internal.js +24 -23
- package/dist/webhooks/internal.js.map +2 -2
- package/dist/workers/index.js +3 -2
- package/dist/workers/index.js.map +2 -2
- package/dist/workflows/failure.d.ts.map +1 -1
- package/dist/workflows/index.js +47 -43
- package/dist/workflows/index.js.map +1 -1
- package/package.json +1 -1
- package/src/actions/builders/params.ts +1 -48
- package/src/actions/types/params.ts +14 -74
- package/src/actions/validation.ts +7 -84
- package/src/agents/errors.ts +3 -0
- package/src/agents/execution.ts +67 -15
- package/src/agents/ids.ts +8 -0
- package/src/agents/index.ts +1 -0
- package/src/agents/request.ts +11 -0
- package/src/agents/sandbox.ts +44 -0
- package/src/agents/validation.ts +2 -108
- package/src/datasets/validation.ts +40 -11
- package/src/datasets/write.ts +8 -11
- package/src/error-reporting/capability.ts +11 -0
- package/src/error-reporting/reports.ts +23 -0
- package/src/error-reporting/types.ts +12 -1
- package/src/errors/catalog.ts +12 -0
- package/src/errors/failure-message.ts +15 -0
- package/src/errors/internal.ts +57 -25
- package/src/execution/authorization.ts +12 -5
- package/src/execution/authorized-object-reader.ts +37 -2
- package/src/execution/kernel-operation.ts +27 -0
- package/src/execution/scopes.ts +2 -0
- package/src/execution/types.ts +4 -4
- package/src/index.ts +60 -1
- package/src/lake-storage/in-memory.ts +5 -3
- package/src/materialization/errors.ts +2 -2
- package/src/materialization/index.ts +1 -0
- package/src/materialization/model.ts +2 -0
- package/src/materialization/vectors.ts +18 -0
- package/src/materializer/README.md +14 -0
- package/src/materializer/context.ts +10 -0
- package/src/materializer/edits/commit.ts +8 -1
- package/src/materializer/edits/vector-authority.ts +108 -0
- package/src/materializer/edits/vectors.ts +100 -0
- package/src/materializer/effective/validate.ts +10 -3
- package/src/materializer/effective/vector-indexing.ts +84 -0
- package/src/materializer/effective/vectors.ts +47 -0
- package/src/materializer/execution/work-executor.ts +11 -3
- package/src/materializer/projections/replace.ts +1 -1
- package/src/materializer/shared/normalize.ts +11 -0
- package/src/materializer/telemetry/append.ts +1 -1
- package/src/models/catalog-index.ts +38 -0
- package/src/models/catalog.ts +66 -38
- package/src/models/decision/catalog.ts +32 -0
- package/src/models/decision/errors.ts +18 -0
- package/src/models/decision/output.ts +101 -0
- package/src/models/decision/questions.ts +29 -0
- package/src/models/decision/runtime.ts +188 -0
- package/src/models/decision/types.ts +109 -0
- package/src/models/decision/validation.ts +335 -0
- package/src/models/definitions.ts +1 -1
- package/src/models/embedding-model.ts +129 -0
- package/src/models/execution/README.md +63 -0
- package/src/models/execution/binding.ts +2 -0
- package/src/models/execution/embedding.ts +133 -0
- package/src/models/execution/model-call-recorder.ts +42 -30
- package/src/models/execution/session.ts +81 -0
- package/src/models/execution.ts +10 -52
- package/src/models/generation-types.ts +2 -0
- package/src/models/index.ts +37 -0
- package/src/models/pricing.ts +1 -2
- package/src/objects/authorized-ontology-view.ts +12 -8
- package/src/objects/execution.ts +2 -0
- package/src/objects/query/executor.ts +13 -4
- package/src/objects/query/explain.ts +7 -2
- package/src/objects/query/index.ts +2 -0
- package/src/objects/query/ir.ts +6 -2
- package/src/objects/query/normalize.ts +5 -1
- package/src/objects/query/validate.ts +74 -73
- package/src/objects/sdk/object-handle.ts +3 -0
- package/src/objects/sdk/object-set.ts +1 -0
- package/src/objects/sdk/query-builder.ts +9 -3
- package/src/objects/sdk/query-executor.ts +2 -1
- package/src/objects/sdk/runtime-query-executor.ts +6 -2
- package/src/objects/vectors/README.md +59 -0
- package/src/objects/vectors/handle.ts +91 -0
- package/src/objects/vectors/indexing-batch.ts +163 -0
- package/src/objects/vectors/indexing-generate.ts +184 -0
- package/src/objects/vectors/indexing-runtime.ts +17 -0
- package/src/objects/vectors/indexing-shared.ts +188 -0
- package/src/objects/vectors/indexing-single.ts +51 -0
- package/src/objects/vectors/indexing-store-batch.ts +62 -0
- package/src/objects/vectors/indexing.ts +23 -0
- package/src/objects/vectors/profile.ts +64 -0
- package/src/objects/vectors/query.ts +16 -0
- package/src/objects/vectors/resolve-query.ts +89 -0
- package/src/objects/vectors/types.ts +10 -0
- package/src/ontology/index.ts +2 -0
- package/src/ontology/registry.ts +8 -0
- package/src/ontology/types.ts +9 -9
- package/src/ontology/validation/definition.ts +104 -0
- package/src/ontology/validation/properties.ts +14 -4
- package/src/ontology/validation/query.ts +34 -51
- package/src/ontology/validation/schema.ts +85 -23
- package/src/ontology/vector-profiles.ts +35 -0
- package/src/queues/in-memory.ts +5 -0
- package/src/queues/index.ts +1 -0
- package/src/queues/types.ts +10 -0
- package/src/runtime/create.ts +7 -6
- package/src/runtime/host.ts +42 -6
- package/src/runtime/internal.ts +3 -0
- package/src/runtime/resolve-definitions.ts +19 -1
- package/src/runtime/sixb.ts +27 -9
- package/src/runtime/types.ts +16 -4
- package/src/sandboxes/README.md +41 -0
- package/src/sandboxes/auth.ts +17 -0
- package/src/sandboxes/config.ts +37 -0
- package/src/sandboxes/configuration.ts +268 -0
- package/src/sandboxes/environment.ts +107 -0
- package/src/sandboxes/errors.ts +1 -1
- package/src/sandboxes/index.ts +15 -0
- package/src/sandboxes/sandbox.ts +38 -3
- package/src/shared/params/builders.ts +50 -0
- package/src/shared/params/types.ts +84 -0
- package/src/shared/params/validation.ts +114 -0
- package/src/storage/agents/in-memory.ts +25 -1
- package/src/storage/agents/index.ts +3 -0
- package/src/storage/agents/provider.ts +105 -0
- package/src/storage/agents/types.ts +54 -0
- package/src/storage/ai-cost/analytics.ts +59 -21
- package/src/storage/ai-cost/index.ts +1 -0
- package/src/storage/ai-cost/types.ts +19 -2
- package/src/storage/executions/provider.ts +24 -12
- package/src/storage/executions/types.ts +1 -0
- package/src/storage/executions/validation.ts +7 -3
- package/src/storage/index.ts +15 -1
- package/src/storage/objects/in-memory/query.ts +25 -11
- package/src/storage/objects/in-memory/read-scope.ts +9 -2
- package/src/storage/objects/in-memory/read-source.ts +5 -0
- package/src/storage/objects/in-memory/selected-reader.ts +5 -1
- package/src/storage/objects/in-memory/storage.ts +19 -1
- package/src/storage/objects/types.ts +2 -0
- package/src/storage/ontology/commits.ts +1 -0
- package/src/storage/ontology/in-memory/index.ts +20 -0
- package/src/storage/ontology/in-memory/materializations.ts +13 -0
- package/src/storage/ontology/in-memory/shared-state.ts +9 -0
- package/src/storage/ontology/in-memory/vector-indexing.ts +179 -0
- package/src/storage/ontology/in-memory/vectors.ts +73 -0
- package/src/storage/ontology/index.ts +14 -0
- package/src/storage/ontology/vector-indexing.ts +98 -0
- package/src/storage/ontology/vectors.ts +48 -0
- package/src/storage/operation-scope.ts +1 -0
- package/src/storage/types.ts +3 -0
- package/src/testing/agent-storage-contract.ts +246 -0
- package/src/testing/ai-cost-storage-contract.ts +134 -0
- package/src/testing/object-query-contract.ts +41 -25
- package/src/testing/object-read-scope-contract.ts +1 -5
- package/src/testing/queues-contract.ts +31 -0
- package/src/workflows/failure.ts +10 -4
- package/src/workflows/validation.ts +2 -2
- package/dist/chunk-01kj2pbh.js.map +0 -19
- package/dist/chunk-5hz0fnca.js.map +0 -12
- package/dist/chunk-7apz6hg4.js.map +0 -10
- package/dist/chunk-7bs40fe1.js.map +0 -12
- package/dist/chunk-860dwwy0.js.map +0 -14
- package/dist/chunk-93csa55g.js.map +0 -11
- package/dist/chunk-a0e6x5hd.js.map +0 -14
- package/dist/chunk-aa6z4a19.js.map +0 -12
- package/dist/chunk-ap0g1g74.js.map +0 -11
- package/dist/chunk-f0rwz2vh.js.map +0 -11
- package/dist/chunk-f4w3yp4f.js.map +0 -12
- package/dist/chunk-jsy70480.js.map +0 -15
- package/dist/chunk-mrp7k0pw.js.map +0 -10
- package/dist/chunk-ms2tmn1k.js.map +0 -17
- package/dist/chunk-rb1xx120.js.map +0 -11
- package/dist/chunk-yv79ncbv.js.map +0 -10
- package/dist/chunk-z0271qkp.js.map +0 -15
- package/dist/chunk-z3y411fq.js +0 -99
- package/dist/chunk-z3y411fq.js.map +0 -11
- /package/dist/{chunk-17kfctj6.js.map → chunk-0mza4xb2.js.map} +0 -0
- /package/dist/{chunk-1yefycb1.js.map → chunk-3bnt2wna.js.map} +0 -0
- /package/dist/{chunk-awbhdqyc.js.map → chunk-3ghw2t5q.js.map} +0 -0
- /package/dist/{chunk-b19g04jk.js.map → chunk-3h7ctayx.js.map} +0 -0
- /package/dist/{chunk-wjasrj67.js.map → chunk-3qpcrcj8.js.map} +0 -0
- /package/dist/{chunk-0y39rgsb.js.map → chunk-5tetw4hn.js.map} +0 -0
- /package/dist/{chunk-c5rkjrgp.js.map → chunk-7ytf06d3.js.map} +0 -0
- /package/dist/{chunk-358caqf5.js.map → chunk-bfjv1adk.js.map} +0 -0
- /package/dist/{chunk-g91qxjj0.js.map → chunk-bg2bs62d.js.map} +0 -0
- /package/dist/{chunk-g6cke204.js.map → chunk-f85hpqnm.js.map} +0 -0
- /package/dist/{chunk-vsj3mdfj.js.map → chunk-fc5zfxy1.js.map} +0 -0
- /package/dist/{chunk-1824gssz.js.map → chunk-gswwr35f.js.map} +0 -0
- /package/dist/{chunk-92vk7gta.js.map → chunk-gzt6v1ja.js.map} +0 -0
- /package/dist/{chunk-gqh45d2n.js.map → chunk-hkw8rykk.js.map} +0 -0
- /package/dist/{chunk-cfvakeax.js.map → chunk-jjwhy3rs.js.map} +0 -0
- /package/dist/{chunk-9qsh3p5y.js.map → chunk-rb143ggb.js.map} +0 -0
- /package/dist/{chunk-653vwrzr.js.map → chunk-rdghfsss.js.map} +0 -0
- /package/dist/{chunk-x9m9x2eq.js.map → chunk-t7dzd1tm.js.map} +0 -0
- /package/dist/{chunk-pr2h4bv4.js.map → chunk-tg4g4zh0.js.map} +0 -0
- /package/dist/{chunk-8vj0rjgs.js.map → chunk-wjffn5m4.js.map} +0 -0
- /package/dist/{chunk-wf88w4kp.js.map → chunk-x9tmx3fc.js.map} +0 -0
- /package/dist/{chunk-fh8kgex1.js.map → chunk-xn686q2e.js.map} +0 -0
- /package/dist/{chunk-v2vcg0w6.js.map → chunk-xtfryrfb.js.map} +0 -0
|
@@ -3,6 +3,7 @@ import type { EventOrigin } from "../events/envelope"
|
|
|
3
3
|
import type { PropertyChange, PropertyChangeMap } from "../events/property-changes"
|
|
4
4
|
import type { JsonValue } from "../json"
|
|
5
5
|
import type { ProjectionProtocolIdentity, ProjectionRunFailureCode } from "../projections/types"
|
|
6
|
+
import type { ObjectVectorWrite } from "./vectors"
|
|
6
7
|
|
|
7
8
|
export type { ProjectionProtocolIdentity } from "../projections/types"
|
|
8
9
|
|
|
@@ -125,6 +126,7 @@ export type OntologyEditCommit =
|
|
|
125
126
|
readonly source:
|
|
126
127
|
| { readonly kind: "action"; readonly actionId: string; readonly runId: string }
|
|
127
128
|
| { readonly kind: "runtime"; readonly requestId: string }
|
|
129
|
+
readonly vectorWrites?: readonly ObjectVectorWrite[]
|
|
128
130
|
readonly expectedObjects: readonly ExpectedObjectRevision[]
|
|
129
131
|
readonly expectedLinks: readonly ExpectedLinkRevision[]
|
|
130
132
|
readonly expectedLinkScopes: readonly ExpectedLinkScopeRevision[]
|
|
@@ -0,0 +1,18 @@
|
|
|
1
|
+
import type { ExpectedObjectRevision, OntologyObjectRef } from "./model"
|
|
2
|
+
|
|
3
|
+
/** Internal observation captured before embedding and fenced by the atomic vector write. */
|
|
4
|
+
export interface PreparedObjectVector {
|
|
5
|
+
readonly projectId: string
|
|
6
|
+
readonly ref: OntologyObjectRef
|
|
7
|
+
readonly profile: string
|
|
8
|
+
readonly configuration: string
|
|
9
|
+
readonly text: string
|
|
10
|
+
readonly sourceFingerprint: string
|
|
11
|
+
readonly expectedObject: Extract<ExpectedObjectRevision, { exists: true }>
|
|
12
|
+
readonly expectedVectorCommitId: string | null
|
|
13
|
+
}
|
|
14
|
+
|
|
15
|
+
export interface ObjectVectorWrite {
|
|
16
|
+
readonly input: PreparedObjectVector
|
|
17
|
+
readonly values: readonly number[]
|
|
18
|
+
}
|
|
@@ -124,3 +124,17 @@ finish still commit atomically.
|
|
|
124
124
|
Keep use-case entrypoints explicit. Share mechanics only after they have identical semantics; do
|
|
125
125
|
not hide projection candidate lifecycle, edit continuation, or telemetry batching behind a generic
|
|
126
126
|
workflow engine.
|
|
127
|
+
|
|
128
|
+
## Vector profiles
|
|
129
|
+
|
|
130
|
+
The SDK's explicit `index()` captures an internal `PreparedObjectVector`: object/profile identity,
|
|
131
|
+
configuration and source fingerprints, canonical input text, object revision and current vector
|
|
132
|
+
commit id. Source values stay local to preparation rather than being copied into the write payload.
|
|
133
|
+
Text is ordered JSON pairs of source names and values; missing/null values become `null`, while
|
|
134
|
+
empty strings remain distinct. The configuration includes an encoding version.
|
|
135
|
+
|
|
136
|
+
The configured model runs outside the transaction. Atomic edits then verify the object revision,
|
|
137
|
+
source/configuration fingerprints and vector commit id before storing validated float32 values.
|
|
138
|
+
An unrelated edit may conservatively reject in-flight indexing even when an existing vector remains
|
|
139
|
+
valid. A provider failure leaves the current representation untouched and is never retried here.
|
|
140
|
+
Effective-state changes invalidate affected profiles in the same transaction as the object write.
|
|
@@ -49,6 +49,16 @@ export function createMaterializerContext(input: {
|
|
|
49
49
|
"Materializer Ontology does not match the Ontology pinned by its projection registry."
|
|
50
50
|
)
|
|
51
51
|
}
|
|
52
|
+
if (
|
|
53
|
+
(!input.storage.ontology.vectors || !input.storage.ontology.vectorIndexing) &&
|
|
54
|
+
input.ontology
|
|
55
|
+
.listObjectTypes()
|
|
56
|
+
.some((type) => Object.keys(type.search?.vectors ?? {}).length > 0)
|
|
57
|
+
) {
|
|
58
|
+
throw new MaterializationValidationError(
|
|
59
|
+
"Storage does not support transactional vector profiles and automatic indexing."
|
|
60
|
+
)
|
|
61
|
+
}
|
|
52
62
|
const dependencies = input.dependencies ?? {}
|
|
53
63
|
const maxSerializationRetries = dependencies.maxSerializationRetries ?? 2
|
|
54
64
|
if (!Number.isSafeInteger(maxSerializationRetries) || maxSerializationRetries < 0) {
|
|
@@ -34,6 +34,8 @@ import { compileEditExecutionUnits, type EditExecutionUnit } from "./execution-u
|
|
|
34
34
|
import { loadEditWorkingState } from "./load-state"
|
|
35
35
|
import { applyEditOperation, type EditUndoJournal, undoEditJournal } from "./operations"
|
|
36
36
|
import { stageEditPlan } from "./plan"
|
|
37
|
+
import { authorizeVectorIndexingCommit } from "./vector-authority"
|
|
38
|
+
import { commitVectorWrites } from "./vectors"
|
|
37
39
|
import type { EditWorkingState } from "./working-state"
|
|
38
40
|
|
|
39
41
|
type NormalizedEditCommit = ReturnType<typeof normalizeOntologyEditCommit>
|
|
@@ -106,6 +108,7 @@ async function validateMutationExecution(
|
|
|
106
108
|
input: NormalizedEditCommit,
|
|
107
109
|
execution: MaterializerExecution
|
|
108
110
|
): Promise<void> {
|
|
111
|
+
if (await authorizeVectorIndexingCommit(storage, projectId, input, execution)) return
|
|
109
112
|
if (input.source.kind !== "action") {
|
|
110
113
|
assertRuntimeMutationExecution(execution)
|
|
111
114
|
return
|
|
@@ -182,7 +185,8 @@ async function executeEditTransaction(
|
|
|
182
185
|
workingState,
|
|
183
186
|
editPlanContext(command)
|
|
184
187
|
)
|
|
185
|
-
await drainStagedWork(context, storage
|
|
188
|
+
await drainStagedWork(context, storage, session)
|
|
189
|
+
await commitVectorWrites(context, storage, command.input, command.identity.commitId, session)
|
|
186
190
|
const eventCount = await drainStagedEvents(
|
|
187
191
|
context,
|
|
188
192
|
storage.ontology.materializations,
|
|
@@ -234,6 +238,9 @@ function buildEditCommit(
|
|
|
234
238
|
kind: "edit",
|
|
235
239
|
mode: command.input.mode,
|
|
236
240
|
operationCount: command.input.operations.length,
|
|
241
|
+
...(command.input.mode === "atomic" && command.input.vectorWrites?.length
|
|
242
|
+
? { vectorWriteCount: command.input.vectorWrites.length }
|
|
243
|
+
: {}),
|
|
237
244
|
},
|
|
238
245
|
committedAt: command.identity.committedAt,
|
|
239
246
|
}
|
|
@@ -0,0 +1,108 @@
|
|
|
1
|
+
import {
|
|
2
|
+
MaterializationConflictError,
|
|
3
|
+
MaterializationValidationError,
|
|
4
|
+
} from "../../materialization/errors"
|
|
5
|
+
import type { OntologyEditCommit } from "../../materialization/model"
|
|
6
|
+
import { objectRefKey } from "../../materialization/refs"
|
|
7
|
+
import type { ObjectVectorWrite } from "../../materialization/vectors"
|
|
8
|
+
import type { Storage } from "../../storage"
|
|
9
|
+
import type { VectorIndexingWork } from "../../storage/ontology/vector-indexing"
|
|
10
|
+
import type { MaterializerExecution } from "../execution/scope"
|
|
11
|
+
|
|
12
|
+
/** Kernel indexing can publish only its persisted results, never change business data. */
|
|
13
|
+
export async function authorizeVectorIndexingCommit(
|
|
14
|
+
storage: Storage,
|
|
15
|
+
projectId: string,
|
|
16
|
+
input: OntologyEditCommit,
|
|
17
|
+
execution: MaterializerExecution
|
|
18
|
+
): Promise<boolean> {
|
|
19
|
+
const executor = execution.scope.execution.executor
|
|
20
|
+
if (executor.type !== "kernel" || executor.operation.type !== "ontology.indexVectors")
|
|
21
|
+
return false
|
|
22
|
+
if (
|
|
23
|
+
input.mode !== "atomic" ||
|
|
24
|
+
input.source.kind !== "runtime" ||
|
|
25
|
+
input.operations.length ||
|
|
26
|
+
!input.vectorWrites?.length ||
|
|
27
|
+
input.expectedLinks.length ||
|
|
28
|
+
input.expectedLinkScopes.length
|
|
29
|
+
) {
|
|
30
|
+
throw new MaterializationValidationError(
|
|
31
|
+
"Vector indexing authority only permits its persisted vector writes."
|
|
32
|
+
)
|
|
33
|
+
}
|
|
34
|
+
const writes = input.vectorWrites!
|
|
35
|
+
const refs = new Set(writes.map((write) => objectRefKey(write.input.ref)))
|
|
36
|
+
if (
|
|
37
|
+
input.expectedObjects.length !== refs.size ||
|
|
38
|
+
input.expectedObjects.some((expected) => !refs.has(objectRefKey(expected.ref)))
|
|
39
|
+
) {
|
|
40
|
+
throw new MaterializationValidationError(
|
|
41
|
+
"Vector indexing must fence exactly its written objects."
|
|
42
|
+
)
|
|
43
|
+
}
|
|
44
|
+
|
|
45
|
+
const indexing = storage.ontology.vectorIndexing
|
|
46
|
+
const indexingId = executor.operation.indexingId
|
|
47
|
+
const single = await indexing?.get({ projectId, id: indexingId })
|
|
48
|
+
if (single && writes.length !== 1) {
|
|
49
|
+
throw new MaterializationValidationError(
|
|
50
|
+
"Individual indexing authority only permits one vector write."
|
|
51
|
+
)
|
|
52
|
+
}
|
|
53
|
+
|
|
54
|
+
// Multi-object publication reads membership/results once, not once per object.
|
|
55
|
+
let members: readonly VectorIndexingWork[]
|
|
56
|
+
if (single) {
|
|
57
|
+
members = [single]
|
|
58
|
+
} else if (writes.length === 1) {
|
|
59
|
+
const member = await indexing?.getBatchMember({
|
|
60
|
+
projectId,
|
|
61
|
+
batchId: indexingId,
|
|
62
|
+
ref: writes[0]!.input.ref,
|
|
63
|
+
profile: writes[0]!.input.profile,
|
|
64
|
+
})
|
|
65
|
+
members = member ? [member] : []
|
|
66
|
+
} else {
|
|
67
|
+
members = (await indexing?.getBatch({ projectId, batchId: indexingId })) ?? []
|
|
68
|
+
}
|
|
69
|
+
|
|
70
|
+
const byProfile = new Map(
|
|
71
|
+
members.map((work) => [JSON.stringify([objectRefKey(work.ref), work.profile]), work])
|
|
72
|
+
)
|
|
73
|
+
const source = execution.scope.execution.source
|
|
74
|
+
|
|
75
|
+
for (const write of writes) {
|
|
76
|
+
const work = byProfile.get(JSON.stringify([objectRefKey(write.input.ref), write.input.profile]))
|
|
77
|
+
if (!work || work.status !== "ready") {
|
|
78
|
+
throw new MaterializationConflictError(
|
|
79
|
+
"effective-state",
|
|
80
|
+
"Vector indexing work is no longer ready."
|
|
81
|
+
)
|
|
82
|
+
}
|
|
83
|
+
if (
|
|
84
|
+
source.type !== "ontologyCommit" ||
|
|
85
|
+
source.commitId !== work.sourceCommitId ||
|
|
86
|
+
!matchesStoredResult(write, work)
|
|
87
|
+
) {
|
|
88
|
+
throw new MaterializationValidationError(
|
|
89
|
+
"Vector indexing authority only permits its current prepared representation."
|
|
90
|
+
)
|
|
91
|
+
}
|
|
92
|
+
}
|
|
93
|
+
return true
|
|
94
|
+
}
|
|
95
|
+
|
|
96
|
+
function matchesStoredResult(write: ObjectVectorWrite, work: VectorIndexingWork): boolean {
|
|
97
|
+
const prepared = write.input
|
|
98
|
+
return (
|
|
99
|
+
prepared.ref.objectTypeId === work.ref.objectTypeId &&
|
|
100
|
+
prepared.ref.primaryId === work.ref.primaryId &&
|
|
101
|
+
prepared.profile === work.profile &&
|
|
102
|
+
prepared.configuration === work.configuration &&
|
|
103
|
+
prepared.sourceFingerprint === work.sourceFingerprint &&
|
|
104
|
+
work.values !== undefined &&
|
|
105
|
+
work.values.length === write.values.length &&
|
|
106
|
+
work.values.every((value, index) => value === write.values[index])
|
|
107
|
+
)
|
|
108
|
+
}
|
|
@@ -0,0 +1,100 @@
|
|
|
1
|
+
import {
|
|
2
|
+
MaterializationConflictError,
|
|
3
|
+
MaterializationValidationError,
|
|
4
|
+
} from "../../materialization/errors"
|
|
5
|
+
import type { OntologyEditCommit } from "../../materialization/model"
|
|
6
|
+
import { objectRefKey } from "../../materialization/refs"
|
|
7
|
+
import { normalizeVector, vectorConfiguration, vectorSources } from "../../objects/vectors/profile"
|
|
8
|
+
import type { Storage } from "../../storage"
|
|
9
|
+
import { objectBatchKey } from "../../storage/objects/keys"
|
|
10
|
+
import type { MaterializationSession, OntologyVectorStorage } from "../../storage/ontology"
|
|
11
|
+
import type { MaterializerContext } from "../context"
|
|
12
|
+
|
|
13
|
+
export async function commitVectorWrites(
|
|
14
|
+
context: MaterializerContext,
|
|
15
|
+
storage: Storage,
|
|
16
|
+
input: OntologyEditCommit,
|
|
17
|
+
commitId: string,
|
|
18
|
+
session: MaterializationSession
|
|
19
|
+
): Promise<void> {
|
|
20
|
+
if (input.mode !== "atomic" || !input.vectorWrites?.length) return
|
|
21
|
+
const vectors = storage.ontology.vectors
|
|
22
|
+
if (!vectors)
|
|
23
|
+
throw new MaterializationValidationError("Storage does not support vector profiles.")
|
|
24
|
+
const rows = await storage.objects.getByPrimaryIdBatch({
|
|
25
|
+
projectId: context.projectId,
|
|
26
|
+
items: input.vectorWrites.map((write) => write.input.ref),
|
|
27
|
+
})
|
|
28
|
+
const expectations = new Map(
|
|
29
|
+
input.expectedObjects.map((expected) => [objectRefKey(expected.ref), expected])
|
|
30
|
+
)
|
|
31
|
+
const entries: Parameters<OntologyVectorStorage["writeBatch"]>[0]["entries"][number][] = []
|
|
32
|
+
const seen = new Set<string>()
|
|
33
|
+
for (const write of input.vectorWrites) {
|
|
34
|
+
const prepared = write.input
|
|
35
|
+
const key = JSON.stringify([objectRefKey(prepared.ref), prepared.profile])
|
|
36
|
+
if (seen.has(key)) throw new MaterializationValidationError(`Duplicate vector write: ${key}`)
|
|
37
|
+
seen.add(key)
|
|
38
|
+
const profileDefinition = context.ontology.resolveObjectType(prepared.ref.objectTypeId).search
|
|
39
|
+
?.vectors?.[prepared.profile]
|
|
40
|
+
if (
|
|
41
|
+
prepared.projectId !== context.projectId ||
|
|
42
|
+
!profileDefinition ||
|
|
43
|
+
vectorConfiguration(profileDefinition) !== prepared.configuration
|
|
44
|
+
) {
|
|
45
|
+
throw new MaterializationConflictError(
|
|
46
|
+
"effective-state",
|
|
47
|
+
"Vector profile configuration changed; index it again."
|
|
48
|
+
)
|
|
49
|
+
}
|
|
50
|
+
const expected = expectations.get(objectRefKey(prepared.ref))
|
|
51
|
+
if (
|
|
52
|
+
!expected?.exists ||
|
|
53
|
+
!prepared.expectedObject?.exists ||
|
|
54
|
+
objectRefKey(prepared.expectedObject.ref) !== objectRefKey(prepared.ref) ||
|
|
55
|
+
expected.version !== prepared.expectedObject.version ||
|
|
56
|
+
expected.lastCommitId !== prepared.expectedObject.lastCommitId
|
|
57
|
+
) {
|
|
58
|
+
throw new MaterializationValidationError(
|
|
59
|
+
"Vector writes must fence their prepared object revision."
|
|
60
|
+
)
|
|
61
|
+
}
|
|
62
|
+
const row = rows.get(objectBatchKey(prepared.ref.objectTypeId, prepared.ref.primaryId))
|
|
63
|
+
if (
|
|
64
|
+
!row ||
|
|
65
|
+
row.version !== expected.version ||
|
|
66
|
+
row.lastCommitId !== expected.lastCommitId ||
|
|
67
|
+
vectorSources(profileDefinition.source, row.properties).sourceFingerprint !==
|
|
68
|
+
prepared.sourceFingerprint
|
|
69
|
+
) {
|
|
70
|
+
throw new MaterializationConflictError(
|
|
71
|
+
"effective-state",
|
|
72
|
+
"Vector sources changed; index the profile again."
|
|
73
|
+
)
|
|
74
|
+
}
|
|
75
|
+
entries.push({
|
|
76
|
+
expectedCommitId: prepared.expectedVectorCommitId,
|
|
77
|
+
value: {
|
|
78
|
+
ref: prepared.ref,
|
|
79
|
+
profile: prepared.profile,
|
|
80
|
+
configuration: prepared.configuration,
|
|
81
|
+
source: profileDefinition.source,
|
|
82
|
+
sourceFingerprint: prepared.sourceFingerprint,
|
|
83
|
+
values: normalizeVector(write.values, profileDefinition.model.definition.dimensions),
|
|
84
|
+
lastCommitId: commitId,
|
|
85
|
+
},
|
|
86
|
+
})
|
|
87
|
+
}
|
|
88
|
+
|
|
89
|
+
await vectors.writeBatch({ session, projectId: context.projectId, entries })
|
|
90
|
+
await storage.ontology.vectorIndexing?.complete({
|
|
91
|
+
session,
|
|
92
|
+
projectId: context.projectId,
|
|
93
|
+
entries: input.vectorWrites.map(({ input: prepared }) => ({
|
|
94
|
+
ref: prepared.ref,
|
|
95
|
+
profile: prepared.profile,
|
|
96
|
+
configuration: prepared.configuration,
|
|
97
|
+
sourceFingerprint: prepared.sourceFingerprint,
|
|
98
|
+
})),
|
|
99
|
+
})
|
|
100
|
+
}
|
|
@@ -1,3 +1,4 @@
|
|
|
1
|
+
import { withFailureMessage } from "../../errors/failure-message"
|
|
1
2
|
import type { JsonValue } from "../../json"
|
|
2
3
|
import { MaterializationValidationError } from "../../materialization/errors"
|
|
3
4
|
import type {
|
|
@@ -113,8 +114,11 @@ export function validateEffectiveObject(
|
|
|
113
114
|
property.required &&
|
|
114
115
|
properties[property.id] === undefined
|
|
115
116
|
) {
|
|
116
|
-
throw
|
|
117
|
-
|
|
117
|
+
throw withFailureMessage(
|
|
118
|
+
new Error(
|
|
119
|
+
`[Sixb] Missing required property '${property.id}' for object type '${objectType.id}'`
|
|
120
|
+
),
|
|
121
|
+
`Missing required property '${objectType.id}.${property.id}'.`
|
|
118
122
|
)
|
|
119
123
|
}
|
|
120
124
|
}
|
|
@@ -175,6 +179,9 @@ function materializationValidation<T>(run: () => T): T {
|
|
|
175
179
|
return run()
|
|
176
180
|
} catch (error) {
|
|
177
181
|
if (error instanceof MaterializationValidationError) throw error
|
|
178
|
-
throw new MaterializationValidationError(
|
|
182
|
+
throw new MaterializationValidationError(
|
|
183
|
+
error instanceof Error ? error.message : String(error),
|
|
184
|
+
{ cause: error }
|
|
185
|
+
)
|
|
179
186
|
}
|
|
180
187
|
}
|
|
@@ -0,0 +1,84 @@
|
|
|
1
|
+
import { randomUUID } from "node:crypto"
|
|
2
|
+
import type { OntologyObjectRef } from "../../materialization/model"
|
|
3
|
+
import { vectorConfiguration, vectorSources } from "../../objects/vectors/profile"
|
|
4
|
+
import type { Storage } from "../../storage"
|
|
5
|
+
import { objectBatchKey } from "../../storage/objects/keys"
|
|
6
|
+
import type { MaterializationSession } from "../../storage/ontology"
|
|
7
|
+
import type { VectorIndexingRequest } from "../../storage/ontology/vector-indexing"
|
|
8
|
+
import type { MaterializerContext } from "../context"
|
|
9
|
+
import type { MaterializationPlanItem } from "../execution/plan-stream"
|
|
10
|
+
|
|
11
|
+
/** Source assertions are not effective values: schedule only after conflict resolution. */
|
|
12
|
+
export async function scheduleVectorChanges(
|
|
13
|
+
context: Pick<MaterializerContext, "projectId" | "ontology" | "clock">,
|
|
14
|
+
storage: Storage,
|
|
15
|
+
items: readonly MaterializationPlanItem[],
|
|
16
|
+
session: MaterializationSession,
|
|
17
|
+
projection = false
|
|
18
|
+
): Promise<void> {
|
|
19
|
+
const indexing = storage.ontology.vectorIndexing
|
|
20
|
+
if (!indexing) return
|
|
21
|
+
const upserts = items
|
|
22
|
+
.filter((item) => item.kind === "object-upsert")
|
|
23
|
+
.filter(
|
|
24
|
+
(item) =>
|
|
25
|
+
Object.keys(
|
|
26
|
+
context.ontology.resolveObjectType(item.value.row.ref.objectTypeId).search?.vectors ?? {}
|
|
27
|
+
).length > 0
|
|
28
|
+
)
|
|
29
|
+
const previous = await storage.objects.getByPrimaryIdBatch({
|
|
30
|
+
projectId: context.projectId,
|
|
31
|
+
items: upserts.map((item) => item.value.row.ref),
|
|
32
|
+
})
|
|
33
|
+
const requests: VectorIndexingRequest[] = []
|
|
34
|
+
const deleted: OntologyObjectRef[] = []
|
|
35
|
+
// Groups exist only for this materialization page and are persisted in its transaction.
|
|
36
|
+
const groups = new Map<string, { id: string; count: number; bytes: number }>()
|
|
37
|
+
for (const item of items) {
|
|
38
|
+
if (item.kind === "object-delete") {
|
|
39
|
+
deleted.push(item.value.ref)
|
|
40
|
+
continue
|
|
41
|
+
}
|
|
42
|
+
if (item.kind !== "object-upsert") continue
|
|
43
|
+
const row = item.value.row
|
|
44
|
+
const profiles = context.ontology.resolveObjectType(row.ref.objectTypeId).search?.vectors ?? {}
|
|
45
|
+
const before = previous.get(objectBatchKey(row.ref.objectTypeId, row.ref.primaryId))
|
|
46
|
+
for (const [profile, definition] of Object.entries(profiles)) {
|
|
47
|
+
const { sourceFingerprint, text } = vectorSources(definition.source, row.properties)
|
|
48
|
+
if (
|
|
49
|
+
before &&
|
|
50
|
+
vectorSources(definition.source, before.properties).sourceFingerprint === sourceFingerprint
|
|
51
|
+
)
|
|
52
|
+
continue
|
|
53
|
+
const configuration = vectorConfiguration(definition)
|
|
54
|
+
const bytes = Buffer.byteLength(text)
|
|
55
|
+
const key = JSON.stringify([row.ref.objectTypeId, profile, configuration, row.lastCommitId])
|
|
56
|
+
let group = projection ? groups.get(key) : undefined
|
|
57
|
+
if (projection && (!group || group.count === 32 || group.bytes + bytes > 32_768)) {
|
|
58
|
+
group = { id: randomUUID(), count: 0, bytes: 0 }
|
|
59
|
+
groups.set(key, group)
|
|
60
|
+
}
|
|
61
|
+
if (group) {
|
|
62
|
+
group.count++
|
|
63
|
+
group.bytes += bytes
|
|
64
|
+
}
|
|
65
|
+
requests.push({
|
|
66
|
+
...(group ? { batchId: group.id } : {}),
|
|
67
|
+
id: randomUUID(),
|
|
68
|
+
ref: row.ref,
|
|
69
|
+
profile,
|
|
70
|
+
sourceFingerprint,
|
|
71
|
+
configuration,
|
|
72
|
+
sourceCommitId: row.lastCommitId,
|
|
73
|
+
})
|
|
74
|
+
}
|
|
75
|
+
}
|
|
76
|
+
if (requests.length || deleted.length)
|
|
77
|
+
await indexing.schedule({
|
|
78
|
+
projectId: context.projectId,
|
|
79
|
+
session,
|
|
80
|
+
requests,
|
|
81
|
+
deleted,
|
|
82
|
+
availableAt: context.clock().toISOString(),
|
|
83
|
+
})
|
|
84
|
+
}
|
|
@@ -0,0 +1,47 @@
|
|
|
1
|
+
import { objectRefKey } from "../../materialization/refs"
|
|
2
|
+
import { vectorSources } from "../../objects/vectors/profile"
|
|
3
|
+
import type { MaterializationSession } from "../../storage/ontology"
|
|
4
|
+
import type { OntologyVectorStorage } from "../../storage/ontology/vectors"
|
|
5
|
+
import type { MaterializationPlanItem } from "../execution/plan-stream"
|
|
6
|
+
|
|
7
|
+
/** Invalidate a bounded materialization page, including stored profiles no longer declared. */
|
|
8
|
+
export async function invalidateVectorChanges(
|
|
9
|
+
projectId: string,
|
|
10
|
+
vectors: OntologyVectorStorage | undefined,
|
|
11
|
+
items: readonly MaterializationPlanItem[],
|
|
12
|
+
session: MaterializationSession
|
|
13
|
+
): Promise<void> {
|
|
14
|
+
if (!vectors) return
|
|
15
|
+
const changes = new Map(
|
|
16
|
+
items.flatMap((item) => {
|
|
17
|
+
if (item.kind !== "object-upsert" && item.kind !== "object-delete") return []
|
|
18
|
+
const ref = item.kind === "object-upsert" ? item.value.row.ref : item.value.ref
|
|
19
|
+
return [[objectRefKey(ref), { ref, item }] as const]
|
|
20
|
+
})
|
|
21
|
+
)
|
|
22
|
+
if (!changes.size) return
|
|
23
|
+
|
|
24
|
+
const stored = await vectors.listBatch({
|
|
25
|
+
projectId,
|
|
26
|
+
refs: [...changes.values()].map(({ ref }) => ref),
|
|
27
|
+
})
|
|
28
|
+
const removals: Parameters<OntologyVectorStorage["removeBatch"]>[0]["entries"][number][] = []
|
|
29
|
+
for (const entry of stored) {
|
|
30
|
+
const change = changes.get(objectRefKey(entry.ref))
|
|
31
|
+
if (!change) continue
|
|
32
|
+
const { item } = change
|
|
33
|
+
if (
|
|
34
|
+
item.kind === "object-upsert" &&
|
|
35
|
+
entry.source.every((id) => {
|
|
36
|
+
const value = item.value.row.properties[id]
|
|
37
|
+
return value === undefined || value === null || typeof value === "string"
|
|
38
|
+
}) &&
|
|
39
|
+
vectorSources(entry.source, item.value.row.properties).sourceFingerprint ===
|
|
40
|
+
entry.sourceFingerprint
|
|
41
|
+
)
|
|
42
|
+
continue
|
|
43
|
+
|
|
44
|
+
removals.push({ ref: entry.ref, profile: entry.profile, expectedCommitId: entry.lastCommitId })
|
|
45
|
+
}
|
|
46
|
+
if (removals.length) await vectors.removeBatch({ session, projectId, entries: removals })
|
|
47
|
+
}
|
|
@@ -1,5 +1,6 @@
|
|
|
1
1
|
import { MaterializationValidationError } from "../../materialization/errors"
|
|
2
2
|
import { utf8JsonByteLength } from "../../materialization/refs"
|
|
3
|
+
import type { Storage } from "../../storage"
|
|
3
4
|
import type {
|
|
4
5
|
MaterializationSession,
|
|
5
6
|
MaterializationWorkRecord,
|
|
@@ -7,6 +8,8 @@ import type {
|
|
|
7
8
|
} from "../../storage/ontology"
|
|
8
9
|
import type { MaterializerContext } from "../context"
|
|
9
10
|
import { sequenceMaterializationEvent } from "../effective/build-events"
|
|
11
|
+
import { scheduleVectorChanges } from "../effective/vector-indexing"
|
|
12
|
+
import { invalidateVectorChanges } from "../effective/vectors"
|
|
10
13
|
import { throwIfAborted } from "../shared/abort"
|
|
11
14
|
import { chunkBySize } from "../shared/chunking"
|
|
12
15
|
import type { TimedCommitIdentity } from "../shared/identity"
|
|
@@ -46,15 +49,20 @@ export async function stageWorkBounded(
|
|
|
46
49
|
}
|
|
47
50
|
|
|
48
51
|
export async function drainStagedWork(
|
|
49
|
-
context:
|
|
50
|
-
|
|
52
|
+
context: Pick<MaterializerContext, "batching" | "projectId" | "ontology" | "clock">,
|
|
53
|
+
transactionStorage: Storage,
|
|
51
54
|
session: MaterializationSession,
|
|
52
|
-
signal?: AbortSignal
|
|
55
|
+
signal?: AbortSignal,
|
|
56
|
+
projection = false
|
|
53
57
|
): Promise<void> {
|
|
58
|
+
const ontologyStorage = transactionStorage.ontology
|
|
59
|
+
const storage = ontologyStorage.materializations
|
|
54
60
|
let phase: number | null = null
|
|
55
61
|
let pending: MaterializationPlanItem[] = []
|
|
56
62
|
const flush = async () => {
|
|
57
63
|
if (pending.length === 0) return
|
|
64
|
+
await scheduleVectorChanges(context, transactionStorage, pending, session, projection)
|
|
65
|
+
await invalidateVectorChanges(context.projectId, ontologyStorage.vectors, pending, session)
|
|
58
66
|
await applyItems(context, storage, session, pending, signal)
|
|
59
67
|
pending = []
|
|
60
68
|
}
|
|
@@ -347,7 +347,7 @@ async function executeProjectionTransaction(
|
|
|
347
347
|
ready,
|
|
348
348
|
origin
|
|
349
349
|
)
|
|
350
|
-
await drainStagedWork(context, storage
|
|
350
|
+
await drainStagedWork(context, storage, session, command.signal, true)
|
|
351
351
|
const eventCount = await drainStagedEvents(
|
|
352
352
|
context,
|
|
353
353
|
storage.ontology.materializations,
|
|
@@ -269,6 +269,8 @@ export function normalizeOntologyEditCommit(input: OntologyEditCommit): Ontology
|
|
|
269
269
|
})
|
|
270
270
|
|
|
271
271
|
if (input.mode === "continue") {
|
|
272
|
+
if ("vectorWrites" in input)
|
|
273
|
+
throw new MaterializationValidationError("Vector writes require an atomic commit.")
|
|
272
274
|
return Object.freeze({
|
|
273
275
|
mode: "continue",
|
|
274
276
|
source: Object.freeze({
|
|
@@ -293,12 +295,21 @@ export function normalizeOntologyEditCommit(input: OntologyEditCommit): Ontology
|
|
|
293
295
|
kind: "runtime" as const,
|
|
294
296
|
requestId: normalizeNonblank(input.source.requestId, "Runtime request id"),
|
|
295
297
|
})
|
|
298
|
+
if (input.vectorWrites?.length && (operations.length || input.source.kind !== "runtime")) {
|
|
299
|
+
throw new MaterializationValidationError(
|
|
300
|
+
"Vector writes require a dedicated atomic runtime commit."
|
|
301
|
+
)
|
|
302
|
+
}
|
|
303
|
+
if (input.vectorWrites !== undefined) assertJsonValue(input.vectorWrites, "Vector writes")
|
|
296
304
|
const expectedObjects = input.expectedObjects.map(normalizeExpectedObject)
|
|
297
305
|
const expectedLinks = input.expectedLinks.map(normalizeExpectedLink)
|
|
298
306
|
const expectedLinkScopes = input.expectedLinkScopes.map(normalizeExpectedLinkScope)
|
|
299
307
|
|
|
300
308
|
return Object.freeze({
|
|
301
309
|
mode: "atomic",
|
|
310
|
+
...(input.vectorWrites === undefined
|
|
311
|
+
? {}
|
|
312
|
+
: { vectorWrites: structuredClone(input.vectorWrites) }),
|
|
302
313
|
source,
|
|
303
314
|
operations: Object.freeze(operations),
|
|
304
315
|
expectedObjects: deduplicateExpectations(
|
|
@@ -404,7 +404,7 @@ async function executeTelemetryTransaction(
|
|
|
404
404
|
...(command.execution.actor === undefined ? {} : { actor: command.execution.actor }),
|
|
405
405
|
}
|
|
406
406
|
)
|
|
407
|
-
await drainStagedWork(context, storage
|
|
407
|
+
await drainStagedWork(context, storage, session)
|
|
408
408
|
const eventCount = await drainStagedEvents(
|
|
409
409
|
context,
|
|
410
410
|
storage.ontology.materializations,
|
|
@@ -0,0 +1,38 @@
|
|
|
1
|
+
import { RuntimeError } from "../runtime/errors"
|
|
2
|
+
import type { ModelRef } from "./catalog"
|
|
3
|
+
|
|
4
|
+
interface ModelBinding {
|
|
5
|
+
readonly providerId: string
|
|
6
|
+
readonly modelId: string
|
|
7
|
+
}
|
|
8
|
+
|
|
9
|
+
interface ModelEntry<TModel> extends ModelRef {
|
|
10
|
+
readonly model: TModel
|
|
11
|
+
}
|
|
12
|
+
|
|
13
|
+
/** Private index shared by model families; default selection belongs to each family. */
|
|
14
|
+
export function indexModelBindings<TModel extends ModelBinding>(
|
|
15
|
+
models: readonly TModel[],
|
|
16
|
+
kind: string,
|
|
17
|
+
validate: (model: TModel, index: number) => void
|
|
18
|
+
) {
|
|
19
|
+
const byRef = new Map<string, ModelEntry<TModel>>()
|
|
20
|
+
|
|
21
|
+
for (const [index, model] of models.entries()) {
|
|
22
|
+
validate(model, index)
|
|
23
|
+
const key = JSON.stringify([model.providerId, model.modelId])
|
|
24
|
+
if (byRef.has(key)) {
|
|
25
|
+
throw new RuntimeError(
|
|
26
|
+
`[Sixb] Duplicate ${kind} model '${model.providerId}/${model.modelId}' in 'models.${kind}'. Each provider and model id pair may be configured once.`
|
|
27
|
+
)
|
|
28
|
+
}
|
|
29
|
+
|
|
30
|
+
byRef.set(key, Object.freeze({ provider: model.providerId, modelId: model.modelId, model }))
|
|
31
|
+
}
|
|
32
|
+
|
|
33
|
+
const entries = Object.freeze([...byRef.values()])
|
|
34
|
+
return Object.freeze({
|
|
35
|
+
list: () => entries,
|
|
36
|
+
getByRef: (ref: ModelRef) => byRef.get(JSON.stringify([ref.provider, ref.modelId])) ?? null,
|
|
37
|
+
})
|
|
38
|
+
}
|