@adonis-agora/agent 0.68.0 → 0.69.0
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/CHANGELOG.md +20 -0
- package/dist/providers/agent_provider.js +6 -1
- package/dist/providers/agent_provider.js.map +1 -1
- package/dist/src/agent-loop.d.ts.map +1 -1
- package/dist/src/agent-loop.js +19 -2
- package/dist/src/agent-loop.js.map +1 -1
- package/dist/src/define_config.d.ts +29 -7
- package/dist/src/define_config.d.ts.map +1 -1
- package/dist/src/define_config.js.map +1 -1
- package/dist/src/index.d.ts +2 -1
- package/dist/src/index.d.ts.map +1 -1
- package/dist/src/index.js +2 -1
- package/dist/src/index.js.map +1 -1
- package/dist/src/opencode/turn.js +1 -1
- package/dist/src/opencode/turn.js.map +1 -1
- package/dist/src/pricing/bedrock.d.ts +64 -0
- package/dist/src/pricing/bedrock.d.ts.map +1 -0
- package/dist/src/pricing/bedrock.js +141 -0
- package/dist/src/pricing/bedrock.js.map +1 -0
- package/dist/src/pricing/boot-pricing.d.ts +60 -11
- package/dist/src/pricing/boot-pricing.d.ts.map +1 -1
- package/dist/src/pricing/boot-pricing.js +192 -38
- package/dist/src/pricing/boot-pricing.js.map +1 -1
- package/dist/src/pricing/models-dev.d.ts +10 -0
- package/dist/src/pricing/models-dev.d.ts.map +1 -1
- package/dist/src/pricing/models-dev.js +27 -8
- package/dist/src/pricing/models-dev.js.map +1 -1
- package/dist/src/spi/agent-store.d.ts +34 -7
- package/dist/src/spi/agent-store.d.ts.map +1 -1
- package/dist/src/spi/agent-store.js +14 -0
- package/dist/src/spi/agent-store.js.map +1 -1
- package/dist/src/stores/ledger-quota-provider.d.ts +11 -2
- package/dist/src/stores/ledger-quota-provider.d.ts.map +1 -1
- package/dist/src/stores/ledger-quota-provider.js +11 -4
- package/dist/src/stores/ledger-quota-provider.js.map +1 -1
- package/dist/src/stores/lucid-schema.d.ts.map +1 -1
- package/dist/src/stores/lucid-schema.js +4 -0
- package/dist/src/stores/lucid-schema.js.map +1 -1
- package/dist/src/stores/lucid.d.ts +2 -5
- package/dist/src/stores/lucid.d.ts.map +1 -1
- package/dist/src/stores/lucid.js +9 -8
- package/dist/src/stores/lucid.js.map +1 -1
- package/dist/src/testing/in-memory-store.d.ts +6 -6
- package/dist/src/testing/in-memory-store.d.ts.map +1 -1
- package/dist/src/testing/in-memory-store.js +6 -9
- package/dist/src/testing/in-memory-store.js.map +1 -1
- package/package.json +1 -1
- package/skills/agent-setup/SKILL.md +9 -5
|
@@ -1,5 +1,6 @@
|
|
|
1
1
|
import { resolveModelPrice, } from '../spi/pricing-store.js';
|
|
2
|
-
import {
|
|
2
|
+
import { awsPartitionOfRegion, bedrockPriceCandidates, builtinBedrockPrice, isBedrockModel, parseBedrockModelId, } from './bedrock.js';
|
|
3
|
+
import { lookupModelsDevPricesEach, modelsDevRefsFor, } from './models-dev.js';
|
|
3
4
|
/** How long the boot check waits for the models.dev catalog when no `signal` is given. */
|
|
4
5
|
export const CATALOG_TIMEOUT_MS = 15_000;
|
|
5
6
|
const PREFIX = '[@adonis-agora/agent]';
|
|
@@ -8,23 +9,33 @@ const PREFIX = '[@adonis-agora/agent]';
|
|
|
8
9
|
*
|
|
9
10
|
* A model needs nothing when its provider reports the real cost (a gateway: OpenRouter, the Vercel AI
|
|
10
11
|
* Gateway) — that figure always wins. Every other model is priced off the pricing store, so a model
|
|
11
|
-
* with no row there would record `cost_usd = NULL` on every turn, silently. For each such model
|
|
12
|
-
*
|
|
13
|
-
* set is never overwritten. Gateway models are seeded too, as the estimate a call that comes back
|
|
14
|
-
* without a cost falls back to.
|
|
12
|
+
* with no row there would record `cost_usd = NULL` on every turn, silently. For each such model a row
|
|
13
|
+
* is written — only when it has NONE, so a price an operator set is never overwritten — from, in order:
|
|
15
14
|
*
|
|
16
|
-
*
|
|
17
|
-
*
|
|
18
|
-
*
|
|
15
|
+
* 1. the app's `priceCatalog.prices`;
|
|
16
|
+
* 2. for a Bedrock model in GovCloud / China, the built-in table (`BEDROCK_BUILTIN_PRICES`) — never
|
|
17
|
+
* models.dev, whose Bedrock prices are the commercial ones;
|
|
18
|
+
* 3. models.dev's current list price.
|
|
19
|
+
*
|
|
20
|
+
* The row is keyed by the exact id the model is configured with (an ARN stays an ARN), which is the id
|
|
21
|
+
* a turn reports and is priced under. Gateway models are seeded too, as the estimate a call that comes
|
|
22
|
+
* back without a cost falls back to.
|
|
23
|
+
*
|
|
24
|
+
* A model still unpriced after that gets one warning line naming it, why, and the `priceCatalog`
|
|
25
|
+
* entry that fixes it. Never throws: this runs at boot, and pricing is bookkeeping, not a reason for
|
|
26
|
+
* the app to stay down.
|
|
19
27
|
*/
|
|
20
28
|
export async function ensureModelPricing(args) {
|
|
21
29
|
const models = dedupe(args.models);
|
|
30
|
+
const catalog = args.catalog === false ? undefined : args.catalog;
|
|
22
31
|
const seeded = [];
|
|
32
|
+
const reasons = new Map();
|
|
23
33
|
let current = new Map();
|
|
24
|
-
|
|
25
|
-
if (
|
|
34
|
+
const store = args.pricingStore;
|
|
35
|
+
if (store !== undefined) {
|
|
36
|
+
let needing;
|
|
26
37
|
try {
|
|
27
|
-
const rows = await
|
|
38
|
+
const rows = await store.listCurrentPrices();
|
|
28
39
|
current = new Map(rows.map((row) => [row.modelId, row]));
|
|
29
40
|
needing = models.filter((model) => resolveModelPrice(current, model.modelId) === undefined);
|
|
30
41
|
}
|
|
@@ -32,32 +43,102 @@ export async function ensureModelPricing(args) {
|
|
|
32
43
|
args.log.warn(`${PREFIX} Could not read the pricing table at boot: ${messageOf(error)}`);
|
|
33
44
|
needing = [];
|
|
34
45
|
}
|
|
35
|
-
|
|
46
|
+
const effectiveFrom = new Date().toISOString();
|
|
47
|
+
const write = async (price) => {
|
|
48
|
+
if (current.has(price.modelId))
|
|
49
|
+
return false;
|
|
36
50
|
try {
|
|
37
|
-
|
|
38
|
-
|
|
39
|
-
|
|
40
|
-
|
|
41
|
-
|
|
42
|
-
|
|
43
|
-
|
|
44
|
-
|
|
45
|
-
|
|
46
|
-
|
|
47
|
-
|
|
51
|
+
await store.upsertModelPrice(price);
|
|
52
|
+
}
|
|
53
|
+
catch (error) {
|
|
54
|
+
args.log.warn(`${PREFIX} Could not write the price of ${price.modelId}: ${messageOf(error)}`);
|
|
55
|
+
return false;
|
|
56
|
+
}
|
|
57
|
+
current.set(price.modelId, { ...price, effectiveFrom });
|
|
58
|
+
return true;
|
|
59
|
+
};
|
|
60
|
+
const stillNeeding = () => needing.filter((model) => resolveModelPrice(current, model.modelId) === undefined);
|
|
61
|
+
// 1. The app's own prices: every entry gets its row, and a configured model matching one by id.
|
|
62
|
+
const appPrices = normalizePriceEntries(catalog?.prices ?? [], args.log);
|
|
63
|
+
if (appPrices.size > 0) {
|
|
64
|
+
const before = stillNeeding();
|
|
65
|
+
for (const price of appPrices.values())
|
|
66
|
+
await write(price);
|
|
67
|
+
// Keyed by the configured id too, so the id a turn reports finds it by exact match.
|
|
68
|
+
for (const model of before) {
|
|
69
|
+
const price = matchPrice(appPrices, model.modelId);
|
|
70
|
+
if (price !== undefined)
|
|
71
|
+
await write({ ...price, modelId: model.modelId });
|
|
72
|
+
}
|
|
73
|
+
const fromApp = before
|
|
74
|
+
.filter((model) => resolveModelPrice(current, model.modelId) !== undefined)
|
|
75
|
+
.map((model) => model.modelId);
|
|
76
|
+
if (fromApp.length > 0) {
|
|
77
|
+
seeded.push(...fromApp);
|
|
78
|
+
args.log.info(`${PREFIX} Seeded prices from \`priceCatalog.prices\` for ${fromApp.join(', ')}.`);
|
|
79
|
+
}
|
|
80
|
+
}
|
|
81
|
+
// 2. Bedrock outside the commercial partition: the built-in table, never models.dev.
|
|
82
|
+
const region = catalog?.region ?? defaultAwsRegion();
|
|
83
|
+
const fromBuiltin = [];
|
|
84
|
+
const commercial = [];
|
|
85
|
+
for (const model of stillNeeding()) {
|
|
86
|
+
const partition = bedrockPartitionOf(model, region);
|
|
87
|
+
if (partition === undefined || partition === 'aws') {
|
|
88
|
+
commercial.push(model);
|
|
89
|
+
continue;
|
|
90
|
+
}
|
|
91
|
+
const price = builtinBedrockPrice(model.modelId, partition);
|
|
92
|
+
if (price !== undefined && (await write(price)))
|
|
93
|
+
fromBuiltin.push(model.modelId);
|
|
94
|
+
else {
|
|
95
|
+
reasons.set(model.modelId, `no price for AWS partition ${partition}${regionNote(model, region)} — models.dev lists commercial Bedrock prices only, and the built-in table has none for it`);
|
|
96
|
+
}
|
|
97
|
+
}
|
|
98
|
+
if (fromBuiltin.length > 0) {
|
|
99
|
+
seeded.push(...fromBuiltin);
|
|
100
|
+
args.log.info(`${PREFIX} Seeded built-in AWS GovCloud Bedrock prices for ${fromBuiltin.join(', ')} (from the AWS Price List; may go stale). Set \`priceCatalog.prices\` to override.`);
|
|
101
|
+
}
|
|
102
|
+
// 3. models.dev, for the rest.
|
|
103
|
+
if (commercial.length > 0) {
|
|
104
|
+
if (catalog === undefined || catalog.modelsDev === false) {
|
|
105
|
+
for (const model of commercial) {
|
|
106
|
+
reasons.set(model.modelId, 'no price row, and models.dev lookups are off');
|
|
48
107
|
}
|
|
49
|
-
|
|
50
|
-
|
|
51
|
-
|
|
108
|
+
}
|
|
109
|
+
else {
|
|
110
|
+
try {
|
|
111
|
+
const refs = commercial.map((model) => modelsDevRefsFor(model.modelId, model.provider));
|
|
112
|
+
const { prices: _p, region: _r, modelsDev: _m, ...modelsDev } = catalog;
|
|
113
|
+
const found = await lookupModelsDevPricesEach(refs,
|
|
114
|
+
// Bounded: a hung catalog must not hold a shutdown (which awaits this) open forever.
|
|
115
|
+
modelsDev.signal !== undefined
|
|
116
|
+
? modelsDev
|
|
117
|
+
: { ...modelsDev, signal: AbortSignal.timeout(CATALOG_TIMEOUT_MS) });
|
|
118
|
+
const fromModelsDev = [];
|
|
119
|
+
for (const [i, model] of commercial.entries()) {
|
|
120
|
+
const price = found[i];
|
|
121
|
+
if (price === undefined) {
|
|
122
|
+
reasons.set(model.modelId, 'unknown model — models.dev does not list a price for it');
|
|
123
|
+
}
|
|
124
|
+
else if (await write({ ...price, modelId: model.modelId })) {
|
|
125
|
+
fromModelsDev.push(model.modelId);
|
|
126
|
+
}
|
|
127
|
+
}
|
|
128
|
+
if (fromModelsDev.length > 0) {
|
|
129
|
+
seeded.push(...fromModelsDev);
|
|
130
|
+
const bedrock = commercial.some((model) => isBedrockModel(model.modelId, model.provider));
|
|
131
|
+
args.log.info(`${PREFIX} Seeded list prices from models.dev for ${fromModelsDev.join(', ')} — an estimate, used when the provider reports no cost.${bedrock
|
|
132
|
+
? ' Bedrock rows are COMMERCIAL-region prices: for GovCloud or China set `priceCatalog.region` (or `AWS_REGION`).'
|
|
133
|
+
: ''} Set your own with \`priceCatalog.prices\`, \`upsertModelPrice\` to override.`);
|
|
134
|
+
}
|
|
52
135
|
}
|
|
53
|
-
|
|
54
|
-
args.log.
|
|
55
|
-
|
|
136
|
+
catch (error) {
|
|
137
|
+
args.log.warn(`${PREFIX} Could not seed prices from models.dev: ${messageOf(error)}`);
|
|
138
|
+
for (const model of commercial)
|
|
139
|
+
reasons.set(model.modelId, 'models.dev was unreachable');
|
|
56
140
|
}
|
|
57
141
|
}
|
|
58
|
-
catch (error) {
|
|
59
|
-
args.log.warn(`${PREFIX} Could not seed prices from models.dev: ${messageOf(error)}`);
|
|
60
|
-
}
|
|
61
142
|
}
|
|
62
143
|
}
|
|
63
144
|
const unpriced = models
|
|
@@ -65,15 +146,88 @@ export async function ensureModelPricing(args) {
|
|
|
65
146
|
.filter((model) => resolveModelPrice(current, model.modelId) === undefined)
|
|
66
147
|
.map((model) => model.modelId);
|
|
67
148
|
if (unpriced.length > 0) {
|
|
68
|
-
|
|
69
|
-
|
|
70
|
-
|
|
71
|
-
|
|
72
|
-
|
|
73
|
-
|
|
149
|
+
// Grouped by reason: `a, b (unknown model …); c (no price for AWS partition …)`.
|
|
150
|
+
const groups = new Map();
|
|
151
|
+
for (const id of unpriced) {
|
|
152
|
+
const reason = reasons.get(id) ?? '';
|
|
153
|
+
groups.set(reason, [...(groups.get(reason) ?? []), id]);
|
|
154
|
+
}
|
|
155
|
+
const named = [...groups]
|
|
156
|
+
.map(([reason, ids]) => `${ids.join(', ')}${reason !== '' ? ` (${reason})` : ''}`)
|
|
157
|
+
.join('; ');
|
|
158
|
+
const example = exampleModelFor(unpriced[0]);
|
|
159
|
+
args.log.warn(`${PREFIX} No cost will be recorded for ${named}: the provider reports no cost and ${store === undefined
|
|
160
|
+
? 'no `pricingStore` is configured. Configure one, then '
|
|
161
|
+
: 'the pricing table has no row for it. '}Add the price to \`priceCatalog.prices\`, e.g. \`{ model: '${example}', input: <USD per 1M>, output: <USD per 1M>, cacheRead?, cacheWrite? }\`, or seed a row with \`seedModelPrices(store, [...])\`, or route through a gateway that reports cost (OpenRouter, Vercel AI Gateway).`);
|
|
74
162
|
}
|
|
75
163
|
return { seeded, unpriced };
|
|
76
164
|
}
|
|
165
|
+
/** The partition a Bedrock model runs in: its id says, else the configured region; `undefined` → not Bedrock / unknown. */
|
|
166
|
+
function bedrockPartitionOf(model, region) {
|
|
167
|
+
if (!isBedrockModel(model.modelId, model.provider))
|
|
168
|
+
return undefined;
|
|
169
|
+
return parseBedrockModelId(model.modelId)?.partition ?? awsPartitionOfRegion(region);
|
|
170
|
+
}
|
|
171
|
+
function regionNote(model, region) {
|
|
172
|
+
const fromId = parseBedrockModelId(model.modelId);
|
|
173
|
+
const r = fromId?.region ?? (fromId?.partition === undefined ? region : undefined);
|
|
174
|
+
return r !== undefined ? ` (region ${r})` : '';
|
|
175
|
+
}
|
|
176
|
+
/** The id to put in the warning's example entry: the shortest id that still prices the model. */
|
|
177
|
+
function exampleModelFor(modelId) {
|
|
178
|
+
const parsed = parseBedrockModelId(modelId);
|
|
179
|
+
return parsed?.isArn ? parsed.profileId : modelId;
|
|
180
|
+
}
|
|
181
|
+
function defaultAwsRegion() {
|
|
182
|
+
const env = globalThis.process
|
|
183
|
+
?.env;
|
|
184
|
+
const region = env?.AWS_REGION ?? env?.AWS_DEFAULT_REGION;
|
|
185
|
+
return region !== undefined && region.length > 0 ? region : undefined;
|
|
186
|
+
}
|
|
187
|
+
/** A model's app price: by its exact id, then its normalized Bedrock candidates. */
|
|
188
|
+
function matchPrice(prices, modelId) {
|
|
189
|
+
for (const candidate of bedrockPriceCandidates(modelId)) {
|
|
190
|
+
const price = prices.get(candidate);
|
|
191
|
+
if (price !== undefined)
|
|
192
|
+
return price;
|
|
193
|
+
}
|
|
194
|
+
return undefined;
|
|
195
|
+
}
|
|
196
|
+
/** `priceCatalog.prices` as per-1M USD rows, keyed by model. Invalid entries are warned about and skipped. */
|
|
197
|
+
export function normalizePriceEntries(entries, log) {
|
|
198
|
+
const out = new Map();
|
|
199
|
+
const rejected = [];
|
|
200
|
+
for (const entry of entries) {
|
|
201
|
+
const label = typeof entry?.model === 'string' && entry.model.length > 0 ? entry.model : '?';
|
|
202
|
+
const currency = entry?.currency ?? 'USD';
|
|
203
|
+
const unit = entry?.unit ?? '1M tokens';
|
|
204
|
+
const scale = unit === '1M tokens' ? 1 : unit === '1K tokens' ? 1000 : undefined;
|
|
205
|
+
const rates = [entry?.input, entry?.output, entry?.cacheRead, entry?.cacheWrite];
|
|
206
|
+
const bad = rates.some((rate, i) => (i < 2 || rate !== undefined) &&
|
|
207
|
+
(typeof rate !== 'number' || !Number.isFinite(rate) || rate < 0));
|
|
208
|
+
if (label === '?' || currency !== 'USD' || scale === undefined || bad) {
|
|
209
|
+
rejected.push(`${label} (${currency !== 'USD'
|
|
210
|
+
? `currency ${String(currency)} — only USD is recorded`
|
|
211
|
+
: scale === undefined
|
|
212
|
+
? `unit ${String(unit)} — use '1M tokens' or '1K tokens'`
|
|
213
|
+
: 'needs a model and non-negative numeric input/output'})`);
|
|
214
|
+
continue;
|
|
215
|
+
}
|
|
216
|
+
if (out.has(entry.model))
|
|
217
|
+
continue; // first entry for a model wins
|
|
218
|
+
out.set(entry.model, {
|
|
219
|
+
modelId: entry.model,
|
|
220
|
+
inputPricePer1m: entry.input * scale,
|
|
221
|
+
outputPricePer1m: entry.output * scale,
|
|
222
|
+
...(entry.cacheRead !== undefined ? { cacheReadPricePer1m: entry.cacheRead * scale } : {}),
|
|
223
|
+
...(entry.cacheWrite !== undefined ? { cacheWritePricePer1m: entry.cacheWrite * scale } : {}),
|
|
224
|
+
});
|
|
225
|
+
}
|
|
226
|
+
if (rejected.length > 0) {
|
|
227
|
+
log?.warn(`${PREFIX} Ignored \`priceCatalog.prices\` entries: ${rejected.join('; ')}.`);
|
|
228
|
+
}
|
|
229
|
+
return out;
|
|
230
|
+
}
|
|
77
231
|
function dedupe(models) {
|
|
78
232
|
const seen = new Map();
|
|
79
233
|
for (const model of models)
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"boot-pricing.js","sourceRoot":"","sources":["../../../src/pricing/boot-pricing.ts"],"names":[],"mappings":"AACA,OAAO,EAGL,iBAAiB,GAClB,MAAM,yBAAyB,CAAC;AACjC,OAAO,EAAE,qBAAqB,EAAyB,gBAAgB,EAAE,MAAM,iBAAiB,CAAC;AAEjG,0FAA0F;AAC1F,MAAM,CAAC,MAAM,kBAAkB,GAAG,MAAM,CAAC;AAyBzC,MAAM,MAAM,GAAG,uBAAuB,CAAC;AAEvC;;;;;;;;;;;;;GAaG;AACH,MAAM,CAAC,KAAK,UAAU,kBAAkB,CACtC,IAA4B;IAE5B,MAAM,MAAM,GAAG,MAAM,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC;IACnC,MAAM,MAAM,GAAa,EAAE,CAAC;IAC5B,IAAI,OAAO,GAAG,IAAI,GAAG,EAA6B,CAAC;IACnD,IAAI,OAAO,GAAG,MAAM,CAAC;IAErB,IAAI,IAAI,CAAC,YAAY,KAAK,SAAS,EAAE,CAAC;QACpC,IAAI,CAAC;YACH,MAAM,IAAI,GAAG,MAAM,IAAI,CAAC,YAAY,CAAC,iBAAiB,EAAE,CAAC;YACzD,OAAO,GAAG,IAAI,GAAG,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC,GAAG,EAAE,EAAE,CAAC,CAAC,GAAG,CAAC,OAAO,EAAE,GAAG,CAAC,CAAC,CAAC,CAAC;YACzD,OAAO,GAAG,MAAM,CAAC,MAAM,CAAC,CAAC,KAAK,EAAE,EAAE,CAAC,iBAAiB,CAAC,OAAO,EAAE,KAAK,CAAC,OAAO,CAAC,KAAK,SAAS,CAAC,CAAC;QAC9F,CAAC;QAAC,OAAO,KAAK,EAAE,CAAC;YACf,IAAI,CAAC,GAAG,CAAC,IAAI,CAAC,GAAG,MAAM,8CAA8C,SAAS,CAAC,KAAK,CAAC,EAAE,CAAC,CAAC;YACzF,OAAO,GAAG,EAAE,CAAC;QACf,CAAC;QAED,IAAI,IAAI,CAAC,OAAO,KAAK,KAAK,IAAI,OAAO,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;YACjD,IAAI,CAAC;gBACH,MAAM,EAAE,MAAM,EAAE,GAAG,MAAM,qBAAqB,CAC5C,OAAO,CAAC,GAAG,CAAC,CAAC,KAAK,EAAE,EAAE,CAAC,gBAAgB,CAAC,KAAK,CAAC,OAAO,EAAE,KAAK,CAAC,QAAQ,CAAC,CAAC;gBACvE,qFAAqF;gBACrF,IAAI,CAAC,OAAO,CAAC,MAAM,KAAK,SAAS;oBAC/B,CAAC,CAAC,IAAI,CAAC,OAAO;oBACd,CAAC,CAAC,EAAE,GAAG,IAAI,CAAC,OAAO,EAAE,MAAM,EAAE,WAAW,CAAC,OAAO,CAAC,kBAAkB,CAAC,EAAE,CACzE,CAAC;gBACF,MAAM,aAAa,GAAG,IAAI,IAAI,EAAE,CAAC,WAAW,EAAE,CAAC;gBAC/C,KAAK,MAAM,KAAK,IAAI,MAAM,EAAE,CAAC;oBAC3B,IAAI,OAAO,CAAC,GAAG,CAAC,KAAK,CAAC,OAAO,CAAC;wBAAE,SAAS;oBACzC,MAAM,IAAI,CAAC,YAAY,CAAC,gBAAgB,CAAC,KAAK,CAAC,CAAC;oBAChD,OAAO,CAAC,GAAG,CAAC,KAAK,CAAC,OAAO,EAAE,EAAE,GAAG,KAAK,EAAE,aAAa,EAAE,CAAC,CAAC;gBAC1D,CAAC;gBACD,KAAK,MAAM,KAAK,IAAI,OAAO,EAAE,CAAC;oBAC5B,IAAI,iBAAiB,CAAC,OAAO,EAAE,KAAK,CAAC,OAAO,CAAC,KAAK,SAAS;wBAAE,MAAM,CAAC,IAAI,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC;gBAC1F,CAAC;gBACD,IAAI,MAAM,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;oBACtB,IAAI,CAAC,GAAG,CAAC,IAAI,CACX,GAAG,MAAM,2CAA2C,MAAM,CAAC,IAAI,CAAC,IAAI,CAAC,kBAAkB;wBACrF,2FAA2F,CAC9F,CAAC;gBACJ,CAAC;YACH,CAAC;YAAC,OAAO,KAAK,EAAE,CAAC;gBACf,IAAI,CAAC,GAAG,CAAC,IAAI,CAAC,GAAG,MAAM,2CAA2C,SAAS,CAAC,KAAK,CAAC,EAAE,CAAC,CAAC;YACxF,CAAC;QACH,CAAC;IACH,CAAC;IAED,MAAM,QAAQ,GAAG,MAAM;SACpB,MAAM,CAAC,CAAC,KAAK,EAAE,EAAE,CAAC,CAAC,KAAK,CAAC,WAAW,CAAC;SACrC,MAAM,CAAC,CAAC,KAAK,EAAE,EAAE,CAAC,iBAAiB,CAAC,OAAO,EAAE,KAAK,CAAC,OAAO,CAAC,KAAK,SAAS,CAAC;SAC1E,GAAG,CAAC,CAAC,KAAK,EAAE,EAAE,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC;IACjC,IAAI,QAAQ,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;QACxB,IAAI,CAAC,GAAG,CAAC,IAAI,CACX,GAAG,MAAM,iCAAiC,QAAQ,CAAC,IAAI,CAAC,IAAI,CAAC,qCAAqC;YAChG,CAAC,IAAI,CAAC,YAAY,KAAK,SAAS;gBAC9B,CAAC,CAAC,mCAAmC;gBACrC,CAAC,CAAC,uCAAuC,CAAC;YAC5C,2FAA2F;YAC3F,+EAA+E,CAClF,CAAC;IACJ,CAAC;IACD,OAAO,EAAE,MAAM,EAAE,QAAQ,EAAE,CAAC;AAC9B,CAAC;AAED,SAAS,MAAM,CAAC,MAAiC;IAC/C,MAAM,IAAI,GAAG,IAAI,GAAG,EAA0B,CAAC;IAC/C,KAAK,MAAM,KAAK,IAAI,MAAM;QAAE,IAAI,CAAC,IAAI,CAAC,GAAG,CAAC,KAAK,CAAC,OAAO,CAAC;YAAE,IAAI,CAAC,GAAG,CAAC,KAAK,CAAC,OAAO,EAAE,KAAK,CAAC,CAAC;IACzF,OAAO,CAAC,GAAG,IAAI,CAAC,MAAM,EAAE,CAAC,CAAC;AAC5B,CAAC;AAED,SAAS,SAAS,CAAC,KAAc;IAC/B,OAAO,KAAK,YAAY,KAAK,CAAC,CAAC,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC;AAChE,CAAC"}
|
|
1
|
+
{"version":3,"file":"boot-pricing.js","sourceRoot":"","sources":["../../../src/pricing/boot-pricing.ts"],"names":[],"mappings":"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"}
|
|
@@ -24,10 +24,20 @@ export interface ModelsDevLookup {
|
|
|
24
24
|
* Each ref is a LIST of candidates, tried in order — the first one the catalog prices wins.
|
|
25
25
|
*/
|
|
26
26
|
export declare function lookupModelsDevPrices(refs: readonly (readonly ModelsDevRef[])[], options?: ModelsDevOptions): Promise<ModelsDevLookup>;
|
|
27
|
+
/**
|
|
28
|
+
* {@link lookupModelsDevPrices}, one result per element of `refs` (in order): the price the first
|
|
29
|
+
* pricing candidate yields, or `undefined`. For callers that key the row themselves.
|
|
30
|
+
*/
|
|
31
|
+
export declare function lookupModelsDevPricesEach(refs: readonly (readonly ModelsDevRef[])[], options?: ModelsDevOptions): Promise<(ModelPriceInput | undefined)[]>;
|
|
27
32
|
/**
|
|
28
33
|
* The models.dev refs to try for a model, most specific first: `<provider>/<modelId>`, then — for an
|
|
29
34
|
* OpenRouter-style id (`deepseek/deepseek-v4.1-flash`) reached through another SDK — the OpenRouter
|
|
30
35
|
* list price. `provider` is the AI SDK provider family (`openrouter`, `openai`, `vercel`, …).
|
|
36
|
+
*
|
|
37
|
+
* A Bedrock id is normalized first (see `parseBedrockModelId`): an ARN or a geo-prefixed inference
|
|
38
|
+
* profile is tried as the full id, the profile id, then the base foundation-model id — all under
|
|
39
|
+
* `amazon-bedrock`. An ARN is never tried as an OpenRouter id (its `/` is not a vendor separator), nor
|
|
40
|
+
* looked up verbatim (models.dev lists no ARNs).
|
|
31
41
|
*/
|
|
32
42
|
export declare function modelsDevRefsFor(modelId: string, provider: string | undefined): ModelsDevRef[];
|
|
33
43
|
export declare function fetchModelsDevPrices(models: readonly ModelsDevRef[], options?: ModelsDevOptions): Promise<ModelPriceInput[]>;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"models-dev.d.ts","sourceRoot":"","sources":["../../../src/pricing/models-dev.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,iBAAiB,EAAE,eAAe,EAAE,MAAM,yBAAyB,CAAC;
|
|
1
|
+
{"version":3,"file":"models-dev.d.ts","sourceRoot":"","sources":["../../../src/pricing/models-dev.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,iBAAiB,EAAE,eAAe,EAAE,MAAM,yBAAyB,CAAC;AAGlF,6DAA6D;AAC7D,eAAO,MAAM,cAAc,gCAAgC,CAAC;AAkB5D,MAAM,WAAW,gBAAgB;IAC/B,gGAAgG;IAChG,GAAG,CAAC,EAAE,MAAM,CAAC;IACb,gGAAgG;IAChG,KAAK,CAAC,EAAE,OAAO,UAAU,CAAC,KAAK,CAAC;IAChC,MAAM,CAAC,EAAE,WAAW,CAAC;CACtB;AAED,yFAAyF;AACzF,MAAM,MAAM,YAAY,GAAG,MAAM,CAAC;AA0DlC,oFAAoF;AACpF,MAAM,WAAW,eAAe;IAC9B,MAAM,EAAE,eAAe,EAAE,CAAC;IAC1B,qEAAqE;IACrE,OAAO,EAAE,YAAY,EAAE,CAAC;CACzB;AAED;;;;;;GAMG;AACH,wBAAsB,qBAAqB,CACzC,IAAI,EAAE,SAAS,CAAC,SAAS,YAAY,EAAE,CAAC,EAAE,EAC1C,OAAO,GAAE,gBAAqB,GAC7B,OAAO,CAAC,eAAe,CAAC,CAS1B;AAED;;;GAGG;AACH,wBAAsB,yBAAyB,CAC7C,IAAI,EAAE,SAAS,CAAC,SAAS,YAAY,EAAE,CAAC,EAAE,EAC1C,OAAO,GAAE,gBAAqB,GAC7B,OAAO,CAAC,CAAC,eAAe,GAAG,SAAS,CAAC,EAAE,CAAC,CAM1C;AAKD;;;;;;;;;GASG;AACH,wBAAgB,gBAAgB,CAAC,OAAO,EAAE,MAAM,EAAE,QAAQ,EAAE,MAAM,GAAG,SAAS,GAAG,YAAY,EAAE,CAa9F;AAED,wBAAsB,oBAAoB,CACxC,MAAM,EAAE,SAAS,YAAY,EAAE,EAC/B,OAAO,GAAE,gBAAqB,GAC7B,OAAO,CAAC,eAAe,EAAE,CAAC,CAoB5B;AAED;;;;;;;;GAQG;AACH,wBAAsB,uBAAuB,CAC3C,KAAK,EAAE,iBAAiB,EACxB,MAAM,EAAE,SAAS,YAAY,EAAE,EAC/B,OAAO,GAAE,gBAAqB,GAC7B,OAAO,CAAC,eAAe,EAAE,CAAC,CAM5B"}
|
|
@@ -1,3 +1,4 @@
|
|
|
1
|
+
import { bedrockPriceCandidates, isBedrockModel, parseBedrockModelId } from './bedrock.js';
|
|
1
2
|
/** O endereço do catálogo. Aberto, sem chave, JSON único. */
|
|
2
3
|
export const MODELS_DEV_URL = 'https://models.dev/api.json';
|
|
3
4
|
function parseRef(ref) {
|
|
@@ -59,26 +60,44 @@ function priceOf(catalog, ref) {
|
|
|
59
60
|
* Each ref is a LIST of candidates, tried in order — the first one the catalog prices wins.
|
|
60
61
|
*/
|
|
61
62
|
export async function lookupModelsDevPrices(refs, options = {}) {
|
|
62
|
-
|
|
63
|
-
return { prices: [], missing: [] };
|
|
64
|
-
const catalog = await loadCatalog(options);
|
|
63
|
+
const found = await lookupModelsDevPricesEach(refs, options);
|
|
65
64
|
const prices = [];
|
|
66
65
|
const missing = [];
|
|
67
|
-
|
|
68
|
-
const price = candidates.map((ref) => priceOf(catalog, ref)).find((p) => p !== undefined);
|
|
66
|
+
found.forEach((price, i) => {
|
|
69
67
|
if (price !== undefined)
|
|
70
68
|
prices.push(price);
|
|
71
|
-
else if (
|
|
72
|
-
missing.push(
|
|
73
|
-
}
|
|
69
|
+
else if (refs[i]?.[0] !== undefined)
|
|
70
|
+
missing.push(refs[i][0]);
|
|
71
|
+
});
|
|
74
72
|
return { prices, missing };
|
|
75
73
|
}
|
|
74
|
+
/**
|
|
75
|
+
* {@link lookupModelsDevPrices}, one result per element of `refs` (in order): the price the first
|
|
76
|
+
* pricing candidate yields, or `undefined`. For callers that key the row themselves.
|
|
77
|
+
*/
|
|
78
|
+
export async function lookupModelsDevPricesEach(refs, options = {}) {
|
|
79
|
+
if (refs.every((candidates) => candidates.length === 0))
|
|
80
|
+
return refs.map(() => undefined);
|
|
81
|
+
const catalog = await loadCatalog(options);
|
|
82
|
+
return refs.map((candidates) => candidates.map((ref) => priceOf(catalog, ref)).find((p) => p !== undefined));
|
|
83
|
+
}
|
|
84
|
+
/** models.dev's name for AWS Bedrock. */
|
|
85
|
+
const MODELS_DEV_BEDROCK = 'amazon-bedrock';
|
|
76
86
|
/**
|
|
77
87
|
* The models.dev refs to try for a model, most specific first: `<provider>/<modelId>`, then — for an
|
|
78
88
|
* OpenRouter-style id (`deepseek/deepseek-v4.1-flash`) reached through another SDK — the OpenRouter
|
|
79
89
|
* list price. `provider` is the AI SDK provider family (`openrouter`, `openai`, `vercel`, …).
|
|
90
|
+
*
|
|
91
|
+
* A Bedrock id is normalized first (see `parseBedrockModelId`): an ARN or a geo-prefixed inference
|
|
92
|
+
* profile is tried as the full id, the profile id, then the base foundation-model id — all under
|
|
93
|
+
* `amazon-bedrock`. An ARN is never tried as an OpenRouter id (its `/` is not a vendor separator), nor
|
|
94
|
+
* looked up verbatim (models.dev lists no ARNs).
|
|
80
95
|
*/
|
|
81
96
|
export function modelsDevRefsFor(modelId, provider) {
|
|
97
|
+
if (isBedrockModel(modelId, provider)) {
|
|
98
|
+
const ids = bedrockPriceCandidates(modelId).filter((id) => parseBedrockModelId(id)?.isArn !== true);
|
|
99
|
+
return ids.map((id) => `${MODELS_DEV_BEDROCK}/${id}`);
|
|
100
|
+
}
|
|
82
101
|
const refs = [];
|
|
83
102
|
if (provider !== undefined && provider.length > 0)
|
|
84
103
|
refs.push(`${provider}/${modelId}`);
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"models-dev.js","sourceRoot":"","sources":["../../../src/pricing/models-dev.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"models-dev.js","sourceRoot":"","sources":["../../../src/pricing/models-dev.ts"],"names":[],"mappings":"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"}
|
|
@@ -94,11 +94,40 @@ export interface RecordUsageInput {
|
|
|
94
94
|
modelId: string;
|
|
95
95
|
purpose: UsagePurpose;
|
|
96
96
|
usage: MessageUsage;
|
|
97
|
-
/**
|
|
97
|
+
/**
|
|
98
|
+
* The turn's USD cost, when known: reported by the provider (a gateway), or estimated by the loop
|
|
99
|
+
* from the pricing table. {@link costSource} says which. Absent → unpriced (`cost_usd` NULL).
|
|
100
|
+
*/
|
|
98
101
|
costUsd?: number;
|
|
102
|
+
/**
|
|
103
|
+
* Where {@link costUsd} came from: `'provider'` (the provider reported it; the real figure) or
|
|
104
|
+
* `'estimate'` (tokens × the price row in effect for the turn, frozen at write time). Absent with a
|
|
105
|
+
* `costUsd` → treat as `'provider'` (rows written before the column existed only held reported cost).
|
|
106
|
+
*/
|
|
107
|
+
costSource?: CostSource;
|
|
99
108
|
/** The run (turn) this usage row belongs to, for run-detail assembly + trace deep-links. */
|
|
100
109
|
runId?: string;
|
|
101
110
|
}
|
|
111
|
+
/** Where a usage row's `cost_usd` came from. See {@link RecordUsageInput.costSource}. */
|
|
112
|
+
export type CostSource = 'provider' | 'estimate';
|
|
113
|
+
/**
|
|
114
|
+
* An actor's spend over a window. `costUsd` sums every row's `cost_usd`, provider-reported AND
|
|
115
|
+
* estimated; `estimatedCostUsd` is the estimated share of it (`0` when none), so a reader that wants
|
|
116
|
+
* reported cost only takes `costUsd - estimatedCostUsd`. A store written before estimates were
|
|
117
|
+
* persisted may omit it (read as `0`).
|
|
118
|
+
*/
|
|
119
|
+
export interface UsageTotals {
|
|
120
|
+
usedTokens: number;
|
|
121
|
+
costUsd: number;
|
|
122
|
+
estimatedCostUsd?: number;
|
|
123
|
+
}
|
|
124
|
+
/** {@link UsageTotals} over usage rows: the one summing rule every store shares. */
|
|
125
|
+
export declare function sumUsage(rows: readonly {
|
|
126
|
+
inputTokens: number;
|
|
127
|
+
outputTokens: number;
|
|
128
|
+
costUsd?: number | null;
|
|
129
|
+
costSource?: string | null;
|
|
130
|
+
}[]): UsageTotals;
|
|
102
131
|
/** A run's lifecycle status: created `running`, then settled once (terminal). */
|
|
103
132
|
export type AgentRunStatus = 'running' | 'completed' | 'failed' | 'cancelled';
|
|
104
133
|
/** Opens a run (turn) row at start — status `running`, `started_at` stamped by the store. */
|
|
@@ -309,13 +338,11 @@ export interface AgentStore {
|
|
|
309
338
|
}>;
|
|
310
339
|
/**
|
|
311
340
|
* OPTIONAL: the actor's usage over the UTC days `fromDay`..`toDay` (`YYYY-MM-DD`, inclusive) —
|
|
312
|
-
* tokens and recorded spend
|
|
313
|
-
* `GET <path>/quota`; absent → the month window is left
|
|
341
|
+
* tokens and recorded spend, provider-reported and estimated (see {@link UsageTotals}). Feeds the
|
|
342
|
+
* month window (and the day window's spend) of `GET <path>/quota`; absent → the month window is left
|
|
343
|
+
* out and spend reads `0`.
|
|
314
344
|
*/
|
|
315
|
-
usageBetween?(actorRef: string, fromDay: string, toDay: string): Promise<
|
|
316
|
-
usedTokens: number;
|
|
317
|
-
costUsd: number;
|
|
318
|
-
}>;
|
|
345
|
+
usageBetween?(actorRef: string, fromDay: string, toDay: string): Promise<UsageTotals>;
|
|
319
346
|
/** Open a run (turn) row at start. Replay-safe: the loop calls it under a durable step. */
|
|
320
347
|
recordRunStart(input: RecordRunStartInput): Promise<void>;
|
|
321
348
|
/**
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"agent-store.d.ts","sourceRoot":"","sources":["../../../src/spi/agent-store.ts"],"names":[],"mappings":"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
|
|
1
|
+
{"version":3,"file":"agent-store.d.ts","sourceRoot":"","sources":["../../../src/spi/agent-store.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,eAAe,EAAE,MAAM,2BAA2B,CAAC;AACjE,OAAO,KAAK,EAAE,gBAAgB,EAAE,MAAM,qBAAqB,CAAC;AAC5D,OAAO,KAAK,EAAE,gBAAgB,EAAE,MAAM,yBAAyB,CAAC;AAChE,OAAO,KAAK,EACV,KAAK,EACL,iBAAiB,EACjB,eAAe,EACf,YAAY,EACZ,aAAa,EACb,YAAY,EACZ,aAAa,EACb,eAAe,EACf,cAAc,EACd,UAAU,EACV,YAAY,EACb,MAAM,aAAa,CAAC;AACrB,OAAO,KAAK,EAAE,qBAAqB,EAAE,MAAM,oCAAoC,CAAC;AAChF,OAAO,KAAK,EAAE,qBAAqB,EAAE,MAAM,sBAAsB,CAAC;AAElE,MAAM,WAAW,iBAAiB;IAChC,KAAK,EAAE,KAAK,CAAC;IACb;;;OAGG;IACH,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,mGAAmG;IACnG,SAAS,CAAC,EAAE,OAAO,CAAC;IACpB,KAAK,CAAC,EAAE,MAAM,CAAC;IACf;;;;;OAKG;IACH,EAAE,CAAC,EAAE,MAAM,CAAC;CACb;AAED,oGAAoG;AACpG,MAAM,WAAW,iBAAiB;IAChC,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,4EAA4E;IAC5E,KAAK,CAAC,EAAE,MAAM,GAAG,IAAI,CAAC;IACtB,uFAAuF;IACvF,YAAY,CAAC,EAAE,MAAM,GAAG,IAAI,CAAC;IAC7B,qGAAqG;IACrG,OAAO,CAAC,EAAE,MAAM,GAAG,IAAI,CAAC;CACzB;AAED,MAAM,WAAW,kBAAkB;IACjC,qBAAqB,CAAC,EAAE,qBAAqB,CAAC;IAC9C,QAAQ,EAAE,MAAM,CAAC;IACjB,IAAI,EAAE,aAAa,CAAC,MAAM,CAAC,CAAC;IAC5B,OAAO,EAAE,MAAM,CAAC;IAChB,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,SAAS,CAAC,EAAE,eAAe,EAAE,CAAC;IAC9B,WAAW,CAAC,EAAE,UAAU,EAAE,CAAC;IAC3B,wGAAwG;IACxG,WAAW,CAAC,EAAE,iBAAiB,EAAE,CAAC;IAClC,SAAS,CAAC,EAAE,MAAM,EAAE,CAAC;IACrB,KAAK,CAAC,EAAE,YAAY,CAAC;IACrB,0FAA0F;IAC1F,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,0GAA0G;IAC1G,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,yEAAyE;IACzE,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,sFAAsF;IACtF,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,wEAAwE;IACxE,EAAE,CAAC,EAAE,gBAAgB,EAAE,CAAC;CACzB;AAED,MAAM,WAAW,mBAAmB;IAClC,UAAU,CAAC,EAAE,MAAM,CAAC;IACpB,YAAY,CAAC,EAAE,gBAAgB,CAAC;IAChC,UAAU,EAAE,MAAM,CAAC;IACnB,SAAS,EAAE,MAAM,CAAC;IAClB,QAAQ,EAAE,MAAM,CAAC;IACjB,QAAQ,EAAE,MAAM,GAAG,QAAQ,CAAC;IAC5B,KAAK,EAAE,OAAO,CAAC;IACf,MAAM,EAAE,cAAc,CAAC;IACvB,4FAA4F;IAC5F,KAAK,CAAC,EAAE,MAAM,CAAC;IACf;;;;OAIG;IACH,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,4EAA4E;IAC5E,SAAS,CAAC,EAAE,MAAM,CAAC;CACpB;AAED,MAAM,WAAW,mBAAmB;IAClC,UAAU,EAAE,MAAM,CAAC;IACnB,MAAM,EAAE,cAAc,CAAC;IACvB,MAAM,CAAC,EAAE,OAAO,CAAC;IACjB,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,aAAa,CAAC,EAAE,MAAM,CAAC;IACvB,4FAA4F;IAC5F,QAAQ,CAAC,EAAE,OAAO,CAAC;IACnB,oGAAoG;IACpG,UAAU,CAAC,EAAE,MAAM,CAAC;CACrB;AAED,MAAM,WAAW,gBAAgB;IAC/B,QAAQ,EAAE,MAAM,CAAC;IACjB,QAAQ,EAAE,MAAM,CAAC;IACjB,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,OAAO,EAAE,MAAM,CAAC;IAChB,OAAO,EAAE,YAAY,CAAC;IACtB,KAAK,EAAE,YAAY,CAAC;IACpB;;;OAGG;IACH,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB;;;;OAIG;IACH,UAAU,CAAC,EAAE,UAAU,CAAC;IACxB,4FAA4F;IAC5F,KAAK,CAAC,EAAE,MAAM,CAAC;CAChB;AAED,yFAAyF;AACzF,MAAM,MAAM,UAAU,GAAG,UAAU,GAAG,UAAU,CAAC;AAEjD;;;;;GAKG;AACH,MAAM,WAAW,WAAW;IAC1B,UAAU,EAAE,MAAM,CAAC;IACnB,OAAO,EAAE,MAAM,CAAC;IAChB,gBAAgB,CAAC,EAAE,MAAM,CAAC;CAC3B;AAED,oFAAoF;AACpF,wBAAgB,QAAQ,CACtB,IAAI,EAAE,SAAS;IACb,WAAW,EAAE,MAAM,CAAC;IACpB,YAAY,EAAE,MAAM,CAAC;IACrB,OAAO,CAAC,EAAE,MAAM,GAAG,IAAI,CAAC;IACxB,UAAU,CAAC,EAAE,MAAM,GAAG,IAAI,CAAC;CAC5B,EAAE,GACF,WAAW,CAWb;AAED,iFAAiF;AACjF,MAAM,MAAM,cAAc,GAAG,SAAS,GAAG,WAAW,GAAG,QAAQ,GAAG,WAAW,CAAC;AAE9E,6FAA6F;AAC7F,MAAM,WAAW,mBAAmB;IAClC,KAAK,EAAE,MAAM,CAAC;IACd,QAAQ,EAAE,MAAM,CAAC;IACjB,2GAA2G;IAC3G,KAAK,EAAE,KAAK,CAAC;IACb,4EAA4E;IAC5E,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB;;;;;;OAMG;IACH,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,iGAAiG;IACjG,OAAO,CAAC,EAAE,OAAO,CAAC;CACnB;AAED;;;;;GAKG;AACH,MAAM,WAAW,iBAAiB;IAChC,KAAK,EAAE,MAAM,CAAC;IACd,MAAM,EAAE,OAAO,CAAC,cAAc,EAAE,SAAS,CAAC,CAAC;IAC3C,2EAA2E;IAC3E,UAAU,CAAC,EAAE,MAAM,CAAC;IACpB,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,YAAY,CAAC,EAAE,MAAM,CAAC;IACtB,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,KAAK,CAAC,EAAE,MAAM,CAAC;CAChB;AAED,2GAA2G;AAC3G,MAAM,WAAW,eAAe;IAC9B,QAAQ,EAAE,MAAM,CAAC;IACjB,mDAAmD;IACnD,YAAY,CAAC,EAAE,MAAM,CAAC;CACvB;AAED,6EAA6E;AAC7E,MAAM,WAAW,cAAc;IAC7B,KAAK,EAAE,MAAM,CAAC;IACd,+FAA+F;IAC/F,mBAAmB,EAAE,OAAO,CAAC;IAC7B,iEAAiE;IACjE,QAAQ,EAAE,aAAa,EAAE,CAAC;CAC3B;AAED;;;;;;;;;;;;;;;;GAgBG;AACH,MAAM,WAAW,gBAAgB;IAC/B,iBAAiB,CAAC,KAAK,EAAE,eAAe,GAAG,OAAO,CAAC,cAAc,GAAG,IAAI,CAAC,CAAC;CAC3E;AAED,sFAAsF;AACtF,MAAM,WAAW,UAAU;IACzB,YAAY,CAAC,KAAK,EAAE,iBAAiB,GAAG,OAAO,CAAC,aAAa,CAAC,CAAC;IAC/D,SAAS,CAAC,QAAQ,EAAE,MAAM,GAAG,OAAO,CAAC,YAAY,GAAG,IAAI,CAAC,CAAC;IAC1D;;;;OAIG;IACH,iBAAiB,CAAC,QAAQ,EAAE,MAAM,GAAG,OAAO,CAAC,MAAM,GAAG,IAAI,CAAC,CAAC;IAC5D,WAAW,CAAC,QAAQ,EAAE,MAAM,EAAE,KAAK,CAAC,EAAE,MAAM,GAAG,OAAO,CAAC,aAAa,EAAE,CAAC,CAAC;IACxE,gBAAgB,CAAC,QAAQ,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC,CAAC;IAClD,UAAU,CAAC,QAAQ,EAAE,MAAM,EAAE,aAAa,EAAE,MAAM,GAAG,OAAO,CAAC,aAAa,CAAC,CAAC;IAC5E,QAAQ,CAAC,QAAQ,EAAE,MAAM,EAAE,KAAK,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC,CAAC;IACzD;;;OAGG;IACH,YAAY,CAAC,CAAC,QAAQ,EAAE,MAAM,EAAE,KAAK,EAAE,iBAAiB,GAAG,OAAO,CAAC,IAAI,CAAC,CAAC;IACzE;;;;OAIG;IACH,qBAAqB,CAAC,CAAC,QAAQ,EAAE,MAAM,GAAG,OAAO,CAAC,MAAM,GAAG,IAAI,CAAC,CAAC;IACjE;;;;OAIG;IACH,gBAAgB,CAAC,CAAC,QAAQ,EAAE,MAAM,GAAG,OAAO,CAAC,MAAM,GAAG,IAAI,CAAC,CAAC;IAC5D;;;OAGG;IACH,aAAa,CAAC,CAAC,QAAQ,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC,CAAC;IAChD,eAAe,CAAC,QAAQ,EAAE,MAAM,EAAE,KAAK,EAAE,MAAM,GAAG,IAAI,GAAG,OAAO,CAAC,IAAI,CAAC,CAAC;IACvE;;;;OAIG;IACH,iBAAiB,CAAC,CAAC,QAAQ,EAAE,MAAM,EAAE,KAAK,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC,CAAC;IAEnE,aAAa,CAAC,KAAK,EAAE,kBAAkB,GAAG,OAAO,CAAC,aAAa,CAAC,CAAC;IACjE;;;;;;;;;OASG;IACH,qBAAqB,CAAC,SAAS,EAAE,MAAM,EAAE,OAAO,EAAE,UAAU,EAAE,GAAG,OAAO,CAAC,IAAI,CAAC,CAAC;IAC/E;;;;;OAKG;IACH,YAAY,CAAC,CAAC,SAAS,EAAE,MAAM,EAAE,EAAE,EAAE,gBAAgB,EAAE,GAAG,OAAO,CAAC,IAAI,CAAC,CAAC;IACxE,YAAY,CAAC,QAAQ,EAAE,MAAM,EAAE,SAAS,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC,CAAC;IACjE;;;;;;;;;;;;OAYG;IACH,kBAAkB,CAAC,CAAC,QAAQ,EAAE,MAAM,EAAE,QAAQ,EAAE,SAAS,MAAM,EAAE,GAAG,OAAO,CAAC,MAAM,EAAE,CAAC,CAAC;IACtF;;;;OAIG;IACH,eAAe,CAAC,CAAC,SAAS,EAAE,MAAM,GAAG,OAAO,CAAC,MAAM,GAAG,IAAI,CAAC,CAAC;IAC5D;;;;OAIG;IACH,kBAAkB,CAAC,CAAC,SAAS,EAAE,MAAM,EAAE,QAAQ,EAAE,eAAe,GAAG,IAAI,GAAG,OAAO,CAAC,IAAI,CAAC,CAAC;IAExF,cAAc,CAAC,KAAK,EAAE,mBAAmB,GAAG,OAAO,CAAC,IAAI,CAAC,CAAC;IAC1D,cAAc,CAAC,KAAK,EAAE,mBAAmB,GAAG,OAAO,CAAC,IAAI,CAAC,CAAC;IAC1D;;;;OAIG;IACH,gBAAgB,CAAC,CAAC,UAAU,EAAE,MAAM,GAAG,OAAO,CAAC,MAAM,GAAG,IAAI,CAAC,CAAC;IAC9D;;;;;;OAMG;IACH,gBAAgB,CAAC,CAAC,WAAW,EAAE,MAAM,EAAE,GAAG,OAAO,CAAC,eAAe,EAAE,CAAC,CAAC;IACrE;;;;;OAKG;IACH,sBAAsB,CAAC,CAAC,KAAK,EAAE,MAAM,EAAE,KAAK,EAAE,MAAM,GAAG,OAAO,CAAC,MAAM,CAAC,CAAC;IACvE;;;;;OAKG;IACH,mBAAmB,CAAC,CAAC,QAAQ,EAAE,MAAM,GAAG,OAAO,CAAC,MAAM,EAAE,CAAC,CAAC;IAC1D;;;;OAIG;IACH,gBAAgB,CAAC,CAAC,UAAU,EAAE,MAAM,GAAG,OAAO,CAAC,qBAAqB,GAAG,IAAI,CAAC,CAAC;IAC7E;;;;;OAKG;IACH,aAAa,CAAC,CAAC,UAAU,EAAE,MAAM,GAAG,OAAO,CAAC,OAAO,CAAC,CAAC;IAErD,WAAW,CAAC,KAAK,EAAE,gBAAgB,GAAG,OAAO,CAAC,IAAI,CAAC,CAAC;IACpD,UAAU,CAAC,QAAQ,EAAE,MAAM,EAAE,GAAG,EAAE,MAAM,GAAG,OAAO,CAAC;QAAE,UAAU,EAAE,MAAM,CAAA;KAAE,CAAC,CAAC;IAC3E;;;;;OAKG;IACH,YAAY,CAAC,CAAC,QAAQ,EAAE,MAAM,EAAE,OAAO,EAAE,MAAM,EAAE,KAAK,EAAE,MAAM,GAAG,OAAO,CAAC,WAAW,CAAC,CAAC;IAEtF,2FAA2F;IAC3F,cAAc,CAAC,KAAK,EAAE,mBAAmB,GAAG,OAAO,CAAC,IAAI,CAAC,CAAC;IAC1D;;;;;OAKG;IACH,cAAc,CAAC,KAAK,EAAE,MAAM,GAAG,OAAO,CAAC,MAAM,GAAG,IAAI,CAAC,CAAC;IACtD;;;;;;;;;;;OAWG;IACH,eAAe,CAAC,CAAC,KAAK,EAAE,MAAM,GAAG,OAAO,CAAC,MAAM,GAAG,IAAI,CAAC,CAAC;IACxD,yGAAyG;IACzG,YAAY,CAAC,KAAK,EAAE,iBAAiB,GAAG,OAAO,CAAC,IAAI,CAAC,CAAC;CACvD;AAED,uGAAuG;AACvG,wBAAsB,cAAc,CAClC,KAAK,EAAE,UAAU,EACjB,QAAQ,EAAE,MAAM,EAChB,KAAK,EAAE,MAAM,GACZ,OAAO,CAAC,IAAI,CAAC,CAMf"}
|
|
@@ -1,3 +1,17 @@
|
|
|
1
|
+
/** {@link UsageTotals} over usage rows: the one summing rule every store shares. */
|
|
2
|
+
export function sumUsage(rows) {
|
|
3
|
+
let usedTokens = 0;
|
|
4
|
+
let costUsd = 0;
|
|
5
|
+
let estimatedCostUsd = 0;
|
|
6
|
+
for (const row of rows) {
|
|
7
|
+
usedTokens += row.inputTokens + row.outputTokens;
|
|
8
|
+
const cost = row.costUsd === null || row.costUsd === undefined ? 0 : Number(row.costUsd);
|
|
9
|
+
costUsd += cost;
|
|
10
|
+
if (row.costSource === 'estimate')
|
|
11
|
+
estimatedCostUsd += cost;
|
|
12
|
+
}
|
|
13
|
+
return { usedTokens, costUsd, estimatedCostUsd };
|
|
14
|
+
}
|
|
1
15
|
/** Clear `threadId`'s active run if it is still `runId` (see {@link AgentStore.clearActiveStream}). */
|
|
2
16
|
export async function clearActiveRun(store, threadId, runId) {
|
|
3
17
|
if (store.clearActiveStream !== undefined) {
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"agent-store.js","sourceRoot":"","sources":["../../../src/spi/agent-store.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"agent-store.js","sourceRoot":"","sources":["../../../src/spi/agent-store.ts"],"names":[],"mappings":"AAgJA,oFAAoF;AACpF,MAAM,UAAU,QAAQ,CACtB,IAKG;IAEH,IAAI,UAAU,GAAG,CAAC,CAAC;IACnB,IAAI,OAAO,GAAG,CAAC,CAAC;IAChB,IAAI,gBAAgB,GAAG,CAAC,CAAC;IACzB,KAAK,MAAM,GAAG,IAAI,IAAI,EAAE,CAAC;QACvB,UAAU,IAAI,GAAG,CAAC,WAAW,GAAG,GAAG,CAAC,YAAY,CAAC;QACjD,MAAM,IAAI,GAAG,GAAG,CAAC,OAAO,KAAK,IAAI,IAAI,GAAG,CAAC,OAAO,KAAK,SAAS,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,MAAM,CAAC,GAAG,CAAC,OAAO,CAAC,CAAC;QACzF,OAAO,IAAI,IAAI,CAAC;QAChB,IAAI,GAAG,CAAC,UAAU,KAAK,UAAU;YAAE,gBAAgB,IAAI,IAAI,CAAC;IAC9D,CAAC;IACD,OAAO,EAAE,UAAU,EAAE,OAAO,EAAE,gBAAgB,EAAE,CAAC;AACnD,CAAC;AA2PD,uGAAuG;AACvG,MAAM,CAAC,KAAK,UAAU,cAAc,CAClC,KAAiB,EACjB,QAAgB,EAChB,KAAa;IAEb,IAAI,KAAK,CAAC,iBAAiB,KAAK,SAAS,EAAE,CAAC;QAC1C,MAAM,KAAK,CAAC,iBAAiB,CAAC,QAAQ,EAAE,KAAK,CAAC,CAAC;QAC/C,OAAO;IACT,CAAC;IACD,MAAM,KAAK,CAAC,eAAe,CAAC,QAAQ,EAAE,IAAI,CAAC,CAAC;AAC9C,CAAC"}
|
|
@@ -18,6 +18,13 @@ export interface LedgerQuotaOptions {
|
|
|
18
18
|
* Stamped on every window that has a ceiling. Omit → no warnings.
|
|
19
19
|
*/
|
|
20
20
|
warnAt?: number;
|
|
21
|
+
/**
|
|
22
|
+
* Whether the USD windows count ESTIMATED cost (tokens × the price row, for a provider that reports
|
|
23
|
+
* none, e.g. Bedrock, OpenAI or Anthropic direct) as well as provider-reported cost. Default `true`:
|
|
24
|
+
* a USD ceiling that ignored estimates would read $0 and never block for every such provider, which
|
|
25
|
+
* is a budget that does not enforce. Set `false` to budget on provider-reported (gateway) cost only.
|
|
26
|
+
*/
|
|
27
|
+
countEstimatedCost?: boolean;
|
|
21
28
|
}
|
|
22
29
|
/**
|
|
23
30
|
* A {@link QuotaProvider} over the usage ledger: a day window (tokens from `quotaToday`, spend from
|
|
@@ -25,8 +32,8 @@ export interface LedgerQuotaOptions {
|
|
|
25
32
|
* `usageBetween`. Ceilings come from `limits`; a {@link QuotaStore} passed alongside lends the day
|
|
26
33
|
* window its own token ceiling when `limits.day.tokens` does not set one.
|
|
27
34
|
*
|
|
28
|
-
* Spend is what the usage rows recorded
|
|
29
|
-
*
|
|
35
|
+
* Spend is what the usage rows recorded: the provider-reported cost of a gateway, plus the loop's
|
|
36
|
+
* estimate for a provider that reports none (unless `countEstimatedCost: false`).
|
|
30
37
|
*/
|
|
31
38
|
export declare class LedgerQuotaProvider implements QuotaProvider {
|
|
32
39
|
private readonly store;
|
|
@@ -36,6 +43,8 @@ export declare class LedgerQuotaProvider implements QuotaProvider {
|
|
|
36
43
|
constructor(store: AgentStore, quota?: QuotaStore | undefined, limits?: QuotaLimits, options?: LedgerQuotaOptions);
|
|
37
44
|
report(query: QuotaQuery): Promise<QuotaReport>;
|
|
38
45
|
private dayWindow;
|
|
46
|
+
/** The window's USD: every priced row, or (with `countEstimatedCost: false`) reported cost only. */
|
|
47
|
+
private usd;
|
|
39
48
|
private window;
|
|
40
49
|
}
|
|
41
50
|
//# sourceMappingURL=ledger-quota-provider.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"ledger-quota-provider.d.ts","sourceRoot":"","sources":["../../../src/stores/ledger-quota-provider.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,UAAU,
|
|
1
|
+
{"version":3,"file":"ledger-quota-provider.d.ts","sourceRoot":"","sources":["../../../src/stores/ledger-quota-provider.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,UAAU,EAAe,MAAM,uBAAuB,CAAC;AACrE,OAAO,EAGL,KAAK,aAAa,EAClB,KAAK,UAAU,EACf,KAAK,WAAW,EAIjB,MAAM,0BAA0B,CAAC;AAClC,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,uBAAuB,CAAC;AAExD,wDAAwD;AACxD,MAAM,WAAW,iBAAiB;IAChC,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,GAAG,CAAC,EAAE,MAAM,CAAC;CACd;AAED,gEAAgE;AAChE,MAAM,WAAW,WAAW;IAC1B,GAAG,CAAC,EAAE,iBAAiB,CAAC;IACxB,KAAK,CAAC,EAAE,iBAAiB,CAAC;CAC3B;AAED,gEAAgE;AAChE,MAAM,WAAW,kBAAkB;IACjC;;;OAGG;IACH,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB;;;;;OAKG;IACH,kBAAkB,CAAC,EAAE,OAAO,CAAC;CAC9B;AAED;;;;;;;;GAQG;AACH,qBAAa,mBAAoB,YAAW,aAAa;IAErD,OAAO,CAAC,QAAQ,CAAC,KAAK;IACtB,OAAO,CAAC,QAAQ,CAAC,KAAK,CAAC;IACvB,OAAO,CAAC,QAAQ,CAAC,MAAM;IACvB,OAAO,CAAC,QAAQ,CAAC,OAAO;IAJ1B,YACmB,KAAK,EAAE,UAAU,EACjB,KAAK,CAAC,EAAE,UAAU,YAAA,EAClB,MAAM,GAAE,WAAgB,EACxB,OAAO,GAAE,kBAAuB,EAC/C;IAEE,MAAM,CAAC,KAAK,EAAE,UAAU,GAAG,OAAO,CAAC,WAAW,CAAC,CAgBpD;YAEa,SAAS;IAavB,oGAAoG;IACpG,OAAO,CAAC,GAAG;IAOX,OAAO,CAAC,MAAM;CAoBf"}
|
|
@@ -5,8 +5,8 @@ import { exhaustedWindow, quotaPeriodRange, quotaWarning, } from '../spi/quota-p
|
|
|
5
5
|
* `usageBetween`. Ceilings come from `limits`; a {@link QuotaStore} passed alongside lends the day
|
|
6
6
|
* window its own token ceiling when `limits.day.tokens` does not set one.
|
|
7
7
|
*
|
|
8
|
-
* Spend is what the usage rows recorded
|
|
9
|
-
*
|
|
8
|
+
* Spend is what the usage rows recorded: the provider-reported cost of a gateway, plus the loop's
|
|
9
|
+
* estimate for a provider that reports none (unless `countEstimatedCost: false`).
|
|
10
10
|
*/
|
|
11
11
|
export class LedgerQuotaProvider {
|
|
12
12
|
store;
|
|
@@ -26,7 +26,7 @@ export class LedgerQuotaProvider {
|
|
|
26
26
|
if (this.store.usageBetween !== undefined) {
|
|
27
27
|
const range = quotaPeriodRange('month', now);
|
|
28
28
|
const used = await this.store.usageBetween(actorRef, range.fromDay, range.toDay);
|
|
29
|
-
windows.push(this.window('month', used.usedTokens, used
|
|
29
|
+
windows.push(this.window('month', used.usedTokens, this.usd(used), range.resetsAt));
|
|
30
30
|
}
|
|
31
31
|
const blocked = exhaustedWindow(windows);
|
|
32
32
|
const warning = quotaWarning(windows);
|
|
@@ -41,12 +41,19 @@ export class LedgerQuotaProvider {
|
|
|
41
41
|
const used = this.store.usageBetween !== undefined
|
|
42
42
|
? await this.store.usageBetween(actorRef, range.fromDay, range.toDay)
|
|
43
43
|
: { ...(await this.store.quotaToday(actorRef, range.fromDay)), costUsd: 0 };
|
|
44
|
-
const window = this.window('day', used.usedTokens, used
|
|
44
|
+
const window = this.window('day', used.usedTokens, this.usd(used), range.resetsAt);
|
|
45
45
|
if (this.quota !== undefined && window.limitTokens === undefined) {
|
|
46
46
|
window.limitTokens = (await this.quota.check(actorRef, range.fromDay)).limitTokens;
|
|
47
47
|
}
|
|
48
48
|
return window;
|
|
49
49
|
}
|
|
50
|
+
/** The window's USD: every priced row, or (with `countEstimatedCost: false`) reported cost only. */
|
|
51
|
+
usd(used) {
|
|
52
|
+
if (this.options.countEstimatedCost === false) {
|
|
53
|
+
return Math.max(0, used.costUsd - (used.estimatedCostUsd ?? 0));
|
|
54
|
+
}
|
|
55
|
+
return used.costUsd;
|
|
56
|
+
}
|
|
50
57
|
window(period, usedTokens, usedUsd, resetsAt) {
|
|
51
58
|
const limits = this.limits[period] ?? {};
|
|
52
59
|
return {
|