@x12i/ai-tools 1.0.4 → 2.0.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 +23 -0
- package/README.md +146 -204
- package/dist/AiModelsCatalogClient-B5FMI9gj.d.cts +58 -0
- package/dist/AiModelsCatalogClient-CPPNI6Ry.d.ts +58 -0
- package/dist/aliases/index.cjs +4 -3
- package/dist/aliases/index.cjs.map +1 -1
- package/dist/aliases/index.d.cts +3 -5
- package/dist/aliases/index.d.ts +3 -5
- package/dist/aliases/index.js +2 -2
- package/dist/catalog/index.cjs +18 -9
- package/dist/catalog/index.cjs.map +1 -1
- package/dist/catalog/index.d.cts +13 -100
- package/dist/catalog/index.d.ts +13 -100
- package/dist/catalog/index.js +31 -23
- package/dist/{chunk-AJEKEWWB.js → chunk-2PTCWPHV.js} +17 -3
- package/dist/chunk-2PTCWPHV.js.map +1 -0
- package/dist/chunk-56R4XA2S.js +1 -0
- package/dist/chunk-5GUKLOEK.cjs +1 -0
- package/dist/chunk-5GUKLOEK.cjs.map +1 -0
- package/dist/chunk-5XAAMBDO.cjs +1988 -0
- package/dist/chunk-5XAAMBDO.cjs.map +1 -0
- package/dist/chunk-6BQBKROR.js +95 -0
- package/dist/chunk-6BQBKROR.js.map +1 -0
- package/dist/chunk-AB5GNXJ4.js +46 -0
- package/dist/chunk-AB5GNXJ4.js.map +1 -0
- package/dist/{chunk-O2A6OVEH.js → chunk-ANVONYJF.js} +2 -2
- package/dist/{chunk-O2A6OVEH.js.map → chunk-ANVONYJF.js.map} +1 -1
- package/dist/chunk-B3V2EHRY.js +225 -0
- package/dist/chunk-B3V2EHRY.js.map +1 -0
- package/dist/{chunk-QWAX7VQO.cjs → chunk-BAHBDADJ.cjs} +11 -11
- package/dist/{chunk-QWAX7VQO.cjs.map → chunk-BAHBDADJ.cjs.map} +1 -1
- package/dist/{chunk-TF4L2NEC.cjs → chunk-DXZOL3VN.cjs} +62 -313
- package/dist/chunk-DXZOL3VN.cjs.map +1 -0
- package/dist/chunk-EDMCKHO6.cjs +225 -0
- package/dist/chunk-EDMCKHO6.cjs.map +1 -0
- package/dist/{chunk-DJ5SWJDY.js → chunk-EYHMQVAL.js} +48 -299
- package/dist/chunk-EYHMQVAL.js.map +1 -0
- package/dist/chunk-GS7T56RP.cjs +8 -0
- package/dist/chunk-GS7T56RP.cjs.map +1 -0
- package/dist/chunk-NF2SKQR7.cjs +973 -0
- package/dist/chunk-NF2SKQR7.cjs.map +1 -0
- package/dist/chunk-OPN6BGNH.js +1985 -0
- package/dist/chunk-OPN6BGNH.js.map +1 -0
- package/dist/{chunk-7Q742NI3.cjs → chunk-PADNCGZB.cjs} +17 -3
- package/dist/chunk-PADNCGZB.cjs.map +1 -0
- package/dist/chunk-PRCICORG.cjs +95 -0
- package/dist/chunk-PRCICORG.cjs.map +1 -0
- package/dist/{chunk-6QGDZTGH.js → chunk-SIH4GPV4.js} +4 -29
- package/dist/chunk-SIH4GPV4.js.map +1 -0
- package/dist/chunk-U2YDDUVP.js +970 -0
- package/dist/chunk-U2YDDUVP.js.map +1 -0
- package/dist/{chunk-4NAY6HRP.js → chunk-VJHLO2R3.js} +7 -58
- package/dist/chunk-VJHLO2R3.js.map +1 -0
- package/dist/chunk-XAWBTX3N.cjs +46 -0
- package/dist/chunk-XAWBTX3N.cjs.map +1 -0
- package/dist/{chunk-AV6OE2YQ.cjs → chunk-XOKUDUUI.cjs} +14 -39
- package/dist/chunk-XOKUDUUI.cjs.map +1 -0
- package/dist/chunk-YQDSN6R6.cjs +86 -0
- package/dist/chunk-YQDSN6R6.cjs.map +1 -0
- package/dist/cli/index.cjs +59 -201
- package/dist/cli/index.cjs.map +1 -1
- package/dist/cli/index.js +53 -198
- package/dist/cli/index.js.map +1 -1
- package/dist/cost/index.cjs +19 -3
- package/dist/cost/index.cjs.map +1 -1
- package/dist/cost/index.d.cts +10 -50
- package/dist/cost/index.d.ts +10 -50
- package/dist/cost/index.js +18 -3
- package/dist/index.cjs +24 -16
- package/dist/index.cjs.map +1 -1
- package/dist/index.d.cts +13 -13
- package/dist/index.d.ts +13 -13
- package/dist/index.js +44 -37
- package/dist/modelCache-BzRn6t_C.d.ts +113 -0
- package/dist/modelCache-CJftI-Ko.d.cts +113 -0
- package/dist/{modelNameResolver-DqFt7g6W.d.ts → modelNameResolver-5XkBMctP.d.ts} +2 -6
- package/dist/{modelNameResolver-D9V_GfUK.d.cts → modelNameResolver-C5CSTGFF.d.cts} +2 -6
- package/dist/models/index.cjs +9 -6
- package/dist/models/index.cjs.map +1 -1
- package/dist/models/index.d.cts +9 -31
- package/dist/models/index.d.ts +9 -31
- package/dist/models/index.js +9 -7
- package/dist/resolveUsageModel-BFwf80Hz.d.ts +140 -0
- package/dist/resolveUsageModel-C_YmGR1M.d.cts +140 -0
- package/dist/sync/index.cjs +7 -9
- package/dist/sync/index.cjs.map +1 -1
- package/dist/sync/index.d.cts +3 -8
- package/dist/sync/index.d.ts +3 -8
- package/dist/sync/index.js +8 -11
- package/dist/toolbox/index.cjs +1 -0
- package/dist/toolbox/index.cjs.map +1 -1
- package/dist/types-BrzJWsTU.d.cts +277 -0
- package/dist/types-BrzJWsTU.d.ts +277 -0
- package/package.json +9 -20
- package/src/data/models-catalog.json +670 -0
- package/src/data/openrouter-models-catalog.json +857 -0
- package/dist/AiModelsCatalogClient-4RF5BCDL.cjs +0 -9
- package/dist/AiModelsCatalogClient-4RF5BCDL.cjs.map +0 -1
- package/dist/AiModelsCatalogClient-CNeqFiFs.d.cts +0 -30
- package/dist/AiModelsCatalogClient-NUF3CBLW.js +0 -9
- package/dist/AiModelsCatalogClient-nwFoEaqL.d.ts +0 -30
- package/dist/catalox/index.cjs +0 -21
- package/dist/catalox/index.cjs.map +0 -1
- package/dist/catalox/index.d.cts +0 -11
- package/dist/catalox/index.d.ts +0 -11
- package/dist/catalox/index.js +0 -21
- package/dist/catalox/index.js.map +0 -1
- package/dist/chunk-4NAY6HRP.js.map +0 -1
- package/dist/chunk-6QGDZTGH.js.map +0 -1
- package/dist/chunk-7Q742NI3.cjs.map +0 -1
- package/dist/chunk-AJEKEWWB.js.map +0 -1
- package/dist/chunk-AV6OE2YQ.cjs.map +0 -1
- package/dist/chunk-C3H7RTFR.cjs +0 -1
- package/dist/chunk-C3H7RTFR.cjs.map +0 -1
- package/dist/chunk-DJ5SWJDY.js.map +0 -1
- package/dist/chunk-DKHGWHXP.cjs +0 -169
- package/dist/chunk-DKHGWHXP.cjs.map +0 -1
- package/dist/chunk-F2F4UEFD.cjs +0 -75
- package/dist/chunk-F2F4UEFD.cjs.map +0 -1
- package/dist/chunk-FGP3QXWL.cjs +0 -163
- package/dist/chunk-FGP3QXWL.cjs.map +0 -1
- package/dist/chunk-G2G4KSC5.js +0 -30
- package/dist/chunk-G2G4KSC5.js.map +0 -1
- package/dist/chunk-HN6UAQAE.cjs +0 -83
- package/dist/chunk-HN6UAQAE.cjs.map +0 -1
- package/dist/chunk-HS74X2OJ.cjs +0 -172
- package/dist/chunk-HS74X2OJ.cjs.map +0 -1
- package/dist/chunk-HYGXZY25.js +0 -163
- package/dist/chunk-HYGXZY25.js.map +0 -1
- package/dist/chunk-KQOALKKX.js +0 -75
- package/dist/chunk-KQOALKKX.js.map +0 -1
- package/dist/chunk-LYOU7CA2.cjs +0 -30
- package/dist/chunk-LYOU7CA2.cjs.map +0 -1
- package/dist/chunk-M5TMA73F.js +0 -1
- package/dist/chunk-M5TMA73F.js.map +0 -1
- package/dist/chunk-MX3AMQFC.js +0 -172
- package/dist/chunk-MX3AMQFC.js.map +0 -1
- package/dist/chunk-QCRLKVB3.cjs +0 -137
- package/dist/chunk-QCRLKVB3.cjs.map +0 -1
- package/dist/chunk-TF4L2NEC.cjs.map +0 -1
- package/dist/chunk-VRFVF5RH.js +0 -169
- package/dist/chunk-VRFVF5RH.js.map +0 -1
- package/dist/chunk-YHO57D2V.js +0 -83
- package/dist/chunk-YHO57D2V.js.map +0 -1
- package/dist/syncAiModelsCatalog-CnXRLm2c.d.cts +0 -32
- package/dist/syncAiModelsCatalog-DpkN_w7S.d.ts +0 -32
- package/dist/types-BYXnCvKx.d.cts +0 -137
- package/dist/types-BYXnCvKx.d.ts +0 -137
- package/dist/types-CX6QFNNy.d.cts +0 -144
- package/dist/types-CuiPDcVs.d.ts +0 -144
- package/dist/upsertAiModelRecord-C831wOIF.d.ts +0 -35
- package/dist/upsertAiModelRecord-CjY-sny0.d.cts +0 -35
- /package/dist/{AiModelsCatalogClient-NUF3CBLW.js.map → chunk-56R4XA2S.js.map} +0 -0
|
@@ -0,0 +1,113 @@
|
|
|
1
|
+
import { L as LoadCatalogOptions, b as LoadedCatalogs } from './AiModelsCatalogClient-B5FMI9gj.cjs';
|
|
2
|
+
|
|
3
|
+
/** Remote catalog URLs (primary). */
|
|
4
|
+
declare const DEFAULT_DIRECT_CATALOG_URL = "https://open-assets.x12i.com/models-catalog.json";
|
|
5
|
+
declare const DEFAULT_OPENROUTER_CATALOG_URL = "https://open-assets.x12i.com/openrouter-models-catalog.json";
|
|
6
|
+
type CatalogSourceKind = "direct" | "openrouter";
|
|
7
|
+
type X12iCatalogPricing = {
|
|
8
|
+
input?: number | null;
|
|
9
|
+
output?: number | null;
|
|
10
|
+
cachedInput?: number | null;
|
|
11
|
+
cacheHit?: number | null;
|
|
12
|
+
cacheWrite?: number | null;
|
|
13
|
+
cacheWrite5m?: number | null;
|
|
14
|
+
cacheWrite1h?: number | null;
|
|
15
|
+
textInput?: number | null;
|
|
16
|
+
textOutput?: number | null;
|
|
17
|
+
audioInput?: number | null;
|
|
18
|
+
imageInput?: number | null;
|
|
19
|
+
internalReasoning?: number | null;
|
|
20
|
+
webSearchPerRequest?: number | null;
|
|
21
|
+
inputBelow200k?: number | null;
|
|
22
|
+
inputAbove200k?: number | null;
|
|
23
|
+
outputBelow200k?: number | null;
|
|
24
|
+
outputAbove200k?: number | null;
|
|
25
|
+
[key: string]: unknown;
|
|
26
|
+
};
|
|
27
|
+
type X12iCatalogModelEntry = {
|
|
28
|
+
provider: string;
|
|
29
|
+
modelId: string;
|
|
30
|
+
displayName?: string;
|
|
31
|
+
canonicalSlug?: string;
|
|
32
|
+
family?: string;
|
|
33
|
+
status?: string;
|
|
34
|
+
modalities?: string[] | {
|
|
35
|
+
input?: string[];
|
|
36
|
+
output?: string[];
|
|
37
|
+
};
|
|
38
|
+
contextWindow?: number;
|
|
39
|
+
maxCompletionTokens?: number;
|
|
40
|
+
pricing?: X12iCatalogPricing;
|
|
41
|
+
capabilities?: {
|
|
42
|
+
reasoning?: boolean | string;
|
|
43
|
+
toolCalling?: boolean;
|
|
44
|
+
structuredOutputs?: boolean;
|
|
45
|
+
};
|
|
46
|
+
aliases?: string[];
|
|
47
|
+
sourceUrl?: string;
|
|
48
|
+
};
|
|
49
|
+
/**
|
|
50
|
+
* Raw catalog JSON from open-assets.x12i.com (or bundled `src/data`).
|
|
51
|
+
*
|
|
52
|
+
* `schema` and `version` are publisher metadata only — this library never reads or
|
|
53
|
+
* compares them. Remote catalogs are always treated as the latest pricing source.
|
|
54
|
+
*/
|
|
55
|
+
type X12iModelsCatalogFile = {
|
|
56
|
+
/** Publisher schema id (informational). */
|
|
57
|
+
schema?: string;
|
|
58
|
+
/** Publisher catalog revision (informational; not used for cache or compatibility). */
|
|
59
|
+
version?: string;
|
|
60
|
+
verifiedAt?: string;
|
|
61
|
+
models: X12iCatalogModelEntry[];
|
|
62
|
+
[key: string]: unknown;
|
|
63
|
+
};
|
|
64
|
+
|
|
65
|
+
declare function invalidateCatalogLoadCache(cacheKey?: string): void;
|
|
66
|
+
type LoadCatalogCachedOptions = {
|
|
67
|
+
cacheKey?: string;
|
|
68
|
+
ttlMs?: number;
|
|
69
|
+
/** Bypass cache and fetch again (e.g. `catalog refresh`). */
|
|
70
|
+
forceRefresh?: boolean;
|
|
71
|
+
};
|
|
72
|
+
/**
|
|
73
|
+
* Load catalogs with a process-wide in-memory cache.
|
|
74
|
+
* Remote fetches run at most once per TTL window (default 24h); concurrent callers share one in-flight request.
|
|
75
|
+
*/
|
|
76
|
+
declare function loadCatalogSourcesCached(options?: LoadCatalogOptions, cacheOptions?: LoadCatalogCachedOptions): Promise<LoadedCatalogs>;
|
|
77
|
+
|
|
78
|
+
type CatalogRefreshOptions = LoadCatalogOptions & {
|
|
79
|
+
cacheKey?: string;
|
|
80
|
+
cacheTtlMs?: number;
|
|
81
|
+
};
|
|
82
|
+
type CatalogRefreshResult = {
|
|
83
|
+
ok: true;
|
|
84
|
+
directCount: number;
|
|
85
|
+
openRouterCount: number;
|
|
86
|
+
directSource: "remote" | "bundled";
|
|
87
|
+
openRouterSource: "remote" | "bundled";
|
|
88
|
+
};
|
|
89
|
+
/** Fetch remote catalogs and warm the in-memory cache (forces a network load). */
|
|
90
|
+
declare function refreshAiModelsCatalog(options?: CatalogRefreshOptions): Promise<CatalogRefreshResult>;
|
|
91
|
+
type CatalogVerifyOptions = LoadCatalogOptions & {
|
|
92
|
+
cacheKey?: string;
|
|
93
|
+
cacheTtlMs?: number;
|
|
94
|
+
};
|
|
95
|
+
type CatalogVerifyReport = {
|
|
96
|
+
ok: boolean;
|
|
97
|
+
directCount: number;
|
|
98
|
+
openRouterCount: number;
|
|
99
|
+
directSource: "remote" | "bundled";
|
|
100
|
+
openRouterSource: "remote" | "bundled";
|
|
101
|
+
directUrl: string;
|
|
102
|
+
openRouterUrl: string;
|
|
103
|
+
};
|
|
104
|
+
/** Load and validate both catalogs (uses cache unless `forceRefresh`). */
|
|
105
|
+
declare function verifyAiModelsCatalog(options?: CatalogVerifyOptions & {
|
|
106
|
+
forceRefresh?: boolean;
|
|
107
|
+
}): Promise<CatalogVerifyReport>;
|
|
108
|
+
|
|
109
|
+
/** Default in-memory catalog cache lifetime (24 hours). */
|
|
110
|
+
declare const DEFAULT_CATALOG_CACHE_TTL_MS: number;
|
|
111
|
+
declare function resolveCatalogCacheTtlMs(override?: number): number;
|
|
112
|
+
|
|
113
|
+
export { type CatalogRefreshOptions as C, DEFAULT_CATALOG_CACHE_TTL_MS as D, type LoadCatalogCachedOptions as L, type X12iCatalogModelEntry as X, type CatalogRefreshResult as a, type CatalogSourceKind as b, type CatalogVerifyOptions as c, type CatalogVerifyReport as d, DEFAULT_DIRECT_CATALOG_URL as e, DEFAULT_OPENROUTER_CATALOG_URL as f, type X12iModelsCatalogFile as g, resolveCatalogCacheTtlMs as h, invalidateCatalogLoadCache as i, loadCatalogSourcesCached as l, refreshAiModelsCatalog as r, verifyAiModelsCatalog as v };
|
|
@@ -1,5 +1,4 @@
|
|
|
1
|
-
import {
|
|
2
|
-
import { h as ModelResolverOptions, M as ModelResolutionInput, f as ModelResolutionResult, g as ModelResolutionSuccess, b as AliasRegistry, i as ResolvedModel } from './types-CuiPDcVs.js';
|
|
1
|
+
import { n as OpenRouterModelsQuery, a as AiModelRecord, l as ModelResolverOptions, h as ModelResolutionInput, j as ModelResolutionResult, k as ModelResolutionSuccess, d as AliasRegistry, t as ResolvedModel } from './types-BrzJWsTU.js';
|
|
3
2
|
|
|
4
3
|
type OpenRouterSyncProviderOptions = {
|
|
5
4
|
/** Optional — public GET /models needs no key. */
|
|
@@ -37,7 +36,6 @@ declare class ModelNameResolver {
|
|
|
37
36
|
private inferProviderFromSlug;
|
|
38
37
|
private providerPrefixInjection;
|
|
39
38
|
private crossProviderCorrection;
|
|
40
|
-
private stripVersionSuffixes;
|
|
41
39
|
private dateSuffixMatch;
|
|
42
40
|
private findLatestVersioned;
|
|
43
41
|
private shorthandMap;
|
|
@@ -47,9 +45,7 @@ declare class ModelNameResolver {
|
|
|
47
45
|
}
|
|
48
46
|
|
|
49
47
|
declare function createModelNameResolver(catalog: Map<string, AiModelRecord>, options?: ModelResolverOptions): ModelNameResolver;
|
|
50
|
-
/**
|
|
51
|
-
* @deprecated Prefer `ModelNameResolver.resolve()` for full resolution metadata.
|
|
52
|
-
*/
|
|
48
|
+
/** Resolve a model string; returns catalog record only (no resolution metadata). */
|
|
53
49
|
declare function resolveModel(input: string, models: Map<string, AiModelRecord>, aliasRegistry?: AliasRegistry, provider?: string): ResolvedModel | null;
|
|
54
50
|
declare function isRoutedViaOpenRouter(provider: string | undefined, model: AiModelRecord, matchedKey: string): boolean;
|
|
55
51
|
|
|
@@ -1,5 +1,4 @@
|
|
|
1
|
-
import {
|
|
2
|
-
import { h as ModelResolverOptions, M as ModelResolutionInput, f as ModelResolutionResult, g as ModelResolutionSuccess, b as AliasRegistry, i as ResolvedModel } from './types-CX6QFNNy.cjs';
|
|
1
|
+
import { n as OpenRouterModelsQuery, a as AiModelRecord, l as ModelResolverOptions, h as ModelResolutionInput, j as ModelResolutionResult, k as ModelResolutionSuccess, d as AliasRegistry, t as ResolvedModel } from './types-BrzJWsTU.cjs';
|
|
3
2
|
|
|
4
3
|
type OpenRouterSyncProviderOptions = {
|
|
5
4
|
/** Optional — public GET /models needs no key. */
|
|
@@ -37,7 +36,6 @@ declare class ModelNameResolver {
|
|
|
37
36
|
private inferProviderFromSlug;
|
|
38
37
|
private providerPrefixInjection;
|
|
39
38
|
private crossProviderCorrection;
|
|
40
|
-
private stripVersionSuffixes;
|
|
41
39
|
private dateSuffixMatch;
|
|
42
40
|
private findLatestVersioned;
|
|
43
41
|
private shorthandMap;
|
|
@@ -47,9 +45,7 @@ declare class ModelNameResolver {
|
|
|
47
45
|
}
|
|
48
46
|
|
|
49
47
|
declare function createModelNameResolver(catalog: Map<string, AiModelRecord>, options?: ModelResolverOptions): ModelNameResolver;
|
|
50
|
-
/**
|
|
51
|
-
* @deprecated Prefer `ModelNameResolver.resolve()` for full resolution metadata.
|
|
52
|
-
*/
|
|
48
|
+
/** Resolve a model string; returns catalog record only (no resolution metadata). */
|
|
53
49
|
declare function resolveModel(input: string, models: Map<string, AiModelRecord>, aliasRegistry?: AliasRegistry, provider?: string): ResolvedModel | null;
|
|
54
50
|
declare function isRoutedViaOpenRouter(provider: string | undefined, model: AiModelRecord, matchedKey: string): boolean;
|
|
55
51
|
|
package/dist/models/index.cjs
CHANGED
|
@@ -2,22 +2,24 @@
|
|
|
2
2
|
|
|
3
3
|
|
|
4
4
|
|
|
5
|
+
var _chunkXOKUDUUIcjs = require('../chunk-XOKUDUUI.cjs');
|
|
5
6
|
|
|
6
7
|
|
|
7
|
-
var _chunkQCRLKVB3cjs = require('../chunk-QCRLKVB3.cjs');
|
|
8
8
|
|
|
9
9
|
|
|
10
10
|
|
|
11
|
+
var _chunkYQDSN6R6cjs = require('../chunk-YQDSN6R6.cjs');
|
|
12
|
+
require('../chunk-5XAAMBDO.cjs');
|
|
11
13
|
|
|
12
14
|
|
|
13
15
|
|
|
14
16
|
|
|
15
17
|
|
|
16
|
-
var _chunkAV6OE2YQcjs = require('../chunk-AV6OE2YQ.cjs');
|
|
17
|
-
require('../chunk-F2F4UEFD.cjs');
|
|
18
|
-
require('../chunk-TF4L2NEC.cjs');
|
|
19
|
-
require('../chunk-7Q742NI3.cjs');
|
|
20
18
|
|
|
19
|
+
var _chunkDXZOL3VNcjs = require('../chunk-DXZOL3VN.cjs');
|
|
20
|
+
require('../chunk-EDMCKHO6.cjs');
|
|
21
|
+
require('../chunk-PADNCGZB.cjs');
|
|
22
|
+
require('../chunk-GS7T56RP.cjs');
|
|
21
23
|
|
|
22
24
|
|
|
23
25
|
|
|
@@ -29,5 +31,6 @@ require('../chunk-7Q742NI3.cjs');
|
|
|
29
31
|
|
|
30
32
|
|
|
31
33
|
|
|
32
|
-
|
|
34
|
+
|
|
35
|
+
exports.AiModelsService = _chunkYQDSN6R6cjs.AiModelsService; exports.REASONING_SUPPORTED_PARAMETERS = _chunkDXZOL3VNcjs.REASONING_SUPPORTED_PARAMETERS; exports.computeSupportsReasoning = _chunkDXZOL3VNcjs.computeSupportsReasoning; exports.countModels = _chunkYQDSN6R6cjs.countModels; exports.extractProviderId = _chunkXOKUDUUIcjs.extractProviderId; exports.filterModels = _chunkYQDSN6R6cjs.filterModels; exports.getModelInfo = _chunkYQDSN6R6cjs.getModelInfo; exports.hasReasoningPricing = _chunkDXZOL3VNcjs.hasReasoningPricing; exports.isReasoningModel = _chunkDXZOL3VNcjs.isReasoningModel; exports.normalizeOpenRouterModel = _chunkXOKUDUUIcjs.normalizeOpenRouterModel; exports.supportsReasoningParameter = _chunkDXZOL3VNcjs.supportsReasoningParameter;
|
|
33
36
|
//# sourceMappingURL=index.cjs.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["/Users/ami/Documents/prometheus/x12i/ai-tools/dist/models/index.cjs"],"names":[],"mappings":"AAAA,0GAA8B;AAC9B;AACE;AACA;AACA;AACA;AACF,yDAA8B;AAC9B;AACE;AACA;AACA;AACA;AACA;
|
|
1
|
+
{"version":3,"sources":["/Users/ami/Documents/prometheus/x12i/ai-tools/dist/models/index.cjs"],"names":[],"mappings":"AAAA,0GAA8B;AAC9B;AACE;AACA;AACF,yDAA8B;AAC9B;AACE;AACA;AACA;AACA;AACF,yDAA8B;AAC9B,iCAA8B;AAC9B;AACE;AACA;AACA;AACA;AACA;AACF,yDAA8B;AAC9B,iCAA8B;AAC9B,iCAA8B;AAC9B,iCAA8B;AAC9B;AACE;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACF,gvBAAC","file":"/Users/ami/Documents/prometheus/x12i/ai-tools/dist/models/index.cjs"}
|
package/dist/models/index.d.cts
CHANGED
|
@@ -1,44 +1,22 @@
|
|
|
1
|
-
import {
|
|
2
|
-
|
|
3
|
-
import { a as
|
|
4
|
-
export { A as AiModelPricing, O as OpenRouterArchitectureApi, d as OpenRouterModelsQuery, e as OpenRouterModelsResponse, f as OpenRouterOutputModality, g as OpenRouterPricingApi, h as OpenRouterTopProviderApi } from '../types-BYXnCvKx.cjs';
|
|
1
|
+
import { a as AiModelRecord, M as ModelListFilters, g as ModelListResult, j as ModelResolutionResult, m as OpenRouterModelApi } from '../types-BrzJWsTU.cjs';
|
|
2
|
+
export { A as AiModelPricing, O as OpenRouterArchitectureApi, n as OpenRouterModelsQuery, o as OpenRouterModelsResponse, p as OpenRouterOutputModality, q as OpenRouterPricingApi, s as OpenRouterTopProviderApi } from '../types-BrzJWsTU.cjs';
|
|
3
|
+
import { a as AiModelsCatalogClientOptions } from '../AiModelsCatalogClient-B5FMI9gj.cjs';
|
|
5
4
|
|
|
6
|
-
type AiModelsServiceOptions =
|
|
7
|
-
catalox: Catalox;
|
|
8
|
-
appId?: string;
|
|
9
|
-
catalogId?: string;
|
|
10
|
-
cacheTtlMs?: number;
|
|
11
|
-
};
|
|
5
|
+
type AiModelsServiceOptions = AiModelsCatalogClientOptions;
|
|
12
6
|
/**
|
|
13
7
|
* High-level model catalog API — list, filter, count, and get full model info.
|
|
14
8
|
*/
|
|
15
9
|
declare class AiModelsService {
|
|
16
10
|
private readonly client;
|
|
17
|
-
|
|
18
|
-
private readonly appId;
|
|
19
|
-
private readonly catalogId;
|
|
20
|
-
constructor(options: AiModelsServiceOptions);
|
|
21
|
-
private context;
|
|
22
|
-
/** Load all models (cached). */
|
|
11
|
+
constructor(options?: AiModelsServiceOptions);
|
|
23
12
|
getAllModels(): Promise<Map<string, AiModelRecord>>;
|
|
24
|
-
/** List models with in-memory filters (fast after cache warm). */
|
|
25
13
|
listModels(filters?: ModelListFilters): Promise<ModelListResult>;
|
|
26
|
-
/** Count models matching filters. */
|
|
27
14
|
countModels(filters?: Omit<ModelListFilters, "limit" | "offset">): Promise<number>;
|
|
28
|
-
|
|
29
|
-
* Full model record by id or alias (same resolution as cost calculator).
|
|
30
|
-
*/
|
|
31
|
-
getModelInfo(modelIdOrAlias: string): Promise<AiModelRecord | null>;
|
|
32
|
-
/**
|
|
33
|
-
* Query via Catalox indexed fields (provider, status, output modality, tools).
|
|
34
|
-
* Falls back to in-memory filter when Catalox returns partial pages.
|
|
35
|
-
*/
|
|
36
|
-
listModelsFromCatalog(filters?: ModelListFilters, options?: CatalogQueryOptions): Promise<ModelListResult>;
|
|
15
|
+
getModelInfo(modelIdOrAlias: string, provider?: string): Promise<AiModelRecord | null>;
|
|
37
16
|
resolve(modelIdOrAlias: string, provider?: string): Promise<ModelResolutionResult>;
|
|
38
17
|
refresh(): Promise<void>;
|
|
39
18
|
}
|
|
40
|
-
|
|
41
|
-
declare function getModelInfo(service: AiModelsService, modelIdOrAlias: string): Promise<AiModelRecord | null>;
|
|
19
|
+
declare function getModelInfo(modelIdOrAlias: string, options?: AiModelsServiceOptions, provider?: string): Promise<AiModelRecord | null>;
|
|
42
20
|
|
|
43
21
|
declare function filterModels(models: Iterable<AiModelRecord>, filters?: ModelListFilters): AiModelRecord[];
|
|
44
22
|
declare function countModels(models: Iterable<AiModelRecord>, filters?: Omit<ModelListFilters, "limit" | "offset">): number;
|
|
@@ -62,13 +40,13 @@ declare function supportsReasoningParameter(model: Pick<AiModelRecord, "supporte
|
|
|
62
40
|
*/
|
|
63
41
|
declare function hasReasoningPricing(model: Pick<AiModelRecord, "pricing" | "openRouterPricing">): boolean;
|
|
64
42
|
/**
|
|
65
|
-
* Compute `supportsReasoning` from catalog fields (used
|
|
43
|
+
* Compute `supportsReasoning` from catalog fields (used when normalizing catalog entries).
|
|
66
44
|
*/
|
|
67
45
|
declare function computeSupportsReasoning(model: ReasoningModelInput): boolean;
|
|
68
46
|
/**
|
|
69
47
|
* True when the model supports reasoning tokens (API param and/or separate reasoning pricing).
|
|
70
48
|
*
|
|
71
|
-
* Prefer `model.supportsReasoning` on {@link AiModelRecord} after catalog
|
|
49
|
+
* Prefer `model.supportsReasoning` on {@link AiModelRecord} after catalog load;
|
|
72
50
|
* this helper also works when only partial fields are available.
|
|
73
51
|
*/
|
|
74
52
|
declare function isReasoningModel(model: ReasoningModelInput): boolean;
|
package/dist/models/index.d.ts
CHANGED
|
@@ -1,44 +1,22 @@
|
|
|
1
|
-
import {
|
|
2
|
-
|
|
3
|
-
import { a as
|
|
4
|
-
export { A as AiModelPricing, O as OpenRouterArchitectureApi, d as OpenRouterModelsQuery, e as OpenRouterModelsResponse, f as OpenRouterOutputModality, g as OpenRouterPricingApi, h as OpenRouterTopProviderApi } from '../types-BYXnCvKx.js';
|
|
1
|
+
import { a as AiModelRecord, M as ModelListFilters, g as ModelListResult, j as ModelResolutionResult, m as OpenRouterModelApi } from '../types-BrzJWsTU.js';
|
|
2
|
+
export { A as AiModelPricing, O as OpenRouterArchitectureApi, n as OpenRouterModelsQuery, o as OpenRouterModelsResponse, p as OpenRouterOutputModality, q as OpenRouterPricingApi, s as OpenRouterTopProviderApi } from '../types-BrzJWsTU.js';
|
|
3
|
+
import { a as AiModelsCatalogClientOptions } from '../AiModelsCatalogClient-CPPNI6Ry.js';
|
|
5
4
|
|
|
6
|
-
type AiModelsServiceOptions =
|
|
7
|
-
catalox: Catalox;
|
|
8
|
-
appId?: string;
|
|
9
|
-
catalogId?: string;
|
|
10
|
-
cacheTtlMs?: number;
|
|
11
|
-
};
|
|
5
|
+
type AiModelsServiceOptions = AiModelsCatalogClientOptions;
|
|
12
6
|
/**
|
|
13
7
|
* High-level model catalog API — list, filter, count, and get full model info.
|
|
14
8
|
*/
|
|
15
9
|
declare class AiModelsService {
|
|
16
10
|
private readonly client;
|
|
17
|
-
|
|
18
|
-
private readonly appId;
|
|
19
|
-
private readonly catalogId;
|
|
20
|
-
constructor(options: AiModelsServiceOptions);
|
|
21
|
-
private context;
|
|
22
|
-
/** Load all models (cached). */
|
|
11
|
+
constructor(options?: AiModelsServiceOptions);
|
|
23
12
|
getAllModels(): Promise<Map<string, AiModelRecord>>;
|
|
24
|
-
/** List models with in-memory filters (fast after cache warm). */
|
|
25
13
|
listModels(filters?: ModelListFilters): Promise<ModelListResult>;
|
|
26
|
-
/** Count models matching filters. */
|
|
27
14
|
countModels(filters?: Omit<ModelListFilters, "limit" | "offset">): Promise<number>;
|
|
28
|
-
|
|
29
|
-
* Full model record by id or alias (same resolution as cost calculator).
|
|
30
|
-
*/
|
|
31
|
-
getModelInfo(modelIdOrAlias: string): Promise<AiModelRecord | null>;
|
|
32
|
-
/**
|
|
33
|
-
* Query via Catalox indexed fields (provider, status, output modality, tools).
|
|
34
|
-
* Falls back to in-memory filter when Catalox returns partial pages.
|
|
35
|
-
*/
|
|
36
|
-
listModelsFromCatalog(filters?: ModelListFilters, options?: CatalogQueryOptions): Promise<ModelListResult>;
|
|
15
|
+
getModelInfo(modelIdOrAlias: string, provider?: string): Promise<AiModelRecord | null>;
|
|
37
16
|
resolve(modelIdOrAlias: string, provider?: string): Promise<ModelResolutionResult>;
|
|
38
17
|
refresh(): Promise<void>;
|
|
39
18
|
}
|
|
40
|
-
|
|
41
|
-
declare function getModelInfo(service: AiModelsService, modelIdOrAlias: string): Promise<AiModelRecord | null>;
|
|
19
|
+
declare function getModelInfo(modelIdOrAlias: string, options?: AiModelsServiceOptions, provider?: string): Promise<AiModelRecord | null>;
|
|
42
20
|
|
|
43
21
|
declare function filterModels(models: Iterable<AiModelRecord>, filters?: ModelListFilters): AiModelRecord[];
|
|
44
22
|
declare function countModels(models: Iterable<AiModelRecord>, filters?: Omit<ModelListFilters, "limit" | "offset">): number;
|
|
@@ -62,13 +40,13 @@ declare function supportsReasoningParameter(model: Pick<AiModelRecord, "supporte
|
|
|
62
40
|
*/
|
|
63
41
|
declare function hasReasoningPricing(model: Pick<AiModelRecord, "pricing" | "openRouterPricing">): boolean;
|
|
64
42
|
/**
|
|
65
|
-
* Compute `supportsReasoning` from catalog fields (used
|
|
43
|
+
* Compute `supportsReasoning` from catalog fields (used when normalizing catalog entries).
|
|
66
44
|
*/
|
|
67
45
|
declare function computeSupportsReasoning(model: ReasoningModelInput): boolean;
|
|
68
46
|
/**
|
|
69
47
|
* True when the model supports reasoning tokens (API param and/or separate reasoning pricing).
|
|
70
48
|
*
|
|
71
|
-
* Prefer `model.supportsReasoning` on {@link AiModelRecord} after catalog
|
|
49
|
+
* Prefer `model.supportsReasoning` on {@link AiModelRecord} after catalog load;
|
|
72
50
|
* this helper also works when only partial fields are available.
|
|
73
51
|
*/
|
|
74
52
|
declare function isReasoningModel(model: ReasoningModelInput): boolean;
|
package/dist/models/index.js
CHANGED
|
@@ -1,22 +1,24 @@
|
|
|
1
1
|
import "../chunk-COK34C6P.js";
|
|
2
|
+
import {
|
|
3
|
+
extractProviderId,
|
|
4
|
+
normalizeOpenRouterModel
|
|
5
|
+
} from "../chunk-SIH4GPV4.js";
|
|
2
6
|
import {
|
|
3
7
|
AiModelsService,
|
|
4
8
|
countModels,
|
|
5
9
|
filterModels,
|
|
6
10
|
getModelInfo
|
|
7
|
-
} from "../chunk-
|
|
11
|
+
} from "../chunk-VJHLO2R3.js";
|
|
12
|
+
import "../chunk-OPN6BGNH.js";
|
|
8
13
|
import {
|
|
9
14
|
REASONING_SUPPORTED_PARAMETERS,
|
|
10
15
|
computeSupportsReasoning,
|
|
11
|
-
extractProviderId,
|
|
12
16
|
hasReasoningPricing,
|
|
13
17
|
isReasoningModel,
|
|
14
|
-
normalizeOpenRouterModel,
|
|
15
18
|
supportsReasoningParameter
|
|
16
|
-
} from "../chunk-
|
|
17
|
-
import "../chunk-
|
|
18
|
-
import "../chunk-
|
|
19
|
-
import "../chunk-AJEKEWWB.js";
|
|
19
|
+
} from "../chunk-EYHMQVAL.js";
|
|
20
|
+
import "../chunk-B3V2EHRY.js";
|
|
21
|
+
import "../chunk-2PTCWPHV.js";
|
|
20
22
|
export {
|
|
21
23
|
AiModelsService,
|
|
22
24
|
REASONING_SUPPORTED_PARAMETERS,
|
|
@@ -0,0 +1,140 @@
|
|
|
1
|
+
import { A as AiModelPricing, d as AliasRegistry, l as ModelResolverOptions } from './types-BrzJWsTU.js';
|
|
2
|
+
import { A as AiModelsCatalogClient } from './AiModelsCatalogClient-CPPNI6Ry.js';
|
|
3
|
+
|
|
4
|
+
type AiUsageInput = {
|
|
5
|
+
tokens: {
|
|
6
|
+
prompt: number;
|
|
7
|
+
completion: number;
|
|
8
|
+
total: number;
|
|
9
|
+
cached?: number;
|
|
10
|
+
cacheWrite?: number;
|
|
11
|
+
reasoning?: number;
|
|
12
|
+
audio?: number;
|
|
13
|
+
image?: number;
|
|
14
|
+
};
|
|
15
|
+
provider: string;
|
|
16
|
+
/** Runtime model id from the provider response (highest priority). */
|
|
17
|
+
usedModel?: string;
|
|
18
|
+
/** Alias of `usedModel` (same priority). */
|
|
19
|
+
modelUsed?: string;
|
|
20
|
+
/** Requested / configured model id; used when runtime id fields are absent. */
|
|
21
|
+
model?: string;
|
|
22
|
+
};
|
|
23
|
+
type AiCostExtraction = {
|
|
24
|
+
model: {
|
|
25
|
+
field: string;
|
|
26
|
+
path: string;
|
|
27
|
+
};
|
|
28
|
+
modelUsed?: {
|
|
29
|
+
field: string;
|
|
30
|
+
path: string;
|
|
31
|
+
};
|
|
32
|
+
provider?: {
|
|
33
|
+
field: string;
|
|
34
|
+
path: string;
|
|
35
|
+
};
|
|
36
|
+
tokens: {
|
|
37
|
+
source: string;
|
|
38
|
+
path: string;
|
|
39
|
+
estimated?: boolean;
|
|
40
|
+
};
|
|
41
|
+
};
|
|
42
|
+
type AiCostWarningCode = "UNKNOWN_MODEL" | "LOCAL_PROVIDER_NO_PRICING" | "AI_PROFILES_ESTIMATE" | "OPENROUTER_MARKUP_ESTIMATED" | "ESTIMATED_TOKEN_USAGE" | "VERSION_SUFFIX_PRICING";
|
|
43
|
+
type AiCostWarning = {
|
|
44
|
+
code: AiCostWarningCode;
|
|
45
|
+
message: string;
|
|
46
|
+
};
|
|
47
|
+
type AiCostResult = {
|
|
48
|
+
cost: number;
|
|
49
|
+
/** Model id used for pricing (after resolution). */
|
|
50
|
+
resolvedModelId: string;
|
|
51
|
+
/** Runtime model id when present on input. */
|
|
52
|
+
usedModel?: string;
|
|
53
|
+
/** Requested model id when distinct from runtime. */
|
|
54
|
+
model?: string;
|
|
55
|
+
provider: string;
|
|
56
|
+
usage: AiUsageInput["tokens"];
|
|
57
|
+
extraction?: AiCostExtraction;
|
|
58
|
+
breakdown?: {
|
|
59
|
+
promptCostUsd: number;
|
|
60
|
+
completionCostUsd: number;
|
|
61
|
+
cachingCostUsd?: number;
|
|
62
|
+
reasoningCostUsd?: number;
|
|
63
|
+
audioCostUsd?: number;
|
|
64
|
+
imageCostUsd?: number;
|
|
65
|
+
requestFlatCostUsd?: number;
|
|
66
|
+
};
|
|
67
|
+
routedViaOpenRouter: boolean;
|
|
68
|
+
isAuthoritative: boolean;
|
|
69
|
+
pricingSnapshot: AiModelPricing;
|
|
70
|
+
source: "catalog" | "ai-profiles" | "local" | "estimate-fallback";
|
|
71
|
+
/** Present when pricing could not be resolved (zero-cost fallback). */
|
|
72
|
+
unknownModel?: boolean;
|
|
73
|
+
warnings?: AiCostWarning[];
|
|
74
|
+
};
|
|
75
|
+
|
|
76
|
+
/** Model id field priority (higher wins). Runtime ids beat request/config aliases. */
|
|
77
|
+
declare const MODEL_FIELD_PRIORITY: readonly {
|
|
78
|
+
key: string;
|
|
79
|
+
score: number;
|
|
80
|
+
}[];
|
|
81
|
+
type FieldProvenance = {
|
|
82
|
+
field: string;
|
|
83
|
+
path: string;
|
|
84
|
+
score: number;
|
|
85
|
+
};
|
|
86
|
+
type TokenExtractionProvenance = {
|
|
87
|
+
source: "usage" | "tokens" | "diagnostics" | "estimated";
|
|
88
|
+
path: string;
|
|
89
|
+
estimated?: boolean;
|
|
90
|
+
};
|
|
91
|
+
type ExtractUsageInputResult = {
|
|
92
|
+
input: AiUsageInput;
|
|
93
|
+
provenance: {
|
|
94
|
+
model: FieldProvenance;
|
|
95
|
+
modelUsed?: FieldProvenance;
|
|
96
|
+
provider?: FieldProvenance;
|
|
97
|
+
tokens: TokenExtractionProvenance;
|
|
98
|
+
};
|
|
99
|
+
};
|
|
100
|
+
type ExtractUsageInputOptions = {
|
|
101
|
+
/** Default when no provider field is found (default: `openrouter`). */
|
|
102
|
+
defaultProvider?: string;
|
|
103
|
+
};
|
|
104
|
+
/**
|
|
105
|
+
* Extract {@link AiUsageInput} from activity logs, gateway records, MongoDB exports,
|
|
106
|
+
* or any nested JSON shape (e.g. `outer.input`, `config`, `metadata.diagnostics`).
|
|
107
|
+
*/
|
|
108
|
+
declare function extractUsageInput(record: unknown, options?: ExtractUsageInputOptions): ExtractUsageInputResult;
|
|
109
|
+
|
|
110
|
+
type CostCalculatorOptions = {
|
|
111
|
+
aliasRegistry?: AliasRegistry;
|
|
112
|
+
includeBreakdown?: boolean;
|
|
113
|
+
resolverOptions?: ModelResolverOptions;
|
|
114
|
+
/** When true, throw {@link UnknownModelCostError} instead of zero-cost fallback. */
|
|
115
|
+
throwOnUnknownModel?: boolean;
|
|
116
|
+
};
|
|
117
|
+
declare class CostCalculator {
|
|
118
|
+
private readonly catalog;
|
|
119
|
+
private readonly aliasRegistry?;
|
|
120
|
+
private readonly includeBreakdown;
|
|
121
|
+
private readonly resolverOptions?;
|
|
122
|
+
private readonly throwOnUnknownModel;
|
|
123
|
+
constructor(catalog: AiModelsCatalogClient, options?: CostCalculatorOptions);
|
|
124
|
+
/**
|
|
125
|
+
* Extract model, provider, and token usage from an activity / gateway record
|
|
126
|
+
* (MongoDB export, nested `outer`, `config`, `metadata.diagnostics`, etc.)
|
|
127
|
+
* then run {@link calculate}.
|
|
128
|
+
*/
|
|
129
|
+
calculateFromRecord(record: unknown, extractOptions?: ExtractUsageInputOptions): Promise<AiCostResult>;
|
|
130
|
+
calculate(input: AiUsageInput): Promise<AiCostResult>;
|
|
131
|
+
private versionSuffixWarnings;
|
|
132
|
+
private finish;
|
|
133
|
+
private localProviderResult;
|
|
134
|
+
private unknownModelResult;
|
|
135
|
+
}
|
|
136
|
+
|
|
137
|
+
/** Prefer runtime id (`usedModel` / `modelUsed`); fall back to `model`. */
|
|
138
|
+
declare function resolveUsageModel(input: AiUsageInput): string;
|
|
139
|
+
|
|
140
|
+
export { type AiCostExtraction as A, CostCalculator as C, type ExtractUsageInputOptions as E, type FieldProvenance as F, MODEL_FIELD_PRIORITY as M, type TokenExtractionProvenance as T, type AiCostResult as a, type AiCostWarning as b, type AiCostWarningCode as c, type AiUsageInput as d, type CostCalculatorOptions as e, type ExtractUsageInputResult as f, extractUsageInput as g, resolveUsageModel as r };
|
|
@@ -0,0 +1,140 @@
|
|
|
1
|
+
import { A as AiModelPricing, d as AliasRegistry, l as ModelResolverOptions } from './types-BrzJWsTU.cjs';
|
|
2
|
+
import { A as AiModelsCatalogClient } from './AiModelsCatalogClient-B5FMI9gj.cjs';
|
|
3
|
+
|
|
4
|
+
type AiUsageInput = {
|
|
5
|
+
tokens: {
|
|
6
|
+
prompt: number;
|
|
7
|
+
completion: number;
|
|
8
|
+
total: number;
|
|
9
|
+
cached?: number;
|
|
10
|
+
cacheWrite?: number;
|
|
11
|
+
reasoning?: number;
|
|
12
|
+
audio?: number;
|
|
13
|
+
image?: number;
|
|
14
|
+
};
|
|
15
|
+
provider: string;
|
|
16
|
+
/** Runtime model id from the provider response (highest priority). */
|
|
17
|
+
usedModel?: string;
|
|
18
|
+
/** Alias of `usedModel` (same priority). */
|
|
19
|
+
modelUsed?: string;
|
|
20
|
+
/** Requested / configured model id; used when runtime id fields are absent. */
|
|
21
|
+
model?: string;
|
|
22
|
+
};
|
|
23
|
+
type AiCostExtraction = {
|
|
24
|
+
model: {
|
|
25
|
+
field: string;
|
|
26
|
+
path: string;
|
|
27
|
+
};
|
|
28
|
+
modelUsed?: {
|
|
29
|
+
field: string;
|
|
30
|
+
path: string;
|
|
31
|
+
};
|
|
32
|
+
provider?: {
|
|
33
|
+
field: string;
|
|
34
|
+
path: string;
|
|
35
|
+
};
|
|
36
|
+
tokens: {
|
|
37
|
+
source: string;
|
|
38
|
+
path: string;
|
|
39
|
+
estimated?: boolean;
|
|
40
|
+
};
|
|
41
|
+
};
|
|
42
|
+
type AiCostWarningCode = "UNKNOWN_MODEL" | "LOCAL_PROVIDER_NO_PRICING" | "AI_PROFILES_ESTIMATE" | "OPENROUTER_MARKUP_ESTIMATED" | "ESTIMATED_TOKEN_USAGE" | "VERSION_SUFFIX_PRICING";
|
|
43
|
+
type AiCostWarning = {
|
|
44
|
+
code: AiCostWarningCode;
|
|
45
|
+
message: string;
|
|
46
|
+
};
|
|
47
|
+
type AiCostResult = {
|
|
48
|
+
cost: number;
|
|
49
|
+
/** Model id used for pricing (after resolution). */
|
|
50
|
+
resolvedModelId: string;
|
|
51
|
+
/** Runtime model id when present on input. */
|
|
52
|
+
usedModel?: string;
|
|
53
|
+
/** Requested model id when distinct from runtime. */
|
|
54
|
+
model?: string;
|
|
55
|
+
provider: string;
|
|
56
|
+
usage: AiUsageInput["tokens"];
|
|
57
|
+
extraction?: AiCostExtraction;
|
|
58
|
+
breakdown?: {
|
|
59
|
+
promptCostUsd: number;
|
|
60
|
+
completionCostUsd: number;
|
|
61
|
+
cachingCostUsd?: number;
|
|
62
|
+
reasoningCostUsd?: number;
|
|
63
|
+
audioCostUsd?: number;
|
|
64
|
+
imageCostUsd?: number;
|
|
65
|
+
requestFlatCostUsd?: number;
|
|
66
|
+
};
|
|
67
|
+
routedViaOpenRouter: boolean;
|
|
68
|
+
isAuthoritative: boolean;
|
|
69
|
+
pricingSnapshot: AiModelPricing;
|
|
70
|
+
source: "catalog" | "ai-profiles" | "local" | "estimate-fallback";
|
|
71
|
+
/** Present when pricing could not be resolved (zero-cost fallback). */
|
|
72
|
+
unknownModel?: boolean;
|
|
73
|
+
warnings?: AiCostWarning[];
|
|
74
|
+
};
|
|
75
|
+
|
|
76
|
+
/** Model id field priority (higher wins). Runtime ids beat request/config aliases. */
|
|
77
|
+
declare const MODEL_FIELD_PRIORITY: readonly {
|
|
78
|
+
key: string;
|
|
79
|
+
score: number;
|
|
80
|
+
}[];
|
|
81
|
+
type FieldProvenance = {
|
|
82
|
+
field: string;
|
|
83
|
+
path: string;
|
|
84
|
+
score: number;
|
|
85
|
+
};
|
|
86
|
+
type TokenExtractionProvenance = {
|
|
87
|
+
source: "usage" | "tokens" | "diagnostics" | "estimated";
|
|
88
|
+
path: string;
|
|
89
|
+
estimated?: boolean;
|
|
90
|
+
};
|
|
91
|
+
type ExtractUsageInputResult = {
|
|
92
|
+
input: AiUsageInput;
|
|
93
|
+
provenance: {
|
|
94
|
+
model: FieldProvenance;
|
|
95
|
+
modelUsed?: FieldProvenance;
|
|
96
|
+
provider?: FieldProvenance;
|
|
97
|
+
tokens: TokenExtractionProvenance;
|
|
98
|
+
};
|
|
99
|
+
};
|
|
100
|
+
type ExtractUsageInputOptions = {
|
|
101
|
+
/** Default when no provider field is found (default: `openrouter`). */
|
|
102
|
+
defaultProvider?: string;
|
|
103
|
+
};
|
|
104
|
+
/**
|
|
105
|
+
* Extract {@link AiUsageInput} from activity logs, gateway records, MongoDB exports,
|
|
106
|
+
* or any nested JSON shape (e.g. `outer.input`, `config`, `metadata.diagnostics`).
|
|
107
|
+
*/
|
|
108
|
+
declare function extractUsageInput(record: unknown, options?: ExtractUsageInputOptions): ExtractUsageInputResult;
|
|
109
|
+
|
|
110
|
+
type CostCalculatorOptions = {
|
|
111
|
+
aliasRegistry?: AliasRegistry;
|
|
112
|
+
includeBreakdown?: boolean;
|
|
113
|
+
resolverOptions?: ModelResolverOptions;
|
|
114
|
+
/** When true, throw {@link UnknownModelCostError} instead of zero-cost fallback. */
|
|
115
|
+
throwOnUnknownModel?: boolean;
|
|
116
|
+
};
|
|
117
|
+
declare class CostCalculator {
|
|
118
|
+
private readonly catalog;
|
|
119
|
+
private readonly aliasRegistry?;
|
|
120
|
+
private readonly includeBreakdown;
|
|
121
|
+
private readonly resolverOptions?;
|
|
122
|
+
private readonly throwOnUnknownModel;
|
|
123
|
+
constructor(catalog: AiModelsCatalogClient, options?: CostCalculatorOptions);
|
|
124
|
+
/**
|
|
125
|
+
* Extract model, provider, and token usage from an activity / gateway record
|
|
126
|
+
* (MongoDB export, nested `outer`, `config`, `metadata.diagnostics`, etc.)
|
|
127
|
+
* then run {@link calculate}.
|
|
128
|
+
*/
|
|
129
|
+
calculateFromRecord(record: unknown, extractOptions?: ExtractUsageInputOptions): Promise<AiCostResult>;
|
|
130
|
+
calculate(input: AiUsageInput): Promise<AiCostResult>;
|
|
131
|
+
private versionSuffixWarnings;
|
|
132
|
+
private finish;
|
|
133
|
+
private localProviderResult;
|
|
134
|
+
private unknownModelResult;
|
|
135
|
+
}
|
|
136
|
+
|
|
137
|
+
/** Prefer runtime id (`usedModel` / `modelUsed`); fall back to `model`. */
|
|
138
|
+
declare function resolveUsageModel(input: AiUsageInput): string;
|
|
139
|
+
|
|
140
|
+
export { type AiCostExtraction as A, CostCalculator as C, type ExtractUsageInputOptions as E, type FieldProvenance as F, MODEL_FIELD_PRIORITY as M, type TokenExtractionProvenance as T, type AiCostResult as a, type AiCostWarning as b, type AiCostWarningCode as c, type AiUsageInput as d, type CostCalculatorOptions as e, type ExtractUsageInputResult as f, extractUsageInput as g, resolveUsageModel as r };
|