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.
- package/LICENSE +21 -0
- package/README.md +550 -0
- package/dist/analyzers/cost-analyzer.d.ts +28 -0
- package/dist/analyzers/cost-analyzer.d.ts.map +1 -0
- package/dist/analyzers/cost-analyzer.js +165 -0
- package/dist/analyzers/cost-analyzer.js.map +1 -0
- package/dist/analyzers/token-counter.d.ts +21 -0
- package/dist/analyzers/token-counter.d.ts.map +1 -0
- package/dist/analyzers/token-counter.js +100 -0
- package/dist/analyzers/token-counter.js.map +1 -0
- package/dist/analyzers/usage-tracker.d.ts +29 -0
- package/dist/analyzers/usage-tracker.d.ts.map +1 -0
- package/dist/analyzers/usage-tracker.js +142 -0
- package/dist/analyzers/usage-tracker.js.map +1 -0
- package/dist/config/default.d.ts +45 -0
- package/dist/config/default.d.ts.map +1 -0
- package/dist/config/default.js +103 -0
- package/dist/config/default.js.map +1 -0
- package/dist/config/model-types.d.ts +45 -0
- package/dist/config/model-types.d.ts.map +1 -0
- package/dist/config/model-types.js +101 -0
- package/dist/config/model-types.js.map +1 -0
- package/dist/config/pricing/anthropic.d.ts +3 -0
- package/dist/config/pricing/anthropic.d.ts.map +1 -0
- package/dist/config/pricing/anthropic.js +191 -0
- package/dist/config/pricing/anthropic.js.map +1 -0
- package/dist/config/pricing/aws-bedrock.d.ts +3 -0
- package/dist/config/pricing/aws-bedrock.d.ts.map +1 -0
- package/dist/config/pricing/aws-bedrock.js +747 -0
- package/dist/config/pricing/aws-bedrock.js.map +1 -0
- package/dist/config/pricing/cohere.d.ts +3 -0
- package/dist/config/pricing/cohere.d.ts.map +1 -0
- package/dist/config/pricing/cohere.js +371 -0
- package/dist/config/pricing/cohere.js.map +1 -0
- package/dist/config/pricing/deepseek.d.ts +3 -0
- package/dist/config/pricing/deepseek.d.ts.map +1 -0
- package/dist/config/pricing/deepseek.js +102 -0
- package/dist/config/pricing/deepseek.js.map +1 -0
- package/dist/config/pricing/google.d.ts +3 -0
- package/dist/config/pricing/google.d.ts.map +1 -0
- package/dist/config/pricing/google.js +671 -0
- package/dist/config/pricing/google.js.map +1 -0
- package/dist/config/pricing/grok.d.ts +3 -0
- package/dist/config/pricing/grok.d.ts.map +1 -0
- package/dist/config/pricing/grok.js +59 -0
- package/dist/config/pricing/grok.js.map +1 -0
- package/dist/config/pricing/index.d.ts +11 -0
- package/dist/config/pricing/index.d.ts.map +1 -0
- package/dist/config/pricing/index.js +24 -0
- package/dist/config/pricing/index.js.map +1 -0
- package/dist/config/pricing/meta.d.ts +3 -0
- package/dist/config/pricing/meta.d.ts.map +1 -0
- package/dist/config/pricing/meta.js +69 -0
- package/dist/config/pricing/meta.js.map +1 -0
- package/dist/config/pricing/mistral.d.ts +3 -0
- package/dist/config/pricing/mistral.d.ts.map +1 -0
- package/dist/config/pricing/mistral.js +690 -0
- package/dist/config/pricing/mistral.js.map +1 -0
- package/dist/config/pricing/openai.d.ts +3 -0
- package/dist/config/pricing/openai.d.ts.map +1 -0
- package/dist/config/pricing/openai.js +475 -0
- package/dist/config/pricing/openai.js.map +1 -0
- package/dist/config/pricing/xai.d.ts +3 -0
- package/dist/config/pricing/xai.d.ts.map +1 -0
- package/dist/config/pricing/xai.js +141 -0
- package/dist/config/pricing/xai.js.map +1 -0
- package/dist/config/pricing-data.d.ts +55 -0
- package/dist/config/pricing-data.d.ts.map +1 -0
- package/dist/config/pricing-data.js +179 -0
- package/dist/config/pricing-data.js.map +1 -0
- package/dist/feedback/client.d.ts +14 -0
- package/dist/feedback/client.d.ts.map +1 -0
- package/dist/feedback/client.js +95 -0
- package/dist/feedback/client.js.map +1 -0
- package/dist/feedback/index.d.ts +3 -0
- package/dist/feedback/index.d.ts.map +1 -0
- package/dist/feedback/index.js +21 -0
- package/dist/feedback/index.js.map +1 -0
- package/dist/gateway/client.d.ts +77 -0
- package/dist/gateway/client.d.ts.map +1 -0
- package/dist/gateway/client.js +630 -0
- package/dist/gateway/client.js.map +1 -0
- package/dist/gateway/index.d.ts +9 -0
- package/dist/gateway/index.d.ts.map +1 -0
- package/dist/gateway/index.js +66 -0
- package/dist/gateway/index.js.map +1 -0
- package/dist/index.d.ts +183 -0
- package/dist/index.d.ts.map +1 -0
- package/dist/index.js +1438 -0
- package/dist/index.js.map +1 -0
- package/dist/optimizers/context-trimmer.d.ts +18 -0
- package/dist/optimizers/context-trimmer.d.ts.map +1 -0
- package/dist/optimizers/context-trimmer.js +221 -0
- package/dist/optimizers/context-trimmer.js.map +1 -0
- package/dist/optimizers/index.d.ts +6 -0
- package/dist/optimizers/index.d.ts.map +1 -0
- package/dist/optimizers/index.js +14 -0
- package/dist/optimizers/index.js.map +1 -0
- package/dist/optimizers/prompt-compressor.d.ts +15 -0
- package/dist/optimizers/prompt-compressor.d.ts.map +1 -0
- package/dist/optimizers/prompt-compressor.js +268 -0
- package/dist/optimizers/prompt-compressor.js.map +1 -0
- package/dist/optimizers/prompt-optimizer.d.ts +29 -0
- package/dist/optimizers/prompt-optimizer.d.ts.map +1 -0
- package/dist/optimizers/prompt-optimizer.js +381 -0
- package/dist/optimizers/prompt-optimizer.js.map +1 -0
- package/dist/optimizers/request-fusion.d.ts +34 -0
- package/dist/optimizers/request-fusion.d.ts.map +1 -0
- package/dist/optimizers/request-fusion.js +284 -0
- package/dist/optimizers/request-fusion.js.map +1 -0
- package/dist/optimizers/suggestion-engine.d.ts +29 -0
- package/dist/optimizers/suggestion-engine.d.ts.map +1 -0
- package/dist/optimizers/suggestion-engine.js +234 -0
- package/dist/optimizers/suggestion-engine.js.map +1 -0
- package/dist/providers/anthropic.d.ts +23 -0
- package/dist/providers/anthropic.d.ts.map +1 -0
- package/dist/providers/anthropic.js +108 -0
- package/dist/providers/anthropic.js.map +1 -0
- package/dist/providers/azure.d.ts +15 -0
- package/dist/providers/azure.d.ts.map +1 -0
- package/dist/providers/azure.js +115 -0
- package/dist/providers/azure.js.map +1 -0
- package/dist/providers/base.d.ts +20 -0
- package/dist/providers/base.d.ts.map +1 -0
- package/dist/providers/base.js +67 -0
- package/dist/providers/base.js.map +1 -0
- package/dist/providers/bedrock.d.ts +23 -0
- package/dist/providers/bedrock.d.ts.map +1 -0
- package/dist/providers/bedrock.js +247 -0
- package/dist/providers/bedrock.js.map +1 -0
- package/dist/providers/cohere.d.ts +17 -0
- package/dist/providers/cohere.d.ts.map +1 -0
- package/dist/providers/cohere.js +122 -0
- package/dist/providers/cohere.js.map +1 -0
- package/dist/providers/deepseek.d.ts +6 -0
- package/dist/providers/deepseek.d.ts.map +1 -0
- package/dist/providers/deepseek.js +17 -0
- package/dist/providers/deepseek.js.map +1 -0
- package/dist/providers/google.d.ts +17 -0
- package/dist/providers/google.d.ts.map +1 -0
- package/dist/providers/google.js +141 -0
- package/dist/providers/google.js.map +1 -0
- package/dist/providers/index.d.ts +13 -0
- package/dist/providers/index.d.ts.map +1 -0
- package/dist/providers/index.js +61 -0
- package/dist/providers/index.js.map +1 -0
- package/dist/providers/openai.d.ts +16 -0
- package/dist/providers/openai.d.ts.map +1 -0
- package/dist/providers/openai.js +194 -0
- package/dist/providers/openai.js.map +1 -0
- package/dist/trace/client.d.ts +48 -0
- package/dist/trace/client.d.ts.map +1 -0
- package/dist/trace/client.js +130 -0
- package/dist/trace/client.js.map +1 -0
- package/dist/trace/index.d.ts +7 -0
- package/dist/trace/index.d.ts.map +1 -0
- package/dist/trace/index.js +30 -0
- package/dist/trace/index.js.map +1 -0
- package/dist/trace/middleware.d.ts +70 -0
- package/dist/trace/middleware.d.ts.map +1 -0
- package/dist/trace/middleware.js +104 -0
- package/dist/trace/middleware.js.map +1 -0
- package/dist/trace/providers.d.ts +83 -0
- package/dist/trace/providers.d.ts.map +1 -0
- package/dist/trace/providers.js +340 -0
- package/dist/trace/providers.js.map +1 -0
- package/dist/trace/service.d.ts +59 -0
- package/dist/trace/service.d.ts.map +1 -0
- package/dist/trace/service.js +425 -0
- package/dist/trace/service.js.map +1 -0
- package/dist/trace/types.d.ts +102 -0
- package/dist/trace/types.d.ts.map +1 -0
- package/dist/trace/types.js +3 -0
- package/dist/trace/types.js.map +1 -0
- package/dist/types/failover.d.ts +29 -0
- package/dist/types/failover.d.ts.map +1 -0
- package/dist/types/failover.js +3 -0
- package/dist/types/failover.js.map +1 -0
- package/dist/types/feedback.d.ts +69 -0
- package/dist/types/feedback.d.ts.map +1 -0
- package/dist/types/feedback.js +3 -0
- package/dist/types/feedback.js.map +1 -0
- package/dist/types/gateway.d.ts +303 -0
- package/dist/types/gateway.d.ts.map +1 -0
- package/dist/types/gateway.js +3 -0
- package/dist/types/gateway.js.map +1 -0
- package/dist/types/index.d.ts +242 -0
- package/dist/types/index.d.ts.map +1 -0
- package/dist/types/index.js +37 -0
- package/dist/types/index.js.map +1 -0
- package/dist/types/models.d.ts +7 -0
- package/dist/types/models.d.ts.map +1 -0
- package/dist/types/models.js +3838 -0
- package/dist/types/models.js.map +1 -0
- package/dist/types/providers.d.ts +128 -0
- package/dist/types/providers.d.ts.map +1 -0
- package/dist/types/providers.js +10 -0
- package/dist/types/providers.js.map +1 -0
- package/dist/types/simplified.d.ts +65 -0
- package/dist/types/simplified.d.ts.map +1 -0
- package/dist/types/simplified.js +4 -0
- package/dist/types/simplified.js.map +1 -0
- package/dist/utils/logger.d.ts +35 -0
- package/dist/utils/logger.d.ts.map +1 -0
- package/dist/utils/logger.js +154 -0
- package/dist/utils/logger.js.map +1 -0
- package/dist/utils/pricing.d.ts +30 -0
- package/dist/utils/pricing.d.ts.map +1 -0
- package/dist/utils/pricing.js +148 -0
- package/dist/utils/pricing.js.map +1 -0
- package/dist/utils/validators.d.ts +10 -0
- package/dist/utils/validators.d.ts.map +1 -0
- package/dist/utils/validators.js +133 -0
- package/dist/utils/validators.js.map +1 -0
- 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":";;;AAAA,oCAAqD;AAExC,QAAA,sBAAsB,GAAG;IACpC,kBAAkB,EAAE,GAAG;IACvB,cAAc,EAAE,IAAI;IACpB,kBAAkB,EAAE,EAAE;IACtB,iBAAiB,EAAE,CAAC;IACpB,wBAAwB,EAAE,GAAG;CAC9B,CAAC;AAEW,QAAA,aAAa,GAA2B;IACnD,SAAS,EAAE,EAAE;IACb,YAAY,EAAE;QACZ,wBAAwB,EAAE,IAAI;QAC9B,sBAAsB,EAAE,IAAI;QAC5B,wBAAwB,EAAE,IAAI;QAC9B,iBAAiB,EAAE,IAAI;QACvB,qBAAqB,EAAE,IAAI;QAC3B,mBAAmB,EAAE,IAAI;QACzB,UAAU,EAAE,8BAAsB;KACnC;IACD,QAAQ,EAAE;QACR,kBAAkB,EAAE,IAAI;QACxB,aAAa,EAAE,EAAE;KAClB;IACD,MAAM,EAAE;QACN,aAAa,EAAE,GAAG;QAClB,cAAc,EAAE,OAAO;QACvB,kBAAkB,EAAE,KAAK;KAC1B;CACF,CAAC;AAEW,QAAA,oBAAoB,GAAG,WAAW,CAAC;AAEnC,QAAA,wBAAwB,GAAG,yCAAyC,CAAC;AAErE,QAAA,kBAAkB,GAAG;IAChC,kBAAU,CAAC,MAAM;IACjB,kBAAU,CAAC,UAAU;IACrB,kBAAU,CAAC,SAAS;IACpB,kBAAU,CAAC,MAAM;IACjB,kBAAU,CAAC,MAAM;IACjB,kBAAU,CAAC,KAAK;IAChB,kBAAU,CAAC,QAAQ;IACnB,kBAAU,CAAC,IAAI;IACf,kBAAU,CAAC,OAAO;IAClB,kBAAU,CAAC,GAAG;IACd,kBAAU,CAAC,IAAI;IACf,kBAAU,CAAC,WAAW;IACtB,kBAAU,CAAC,MAAM;IACjB,kBAAU,CAAC,SAAS;IACpB,kBAAU,CAAC,MAAM;CAClB,CAAC;AAEW,QAAA,iBAAiB,GAA+B;IAC3D,CAAC,kBAAU,CAAC,MAAM,CAAC,EAAE,2BAA2B;IAChD,CAAC,kBAAU,CAAC,UAAU,CAAC,EAAE,wCAAwC;IACjE,CAAC,kBAAU,CAAC,SAAS,CAAC,EAAE,8BAA8B;IACtD,CAAC,kBAAU,CAAC,MAAM,CAAC,EAAE,8CAA8C;IACnE,CAAC,kBAAU,CAAC,MAAM,CAAC,EAAE,0BAA0B;IAC/C,CAAC,kBAAU,CAAC,KAAK,CAAC,EAAE,yCAAyC;IAC7D,CAAC,kBAAU,CAAC,QAAQ,CAAC,EAAE,6BAA6B;IACpD,CAAC,kBAAU,CAAC,IAAI,CAAC,EAAE,gCAAgC;IACnD,CAAC,kBAAU,CAAC,OAAO,CAAC,EAAE,2BAA2B;IACjD,CAAC,kBAAU,CAAC,GAAG,CAAC,EAAE,qBAAqB;IACvC,CAAC,kBAAU,CAAC,IAAI,CAAC,EAAE,+BAA+B;IAClD,CAAC,kBAAU,CAAC,WAAW,CAAC,EAAE,yCAAyC;IACnE,CAAC,kBAAU,CAAC,MAAM,CAAC,EAAE,2BAA2B;IAChD,CAAC,kBAAU,CAAC,SAAS,CAAC,EAAE,8BAA8B;IACtD,CAAC,kBAAU,CAAC,MAAM,CAAC,EAAE,8CAA8C;CACpE,CAAC;AAEW,QAAA,cAAc,GAA2B;IACpD,cAAc,EAAE,kBAAkB;IAClC,YAAY,EAAE,uBAAuB;CACtC,CAAC;AAEW,QAAA,WAAW,GAAG;IACzB,UAAU,EAAE,CAAC;IACb,YAAY,EAAE,IAAI;IAClB,QAAQ,EAAE,KAAK;IACf,iBAAiB,EAAE,CAAC;CACrB,CAAC;AAEW,QAAA,aAAa,GAAG;IAC3B,UAAU,EAAE,IAAI;IAChB,YAAY,EAAE,GAAG;IACjB,kBAAkB,EAAE,IAAI;CACzB,CAAC;AAEW,QAAA,eAAe,GAAG;IAC7B,SAAS,EAAE,GAAG;IACd,UAAU,EAAE,GAAG;IACf,SAAS,EAAE,GAAG;IACd,UAAU,EAAE,IAAI;CACjB,CAAC;AAEW,QAAA,aAAa,GAAG,CAAC,MAAM,EAAE,KAAK,EAAE,MAAM,CAAU,CAAC;AAEjD,QAAA,UAAU,GAAG;IACxB,MAAM,EAAE,EAAE,GAAG,EAAE,GAAG,IAAI;IACtB,KAAK,EAAE,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,IAAI;IAC1B,MAAM,EAAE,CAAC,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,IAAI;IAC/B,OAAO,EAAE,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,IAAI;CAClC,CAAC;AAEW,QAAA,SAAS,GAAG;IACvB,UAAU,EAAE,EAAE,GAAG,IAAI,GAAG,IAAI;IAC5B,WAAW,EAAE,IAAI;IACjB,kBAAkB,EAAE,IAAI;IACxB,aAAa,EAAE,CAAC;CACjB,CAAC"}
|