@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.
Files changed (153) hide show
  1. package/CHANGELOG.md +23 -0
  2. package/README.md +146 -204
  3. package/dist/AiModelsCatalogClient-B5FMI9gj.d.cts +58 -0
  4. package/dist/AiModelsCatalogClient-CPPNI6Ry.d.ts +58 -0
  5. package/dist/aliases/index.cjs +4 -3
  6. package/dist/aliases/index.cjs.map +1 -1
  7. package/dist/aliases/index.d.cts +3 -5
  8. package/dist/aliases/index.d.ts +3 -5
  9. package/dist/aliases/index.js +2 -2
  10. package/dist/catalog/index.cjs +18 -9
  11. package/dist/catalog/index.cjs.map +1 -1
  12. package/dist/catalog/index.d.cts +13 -100
  13. package/dist/catalog/index.d.ts +13 -100
  14. package/dist/catalog/index.js +31 -23
  15. package/dist/{chunk-AJEKEWWB.js → chunk-2PTCWPHV.js} +17 -3
  16. package/dist/chunk-2PTCWPHV.js.map +1 -0
  17. package/dist/chunk-56R4XA2S.js +1 -0
  18. package/dist/chunk-5GUKLOEK.cjs +1 -0
  19. package/dist/chunk-5GUKLOEK.cjs.map +1 -0
  20. package/dist/chunk-5XAAMBDO.cjs +1988 -0
  21. package/dist/chunk-5XAAMBDO.cjs.map +1 -0
  22. package/dist/chunk-6BQBKROR.js +95 -0
  23. package/dist/chunk-6BQBKROR.js.map +1 -0
  24. package/dist/chunk-AB5GNXJ4.js +46 -0
  25. package/dist/chunk-AB5GNXJ4.js.map +1 -0
  26. package/dist/{chunk-O2A6OVEH.js → chunk-ANVONYJF.js} +2 -2
  27. package/dist/{chunk-O2A6OVEH.js.map → chunk-ANVONYJF.js.map} +1 -1
  28. package/dist/chunk-B3V2EHRY.js +225 -0
  29. package/dist/chunk-B3V2EHRY.js.map +1 -0
  30. package/dist/{chunk-QWAX7VQO.cjs → chunk-BAHBDADJ.cjs} +11 -11
  31. package/dist/{chunk-QWAX7VQO.cjs.map → chunk-BAHBDADJ.cjs.map} +1 -1
  32. package/dist/{chunk-TF4L2NEC.cjs → chunk-DXZOL3VN.cjs} +62 -313
  33. package/dist/chunk-DXZOL3VN.cjs.map +1 -0
  34. package/dist/chunk-EDMCKHO6.cjs +225 -0
  35. package/dist/chunk-EDMCKHO6.cjs.map +1 -0
  36. package/dist/{chunk-DJ5SWJDY.js → chunk-EYHMQVAL.js} +48 -299
  37. package/dist/chunk-EYHMQVAL.js.map +1 -0
  38. package/dist/chunk-GS7T56RP.cjs +8 -0
  39. package/dist/chunk-GS7T56RP.cjs.map +1 -0
  40. package/dist/chunk-NF2SKQR7.cjs +973 -0
  41. package/dist/chunk-NF2SKQR7.cjs.map +1 -0
  42. package/dist/chunk-OPN6BGNH.js +1985 -0
  43. package/dist/chunk-OPN6BGNH.js.map +1 -0
  44. package/dist/{chunk-7Q742NI3.cjs → chunk-PADNCGZB.cjs} +17 -3
  45. package/dist/chunk-PADNCGZB.cjs.map +1 -0
  46. package/dist/chunk-PRCICORG.cjs +95 -0
  47. package/dist/chunk-PRCICORG.cjs.map +1 -0
  48. package/dist/{chunk-6QGDZTGH.js → chunk-SIH4GPV4.js} +4 -29
  49. package/dist/chunk-SIH4GPV4.js.map +1 -0
  50. package/dist/chunk-U2YDDUVP.js +970 -0
  51. package/dist/chunk-U2YDDUVP.js.map +1 -0
  52. package/dist/{chunk-4NAY6HRP.js → chunk-VJHLO2R3.js} +7 -58
  53. package/dist/chunk-VJHLO2R3.js.map +1 -0
  54. package/dist/chunk-XAWBTX3N.cjs +46 -0
  55. package/dist/chunk-XAWBTX3N.cjs.map +1 -0
  56. package/dist/{chunk-AV6OE2YQ.cjs → chunk-XOKUDUUI.cjs} +14 -39
  57. package/dist/chunk-XOKUDUUI.cjs.map +1 -0
  58. package/dist/chunk-YQDSN6R6.cjs +86 -0
  59. package/dist/chunk-YQDSN6R6.cjs.map +1 -0
  60. package/dist/cli/index.cjs +59 -201
  61. package/dist/cli/index.cjs.map +1 -1
  62. package/dist/cli/index.js +53 -198
  63. package/dist/cli/index.js.map +1 -1
  64. package/dist/cost/index.cjs +19 -3
  65. package/dist/cost/index.cjs.map +1 -1
  66. package/dist/cost/index.d.cts +10 -50
  67. package/dist/cost/index.d.ts +10 -50
  68. package/dist/cost/index.js +18 -3
  69. package/dist/index.cjs +24 -16
  70. package/dist/index.cjs.map +1 -1
  71. package/dist/index.d.cts +13 -13
  72. package/dist/index.d.ts +13 -13
  73. package/dist/index.js +44 -37
  74. package/dist/modelCache-BzRn6t_C.d.ts +113 -0
  75. package/dist/modelCache-CJftI-Ko.d.cts +113 -0
  76. package/dist/{modelNameResolver-DqFt7g6W.d.ts → modelNameResolver-5XkBMctP.d.ts} +2 -6
  77. package/dist/{modelNameResolver-D9V_GfUK.d.cts → modelNameResolver-C5CSTGFF.d.cts} +2 -6
  78. package/dist/models/index.cjs +9 -6
  79. package/dist/models/index.cjs.map +1 -1
  80. package/dist/models/index.d.cts +9 -31
  81. package/dist/models/index.d.ts +9 -31
  82. package/dist/models/index.js +9 -7
  83. package/dist/resolveUsageModel-BFwf80Hz.d.ts +140 -0
  84. package/dist/resolveUsageModel-C_YmGR1M.d.cts +140 -0
  85. package/dist/sync/index.cjs +7 -9
  86. package/dist/sync/index.cjs.map +1 -1
  87. package/dist/sync/index.d.cts +3 -8
  88. package/dist/sync/index.d.ts +3 -8
  89. package/dist/sync/index.js +8 -11
  90. package/dist/toolbox/index.cjs +1 -0
  91. package/dist/toolbox/index.cjs.map +1 -1
  92. package/dist/types-BrzJWsTU.d.cts +277 -0
  93. package/dist/types-BrzJWsTU.d.ts +277 -0
  94. package/package.json +9 -20
  95. package/src/data/models-catalog.json +670 -0
  96. package/src/data/openrouter-models-catalog.json +857 -0
  97. package/dist/AiModelsCatalogClient-4RF5BCDL.cjs +0 -9
  98. package/dist/AiModelsCatalogClient-4RF5BCDL.cjs.map +0 -1
  99. package/dist/AiModelsCatalogClient-CNeqFiFs.d.cts +0 -30
  100. package/dist/AiModelsCatalogClient-NUF3CBLW.js +0 -9
  101. package/dist/AiModelsCatalogClient-nwFoEaqL.d.ts +0 -30
  102. package/dist/catalox/index.cjs +0 -21
  103. package/dist/catalox/index.cjs.map +0 -1
  104. package/dist/catalox/index.d.cts +0 -11
  105. package/dist/catalox/index.d.ts +0 -11
  106. package/dist/catalox/index.js +0 -21
  107. package/dist/catalox/index.js.map +0 -1
  108. package/dist/chunk-4NAY6HRP.js.map +0 -1
  109. package/dist/chunk-6QGDZTGH.js.map +0 -1
  110. package/dist/chunk-7Q742NI3.cjs.map +0 -1
  111. package/dist/chunk-AJEKEWWB.js.map +0 -1
  112. package/dist/chunk-AV6OE2YQ.cjs.map +0 -1
  113. package/dist/chunk-C3H7RTFR.cjs +0 -1
  114. package/dist/chunk-C3H7RTFR.cjs.map +0 -1
  115. package/dist/chunk-DJ5SWJDY.js.map +0 -1
  116. package/dist/chunk-DKHGWHXP.cjs +0 -169
  117. package/dist/chunk-DKHGWHXP.cjs.map +0 -1
  118. package/dist/chunk-F2F4UEFD.cjs +0 -75
  119. package/dist/chunk-F2F4UEFD.cjs.map +0 -1
  120. package/dist/chunk-FGP3QXWL.cjs +0 -163
  121. package/dist/chunk-FGP3QXWL.cjs.map +0 -1
  122. package/dist/chunk-G2G4KSC5.js +0 -30
  123. package/dist/chunk-G2G4KSC5.js.map +0 -1
  124. package/dist/chunk-HN6UAQAE.cjs +0 -83
  125. package/dist/chunk-HN6UAQAE.cjs.map +0 -1
  126. package/dist/chunk-HS74X2OJ.cjs +0 -172
  127. package/dist/chunk-HS74X2OJ.cjs.map +0 -1
  128. package/dist/chunk-HYGXZY25.js +0 -163
  129. package/dist/chunk-HYGXZY25.js.map +0 -1
  130. package/dist/chunk-KQOALKKX.js +0 -75
  131. package/dist/chunk-KQOALKKX.js.map +0 -1
  132. package/dist/chunk-LYOU7CA2.cjs +0 -30
  133. package/dist/chunk-LYOU7CA2.cjs.map +0 -1
  134. package/dist/chunk-M5TMA73F.js +0 -1
  135. package/dist/chunk-M5TMA73F.js.map +0 -1
  136. package/dist/chunk-MX3AMQFC.js +0 -172
  137. package/dist/chunk-MX3AMQFC.js.map +0 -1
  138. package/dist/chunk-QCRLKVB3.cjs +0 -137
  139. package/dist/chunk-QCRLKVB3.cjs.map +0 -1
  140. package/dist/chunk-TF4L2NEC.cjs.map +0 -1
  141. package/dist/chunk-VRFVF5RH.js +0 -169
  142. package/dist/chunk-VRFVF5RH.js.map +0 -1
  143. package/dist/chunk-YHO57D2V.js +0 -83
  144. package/dist/chunk-YHO57D2V.js.map +0 -1
  145. package/dist/syncAiModelsCatalog-CnXRLm2c.d.cts +0 -32
  146. package/dist/syncAiModelsCatalog-DpkN_w7S.d.ts +0 -32
  147. package/dist/types-BYXnCvKx.d.cts +0 -137
  148. package/dist/types-BYXnCvKx.d.ts +0 -137
  149. package/dist/types-CX6QFNNy.d.cts +0 -144
  150. package/dist/types-CuiPDcVs.d.ts +0 -144
  151. package/dist/upsertAiModelRecord-C831wOIF.d.ts +0 -35
  152. package/dist/upsertAiModelRecord-CjY-sny0.d.cts +0 -35
  153. /package/dist/{AiModelsCatalogClient-NUF3CBLW.js.map → chunk-56R4XA2S.js.map} +0 -0
