cost-katana 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 (215) hide show
  1. package/LICENSE +21 -0
  2. package/README.md +550 -0
  3. package/dist/analyzers/cost-analyzer.d.ts +28 -0
  4. package/dist/analyzers/cost-analyzer.d.ts.map +1 -0
  5. package/dist/analyzers/cost-analyzer.js +165 -0
  6. package/dist/analyzers/cost-analyzer.js.map +1 -0
  7. package/dist/analyzers/token-counter.d.ts +21 -0
  8. package/dist/analyzers/token-counter.d.ts.map +1 -0
  9. package/dist/analyzers/token-counter.js +100 -0
  10. package/dist/analyzers/token-counter.js.map +1 -0
  11. package/dist/analyzers/usage-tracker.d.ts +29 -0
  12. package/dist/analyzers/usage-tracker.d.ts.map +1 -0
  13. package/dist/analyzers/usage-tracker.js +142 -0
  14. package/dist/analyzers/usage-tracker.js.map +1 -0
  15. package/dist/config/default.d.ts +45 -0
  16. package/dist/config/default.d.ts.map +1 -0
  17. package/dist/config/default.js +103 -0
  18. package/dist/config/default.js.map +1 -0
  19. package/dist/config/model-types.d.ts +45 -0
  20. package/dist/config/model-types.d.ts.map +1 -0
  21. package/dist/config/model-types.js +101 -0
  22. package/dist/config/model-types.js.map +1 -0
  23. package/dist/config/pricing/anthropic.d.ts +3 -0
  24. package/dist/config/pricing/anthropic.d.ts.map +1 -0
  25. package/dist/config/pricing/anthropic.js +191 -0
  26. package/dist/config/pricing/anthropic.js.map +1 -0
  27. package/dist/config/pricing/aws-bedrock.d.ts +3 -0
  28. package/dist/config/pricing/aws-bedrock.d.ts.map +1 -0
  29. package/dist/config/pricing/aws-bedrock.js +747 -0
  30. package/dist/config/pricing/aws-bedrock.js.map +1 -0
  31. package/dist/config/pricing/cohere.d.ts +3 -0
  32. package/dist/config/pricing/cohere.d.ts.map +1 -0
  33. package/dist/config/pricing/cohere.js +371 -0
  34. package/dist/config/pricing/cohere.js.map +1 -0
  35. package/dist/config/pricing/deepseek.d.ts +3 -0
  36. package/dist/config/pricing/deepseek.d.ts.map +1 -0
  37. package/dist/config/pricing/deepseek.js +102 -0
  38. package/dist/config/pricing/deepseek.js.map +1 -0
  39. package/dist/config/pricing/google.d.ts +3 -0
  40. package/dist/config/pricing/google.d.ts.map +1 -0
  41. package/dist/config/pricing/google.js +671 -0
  42. package/dist/config/pricing/google.js.map +1 -0
  43. package/dist/config/pricing/grok.d.ts +3 -0
  44. package/dist/config/pricing/grok.d.ts.map +1 -0
  45. package/dist/config/pricing/grok.js +59 -0
  46. package/dist/config/pricing/grok.js.map +1 -0
  47. package/dist/config/pricing/index.d.ts +11 -0
  48. package/dist/config/pricing/index.d.ts.map +1 -0
  49. package/dist/config/pricing/index.js +24 -0
  50. package/dist/config/pricing/index.js.map +1 -0
  51. package/dist/config/pricing/meta.d.ts +3 -0
  52. package/dist/config/pricing/meta.d.ts.map +1 -0
  53. package/dist/config/pricing/meta.js +69 -0
  54. package/dist/config/pricing/meta.js.map +1 -0
  55. package/dist/config/pricing/mistral.d.ts +3 -0
  56. package/dist/config/pricing/mistral.d.ts.map +1 -0
  57. package/dist/config/pricing/mistral.js +690 -0
  58. package/dist/config/pricing/mistral.js.map +1 -0
  59. package/dist/config/pricing/openai.d.ts +3 -0
  60. package/dist/config/pricing/openai.d.ts.map +1 -0
  61. package/dist/config/pricing/openai.js +475 -0
  62. package/dist/config/pricing/openai.js.map +1 -0
  63. package/dist/config/pricing/xai.d.ts +3 -0
  64. package/dist/config/pricing/xai.d.ts.map +1 -0
  65. package/dist/config/pricing/xai.js +141 -0
  66. package/dist/config/pricing/xai.js.map +1 -0
  67. package/dist/config/pricing-data.d.ts +55 -0
  68. package/dist/config/pricing-data.d.ts.map +1 -0
  69. package/dist/config/pricing-data.js +179 -0
  70. package/dist/config/pricing-data.js.map +1 -0
  71. package/dist/feedback/client.d.ts +14 -0
  72. package/dist/feedback/client.d.ts.map +1 -0
  73. package/dist/feedback/client.js +95 -0
  74. package/dist/feedback/client.js.map +1 -0
  75. package/dist/feedback/index.d.ts +3 -0
  76. package/dist/feedback/index.d.ts.map +1 -0
  77. package/dist/feedback/index.js +21 -0
  78. package/dist/feedback/index.js.map +1 -0
  79. package/dist/gateway/client.d.ts +77 -0
  80. package/dist/gateway/client.d.ts.map +1 -0
  81. package/dist/gateway/client.js +630 -0
  82. package/dist/gateway/client.js.map +1 -0
  83. package/dist/gateway/index.d.ts +9 -0
  84. package/dist/gateway/index.d.ts.map +1 -0
  85. package/dist/gateway/index.js +66 -0
  86. package/dist/gateway/index.js.map +1 -0
  87. package/dist/index.d.ts +183 -0
  88. package/dist/index.d.ts.map +1 -0
  89. package/dist/index.js +1438 -0
  90. package/dist/index.js.map +1 -0
  91. package/dist/optimizers/context-trimmer.d.ts +18 -0
  92. package/dist/optimizers/context-trimmer.d.ts.map +1 -0
  93. package/dist/optimizers/context-trimmer.js +221 -0
  94. package/dist/optimizers/context-trimmer.js.map +1 -0
  95. package/dist/optimizers/index.d.ts +6 -0
  96. package/dist/optimizers/index.d.ts.map +1 -0
  97. package/dist/optimizers/index.js +14 -0
  98. package/dist/optimizers/index.js.map +1 -0
  99. package/dist/optimizers/prompt-compressor.d.ts +15 -0
  100. package/dist/optimizers/prompt-compressor.d.ts.map +1 -0
  101. package/dist/optimizers/prompt-compressor.js +268 -0
  102. package/dist/optimizers/prompt-compressor.js.map +1 -0
  103. package/dist/optimizers/prompt-optimizer.d.ts +29 -0
  104. package/dist/optimizers/prompt-optimizer.d.ts.map +1 -0
  105. package/dist/optimizers/prompt-optimizer.js +381 -0
  106. package/dist/optimizers/prompt-optimizer.js.map +1 -0
  107. package/dist/optimizers/request-fusion.d.ts +34 -0
  108. package/dist/optimizers/request-fusion.d.ts.map +1 -0
  109. package/dist/optimizers/request-fusion.js +284 -0
  110. package/dist/optimizers/request-fusion.js.map +1 -0
  111. package/dist/optimizers/suggestion-engine.d.ts +29 -0
  112. package/dist/optimizers/suggestion-engine.d.ts.map +1 -0
  113. package/dist/optimizers/suggestion-engine.js +234 -0
  114. package/dist/optimizers/suggestion-engine.js.map +1 -0
  115. package/dist/providers/anthropic.d.ts +23 -0
  116. package/dist/providers/anthropic.d.ts.map +1 -0
  117. package/dist/providers/anthropic.js +108 -0
  118. package/dist/providers/anthropic.js.map +1 -0
  119. package/dist/providers/azure.d.ts +15 -0
  120. package/dist/providers/azure.d.ts.map +1 -0
  121. package/dist/providers/azure.js +115 -0
  122. package/dist/providers/azure.js.map +1 -0
  123. package/dist/providers/base.d.ts +20 -0
  124. package/dist/providers/base.d.ts.map +1 -0
  125. package/dist/providers/base.js +67 -0
  126. package/dist/providers/base.js.map +1 -0
  127. package/dist/providers/bedrock.d.ts +23 -0
  128. package/dist/providers/bedrock.d.ts.map +1 -0
  129. package/dist/providers/bedrock.js +247 -0
  130. package/dist/providers/bedrock.js.map +1 -0
  131. package/dist/providers/cohere.d.ts +17 -0
  132. package/dist/providers/cohere.d.ts.map +1 -0
  133. package/dist/providers/cohere.js +122 -0
  134. package/dist/providers/cohere.js.map +1 -0
  135. package/dist/providers/deepseek.d.ts +6 -0
  136. package/dist/providers/deepseek.d.ts.map +1 -0
  137. package/dist/providers/deepseek.js +17 -0
  138. package/dist/providers/deepseek.js.map +1 -0
  139. package/dist/providers/google.d.ts +17 -0
  140. package/dist/providers/google.d.ts.map +1 -0
  141. package/dist/providers/google.js +141 -0
  142. package/dist/providers/google.js.map +1 -0
  143. package/dist/providers/index.d.ts +13 -0
  144. package/dist/providers/index.d.ts.map +1 -0
  145. package/dist/providers/index.js +61 -0
  146. package/dist/providers/index.js.map +1 -0
  147. package/dist/providers/openai.d.ts +16 -0
  148. package/dist/providers/openai.d.ts.map +1 -0
  149. package/dist/providers/openai.js +194 -0
  150. package/dist/providers/openai.js.map +1 -0
  151. package/dist/trace/client.d.ts +48 -0
  152. package/dist/trace/client.d.ts.map +1 -0
  153. package/dist/trace/client.js +130 -0
  154. package/dist/trace/client.js.map +1 -0
  155. package/dist/trace/index.d.ts +7 -0
  156. package/dist/trace/index.d.ts.map +1 -0
  157. package/dist/trace/index.js +30 -0
  158. package/dist/trace/index.js.map +1 -0
  159. package/dist/trace/middleware.d.ts +70 -0
  160. package/dist/trace/middleware.d.ts.map +1 -0
  161. package/dist/trace/middleware.js +104 -0
  162. package/dist/trace/middleware.js.map +1 -0
  163. package/dist/trace/providers.d.ts +83 -0
  164. package/dist/trace/providers.d.ts.map +1 -0
  165. package/dist/trace/providers.js +340 -0
  166. package/dist/trace/providers.js.map +1 -0
  167. package/dist/trace/service.d.ts +59 -0
  168. package/dist/trace/service.d.ts.map +1 -0
  169. package/dist/trace/service.js +425 -0
  170. package/dist/trace/service.js.map +1 -0
  171. package/dist/trace/types.d.ts +102 -0
  172. package/dist/trace/types.d.ts.map +1 -0
  173. package/dist/trace/types.js +3 -0
  174. package/dist/trace/types.js.map +1 -0
  175. package/dist/types/failover.d.ts +29 -0
  176. package/dist/types/failover.d.ts.map +1 -0
  177. package/dist/types/failover.js +3 -0
  178. package/dist/types/failover.js.map +1 -0
  179. package/dist/types/feedback.d.ts +69 -0
  180. package/dist/types/feedback.d.ts.map +1 -0
  181. package/dist/types/feedback.js +3 -0
  182. package/dist/types/feedback.js.map +1 -0
  183. package/dist/types/gateway.d.ts +303 -0
  184. package/dist/types/gateway.d.ts.map +1 -0
  185. package/dist/types/gateway.js +3 -0
  186. package/dist/types/gateway.js.map +1 -0
  187. package/dist/types/index.d.ts +242 -0
  188. package/dist/types/index.d.ts.map +1 -0
  189. package/dist/types/index.js +37 -0
  190. package/dist/types/index.js.map +1 -0
  191. package/dist/types/models.d.ts +7 -0
  192. package/dist/types/models.d.ts.map +1 -0
  193. package/dist/types/models.js +3838 -0
  194. package/dist/types/models.js.map +1 -0
  195. package/dist/types/providers.d.ts +128 -0
  196. package/dist/types/providers.d.ts.map +1 -0
  197. package/dist/types/providers.js +10 -0
  198. package/dist/types/providers.js.map +1 -0
  199. package/dist/types/simplified.d.ts +65 -0
  200. package/dist/types/simplified.d.ts.map +1 -0
  201. package/dist/types/simplified.js +4 -0
  202. package/dist/types/simplified.js.map +1 -0
  203. package/dist/utils/logger.d.ts +35 -0
  204. package/dist/utils/logger.d.ts.map +1 -0
  205. package/dist/utils/logger.js +154 -0
  206. package/dist/utils/logger.js.map +1 -0
  207. package/dist/utils/pricing.d.ts +30 -0
  208. package/dist/utils/pricing.d.ts.map +1 -0
  209. package/dist/utils/pricing.js +148 -0
  210. package/dist/utils/pricing.js.map +1 -0
  211. package/dist/utils/validators.d.ts +10 -0
  212. package/dist/utils/validators.d.ts.map +1 -0
  213. package/dist/utils/validators.js +133 -0
  214. package/dist/utils/validators.js.map +1 -0
  215. package/package.json +92 -0
