agentic-qe 1.0.4 → 1.1.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/.claude/agents/qe-quality-analyzer.md +405 -0
- package/CHANGELOG.md +109 -0
- package/CONTRIBUTING.md +51 -0
- package/README.md +690 -134
- package/bin/aqe +90 -938
- package/dist/adapters/MemoryStoreAdapter.d.ts.map +1 -1
- package/dist/adapters/MemoryStoreAdapter.js +6 -0
- package/dist/adapters/MemoryStoreAdapter.js.map +1 -1
- package/dist/agents/CoverageAnalyzerAgent.d.ts +58 -3
- package/dist/agents/CoverageAnalyzerAgent.d.ts.map +1 -1
- package/dist/agents/CoverageAnalyzerAgent.js +316 -48
- package/dist/agents/CoverageAnalyzerAgent.js.map +1 -1
- package/dist/agents/FlakyTestHunterAgent.d.ts +48 -4
- package/dist/agents/FlakyTestHunterAgent.d.ts.map +1 -1
- package/dist/agents/FlakyTestHunterAgent.js +217 -10
- package/dist/agents/FlakyTestHunterAgent.js.map +1 -1
- package/dist/agents/LearningAgent.d.ts +75 -0
- package/dist/agents/LearningAgent.d.ts.map +1 -0
- package/dist/agents/LearningAgent.js +177 -0
- package/dist/agents/LearningAgent.js.map +1 -0
- package/dist/agents/TestGeneratorAgent.d.ts +42 -2
- package/dist/agents/TestGeneratorAgent.d.ts.map +1 -1
- package/dist/agents/TestGeneratorAgent.js +232 -13
- package/dist/agents/TestGeneratorAgent.js.map +1 -1
- package/dist/cli/commands/improve/index.d.ts +70 -0
- package/dist/cli/commands/improve/index.d.ts.map +1 -0
- package/dist/cli/commands/improve/index.js +530 -0
- package/dist/cli/commands/improve/index.js.map +1 -0
- package/dist/cli/commands/init.d.ts +34 -0
- package/dist/cli/commands/init.d.ts.map +1 -1
- package/dist/cli/commands/init.js +875 -42
- package/dist/cli/commands/init.js.map +1 -1
- package/dist/cli/commands/learn/index.d.ts +68 -0
- package/dist/cli/commands/learn/index.d.ts.map +1 -0
- package/dist/cli/commands/learn/index.js +431 -0
- package/dist/cli/commands/learn/index.js.map +1 -0
- package/dist/cli/commands/patterns/index.d.ts +75 -0
- package/dist/cli/commands/patterns/index.d.ts.map +1 -0
- package/dist/cli/commands/patterns/index.js +502 -0
- package/dist/cli/commands/patterns/index.js.map +1 -0
- package/dist/cli/commands/routing/index.d.ts +95 -0
- package/dist/cli/commands/routing/index.d.ts.map +1 -0
- package/dist/cli/commands/routing/index.js +399 -0
- package/dist/cli/commands/routing/index.js.map +1 -0
- package/dist/cli/index.js +455 -8
- package/dist/cli/index.js.map +1 -1
- package/dist/core/memory/SwarmMemoryManager.d.ts +5 -0
- package/dist/core/memory/SwarmMemoryManager.d.ts.map +1 -1
- package/dist/core/memory/SwarmMemoryManager.js +7 -0
- package/dist/core/memory/SwarmMemoryManager.js.map +1 -1
- package/dist/core/routing/AdaptiveModelRouter.d.ts +86 -0
- package/dist/core/routing/AdaptiveModelRouter.d.ts.map +1 -0
- package/dist/core/routing/AdaptiveModelRouter.js +264 -0
- package/dist/core/routing/AdaptiveModelRouter.js.map +1 -0
- package/dist/core/routing/ComplexityAnalyzer.d.ts +49 -0
- package/dist/core/routing/ComplexityAnalyzer.d.ts.map +1 -0
- package/dist/core/routing/ComplexityAnalyzer.js +182 -0
- package/dist/core/routing/ComplexityAnalyzer.js.map +1 -0
- package/dist/core/routing/CostTracker.d.ts +55 -0
- package/dist/core/routing/CostTracker.d.ts.map +1 -0
- package/dist/core/routing/CostTracker.js +210 -0
- package/dist/core/routing/CostTracker.js.map +1 -0
- package/dist/core/routing/FleetManagerIntegration.d.ts +68 -0
- package/dist/core/routing/FleetManagerIntegration.d.ts.map +1 -0
- package/dist/core/routing/FleetManagerIntegration.js +170 -0
- package/dist/core/routing/FleetManagerIntegration.js.map +1 -0
- package/dist/core/routing/ModelRules.d.ts +38 -0
- package/dist/core/routing/ModelRules.d.ts.map +1 -0
- package/dist/core/routing/ModelRules.js +170 -0
- package/dist/core/routing/ModelRules.js.map +1 -0
- package/dist/core/routing/QETask.d.ts +12 -0
- package/dist/core/routing/QETask.d.ts.map +1 -0
- package/dist/core/routing/QETask.js +21 -0
- package/dist/core/routing/QETask.js.map +1 -0
- package/dist/core/routing/index.d.ts +19 -0
- package/dist/core/routing/index.d.ts.map +1 -0
- package/dist/core/routing/index.js +50 -0
- package/dist/core/routing/index.js.map +1 -0
- package/dist/core/routing/types.d.ts +136 -0
- package/dist/core/routing/types.d.ts.map +1 -0
- package/dist/core/routing/types.js +28 -0
- package/dist/core/routing/types.js.map +1 -0
- package/dist/index.d.ts +10 -0
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +10 -0
- package/dist/index.js.map +1 -1
- package/dist/learning/FlakyFixRecommendations.d.ts +40 -0
- package/dist/learning/FlakyFixRecommendations.d.ts.map +1 -0
- package/dist/learning/FlakyFixRecommendations.js +247 -0
- package/dist/learning/FlakyFixRecommendations.js.map +1 -0
- package/dist/learning/FlakyPredictionModel.d.ts +57 -0
- package/dist/learning/FlakyPredictionModel.d.ts.map +1 -0
- package/dist/learning/FlakyPredictionModel.js +289 -0
- package/dist/learning/FlakyPredictionModel.js.map +1 -0
- package/dist/learning/FlakyTestDetector.d.ts +46 -0
- package/dist/learning/FlakyTestDetector.d.ts.map +1 -0
- package/dist/learning/FlakyTestDetector.js +215 -0
- package/dist/learning/FlakyTestDetector.js.map +1 -0
- package/dist/learning/ImprovementLoop.d.ts +119 -0
- package/dist/learning/ImprovementLoop.d.ts.map +1 -0
- package/dist/learning/ImprovementLoop.js +353 -0
- package/dist/learning/ImprovementLoop.js.map +1 -0
- package/dist/learning/LearningEngine.d.ts +144 -0
- package/dist/learning/LearningEngine.d.ts.map +1 -0
- package/dist/learning/LearningEngine.js +531 -0
- package/dist/learning/LearningEngine.js.map +1 -0
- package/dist/learning/PerformanceTracker.d.ts +118 -0
- package/dist/learning/PerformanceTracker.d.ts.map +1 -0
- package/dist/learning/PerformanceTracker.js +376 -0
- package/dist/learning/PerformanceTracker.js.map +1 -0
- package/dist/learning/StatisticalAnalysis.d.ts +47 -0
- package/dist/learning/StatisticalAnalysis.d.ts.map +1 -0
- package/dist/learning/StatisticalAnalysis.js +170 -0
- package/dist/learning/StatisticalAnalysis.js.map +1 -0
- package/dist/learning/SwarmIntegration.d.ts +107 -0
- package/dist/learning/SwarmIntegration.d.ts.map +1 -0
- package/dist/learning/SwarmIntegration.js +191 -0
- package/dist/learning/SwarmIntegration.js.map +1 -0
- package/dist/learning/index.d.ts +10 -0
- package/dist/learning/index.d.ts.map +1 -0
- package/dist/learning/index.js +16 -0
- package/dist/learning/index.js.map +1 -0
- package/dist/learning/types.d.ts +288 -0
- package/dist/learning/types.d.ts.map +1 -0
- package/dist/learning/types.js +9 -0
- package/dist/learning/types.js.map +1 -0
- package/dist/mcp/handlers/phase2/Phase2Tools.d.ts +175 -0
- package/dist/mcp/handlers/phase2/Phase2Tools.d.ts.map +1 -0
- package/dist/mcp/handlers/phase2/Phase2Tools.js +693 -0
- package/dist/mcp/handlers/phase2/Phase2Tools.js.map +1 -0
- package/dist/mcp/server.d.ts.map +1 -1
- package/dist/mcp/server.js +171 -9
- package/dist/mcp/server.js.map +1 -1
- package/dist/mcp/streaming/CoverageAnalyzeStreamHandler.d.ts +112 -0
- package/dist/mcp/streaming/CoverageAnalyzeStreamHandler.d.ts.map +1 -0
- package/dist/mcp/streaming/CoverageAnalyzeStreamHandler.js +341 -0
- package/dist/mcp/streaming/CoverageAnalyzeStreamHandler.js.map +1 -0
- package/dist/mcp/streaming/StreamingMCPTool.d.ts +80 -0
- package/dist/mcp/streaming/StreamingMCPTool.d.ts.map +1 -0
- package/dist/mcp/streaming/StreamingMCPTool.js +276 -0
- package/dist/mcp/streaming/StreamingMCPTool.js.map +1 -0
- package/dist/mcp/streaming/TestExecuteStreamHandler.d.ts +73 -0
- package/dist/mcp/streaming/TestExecuteStreamHandler.d.ts.map +1 -0
- package/dist/mcp/streaming/TestExecuteStreamHandler.js +436 -0
- package/dist/mcp/streaming/TestExecuteStreamHandler.js.map +1 -0
- package/dist/mcp/streaming/index.d.ts +14 -0
- package/dist/mcp/streaming/index.d.ts.map +1 -0
- package/dist/mcp/streaming/index.js +30 -0
- package/dist/mcp/streaming/index.js.map +1 -0
- package/dist/mcp/streaming/types.d.ts +117 -0
- package/dist/mcp/streaming/types.d.ts.map +1 -0
- package/dist/mcp/streaming/types.js +88 -0
- package/dist/mcp/streaming/types.js.map +1 -0
- package/dist/mcp/tools.d.ts +18 -1
- package/dist/mcp/tools.d.ts.map +1 -1
- package/dist/mcp/tools.js +123 -1
- package/dist/mcp/tools.js.map +1 -1
- package/dist/reasoning/CodeSignatureGenerator.d.ts +98 -0
- package/dist/reasoning/CodeSignatureGenerator.d.ts.map +1 -0
- package/dist/reasoning/CodeSignatureGenerator.js +427 -0
- package/dist/reasoning/CodeSignatureGenerator.js.map +1 -0
- package/dist/reasoning/PatternClassifier.d.ts +98 -0
- package/dist/reasoning/PatternClassifier.d.ts.map +1 -0
- package/dist/reasoning/PatternClassifier.js +345 -0
- package/dist/reasoning/PatternClassifier.js.map +1 -0
- package/dist/reasoning/PatternExtractor.d.ts +131 -0
- package/dist/reasoning/PatternExtractor.d.ts.map +1 -0
- package/dist/reasoning/PatternExtractor.js +539 -0
- package/dist/reasoning/PatternExtractor.js.map +1 -0
- package/dist/reasoning/PatternMemoryIntegration.d.ts +102 -0
- package/dist/reasoning/PatternMemoryIntegration.d.ts.map +1 -0
- package/dist/reasoning/PatternMemoryIntegration.js +336 -0
- package/dist/reasoning/PatternMemoryIntegration.js.map +1 -0
- package/dist/reasoning/QEReasoningBank.d.ts +121 -0
- package/dist/reasoning/QEReasoningBank.d.ts.map +1 -0
- package/dist/reasoning/QEReasoningBank.js +235 -0
- package/dist/reasoning/QEReasoningBank.js.map +1 -0
- package/dist/reasoning/TestTemplateCreator.d.ts +95 -0
- package/dist/reasoning/TestTemplateCreator.d.ts.map +1 -0
- package/dist/reasoning/TestTemplateCreator.js +535 -0
- package/dist/reasoning/TestTemplateCreator.js.map +1 -0
- package/dist/reasoning/index.d.ts +10 -0
- package/dist/reasoning/index.d.ts.map +1 -0
- package/dist/reasoning/index.js +31 -0
- package/dist/reasoning/index.js.map +1 -0
- package/dist/reasoning/types.d.ts +717 -0
- package/dist/reasoning/types.d.ts.map +1 -0
- package/dist/reasoning/types.js +57 -0
- package/dist/reasoning/types.js.map +1 -0
- package/dist/types/index.d.ts +20 -1
- package/dist/types/index.d.ts.map +1 -1
- package/dist/types/index.js.map +1 -1
- package/dist/types/pattern.types.d.ts +364 -0
- package/dist/types/pattern.types.d.ts.map +1 -0
- package/dist/types/pattern.types.js +60 -0
- package/dist/types/pattern.types.js.map +1 -0
- package/package.json +25 -3
|
@@ -0,0 +1,182 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
/**
|
|
3
|
+
* Complexity Analyzer
|
|
4
|
+
* Analyzes task complexity for model selection
|
|
5
|
+
*/
|
|
6
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
7
|
+
exports.ComplexityAnalyzer = void 0;
|
|
8
|
+
const types_1 = require("./types");
|
|
9
|
+
const ModelRules_1 = require("./ModelRules");
|
|
10
|
+
class ComplexityAnalyzer {
|
|
11
|
+
/**
|
|
12
|
+
* Analyze task complexity based on content and context
|
|
13
|
+
*/
|
|
14
|
+
analyzeComplexity(task) {
|
|
15
|
+
const taskContent = this.extractTaskContent(task);
|
|
16
|
+
const keywords = this.extractKeywords(taskContent);
|
|
17
|
+
// Score each complexity level
|
|
18
|
+
const scores = {
|
|
19
|
+
[types_1.TaskComplexity.SIMPLE]: this.scoreComplexity(keywords, types_1.TaskComplexity.SIMPLE),
|
|
20
|
+
[types_1.TaskComplexity.MODERATE]: this.scoreComplexity(keywords, types_1.TaskComplexity.MODERATE),
|
|
21
|
+
[types_1.TaskComplexity.COMPLEX]: this.scoreComplexity(keywords, types_1.TaskComplexity.COMPLEX),
|
|
22
|
+
[types_1.TaskComplexity.CRITICAL]: this.scoreComplexity(keywords, types_1.TaskComplexity.CRITICAL),
|
|
23
|
+
};
|
|
24
|
+
// Determine complexity (highest score wins)
|
|
25
|
+
const complexity = this.determineComplexity(scores);
|
|
26
|
+
const confidence = this.calculateConfidence(scores, complexity);
|
|
27
|
+
// Estimate tokens based on complexity
|
|
28
|
+
const estimatedTokens = this.estimateTokens(complexity, taskContent);
|
|
29
|
+
// Analyze special requirements
|
|
30
|
+
const requiresReasoning = this.requiresReasoning(keywords);
|
|
31
|
+
const requiresSecurity = this.requiresSecurity(keywords);
|
|
32
|
+
const requiresPerformance = this.requiresPerformance(keywords);
|
|
33
|
+
return {
|
|
34
|
+
complexity,
|
|
35
|
+
estimatedTokens,
|
|
36
|
+
requiresReasoning,
|
|
37
|
+
requiresSecurity,
|
|
38
|
+
requiresPerformance,
|
|
39
|
+
confidence,
|
|
40
|
+
};
|
|
41
|
+
}
|
|
42
|
+
/**
|
|
43
|
+
* Extract task content for analysis
|
|
44
|
+
*/
|
|
45
|
+
extractTaskContent(task) {
|
|
46
|
+
const parts = [];
|
|
47
|
+
if (task.type)
|
|
48
|
+
parts.push(task.type);
|
|
49
|
+
if (task.description)
|
|
50
|
+
parts.push(task.description);
|
|
51
|
+
if (task.data) {
|
|
52
|
+
if (typeof task.data === 'string') {
|
|
53
|
+
parts.push(task.data);
|
|
54
|
+
}
|
|
55
|
+
else if (typeof task.data === 'object') {
|
|
56
|
+
parts.push(JSON.stringify(task.data));
|
|
57
|
+
}
|
|
58
|
+
}
|
|
59
|
+
return parts.join(' ').toLowerCase();
|
|
60
|
+
}
|
|
61
|
+
/**
|
|
62
|
+
* Extract keywords from content
|
|
63
|
+
*/
|
|
64
|
+
extractKeywords(content) {
|
|
65
|
+
const words = content
|
|
66
|
+
.split(/\s+/)
|
|
67
|
+
.map((w) => w.replace(/[^a-z0-9-]/g, ''))
|
|
68
|
+
.filter((w) => w.length > 2);
|
|
69
|
+
return new Set(words);
|
|
70
|
+
}
|
|
71
|
+
/**
|
|
72
|
+
* Score complexity level based on keyword matches
|
|
73
|
+
*/
|
|
74
|
+
scoreComplexity(keywords, level) {
|
|
75
|
+
const levelKeywords = ModelRules_1.COMPLEXITY_KEYWORDS[level];
|
|
76
|
+
let score = 0;
|
|
77
|
+
levelKeywords.forEach((keyword) => {
|
|
78
|
+
if (keywords.has(keyword.toLowerCase())) {
|
|
79
|
+
score += 1;
|
|
80
|
+
}
|
|
81
|
+
});
|
|
82
|
+
// Apply weights based on level
|
|
83
|
+
const weights = {
|
|
84
|
+
[types_1.TaskComplexity.SIMPLE]: 1.0,
|
|
85
|
+
[types_1.TaskComplexity.MODERATE]: 1.2,
|
|
86
|
+
[types_1.TaskComplexity.COMPLEX]: 1.5,
|
|
87
|
+
[types_1.TaskComplexity.CRITICAL]: 2.0,
|
|
88
|
+
};
|
|
89
|
+
return score * weights[level];
|
|
90
|
+
}
|
|
91
|
+
/**
|
|
92
|
+
* Determine final complexity from scores
|
|
93
|
+
*/
|
|
94
|
+
determineComplexity(scores) {
|
|
95
|
+
let maxScore = 0;
|
|
96
|
+
let complexity = types_1.TaskComplexity.SIMPLE;
|
|
97
|
+
Object.entries(scores).forEach(([level, score]) => {
|
|
98
|
+
if (score > maxScore) {
|
|
99
|
+
maxScore = score;
|
|
100
|
+
complexity = level;
|
|
101
|
+
}
|
|
102
|
+
});
|
|
103
|
+
// If all scores are zero, default to MODERATE
|
|
104
|
+
if (maxScore === 0) {
|
|
105
|
+
return types_1.TaskComplexity.MODERATE;
|
|
106
|
+
}
|
|
107
|
+
return complexity;
|
|
108
|
+
}
|
|
109
|
+
/**
|
|
110
|
+
* Calculate confidence in complexity determination
|
|
111
|
+
*/
|
|
112
|
+
calculateConfidence(scores, selectedComplexity) {
|
|
113
|
+
const selectedScore = scores[selectedComplexity];
|
|
114
|
+
const totalScore = Object.values(scores).reduce((sum, s) => sum + s, 0);
|
|
115
|
+
if (totalScore === 0) {
|
|
116
|
+
return 0.5; // Low confidence with no keyword matches
|
|
117
|
+
}
|
|
118
|
+
return Math.min(selectedScore / totalScore, 1.0);
|
|
119
|
+
}
|
|
120
|
+
/**
|
|
121
|
+
* Estimate token count based on complexity
|
|
122
|
+
*/
|
|
123
|
+
estimateTokens(complexity, content) {
|
|
124
|
+
const baseTokens = content.length / 4; // Rough estimate: 1 token per 4 chars
|
|
125
|
+
const multipliers = {
|
|
126
|
+
[types_1.TaskComplexity.SIMPLE]: 1.0,
|
|
127
|
+
[types_1.TaskComplexity.MODERATE]: 1.5,
|
|
128
|
+
[types_1.TaskComplexity.COMPLEX]: 2.5,
|
|
129
|
+
[types_1.TaskComplexity.CRITICAL]: 3.5,
|
|
130
|
+
};
|
|
131
|
+
return Math.round(baseTokens * multipliers[complexity]);
|
|
132
|
+
}
|
|
133
|
+
/**
|
|
134
|
+
* Check if task requires advanced reasoning
|
|
135
|
+
*/
|
|
136
|
+
requiresReasoning(keywords) {
|
|
137
|
+
const reasoningKeywords = [
|
|
138
|
+
'algorithm',
|
|
139
|
+
'optimize',
|
|
140
|
+
'design',
|
|
141
|
+
'architecture',
|
|
142
|
+
'pattern',
|
|
143
|
+
'edge case',
|
|
144
|
+
'property-based',
|
|
145
|
+
];
|
|
146
|
+
return reasoningKeywords.some((kw) => keywords.has(kw));
|
|
147
|
+
}
|
|
148
|
+
/**
|
|
149
|
+
* Check if task requires security analysis
|
|
150
|
+
*/
|
|
151
|
+
requiresSecurity(keywords) {
|
|
152
|
+
const securityKeywords = [
|
|
153
|
+
'security',
|
|
154
|
+
'authentication',
|
|
155
|
+
'authorization',
|
|
156
|
+
'encryption',
|
|
157
|
+
'vulnerability',
|
|
158
|
+
'injection',
|
|
159
|
+
'xss',
|
|
160
|
+
'csrf',
|
|
161
|
+
];
|
|
162
|
+
return securityKeywords.some((kw) => keywords.has(kw));
|
|
163
|
+
}
|
|
164
|
+
/**
|
|
165
|
+
* Check if task requires performance analysis
|
|
166
|
+
*/
|
|
167
|
+
requiresPerformance(keywords) {
|
|
168
|
+
const performanceKeywords = [
|
|
169
|
+
'performance',
|
|
170
|
+
'optimization',
|
|
171
|
+
'memory',
|
|
172
|
+
'leak',
|
|
173
|
+
'bottleneck',
|
|
174
|
+
'concurrent',
|
|
175
|
+
'parallel',
|
|
176
|
+
'scale',
|
|
177
|
+
];
|
|
178
|
+
return performanceKeywords.some((kw) => keywords.has(kw));
|
|
179
|
+
}
|
|
180
|
+
}
|
|
181
|
+
exports.ComplexityAnalyzer = ComplexityAnalyzer;
|
|
182
|
+
//# sourceMappingURL=ComplexityAnalyzer.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"ComplexityAnalyzer.js","sourceRoot":"","sources":["../../../src/core/routing/ComplexityAnalyzer.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,55 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Cost Tracker
|
|
3
|
+
* Tracks model usage costs and provides analytics
|
|
4
|
+
*/
|
|
5
|
+
import { AIModel, ModelCost, RouterStats } from './types';
|
|
6
|
+
import { SwarmMemoryManager } from '../memory/SwarmMemoryManager';
|
|
7
|
+
import { EventBus } from '../EventBus';
|
|
8
|
+
export declare class CostTracker {
|
|
9
|
+
private memoryStore;
|
|
10
|
+
private eventBus;
|
|
11
|
+
private costs;
|
|
12
|
+
private sessionStartTime;
|
|
13
|
+
constructor(memoryStore: SwarmMemoryManager, eventBus: EventBus);
|
|
14
|
+
/**
|
|
15
|
+
* Initialize cost tracking for all models
|
|
16
|
+
*/
|
|
17
|
+
private initializeCosts;
|
|
18
|
+
/**
|
|
19
|
+
* Track cost for a model usage
|
|
20
|
+
*/
|
|
21
|
+
trackCost(modelId: AIModel, tokens: number): Promise<void>;
|
|
22
|
+
/**
|
|
23
|
+
* Persist costs to SwarmMemoryManager
|
|
24
|
+
*/
|
|
25
|
+
private persistCosts;
|
|
26
|
+
/**
|
|
27
|
+
* Load costs from SwarmMemoryManager
|
|
28
|
+
*/
|
|
29
|
+
loadCosts(): Promise<void>;
|
|
30
|
+
/**
|
|
31
|
+
* Get router statistics
|
|
32
|
+
*/
|
|
33
|
+
getStats(): Promise<RouterStats>;
|
|
34
|
+
/**
|
|
35
|
+
* Calculate average cost per test generated
|
|
36
|
+
*/
|
|
37
|
+
private calculateAvgCostPerTest;
|
|
38
|
+
/**
|
|
39
|
+
* Export cost dashboard data
|
|
40
|
+
*/
|
|
41
|
+
exportCostDashboard(): Promise<any>;
|
|
42
|
+
/**
|
|
43
|
+
* Format duration in human-readable format
|
|
44
|
+
*/
|
|
45
|
+
private formatDuration;
|
|
46
|
+
/**
|
|
47
|
+
* Reset cost tracking (for testing)
|
|
48
|
+
*/
|
|
49
|
+
reset(): Promise<void>;
|
|
50
|
+
/**
|
|
51
|
+
* Get cost for specific model
|
|
52
|
+
*/
|
|
53
|
+
getModelCost(modelId: AIModel): ModelCost | undefined;
|
|
54
|
+
}
|
|
55
|
+
//# sourceMappingURL=CostTracker.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"CostTracker.d.ts","sourceRoot":"","sources":["../../../src/core/routing/CostTracker.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAEH,OAAO,EAAE,OAAO,EAAE,SAAS,EAAE,WAAW,EAAE,MAAM,SAAS,CAAC;AAE1D,OAAO,EAAE,kBAAkB,EAAE,MAAM,8BAA8B,CAAC;AAClE,OAAO,EAAE,QAAQ,EAAE,MAAM,aAAa,CAAC;AAEvC,qBAAa,WAAW;IACtB,OAAO,CAAC,WAAW,CAAqB;IACxC,OAAO,CAAC,QAAQ,CAAW;IAC3B,OAAO,CAAC,KAAK,CAA0B;IACvC,OAAO,CAAC,gBAAgB,CAAS;gBAErB,WAAW,EAAE,kBAAkB,EAAE,QAAQ,EAAE,QAAQ;IAQ/D;;OAEG;IACH,OAAO,CAAC,eAAe;IAavB;;OAEG;IACG,SAAS,CAAC,OAAO,EAAE,OAAO,EAAE,MAAM,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC;IA8BhE;;OAEG;YACW,YAAY;IAQ1B;;OAEG;IACG,SAAS,IAAI,OAAO,CAAC,IAAI,CAAC;IAgBhC;;OAEG;IACG,QAAQ,IAAI,OAAO,CAAC,WAAW,CAAC;IAgCtC;;OAEG;YACW,uBAAuB;IAqBrC;;OAEG;IACG,mBAAmB,IAAI,OAAO,CAAC,GAAG,CAAC;IAmCzC;;OAEG;IACH,OAAO,CAAC,cAAc;IActB;;OAEG;IACG,KAAK,IAAI,OAAO,CAAC,IAAI,CAAC;IAO5B;;OAEG;IACH,YAAY,CAAC,OAAO,EAAE,OAAO,GAAG,SAAS,GAAG,SAAS;CAGtD"}
|
|
@@ -0,0 +1,210 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
/**
|
|
3
|
+
* Cost Tracker
|
|
4
|
+
* Tracks model usage costs and provides analytics
|
|
5
|
+
*/
|
|
6
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
7
|
+
exports.CostTracker = void 0;
|
|
8
|
+
const types_1 = require("./types");
|
|
9
|
+
const ModelRules_1 = require("./ModelRules");
|
|
10
|
+
class CostTracker {
|
|
11
|
+
constructor(memoryStore, eventBus) {
|
|
12
|
+
this.memoryStore = memoryStore;
|
|
13
|
+
this.eventBus = eventBus;
|
|
14
|
+
this.costs = new Map();
|
|
15
|
+
this.sessionStartTime = Date.now();
|
|
16
|
+
this.initializeCosts();
|
|
17
|
+
}
|
|
18
|
+
/**
|
|
19
|
+
* Initialize cost tracking for all models
|
|
20
|
+
*/
|
|
21
|
+
initializeCosts() {
|
|
22
|
+
Object.values(types_1.AIModel).forEach((model) => {
|
|
23
|
+
this.costs.set(model, {
|
|
24
|
+
modelId: model,
|
|
25
|
+
tokensUsed: 0,
|
|
26
|
+
estimatedCost: 0,
|
|
27
|
+
requestCount: 0,
|
|
28
|
+
avgTokensPerRequest: 0,
|
|
29
|
+
timestamp: Date.now(),
|
|
30
|
+
});
|
|
31
|
+
});
|
|
32
|
+
}
|
|
33
|
+
/**
|
|
34
|
+
* Track cost for a model usage
|
|
35
|
+
*/
|
|
36
|
+
async trackCost(modelId, tokens) {
|
|
37
|
+
const cost = this.costs.get(modelId);
|
|
38
|
+
if (!cost) {
|
|
39
|
+
throw new Error(`Unknown model: ${modelId}`);
|
|
40
|
+
}
|
|
41
|
+
const capability = ModelRules_1.MODEL_CAPABILITIES[modelId];
|
|
42
|
+
const estimatedCost = tokens * capability.costPerToken;
|
|
43
|
+
// Update local cost tracking
|
|
44
|
+
cost.tokensUsed += tokens;
|
|
45
|
+
cost.estimatedCost += estimatedCost;
|
|
46
|
+
cost.requestCount += 1;
|
|
47
|
+
cost.avgTokensPerRequest = cost.tokensUsed / cost.requestCount;
|
|
48
|
+
cost.timestamp = Date.now();
|
|
49
|
+
this.costs.set(modelId, cost);
|
|
50
|
+
// Persist to SwarmMemoryManager
|
|
51
|
+
await this.persistCosts();
|
|
52
|
+
// Emit cost tracking event
|
|
53
|
+
this.eventBus.emit('router:cost-tracked', {
|
|
54
|
+
model: modelId,
|
|
55
|
+
tokens,
|
|
56
|
+
cost: estimatedCost,
|
|
57
|
+
totalCost: cost.estimatedCost,
|
|
58
|
+
});
|
|
59
|
+
}
|
|
60
|
+
/**
|
|
61
|
+
* Persist costs to SwarmMemoryManager
|
|
62
|
+
*/
|
|
63
|
+
async persistCosts() {
|
|
64
|
+
const costsArray = Array.from(this.costs.values());
|
|
65
|
+
await this.memoryStore.store('routing/costs', costsArray, {
|
|
66
|
+
partition: 'coordination',
|
|
67
|
+
ttl: 86400, // 24 hours
|
|
68
|
+
});
|
|
69
|
+
}
|
|
70
|
+
/**
|
|
71
|
+
* Load costs from SwarmMemoryManager
|
|
72
|
+
*/
|
|
73
|
+
async loadCosts() {
|
|
74
|
+
try {
|
|
75
|
+
const stored = await this.memoryStore.retrieve('routing/costs', {
|
|
76
|
+
partition: 'coordination',
|
|
77
|
+
});
|
|
78
|
+
if (stored && Array.isArray(stored)) {
|
|
79
|
+
stored.forEach((cost) => {
|
|
80
|
+
this.costs.set(cost.modelId, cost);
|
|
81
|
+
});
|
|
82
|
+
}
|
|
83
|
+
}
|
|
84
|
+
catch (error) {
|
|
85
|
+
// No stored costs, use initialized values
|
|
86
|
+
}
|
|
87
|
+
}
|
|
88
|
+
/**
|
|
89
|
+
* Get router statistics
|
|
90
|
+
*/
|
|
91
|
+
async getStats() {
|
|
92
|
+
const costsArray = Array.from(this.costs.values());
|
|
93
|
+
const totalRequests = costsArray.reduce((sum, c) => sum + c.requestCount, 0);
|
|
94
|
+
const totalCost = costsArray.reduce((sum, c) => sum + c.estimatedCost, 0);
|
|
95
|
+
// Calculate cost savings vs single model (Claude Sonnet 4.5)
|
|
96
|
+
const baselineModel = ModelRules_1.MODEL_CAPABILITIES[types_1.AIModel.CLAUDE_SONNET_4_5];
|
|
97
|
+
const totalTokens = costsArray.reduce((sum, c) => sum + c.tokensUsed, 0);
|
|
98
|
+
const baselineCost = totalTokens * baselineModel.costPerToken;
|
|
99
|
+
const costSavings = baselineCost - totalCost;
|
|
100
|
+
// Model distribution
|
|
101
|
+
const modelDistribution = {};
|
|
102
|
+
Object.values(types_1.AIModel).forEach((model) => {
|
|
103
|
+
const cost = this.costs.get(model);
|
|
104
|
+
modelDistribution[model] = cost?.requestCount || 0;
|
|
105
|
+
});
|
|
106
|
+
// Average costs
|
|
107
|
+
const avgCostPerTask = totalRequests > 0 ? totalCost / totalRequests : 0;
|
|
108
|
+
const avgCostPerTest = await this.calculateAvgCostPerTest();
|
|
109
|
+
return {
|
|
110
|
+
totalRequests,
|
|
111
|
+
totalCost,
|
|
112
|
+
costSavings,
|
|
113
|
+
modelDistribution,
|
|
114
|
+
avgCostPerTask,
|
|
115
|
+
avgCostPerTest,
|
|
116
|
+
};
|
|
117
|
+
}
|
|
118
|
+
/**
|
|
119
|
+
* Calculate average cost per test generated
|
|
120
|
+
*/
|
|
121
|
+
async calculateAvgCostPerTest() {
|
|
122
|
+
try {
|
|
123
|
+
// Get test count from memory
|
|
124
|
+
const testMetrics = await this.memoryStore.retrieve('aqe/test-metrics', {
|
|
125
|
+
partition: 'coordination',
|
|
126
|
+
});
|
|
127
|
+
if (testMetrics && typeof testMetrics === 'object' && 'totalTests' in testMetrics) {
|
|
128
|
+
const totalTests = testMetrics.totalTests;
|
|
129
|
+
if (totalTests > 0) {
|
|
130
|
+
const stats = await this.getStats();
|
|
131
|
+
return stats.totalCost / totalTests;
|
|
132
|
+
}
|
|
133
|
+
}
|
|
134
|
+
}
|
|
135
|
+
catch (error) {
|
|
136
|
+
// No test metrics available
|
|
137
|
+
}
|
|
138
|
+
return 0;
|
|
139
|
+
}
|
|
140
|
+
/**
|
|
141
|
+
* Export cost dashboard data
|
|
142
|
+
*/
|
|
143
|
+
async exportCostDashboard() {
|
|
144
|
+
const stats = await this.getStats();
|
|
145
|
+
const costsArray = Array.from(this.costs.values());
|
|
146
|
+
return {
|
|
147
|
+
summary: {
|
|
148
|
+
totalCost: stats.totalCost.toFixed(4),
|
|
149
|
+
totalRequests: stats.totalRequests,
|
|
150
|
+
costSavings: stats.costSavings.toFixed(4),
|
|
151
|
+
savingsPercentage: stats.totalCost > 0
|
|
152
|
+
? ((stats.costSavings / (stats.totalCost + stats.costSavings)) * 100).toFixed(2)
|
|
153
|
+
: '0.00',
|
|
154
|
+
avgCostPerTask: stats.avgCostPerTask.toFixed(4),
|
|
155
|
+
avgCostPerTest: stats.avgCostPerTest.toFixed(4),
|
|
156
|
+
sessionDuration: this.formatDuration(Date.now() - this.sessionStartTime),
|
|
157
|
+
},
|
|
158
|
+
models: costsArray.map((cost) => {
|
|
159
|
+
const capability = ModelRules_1.MODEL_CAPABILITIES[cost.modelId];
|
|
160
|
+
return {
|
|
161
|
+
model: cost.modelId,
|
|
162
|
+
requests: cost.requestCount,
|
|
163
|
+
tokensUsed: cost.tokensUsed,
|
|
164
|
+
cost: cost.estimatedCost.toFixed(4),
|
|
165
|
+
avgTokensPerRequest: Math.round(cost.avgTokensPerRequest),
|
|
166
|
+
costPerToken: capability.costPerToken,
|
|
167
|
+
percentage: stats.totalCost > 0
|
|
168
|
+
? ((cost.estimatedCost / stats.totalCost) * 100).toFixed(2)
|
|
169
|
+
: '0.00',
|
|
170
|
+
};
|
|
171
|
+
}),
|
|
172
|
+
distribution: stats.modelDistribution,
|
|
173
|
+
timestamp: new Date().toISOString(),
|
|
174
|
+
};
|
|
175
|
+
}
|
|
176
|
+
/**
|
|
177
|
+
* Format duration in human-readable format
|
|
178
|
+
*/
|
|
179
|
+
formatDuration(ms) {
|
|
180
|
+
const seconds = Math.floor(ms / 1000);
|
|
181
|
+
const minutes = Math.floor(seconds / 60);
|
|
182
|
+
const hours = Math.floor(minutes / 60);
|
|
183
|
+
if (hours > 0) {
|
|
184
|
+
return `${hours}h ${minutes % 60}m`;
|
|
185
|
+
}
|
|
186
|
+
else if (minutes > 0) {
|
|
187
|
+
return `${minutes}m ${seconds % 60}s`;
|
|
188
|
+
}
|
|
189
|
+
else {
|
|
190
|
+
return `${seconds}s`;
|
|
191
|
+
}
|
|
192
|
+
}
|
|
193
|
+
/**
|
|
194
|
+
* Reset cost tracking (for testing)
|
|
195
|
+
*/
|
|
196
|
+
async reset() {
|
|
197
|
+
this.costs.clear();
|
|
198
|
+
this.initializeCosts();
|
|
199
|
+
this.sessionStartTime = Date.now();
|
|
200
|
+
await this.persistCosts();
|
|
201
|
+
}
|
|
202
|
+
/**
|
|
203
|
+
* Get cost for specific model
|
|
204
|
+
*/
|
|
205
|
+
getModelCost(modelId) {
|
|
206
|
+
return this.costs.get(modelId);
|
|
207
|
+
}
|
|
208
|
+
}
|
|
209
|
+
exports.CostTracker = CostTracker;
|
|
210
|
+
//# sourceMappingURL=CostTracker.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"CostTracker.js","sourceRoot":"","sources":["../../../src/core/routing/CostTracker.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,68 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* FleetManager Integration for Multi-Model Router
|
|
3
|
+
* Integrates the AdaptiveModelRouter with FleetManager
|
|
4
|
+
*/
|
|
5
|
+
import { FleetManager } from '../FleetManager';
|
|
6
|
+
import { AdaptiveModelRouter } from './AdaptiveModelRouter';
|
|
7
|
+
import { SwarmMemoryManager } from '../memory/SwarmMemoryManager';
|
|
8
|
+
import { EventBus } from '../EventBus';
|
|
9
|
+
import { RouterConfig } from './types';
|
|
10
|
+
/**
|
|
11
|
+
* Extended FleetManager with routing capabilities
|
|
12
|
+
*/
|
|
13
|
+
export declare class RoutingEnabledFleetManager {
|
|
14
|
+
private fleetManager;
|
|
15
|
+
private router;
|
|
16
|
+
private memoryStore;
|
|
17
|
+
private eventBus;
|
|
18
|
+
constructor(fleetManager: FleetManager, memoryStore: SwarmMemoryManager, eventBus: EventBus, routerConfig?: Partial<RouterConfig>);
|
|
19
|
+
/**
|
|
20
|
+
* Setup event handlers for router integration
|
|
21
|
+
*/
|
|
22
|
+
private setupEventHandlers;
|
|
23
|
+
/**
|
|
24
|
+
* Handle task submission - select optimal model
|
|
25
|
+
*/
|
|
26
|
+
private handleTaskSubmitted;
|
|
27
|
+
/**
|
|
28
|
+
* Handle task completion - track actual costs
|
|
29
|
+
*/
|
|
30
|
+
private handleTaskCompleted;
|
|
31
|
+
/**
|
|
32
|
+
* Handle model failure - select fallback
|
|
33
|
+
*/
|
|
34
|
+
private handleModelFailure;
|
|
35
|
+
/**
|
|
36
|
+
* Estimate tokens from result (fallback when not provided)
|
|
37
|
+
*/
|
|
38
|
+
private estimateTokensFromResult;
|
|
39
|
+
/**
|
|
40
|
+
* Get router statistics
|
|
41
|
+
*/
|
|
42
|
+
getRouterStats(): Promise<import("./types").RouterStats>;
|
|
43
|
+
/**
|
|
44
|
+
* Export cost dashboard
|
|
45
|
+
*/
|
|
46
|
+
exportCostDashboard(): Promise<any>;
|
|
47
|
+
/**
|
|
48
|
+
* Enable or disable routing
|
|
49
|
+
*/
|
|
50
|
+
setRoutingEnabled(enabled: boolean): void;
|
|
51
|
+
/**
|
|
52
|
+
* Update router configuration
|
|
53
|
+
*/
|
|
54
|
+
updateRouterConfig(config: Partial<RouterConfig>): void;
|
|
55
|
+
/**
|
|
56
|
+
* Get underlying router instance
|
|
57
|
+
*/
|
|
58
|
+
getRouter(): AdaptiveModelRouter;
|
|
59
|
+
/**
|
|
60
|
+
* Get underlying fleet manager instance
|
|
61
|
+
*/
|
|
62
|
+
getFleetManager(): FleetManager;
|
|
63
|
+
}
|
|
64
|
+
/**
|
|
65
|
+
* Factory function to create routing-enabled fleet manager
|
|
66
|
+
*/
|
|
67
|
+
export declare function createRoutingEnabledFleetManager(fleetManager: FleetManager, memoryStore: SwarmMemoryManager, eventBus: EventBus, routerConfig?: Partial<RouterConfig>): RoutingEnabledFleetManager;
|
|
68
|
+
//# sourceMappingURL=FleetManagerIntegration.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"FleetManagerIntegration.d.ts","sourceRoot":"","sources":["../../../src/core/routing/FleetManagerIntegration.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAEH,OAAO,EAAE,YAAY,EAAE,MAAM,iBAAiB,CAAC;AAE/C,OAAO,EAAE,mBAAmB,EAAE,MAAM,uBAAuB,CAAC;AAC5D,OAAO,EAAE,kBAAkB,EAAE,MAAM,8BAA8B,CAAC;AAClE,OAAO,EAAE,QAAQ,EAAE,MAAM,aAAa,CAAC;AACvC,OAAO,EAA2B,YAAY,EAAE,MAAM,SAAS,CAAC;AAGhE;;GAEG;AACH,qBAAa,0BAA0B;IACrC,OAAO,CAAC,YAAY,CAAe;IACnC,OAAO,CAAC,MAAM,CAAsB;IACpC,OAAO,CAAC,WAAW,CAAqB;IACxC,OAAO,CAAC,QAAQ,CAAW;gBAGzB,YAAY,EAAE,YAAY,EAC1B,WAAW,EAAE,kBAAkB,EAC/B,QAAQ,EAAE,QAAQ,EAClB,YAAY,CAAC,EAAE,OAAO,CAAC,YAAY,CAAC;IAUtC;;OAEG;IACH,OAAO,CAAC,kBAAkB;IAiB1B;;OAEG;YACW,mBAAmB;IAwBjC;;OAEG;YACW,mBAAmB;IA6BjC;;OAEG;YACW,kBAAkB;IAwBhC;;OAEG;IACH,OAAO,CAAC,wBAAwB;IAOhC;;OAEG;IACG,cAAc;IAIpB;;OAEG;IACG,mBAAmB;IAIzB;;OAEG;IACH,iBAAiB,CAAC,OAAO,EAAE,OAAO,GAAG,IAAI;IAIzC;;OAEG;IACH,kBAAkB,CAAC,MAAM,EAAE,OAAO,CAAC,YAAY,CAAC,GAAG,IAAI;IAIvD;;OAEG;IACH,SAAS,IAAI,mBAAmB;IAIhC;;OAEG;IACH,eAAe,IAAI,YAAY;CAGhC;AAED;;GAEG;AACH,wBAAgB,gCAAgC,CAC9C,YAAY,EAAE,YAAY,EAC1B,WAAW,EAAE,kBAAkB,EAC/B,QAAQ,EAAE,QAAQ,EAClB,YAAY,CAAC,EAAE,OAAO,CAAC,YAAY,CAAC,GACnC,0BAA0B,CAO5B"}
|