agentic-qe 2.5.3 → 2.5.5
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/.claude/commands/aqe-costs.md +509 -0
- package/CHANGELOG.md +72 -0
- package/README.md +1 -1
- package/dist/agents/SONALifecycleManager.d.ts +226 -0
- package/dist/agents/SONALifecycleManager.d.ts.map +1 -0
- package/dist/agents/SONALifecycleManager.js +563 -0
- package/dist/agents/SONALifecycleManager.js.map +1 -0
- package/dist/agents/index.d.ts +2 -0
- package/dist/agents/index.d.ts.map +1 -1
- package/dist/agents/index.js +7 -1
- package/dist/agents/index.js.map +1 -1
- package/dist/core/memory/HNSWVectorMemory.js +1 -1
- package/dist/core/metrics/InferenceCostTracker.d.ts +293 -0
- package/dist/core/metrics/InferenceCostTracker.d.ts.map +1 -0
- package/dist/core/metrics/InferenceCostTracker.js +461 -0
- package/dist/core/metrics/InferenceCostTracker.js.map +1 -0
- package/dist/core/metrics/index.d.ts +1 -0
- package/dist/core/metrics/index.d.ts.map +1 -1
- package/dist/core/metrics/index.js +7 -1
- package/dist/core/metrics/index.js.map +1 -1
- package/dist/core/routing/AdaptiveModelRouter.d.ts +17 -0
- package/dist/core/routing/AdaptiveModelRouter.d.ts.map +1 -1
- package/dist/core/routing/AdaptiveModelRouter.js +117 -0
- package/dist/core/routing/AdaptiveModelRouter.js.map +1 -1
- package/dist/core/routing/ModelRules.d.ts +2 -0
- package/dist/core/routing/ModelRules.d.ts.map +1 -1
- package/dist/core/routing/ModelRules.js +82 -0
- package/dist/core/routing/ModelRules.js.map +1 -1
- package/dist/core/routing/types.d.ts +14 -1
- package/dist/core/routing/types.d.ts.map +1 -1
- package/dist/core/routing/types.js +7 -0
- package/dist/core/routing/types.js.map +1 -1
- package/dist/mcp/server-instructions.d.ts +1 -1
- package/dist/mcp/server-instructions.js +1 -1
- package/dist/mcp/services/AgentRegistry.d.ts +35 -0
- package/dist/mcp/services/AgentRegistry.d.ts.map +1 -1
- package/dist/mcp/services/AgentRegistry.js +126 -1
- package/dist/mcp/services/AgentRegistry.js.map +1 -1
- package/dist/mcp/tools/qe/accessibility/video-vision-analyzer.d.ts +8 -1
- package/dist/mcp/tools/qe/accessibility/video-vision-analyzer.d.ts.map +1 -1
- package/dist/mcp/tools/qe/accessibility/video-vision-analyzer.js +134 -46
- package/dist/mcp/tools/qe/accessibility/video-vision-analyzer.js.map +1 -1
- package/dist/mcp/tools/qe/accessibility/webvtt-generator.d.ts.map +1 -1
- package/dist/mcp/tools/qe/accessibility/webvtt-generator.js +11 -4
- package/dist/mcp/tools/qe/accessibility/webvtt-generator.js.map +1 -1
- package/dist/telemetry/metrics/collectors/cost.d.ts.map +1 -1
- package/dist/telemetry/metrics/collectors/cost.js +6 -0
- package/dist/telemetry/metrics/collectors/cost.js.map +1 -1
- package/package.json +9 -2
|
@@ -0,0 +1,461 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
/**
|
|
3
|
+
* Inference Cost Tracker - Local vs Cloud Inference Cost Monitoring
|
|
4
|
+
*
|
|
5
|
+
* Tracks and analyzes inference costs across different providers:
|
|
6
|
+
* - Local inference (ruvllm): $0 cost
|
|
7
|
+
* - Cloud inference (Claude, OpenRouter): Token-based pricing
|
|
8
|
+
*
|
|
9
|
+
* Features:
|
|
10
|
+
* - Request counting by provider
|
|
11
|
+
* - Token usage tracking
|
|
12
|
+
* - Cost estimation with current pricing
|
|
13
|
+
* - Savings calculation from local inference
|
|
14
|
+
* - Time-series data with TTL support
|
|
15
|
+
* - Memory-backed storage for persistence
|
|
16
|
+
*
|
|
17
|
+
* Performance:
|
|
18
|
+
* - O(1) request tracking
|
|
19
|
+
* - O(n) reporting where n = number of tracked requests
|
|
20
|
+
* - Memory TTL: 24 hours default
|
|
21
|
+
*
|
|
22
|
+
* @module core/metrics/InferenceCostTracker
|
|
23
|
+
* @version 1.0.0
|
|
24
|
+
*/
|
|
25
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
26
|
+
exports.InferenceCostTracker = void 0;
|
|
27
|
+
exports.getInferenceCostTracker = getInferenceCostTracker;
|
|
28
|
+
exports.resetInferenceCostTracker = resetInferenceCostTracker;
|
|
29
|
+
exports.formatCostReport = formatCostReport;
|
|
30
|
+
exports.formatCostReportJSON = formatCostReportJSON;
|
|
31
|
+
const cost_js_1 = require("../../telemetry/metrics/collectors/cost.js");
|
|
32
|
+
const Logger_js_1 = require("../../utils/Logger.js");
|
|
33
|
+
/**
|
|
34
|
+
* Inference Cost Tracker Implementation
|
|
35
|
+
*
|
|
36
|
+
* Tracks inference requests and calculates costs across local and cloud providers.
|
|
37
|
+
*
|
|
38
|
+
* @example
|
|
39
|
+
* ```typescript
|
|
40
|
+
* const tracker = new InferenceCostTracker();
|
|
41
|
+
*
|
|
42
|
+
* // Track local inference (free)
|
|
43
|
+
* tracker.trackRequest({
|
|
44
|
+
* provider: 'ruvllm',
|
|
45
|
+
* model: 'meta-llama/llama-3.1-8b-instruct',
|
|
46
|
+
* tokens: { inputTokens: 1000, outputTokens: 500, totalTokens: 1500 },
|
|
47
|
+
* agentId: 'test-gen-001',
|
|
48
|
+
* });
|
|
49
|
+
*
|
|
50
|
+
* // Track cloud inference
|
|
51
|
+
* tracker.trackRequest({
|
|
52
|
+
* provider: 'anthropic',
|
|
53
|
+
* model: 'claude-sonnet-4-5-20250929',
|
|
54
|
+
* tokens: { inputTokens: 1000, outputTokens: 500, totalTokens: 1500 },
|
|
55
|
+
* agentId: 'test-gen-002',
|
|
56
|
+
* });
|
|
57
|
+
*
|
|
58
|
+
* // Get cost report
|
|
59
|
+
* const report = tracker.getCostReport();
|
|
60
|
+
* console.log(`Total cost: $${report.totalCost.toFixed(4)}`);
|
|
61
|
+
* console.log(`Savings: $${report.savings.totalSavings.toFixed(4)}`);
|
|
62
|
+
* ```
|
|
63
|
+
*/
|
|
64
|
+
class InferenceCostTracker {
|
|
65
|
+
constructor(config) {
|
|
66
|
+
this.requests = new Map();
|
|
67
|
+
this.logger = Logger_js_1.Logger.getInstance();
|
|
68
|
+
this.config = {
|
|
69
|
+
ttl: 86400000, // 24 hours
|
|
70
|
+
pruneInterval: 3600000, // 1 hour
|
|
71
|
+
autoPrune: true,
|
|
72
|
+
baselineProvider: 'anthropic',
|
|
73
|
+
baselineModel: 'claude-sonnet-4-5-20250929',
|
|
74
|
+
...config,
|
|
75
|
+
};
|
|
76
|
+
if (this.config.autoPrune) {
|
|
77
|
+
this.startAutoPrune();
|
|
78
|
+
}
|
|
79
|
+
}
|
|
80
|
+
/**
|
|
81
|
+
* Track an inference request
|
|
82
|
+
*
|
|
83
|
+
* @param params - Request parameters
|
|
84
|
+
* @returns Request ID
|
|
85
|
+
*/
|
|
86
|
+
trackRequest(params) {
|
|
87
|
+
const { provider, model, tokens, agentId, taskId, metadata } = params;
|
|
88
|
+
// Determine provider type
|
|
89
|
+
const providerType = this.getProviderType(provider);
|
|
90
|
+
// Calculate cost
|
|
91
|
+
const cost = this.calculateCost(provider, model, tokens);
|
|
92
|
+
// Create request record
|
|
93
|
+
const request = {
|
|
94
|
+
id: this.generateRequestId(),
|
|
95
|
+
provider,
|
|
96
|
+
providerType,
|
|
97
|
+
model,
|
|
98
|
+
timestamp: Date.now(),
|
|
99
|
+
tokens,
|
|
100
|
+
cost,
|
|
101
|
+
agentId,
|
|
102
|
+
taskId,
|
|
103
|
+
metadata,
|
|
104
|
+
};
|
|
105
|
+
// Store request
|
|
106
|
+
this.requests.set(request.id, request);
|
|
107
|
+
this.logger.debug(`Tracked inference request: ${request.id}`, {
|
|
108
|
+
provider,
|
|
109
|
+
model,
|
|
110
|
+
cost,
|
|
111
|
+
tokens: tokens.totalTokens,
|
|
112
|
+
});
|
|
113
|
+
return request.id;
|
|
114
|
+
}
|
|
115
|
+
/**
|
|
116
|
+
* Get cost report for a time period
|
|
117
|
+
*
|
|
118
|
+
* @param startTime - Start timestamp (default: 24 hours ago)
|
|
119
|
+
* @param endTime - End timestamp (default: now)
|
|
120
|
+
* @returns Cost report
|
|
121
|
+
*/
|
|
122
|
+
getCostReport(startTime, endTime) {
|
|
123
|
+
const now = Date.now();
|
|
124
|
+
const start = startTime || now - this.config.ttl;
|
|
125
|
+
const end = endTime || now;
|
|
126
|
+
// Filter requests by time range
|
|
127
|
+
const requests = Array.from(this.requests.values()).filter(r => r.timestamp >= start && r.timestamp <= end);
|
|
128
|
+
// Aggregate by provider
|
|
129
|
+
const byProvider = new Map();
|
|
130
|
+
for (const request of requests) {
|
|
131
|
+
let metrics = byProvider.get(request.provider);
|
|
132
|
+
if (!metrics) {
|
|
133
|
+
metrics = {
|
|
134
|
+
provider: request.provider,
|
|
135
|
+
providerType: request.providerType,
|
|
136
|
+
requestCount: 0,
|
|
137
|
+
inputTokens: 0,
|
|
138
|
+
outputTokens: 0,
|
|
139
|
+
totalTokens: 0,
|
|
140
|
+
totalCost: 0,
|
|
141
|
+
avgCostPerRequest: 0,
|
|
142
|
+
topModel: '',
|
|
143
|
+
modelCounts: {},
|
|
144
|
+
};
|
|
145
|
+
byProvider.set(request.provider, metrics);
|
|
146
|
+
}
|
|
147
|
+
// Accumulate metrics
|
|
148
|
+
metrics.requestCount++;
|
|
149
|
+
metrics.inputTokens += request.tokens.inputTokens;
|
|
150
|
+
metrics.outputTokens += request.tokens.outputTokens;
|
|
151
|
+
metrics.totalTokens += request.tokens.totalTokens;
|
|
152
|
+
metrics.totalCost += request.cost;
|
|
153
|
+
// Track model usage
|
|
154
|
+
metrics.modelCounts[request.model] = (metrics.modelCounts[request.model] || 0) + 1;
|
|
155
|
+
}
|
|
156
|
+
// Calculate averages and top models
|
|
157
|
+
for (const metrics of byProvider.values()) {
|
|
158
|
+
metrics.avgCostPerRequest = metrics.totalCost / metrics.requestCount;
|
|
159
|
+
// Find most used model
|
|
160
|
+
let maxCount = 0;
|
|
161
|
+
for (const [model, count] of Object.entries(metrics.modelCounts)) {
|
|
162
|
+
if (count > maxCount) {
|
|
163
|
+
maxCount = count;
|
|
164
|
+
metrics.topModel = model;
|
|
165
|
+
}
|
|
166
|
+
}
|
|
167
|
+
}
|
|
168
|
+
// Calculate savings
|
|
169
|
+
const savings = this.calculateSavings(requests);
|
|
170
|
+
// Calculate totals
|
|
171
|
+
const totalRequests = requests.length;
|
|
172
|
+
const totalCost = requests.reduce((sum, r) => sum + r.cost, 0);
|
|
173
|
+
const totalTokens = requests.reduce((sum, r) => sum + r.tokens.totalTokens, 0);
|
|
174
|
+
// Calculate rates
|
|
175
|
+
const periodHours = (end - start) / 3600000;
|
|
176
|
+
const requestsPerHour = totalRequests / periodHours;
|
|
177
|
+
const costPerHour = totalCost / periodHours;
|
|
178
|
+
return {
|
|
179
|
+
timestamp: now,
|
|
180
|
+
periodStart: start,
|
|
181
|
+
periodEnd: end,
|
|
182
|
+
byProvider,
|
|
183
|
+
savings,
|
|
184
|
+
totalRequests,
|
|
185
|
+
totalCost,
|
|
186
|
+
totalTokens,
|
|
187
|
+
requestsPerHour,
|
|
188
|
+
costPerHour,
|
|
189
|
+
};
|
|
190
|
+
}
|
|
191
|
+
/**
|
|
192
|
+
* Get metrics for a specific provider
|
|
193
|
+
*
|
|
194
|
+
* @param provider - Provider name
|
|
195
|
+
* @returns Provider metrics or null if not found
|
|
196
|
+
*/
|
|
197
|
+
getProviderMetrics(provider) {
|
|
198
|
+
const report = this.getCostReport();
|
|
199
|
+
return report.byProvider.get(provider) || null;
|
|
200
|
+
}
|
|
201
|
+
/**
|
|
202
|
+
* Get all requests (optionally filtered)
|
|
203
|
+
*
|
|
204
|
+
* @param filter - Optional filter function
|
|
205
|
+
* @returns Array of requests
|
|
206
|
+
*/
|
|
207
|
+
getRequests(filter) {
|
|
208
|
+
const requests = Array.from(this.requests.values());
|
|
209
|
+
return filter ? requests.filter(filter) : requests;
|
|
210
|
+
}
|
|
211
|
+
/**
|
|
212
|
+
* Clear all tracked requests
|
|
213
|
+
*/
|
|
214
|
+
reset() {
|
|
215
|
+
this.requests.clear();
|
|
216
|
+
this.logger.info('Inference cost tracker reset');
|
|
217
|
+
}
|
|
218
|
+
/**
|
|
219
|
+
* Get provider type classification
|
|
220
|
+
*/
|
|
221
|
+
getProviderType(provider) {
|
|
222
|
+
return provider === 'ruvllm' || provider === 'onnx' ? 'local' : 'cloud';
|
|
223
|
+
}
|
|
224
|
+
/**
|
|
225
|
+
* Calculate cost for a request
|
|
226
|
+
*/
|
|
227
|
+
calculateCost(provider, model, tokens) {
|
|
228
|
+
// Local inference is free
|
|
229
|
+
if (this.getProviderType(provider) === 'local') {
|
|
230
|
+
return 0;
|
|
231
|
+
}
|
|
232
|
+
// Find pricing
|
|
233
|
+
const pricing = this.findPricing(provider, model);
|
|
234
|
+
if (!pricing) {
|
|
235
|
+
this.logger.warn(`No pricing found for ${provider}/${model}, assuming $0`);
|
|
236
|
+
return 0;
|
|
237
|
+
}
|
|
238
|
+
// Calculate cost
|
|
239
|
+
const inputCost = (tokens.inputTokens / 1000000) * pricing.inputCostPerMillion;
|
|
240
|
+
const outputCost = (tokens.outputTokens / 1000000) * pricing.outputCostPerMillion;
|
|
241
|
+
let cacheWriteCost = 0;
|
|
242
|
+
let cacheReadCost = 0;
|
|
243
|
+
if (tokens.cacheCreationTokens && pricing.cacheWriteCostPerMillion) {
|
|
244
|
+
cacheWriteCost = (tokens.cacheCreationTokens / 1000000) * pricing.cacheWriteCostPerMillion;
|
|
245
|
+
}
|
|
246
|
+
if (tokens.cacheReadTokens && pricing.cacheReadCostPerMillion) {
|
|
247
|
+
cacheReadCost = (tokens.cacheReadTokens / 1000000) * pricing.cacheReadCostPerMillion;
|
|
248
|
+
}
|
|
249
|
+
return inputCost + outputCost + cacheWriteCost + cacheReadCost;
|
|
250
|
+
}
|
|
251
|
+
/**
|
|
252
|
+
* Find pricing for provider/model
|
|
253
|
+
*/
|
|
254
|
+
findPricing(provider, model) {
|
|
255
|
+
// Map inference provider to pricing provider
|
|
256
|
+
const pricingProvider = provider === 'ruvllm' ? 'openrouter' : provider;
|
|
257
|
+
return cost_js_1.PRICING_TABLE.find(p => p.provider === pricingProvider && p.model === model) || null;
|
|
258
|
+
}
|
|
259
|
+
/**
|
|
260
|
+
* Calculate cost savings from using local inference
|
|
261
|
+
*/
|
|
262
|
+
calculateSavings(requests) {
|
|
263
|
+
const localRequests = requests.filter(r => r.providerType === 'local');
|
|
264
|
+
const cloudRequests = requests.filter(r => r.providerType === 'cloud');
|
|
265
|
+
const actualCost = requests.reduce((sum, r) => sum + r.cost, 0);
|
|
266
|
+
// Calculate what local requests would cost if they were cloud
|
|
267
|
+
const baselinePricing = this.findPricing(this.config.baselineProvider, this.config.baselineModel);
|
|
268
|
+
let cloudBaselineCost = actualCost;
|
|
269
|
+
if (baselinePricing) {
|
|
270
|
+
const localAsCloudCost = localRequests.reduce((sum, r) => {
|
|
271
|
+
const inputCost = (r.tokens.inputTokens / 1000000) * baselinePricing.inputCostPerMillion;
|
|
272
|
+
const outputCost = (r.tokens.outputTokens / 1000000) * baselinePricing.outputCostPerMillion;
|
|
273
|
+
return sum + inputCost + outputCost;
|
|
274
|
+
}, 0);
|
|
275
|
+
cloudBaselineCost = actualCost + localAsCloudCost;
|
|
276
|
+
}
|
|
277
|
+
const totalSavings = cloudBaselineCost - actualCost;
|
|
278
|
+
const savingsPercentage = cloudBaselineCost > 0
|
|
279
|
+
? (totalSavings / cloudBaselineCost) * 100
|
|
280
|
+
: 0;
|
|
281
|
+
const totalRequests = requests.length;
|
|
282
|
+
const localRequestPercentage = totalRequests > 0
|
|
283
|
+
? (localRequests.length / totalRequests) * 100
|
|
284
|
+
: 0;
|
|
285
|
+
const cloudRequestPercentage = totalRequests > 0
|
|
286
|
+
? (cloudRequests.length / totalRequests) * 100
|
|
287
|
+
: 0;
|
|
288
|
+
return {
|
|
289
|
+
actualCost,
|
|
290
|
+
cloudBaselineCost,
|
|
291
|
+
totalSavings,
|
|
292
|
+
savingsPercentage,
|
|
293
|
+
localRequestPercentage,
|
|
294
|
+
cloudRequestPercentage,
|
|
295
|
+
localRequests: localRequests.length,
|
|
296
|
+
cloudRequests: cloudRequests.length,
|
|
297
|
+
totalRequests,
|
|
298
|
+
};
|
|
299
|
+
}
|
|
300
|
+
/**
|
|
301
|
+
* Generate unique request ID
|
|
302
|
+
*/
|
|
303
|
+
generateRequestId() {
|
|
304
|
+
return `inf-${Date.now()}-${Math.random().toString(36).substring(2, 11)}`;
|
|
305
|
+
}
|
|
306
|
+
/**
|
|
307
|
+
* Start automatic pruning of old requests
|
|
308
|
+
*/
|
|
309
|
+
startAutoPrune() {
|
|
310
|
+
this.pruneTimer = setInterval(() => {
|
|
311
|
+
this.pruneOldRequests();
|
|
312
|
+
}, this.config.pruneInterval);
|
|
313
|
+
}
|
|
314
|
+
/**
|
|
315
|
+
* Prune requests older than TTL
|
|
316
|
+
*/
|
|
317
|
+
pruneOldRequests() {
|
|
318
|
+
const cutoff = Date.now() - this.config.ttl;
|
|
319
|
+
let pruned = 0;
|
|
320
|
+
for (const [id, request] of this.requests.entries()) {
|
|
321
|
+
if (request.timestamp < cutoff) {
|
|
322
|
+
this.requests.delete(id);
|
|
323
|
+
pruned++;
|
|
324
|
+
}
|
|
325
|
+
}
|
|
326
|
+
if (pruned > 0) {
|
|
327
|
+
this.logger.debug(`Pruned ${pruned} old inference requests`);
|
|
328
|
+
}
|
|
329
|
+
}
|
|
330
|
+
/**
|
|
331
|
+
* Stop auto-pruning and cleanup
|
|
332
|
+
*/
|
|
333
|
+
destroy() {
|
|
334
|
+
if (this.pruneTimer) {
|
|
335
|
+
clearInterval(this.pruneTimer);
|
|
336
|
+
this.pruneTimer = undefined;
|
|
337
|
+
}
|
|
338
|
+
this.requests.clear();
|
|
339
|
+
}
|
|
340
|
+
/**
|
|
341
|
+
* Export data for persistence (e.g., to memory store)
|
|
342
|
+
*/
|
|
343
|
+
exportData() {
|
|
344
|
+
return {
|
|
345
|
+
requests: Array.from(this.requests.values()),
|
|
346
|
+
config: this.config,
|
|
347
|
+
timestamp: Date.now(),
|
|
348
|
+
};
|
|
349
|
+
}
|
|
350
|
+
/**
|
|
351
|
+
* Import data from persistence
|
|
352
|
+
*/
|
|
353
|
+
importData(data) {
|
|
354
|
+
this.requests.clear();
|
|
355
|
+
// Only import requests within TTL
|
|
356
|
+
const cutoff = Date.now() - this.config.ttl;
|
|
357
|
+
let imported = 0;
|
|
358
|
+
for (const request of data.requests) {
|
|
359
|
+
if (request.timestamp >= cutoff) {
|
|
360
|
+
this.requests.set(request.id, request);
|
|
361
|
+
imported++;
|
|
362
|
+
}
|
|
363
|
+
}
|
|
364
|
+
this.logger.info(`Imported ${imported} inference requests from persistence`);
|
|
365
|
+
}
|
|
366
|
+
}
|
|
367
|
+
exports.InferenceCostTracker = InferenceCostTracker;
|
|
368
|
+
/**
|
|
369
|
+
* Global singleton instance
|
|
370
|
+
*/
|
|
371
|
+
let globalTracker = null;
|
|
372
|
+
/**
|
|
373
|
+
* Get or create the global cost tracker
|
|
374
|
+
*/
|
|
375
|
+
function getInferenceCostTracker(config) {
|
|
376
|
+
if (!globalTracker) {
|
|
377
|
+
globalTracker = new InferenceCostTracker(config);
|
|
378
|
+
}
|
|
379
|
+
return globalTracker;
|
|
380
|
+
}
|
|
381
|
+
/**
|
|
382
|
+
* Reset global tracker (for testing)
|
|
383
|
+
*/
|
|
384
|
+
function resetInferenceCostTracker() {
|
|
385
|
+
if (globalTracker) {
|
|
386
|
+
globalTracker.destroy();
|
|
387
|
+
globalTracker = null;
|
|
388
|
+
}
|
|
389
|
+
}
|
|
390
|
+
/**
|
|
391
|
+
* Format cost report as human-readable text
|
|
392
|
+
*
|
|
393
|
+
* @param report - Cost report
|
|
394
|
+
* @returns Formatted text
|
|
395
|
+
*/
|
|
396
|
+
function formatCostReport(report) {
|
|
397
|
+
const lines = [];
|
|
398
|
+
lines.push('Inference Cost Report');
|
|
399
|
+
lines.push('====================');
|
|
400
|
+
lines.push('');
|
|
401
|
+
// Time range
|
|
402
|
+
const periodStart = new Date(report.periodStart).toISOString();
|
|
403
|
+
const periodEnd = new Date(report.periodEnd).toISOString();
|
|
404
|
+
lines.push(`Period: ${periodStart} to ${periodEnd}`);
|
|
405
|
+
lines.push('');
|
|
406
|
+
// Overall metrics
|
|
407
|
+
lines.push('Overall Metrics:');
|
|
408
|
+
lines.push(` Total Requests: ${report.totalRequests.toLocaleString()}`);
|
|
409
|
+
lines.push(` Total Tokens: ${report.totalTokens.toLocaleString()}`);
|
|
410
|
+
lines.push(` Total Cost: $${report.totalCost.toFixed(4)}`);
|
|
411
|
+
lines.push(` Requests/Hour: ${report.requestsPerHour.toFixed(1)}`);
|
|
412
|
+
lines.push(` Cost/Hour: $${report.costPerHour.toFixed(4)}`);
|
|
413
|
+
lines.push('');
|
|
414
|
+
// Savings
|
|
415
|
+
const { savings } = report;
|
|
416
|
+
lines.push('Cost Savings Analysis:');
|
|
417
|
+
lines.push(` Actual Cost: $${savings.actualCost.toFixed(4)}`);
|
|
418
|
+
lines.push(` Cloud Baseline Cost: $${savings.cloudBaselineCost.toFixed(4)}`);
|
|
419
|
+
lines.push(` Total Savings: $${savings.totalSavings.toFixed(4)} (${savings.savingsPercentage.toFixed(1)}%)`);
|
|
420
|
+
lines.push(` Local Requests: ${savings.localRequests} (${savings.localRequestPercentage.toFixed(1)}%)`);
|
|
421
|
+
lines.push(` Cloud Requests: ${savings.cloudRequests} (${savings.cloudRequestPercentage.toFixed(1)}%)`);
|
|
422
|
+
lines.push('');
|
|
423
|
+
// Per-provider breakdown
|
|
424
|
+
lines.push('By Provider:');
|
|
425
|
+
for (const [provider, metrics] of report.byProvider.entries()) {
|
|
426
|
+
const providerIcon = metrics.providerType === 'local' ? '🏠' : '☁️';
|
|
427
|
+
lines.push(` ${providerIcon} ${provider}:`);
|
|
428
|
+
lines.push(` Requests: ${metrics.requestCount.toLocaleString()}`);
|
|
429
|
+
lines.push(` Tokens: ${metrics.totalTokens.toLocaleString()}`);
|
|
430
|
+
lines.push(` Cost: $${metrics.totalCost.toFixed(4)}`);
|
|
431
|
+
lines.push(` Avg Cost/Request: $${metrics.avgCostPerRequest.toFixed(6)}`);
|
|
432
|
+
lines.push(` Top Model: ${metrics.topModel}`);
|
|
433
|
+
}
|
|
434
|
+
return lines.join('\n');
|
|
435
|
+
}
|
|
436
|
+
/**
|
|
437
|
+
* Format cost report as JSON
|
|
438
|
+
*
|
|
439
|
+
* @param report - Cost report
|
|
440
|
+
* @returns JSON string
|
|
441
|
+
*/
|
|
442
|
+
function formatCostReportJSON(report) {
|
|
443
|
+
const data = {
|
|
444
|
+
timestamp: new Date(report.timestamp).toISOString(),
|
|
445
|
+
period: {
|
|
446
|
+
start: new Date(report.periodStart).toISOString(),
|
|
447
|
+
end: new Date(report.periodEnd).toISOString(),
|
|
448
|
+
},
|
|
449
|
+
overall: {
|
|
450
|
+
totalRequests: report.totalRequests,
|
|
451
|
+
totalTokens: report.totalTokens,
|
|
452
|
+
totalCost: report.totalCost,
|
|
453
|
+
requestsPerHour: report.requestsPerHour,
|
|
454
|
+
costPerHour: report.costPerHour,
|
|
455
|
+
},
|
|
456
|
+
savings: report.savings,
|
|
457
|
+
byProvider: Object.fromEntries(report.byProvider.entries()),
|
|
458
|
+
};
|
|
459
|
+
return JSON.stringify(data, null, 2);
|
|
460
|
+
}
|
|
461
|
+
//# sourceMappingURL=InferenceCostTracker.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"InferenceCostTracker.js","sourceRoot":"","sources":["../../../src/core/metrics/InferenceCostTracker.ts"],"names":[],"mappings":"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"}
|
|
@@ -2,4 +2,5 @@
|
|
|
2
2
|
* Metrics Module - Unified Metrics Collection and Analysis
|
|
3
3
|
*/
|
|
4
4
|
export { MetricsAggregator, MetricsAggregatorConfig, MetricSource, MetricType, MetricPoint, MetricDefinition, Metric, MetricsSnapshot, MetricsSummary, TrendAnalysis, Anomaly, Recommendation, getMetricsAggregator, resetMetricsAggregator, } from './MetricsAggregator.js';
|
|
5
|
+
export { InferenceCostTracker, InferenceCostTrackerConfig, InferenceProvider, ProviderType, InferenceRequest, ProviderCostMetrics, CostSavingsAnalysis, CostReport, getInferenceCostTracker, resetInferenceCostTracker, formatCostReport, formatCostReportJSON, } from './InferenceCostTracker.js';
|
|
5
6
|
//# sourceMappingURL=index.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/core/metrics/index.ts"],"names":[],"mappings":"AAAA;;GAEG;AAEH,OAAO,EACL,iBAAiB,EACjB,uBAAuB,EACvB,YAAY,EACZ,UAAU,EACV,WAAW,EACX,gBAAgB,EAChB,MAAM,EACN,eAAe,EACf,cAAc,EACd,aAAa,EACb,OAAO,EACP,cAAc,EACd,oBAAoB,EACpB,sBAAsB,GACvB,MAAM,wBAAwB,CAAC"}
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/core/metrics/index.ts"],"names":[],"mappings":"AAAA;;GAEG;AAEH,OAAO,EACL,iBAAiB,EACjB,uBAAuB,EACvB,YAAY,EACZ,UAAU,EACV,WAAW,EACX,gBAAgB,EAChB,MAAM,EACN,eAAe,EACf,cAAc,EACd,aAAa,EACb,OAAO,EACP,cAAc,EACd,oBAAoB,EACpB,sBAAsB,GACvB,MAAM,wBAAwB,CAAC;AAEhC,OAAO,EACL,oBAAoB,EACpB,0BAA0B,EAC1B,iBAAiB,EACjB,YAAY,EACZ,gBAAgB,EAChB,mBAAmB,EACnB,mBAAmB,EACnB,UAAU,EACV,uBAAuB,EACvB,yBAAyB,EACzB,gBAAgB,EAChB,oBAAoB,GACrB,MAAM,2BAA2B,CAAC"}
|
|
@@ -3,9 +3,15 @@
|
|
|
3
3
|
* Metrics Module - Unified Metrics Collection and Analysis
|
|
4
4
|
*/
|
|
5
5
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
6
|
-
exports.resetMetricsAggregator = exports.getMetricsAggregator = exports.MetricsAggregator = void 0;
|
|
6
|
+
exports.formatCostReportJSON = exports.formatCostReport = exports.resetInferenceCostTracker = exports.getInferenceCostTracker = exports.InferenceCostTracker = exports.resetMetricsAggregator = exports.getMetricsAggregator = exports.MetricsAggregator = void 0;
|
|
7
7
|
var MetricsAggregator_js_1 = require("./MetricsAggregator.js");
|
|
8
8
|
Object.defineProperty(exports, "MetricsAggregator", { enumerable: true, get: function () { return MetricsAggregator_js_1.MetricsAggregator; } });
|
|
9
9
|
Object.defineProperty(exports, "getMetricsAggregator", { enumerable: true, get: function () { return MetricsAggregator_js_1.getMetricsAggregator; } });
|
|
10
10
|
Object.defineProperty(exports, "resetMetricsAggregator", { enumerable: true, get: function () { return MetricsAggregator_js_1.resetMetricsAggregator; } });
|
|
11
|
+
var InferenceCostTracker_js_1 = require("./InferenceCostTracker.js");
|
|
12
|
+
Object.defineProperty(exports, "InferenceCostTracker", { enumerable: true, get: function () { return InferenceCostTracker_js_1.InferenceCostTracker; } });
|
|
13
|
+
Object.defineProperty(exports, "getInferenceCostTracker", { enumerable: true, get: function () { return InferenceCostTracker_js_1.getInferenceCostTracker; } });
|
|
14
|
+
Object.defineProperty(exports, "resetInferenceCostTracker", { enumerable: true, get: function () { return InferenceCostTracker_js_1.resetInferenceCostTracker; } });
|
|
15
|
+
Object.defineProperty(exports, "formatCostReport", { enumerable: true, get: function () { return InferenceCostTracker_js_1.formatCostReport; } });
|
|
16
|
+
Object.defineProperty(exports, "formatCostReportJSON", { enumerable: true, get: function () { return InferenceCostTracker_js_1.formatCostReportJSON; } });
|
|
11
17
|
//# sourceMappingURL=index.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../../src/core/metrics/index.ts"],"names":[],"mappings":";AAAA;;GAEG;;;AAEH,+DAegC;AAd9B,yHAAA,iBAAiB,OAAA;AAYjB,4HAAA,oBAAoB,OAAA;AACpB,8HAAA,sBAAsB,OAAA"}
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../../src/core/metrics/index.ts"],"names":[],"mappings":";AAAA;;GAEG;;;AAEH,+DAegC;AAd9B,yHAAA,iBAAiB,OAAA;AAYjB,4HAAA,oBAAoB,OAAA;AACpB,8HAAA,sBAAsB,OAAA;AAGxB,qEAamC;AAZjC,+HAAA,oBAAoB,OAAA;AAQpB,kIAAA,uBAAuB,OAAA;AACvB,oIAAA,yBAAyB,OAAA;AACzB,2HAAA,gBAAgB,OAAA;AAChB,+HAAA,oBAAoB,OAAA"}
|
|
@@ -42,6 +42,23 @@ export declare class AdaptiveModelRouter implements ModelRouter {
|
|
|
42
42
|
* Analyze task complexity
|
|
43
43
|
*/
|
|
44
44
|
analyzeComplexity(task: QETask): Promise<TaskComplexity>;
|
|
45
|
+
/**
|
|
46
|
+
* Route to local RuvLLM model if available
|
|
47
|
+
* Returns null if local routing fails or is unavailable
|
|
48
|
+
*/
|
|
49
|
+
routeToLocal(task: QETask, analysis: any): Promise<ModelSelection | null>;
|
|
50
|
+
/**
|
|
51
|
+
* Check if local RuvLLM is available
|
|
52
|
+
*/
|
|
53
|
+
private checkLocalAvailability;
|
|
54
|
+
/**
|
|
55
|
+
* Select appropriate local model based on complexity
|
|
56
|
+
*/
|
|
57
|
+
private selectLocalModel;
|
|
58
|
+
/**
|
|
59
|
+
* Build reasoning string for local selection
|
|
60
|
+
*/
|
|
61
|
+
private buildLocalReasoning;
|
|
45
62
|
/**
|
|
46
63
|
* Create default selection when routing is disabled
|
|
47
64
|
*/
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"AdaptiveModelRouter.d.ts","sourceRoot":"","sources":["../../../src/core/routing/AdaptiveModelRouter.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAEH,OAAO,EAAE,MAAM,EAAE,MAAM,SAAS,CAAC;AACjC,OAAO,EACL,WAAW,EACX,cAAc,EACd,OAAO,EACP,cAAc,EACd,WAAW,EACX,YAAY,EACb,MAAM,SAAS,CAAC;AAIjB,OAAO,EAAE,kBAAkB,EAAE,MAAM,8BAA8B,CAAC;AAClE,OAAO,EAAE,QAAQ,EAAE,MAAM,aAAa,CAAC;AAEvC,qBAAa,mBAAoB,YAAW,WAAW;IACrD,OAAO,CAAC,MAAM,CAAe;IAC7B,OAAO,CAAC,kBAAkB,CAAqB;IAC/C,OAAO,CAAC,WAAW,CAAc;IACjC,OAAO,CAAC,WAAW,CAAqB;IACxC,OAAO,CAAC,QAAQ,CAAW;IAC3B,OAAO,CAAC,YAAY,CAAuB;gBAGzC,WAAW,EAAE,kBAAkB,EAC/B,QAAQ,EAAE,QAAQ,EAClB,MAAM,CAAC,EAAE,OAAO,CAAC,YAAY,CAAC;IAYhC;;OAEG;YACW,UAAU;IAWxB;;OAEG;IACG,WAAW,CAAC,IAAI,EAAE,MAAM,GAAG,OAAO,CAAC,cAAc,CAAC;
|
|
1
|
+
{"version":3,"file":"AdaptiveModelRouter.d.ts","sourceRoot":"","sources":["../../../src/core/routing/AdaptiveModelRouter.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAEH,OAAO,EAAE,MAAM,EAAE,MAAM,SAAS,CAAC;AACjC,OAAO,EACL,WAAW,EACX,cAAc,EACd,OAAO,EACP,cAAc,EACd,WAAW,EACX,YAAY,EACb,MAAM,SAAS,CAAC;AAIjB,OAAO,EAAE,kBAAkB,EAAE,MAAM,8BAA8B,CAAC;AAClE,OAAO,EAAE,QAAQ,EAAE,MAAM,aAAa,CAAC;AAEvC,qBAAa,mBAAoB,YAAW,WAAW;IACrD,OAAO,CAAC,MAAM,CAAe;IAC7B,OAAO,CAAC,kBAAkB,CAAqB;IAC/C,OAAO,CAAC,WAAW,CAAc;IACjC,OAAO,CAAC,WAAW,CAAqB;IACxC,OAAO,CAAC,QAAQ,CAAW;IAC3B,OAAO,CAAC,YAAY,CAAuB;gBAGzC,WAAW,EAAE,kBAAkB,EAC/B,QAAQ,EAAE,QAAQ,EAClB,MAAM,CAAC,EAAE,OAAO,CAAC,YAAY,CAAC;IAYhC;;OAEG;YACW,UAAU;IAWxB;;OAEG;IACG,WAAW,CAAC,IAAI,EAAE,MAAM,GAAG,OAAO,CAAC,cAAc,CAAC;IA6DxD;;OAEG;IACG,SAAS,CAAC,OAAO,EAAE,OAAO,EAAE,MAAM,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC;IAQhE;;OAEG;IACH,gBAAgB,CAAC,WAAW,EAAE,OAAO,EAAE,IAAI,EAAE,MAAM,GAAG,OAAO;IA6B7D;;OAEG;IACG,QAAQ,IAAI,OAAO,CAAC,WAAW,CAAC;IAItC;;OAEG;IACG,mBAAmB,IAAI,OAAO,CAAC,GAAG,CAAC;IAIzC;;OAEG;IACG,iBAAiB,CAAC,IAAI,EAAE,MAAM,GAAG,OAAO,CAAC,cAAc,CAAC;IAK9D;;;OAGG;IACG,YAAY,CAAC,IAAI,EAAE,MAAM,EAAE,QAAQ,EAAE,GAAG,GAAG,OAAO,CAAC,cAAc,GAAG,IAAI,CAAC;IAuD/E;;OAEG;YACW,sBAAsB;IAuBpC;;OAEG;IACH,OAAO,CAAC,gBAAgB;IAexB;;OAEG;IACH,OAAO,CAAC,mBAAmB;IAiB3B;;OAEG;IACH,OAAO,CAAC,sBAAsB;IAW9B;;OAEG;IACH,OAAO,CAAC,gBAAgB;IAcxB;;OAEG;IACH,OAAO,CAAC,kBAAkB;IAK1B;;OAEG;YACW,YAAY;IAK1B;;OAEG;YACW,wBAAwB;IAoCtC;;OAEG;IACH,OAAO,CAAC,cAAc;IAmBtB;;OAEG;YACW,cAAc;IAQ5B;;OAEG;IACH,UAAU,CAAC,OAAO,EAAE,OAAO,GAAG,IAAI;IAQlC;;OAEG;IACH,YAAY,CAAC,MAAM,EAAE,OAAO,CAAC,YAAY,CAAC,GAAG,IAAI;IAQjD;;OAEG;IACH,aAAa,IAAI,IAAI;CAGtB"}
|