agentic-qe 2.6.1 → 2.6.2

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (114) hide show
  1. package/CHANGELOG.md +71 -0
  2. package/README.md +222 -159
  3. package/dist/agents/BaseAgent.d.ts +19 -0
  4. package/dist/agents/BaseAgent.d.ts.map +1 -1
  5. package/dist/agents/BaseAgent.js +41 -1
  6. package/dist/agents/BaseAgent.js.map +1 -1
  7. package/dist/agents/CodeIntelligenceAgent.d.ts +14 -0
  8. package/dist/agents/CodeIntelligenceAgent.d.ts.map +1 -1
  9. package/dist/agents/CodeIntelligenceAgent.js +66 -0
  10. package/dist/agents/CodeIntelligenceAgent.js.map +1 -1
  11. package/dist/agents/CoverageAnalyzerAgent.d.ts +8 -0
  12. package/dist/agents/CoverageAnalyzerAgent.d.ts.map +1 -1
  13. package/dist/agents/CoverageAnalyzerAgent.js +65 -1
  14. package/dist/agents/CoverageAnalyzerAgent.js.map +1 -1
  15. package/dist/agents/TestGeneratorAgent.d.ts +2 -2
  16. package/dist/agents/TestGeneratorAgent.d.ts.map +1 -1
  17. package/dist/agents/TestGeneratorAgent.js +16 -6
  18. package/dist/agents/TestGeneratorAgent.js.map +1 -1
  19. package/dist/agents/adapters/AgentLLMAdapter.d.ts +127 -0
  20. package/dist/agents/adapters/AgentLLMAdapter.d.ts.map +1 -0
  21. package/dist/agents/adapters/AgentLLMAdapter.js +366 -0
  22. package/dist/agents/adapters/AgentLLMAdapter.js.map +1 -0
  23. package/dist/agents/adapters/index.d.ts +1 -0
  24. package/dist/agents/adapters/index.d.ts.map +1 -1
  25. package/dist/agents/adapters/index.js +5 -1
  26. package/dist/agents/adapters/index.js.map +1 -1
  27. package/dist/agents/interfaces/IAgentLLM.d.ts +257 -0
  28. package/dist/agents/interfaces/IAgentLLM.d.ts.map +1 -0
  29. package/dist/agents/interfaces/IAgentLLM.js +39 -0
  30. package/dist/agents/interfaces/IAgentLLM.js.map +1 -0
  31. package/dist/agents/interfaces/index.d.ts +10 -0
  32. package/dist/agents/interfaces/index.d.ts.map +1 -0
  33. package/dist/agents/interfaces/index.js +14 -0
  34. package/dist/agents/interfaces/index.js.map +1 -0
  35. package/dist/agents/n8n/N8nBaseAgent.d.ts +18 -0
  36. package/dist/agents/n8n/N8nBaseAgent.d.ts.map +1 -1
  37. package/dist/agents/n8n/N8nBaseAgent.js +80 -0
  38. package/dist/agents/n8n/N8nBaseAgent.js.map +1 -1
  39. package/dist/cli/commands/providers.d.ts +50 -0
  40. package/dist/cli/commands/providers.d.ts.map +1 -0
  41. package/dist/cli/commands/providers.js +403 -0
  42. package/dist/cli/commands/providers.js.map +1 -0
  43. package/dist/cli/index.js +62 -0
  44. package/dist/cli/index.js.map +1 -1
  45. package/dist/code-intelligence/indexing/FileWatcher.d.ts.map +1 -1
  46. package/dist/code-intelligence/indexing/FileWatcher.js +11 -8
  47. package/dist/code-intelligence/indexing/FileWatcher.js.map +1 -1
  48. package/dist/config/ConfigLoader.d.ts +85 -0
  49. package/dist/config/ConfigLoader.d.ts.map +1 -0
  50. package/dist/config/ConfigLoader.js +420 -0
  51. package/dist/config/ConfigLoader.js.map +1 -0
  52. package/dist/config/ProviderConfig.d.ts +153 -0
  53. package/dist/config/ProviderConfig.d.ts.map +1 -0
  54. package/dist/config/ProviderConfig.js +155 -0
  55. package/dist/config/ProviderConfig.js.map +1 -0
  56. package/dist/config/index.d.ts +35 -0
  57. package/dist/config/index.d.ts.map +1 -0
  58. package/dist/config/index.js +45 -0
  59. package/dist/config/index.js.map +1 -0
  60. package/dist/core/memory/HNSWVectorMemory.js +1 -1
  61. package/dist/mcp/server-instructions.d.ts +1 -1
  62. package/dist/mcp/server-instructions.js +1 -1
  63. package/dist/mcp/server.d.ts +1 -0
  64. package/dist/mcp/server.d.ts.map +1 -1
  65. package/dist/memory/HNSWPatternStore.d.ts.map +1 -1
  66. package/dist/memory/HNSWPatternStore.js +23 -0
  67. package/dist/memory/HNSWPatternStore.js.map +1 -1
  68. package/dist/memory/RuVectorPatternStore.d.ts +5 -0
  69. package/dist/memory/RuVectorPatternStore.d.ts.map +1 -1
  70. package/dist/memory/RuVectorPatternStore.js +11 -0
  71. package/dist/memory/RuVectorPatternStore.js.map +1 -1
  72. package/dist/providers/CostOptimizationStrategies.d.ts +297 -0
  73. package/dist/providers/CostOptimizationStrategies.d.ts.map +1 -0
  74. package/dist/providers/CostOptimizationStrategies.js +831 -0
  75. package/dist/providers/CostOptimizationStrategies.js.map +1 -0
  76. package/dist/providers/HybridRouter.d.ts +142 -5
  77. package/dist/providers/HybridRouter.d.ts.map +1 -1
  78. package/dist/providers/HybridRouter.js +472 -6
  79. package/dist/providers/HybridRouter.js.map +1 -1
  80. package/dist/providers/HybridRouterComplexityIntegration.d.ts +169 -0
  81. package/dist/providers/HybridRouterComplexityIntegration.d.ts.map +1 -0
  82. package/dist/providers/HybridRouterComplexityIntegration.js +319 -0
  83. package/dist/providers/HybridRouterComplexityIntegration.js.map +1 -0
  84. package/dist/providers/HybridRouterModelSelection.d.ts +106 -0
  85. package/dist/providers/HybridRouterModelSelection.d.ts.map +1 -0
  86. package/dist/providers/HybridRouterModelSelection.js +420 -0
  87. package/dist/providers/HybridRouterModelSelection.js.map +1 -0
  88. package/dist/providers/LLMProviderFactory.d.ts +23 -9
  89. package/dist/providers/LLMProviderFactory.d.ts.map +1 -1
  90. package/dist/providers/LLMProviderFactory.js +54 -11
  91. package/dist/providers/LLMProviderFactory.js.map +1 -1
  92. package/dist/providers/OllamaProvider.d.ts +122 -0
  93. package/dist/providers/OllamaProvider.d.ts.map +1 -0
  94. package/dist/providers/OllamaProvider.js +425 -0
  95. package/dist/providers/OllamaProvider.js.map +1 -0
  96. package/dist/providers/index.d.ts +6 -1
  97. package/dist/providers/index.d.ts.map +1 -1
  98. package/dist/providers/index.js +17 -1
  99. package/dist/providers/index.js.map +1 -1
  100. package/dist/routing/ComplexityClassifier.d.ts +266 -0
  101. package/dist/routing/ComplexityClassifier.d.ts.map +1 -0
  102. package/dist/routing/ComplexityClassifier.js +567 -0
  103. package/dist/routing/ComplexityClassifier.js.map +1 -0
  104. package/dist/routing/ModelCapabilityRegistry.d.ts +98 -0
  105. package/dist/routing/ModelCapabilityRegistry.d.ts.map +1 -0
  106. package/dist/routing/ModelCapabilityRegistry.js +216 -0
  107. package/dist/routing/ModelCapabilityRegistry.js.map +1 -0
  108. package/dist/routing/index.d.ts +13 -0
  109. package/dist/routing/index.d.ts.map +1 -0
  110. package/dist/routing/index.js +24 -0
  111. package/dist/routing/index.js.map +1 -0
  112. package/docs/reference/model-capability-registry.md +402 -0
  113. package/docs/reference/provider-config-schema.md +608 -0
  114. package/package.json +19 -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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"}