@@ -0,0 +1,165 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.CostAnalyzer = void 0;
4
+ const types_1 = require("../types");
5
+ class CostAnalyzer {
6
+ constructor(initialData) {
7
+ this.usageData = [];
8
+ if (initialData) {
9
+ this.usageData = initialData;
10
+ }
11
+ }
12
+ addUsageData(data) {
13
+ if (Array.isArray(data)) {
14
+ this.usageData.push(...data);
15
+ }
16
+ else {
17
+ this.usageData.push(data);
18
+ }
19
+ }
20
+ clearData() {
21
+ this.usageData = [];
22
+ }
23
+ getData() {
24
+ return [...this.usageData];
25
+ }
26
+ analyzeUsage(startDate, endDate, userId) {
27
+ const filteredData = this.filterData(startDate, endDate, userId);
28
+ if (filteredData.length === 0) {
29
+ return this.getEmptyAnalytics();
30
+ }
31
+ const totalCost = this.calculateTotalCost(filteredData);
32
+ const totalTokens = this.calculateTotalTokens(filteredData);
33
+ const averageTokensPerRequest = totalTokens / filteredData.length;
34
+ const mostUsedModels = this.getMostUsedModels(filteredData);
35
+ const costByProvider = this.getCostByProvider(filteredData);
36
+ const usageOverTime = this.getUsageOverTime(filteredData);
37
+ const topExpensivePrompts = this.getTopExpensivePrompts(filteredData);
38
+ return {
39
+ totalCost,
40
+ totalTokens,
41
+ averageTokensPerRequest,
42
+ mostUsedModels,
43
+ costByProvider,
44
+ usageOverTime,
45
+ topExpensivePrompts
46
+ };
47
+ }
48
+ filterData(_startDate, _endDate, _userId) {
49
+ return this.usageData;
50
+ }
51
+ calculateTotalCost(data) {
52
+ return data.reduce((sum, item) => sum + item.estimatedCost, 0);
53
+ }
54
+ calculateTotalTokens(data) {
55
+ return data.reduce((sum, item) => sum + item.totalTokens, 0);
56
+ }
57
+ getMostUsedModels(data) {
58
+ const modelMap = new Map();
59
+ data.forEach(item => {
60
+ const key = `${item.provider}:${item.model}`;
61
+ const existing = modelMap.get(key) || {
62
+ model: item.model,
63
+ provider: item.provider,
64
+ requestCount: 0,
65
+ totalTokens: 0,
66
+ totalCost: 0,
67
+ averageCostPerRequest: 0
68
+ };
69
+ existing.requestCount++;
70
+ existing.totalTokens += item.totalTokens;
71
+ existing.totalCost += item.estimatedCost;
72
+ existing.averageCostPerRequest = existing.totalCost / existing.requestCount;
73
+ modelMap.set(key, existing);
74
+ });
75
+ return Array.from(modelMap.values()).sort((a, b) => b.requestCount - a.requestCount);
76
+ }
77
+ getCostByProvider(data) {
78
+ const providerMap = new Map();
79
+ let totalCost = 0;
80
+ data.forEach(item => {
81
+ const current = providerMap.get(item.provider) || 0;
82
+ providerMap.set(item.provider, current + item.estimatedCost);
83
+ totalCost += item.estimatedCost;
84
+ });
85
+ return Array.from(providerMap.entries())
86
+ .map(([provider, cost]) => ({
87
+ provider,
88
+ totalCost: cost,
89
+ percentage: (cost / totalCost) * 100
90
+ }))
91
+ .sort((a, b) => b.totalCost - a.totalCost);
92
+ }
93
+ getUsageOverTime(_data) {
94
+ return [];
95
+ }
96
+ getTopExpensivePrompts(data, limit = 10) {
97
+ return data
98
+ .map(item => ({
99
+ prompt: item.prompt,
100
+ cost: item.estimatedCost,
101
+ tokens: item.totalTokens,
102
+ model: item.model,
103
+ timestamp: new Date()
104
+ }))
105
+ .sort((a, b) => b.cost - a.cost)
106
+ .slice(0, limit);
107
+ }
108
+ getEmptyAnalytics() {
109
+ return {
110
+ totalCost: 0,
111
+ totalTokens: 0,
112
+ averageTokensPerRequest: 0,
113
+ mostUsedModels: [],
114
+ costByProvider: [],
115
+ usageOverTime: [],
116
+ topExpensivePrompts: []
117
+ };
118
+ }
119
+ getCostProjection(days) {
120
+ if (this.usageData.length === 0)
121
+ return 0;
122
+ const totalCost = this.calculateTotalCost(this.usageData);
123
+ const averageCostPerRequest = totalCost / this.usageData.length;
124
+ const estimatedDailyCost = averageCostPerRequest * 100;
125
+ return estimatedDailyCost * days;
126
+ }
127
+ getOptimizationOpportunities() {
128
+ const modelUsage = this.getMostUsedModels(this.usageData);
129
+ const opportunities = [];
130
+ for (const usage of modelUsage) {
131
+ if (usage.provider === types_1.AIProvider.OpenAI && usage.model === 'gpt-4') {
132
+ const gpt35Cost = usage.totalCost * 0.05;
133
+ opportunities.push({
134
+ provider: usage.provider,
135
+ model: usage.model,
136
+ currentCost: usage.totalCost,
137
+ optimizedCost: gpt35Cost,
138
+ savings: usage.totalCost - gpt35Cost,
139
+ recommendation: 'Consider using GPT-3.5-turbo for non-critical tasks'
140
+ });
141
+ }
142
+ if (usage.averageCostPerRequest > 0.1) {
143
+ opportunities.push({
144
+ provider: usage.provider,
145
+ model: usage.model,
146
+ currentCost: usage.totalCost,
147
+ optimizedCost: usage.totalCost * 0.7,
148
+ savings: usage.totalCost * 0.3,
149
+ recommendation: 'Optimize prompts to reduce token usage'
150
+ });
151
+ }
152
+ }
153
+ return opportunities.sort((a, b) => b.savings - a.savings);
154
+ }
155
+ getAnomalies(threshold = 2) {
156
+ if (this.usageData.length < 10)
157
+ return [];
158
+ const costs = this.usageData.map(d => d.estimatedCost);
159
+ const mean = costs.reduce((a, b) => a + b, 0) / costs.length;
160
+ const stdDev = Math.sqrt(costs.reduce((sq, n) => sq + Math.pow(n - mean, 2), 0) / costs.length);
161
+ return this.usageData.filter(data => Math.abs(data.estimatedCost - mean) > threshold * stdDev);
162
+ }
163
+ }
164
+ exports.CostAnalyzer = CostAnalyzer;
165
+ //# sourceMappingURL=cost-analyzer.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"cost-analyzer.js","sourceRoot":"","sources":["../../src/analyzers/cost-analyzer.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,21 @@
1
+ import { AIProvider } from '../types';
2
+ export declare class TokenCounter {
3
+ static countTokens(text: string, provider: AIProvider, _model: string): number;
4
+ private static countOpenAITokens;
5
+ private static countClaudeTokens;
6
+ private static countGoogleTokens;
7
+ private static countCohereTokens;
8
+ private static countGenericTokens;
9
+ static countConversationTokens(messages: Array<{
10
+ role: string;
11
+ content: string;
12
+ }>, provider: AIProvider, model: string): number;
13
+ static splitTextByTokens(text: string, maxTokens: number, provider: AIProvider, model: string, overlap?: number): string[];
14
+ static estimateOptimizationSavings(originalPrompt: string, optimizedPrompt: string, provider: AIProvider, model: string): {
15
+ originalTokens: number;
16
+ optimizedTokens: number;
17
+ savedTokens: number;
18
+ savingsPercentage: number;
19
+ };
20
+ }
21
+ //# sourceMappingURL=token-counter.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"token-counter.d.ts","sourceRoot":"","sources":["../../src/analyzers/token-counter.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,UAAU,EAAE,MAAM,UAAU,CAAC;AAEtC,qBAAa,YAAY;IAIvB,MAAM,CAAC,WAAW,CAAC,IAAI,EAAE,MAAM,EAAE,QAAQ,EAAE,UAAU,EAAE,MAAM,EAAE,MAAM,GAAG,MAAM;IAmB9E,OAAO,CAAC,MAAM,CAAC,iBAAiB;IAehC,OAAO,CAAC,MAAM,CAAC,iBAAiB;IAShC,OAAO,CAAC,MAAM,CAAC,iBAAiB;IAShC,OAAO,CAAC,MAAM,CAAC,iBAAiB;IAShC,OAAO,CAAC,MAAM,CAAC,kBAAkB;IAQjC,MAAM,CAAC,uBAAuB,CAC5B,QAAQ,EAAE,KAAK,CAAC;QAAE,IAAI,EAAE,MAAM,CAAC;QAAC,OAAO,EAAE,MAAM,CAAA;KAAE,CAAC,EAClD,QAAQ,EAAE,UAAU,EACpB,KAAK,EAAE,MAAM,GACZ,MAAM;IAyBT,MAAM,CAAC,iBAAiB,CACtB,IAAI,EAAE,MAAM,EACZ,SAAS,EAAE,MAAM,EACjB,QAAQ,EAAE,UAAU,EACpB,KAAK,EAAE,MAAM,EACb,OAAO,GAAE,MAAU,GAClB,MAAM,EAAE;IAyCX,MAAM,CAAC,2BAA2B,CAChC,cAAc,EAAE,MAAM,EACtB,eAAe,EAAE,MAAM,EACvB,QAAQ,EAAE,UAAU,EACpB,KAAK,EAAE,MAAM,GACZ;QACD,cAAc,EAAE,MAAM,CAAC;QACvB,eAAe,EAAE,MAAM,CAAC;QACxB,WAAW,EAAE,MAAM,CAAC;QACpB,iBAAiB,EAAE,MAAM,CAAC;KAC3B;CAeF"}
@@ -0,0 +1,100 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.TokenCounter = void 0;
4
+ const gpt_3_encoder_1 = require("gpt-3-encoder");
5
+ const types_1 = require("../types");
6
+ class TokenCounter {
7
+ static countTokens(text, provider, _model) {
8
+ switch (provider) {
9
+ case types_1.AIProvider.OpenAI:
10
+ return this.countOpenAITokens(text);
11
+ case types_1.AIProvider.AWSBedrock:
12
+ case types_1.AIProvider.Anthropic:
13
+ return this.countClaudeTokens(text);
14
+ case types_1.AIProvider.Google:
15
+ return this.countGoogleTokens(text);
16
+ case types_1.AIProvider.Cohere:
17
+ return this.countCohereTokens(text);
18
+ default:
19
+ return this.countGenericTokens(text);
20
+ }
21
+ }
22
+ static countOpenAITokens(text) {
23
+ try {
24
+ const encoded = (0, gpt_3_encoder_1.encode)(text);
25
+ return encoded.length;
26
+ }
27
+ catch (error) {
28
+ console.warn('Token counting failed for OpenAI model:', error);
29
+ return this.countGenericTokens(text);
30
+ }
31
+ }
32
+ static countClaudeTokens(text) {
33
+ return Math.ceil(text.length / 3.5);
34
+ }
35
+ static countGoogleTokens(text) {
36
+ return Math.ceil(text.length / 4);
37
+ }
38
+ static countCohereTokens(text) {
39
+ return Math.ceil(text.length / 3.8);
40
+ }
41
+ static countGenericTokens(text) {
42
+ return Math.ceil(text.length / 4);
43
+ }
44
+ static countConversationTokens(messages, provider, model) {
45
+ let totalTokens = 0;
46
+ const messageOverhead = provider === types_1.AIProvider.OpenAI ? 4 : 3;
47
+ for (const message of messages) {
48
+ const contentTokens = this.countTokens(message.content, provider, model);
49
+ const roleTokens = this.countTokens(message.role, provider, model);
50
+ totalTokens += contentTokens + roleTokens + messageOverhead;
51
+ }
52
+ const conversationOverhead = provider === types_1.AIProvider.OpenAI ? 3 : 2;
53
+ totalTokens += conversationOverhead;
54
+ return totalTokens;
55
+ }
56
+ static splitTextByTokens(text, maxTokens, provider, model, overlap = 0) {
57
+ const chunks = [];
58
+ const sentences = text.match(/[^.!?]+[.!?]+/g) || [text];
59
+ let currentChunk = '';
60
+ let currentTokens = 0;
61
+ for (const sentence of sentences) {
62
+ const sentenceTokens = this.countTokens(sentence, provider, model);
63
+ if (currentTokens + sentenceTokens > maxTokens && currentChunk) {
64
+ chunks.push(currentChunk.trim());
65
+ if (overlap > 0) {
66
+ const overlapSentences = currentChunk
67
+ .split(/[.!?]+/)
68
+ .filter(s => s.trim())
69
+ .slice(-overlap);
70
+ currentChunk = `${overlapSentences.join('. ')}. `;
71
+ currentTokens = this.countTokens(currentChunk, provider, model);
72
+ }
73
+ else {
74
+ currentChunk = '';
75
+ currentTokens = 0;
76
+ }
77
+ }
78
+ currentChunk += sentence;
79
+ currentTokens += sentenceTokens;
80
+ }
81
+ if (currentChunk.trim()) {
82
+ chunks.push(currentChunk.trim());
83
+ }
84
+ return chunks;
85
+ }
86
+ static estimateOptimizationSavings(originalPrompt, optimizedPrompt, provider, model) {
87
+ const originalTokens = this.countTokens(originalPrompt, provider, model);
88
+ const optimizedTokens = this.countTokens(optimizedPrompt, provider, model);
89
+ const savedTokens = originalTokens - optimizedTokens;
90
+ const savingsPercentage = (savedTokens / originalTokens) * 100;
91
+ return {
92
+ originalTokens,
93
+ optimizedTokens,
94
+ savedTokens,
95
+ savingsPercentage
96
+ };
97
+ }
98
+ }
99
+ exports.TokenCounter = TokenCounter;
100
+ //# sourceMappingURL=token-counter.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"token-counter.js","sourceRoot":"","sources":["../../src/analyzers/token-counter.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,29 @@
1
+ import { UsageMetadata, TrackingConfig } from '../types';
2
+ export declare class UsageTracker {
3
+ private config;
4
+ private storage;
5
+ private cache;
6
+ constructor(config: TrackingConfig);
7
+ track(metadata: UsageMetadata): Promise<void>;
8
+ getUsageHistory(userId?: string, startDate?: Date, endDate?: Date, limit?: number): Promise<UsageMetadata[]>;
9
+ getUserStats(userId: string): Promise<{
10
+ totalRequests: number;
11
+ totalCost: number;
12
+ totalTokens: number;
13
+ averageCostPerRequest: number;
14
+ averageTokensPerRequest: number;
15
+ lastUsed: Date | null;
16
+ }>;
17
+ getModelStats(model: string): Promise<{
18
+ totalRequests: number;
19
+ totalCost: number;
20
+ totalTokens: number;
21
+ uniqueUsers: number;
22
+ averageResponseTime: number;
23
+ }>;
24
+ exportData(format?: 'json' | 'csv'): Promise<string>;
25
+ private convertToCSV;
26
+ cleanOldData(_retentionDays: number): Promise<void>;
27
+ clearCache(): void;
28
+ }
29
+ //# sourceMappingURL=usage-tracker.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"usage-tracker.d.ts","sourceRoot":"","sources":["../../src/analyzers/usage-tracker.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,aAAa,EAAE,cAAc,EAAE,MAAM,UAAU,CAAC;AAEzD,qBAAa,YAAY;IACvB,OAAO,CAAC,MAAM,CAAiB;IAC/B,OAAO,CAAC,OAAO,CAAgB;IAC/B,OAAO,CAAC,KAAK,CAA2C;gBAE5C,MAAM,EAAE,cAAc;IAK5B,KAAK,CAAC,QAAQ,EAAE,aAAa,GAAG,OAAO,CAAC,IAAI,CAAC;IAkB7C,eAAe,CACnB,MAAM,CAAC,EAAE,MAAM,EACf,SAAS,CAAC,EAAE,IAAI,EAChB,OAAO,CAAC,EAAE,IAAI,EACd,KAAK,CAAC,EAAE,MAAM,GACb,OAAO,CAAC,aAAa,EAAE,CAAC;IAWrB,YAAY,CAAC,MAAM,EAAE,MAAM,GAAG,OAAO,CAAC;QAC1C,aAAa,EAAE,MAAM,CAAC;QACtB,SAAS,EAAE,MAAM,CAAC;QAClB,WAAW,EAAE,MAAM,CAAC;QACpB,qBAAqB,EAAE,MAAM,CAAC;QAC9B,uBAAuB,EAAE,MAAM,CAAC;QAChC,QAAQ,EAAE,IAAI,GAAG,IAAI,CAAC;KACvB,CAAC;IA6BI,aAAa,CAAC,KAAK,EAAE,MAAM,GAAG,OAAO,CAAC;QAC1C,aAAa,EAAE,MAAM,CAAC;QACtB,SAAS,EAAE,MAAM,CAAC;QAClB,WAAW,EAAE,MAAM,CAAC;QACpB,WAAW,EAAE,MAAM,CAAC;QACpB,mBAAmB,EAAE,MAAM,CAAC;KAC7B,CAAC;IA6BI,UAAU,CAAC,MAAM,GAAE,MAAM,GAAG,KAAc,GAAG,OAAO,CAAC,MAAM,CAAC;IAUlE,OAAO,CAAC,YAAY;IA4Bd,YAAY,CAAC,cAAc,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC;IAMzD,UAAU,IAAI,IAAI;CAGnB"}
@@ -0,0 +1,142 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.UsageTracker = void 0;
4
+ class UsageTracker {
5
+ constructor(config) {
6
+ this.cache = new Map();
7
+ this.config = config;
8
+ this.storage = new MemoryStorage();
9
+ }
10
+ async track(metadata) {
11
+ if (!this.config.enableAutoTracking) {
12
+ return;
13
+ }
14
+ if (this.config.retentionDays) {
15
+ await this.cleanOldData(this.config.retentionDays);
16
+ }
17
+ await this.storage.save(metadata);
18
+ const allCache = this.cache.get('all_users') || [];
19
+ allCache.push(metadata);
20
+ this.cache.set('all_users', allCache);
21
+ }
22
+ async getUsageHistory(userId, startDate, endDate, limit) {
23
+ const filter = {
24
+ userId,
25
+ startDate,
26
+ endDate,
27
+ limit
28
+ };
29
+ return await this.storage.load(filter);
30
+ }
31
+ async getUserStats(userId) {
32
+ const userHistory = await this.getUsageHistory(userId);
33
+ if (userHistory.length === 0) {
34
+ return {
35
+ totalRequests: 0,
36
+ totalCost: 0,
37
+ totalTokens: 0,
38
+ averageCostPerRequest: 0,
39
+ averageTokensPerRequest: 0,
40
+ lastUsed: null
41
+ };
42
+ }
43
+ const totalRequests = userHistory.length;
44
+ const totalCost = userHistory.reduce((sum, item) => sum + item.estimatedCost, 0);
45
+ const totalTokens = userHistory.reduce((sum, item) => sum + item.totalTokens, 0);
46
+ return {
47
+ totalRequests,
48
+ totalCost,
49
+ totalTokens,
50
+ averageCostPerRequest: totalCost / totalRequests,
51
+ averageTokensPerRequest: totalTokens / totalRequests,
52
+ lastUsed: null
53
+ };
54
+ }
55
+ async getModelStats(model) {
56
+ const allHistory = await this.storage.load({});
57
+ const modelHistory = allHistory.filter(item => item.model === model);
58
+ if (modelHistory.length === 0) {
59
+ return {
60
+ totalRequests: 0,
61
+ totalCost: 0,
62
+ totalTokens: 0,
63
+ uniqueUsers: 0,
64
+ averageResponseTime: 0
65
+ };
66
+ }
67
+ const uniqueUsers = 0;
68
+ const totalRequests = modelHistory.length;
69
+ const totalCost = modelHistory.reduce((sum, item) => sum + item.estimatedCost, 0);
70
+ const totalTokens = modelHistory.reduce((sum, item) => sum + item.totalTokens, 0);
71
+ const totalResponseTime = modelHistory.reduce((sum, item) => sum + (item.responseTime || 0), 0);
72
+ return {
73
+ totalRequests,
74
+ totalCost,
75
+ totalTokens,
76
+ uniqueUsers,
77
+ averageResponseTime: totalResponseTime / totalRequests
78
+ };
79
+ }
80
+ async exportData(format = 'json') {
81
+ const allData = await this.storage.load({});
82
+ if (format === 'json') {
83
+ return JSON.stringify(allData, null, 2);
84
+ }
85
+ else {
86
+ return this.convertToCSV(allData);
87
+ }
88
+ }
89
+ convertToCSV(data) {
90
+ if (data.length === 0)
91
+ return '';
92
+ const headers = [
93
+ 'provider',
94
+ 'model',
95
+ 'promptTokens',
96
+ 'completionTokens',
97
+ 'totalTokens',
98
+ 'estimatedCost',
99
+ 'responseTime',
100
+ 'sessionId'
101
+ ];
102
+ const rows = data.map(item => [
103
+ item.provider,
104
+ item.model,
105
+ item.promptTokens,
106
+ item.completionTokens,
107
+ item.totalTokens,
108
+ item.estimatedCost,
109
+ item.responseTime || '',
110
+ item.sessionId || ''
111
+ ]);
112
+ return [headers.join(','), ...rows.map(row => row.join(','))].join('\n');
113
+ }
114
+ async cleanOldData(_retentionDays) {
115
+ return Promise.resolve();
116
+ }
117
+ clearCache() {
118
+ this.cache.clear();
119
+ }
120
+ }
121
+ exports.UsageTracker = UsageTracker;
122
+ class MemoryStorage {
123
+ constructor() {
124
+ this.data = [];
125
+ }
126
+ save(data) {
127
+ this.data.push(data);
128
+ return Promise.resolve();
129
+ }
130
+ load(filter) {
131
+ let result = [...this.data];
132
+ if (filter.limit) {
133
+ result = result.slice(0, filter.limit);
134
+ }
135
+ return Promise.resolve(result);
136
+ }
137
+ clear() {
138
+ this.data = [];
139
+ return Promise.resolve();
140
+ }
141
+ }
142
+ //# sourceMappingURL=usage-tracker.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"usage-tracker.js","sourceRoot":"","sources":["../../src/analyzers/usage-tracker.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,45 @@
1
+ import { TrackerConfig, AIProvider } from '../types';
2
+ export declare const optimizationThresholds: {
3
+ highCostPerRequest: number;
4
+ highTokenUsage: number;
5
+ frequencyThreshold: number;
6
+ batchingThreshold: number;
7
+ modelDowngradeConfidence: number;
8
+ };
9
+ export declare const defaultConfig: Partial<TrackerConfig>;
10
+ export declare const defaultBedrockRegion = "us-east-1";
11
+ export declare const defaultOptimizationModel = "anthropic.claude-sonnet-4-20250514-v1:0";
12
+ export declare const supportedProviders: AIProvider[];
13
+ export declare const providerEndpoints: Record<AIProvider, string>;
14
+ export declare const defaultHeaders: Record<string, string>;
15
+ export declare const retryConfig: {
16
+ maxRetries: number;
17
+ initialDelay: number;
18
+ maxDelay: number;
19
+ backoffMultiplier: number;
20
+ };
21
+ export declare const cachingConfig: {
22
+ defaultTTL: number;
23
+ maxCacheSize: number;
24
+ compressionEnabled: boolean;
25
+ };
26
+ export declare const alertThresholds: {
27
+ costSpike: number;
28
+ tokenSpike: number;
29
+ errorRate: number;
30
+ latencyP95: number;
31
+ };
32
+ export declare const exportFormats: readonly ["json", "csv", "xlsx"];
33
+ export declare const timeRanges: {
34
+ hourly: number;
35
+ daily: number;
36
+ weekly: number;
37
+ monthly: number;
38
+ };
39
+ export declare const logConfig: {
40
+ maxLogSize: number;
41
+ logRotation: boolean;
42
+ compressionEnabled: boolean;
43
+ retentionDays: number;
44
+ };
45
+ //# sourceMappingURL=default.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"default.d.ts","sourceRoot":"","sources":["../../src/config/default.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,aAAa,EAAE,UAAU,EAAE,MAAM,UAAU,CAAC;AAErD,eAAO,MAAM,sBAAsB;;;;;;CAMlC,CAAC;AAEF,eAAO,MAAM,aAAa,EAAE,OAAO,CAAC,aAAa,CAoBhD,CAAC;AAEF,eAAO,MAAM,oBAAoB,cAAc,CAAC;AAEhD,eAAO,MAAM,wBAAwB,4CAA4C,CAAC;AAElF,eAAO,MAAM,kBAAkB,cAgB9B,CAAC;AAEF,eAAO,MAAM,iBAAiB,EAAE,MAAM,CAAC,UAAU,EAAE,MAAM,CAgBxD,CAAC;AAEF,eAAO,MAAM,cAAc,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAGjD,CAAC;AAEF,eAAO,MAAM,WAAW;;;;;CAKvB,CAAC;AAEF,eAAO,MAAM,aAAa;;;;CAIzB,CAAC;AAEF,eAAO,MAAM,eAAe;;;;;CAK3B,CAAC;AAEF,eAAO,MAAM,aAAa,kCAAmC,CAAC;AAE9D,eAAO,MAAM,UAAU;;;;;CAKtB,CAAC;AAEF,eAAO,MAAM,SAAS;;;;;CAKrB,CAAC"}
@@ -0,0 +1,103 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.logConfig = exports.timeRanges = exports.exportFormats = exports.alertThresholds = exports.cachingConfig = exports.retryConfig = exports.defaultHeaders = exports.providerEndpoints = exports.supportedProviders = exports.defaultOptimizationModel = exports.defaultBedrockRegion = exports.defaultConfig = exports.optimizationThresholds = void 0;
4
+ const types_1 = require("../types");
5
+ exports.optimizationThresholds = {
6
+ highCostPerRequest: 0.1,
7
+ highTokenUsage: 2000,
8
+ frequencyThreshold: 10,
9
+ batchingThreshold: 3,
10
+ modelDowngradeConfidence: 0.7
11
+ };
12
+ exports.defaultConfig = {
13
+ providers: [],
14
+ optimization: {
15
+ enablePromptOptimization: true,
16
+ enableModelSuggestions: true,
17
+ enableCachingSuggestions: true,
18
+ enableCompression: true,
19
+ enableContextTrimming: true,
20
+ enableRequestFusion: true,
21
+ thresholds: exports.optimizationThresholds
22
+ },
23
+ tracking: {
24
+ enableAutoTracking: true,
25
+ retentionDays: 30
26
+ },
27
+ alerts: {
28
+ costThreshold: 100,
29
+ tokenThreshold: 1000000,
30
+ emailNotifications: false
31
+ }
32
+ };
33
+ exports.defaultBedrockRegion = 'us-east-1';
34
+ exports.defaultOptimizationModel = 'anthropic.claude-sonnet-4-20250514-v1:0';
35
+ exports.supportedProviders = [
36
+ types_1.AIProvider.OpenAI,
37
+ types_1.AIProvider.AWSBedrock,
38
+ types_1.AIProvider.Anthropic,
39
+ types_1.AIProvider.Google,
40
+ types_1.AIProvider.Cohere,
41
+ types_1.AIProvider.Azure,
42
+ types_1.AIProvider.DeepSeek,
43
+ types_1.AIProvider.Groq,
44
+ types_1.AIProvider.Mistral,
45
+ types_1.AIProvider.XAI,
46
+ types_1.AIProvider.Meta,
47
+ types_1.AIProvider.HuggingFace,
48
+ types_1.AIProvider.Ollama,
49
+ types_1.AIProvider.Replicate,
50
+ types_1.AIProvider.Gemini
51
+ ];
52
+ exports.providerEndpoints = {
53
+ [types_1.AIProvider.OpenAI]: 'https://api.openai.com/v1',
54
+ [types_1.AIProvider.AWSBedrock]: 'bedrock-runtime.{region}.amazonaws.com',
55
+ [types_1.AIProvider.Anthropic]: 'https://api.anthropic.com/v1',
56
+ [types_1.AIProvider.Google]: 'https://generativelanguage.googleapis.com/v1',
57
+ [types_1.AIProvider.Cohere]: 'https://api.cohere.ai/v1',
58
+ [types_1.AIProvider.Azure]: 'https://{resourceName}.openai.azure.com',
59
+ [types_1.AIProvider.DeepSeek]: 'https://api.deepseek.com/v1',
60
+ [types_1.AIProvider.Groq]: 'https://api.groq.com/openai/v1',
61
+ [types_1.AIProvider.Mistral]: 'https://api.mistral.ai/v1',
62
+ [types_1.AIProvider.XAI]: 'https://api.x.ai/v1',
63
+ [types_1.AIProvider.Meta]: 'https://api.llama.meta.com/v1',
64
+ [types_1.AIProvider.HuggingFace]: 'https://api-inference.huggingface.co/v1',
65
+ [types_1.AIProvider.Ollama]: 'http://localhost:11434/v1',
66
+ [types_1.AIProvider.Replicate]: 'https://api.replicate.com/v1',
67
+ [types_1.AIProvider.Gemini]: 'https://generativelanguage.googleapis.com/v1'
68
+ };
69
+ exports.defaultHeaders = {
70
+ 'Content-Type': 'application/json',
71
+ 'User-Agent': 'ai-cost-tracker/1.0.0'
72
+ };
73
+ exports.retryConfig = {
74
+ maxRetries: 3,
75
+ initialDelay: 1000,
76
+ maxDelay: 10000,
77
+ backoffMultiplier: 2
78
+ };
79
+ exports.cachingConfig = {
80
+ defaultTTL: 3600,
81
+ maxCacheSize: 100,
82
+ compressionEnabled: true
83
+ };
84
+ exports.alertThresholds = {
85
+ costSpike: 2.0,
86
+ tokenSpike: 2.5,
87
+ errorRate: 0.1,
88
+ latencyP95: 5000
89
+ };
90
+ exports.exportFormats = ['json', 'csv', 'xlsx'];
91
+ exports.timeRanges = {
92
+ hourly: 60 * 60 * 1000,
93
+ daily: 24 * 60 * 60 * 1000,
94
+ weekly: 7 * 24 * 60 * 60 * 1000,
95
+ monthly: 30 * 24 * 60 * 60 * 1000
96
+ };
97
+ exports.logConfig = {
98
+ maxLogSize: 10 * 1024 * 1024,
99
+ logRotation: true,
100
+ compressionEnabled: true,
101
+ retentionDays: 7
102
+ };
103
+ //# sourceMappingURL=default.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"default.js","sourceRoot":"","sources":["../../src/config/default.ts"],"names":[],"mappings":"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"}