@sixb/core 0.1.5 → 0.1.7
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 +37 -33
- package/dist/actions/index.js.map +1 -1
- package/dist/actions/types/definitions.d.ts +8 -2
- package/dist/actions/types/definitions.d.ts.map +1 -1
- package/dist/actions/worker.js +3 -3
- package/dist/agents/adapters.d.ts +33 -76
- package/dist/agents/adapters.d.ts.map +1 -1
- package/dist/agents/authority.d.ts +22 -6
- package/dist/agents/authority.d.ts.map +1 -1
- package/dist/agents/builders.d.ts +3 -11
- package/dist/agents/builders.d.ts.map +1 -1
- package/dist/agents/context.js +2 -2
- package/dist/agents/dispatch.d.ts +9 -1
- package/dist/agents/dispatch.d.ts.map +1 -1
- package/dist/agents/errors.d.ts +2 -2
- package/dist/agents/errors.d.ts.map +1 -1
- package/dist/agents/execution.d.ts +9 -10
- package/dist/agents/execution.d.ts.map +1 -1
- package/dist/agents/ids.d.ts +4 -0
- package/dist/agents/ids.d.ts.map +1 -1
- package/dist/agents/index.d.ts +13 -9
- package/dist/agents/index.d.ts.map +1 -1
- package/dist/agents/index.js +80 -68
- package/dist/agents/index.js.map +1 -1
- package/dist/agents/message.d.ts +17 -10
- package/dist/agents/message.d.ts.map +1 -1
- package/dist/agents/model-loop.d.ts +56 -0
- package/dist/agents/model-loop.d.ts.map +1 -0
- package/dist/agents/reference.d.ts +4 -0
- package/dist/agents/reference.d.ts.map +1 -0
- package/dist/agents/request.d.ts +10 -8
- package/dist/agents/request.d.ts.map +1 -1
- package/dist/agents/retired-config.d.ts +4 -0
- package/dist/agents/retired-config.d.ts.map +1 -0
- package/dist/agents/streams.d.ts +13 -8
- package/dist/agents/streams.d.ts.map +1 -1
- package/dist/agents/streams.js +7 -5
- package/dist/agents/streams.js.map +1 -1
- package/dist/agents/tool-catalog.d.ts +9 -0
- package/dist/agents/tool-catalog.d.ts.map +1 -0
- package/dist/agents/tool-definition.d.ts +1 -0
- package/dist/agents/tool-definition.d.ts.map +1 -1
- package/dist/agents/types.d.ts +31 -68
- package/dist/agents/types.d.ts.map +1 -1
- package/dist/agents/validation.d.ts +4 -10
- package/dist/agents/validation.d.ts.map +1 -1
- package/dist/ai-usage/execution.d.ts +53 -0
- package/dist/ai-usage/execution.d.ts.map +1 -0
- package/dist/ai-usage/index.d.ts +3 -0
- package/dist/ai-usage/index.d.ts.map +1 -0
- package/dist/auth/index.d.ts +1 -1
- package/dist/auth/index.d.ts.map +1 -1
- package/dist/auth/index.js +7 -7
- package/dist/auth/runtime.d.ts.map +1 -1
- package/dist/auth/strategy.d.ts +1 -1
- package/dist/auth/strategy.d.ts.map +1 -1
- package/dist/auth/types.d.ts +13 -0
- package/dist/auth/types.d.ts.map +1 -1
- package/dist/authorization/decision.d.ts +5 -2
- package/dist/authorization/decision.d.ts.map +1 -1
- package/dist/authorization/grant-kinds.d.ts +24 -8
- package/dist/authorization/grant-kinds.d.ts.map +1 -1
- package/dist/authorization/index.d.ts +1 -1
- package/dist/authorization/index.d.ts.map +1 -1
- package/dist/authorization/index.js +8 -6
- package/dist/authorization/index.js.map +1 -1
- package/dist/authorization/resolve.d.ts +3 -3
- package/dist/authorization/resolve.d.ts.map +1 -1
- package/dist/authorization/types.d.ts +7 -5
- package/dist/authorization/types.d.ts.map +1 -1
- package/dist/blob-storage/browser.js +2 -2
- package/dist/blob-storage/index.js +3 -3
- package/dist/bootstrap/discovery.d.ts +1 -7
- package/dist/bootstrap/discovery.d.ts.map +1 -1
- package/dist/bootstrap/index.js +52 -48
- package/dist/bootstrap/index.js.map +1 -1
- package/dist/broker/index.js +2 -2
- package/dist/{chunk-zqysyfjt.js → chunk-08m3b6w8.js} +1 -1
- package/dist/{chunk-xdf9yswn.js → chunk-08twe8m6.js} +93 -8
- package/dist/chunk-08twe8m6.js.map +12 -0
- package/dist/{chunk-xkthy56g.js → chunk-1kamz6j0.js} +1 -1
- package/dist/{chunk-h6h91mfy.js → chunk-2b5qtban.js} +12 -12
- package/dist/{chunk-h6h91mfy.js.map → chunk-2b5qtban.js.map} +3 -3
- package/dist/{chunk-0172wgm9.js → chunk-2xns679x.js} +10 -2
- package/dist/{chunk-0172wgm9.js.map → chunk-2xns679x.js.map} +3 -3
- package/dist/{chunk-f83ka50g.js → chunk-37wk412q.js} +86 -28
- package/dist/{chunk-f83ka50g.js.map → chunk-37wk412q.js.map} +8 -8
- package/dist/{chunk-6d5xdj1q.js → chunk-3fqt22c4.js} +4 -4
- package/dist/{chunk-t9xghkva.js → chunk-3kv70xwp.js} +3 -2
- package/dist/{chunk-t9xghkva.js.map → chunk-3kv70xwp.js.map} +3 -3
- package/dist/{chunk-z3zp0bj1.js → chunk-407j3msh.js} +1 -1
- package/dist/{chunk-rhrbz7d4.js → chunk-4a849fr1.js} +1 -1
- package/dist/{chunk-62c7t4jc.js → chunk-4nxeacx7.js} +1 -1
- package/dist/{chunk-cy0n5dms.js → chunk-5jcdmjam.js} +1 -1
- package/dist/{chunk-819wnjz8.js → chunk-64sr682n.js} +7 -7
- package/dist/{chunk-v0egge8b.js → chunk-6ed5bwnd.js} +666 -81
- package/dist/chunk-6ed5bwnd.js.map +57 -0
- package/dist/{chunk-x2yw73hy.js → chunk-7ds9620f.js} +1 -1
- package/dist/{chunk-dm72y8wt.js → chunk-7y0f6rf1.js} +29 -16
- package/dist/chunk-7y0f6rf1.js.map +10 -0
- package/dist/{chunk-72q2y8hn.js → chunk-8tsf6dmc.js} +2 -2
- package/dist/{chunk-72q2y8hn.js.map → chunk-8tsf6dmc.js.map} +3 -3
- package/dist/{chunk-tbv03sx2.js → chunk-9aehf39w.js} +7 -7
- package/dist/{chunk-ezake7g1.js → chunk-agsvg9ar.js} +1 -1
- package/dist/{chunk-rdeagz6b.js → chunk-atmkaf60.js} +1 -1
- package/dist/{chunk-rdeagz6b.js.map → chunk-atmkaf60.js.map} +2 -2
- package/dist/chunk-c15dr03f.js +43 -0
- package/dist/chunk-c15dr03f.js.map +10 -0
- package/dist/{chunk-78c6xvyr.js → chunk-d2ndstdf.js} +8 -6
- package/dist/{chunk-78c6xvyr.js.map → chunk-d2ndstdf.js.map} +2 -2
- package/dist/{chunk-rnshztfq.js → chunk-d63tybny.js} +2 -2
- package/dist/{chunk-t0jjkep3.js → chunk-d8qkxt2v.js} +4 -2
- package/dist/chunk-d8qkxt2v.js.map +10 -0
- package/dist/{chunk-vybf6pkp.js → chunk-dbc80ad7.js} +1 -1
- package/dist/{chunk-4gz41why.js → chunk-dqn23610.js} +1 -1
- package/dist/{chunk-z3ga9q5m.js → chunk-e4rvtvpw.js} +13 -11
- package/dist/{chunk-z3ga9q5m.js.map → chunk-e4rvtvpw.js.map} +2 -2
- package/dist/{chunk-h9kxd41f.js → chunk-gbrpsx4m.js} +19 -6
- package/dist/chunk-gbrpsx4m.js.map +11 -0
- package/dist/{chunk-84h6qhmp.js → chunk-h0knpbz5.js} +468 -1236
- package/dist/chunk-h0knpbz5.js.map +38 -0
- package/dist/{chunk-zp2v2rv6.js → chunk-ha58tjtt.js} +6 -6
- package/dist/{chunk-f6erf2vv.js → chunk-hdz94br2.js} +2 -2
- package/dist/chunk-jecn6t54.js +307 -0
- package/dist/chunk-jecn6t54.js.map +12 -0
- package/dist/{chunk-dsrkgtnh.js → chunk-jq43kdvk.js} +1 -1
- package/dist/{chunk-wtmzkcht.js → chunk-k34z5rvh.js} +1 -1
- package/dist/{chunk-htq0qh7z.js → chunk-ka3a2ft3.js} +2 -2
- package/dist/{chunk-4h947jd8.js → chunk-kt81c11h.js} +2 -2
- package/dist/chunk-n2arzn6e.js +1745 -0
- package/dist/chunk-n2arzn6e.js.map +20 -0
- package/dist/{chunk-f2rt4vkh.js → chunk-n2w475r0.js} +3 -3
- package/dist/{chunk-t8t39h7v.js → chunk-n6jxh8sw.js} +10 -2
- package/dist/chunk-n6jxh8sw.js.map +10 -0
- package/dist/{chunk-drjqm1aa.js → chunk-p03r0h5s.js} +310 -28
- package/dist/chunk-p03r0h5s.js.map +16 -0
- package/dist/chunk-p2vqaxkc.js +528 -0
- package/dist/chunk-p2vqaxkc.js.map +15 -0
- package/dist/{chunk-gadsm794.js → chunk-qjycjdj6.js} +84 -11
- package/dist/chunk-qjycjdj6.js.map +12 -0
- package/dist/chunk-qjzp9xyb.js +286 -0
- package/dist/chunk-qjzp9xyb.js.map +12 -0
- package/dist/{chunk-am6eczah.js → chunk-qv38twt8.js} +50 -69
- package/dist/{chunk-am6eczah.js.map → chunk-qv38twt8.js.map} +8 -8
- package/dist/{chunk-bhxaq2nn.js → chunk-qw9gvjv5.js} +1 -1
- package/dist/{chunk-r0rry8dn.js → chunk-rp1mvzb4.js} +6 -6
- package/dist/{chunk-tkdscva6.js → chunk-rre42skh.js} +187 -18
- package/dist/chunk-rre42skh.js.map +39 -0
- package/dist/{chunk-ghteq96b.js → chunk-s5y30bc9.js} +2 -2
- package/dist/{chunk-a31h57d5.js → chunk-tn7xcs2n.js} +2 -2
- package/dist/{chunk-6gjqgd3d.js → chunk-tpnd31c1.js} +2 -1
- package/dist/chunk-tpnd31c1.js.map +11 -0
- package/dist/chunk-trxxmgnf.js +68 -0
- package/dist/chunk-trxxmgnf.js.map +11 -0
- package/dist/{chunk-ea73pzk7.js → chunk-vjjv9mrb.js} +2 -2
- package/dist/{chunk-8b55ygje.js → chunk-w3e09qqk.js} +1 -1
- package/dist/{chunk-ckxfnx7f.js → chunk-wjgm6jjt.js} +2 -2
- package/dist/{chunk-3j7573mj.js → chunk-x0qhkqje.js} +2 -2
- package/dist/{chunk-dysw7nsm.js → chunk-xdpwpkha.js} +2 -2
- package/dist/{chunk-1q02e95s.js → chunk-y35ma3mj.js} +11 -16
- package/dist/{chunk-1q02e95s.js.map → chunk-y35ma3mj.js.map} +3 -4
- package/dist/{chunk-qewtks41.js → chunk-z2sery1b.js} +64 -1
- package/dist/{chunk-qewtks41.js.map → chunk-z2sery1b.js.map} +3 -3
- package/dist/error-reporting/internal.js +4 -4
- package/dist/error-reporting/types.d.ts +7 -2
- package/dist/error-reporting/types.d.ts.map +1 -1
- package/dist/errors/catalog.d.ts +8 -0
- package/dist/errors/catalog.d.ts.map +1 -1
- package/dist/errors/internal.js +2 -2
- package/dist/events/index.js +4 -4
- package/dist/execution/agent.d.ts +18 -9
- package/dist/execution/agent.d.ts.map +1 -1
- package/dist/execution/agent.js +52 -43
- package/dist/execution/agent.js.map +1 -1
- package/dist/execution/authorization.d.ts +14 -4
- package/dist/execution/authorization.d.ts.map +1 -1
- package/dist/execution/primitive.js +45 -43
- package/dist/execution/primitive.js.map +2 -2
- package/dist/execution/request.d.ts +3 -1
- package/dist/execution/request.d.ts.map +1 -1
- package/dist/execution/request.js +46 -44
- package/dist/execution/request.js.map +3 -3
- package/dist/execution/types.d.ts +1 -1
- package/dist/execution/types.d.ts.map +1 -1
- package/dist/http/api-routes.d.ts.map +1 -1
- package/dist/http/index.js +1 -1
- package/dist/index.d.ts +9 -6
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +82 -77
- package/dist/index.js.map +1 -1
- package/dist/json.d.ts +2 -0
- package/dist/json.d.ts.map +1 -1
- package/dist/lake-storage/index.js +5 -5
- package/dist/logging/index.js +3 -3
- package/dist/logging/types.js +2 -2
- package/dist/materialization/index.js +2 -2
- package/dist/materializer/index.js +33 -29
- package/dist/materializer/index.js.map +1 -1
- package/dist/models/catalog.d.ts +40 -0
- package/dist/models/catalog.d.ts.map +1 -0
- package/dist/models/definitions.d.ts +25 -0
- package/dist/models/definitions.d.ts.map +1 -0
- package/dist/models/errors.d.ts +52 -0
- package/dist/models/errors.d.ts.map +1 -0
- package/dist/models/events.d.ts +192 -0
- package/dist/models/events.d.ts.map +1 -0
- package/dist/models/index.d.ts +17 -39
- package/dist/models/index.d.ts.map +1 -1
- package/dist/models/index.js +50 -0
- package/dist/models/index.js.map +9 -0
- package/dist/models/language-model.d.ts +90 -0
- package/dist/models/language-model.d.ts.map +1 -0
- package/dist/models/messages.d.ts +74 -0
- package/dist/models/messages.d.ts.map +1 -0
- package/dist/models/pricing.d.ts +69 -0
- package/dist/models/pricing.d.ts.map +1 -0
- package/dist/models/rate-card.d.ts +24 -0
- package/dist/models/rate-card.d.ts.map +1 -0
- package/dist/models/tools.d.ts +24 -0
- package/dist/models/tools.d.ts.map +1 -0
- package/dist/objects/index.js +38 -34
- package/dist/objects/index.js.map +1 -1
- package/dist/objects/query/index.js +32 -28
- package/dist/objects/query/index.js.map +1 -1
- package/dist/ontology/index.js +5 -5
- package/dist/ontology/internal.js +4 -4
- package/dist/pipelines/index.js +37 -35
- package/dist/pipelines/index.js.map +1 -1
- package/dist/projections/internal.js +35 -31
- package/dist/projections/internal.js.map +1 -1
- package/dist/queues/in-memory.d.ts +3 -2
- package/dist/queues/in-memory.d.ts.map +1 -1
- package/dist/queues/index.d.ts +3 -1
- package/dist/queues/index.d.ts.map +1 -1
- package/dist/queues/index.js +1 -1
- package/dist/queues/types.d.ts +15 -3
- package/dist/queues/types.d.ts.map +1 -1
- package/dist/runtime/create.d.ts +4 -4
- package/dist/runtime/create.d.ts.map +1 -1
- package/dist/runtime/definitions.d.ts +2 -2
- package/dist/runtime/definitions.d.ts.map +1 -1
- package/dist/runtime/host.d.ts +3 -2
- package/dist/runtime/host.d.ts.map +1 -1
- package/dist/runtime/resolve-definitions.d.ts +2 -2
- package/dist/runtime/resolve-definitions.d.ts.map +1 -1
- package/dist/runtime/sixb.d.ts +4 -2
- package/dist/runtime/sixb.d.ts.map +1 -1
- package/dist/security/every.d.ts +1 -4
- package/dist/security/every.d.ts.map +1 -1
- package/dist/security/grants.d.ts +6 -5
- package/dist/security/grants.d.ts.map +1 -1
- package/dist/security/index.d.ts +1 -1
- package/dist/security/index.d.ts.map +1 -1
- package/dist/security/registry.d.ts +1 -1
- package/dist/security/registry.d.ts.map +1 -1
- package/dist/security/types.d.ts +13 -5
- package/dist/security/types.d.ts.map +1 -1
- package/dist/security/validation.d.ts +4 -2
- package/dist/security/validation.d.ts.map +1 -1
- package/dist/storage/action-runs/failure.js +3 -3
- package/dist/storage/action-runs/provider.js +2 -2
- package/dist/storage/agents/errors.d.ts +1 -1
- package/dist/storage/agents/errors.d.ts.map +1 -1
- package/dist/storage/agents/in-memory.d.ts +3 -2
- package/dist/storage/agents/in-memory.d.ts.map +1 -1
- package/dist/storage/agents/index.d.ts +1 -1
- package/dist/storage/agents/index.d.ts.map +1 -1
- package/dist/storage/agents/provider.d.ts +11 -4
- package/dist/storage/agents/provider.d.ts.map +1 -1
- package/dist/storage/agents/provider.js +18 -15
- package/dist/storage/agents/provider.js.map +1 -1
- package/dist/storage/agents/types.d.ts +65 -17
- package/dist/storage/agents/types.d.ts.map +1 -1
- package/dist/storage/ai-cost/analytics.d.ts +2 -1
- package/dist/storage/ai-cost/analytics.d.ts.map +1 -1
- package/dist/storage/ai-cost/codec.d.ts +3 -2
- package/dist/storage/ai-cost/codec.d.ts.map +1 -1
- package/dist/storage/ai-cost/groups.d.ts +51 -0
- package/dist/storage/ai-cost/groups.d.ts.map +1 -0
- package/dist/storage/ai-cost/in-memory.d.ts +11 -1
- package/dist/storage/ai-cost/in-memory.d.ts.map +1 -1
- package/dist/storage/ai-cost/index.d.ts +1 -1
- package/dist/storage/ai-cost/index.d.ts.map +1 -1
- package/dist/storage/ai-cost/provider.d.ts +2 -0
- package/dist/storage/ai-cost/provider.d.ts.map +1 -1
- package/dist/storage/ai-cost/provider.js +29 -13
- package/dist/storage/ai-cost/provider.js.map +3 -3
- package/dist/storage/ai-cost/types.d.ts +64 -15
- package/dist/storage/ai-cost/types.d.ts.map +1 -1
- package/dist/storage/ai-cost/validation.d.ts +2 -1
- package/dist/storage/ai-cost/validation.d.ts.map +1 -1
- package/dist/storage/ai-limits/enforcement.d.ts +14 -0
- package/dist/storage/ai-limits/enforcement.d.ts.map +1 -0
- package/dist/storage/ai-limits/enforcement.js +21 -0
- package/dist/storage/ai-limits/enforcement.js.map +9 -0
- package/dist/storage/ai-limits/errors.d.ts +8 -0
- package/dist/storage/ai-limits/errors.d.ts.map +1 -0
- package/dist/storage/ai-limits/in-memory.d.ts +78 -0
- package/dist/storage/ai-limits/in-memory.d.ts.map +1 -0
- package/dist/storage/ai-limits/index.d.ts +7 -0
- package/dist/storage/ai-limits/index.d.ts.map +1 -0
- package/dist/storage/ai-limits/period.d.ts +4 -0
- package/dist/storage/ai-limits/period.d.ts.map +1 -0
- package/dist/storage/ai-limits/provider.d.ts +85 -0
- package/dist/storage/ai-limits/provider.d.ts.map +1 -0
- package/dist/storage/ai-limits/provider.js +62 -0
- package/dist/storage/ai-limits/provider.js.map +9 -0
- package/dist/storage/ai-limits/types.d.ts +175 -0
- package/dist/storage/ai-limits/types.d.ts.map +1 -0
- package/dist/storage/ai-usage/in-memory.d.ts +4 -0
- package/dist/storage/ai-usage/in-memory.d.ts.map +1 -1
- package/dist/storage/ai-usage/record.d.ts.map +1 -1
- package/dist/storage/ai-usage/types.d.ts +6 -2
- package/dist/storage/ai-usage/types.d.ts.map +1 -1
- package/dist/storage/auth/errors.d.ts +1 -1
- package/dist/storage/auth/errors.d.ts.map +1 -1
- package/dist/storage/auth/in-memory/auth-storage.d.ts +4 -1
- package/dist/storage/auth/in-memory/auth-storage.d.ts.map +1 -1
- package/dist/storage/auth/in-memory/device-authorizations.d.ts +29 -0
- package/dist/storage/auth/in-memory/device-authorizations.d.ts.map +1 -0
- package/dist/storage/auth/in-memory/shared.d.ts +3 -1
- package/dist/storage/auth/in-memory/shared.d.ts.map +1 -1
- package/dist/storage/auth/index.d.ts +2 -1
- package/dist/storage/auth/index.d.ts.map +1 -1
- package/dist/storage/auth/types.d.ts +66 -0
- package/dist/storage/auth/types.d.ts.map +1 -1
- package/dist/storage/connector-connections/provider.js +2 -2
- package/dist/storage/executions/provider.js +1 -1
- package/dist/storage/executions/run-link.d.ts +7 -2
- package/dist/storage/executions/run-link.d.ts.map +1 -1
- package/dist/storage/executions/validation.d.ts.map +1 -1
- 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 +8 -5
- package/dist/storage/index.d.ts.map +1 -1
- package/dist/storage/index.js +51 -38
- package/dist/storage/index.js.map +1 -1
- package/dist/storage/ontology/in-memory/materializations.d.ts +4 -3
- package/dist/storage/ontology/in-memory/materializations.d.ts.map +1 -1
- package/dist/storage/ontology/index.d.ts +1 -1
- package/dist/storage/ontology/index.d.ts.map +1 -1
- package/dist/storage/ontology/materializations.d.ts +7 -3
- package/dist/storage/ontology/materializations.d.ts.map +1 -1
- package/dist/storage/ontology/provider.d.ts +2 -2
- package/dist/storage/ontology/provider.d.ts.map +1 -1
- package/dist/storage/ontology/provider.js +3 -3
- package/dist/storage/pipeline-runs/provider.js +2 -2
- package/dist/storage/projection-runs/provider.js +4 -4
- package/dist/storage/sync-runs/provider.js +2 -2
- package/dist/storage/types.d.ts +5 -1
- package/dist/storage/types.d.ts.map +1 -1
- package/dist/storage/webhook-runs/provider.js +2 -2
- package/dist/storage/workflow-runs/provider.d.ts +1 -1
- package/dist/storage/workflow-runs/provider.js +10 -11
- package/dist/storage/workflow-runs/provider.js.map +1 -1
- package/dist/storage/workflow-runs/types.d.ts +5 -4
- package/dist/storage/workflow-runs/types.d.ts.map +1 -1
- package/dist/syncs/index.js +37 -35
- package/dist/syncs/index.js.map +1 -1
- package/dist/testing/agent-execution.d.ts +3 -1
- package/dist/testing/agent-execution.d.ts.map +1 -1
- package/dist/testing/agent-storage-contract.d.ts.map +1 -1
- package/dist/testing/ai-cost-storage-contract.d.ts.map +1 -1
- package/dist/testing/ai-limit-storage-contract.d.ts +18 -0
- package/dist/testing/ai-limit-storage-contract.d.ts.map +1 -0
- package/dist/testing/ai-model-call-groups-contract.d.ts +6 -0
- package/dist/testing/ai-model-call-groups-contract.d.ts.map +1 -0
- package/dist/testing/ai-usage-storage-contract.d.ts.map +1 -1
- package/dist/testing/auth-storage-contract.d.ts.map +1 -1
- package/dist/testing/index.d.ts +2 -0
- package/dist/testing/index.d.ts.map +1 -1
- package/dist/testing/index.js +3758 -1945
- package/dist/testing/index.js.map +15 -13
- package/dist/testing/materializer-storage-contract.d.ts.map +1 -1
- package/dist/testing/queues-contract.d.ts.map +1 -1
- package/dist/webhooks/internal.js +32 -28
- package/dist/webhooks/internal.js.map +2 -2
- package/dist/workers/index.js +2 -2
- package/dist/workflows/agent-step-identity.d.ts +3 -0
- package/dist/workflows/agent-step-identity.d.ts.map +1 -0
- package/dist/workflows/builders.d.ts +2 -3
- package/dist/workflows/builders.d.ts.map +1 -1
- package/dist/workflows/execution.d.ts +1 -1
- package/dist/workflows/execution.d.ts.map +1 -1
- package/dist/workflows/failure.d.ts +1 -1
- package/dist/workflows/failure.d.ts.map +1 -1
- package/dist/workflows/index.d.ts +3 -2
- package/dist/workflows/index.d.ts.map +1 -1
- package/dist/workflows/index.js +53 -45
- package/dist/workflows/index.js.map +1 -1
- package/dist/workflows/types.d.ts +26 -11
- package/dist/workflows/types.d.ts.map +1 -1
- package/dist/workflows/validation.d.ts +7 -1
- package/dist/workflows/validation.d.ts.map +1 -1
- package/package.json +19 -4
- package/src/actions/types/definitions.ts +24 -2
- package/src/agents/adapters.ts +109 -115
- package/src/agents/authority.ts +214 -32
- package/src/agents/builders.ts +3 -50
- package/src/agents/context-compaction.ts +4 -0
- package/src/agents/dispatch.ts +59 -2
- package/src/agents/errors.ts +5 -2
- package/src/agents/execution.ts +53 -52
- package/src/agents/ids.ts +16 -1
- package/src/agents/index.ts +23 -11
- package/src/agents/message.ts +18 -9
- package/src/agents/model-loop.ts +1023 -0
- package/src/agents/reference.ts +7 -0
- package/src/agents/request.ts +141 -74
- package/src/agents/retired-config.ts +20 -0
- package/src/agents/streams.ts +45 -19
- package/src/agents/tool-catalog.ts +21 -0
- package/src/agents/tool-definition.ts +23 -0
- package/src/agents/types.ts +39 -81
- package/src/agents/validation.ts +34 -180
- package/src/ai-usage/execution.ts +196 -0
- package/src/ai-usage/index.ts +15 -0
- package/src/auth/index.ts +1 -0
- package/src/auth/runtime.ts +8 -0
- package/src/auth/strategy.ts +1 -0
- package/src/auth/types.ts +14 -0
- package/src/authorization/decision.ts +27 -10
- package/src/authorization/grant-kinds.ts +62 -15
- package/src/authorization/index.ts +1 -0
- package/src/authorization/resolve.ts +12 -5
- package/src/authorization/types.ts +7 -5
- package/src/bootstrap/discovery.ts +0 -3
- package/src/error-reporting/types.ts +4 -2
- package/src/errors/catalog.ts +8 -0
- package/src/execution/agent.ts +129 -22
- package/src/execution/authorization.ts +48 -18
- package/src/execution/request.ts +4 -1
- package/src/execution/types.ts +1 -1
- package/src/http/api-routes.ts +63 -0
- package/src/index.ts +36 -7
- package/src/json.ts +9 -0
- package/src/models/catalog.ts +137 -0
- package/src/models/definitions.ts +202 -0
- package/src/models/errors.ts +83 -0
- package/src/models/events.ts +198 -0
- package/src/models/index.ts +89 -71
- package/src/models/language-model.ts +143 -0
- package/src/models/messages.ts +78 -0
- package/src/models/pricing.ts +390 -0
- package/src/models/rate-card.ts +101 -0
- package/src/models/tools.ts +29 -0
- package/src/queues/in-memory.ts +5 -0
- package/src/queues/index.ts +11 -0
- package/src/queues/types.ts +20 -3
- package/src/runtime/create.ts +7 -5
- package/src/runtime/definitions.ts +2 -2
- package/src/runtime/host.ts +3 -2
- package/src/runtime/resolve-definitions.ts +13 -36
- package/src/runtime/sixb.ts +6 -8
- package/src/security/every.ts +0 -4
- package/src/security/grants.ts +55 -11
- package/src/security/index.ts +2 -0
- package/src/security/registry.ts +6 -5
- package/src/security/types.ts +15 -4
- package/src/security/validation.ts +30 -9
- package/src/storage/agents/errors.ts +1 -0
- package/src/storage/agents/in-memory.ts +121 -11
- package/src/storage/agents/index.ts +7 -0
- package/src/storage/agents/provider.ts +150 -6
- package/src/storage/agents/types.ts +73 -16
- package/src/storage/ai-cost/analytics.ts +63 -6
- package/src/storage/ai-cost/codec.ts +37 -12
- package/src/storage/ai-cost/groups.ts +248 -0
- package/src/storage/ai-cost/in-memory.ts +42 -0
- package/src/storage/ai-cost/index.ts +6 -0
- package/src/storage/ai-cost/provider.ts +7 -0
- package/src/storage/ai-cost/types.ts +76 -14
- package/src/storage/ai-cost/validation.ts +147 -17
- package/src/storage/ai-limits/enforcement.ts +68 -0
- package/src/storage/ai-limits/errors.ts +23 -0
- package/src/storage/ai-limits/in-memory.ts +671 -0
- package/src/storage/ai-limits/index.ts +31 -0
- package/src/storage/ai-limits/period.ts +11 -0
- package/src/storage/ai-limits/provider.ts +430 -0
- package/src/storage/ai-limits/types.ts +195 -0
- package/src/storage/ai-usage/in-memory.ts +13 -0
- package/src/storage/ai-usage/record.ts +17 -0
- package/src/storage/ai-usage/types.ts +6 -2
- package/src/storage/auth/errors.ts +6 -0
- package/src/storage/auth/in-memory/auth-storage.ts +69 -0
- package/src/storage/auth/in-memory/device-authorizations.ts +145 -0
- package/src/storage/auth/in-memory/shared.ts +7 -0
- package/src/storage/auth/index.ts +7 -0
- package/src/storage/auth/types.ts +73 -0
- package/src/storage/executions/run-link.ts +16 -6
- package/src/storage/executions/validation.ts +36 -6
- package/src/storage/in-memory/index.ts +48 -4
- package/src/storage/index.ts +52 -1
- package/src/storage/ontology/in-memory/materializations.ts +34 -22
- package/src/storage/ontology/index.ts +1 -0
- package/src/storage/ontology/materializations.ts +8 -3
- package/src/storage/ontology/provider.ts +2 -2
- package/src/storage/types.ts +37 -0
- package/src/storage/workflow-runs/in-memory.ts +3 -3
- package/src/storage/workflow-runs/provider.ts +2 -2
- package/src/storage/workflow-runs/types.ts +6 -3
- package/src/testing/agent-execution.ts +40 -28
- package/src/testing/agent-storage-contract.ts +249 -28
- package/src/testing/ai-cost-storage-contract.ts +96 -8
- package/src/testing/ai-limit-storage-contract.ts +1134 -0
- package/src/testing/ai-model-call-groups-contract.ts +353 -0
- package/src/testing/ai-usage-storage-contract.ts +31 -0
- package/src/testing/auth-storage-contract.ts +85 -0
- package/src/testing/execution-storage-contract.ts +2 -2
- package/src/testing/index.ts +10 -0
- package/src/testing/materializer-storage-contract.ts +170 -2
- package/src/testing/queues-contract.ts +36 -1
- package/src/workflows/agent-step-identity.ts +4 -0
- package/src/workflows/builders.ts +95 -9
- package/src/workflows/execution.ts +2 -2
- package/src/workflows/failure.ts +2 -2
- package/src/workflows/index.ts +3 -0
- package/src/workflows/types.ts +23 -11
- package/src/workflows/validation.ts +100 -7
- package/dist/chunk-6gjqgd3d.js.map +0 -11
- package/dist/chunk-84h6qhmp.js.map +0 -46
- package/dist/chunk-a09jx26t.js +0 -55
- package/dist/chunk-a09jx26t.js.map +0 -11
- package/dist/chunk-dm72y8wt.js.map +0 -10
- package/dist/chunk-drjqm1aa.js.map +0 -15
- package/dist/chunk-gadsm794.js.map +0 -11
- package/dist/chunk-h9kxd41f.js.map +0 -11
- package/dist/chunk-nzw7sm3b.js +0 -137
- package/dist/chunk-nzw7sm3b.js.map +0 -10
- package/dist/chunk-t0jjkep3.js.map +0 -10
- package/dist/chunk-t8t39h7v.js.map +0 -10
- package/dist/chunk-tkdscva6.js.map +0 -37
- package/dist/chunk-v0egge8b.js.map +0 -56
- package/dist/chunk-xdf9yswn.js.map +0 -11
- /package/dist/{chunk-zqysyfjt.js.map → chunk-08m3b6w8.js.map} +0 -0
- /package/dist/{chunk-xkthy56g.js.map → chunk-1kamz6j0.js.map} +0 -0
- /package/dist/{chunk-6d5xdj1q.js.map → chunk-3fqt22c4.js.map} +0 -0
- /package/dist/{chunk-z3zp0bj1.js.map → chunk-407j3msh.js.map} +0 -0
- /package/dist/{chunk-rhrbz7d4.js.map → chunk-4a849fr1.js.map} +0 -0
- /package/dist/{chunk-62c7t4jc.js.map → chunk-4nxeacx7.js.map} +0 -0
- /package/dist/{chunk-cy0n5dms.js.map → chunk-5jcdmjam.js.map} +0 -0
- /package/dist/{chunk-819wnjz8.js.map → chunk-64sr682n.js.map} +0 -0
- /package/dist/{chunk-x2yw73hy.js.map → chunk-7ds9620f.js.map} +0 -0
- /package/dist/{chunk-tbv03sx2.js.map → chunk-9aehf39w.js.map} +0 -0
- /package/dist/{chunk-ezake7g1.js.map → chunk-agsvg9ar.js.map} +0 -0
- /package/dist/{chunk-rnshztfq.js.map → chunk-d63tybny.js.map} +0 -0
- /package/dist/{chunk-vybf6pkp.js.map → chunk-dbc80ad7.js.map} +0 -0
- /package/dist/{chunk-4gz41why.js.map → chunk-dqn23610.js.map} +0 -0
- /package/dist/{chunk-zp2v2rv6.js.map → chunk-ha58tjtt.js.map} +0 -0
- /package/dist/{chunk-f6erf2vv.js.map → chunk-hdz94br2.js.map} +0 -0
- /package/dist/{chunk-dsrkgtnh.js.map → chunk-jq43kdvk.js.map} +0 -0
- /package/dist/{chunk-wtmzkcht.js.map → chunk-k34z5rvh.js.map} +0 -0
- /package/dist/{chunk-htq0qh7z.js.map → chunk-ka3a2ft3.js.map} +0 -0
- /package/dist/{chunk-4h947jd8.js.map → chunk-kt81c11h.js.map} +0 -0
- /package/dist/{chunk-f2rt4vkh.js.map → chunk-n2w475r0.js.map} +0 -0
- /package/dist/{chunk-bhxaq2nn.js.map → chunk-qw9gvjv5.js.map} +0 -0
- /package/dist/{chunk-r0rry8dn.js.map → chunk-rp1mvzb4.js.map} +0 -0
- /package/dist/{chunk-ghteq96b.js.map → chunk-s5y30bc9.js.map} +0 -0
- /package/dist/{chunk-a31h57d5.js.map → chunk-tn7xcs2n.js.map} +0 -0
- /package/dist/{chunk-ea73pzk7.js.map → chunk-vjjv9mrb.js.map} +0 -0
- /package/dist/{chunk-8b55ygje.js.map → chunk-w3e09qqk.js.map} +0 -0
- /package/dist/{chunk-ckxfnx7f.js.map → chunk-wjgm6jjt.js.map} +0 -0
- /package/dist/{chunk-3j7573mj.js.map → chunk-x0qhkqje.js.map} +0 -0
- /package/dist/{chunk-dysw7nsm.js.map → chunk-xdpwpkha.js.map} +0 -0
|
@@ -0,0 +1,143 @@
|
|
|
1
|
+
import type { JsonObject, ReadonlyJsonObject } from "../json"
|
|
2
|
+
import type { LanguageModelDefinitionCatalog, ModelDefinitionCatalog } from "./catalog"
|
|
3
|
+
import type { LanguageModelDefinition } from "./definitions"
|
|
4
|
+
import type { LanguageModelStreamEvent } from "./events"
|
|
5
|
+
import type { ModelMessage } from "./messages"
|
|
6
|
+
import type { ModelCostEstimator } from "./pricing"
|
|
7
|
+
|
|
8
|
+
export const MODEL_REASONING_EFFORTS = ["minimal", "low", "medium", "high", "xhigh", "max"] as const
|
|
9
|
+
|
|
10
|
+
export type ModelReasoningEffort = (typeof MODEL_REASONING_EFFORTS)[number]
|
|
11
|
+
|
|
12
|
+
export const MODEL_REASONING_LEVELS = [
|
|
13
|
+
"provider-default",
|
|
14
|
+
"none",
|
|
15
|
+
...MODEL_REASONING_EFFORTS,
|
|
16
|
+
] as const
|
|
17
|
+
|
|
18
|
+
export type ModelReasoningLevel = (typeof MODEL_REASONING_LEVELS)[number]
|
|
19
|
+
|
|
20
|
+
/** Exact provider-native reasoning budget, expressed in tokens. */
|
|
21
|
+
export interface ModelReasoningBudget extends ReadonlyJsonObject {
|
|
22
|
+
readonly budgetTokens: number
|
|
23
|
+
}
|
|
24
|
+
|
|
25
|
+
/** Provider-neutral reasoning preference accepted by every language-model runtime. */
|
|
26
|
+
export type ModelReasoning = ModelReasoningLevel | ModelReasoningBudget
|
|
27
|
+
|
|
28
|
+
export interface ModelReasoningBudgetCapabilities {
|
|
29
|
+
readonly min?: number
|
|
30
|
+
readonly max?: number
|
|
31
|
+
}
|
|
32
|
+
|
|
33
|
+
/** Controls exposed by one concrete model offering through one provider. */
|
|
34
|
+
export interface ModelReasoningCapabilities {
|
|
35
|
+
readonly canDisable?: boolean
|
|
36
|
+
readonly efforts?: readonly ModelReasoningEffort[]
|
|
37
|
+
readonly budgetTokens?: ModelReasoningBudgetCapabilities
|
|
38
|
+
}
|
|
39
|
+
|
|
40
|
+
export interface ModelCapabilities {
|
|
41
|
+
readonly inputMediaTypes?: readonly string[] | "any"
|
|
42
|
+
/** `undefined` is unknown, `false` is unsupported, and an object describes supported controls. */
|
|
43
|
+
readonly reasoning?: false | ModelReasoningCapabilities
|
|
44
|
+
readonly localTools?: boolean
|
|
45
|
+
readonly parallelToolCalls?: boolean
|
|
46
|
+
readonly nativeStructuredOutput?: boolean
|
|
47
|
+
readonly providerExecutedTools?: boolean
|
|
48
|
+
}
|
|
49
|
+
|
|
50
|
+
export interface ModelToolSpecification {
|
|
51
|
+
readonly name: string
|
|
52
|
+
readonly description: string
|
|
53
|
+
readonly inputSchema: JsonObject
|
|
54
|
+
}
|
|
55
|
+
|
|
56
|
+
export interface ModelResponseFormat {
|
|
57
|
+
readonly type: "json"
|
|
58
|
+
readonly name: string
|
|
59
|
+
readonly description?: string
|
|
60
|
+
readonly schema: JsonObject
|
|
61
|
+
}
|
|
62
|
+
|
|
63
|
+
export interface LanguageModelRequest {
|
|
64
|
+
readonly callId: string
|
|
65
|
+
readonly messages: readonly ModelMessage[]
|
|
66
|
+
readonly tools: readonly ModelToolSpecification[]
|
|
67
|
+
readonly reasoning?: ModelReasoning
|
|
68
|
+
/** Per-call output ceiling; providers must not exceed a stricter configured model limit. */
|
|
69
|
+
readonly maxOutputTokens?: number
|
|
70
|
+
/** Disable automatic prompt caching without overriding explicit provider configuration. */
|
|
71
|
+
readonly caching?: "auto" | "off"
|
|
72
|
+
readonly responseFormat?: ModelResponseFormat
|
|
73
|
+
readonly signal: AbortSignal
|
|
74
|
+
}
|
|
75
|
+
|
|
76
|
+
export interface LanguageModelStream {
|
|
77
|
+
readonly events: AsyncIterable<LanguageModelStreamEvent>
|
|
78
|
+
}
|
|
79
|
+
|
|
80
|
+
export interface LanguageModel {
|
|
81
|
+
readonly providerId: string
|
|
82
|
+
readonly modelId: string
|
|
83
|
+
readonly definition: LanguageModelDefinition
|
|
84
|
+
readonly costEstimator?: ModelCostEstimator
|
|
85
|
+
/**
|
|
86
|
+
* Return an executable model pinned to operational metadata, preserving model identity.
|
|
87
|
+
* `offline` requires a local snapshot without catalog I/O. Workers retain this model
|
|
88
|
+
* for generation and compaction; later catalog refreshes must not change its capabilities/limits.
|
|
89
|
+
* Throw ModelCatalogUnavailableError for catalog transport/access failures to allow workers to
|
|
90
|
+
* retry with an offline snapshot. Invalid definitions and other resolver errors remain fatal.
|
|
91
|
+
*/
|
|
92
|
+
resolve?(options?: { readonly offline?: boolean }): Promise<LanguageModel>
|
|
93
|
+
stream(request: LanguageModelRequest): Promise<LanguageModelStream>
|
|
94
|
+
}
|
|
95
|
+
|
|
96
|
+
/** The common callable provider shape. Provider packages may accept additional model options. */
|
|
97
|
+
export interface ModelProvider<TCatalog extends ModelDefinitionCatalog = ModelDefinitionCatalog> {
|
|
98
|
+
readonly providerId: string
|
|
99
|
+
readonly catalog: TCatalog
|
|
100
|
+
}
|
|
101
|
+
|
|
102
|
+
export interface LanguageModelProvider extends ModelProvider<LanguageModelDefinitionCatalog> {
|
|
103
|
+
(modelId: string): LanguageModel
|
|
104
|
+
}
|
|
105
|
+
|
|
106
|
+
export function isModelReasoning(value: unknown): value is ModelReasoning {
|
|
107
|
+
if (typeof value === "string") {
|
|
108
|
+
return (MODEL_REASONING_LEVELS as readonly string[]).includes(value)
|
|
109
|
+
}
|
|
110
|
+
if (typeof value !== "object" || value === null || Array.isArray(value)) return false
|
|
111
|
+
if (Object.keys(value).length !== 1) return false
|
|
112
|
+
const budgetTokens = (value as { readonly budgetTokens?: unknown }).budgetTokens
|
|
113
|
+
return typeof budgetTokens === "number" && Number.isSafeInteger(budgetTokens) && budgetTokens >= 0
|
|
114
|
+
}
|
|
115
|
+
|
|
116
|
+
/** Explain why a request cannot be represented by known model capabilities. Unknown is allowed. */
|
|
117
|
+
export function modelReasoningSupportIssue(
|
|
118
|
+
capabilities: ModelCapabilities["reasoning"],
|
|
119
|
+
reasoning: unknown
|
|
120
|
+
): string | undefined {
|
|
121
|
+
if (reasoning === undefined) return undefined
|
|
122
|
+
if (!isModelReasoning(reasoning)) return "the reasoning preference is invalid"
|
|
123
|
+
if (reasoning === "provider-default") return undefined
|
|
124
|
+
if (capabilities === undefined) return undefined
|
|
125
|
+
if (capabilities === false) return "reasoning is not supported"
|
|
126
|
+
if (reasoning === "none") {
|
|
127
|
+
return capabilities.canDisable === true ? undefined : "reasoning cannot be disabled"
|
|
128
|
+
}
|
|
129
|
+
if (typeof reasoning === "string") {
|
|
130
|
+
return capabilities.efforts?.includes(reasoning) === true
|
|
131
|
+
? undefined
|
|
132
|
+
: `reasoning effort '${reasoning}' is not supported`
|
|
133
|
+
}
|
|
134
|
+
const budget = capabilities.budgetTokens
|
|
135
|
+
if (budget === undefined) return "reasoning token budgets are not supported"
|
|
136
|
+
if (budget.min !== undefined && reasoning.budgetTokens < budget.min) {
|
|
137
|
+
return `reasoning token budget must be at least ${budget.min}`
|
|
138
|
+
}
|
|
139
|
+
if (budget.max !== undefined && reasoning.budgetTokens > budget.max) {
|
|
140
|
+
return `reasoning token budget must not exceed ${budget.max}`
|
|
141
|
+
}
|
|
142
|
+
return undefined
|
|
143
|
+
}
|
|
@@ -0,0 +1,78 @@
|
|
|
1
|
+
import type { JsonValue } from "../json"
|
|
2
|
+
|
|
3
|
+
/** Opaque, JSON-safe provider state. Each provider reads only its own key. */
|
|
4
|
+
export type ProviderData = Readonly<Record<string, JsonValue>>
|
|
5
|
+
|
|
6
|
+
interface ModelPartBase {
|
|
7
|
+
readonly providerData?: ProviderData
|
|
8
|
+
}
|
|
9
|
+
|
|
10
|
+
export interface ModelTextPart extends ModelPartBase {
|
|
11
|
+
readonly type: "text"
|
|
12
|
+
readonly text: string
|
|
13
|
+
}
|
|
14
|
+
|
|
15
|
+
export interface ModelReasoningPart extends ModelPartBase {
|
|
16
|
+
readonly type: "reasoning"
|
|
17
|
+
readonly text: string
|
|
18
|
+
}
|
|
19
|
+
|
|
20
|
+
export interface ModelFilePart extends ModelPartBase {
|
|
21
|
+
readonly type: "file"
|
|
22
|
+
readonly data: URL
|
|
23
|
+
readonly filename?: string
|
|
24
|
+
readonly mediaType: string
|
|
25
|
+
}
|
|
26
|
+
|
|
27
|
+
export interface ModelToolCallPart extends ModelPartBase {
|
|
28
|
+
readonly type: "tool-call"
|
|
29
|
+
readonly toolCallId: string
|
|
30
|
+
readonly toolName: string
|
|
31
|
+
readonly input: JsonValue
|
|
32
|
+
readonly providerExecuted?: boolean
|
|
33
|
+
readonly dynamic?: boolean
|
|
34
|
+
}
|
|
35
|
+
|
|
36
|
+
export type ModelToolOutput =
|
|
37
|
+
| { readonly type: "text"; readonly value: string }
|
|
38
|
+
| { readonly type: "json"; readonly value: JsonValue }
|
|
39
|
+
| { readonly type: "error-text"; readonly value: string }
|
|
40
|
+
| { readonly type: "error-json"; readonly value: JsonValue }
|
|
41
|
+
|
|
42
|
+
export interface ModelToolResultPart extends ModelPartBase {
|
|
43
|
+
readonly type: "tool-result"
|
|
44
|
+
readonly toolCallId: string
|
|
45
|
+
readonly toolName: string
|
|
46
|
+
readonly output: ModelToolOutput
|
|
47
|
+
/** Original durable tool output when the model-facing output is a projection. */
|
|
48
|
+
readonly originalOutput?: JsonValue
|
|
49
|
+
readonly providerExecuted?: boolean
|
|
50
|
+
readonly dynamic?: boolean
|
|
51
|
+
}
|
|
52
|
+
|
|
53
|
+
/** Ordered replay state with no honest portable content representation. */
|
|
54
|
+
export interface ModelProviderStatePart {
|
|
55
|
+
readonly type: "provider-state"
|
|
56
|
+
readonly providerId: string
|
|
57
|
+
readonly data: JsonValue
|
|
58
|
+
}
|
|
59
|
+
|
|
60
|
+
export type ModelAssistantPart =
|
|
61
|
+
| ModelTextPart
|
|
62
|
+
| ModelReasoningPart
|
|
63
|
+
| ModelToolCallPart
|
|
64
|
+
| ModelToolResultPart
|
|
65
|
+
| ModelProviderStatePart
|
|
66
|
+
|
|
67
|
+
export type ModelMessage =
|
|
68
|
+
| {
|
|
69
|
+
readonly role: "system"
|
|
70
|
+
readonly content: string
|
|
71
|
+
readonly providerData?: ProviderData
|
|
72
|
+
}
|
|
73
|
+
| {
|
|
74
|
+
readonly role: "user"
|
|
75
|
+
readonly content: readonly (ModelTextPart | ModelFilePart)[]
|
|
76
|
+
}
|
|
77
|
+
| { readonly role: "assistant"; readonly content: readonly ModelAssistantPart[] }
|
|
78
|
+
| { readonly role: "tool"; readonly content: readonly ModelToolResultPart[] }
|
|
@@ -0,0 +1,390 @@
|
|
|
1
|
+
import type { ModelRoute, ModelUsage } from "./events"
|
|
2
|
+
import type { LanguageModel } from "./language-model"
|
|
3
|
+
import type { LanguageModelRateCard, ModelTokenPrice } from "./rate-card"
|
|
4
|
+
|
|
5
|
+
/** Optional local financial enrichment cannot discard a completed, billable call. */
|
|
6
|
+
export function estimateModelCall(
|
|
7
|
+
model: LanguageModel,
|
|
8
|
+
input: Parameters<ModelCostEstimator["estimate"]>[0]
|
|
9
|
+
): ModelCostEstimate {
|
|
10
|
+
try {
|
|
11
|
+
return model.costEstimator?.estimate(input) ?? rateModelCall({ usage: input.usage })
|
|
12
|
+
} catch {
|
|
13
|
+
console.warn(
|
|
14
|
+
"[Sixb] Model cost estimation failed; preserving usage and available provider cost."
|
|
15
|
+
)
|
|
16
|
+
return { status: "unpriceable", reason: "missing-rate-card" }
|
|
17
|
+
}
|
|
18
|
+
}
|
|
19
|
+
|
|
20
|
+
export interface ModelMoney {
|
|
21
|
+
readonly currency: "USD"
|
|
22
|
+
/** Billionths of one currency unit, serialized as an integer string. */
|
|
23
|
+
readonly amountNanos: string
|
|
24
|
+
}
|
|
25
|
+
|
|
26
|
+
export interface ModelReportedCost {
|
|
27
|
+
readonly money: ModelMoney
|
|
28
|
+
readonly providerId?: string
|
|
29
|
+
}
|
|
30
|
+
|
|
31
|
+
/** A local estimate is never a provider-reported charge. No financial API is required to run. */
|
|
32
|
+
export type ModelCostEstimate = Exclude<ModelCallCost, { status: "reported" }>
|
|
33
|
+
|
|
34
|
+
export interface ModelCostEstimator {
|
|
35
|
+
/** Conservative token-cost reservation, including cache writes and pricing tiers.
|
|
36
|
+
* Return undefined when routing or non-token charges prevent a safe local estimate. */
|
|
37
|
+
estimateReservation?(input: {
|
|
38
|
+
readonly inputTokens: number
|
|
39
|
+
readonly outputTokens: number
|
|
40
|
+
}): ModelMoney | undefined
|
|
41
|
+
|
|
42
|
+
estimate(input: {
|
|
43
|
+
readonly usage: ModelUsage
|
|
44
|
+
readonly route?: ModelRoute
|
|
45
|
+
readonly responseModelId?: string
|
|
46
|
+
}): ModelCostEstimate
|
|
47
|
+
}
|
|
48
|
+
|
|
49
|
+
export type ModelCostMeter =
|
|
50
|
+
| "tokens.input.total"
|
|
51
|
+
| "tokens.input.uncached"
|
|
52
|
+
| "tokens.input.cacheRead"
|
|
53
|
+
| "tokens.input.cacheWrite"
|
|
54
|
+
| "tokens.input.cacheWrite5m"
|
|
55
|
+
| "tokens.input.cacheWrite1h"
|
|
56
|
+
| "tokens.output.total"
|
|
57
|
+
|
|
58
|
+
export interface ModelCostComponent {
|
|
59
|
+
readonly meter: ModelCostMeter
|
|
60
|
+
readonly quantity: string
|
|
61
|
+
readonly rateAmountNanosPerMillion: string
|
|
62
|
+
readonly chargeAmountNanos: string
|
|
63
|
+
}
|
|
64
|
+
|
|
65
|
+
export type ModelCallCost =
|
|
66
|
+
| { readonly status: "reported"; readonly money: ModelMoney; readonly providerId?: string }
|
|
67
|
+
| {
|
|
68
|
+
readonly status: "rated"
|
|
69
|
+
readonly money: ModelMoney
|
|
70
|
+
readonly components: readonly ModelCostComponent[]
|
|
71
|
+
}
|
|
72
|
+
| {
|
|
73
|
+
readonly status: "unpriceable"
|
|
74
|
+
readonly reason: "missing-rate-card" | "missing-usage" | "inconsistent-usage"
|
|
75
|
+
readonly missingMeters?: readonly ModelCostMeter[]
|
|
76
|
+
}
|
|
77
|
+
|
|
78
|
+
/** Reserve at the highest configured token rates, before cache usage and the final tier are known. */
|
|
79
|
+
export function estimateModelReservation(input: {
|
|
80
|
+
readonly inputTokens: number
|
|
81
|
+
readonly outputTokens: number
|
|
82
|
+
readonly rateCard?: LanguageModelRateCard
|
|
83
|
+
}): ModelMoney | undefined {
|
|
84
|
+
if (!input.rateCard) return undefined
|
|
85
|
+
if (![input.inputTokens, input.outputTokens].every((n) => Number.isSafeInteger(n) && n >= 0)) {
|
|
86
|
+
throw new TypeError(
|
|
87
|
+
"[Sixb] Model reservation token estimates must be nonnegative safe integers."
|
|
88
|
+
)
|
|
89
|
+
}
|
|
90
|
+
const maxRate = (prices: readonly (ModelTokenPrice | undefined)[]) => {
|
|
91
|
+
const rates = prices.flatMap((price) =>
|
|
92
|
+
price === undefined
|
|
93
|
+
? []
|
|
94
|
+
: typeof price === "string"
|
|
95
|
+
? [price]
|
|
96
|
+
: [price.default, ...price.tiers.map((tier) => tier.price)]
|
|
97
|
+
)
|
|
98
|
+
return rates.reduce((max, price) => {
|
|
99
|
+
const rate = decimalDollarsToNanos(price)
|
|
100
|
+
return rate > max ? rate : max
|
|
101
|
+
}, 0n)
|
|
102
|
+
}
|
|
103
|
+
const card = input.rateCard
|
|
104
|
+
const inputRate = maxRate([
|
|
105
|
+
card.input,
|
|
106
|
+
card.cacheReadInput,
|
|
107
|
+
card.cacheWriteInput,
|
|
108
|
+
card.cacheWriteInput5m,
|
|
109
|
+
card.cacheWriteInput1h,
|
|
110
|
+
])
|
|
111
|
+
const outputRate = maxRate([card.output])
|
|
112
|
+
const charge = (tokens: number, rate: bigint) => (BigInt(tokens) * rate + 999_999n) / 1_000_000n
|
|
113
|
+
return {
|
|
114
|
+
currency: "USD",
|
|
115
|
+
amountNanos: (
|
|
116
|
+
charge(input.inputTokens, inputRate) + charge(input.outputTokens, outputRate)
|
|
117
|
+
).toString(),
|
|
118
|
+
}
|
|
119
|
+
}
|
|
120
|
+
|
|
121
|
+
/** Prefer the provider's bill over rate-card estimates, then rate complete token meters locally. */
|
|
122
|
+
export function rateModelCall(input: {
|
|
123
|
+
readonly usage: ModelUsage
|
|
124
|
+
readonly rateCard?: LanguageModelRateCard
|
|
125
|
+
readonly reported?: undefined
|
|
126
|
+
}): ModelCostEstimate
|
|
127
|
+
export function rateModelCall(input: {
|
|
128
|
+
readonly usage: ModelUsage
|
|
129
|
+
readonly rateCard?: LanguageModelRateCard
|
|
130
|
+
readonly reported?: ModelReportedCost
|
|
131
|
+
}): ModelCallCost
|
|
132
|
+
export function rateModelCall(input: {
|
|
133
|
+
readonly usage: ModelUsage
|
|
134
|
+
readonly rateCard?: LanguageModelRateCard
|
|
135
|
+
readonly reported?: ModelReportedCost
|
|
136
|
+
}): ModelCallCost {
|
|
137
|
+
if (input.reported) {
|
|
138
|
+
assertAmountNanos(input.reported.money.amountNanos)
|
|
139
|
+
return {
|
|
140
|
+
status: "reported",
|
|
141
|
+
money: input.reported.money,
|
|
142
|
+
...(input.reported.providerId === undefined ? {} : { providerId: input.reported.providerId }),
|
|
143
|
+
}
|
|
144
|
+
}
|
|
145
|
+
if (!input.rateCard) return { status: "unpriceable", reason: "missing-rate-card" }
|
|
146
|
+
const { usage, rateCard } = input
|
|
147
|
+
if (!validUsageCounters(usage)) {
|
|
148
|
+
return { status: "unpriceable", reason: "inconsistent-usage" }
|
|
149
|
+
}
|
|
150
|
+
if (usage.inputTokens === undefined || usage.outputTokens === undefined) {
|
|
151
|
+
return {
|
|
152
|
+
status: "unpriceable",
|
|
153
|
+
reason: "missing-usage",
|
|
154
|
+
missingMeters: [
|
|
155
|
+
...(usage.inputTokens === undefined ? (["tokens.input.total"] as const) : []),
|
|
156
|
+
...(usage.outputTokens === undefined ? (["tokens.output.total"] as const) : []),
|
|
157
|
+
],
|
|
158
|
+
}
|
|
159
|
+
}
|
|
160
|
+
|
|
161
|
+
const partitioned = partitionInputUsage(usage, rateCard)
|
|
162
|
+
if (partitioned.status !== "rated") return partitioned
|
|
163
|
+
|
|
164
|
+
const components: ModelCostComponent[] = []
|
|
165
|
+
if (!partitioned.partitioned) {
|
|
166
|
+
components.push(
|
|
167
|
+
component("tokens.input.total", usage.inputTokens, rateCard.input, usage.inputTokens)
|
|
168
|
+
)
|
|
169
|
+
} else {
|
|
170
|
+
components.push(
|
|
171
|
+
component("tokens.input.uncached", partitioned.uncached, rateCard.input, usage.inputTokens)
|
|
172
|
+
)
|
|
173
|
+
if (partitioned.cacheRead !== undefined) {
|
|
174
|
+
components.push(
|
|
175
|
+
component(
|
|
176
|
+
"tokens.input.cacheRead",
|
|
177
|
+
partitioned.cacheRead,
|
|
178
|
+
rateCard.cacheReadInput!,
|
|
179
|
+
usage.inputTokens
|
|
180
|
+
)
|
|
181
|
+
)
|
|
182
|
+
}
|
|
183
|
+
if (partitioned.cacheWrite !== undefined) {
|
|
184
|
+
components.push(
|
|
185
|
+
component(
|
|
186
|
+
"tokens.input.cacheWrite",
|
|
187
|
+
partitioned.cacheWrite,
|
|
188
|
+
rateCard.cacheWriteInput!,
|
|
189
|
+
usage.inputTokens
|
|
190
|
+
)
|
|
191
|
+
)
|
|
192
|
+
}
|
|
193
|
+
if (partitioned.cacheWrite5m !== undefined) {
|
|
194
|
+
components.push(
|
|
195
|
+
component(
|
|
196
|
+
"tokens.input.cacheWrite5m",
|
|
197
|
+
partitioned.cacheWrite5m,
|
|
198
|
+
rateCard.cacheWriteInput5m ?? rateCard.cacheWriteInput!,
|
|
199
|
+
usage.inputTokens
|
|
200
|
+
)
|
|
201
|
+
)
|
|
202
|
+
}
|
|
203
|
+
if (partitioned.cacheWrite1h !== undefined) {
|
|
204
|
+
components.push(
|
|
205
|
+
component(
|
|
206
|
+
"tokens.input.cacheWrite1h",
|
|
207
|
+
partitioned.cacheWrite1h,
|
|
208
|
+
rateCard.cacheWriteInput1h ?? rateCard.cacheWriteInput!,
|
|
209
|
+
usage.inputTokens
|
|
210
|
+
)
|
|
211
|
+
)
|
|
212
|
+
}
|
|
213
|
+
}
|
|
214
|
+
components.push(
|
|
215
|
+
component("tokens.output.total", usage.outputTokens, rateCard.output, usage.inputTokens)
|
|
216
|
+
)
|
|
217
|
+
const total = components.reduce((sum, entry) => sum + BigInt(entry.chargeAmountNanos), 0n)
|
|
218
|
+
return {
|
|
219
|
+
status: "rated",
|
|
220
|
+
money: { currency: rateCard.currency, amountNanos: total.toString() },
|
|
221
|
+
components,
|
|
222
|
+
}
|
|
223
|
+
}
|
|
224
|
+
|
|
225
|
+
type PartitionResult =
|
|
226
|
+
| { readonly status: "rated"; readonly partitioned: false }
|
|
227
|
+
| {
|
|
228
|
+
readonly status: "rated"
|
|
229
|
+
readonly partitioned: true
|
|
230
|
+
readonly uncached: number
|
|
231
|
+
readonly cacheRead?: number
|
|
232
|
+
readonly cacheWrite?: number
|
|
233
|
+
readonly cacheWrite5m?: number
|
|
234
|
+
readonly cacheWrite1h?: number
|
|
235
|
+
}
|
|
236
|
+
| Extract<ModelCallCost, { status: "unpriceable" }>
|
|
237
|
+
|
|
238
|
+
function partitionInputUsage(usage: ModelUsage, rateCard: LanguageModelRateCard): PartitionResult {
|
|
239
|
+
const hasSpecificWrites =
|
|
240
|
+
usage.cacheWrite5mInputTokens !== undefined || usage.cacheWrite1hInputTokens !== undefined
|
|
241
|
+
const cacheWriteSpecific =
|
|
242
|
+
(usage.cacheWrite5mInputTokens ?? 0) + (usage.cacheWrite1hInputTokens ?? 0)
|
|
243
|
+
if (
|
|
244
|
+
hasSpecificWrites &&
|
|
245
|
+
usage.cacheWriteInputTokens !== undefined &&
|
|
246
|
+
usage.cacheWriteInputTokens !== cacheWriteSpecific
|
|
247
|
+
) {
|
|
248
|
+
return { status: "unpriceable", reason: "inconsistent-usage" }
|
|
249
|
+
}
|
|
250
|
+
|
|
251
|
+
const partitioned =
|
|
252
|
+
usage.uncachedInputTokens !== undefined ||
|
|
253
|
+
usage.cacheReadInputTokens !== undefined ||
|
|
254
|
+
usage.cacheWriteInputTokens !== undefined ||
|
|
255
|
+
hasSpecificWrites ||
|
|
256
|
+
rateCard.cacheReadInput !== undefined ||
|
|
257
|
+
rateCard.cacheWriteInput !== undefined ||
|
|
258
|
+
rateCard.cacheWriteInput5m !== undefined ||
|
|
259
|
+
rateCard.cacheWriteInput1h !== undefined
|
|
260
|
+
if (!partitioned) return { status: "rated", partitioned: false }
|
|
261
|
+
|
|
262
|
+
const cacheRead = usage.cacheReadInputTokens ?? 0
|
|
263
|
+
const totalWrite = usage.cacheWriteInputTokens ?? cacheWriteSpecific
|
|
264
|
+
if (usage.inputTokens !== undefined && cacheRead + totalWrite > usage.inputTokens) {
|
|
265
|
+
return { status: "unpriceable", reason: "inconsistent-usage" }
|
|
266
|
+
}
|
|
267
|
+
|
|
268
|
+
const missing: ModelCostMeter[] = []
|
|
269
|
+
if (usage.uncachedInputTokens === undefined) missing.push("tokens.input.uncached")
|
|
270
|
+
if (rateCard.cacheReadInput !== undefined && usage.cacheReadInputTokens === undefined) {
|
|
271
|
+
missing.push("tokens.input.cacheRead")
|
|
272
|
+
}
|
|
273
|
+
if (
|
|
274
|
+
rateCard.cacheWriteInput !== undefined &&
|
|
275
|
+
rateCard.cacheWriteInput5m === undefined &&
|
|
276
|
+
rateCard.cacheWriteInput1h === undefined &&
|
|
277
|
+
usage.cacheWriteInputTokens === undefined
|
|
278
|
+
) {
|
|
279
|
+
missing.push("tokens.input.cacheWrite")
|
|
280
|
+
}
|
|
281
|
+
if (rateCard.cacheWriteInput5m !== undefined && usage.cacheWrite5mInputTokens === undefined) {
|
|
282
|
+
missing.push("tokens.input.cacheWrite5m")
|
|
283
|
+
}
|
|
284
|
+
if (rateCard.cacheWriteInput1h !== undefined && usage.cacheWrite1hInputTokens === undefined) {
|
|
285
|
+
missing.push("tokens.input.cacheWrite1h")
|
|
286
|
+
}
|
|
287
|
+
if (missing.length > 0) {
|
|
288
|
+
return { status: "unpriceable", reason: "missing-usage", missingMeters: missing }
|
|
289
|
+
}
|
|
290
|
+
if (cacheRead > 0 && rateCard.cacheReadInput === undefined) {
|
|
291
|
+
return {
|
|
292
|
+
status: "unpriceable",
|
|
293
|
+
reason: "missing-rate-card",
|
|
294
|
+
missingMeters: ["tokens.input.cacheRead"],
|
|
295
|
+
}
|
|
296
|
+
}
|
|
297
|
+
if (!hasSpecificWrites && totalWrite > 0 && rateCard.cacheWriteInput === undefined) {
|
|
298
|
+
return {
|
|
299
|
+
status: "unpriceable",
|
|
300
|
+
reason: "missing-rate-card",
|
|
301
|
+
missingMeters: ["tokens.input.cacheWrite"],
|
|
302
|
+
}
|
|
303
|
+
}
|
|
304
|
+
if (
|
|
305
|
+
(usage.cacheWrite5mInputTokens ?? 0) > 0 &&
|
|
306
|
+
rateCard.cacheWriteInput5m === undefined &&
|
|
307
|
+
rateCard.cacheWriteInput === undefined
|
|
308
|
+
) {
|
|
309
|
+
return {
|
|
310
|
+
status: "unpriceable",
|
|
311
|
+
reason: "missing-rate-card",
|
|
312
|
+
missingMeters: ["tokens.input.cacheWrite5m"],
|
|
313
|
+
}
|
|
314
|
+
}
|
|
315
|
+
if (
|
|
316
|
+
(usage.cacheWrite1hInputTokens ?? 0) > 0 &&
|
|
317
|
+
rateCard.cacheWriteInput1h === undefined &&
|
|
318
|
+
rateCard.cacheWriteInput === undefined
|
|
319
|
+
) {
|
|
320
|
+
return {
|
|
321
|
+
status: "unpriceable",
|
|
322
|
+
reason: "missing-rate-card",
|
|
323
|
+
missingMeters: ["tokens.input.cacheWrite1h"],
|
|
324
|
+
}
|
|
325
|
+
}
|
|
326
|
+
|
|
327
|
+
const uncached = usage.uncachedInputTokens!
|
|
328
|
+
if (uncached + cacheRead + totalWrite !== usage.inputTokens) {
|
|
329
|
+
return { status: "unpriceable", reason: "inconsistent-usage" }
|
|
330
|
+
}
|
|
331
|
+
return {
|
|
332
|
+
status: "rated",
|
|
333
|
+
partitioned: true,
|
|
334
|
+
uncached,
|
|
335
|
+
...(rateCard.cacheReadInput === undefined ? {} : { cacheRead }),
|
|
336
|
+
...(hasSpecificWrites
|
|
337
|
+
? {
|
|
338
|
+
cacheWrite5m: usage.cacheWrite5mInputTokens ?? 0,
|
|
339
|
+
cacheWrite1h: usage.cacheWrite1hInputTokens ?? 0,
|
|
340
|
+
}
|
|
341
|
+
: rateCard.cacheWriteInput === undefined
|
|
342
|
+
? {}
|
|
343
|
+
: { cacheWrite: totalWrite }),
|
|
344
|
+
}
|
|
345
|
+
}
|
|
346
|
+
|
|
347
|
+
function validUsageCounters(usage: ModelUsage): boolean {
|
|
348
|
+
return Object.entries(usage)
|
|
349
|
+
.filter(([key]) => key !== "raw")
|
|
350
|
+
.every(([, value]) => value === undefined || (Number.isSafeInteger(value) && value >= 0))
|
|
351
|
+
}
|
|
352
|
+
|
|
353
|
+
function component(
|
|
354
|
+
meter: ModelCostMeter,
|
|
355
|
+
quantity: number,
|
|
356
|
+
price: ModelTokenPrice,
|
|
357
|
+
tierTokens: number
|
|
358
|
+
): ModelCostComponent {
|
|
359
|
+
const rate = decimalDollarsToNanos(resolvePrice(price, tierTokens))
|
|
360
|
+
const charge = (BigInt(quantity) * rate + 500_000n) / 1_000_000n
|
|
361
|
+
return {
|
|
362
|
+
meter,
|
|
363
|
+
quantity: quantity.toString(),
|
|
364
|
+
rateAmountNanosPerMillion: rate.toString(),
|
|
365
|
+
chargeAmountNanos: charge.toString(),
|
|
366
|
+
}
|
|
367
|
+
}
|
|
368
|
+
|
|
369
|
+
function resolvePrice(price: ModelTokenPrice, tokens: number): string {
|
|
370
|
+
if (typeof price === "string") return price
|
|
371
|
+
return (
|
|
372
|
+
price.tiers.find(
|
|
373
|
+
(tier) =>
|
|
374
|
+
tokens >= tier.minTokens && (tier.maxTokens === undefined || tokens < tier.maxTokens)
|
|
375
|
+
)?.price ?? price.default
|
|
376
|
+
)
|
|
377
|
+
}
|
|
378
|
+
|
|
379
|
+
function decimalDollarsToNanos(value: string): bigint {
|
|
380
|
+
const [whole = "0", fraction = ""] = value.split(".")
|
|
381
|
+
const nanos = fraction.slice(0, 9).padEnd(9, "0")
|
|
382
|
+
const roundUp = Number(fraction[9] ?? "0") >= 5
|
|
383
|
+
return BigInt(whole) * 1_000_000_000n + BigInt(nanos) + (roundUp ? 1n : 0n)
|
|
384
|
+
}
|
|
385
|
+
|
|
386
|
+
function assertAmountNanos(value: string): void {
|
|
387
|
+
if (!/^(?:0|[1-9]\d*)$/.test(value)) {
|
|
388
|
+
throw new TypeError("[Sixb] Provider-reported model cost must use nonnegative amountNanos.")
|
|
389
|
+
}
|
|
390
|
+
}
|