@sixb/core 0.1.16 → 0.1.17
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/actions/index.js +25 -25
- package/dist/actions/types/context.d.ts +2 -2
- package/dist/actions/types/context.d.ts.map +1 -1
- package/dist/actions/worker.js +1 -1
- package/dist/agents/index.js +41 -40
- package/dist/agents/index.js.map +1 -1
- package/dist/auth/index.js +5 -5
- package/dist/authorization/index.js +2 -2
- package/dist/blob-storage/download-urls.d.ts +41 -0
- package/dist/blob-storage/download-urls.d.ts.map +1 -0
- package/dist/blob-storage/execution.d.ts +9 -1
- package/dist/blob-storage/execution.d.ts.map +1 -1
- package/dist/blob-storage/index.js +5 -3
- package/dist/blob-storage/index.js.map +1 -1
- package/dist/blob-storage/internal.d.ts +2 -0
- package/dist/blob-storage/internal.d.ts.map +1 -0
- package/dist/blob-storage/internal.js +11 -0
- package/dist/blob-storage/internal.js.map +9 -0
- package/dist/bootstrap/index.js +45 -44
- package/dist/bootstrap/index.js.map +1 -1
- package/dist/{chunk-8x74221e.js → chunk-10styjgk.js} +18 -13
- package/dist/{chunk-8x74221e.js.map → chunk-10styjgk.js.map} +3 -3
- package/dist/{chunk-hgqpcmyr.js → chunk-1hqwggsn.js} +47 -19
- package/dist/chunk-1hqwggsn.js.map +12 -0
- package/dist/{chunk-zb47r1c8.js → chunk-23xs4qp9.js} +2 -2
- package/dist/{chunk-gmdvns8f.js → chunk-2am3db31.js} +2 -2
- package/dist/{chunk-fj1dvp37.js → chunk-2vhg6ysa.js} +1 -1
- package/dist/{chunk-dp7yk20b.js → chunk-33saed7g.js} +1 -1
- package/dist/{chunk-mdnw7nj8.js → chunk-3rrezgyc.js} +33 -8
- package/dist/chunk-3rrezgyc.js.map +15 -0
- package/dist/{chunk-jgwb25gc.js → chunk-4as3wt1c.js} +13 -5
- package/dist/chunk-4as3wt1c.js.map +12 -0
- package/dist/chunk-4ra628t7.js +88 -0
- package/dist/chunk-4ra628t7.js.map +10 -0
- package/dist/{chunk-chdg6eqq.js → chunk-52c5zb0z.js} +2 -2
- package/dist/{chunk-69kt9q43.js → chunk-5be2ath4.js} +1 -1
- package/dist/{chunk-qnd7ehe5.js → chunk-5thzcb8g.js} +2 -2
- package/dist/{chunk-6z1q7j19.js → chunk-5yd8cchh.js} +1126 -780
- package/dist/chunk-5yd8cchh.js.map +66 -0
- package/dist/{chunk-3q7z9hd4.js → chunk-6wbm6ymz.js} +234 -40
- package/dist/{chunk-3q7z9hd4.js.map → chunk-6wbm6ymz.js.map} +8 -6
- package/dist/{chunk-kvysp909.js → chunk-7ecp4v7a.js} +26 -19
- package/dist/chunk-7ecp4v7a.js.map +17 -0
- package/dist/{chunk-f85hpqnm.js → chunk-99nd4rc1.js} +3 -3
- package/dist/{chunk-f85hpqnm.js.map → chunk-99nd4rc1.js.map} +3 -3
- package/dist/{chunk-dsv8kdgk.js → chunk-9g6jz9kk.js} +5 -5
- package/dist/{chunk-39tqv9hz.js → chunk-9se093qz.js} +5 -6
- package/dist/{chunk-39tqv9hz.js.map → chunk-9se093qz.js.map} +3 -4
- package/dist/{chunk-7g2gjvah.js → chunk-a7er86jd.js} +1 -1
- package/dist/{chunk-zdkcdshk.js → chunk-aq39q04r.js} +41 -3
- package/dist/{chunk-zdkcdshk.js.map → chunk-aq39q04r.js.map} +4 -3
- package/dist/chunk-b9affek3.js +261 -0
- package/dist/chunk-b9affek3.js.map +12 -0
- package/dist/{chunk-b9y8hcm2.js → chunk-c2rga5cx.js} +1 -1
- package/dist/{chunk-f72rbvsb.js → chunk-cnb5kv05.js} +2 -2
- package/dist/chunk-d62kjtbg.js.map +2 -2
- package/dist/{chunk-vjqt7q3a.js → chunk-dam456ve.js} +233 -34
- package/dist/{chunk-vjqt7q3a.js.map → chunk-dam456ve.js.map} +7 -5
- package/dist/{chunk-sbcm1b92.js → chunk-e67ynxcr.js} +3 -3
- package/dist/{chunk-xnx96gfy.js → chunk-ere85b8y.js} +17 -8
- package/dist/chunk-ere85b8y.js.map +15 -0
- package/dist/{chunk-k4kkp58d.js → chunk-ewqa58h9.js} +12 -2
- package/dist/chunk-ewqa58h9.js.map +11 -0
- package/dist/{chunk-cq44v1a6.js → chunk-f1xh7a32.js} +3 -3
- package/dist/{chunk-h4138ww2.js → chunk-fggq3d9k.js} +450 -799
- package/dist/chunk-fggq3d9k.js.map +49 -0
- package/dist/{chunk-kttr5ftm.js → chunk-gf7yht60.js} +3 -3
- package/dist/chunk-h8teetr0.js +9 -0
- package/dist/chunk-h8teetr0.js.map +10 -0
- package/dist/chunk-hn2r7z41.js.map +1 -1
- package/dist/{chunk-nj0020ay.js → chunk-jjrn5v0p.js} +1 -1
- package/dist/{chunk-nvymebc1.js → chunk-jnfxmr3f.js} +1 -1
- package/dist/{chunk-nkbev3tr.js → chunk-k4g51s47.js} +3 -3
- package/dist/{chunk-a0073121.js → chunk-kpx7jrmn.js} +3 -1
- package/dist/chunk-kpx7jrmn.js.map +12 -0
- package/dist/{chunk-h044jb97.js → chunk-pja9jfz6.js} +172 -10
- package/dist/chunk-pja9jfz6.js.map +19 -0
- package/dist/chunk-pqajwytd.js.map +1 -1
- package/dist/{chunk-mr60an99.js → chunk-qczk96d9.js} +22 -2
- package/dist/{chunk-mr60an99.js.map → chunk-qczk96d9.js.map} +3 -3
- package/dist/{chunk-s3csryxe.js → chunk-rj69qcrd.js} +8 -2
- package/dist/chunk-rj69qcrd.js.map +11 -0
- package/dist/{chunk-swxzncrv.js → chunk-rpxz486p.js} +32 -5
- package/dist/{chunk-swxzncrv.js.map → chunk-rpxz486p.js.map} +4 -4
- package/dist/{chunk-tkdbge6v.js → chunk-rx7h5fdx.js} +1 -1
- package/dist/{chunk-tnvafr7g.js → chunk-s7ftxrdr.js} +105 -7
- package/dist/chunk-s7ftxrdr.js.map +22 -0
- package/dist/{chunk-h866d223.js → chunk-sk0hcjsz.js} +1 -1
- package/dist/{chunk-2xvgy3x5.js → chunk-svabwqdq.js} +2 -2
- package/dist/{chunk-667x4drs.js → chunk-t9shqx3w.js} +2 -2
- package/dist/{chunk-40qb8wpe.js → chunk-tjjgy3z4.js} +26 -23
- package/dist/{chunk-40qb8wpe.js.map → chunk-tjjgy3z4.js.map} +3 -3
- package/dist/{chunk-gkxsenvp.js → chunk-vp3z1ckh.js} +31 -7
- package/dist/{chunk-gkxsenvp.js.map → chunk-vp3z1ckh.js.map} +5 -4
- package/dist/{chunk-cxj8y8t0.js → chunk-vre348sb.js} +2 -2
- package/dist/{chunk-vsvrv7n8.js → chunk-w9yycd3t.js} +1 -1
- package/dist/{chunk-g4rbm4a6.js → chunk-wt4szfec.js} +379 -331
- package/dist/chunk-wt4szfec.js.map +14 -0
- package/dist/{chunk-a7ne02hk.js → chunk-xcy5ddha.js} +6 -6
- package/dist/{chunk-zvmr2hqk.js → chunk-xyvy73tj.js} +4 -3
- package/dist/{chunk-zvmr2hqk.js.map → chunk-xyvy73tj.js.map} +3 -3
- package/dist/datasets/write.js +1 -1
- package/dist/execution/agent.js +38 -37
- package/dist/execution/agent.js.map +1 -1
- package/dist/execution/authorized-object-reader.d.ts +3 -1
- package/dist/execution/authorized-object-reader.d.ts.map +1 -1
- package/dist/execution/primitive.js +36 -35
- package/dist/execution/primitive.js.map +2 -2
- package/dist/execution/request.js +37 -36
- package/dist/execution/request.js.map +2 -2
- package/dist/index.d.ts +8 -4
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +62 -59
- package/dist/index.js.map +1 -1
- package/dist/lake-storage/in-memory.d.ts +5 -1
- package/dist/lake-storage/in-memory.d.ts.map +1 -1
- package/dist/lake-storage/index.d.ts +1 -1
- package/dist/lake-storage/index.d.ts.map +1 -1
- package/dist/lake-storage/index.js +2 -2
- package/dist/lake-storage/types.d.ts +26 -0
- package/dist/lake-storage/types.d.ts.map +1 -1
- package/dist/maintenance/ontology-maintenance.d.ts +5 -1
- package/dist/maintenance/ontology-maintenance.d.ts.map +1 -1
- package/dist/maintenance/types.d.ts +1 -4
- package/dist/maintenance/types.d.ts.map +1 -1
- package/dist/materialization/event-envelopes.d.ts +20 -0
- package/dist/materialization/event-envelopes.d.ts.map +1 -0
- package/dist/materialization/events.d.ts +29 -3
- package/dist/materialization/events.d.ts.map +1 -1
- package/dist/materialization/index.d.ts +4 -1
- package/dist/materialization/index.d.ts.map +1 -1
- package/dist/materialization/index.js +9 -3
- package/dist/materialization/index.js.map +1 -1
- package/dist/materializer/edits/plan.d.ts +2 -10
- package/dist/materializer/edits/plan.d.ts.map +1 -1
- package/dist/materializer/effective/build-events.d.ts +5 -21
- package/dist/materializer/effective/build-events.d.ts.map +1 -1
- package/dist/materializer/effective/vector-indexing.d.ts +2 -3
- package/dist/materializer/effective/vector-indexing.d.ts.map +1 -1
- package/dist/materializer/effective/vectors.d.ts +2 -3
- package/dist/materializer/effective/vectors.d.ts.map +1 -1
- package/dist/materializer/execution/scope.d.ts +1 -11
- package/dist/materializer/execution/scope.d.ts.map +1 -1
- package/dist/materializer/execution/work-executor.d.ts +5 -7
- package/dist/materializer/execution/work-executor.d.ts.map +1 -1
- package/dist/materializer/execution/work-records.d.ts +1 -3
- package/dist/materializer/execution/work-records.d.ts.map +1 -1
- package/dist/materializer/index.js +31 -32
- package/dist/materializer/index.js.map +1 -1
- package/dist/materializer/projections/replace.d.ts.map +1 -1
- package/dist/materializer/projections/replacement-plan.d.ts +8 -11
- package/dist/materializer/projections/replacement-plan.d.ts.map +1 -1
- package/dist/materializer/shared/batching.d.ts +5 -0
- package/dist/materializer/shared/batching.d.ts.map +1 -1
- package/dist/materializer/telemetry/plan.d.ts +2 -8
- package/dist/materializer/telemetry/plan.d.ts.map +1 -1
- package/dist/models/audio/catalog.d.ts +20 -0
- package/dist/models/audio/catalog.d.ts.map +1 -0
- package/dist/models/audio/errors.d.ts +8 -0
- package/dist/models/audio/errors.d.ts.map +1 -0
- package/dist/models/audio/file.d.ts +9 -0
- package/dist/models/audio/file.d.ts.map +1 -0
- package/dist/models/audio/runtime.d.ts +8 -0
- package/dist/models/audio/runtime.d.ts.map +1 -0
- package/dist/models/audio/types.d.ts +60 -0
- package/dist/models/audio/types.d.ts.map +1 -0
- package/dist/models/catalog.d.ts +23 -1
- package/dist/models/catalog.d.ts.map +1 -1
- package/dist/models/definitions.d.ts +1 -1
- package/dist/models/definitions.d.ts.map +1 -1
- package/dist/models/events.d.ts +3 -0
- package/dist/models/events.d.ts.map +1 -1
- package/dist/models/execution/index.js +22 -22
- package/dist/models/execution/model-call-admission.d.ts +6 -1
- package/dist/models/execution/model-call-admission.d.ts.map +1 -1
- package/dist/models/execution/model-call-limits.d.ts.map +1 -1
- package/dist/models/execution/model-call-recorder.d.ts.map +1 -1
- package/dist/models/execution/reranking.d.ts +4 -0
- package/dist/models/execution/reranking.d.ts.map +1 -0
- package/dist/models/execution/usage.d.ts.map +1 -1
- package/dist/models/execution.d.ts +2 -1
- 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 +7 -1
- package/dist/models/index.d.ts.map +1 -1
- package/dist/models/index.js +6 -2
- package/dist/models/index.js.map +1 -1
- package/dist/models/pricing.d.ts +2 -2
- package/dist/models/pricing.d.ts.map +1 -1
- package/dist/models/reranking-model.d.ts +49 -0
- package/dist/models/reranking-model.d.ts.map +1 -0
- package/dist/objects/index.js +25 -25
- package/dist/objects/query/executor.d.ts +2 -1
- package/dist/objects/query/executor.d.ts.map +1 -1
- package/dist/objects/query/index.d.ts +1 -1
- package/dist/objects/query/index.d.ts.map +1 -1
- package/dist/objects/query/index.js +22 -22
- package/dist/objects/query/ir.d.ts +8 -1
- package/dist/objects/query/ir.d.ts.map +1 -1
- package/dist/objects/query/normalize.d.ts.map +1 -1
- package/dist/objects/query/planner.d.ts +1 -1
- package/dist/objects/query/planner.d.ts.map +1 -1
- package/dist/objects/query/primary-id.d.ts +7 -0
- package/dist/objects/query/primary-id.d.ts.map +1 -0
- package/dist/objects/query/reranking-executor.d.ts +13 -0
- package/dist/objects/query/reranking-executor.d.ts.map +1 -0
- package/dist/objects/query/reranking-limits.d.ts +3 -0
- package/dist/objects/query/reranking-limits.d.ts.map +1 -0
- package/dist/objects/query/reranking-query.d.ts +4 -0
- package/dist/objects/query/reranking-query.d.ts.map +1 -0
- package/dist/objects/query/validate.d.ts.map +1 -1
- package/dist/objects/sdk/query-builder.d.ts +8 -0
- package/dist/objects/sdk/query-builder.d.ts.map +1 -1
- package/dist/objects/sdk/query-executor.d.ts +2 -2
- 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/indexing-dispatch.d.ts +21 -0
- package/dist/objects/vectors/indexing-dispatch.d.ts.map +1 -0
- package/dist/objects/vectors/query.d.ts.map +1 -1
- package/dist/ontology/builders.d.ts.map +1 -1
- package/dist/ontology/index.d.ts +1 -1
- package/dist/ontology/index.d.ts.map +1 -1
- package/dist/ontology/index.js +3 -3
- package/dist/ontology/internal.js +2 -2
- package/dist/ontology/query-capabilities.d.ts +1 -0
- package/dist/ontology/query-capabilities.d.ts.map +1 -1
- package/dist/ontology/types.d.ts +20 -0
- package/dist/ontology/types.d.ts.map +1 -1
- package/dist/ontology/validation/query.d.ts.map +1 -1
- package/dist/pipelines/index.js +23 -23
- package/dist/projections/internal.js +22 -22
- package/dist/query.d.ts +4 -2
- package/dist/query.d.ts.map +1 -1
- package/dist/query.js +2 -2
- package/dist/queues/in-memory.d.ts +3 -0
- package/dist/queues/in-memory.d.ts.map +1 -1
- package/dist/queues/index.js +1 -1
- package/dist/queues/types.d.ts +4 -0
- package/dist/queues/types.d.ts.map +1 -1
- package/dist/runtime/host.d.ts +1 -0
- package/dist/runtime/host.d.ts.map +1 -1
- package/dist/runtime/index.d.ts +1 -1
- package/dist/runtime/index.d.ts.map +1 -1
- package/dist/runtime/internal.d.ts +1 -0
- package/dist/runtime/internal.d.ts.map +1 -1
- package/dist/runtime/internal.js +28 -26
- package/dist/runtime/internal.js.map +1 -1
- package/dist/runtime/public-origin.d.ts +10 -0
- package/dist/runtime/public-origin.d.ts.map +1 -0
- package/dist/runtime/sixb.d.ts +1 -0
- package/dist/runtime/sixb.d.ts.map +1 -1
- package/dist/runtime/types.d.ts +12 -2
- package/dist/runtime/types.d.ts.map +1 -1
- package/dist/sandboxes/index.js +5 -5
- package/dist/shares/internal.js +19 -19
- package/dist/storage/agents/provider.js +2 -2
- 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/provider.js +3 -3
- package/dist/storage/ai-cost/types.d.ts +1 -1
- package/dist/storage/ai-cost/types.d.ts.map +1 -1
- package/dist/storage/ai-cost/validation.d.ts.map +1 -1
- package/dist/storage/ai-limits/enforcement.js +2 -2
- package/dist/storage/ai-limits/in-memory.d.ts.map +1 -1
- package/dist/storage/ai-limits/provider.d.ts +7 -2
- package/dist/storage/ai-limits/provider.d.ts.map +1 -1
- package/dist/storage/ai-limits/provider.js +4 -2
- package/dist/storage/ai-limits/provider.js.map +1 -1
- package/dist/storage/ai-limits/types.d.ts +3 -0
- package/dist/storage/ai-limits/types.d.ts.map +1 -1
- package/dist/storage/ai-usage/record.d.ts.map +1 -1
- package/dist/storage/ai-usage/types.d.ts +8 -4
- package/dist/storage/ai-usage/types.d.ts.map +1 -1
- package/dist/storage/ai-usage/usage.d.ts.map +1 -1
- package/dist/storage/file-download-grants/in-memory.d.ts +11 -0
- package/dist/storage/file-download-grants/in-memory.d.ts.map +1 -0
- package/dist/storage/file-download-grants/index.d.ts +3 -0
- package/dist/storage/file-download-grants/index.d.ts.map +1 -0
- package/dist/storage/file-download-grants/record.d.ts +11 -0
- package/dist/storage/file-download-grants/record.d.ts.map +1 -0
- package/dist/storage/file-download-grants/types.d.ts +44 -0
- package/dist/storage/file-download-grants/types.d.ts.map +1 -0
- package/dist/storage/file-upload-sessions/provider.js +6 -6
- package/dist/storage/in-memory/index.d.ts +4 -0
- package/dist/storage/in-memory/index.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 +30 -30
- package/dist/storage/index.js.map +1 -1
- package/dist/storage/internal.d.ts +1 -0
- package/dist/storage/internal.d.ts.map +1 -1
- package/dist/storage/internal.js +8 -4
- package/dist/storage/internal.js.map +1 -1
- package/dist/storage/migrations/index.d.ts +1 -1
- package/dist/storage/migrations/index.d.ts.map +1 -1
- package/dist/storage/migrations/migrate-storage.d.ts +3 -3
- package/dist/storage/migrations/migrate-storage.d.ts.map +1 -1
- package/dist/storage/migrations/types.d.ts +7 -0
- package/dist/storage/migrations/types.d.ts.map +1 -1
- package/dist/storage/objects/in-memory/query.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.map +1 -1
- package/dist/storage/objects/query-preparation.d.ts +39 -0
- package/dist/storage/objects/query-preparation.d.ts.map +1 -0
- 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 -6
- package/dist/storage/ontology/commits.d.ts.map +1 -1
- package/dist/storage/ontology/in-memory/index.d.ts +4 -2
- package/dist/storage/ontology/in-memory/index.d.ts.map +1 -1
- package/dist/storage/ontology/in-memory/materializations-state.d.ts +0 -2
- package/dist/storage/ontology/in-memory/materializations-state.d.ts.map +1 -1
- package/dist/storage/ontology/in-memory/materializations-work.d.ts +1 -3
- package/dist/storage/ontology/in-memory/materializations-work.d.ts.map +1 -1
- package/dist/storage/ontology/in-memory/materializations.d.ts +23 -57
- package/dist/storage/ontology/in-memory/materializations.d.ts.map +1 -1
- package/dist/storage/ontology/in-memory/outbox.d.ts +3 -2
- package/dist/storage/ontology/in-memory/outbox.d.ts.map +1 -1
- package/dist/storage/ontology/in-memory/replacement-plans.d.ts +104 -0
- package/dist/storage/ontology/in-memory/replacement-plans.d.ts.map +1 -0
- package/dist/storage/ontology/in-memory/shared-state.d.ts +17 -2
- package/dist/storage/ontology/in-memory/shared-state.d.ts.map +1 -1
- package/dist/storage/ontology/in-memory/source-roots.d.ts +3 -1
- package/dist/storage/ontology/in-memory/source-roots.d.ts.map +1 -1
- package/dist/storage/ontology/in-memory/sources.d.ts +1 -2
- package/dist/storage/ontology/in-memory/sources.d.ts.map +1 -1
- package/dist/storage/ontology/in-memory/state-reader.d.ts +25 -0
- package/dist/storage/ontology/in-memory/state-reader.d.ts.map +1 -0
- package/dist/storage/ontology/index.d.ts +6 -3
- package/dist/storage/ontology/index.d.ts.map +1 -1
- package/dist/storage/ontology/materializations.d.ts +40 -59
- package/dist/storage/ontology/materializations.d.ts.map +1 -1
- package/dist/storage/ontology/outbox.d.ts +4 -6
- package/dist/storage/ontology/outbox.d.ts.map +1 -1
- package/dist/storage/ontology/provider-work.d.ts +114 -3
- package/dist/storage/ontology/provider-work.d.ts.map +1 -1
- package/dist/storage/ontology/provider.d.ts +14 -39
- package/dist/storage/ontology/provider.d.ts.map +1 -1
- package/dist/storage/ontology/provider.js +26 -12
- package/dist/storage/ontology/provider.js.map +1 -1
- package/dist/storage/ontology/replacement-plans.d.ts +103 -0
- package/dist/storage/ontology/replacement-plans.d.ts.map +1 -0
- package/dist/storage/ontology/sources.d.ts +0 -8
- package/dist/storage/ontology/sources.d.ts.map +1 -1
- package/dist/storage/operation-scope.d.ts.map +1 -1
- package/dist/storage/operation-scope.js +1 -1
- package/dist/storage/projection-runs/in-memory.d.ts.map +1 -1
- package/dist/storage/projection-runs/types.d.ts +2 -0
- package/dist/storage/projection-runs/types.d.ts.map +1 -1
- package/dist/storage/types.d.ts +2 -0
- package/dist/storage/types.d.ts.map +1 -1
- package/dist/storage/workflow-runs/provider.js +6 -6
- package/dist/syncs/index.js +24 -24
- package/dist/testing/ai-cost-storage-contract.d.ts.map +1 -1
- package/dist/testing/ai-limit-storage-contract.d.ts.map +1 -1
- package/dist/testing/ai-usage-storage-contract.d.ts.map +1 -1
- package/dist/testing/file-download-grant-storage-contract.d.ts +9 -0
- package/dist/testing/file-download-grant-storage-contract.d.ts.map +1 -0
- package/dist/testing/index.d.ts +1 -0
- package/dist/testing/index.d.ts.map +1 -1
- package/dist/testing/index.js +2549 -1490
- package/dist/testing/index.js.map +14 -13
- package/dist/testing/lake-storage-contract.d.ts.map +1 -1
- package/dist/testing/materializer-storage-contract.d.ts +14 -0
- package/dist/testing/materializer-storage-contract.d.ts.map +1 -1
- package/dist/testing/object-read-scope-contract.d.ts.map +1 -1
- package/dist/testing/ontology-contract-fixture.d.ts +5 -1
- package/dist/testing/ontology-contract-fixture.d.ts.map +1 -1
- package/dist/testing/ontology-storage-contract.d.ts.map +1 -1
- package/dist/testing/projection-run-storage-contract.d.ts.map +1 -1
- package/dist/testing/queues-contract.d.ts.map +1 -1
- package/dist/webhooks/internal.js +20 -20
- package/dist/workers/index.js +15 -17
- package/dist/workers/index.js.map +3 -3
- package/dist/workers/queue-worker.d.ts +3 -2
- package/dist/workers/queue-worker.d.ts.map +1 -1
- package/dist/workflows/index.js +42 -41
- package/dist/workflows/index.js.map +1 -1
- package/package.json +7 -1
- package/src/actions/types/context.ts +5 -2
- package/src/blob-storage/download-urls.ts +138 -0
- package/src/blob-storage/execution.ts +32 -1
- package/src/blob-storage/internal.ts +1 -0
- package/src/execution/authorized-object-reader.ts +8 -1
- package/src/index.ts +25 -0
- package/src/lake-storage/in-memory.ts +38 -9
- package/src/lake-storage/index.ts +2 -0
- package/src/lake-storage/types.ts +30 -0
- package/src/maintenance/ontology-maintenance.ts +50 -23
- package/src/maintenance/types.ts +1 -4
- package/src/materialization/event-envelopes.ts +168 -0
- package/src/materialization/events.ts +40 -4
- package/src/materialization/index.ts +9 -1
- package/src/materializer/README.md +55 -10
- package/src/materializer/edits/commit.ts +3 -19
- package/src/materializer/edits/plan.ts +20 -71
- package/src/materializer/effective/build-events.ts +42 -136
- package/src/materializer/effective/vector-indexing.ts +2 -3
- package/src/materializer/effective/vectors.ts +2 -3
- package/src/materializer/execution/scope.ts +1 -38
- package/src/materializer/execution/work-executor.ts +21 -115
- package/src/materializer/execution/work-records.ts +0 -15
- package/src/materializer/projections/replace.ts +106 -63
- package/src/materializer/projections/replacement-plan.ts +73 -218
- package/src/materializer/shared/batching.ts +7 -0
- package/src/materializer/telemetry/append.ts +2 -14
- package/src/materializer/telemetry/plan.ts +6 -43
- package/src/models/audio/catalog.ts +90 -0
- package/src/models/audio/errors.ts +19 -0
- package/src/models/audio/file.ts +78 -0
- package/src/models/audio/runtime.ts +182 -0
- package/src/models/audio/types.ts +69 -0
- package/src/models/catalog.ts +52 -5
- package/src/models/definitions.ts +8 -1
- package/src/models/events.ts +3 -0
- package/src/models/execution/README.md +20 -1
- package/src/models/execution/model-call-admission.ts +6 -1
- package/src/models/execution/model-call-limits.ts +21 -11
- package/src/models/execution/model-call-recorder.ts +1 -0
- package/src/models/execution/model-call-recovery.ts +1 -0
- package/src/models/execution/reranking.ts +137 -0
- package/src/models/execution/usage.ts +1 -0
- package/src/models/execution.ts +5 -1
- package/src/models/generation-types.ts +2 -0
- package/src/models/index.ts +32 -0
- package/src/models/pricing.ts +2 -1
- package/src/models/reranking-model.ts +114 -0
- package/src/objects/query/executor.ts +42 -2
- package/src/objects/query/explain.ts +8 -0
- package/src/objects/query/index.ts +1 -0
- package/src/objects/query/ir.ts +10 -0
- package/src/objects/query/normalize.ts +2 -0
- package/src/objects/query/planner.ts +12 -1
- package/src/objects/query/primary-id.ts +56 -0
- package/src/objects/query/reranking-executor.ts +91 -0
- package/src/objects/query/reranking-limits.ts +3 -0
- package/src/objects/query/reranking-query.ts +8 -0
- package/src/objects/query/validate.ts +33 -1
- package/src/objects/sdk/query-builder.ts +15 -2
- package/src/objects/sdk/query-executor.ts +2 -2
- package/src/objects/sdk/runtime-query-executor.ts +7 -4
- package/src/objects/vectors/README.md +6 -2
- package/src/objects/vectors/indexing-dispatch.ts +83 -0
- package/src/objects/vectors/query.ts +3 -0
- package/src/ontology/builders.ts +1 -0
- package/src/ontology/index.ts +2 -0
- package/src/ontology/query-capabilities.ts +1 -1
- package/src/ontology/types.ts +21 -0
- package/src/ontology/validation/query.ts +57 -0
- package/src/query.ts +4 -0
- package/src/queues/in-memory.ts +54 -19
- package/src/queues/types.ts +4 -0
- package/src/runtime/host.ts +28 -1
- package/src/runtime/index.ts +1 -0
- package/src/runtime/internal.ts +1 -0
- package/src/runtime/public-origin.ts +33 -0
- package/src/runtime/sixb.ts +13 -2
- package/src/runtime/types.ts +12 -2
- package/src/storage/ai-cost/analytics.ts +2 -0
- package/src/storage/ai-cost/codec.ts +2 -1
- package/src/storage/ai-cost/types.ts +1 -0
- package/src/storage/ai-cost/validation.ts +21 -8
- package/src/storage/ai-limits/in-memory.ts +10 -2
- package/src/storage/ai-limits/provider.ts +29 -2
- package/src/storage/ai-limits/types.ts +3 -0
- package/src/storage/ai-usage/record.ts +9 -0
- package/src/storage/ai-usage/types.ts +8 -4
- package/src/storage/ai-usage/usage.ts +2 -0
- package/src/storage/file-download-grants/in-memory.ts +73 -0
- package/src/storage/file-download-grants/index.ts +8 -0
- package/src/storage/file-download-grants/record.ts +47 -0
- package/src/storage/file-download-grants/types.ts +48 -0
- package/src/storage/in-memory/index.ts +13 -2
- package/src/storage/index.ts +31 -13
- package/src/storage/internal.ts +1 -0
- package/src/storage/migrations/index.ts +1 -0
- package/src/storage/migrations/migrate-storage.ts +36 -12
- package/src/storage/migrations/types.ts +8 -0
- package/src/storage/objects/in-memory/query.ts +2 -0
- package/src/storage/objects/in-memory/selected-reader.ts +1 -0
- package/src/storage/objects/in-memory/storage.ts +1 -0
- package/src/storage/objects/query-preparation.ts +77 -0
- package/src/storage/objects/types.ts +2 -0
- package/src/storage/ontology/commits.ts +1 -6
- package/src/storage/ontology/in-memory/index.ts +28 -9
- package/src/storage/ontology/in-memory/materializations-finalization.ts +35 -68
- package/src/storage/ontology/in-memory/materializations-state.ts +0 -22
- package/src/storage/ontology/in-memory/materializations-work.ts +0 -45
- package/src/storage/ontology/in-memory/materializations.ts +172 -653
- package/src/storage/ontology/in-memory/outbox.ts +37 -29
- package/src/storage/ontology/in-memory/replacement-plans.ts +697 -0
- package/src/storage/ontology/in-memory/shared-state.ts +24 -2
- package/src/storage/ontology/in-memory/source-roots.ts +7 -2
- package/src/storage/ontology/in-memory/sources.ts +7 -33
- package/src/storage/ontology/in-memory/state-reader.ts +245 -0
- package/src/storage/ontology/index.ts +19 -13
- package/src/storage/ontology/materializations.ts +45 -74
- package/src/storage/ontology/outbox.ts +4 -7
- package/src/storage/ontology/provider-header-validation.ts +0 -57
- package/src/storage/ontology/provider-work.ts +381 -90
- package/src/storage/ontology/provider.ts +74 -171
- package/src/storage/ontology/replacement-plans.ts +117 -0
- package/src/storage/ontology/sources.ts +0 -12
- package/src/storage/operation-scope.ts +33 -1
- package/src/storage/projection-runs/in-memory.ts +7 -1
- package/src/storage/projection-runs/types.ts +2 -0
- package/src/storage/types.ts +2 -0
- package/src/testing/ai-cost-storage-contract.ts +1 -0
- package/src/testing/ai-limit-storage-contract.ts +62 -0
- package/src/testing/ai-usage-storage-contract.ts +31 -0
- package/src/testing/file-download-grant-storage-contract.ts +139 -0
- package/src/testing/index.ts +4 -0
- package/src/testing/lake-storage-contract.ts +87 -1
- package/src/testing/materializer-storage-contract.ts +1008 -1
- package/src/testing/object-read-scope-contract.ts +1 -0
- package/src/testing/ontology-contract-fixture.ts +11 -87
- package/src/testing/ontology-storage-contract.ts +70 -39
- package/src/testing/projection-run-storage-contract.ts +14 -0
- package/src/testing/queues-contract.ts +59 -0
- package/src/workers/queue-worker.ts +19 -16
- package/dist/chunk-6z1q7j19.js.map +0 -62
- package/dist/chunk-7ytf06d3.js +0 -113
- package/dist/chunk-7ytf06d3.js.map +0 -10
- package/dist/chunk-a0073121.js.map +0 -12
- package/dist/chunk-g4rbm4a6.js.map +0 -15
- package/dist/chunk-h044jb97.js.map +0 -15
- package/dist/chunk-h4138ww2.js.map +0 -50
- package/dist/chunk-hgqpcmyr.js.map +0 -12
- package/dist/chunk-jgwb25gc.js.map +0 -12
- package/dist/chunk-k4kkp58d.js.map +0 -11
- package/dist/chunk-kvysp909.js.map +0 -17
- package/dist/chunk-mdnw7nj8.js.map +0 -15
- package/dist/chunk-s3csryxe.js.map +0 -11
- package/dist/chunk-tnvafr7g.js.map +0 -19
- package/dist/chunk-xnx96gfy.js.map +0 -15
- package/dist/materializer/execution/plan-stream.d.ts +0 -8
- package/dist/materializer/execution/plan-stream.d.ts.map +0 -1
- package/src/materializer/execution/plan-stream.ts +0 -121
- /package/dist/{chunk-zb47r1c8.js.map → chunk-23xs4qp9.js.map} +0 -0
- /package/dist/{chunk-gmdvns8f.js.map → chunk-2am3db31.js.map} +0 -0
- /package/dist/{chunk-fj1dvp37.js.map → chunk-2vhg6ysa.js.map} +0 -0
- /package/dist/{chunk-dp7yk20b.js.map → chunk-33saed7g.js.map} +0 -0
- /package/dist/{chunk-chdg6eqq.js.map → chunk-52c5zb0z.js.map} +0 -0
- /package/dist/{chunk-69kt9q43.js.map → chunk-5be2ath4.js.map} +0 -0
- /package/dist/{chunk-qnd7ehe5.js.map → chunk-5thzcb8g.js.map} +0 -0
- /package/dist/{chunk-dsv8kdgk.js.map → chunk-9g6jz9kk.js.map} +0 -0
- /package/dist/{chunk-7g2gjvah.js.map → chunk-a7er86jd.js.map} +0 -0
- /package/dist/{chunk-b9y8hcm2.js.map → chunk-c2rga5cx.js.map} +0 -0
- /package/dist/{chunk-f72rbvsb.js.map → chunk-cnb5kv05.js.map} +0 -0
- /package/dist/{chunk-sbcm1b92.js.map → chunk-e67ynxcr.js.map} +0 -0
- /package/dist/{chunk-cq44v1a6.js.map → chunk-f1xh7a32.js.map} +0 -0
- /package/dist/{chunk-kttr5ftm.js.map → chunk-gf7yht60.js.map} +0 -0
- /package/dist/{chunk-nj0020ay.js.map → chunk-jjrn5v0p.js.map} +0 -0
- /package/dist/{chunk-nvymebc1.js.map → chunk-jnfxmr3f.js.map} +0 -0
- /package/dist/{chunk-nkbev3tr.js.map → chunk-k4g51s47.js.map} +0 -0
- /package/dist/{chunk-tkdbge6v.js.map → chunk-rx7h5fdx.js.map} +0 -0
- /package/dist/{chunk-h866d223.js.map → chunk-sk0hcjsz.js.map} +0 -0
- /package/dist/{chunk-2xvgy3x5.js.map → chunk-svabwqdq.js.map} +0 -0
- /package/dist/{chunk-667x4drs.js.map → chunk-t9shqx3w.js.map} +0 -0
- /package/dist/{chunk-cxj8y8t0.js.map → chunk-vre348sb.js.map} +0 -0
- /package/dist/{chunk-vsvrv7n8.js.map → chunk-w9yycd3t.js.map} +0 -0
- /package/dist/{chunk-a7ne02hk.js.map → chunk-xcy5ddha.js.map} +0 -0
package/src/ontology/types.ts
CHANGED
|
@@ -360,6 +360,25 @@ export interface Interface {
|
|
|
360
360
|
links: ObjectLink[]
|
|
361
361
|
}
|
|
362
362
|
|
|
363
|
+
/** Compound query shapes prepared by the storage provider, in addition to property flags. */
|
|
364
|
+
export type ObjectQueryIndexDefinition =
|
|
365
|
+
| {
|
|
366
|
+
kind: "sort"
|
|
367
|
+
fields: readonly { propertyId: string; direction?: "asc" | "desc" }[]
|
|
368
|
+
/** String equality filters preceding the ordered fields. */
|
|
369
|
+
filters?: readonly string[]
|
|
370
|
+
}
|
|
371
|
+
| {
|
|
372
|
+
kind: "text"
|
|
373
|
+
propertyId: string
|
|
374
|
+
/** String filters/facets commonly combined with this substring search. */
|
|
375
|
+
filters?: readonly string[]
|
|
376
|
+
}
|
|
377
|
+
|
|
378
|
+
export interface ObjectTypeQueryMetadata {
|
|
379
|
+
indexes?: readonly ObjectQueryIndexDefinition[]
|
|
380
|
+
}
|
|
381
|
+
|
|
363
382
|
/**
|
|
364
383
|
* Canonical ontology node for a real-world asset, system, concept, or process.
|
|
365
384
|
*
|
|
@@ -413,6 +432,8 @@ export interface ObjectType {
|
|
|
413
432
|
|
|
414
433
|
properties: Property[]
|
|
415
434
|
links: ObjectLink[]
|
|
435
|
+
/** Query index declarations, prepared automatically after storage migrations. */
|
|
436
|
+
query?: ObjectTypeQueryMetadata
|
|
416
437
|
/** Search profile for this object type. */
|
|
417
438
|
search?: ObjectTypeSearchMetadata
|
|
418
439
|
}
|
|
@@ -7,6 +7,8 @@ import {
|
|
|
7
7
|
isFilterableSchema,
|
|
8
8
|
isSortableSchema,
|
|
9
9
|
isTextSchema,
|
|
10
|
+
queryScalarKindForSchema,
|
|
11
|
+
resolveQuerySchema,
|
|
10
12
|
} from "../query-capabilities"
|
|
11
13
|
|
|
12
14
|
type QueryFeature = "filterable" | "sortable" | "text" | "exact" | "facet"
|
|
@@ -27,6 +29,7 @@ export function validateQueryMetadata(
|
|
|
27
29
|
}
|
|
28
30
|
|
|
29
31
|
validateObjectSearchMetadata(typeId, objectType, valueTypesById)
|
|
32
|
+
validateQueryIndexes(typeId, objectType, valueTypesById)
|
|
30
33
|
}
|
|
31
34
|
}
|
|
32
35
|
|
|
@@ -250,3 +253,57 @@ function resolveSchema(
|
|
|
250
253
|
seenValueTypeIds.add(schema.valueTypeId)
|
|
251
254
|
return resolveSchema(resolved, valueTypesById, path, seenValueTypeIds)
|
|
252
255
|
}
|
|
256
|
+
|
|
257
|
+
function validateQueryIndexes(
|
|
258
|
+
typeId: string,
|
|
259
|
+
objectType: ObjectType,
|
|
260
|
+
valueTypes: ReadonlyMap<string, ValueType>
|
|
261
|
+
): void {
|
|
262
|
+
for (const index of objectType.query?.indexes ?? []) {
|
|
263
|
+
const fields =
|
|
264
|
+
index.kind === "sort" ? index.fields.map((field) => field.propertyId) : [index.propertyId]
|
|
265
|
+
const filters = index.filters ?? []
|
|
266
|
+
if (
|
|
267
|
+
!fields.length ||
|
|
268
|
+
fields.length + filters.length > 8 ||
|
|
269
|
+
new Set([...fields, ...filters]).size !== fields.length + filters.length
|
|
270
|
+
)
|
|
271
|
+
throw new OntologyValidationError(
|
|
272
|
+
`[Sixb] Query index on '${typeId}' requires one to eight distinct properties`
|
|
273
|
+
)
|
|
274
|
+
if (index.kind === "text" && filters.length > 4)
|
|
275
|
+
throw new OntologyValidationError(
|
|
276
|
+
`[Sixb] Text query index on '${typeId}' accepts at most four filters`
|
|
277
|
+
)
|
|
278
|
+
for (const id of [...fields, ...filters]) {
|
|
279
|
+
const property = objectType.properties.find((property) => property.id === id)
|
|
280
|
+
if (!property)
|
|
281
|
+
throw new OntologyValidationError(
|
|
282
|
+
`[Sixb] Query index on '${typeId}' references unknown property '${id}'`
|
|
283
|
+
)
|
|
284
|
+
if (property.mode === "telemetry")
|
|
285
|
+
throw new OntologyValidationError(
|
|
286
|
+
`[Sixb] Query indexes cannot include telemetry property '${typeId}.${id}'`
|
|
287
|
+
)
|
|
288
|
+
const flag = filters.includes(id) ? "filterable" : index.kind === "sort" ? "sortable" : "text"
|
|
289
|
+
assertPropertyQueryFlag(typeId, property, flag, "query.indexes")
|
|
290
|
+
if (filters.includes(id)) {
|
|
291
|
+
const schema = resolveQuerySchema(property.schema, valueTypes)
|
|
292
|
+
if (!schema || queryScalarKindForSchema(schema) !== "string")
|
|
293
|
+
throw new OntologyValidationError(
|
|
294
|
+
`[Sixb] Query index filters must be strings: '${typeId}.${id}'`
|
|
295
|
+
)
|
|
296
|
+
}
|
|
297
|
+
}
|
|
298
|
+
if (
|
|
299
|
+
index.kind === "sort" &&
|
|
300
|
+
index.fields.some(
|
|
301
|
+
(field) =>
|
|
302
|
+
field.direction !== undefined && field.direction !== "asc" && field.direction !== "desc"
|
|
303
|
+
)
|
|
304
|
+
)
|
|
305
|
+
throw new OntologyValidationError(
|
|
306
|
+
`[Sixb] Query index direction must be asc or desc on '${typeId}'`
|
|
307
|
+
)
|
|
308
|
+
}
|
|
309
|
+
}
|
package/src/query.ts
CHANGED
|
@@ -6,6 +6,8 @@
|
|
|
6
6
|
* top of this module.
|
|
7
7
|
*/
|
|
8
8
|
|
|
9
|
+
export type { ModelRef } from "./models/catalog"
|
|
10
|
+
export type { RerankingModelDefinition, RerankingModelRef } from "./models/reranking-model"
|
|
9
11
|
export type { ObjectQueryPlanningIssue } from "./objects/query/errors"
|
|
10
12
|
export {
|
|
11
13
|
ObjectQueryExecutionError,
|
|
@@ -29,6 +31,7 @@ export type {
|
|
|
29
31
|
ObjectQueryPredicateNot,
|
|
30
32
|
ObjectQueryProject,
|
|
31
33
|
ObjectQueryRefs,
|
|
34
|
+
ObjectQueryRerank,
|
|
32
35
|
ObjectQueryResultShape,
|
|
33
36
|
ObjectQuerySet,
|
|
34
37
|
ObjectQuerySetOperation,
|
|
@@ -68,6 +71,7 @@ export type {
|
|
|
68
71
|
ObjectQueryFacetBucket,
|
|
69
72
|
ObjectQueryFacetInput,
|
|
70
73
|
ObjectQueryFacetResult,
|
|
74
|
+
ObjectQueryFacetsResult,
|
|
71
75
|
ObjectQueryListOptions,
|
|
72
76
|
ObjectQueryRow,
|
|
73
77
|
ObjectWhereBuilder,
|
package/src/queues/in-memory.ts
CHANGED
|
@@ -109,11 +109,16 @@ function eligibleAt(record: QueueRecord): number {
|
|
|
109
109
|
return Math.max(record.availableAtMs, record.leaseExpiryMs ?? -Infinity)
|
|
110
110
|
}
|
|
111
111
|
|
|
112
|
+
// Largest delay `setTimeout` accepts; a waiting claim that wakes early just waits again.
|
|
113
|
+
const MAX_TIMER_DELAY_MS = 2_147_483_647
|
|
114
|
+
|
|
112
115
|
interface QueueLane {
|
|
113
116
|
// Terminal records remain here for caller-id deduplication, never in the delivery indexes.
|
|
114
117
|
readonly records: Map<string, QueueRecord>
|
|
115
118
|
readonly ready: IndexedHeap<QueueRecord>
|
|
116
119
|
readonly waiting: IndexedHeap<QueueRecord>
|
|
120
|
+
/** Wakes claims waiting on this lane. */
|
|
121
|
+
readonly waiters: Set<() => void>
|
|
117
122
|
}
|
|
118
123
|
|
|
119
124
|
function toClaimedQueueJob<TQueueJob extends QueueJob>(
|
|
@@ -175,6 +180,27 @@ class InMemoryQueueStore {
|
|
|
175
180
|
lane.ready.delete(record)
|
|
176
181
|
lane.waiting.set(record)
|
|
177
182
|
}
|
|
183
|
+
// Any change can make a job claimable or move the next due time; waiters look again.
|
|
184
|
+
for (const wake of lane.waiters) wake()
|
|
185
|
+
}
|
|
186
|
+
|
|
187
|
+
/** Resolves when the lane changes, its next delayed job or lease comes due, or `signal` aborts. */
|
|
188
|
+
waitForWork(projectId: string, queueId: string, signal: AbortSignal): Promise<void> {
|
|
189
|
+
const lane = this.lane(projectId, queueId)
|
|
190
|
+
const next = lane.waiting.peek()
|
|
191
|
+
const dueInMs = next ? eligibleAt(next) - Date.now() : MAX_TIMER_DELAY_MS
|
|
192
|
+
return new Promise((resolve) => {
|
|
193
|
+
// Always armed: like a blocking read on a socket, a waiting claim keeps its process alive.
|
|
194
|
+
const timer = setTimeout(wake, Math.min(dueInMs, MAX_TIMER_DELAY_MS))
|
|
195
|
+
function wake(): void {
|
|
196
|
+
clearTimeout(timer)
|
|
197
|
+
lane.waiters.delete(wake)
|
|
198
|
+
signal.removeEventListener("abort", wake)
|
|
199
|
+
resolve()
|
|
200
|
+
}
|
|
201
|
+
lane.waiters.add(wake)
|
|
202
|
+
signal.addEventListener("abort", wake, { once: true })
|
|
203
|
+
})
|
|
178
204
|
}
|
|
179
205
|
|
|
180
206
|
takeReady<TQueueJob extends QueueJob>(
|
|
@@ -216,6 +242,7 @@ class InMemoryQueueStore {
|
|
|
216
242
|
waiting: new IndexedHeap(
|
|
217
243
|
(left, right) => eligibleAt(left) - eligibleAt(right) || left.sequence - right.sequence
|
|
218
244
|
),
|
|
245
|
+
waiters: new Set(),
|
|
219
246
|
}
|
|
220
247
|
queues.set(queueId, lane)
|
|
221
248
|
}
|
|
@@ -263,6 +290,7 @@ class InMemoryQueue<TQueueJob extends QueueJob, TFailureCode extends SixbErrorCo
|
|
|
263
290
|
workerId: string
|
|
264
291
|
limit?: number
|
|
265
292
|
leaseMs?: number
|
|
293
|
+
signal?: AbortSignal
|
|
266
294
|
}): Promise<readonly ClaimedQueueJob<TQueueJob>[]> {
|
|
267
295
|
assertNonEmpty(params.projectId, "projectId")
|
|
268
296
|
assertNonEmpty(params.workerId, "workerId")
|
|
@@ -275,27 +303,34 @@ class InMemoryQueue<TQueueJob extends QueueJob, TFailureCode extends SixbErrorCo
|
|
|
275
303
|
const leaseMs = params.leaseMs ?? 30_000
|
|
276
304
|
assertPositiveNumber(leaseMs, "leaseMs")
|
|
277
305
|
|
|
278
|
-
|
|
279
|
-
|
|
280
|
-
|
|
281
|
-
|
|
282
|
-
|
|
283
|
-
|
|
284
|
-
|
|
285
|
-
|
|
286
|
-
|
|
287
|
-
|
|
288
|
-
|
|
289
|
-
attempt: record.job.attempt + 1,
|
|
306
|
+
for (;;) {
|
|
307
|
+
if (params.signal?.aborted) return []
|
|
308
|
+
const now = Date.now()
|
|
309
|
+
const claimedAt = new Date(now).toISOString()
|
|
310
|
+
// Validate before removing candidates, and cache the same millisecond precision we return.
|
|
311
|
+
const leaseExpiry = new Date(now + leaseMs)
|
|
312
|
+
const leaseExpiresAt = leaseExpiry.toISOString()
|
|
313
|
+
const claimable = this.store.takeReady<TQueueJob>(params.projectId, this.queueId, now, limit)
|
|
314
|
+
if (claimable.length === 0 && params.signal) {
|
|
315
|
+
await this.store.waitForWork(params.projectId, this.queueId, params.signal)
|
|
316
|
+
continue
|
|
290
317
|
}
|
|
291
|
-
record.leaseId = randomUUID()
|
|
292
|
-
record.claimedAt = claimedAt
|
|
293
|
-
record.leaseExpiresAt = leaseExpiresAt
|
|
294
|
-
record.leaseExpiryMs = leaseExpiry.getTime()
|
|
295
|
-
this.store.schedule(params.projectId, record, now)
|
|
296
318
|
|
|
297
|
-
return
|
|
298
|
-
|
|
319
|
+
return claimable.map((record) => {
|
|
320
|
+
// Attempts count claims so redelivery after lease expiry or retry is visible to workers.
|
|
321
|
+
record.job = {
|
|
322
|
+
...record.job,
|
|
323
|
+
attempt: record.job.attempt + 1,
|
|
324
|
+
}
|
|
325
|
+
record.leaseId = randomUUID()
|
|
326
|
+
record.claimedAt = claimedAt
|
|
327
|
+
record.leaseExpiresAt = leaseExpiresAt
|
|
328
|
+
record.leaseExpiryMs = leaseExpiry.getTime()
|
|
329
|
+
this.store.schedule(params.projectId, record, now)
|
|
330
|
+
|
|
331
|
+
return toClaimedQueueJob(record)
|
|
332
|
+
})
|
|
333
|
+
}
|
|
299
334
|
}
|
|
300
335
|
|
|
301
336
|
async complete(params: { projectId: string; jobId: string; leaseId: string }): Promise<void> {
|
package/src/queues/types.ts
CHANGED
|
@@ -82,12 +82,16 @@ export interface Queue<
|
|
|
82
82
|
*
|
|
83
83
|
* `leaseMs` is the visibility timeout for this claim. If the lease expires
|
|
84
84
|
* before the job is acknowledged, the job may be delivered again.
|
|
85
|
+
*
|
|
86
|
+
* Without `signal`, returns at once, possibly empty. With `signal`, waits for work instead:
|
|
87
|
+
* it resolves once it claims at least one job, and empty only after `signal` aborts.
|
|
85
88
|
*/
|
|
86
89
|
claim(params: {
|
|
87
90
|
projectId: string
|
|
88
91
|
workerId: string
|
|
89
92
|
limit?: number
|
|
90
93
|
leaseMs?: number
|
|
94
|
+
signal?: AbortSignal
|
|
91
95
|
}): Promise<readonly ClaimedQueueJob<TQueueJob>[]>
|
|
92
96
|
|
|
93
97
|
/** Acknowledges successful processing and removes the claimed job from delivery. */
|
package/src/runtime/host.ts
CHANGED
|
@@ -54,8 +54,10 @@ import {
|
|
|
54
54
|
import { createOntologyMaterializer, type OntologyMaterializerContract } from "../materializer"
|
|
55
55
|
import type { ModelCatalogInput } from "../models"
|
|
56
56
|
import { bindEmbeddingModels } from "../models/execution/embedding"
|
|
57
|
+
import { bindRerankingModels } from "../models/execution/reranking"
|
|
57
58
|
import { ModelExecutionSession } from "../models/execution/session"
|
|
58
59
|
import { createVectorIndexingRuntime } from "../objects/vectors/indexing"
|
|
60
|
+
import { VectorIndexingDispatcher } from "../objects/vectors/indexing-dispatch"
|
|
59
61
|
import { registerVectorIndexingRuntime } from "../objects/vectors/indexing-runtime"
|
|
60
62
|
import type { PipelineDefinition } from "../pipelines/types"
|
|
61
63
|
import { registerProjectionRegistry } from "../projections/internal"
|
|
@@ -88,6 +90,7 @@ import {
|
|
|
88
90
|
createOntologyMutationRuntime,
|
|
89
91
|
registerOntologyMutationRuntime,
|
|
90
92
|
} from "./ontology-mutations"
|
|
93
|
+
import { getApiPublicOrigin } from "./public-origin"
|
|
91
94
|
import { resolveDefinitions } from "./resolve-definitions"
|
|
92
95
|
import { createBoundSixb, type Sixb, type SixbDependencies } from "./sixb"
|
|
93
96
|
import { StorageReadiness } from "./storage-readiness"
|
|
@@ -141,6 +144,7 @@ export class SixbHost<in out TParams extends ParamsConfig = ParamsConfig> {
|
|
|
141
144
|
private readonly webhookRegistry: WebhookRegistry
|
|
142
145
|
private readonly hostContext: SixbHostContext
|
|
143
146
|
private readonly committedFacts: OntologyOutboxDispatcher
|
|
147
|
+
private readonly vectorIndexing?: VectorIndexingDispatcher
|
|
144
148
|
private readonly eventService: DomainEventService
|
|
145
149
|
private readonly ontologyMaintenance: OntologyMaintenance
|
|
146
150
|
private readonly storageReadiness: StorageReadiness
|
|
@@ -234,16 +238,31 @@ export class SixbHost<in out TParams extends ParamsConfig = ParamsConfig> {
|
|
|
234
238
|
...failure,
|
|
235
239
|
}),
|
|
236
240
|
})
|
|
241
|
+
const vectorIndexing = this.storage.ontology.vectorIndexing
|
|
242
|
+
if (
|
|
243
|
+
vectorIndexing &&
|
|
244
|
+
definitions.ontology
|
|
245
|
+
.listObjectTypes()
|
|
246
|
+
.some((type) => Object.keys(type.search?.vectors ?? {}).length > 0)
|
|
247
|
+
) {
|
|
248
|
+
this.vectorIndexing = new VectorIndexingDispatcher(
|
|
249
|
+
this.projectId,
|
|
250
|
+
vectorIndexing,
|
|
251
|
+
this.queues.vectorIndexing
|
|
252
|
+
)
|
|
253
|
+
}
|
|
237
254
|
this.ontologyMaintenance = new OntologyMaintenance({
|
|
238
255
|
projectId: this.projectId,
|
|
239
256
|
storage: this.storage,
|
|
240
257
|
dispatcher: this.committedFacts,
|
|
258
|
+
vectorIndexing: this.vectorIndexing,
|
|
241
259
|
blobStorage: this.blobStorage,
|
|
242
260
|
options: options.ontologyMaintenance,
|
|
243
261
|
})
|
|
244
262
|
|
|
245
263
|
this.hostContext = {
|
|
246
264
|
embeddingModels: definitions.models?.embedding,
|
|
265
|
+
rerankingModels: definitions.models?.reranking,
|
|
247
266
|
projectId: this.projectId,
|
|
248
267
|
broker: this.broker,
|
|
249
268
|
ontology: definitions.ontology,
|
|
@@ -277,16 +296,19 @@ export class SixbHost<in out TParams extends ParamsConfig = ParamsConfig> {
|
|
|
277
296
|
capturedScope.execution
|
|
278
297
|
)
|
|
279
298
|
const embeddingModels = bindEmbeddingModels(this.hostContext.embeddingModels, modelExecution)
|
|
299
|
+
const rerankingModels = bindRerankingModels(this.hostContext.rerankingModels, modelExecution)
|
|
280
300
|
const objectReader = createAuthorizedObjectReader({
|
|
281
301
|
scope: capturedScope,
|
|
282
302
|
ontology: this.hostContext.ontology,
|
|
283
303
|
objectStorage: this.storage.objects,
|
|
284
304
|
embeddingModels,
|
|
305
|
+
rerankingModels,
|
|
285
306
|
})
|
|
286
307
|
|
|
287
308
|
const runtime: SixbRuntimeContext = {
|
|
288
309
|
...this.hostContext,
|
|
289
310
|
embeddingModels,
|
|
311
|
+
rerankingModels,
|
|
290
312
|
modelExecution,
|
|
291
313
|
runtimeAuthorization: capturedScope.authorization,
|
|
292
314
|
objectReader,
|
|
@@ -296,7 +318,10 @@ export class SixbHost<in out TParams extends ParamsConfig = ParamsConfig> {
|
|
|
296
318
|
runtime,
|
|
297
319
|
createOntologyMutationRuntime({
|
|
298
320
|
materializer: this.materializer.withScope(capturedScope),
|
|
299
|
-
notifyCommittedFacts: () =>
|
|
321
|
+
notifyCommittedFacts: () => {
|
|
322
|
+
this.committedFacts.notify()
|
|
323
|
+
this.vectorIndexing?.notify()
|
|
324
|
+
},
|
|
300
325
|
})
|
|
301
326
|
)
|
|
302
327
|
return createBoundSixb<InferSandboxParams<TParams>>(
|
|
@@ -352,6 +377,7 @@ export class SixbHost<in out TParams extends ParamsConfig = ParamsConfig> {
|
|
|
352
377
|
/** Close the runtime broker provider if it owns external resources. */
|
|
353
378
|
async closeBroker(): Promise<void> {
|
|
354
379
|
await this.committedFacts.stop()
|
|
380
|
+
await this.vectorIndexing?.stop()
|
|
355
381
|
await this.ontologyMaintenance.stop()
|
|
356
382
|
await this.broker.close?.()
|
|
357
383
|
}
|
|
@@ -369,6 +395,7 @@ export class SixbHost<in out TParams extends ParamsConfig = ParamsConfig> {
|
|
|
369
395
|
? {}
|
|
370
396
|
: { connectorConnections: this.connectorService.connectionProcess }),
|
|
371
397
|
blobStorage: this.blobStorage,
|
|
398
|
+
apiPublicOrigin: () => getApiPublicOrigin(this),
|
|
372
399
|
lakeStorage: this.lakeStorage,
|
|
373
400
|
}
|
|
374
401
|
}
|
package/src/runtime/index.ts
CHANGED
package/src/runtime/internal.ts
CHANGED
|
@@ -0,0 +1,33 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* The origin the API is reachable at from outside, for features that hand out absolute URLs a
|
|
3
|
+
* third party will fetch. It is deployment topology, not app configuration: the API server
|
|
4
|
+
* records the `publicOrigin` it was started with, and the CLI records `SIXB_API_PUBLIC_ORIGIN`
|
|
5
|
+
* for worker processes. A process that never learns it cannot issue such URLs.
|
|
6
|
+
*/
|
|
7
|
+
|
|
8
|
+
const apiPublicOrigins = new WeakMap<object, string>()
|
|
9
|
+
|
|
10
|
+
/** Record where the API is reachable. A host served by several servers keeps the latest one. */
|
|
11
|
+
export function setApiPublicOrigin(host: object, origin: string): void {
|
|
12
|
+
apiPublicOrigins.set(host, normalizeOrigin(origin))
|
|
13
|
+
}
|
|
14
|
+
|
|
15
|
+
export function getApiPublicOrigin(host: object): string | undefined {
|
|
16
|
+
return apiPublicOrigins.get(host)
|
|
17
|
+
}
|
|
18
|
+
|
|
19
|
+
function normalizeOrigin(value: string): string {
|
|
20
|
+
let url: URL
|
|
21
|
+
try {
|
|
22
|
+
url = new URL(value)
|
|
23
|
+
} catch {
|
|
24
|
+
throw new Error(`[Sixb] Invalid API public origin: '${value}'.`)
|
|
25
|
+
}
|
|
26
|
+
if (url.protocol !== "http:" && url.protocol !== "https:") {
|
|
27
|
+
throw new Error("[Sixb] The API public origin must use http or https.")
|
|
28
|
+
}
|
|
29
|
+
if (url.pathname !== "/" || url.search || url.hash) {
|
|
30
|
+
throw new Error("[Sixb] The API public origin must be an origin, not a full URL.")
|
|
31
|
+
}
|
|
32
|
+
return url.origin
|
|
33
|
+
}
|
package/src/runtime/sixb.ts
CHANGED
|
@@ -65,6 +65,7 @@ export interface SixbDependencies {
|
|
|
65
65
|
readonly connectorService: ConnectorService
|
|
66
66
|
readonly connectorConnections?: ConnectorConnectionProcess
|
|
67
67
|
readonly blobStorage: BlobStorage
|
|
68
|
+
readonly apiPublicOrigin: () => string | undefined
|
|
68
69
|
readonly lakeStorage: LakeStorage
|
|
69
70
|
}
|
|
70
71
|
|
|
@@ -129,13 +130,23 @@ function createExecutionFacades<TParams extends Record<string, unknown>>(
|
|
|
129
130
|
dependencies.definitions.models,
|
|
130
131
|
dependencies.sandbox
|
|
131
132
|
),
|
|
132
|
-
models: createModelsRuntime(
|
|
133
|
+
models: createModelsRuntime(
|
|
134
|
+
runtime,
|
|
135
|
+
execution,
|
|
136
|
+
dependencies.definitions.models,
|
|
137
|
+
dependencies.blobStorage
|
|
138
|
+
),
|
|
133
139
|
aiUsage: createAiUsageRuntime(runtime, dependencies.definitions.security),
|
|
134
140
|
events: createEventsRuntime(runtime),
|
|
135
141
|
logs: createLogsRuntime(runtime, dependencies.logging),
|
|
136
142
|
schedules: createSchedulesRuntime(runtime, dependencies.definitions.schedules),
|
|
137
143
|
shares: createSharesRuntime(runtime, execution, dependencies.definitions.shares),
|
|
138
144
|
connector: createConnectorRuntime(runtime, execution, dependencies.connectorService),
|
|
139
|
-
blobs: createBlobsRuntime(
|
|
145
|
+
blobs: createBlobsRuntime(
|
|
146
|
+
runtime,
|
|
147
|
+
execution,
|
|
148
|
+
dependencies.blobStorage,
|
|
149
|
+
dependencies.apiPublicOrigin
|
|
150
|
+
),
|
|
140
151
|
}
|
|
141
152
|
}
|
package/src/runtime/types.ts
CHANGED
|
@@ -16,7 +16,7 @@ import type { Broker } from "../broker"
|
|
|
16
16
|
import type { DomainEventLog } from "../events"
|
|
17
17
|
import type { RuntimeAuthorization } from "../execution"
|
|
18
18
|
import type { AuthorizedObjectReader } from "../execution/authorized-object-reader"
|
|
19
|
-
import type { EmbeddingModelCatalog } from "../models"
|
|
19
|
+
import type { EmbeddingModelCatalog, RerankingModelCatalog, RerankingModelRef } from "../models"
|
|
20
20
|
import type { ModelExecutionSession } from "../models/execution/session"
|
|
21
21
|
import type {
|
|
22
22
|
ObjectQuery,
|
|
@@ -58,6 +58,7 @@ import type { ActionRunRecord, ObjectLinkRow, Storage } from "../storage"
|
|
|
58
58
|
*/
|
|
59
59
|
export interface SixbHostContext {
|
|
60
60
|
readonly embeddingModels?: EmbeddingModelCatalog
|
|
61
|
+
readonly rerankingModels?: RerankingModelCatalog
|
|
61
62
|
readonly projectId: string
|
|
62
63
|
readonly broker: Broker
|
|
63
64
|
readonly ontology: OntologyRegistry
|
|
@@ -414,6 +415,12 @@ export type ObjectQueryFacetBucket = {
|
|
|
414
415
|
count: number
|
|
415
416
|
}
|
|
416
417
|
|
|
418
|
+
/** Total and facet buckets are calculated from the same matching set. */
|
|
419
|
+
export type ObjectQueryFacetsResult = {
|
|
420
|
+
total: number
|
|
421
|
+
facets: ObjectQueryFacetResult[]
|
|
422
|
+
}
|
|
423
|
+
|
|
417
424
|
export type ObjectQueryFacetResult = {
|
|
418
425
|
propertyId: string
|
|
419
426
|
buckets: ObjectQueryFacetBucket[]
|
|
@@ -669,6 +676,9 @@ export interface ObjectQueryBuilder<
|
|
|
669
676
|
options: { k: number }
|
|
670
677
|
): ObjectQueryBuilder<TObjectType, TRow>
|
|
671
678
|
|
|
679
|
+
/** Reorder up to 100 vector candidates with an explicitly registered server-side model. */
|
|
680
|
+
rerank(options: { model: RerankingModelRef }): ObjectQueryBuilder<TObjectType, TRow>
|
|
681
|
+
|
|
672
682
|
/** Follow an outgoing link and make the linked object type the current result type. */
|
|
673
683
|
traverse<TLinkToken extends LinkToken<TObjectType["id"], string, LinkTargetObjectTypeIdValue>>(
|
|
674
684
|
link: TLinkToken,
|
|
@@ -750,7 +760,7 @@ export interface ObjectQueryBuilder<
|
|
|
750
760
|
exists(): Promise<boolean>
|
|
751
761
|
|
|
752
762
|
/** Count matching objects by configured facetable properties. */
|
|
753
|
-
facets(input: readonly ObjectQueryFacetInput<TObjectType>[]): Promise<
|
|
763
|
+
facets(input: readonly ObjectQueryFacetInput<TObjectType>[]): Promise<ObjectQueryFacetsResult>
|
|
754
764
|
|
|
755
765
|
/** Execute this query with an outer limit of one and return the first object. */
|
|
756
766
|
first(): Promise<Simplify<TRow> | null>
|
|
@@ -68,6 +68,7 @@ export interface AiAccountingAggregateFragment {
|
|
|
68
68
|
readonly cacheWriteInputTokens: AiAccountingUsageMeterFragment
|
|
69
69
|
readonly textOutputTokens: AiAccountingUsageMeterFragment
|
|
70
70
|
readonly reasoningOutputTokens: AiAccountingUsageMeterFragment
|
|
71
|
+
readonly audioDurationMs: AiAccountingUsageMeterFragment
|
|
71
72
|
}
|
|
72
73
|
readonly costs: {
|
|
73
74
|
readonly amount?: AiMoney
|
|
@@ -406,6 +407,7 @@ const AGGREGATE_USAGE_FIELDS = [
|
|
|
406
407
|
"cacheWriteInputTokens",
|
|
407
408
|
"textOutputTokens",
|
|
408
409
|
"reasoningOutputTokens",
|
|
410
|
+
"audioDurationMs",
|
|
409
411
|
] as const
|
|
410
412
|
|
|
411
413
|
type AggregateUsageField = (typeof AGGREGATE_USAGE_FIELDS)[number]
|
|
@@ -110,7 +110,8 @@ function billableMeter(value: unknown): AiBillableMeter {
|
|
|
110
110
|
value !== "tokens.input.cacheWrite1h" &&
|
|
111
111
|
value !== "tokens.output.total" &&
|
|
112
112
|
value !== "tokens.output.text" &&
|
|
113
|
-
value !== "tokens.output.reasoning"
|
|
113
|
+
value !== "tokens.output.reasoning" &&
|
|
114
|
+
value !== "audio.input.milliseconds"
|
|
114
115
|
) {
|
|
115
116
|
throw invalidDetails()
|
|
116
117
|
}
|
|
@@ -15,8 +15,8 @@ import type {
|
|
|
15
15
|
} from "./types"
|
|
16
16
|
|
|
17
17
|
const SIGNED_INT64_MAX = 9_223_372_036_854_775_807n
|
|
18
|
-
const
|
|
19
|
-
const HALF_MILLION =
|
|
18
|
+
const UNITS_PER_MILLION = 1_000_000n
|
|
19
|
+
const HALF_MILLION = UNITS_PER_MILLION / 2n
|
|
20
20
|
const MAX_NUMERIC_TEXT_LENGTH = 128
|
|
21
21
|
const METER_ORDER: Readonly<Record<AiBillableMeter, number>> = {
|
|
22
22
|
"tokens.input.total": 0,
|
|
@@ -28,6 +28,7 @@ const METER_ORDER: Readonly<Record<AiBillableMeter, number>> = {
|
|
|
28
28
|
"tokens.output.total": 6,
|
|
29
29
|
"tokens.output.text": 7,
|
|
30
30
|
"tokens.output.reasoning": 8,
|
|
31
|
+
"audio.input.milliseconds": 9,
|
|
31
32
|
}
|
|
32
33
|
const METERS = new Set(Object.keys(METER_ORDER) as AiBillableMeter[])
|
|
33
34
|
const UNPRICEABLE_REASONS = new Set<AiUnpriceableReason>([
|
|
@@ -120,11 +121,7 @@ export function aiModelCallCostMatchesUsage(
|
|
|
120
121
|
const components = new Map(
|
|
121
122
|
record.estimate.components.map((component) => [component.meter, component])
|
|
122
123
|
)
|
|
123
|
-
if (
|
|
124
|
-
!inputComponentsMatchUsage(components, usage) ||
|
|
125
|
-
!outputComponentsMatchUsage(components, usage)
|
|
126
|
-
)
|
|
127
|
-
return false
|
|
124
|
+
if (!componentsMatchUsage(components, usage)) return false
|
|
128
125
|
}
|
|
129
126
|
if (record.status === "unpriceable") return true
|
|
130
127
|
if (record.components.length === 0 && isExternalValuationSource(record.priceSource.sourceId)) {
|
|
@@ -133,6 +130,22 @@ export function aiModelCallCostMatchesUsage(
|
|
|
133
130
|
|
|
134
131
|
const usage = normalizeAiModelCallUsage(usageRecord.usage)
|
|
135
132
|
const components = new Map(record.components.map((component) => [component.meter, component]))
|
|
133
|
+
return componentsMatchUsage(components, usage)
|
|
134
|
+
}
|
|
135
|
+
|
|
136
|
+
function componentsMatchUsage(
|
|
137
|
+
components: ReadonlyMap<AiBillableMeter, AiCostComponent>,
|
|
138
|
+
usage: AiModelCallUsage
|
|
139
|
+
): boolean {
|
|
140
|
+
const audio = components.get("audio.input.milliseconds")
|
|
141
|
+
if (audio) {
|
|
142
|
+
return (
|
|
143
|
+
components.size === 1 &&
|
|
144
|
+
usage.audioDurationMs !== undefined &&
|
|
145
|
+
BigInt(audio.quantity) === BigInt(usage.audioDurationMs)
|
|
146
|
+
)
|
|
147
|
+
}
|
|
148
|
+
|
|
136
149
|
return (
|
|
137
150
|
inputComponentsMatchUsage(components, usage) && outputComponentsMatchUsage(components, usage)
|
|
138
151
|
)
|
|
@@ -362,7 +375,7 @@ function calculateComponent(
|
|
|
362
375
|
): AiCostComponent {
|
|
363
376
|
const normalizedQuantity = parseQuantity(quantity, `${meter} quantity`)
|
|
364
377
|
const rate = parseNonnegativeInt64(rateAmountNanosPerMillion, `${meter} rate`)
|
|
365
|
-
const charge = (normalizedQuantity * rate + HALF_MILLION) /
|
|
378
|
+
const charge = (normalizedQuantity * rate + HALF_MILLION) / UNITS_PER_MILLION
|
|
366
379
|
assertSignedInt64(charge, `${meter} charge`)
|
|
367
380
|
return {
|
|
368
381
|
meter,
|
|
@@ -8,6 +8,7 @@ import {
|
|
|
8
8
|
AiLimitOperationLock,
|
|
9
9
|
aiLimitAccountingEntryAppliesToSubject,
|
|
10
10
|
aiLimitAmountKey,
|
|
11
|
+
aiLimitMeterApplies,
|
|
11
12
|
aiLimitPolicyDimensionKey,
|
|
12
13
|
aiLimitQuantityFromAmount,
|
|
13
14
|
aiLimitReservationBuckets,
|
|
@@ -227,7 +228,12 @@ export class InMemoryAiLimitStorage implements AiLimitStorage {
|
|
|
227
228
|
const unavailablePolicies: AiLimitPolicyStatus[] = []
|
|
228
229
|
const unavailableReasons = new Set<"missingEstimate" | "incompleteAccounting">()
|
|
229
230
|
for (const policy of enabledPolicies) {
|
|
230
|
-
if (
|
|
231
|
+
if (
|
|
232
|
+
!subjectKeys.has(aiLimitSubjectKey(policy.subject)) ||
|
|
233
|
+
!aiLimitMeterApplies(policy.limit.meter, request.modelKind)
|
|
234
|
+
) {
|
|
235
|
+
continue
|
|
236
|
+
}
|
|
231
237
|
const limit = normalizeAiLimitAmount(policy.limit)
|
|
232
238
|
const estimate = estimates.get(aiLimitAmountKey(limit))
|
|
233
239
|
const status = await this.policyStatus(policy, request.period)
|
|
@@ -268,7 +274,8 @@ export class InMemoryAiLimitStorage implements AiLimitStorage {
|
|
|
268
274
|
const buckets = aiLimitReservationBuckets(
|
|
269
275
|
enabledPolicies,
|
|
270
276
|
request.subjects,
|
|
271
|
-
request.estimates
|
|
277
|
+
request.estimates,
|
|
278
|
+
request.modelKind
|
|
272
279
|
)
|
|
273
280
|
if (buckets.length === 0) return { status: "notRequired" }
|
|
274
281
|
for (const bucket of buckets) {
|
|
@@ -601,6 +608,7 @@ export class InMemoryAiLimitStorage implements AiLimitStorage {
|
|
|
601
608
|
attempt: record.attempt,
|
|
602
609
|
callId: record.callId,
|
|
603
610
|
occurredAt: new Date(record.occurredAt),
|
|
611
|
+
...(record.modelKind === undefined ? {} : { modelKind: record.modelKind }),
|
|
604
612
|
...(record.usage.totalTokens === undefined ? {} : { totalTokens: record.usage.totalTokens }),
|
|
605
613
|
requesterGroupIds: [...record.requesterGroupIds],
|
|
606
614
|
...(requester?.type === "user" || requester?.type === "serviceAccount"
|