@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.
- package/dist/src/mcp-tools/hooks-tools.d.ts +3 -0
- package/dist/src/mcp-tools/hooks-tools.d.ts.map +1 -1
- package/dist/src/mcp-tools/hooks-tools.js +126 -0
- package/dist/src/mcp-tools/hooks-tools.js.map +1 -1
- package/dist/src/ruvector/index.d.ts +1 -0
- package/dist/src/ruvector/index.d.ts.map +1 -1
- package/dist/src/ruvector/index.js +1 -0
- package/dist/src/ruvector/index.js.map +1 -1
- package/dist/src/ruvector/model-router.d.ts +220 -0
- package/dist/src/ruvector/model-router.d.ts.map +1 -0
- package/dist/src/ruvector/model-router.js +488 -0
- package/dist/src/ruvector/model-router.js.map +1 -0
- package/dist/tsconfig.tsbuildinfo +1 -1
- package/package.json +1 -1
|
@@ -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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"}
|