@@ -1,53 +1,13 @@
1
- import { b as AliasRegistry, h as ModelResolverOptions } from '../types-CX6QFNNy.cjs';
2
- import { A as AiModelsCatalogClient } from '../AiModelsCatalogClient-CNeqFiFs.cjs';
3
- import { A as AiModelPricing } from '../types-BYXnCvKx.cjs';
4
- export { a as AiModelRecord } from '../types-BYXnCvKx.cjs';
5
- import '@x12i/catalox';
1
+ import { a as AiCostResult, d as AiUsageInput, A as AiCostExtraction, f as ExtractUsageInputResult } from '../resolveUsageModel-C_YmGR1M.cjs';
2
+ export { b as AiCostWarning, c as AiCostWarningCode, C as CostCalculator, e as CostCalculatorOptions, E as ExtractUsageInputOptions, F as FieldProvenance, M as MODEL_FIELD_PRIORITY, T as TokenExtractionProvenance, g as extractUsageInput, r as resolveUsageModel } from '../resolveUsageModel-C_YmGR1M.cjs';
3
+ export { A as AiModelPricing, a as AiModelRecord } from '../types-BrzJWsTU.cjs';
4
+ import '../AiModelsCatalogClient-B5FMI9gj.cjs';
6
5
 
7
- type AiUsageInput = {
8
- tokens: {
9
- prompt: number;
10
- completion: number;
11
- total: number;
12
- cached?: number;
13
- cacheWrite?: number;
14
- reasoning?: number;
15
- audio?: number;
16
- image?: number;
17
- };
18
- provider: string;
19
- modelUsed: string;
20
- };
21
- type AiCostResult = {
22
- cost: number;
23
- breakdown?: {
24
- promptCostUsd: number;
25
- completionCostUsd: number;
26
- cachingCostUsd?: number;
27
- reasoningCostUsd?: number;
28
- audioCostUsd?: number;
29
- imageCostUsd?: number;
30
- requestFlatCostUsd?: number;
31
- };
32
- resolvedModelId: string;
33
- routedViaOpenRouter: boolean;
34
- isAuthoritative: boolean;
35
- pricingSnapshot: AiModelPricing;
36
- source: "catalog" | "estimate-fallback";
37
- };
6
+ declare function toCostExtraction(provenance: ExtractUsageInputResult["provenance"]): AiCostExtraction;
7
+ /** Attach usage, provider, and model fields callers expect on every cost response. */
8
+ declare function enrichCostResult(result: Omit<AiCostResult, "usage" | "provider" | "usedModel" | "model" | "extraction">, input: AiUsageInput, extraction?: AiCostExtraction): AiCostResult;
38
9
 
39
- type CostCalculatorOptions = {
40
- aliasRegistry?: AliasRegistry;
41
- includeBreakdown?: boolean;
42
- resolverOptions?: ModelResolverOptions;
43
- };
44
- declare class CostCalculator {
45
- private readonly catalog;
46
- private readonly aliasRegistry?;
47
- private readonly includeBreakdown;
48
- private readonly resolverOptions?;
49
- constructor(catalog: AiModelsCatalogClient, options?: CostCalculatorOptions);
50
- calculate(input: AiUsageInput): Promise<AiCostResult>;
51
- }
10
+ /** Default OpenRouter platform surcharge when catalog markup fields are absent (5%). */
11
+ declare const DEFAULT_OPENROUTER_MARKUP_RATE = 0.05;
52
12
 
