@claude-flow/cli 3.0.0-alpha.106 → 3.0.0-alpha.107

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.
@@ -0,0 +1,488 @@
1
+ /**
2
+ * Intelligent Model Router using Tiny Dancer
3
+ *
4
+ * Dynamically routes requests to optimal Claude model (haiku/sonnet/opus)
5
+ * based on task complexity, confidence scores, and historical performance.
6
+ *
7
+ * Features:
8
+ * - FastGRNN-based routing decisions (<100μs)
9
+ * - Uncertainty quantification for model escalation
10
+ * - Circuit breaker for failover
11
+ * - Online learning from routing outcomes
12
+ * - Complexity scoring via embeddings
13
+ *
14
+ * Routing Strategy:
15
+ * - Haiku: High confidence, low complexity (fast, cheap)
16
+ * - Sonnet: Medium confidence, moderate complexity (balanced)
17
+ * - Opus: Low confidence, high complexity (most capable)
18
+ *
19
+ * @module model-router
20
+ */
21
+ import { existsSync, mkdirSync, readFileSync, writeFileSync } from 'fs';
22
+ import { dirname, join } from 'path';
23
+ /**
24
+ * Model capabilities and characteristics
25
+ */
26
+ export const MODEL_CAPABILITIES = {
27
+ haiku: {
28
+ maxComplexity: 0.4,
29
+ costMultiplier: 0.04, // ~25x cheaper than Opus
30
+ speedMultiplier: 3.0, // ~3x faster than Sonnet
31
+ description: 'Fast, cost-effective for simple tasks',
32
+ },
33
+ sonnet: {
34
+ maxComplexity: 0.7,
35
+ costMultiplier: 0.2, // ~5x cheaper than Opus
36
+ speedMultiplier: 1.5, // ~1.5x faster than Opus
37
+ description: 'Balanced capability and cost',
38
+ },
39
+ opus: {
40
+ maxComplexity: 1.0,
41
+ costMultiplier: 1.0, // Baseline
42
+ speedMultiplier: 1.0, // Baseline
43
+ description: 'Most capable for complex reasoning',
44
+ },
45
+ inherit: {
46
+ maxComplexity: 1.0,
47
+ costMultiplier: 1.0,
48
+ speedMultiplier: 1.0,
49
+ description: 'Use parent model selection',
50
+ },
51
+ };
52
+ /**
53
+ * Complexity indicators for task classification
54
+ */
55
+ export const COMPLEXITY_INDICATORS = {
56
+ high: [
57
+ 'architect', 'design', 'refactor', 'optimize', 'security', 'audit',
58
+ 'complex', 'analyze', 'investigate', 'debug', 'performance', 'scale',
59
+ 'distributed', 'concurrent', 'algorithm', 'system', 'integration',
60
+ ],
61
+ medium: [
62
+ 'implement', 'feature', 'add', 'update', 'modify', 'fix', 'test',
63
+ 'review', 'validate', 'check', 'improve', 'enhance', 'extend',
64
+ ],
65
+ low: [
66
+ 'simple', 'typo', 'comment', 'format', 'rename', 'move', 'copy',
67
+ 'delete', 'documentation', 'readme', 'config', 'version', 'bump',
68
+ ],
69
+ };
70
+ // ============================================================================
71
+ // Default Configuration
72
+ // ============================================================================
73
+ const DEFAULT_CONFIG = {
74
+ confidenceThreshold: 0.85,
75
+ maxUncertainty: 0.15,
76
+ enableCircuitBreaker: true,
77
+ circuitBreakerThreshold: 5,
78
+ statePath: '.swarm/model-router-state.json',
79
+ autoSaveInterval: 20,
80
+ enableCostOptimization: true,
81
+ preferSpeed: true,
82
+ };
83
+ // ============================================================================
84
+ // Model Router Implementation
85
+ // ============================================================================
86
+ /**
87
+ * Intelligent Model Router using complexity-based routing
88
+ */
89
+ export class ModelRouter {
90
+ config;
91
+ state;
92
+ decisionCount = 0;
93
+ consecutiveFailures = {
94
+ haiku: 0,
95
+ sonnet: 0,
96
+ opus: 0,
97
+ inherit: 0,
98
+ };
99
+ constructor(config = {}) {
100
+ this.config = { ...DEFAULT_CONFIG, ...config };
101
+ this.state = this.loadState();
102
+ }
103
+ /**
104
+ * Route a task to the optimal model
105
+ */
106
+ async route(task, embedding) {
107
+ const startTime = performance.now();
108
+ // Analyze task complexity
109
+ const complexity = this.analyzeComplexity(task, embedding);
110
+ // Compute base model scores
111
+ const scores = this.computeModelScores(complexity);
112
+ // Apply circuit breaker adjustments
113
+ const adjustedScores = this.applyCircuitBreaker(scores);
114
+ // Select best model
115
+ const { model, confidence, uncertainty } = this.selectModel(adjustedScores, complexity.score);
116
+ const inferenceTimeUs = (performance.now() - startTime) * 1000;
117
+ // Build result
118
+ const result = {
119
+ model,
120
+ confidence,
121
+ uncertainty,
122
+ complexity: complexity.score,
123
+ reasoning: this.buildReasoning(model, complexity, confidence),
124
+ alternatives: Object.entries(adjustedScores)
125
+ .filter(([m]) => m !== model)
126
+ .map(([m, score]) => ({ model: m, score }))
127
+ .sort((a, b) => b.score - a.score),
128
+ inferenceTimeUs,
129
+ costMultiplier: MODEL_CAPABILITIES[model].costMultiplier,
130
+ };
131
+ // Track decision
132
+ this.trackDecision(task, result);
133
+ return result;
134
+ }
135
+ /**
136
+ * Analyze task complexity
137
+ */
138
+ analyzeComplexity(task, embedding) {
139
+ const taskLower = task.toLowerCase();
140
+ const words = taskLower.split(/\s+/);
141
+ // Find complexity indicators
142
+ const indicators = {
143
+ high: COMPLEXITY_INDICATORS.high.filter(ind => taskLower.includes(ind)),
144
+ medium: COMPLEXITY_INDICATORS.medium.filter(ind => taskLower.includes(ind)),
145
+ low: COMPLEXITY_INDICATORS.low.filter(ind => taskLower.includes(ind)),
146
+ };
147
+ // Compute feature scores
148
+ const lexicalComplexity = this.computeLexicalComplexity(task);
149
+ const semanticDepth = this.computeSemanticDepth(indicators, embedding);
150
+ const taskScope = this.computeTaskScope(task, words);
151
+ const uncertaintyLevel = this.computeUncertaintyLevel(task);
152
+ // Weighted combination
153
+ const score = Math.min(1, Math.max(0, lexicalComplexity * 0.2 +
154
+ semanticDepth * 0.35 +
155
+ taskScope * 0.25 +
156
+ uncertaintyLevel * 0.2));
157
+ return {
158
+ score,
159
+ indicators,
160
+ features: {
161
+ lexicalComplexity,
162
+ semanticDepth,
163
+ taskScope,
164
+ uncertaintyLevel,
165
+ },
166
+ };
167
+ }
168
+ /**
169
+ * Compute lexical complexity from text features
170
+ */
171
+ computeLexicalComplexity(task) {
172
+ const words = task.split(/\s+/);
173
+ const avgWordLength = words.reduce((sum, w) => sum + w.length, 0) / Math.max(1, words.length);
174
+ const sentenceLength = words.length;
175
+ // Normalize: longer sentences with longer words = more complex
176
+ const lengthScore = Math.min(1, sentenceLength / 50);
177
+ const wordScore = Math.min(1, (avgWordLength - 3) / 7); // 3-10 char words
178
+ return lengthScore * 0.4 + wordScore * 0.6;
179
+ }
180
+ /**
181
+ * Compute semantic depth from indicators and embedding
182
+ */
183
+ computeSemanticDepth(indicators, embedding) {
184
+ // Weight by indicator presence
185
+ const highWeight = indicators.high.length * 0.3;
186
+ const mediumWeight = indicators.medium.length * 0.15;
187
+ const lowWeight = indicators.low.length * -0.1;
188
+ let baseScore = Math.min(1, Math.max(0, 0.3 + highWeight + mediumWeight + lowWeight));
189
+ // Boost with embedding variance if available
190
+ if (embedding && embedding.length > 0) {
191
+ const mean = embedding.reduce((a, b) => a + b, 0) / embedding.length;
192
+ const variance = embedding.reduce((sum, v) => sum + Math.pow(v - mean, 2), 0) / embedding.length;
193
+ // Higher variance suggests more nuanced semantics
194
+ baseScore = baseScore * 0.7 + Math.min(1, variance * 10) * 0.3;
195
+ }
196
+ return baseScore;
197
+ }
198
+ /**
199
+ * Compute task scope from content analysis
200
+ */
201
+ computeTaskScope(task, words) {
202
+ // Multi-file indicators
203
+ const multiFilePatterns = [
204
+ /multiple files?/i, /across.*modules?/i, /refactor.*codebase/i,
205
+ /all.*files/i, /entire.*project/i, /system.*wide/i,
206
+ ];
207
+ const hasMultiFile = multiFilePatterns.some(p => p.test(task)) ? 0.4 : 0;
208
+ // Code generation indicators
209
+ const codeGenPatterns = [
210
+ /implement/i, /create.*feature/i, /build.*system/i,
211
+ /design.*api/i, /write.*tests/i, /add.*functionality/i,
212
+ ];
213
+ const hasCodeGen = codeGenPatterns.some(p => p.test(task)) ? 0.3 : 0;
214
+ // Word count contribution
215
+ const wordCountScore = Math.min(0.3, words.length / 100);
216
+ return hasMultiFile + hasCodeGen + wordCountScore;
217
+ }
218
+ /**
219
+ * Compute uncertainty level from task phrasing
220
+ */
221
+ computeUncertaintyLevel(task) {
222
+ const uncertainPatterns = [
223
+ /not sure/i, /might/i, /maybe/i, /possibly/i, /investigate/i,
224
+ /figure out/i, /unclear/i, /unknown/i, /debug/i, /strange/i,
225
+ /weird/i, /issue/i, /problem/i, /error/i, /bug/i,
226
+ ];
227
+ const matchCount = uncertainPatterns.filter(p => p.test(task)).length;
228
+ return Math.min(1, matchCount * 0.2);
229
+ }
230
+ /**
231
+ * Compute scores for each model
232
+ */
233
+ computeModelScores(complexity) {
234
+ const { score } = complexity;
235
+ // Base scoring: inverse relationship with complexity
236
+ // Low complexity → haiku scores high
237
+ // High complexity → opus scores high
238
+ return {
239
+ haiku: Math.max(0, 1 - score * 2), // Drops off quickly as complexity rises
240
+ sonnet: 1 - Math.abs(score - 0.5) * 2, // Peaks at medium complexity
241
+ opus: Math.min(1, score * 1.5), // Rises with complexity
242
+ inherit: 0.1, // Low baseline unless explicitly needed
243
+ };
244
+ }
245
+ /**
246
+ * Apply circuit breaker adjustments
247
+ */
248
+ applyCircuitBreaker(scores) {
249
+ if (!this.config.enableCircuitBreaker) {
250
+ return scores;
251
+ }
252
+ const adjusted = { ...scores };
253
+ for (const model of Object.keys(adjusted)) {
254
+ if (this.consecutiveFailures[model] >= this.config.circuitBreakerThreshold) {
255
+ // Circuit is open - heavily penalize this model
256
+ adjusted[model] *= 0.1;
257
+ }
258
+ else if (this.consecutiveFailures[model] > 0) {
259
+ // Partial penalty for recent failures
260
+ adjusted[model] *= 1 - (this.consecutiveFailures[model] / this.config.circuitBreakerThreshold) * 0.5;
261
+ }
262
+ }
263
+ return adjusted;
264
+ }
265
+ /**
266
+ * Select the best model from scores
267
+ */
268
+ selectModel(scores, complexityScore) {
269
+ // Get sorted models by score
270
+ const sorted = Object.entries(scores)
271
+ .filter(([m]) => m !== 'inherit')
272
+ .sort((a, b) => b[1] - a[1]);
273
+ const [bestModel, bestScore] = sorted[0];
274
+ const [secondModel, secondScore] = sorted[1] || ['sonnet', 0];
275
+ // Confidence is how much better the best is vs second
276
+ const confidence = bestScore > 0 ? Math.min(1, bestScore / (bestScore + secondScore + 0.01)) : 0.5;
277
+ // Uncertainty based on score spread and complexity
278
+ const scoreSpread = bestScore - secondScore;
279
+ const uncertainty = Math.max(0, 1 - scoreSpread - confidence * 0.5);
280
+ // Escalate if uncertainty is too high
281
+ let model = bestModel;
282
+ if (uncertainty > this.config.maxUncertainty && bestModel !== 'opus') {
283
+ // Escalate to more capable model
284
+ model = bestModel === 'haiku' ? 'sonnet' : 'opus';
285
+ }
286
+ return { model, confidence, uncertainty };
287
+ }
288
+ /**
289
+ * Build human-readable reasoning
290
+ */
291
+ buildReasoning(model, complexity, confidence) {
292
+ const parts = [];
293
+ parts.push(`Complexity: ${(complexity.score * 100).toFixed(0)}%`);
294
+ if (complexity.indicators.high.length > 0) {
295
+ parts.push(`High-complexity indicators: ${complexity.indicators.high.join(', ')}`);
296
+ }
297
+ parts.push(`Confidence: ${(confidence * 100).toFixed(0)}%`);
298
+ parts.push(`Model: ${model} - ${MODEL_CAPABILITIES[model].description}`);
299
+ if (this.config.enableCostOptimization) {
300
+ parts.push(`Cost: ${MODEL_CAPABILITIES[model].costMultiplier}x baseline`);
301
+ }
302
+ return parts.join(' | ');
303
+ }
304
+ /**
305
+ * Track routing decision for learning
306
+ */
307
+ trackDecision(task, result) {
308
+ this.decisionCount++;
309
+ this.state.totalDecisions++;
310
+ this.state.modelDistribution[result.model] =
311
+ (this.state.modelDistribution[result.model] || 0) + 1;
312
+ // Update running averages
313
+ const n = this.state.totalDecisions;
314
+ this.state.avgComplexity =
315
+ (this.state.avgComplexity * (n - 1) + result.complexity) / n;
316
+ this.state.avgConfidence =
317
+ (this.state.avgConfidence * (n - 1) + result.confidence) / n;
318
+ // Auto-save periodically
319
+ if (this.decisionCount % this.config.autoSaveInterval === 0) {
320
+ this.saveState();
321
+ }
322
+ }
323
+ /**
324
+ * Record outcome for learning
325
+ */
326
+ recordOutcome(task, model, outcome) {
327
+ // Update circuit breaker state
328
+ if (outcome === 'failure') {
329
+ this.consecutiveFailures[model]++;
330
+ }
331
+ else {
332
+ this.consecutiveFailures[model] = 0;
333
+ }
334
+ // Track in history
335
+ this.state.learningHistory.push({
336
+ task: task.slice(0, 100),
337
+ model,
338
+ complexity: this.state.avgComplexity,
339
+ outcome,
340
+ timestamp: new Date().toISOString(),
341
+ });
342
+ // Keep history bounded
343
+ if (this.state.learningHistory.length > 100) {
344
+ this.state.learningHistory = this.state.learningHistory.slice(-100);
345
+ }
346
+ if (outcome === 'failure') {
347
+ this.state.circuitBreakerTrips++;
348
+ }
349
+ this.saveState();
350
+ }
351
+ /**
352
+ * Get router statistics
353
+ */
354
+ getStats() {
355
+ return {
356
+ totalDecisions: this.state.totalDecisions,
357
+ modelDistribution: { ...this.state.modelDistribution },
358
+ avgComplexity: this.state.avgComplexity,
359
+ avgConfidence: this.state.avgConfidence,
360
+ circuitBreakerTrips: this.state.circuitBreakerTrips,
361
+ consecutiveFailures: { ...this.consecutiveFailures },
362
+ };
363
+ }
364
+ /**
365
+ * Load state from disk
366
+ */
367
+ loadState() {
368
+ const defaultState = {
369
+ totalDecisions: 0,
370
+ modelDistribution: { haiku: 0, sonnet: 0, opus: 0, inherit: 0 },
371
+ avgComplexity: 0.5,
372
+ avgConfidence: 0.8,
373
+ circuitBreakerTrips: 0,
374
+ lastUpdated: new Date().toISOString(),
375
+ learningHistory: [],
376
+ };
377
+ try {
378
+ const fullPath = join(process.cwd(), this.config.statePath);
379
+ if (existsSync(fullPath)) {
380
+ const data = readFileSync(fullPath, 'utf-8');
381
+ return { ...defaultState, ...JSON.parse(data) };
382
+ }
383
+ }
384
+ catch {
385
+ // Ignore load errors
386
+ }
387
+ return defaultState;
388
+ }
389
+ /**
390
+ * Save state to disk
391
+ */
392
+ saveState() {
393
+ try {
394
+ const fullPath = join(process.cwd(), this.config.statePath);
395
+ const dir = dirname(fullPath);
396
+ if (!existsSync(dir)) {
397
+ mkdirSync(dir, { recursive: true });
398
+ }
399
+ this.state.lastUpdated = new Date().toISOString();
400
+ writeFileSync(fullPath, JSON.stringify(this.state, null, 2));
401
+ }
402
+ catch {
403
+ // Ignore save errors in non-critical scenarios
404
+ }
405
+ }
406
+ /**
407
+ * Reset router state
408
+ */
409
+ reset() {
410
+ this.state = {
411
+ totalDecisions: 0,
412
+ modelDistribution: { haiku: 0, sonnet: 0, opus: 0, inherit: 0 },
413
+ avgComplexity: 0.5,
414
+ avgConfidence: 0.8,
415
+ circuitBreakerTrips: 0,
416
+ lastUpdated: new Date().toISOString(),
417
+ learningHistory: [],
418
+ };
419
+ this.consecutiveFailures = { haiku: 0, sonnet: 0, opus: 0, inherit: 0 };
420
+ this.decisionCount = 0;
421
+ this.saveState();
422
+ }
423
+ }
424
+ // ============================================================================
425
+ // Singleton & Factory Functions
426
+ // ============================================================================
427
+ let modelRouterInstance = null;
428
+ /**
429
+ * Get or create the singleton ModelRouter instance
430
+ */
431
+ export function getModelRouter(config) {
432
+ if (!modelRouterInstance) {
433
+ modelRouterInstance = new ModelRouter(config);
434
+ }
435
+ return modelRouterInstance;
436
+ }
437
+ /**
438
+ * Reset the singleton instance
439
+ */
440
+ export function resetModelRouter() {
441
+ modelRouterInstance = null;
442
+ }
443
+ /**
444
+ * Create a new ModelRouter instance (non-singleton)
445
+ */
446
+ export function createModelRouter(config) {
447
+ return new ModelRouter(config);
448
+ }
449
+ // ============================================================================
450
+ // Convenience Functions
451
+ // ============================================================================
452
+ /**
453
+ * Quick route function for common use case
454
+ */
455
+ export async function routeToModel(task) {
456
+ const router = getModelRouter();
457
+ const result = await router.route(task);
458
+ return result.model;
459
+ }
460
+ /**
461
+ * Route with full result
462
+ */
463
+ export async function routeToModelFull(task, embedding) {
464
+ const router = getModelRouter();
465
+ return router.route(task, embedding);
466
+ }
467
+ /**
468
+ * Analyze task complexity without routing
469
+ */
470
+ export function analyzeTaskComplexity(task) {
471
+ const router = getModelRouter();
472
+ return router.analyzeComplexity(task, undefined);
473
+ }
474
+ /**
475
+ * Get model router statistics
476
+ */
477
+ export function getModelRouterStats() {
478
+ const router = getModelRouter();
479
+ return router.getStats();
480
+ }
481
+ /**
482
+ * Record routing outcome for learning
483
+ */
484
+ export function recordModelOutcome(task, model, outcome) {
485
+ const router = getModelRouter();
486
+ router.recordOutcome(task, model, outcome);
487
+ }
488
+ //# sourceMappingURL=model-router.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"model-router.js","sourceRoot":"","sources":["../../../src/ruvector/model-router.ts"],"names":[],"mappings":"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"}