@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/models/catalog.ts
CHANGED
|
@@ -1,4 +1,9 @@
|
|
|
1
1
|
import { RuntimeError } from "../runtime/errors"
|
|
2
|
+
import {
|
|
3
|
+
type AudioModelCatalog,
|
|
4
|
+
type AudioModelCatalogInput,
|
|
5
|
+
createAudioCatalog,
|
|
6
|
+
} from "./audio/catalog"
|
|
2
7
|
import { indexModelBindings } from "./catalog-index"
|
|
3
8
|
import { createDecisionCatalog, type DecisionModelCatalog } from "./decision/catalog"
|
|
4
9
|
import type { DecisionModel } from "./decision/types"
|
|
@@ -9,6 +14,7 @@ import {
|
|
|
9
14
|
} from "./definitions"
|
|
10
15
|
import { assertEmbeddingModel, type EmbeddingModel } from "./embedding-model"
|
|
11
16
|
import type { LanguageModel } from "./language-model"
|
|
17
|
+
import { assertRerankingModel, type RerankingModel } from "./reranking-model"
|
|
12
18
|
|
|
13
19
|
/** Stable identity of a configured provider binding. */
|
|
14
20
|
export interface ModelRef {
|
|
@@ -27,6 +33,15 @@ export interface EmbeddingModelCatalog {
|
|
|
27
33
|
getByRef(ref: ModelRef): EmbeddingModelEntry | null
|
|
28
34
|
}
|
|
29
35
|
|
|
36
|
+
export interface RerankingModelEntry extends ModelRef {
|
|
37
|
+
readonly model: RerankingModel
|
|
38
|
+
}
|
|
39
|
+
|
|
40
|
+
export interface RerankingModelCatalog {
|
|
41
|
+
list(): readonly RerankingModelEntry[]
|
|
42
|
+
getByRef(ref: ModelRef): RerankingModelEntry | null
|
|
43
|
+
}
|
|
44
|
+
|
|
30
45
|
/** The configured language models, with the project default. */
|
|
31
46
|
export interface LanguageModelCatalog {
|
|
32
47
|
readonly default: LanguageModelEntry
|
|
@@ -47,17 +62,22 @@ export interface LanguageModelEntry extends LanguageModelRef {
|
|
|
47
62
|
|
|
48
63
|
/** Models a project allows Sixb to use, organized by technical model kind. */
|
|
49
64
|
export interface ModelCatalog {
|
|
65
|
+
readonly audio?: AudioModelCatalog
|
|
50
66
|
readonly language?: LanguageModelCatalog
|
|
51
67
|
readonly decision?: DecisionModelCatalog
|
|
52
68
|
readonly embedding: EmbeddingModelCatalog
|
|
69
|
+
readonly reranking?: RerankingModelCatalog
|
|
53
70
|
}
|
|
54
71
|
|
|
55
72
|
export interface ModelCatalogInput {
|
|
73
|
+
readonly audio?: AudioModelCatalogInput
|
|
56
74
|
/** Ordered; the first entry is the project default. */
|
|
57
75
|
readonly language?: readonly LanguageModel[]
|
|
58
76
|
/** Ordered; the first entry is the project default decision model. */
|
|
59
77
|
readonly decision?: readonly DecisionModel[]
|
|
60
78
|
readonly embedding?: readonly EmbeddingModel[]
|
|
79
|
+
/** Available rerankers; no default model and no automatic activation. */
|
|
80
|
+
readonly reranking?: readonly RerankingModel[]
|
|
61
81
|
}
|
|
62
82
|
|
|
63
83
|
// Only statically required inputs make their corresponding catalogs required.
|
|
@@ -66,7 +86,14 @@ type ConfiguredModelKinds<TInput> = {
|
|
|
66
86
|
}[keyof ModelCatalog]
|
|
67
87
|
|
|
68
88
|
export type ModelCatalogFor<TInput extends ModelCatalogInput> = ModelCatalog &
|
|
69
|
-
Required<Pick<ModelCatalog, ConfiguredModelKinds<TInput>>>
|
|
89
|
+
Required<Pick<ModelCatalog, ConfiguredModelKinds<TInput>>> &
|
|
90
|
+
([TInput] extends [{ readonly audio: { readonly transcription: readonly unknown[] } }]
|
|
91
|
+
? {
|
|
92
|
+
readonly audio: AudioModelCatalog & {
|
|
93
|
+
readonly transcription: NonNullable<AudioModelCatalog["transcription"]>
|
|
94
|
+
}
|
|
95
|
+
}
|
|
96
|
+
: unknown)
|
|
70
97
|
|
|
71
98
|
/** Build an immutable catalog while preserving each family's default and empty-list rules. */
|
|
72
99
|
export function createModelCatalog<TInput extends ModelCatalogInput>(
|
|
@@ -80,12 +107,32 @@ export function createModelCatalog(input: ModelCatalogInput): ModelCatalog {
|
|
|
80
107
|
const language = createLanguageCatalog(input.language)
|
|
81
108
|
const embedding = createEmbeddingCatalog(input.embedding)
|
|
82
109
|
const decision = createDecisionCatalog(input.decision)
|
|
83
|
-
|
|
84
|
-
|
|
85
|
-
|
|
110
|
+
const audio = createAudioCatalog(input.audio)
|
|
111
|
+
const reranking = createRerankingCatalog(input.reranking)
|
|
112
|
+
|
|
113
|
+
if (
|
|
114
|
+
!language &&
|
|
115
|
+
!decision &&
|
|
116
|
+
!audio &&
|
|
117
|
+
embedding.list().length === 0 &&
|
|
118
|
+
!reranking?.list().length
|
|
119
|
+
) {
|
|
120
|
+
throw new RuntimeError(
|
|
121
|
+
"[Sixb] Configure at least one language, embedding, decision, audio or reranking model."
|
|
122
|
+
)
|
|
86
123
|
}
|
|
87
124
|
|
|
88
|
-
return Object.freeze({ language, embedding, decision })
|
|
125
|
+
return Object.freeze({ language, embedding, decision, audio, reranking })
|
|
126
|
+
}
|
|
127
|
+
|
|
128
|
+
function createRerankingCatalog(
|
|
129
|
+
models: readonly RerankingModel[] | undefined
|
|
130
|
+
): RerankingModelCatalog | undefined {
|
|
131
|
+
if (models === undefined) return undefined
|
|
132
|
+
if (!Array.isArray(models)) {
|
|
133
|
+
throw new RuntimeError("[Sixb] models.reranking must be an array of reranking models.")
|
|
134
|
+
}
|
|
135
|
+
return indexModelBindings(models, "reranking", assertRerankingModel)
|
|
89
136
|
}
|
|
90
137
|
|
|
91
138
|
function createLanguageCatalog(
|
|
@@ -5,7 +5,14 @@ import {
|
|
|
5
5
|
type ModelReasoningCapabilities,
|
|
6
6
|
} from "./language-model"
|
|
7
7
|
|
|
8
|
-
export type ModelKind =
|
|
8
|
+
export type ModelKind =
|
|
9
|
+
| "language"
|
|
10
|
+
| "image"
|
|
11
|
+
| "video"
|
|
12
|
+
| "embedding"
|
|
13
|
+
| "decision"
|
|
14
|
+
| "transcription"
|
|
15
|
+
| "reranking"
|
|
9
16
|
|
|
10
17
|
/** Common catalog identity shared by every present and future model runtime. */
|
|
11
18
|
export interface ModelDefinition {
|
package/src/models/events.ts
CHANGED
|
@@ -46,6 +46,8 @@ export type ModelFinishReason =
|
|
|
46
46
|
| "unknown"
|
|
47
47
|
|
|
48
48
|
export interface ModelUsage {
|
|
49
|
+
/** Audio content duration in milliseconds, rounded to the nearest millisecond. Not billed duration. */
|
|
50
|
+
readonly audioDurationMs?: number
|
|
49
51
|
readonly inputTokens?: number
|
|
50
52
|
readonly outputTokens?: number
|
|
51
53
|
readonly uncachedInputTokens?: number
|
|
@@ -168,6 +170,7 @@ export type ModelUiChunk =
|
|
|
168
170
|
| { readonly type: "error"; readonly errorText: string }
|
|
169
171
|
|
|
170
172
|
export interface ModelCallEndEvent {
|
|
173
|
+
readonly modelKind?: import("./definitions").ModelKind
|
|
171
174
|
readonly providerIds?: ModelProviderIds
|
|
172
175
|
/** Retained independently when the selected display cost is provider-reported. */
|
|
173
176
|
readonly estimate?: ModelCostEstimate
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
# Model execution accounting
|
|
2
2
|
|
|
3
|
-
Internal execution and accounting shared by language, embedding and
|
|
3
|
+
Internal execution and accounting shared by language, embedding, decision and reranking calls. Application usage is
|
|
4
4
|
documented in [Usage and limits](../../../../../docs/models/usage-and-limits.md).
|
|
5
5
|
|
|
6
6
|
## Execution boundary
|
|
@@ -47,6 +47,25 @@ Direct provider calls bypass this session. Webhook handlers have no bound model
|
|
|
47
47
|
they must dispatch an action for accounted calls. A process crash before accounting is captured
|
|
48
48
|
can still leave provider billing outside the ledger.
|
|
49
49
|
|
|
50
|
+
## Reranking flow
|
|
51
|
+
|
|
52
|
+
`reranking.ts` binds the registered catalog to the same session. Object queries resolve only that
|
|
53
|
+
catalog, after semantic authorization and before query embedding. The query executor retrieves
|
|
54
|
+
authorized vector candidates first and sends only profile source text; inference holds no storage
|
|
55
|
+
transaction. Outer limits and property selection apply after ranking.
|
|
56
|
+
|
|
57
|
+
Admission estimates the UTF-8 bytes of each query/document pair divided by four, rounded up, with
|
|
58
|
+
zero output allowance. Actual provider meters are preserved. This is a heuristic, not a tokenizer or provider context guarantee. Calls have
|
|
59
|
+
the shared 30-second cancellation bound, with no inference retry. Accounting precedes cancellation
|
|
60
|
+
and ranking validation. A complete permutation with finite scores is required; ties preserve the
|
|
61
|
+
candidate order. `RerankingModelResponseError` carries metadata from malformed billable responses.
|
|
62
|
+
|
|
63
|
+
Provider charges remain distinct from token usage: absent tokens stay unknown. Token limits
|
|
64
|
+
neither admit nor count reranking or transcription calls (`aiLimitMeterApplies` in the limit
|
|
65
|
+
storage helpers), so their unmetered records cannot make a token meter unavailable. Reported
|
|
66
|
+
costs reconcile monetary reservations; missing tariffs fail admission under cost limits. Recovery
|
|
67
|
+
remains the existing accounting-only replay.
|
|
68
|
+
|
|
50
69
|
## Decision flow
|
|
51
70
|
|
|
52
71
|
Decision evaluation in `../decision/runtime.ts` uses the same session and recorder. It snapshots JSON input/questions
|
|
@@ -1,5 +1,6 @@
|
|
|
1
1
|
import type { AiModelCallReservationIdentity } from "../../storage"
|
|
2
|
-
import type {
|
|
2
|
+
import type { ModelKind } from "../definitions"
|
|
3
|
+
import type { ModelCostEstimator, ModelMoney } from "../pricing"
|
|
3
4
|
|
|
4
5
|
/** Default output ceiling when a call and its resolved model supply no limit. */
|
|
5
6
|
export const AI_MODEL_CALL_OUTPUT_TOKEN_ALLOWANCE = 4_096
|
|
@@ -24,7 +25,11 @@ export interface AiModelCallAdmissionInput {
|
|
|
24
25
|
readonly callId: string
|
|
25
26
|
readonly providerId: string
|
|
26
27
|
readonly modelId: string
|
|
28
|
+
/** Selects the applicable limit meters; transcription and reranking skip token limits. */
|
|
29
|
+
readonly modelKind?: ModelKind
|
|
27
30
|
readonly costEstimator?: ModelCostEstimator
|
|
31
|
+
/** A non-token estimate, computed by the resolved binding before inference. */
|
|
32
|
+
readonly reservationCost?: ModelMoney
|
|
28
33
|
readonly inputTokens: AiModelCallInputTokenEstimate
|
|
29
34
|
readonly outputTokenAllowance: number
|
|
30
35
|
readonly estimatedTotalTokens?: number
|
|
@@ -12,6 +12,7 @@ import {
|
|
|
12
12
|
aiUsageLimitUnavailableError,
|
|
13
13
|
applicableAiLimitPolicies,
|
|
14
14
|
} from "../../storage/ai-limits/enforcement"
|
|
15
|
+
import { aiLimitMeterApplies } from "../../storage/ai-limits/provider"
|
|
15
16
|
import type {
|
|
16
17
|
AiModelCallAdmissionDecision,
|
|
17
18
|
AiModelCallAdmissionInput,
|
|
@@ -41,7 +42,9 @@ export function createAiModelCallLimitController(input: {
|
|
|
41
42
|
const policies = await input.storage.aiLimits.listPolicies({
|
|
42
43
|
projectId: input.projectId,
|
|
43
44
|
})
|
|
44
|
-
applicable = applicableAiLimitPolicies(policies, subjects)
|
|
45
|
+
applicable = applicableAiLimitPolicies(policies, subjects).filter((policy) =>
|
|
46
|
+
aiLimitMeterApplies(policy.limit.meter, admission.modelKind)
|
|
47
|
+
)
|
|
45
48
|
} catch (error) {
|
|
46
49
|
throw limitStorageUnavailable(error)
|
|
47
50
|
}
|
|
@@ -63,6 +66,7 @@ export function createAiModelCallLimitController(input: {
|
|
|
63
66
|
...reservationIdentity(admission),
|
|
64
67
|
subjects,
|
|
65
68
|
estimates,
|
|
69
|
+
...(admission.modelKind === undefined ? {} : { modelKind: admission.modelKind }),
|
|
66
70
|
})
|
|
67
71
|
} catch (error) {
|
|
68
72
|
throw limitStorageUnavailable(error)
|
|
@@ -94,24 +98,30 @@ function reservationEstimates(
|
|
|
94
98
|
input: AiModelCallAdmissionInput,
|
|
95
99
|
needsCost: boolean
|
|
96
100
|
): readonly AiLimitQuantity[] {
|
|
97
|
-
|
|
98
|
-
|
|
101
|
+
const estimates: AiLimitQuantity[] = []
|
|
102
|
+
if (input.inputTokens.status === "estimated" && input.estimatedTotalTokens !== undefined) {
|
|
103
|
+
estimates.push({ meter: "tokens.total", amount: input.estimatedTotalTokens })
|
|
99
104
|
}
|
|
100
|
-
|
|
101
|
-
{ meter: "tokens.total", amount: input.estimatedTotalTokens },
|
|
102
|
-
]
|
|
105
|
+
|
|
103
106
|
if (needsCost) {
|
|
104
107
|
try {
|
|
105
|
-
|
|
106
|
-
|
|
107
|
-
|
|
108
|
-
|
|
109
|
-
|
|
108
|
+
let money = input.reservationCost
|
|
109
|
+
if (money == null && input.inputTokens.status === "estimated") {
|
|
110
|
+
money = input.costEstimator?.estimateReservation?.({
|
|
111
|
+
inputTokens: input.inputTokens.tokens,
|
|
112
|
+
outputTokens: input.outputTokenAllowance,
|
|
113
|
+
})
|
|
114
|
+
}
|
|
115
|
+
|
|
116
|
+
if (money) {
|
|
117
|
+
estimates.push({ meter: "cost.catalogEstimated", amount: money })
|
|
118
|
+
}
|
|
110
119
|
} catch {
|
|
111
120
|
// An unavailable price must not prevent a token-only policy from being evaluated.
|
|
112
121
|
return estimates
|
|
113
122
|
}
|
|
114
123
|
}
|
|
124
|
+
|
|
115
125
|
return estimates
|
|
116
126
|
}
|
|
117
127
|
|
|
@@ -157,6 +157,7 @@ export class AiModelCallRecorder {
|
|
|
157
157
|
providerId: event.providerId,
|
|
158
158
|
...(event.providerIds === undefined ? {} : { providerIds: event.providerIds }),
|
|
159
159
|
requestedModelId: event.modelId,
|
|
160
|
+
...(event.modelKind === undefined ? {} : { modelKind: event.modelKind }),
|
|
160
161
|
...(event.requestedReasoning === undefined
|
|
161
162
|
? {}
|
|
162
163
|
: { requestedReasoning: event.requestedReasoning }),
|
|
@@ -73,6 +73,7 @@ function toQueuePayload(record: RecordAiModelCallInput): AiModelCallRecordPayloa
|
|
|
73
73
|
? {}
|
|
74
74
|
: { providerIds: structuredClone(record.providerIds) }),
|
|
75
75
|
requestedModelId: record.requestedModelId,
|
|
76
|
+
...(record.modelKind === undefined ? {} : { modelKind: record.modelKind }),
|
|
76
77
|
...(record.requestedReasoning === undefined
|
|
77
78
|
? {}
|
|
78
79
|
: { requestedReasoning: structuredClone(record.requestedReasoning) }),
|
|
@@ -0,0 +1,137 @@
|
|
|
1
|
+
import { randomUUID } from "node:crypto"
|
|
2
|
+
import type { RerankingModelCatalog } from "../catalog"
|
|
3
|
+
import { indexModelBindings } from "../catalog-index"
|
|
4
|
+
import { estimateModelCall } from "../pricing"
|
|
5
|
+
import {
|
|
6
|
+
assertRerankingModel,
|
|
7
|
+
type RerankingModel,
|
|
8
|
+
type RerankingModelRequest,
|
|
9
|
+
RerankingModelResponseError,
|
|
10
|
+
type RerankingModelResponseMetadata,
|
|
11
|
+
type RerankingModelResult,
|
|
12
|
+
validateRerankingResults,
|
|
13
|
+
} from "../reranking-model"
|
|
14
|
+
import type { AiModelCallRecorder } from "./model-call-recorder"
|
|
15
|
+
import type { ModelExecutionSession } from "./session"
|
|
16
|
+
|
|
17
|
+
export function bindRerankingModels(
|
|
18
|
+
catalog: RerankingModelCatalog | undefined,
|
|
19
|
+
session: ModelExecutionSession
|
|
20
|
+
): RerankingModelCatalog | undefined {
|
|
21
|
+
if (!catalog) return undefined
|
|
22
|
+
return indexModelBindings(
|
|
23
|
+
catalog.list().map(({ model }) =>
|
|
24
|
+
Object.freeze({
|
|
25
|
+
providerId: model.providerId,
|
|
26
|
+
modelId: model.modelId,
|
|
27
|
+
definition: model.definition,
|
|
28
|
+
rerank: (input: RerankingModelRequest) => executeReranking(session, model, input),
|
|
29
|
+
})
|
|
30
|
+
),
|
|
31
|
+
"reranking",
|
|
32
|
+
assertRerankingModel
|
|
33
|
+
)
|
|
34
|
+
}
|
|
35
|
+
|
|
36
|
+
async function executeReranking(
|
|
37
|
+
session: ModelExecutionSession,
|
|
38
|
+
binding: RerankingModel,
|
|
39
|
+
input: RerankingModelRequest
|
|
40
|
+
): Promise<RerankingModelResult> {
|
|
41
|
+
const query = input.query
|
|
42
|
+
if (
|
|
43
|
+
typeof query !== "string" ||
|
|
44
|
+
!query.trim() ||
|
|
45
|
+
!Array.isArray(input.documents) ||
|
|
46
|
+
input.documents.some((text) => typeof text !== "string" || !text.trim())
|
|
47
|
+
) {
|
|
48
|
+
throw new TypeError("[SixbModels] Reranking requires a query and nonempty document strings.")
|
|
49
|
+
}
|
|
50
|
+
const documents = [...input.documents]
|
|
51
|
+
const signal = AbortSignal.any([session.signal(input.signal), AbortSignal.timeout(30_000)])
|
|
52
|
+
signal.throwIfAborted()
|
|
53
|
+
if (documents.length === 0) return { results: [] }
|
|
54
|
+
|
|
55
|
+
const accounting = await session.accounting()
|
|
56
|
+
accounting.assertHealthy()
|
|
57
|
+
const model = (await binding.resolve?.()) ?? binding
|
|
58
|
+
assertRerankingModel(model)
|
|
59
|
+
if (model.providerId !== binding.providerId || model.modelId !== binding.modelId) {
|
|
60
|
+
throw new TypeError(
|
|
61
|
+
"[SixbModels] Resolved reranking model identity does not match its binding."
|
|
62
|
+
)
|
|
63
|
+
}
|
|
64
|
+
signal.throwIfAborted()
|
|
65
|
+
|
|
66
|
+
// Rerankers compare each document with the query. Count the query for each pair;
|
|
67
|
+
// this is the shared admission heuristic, never a substitute for reported usage.
|
|
68
|
+
const encoder = new TextEncoder()
|
|
69
|
+
const queryBytes = encoder.encode(query).byteLength
|
|
70
|
+
const tokens = documents.reduce(
|
|
71
|
+
(sum, text) => sum + Math.ceil((queryBytes + encoder.encode(text).byteLength) / 4),
|
|
72
|
+
0
|
|
73
|
+
)
|
|
74
|
+
const callId = `call_${randomUUID()}`
|
|
75
|
+
await accounting.admitCall({
|
|
76
|
+
callId,
|
|
77
|
+
providerId: model.providerId,
|
|
78
|
+
modelId: model.modelId,
|
|
79
|
+
modelKind: "reranking",
|
|
80
|
+
costEstimator: model.costEstimator,
|
|
81
|
+
inputTokens: { status: "estimated", tokens, method: "utf8BytesDividedByFour" },
|
|
82
|
+
outputTokenAllowance: 0,
|
|
83
|
+
estimatedTotalTokens: tokens,
|
|
84
|
+
})
|
|
85
|
+
|
|
86
|
+
let result: RerankingModelResult
|
|
87
|
+
try {
|
|
88
|
+
signal.throwIfAborted()
|
|
89
|
+
result = await model.rerank({ query, documents, signal })
|
|
90
|
+
} catch (error) {
|
|
91
|
+
const metadata = error instanceof RerankingModelResponseError ? error.metadata : {}
|
|
92
|
+
await recordReranking(accounting, model, callId, metadata)
|
|
93
|
+
throw error
|
|
94
|
+
}
|
|
95
|
+
|
|
96
|
+
// A malformed or cancelled response can still be billable.
|
|
97
|
+
await recordReranking(accounting, model, callId, result ?? {})
|
|
98
|
+
signal.throwIfAborted()
|
|
99
|
+
try {
|
|
100
|
+
return { ...result, results: validateRerankingResults(result?.results, documents.length) }
|
|
101
|
+
} catch (cause) {
|
|
102
|
+
throw new RerankingModelResponseError(
|
|
103
|
+
"[SixbModels] Invalid reranking response.",
|
|
104
|
+
model.providerId,
|
|
105
|
+
model.modelId,
|
|
106
|
+
result ?? {},
|
|
107
|
+
{ cause }
|
|
108
|
+
)
|
|
109
|
+
}
|
|
110
|
+
}
|
|
111
|
+
|
|
112
|
+
async function recordReranking(
|
|
113
|
+
accounting: AiModelCallRecorder,
|
|
114
|
+
model: RerankingModel,
|
|
115
|
+
callId: string,
|
|
116
|
+
metadata: RerankingModelResponseMetadata
|
|
117
|
+
): Promise<void> {
|
|
118
|
+
const usage = { ...metadata.usage, outputTokens: metadata.usage?.outputTokens ?? 0 }
|
|
119
|
+
const estimate = estimateModelCall(model, {
|
|
120
|
+
usage,
|
|
121
|
+
route: metadata.route,
|
|
122
|
+
responseModelId: metadata.responseModelId,
|
|
123
|
+
})
|
|
124
|
+
await accounting.onModelCallEnd({
|
|
125
|
+
callId,
|
|
126
|
+
modelKind: "reranking",
|
|
127
|
+
providerId: model.providerId,
|
|
128
|
+
modelId: model.modelId,
|
|
129
|
+
responseId: metadata.providerIds?.responseId ?? callId,
|
|
130
|
+
responseModelId: metadata.responseModelId,
|
|
131
|
+
providerIds: metadata.providerIds,
|
|
132
|
+
usage,
|
|
133
|
+
cost: metadata.reportedCost ? { status: "reported", ...metadata.reportedCost } : estimate,
|
|
134
|
+
...(metadata.reportedCost ? { estimate } : {}),
|
|
135
|
+
route: metadata.route,
|
|
136
|
+
})
|
|
137
|
+
}
|
|
@@ -4,6 +4,7 @@ import type { ModelUsage } from "../events"
|
|
|
4
4
|
/** Map one provider-neutral model call into Sixb's durable accounting vocabulary. */
|
|
5
5
|
export function aiModelCallUsageFromModel(usage: ModelUsage): AiModelCallUsageInput {
|
|
6
6
|
return {
|
|
7
|
+
...(usage.audioDurationMs === undefined ? {} : { audioDurationMs: usage.audioDurationMs }),
|
|
7
8
|
...(usage.inputTokens === undefined ? {} : { inputTokens: usage.inputTokens }),
|
|
8
9
|
...(usage.outputTokens === undefined ? {} : { outputTokens: usage.outputTokens }),
|
|
9
10
|
...(usage.uncachedInputTokens === undefined
|
package/src/models/execution.ts
CHANGED
|
@@ -1,7 +1,9 @@
|
|
|
1
1
|
import { runModelLoop } from "../agents/model-loop"
|
|
2
2
|
import { assertProviderAccess } from "../authorization"
|
|
3
|
+
import type { BlobStorage } from "../blob-storage/types"
|
|
3
4
|
import type { ExecutionContext } from "../execution"
|
|
4
5
|
import type { SixbRuntimeContext } from "../runtime/types"
|
|
6
|
+
import { createAudioRuntime } from "./audio/runtime"
|
|
5
7
|
import type { ModelCatalog } from "./catalog"
|
|
6
8
|
import { createDecisionRuntime } from "./decision/runtime"
|
|
7
9
|
import { ModelProviderError, ModelStreamError, UnsupportedModelFeatureError } from "./errors"
|
|
@@ -24,7 +26,8 @@ import { resolveLanguageModel } from "./resolve"
|
|
|
24
26
|
export function createModelsRuntime(
|
|
25
27
|
runtime: SixbRuntimeContext,
|
|
26
28
|
execution: ExecutionContext,
|
|
27
|
-
catalog: ModelCatalog | undefined
|
|
29
|
+
catalog: ModelCatalog | undefined,
|
|
30
|
+
blobs?: BlobStorage
|
|
28
31
|
): ModelsRuntime {
|
|
29
32
|
const session = runtime.modelExecution ?? new ModelExecutionSession(runtime, execution)
|
|
30
33
|
|
|
@@ -123,6 +126,7 @@ export function createModelsRuntime(
|
|
|
123
126
|
const models: ModelsRuntime = {
|
|
124
127
|
language: { generate },
|
|
125
128
|
decision: createDecisionRuntime(runtime, execution, catalog, session),
|
|
129
|
+
audio: createAudioRuntime(runtime, execution, catalog, session, blobs),
|
|
126
130
|
}
|
|
127
131
|
registerModelExecutionBinding(models, (input) => {
|
|
128
132
|
session.bind(input)
|
|
@@ -1,4 +1,5 @@
|
|
|
1
1
|
import type { InferSchemaOrRef, SchemaOrRef } from "../ontology"
|
|
2
|
+
import type { AudioModelsRuntime } from "./audio/types"
|
|
2
3
|
import type { DecisionModelsRuntime } from "./decision/types"
|
|
3
4
|
import type { ModelFinishReason, ModelUsage } from "./events"
|
|
4
5
|
import type { LanguageModel, ModelReasoning } from "./language-model"
|
|
@@ -47,6 +48,7 @@ export interface LanguageModelsRuntime {
|
|
|
47
48
|
}
|
|
48
49
|
|
|
49
50
|
export interface ModelsRuntime {
|
|
51
|
+
readonly audio: AudioModelsRuntime
|
|
50
52
|
readonly language: LanguageModelsRuntime
|
|
51
53
|
readonly decision: DecisionModelsRuntime
|
|
52
54
|
}
|
package/src/models/index.ts
CHANGED
|
@@ -1,5 +1,25 @@
|
|
|
1
|
+
export type { FileRef } from "../blob-storage/types"
|
|
1
2
|
export type { JsonObject, JsonPrimitive, JsonValue } from "../json"
|
|
2
3
|
export { assertJsonObject, assertJsonValue, isJsonObject, isJsonValue } from "../json"
|
|
4
|
+
export type {
|
|
5
|
+
AudioModelCatalog,
|
|
6
|
+
AudioModelCatalogInput,
|
|
7
|
+
TranscriptionModelCatalog,
|
|
8
|
+
TranscriptionModelEntry,
|
|
9
|
+
} from "./audio/catalog"
|
|
10
|
+
export { TranscriptionModelResponseError } from "./audio/errors"
|
|
11
|
+
export type {
|
|
12
|
+
AudioModelsRuntime,
|
|
13
|
+
AudioTranscribeInput,
|
|
14
|
+
AudioTranscribeResult,
|
|
15
|
+
TranscriptionCostEstimator,
|
|
16
|
+
TranscriptionModel,
|
|
17
|
+
TranscriptionModelDefinition,
|
|
18
|
+
TranscriptionModelRequest,
|
|
19
|
+
TranscriptionModelResponseMetadata,
|
|
20
|
+
TranscriptionModelResult,
|
|
21
|
+
TranscriptionOutput,
|
|
22
|
+
} from "./audio/types"
|
|
3
23
|
export type {
|
|
4
24
|
EmbeddingModelCatalog,
|
|
5
25
|
EmbeddingModelEntry,
|
|
@@ -12,6 +32,8 @@ export type {
|
|
|
12
32
|
ModelCatalogInput,
|
|
13
33
|
ModelDefinitionCatalog,
|
|
14
34
|
ModelRef,
|
|
35
|
+
RerankingModelCatalog,
|
|
36
|
+
RerankingModelEntry,
|
|
15
37
|
} from "./catalog"
|
|
16
38
|
export { createModelCatalog } from "./catalog"
|
|
17
39
|
export type { DecisionModelCatalog, DecisionModelEntry } from "./decision/catalog"
|
|
@@ -131,4 +153,14 @@ export type {
|
|
|
131
153
|
ModelUnitPrice,
|
|
132
154
|
} from "./rate-card"
|
|
133
155
|
export { defineModelRateCard } from "./rate-card"
|
|
156
|
+
export type {
|
|
157
|
+
RerankingModel,
|
|
158
|
+
RerankingModelDefinition,
|
|
159
|
+
RerankingModelRef,
|
|
160
|
+
RerankingModelRequest,
|
|
161
|
+
RerankingModelResponseMetadata,
|
|
162
|
+
RerankingModelResult,
|
|
163
|
+
RerankingResult,
|
|
164
|
+
} from "./reranking-model"
|
|
165
|
+
export { RerankingModelResponseError } from "./reranking-model"
|
|
134
166
|
export type { ModelOutput, ModelTool, ModelToolExecutionContext } from "./tools"
|
package/src/models/pricing.ts
CHANGED
|
@@ -3,7 +3,7 @@ import type { LanguageModelRateCard, ModelTokenPrice } from "./rate-card"
|
|
|
3
3
|
|
|
4
4
|
/** Optional local financial enrichment cannot discard a completed, billable call. */
|
|
5
5
|
export function estimateModelCall(
|
|
6
|
-
model: { readonly costEstimator?: ModelCostEstimator },
|
|
6
|
+
model: { readonly costEstimator?: Pick<ModelCostEstimator, "estimate"> },
|
|
7
7
|
input: Parameters<ModelCostEstimator["estimate"]>[0]
|
|
8
8
|
): ModelCostEstimate {
|
|
9
9
|
try {
|
|
@@ -46,6 +46,7 @@ export interface ModelCostEstimator {
|
|
|
46
46
|
}
|
|
47
47
|
|
|
48
48
|
export type ModelCostMeter =
|
|
49
|
+
| "audio.input.milliseconds"
|
|
49
50
|
| "tokens.input.total"
|
|
50
51
|
| "tokens.input.uncached"
|
|
51
52
|
| "tokens.input.cacheRead"
|
|
@@ -0,0 +1,114 @@
|
|
|
1
|
+
import type { ModelDefinition } from "./definitions"
|
|
2
|
+
import { ModelProviderError } from "./errors"
|
|
3
|
+
import type { ModelProviderIds, ModelRoute, ModelUsage } from "./events"
|
|
4
|
+
import type { ModelCostEstimator, ModelReportedCost } from "./pricing"
|
|
5
|
+
|
|
6
|
+
export interface RerankingModelDefinition extends ModelDefinition {
|
|
7
|
+
readonly kind: "reranking"
|
|
8
|
+
}
|
|
9
|
+
|
|
10
|
+
/** Serializable identity; the server resolves its own registered binding. */
|
|
11
|
+
export interface RerankingModelRef {
|
|
12
|
+
readonly providerId: string
|
|
13
|
+
readonly modelId: string
|
|
14
|
+
readonly definition: RerankingModelDefinition
|
|
15
|
+
}
|
|
16
|
+
|
|
17
|
+
export interface RerankingModelRequest {
|
|
18
|
+
readonly query: string
|
|
19
|
+
readonly documents: readonly string[]
|
|
20
|
+
readonly signal?: AbortSignal
|
|
21
|
+
}
|
|
22
|
+
|
|
23
|
+
export interface RerankingModelResponseMetadata {
|
|
24
|
+
readonly usage?: ModelUsage
|
|
25
|
+
readonly providerIds?: ModelProviderIds
|
|
26
|
+
readonly responseModelId?: string
|
|
27
|
+
readonly reportedCost?: ModelReportedCost
|
|
28
|
+
readonly route?: ModelRoute
|
|
29
|
+
}
|
|
30
|
+
|
|
31
|
+
export interface RerankingResult {
|
|
32
|
+
/** Position in the original documents array. */
|
|
33
|
+
readonly index: number
|
|
34
|
+
/** Provider relevance score, not a calibrated probability. */
|
|
35
|
+
readonly score: number
|
|
36
|
+
}
|
|
37
|
+
|
|
38
|
+
export interface RerankingModelResult extends RerankingModelResponseMetadata {
|
|
39
|
+
/** One result per input document; Sixb validates completeness and orders by score. */
|
|
40
|
+
readonly results: readonly RerankingResult[]
|
|
41
|
+
}
|
|
42
|
+
|
|
43
|
+
export interface RerankingModel extends RerankingModelRef {
|
|
44
|
+
readonly costEstimator?: ModelCostEstimator
|
|
45
|
+
resolve?(): Promise<RerankingModel>
|
|
46
|
+
rerank(request: RerankingModelRequest): Promise<RerankingModelResult>
|
|
47
|
+
}
|
|
48
|
+
|
|
49
|
+
export function assertRerankingModel(model: RerankingModel): void {
|
|
50
|
+
if (
|
|
51
|
+
!model ||
|
|
52
|
+
typeof model !== "object" ||
|
|
53
|
+
typeof model.rerank !== "function" ||
|
|
54
|
+
!validIdentifier(model.providerId) ||
|
|
55
|
+
!validIdentifier(model.modelId) ||
|
|
56
|
+
model.definition?.kind !== "reranking" ||
|
|
57
|
+
model.definition.providerId !== model.providerId ||
|
|
58
|
+
model.definition.modelId !== model.modelId
|
|
59
|
+
) {
|
|
60
|
+
throw new TypeError("[Sixb] Expected a RerankingModel with a valid identity and rerank method.")
|
|
61
|
+
}
|
|
62
|
+
}
|
|
63
|
+
|
|
64
|
+
export function validateRerankingResults(
|
|
65
|
+
results: unknown,
|
|
66
|
+
documentCount: number
|
|
67
|
+
): RerankingResult[] {
|
|
68
|
+
if (!Array.isArray(results) || results.length !== documentCount) {
|
|
69
|
+
throw new TypeError("[SixbModels] Reranking must return one result per document.")
|
|
70
|
+
}
|
|
71
|
+
const seen = new Set<number>()
|
|
72
|
+
const validated = results.map((result: unknown) => {
|
|
73
|
+
if (!result || typeof result !== "object") {
|
|
74
|
+
throw new TypeError("[SixbModels] Invalid reranking result.")
|
|
75
|
+
}
|
|
76
|
+
const index: unknown = Reflect.get(result, "index")
|
|
77
|
+
const score: unknown = Reflect.get(result, "score")
|
|
78
|
+
if (
|
|
79
|
+
typeof index !== "number" ||
|
|
80
|
+
!Number.isSafeInteger(index) ||
|
|
81
|
+
index < 0 ||
|
|
82
|
+
index >= documentCount ||
|
|
83
|
+
seen.has(index) ||
|
|
84
|
+
typeof score !== "number" ||
|
|
85
|
+
!Number.isFinite(score)
|
|
86
|
+
) {
|
|
87
|
+
throw new TypeError("[SixbModels] Reranking requires unique valid indices and finite scores.")
|
|
88
|
+
}
|
|
89
|
+
seen.add(index)
|
|
90
|
+
return { index, score }
|
|
91
|
+
})
|
|
92
|
+
// Stable ties preserve candidate rank, independent of the provider's response ordering.
|
|
93
|
+
return validated.sort((left, right) => right.score - left.score || left.index - right.index)
|
|
94
|
+
}
|
|
95
|
+
|
|
96
|
+
function validIdentifier(value: unknown): value is string {
|
|
97
|
+
return typeof value === "string" && value.length > 0 && value.trim() === value
|
|
98
|
+
}
|
|
99
|
+
|
|
100
|
+
export class RerankingModelResponseError extends ModelProviderError {
|
|
101
|
+
constructor(
|
|
102
|
+
message: string,
|
|
103
|
+
providerId: string,
|
|
104
|
+
modelId: string,
|
|
105
|
+
readonly metadata: RerankingModelResponseMetadata,
|
|
106
|
+
options?: { cause?: unknown }
|
|
107
|
+
) {
|
|
108
|
+
super(message, providerId, modelId, {
|
|
109
|
+
code: "invalid_reranking_response",
|
|
110
|
+
retryable: false,
|
|
111
|
+
cause: options?.cause,
|
|
112
|
+
})
|
|
113
|
+
}
|
|
114
|
+
}
|