53
- export { type AiCostResult, AiModelPricing, type AiUsageInput, CostCalculator, type CostCalculatorOptions };
13
+ export { AiCostExtraction, AiCostResult, AiUsageInput, DEFAULT_OPENROUTER_MARKUP_RATE, ExtractUsageInputResult, enrichCostResult, toCostExtraction };
@@ -1,53 +1,13 @@
1
- import { b as AliasRegistry, h as ModelResolverOptions } from '../types-CuiPDcVs.js';
2
- import { A as AiModelsCatalogClient } from '../AiModelsCatalogClient-nwFoEaqL.js';
3
- import { A as AiModelPricing } from '../types-BYXnCvKx.js';
4
- export { a as AiModelRecord } from '../types-BYXnCvKx.js';
5
- import '@x12i/catalox';
1
+ import { a as AiCostResult, d as AiUsageInput, A as AiCostExtraction, f as ExtractUsageInputResult } from '../resolveUsageModel-BFwf80Hz.js';
2
+ export { b as AiCostWarning, c as AiCostWarningCode, C as CostCalculator, e as CostCalculatorOptions, E as ExtractUsageInputOptions, F as FieldProvenance, M as MODEL_FIELD_PRIORITY, T as TokenExtractionProvenance, g as extractUsageInput, r as resolveUsageModel } from '../resolveUsageModel-BFwf80Hz.js';
3
+ export { A as AiModelPricing, a as AiModelRecord } from '../types-BrzJWsTU.js';
4
+ import '../AiModelsCatalogClient-CPPNI6Ry.js';
6
5
 
7
- type AiUsageInput = {
8
- tokens: {
9
- prompt: number;
10
- completion: number;
11
- total: number;
12
- cached?: number;
13
- cacheWrite?: number;
14
- reasoning?: number;
15
- audio?: number;
16
- image?: number;
17
- };
18
- provider: string;
19
- modelUsed: string;
20
- };
21
- type AiCostResult = {
22
- cost: number;
23
- breakdown?: {
24
- promptCostUsd: number;
25
- completionCostUsd: number;
26
- cachingCostUsd?: number;
27
- reasoningCostUsd?: number;
28
- audioCostUsd?: number;
29
- imageCostUsd?: number;
30
- requestFlatCostUsd?: number;
31
- };
32
- resolvedModelId: string;
33
- routedViaOpenRouter: boolean;
34
- isAuthoritative: boolean;
35
- pricingSnapshot: AiModelPricing;
36
- source: "catalog" | "estimate-fallback";
37
- };
6
+ declare function toCostExtraction(provenance: ExtractUsageInputResult["provenance"]): AiCostExtraction;
7
+ /** Attach usage, provider, and model fields callers expect on every cost response. */
8
+ declare function enrichCostResult(result: Omit<AiCostResult, "usage" | "provider" | "usedModel" | "model" | "extraction">, input: AiUsageInput, extraction?: AiCostExtraction): AiCostResult;
38
9
 
39
- type CostCalculatorOptions = {
40
- aliasRegistry?: AliasRegistry;
41
- includeBreakdown?: boolean;
42
- resolverOptions?: ModelResolverOptions;
43
- };
44
- declare class CostCalculator {
45
- private readonly catalog;
46
- private readonly aliasRegistry?;
47
- private readonly includeBreakdown;
48
- private readonly resolverOptions?;
49
- constructor(catalog: AiModelsCatalogClient, options?: CostCalculatorOptions);
50
- calculate(input: AiUsageInput): Promise<AiCostResult>;
51
- }
10
+ /** Default OpenRouter platform surcharge when catalog markup fields are absent (5%). */
11
+ declare const DEFAULT_OPENROUTER_MARKUP_RATE = 0.05;
52
12
 
53
- export { type AiCostResult, AiModelPricing, type AiUsageInput, CostCalculator, type CostCalculatorOptions };
13
+ export { AiCostExtraction, AiCostResult, AiUsageInput, DEFAULT_OPENROUTER_MARKUP_RATE, ExtractUsageInputResult, enrichCostResult, toCostExtraction };
@@ -1,7 +1,22 @@
1
+ import "../chunk-56R4XA2S.js";
1
2
  import {
2
- CostCalculator
3
- } from "../chunk-YHO57D2V.js";
3
+ CostCalculator,
4
+ DEFAULT_OPENROUTER_MARKUP_RATE,
5
+ MODEL_FIELD_PRIORITY,
6
+ enrichCostResult,
7
+ extractUsageInput,
8
+ resolveUsageModel,
9
+ toCostExtraction
10
+ } from "../chunk-U2YDDUVP.js";
11
+ import "../chunk-B3V2EHRY.js";
12
+ import "../chunk-2PTCWPHV.js";
4
13
  export {
5
- CostCalculator
14
+ CostCalculator,
15
+ DEFAULT_OPENROUTER_MARKUP_RATE,
16
+ MODEL_FIELD_PRIORITY,
17
+ enrichCostResult,
18
+ extractUsageInput,
19
+ resolveUsageModel,
20
+ toCostExtraction
6
21
  };
7
22
  //# sourceMappingURL=index.js.map
package/dist/index.cjs CHANGED
@@ -1,6 +1,4 @@
1
- "use strict";Object.defineProperty(exports, "__esModule", {value: true});
2
-
3
- var _chunkHN6UAQAEcjs = require('./chunk-HN6UAQAE.cjs');
1
+ "use strict";Object.defineProperty(exports, "__esModule", {value: true});require('./chunk-5GUKLOEK.cjs');
4
2
 
5
3
 
6
4
  var _chunk5HNFAYTOcjs = require('./chunk-5HNFAYTO.cjs');
@@ -8,53 +6,62 @@ var _chunk5HNFAYTOcjs = require('./chunk-5HNFAYTO.cjs');
8
6
 
9
7
 
10
8
 
11
- var _chunkLYOU7CA2cjs = require('./chunk-LYOU7CA2.cjs');
9
+
10
+ var _chunkPRCICORGcjs = require('./chunk-PRCICORG.cjs');
12
11
  require('./chunk-3E67S427.cjs');
12
+ require('./chunk-2PYACSZ5.cjs');
13
13
 
14
14
 
15
+ var _chunkXOKUDUUIcjs = require('./chunk-XOKUDUUI.cjs');
16
+
17
+
18
+
19
+
20
+
21
+ var _chunkNF2SKQR7cjs = require('./chunk-NF2SKQR7.cjs');
22
+
23
+
24
+
25
+ var _chunkBAHBDADJcjs = require('./chunk-BAHBDADJ.cjs');
26
+
15
27
 
16
- var _chunkQWAX7VQOcjs = require('./chunk-QWAX7VQO.cjs');
17
- require('./chunk-2PYACSZ5.cjs');
18
28
 
19
29
 
20
30
 
31
+ var _chunkYQDSN6R6cjs = require('./chunk-YQDSN6R6.cjs');
21
32
 
22
33
 
23
- var _chunkQCRLKVB3cjs = require('./chunk-QCRLKVB3.cjs');
24
- require('./chunk-C3H7RTFR.cjs');
25
34
 
