agentic-qe 1.0.3 → 1.0.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/CHANGELOG.md +44 -0
- package/README.md +64 -15
- package/dist/cli/commands/init.d.ts +1 -0
- package/dist/cli/commands/init.d.ts.map +1 -1
- package/dist/cli/commands/init.js +219 -3
- package/dist/cli/commands/init.js.map +1 -1
- 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 +88 -0
- package/dist/cli/index.js.map +1 -1
- package/dist/core/memory/SwarmMemoryManager.d.ts.map +1 -1
- package/dist/core/memory/SwarmMemoryManager.js +17 -37
- 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/mcp/server.d.ts.map +1 -1
- package/dist/mcp/server.js +77 -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 +3 -1
- package/dist/mcp/tools.d.ts.map +1 -1
- package/dist/mcp/tools.js +107 -1
- package/dist/mcp/tools.js.map +1 -1
- package/dist/types/index.d.ts +16 -1
- package/dist/types/index.d.ts.map +1 -1
- package/dist/types/index.js.map +1 -1
- package/dist/utils/Database.d.ts +2 -2
- package/dist/utils/Database.d.ts.map +1 -1
- package/dist/utils/Database.js +63 -81
- package/dist/utils/Database.js.map +1 -1
- package/package.json +3 -5
|
@@ -0,0 +1,264 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
/**
|
|
3
|
+
* Adaptive Model Router
|
|
4
|
+
* Implements intelligent model selection with cost optimization
|
|
5
|
+
*/
|
|
6
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
7
|
+
exports.AdaptiveModelRouter = void 0;
|
|
8
|
+
const types_1 = require("./types");
|
|
9
|
+
const ModelRules_1 = require("./ModelRules");
|
|
10
|
+
const ComplexityAnalyzer_1 = require("./ComplexityAnalyzer");
|
|
11
|
+
const CostTracker_1 = require("./CostTracker");
|
|
12
|
+
class AdaptiveModelRouter {
|
|
13
|
+
constructor(memoryStore, eventBus, config) {
|
|
14
|
+
this.memoryStore = memoryStore;
|
|
15
|
+
this.eventBus = eventBus;
|
|
16
|
+
this.config = { ...ModelRules_1.DEFAULT_ROUTER_CONFIG, ...config };
|
|
17
|
+
this.complexityAnalyzer = new ComplexityAnalyzer_1.ComplexityAnalyzer();
|
|
18
|
+
this.costTracker = new CostTracker_1.CostTracker(memoryStore, eventBus);
|
|
19
|
+
this.failureCount = new Map();
|
|
20
|
+
this.initialize();
|
|
21
|
+
}
|
|
22
|
+
/**
|
|
23
|
+
* Initialize router
|
|
24
|
+
*/
|
|
25
|
+
async initialize() {
|
|
26
|
+
// Load costs from memory
|
|
27
|
+
await this.costTracker.loadCosts();
|
|
28
|
+
// Emit initialization event
|
|
29
|
+
this.eventBus.emit('router:initialized', {
|
|
30
|
+
config: this.config,
|
|
31
|
+
timestamp: Date.now(),
|
|
32
|
+
});
|
|
33
|
+
}
|
|
34
|
+
/**
|
|
35
|
+
* Select the optimal model for a given task
|
|
36
|
+
*/
|
|
37
|
+
async selectModel(task) {
|
|
38
|
+
// If routing is disabled, use default model
|
|
39
|
+
if (!this.config.enabled) {
|
|
40
|
+
return this.createDefaultSelection(task);
|
|
41
|
+
}
|
|
42
|
+
try {
|
|
43
|
+
// Analyze task complexity
|
|
44
|
+
const analysis = this.complexityAnalyzer.analyzeComplexity(task);
|
|
45
|
+
// Select model based on task type and complexity
|
|
46
|
+
const agentType = this.extractAgentType(task);
|
|
47
|
+
const model = this.selectModelForTask(agentType, analysis.complexity);
|
|
48
|
+
// Calculate estimated cost
|
|
49
|
+
const estimatedCost = await this.estimateCost(model, analysis.estimatedTokens);
|
|
50
|
+
// Check if cost exceeds threshold
|
|
51
|
+
if (estimatedCost > this.config.costThreshold) {
|
|
52
|
+
return await this.selectCostOptimizedModel(task, analysis.complexity, estimatedCost);
|
|
53
|
+
}
|
|
54
|
+
// Get fallback models
|
|
55
|
+
const fallbackModels = ModelRules_1.FALLBACK_CHAINS[model] || [];
|
|
56
|
+
// Create selection
|
|
57
|
+
const selection = {
|
|
58
|
+
model,
|
|
59
|
+
complexity: analysis.complexity,
|
|
60
|
+
reasoning: this.buildReasoning(agentType, analysis),
|
|
61
|
+
estimatedCost,
|
|
62
|
+
fallbackModels,
|
|
63
|
+
confidence: analysis.confidence,
|
|
64
|
+
};
|
|
65
|
+
// Store selection in memory
|
|
66
|
+
await this.storeSelection(task, selection);
|
|
67
|
+
// Emit selection event
|
|
68
|
+
this.eventBus.emit('router:model-selected', {
|
|
69
|
+
task: task.id,
|
|
70
|
+
model,
|
|
71
|
+
complexity: analysis.complexity,
|
|
72
|
+
estimatedCost,
|
|
73
|
+
});
|
|
74
|
+
return selection;
|
|
75
|
+
}
|
|
76
|
+
catch (error) {
|
|
77
|
+
console.error('Model selection failed:', error);
|
|
78
|
+
return this.createDefaultSelection(task);
|
|
79
|
+
}
|
|
80
|
+
}
|
|
81
|
+
/**
|
|
82
|
+
* Track cost for a model usage
|
|
83
|
+
*/
|
|
84
|
+
async trackCost(modelId, tokens) {
|
|
85
|
+
if (!this.config.enableCostTracking) {
|
|
86
|
+
return;
|
|
87
|
+
}
|
|
88
|
+
await this.costTracker.trackCost(modelId, tokens);
|
|
89
|
+
}
|
|
90
|
+
/**
|
|
91
|
+
* Get fallback model when primary fails
|
|
92
|
+
*/
|
|
93
|
+
getFallbackModel(failedModel, task) {
|
|
94
|
+
if (!this.config.enableFallback) {
|
|
95
|
+
return this.config.defaultModel;
|
|
96
|
+
}
|
|
97
|
+
// Track failure
|
|
98
|
+
const failures = this.failureCount.get(failedModel) || 0;
|
|
99
|
+
this.failureCount.set(failedModel, failures + 1);
|
|
100
|
+
// Get fallback chain
|
|
101
|
+
const fallbacks = ModelRules_1.FALLBACK_CHAINS[failedModel] || [];
|
|
102
|
+
// Find first fallback that hasn't failed too many times
|
|
103
|
+
for (const fallback of fallbacks) {
|
|
104
|
+
const fallbackFailures = this.failureCount.get(fallback) || 0;
|
|
105
|
+
if (fallbackFailures < this.config.maxRetries) {
|
|
106
|
+
this.eventBus.emit('router:fallback-selected', {
|
|
107
|
+
failedModel,
|
|
108
|
+
fallbackModel: fallback,
|
|
109
|
+
task: task.id,
|
|
110
|
+
});
|
|
111
|
+
return fallback;
|
|
112
|
+
}
|
|
113
|
+
}
|
|
114
|
+
// All fallbacks exhausted, use default
|
|
115
|
+
return this.config.defaultModel;
|
|
116
|
+
}
|
|
117
|
+
/**
|
|
118
|
+
* Get router statistics
|
|
119
|
+
*/
|
|
120
|
+
async getStats() {
|
|
121
|
+
return await this.costTracker.getStats();
|
|
122
|
+
}
|
|
123
|
+
/**
|
|
124
|
+
* Export cost dashboard data
|
|
125
|
+
*/
|
|
126
|
+
async exportCostDashboard() {
|
|
127
|
+
return await this.costTracker.exportCostDashboard();
|
|
128
|
+
}
|
|
129
|
+
/**
|
|
130
|
+
* Analyze task complexity
|
|
131
|
+
*/
|
|
132
|
+
async analyzeComplexity(task) {
|
|
133
|
+
const analysis = this.complexityAnalyzer.analyzeComplexity(task);
|
|
134
|
+
return analysis.complexity;
|
|
135
|
+
}
|
|
136
|
+
/**
|
|
137
|
+
* Create default selection when routing is disabled
|
|
138
|
+
*/
|
|
139
|
+
createDefaultSelection(task) {
|
|
140
|
+
return {
|
|
141
|
+
model: this.config.defaultModel,
|
|
142
|
+
complexity: types_1.TaskComplexity.MODERATE,
|
|
143
|
+
reasoning: 'Using default model (routing disabled)',
|
|
144
|
+
estimatedCost: 0,
|
|
145
|
+
fallbackModels: [],
|
|
146
|
+
confidence: 1.0,
|
|
147
|
+
};
|
|
148
|
+
}
|
|
149
|
+
/**
|
|
150
|
+
* Extract agent type from task
|
|
151
|
+
*/
|
|
152
|
+
extractAgentType(task) {
|
|
153
|
+
// Try to extract from task type or context
|
|
154
|
+
if (task.type && task.type.startsWith('qe-')) {
|
|
155
|
+
return task.type;
|
|
156
|
+
}
|
|
157
|
+
// Try to extract from context
|
|
158
|
+
if (task.data && typeof task.data === 'object' && 'agentType' in task.data) {
|
|
159
|
+
return task.data.agentType;
|
|
160
|
+
}
|
|
161
|
+
return 'default';
|
|
162
|
+
}
|
|
163
|
+
/**
|
|
164
|
+
* Select model based on task type and complexity
|
|
165
|
+
*/
|
|
166
|
+
selectModelForTask(agentType, complexity) {
|
|
167
|
+
const rules = ModelRules_1.MODEL_RULES[agentType] || ModelRules_1.MODEL_RULES['default'];
|
|
168
|
+
return rules[complexity];
|
|
169
|
+
}
|
|
170
|
+
/**
|
|
171
|
+
* Estimate cost for a model and token count
|
|
172
|
+
*/
|
|
173
|
+
async estimateCost(model, tokens) {
|
|
174
|
+
const capability = require('./ModelRules').MODEL_CAPABILITIES[model];
|
|
175
|
+
return tokens * capability.costPerToken;
|
|
176
|
+
}
|
|
177
|
+
/**
|
|
178
|
+
* Select cost-optimized model when primary exceeds threshold
|
|
179
|
+
*/
|
|
180
|
+
async selectCostOptimizedModel(task, complexity, originalCost) {
|
|
181
|
+
// Downgrade complexity to reduce cost
|
|
182
|
+
let optimizedComplexity = complexity;
|
|
183
|
+
if (complexity === types_1.TaskComplexity.CRITICAL) {
|
|
184
|
+
optimizedComplexity = types_1.TaskComplexity.COMPLEX;
|
|
185
|
+
}
|
|
186
|
+
else if (complexity === types_1.TaskComplexity.COMPLEX) {
|
|
187
|
+
optimizedComplexity = types_1.TaskComplexity.MODERATE;
|
|
188
|
+
}
|
|
189
|
+
const agentType = this.extractAgentType(task);
|
|
190
|
+
const model = this.selectModelForTask(agentType, optimizedComplexity);
|
|
191
|
+
const estimatedCost = await this.estimateCost(model, 1000); // Rough estimate
|
|
192
|
+
this.eventBus.emit('router:cost-optimized', {
|
|
193
|
+
task: task.id,
|
|
194
|
+
originalComplexity: complexity,
|
|
195
|
+
optimizedComplexity,
|
|
196
|
+
originalCost,
|
|
197
|
+
optimizedCost: estimatedCost,
|
|
198
|
+
});
|
|
199
|
+
return {
|
|
200
|
+
model,
|
|
201
|
+
complexity: optimizedComplexity,
|
|
202
|
+
reasoning: `Cost-optimized: Reduced from ${complexity} to ${optimizedComplexity} (original cost: $${originalCost.toFixed(4)})`,
|
|
203
|
+
estimatedCost,
|
|
204
|
+
fallbackModels: ModelRules_1.FALLBACK_CHAINS[model] || [],
|
|
205
|
+
confidence: 0.8, // Lower confidence for cost-optimized selection
|
|
206
|
+
};
|
|
207
|
+
}
|
|
208
|
+
/**
|
|
209
|
+
* Build reasoning string for selection
|
|
210
|
+
*/
|
|
211
|
+
buildReasoning(agentType, analysis) {
|
|
212
|
+
const reasons = [];
|
|
213
|
+
reasons.push(`Complexity: ${analysis.complexity}`);
|
|
214
|
+
reasons.push(`Confidence: ${(analysis.confidence * 100).toFixed(0)}%`);
|
|
215
|
+
if (analysis.requiresSecurity) {
|
|
216
|
+
reasons.push('Security analysis required');
|
|
217
|
+
}
|
|
218
|
+
if (analysis.requiresPerformance) {
|
|
219
|
+
reasons.push('Performance analysis required');
|
|
220
|
+
}
|
|
221
|
+
if (analysis.requiresReasoning) {
|
|
222
|
+
reasons.push('Advanced reasoning required');
|
|
223
|
+
}
|
|
224
|
+
return reasons.join(', ');
|
|
225
|
+
}
|
|
226
|
+
/**
|
|
227
|
+
* Store selection in memory for analytics
|
|
228
|
+
*/
|
|
229
|
+
async storeSelection(task, selection) {
|
|
230
|
+
const key = `routing/selection/${task.id}`;
|
|
231
|
+
await this.memoryStore.store(key, selection, {
|
|
232
|
+
partition: 'coordination',
|
|
233
|
+
ttl: 3600, // 1 hour
|
|
234
|
+
});
|
|
235
|
+
}
|
|
236
|
+
/**
|
|
237
|
+
* Enable or disable routing
|
|
238
|
+
*/
|
|
239
|
+
setEnabled(enabled) {
|
|
240
|
+
this.config.enabled = enabled;
|
|
241
|
+
this.eventBus.emit('router:config-changed', {
|
|
242
|
+
enabled,
|
|
243
|
+
timestamp: Date.now(),
|
|
244
|
+
});
|
|
245
|
+
}
|
|
246
|
+
/**
|
|
247
|
+
* Update router configuration
|
|
248
|
+
*/
|
|
249
|
+
updateConfig(config) {
|
|
250
|
+
this.config = { ...this.config, ...config };
|
|
251
|
+
this.eventBus.emit('router:config-changed', {
|
|
252
|
+
config: this.config,
|
|
253
|
+
timestamp: Date.now(),
|
|
254
|
+
});
|
|
255
|
+
}
|
|
256
|
+
/**
|
|
257
|
+
* Reset failure counts (for testing)
|
|
258
|
+
*/
|
|
259
|
+
resetFailures() {
|
|
260
|
+
this.failureCount.clear();
|
|
261
|
+
}
|
|
262
|
+
}
|
|
263
|
+
exports.AdaptiveModelRouter = AdaptiveModelRouter;
|
|
264
|
+
//# sourceMappingURL=AdaptiveModelRouter.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"AdaptiveModelRouter.js","sourceRoot":"","sources":["../../../src/core/routing/AdaptiveModelRouter.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,49 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Complexity Analyzer
|
|
3
|
+
* Analyzes task complexity for model selection
|
|
4
|
+
*/
|
|
5
|
+
import { QETask } from './types';
|
|
6
|
+
import { TaskAnalysis } from './types';
|
|
7
|
+
export declare class ComplexityAnalyzer {
|
|
8
|
+
/**
|
|
9
|
+
* Analyze task complexity based on content and context
|
|
10
|
+
*/
|
|
11
|
+
analyzeComplexity(task: QETask): TaskAnalysis;
|
|
12
|
+
/**
|
|
13
|
+
* Extract task content for analysis
|
|
14
|
+
*/
|
|
15
|
+
private extractTaskContent;
|
|
16
|
+
/**
|
|
17
|
+
* Extract keywords from content
|
|
18
|
+
*/
|
|
19
|
+
private extractKeywords;
|
|
20
|
+
/**
|
|
21
|
+
* Score complexity level based on keyword matches
|
|
22
|
+
*/
|
|
23
|
+
private scoreComplexity;
|
|
24
|
+
/**
|
|
25
|
+
* Determine final complexity from scores
|
|
26
|
+
*/
|
|
27
|
+
private determineComplexity;
|
|
28
|
+
/**
|
|
29
|
+
* Calculate confidence in complexity determination
|
|
30
|
+
*/
|
|
31
|
+
private calculateConfidence;
|
|
32
|
+
/**
|
|
33
|
+
* Estimate token count based on complexity
|
|
34
|
+
*/
|
|
35
|
+
private estimateTokens;
|
|
36
|
+
/**
|
|
37
|
+
* Check if task requires advanced reasoning
|
|
38
|
+
*/
|
|
39
|
+
private requiresReasoning;
|
|
40
|
+
/**
|
|
41
|
+
* Check if task requires security analysis
|
|
42
|
+
*/
|
|
43
|
+
private requiresSecurity;
|
|
44
|
+
/**
|
|
45
|
+
* Check if task requires performance analysis
|
|
46
|
+
*/
|
|
47
|
+
private requiresPerformance;
|
|
48
|
+
}
|
|
49
|
+
//# sourceMappingURL=ComplexityAnalyzer.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"ComplexityAnalyzer.d.ts","sourceRoot":"","sources":["../../../src/core/routing/ComplexityAnalyzer.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAEH,OAAO,EAAE,MAAM,EAAE,MAAM,SAAS,CAAC;AACjC,OAAO,EAAkB,YAAY,EAAE,MAAM,SAAS,CAAC;AAGvD,qBAAa,kBAAkB;IAC7B;;OAEG;IACH,iBAAiB,CAAC,IAAI,EAAE,MAAM,GAAG,YAAY;IAkC7C;;OAEG;IACH,OAAO,CAAC,kBAAkB;IAgB1B;;OAEG;IACH,OAAO,CAAC,eAAe;IASvB;;OAEG;IACH,OAAO,CAAC,eAAe;IAqBvB;;OAEG;IACH,OAAO,CAAC,mBAAmB;IAmB3B;;OAEG;IACH,OAAO,CAAC,mBAAmB;IAc3B;;OAEG;IACH,OAAO,CAAC,cAAc;IAatB;;OAEG;IACH,OAAO,CAAC,iBAAiB;IAczB;;OAEG;IACH,OAAO,CAAC,gBAAgB;IAexB;;OAEG;IACH,OAAO,CAAC,mBAAmB;CAc5B"}
|
|
@@ -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"}
|