gemi 0.157.0 → 0.160.1
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/ai/Agent.d.ts +231 -55
- package/dist/ai/Agent.d.ts.map +1 -1
- package/dist/ai/AgentController.d.ts +45 -11
- package/dist/ai/AgentController.d.ts.map +1 -1
- package/dist/ai/eval/Eval.d.ts +15 -14
- package/dist/ai/eval/Eval.d.ts.map +1 -1
- package/dist/ai/generate.d.ts +165 -7
- package/dist/ai/generate.d.ts.map +1 -1
- package/dist/ai/index.d.ts +5 -5
- package/dist/ai/index.d.ts.map +1 -1
- package/dist/ai/index.js +11 -11
- package/dist/ai/index.js.map +4 -4
- package/dist/ai/usageMeter.d.ts +149 -6
- package/dist/ai/usageMeter.d.ts.map +1 -1
- package/dist/app/index.js +1 -1
- package/dist/bin/gemi.js +178 -121
- package/dist/bin/gemi.js.map +5 -4
- package/dist/bun/plugin.js +1 -1
- package/dist/bun/preload.js +1 -1
- package/dist/{chunk-0v3bca8k.js → chunk-0b8m1f07.js} +3 -3
- package/dist/{chunk-0v3bca8k.js.map → chunk-0b8m1f07.js.map} +1 -1
- package/dist/{chunk-zv9d6jkj.js → chunk-0gazmssx.js} +2 -2
- package/dist/{chunk-zv9d6jkj.js.map → chunk-0gazmssx.js.map} +1 -1
- package/dist/{chunk-xff7tkde.js → chunk-0qernzn1.js} +2 -2
- package/dist/{chunk-xff7tkde.js.map → chunk-0qernzn1.js.map} +1 -1
- package/dist/chunk-0qrbspbe.js +5 -0
- package/dist/{chunk-6np1r9gk.js.map → chunk-0qrbspbe.js.map} +1 -1
- package/dist/{chunk-517fjfme.js → chunk-0vb4j7cx.js} +3 -3
- package/dist/{chunk-517fjfme.js.map → chunk-0vb4j7cx.js.map} +1 -1
- package/dist/{chunk-0yjm936b.js → chunk-191gkynh.js} +3 -3
- package/dist/{chunk-0yjm936b.js.map → chunk-191gkynh.js.map} +1 -1
- package/dist/chunk-1xxh48bd.js +4 -0
- package/dist/{chunk-cmt3jw6j.js.map → chunk-1xxh48bd.js.map} +2 -2
- package/dist/chunk-27habdva.js +4 -0
- package/dist/{chunk-3ndc8adc.js.map → chunk-27habdva.js.map} +2 -2
- package/dist/{chunk-qvngsa1c.js → chunk-2ednvght.js} +2 -2
- package/dist/{chunk-qvngsa1c.js.map → chunk-2ednvght.js.map} +1 -1
- package/dist/chunk-3cvza61a.js +4 -0
- package/dist/{chunk-pw5h5935.js.map → chunk-3cvza61a.js.map} +2 -2
- package/dist/{chunk-1de3awrh.js → chunk-3d8jxky6.js} +3 -3
- package/dist/{chunk-1de3awrh.js.map → chunk-3d8jxky6.js.map} +1 -1
- package/dist/chunk-3vmc6adw.js +4 -0
- package/dist/{chunk-z7224rhm.js.map → chunk-3vmc6adw.js.map} +2 -2
- package/dist/chunk-44ensgdq.js +10 -0
- package/dist/{chunk-set6qmjw.js.map → chunk-44ensgdq.js.map} +3 -3
- package/dist/{chunk-7yww9aq7.js → chunk-4670xxae.js} +2 -2
- package/dist/{chunk-7yww9aq7.js.map → chunk-4670xxae.js.map} +1 -1
- package/dist/{chunk-xtqd9vpp.js → chunk-4vqnv41y.js} +2 -2
- package/dist/{chunk-xtqd9vpp.js.map → chunk-4vqnv41y.js.map} +1 -1
- package/dist/{chunk-exb35whf.js → chunk-4ye6p5yk.js} +2 -2
- package/dist/{chunk-exb35whf.js.map → chunk-4ye6p5yk.js.map} +1 -1
- package/dist/{chunk-9md6acv2.js → chunk-57qnqcrp.js} +1 -1
- package/dist/{chunk-zcg6m7gf.js → chunk-5c6dfy75.js} +2 -2
- package/dist/{chunk-zcg6m7gf.js.map → chunk-5c6dfy75.js.map} +1 -1
- package/dist/{chunk-t7yt8egz.js → chunk-5pc21syf.js} +3 -3
- package/dist/{chunk-t7yt8egz.js.map → chunk-5pc21syf.js.map} +1 -1
- package/dist/{chunk-5zxxd7qp.js → chunk-5qzxyj68.js} +1 -1
- package/dist/{chunk-pgdxqrjv.js → chunk-664ewdjv.js} +4 -4
- package/dist/{chunk-pgdxqrjv.js.map → chunk-664ewdjv.js.map} +2 -2
- package/dist/chunk-6d6p0q3p.js +5 -0
- package/dist/{chunk-7zy6nq9e.js.map → chunk-6d6p0q3p.js.map} +2 -2
- package/dist/{chunk-k1aw97dm.js → chunk-6ytezxzj.js} +2 -2
- package/dist/{chunk-78wht1ph.js.map → chunk-6ytezxzj.js.map} +1 -1
- package/dist/{chunk-00z7s34q.js → chunk-79nypedr.js} +2 -2
- package/dist/{chunk-00z7s34q.js.map → chunk-79nypedr.js.map} +1 -1
- package/dist/{chunk-4vnrnbn3.js → chunk-7bc9ypbk.js} +3 -3
- package/dist/{chunk-4vnrnbn3.js.map → chunk-7bc9ypbk.js.map} +1 -1
- package/dist/{chunk-wg0ttent.js → chunk-7rfw4h2x.js} +3 -3
- package/dist/{chunk-wg0ttent.js.map → chunk-7rfw4h2x.js.map} +1 -1
- package/dist/{chunk-rrz2ry81.js → chunk-8m3m5hcf.js} +2 -2
- package/dist/{chunk-rrz2ry81.js.map → chunk-8m3m5hcf.js.map} +1 -1
- package/dist/{chunk-aq5zx3vg.js → chunk-8tyw6faf.js} +2 -2
- package/dist/{chunk-aq5zx3vg.js.map → chunk-8tyw6faf.js.map} +1 -1
- package/dist/{chunk-p83cjehh.js → chunk-8z29qvvm.js} +3 -3
- package/dist/{chunk-p83cjehh.js.map → chunk-8z29qvvm.js.map} +1 -1
- package/dist/{chunk-dhq7zv0t.js → chunk-982x8jps.js} +2 -2
- package/dist/{chunk-dhq7zv0t.js.map → chunk-982x8jps.js.map} +1 -1
- package/dist/{chunk-38kjpa6q.js → chunk-98byy5m4.js} +1 -1
- package/dist/{chunk-986eh0n3.js → chunk-9983zmhx.js} +2 -2
- package/dist/{chunk-986eh0n3.js.map → chunk-9983zmhx.js.map} +1 -1
- package/dist/{chunk-r5y2khw4.js → chunk-9f2ps5v2.js} +2 -2
- package/dist/{chunk-r5y2khw4.js.map → chunk-9f2ps5v2.js.map} +1 -1
- package/dist/{chunk-q3e1bqrs.js → chunk-bfj2jafb.js} +3 -3
- package/dist/{chunk-q3e1bqrs.js.map → chunk-bfj2jafb.js.map} +1 -1
- package/dist/{chunk-0vc2akg0.js → chunk-bqxt1she.js} +1 -1
- package/dist/{chunk-159j20yr.js → chunk-bzcfw8qd.js} +2 -2
- package/dist/{chunk-159j20yr.js.map → chunk-bzcfw8qd.js.map} +1 -1
- package/dist/{chunk-jr9qerbr.js → chunk-cb873vjm.js} +2 -2
- package/dist/{chunk-jr9qerbr.js.map → chunk-cb873vjm.js.map} +1 -1
- package/dist/{chunk-x82f3q6a.js → chunk-cq16azbw.js} +4 -4
- package/dist/{chunk-x82f3q6a.js.map → chunk-cq16azbw.js.map} +1 -1
- package/dist/{chunk-72f6pbap.js → chunk-csvffxjh.js} +2 -2
- package/dist/{chunk-72f6pbap.js.map → chunk-csvffxjh.js.map} +1 -1
- package/dist/chunk-ctrmztan.js +4 -0
- package/dist/{chunk-42646nt7.js.map → chunk-ctrmztan.js.map} +2 -2
- package/dist/{chunk-4t2j3zcg.js → chunk-d249m2ct.js} +2 -2
- package/dist/{chunk-4t2j3zcg.js.map → chunk-d249m2ct.js.map} +2 -2
- package/dist/{chunk-h3gcxf2k.js → chunk-day21sfa.js} +3 -3
- package/dist/{chunk-h3gcxf2k.js.map → chunk-day21sfa.js.map} +1 -1
- package/dist/chunk-dvwfhc5n.js +117 -0
- package/dist/{chunk-t66ex43f.js.map → chunk-dvwfhc5n.js.map} +10 -9
- package/dist/{chunk-78wht1ph.js → chunk-egwz89ze.js} +2 -2
- package/dist/{chunk-k1aw97dm.js.map → chunk-egwz89ze.js.map} +1 -1
- package/dist/chunk-fcjjd162.js +4 -0
- package/dist/{chunk-jrv31jp9.js.map → chunk-fcjjd162.js.map} +2 -2
- package/dist/{chunk-rtv4ax8z.js → chunk-g71ppv6x.js} +2 -2
- package/dist/{chunk-rtv4ax8z.js.map → chunk-g71ppv6x.js.map} +1 -1
- package/dist/{chunk-56a3vnrj.js → chunk-gmeeyg19.js} +3 -3
- package/dist/{chunk-56a3vnrj.js.map → chunk-gmeeyg19.js.map} +1 -1
- package/dist/{chunk-yzsyg1f7.js → chunk-j144nwvh.js} +3 -3
- package/dist/{chunk-yzsyg1f7.js.map → chunk-j144nwvh.js.map} +1 -1
- package/dist/{chunk-q7k2hc45.js → chunk-jarsydtr.js} +3 -3
- package/dist/{chunk-q7k2hc45.js.map → chunk-jarsydtr.js.map} +1 -1
- package/dist/chunk-k43m5dvs.js +4 -0
- package/dist/{chunk-69c2s43a.js.map → chunk-k43m5dvs.js.map} +2 -2
- package/dist/chunk-kan3yz82.js +5 -0
- package/dist/{chunk-3t4nw1n2.js.map → chunk-kan3yz82.js.map} +2 -2
- package/dist/{chunk-ah2jy1vx.js → chunk-m4pkbndk.js} +2 -2
- package/dist/{chunk-ah2jy1vx.js.map → chunk-m4pkbndk.js.map} +1 -1
- package/dist/{chunk-fe12f946.js → chunk-m73mjzeh.js} +2 -2
- package/dist/{chunk-fe12f946.js.map → chunk-m73mjzeh.js.map} +1 -1
- package/dist/{chunk-9gt9qdge.js → chunk-m8a80sgn.js} +1 -1
- package/dist/chunk-mn9v157z.js +6 -0
- package/dist/{chunk-ks9t82g0.js.map → chunk-mn9v157z.js.map} +2 -2
- package/dist/{chunk-px3ctjxh.js → chunk-msxhf3m6.js} +2 -2
- package/dist/{chunk-px3ctjxh.js.map → chunk-msxhf3m6.js.map} +1 -1
- package/dist/chunk-p6nkfcn1.js +5 -0
- package/dist/{chunk-kwc68y45.js.map → chunk-p6nkfcn1.js.map} +2 -2
- package/dist/{chunk-ss3yn4g2.js → chunk-p9syxzxh.js} +3 -3
- package/dist/{chunk-ss3yn4g2.js.map → chunk-p9syxzxh.js.map} +1 -1
- package/dist/{chunk-yewj83ez.js → chunk-pyyhmeg1.js} +3 -3
- package/dist/{chunk-yewj83ez.js.map → chunk-pyyhmeg1.js.map} +1 -1
- package/dist/{chunk-nvhbkqmd.js → chunk-qbsk0jr8.js} +2 -2
- package/dist/{chunk-nvhbkqmd.js.map → chunk-qbsk0jr8.js.map} +1 -1
- package/dist/{chunk-g5d62d1n.js → chunk-qsbtqh47.js} +2 -2
- package/dist/{chunk-g5d62d1n.js.map → chunk-qsbtqh47.js.map} +1 -1
- package/dist/{chunk-wnjvfmqc.js → chunk-qz9n2e59.js} +3 -3
- package/dist/{chunk-wnjvfmqc.js.map → chunk-qz9n2e59.js.map} +1 -1
- package/dist/{chunk-qbvm5q1g.js → chunk-rq3wrwfa.js} +1 -1
- package/dist/{chunk-8eyxj78g.js → chunk-ryq2ezgt.js} +3 -3
- package/dist/{chunk-8eyxj78g.js.map → chunk-ryq2ezgt.js.map} +1 -1
- package/dist/{chunk-v10xzpqs.js → chunk-s0xwqcrf.js} +2 -2
- package/dist/{chunk-v10xzpqs.js.map → chunk-s0xwqcrf.js.map} +1 -1
- package/dist/{chunk-kbdt84xg.js → chunk-szdbsmq7.js} +2 -2
- package/dist/{chunk-kbdt84xg.js.map → chunk-szdbsmq7.js.map} +1 -1
- package/dist/{chunk-n95dppzm.js → chunk-tsbxdz4h.js} +2 -2
- package/dist/{chunk-n95dppzm.js.map → chunk-tsbxdz4h.js.map} +1 -1
- package/dist/chunk-ttvzfwqw.js +41 -0
- package/dist/chunk-ttvzfwqw.js.map +28 -0
- package/dist/chunk-v0gjdknx.js +4 -0
- package/dist/{chunk-7426gfgw.js.map → chunk-v0gjdknx.js.map} +2 -2
- package/dist/chunk-v8fx4vgq.js +4 -0
- package/dist/{chunk-zfbqgzwa.js.map → chunk-v8fx4vgq.js.map} +2 -2
- package/dist/{chunk-dce3w52r.js → chunk-vb73ddwz.js} +3 -3
- package/dist/{chunk-dce3w52r.js.map → chunk-vb73ddwz.js.map} +1 -1
- package/dist/{chunk-xyyq577r.js → chunk-w0rfypzx.js} +2 -2
- package/dist/{chunk-xyyq577r.js.map → chunk-w0rfypzx.js.map} +1 -1
- package/dist/{chunk-tr8se94g.js → chunk-weyv3zrt.js} +3 -3
- package/dist/{chunk-tr8se94g.js.map → chunk-weyv3zrt.js.map} +1 -1
- package/dist/{chunk-9kyfaeey.js → chunk-wtddr3vs.js} +2 -2
- package/dist/{chunk-9kyfaeey.js.map → chunk-wtddr3vs.js.map} +1 -1
- package/dist/{chunk-tzheb6ak.js → chunk-xp7x27n8.js} +3 -3
- package/dist/{chunk-tzheb6ak.js.map → chunk-xp7x27n8.js.map} +1 -1
- package/dist/{chunk-ycn7w2e9.js → chunk-yzw2tvqq.js} +2 -2
- package/dist/{chunk-ycn7w2e9.js.map → chunk-yzw2tvqq.js.map} +1 -1
- package/dist/{chunk-wbv6218d.js → chunk-zz2n9pa5.js} +3 -3
- package/dist/{chunk-wbv6218d.js.map → chunk-zz2n9pa5.js.map} +1 -1
- package/dist/client/index.js +1 -1
- package/dist/client/index.js.map +1 -1
- package/dist/config/index.js +1 -1
- package/dist/console/run.js +2 -2
- package/dist/console/run.js.map +1 -1
- package/dist/container/index.js +2 -2
- package/dist/container/index.js.map +1 -1
- package/dist/database/index.js +2 -2
- package/dist/database/index.js.map +1 -1
- package/dist/email/index.js +2 -2
- package/dist/email/index.js.map +1 -1
- package/dist/facades/index.js +2 -2
- package/dist/facades/index.js.map +1 -1
- package/dist/foundation/index.js +2 -2
- package/dist/foundation/index.js.map +1 -1
- package/dist/http/ApiRouter.d.ts.map +1 -1
- package/dist/http/McpRouter.d.ts +203 -6
- package/dist/http/McpRouter.d.ts.map +1 -1
- package/dist/http/index.d.ts +1 -1
- package/dist/http/index.d.ts.map +1 -1
- package/dist/http/index.js +2 -2
- package/dist/http/index.js.map +1 -1
- package/dist/i18n/dictionaryRuntime.js +2 -2
- package/dist/i18n/dictionaryRuntime.js.map +1 -1
- package/dist/i18n/index.js +2 -2
- package/dist/i18n/index.js.map +1 -1
- package/dist/kernel/index.js +2 -2
- package/dist/kernel/index.js.map +1 -1
- package/dist/orm/index.js +2 -2
- package/dist/orm/index.js.map +1 -1
- package/dist/probe/index.d.ts +79 -0
- package/dist/probe/index.d.ts.map +1 -0
- package/dist/probe/index.js +8 -0
- package/dist/probe/index.js.map +10 -0
- package/dist/server/index.js +2 -2
- package/dist/server/index.js.map +1 -1
- package/dist/services/image-optimization/ImageManager.d.ts +3 -0
- package/dist/services/image-optimization/ImageManager.d.ts.map +1 -1
- package/dist/services/image-optimization/config.d.ts +12 -0
- package/dist/services/image-optimization/config.d.ts.map +1 -1
- package/dist/services/image-optimization/fetchSourceImage.d.ts +37 -0
- package/dist/services/image-optimization/fetchSourceImage.d.ts.map +1 -0
- package/dist/services/index.d.ts +1 -1
- package/dist/services/index.d.ts.map +1 -1
- package/dist/services/index.js +9 -9
- package/dist/services/index.js.map +3 -3
- package/dist/services/mcp/McpRegistry.d.ts.map +1 -1
- package/dist/services/queue/work.js +2 -2
- package/dist/services/queue/work.js.map +1 -1
- package/dist/services/rate-limiter/drivers/RedisRateLimiterDriver.d.ts +95 -13
- package/dist/services/rate-limiter/drivers/RedisRateLimiterDriver.d.ts.map +1 -1
- package/dist/services/router/ApiRouteDispatcher.d.ts +12 -0
- package/dist/services/router/ApiRouteDispatcher.d.ts.map +1 -1
- package/dist/services/router/createFlatApiRoutes.d.ts +10 -0
- package/dist/services/router/createFlatApiRoutes.d.ts.map +1 -1
- package/dist/stats/route-table.js +1 -1
- package/dist/support/index.js +2 -2
- package/dist/support/index.js.map +1 -1
- package/dist/vitest/index.js +1 -1
- package/package.json +2 -1
- package/dist/chunk-3ndc8adc.js +0 -4
- package/dist/chunk-3t4nw1n2.js +0 -5
- package/dist/chunk-42646nt7.js +0 -4
- package/dist/chunk-69c2s43a.js +0 -4
- package/dist/chunk-6np1r9gk.js +0 -5
- package/dist/chunk-7426gfgw.js +0 -4
- package/dist/chunk-7zy6nq9e.js +0 -5
- package/dist/chunk-cmt3jw6j.js +0 -4
- package/dist/chunk-jrv31jp9.js +0 -4
- package/dist/chunk-ks9t82g0.js +0 -6
- package/dist/chunk-kwc68y45.js +0 -5
- package/dist/chunk-pw5h5935.js +0 -4
- package/dist/chunk-set6qmjw.js +0 -10
- package/dist/chunk-t66ex43f.js +0 -117
- package/dist/chunk-xp5axyb5.js +0 -30
- package/dist/chunk-xp5axyb5.js.map +0 -28
- package/dist/chunk-z7224rhm.js +0 -4
- package/dist/chunk-zfbqgzwa.js +0 -4
- /package/dist/{chunk-9md6acv2.js.map → chunk-57qnqcrp.js.map} +0 -0
- /package/dist/{chunk-5zxxd7qp.js.map → chunk-5qzxyj68.js.map} +0 -0
- /package/dist/{chunk-38kjpa6q.js.map → chunk-98byy5m4.js.map} +0 -0
- /package/dist/{chunk-0vc2akg0.js.map → chunk-bqxt1she.js.map} +0 -0
- /package/dist/{chunk-9gt9qdge.js.map → chunk-m8a80sgn.js.map} +0 -0
- /package/dist/{chunk-qbvm5q1g.js.map → chunk-rq3wrwfa.js.map} +0 -0
package/dist/ai/usageMeter.d.ts
CHANGED
|
@@ -1,11 +1,112 @@
|
|
|
1
|
-
import type { Usage } from "./types";
|
|
1
|
+
import type { Usage as UsageType } from "./types";
|
|
2
|
+
/**
|
|
3
|
+
* Usage metering by async context (#1005), with costs (#1021).
|
|
4
|
+
*
|
|
5
|
+
* An eval, or a bill, wants to know what a piece of work cost, and the model
|
|
6
|
+
* calls it made are often deep in app code: a tool that runs a builder that
|
|
7
|
+
* calls `generate`, a compaction summary, an image. Threading a counter
|
|
8
|
+
* through all of that is the plumbing every caller would forget, so the calls
|
|
9
|
+
* report themselves instead: each model call's `finish` frame (an agent step,
|
|
10
|
+
* `generate`, an image generation or edit) is recorded on every meter open in
|
|
11
|
+
* the async context it ran in.
|
|
12
|
+
*
|
|
13
|
+
* Recorded per provider call, never per run: a run's `usage` already includes
|
|
14
|
+
* its sub-runs and its tools' `generate` calls, so metering runs would count
|
|
15
|
+
* those twice. That is also why a run's cost has to be metered rather than
|
|
16
|
+
* worked out from `result.usage` afterwards: that sum mixes models, and each
|
|
17
|
+
* call is priced here, when it is recorded, at its own model's prices.
|
|
18
|
+
*/
|
|
19
|
+
/** USD per million tokens. `cachedInput` defaults to `input`. */
|
|
20
|
+
export type ModelPrice = {
|
|
21
|
+
input: number;
|
|
22
|
+
output: number;
|
|
23
|
+
cachedInput?: number;
|
|
24
|
+
/** For image tokens (`Usage.imageInputTokens` / `imageOutputTokens`);
|
|
25
|
+
* they're priced as text when these are absent. */
|
|
26
|
+
imageInput?: number;
|
|
27
|
+
imageOutput?: number;
|
|
28
|
+
};
|
|
29
|
+
/**
|
|
30
|
+
* What a model call costs.
|
|
31
|
+
*
|
|
32
|
+
* A table: USD per million tokens by model id, where a key also prices the ids
|
|
33
|
+
* it is a prefix of (`gpt-5.4` prices `gpt-5.4-2026-03-05`) and the longest
|
|
34
|
+
* key wins. Or a function, answering the cost in whatever unit the app counts
|
|
35
|
+
* in (USD micros, credits), and `undefined` for a model it doesn't price.
|
|
36
|
+
*
|
|
37
|
+
* Every cost a meter holds is in this unit, `add`ed ones included, so an app
|
|
38
|
+
* that prices with a function in micros adds micros.
|
|
39
|
+
*/
|
|
40
|
+
export type UsagePricing = Record<string, ModelPrice> | ((model: string, usage: UsageType) => number | undefined);
|
|
41
|
+
/** One row of `UsageTotals.byModel` or `byLabel`. */
|
|
42
|
+
export type UsageLine = {
|
|
43
|
+
/** Tokens. Zero for a label that only had costs `add`ed. */
|
|
44
|
+
usage: UsageType;
|
|
45
|
+
cost: number;
|
|
46
|
+
/** Model calls, plus `add`s for a label. */
|
|
47
|
+
count: number;
|
|
48
|
+
};
|
|
49
|
+
/** What a meter has counted so far. */
|
|
50
|
+
export type UsageTotals = {
|
|
51
|
+
/** Every model call, summed. */
|
|
52
|
+
usage: UsageType;
|
|
53
|
+
/** The priced model calls and every `add`ed cost. */
|
|
54
|
+
cost: number;
|
|
55
|
+
/** By the model the provider reported (or was asked for). */
|
|
56
|
+
byModel: Record<string, UsageLine>;
|
|
57
|
+
/**
|
|
58
|
+
* By label: what was `add`ed under it, and the model calls made inside a
|
|
59
|
+
* meter opened with that `label` (the innermost label wins). Calls outside
|
|
60
|
+
* any labelled meter are in the totals and `byModel`, not here.
|
|
61
|
+
*/
|
|
62
|
+
byLabel: Record<string, UsageLine>;
|
|
63
|
+
/** Models called that the pricing doesn't price; their calls cost 0. */
|
|
64
|
+
unpriced: string[];
|
|
65
|
+
};
|
|
66
|
+
/** An open meter: what `Usage.meter` hands its function, and `ctx.meter`. */
|
|
67
|
+
export interface UsageMeter {
|
|
68
|
+
readonly label: string | undefined;
|
|
69
|
+
/**
|
|
70
|
+
* Adds a cost that isn't a model call gemi made (a browser session, an
|
|
71
|
+
* external API) under `label`, to this meter and every meter around it.
|
|
72
|
+
* In the pricing's unit. A no-op once the meter's scope has settled.
|
|
73
|
+
*/
|
|
74
|
+
add(label: string, cost: number): void;
|
|
75
|
+
/** What it has counted so far. A copy. */
|
|
76
|
+
totals(): UsageTotals;
|
|
77
|
+
}
|
|
78
|
+
/** What `Usage.meter` measured: the function's value and the totals. */
|
|
79
|
+
export type MeteredUsage<T> = UsageTotals & {
|
|
80
|
+
value: T;
|
|
81
|
+
};
|
|
82
|
+
export type UsageMeterOptions = {
|
|
83
|
+
/** Attributes every call inside to this label, here and in enclosing meters. */
|
|
84
|
+
label?: string;
|
|
85
|
+
/** Overrides the enclosing meter's pricing, or `Usage.configure`'s, for this one. */
|
|
86
|
+
pricing?: UsagePricing;
|
|
87
|
+
};
|
|
88
|
+
/**
|
|
89
|
+
* Opens a meter nested in whatever meters are open here, without running
|
|
90
|
+
* anything yet: an agent run opens its own with this, runs its loop in it
|
|
91
|
+
* (`run`) and closes it when the loop settles. `Usage.meter` is the outside.
|
|
92
|
+
*/
|
|
93
|
+
export declare function openMeter(options?: UsageMeterOptions): {
|
|
94
|
+
meter: UsageMeter;
|
|
95
|
+
run: <T>(fn: () => T) => T;
|
|
96
|
+
close: () => void;
|
|
97
|
+
};
|
|
98
|
+
declare function meter<T>(fn: (meter: UsageMeter) => T | Promise<T>, options?: UsageMeterOptions): Promise<MeteredUsage<T>>;
|
|
99
|
+
/** Called by the model call sites with each `finish` frame's usage. */
|
|
100
|
+
export declare function recordUsage(model: string, usage: UsageType | undefined): void;
|
|
101
|
+
/** One model call's cost under `pricing`; `undefined` when it isn't priced. */
|
|
102
|
+
export declare function priceUsage(pricing: UsagePricing | undefined, model: string, usage: UsageType): number | undefined;
|
|
2
103
|
/** What `measureUsage` measured. */
|
|
3
104
|
export type MeasuredUsage<T> = {
|
|
4
105
|
value: T;
|
|
5
106
|
/** Every model call made inside `fn`, summed. */
|
|
6
|
-
usage:
|
|
107
|
+
usage: UsageType;
|
|
7
108
|
/** The same, by the model the provider reported (or was asked for). */
|
|
8
|
-
byModel: Record<string,
|
|
109
|
+
byModel: Record<string, UsageType>;
|
|
9
110
|
};
|
|
10
111
|
/**
|
|
11
112
|
* Runs `fn` and sums the usage of every model call made inside it, however
|
|
@@ -15,9 +116,51 @@ export type MeasuredUsage<T> = {
|
|
|
15
116
|
* const { value, usage, byModel } = await measureUsage(() => agent.stream(params).result());
|
|
16
117
|
*
|
|
17
118
|
* Work `fn` started and did not wait for (a background summary, say) counts
|
|
18
|
-
* only if it finishes before `fn` does.
|
|
119
|
+
* only if it finishes before `fn` does. `Usage.meter` is the same with costs.
|
|
19
120
|
*/
|
|
20
121
|
export declare function measureUsage<T>(fn: () => T | Promise<T>): Promise<MeasuredUsage<T>>;
|
|
21
|
-
/**
|
|
22
|
-
|
|
122
|
+
/**
|
|
123
|
+
* Token usage, and (as a value) the meter that adds it up with costs.
|
|
124
|
+
*
|
|
125
|
+
* Usage.configure({ pricing: { "gpt-5.4": { input: 1.25, output: 10 } } });
|
|
126
|
+
* const { value, cost, byModel, byLabel } = await Usage.meter(async (meter) => {
|
|
127
|
+
* await review(page); // every model call inside, however deep
|
|
128
|
+
* meter.add("browser", 0.002); // a cost that isn't a model call
|
|
129
|
+
* return "done";
|
|
130
|
+
* });
|
|
131
|
+
*/
|
|
132
|
+
export type Usage = UsageType;
|
|
133
|
+
export declare const Usage: {
|
|
134
|
+
/**
|
|
135
|
+
* The pricing every meter uses unless it, or a meter around it, has its
|
|
136
|
+
* own. Read when a call is recorded, so meters already open pick it up.
|
|
137
|
+
* `{ pricing: undefined }` clears it.
|
|
138
|
+
*/
|
|
139
|
+
configure(options: {
|
|
140
|
+
pricing?: UsagePricing;
|
|
141
|
+
}): void;
|
|
142
|
+
/**
|
|
143
|
+
* Runs `fn` with a meter open and answers its value with the totals: every
|
|
144
|
+
* model call made inside it (agent steps, `generate`, images, sub-runs),
|
|
145
|
+
* each priced at its own model's prices, and every cost `add`ed. Meters
|
|
146
|
+
* nest: an inner one's calls and costs also count for the outer ones, and
|
|
147
|
+
* concurrent meters don't see each other's. Work `fn` started and did not
|
|
148
|
+
* wait for counts only if it finishes before `fn` does.
|
|
149
|
+
*/
|
|
150
|
+
meter: typeof meter;
|
|
151
|
+
/**
|
|
152
|
+
* Adds a cost to every meter open here (the innermost one and those around
|
|
153
|
+
* it), under `label`. A no-op outside any meter.
|
|
154
|
+
*/
|
|
155
|
+
add(label: string, cost: number): void;
|
|
156
|
+
/**
|
|
157
|
+
* Records a model call gemi didn't make itself (a vendor SDK called
|
|
158
|
+
* directly, a usage report from elsewhere) on every meter open here, priced
|
|
159
|
+
* like any other. A no-op outside any meter.
|
|
160
|
+
*/
|
|
161
|
+
record(model: string, usage: UsageType): void;
|
|
162
|
+
/** The innermost meter open here (a tool's is its run's), or `undefined`. */
|
|
163
|
+
current(): UsageMeter | undefined;
|
|
164
|
+
};
|
|
165
|
+
export {};
|
|
23
166
|
//# sourceMappingURL=usageMeter.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"usageMeter.d.ts","sourceRoot":"","sources":["../../ai/usageMeter.ts"],"names":[],"mappings":"AAEA,OAAO,KAAK,EAAE,KAAK,EAAE,MAAM,SAAS,CAAC;
|
|
1
|
+
{"version":3,"file":"usageMeter.d.ts","sourceRoot":"","sources":["../../ai/usageMeter.ts"],"names":[],"mappings":"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"}
|
package/dist/app/index.js
CHANGED
|
@@ -1,4 +1,4 @@
|
|
|
1
1
|
// @bun
|
|
2
|
-
import{Da as a}from"../chunk-
|
|
2
|
+
import{Da as a}from"../chunk-982x8jps.js";import"../chunk-m4pkbndk.js";import"../chunk-egwz89ze.js";export{a as App};
|
|
3
3
|
|
|
4
4
|
//# debugId=F6AD769F4DAEBF5D64756E2164756E21
|