35
+ var _chunkXAWBTX3Ncjs = require('./chunk-XAWBTX3N.cjs');
26
36
 
27
37
 
28
38
 
29
39
 
30
- var _chunkHS74X2OJcjs = require('./chunk-HS74X2OJ.cjs');
31
40
 
32
41
 
33
42
 
34
43
 
35
- var _chunkDKHGWHXPcjs = require('./chunk-DKHGWHXP.cjs');
36
- require('./chunk-FGP3QXWL.cjs');
37
44
 
45
+ var _chunk5XAAMBDOcjs = require('./chunk-5XAAMBDO.cjs');
38
46
 
39
47
 
40
48
 
41
49
 
42
50
 
43
51
 
44
- var _chunkAV6OE2YQcjs = require('./chunk-AV6OE2YQ.cjs');
45
52
 
53
+ var _chunkDXZOL3VNcjs = require('./chunk-DXZOL3VN.cjs');
46
54
 
47
- var _chunkF2F4UEFDcjs = require('./chunk-F2F4UEFD.cjs');
48
55
 
49
56
 
50
57
 
51
58
 
59
+ var _chunkEDMCKHO6cjs = require('./chunk-EDMCKHO6.cjs');
52
60
 
53
61
 
54
62
 
55
63
 
56
64
 
57
- var _chunkTF4L2NECcjs = require('./chunk-TF4L2NEC.cjs');
58
65
 
59
66
 
60
67
 
@@ -62,11 +69,12 @@ var _chunkTF4L2NECcjs = require('./chunk-TF4L2NEC.cjs');
62
69
 
63
70
 
64
71
 
72
+ var _chunkPADNCGZBcjs = require('./chunk-PADNCGZB.cjs');
73
+ require('./chunk-GS7T56RP.cjs');
65
74
 
66
75
 
67
76
 
68
77
 
69
- var _chunk7Q742NI3cjs = require('./chunk-7Q742NI3.cjs');
70
78
 
71
79
 
72
80
 
@@ -111,5 +119,5 @@ var _chunk7Q742NI3cjs = require('./chunk-7Q742NI3.cjs');
111
119
 
112
120
 
113
121
 
114
- exports.AIToolbox = _chunk5HNFAYTOcjs.AIToolbox; exports.AI_MODELS_CATALOG_ID = _chunkTF4L2NECcjs.AI_MODELS_CATALOG_ID; exports.AI_MODELS_DESCRIPTOR = _chunkTF4L2NECcjs.AI_MODELS_DESCRIPTOR; exports.AI_TOOLS_APP_ID = _chunkTF4L2NECcjs.AI_TOOLS_APP_ID; exports.AiModelsCatalogClient = _chunkF2F4UEFDcjs.AiModelsCatalogClient; exports.AiModelsService = _chunkQCRLKVB3cjs.AiModelsService; exports.AiToolsError = _chunk7Q742NI3cjs.AiToolsError; exports.AliasConflictError = _chunk7Q742NI3cjs.AliasConflictError; exports.AliasFileParseError = _chunk7Q742NI3cjs.AliasFileParseError; exports.AliasFileWriteError = _chunk7Q742NI3cjs.AliasFileWriteError; exports.AliasInvalidNameError = _chunk7Q742NI3cjs.AliasInvalidNameError; exports.AliasNotFoundError = _chunk7Q742NI3cjs.AliasNotFoundError; exports.AliasRegistry = _chunkQWAX7VQOcjs.AliasRegistry; exports.AliasResolver = _chunkQWAX7VQOcjs.AliasResolver; exports.CatalogSyncJobError = _chunkHS74X2OJcjs.CatalogSyncJobError; exports.CostCalculationError = _chunk7Q742NI3cjs.CostCalculationError; exports.CostCalculator = _chunkHN6UAQAEcjs.CostCalculator; exports.ModelNameResolver = _chunkTF4L2NECcjs.ModelNameResolver; exports.ModelNotFoundError = _chunk7Q742NI3cjs.ModelNotFoundError; exports.ModelResolutionError = _chunk7Q742NI3cjs.ModelResolutionError; exports.OpenRouterSyncProvider = _chunkDKHGWHXPcjs.OpenRouterSyncProvider; exports.REASONING_SUPPORTED_PARAMETERS = _chunkAV6OE2YQcjs.REASONING_SUPPORTED_PARAMETERS; exports.SyncError = _chunk7Q742NI3cjs.SyncError; exports.computeSupportsReasoning = _chunkAV6OE2YQcjs.computeSupportsReasoning; exports.countModels = _chunkQCRLKVB3cjs.countModels; exports.createModelNameResolver = _chunkLYOU7CA2cjs.createModelNameResolver; exports.ensureAiModelsCatalog = _chunkDKHGWHXPcjs.ensureAiModelsCatalog; exports.filterModels = _chunkQCRLKVB3cjs.filterModels; exports.getModelInfo = _chunkQCRLKVB3cjs.getModelInfo; exports.hasReasoningPricing = _chunkAV6OE2YQcjs.hasReasoningPricing; exports.isReasoningModel = _chunkAV6OE2YQcjs.isReasoningModel; exports.isRoutedViaOpenRouter = _chunkLYOU7CA2cjs.isRoutedViaOpenRouter; exports.loadOpenRouterRoutingEnv = _chunkTF4L2NECcjs.loadOpenRouterRoutingEnv; exports.normalizeOpenRouterModel = _chunkAV6OE2YQcjs.normalizeOpenRouterModel; exports.providerIdToEnvKeyPrefix = _chunkTF4L2NECcjs.providerIdToEnvKeyPrefix; exports.pruneStaleCatalogModels = _chunkHS74X2OJcjs.pruneStaleCatalogModels; exports.resolveModel = _chunkLYOU7CA2cjs.resolveModel; exports.runAiModelsCatalogSync = _chunkHS74X2OJcjs.runAiModelsCatalogSync; exports.shouldDefaultRouteViaOpenRouter = _chunkTF4L2NECcjs.shouldDefaultRouteViaOpenRouter; exports.supportsReasoningParameter = _chunkAV6OE2YQcjs.supportsReasoningParameter; exports.syncAiModelsCatalog = _chunkDKHGWHXPcjs.syncAiModelsCatalog; exports.vendorApiKeyEnvName = _chunkTF4L2NECcjs.vendorApiKeyEnvName; exports.verifyAiModelsCatalog = _chunkHS74X2OJcjs.verifyAiModelsCatalog;
122
+ exports.AIToolbox = _chunk5HNFAYTOcjs.AIToolbox; exports.AiModelsCatalogClient = _chunk5XAAMBDOcjs.AiModelsCatalogClient; exports.AiModelsService = _chunkYQDSN6R6cjs.AiModelsService; exports.AiToolsError = _chunkPADNCGZBcjs.AiToolsError; exports.AliasConflictError = _chunkPADNCGZBcjs.AliasConflictError; exports.AliasFileParseError = _chunkPADNCGZBcjs.AliasFileParseError; exports.AliasFileWriteError = _chunkPADNCGZBcjs.AliasFileWriteError; exports.AliasInvalidNameError = _chunkPADNCGZBcjs.AliasInvalidNameError; exports.AliasNotFoundError = _chunkPADNCGZBcjs.AliasNotFoundError; exports.AliasRegistry = _chunkBAHBDADJcjs.AliasRegistry; exports.AliasResolver = _chunkBAHBDADJcjs.AliasResolver; exports.CostCalculationError = _chunkPADNCGZBcjs.CostCalculationError; exports.CostCalculator = _chunkNF2SKQR7cjs.CostCalculator; exports.DEFAULT_CATALOG_CACHE_TTL_MS = _chunk5XAAMBDOcjs.DEFAULT_CATALOG_CACHE_TTL_MS; exports.DEFAULT_DIRECT_CATALOG_URL = _chunk5XAAMBDOcjs.DEFAULT_DIRECT_CATALOG_URL; exports.DEFAULT_OPENROUTER_CATALOG_URL = _chunk5XAAMBDOcjs.DEFAULT_OPENROUTER_CATALOG_URL; exports.MODEL_FIELD_PRIORITY = _chunkNF2SKQR7cjs.MODEL_FIELD_PRIORITY; exports.ModelNameResolver = _chunkDXZOL3VNcjs.ModelNameResolver; exports.ModelNotFoundError = _chunkPADNCGZBcjs.ModelNotFoundError; exports.ModelResolutionError = _chunkPADNCGZBcjs.ModelResolutionError; exports.OpenRouterSyncProvider = _chunkPRCICORGcjs.OpenRouterSyncProvider; exports.REASONING_SUPPORTED_PARAMETERS = _chunkDXZOL3VNcjs.REASONING_SUPPORTED_PARAMETERS; exports.SyncError = _chunkPADNCGZBcjs.SyncError; exports.UnknownModelCostError = _chunkPADNCGZBcjs.UnknownModelCostError; exports.computeSupportsReasoning = _chunkDXZOL3VNcjs.computeSupportsReasoning; exports.countModels = _chunkYQDSN6R6cjs.countModels; exports.createModelNameResolver = _chunkPRCICORGcjs.createModelNameResolver; exports.extractUsageInput = _chunkNF2SKQR7cjs.extractUsageInput; exports.filterModels = _chunkYQDSN6R6cjs.filterModels; exports.getModelInfo = _chunkYQDSN6R6cjs.getModelInfo; exports.hasReasoningPricing = _chunkDXZOL3VNcjs.hasReasoningPricing; exports.invalidateCatalogLoadCache = _chunk5XAAMBDOcjs.invalidateCatalogLoadCache; exports.isReasoningModel = _chunkDXZOL3VNcjs.isReasoningModel; exports.isRoutedViaOpenRouter = _chunkPRCICORGcjs.isRoutedViaOpenRouter; exports.loadCatalogSources = _chunk5XAAMBDOcjs.loadCatalogSources; exports.loadCatalogSourcesCached = _chunk5XAAMBDOcjs.loadCatalogSourcesCached; exports.loadOpenRouterRoutingEnv = _chunkEDMCKHO6cjs.loadOpenRouterRoutingEnv; exports.normalizeOpenRouterModel = _chunkXOKUDUUIcjs.normalizeOpenRouterModel; exports.providerIdToEnvKeyPrefix = _chunkEDMCKHO6cjs.providerIdToEnvKeyPrefix; exports.refreshAiModelsCatalog = _chunkXAWBTX3Ncjs.refreshAiModelsCatalog; exports.resolveCatalogCacheTtlMs = _chunk5XAAMBDOcjs.resolveCatalogCacheTtlMs; exports.resolveModel = _chunkPRCICORGcjs.resolveModel; exports.resolveUsageModel = _chunkNF2SKQR7cjs.resolveUsageModel; exports.shouldDefaultRouteViaOpenRouter = _chunkEDMCKHO6cjs.shouldDefaultRouteViaOpenRouter; exports.supportsReasoningParameter = _chunkDXZOL3VNcjs.supportsReasoningParameter; exports.vendorApiKeyEnvName = _chunkEDMCKHO6cjs.vendorApiKeyEnvName; exports.verifyAiModelsCatalog = _chunkXAWBTX3Ncjs.verifyAiModelsCatalog;
115
123
  //# sourceMappingURL=index.cjs.map
