## Added - ML-Based Complexity Classification with 4-level task analysis - Model Capability Registry with 25+ December 2025 models - Claude Opus 4.5, DeepSeek R1/V3, GPT-5, Gemini 2.5 Pro - Cost Optimization Strategies (PromptCompressor, Caching, Batching) - HybridRouter integration with complexity-based model selection ## Changed - README.md Quick Start section (user-focused, no version numbers) - .env.example rewritten for Phase 2 features - CONTRIBUTORS.md updated with @fndlalit's n8n contribution (#151) ## Fixed - HybridRouter RuVector test isolation - Compression benchmarks with honest expectations (2-8% vs false 50%) ## New Tests - ComplexityClassifier, ModelCapabilityRegistry, CompressionBenchmark - HybridRouter integration, model selection, and cost tracking tests 🤖 Generated with [Claude Code](https://claude.com/claude-code) Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
7.7 KiB
Task 2.1.2: ComplexityClassifier Integration with HybridRouter
Implementation Summary
Successfully integrated the ML-based ComplexityClassifier into HybridRouter through a wrapper class approach, enabling intelligent routing decisions that improve over time through learning.
Files Created
1. Integration Class
File: /workspaces/agentic-qe-cf/src/providers/HybridRouterComplexityIntegration.ts
- Lines of Code: 439
- Exports:
HybridRouterWithComplexity- Main integration classHybridRouterWithComplexityConfig- Configuration interfaceClassifierStatistics- Statistics interface
2. Unit Tests
File: /workspaces/agentic-qe-cf/tests/unit/providers/HybridRouter-complexity-integration.test.ts
- Lines of Code: 532
- Test Suites: 8 test suites
- Total Tests: 22 tests
- Test Results: ✅ All 22 tests passing
Key Features Implemented
1. ML-Based Complexity Analysis
Replaced heuristic analyzeComplexity() with ML classifier:
private analyzeTaskComplexityML(options: LLMCompletionOptions): {
complexity: TaskComplexity;
confidence: number;
}
2. Automatic Training from Outcomes
Automatically trains classifier from routing outcomes:
trainFromOutcome(entry: RoutingHistoryEntry): void
Training happens automatically after each request when autoTrain: true:
- Successful completions → Positive training signal
- Failed requests → Negative training signal for weight adjustment
3. Statistics and Monitoring
getClassifierStats(): ClassifierStatistics
Returns:
- Total classifications performed
- History size (training data points)
- Average confidence score
- Success rate
- Complexity distribution
- Current feature weights
- Complexity thresholds
4. Wrapper Architecture
HybridRouterWithComplexity extends HybridRouter:
- Non-invasive: No modifications to original HybridRouter.ts
- Drop-in replacement: Uses same interface
- Backward compatible: Can switch back to original anytime
Configuration
Basic Usage
const router = new HybridRouterWithComplexity({
claude: { apiKey: 'sk-...' },
ruvllm: { baseUrl: 'http://localhost:8080' },
classifier: {
enableLearning: true,
learningRate: 0.05,
maxHistorySize: 500
},
autoTrain: true,
minConfidence: 0.3
});
await router.initialize();
const response = await router.complete({
messages: [{ role: 'user', content: 'Your task...' }]
});
Configuration Options
| Option | Default | Description |
|---|---|---|
classifier.enableLearning |
true |
Enable learning from outcomes |
classifier.learningRate |
0.05 |
Learning rate for weight updates (0-1) |
classifier.maxHistorySize |
500 |
Maximum training history entries |
autoTrain |
true |
Automatically train from each request |
minConfidence |
0.3 |
Minimum confidence threshold |
fallbackToHeuristics |
false |
Use heuristics if confidence < threshold |
Test Coverage
Test Suites
-
Constructor and Initialization (3 tests)
- Default configuration
- Custom classifier config
- Auto-training enabled by default
-
ML-Based Complexity Classification (5 tests)
- Simple task classification
- Moderate task classification
- Complex task classification
- Very complex task classification
- Confidence scoring
-
Classifier Training from Outcomes (4 tests)
- Record successful outcomes
- Record failed outcomes
- Improve with training data
- Update feature weights
-
Classifier Statistics (5 tests)
- Track total classifications
- Calculate success rate
- Track complexity distribution
- Expose feature weights
- Expose thresholds
-
Routing History (2 tests)
- Maintain history
- Limit history size
-
Confidence Scoring (1 test)
- Confidence within 0-1 range
-
Integration with Base HybridRouter (2 tests)
- Extends HybridRouter
- Exposes HybridRouter methods
How It Works
1. Request Flow
Request → HybridRouterWithComplexity.complete()
↓
Extract features from request
↓
ML Classifier analyzes complexity
↓
Get confidence score
↓
Route to appropriate provider (via base HybridRouter)
↓
Record outcome for training
↓
Update classifier weights (if autoTrain enabled)
2. Training Mechanism
The classifier uses gradient descent to update weights based on outcomes:
- Successful routing: Reinforces current classification
- Failed routing (timeout/error): Adjusts weights to classify differently next time
- High latency: May indicate task should be routed to more powerful provider
3. Feature Extraction
The classifier analyzes:
- Content length
- Estimated token count
- Message count
- Code block presence
- Keyword complexity
- Prompt entropy (vocabulary diversity)
- Context window usage
- Multimodal content
- System prompt complexity
4. Learning Over Time
As the classifier processes more requests:
- Feature weights self-adjust based on what predicts success
- Confidence scores improve as patterns emerge
- Classification accuracy increases
- Routing decisions become more optimal
Benefits
1. Improved Routing Accuracy
- ML-based classification vs simple heuristics
- Learns from actual outcomes
- Adapts to specific workload patterns
2. Cost Optimization
- Routes simple tasks to cheaper local provider
- Routes complex tasks to cloud only when needed
- Learns optimal routing over time
3. Better Performance
- Avoids routing complex tasks to slow providers
- Confidence scoring for decision quality
- Adaptive to changing workload characteristics
4. Maintainability
- Wrapper pattern = no changes to base router
- Comprehensive test coverage (100% passing)
- Easy to disable/enable ML routing
- Statistics for monitoring
Integration Points
Accessing Statistics
const stats = router.getClassifierStats();
console.log(`Classifications: ${stats.totalClassifications}`);
console.log(`Success rate: ${(stats.successRate * 100).toFixed(1)}%`);
console.log(`Avg confidence: ${(stats.averageConfidence * 100).toFixed(1)}%`);
console.log('Complexity distribution:', stats.complexityDistribution);
Manual Training
// Can provide custom training data
router.trainFromOutcome({
features: { /* extracted features */ },
selectedComplexity: TaskComplexity.COMPLEX,
actualOutcome: {
success: true,
latency: 2500,
cost: 0.01,
provider: 'cloud'
},
timestamp: new Date()
});
Accessing History
const history = router.getRoutingHistory();
// Analyze patterns, export for analysis, etc.
Next Steps (Future Enhancements)
-
Persistent Learning
- Save learned weights to disk
- Load weights on startup
- Share weights across instances
-
Advanced Metrics
- Per-task-type accuracy tracking
- A/B testing between heuristics and ML
- Cost savings from better routing
-
Explainability
- Why was task classified this way?
- Feature importance visualization
- Confidence breakdown
-
Multi-Model Support
- Learn routing for multiple model types
- Provider-specific optimization
- Dynamic model selection
Validation
✅ All 22 unit tests passing ✅ No modifications to original HybridRouter.ts ✅ Drop-in replacement architecture ✅ Comprehensive statistics tracking ✅ Learning from outcomes implemented ✅ Confidence scoring working
Task Completion
Task 2.1.2 from the LLM Independence plan is COMPLETE.
The ComplexityClassifier ML module has been successfully integrated into HybridRouter through a clean wrapper architecture, enabling intelligent routing that improves over time through learning from actual outcomes.