@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
|
@@ -9,6 +9,8 @@ import type {
|
|
|
9
9
|
import { normalizeDecimalValue } from "../../ontology"
|
|
10
10
|
import { formatUnknownObjectTypeMessage } from "../../ontology/errors"
|
|
11
11
|
import { validatePropertyValue, validateSchemaValue } from "../../ontology/validation"
|
|
12
|
+
import { MAX_VECTOR_K, normalizeVector, vectorConfiguration } from "../vectors/profile"
|
|
13
|
+
import { hasVectorProfile, isVectorProfileQuery } from "../vectors/query"
|
|
12
14
|
import { ObjectQueryValidationError } from "./errors"
|
|
13
15
|
import type {
|
|
14
16
|
ObjectExpansion,
|
|
@@ -18,6 +20,7 @@ import type {
|
|
|
18
20
|
ObjectQueryResultShape,
|
|
19
21
|
ObjectQuerySetOperation,
|
|
20
22
|
ObjectQuerySortField,
|
|
23
|
+
ObjectQueryVector,
|
|
21
24
|
QueryScalarKind,
|
|
22
25
|
} from "./ir"
|
|
23
26
|
import { normalizeObjectQuery } from "./normalize"
|
|
@@ -172,6 +175,7 @@ export function validateObjectQueryWithAdmission(
|
|
|
172
175
|
): AdmittedObjectQuery {
|
|
173
176
|
const normalized = options.normalize === false ? query : normalizeObjectQuery(query)
|
|
174
177
|
const ctx = createValidationContext(options, admission)
|
|
178
|
+
validateVectorComposition(query, ctx)
|
|
175
179
|
const validation = validateQueryNode(normalized, "$", ctx)
|
|
176
180
|
|
|
177
181
|
if (ctx.issues.length > 0) {
|
|
@@ -194,6 +198,7 @@ export function collectObjectQueryValidationIssues(
|
|
|
194
198
|
): readonly ObjectQueryValidationIssue[] {
|
|
195
199
|
const normalized = options.normalize === false ? query : normalizeObjectQuery(query)
|
|
196
200
|
const ctx = createValidationContext(options, NOOP_QUERY_ADMISSION)
|
|
201
|
+
validateVectorComposition(query, ctx)
|
|
197
202
|
validateQueryNode(normalized, "$", ctx)
|
|
198
203
|
return ctx.issues
|
|
199
204
|
}
|
|
@@ -205,6 +210,16 @@ export function resolveObjectQueryResultShape(
|
|
|
205
210
|
return validateObjectQuery(query, options).result
|
|
206
211
|
}
|
|
207
212
|
|
|
213
|
+
function validateVectorComposition(query: ObjectQuery, ctx: QueryValidationContext): void {
|
|
214
|
+
if (hasVectorProfile(query) && !isVectorProfileQuery(query))
|
|
215
|
+
ctx.issues.push({
|
|
216
|
+
path: "$",
|
|
217
|
+
code: "vector.composition",
|
|
218
|
+
message:
|
|
219
|
+
"Vector profiles support one top-k over one concrete type, with filters before ranking and optional limit/project after it.",
|
|
220
|
+
})
|
|
221
|
+
}
|
|
222
|
+
|
|
208
223
|
function createValidationContext(
|
|
209
224
|
options: ObjectQueryValidationOptions,
|
|
210
225
|
admission: ObjectQuerySemanticAdmission
|
|
@@ -312,18 +327,15 @@ function dispatchQueryNode(
|
|
|
312
327
|
}
|
|
313
328
|
case "vector": {
|
|
314
329
|
const input = validateQueryNode(query.input, `${path}.input`, ctx)
|
|
315
|
-
validateVectorQuery(
|
|
316
|
-
query.vector,
|
|
317
|
-
query.propertyId,
|
|
318
|
-
query.k,
|
|
319
|
-
input.result,
|
|
320
|
-
input.admissionState,
|
|
321
|
-
path,
|
|
322
|
-
ctx
|
|
323
|
-
)
|
|
324
330
|
return {
|
|
325
331
|
result: input.result,
|
|
326
|
-
query:
|
|
332
|
+
query: validateVectorProfileQuery(
|
|
333
|
+
{ ...query, input: input.query },
|
|
334
|
+
input.result,
|
|
335
|
+
input.admissionState,
|
|
336
|
+
path,
|
|
337
|
+
ctx
|
|
338
|
+
),
|
|
327
339
|
admissionState: input.admissionState,
|
|
328
340
|
}
|
|
329
341
|
}
|
|
@@ -845,67 +857,63 @@ function validateTextQuery(
|
|
|
845
857
|
return fieldsByObjectType ? { fieldsByObjectType } : {}
|
|
846
858
|
}
|
|
847
859
|
|
|
848
|
-
function
|
|
849
|
-
|
|
850
|
-
propertyId: string,
|
|
851
|
-
k: number,
|
|
860
|
+
function validateVectorProfileQuery(
|
|
861
|
+
query: ObjectQueryVector,
|
|
852
862
|
shape: ObjectQueryResultShape,
|
|
853
|
-
|
|
863
|
+
state: ObjectQueryAdmissionState,
|
|
854
864
|
path: string,
|
|
855
865
|
ctx: QueryValidationContext
|
|
856
|
-
):
|
|
857
|
-
|
|
858
|
-
|
|
859
|
-
|
|
860
|
-
|
|
861
|
-
|
|
862
|
-
|
|
863
|
-
|
|
864
|
-
|
|
865
|
-
|
|
866
|
-
|
|
866
|
+
): ObjectQueryVector {
|
|
867
|
+
const types = getObjectTypesForResult(shape, ctx)
|
|
868
|
+
if (
|
|
869
|
+
types.length !== 1 ||
|
|
870
|
+
!Number.isSafeInteger(query.k) ||
|
|
871
|
+
query.k < 1 ||
|
|
872
|
+
query.k > MAX_VECTOR_K
|
|
873
|
+
) {
|
|
874
|
+
addIssue(
|
|
875
|
+
ctx,
|
|
876
|
+
path,
|
|
877
|
+
"invalid_vector_profile_query",
|
|
878
|
+
`Vector search requires one type, one profile and k between 1 and ${MAX_VECTOR_K}`
|
|
879
|
+
)
|
|
880
|
+
return query
|
|
867
881
|
}
|
|
868
|
-
|
|
869
|
-
|
|
870
|
-
|
|
871
|
-
|
|
872
|
-
|
|
873
|
-
objectTypeId: objectType.id,
|
|
874
|
-
use: "vector",
|
|
882
|
+
let input = query.input
|
|
883
|
+
while (input.kind === "filter") input = input.input
|
|
884
|
+
if (input.kind !== "start" || input.includeSubtypes)
|
|
885
|
+
addIssue(
|
|
886
|
+
ctx,
|
|
875
887
|
path,
|
|
876
|
-
|
|
877
|
-
|
|
878
|
-
|
|
879
|
-
|
|
880
|
-
|
|
881
|
-
|
|
882
|
-
|
|
883
|
-
|
|
884
|
-
|
|
885
|
-
|
|
886
|
-
|
|
887
|
-
|
|
888
|
-
|
|
889
|
-
|
|
890
|
-
|
|
891
|
-
|
|
892
|
-
|
|
893
|
-
|
|
894
|
-
|
|
895
|
-
|
|
896
|
-
`Object type '${objectType.id}' must declare search.vector.property '${propertyId}' before vector search can use it`
|
|
897
|
-
)
|
|
898
|
-
}
|
|
899
|
-
|
|
900
|
-
const schema = resolveSchemaForProperty(property, objectType.id, ctx, path)
|
|
901
|
-
if (schema && !isVectorSchema(schema, ctx)) {
|
|
902
|
-
addIssue(
|
|
903
|
-
ctx,
|
|
904
|
-
path,
|
|
905
|
-
"vector_property_not_numeric_array",
|
|
906
|
-
`Vector query property '${propertyId}' on '${objectType.id}' must be a numeric array`
|
|
907
|
-
)
|
|
888
|
+
"unsupported_vector_composition",
|
|
889
|
+
"Vector profile input must be a type with optional filters."
|
|
890
|
+
)
|
|
891
|
+
const objectType = types[0]!
|
|
892
|
+
const profile =
|
|
893
|
+
query.profile === undefined ? undefined : objectType.search?.vectors?.[query.profile]
|
|
894
|
+
if (!profile) {
|
|
895
|
+
addIssue(ctx, path, "unknown_vector_profile", `Unknown vector profile: ${query.profile}`)
|
|
896
|
+
return query
|
|
897
|
+
}
|
|
898
|
+
for (const propertyId of profile.source)
|
|
899
|
+
admitProperty(ctx, { state, propertyId, objectTypeId: objectType.id, use: "vector", path })
|
|
900
|
+
let values = query.vector
|
|
901
|
+
try {
|
|
902
|
+
if (typeof values === "string") {
|
|
903
|
+
if (!values.trim() || values.length > 8000) {
|
|
904
|
+
throw new Error("Vector search text must be nonempty and at most 8000 characters.")
|
|
905
|
+
}
|
|
906
|
+
} else {
|
|
907
|
+
values = normalizeVector(values, profile.model.definition.dimensions)
|
|
908
908
|
}
|
|
909
|
+
} catch (error) {
|
|
910
|
+
addIssue(ctx, path, "invalid_vector", error instanceof Error ? error.message : "Invalid vector")
|
|
911
|
+
}
|
|
912
|
+
return {
|
|
913
|
+
...query,
|
|
914
|
+
vector: values,
|
|
915
|
+
source: [...profile.source],
|
|
916
|
+
configuration: vectorConfiguration(profile),
|
|
909
917
|
}
|
|
910
918
|
}
|
|
911
919
|
|
|
@@ -1515,7 +1523,7 @@ function assertStaticSearchProperty(
|
|
|
1515
1523
|
function assertQueryFlag(
|
|
1516
1524
|
objectTypeId: string,
|
|
1517
1525
|
property: Property,
|
|
1518
|
-
flag: "text"
|
|
1526
|
+
flag: "text",
|
|
1519
1527
|
context: string,
|
|
1520
1528
|
path: string,
|
|
1521
1529
|
ctx: QueryValidationContext
|
|
@@ -1607,13 +1615,6 @@ function isContainsSchema(schema: Schema): boolean {
|
|
|
1607
1615
|
)
|
|
1608
1616
|
}
|
|
1609
1617
|
|
|
1610
|
-
function isVectorSchema(schema: Schema, ctx: QueryValidationContext): boolean {
|
|
1611
|
-
if (typeof schema === "string") return false
|
|
1612
|
-
if (schema.type !== "array") return false
|
|
1613
|
-
const itemSchema = resolveSchema(schema.items, ctx.valueTypesById)
|
|
1614
|
-
return itemSchema === "integer" || itemSchema === "double" || itemSchema === "decimal"
|
|
1615
|
-
}
|
|
1616
|
-
|
|
1617
1618
|
function keyForTypeIds(typeIds: readonly string[]): string {
|
|
1618
1619
|
return uniqueStrings(typeIds).sort().join("\0")
|
|
1619
1620
|
}
|
|
@@ -3,6 +3,7 @@
|
|
|
3
3
|
* Created via `sixb.objects(MyType).byId("id-1")`, it provides link/unlink and
|
|
4
4
|
* per-property telemetry appenders with compile-time unit and value type safety.
|
|
5
5
|
*/
|
|
6
|
+
|
|
6
7
|
import type { ActionDefinition } from "../../actions"
|
|
7
8
|
import type { ObjectLink, ObjectRef, ValueType } from "../../ontology"
|
|
8
9
|
import { OntologyValidationError } from "../../ontology/errors"
|
|
@@ -16,6 +17,7 @@ import {
|
|
|
16
17
|
import type { ExecutionObjectContext, ResolvedLinkContext } from "../context"
|
|
17
18
|
import { removeLink as removeLinkLeaf, upsertLink as upsertLinkLeaf } from "../link"
|
|
18
19
|
import { deleteObject, restoreObject } from "../object"
|
|
20
|
+
import { createObjectVectorHandle } from "../vectors/handle"
|
|
19
21
|
import { createTelemetryChannel } from "./telemetry-channel"
|
|
20
22
|
|
|
21
23
|
type ObjectRefInput = ObjectRef
|
|
@@ -26,6 +28,7 @@ export function createObjectByIdHandle<
|
|
|
26
28
|
TValueTypes extends readonly ValueType[],
|
|
27
29
|
>(ctx: ExecutionObjectContext, primaryId: string): ObjectByIdHandle<TObjectType, TValueTypes> {
|
|
28
30
|
const objectHandle = {
|
|
31
|
+
vector: (profileName: string) => createObjectVectorHandle(ctx, primaryId, profileName),
|
|
29
32
|
get: async () => {
|
|
30
33
|
const row = await ctx.objectReader.getByPrimaryId({
|
|
31
34
|
objectTypeId: ctx.objectType.id,
|
|
@@ -93,14 +93,17 @@ class ObjectQueryBuilderImpl<
|
|
|
93
93
|
}
|
|
94
94
|
|
|
95
95
|
vector(
|
|
96
|
-
|
|
97
|
-
vector:
|
|
96
|
+
profile: string,
|
|
97
|
+
vector: string,
|
|
98
98
|
options: { k: number }
|
|
99
99
|
): ObjectQueryBuilder<TObjectType, TRegisteredObjectTypes, TValueTypes> {
|
|
100
|
+
if (typeof profile !== "string" || typeof vector !== "string") {
|
|
101
|
+
throw new Error("[Sixb] Vector search requires a named profile and search text")
|
|
102
|
+
}
|
|
100
103
|
return this.withQuery({
|
|
101
104
|
kind: "vector",
|
|
102
105
|
input: this.ir,
|
|
103
|
-
|
|
106
|
+
profile,
|
|
104
107
|
vector,
|
|
105
108
|
k: options.k,
|
|
106
109
|
})
|
|
@@ -227,9 +230,11 @@ class ObjectQueryBuilderImpl<
|
|
|
227
230
|
async list(): Promise<ListResult<TwinObject<TObjectType, TValueTypes>>>
|
|
228
231
|
async list(options: {
|
|
229
232
|
includeTotal: false
|
|
233
|
+
signal?: AbortSignal
|
|
230
234
|
}): Promise<ListResultWithoutTotal<TwinObject<TObjectType, TValueTypes>>>
|
|
231
235
|
async list(options: {
|
|
232
236
|
includeTotal?: true
|
|
237
|
+
signal?: AbortSignal
|
|
233
238
|
}): Promise<ListResult<TwinObject<TObjectType, TValueTypes>>>
|
|
234
239
|
async list(
|
|
235
240
|
options?: ObjectQueryListOptions
|
|
@@ -239,6 +244,7 @@ class ObjectQueryBuilderImpl<
|
|
|
239
244
|
> {
|
|
240
245
|
const result = await this.params.executor.list(this.ir, {
|
|
241
246
|
includeTotal: options?.includeTotal,
|
|
247
|
+
signal: options?.signal,
|
|
242
248
|
})
|
|
243
249
|
const objects = result.objects.map(
|
|
244
250
|
(row) => row as unknown as TwinObject<TObjectType, TValueTypes>
|
|
@@ -11,6 +11,7 @@ import type { ObjectQuery } from "../query/ir"
|
|
|
11
11
|
import type { ValidatedObjectQuery } from "../query/validate"
|
|
12
12
|
|
|
13
13
|
export type ObjectQueryExecutorRow = {
|
|
14
|
+
score?: number
|
|
14
15
|
primaryId: string
|
|
15
16
|
objectTypeId: string
|
|
16
17
|
properties: Record<string, unknown>
|
|
@@ -47,7 +48,7 @@ export type ObjectQueryExecutorFacetRequest = {
|
|
|
47
48
|
export interface ObjectQueryExecutor {
|
|
48
49
|
list(
|
|
49
50
|
query: ObjectQuery,
|
|
50
|
-
options?: { includeTotal?: boolean }
|
|
51
|
+
options?: { includeTotal?: boolean; signal?: AbortSignal }
|
|
51
52
|
): Promise<ObjectQueryExecutorListResult>
|
|
52
53
|
count(query: ObjectQuery): Promise<number>
|
|
53
54
|
exists(query: ObjectQuery): Promise<boolean>
|
|
@@ -19,9 +19,13 @@ export function createRuntimeQueryExecutor(params: {
|
|
|
19
19
|
const { ontology, objectReader } = params
|
|
20
20
|
|
|
21
21
|
return {
|
|
22
|
-
async list(query: ObjectQuery, options?: { includeTotal?: boolean }) {
|
|
22
|
+
async list(query: ObjectQuery, options?: { includeTotal?: boolean; signal?: AbortSignal }) {
|
|
23
23
|
try {
|
|
24
|
-
return await objectReader.executeQuery({
|
|
24
|
+
return await objectReader.executeQuery({
|
|
25
|
+
query,
|
|
26
|
+
includeTotal: options?.includeTotal,
|
|
27
|
+
signal: options?.signal,
|
|
28
|
+
})
|
|
25
29
|
} catch (error) {
|
|
26
30
|
if (error instanceof ObjectQueryPlanningError) {
|
|
27
31
|
throw addSdkPlanningHints(error)
|
|
@@ -0,0 +1,59 @@
|
|
|
1
|
+
# Vector indexing
|
|
2
|
+
|
|
3
|
+
A named profile identifies a derived representation, separate from object properties.
|
|
4
|
+
|
|
5
|
+
```text
|
|
6
|
+
Effective object change → invalidate stale vector + persist latest intent (one transaction)
|
|
7
|
+
ProjectionWorker → durable queue → project AI admission → provider → save result → fenced commit
|
|
8
|
+
```
|
|
9
|
+
|
|
10
|
+
`materializer/effective/vector-indexing.ts` compares effective source fingerprints after projection
|
|
11
|
+
conflict resolution, including managed overrides. New objects schedule every profile. Unrelated
|
|
12
|
+
changes schedule nothing. Deletion removes intent; each new generation replaces the old id.
|
|
13
|
+
There is no historical scan or configuration-only backfill.
|
|
14
|
+
|
|
15
|
+
The queue owns delivery leases. Ontology storage owns intent keyed by project/object/profile, plus
|
|
16
|
+
its generation id and `pending → running → ready` state. Dispatch has a separate due time so long
|
|
17
|
+
queues cannot starve later entries. Reconciliation can enqueue the same generation safely.
|
|
18
|
+
|
|
19
|
+
`indexing.ts` exposes only a core-owned processing capability. Kernel authority cannot bind the
|
|
20
|
+
public domain SDK. `ontology.indexVectors` authorizes only the persisted results of its work item or durable group.
|
|
21
|
+
The Materializer checks membership, identity, values and each object/vector revision in the transaction. Execution provenance
|
|
22
|
+
references the source ontology commit; requester and groups are empty, so only project budgets apply.
|
|
23
|
+
|
|
24
|
+
The durable `running` fence precedes admission, so superseded work cannot reserve budget. The
|
|
25
|
+
provider starts only after both succeed. An admission rejection returns work to pending for retry.
|
|
26
|
+
Redelivered `running` work has an uncertain provider outcome: fail visibly through `onError`, never
|
|
27
|
+
silently repeat inference. The provider may have billed a lost response. Failures remain inspectable until superseded or explicitly indexed.
|
|
28
|
+
|
|
29
|
+
Persist `ready` values before committing. On unrelated edits, reprepare the object revision and reuse
|
|
30
|
+
those values. Source changes, deletion/recreation, or configuration mismatch discard obsolete work.
|
|
31
|
+
A vector-only commit never schedules itself. Manual indexing remains available through authorized
|
|
32
|
+
SDK executions; its valid result also makes queued work unnecessary.
|
|
33
|
+
|
|
34
|
+
Projection replacement assigns `batchId` within each materialization page: same object type,
|
|
35
|
+
profile, configuration and source commit, at most 32 members / 32 KiB of serialized source text.
|
|
36
|
+
Membership is stored alongside intent in the activation transaction; there is no fill timer, process
|
|
37
|
+
buffer or cross-run aggregation. An oversized text is isolated, never truncated.
|
|
38
|
+
|
|
39
|
+
Dispatch uses the group id. Processing reads current members, drops obsolete work, and splits them
|
|
40
|
+
to the adapter's optional `EmbeddingModel.batching` count / UTF-8 byte bounds. Unknown bounds or
|
|
41
|
+
oversized inputs use individual calls. Search, explicit indexing and managed edits stay individual.
|
|
42
|
+
Each actual provider request produces one usage/cost record, under the project's group execution.
|
|
43
|
+
Admission claims all prepared members atomically before reserving budget; a superseded member
|
|
44
|
+
aborts that claim. Results become ready atomically for surviving members, then publish together in
|
|
45
|
+
one materialization transaction. PostgreSQL groups vector writes and intent cleanup in SQL; SQLite
|
|
46
|
+
reuses prepared statements within that transaction. Every object and vector retains its own revision
|
|
47
|
+
fence. A conflict rolls back publication and reprepares the current subset without inference. After
|
|
48
|
+
three conflicts, individual publication lets stable peers finish while contended members are deferred.
|
|
49
|
+
Restarted ready members only retry storage; running members fail with an unknown outcome.
|
|
50
|
+
A partly processed group publishes ready members together and resumes other members individually.
|
|
51
|
+
|
|
52
|
+
Network calls never hold storage transactions. Applications without projections do not start this
|
|
53
|
+
indexing consumer. Byte bounds are conservative transport eligibility, not the accounting layer's
|
|
54
|
+
token estimate; they do not reject or truncate a text that can still be sent individually.
|
|
55
|
+
|
|
56
|
+
Terminal failures persist a canonical `SixbFailure` before `onError`: `vector.model_unavailable`,
|
|
57
|
+
`vector.response_invalid`, or `vector.outcome_unknown` for interrupted calls. Unclassified failures
|
|
58
|
+
use `internal.unexpected`. These codes never authorize automatic inference retries. Accounting uses
|
|
59
|
+
`ModelExecutionSession`; its existing recovery consumer can replay accounting without inference.
|
|
@@ -0,0 +1,91 @@
|
|
|
1
|
+
import { randomUUID } from "node:crypto"
|
|
2
|
+
import { assertCanEdit } from "../../authorization"
|
|
3
|
+
import { AuthorizationError } from "../../authorization/errors"
|
|
4
|
+
import { MaterializationValidationError } from "../../materialization/errors"
|
|
5
|
+
import type { PreparedObjectVector } from "../../materialization/vectors"
|
|
6
|
+
import { sameEmbeddingModel } from "../../models/embedding-model"
|
|
7
|
+
import { getOntologyMutationRuntime } from "../../runtime/ontology-mutations"
|
|
8
|
+
import type { ExecutionObjectContext } from "../context"
|
|
9
|
+
import { normalizeVector, vectorConfiguration, vectorSources } from "./profile"
|
|
10
|
+
import type { ObjectVectorHandle } from "./types"
|
|
11
|
+
|
|
12
|
+
export function createObjectVectorHandle(
|
|
13
|
+
ctx: ExecutionObjectContext,
|
|
14
|
+
primaryId: string,
|
|
15
|
+
profileName: string
|
|
16
|
+
): ObjectVectorHandle {
|
|
17
|
+
const ref = Object.freeze({ objectTypeId: ctx.objectType.id, primaryId })
|
|
18
|
+
const profileDefinition = ctx.ontology.resolveObjectType(ref.objectTypeId).search?.vectors?.[
|
|
19
|
+
profileName
|
|
20
|
+
]
|
|
21
|
+
if (!profileDefinition)
|
|
22
|
+
throw new MaterializationValidationError(`Unknown vector profile: ${profileName}`)
|
|
23
|
+
const vectors = ctx.storage.ontology.vectors
|
|
24
|
+
if (!vectors)
|
|
25
|
+
throw new MaterializationValidationError("Storage does not support vector profiles.")
|
|
26
|
+
|
|
27
|
+
const assertReadable = async () => {
|
|
28
|
+
const allowed = await ctx.objectReader.canReadObjectPropertiesBatch({
|
|
29
|
+
items: profileDefinition.source.map((propertyId) => ({ ...ref, propertyId })),
|
|
30
|
+
})
|
|
31
|
+
if (allowed.some((value) => !value))
|
|
32
|
+
throw new AuthorizationError(
|
|
33
|
+
`view:object:${ref.objectTypeId}`,
|
|
34
|
+
"[Sixb] Vector profile requires access to all its source properties."
|
|
35
|
+
)
|
|
36
|
+
}
|
|
37
|
+
|
|
38
|
+
return Object.freeze({
|
|
39
|
+
async index(): Promise<void> {
|
|
40
|
+
assertCanEdit(ctx, ref.objectTypeId)
|
|
41
|
+
await assertReadable()
|
|
42
|
+
const mutations = getOntologyMutationRuntime(ctx)
|
|
43
|
+
const model = ctx.embeddingModels?.getByRef({
|
|
44
|
+
provider: profileDefinition.model.providerId,
|
|
45
|
+
modelId: profileDefinition.model.modelId,
|
|
46
|
+
})?.model
|
|
47
|
+
if (!model || !sameEmbeddingModel(model, profileDefinition.model)) {
|
|
48
|
+
throw new MaterializationValidationError(
|
|
49
|
+
`Vector profile '${profileName}' requires its configured embedding model.`
|
|
50
|
+
)
|
|
51
|
+
}
|
|
52
|
+
const row = await ctx.objectReader.getByPrimaryId(ref)
|
|
53
|
+
if (!row) throw new MaterializationValidationError("Cannot index a missing object.")
|
|
54
|
+
const current = (await vectors.list({ projectId: ctx.projectId, ref })).find(
|
|
55
|
+
(entry) => entry.profile === profileName
|
|
56
|
+
)
|
|
57
|
+
const input: PreparedObjectVector = {
|
|
58
|
+
projectId: ctx.projectId,
|
|
59
|
+
ref,
|
|
60
|
+
profile: profileName,
|
|
61
|
+
configuration: vectorConfiguration(profileDefinition),
|
|
62
|
+
...vectorSources(profileDefinition.source, row.properties),
|
|
63
|
+
expectedObject: { ref, exists: true, version: row.version, lastCommitId: row.lastCommitId },
|
|
64
|
+
expectedVectorCommitId: current?.lastCommitId ?? null,
|
|
65
|
+
}
|
|
66
|
+
|
|
67
|
+
// Network work never holds a storage transaction or retries an obsolete computation.
|
|
68
|
+
const result = await model.embed({ texts: [input.text] })
|
|
69
|
+
if (!Array.isArray(result?.vectors) || result.vectors.length !== 1) {
|
|
70
|
+
throw new MaterializationValidationError(
|
|
71
|
+
"Embedding model must return exactly one vector for one input text."
|
|
72
|
+
)
|
|
73
|
+
}
|
|
74
|
+
const values = normalizeVector(
|
|
75
|
+
result.vectors[0]!,
|
|
76
|
+
profileDefinition.model.definition.dimensions
|
|
77
|
+
)
|
|
78
|
+
assertCanEdit(ctx, ref.objectTypeId)
|
|
79
|
+
await assertReadable()
|
|
80
|
+
await mutations.commitEdits({
|
|
81
|
+
mode: "atomic",
|
|
82
|
+
source: { kind: "runtime", requestId: randomUUID() },
|
|
83
|
+
operations: [],
|
|
84
|
+
vectorWrites: [{ input, values }],
|
|
85
|
+
expectedObjects: [input.expectedObject],
|
|
86
|
+
expectedLinks: [],
|
|
87
|
+
expectedLinkScopes: [],
|
|
88
|
+
})
|
|
89
|
+
},
|
|
90
|
+
})
|
|
91
|
+
}
|
|
@@ -0,0 +1,163 @@
|
|
|
1
|
+
import type { OntologyMaterializerContract } from "../../materializer/materializer"
|
|
2
|
+
import type { EmbeddingBatchLimits } from "../../models/embedding-model"
|
|
3
|
+
import type { SixbHostContext } from "../../runtime/types"
|
|
4
|
+
import type { VectorIndexingWork } from "../../storage/ontology/vector-indexing"
|
|
5
|
+
import { generateVectors, type PreparedIndexingWork } from "./indexing-generate"
|
|
6
|
+
import { indexingScope, prepare, VectorIndexingDeferred } from "./indexing-shared"
|
|
7
|
+
import { processVector } from "./indexing-single"
|
|
8
|
+
import { storeVectorBatch } from "./indexing-store-batch"
|
|
9
|
+
|
|
10
|
+
/** Membership was persisted by one projection commit; there is no fill timer or memory queue. */
|
|
11
|
+
export async function processVectorBatch(
|
|
12
|
+
runtime: SixbHostContext,
|
|
13
|
+
materializer: OntologyMaterializerContract,
|
|
14
|
+
batchId: string,
|
|
15
|
+
batch: readonly VectorIndexingWork[],
|
|
16
|
+
attempt: number,
|
|
17
|
+
signal: AbortSignal
|
|
18
|
+
): Promise<void> {
|
|
19
|
+
if (batch.some((work) => work.status !== "pending")) {
|
|
20
|
+
await resumeBatch(runtime, materializer, batchId, batch, attempt, signal)
|
|
21
|
+
return
|
|
22
|
+
}
|
|
23
|
+
|
|
24
|
+
const entries = await prepareBatch(runtime, batch, signal)
|
|
25
|
+
const first = entries[0]
|
|
26
|
+
if (!first) return
|
|
27
|
+
|
|
28
|
+
const limits = getBatchLimits(runtime, first.work)
|
|
29
|
+
if (!limits) {
|
|
30
|
+
// Unknown provider batch limits: embed each object/profile individually.
|
|
31
|
+
for (const { work } of entries) {
|
|
32
|
+
await processVector(runtime, materializer, work.id, attempt, signal)
|
|
33
|
+
}
|
|
34
|
+
return
|
|
35
|
+
}
|
|
36
|
+
|
|
37
|
+
assertCompatibleEntries(entries, first.work)
|
|
38
|
+
const scope = await indexingScope(runtime, first.work, batchId)
|
|
39
|
+
|
|
40
|
+
for (const group of partition(entries, limits)) {
|
|
41
|
+
if (group.length === 1) {
|
|
42
|
+
await processVector(runtime, materializer, group[0]!.work.id, attempt, signal)
|
|
43
|
+
} else {
|
|
44
|
+
await generateVectors(runtime, group, scope, attempt, signal)
|
|
45
|
+
}
|
|
46
|
+
}
|
|
47
|
+
|
|
48
|
+
await storeVectorBatch(runtime, materializer, batchId, scope, signal)
|
|
49
|
+
}
|
|
50
|
+
|
|
51
|
+
/** Resume storage or terminalize interrupted calls; never repeat paid inference. */
|
|
52
|
+
async function resumeBatch(
|
|
53
|
+
runtime: SixbHostContext,
|
|
54
|
+
materializer: OntologyMaterializerContract,
|
|
55
|
+
batchId: string,
|
|
56
|
+
batch: readonly VectorIndexingWork[],
|
|
57
|
+
attempt: number,
|
|
58
|
+
signal: AbortSignal
|
|
59
|
+
): Promise<void> {
|
|
60
|
+
const ready = batch.find((work) => work.status === "ready")
|
|
61
|
+
if (ready) {
|
|
62
|
+
const scope = await indexingScope(runtime, ready, batchId)
|
|
63
|
+
await storeVectorBatch(runtime, materializer, batchId, scope, signal)
|
|
64
|
+
}
|
|
65
|
+
|
|
66
|
+
for (const work of batch) {
|
|
67
|
+
if (work.status !== "ready") {
|
|
68
|
+
await processVector(runtime, materializer, work.id, attempt, signal)
|
|
69
|
+
}
|
|
70
|
+
}
|
|
71
|
+
}
|
|
72
|
+
|
|
73
|
+
async function prepareBatch(
|
|
74
|
+
runtime: SixbHostContext,
|
|
75
|
+
batch: readonly VectorIndexingWork[],
|
|
76
|
+
signal: AbortSignal
|
|
77
|
+
): Promise<PreparedIndexingWork[]> {
|
|
78
|
+
const availableAt = batch.reduce(
|
|
79
|
+
(latest, work) => (work.availableAt > latest ? work.availableAt : latest),
|
|
80
|
+
""
|
|
81
|
+
)
|
|
82
|
+
if (Date.parse(availableAt) > Date.now()) {
|
|
83
|
+
throw new VectorIndexingDeferred(availableAt)
|
|
84
|
+
}
|
|
85
|
+
|
|
86
|
+
const entries: PreparedIndexingWork[] = []
|
|
87
|
+
const indexing = runtime.storage.ontology.vectorIndexing!
|
|
88
|
+
|
|
89
|
+
for (const work of batch) {
|
|
90
|
+
signal.throwIfAborted()
|
|
91
|
+
const input = await prepare(runtime, work)
|
|
92
|
+
|
|
93
|
+
if (input) {
|
|
94
|
+
entries.push({ work, input })
|
|
95
|
+
} else {
|
|
96
|
+
await indexing.remove({ projectId: runtime.projectId, id: work.id })
|
|
97
|
+
}
|
|
98
|
+
}
|
|
99
|
+
|
|
100
|
+
return entries
|
|
101
|
+
}
|
|
102
|
+
|
|
103
|
+
function getBatchLimits(
|
|
104
|
+
runtime: SixbHostContext,
|
|
105
|
+
work: VectorIndexingWork
|
|
106
|
+
): EmbeddingBatchLimits | undefined {
|
|
107
|
+
const profile = runtime.ontology.resolveObjectType(work.ref.objectTypeId).search!.vectors![
|
|
108
|
+
work.profile
|
|
109
|
+
]!
|
|
110
|
+
|
|
111
|
+
return runtime.embeddingModels?.getByRef({
|
|
112
|
+
provider: profile.model.providerId,
|
|
113
|
+
modelId: profile.model.modelId,
|
|
114
|
+
})?.model.batching
|
|
115
|
+
}
|
|
116
|
+
|
|
117
|
+
/** Do not mix commits or configurations, even with malformed storage membership. */
|
|
118
|
+
function assertCompatibleEntries(
|
|
119
|
+
entries: readonly PreparedIndexingWork[],
|
|
120
|
+
reference: VectorIndexingWork
|
|
121
|
+
): void {
|
|
122
|
+
const incompatible = entries.some(
|
|
123
|
+
({ work }) =>
|
|
124
|
+
work.sourceCommitId !== reference.sourceCommitId ||
|
|
125
|
+
work.ref.objectTypeId !== reference.ref.objectTypeId ||
|
|
126
|
+
work.profile !== reference.profile ||
|
|
127
|
+
work.configuration !== reference.configuration
|
|
128
|
+
)
|
|
129
|
+
|
|
130
|
+
if (incompatible) {
|
|
131
|
+
throw new Error("[Sixb] Incompatible vector batch membership.")
|
|
132
|
+
}
|
|
133
|
+
}
|
|
134
|
+
|
|
135
|
+
/** Split an already durable, bounded page; never wait for more work or truncate input. */
|
|
136
|
+
function* partition(entries: readonly PreparedIndexingWork[], limits: EmbeddingBatchLimits) {
|
|
137
|
+
let group: PreparedIndexingWork[] = []
|
|
138
|
+
let bytes = 0
|
|
139
|
+
|
|
140
|
+
for (const entry of entries) {
|
|
141
|
+
const size = Buffer.byteLength(entry.input.text)
|
|
142
|
+
const exceedsGroupLimit =
|
|
143
|
+
group.length >= limits.maxInputs ||
|
|
144
|
+
bytes + size > limits.maxTotalInputBytes ||
|
|
145
|
+
size > limits.maxInputBytes
|
|
146
|
+
|
|
147
|
+
if (group.length > 0 && exceedsGroupLimit) {
|
|
148
|
+
yield group
|
|
149
|
+
group = []
|
|
150
|
+
bytes = 0
|
|
151
|
+
}
|
|
152
|
+
|
|
153
|
+
if (size > limits.maxInputBytes || size > limits.maxTotalInputBytes) {
|
|
154
|
+
yield [entry]
|
|
155
|
+
continue
|
|
156
|
+
}
|
|
157
|
+
|
|
158
|
+
group.push(entry)
|
|
159
|
+
bytes += size
|
|
160
|
+
}
|
|
161
|
+
|
|
162
|
+
if (group.length > 0) yield group
|
|
163
|
+
}
|