@@ -1 +1 @@
1
- {"version":3,"sources":["/Users/ami/Documents/prometheus/x12i/ai-tools/dist/index.cjs"],"names":[],"mappings":"AAAA;AACE;AACF,wDAA6B;AAC7B;AACE;AACF,wDAA6B;AAC7B;AACE;AACA;AACA;AACF,wDAA6B;AAC7B,gCAA6B;AAC7B;AACE;AACA;AACF,wDAA6B;AAC7B,gCAA6B;AAC7B;AACE;AACA;AACA;AACA;AACF,wDAA6B;AAC7B,gCAA6B;AAC7B;AACE;AACA;AACA;AACA;AACF,wDAA6B;AAC7B;AACE;AACA;AACA;AACF,wDAA6B;AAC7B,gCAA6B;AAC7B;AACE;AACA;AACA;AACA;AACA;AACA;AACF,wDAA6B;AAC7B;AACE;AACF,wDAA6B;AAC7B;AACE;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACF,wDAA6B;AAC7B;AACE;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACF,wDAA6B;AAC7B;AACE;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACF,g4FAAC","file":"/Users/ami/Documents/prometheus/x12i/ai-tools/dist/index.cjs"}
1
+ {"version":3,"sources":["/Users/ami/Documents/prometheus/x12i/ai-tools/dist/index.cjs"],"names":[],"mappings":"AAAA,yGAA6B;AAC7B;AACE;AACF,wDAA6B;AAC7B;AACE;AACA;AACA;AACA;AACF,wDAA6B;AAC7B,gCAA6B;AAC7B,gCAA6B;AAC7B;AACE;AACF,wDAA6B;AAC7B;AACE;AACA;AACA;AACA;AACF,wDAA6B;AAC7B;AACE;AACA;AACF,wDAA6B;AAC7B;AACE;AACA;AACA;AACA;AACF,wDAA6B;AAC7B;AACE;AACA;AACF,wDAA6B;AAC7B;AACE;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACF,wDAA6B;AAC7B;AACE;AACA;AACA;AACA;AACA;AACA;AACF,wDAA6B;AAC7B;AACE;AACA;AACA;AACA;AACF,wDAA6B;AAC7B;AACE;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACF,wDAA6B;AAC7B,gCAA6B;AAC7B;AACE;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACF,guGAAC","file":"/Users/ami/Documents/prometheus/x12i/ai-tools/dist/index.cjs"}
package/dist/index.d.cts CHANGED
@@ -1,19 +1,14 @@
1
- export { AiCostResult, AiUsageInput, CostCalculator, CostCalculatorOptions } from './cost/index.cjs';
2
- export { A as AiModelsCatalogClient, a as AiModelsCatalogClientOptions } from './AiModelsCatalogClient-CNeqFiFs.cjs';
1
+ export { A as AiCostExtraction, a as AiCostResult, b as AiCostWarning, d as AiUsageInput, C as CostCalculator, e as CostCalculatorOptions, E as ExtractUsageInputOptions, f as ExtractUsageInputResult, M as MODEL_FIELD_PRIORITY, g as extractUsageInput, r as resolveUsageModel } from './resolveUsageModel-C_YmGR1M.cjs';
2
+ export { A as AiModelsCatalogClient, a as AiModelsCatalogClientOptions, L as LoadCatalogOptions, b as LoadedCatalogs, l as loadCatalogSources } from './AiModelsCatalogClient-B5FMI9gj.cjs';
3
+ import { h as ModelResolutionInput, i as ModelResolutionNotFound } from './types-BrzJWsTU.cjs';
4
+ export { A as AiModelPricing, a as AiModelRecord, b as AliasEntry, c as AliasFileSchema, d as AliasRegistry, e as AliasRegistryOptions, f as AliasValidationReport, M as ModelListFilters, g as ModelListResult, j as ModelResolutionResult, k as ModelResolutionSuccess, l as ModelResolverOptions, m as OpenRouterModelApi, n as OpenRouterModelsQuery, r as OpenRouterRoutingConfig, R as ResolutionStrategy, t as ResolvedModel, u as ResolvedModelRef, v as loadOpenRouterRoutingEnv, w as providerIdToEnvKeyPrefix, x as shouldDefaultRouteViaOpenRouter, y as vendorApiKeyEnvName } from './types-BrzJWsTU.cjs';
5
+ export { C as CatalogRefreshOptions, a as CatalogRefreshResult, c as CatalogVerifyOptions, d as CatalogVerifyReport, D as DEFAULT_CATALOG_CACHE_TTL_MS, e as DEFAULT_DIRECT_CATALOG_URL, f as DEFAULT_OPENROUTER_CATALOG_URL, i as invalidateCatalogLoadCache, l as loadCatalogSourcesCached, r as refreshAiModelsCatalog, h as resolveCatalogCacheTtlMs, v as verifyAiModelsCatalog } from './modelCache-CJftI-Ko.cjs';
3
6
  export { AiModelsService, AiModelsServiceOptions, REASONING_SUPPORTED_PARAMETERS, ReasoningModelInput, computeSupportsReasoning, countModels, filterModels, getModelInfo, hasReasoningPricing, isReasoningModel, normalizeOpenRouterModel, supportsReasoningParameter } from './models/index.cjs';
