@routstr/sdk 0.3.10 → 0.3.12
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/README.md +19 -6
- package/dist/browser.d.mts +2 -2
- package/dist/browser.d.ts +2 -2
- package/dist/browser.js +201 -66
- package/dist/browser.js.map +1 -1
- package/dist/browser.mjs +198 -67
- package/dist/browser.mjs.map +1 -1
- package/dist/bun.d.mts +5 -5
- package/dist/bun.d.ts +5 -5
- package/dist/bun.js +275 -66
- package/dist/bun.js.map +1 -1
- package/dist/bun.mjs +272 -67
- package/dist/bun.mjs.map +1 -1
- package/dist/{bunSqlite-BMTseLIz.d.ts → bunSqlite-BmXWNc25.d.ts} +1 -1
- package/dist/{bunSqlite-D6AreVE2.d.mts → bunSqlite-Bro9efsl.d.mts} +1 -1
- package/dist/client/index.d.mts +31 -10
- package/dist/client/index.d.ts +31 -10
- package/dist/client/index.js +185 -36
- package/dist/client/index.js.map +1 -1
- package/dist/client/index.mjs +182 -37
- package/dist/client/index.mjs.map +1 -1
- package/dist/discovery/index.d.mts +3 -3
- package/dist/discovery/index.d.ts +3 -3
- package/dist/discovery/index.js +12 -20
- package/dist/discovery/index.js.map +1 -1
- package/dist/discovery/index.mjs +12 -20
- package/dist/discovery/index.mjs.map +1 -1
- package/dist/index.d.mts +8 -6
- package/dist/index.d.ts +8 -6
- package/dist/index.js +201 -66
- package/dist/index.js.map +1 -1
- package/dist/index.mjs +198 -67
- package/dist/index.mjs.map +1 -1
- package/dist/node.d.mts +2 -2
- package/dist/node.d.ts +2 -2
- package/dist/node.js +276 -66
- package/dist/node.js.map +1 -1
- package/dist/node.mjs +273 -67
- package/dist/node.mjs.map +1 -1
- package/dist/storage/bun.d.mts +4 -4
- package/dist/storage/bun.d.ts +4 -4
- package/dist/storage/bun.js +173 -0
- package/dist/storage/bun.js.map +1 -1
- package/dist/storage/bun.mjs +173 -0
- package/dist/storage/bun.mjs.map +1 -1
- package/dist/storage/index.d.mts +2 -2
- package/dist/storage/index.d.ts +2 -2
- package/dist/storage/index.js +99 -0
- package/dist/storage/index.js.map +1 -1
- package/dist/storage/index.mjs +99 -0
- package/dist/storage/index.mjs.map +1 -1
- package/dist/storage/node.d.mts +2 -2
- package/dist/storage/node.d.ts +2 -2
- package/dist/storage/node.js +174 -0
- package/dist/storage/node.js.map +1 -1
- package/dist/storage/node.mjs +174 -0
- package/dist/storage/node.mjs.map +1 -1
- package/dist/{store-C8MZlfuz.d.ts → store-CAQLSbEj.d.ts} +38 -1
- package/dist/{store-BiuM2V9N.d.mts → store-CuXwe5Rg.d.mts} +38 -1
- package/dist/wallet/index.js +38 -24
- package/dist/wallet/index.js.map +1 -1
- package/dist/wallet/index.mjs +38 -24
- package/dist/wallet/index.mjs.map +1 -1
- package/package.json +7 -3
package/dist/storage/index.mjs
CHANGED
|
@@ -242,6 +242,91 @@ var SDK_STORAGE_KEYS = {
|
|
|
242
242
|
PROVIDERS_ON_COOLDOWN: "providers_on_cooldown"
|
|
243
243
|
};
|
|
244
244
|
|
|
245
|
+
// storage/usageTracking/aggregate.ts
|
|
246
|
+
var pad2 = (n) => String(n).padStart(2, "0");
|
|
247
|
+
var jsGroupKey = (entry, groupBy, tzOffsetMinutes) => {
|
|
248
|
+
switch (groupBy) {
|
|
249
|
+
case "modelId":
|
|
250
|
+
return entry.modelId ?? null;
|
|
251
|
+
case "baseUrl":
|
|
252
|
+
return entry.baseUrl ?? null;
|
|
253
|
+
case "client":
|
|
254
|
+
return entry.client ?? null;
|
|
255
|
+
case "sessionId":
|
|
256
|
+
return entry.sessionId ?? null;
|
|
257
|
+
case "provider":
|
|
258
|
+
return entry.provider ?? null;
|
|
259
|
+
case "day": {
|
|
260
|
+
const d = new Date(entry.timestamp - tzOffsetMinutes * 6e4);
|
|
261
|
+
return `${d.getUTCFullYear()}-${pad2(d.getUTCMonth() + 1)}-${pad2(d.getUTCDate())}`;
|
|
262
|
+
}
|
|
263
|
+
case "hour": {
|
|
264
|
+
const d = new Date(entry.timestamp - tzOffsetMinutes * 6e4);
|
|
265
|
+
return pad2(d.getUTCHours());
|
|
266
|
+
}
|
|
267
|
+
}
|
|
268
|
+
};
|
|
269
|
+
var reduceAggregate = (entries, options = {}) => {
|
|
270
|
+
const emptyRow = (group) => ({
|
|
271
|
+
group,
|
|
272
|
+
requests: 0,
|
|
273
|
+
promptTokens: 0,
|
|
274
|
+
completionTokens: 0,
|
|
275
|
+
totalTokens: 0,
|
|
276
|
+
cost: 0,
|
|
277
|
+
satsCost: 0,
|
|
278
|
+
baseMsats: 0,
|
|
279
|
+
inputMsats: 0,
|
|
280
|
+
outputMsats: 0,
|
|
281
|
+
totalMsats: 0,
|
|
282
|
+
totalUsd: 0,
|
|
283
|
+
cacheReadInputTokens: 0,
|
|
284
|
+
cacheCreationInputTokens: 0,
|
|
285
|
+
cacheReadMsats: 0,
|
|
286
|
+
cacheCreationMsats: 0
|
|
287
|
+
});
|
|
288
|
+
const accumulate = (row, entry) => {
|
|
289
|
+
row.requests += 1;
|
|
290
|
+
row.promptTokens += entry.promptTokens;
|
|
291
|
+
row.completionTokens += entry.completionTokens;
|
|
292
|
+
row.totalTokens += entry.totalTokens;
|
|
293
|
+
row.cost += entry.cost;
|
|
294
|
+
row.satsCost += entry.satsCost;
|
|
295
|
+
row.baseMsats += entry.baseMsats ?? 0;
|
|
296
|
+
row.inputMsats += entry.inputMsats ?? 0;
|
|
297
|
+
row.outputMsats += entry.outputMsats ?? 0;
|
|
298
|
+
row.totalMsats += entry.totalMsats ?? 0;
|
|
299
|
+
row.totalUsd += entry.totalUsd ?? 0;
|
|
300
|
+
row.cacheReadInputTokens += entry.cacheReadInputTokens ?? 0;
|
|
301
|
+
row.cacheCreationInputTokens += entry.cacheCreationInputTokens ?? 0;
|
|
302
|
+
row.cacheReadMsats += entry.cacheReadMsats ?? 0;
|
|
303
|
+
row.cacheCreationMsats += entry.cacheCreationMsats ?? 0;
|
|
304
|
+
};
|
|
305
|
+
if (!options.groupBy) {
|
|
306
|
+
const total = emptyRow(null);
|
|
307
|
+
for (const entry of entries) accumulate(total, entry);
|
|
308
|
+
return [total];
|
|
309
|
+
}
|
|
310
|
+
const tz = options.tzOffsetMinutes ?? 0;
|
|
311
|
+
const groups = /* @__PURE__ */ new Map();
|
|
312
|
+
for (const entry of entries) {
|
|
313
|
+
const key = jsGroupKey(entry, options.groupBy, tz);
|
|
314
|
+
let row = groups.get(key);
|
|
315
|
+
if (!row) {
|
|
316
|
+
row = emptyRow(key);
|
|
317
|
+
groups.set(key, row);
|
|
318
|
+
}
|
|
319
|
+
accumulate(row, entry);
|
|
320
|
+
}
|
|
321
|
+
const rows = [...groups.values()];
|
|
322
|
+
if (options.groupBy === "day" || options.groupBy === "hour") {
|
|
323
|
+
rows.sort((a, b) => (a.group ?? "").localeCompare(b.group ?? ""));
|
|
324
|
+
} else {
|
|
325
|
+
rows.sort((a, b) => b.satsCost - a.satsCost);
|
|
326
|
+
}
|
|
327
|
+
return rows;
|
|
328
|
+
};
|
|
329
|
+
|
|
245
330
|
// storage/usageTracking/indexedDB.ts
|
|
246
331
|
var DEFAULT_DB_NAME = "routstr-sdk";
|
|
247
332
|
var DEFAULT_STORE_NAME = "usage_tracking";
|
|
@@ -304,6 +389,9 @@ var matchesFilters = (entry, options = {}) => {
|
|
|
304
389
|
if (options.client && entry.client !== options.client) {
|
|
305
390
|
return false;
|
|
306
391
|
}
|
|
392
|
+
if (options.clients && options.clients.length > 0 && (entry.client == null || !options.clients.includes(entry.client))) {
|
|
393
|
+
return false;
|
|
394
|
+
}
|
|
307
395
|
if (options.provider && entry.provider !== options.provider) {
|
|
308
396
|
return false;
|
|
309
397
|
}
|
|
@@ -402,6 +490,10 @@ var createIndexedDBUsageTrackingDriver = (options = {}) => {
|
|
|
402
490
|
const results = await this.list(options2);
|
|
403
491
|
return results.length;
|
|
404
492
|
},
|
|
493
|
+
async aggregate(options2 = {}) {
|
|
494
|
+
const entries = await this.list(options2);
|
|
495
|
+
return reduceAggregate(entries, options2);
|
|
496
|
+
},
|
|
405
497
|
async deleteOlderThan(timestamp) {
|
|
406
498
|
await ensureMigrated();
|
|
407
499
|
const db = await getDb();
|
|
@@ -459,6 +551,9 @@ var matchesFilters2 = (entry, options = {}) => {
|
|
|
459
551
|
if (options.client && entry.client !== options.client) {
|
|
460
552
|
return false;
|
|
461
553
|
}
|
|
554
|
+
if (options.clients && options.clients.length > 0 && (entry.client == null || !options.clients.includes(entry.client))) {
|
|
555
|
+
return false;
|
|
556
|
+
}
|
|
462
557
|
if (options.provider && entry.provider !== options.provider) {
|
|
463
558
|
return false;
|
|
464
559
|
}
|
|
@@ -491,6 +586,10 @@ var createMemoryUsageTrackingDriver = (seed = []) => {
|
|
|
491
586
|
async count(options = {}) {
|
|
492
587
|
return (await this.list(options)).length;
|
|
493
588
|
},
|
|
589
|
+
async aggregate(options = {}) {
|
|
590
|
+
const entries = [...store.values()].filter((entry) => matchesFilters2(entry, options));
|
|
591
|
+
return reduceAggregate(entries, options);
|
|
592
|
+
},
|
|
494
593
|
async deleteOlderThan(timestamp) {
|
|
495
594
|
let deleted = 0;
|
|
496
595
|
for (const [id, entry] of store.entries()) {
|