agentic-qe 2.6.1 → 2.6.3
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-code-intelligence.md +88 -1
- package/CHANGELOG.md +134 -0
- package/README.md +222 -159
- package/dist/agents/BaseAgent.d.ts +19 -0
- package/dist/agents/BaseAgent.d.ts.map +1 -1
- package/dist/agents/BaseAgent.js +41 -1
- package/dist/agents/BaseAgent.js.map +1 -1
- package/dist/agents/CodeIntelligenceAgent.d.ts +18 -1
- package/dist/agents/CodeIntelligenceAgent.d.ts.map +1 -1
- package/dist/agents/CodeIntelligenceAgent.js +96 -1
- package/dist/agents/CodeIntelligenceAgent.js.map +1 -1
- package/dist/agents/CoverageAnalyzerAgent.d.ts +8 -0
- package/dist/agents/CoverageAnalyzerAgent.d.ts.map +1 -1
- package/dist/agents/CoverageAnalyzerAgent.js +65 -1
- package/dist/agents/CoverageAnalyzerAgent.js.map +1 -1
- package/dist/agents/TestGeneratorAgent.d.ts +2 -2
- package/dist/agents/TestGeneratorAgent.d.ts.map +1 -1
- package/dist/agents/TestGeneratorAgent.js +16 -6
- package/dist/agents/TestGeneratorAgent.js.map +1 -1
- package/dist/agents/adapters/AgentLLMAdapter.d.ts +127 -0
- package/dist/agents/adapters/AgentLLMAdapter.d.ts.map +1 -0
- package/dist/agents/adapters/AgentLLMAdapter.js +366 -0
- package/dist/agents/adapters/AgentLLMAdapter.js.map +1 -0
- package/dist/agents/adapters/index.d.ts +1 -0
- package/dist/agents/adapters/index.d.ts.map +1 -1
- package/dist/agents/adapters/index.js +5 -1
- package/dist/agents/adapters/index.js.map +1 -1
- package/dist/agents/interfaces/IAgentLLM.d.ts +257 -0
- package/dist/agents/interfaces/IAgentLLM.d.ts.map +1 -0
- package/dist/agents/interfaces/IAgentLLM.js +39 -0
- package/dist/agents/interfaces/IAgentLLM.js.map +1 -0
- package/dist/agents/interfaces/index.d.ts +10 -0
- package/dist/agents/interfaces/index.d.ts.map +1 -0
- package/dist/agents/interfaces/index.js +14 -0
- package/dist/agents/interfaces/index.js.map +1 -0
- package/dist/agents/n8n/N8nBaseAgent.d.ts +18 -0
- package/dist/agents/n8n/N8nBaseAgent.d.ts.map +1 -1
- package/dist/agents/n8n/N8nBaseAgent.js +80 -0
- package/dist/agents/n8n/N8nBaseAgent.js.map +1 -1
- package/dist/cli/commands/knowledge-graph.d.ts +30 -0
- package/dist/cli/commands/knowledge-graph.d.ts.map +1 -1
- package/dist/cli/commands/knowledge-graph.js +206 -4
- package/dist/cli/commands/knowledge-graph.js.map +1 -1
- package/dist/cli/commands/providers.d.ts +50 -0
- package/dist/cli/commands/providers.d.ts.map +1 -0
- package/dist/cli/commands/providers.js +403 -0
- package/dist/cli/commands/providers.js.map +1 -0
- package/dist/cli/index.js +214 -0
- package/dist/cli/index.js.map +1 -1
- package/dist/code-intelligence/indexing/FileWatcher.d.ts.map +1 -1
- package/dist/code-intelligence/indexing/FileWatcher.js +11 -8
- package/dist/code-intelligence/indexing/FileWatcher.js.map +1 -1
- package/dist/code-intelligence/inference/ComponentBoundaryAnalyzer.d.ts +75 -0
- package/dist/code-intelligence/inference/ComponentBoundaryAnalyzer.d.ts.map +1 -0
- package/dist/code-intelligence/inference/ComponentBoundaryAnalyzer.js +400 -0
- package/dist/code-intelligence/inference/ComponentBoundaryAnalyzer.js.map +1 -0
- package/dist/code-intelligence/inference/ExternalSystemDetector.d.ts +31 -0
- package/dist/code-intelligence/inference/ExternalSystemDetector.d.ts.map +1 -0
- package/dist/code-intelligence/inference/ExternalSystemDetector.js +523 -0
- package/dist/code-intelligence/inference/ExternalSystemDetector.js.map +1 -0
- package/dist/code-intelligence/inference/ProjectMetadataAnalyzer.d.ts +78 -0
- package/dist/code-intelligence/inference/ProjectMetadataAnalyzer.d.ts.map +1 -0
- package/dist/code-intelligence/inference/ProjectMetadataAnalyzer.js +491 -0
- package/dist/code-intelligence/inference/ProjectMetadataAnalyzer.js.map +1 -0
- package/dist/code-intelligence/inference/index.d.ts +36 -0
- package/dist/code-intelligence/inference/index.d.ts.map +1 -0
- package/dist/code-intelligence/inference/index.js +65 -0
- package/dist/code-intelligence/inference/index.js.map +1 -0
- package/dist/code-intelligence/inference/types.d.ts +196 -0
- package/dist/code-intelligence/inference/types.d.ts.map +1 -0
- package/dist/code-intelligence/inference/types.js +9 -0
- package/dist/code-intelligence/inference/types.js.map +1 -0
- package/dist/code-intelligence/visualization/C4ComponentDiagramBuilder.d.ts +75 -0
- package/dist/code-intelligence/visualization/C4ComponentDiagramBuilder.d.ts.map +1 -0
- package/dist/code-intelligence/visualization/C4ComponentDiagramBuilder.js +267 -0
- package/dist/code-intelligence/visualization/C4ComponentDiagramBuilder.js.map +1 -0
- package/dist/code-intelligence/visualization/C4ContainerDiagramBuilder.d.ts +138 -0
- package/dist/code-intelligence/visualization/C4ContainerDiagramBuilder.d.ts.map +1 -0
- package/dist/code-intelligence/visualization/C4ContainerDiagramBuilder.js +343 -0
- package/dist/code-intelligence/visualization/C4ContainerDiagramBuilder.js.map +1 -0
- package/dist/code-intelligence/visualization/C4ContextDiagramBuilder.d.ts +67 -0
- package/dist/code-intelligence/visualization/C4ContextDiagramBuilder.d.ts.map +1 -0
- package/dist/code-intelligence/visualization/C4ContextDiagramBuilder.js +152 -0
- package/dist/code-intelligence/visualization/C4ContextDiagramBuilder.js.map +1 -0
- package/dist/code-intelligence/visualization/MermaidGenerator.d.ts +79 -0
- package/dist/code-intelligence/visualization/MermaidGenerator.d.ts.map +1 -1
- package/dist/code-intelligence/visualization/MermaidGenerator.js +143 -0
- package/dist/code-intelligence/visualization/MermaidGenerator.js.map +1 -1
- package/dist/config/ConfigLoader.d.ts +86 -0
- package/dist/config/ConfigLoader.d.ts.map +1 -0
- package/dist/config/ConfigLoader.js +450 -0
- package/dist/config/ConfigLoader.js.map +1 -0
- package/dist/config/ProviderConfig.d.ts +153 -0
- package/dist/config/ProviderConfig.d.ts.map +1 -0
- package/dist/config/ProviderConfig.js +155 -0
- package/dist/config/ProviderConfig.js.map +1 -0
- package/dist/config/index.d.ts +35 -0
- package/dist/config/index.d.ts.map +1 -0
- package/dist/config/index.js +45 -0
- package/dist/config/index.js.map +1 -0
- package/dist/core/memory/HNSWVectorMemory.js +1 -1
- package/dist/mcp/handlers/integration/integration-test-orchestrate.d.ts.map +1 -1
- package/dist/mcp/handlers/integration/integration-test-orchestrate.js +6 -9
- package/dist/mcp/handlers/integration/integration-test-orchestrate.js.map +1 -1
- package/dist/mcp/server-instructions.d.ts +1 -1
- package/dist/mcp/server-instructions.js +1 -1
- package/dist/mcp/server.d.ts +1 -0
- package/dist/mcp/server.d.ts.map +1 -1
- package/dist/memory/HNSWPatternStore.d.ts.map +1 -1
- package/dist/memory/HNSWPatternStore.js +23 -0
- package/dist/memory/HNSWPatternStore.js.map +1 -1
- package/dist/memory/RuVectorPatternStore.d.ts +5 -0
- package/dist/memory/RuVectorPatternStore.d.ts.map +1 -1
- package/dist/memory/RuVectorPatternStore.js +11 -0
- package/dist/memory/RuVectorPatternStore.js.map +1 -1
- package/dist/providers/CostOptimizationStrategies.d.ts +297 -0
- package/dist/providers/CostOptimizationStrategies.d.ts.map +1 -0
- package/dist/providers/CostOptimizationStrategies.js +831 -0
- package/dist/providers/CostOptimizationStrategies.js.map +1 -0
- package/dist/providers/HybridRouter.d.ts +142 -5
- package/dist/providers/HybridRouter.d.ts.map +1 -1
- package/dist/providers/HybridRouter.js +472 -6
- package/dist/providers/HybridRouter.js.map +1 -1
- package/dist/providers/HybridRouterComplexityIntegration.d.ts +169 -0
- package/dist/providers/HybridRouterComplexityIntegration.d.ts.map +1 -0
- package/dist/providers/HybridRouterComplexityIntegration.js +319 -0
- package/dist/providers/HybridRouterComplexityIntegration.js.map +1 -0
- package/dist/providers/HybridRouterModelSelection.d.ts +106 -0
- package/dist/providers/HybridRouterModelSelection.d.ts.map +1 -0
- package/dist/providers/HybridRouterModelSelection.js +420 -0
- package/dist/providers/HybridRouterModelSelection.js.map +1 -0
- package/dist/providers/LLMProviderFactory.d.ts +23 -9
- package/dist/providers/LLMProviderFactory.d.ts.map +1 -1
- package/dist/providers/LLMProviderFactory.js +54 -11
- package/dist/providers/LLMProviderFactory.js.map +1 -1
- package/dist/providers/OllamaProvider.d.ts +122 -0
- package/dist/providers/OllamaProvider.d.ts.map +1 -0
- package/dist/providers/OllamaProvider.js +425 -0
- package/dist/providers/OllamaProvider.js.map +1 -0
- package/dist/providers/index.d.ts +6 -1
- package/dist/providers/index.d.ts.map +1 -1
- package/dist/providers/index.js +17 -1
- package/dist/providers/index.js.map +1 -1
- package/dist/routing/ComplexityClassifier.d.ts +266 -0
- package/dist/routing/ComplexityClassifier.d.ts.map +1 -0
- package/dist/routing/ComplexityClassifier.js +567 -0
- package/dist/routing/ComplexityClassifier.js.map +1 -0
- package/dist/routing/ModelCapabilityRegistry.d.ts +98 -0
- package/dist/routing/ModelCapabilityRegistry.d.ts.map +1 -0
- package/dist/routing/ModelCapabilityRegistry.js +216 -0
- package/dist/routing/ModelCapabilityRegistry.js.map +1 -0
- package/dist/routing/index.d.ts +13 -0
- package/dist/routing/index.d.ts.map +1 -0
- package/dist/routing/index.js +24 -0
- package/dist/routing/index.js.map +1 -0
- package/docs/reference/model-capability-registry.md +402 -0
- package/docs/reference/provider-config-schema.md +608 -0
- package/package.json +20 -4
|
@@ -0,0 +1,567 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
/**
|
|
3
|
+
* ComplexityClassifier - ML-Based Task Complexity Classification
|
|
4
|
+
*
|
|
5
|
+
* Uses machine learning techniques to classify task complexity for optimal LLM routing.
|
|
6
|
+
* Improves upon heuristic-based classification with learning from routing outcomes.
|
|
7
|
+
*
|
|
8
|
+
* Features:
|
|
9
|
+
* - Feature extraction from LLM completion options
|
|
10
|
+
* - Weighted scoring with trainable parameters
|
|
11
|
+
* - Learning from routing history and outcomes
|
|
12
|
+
* - Confidence scoring for classification decisions
|
|
13
|
+
* - Persistent memory integration for cross-session learning
|
|
14
|
+
*
|
|
15
|
+
* @module routing/ComplexityClassifier
|
|
16
|
+
* @version 1.0.0
|
|
17
|
+
*/
|
|
18
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
19
|
+
exports.ComplexityClassifier = exports.TaskComplexity = void 0;
|
|
20
|
+
const Logger_1 = require("../utils/Logger");
|
|
21
|
+
/**
|
|
22
|
+
* Task complexity levels
|
|
23
|
+
*/
|
|
24
|
+
var TaskComplexity;
|
|
25
|
+
(function (TaskComplexity) {
|
|
26
|
+
TaskComplexity["SIMPLE"] = "simple";
|
|
27
|
+
TaskComplexity["MODERATE"] = "moderate";
|
|
28
|
+
TaskComplexity["COMPLEX"] = "complex";
|
|
29
|
+
TaskComplexity["VERY_COMPLEX"] = "very_complex"; // Advanced analysis, architectural design (> 10000 chars)
|
|
30
|
+
})(TaskComplexity || (exports.TaskComplexity = TaskComplexity = {}));
|
|
31
|
+
/**
|
|
32
|
+
* ComplexityClassifier - ML-based task complexity classification
|
|
33
|
+
*
|
|
34
|
+
* Classifies LLM tasks into complexity levels using feature extraction
|
|
35
|
+
* and trainable weighted scoring. Learns from routing outcomes to improve
|
|
36
|
+
* classification accuracy over time.
|
|
37
|
+
*
|
|
38
|
+
* @example
|
|
39
|
+
* ```typescript
|
|
40
|
+
* const classifier = new ComplexityClassifier({
|
|
41
|
+
* enableLearning: true,
|
|
42
|
+
* learningRate: 0.1
|
|
43
|
+
* });
|
|
44
|
+
*
|
|
45
|
+
* const complexity = classifier.classifyTask(options);
|
|
46
|
+
* // After execution
|
|
47
|
+
* classifier.recordOutcome({
|
|
48
|
+
* features: classifier.extractFeatures(options),
|
|
49
|
+
* selectedComplexity: complexity,
|
|
50
|
+
* actualOutcome: { success: true, latency: 1500, cost: 0.001 }
|
|
51
|
+
* });
|
|
52
|
+
* ```
|
|
53
|
+
*/
|
|
54
|
+
class ComplexityClassifier {
|
|
55
|
+
constructor(config = {}) {
|
|
56
|
+
this.logger = Logger_1.Logger.getInstance();
|
|
57
|
+
this.config = {
|
|
58
|
+
debug: config.debug ?? false,
|
|
59
|
+
enableLearning: config.enableLearning ?? true,
|
|
60
|
+
learningRate: config.learningRate ?? 0.05,
|
|
61
|
+
maxHistorySize: config.maxHistorySize ?? 500,
|
|
62
|
+
initialWeights: config.initialWeights ?? {},
|
|
63
|
+
initialThresholds: config.initialThresholds ?? {}
|
|
64
|
+
};
|
|
65
|
+
// Initialize default weights (can be tuned through learning)
|
|
66
|
+
this.weights = {
|
|
67
|
+
contentLength: 0.25,
|
|
68
|
+
tokenCount: 0.30,
|
|
69
|
+
messageCount: 0.10,
|
|
70
|
+
codeBlocks: 0.15,
|
|
71
|
+
keywordComplexity: 0.10,
|
|
72
|
+
promptEntropy: 0.05,
|
|
73
|
+
contextWindowUsage: 0.03,
|
|
74
|
+
multimodal: 0.02,
|
|
75
|
+
systemPrompt: 0.05,
|
|
76
|
+
...config.initialWeights
|
|
77
|
+
};
|
|
78
|
+
// Normalize weights to sum to 1.0
|
|
79
|
+
this.normalizeWeights();
|
|
80
|
+
// Initialize default thresholds (tunable)
|
|
81
|
+
this.thresholds = {
|
|
82
|
+
simple: 0.25, // Score < 0.25 = SIMPLE
|
|
83
|
+
moderate: 0.50, // Score < 0.50 = MODERATE
|
|
84
|
+
complex: 0.75, // Score < 0.75 = COMPLEX
|
|
85
|
+
veryComplex: 0.75, // Score >= 0.75 = VERY_COMPLEX
|
|
86
|
+
...config.initialThresholds
|
|
87
|
+
};
|
|
88
|
+
this.routingHistory = [];
|
|
89
|
+
this.classificationCount = 0;
|
|
90
|
+
this.confidenceScores = [];
|
|
91
|
+
this.logger.debug('ComplexityClassifier initialized', {
|
|
92
|
+
weights: this.weights,
|
|
93
|
+
thresholds: this.thresholds,
|
|
94
|
+
learningEnabled: this.config.enableLearning
|
|
95
|
+
});
|
|
96
|
+
}
|
|
97
|
+
/**
|
|
98
|
+
* Classify task complexity using ML-based feature extraction and scoring
|
|
99
|
+
*
|
|
100
|
+
* @param options - LLM completion options to analyze
|
|
101
|
+
* @returns Classified complexity level
|
|
102
|
+
*/
|
|
103
|
+
classifyTask(options) {
|
|
104
|
+
const features = this.extractFeatures(options);
|
|
105
|
+
const score = this.calculateComplexityScore(features);
|
|
106
|
+
const complexity = this.scoreToComplexity(score);
|
|
107
|
+
const confidence = this.calculateConfidence(features, score);
|
|
108
|
+
this.classificationCount++;
|
|
109
|
+
this.confidenceScores.push(confidence);
|
|
110
|
+
// Keep only last 100 confidence scores
|
|
111
|
+
if (this.confidenceScores.length > 100) {
|
|
112
|
+
this.confidenceScores.shift();
|
|
113
|
+
}
|
|
114
|
+
if (this.config.debug) {
|
|
115
|
+
this.logger.debug('Task classified', {
|
|
116
|
+
complexity,
|
|
117
|
+
score: score.toFixed(3),
|
|
118
|
+
confidence: confidence.toFixed(3),
|
|
119
|
+
features: {
|
|
120
|
+
contentLength: features.contentLength,
|
|
121
|
+
tokens: features.estimatedTokenCount,
|
|
122
|
+
hasCode: features.hasCodeBlocks,
|
|
123
|
+
keywordScore: features.keywordComplexity.toFixed(2)
|
|
124
|
+
}
|
|
125
|
+
});
|
|
126
|
+
}
|
|
127
|
+
return complexity;
|
|
128
|
+
}
|
|
129
|
+
/**
|
|
130
|
+
* Extract features from LLM completion options
|
|
131
|
+
*
|
|
132
|
+
* @param options - LLM completion options
|
|
133
|
+
* @returns Extracted task features
|
|
134
|
+
*/
|
|
135
|
+
extractFeatures(options) {
|
|
136
|
+
// Extract all text content from messages
|
|
137
|
+
const allContent = this.extractAllContent(options);
|
|
138
|
+
const contentLength = allContent.length;
|
|
139
|
+
// Estimate token count (rough approximation: 1 token ≈ 4 chars)
|
|
140
|
+
const estimatedTokenCount = Math.ceil(contentLength / 4);
|
|
141
|
+
// Message count
|
|
142
|
+
const messageCount = options.messages.length;
|
|
143
|
+
// Check for code blocks
|
|
144
|
+
const hasCodeBlocks = /```[\s\S]*?```|`[^`]+`/.test(allContent);
|
|
145
|
+
// Calculate keyword complexity
|
|
146
|
+
const keywordComplexity = this.calculateKeywordComplexity(allContent);
|
|
147
|
+
// Calculate prompt entropy (vocabulary diversity)
|
|
148
|
+
const promptEntropy = this.calculatePromptEntropy(allContent);
|
|
149
|
+
// Context window usage (assuming 8k context window)
|
|
150
|
+
const contextWindowUsage = Math.min(estimatedTokenCount / 8192, 1.0);
|
|
151
|
+
// Check for multimodal content
|
|
152
|
+
const hasMultimodal = options.messages.some(msg => Array.isArray(msg.content) && msg.content.some(c => c.type === 'image'));
|
|
153
|
+
// Requested max tokens
|
|
154
|
+
const requestedMaxTokens = options.maxTokens || 0;
|
|
155
|
+
// System prompt complexity
|
|
156
|
+
const systemPromptComplexity = this.calculateSystemPromptComplexity(options);
|
|
157
|
+
return {
|
|
158
|
+
contentLength,
|
|
159
|
+
estimatedTokenCount,
|
|
160
|
+
messageCount,
|
|
161
|
+
hasCodeBlocks,
|
|
162
|
+
keywordComplexity,
|
|
163
|
+
promptEntropy,
|
|
164
|
+
contextWindowUsage,
|
|
165
|
+
hasMultimodal,
|
|
166
|
+
requestedMaxTokens,
|
|
167
|
+
systemPromptComplexity
|
|
168
|
+
};
|
|
169
|
+
}
|
|
170
|
+
/**
|
|
171
|
+
* Record routing outcome for learning
|
|
172
|
+
*
|
|
173
|
+
* @param entry - Routing history entry with outcome
|
|
174
|
+
*/
|
|
175
|
+
recordOutcome(entry) {
|
|
176
|
+
if (!this.config.enableLearning) {
|
|
177
|
+
return;
|
|
178
|
+
}
|
|
179
|
+
this.routingHistory.push({
|
|
180
|
+
...entry,
|
|
181
|
+
timestamp: entry.timestamp || new Date()
|
|
182
|
+
});
|
|
183
|
+
// Keep history size bounded
|
|
184
|
+
if (this.routingHistory.length > this.config.maxHistorySize) {
|
|
185
|
+
this.routingHistory.shift();
|
|
186
|
+
}
|
|
187
|
+
// Update weights based on outcome
|
|
188
|
+
this.updateWeightsFromOutcome(entry);
|
|
189
|
+
if (this.config.debug) {
|
|
190
|
+
this.logger.debug('Routing outcome recorded', {
|
|
191
|
+
complexity: entry.selectedComplexity,
|
|
192
|
+
success: entry.actualOutcome.success,
|
|
193
|
+
latency: entry.actualOutcome.latency,
|
|
194
|
+
historySize: this.routingHistory.length
|
|
195
|
+
});
|
|
196
|
+
}
|
|
197
|
+
}
|
|
198
|
+
/**
|
|
199
|
+
* Get classification confidence (0-1)
|
|
200
|
+
*
|
|
201
|
+
* Confidence is based on:
|
|
202
|
+
* - How clearly the score falls into a complexity bucket
|
|
203
|
+
* - Historical accuracy of similar classifications
|
|
204
|
+
*
|
|
205
|
+
* @returns Confidence score (0-1)
|
|
206
|
+
*/
|
|
207
|
+
getClassificationConfidence() {
|
|
208
|
+
if (this.confidenceScores.length === 0) {
|
|
209
|
+
return 0.5; // Default moderate confidence
|
|
210
|
+
}
|
|
211
|
+
// Average recent confidence scores
|
|
212
|
+
const recentScores = this.confidenceScores.slice(-10);
|
|
213
|
+
return recentScores.reduce((sum, score) => sum + score, 0) / recentScores.length;
|
|
214
|
+
}
|
|
215
|
+
/**
|
|
216
|
+
* Get current feature weights
|
|
217
|
+
*
|
|
218
|
+
* @returns Current feature weights
|
|
219
|
+
*/
|
|
220
|
+
getWeights() {
|
|
221
|
+
return { ...this.weights };
|
|
222
|
+
}
|
|
223
|
+
/**
|
|
224
|
+
* Get current complexity thresholds
|
|
225
|
+
*
|
|
226
|
+
* @returns Current thresholds
|
|
227
|
+
*/
|
|
228
|
+
getThresholds() {
|
|
229
|
+
return { ...this.thresholds };
|
|
230
|
+
}
|
|
231
|
+
/**
|
|
232
|
+
* Get routing history
|
|
233
|
+
*
|
|
234
|
+
* @returns Copy of routing history
|
|
235
|
+
*/
|
|
236
|
+
getHistory() {
|
|
237
|
+
return [...this.routingHistory];
|
|
238
|
+
}
|
|
239
|
+
/**
|
|
240
|
+
* Get classification statistics
|
|
241
|
+
*
|
|
242
|
+
* @returns Statistics about classifications and learning
|
|
243
|
+
*/
|
|
244
|
+
getStatistics() {
|
|
245
|
+
const successCount = this.routingHistory.filter(e => e.actualOutcome.success).length;
|
|
246
|
+
const successRate = this.routingHistory.length > 0
|
|
247
|
+
? successCount / this.routingHistory.length
|
|
248
|
+
: 0;
|
|
249
|
+
const distribution = {
|
|
250
|
+
[TaskComplexity.SIMPLE]: 0,
|
|
251
|
+
[TaskComplexity.MODERATE]: 0,
|
|
252
|
+
[TaskComplexity.COMPLEX]: 0,
|
|
253
|
+
[TaskComplexity.VERY_COMPLEX]: 0
|
|
254
|
+
};
|
|
255
|
+
this.routingHistory.forEach(entry => {
|
|
256
|
+
distribution[entry.selectedComplexity]++;
|
|
257
|
+
});
|
|
258
|
+
return {
|
|
259
|
+
totalClassifications: this.classificationCount,
|
|
260
|
+
historySize: this.routingHistory.length,
|
|
261
|
+
averageConfidence: this.getClassificationConfidence(),
|
|
262
|
+
successRate,
|
|
263
|
+
complexityDistribution: distribution
|
|
264
|
+
};
|
|
265
|
+
}
|
|
266
|
+
/**
|
|
267
|
+
* Extract all text content from messages
|
|
268
|
+
*/
|
|
269
|
+
extractAllContent(options) {
|
|
270
|
+
const parts = [];
|
|
271
|
+
// System prompts
|
|
272
|
+
if (options.system) {
|
|
273
|
+
parts.push(...options.system.map(s => s.text));
|
|
274
|
+
}
|
|
275
|
+
// Messages
|
|
276
|
+
options.messages.forEach(msg => {
|
|
277
|
+
if (typeof msg.content === 'string') {
|
|
278
|
+
parts.push(msg.content);
|
|
279
|
+
}
|
|
280
|
+
else {
|
|
281
|
+
parts.push(...msg.content.filter(c => c.type === 'text').map(c => c.text || ''));
|
|
282
|
+
}
|
|
283
|
+
});
|
|
284
|
+
return parts.join('\n');
|
|
285
|
+
}
|
|
286
|
+
/**
|
|
287
|
+
* Calculate keyword complexity score (0-1)
|
|
288
|
+
*
|
|
289
|
+
* Analyzes presence of complex technical keywords and patterns
|
|
290
|
+
*/
|
|
291
|
+
calculateKeywordComplexity(content) {
|
|
292
|
+
const lowerContent = content.toLowerCase();
|
|
293
|
+
const complexPatterns = [
|
|
294
|
+
// Architecture & Design
|
|
295
|
+
{ pattern: /architect|design\s+pattern|microservice|distributed/gi, weight: 0.15 },
|
|
296
|
+
{ pattern: /scale|performance|optimization|bottleneck/gi, weight: 0.12 },
|
|
297
|
+
{ pattern: /refactor|technical\s+debt|legacy/gi, weight: 0.10 },
|
|
298
|
+
// Advanced Programming
|
|
299
|
+
{ pattern: /algorithm|complexity|o\(|big\s+o/gi, weight: 0.14 },
|
|
300
|
+
{ pattern: /async|concurrent|parallel|thread/gi, weight: 0.11 },
|
|
301
|
+
{ pattern: /generic|polymorphism|inheritance/gi, weight: 0.09 },
|
|
302
|
+
// Analysis & Problem Solving
|
|
303
|
+
{ pattern: /analyze|investigate|debug|diagnose/gi, weight: 0.13 },
|
|
304
|
+
{ pattern: /optimize|improve|enhance/gi, weight: 0.08 },
|
|
305
|
+
{ pattern: /security|vulnerability|exploit/gi, weight: 0.08 }
|
|
306
|
+
];
|
|
307
|
+
let score = 0;
|
|
308
|
+
let maxPossibleScore = 0;
|
|
309
|
+
complexPatterns.forEach(({ pattern, weight }) => {
|
|
310
|
+
maxPossibleScore += weight;
|
|
311
|
+
const matches = content.match(pattern);
|
|
312
|
+
if (matches) {
|
|
313
|
+
// Diminishing returns for multiple matches
|
|
314
|
+
const matchScore = Math.min(matches.length / 5, 1.0);
|
|
315
|
+
score += weight * matchScore;
|
|
316
|
+
}
|
|
317
|
+
});
|
|
318
|
+
return maxPossibleScore > 0 ? Math.min(score / maxPossibleScore, 1.0) : 0;
|
|
319
|
+
}
|
|
320
|
+
/**
|
|
321
|
+
* Calculate prompt entropy (vocabulary diversity)
|
|
322
|
+
*
|
|
323
|
+
* Higher entropy = more diverse vocabulary = potentially more complex
|
|
324
|
+
*/
|
|
325
|
+
calculatePromptEntropy(content) {
|
|
326
|
+
// Tokenize into words
|
|
327
|
+
const words = content.toLowerCase()
|
|
328
|
+
.replace(/[^\w\s]/g, ' ')
|
|
329
|
+
.split(/\s+/)
|
|
330
|
+
.filter(w => w.length > 3); // Filter short words
|
|
331
|
+
if (words.length === 0)
|
|
332
|
+
return 0;
|
|
333
|
+
// Calculate word frequency
|
|
334
|
+
const frequency = new Map();
|
|
335
|
+
words.forEach(word => {
|
|
336
|
+
frequency.set(word, (frequency.get(word) || 0) + 1);
|
|
337
|
+
});
|
|
338
|
+
// Calculate Shannon entropy
|
|
339
|
+
let entropy = 0;
|
|
340
|
+
const totalWords = words.length;
|
|
341
|
+
frequency.forEach(count => {
|
|
342
|
+
const probability = count / totalWords;
|
|
343
|
+
entropy -= probability * Math.log2(probability);
|
|
344
|
+
});
|
|
345
|
+
// Normalize to 0-1 (max entropy for reasonable text is ~10)
|
|
346
|
+
return Math.min(entropy / 10, 1.0);
|
|
347
|
+
}
|
|
348
|
+
/**
|
|
349
|
+
* Calculate system prompt complexity
|
|
350
|
+
*/
|
|
351
|
+
calculateSystemPromptComplexity(options) {
|
|
352
|
+
if (!options.system || options.system.length === 0) {
|
|
353
|
+
return 0;
|
|
354
|
+
}
|
|
355
|
+
const systemText = options.system.map(s => s.text).join('\n');
|
|
356
|
+
const length = systemText.length;
|
|
357
|
+
// Longer, more detailed system prompts = higher complexity
|
|
358
|
+
if (length > 5000)
|
|
359
|
+
return 1.0;
|
|
360
|
+
if (length > 2000)
|
|
361
|
+
return 0.7;
|
|
362
|
+
if (length > 500)
|
|
363
|
+
return 0.4;
|
|
364
|
+
return 0.2;
|
|
365
|
+
}
|
|
366
|
+
/**
|
|
367
|
+
* Calculate weighted complexity score (0-1)
|
|
368
|
+
*/
|
|
369
|
+
calculateComplexityScore(features) {
|
|
370
|
+
let score = 0;
|
|
371
|
+
// Content length contribution (normalize to 0-1)
|
|
372
|
+
const lengthScore = Math.min(features.contentLength / 10000, 1.0);
|
|
373
|
+
score += this.weights.contentLength * lengthScore;
|
|
374
|
+
// Token count contribution
|
|
375
|
+
const tokenScore = Math.min(features.estimatedTokenCount / 4096, 1.0);
|
|
376
|
+
score += this.weights.tokenCount * tokenScore;
|
|
377
|
+
// Message count contribution
|
|
378
|
+
const messageScore = Math.min(features.messageCount / 10, 1.0);
|
|
379
|
+
score += this.weights.messageCount * messageScore;
|
|
380
|
+
// Code blocks contribution
|
|
381
|
+
score += this.weights.codeBlocks * (features.hasCodeBlocks ? 1.0 : 0.0);
|
|
382
|
+
// Keyword complexity
|
|
383
|
+
score += this.weights.keywordComplexity * features.keywordComplexity;
|
|
384
|
+
// Prompt entropy
|
|
385
|
+
score += this.weights.promptEntropy * features.promptEntropy;
|
|
386
|
+
// Context window usage
|
|
387
|
+
score += this.weights.contextWindowUsage * features.contextWindowUsage;
|
|
388
|
+
// Multimodal content
|
|
389
|
+
score += this.weights.multimodal * (features.hasMultimodal ? 1.0 : 0.0);
|
|
390
|
+
// System prompt complexity
|
|
391
|
+
score += this.weights.systemPrompt * features.systemPromptComplexity;
|
|
392
|
+
return Math.min(score, 1.0);
|
|
393
|
+
}
|
|
394
|
+
/**
|
|
395
|
+
* Convert complexity score to complexity level
|
|
396
|
+
*/
|
|
397
|
+
scoreToComplexity(score) {
|
|
398
|
+
if (score < this.thresholds.simple) {
|
|
399
|
+
return TaskComplexity.SIMPLE;
|
|
400
|
+
}
|
|
401
|
+
if (score < this.thresholds.moderate) {
|
|
402
|
+
return TaskComplexity.MODERATE;
|
|
403
|
+
}
|
|
404
|
+
if (score < this.thresholds.complex) {
|
|
405
|
+
return TaskComplexity.COMPLEX;
|
|
406
|
+
}
|
|
407
|
+
return TaskComplexity.VERY_COMPLEX;
|
|
408
|
+
}
|
|
409
|
+
/**
|
|
410
|
+
* Calculate confidence for a classification
|
|
411
|
+
*/
|
|
412
|
+
calculateConfidence(features, score) {
|
|
413
|
+
// Calculate distance from threshold boundaries
|
|
414
|
+
const thresholdValues = [
|
|
415
|
+
0,
|
|
416
|
+
this.thresholds.simple,
|
|
417
|
+
this.thresholds.moderate,
|
|
418
|
+
this.thresholds.complex,
|
|
419
|
+
1.0
|
|
420
|
+
];
|
|
421
|
+
// Find which threshold range we're in
|
|
422
|
+
let minDistance = 1.0;
|
|
423
|
+
for (let i = 0; i < thresholdValues.length - 1; i++) {
|
|
424
|
+
const lower = thresholdValues[i];
|
|
425
|
+
const upper = thresholdValues[i + 1];
|
|
426
|
+
if (score >= lower && score < upper) {
|
|
427
|
+
const rangeSize = upper - lower;
|
|
428
|
+
const distanceFromLower = score - lower;
|
|
429
|
+
const distanceFromUpper = upper - score;
|
|
430
|
+
const minDistanceInRange = Math.min(distanceFromLower, distanceFromUpper);
|
|
431
|
+
// Normalize to 0-1 (closer to center of range = higher confidence)
|
|
432
|
+
minDistance = (rangeSize / 2 - Math.abs(score - (lower + upper) / 2)) / (rangeSize / 2);
|
|
433
|
+
break;
|
|
434
|
+
}
|
|
435
|
+
}
|
|
436
|
+
// Confidence is higher when we're clearly in the middle of a range
|
|
437
|
+
return Math.max(0.3, Math.min(minDistance, 1.0));
|
|
438
|
+
}
|
|
439
|
+
/**
|
|
440
|
+
* Update weights based on routing outcome (gradient descent style)
|
|
441
|
+
*/
|
|
442
|
+
updateWeightsFromOutcome(entry) {
|
|
443
|
+
// Simple learning: adjust weights based on success/failure
|
|
444
|
+
const { success, latency } = entry.actualOutcome;
|
|
445
|
+
const features = entry.features;
|
|
446
|
+
// If failed, or high latency, this might indicate misclassification
|
|
447
|
+
const performanceScore = success ? (latency < 5000 ? 1.0 : 0.7) : 0.3;
|
|
448
|
+
// Calculate expected complexity based on actual performance
|
|
449
|
+
let expectedComplexity;
|
|
450
|
+
if (performanceScore < 0.5) {
|
|
451
|
+
// Poor performance - might need higher complexity
|
|
452
|
+
expectedComplexity = this.incrementComplexity(entry.selectedComplexity);
|
|
453
|
+
}
|
|
454
|
+
else if (performanceScore > 0.9 && latency < 1000) {
|
|
455
|
+
// Excellent performance - might be over-classified
|
|
456
|
+
expectedComplexity = this.decrementComplexity(entry.selectedComplexity);
|
|
457
|
+
}
|
|
458
|
+
else {
|
|
459
|
+
// Good performance - classification was correct
|
|
460
|
+
return; // No weight update needed
|
|
461
|
+
}
|
|
462
|
+
// If expected != selected, adjust weights
|
|
463
|
+
if (expectedComplexity !== entry.selectedComplexity) {
|
|
464
|
+
this.adjustWeights(features, expectedComplexity, entry.selectedComplexity);
|
|
465
|
+
}
|
|
466
|
+
}
|
|
467
|
+
/**
|
|
468
|
+
* Increment complexity level
|
|
469
|
+
*/
|
|
470
|
+
incrementComplexity(complexity) {
|
|
471
|
+
const levels = [
|
|
472
|
+
TaskComplexity.SIMPLE,
|
|
473
|
+
TaskComplexity.MODERATE,
|
|
474
|
+
TaskComplexity.COMPLEX,
|
|
475
|
+
TaskComplexity.VERY_COMPLEX
|
|
476
|
+
];
|
|
477
|
+
const index = levels.indexOf(complexity);
|
|
478
|
+
return index < levels.length - 1 ? levels[index + 1] : complexity;
|
|
479
|
+
}
|
|
480
|
+
/**
|
|
481
|
+
* Decrement complexity level
|
|
482
|
+
*/
|
|
483
|
+
decrementComplexity(complexity) {
|
|
484
|
+
const levels = [
|
|
485
|
+
TaskComplexity.SIMPLE,
|
|
486
|
+
TaskComplexity.MODERATE,
|
|
487
|
+
TaskComplexity.COMPLEX,
|
|
488
|
+
TaskComplexity.VERY_COMPLEX
|
|
489
|
+
];
|
|
490
|
+
const index = levels.indexOf(complexity);
|
|
491
|
+
return index > 0 ? levels[index - 1] : complexity;
|
|
492
|
+
}
|
|
493
|
+
/**
|
|
494
|
+
* Adjust weights to better match expected complexity
|
|
495
|
+
*/
|
|
496
|
+
adjustWeights(features, expected, actual) {
|
|
497
|
+
const expectedScore = this.complexityToTargetScore(expected);
|
|
498
|
+
const actualScore = this.complexityToTargetScore(actual);
|
|
499
|
+
const error = expectedScore - actualScore;
|
|
500
|
+
// Gradient descent: adjust weights proportional to features and error
|
|
501
|
+
const lr = this.config.learningRate;
|
|
502
|
+
// Normalize features to 0-1 for weight updates
|
|
503
|
+
const normalizedFeatures = {
|
|
504
|
+
contentLength: Math.min(features.contentLength / 10000, 1.0),
|
|
505
|
+
tokenCount: Math.min(features.estimatedTokenCount / 4096, 1.0),
|
|
506
|
+
messageCount: Math.min(features.messageCount / 10, 1.0),
|
|
507
|
+
codeBlocks: features.hasCodeBlocks ? 1.0 : 0.0,
|
|
508
|
+
keywordComplexity: features.keywordComplexity,
|
|
509
|
+
promptEntropy: features.promptEntropy,
|
|
510
|
+
contextWindowUsage: features.contextWindowUsage,
|
|
511
|
+
multimodal: features.hasMultimodal ? 1.0 : 0.0,
|
|
512
|
+
systemPrompt: features.systemPromptComplexity
|
|
513
|
+
};
|
|
514
|
+
// Update weights (gradient descent)
|
|
515
|
+
this.weights.contentLength += lr * error * normalizedFeatures.contentLength;
|
|
516
|
+
this.weights.tokenCount += lr * error * normalizedFeatures.tokenCount;
|
|
517
|
+
this.weights.messageCount += lr * error * normalizedFeatures.messageCount;
|
|
518
|
+
this.weights.codeBlocks += lr * error * normalizedFeatures.codeBlocks;
|
|
519
|
+
this.weights.keywordComplexity += lr * error * normalizedFeatures.keywordComplexity;
|
|
520
|
+
this.weights.promptEntropy += lr * error * normalizedFeatures.promptEntropy;
|
|
521
|
+
this.weights.contextWindowUsage += lr * error * normalizedFeatures.contextWindowUsage;
|
|
522
|
+
this.weights.multimodal += lr * error * normalizedFeatures.multimodal;
|
|
523
|
+
this.weights.systemPrompt += lr * error * normalizedFeatures.systemPrompt;
|
|
524
|
+
// Normalize weights to sum to 1.0
|
|
525
|
+
this.normalizeWeights();
|
|
526
|
+
if (this.config.debug) {
|
|
527
|
+
this.logger.debug('Weights updated from outcome', {
|
|
528
|
+
expected,
|
|
529
|
+
actual,
|
|
530
|
+
error: error.toFixed(3),
|
|
531
|
+
newWeights: {
|
|
532
|
+
contentLength: this.weights.contentLength.toFixed(3),
|
|
533
|
+
tokenCount: this.weights.tokenCount.toFixed(3),
|
|
534
|
+
codeBlocks: this.weights.codeBlocks.toFixed(3)
|
|
535
|
+
}
|
|
536
|
+
});
|
|
537
|
+
}
|
|
538
|
+
}
|
|
539
|
+
/**
|
|
540
|
+
* Convert complexity to target score for learning
|
|
541
|
+
*/
|
|
542
|
+
complexityToTargetScore(complexity) {
|
|
543
|
+
switch (complexity) {
|
|
544
|
+
case TaskComplexity.SIMPLE:
|
|
545
|
+
return 0.15;
|
|
546
|
+
case TaskComplexity.MODERATE:
|
|
547
|
+
return 0.40;
|
|
548
|
+
case TaskComplexity.COMPLEX:
|
|
549
|
+
return 0.65;
|
|
550
|
+
case TaskComplexity.VERY_COMPLEX:
|
|
551
|
+
return 0.90;
|
|
552
|
+
}
|
|
553
|
+
}
|
|
554
|
+
/**
|
|
555
|
+
* Normalize weights to sum to 1.0
|
|
556
|
+
*/
|
|
557
|
+
normalizeWeights() {
|
|
558
|
+
const sum = Object.values(this.weights).reduce((a, b) => a + b, 0);
|
|
559
|
+
if (sum > 0) {
|
|
560
|
+
Object.keys(this.weights).forEach(key => {
|
|
561
|
+
this.weights[key] /= sum;
|
|
562
|
+
});
|
|
563
|
+
}
|
|
564
|
+
}
|
|
565
|
+
}
|
|
566
|
+
exports.ComplexityClassifier = ComplexityClassifier;
|
|
567
|
+
//# sourceMappingURL=ComplexityClassifier.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"ComplexityClassifier.js","sourceRoot":"","sources":["../../src/routing/ComplexityClassifier.ts"],"names":[],"mappings":"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"}
|