4
- export { A as AiModelPricing, a as AiModelRecord, M as ModelListFilters, b as ModelListResult, c as OpenRouterModelApi, d as OpenRouterModelsQuery } from './types-BYXnCvKx.cjs';
5
- export { AI_MODELS_CATALOG_ID, AI_MODELS_DESCRIPTOR, AI_TOOLS_APP_ID, CatalogSyncJobError, CatalogSyncJobOptions, CatalogSyncJobResult, CatalogVerifyOptions, CatalogVerifyReport, EnsureAiModelsCatalogOptions, PruneStaleCatalogModelsOptions, PruneStaleCatalogModelsResult, ensureAiModelsCatalog, pruneStaleCatalogModels, runAiModelsCatalogSync, verifyAiModelsCatalog } from './catalog/index.cjs';
6
- export { M as ModelNameResolver, O as OpenRouterSyncProvider, a as OpenRouterSyncProviderOptions, c as createModelNameResolver, i as isRoutedViaOpenRouter, r as resolveModel } from './modelNameResolver-D9V_GfUK.cjs';
7
- export { S as SyncOptions, a as SyncResult, s as syncAiModelsCatalog } from './syncAiModelsCatalog-CnXRLm2c.cjs';
7
+ export { M as ModelNameResolver, O as OpenRouterSyncProvider, a as OpenRouterSyncProviderOptions, c as createModelNameResolver, i as isRoutedViaOpenRouter, r as resolveModel } from './modelNameResolver-C5CSTGFF.cjs';
8
8
  export { AIToolbox, AiToolboxOptions, Fallback, FallbackChain, Guard, GuardConfig, RouteRule, Router, TrackResult, Tracker } from './toolbox/index.cjs';
9
- import { M as ModelResolutionInput, e as ModelResolutionNotFound } from './types-CX6QFNNy.cjs';
10
- export { A as AliasEntry, a as AliasFileSchema, b as AliasRegistry, c as AliasRegistryOptions, d as AliasValidationReport, f as ModelResolutionResult, g as ModelResolutionSuccess, h as ModelResolverOptions, O as OpenRouterRoutingConfig, R as ResolutionStrategy, i as ResolvedModel, j as ResolvedModelRef, l as loadOpenRouterRoutingEnv, p as providerIdToEnvKeyPrefix, s as shouldDefaultRouteViaOpenRouter, v as vendorApiKeyEnvName } from './types-CX6QFNNy.cjs';
11
9
  export { AliasResolver, AliasResolverOptions } from './aliases/index.cjs';
12
- import '@x12i/catalox';
13
- import 'firebase-admin/firestore';
14
- import './upsertAiModelRecord-CjY-sny0.cjs';
15
10
 
