@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
|
@@ -0,0 +1,184 @@
|
|
|
1
|
+
import { createSixbError, isSixbError } from "../../errors/internal"
|
|
2
|
+
import type { ExecutionScope } from "../../execution/types"
|
|
3
|
+
import type { PreparedObjectVector } from "../../materialization/vectors"
|
|
4
|
+
import {
|
|
5
|
+
EmbeddingModelResponseError,
|
|
6
|
+
type EmbeddingModelResult,
|
|
7
|
+
sameEmbeddingModel,
|
|
8
|
+
} from "../../models/embedding-model"
|
|
9
|
+
import { bindEmbeddingModels } from "../../models/execution/embedding"
|
|
10
|
+
import { ModelExecutionSession } from "../../models/execution/session"
|
|
11
|
+
import type { SixbHostContext } from "../../runtime/types"
|
|
12
|
+
import type { VectorIndexingWork } from "../../storage/ontology/vector-indexing"
|
|
13
|
+
import { fail, retryAt, VectorIndexingDeferred } from "./indexing-shared"
|
|
14
|
+
import { normalizeVector } from "./profile"
|
|
15
|
+
|
|
16
|
+
export interface PreparedIndexingWork {
|
|
17
|
+
readonly work: VectorIndexingWork
|
|
18
|
+
readonly input: PreparedObjectVector
|
|
19
|
+
}
|
|
20
|
+
|
|
21
|
+
interface GenerationAttempt {
|
|
22
|
+
readonly runtime: SixbHostContext
|
|
23
|
+
readonly entries: readonly PreparedIndexingWork[]
|
|
24
|
+
readonly signal: AbortSignal
|
|
25
|
+
/** Running means the durable claim succeeded; budget admission may still be pending. */
|
|
26
|
+
phase: "pending" | "claiming" | "running"
|
|
27
|
+
}
|
|
28
|
+
|
|
29
|
+
/** One accounted provider call, with durable admission and atomic result persistence. */
|
|
30
|
+
export async function generateVectors(
|
|
31
|
+
runtime: SixbHostContext,
|
|
32
|
+
entries: readonly PreparedIndexingWork[],
|
|
33
|
+
scope: ExecutionScope,
|
|
34
|
+
attempt: number,
|
|
35
|
+
signal: AbortSignal
|
|
36
|
+
): Promise<void> {
|
|
37
|
+
const first = entries[0]!
|
|
38
|
+
const profile = runtime.ontology.resolveObjectType(first.work.ref.objectTypeId).search!.vectors![
|
|
39
|
+
first.work.profile
|
|
40
|
+
]!
|
|
41
|
+
const generation: GenerationAttempt = { runtime, entries, signal, phase: "pending" }
|
|
42
|
+
|
|
43
|
+
const session = new ModelExecutionSession(
|
|
44
|
+
{ ...runtime, runtimeAuthorization: scope.authorization },
|
|
45
|
+
scope.execution
|
|
46
|
+
)
|
|
47
|
+
session.bind({
|
|
48
|
+
attempt,
|
|
49
|
+
signal,
|
|
50
|
+
embeddingAdmission: (admit) => admitGeneration(generation, admit),
|
|
51
|
+
})
|
|
52
|
+
|
|
53
|
+
try {
|
|
54
|
+
const model = bindEmbeddingModels(runtime.embeddingModels, session)?.getByRef({
|
|
55
|
+
provider: profile.model.providerId,
|
|
56
|
+
modelId: profile.model.modelId,
|
|
57
|
+
})?.model
|
|
58
|
+
|
|
59
|
+
if (!model || !sameEmbeddingModel(model, profile.model)) {
|
|
60
|
+
throw createSixbError(
|
|
61
|
+
"vector.model_unavailable",
|
|
62
|
+
"[Sixb] Vector indexing requires the profile's configured embedding model."
|
|
63
|
+
)
|
|
64
|
+
}
|
|
65
|
+
|
|
66
|
+
const result = await model.embed({ texts: entries.map((entry) => entry.input.text), signal })
|
|
67
|
+
const values = normalizeEmbeddingResult(
|
|
68
|
+
result,
|
|
69
|
+
entries.length,
|
|
70
|
+
profile.model.definition.dimensions
|
|
71
|
+
)
|
|
72
|
+
|
|
73
|
+
// Persist every surviving result atomically before any vector is published.
|
|
74
|
+
await runtime.storage.ontology.vectorIndexing!.updateBatch({
|
|
75
|
+
projectId: runtime.projectId,
|
|
76
|
+
updates: entries.map(({ work }, index) => ({
|
|
77
|
+
id: work.id,
|
|
78
|
+
expectedStatus: "running",
|
|
79
|
+
status: "ready",
|
|
80
|
+
values: values[index]!,
|
|
81
|
+
availableAt: new Date().toISOString(),
|
|
82
|
+
})),
|
|
83
|
+
})
|
|
84
|
+
} catch (error) {
|
|
85
|
+
await handleGenerationFailure(generation, error)
|
|
86
|
+
}
|
|
87
|
+
}
|
|
88
|
+
|
|
89
|
+
async function admitGeneration(
|
|
90
|
+
generation: GenerationAttempt,
|
|
91
|
+
admit: () => Promise<void>
|
|
92
|
+
): Promise<void> {
|
|
93
|
+
generation.signal.throwIfAborted()
|
|
94
|
+
generation.phase = "claiming"
|
|
95
|
+
|
|
96
|
+
const claimed = await transitionWork(generation, "pending", "running", { requireAll: true })
|
|
97
|
+
generation.phase = claimed ? "running" : "pending"
|
|
98
|
+
|
|
99
|
+
if (!claimed) {
|
|
100
|
+
if (generation.entries.length === 1) {
|
|
101
|
+
throw new Error("[Sixb] Vector indexing request was superseded.")
|
|
102
|
+
}
|
|
103
|
+
throw new VectorIndexingDeferred(new Date().toISOString())
|
|
104
|
+
}
|
|
105
|
+
|
|
106
|
+
try {
|
|
107
|
+
await admit()
|
|
108
|
+
} catch (error) {
|
|
109
|
+
await transitionWork(generation, "running", "pending")
|
|
110
|
+
generation.phase = "pending"
|
|
111
|
+
throw error
|
|
112
|
+
}
|
|
113
|
+
}
|
|
114
|
+
|
|
115
|
+
function normalizeEmbeddingResult(
|
|
116
|
+
result: EmbeddingModelResult,
|
|
117
|
+
count: number,
|
|
118
|
+
dimensions: number
|
|
119
|
+
): readonly (readonly number[])[] {
|
|
120
|
+
try {
|
|
121
|
+
if (!Array.isArray(result?.vectors) || result.vectors.length !== count) {
|
|
122
|
+
throw new Error("Unexpected vector count")
|
|
123
|
+
}
|
|
124
|
+
|
|
125
|
+
return result.vectors.map((vector) => normalizeVector(vector, dimensions))
|
|
126
|
+
} catch (cause) {
|
|
127
|
+
throw createSixbError("vector.response_invalid", "[Sixb] Invalid embedding batch response.", {
|
|
128
|
+
cause,
|
|
129
|
+
})
|
|
130
|
+
}
|
|
131
|
+
}
|
|
132
|
+
|
|
133
|
+
async function handleGenerationFailure(
|
|
134
|
+
generation: GenerationAttempt,
|
|
135
|
+
error: unknown
|
|
136
|
+
): Promise<void> {
|
|
137
|
+
// No provider call can start while the storage claim is unresolved. Retry delivery,
|
|
138
|
+
// not inference; an ambiguously committed claim will be fenced as running on redelivery.
|
|
139
|
+
if (generation.phase === "claiming" || error instanceof VectorIndexingDeferred) {
|
|
140
|
+
throw error
|
|
141
|
+
}
|
|
142
|
+
|
|
143
|
+
if (generation.phase === "pending") {
|
|
144
|
+
if (
|
|
145
|
+
isSixbError(error) &&
|
|
146
|
+
(error.code === "ai.usage_limit_exceeded" || error.code === "ai.usage_limit_unavailable")
|
|
147
|
+
) {
|
|
148
|
+
const availableAt = retryAt(error.details)
|
|
149
|
+
await transitionWork(generation, "pending", "pending", { availableAt })
|
|
150
|
+
throw new VectorIndexingDeferred(availableAt)
|
|
151
|
+
}
|
|
152
|
+
|
|
153
|
+
if (generation.signal.aborted) throw error
|
|
154
|
+
}
|
|
155
|
+
|
|
156
|
+
const failure =
|
|
157
|
+
error instanceof EmbeddingModelResponseError
|
|
158
|
+
? createSixbError("vector.response_invalid", "[Sixb] Invalid embedding batch response.", {
|
|
159
|
+
cause: error,
|
|
160
|
+
})
|
|
161
|
+
: error
|
|
162
|
+
const { runtime, entries } = generation
|
|
163
|
+
const indexing = runtime.storage.ontology.vectorIndexing!
|
|
164
|
+
|
|
165
|
+
for (const { work } of entries) {
|
|
166
|
+
await fail(runtime, indexing, { ...work, status: generation.phase }, failure)
|
|
167
|
+
}
|
|
168
|
+
}
|
|
169
|
+
|
|
170
|
+
function transitionWork(
|
|
171
|
+
generation: GenerationAttempt,
|
|
172
|
+
expectedStatus: VectorIndexingWork["status"],
|
|
173
|
+
status: VectorIndexingWork["status"],
|
|
174
|
+
options: { availableAt?: string; requireAll?: boolean } = {}
|
|
175
|
+
): Promise<boolean> {
|
|
176
|
+
const { runtime, entries } = generation
|
|
177
|
+
const availableAt = options.availableAt ?? new Date().toISOString()
|
|
178
|
+
|
|
179
|
+
return runtime.storage.ontology.vectorIndexing!.updateBatch({
|
|
180
|
+
projectId: runtime.projectId,
|
|
181
|
+
requireAll: options.requireAll ?? false,
|
|
182
|
+
updates: entries.map(({ work }) => ({ id: work.id, expectedStatus, status, availableAt })),
|
|
183
|
+
})
|
|
184
|
+
}
|
|
@@ -0,0 +1,17 @@
|
|
|
1
|
+
/** Internal worker entry point; it does not expose the host context or domain SDK. */
|
|
2
|
+
export interface VectorIndexingRuntime {
|
|
3
|
+
process(id: string, attempt: number, signal: AbortSignal): Promise<void>
|
|
4
|
+
}
|
|
5
|
+
|
|
6
|
+
// Associates each host with its service. Durable work lives in ontology storage, not this map.
|
|
7
|
+
const runtimes = new WeakMap<object, VectorIndexingRuntime>()
|
|
8
|
+
|
|
9
|
+
export function registerVectorIndexingRuntime(host: object, runtime: VectorIndexingRuntime): void {
|
|
10
|
+
runtimes.set(host, runtime)
|
|
11
|
+
}
|
|
12
|
+
|
|
13
|
+
export function getVectorIndexingRuntime(host: object): VectorIndexingRuntime {
|
|
14
|
+
const runtime = runtimes.get(host)
|
|
15
|
+
if (!runtime) throw new Error("[Sixb] Vector indexing requires a configured Sixb host.")
|
|
16
|
+
return runtime
|
|
17
|
+
}
|
|
@@ -0,0 +1,188 @@
|
|
|
1
|
+
import { randomUUID } from "node:crypto"
|
|
2
|
+
import { reportVectorIndexingFailure } from "../../error-reporting/capability"
|
|
3
|
+
import { captureSixbFailure } from "../../errors/internal"
|
|
4
|
+
import { createKernelRuntimeAuthorization } from "../../execution/authorization"
|
|
5
|
+
import { ensureExecutionRecord, executionRecordInputFromRuntime } from "../../execution/durable"
|
|
6
|
+
import type { ExecutionContext, ExecutionScope } from "../../execution/types"
|
|
7
|
+
import { MaterializationConflictError } from "../../materialization/errors"
|
|
8
|
+
import type { ObjectVectorWrite, PreparedObjectVector } from "../../materialization/vectors"
|
|
9
|
+
import type { OntologyMaterializerContract } from "../../materializer/materializer"
|
|
10
|
+
import type { SixbHostContext } from "../../runtime/types"
|
|
11
|
+
import {
|
|
12
|
+
type OntologyVectorIndexingStorage,
|
|
13
|
+
VECTOR_INDEXING_FAILURE_CODES,
|
|
14
|
+
type VectorIndexingWork,
|
|
15
|
+
} from "../../storage/ontology/vector-indexing"
|
|
16
|
+
import { vectorConfiguration, vectorSources } from "./profile"
|
|
17
|
+
|
|
18
|
+
/** Return null when the requested representation is obsolete or already stored. */
|
|
19
|
+
export async function prepare(
|
|
20
|
+
runtime: SixbHostContext,
|
|
21
|
+
work: VectorIndexingWork
|
|
22
|
+
): Promise<PreparedObjectVector | null> {
|
|
23
|
+
const profile = runtime.ontology.getObjectTypeById(work.ref.objectTypeId)?.search?.vectors?.[
|
|
24
|
+
work.profile
|
|
25
|
+
]
|
|
26
|
+
if (!profile || vectorConfiguration(profile) !== work.configuration) return null
|
|
27
|
+
|
|
28
|
+
const row = await runtime.storage.objects.getByPrimaryId({
|
|
29
|
+
projectId: runtime.projectId,
|
|
30
|
+
...work.ref,
|
|
31
|
+
})
|
|
32
|
+
if (!row) return null
|
|
33
|
+
|
|
34
|
+
const sources = vectorSources(profile.source, row.properties)
|
|
35
|
+
if (sources.sourceFingerprint !== work.sourceFingerprint) return null
|
|
36
|
+
|
|
37
|
+
const storedVectors = await runtime.storage.ontology.vectors!.list({
|
|
38
|
+
projectId: runtime.projectId,
|
|
39
|
+
ref: work.ref,
|
|
40
|
+
})
|
|
41
|
+
const currentVector = storedVectors.find((entry) => entry.profile === work.profile)
|
|
42
|
+
const alreadyIndexed =
|
|
43
|
+
currentVector?.configuration === work.configuration &&
|
|
44
|
+
currentVector.sourceFingerprint === work.sourceFingerprint
|
|
45
|
+
|
|
46
|
+
if (alreadyIndexed) return null
|
|
47
|
+
|
|
48
|
+
return {
|
|
49
|
+
projectId: runtime.projectId,
|
|
50
|
+
ref: work.ref,
|
|
51
|
+
profile: work.profile,
|
|
52
|
+
configuration: work.configuration,
|
|
53
|
+
...sources,
|
|
54
|
+
expectedObject: {
|
|
55
|
+
ref: work.ref,
|
|
56
|
+
exists: true,
|
|
57
|
+
version: row.version,
|
|
58
|
+
lastCommitId: row.lastCommitId,
|
|
59
|
+
},
|
|
60
|
+
expectedVectorCommitId: currentVector?.lastCommitId ?? null,
|
|
61
|
+
}
|
|
62
|
+
}
|
|
63
|
+
|
|
64
|
+
export async function storeVector(
|
|
65
|
+
runtime: SixbHostContext,
|
|
66
|
+
materializer: OntologyMaterializerContract,
|
|
67
|
+
work: VectorIndexingWork,
|
|
68
|
+
scope: ExecutionScope,
|
|
69
|
+
signal: AbortSignal
|
|
70
|
+
): Promise<void> {
|
|
71
|
+
const indexing = runtime.storage.ontology.vectorIndexing!
|
|
72
|
+
const identity = { projectId: runtime.projectId, id: work.id }
|
|
73
|
+
|
|
74
|
+
// Unrelated property changes renew the object fence without repeating a paid inference.
|
|
75
|
+
for (let attempt = 0; attempt < 3; attempt++) {
|
|
76
|
+
signal.throwIfAborted()
|
|
77
|
+
const prepared = await prepare(runtime, work)
|
|
78
|
+
|
|
79
|
+
if (!prepared) {
|
|
80
|
+
await indexing.remove(identity)
|
|
81
|
+
return
|
|
82
|
+
}
|
|
83
|
+
|
|
84
|
+
try {
|
|
85
|
+
await commitPreparedVectors(materializer, scope, [{ input: prepared, values: work.values! }])
|
|
86
|
+
await indexing.remove(identity)
|
|
87
|
+
return
|
|
88
|
+
} catch (error) {
|
|
89
|
+
if (!(error instanceof MaterializationConflictError)) throw error
|
|
90
|
+
|
|
91
|
+
const currentWork = await indexing.get(identity)
|
|
92
|
+
if (!currentWork) return
|
|
93
|
+
}
|
|
94
|
+
}
|
|
95
|
+
|
|
96
|
+
throw new VectorIndexingDeferred(new Date(Date.now() + 1000).toISOString())
|
|
97
|
+
}
|
|
98
|
+
|
|
99
|
+
export async function commitPreparedVectors(
|
|
100
|
+
materializer: OntologyMaterializerContract,
|
|
101
|
+
scope: ExecutionScope,
|
|
102
|
+
writes: readonly ObjectVectorWrite[]
|
|
103
|
+
): Promise<void> {
|
|
104
|
+
await materializer.edits.commit({
|
|
105
|
+
scope,
|
|
106
|
+
input: {
|
|
107
|
+
mode: "atomic",
|
|
108
|
+
source: { kind: "runtime", requestId: randomUUID() },
|
|
109
|
+
operations: [],
|
|
110
|
+
vectorWrites: writes,
|
|
111
|
+
expectedObjects: writes.map((write) => write.input.expectedObject),
|
|
112
|
+
expectedLinks: [],
|
|
113
|
+
expectedLinkScopes: [],
|
|
114
|
+
},
|
|
115
|
+
})
|
|
116
|
+
}
|
|
117
|
+
|
|
118
|
+
export async function indexingScope(
|
|
119
|
+
runtime: SixbHostContext,
|
|
120
|
+
work: VectorIndexingWork,
|
|
121
|
+
indexingId = work.id
|
|
122
|
+
): Promise<ExecutionScope> {
|
|
123
|
+
const operation = { type: "ontology.indexVectors", indexingId } as const
|
|
124
|
+
const execution: ExecutionContext = {
|
|
125
|
+
id: `exec_vector_${indexingId}`,
|
|
126
|
+
projectId: runtime.projectId,
|
|
127
|
+
executor: { type: "kernel", operation },
|
|
128
|
+
source: { type: "ontologyCommit", commitId: work.sourceCommitId },
|
|
129
|
+
correlationId: `vector_${indexingId}`,
|
|
130
|
+
}
|
|
131
|
+
const authorization = createKernelRuntimeAuthorization({ execution, operation })
|
|
132
|
+
|
|
133
|
+
await ensureExecutionRecord(runtime.storage.executions, {
|
|
134
|
+
...executionRecordInputFromRuntime({ execution, runtimeAuthorization: authorization }),
|
|
135
|
+
requesterGroupIds: [],
|
|
136
|
+
})
|
|
137
|
+
|
|
138
|
+
return { execution, authorization }
|
|
139
|
+
}
|
|
140
|
+
|
|
141
|
+
export async function fail(
|
|
142
|
+
runtime: SixbHostContext,
|
|
143
|
+
indexing: OntologyVectorIndexingStorage,
|
|
144
|
+
work: VectorIndexingWork,
|
|
145
|
+
error: unknown
|
|
146
|
+
): Promise<void> {
|
|
147
|
+
const failure = captureSixbFailure(error, {
|
|
148
|
+
allowedCodes: VECTOR_INDEXING_FAILURE_CODES,
|
|
149
|
+
defaultCode: "internal.unexpected",
|
|
150
|
+
})
|
|
151
|
+
|
|
152
|
+
const recorded = await indexing.update({
|
|
153
|
+
projectId: runtime.projectId,
|
|
154
|
+
id: work.id,
|
|
155
|
+
expectedStatus: work.status,
|
|
156
|
+
status: "failed",
|
|
157
|
+
availableAt: new Date().toISOString(),
|
|
158
|
+
error: failure,
|
|
159
|
+
})
|
|
160
|
+
|
|
161
|
+
if (!recorded) return
|
|
162
|
+
|
|
163
|
+
reportVectorIndexingFailure(runtime, error, {
|
|
164
|
+
projectId: runtime.projectId,
|
|
165
|
+
indexingId: work.id,
|
|
166
|
+
failure,
|
|
167
|
+
...work.ref,
|
|
168
|
+
profile: work.profile,
|
|
169
|
+
})
|
|
170
|
+
}
|
|
171
|
+
|
|
172
|
+
export function retryAt(details: unknown): string {
|
|
173
|
+
const resetAt =
|
|
174
|
+
details && typeof details === "object" && "resetAt" in details ? details.resetAt : undefined
|
|
175
|
+
const resetTimestamp = typeof resetAt === "string" ? Date.parse(resetAt) : Number.NaN
|
|
176
|
+
|
|
177
|
+
const minimumRetryTimestamp = Date.now() + 60_000
|
|
178
|
+
const budgetResetTimestamp = Number.isFinite(resetTimestamp) ? resetTimestamp : 0
|
|
179
|
+
const retryTimestamp = Math.max(minimumRetryTimestamp, budgetResetTimestamp)
|
|
180
|
+
|
|
181
|
+
return new Date(retryTimestamp).toISOString()
|
|
182
|
+
}
|
|
183
|
+
|
|
184
|
+
export class VectorIndexingDeferred extends Error {
|
|
185
|
+
constructor(readonly availableAt: string) {
|
|
186
|
+
super("[Sixb] Vector indexing is deferred.")
|
|
187
|
+
}
|
|
188
|
+
}
|
|
@@ -0,0 +1,51 @@
|
|
|
1
|
+
import { createSixbError } from "../../errors/internal"
|
|
2
|
+
import type { OntologyMaterializerContract } from "../../materializer/materializer"
|
|
3
|
+
import type { SixbHostContext } from "../../runtime/types"
|
|
4
|
+
import { generateVectors } from "./indexing-generate"
|
|
5
|
+
import {
|
|
6
|
+
fail,
|
|
7
|
+
indexingScope,
|
|
8
|
+
prepare,
|
|
9
|
+
storeVector,
|
|
10
|
+
VectorIndexingDeferred,
|
|
11
|
+
} from "./indexing-shared"
|
|
12
|
+
|
|
13
|
+
export async function processVector(
|
|
14
|
+
runtime: SixbHostContext,
|
|
15
|
+
materializer: OntologyMaterializerContract,
|
|
16
|
+
id: string,
|
|
17
|
+
attempt: number,
|
|
18
|
+
signal: AbortSignal
|
|
19
|
+
): Promise<void> {
|
|
20
|
+
const indexing = runtime.storage.ontology.vectorIndexing
|
|
21
|
+
if (!indexing) throw new Error("[Sixb] Storage does not support automatic vector indexing.")
|
|
22
|
+
const projectId = runtime.projectId
|
|
23
|
+
const work = await indexing.get({ projectId, id })
|
|
24
|
+
if (!work || work.status === "failed") return
|
|
25
|
+
if (work.status === "running") {
|
|
26
|
+
await fail(
|
|
27
|
+
runtime,
|
|
28
|
+
indexing,
|
|
29
|
+
work,
|
|
30
|
+
createSixbError(
|
|
31
|
+
"vector.outcome_unknown",
|
|
32
|
+
"[Sixb] Interrupted embedding call has an unknown outcome; inference was not repeated."
|
|
33
|
+
)
|
|
34
|
+
)
|
|
35
|
+
return
|
|
36
|
+
}
|
|
37
|
+
if (Date.parse(work.availableAt) > Date.now()) throw new VectorIndexingDeferred(work.availableAt)
|
|
38
|
+
const prepared = await prepare(runtime, work)
|
|
39
|
+
if (!prepared) {
|
|
40
|
+
await indexing.remove({ projectId, id })
|
|
41
|
+
return
|
|
42
|
+
}
|
|
43
|
+
const scope = await indexingScope(runtime, work, work.batchId ?? work.id)
|
|
44
|
+
if (work.status === "ready") {
|
|
45
|
+
await storeVector(runtime, materializer, work, scope, signal)
|
|
46
|
+
return
|
|
47
|
+
}
|
|
48
|
+
await generateVectors(runtime, [{ work, input: prepared }], scope, attempt, signal)
|
|
49
|
+
const ready = await indexing.get({ projectId, id })
|
|
50
|
+
if (ready?.status === "ready") await storeVector(runtime, materializer, ready, scope, signal)
|
|
51
|
+
}
|
|
@@ -0,0 +1,62 @@
|
|
|
1
|
+
import type { ExecutionScope } from "../../execution/types"
|
|
2
|
+
import { MaterializationConflictError } from "../../materialization/errors"
|
|
3
|
+
import type { ObjectVectorWrite } from "../../materialization/vectors"
|
|
4
|
+
import type { OntologyMaterializerContract } from "../../materializer/materializer"
|
|
5
|
+
import type { SixbHostContext } from "../../runtime/types"
|
|
6
|
+
import {
|
|
7
|
+
commitPreparedVectors,
|
|
8
|
+
prepare,
|
|
9
|
+
storeVector,
|
|
10
|
+
VectorIndexingDeferred,
|
|
11
|
+
} from "./indexing-shared"
|
|
12
|
+
|
|
13
|
+
/** Publish a current subset atomically; reprepare conflicts without repeating inference. */
|
|
14
|
+
export async function storeVectorBatch(
|
|
15
|
+
runtime: SixbHostContext,
|
|
16
|
+
materializer: OntologyMaterializerContract,
|
|
17
|
+
batchId: string,
|
|
18
|
+
scope: ExecutionScope,
|
|
19
|
+
signal: AbortSignal
|
|
20
|
+
): Promise<void> {
|
|
21
|
+
const indexing = runtime.storage.ontology.vectorIndexing!
|
|
22
|
+
const identity = { projectId: runtime.projectId, batchId }
|
|
23
|
+
|
|
24
|
+
for (let attempt = 0; attempt < 3; attempt++) {
|
|
25
|
+
const ready = (await indexing.getBatch(identity)).filter((work) => work.status === "ready")
|
|
26
|
+
const writes: ObjectVectorWrite[] = []
|
|
27
|
+
|
|
28
|
+
for (const work of ready) {
|
|
29
|
+
signal.throwIfAborted()
|
|
30
|
+
const input = await prepare(runtime, work)
|
|
31
|
+
if (input) {
|
|
32
|
+
writes.push({ input, values: work.values! })
|
|
33
|
+
} else {
|
|
34
|
+
await indexing.remove({ projectId: runtime.projectId, id: work.id })
|
|
35
|
+
}
|
|
36
|
+
}
|
|
37
|
+
|
|
38
|
+
if (!writes.length) return
|
|
39
|
+
|
|
40
|
+
try {
|
|
41
|
+
signal.throwIfAborted()
|
|
42
|
+
await commitPreparedVectors(materializer, scope, writes)
|
|
43
|
+
return
|
|
44
|
+
} catch (error) {
|
|
45
|
+
if (!(error instanceof MaterializationConflictError)) throw error
|
|
46
|
+
}
|
|
47
|
+
}
|
|
48
|
+
|
|
49
|
+
// A continuously changing object must not keep stable peers from becoming searchable.
|
|
50
|
+
let deferred = false
|
|
51
|
+
for (const work of await indexing.getBatch(identity)) {
|
|
52
|
+
if (work.status !== "ready") continue
|
|
53
|
+
try {
|
|
54
|
+
await storeVector(runtime, materializer, work, scope, signal)
|
|
55
|
+
} catch (error) {
|
|
56
|
+
if (!(error instanceof VectorIndexingDeferred)) throw error
|
|
57
|
+
deferred = true
|
|
58
|
+
}
|
|
59
|
+
}
|
|
60
|
+
|
|
61
|
+
if (deferred) throw new VectorIndexingDeferred(new Date(Date.now() + 1000).toISOString())
|
|
62
|
+
}
|
|
@@ -0,0 +1,23 @@
|
|
|
1
|
+
import type { OntologyMaterializerContract } from "../../materializer/materializer"
|
|
2
|
+
import type { SixbHostContext } from "../../runtime/types"
|
|
3
|
+
import { processVectorBatch } from "./indexing-batch"
|
|
4
|
+
import type { VectorIndexingRuntime } from "./indexing-runtime"
|
|
5
|
+
import { processVector } from "./indexing-single"
|
|
6
|
+
|
|
7
|
+
export { VectorIndexingDeferred } from "./indexing-shared"
|
|
8
|
+
|
|
9
|
+
/** Internal processing port; durable projection groups and individual requests share delivery. */
|
|
10
|
+
export function createVectorIndexingRuntime(
|
|
11
|
+
runtime: SixbHostContext,
|
|
12
|
+
materializer: OntologyMaterializerContract
|
|
13
|
+
): VectorIndexingRuntime {
|
|
14
|
+
return {
|
|
15
|
+
async process(id, attempt, signal) {
|
|
16
|
+
const indexing = runtime.storage.ontology.vectorIndexing
|
|
17
|
+
if (!indexing) throw new Error("[Sixb] Storage does not support automatic vector indexing.")
|
|
18
|
+
const batch = await indexing.getBatch({ projectId: runtime.projectId, batchId: id })
|
|
19
|
+
if (batch.length) await processVectorBatch(runtime, materializer, id, batch, attempt, signal)
|
|
20
|
+
else await processVector(runtime, materializer, id, attempt, signal)
|
|
21
|
+
},
|
|
22
|
+
}
|
|
23
|
+
}
|
|
@@ -0,0 +1,64 @@
|
|
|
1
|
+
import { MaterializationValidationError } from "../../materialization/errors"
|
|
2
|
+
import { sha256Canonical } from "../../materialization/identity"
|
|
3
|
+
import type { ObjectVectorSearchProfile } from "../../ontology/types"
|
|
4
|
+
|
|
5
|
+
export const MAX_VECTOR_K = 1000
|
|
6
|
+
export const VECTOR_INPUT_VERSION = 1
|
|
7
|
+
|
|
8
|
+
export function vectorConfiguration(profile: ObjectVectorSearchProfile): string {
|
|
9
|
+
return sha256Canonical({
|
|
10
|
+
format: VECTOR_INPUT_VERSION,
|
|
11
|
+
sources: [...profile.source],
|
|
12
|
+
provider: profile.model.providerId,
|
|
13
|
+
model: profile.model.modelId,
|
|
14
|
+
representation: profile.model.definition.representation ?? { name: profile.model.modelId },
|
|
15
|
+
dimensions: profile.model.definition.dimensions,
|
|
16
|
+
metric: "cosine",
|
|
17
|
+
precision: "float32",
|
|
18
|
+
normalization: "l2-v1",
|
|
19
|
+
})
|
|
20
|
+
}
|
|
21
|
+
|
|
22
|
+
export function vectorSources(
|
|
23
|
+
source: readonly string[],
|
|
24
|
+
properties: Readonly<Record<string, unknown>>
|
|
25
|
+
) {
|
|
26
|
+
const values: Record<string, string | null> = Object.create(null)
|
|
27
|
+
for (const key of source) {
|
|
28
|
+
const value = properties[key]
|
|
29
|
+
if (value !== undefined && value !== null && typeof value !== "string") {
|
|
30
|
+
throw new MaterializationValidationError(`Vector source must be text: ${key}`)
|
|
31
|
+
}
|
|
32
|
+
values[key] = typeof value === "string" ? value : null
|
|
33
|
+
}
|
|
34
|
+
// Ordered JSON pairs preserve field boundaries, escaping and absent/empty distinction.
|
|
35
|
+
const text = JSON.stringify(source.map((key) => [key, values[key]]))
|
|
36
|
+
return { text, sourceFingerprint: sha256Canonical(text) }
|
|
37
|
+
}
|
|
38
|
+
|
|
39
|
+
/** Unit-length float32 representation keeps native cosine arithmetic within range. */
|
|
40
|
+
export function normalizeVector(values: readonly number[], dimensions: number): readonly number[] {
|
|
41
|
+
if (!Array.isArray(values) || values.length !== dimensions) {
|
|
42
|
+
throw new MaterializationValidationError(`Vector dimension mismatch; expected ${dimensions}`)
|
|
43
|
+
}
|
|
44
|
+
const normalized = Array.from(values, (value) => {
|
|
45
|
+
if (
|
|
46
|
+
typeof value !== "number" ||
|
|
47
|
+
!Number.isFinite(value) ||
|
|
48
|
+
!Number.isFinite(Math.fround(value))
|
|
49
|
+
) {
|
|
50
|
+
throw new MaterializationValidationError("Vector values must be finite float32 numbers.")
|
|
51
|
+
}
|
|
52
|
+
return Math.fround(value)
|
|
53
|
+
})
|
|
54
|
+
if (!normalized.some((value) => value !== 0)) {
|
|
55
|
+
throw new MaterializationValidationError("Cosine search requires a nonzero vector.")
|
|
56
|
+
}
|
|
57
|
+
const norm = Math.hypot(...normalized)
|
|
58
|
+
return Object.freeze(normalized.map((value) => Math.fround(value / norm)))
|
|
59
|
+
}
|
|
60
|
+
|
|
61
|
+
/** V1 envelope for exact SQL scoring; exceeding it must fail rather than truncate candidates. */
|
|
62
|
+
export function vectorSearchCandidateLimit(dimensions: number): number {
|
|
63
|
+
return Math.min(10000, Math.floor(16000000 / dimensions))
|
|
64
|
+
}
|
|
@@ -0,0 +1,16 @@
|
|
|
1
|
+
import type { ObjectQuery } from "../query/ir"
|
|
2
|
+
|
|
3
|
+
export function hasVectorProfile(query: ObjectQuery): boolean {
|
|
4
|
+
if (query.kind === "vector") return true
|
|
5
|
+
if (query.kind === "set") return query.inputs.some(hasVectorProfile)
|
|
6
|
+
return "input" in query && hasVectorProfile(query.input)
|
|
7
|
+
}
|
|
8
|
+
|
|
9
|
+
/** V1 supports one exact top-k, with filters applied before ranking. */
|
|
10
|
+
export function isVectorProfileQuery(query: ObjectQuery): boolean {
|
|
11
|
+
if (query.kind === "limit" || query.kind === "project") return isVectorProfileQuery(query.input)
|
|
12
|
+
if (query.kind !== "vector" || !query.profile) return false
|
|
13
|
+
let input = query.input
|
|
14
|
+
while (input.kind === "filter") input = input.input
|
|
15
|
+
return input.kind === "start" && !input.includeSubtypes
|
|
16
|
+
}
|