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.
Files changed (49) hide show
  1. package/.claude/commands/aqe-costs.md +509 -0
  2. package/CHANGELOG.md +72 -0
  3. package/README.md +1 -1
  4. package/dist/agents/SONALifecycleManager.d.ts +226 -0
  5. package/dist/agents/SONALifecycleManager.d.ts.map +1 -0
  6. package/dist/agents/SONALifecycleManager.js +563 -0
  7. package/dist/agents/SONALifecycleManager.js.map +1 -0
  8. package/dist/agents/index.d.ts +2 -0
  9. package/dist/agents/index.d.ts.map +1 -1
  10. package/dist/agents/index.js +7 -1
  11. package/dist/agents/index.js.map +1 -1
  12. package/dist/core/memory/HNSWVectorMemory.js +1 -1
  13. package/dist/core/metrics/InferenceCostTracker.d.ts +293 -0
  14. package/dist/core/metrics/InferenceCostTracker.d.ts.map +1 -0
  15. package/dist/core/metrics/InferenceCostTracker.js +461 -0
  16. package/dist/core/metrics/InferenceCostTracker.js.map +1 -0
  17. package/dist/core/metrics/index.d.ts +1 -0
  18. package/dist/core/metrics/index.d.ts.map +1 -1
  19. package/dist/core/metrics/index.js +7 -1
  20. package/dist/core/metrics/index.js.map +1 -1
  21. package/dist/core/routing/AdaptiveModelRouter.d.ts +17 -0
  22. package/dist/core/routing/AdaptiveModelRouter.d.ts.map +1 -1
  23. package/dist/core/routing/AdaptiveModelRouter.js +117 -0
  24. package/dist/core/routing/AdaptiveModelRouter.js.map +1 -1
  25. package/dist/core/routing/ModelRules.d.ts +2 -0
  26. package/dist/core/routing/ModelRules.d.ts.map +1 -1
  27. package/dist/core/routing/ModelRules.js +82 -0
  28. package/dist/core/routing/ModelRules.js.map +1 -1
  29. package/dist/core/routing/types.d.ts +14 -1
  30. package/dist/core/routing/types.d.ts.map +1 -1
  31. package/dist/core/routing/types.js +7 -0
  32. package/dist/core/routing/types.js.map +1 -1
  33. package/dist/mcp/server-instructions.d.ts +1 -1
  34. package/dist/mcp/server-instructions.js +1 -1
  35. package/dist/mcp/services/AgentRegistry.d.ts +35 -0
  36. package/dist/mcp/services/AgentRegistry.d.ts.map +1 -1
  37. package/dist/mcp/services/AgentRegistry.js +126 -1
  38. package/dist/mcp/services/AgentRegistry.js.map +1 -1
  39. package/dist/mcp/tools/qe/accessibility/video-vision-analyzer.d.ts +8 -1
  40. package/dist/mcp/tools/qe/accessibility/video-vision-analyzer.d.ts.map +1 -1
  41. package/dist/mcp/tools/qe/accessibility/video-vision-analyzer.js +134 -46
  42. package/dist/mcp/tools/qe/accessibility/video-vision-analyzer.js.map +1 -1
  43. package/dist/mcp/tools/qe/accessibility/webvtt-generator.d.ts.map +1 -1
  44. package/dist/mcp/tools/qe/accessibility/webvtt-generator.js +11 -4
  45. package/dist/mcp/tools/qe/accessibility/webvtt-generator.js.map +1 -1
  46. package/dist/telemetry/metrics/collectors/cost.d.ts.map +1 -1
  47. package/dist/telemetry/metrics/collectors/cost.js +6 -0
  48. package/dist/telemetry/metrics/collectors/cost.js.map +1 -1
  49. 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;IAqDxD;;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;;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"}
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"}