16
- type AiToolsErrorCode = "MODEL_NOT_FOUND" | "SYNC_FETCH_FAILED" | "SYNC_UPSERT_FAILED" | "CATALOG_BOOTSTRAP_FAILED" | "COST_CALCULATION_FAILED" | "INVALID_USAGE_INPUT" | "OPENROUTER_AUTH_FAILED" | "OPENROUTER_MODELS_FETCH_FAILED" | "CACHE_READ_ERROR" | "ALIAS_NOT_FOUND" | "ALIAS_INVALID_NAME" | "ALIAS_CONFLICT" | "ALIAS_FILE_PARSE_ERROR" | "ALIAS_FILE_WRITE_ERROR";
11
+ type AiToolsErrorCode = "MODEL_NOT_FOUND" | "SYNC_FETCH_FAILED" | "SYNC_UPSERT_FAILED" | "COST_CALCULATION_FAILED" | "COST_UNKNOWN_MODEL" | "INVALID_USAGE_INPUT" | "OPENROUTER_AUTH_FAILED" | "OPENROUTER_MODELS_FETCH_FAILED" | "CACHE_READ_ERROR" | "ALIAS_NOT_FOUND" | "ALIAS_INVALID_NAME" | "ALIAS_CONFLICT" | "ALIAS_FILE_PARSE_ERROR" | "ALIAS_FILE_WRITE_ERROR";
17
12
  declare class AiToolsError extends Error {
18
13
  readonly code: AiToolsErrorCode;
19
14
  readonly cause?: unknown | undefined;
@@ -48,5 +43,10 @@ declare class SyncError extends AiToolsError {
48
43
  declare class CostCalculationError extends AiToolsError {
49
44
  constructor(message: string, cause?: unknown);
50
45
  }
46
+ declare class UnknownModelCostError extends AiToolsError {
47
+ readonly model: string;
48
+ readonly provider: string;
49
+ constructor(model: string, provider: string);
50
+ }
51
51
 
52
- export { AiToolsError, type AiToolsErrorCode, AliasConflictError, AliasFileParseError, AliasFileWriteError, AliasInvalidNameError, AliasNotFoundError, CostCalculationError, ModelNotFoundError, ModelResolutionError, ModelResolutionInput, SyncError };
52
+ export { AiToolsError, type AiToolsErrorCode, AliasConflictError, AliasFileParseError, AliasFileWriteError, AliasInvalidNameError, AliasNotFoundError, CostCalculationError, ModelNotFoundError, ModelResolutionError, ModelResolutionInput, SyncError, UnknownModelCostError };
package/dist/index.d.ts CHANGED
@@ -1,19 +1,14 @@
1
- export { AiCostResult, AiUsageInput, CostCalculator, CostCalculatorOptions } from './cost/index.js';
2
- export { A as AiModelsCatalogClient, a as AiModelsCatalogClientOptions } from './AiModelsCatalogClient-nwFoEaqL.js';
1
+ export { A as AiCostExtraction, a as AiCostResult, b as AiCostWarning, d as AiUsageInput, C as CostCalculator, e as CostCalculatorOptions, E as ExtractUsageInputOptions, f as ExtractUsageInputResult, M as MODEL_FIELD_PRIORITY, g as extractUsageInput, r as resolveUsageModel } from './resolveUsageModel-BFwf80Hz.js';
2
+ export { A as AiModelsCatalogClient, a as AiModelsCatalogClientOptions, L as LoadCatalogOptions, b as LoadedCatalogs, l as loadCatalogSources } from './AiModelsCatalogClient-CPPNI6Ry.js';
3
+ import { h as ModelResolutionInput, i as ModelResolutionNotFound } from './types-BrzJWsTU.js';
4
+ export { A as AiModelPricing, a as AiModelRecord, b as AliasEntry, c as AliasFileSchema, d as AliasRegistry, e as AliasRegistryOptions, f as AliasValidationReport, M as ModelListFilters, g as ModelListResult, j as ModelResolutionResult, k as ModelResolutionSuccess, l as ModelResolverOptions, m as OpenRouterModelApi, n as OpenRouterModelsQuery, r as OpenRouterRoutingConfig, R as ResolutionStrategy, t as ResolvedModel, u as ResolvedModelRef, v as loadOpenRouterRoutingEnv, w as providerIdToEnvKeyPrefix, x as shouldDefaultRouteViaOpenRouter, y as vendorApiKeyEnvName } from './types-BrzJWsTU.js';
5
+ export { C as CatalogRefreshOptions, a as CatalogRefreshResult, c as CatalogVerifyOptions, d as CatalogVerifyReport, D as DEFAULT_CATALOG_CACHE_TTL_MS, e as DEFAULT_DIRECT_CATALOG_URL, f as DEFAULT_OPENROUTER_CATALOG_URL, i as invalidateCatalogLoadCache, l as loadCatalogSourcesCached, r as refreshAiModelsCatalog, h as resolveCatalogCacheTtlMs, v as verifyAiModelsCatalog } from './modelCache-BzRn6t_C.js';
3
6
  export { AiModelsService, AiModelsServiceOptions, REASONING_SUPPORTED_PARAMETERS, ReasoningModelInput, computeSupportsReasoning, countModels, filterModels, getModelInfo, hasReasoningPricing, isReasoningModel, normalizeOpenRouterModel, supportsReasoningParameter } from './models/index.js';
4
- export { A as AiModelPricing, a as AiModelRecord, M as ModelListFilters, b as ModelListResult, c as OpenRouterModelApi, d as OpenRouterModelsQuery } from './types-BYXnCvKx.js';
5
- export { AI_MODELS_CATALOG_ID, AI_MODELS_DESCRIPTOR, AI_TOOLS_APP_ID, CatalogSyncJobError, CatalogSyncJobOptions, CatalogSyncJobResult, CatalogVerifyOptions, CatalogVerifyReport, EnsureAiModelsCatalogOptions, PruneStaleCatalogModelsOptions, PruneStaleCatalogModelsResult, ensureAiModelsCatalog, pruneStaleCatalogModels, runAiModelsCatalogSync, verifyAiModelsCatalog } from './catalog/index.js';
6
- export { M as ModelNameResolver, O as OpenRouterSyncProvider, a as OpenRouterSyncProviderOptions, c as createModelNameResolver, i as isRoutedViaOpenRouter, r as resolveModel } from './modelNameResolver-DqFt7g6W.js';
7
- export { S as SyncOptions, a as SyncResult, s as syncAiModelsCatalog } from './syncAiModelsCatalog-DpkN_w7S.js';
7
+ export { M as ModelNameResolver, O as OpenRouterSyncProvider, a as OpenRouterSyncProviderOptions, c as createModelNameResolver, i as isRoutedViaOpenRouter, r as resolveModel } from './modelNameResolver-5XkBMctP.js';
8
8
  export { AIToolbox, AiToolboxOptions, Fallback, FallbackChain, Guard, GuardConfig, RouteRule, Router, TrackResult, Tracker } from './toolbox/index.js';
9
- import { M as ModelResolutionInput, e as ModelResolutionNotFound } from './types-CuiPDcVs.js';
10
- export { A as AliasEntry, a as AliasFileSchema, b as AliasRegistry, c as AliasRegistryOptions, d as AliasValidationReport, f as ModelResolutionResult, g as ModelResolutionSuccess, h as ModelResolverOptions, O as OpenRouterRoutingConfig, R as ResolutionStrategy, i as ResolvedModel, j as ResolvedModelRef, l as loadOpenRouterRoutingEnv, p as providerIdToEnvKeyPrefix, s as shouldDefaultRouteViaOpenRouter, v as vendorApiKeyEnvName } from './types-CuiPDcVs.js';
11
9
  export { AliasResolver, AliasResolverOptions } from './aliases/index.js';
12
- import '@x12i/catalox';
13
- import 'firebase-admin/firestore';
14
- import './upsertAiModelRecord-C831wOIF.js';
15
10
 
16
- type AiToolsErrorCode = "MODEL_NOT_FOUND" | "SYNC_FETCH_FAILED" | "SYNC_UPSERT_FAILED" | "CATALOG_BOOTSTRAP_FAILED" | "COST_CALCULATION_FAILED" | "INVALID_USAGE_INPUT" | "OPENROUTER_AUTH_FAILED" | "OPENROUTER_MODELS_FETCH_FAILED" | "CACHE_READ_ERROR" | "ALIAS_NOT_FOUND" | "ALIAS_INVALID_NAME" | "ALIAS_CONFLICT" | "ALIAS_FILE_PARSE_ERROR" | "ALIAS_FILE_WRITE_ERROR";
11
+ type AiToolsErrorCode = "MODEL_NOT_FOUND" | "SYNC_FETCH_FAILED" | "SYNC_UPSERT_FAILED" | "COST_CALCULATION_FAILED" | "COST_UNKNOWN_MODEL" | "INVALID_USAGE_INPUT" | "OPENROUTER_AUTH_FAILED" | "OPENROUTER_MODELS_FETCH_FAILED" | "CACHE_READ_ERROR" | "ALIAS_NOT_FOUND" | "ALIAS_INVALID_NAME" | "ALIAS_CONFLICT" | "ALIAS_FILE_PARSE_ERROR" | "ALIAS_FILE_WRITE_ERROR";
17
12
  declare class AiToolsError extends Error {
18
13
  readonly code: AiToolsErrorCode;
19
14
  readonly cause?: unknown | undefined;
@@ -48,5 +43,10 @@ declare class SyncError extends AiToolsError {
48
43
  declare class CostCalculationError extends AiToolsError {
49
44
  constructor(message: string, cause?: unknown);
50
45
  }
46
+ declare class UnknownModelCostError extends AiToolsError {
47
+ readonly model: string;
48
+ readonly provider: string;
49
+ constructor(model: string, provider: string);
50
+ }
51
51
 
52
- export { AiToolsError, type AiToolsErrorCode, AliasConflictError, AliasFileParseError, AliasFileWriteError, AliasInvalidNameError, AliasNotFoundError, CostCalculationError, ModelNotFoundError, ModelResolutionError, ModelResolutionInput, SyncError };
52
+ export { AiToolsError, type AiToolsErrorCode, AliasConflictError, AliasFileParseError, AliasFileWriteError, AliasInvalidNameError, AliasNotFoundError, CostCalculationError, ModelNotFoundError, ModelResolutionError, ModelResolutionInput, SyncError, UnknownModelCostError };
package/dist/index.js CHANGED
@@ -1,60 +1,62 @@
1
- import {
2
- CostCalculator
3
- } from "./chunk-YHO57D2V.js";
1
+ import "./chunk-56R4XA2S.js";
4
2
  import {
5
3
  AIToolbox
6
4
  } from "./chunk-XRBZQQQU.js";
7
5
  import {
6
+ OpenRouterSyncProvider,
8
7
  createModelNameResolver,
9
8
  isRoutedViaOpenRouter,
10
9
  resolveModel
11
- } from "./chunk-G2G4KSC5.js";
10
+ } from "./chunk-6BQBKROR.js";
12
11
  import "./chunk-KHODXGPV.js";
12
+ import "./chunk-COK34C6P.js";
13
+ import {
14
+ normalizeOpenRouterModel
15
+ } from "./chunk-SIH4GPV4.js";
16
+ import {
17
+ CostCalculator,
18
+ MODEL_FIELD_PRIORITY,
19
+ extractUsageInput,
20
+ resolveUsageModel
21
+ } from "./chunk-U2YDDUVP.js";
13
22
  import {
14
23
  AliasRegistry,
15
24
  AliasResolver
16
- } from "./chunk-O2A6OVEH.js";
17
- import "./chunk-COK34C6P.js";
25
+ } from "./chunk-ANVONYJF.js";
18
26
  import {
19
27
  AiModelsService,
20
28
  countModels,
21
29
  filterModels,
22
30
  getModelInfo
23
- } from "./chunk-4NAY6HRP.js";
24
- import "./chunk-M5TMA73F.js";
31
+ } from "./chunk-VJHLO2R3.js";
25
32
  import {
26
- CatalogSyncJobError,
27
- pruneStaleCatalogModels,
28
- runAiModelsCatalogSync,
33
+ refreshAiModelsCatalog,
29
34
  verifyAiModelsCatalog
30
- } from "./chunk-MX3AMQFC.js";
35
+ } from "./chunk-AB5GNXJ4.js";
31
36
  import {
32
- OpenRouterSyncProvider,
33
- ensureAiModelsCatalog,
34
- syncAiModelsCatalog
35
- } from "./chunk-VRFVF5RH.js";
36
- import "./chunk-HYGXZY25.js";
37
+ AiModelsCatalogClient,
38
+ DEFAULT_CATALOG_CACHE_TTL_MS,
39
+ DEFAULT_DIRECT_CATALOG_URL,
40
+ DEFAULT_OPENROUTER_CATALOG_URL,
41
+ invalidateCatalogLoadCache,
42
+ loadCatalogSources,
43
+ loadCatalogSourcesCached,
44
+ resolveCatalogCacheTtlMs
45
+ } from "./chunk-OPN6BGNH.js";
37
46
  import {
47
+ ModelNameResolver,
38
48
  REASONING_SUPPORTED_PARAMETERS,
39
49
  computeSupportsReasoning,
40
50
  hasReasoningPricing,
41
51
  isReasoningModel,
42
- normalizeOpenRouterModel,
43
52
  supportsReasoningParameter
44
- } from "./chunk-6QGDZTGH.js";
53
+ } from "./chunk-EYHMQVAL.js";
45
54
  import {
46
- AiModelsCatalogClient
47
- } from "./chunk-KQOALKKX.js";
48
- import {
49
- AI_MODELS_CATALOG_ID,
50
- AI_MODELS_DESCRIPTOR,
51
- AI_TOOLS_APP_ID,
52
- ModelNameResolver,
53
55
  loadOpenRouterRoutingEnv,
54
56
  providerIdToEnvKeyPrefix,
55
57
  shouldDefaultRouteViaOpenRouter,
56
58
  vendorApiKeyEnvName
57
- } from "./chunk-DJ5SWJDY.js";
59
+ } from "./chunk-B3V2EHRY.js";
58
60
  import {
59
61
  AiToolsError,
60
62
  AliasConflictError,
@@ -65,13 +67,11 @@ import {
65
67
  CostCalculationError,
66
68
  ModelNotFoundError,
67
69
  ModelResolutionError,
68
- SyncError
69
- } from "./chunk-AJEKEWWB.js";
70
+ SyncError,
71
+ UnknownModelCostError
72
+ } from "./chunk-2PTCWPHV.js";
70
73
  export {
71
74
  AIToolbox,
72
- AI_MODELS_CATALOG_ID,
73
- AI_MODELS_DESCRIPTOR,
74
- AI_TOOLS_APP_ID,
75
75
  AiModelsCatalogClient,
76
76
  AiModelsService,
77
77
  AiToolsError,
@@ -82,33 +82,40 @@ export {
82
82
  AliasNotFoundError,
83
83
  AliasRegistry,
84
84
  AliasResolver,
85
- CatalogSyncJobError,
86
85
  CostCalculationError,
87
86
  CostCalculator,
87
+ DEFAULT_CATALOG_CACHE_TTL_MS,
88
+ DEFAULT_DIRECT_CATALOG_URL,
89
+ DEFAULT_OPENROUTER_CATALOG_URL,
90
+ MODEL_FIELD_PRIORITY,
88
91
  ModelNameResolver,
89
92
  ModelNotFoundError,
90
93
  ModelResolutionError,
91
94
  OpenRouterSyncProvider,
92
95
  REASONING_SUPPORTED_PARAMETERS,
93
96
  SyncError,
97
+ UnknownModelCostError,
94
98
  computeSupportsReasoning,
95
99
  countModels,
96
100
  createModelNameResolver,
97
- ensureAiModelsCatalog,
101
+ extractUsageInput,
98
102
  filterModels,
99
103
  getModelInfo,
100
104
  hasReasoningPricing,
105
+ invalidateCatalogLoadCache,
101
106
  isReasoningModel,
102
107
  isRoutedViaOpenRouter,
108
+ loadCatalogSources,
109
+ loadCatalogSourcesCached,
103
110
  loadOpenRouterRoutingEnv,
104
111
  normalizeOpenRouterModel,
105
112
  providerIdToEnvKeyPrefix,
106
- pruneStaleCatalogModels,
113
+ refreshAiModelsCatalog,
114
+ resolveCatalogCacheTtlMs,
107
115
  resolveModel,
108
- runAiModelsCatalogSync,
116
+ resolveUsageModel,
109
117
  shouldDefaultRouteViaOpenRouter,
110
118
  supportsReasoningParameter,
111
- syncAiModelsCatalog,
112
119
  vendorApiKeyEnvName,
113
120
  verifyAiModelsCatalog
114
121
  };
@@ -0,0 +1,113 @@
1
+ import { L as LoadCatalogOptions, b as LoadedCatalogs } from './AiModelsCatalogClient-CPPNI6Ry.js';
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 };