universal-agent-memory 1.0.17 → 1.0.18

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,344 @@
1
+ /**
2
+ * Model Router
3
+ *
4
+ * Routes tasks to appropriate models based on:
5
+ * - Task complexity and type
6
+ * - Routing rules configuration
7
+ * - Cost optimization strategy
8
+ * - Available model capabilities
9
+ */
10
+ import { ModelPresets, DEFAULT_ROUTING_RULES, } from './types.js';
11
+ // Complexity keywords for classification
12
+ const COMPLEXITY_KEYWORDS = {
13
+ critical: [
14
+ 'security', 'authentication', 'authorization', 'deployment', 'migration',
15
+ 'production', 'database', 'encryption', 'credentials', 'secrets',
16
+ ],
17
+ high: [
18
+ 'architecture', 'design', 'refactor', 'performance', 'optimization',
19
+ 'algorithm', 'distributed', 'concurrent', 'multi-step', 'complex',
20
+ ],
21
+ medium: [
22
+ 'feature', 'implement', 'add', 'create', 'update', 'modify',
23
+ 'integrate', 'connect', 'api', 'endpoint',
24
+ ],
25
+ low: [
26
+ 'fix', 'typo', 'comment', 'rename', 'format', 'style',
27
+ 'simple', 'minor', 'small', 'quick', 'documentation',
28
+ ],
29
+ };
30
+ // Task type keywords
31
+ const TASK_TYPE_KEYWORDS = {
32
+ planning: ['plan', 'design', 'architect', 'strategy', 'approach', 'how to'],
33
+ coding: ['implement', 'code', 'write', 'create', 'build', 'develop'],
34
+ refactoring: ['refactor', 'restructure', 'reorganize', 'clean', 'improve'],
35
+ 'bug-fix': ['fix', 'bug', 'error', 'issue', 'broken', 'not working', 'fails'],
36
+ review: ['review', 'check', 'audit', 'analyze', 'evaluate', 'assess'],
37
+ documentation: ['document', 'docs', 'readme', 'comment', 'explain', 'describe'],
38
+ };
39
+ /**
40
+ * Model Router - routes tasks to appropriate models
41
+ */
42
+ export class ModelRouter {
43
+ config;
44
+ models;
45
+ routingRules;
46
+ roleAssignments;
47
+ constructor(config) {
48
+ this.config = config;
49
+ this.models = new Map();
50
+ this.roleAssignments = new Map();
51
+ // Initialize models from config
52
+ this.initializeModels();
53
+ // Initialize routing rules
54
+ this.routingRules = config.routing || DEFAULT_ROUTING_RULES;
55
+ this.routingRules.sort((a, b) => (b.priority || 0) - (a.priority || 0));
56
+ // Initialize role assignments
57
+ this.initializeRoles();
58
+ }
59
+ initializeModels() {
60
+ for (const modelDef of this.config.models) {
61
+ if (typeof modelDef === 'string') {
62
+ // It's a preset ID
63
+ const preset = ModelPresets[modelDef];
64
+ if (preset) {
65
+ this.models.set(modelDef, preset);
66
+ }
67
+ }
68
+ else {
69
+ // It's a custom config
70
+ this.models.set(modelDef.id, modelDef);
71
+ }
72
+ }
73
+ // Ensure we have at least the default models
74
+ if (this.models.size === 0) {
75
+ const defaultModel = ModelPresets['opus-4.5'];
76
+ if (defaultModel) {
77
+ this.models.set('opus-4.5', defaultModel);
78
+ }
79
+ }
80
+ }
81
+ initializeRoles() {
82
+ const roles = this.config.roles || {
83
+ planner: 'opus-4.5',
84
+ executor: 'glm-4.7',
85
+ fallback: 'opus-4.5',
86
+ };
87
+ this.roleAssignments.set('planner', roles.planner || 'opus-4.5');
88
+ this.roleAssignments.set('executor', roles.executor || 'glm-4.7');
89
+ this.roleAssignments.set('reviewer', roles.reviewer || roles.planner || 'opus-4.5');
90
+ this.roleAssignments.set('fallback', roles.fallback || 'opus-4.5');
91
+ }
92
+ /**
93
+ * Classify a task to determine complexity and type
94
+ */
95
+ classifyTask(taskDescription) {
96
+ const lowerTask = taskDescription.toLowerCase();
97
+ const words = lowerTask.split(/\s+/);
98
+ // Detect complexity
99
+ let complexity = 'medium';
100
+ let maxComplexityScore = 0;
101
+ for (const [level, keywords] of Object.entries(COMPLEXITY_KEYWORDS)) {
102
+ const score = keywords.filter(kw => lowerTask.includes(kw)).length;
103
+ if (score > maxComplexityScore) {
104
+ maxComplexityScore = score;
105
+ complexity = level;
106
+ }
107
+ }
108
+ // Detect task type
109
+ let taskType = 'coding';
110
+ let maxTypeScore = 0;
111
+ for (const [type, keywords] of Object.entries(TASK_TYPE_KEYWORDS)) {
112
+ const score = keywords.filter(kw => lowerTask.includes(kw)).length;
113
+ if (score > maxTypeScore) {
114
+ maxTypeScore = score;
115
+ taskType = type;
116
+ }
117
+ }
118
+ // Extract matched keywords
119
+ const matchedKeywords = [];
120
+ for (const keywords of Object.values(COMPLEXITY_KEYWORDS)) {
121
+ matchedKeywords.push(...keywords.filter(kw => lowerTask.includes(kw)));
122
+ }
123
+ for (const keywords of Object.values(TASK_TYPE_KEYWORDS)) {
124
+ matchedKeywords.push(...keywords.filter(kw => lowerTask.includes(kw)));
125
+ }
126
+ // Estimate tokens (rough heuristic)
127
+ const estimatedTokens = Math.ceil(words.length * 1.3);
128
+ // Determine if planning is required
129
+ const complexityThreshold = this.config.plannerSettings?.complexityThreshold || 'medium';
130
+ const thresholdMap = {
131
+ low: 1,
132
+ medium: 2,
133
+ high: 3,
134
+ critical: 4,
135
+ };
136
+ const requiresPlanning = thresholdMap[complexity] >= thresholdMap[complexityThreshold] ||
137
+ taskType === 'planning';
138
+ // Select model based on routing
139
+ const selection = this.selectModel(complexity, taskType, matchedKeywords);
140
+ return {
141
+ complexity,
142
+ taskType,
143
+ keywords: [...new Set(matchedKeywords)],
144
+ estimatedTokens,
145
+ requiresPlanning,
146
+ suggestedModel: selection.model.id,
147
+ fallbackModel: selection.fallback?.id || this.roleAssignments.get('fallback') || 'opus-4.5',
148
+ reasoning: selection.reasoning,
149
+ };
150
+ }
151
+ /**
152
+ * Select the appropriate model for a task
153
+ */
154
+ selectModel(complexity, taskType, keywords) {
155
+ // Find matching routing rule
156
+ for (const rule of this.routingRules) {
157
+ let matches = true;
158
+ if (rule.complexity && rule.complexity !== complexity) {
159
+ matches = false;
160
+ }
161
+ if (rule.taskType && rule.taskType !== taskType) {
162
+ matches = false;
163
+ }
164
+ if (rule.keywords && rule.keywords.length > 0) {
165
+ const hasKeyword = rule.keywords.some(kw => keywords.some(k => k.includes(kw) || kw.includes(k)));
166
+ if (!hasKeyword) {
167
+ matches = false;
168
+ }
169
+ }
170
+ if (matches) {
171
+ const role = rule.targetRole;
172
+ const modelId = this.roleAssignments.get(role);
173
+ const model = modelId ? this.models.get(modelId) : undefined;
174
+ if (model) {
175
+ const fallbackId = this.roleAssignments.get('fallback');
176
+ const fallback = fallbackId ? this.models.get(fallbackId) : undefined;
177
+ return {
178
+ model,
179
+ fallback: fallback !== model ? fallback : undefined,
180
+ role,
181
+ reasoning: this.buildReasoning(rule, complexity, taskType, keywords),
182
+ estimatedCost: this.estimateCost(model, 10000, 5000),
183
+ };
184
+ }
185
+ }
186
+ }
187
+ // Default to executor
188
+ const executorId = this.roleAssignments.get('executor') || 'glm-4.7';
189
+ const defaultExecutor = ModelPresets['glm-4.7'];
190
+ const executor = this.models.get(executorId) || defaultExecutor;
191
+ const fallbackId = this.roleAssignments.get('fallback');
192
+ const fallback = fallbackId ? this.models.get(fallbackId) : undefined;
193
+ if (!executor) {
194
+ throw new Error('No executor model available');
195
+ }
196
+ return {
197
+ model: executor,
198
+ fallback,
199
+ role: 'executor',
200
+ reasoning: `Default routing to executor (${executor.name}) - no specific rule matched`,
201
+ estimatedCost: this.estimateCost(executor, 10000, 5000),
202
+ };
203
+ }
204
+ buildReasoning(rule, complexity, taskType, keywords) {
205
+ const parts = [];
206
+ if (rule.complexity) {
207
+ parts.push(`complexity=${complexity}`);
208
+ }
209
+ if (rule.taskType) {
210
+ parts.push(`type=${taskType}`);
211
+ }
212
+ if (rule.keywords && rule.keywords.length > 0) {
213
+ const matched = rule.keywords.filter(kw => keywords.some(k => k.includes(kw)));
214
+ if (matched.length > 0) {
215
+ parts.push(`keywords=[${matched.join(',')}]`);
216
+ }
217
+ }
218
+ return `Matched rule (priority=${rule.priority}): ${parts.join(', ')} → ${rule.targetRole}`;
219
+ }
220
+ /**
221
+ * Estimate cost for a model invocation
222
+ */
223
+ estimateCost(model, inputTokens, outputTokens) {
224
+ const inputCost = (model.costPer1MInput || 0) * (inputTokens / 1_000_000);
225
+ const outputCost = (model.costPer1MOutput || 0) * (outputTokens / 1_000_000);
226
+ return inputCost + outputCost;
227
+ }
228
+ /**
229
+ * Get model by ID
230
+ */
231
+ getModel(modelId) {
232
+ return this.models.get(modelId);
233
+ }
234
+ /**
235
+ * Get model for a specific role
236
+ */
237
+ getModelForRole(role) {
238
+ const modelId = this.roleAssignments.get(role);
239
+ return modelId ? this.models.get(modelId) : undefined;
240
+ }
241
+ /**
242
+ * Get all configured models
243
+ */
244
+ getAllModels() {
245
+ return Array.from(this.models.values());
246
+ }
247
+ /**
248
+ * Get routing analysis for debugging
249
+ */
250
+ analyzeRouting(taskDescription) {
251
+ const classification = this.classifyTask(taskDescription);
252
+ const matchedRules = this.routingRules.map(rule => {
253
+ let matched = true;
254
+ const reasons = [];
255
+ if (rule.complexity) {
256
+ if (rule.complexity !== classification.complexity) {
257
+ matched = false;
258
+ reasons.push(`complexity ${classification.complexity} != ${rule.complexity}`);
259
+ }
260
+ else {
261
+ reasons.push(`complexity matches ${rule.complexity}`);
262
+ }
263
+ }
264
+ if (rule.taskType) {
265
+ if (rule.taskType !== classification.taskType) {
266
+ matched = false;
267
+ reasons.push(`type ${classification.taskType} != ${rule.taskType}`);
268
+ }
269
+ else {
270
+ reasons.push(`type matches ${rule.taskType}`);
271
+ }
272
+ }
273
+ if (rule.keywords && rule.keywords.length > 0) {
274
+ const hasKeyword = rule.keywords.some(kw => classification.keywords.some(k => k.includes(kw)));
275
+ if (!hasKeyword) {
276
+ matched = false;
277
+ reasons.push(`no keyword match for [${rule.keywords.join(',')}]`);
278
+ }
279
+ else {
280
+ reasons.push(`keyword matches`);
281
+ }
282
+ }
283
+ return {
284
+ rule,
285
+ matched,
286
+ reason: reasons.join('; '),
287
+ };
288
+ });
289
+ const costComparison = Array.from(this.models.values()).map(model => ({
290
+ model: model.name,
291
+ cost: this.estimateCost(model, classification.estimatedTokens * 10, classification.estimatedTokens * 5),
292
+ })).sort((a, b) => a.cost - b.cost);
293
+ return {
294
+ classification,
295
+ matchedRules,
296
+ costComparison,
297
+ };
298
+ }
299
+ }
300
+ /**
301
+ * Create a router instance from config
302
+ */
303
+ export function createRouter(config) {
304
+ return new ModelRouter(config);
305
+ }
306
+ /**
307
+ * Default router with cost-optimized settings
308
+ */
309
+ export function createCostOptimizedRouter() {
310
+ return new ModelRouter({
311
+ enabled: true,
312
+ models: ['deepseek-v3.2', 'glm-4.7', 'opus-4.5'],
313
+ roles: {
314
+ planner: 'deepseek-v3.2',
315
+ executor: 'glm-4.7',
316
+ reviewer: 'deepseek-v3.2',
317
+ fallback: 'opus-4.5',
318
+ },
319
+ routingStrategy: 'cost-optimized',
320
+ costOptimization: {
321
+ enabled: true,
322
+ targetReduction: 90,
323
+ maxPerformanceDegradation: 20,
324
+ fallbackThreshold: 3,
325
+ },
326
+ });
327
+ }
328
+ /**
329
+ * Default router with performance-first settings
330
+ */
331
+ export function createPerformanceRouter() {
332
+ return new ModelRouter({
333
+ enabled: true,
334
+ models: ['opus-4.5', 'gpt-5.2'],
335
+ roles: {
336
+ planner: 'opus-4.5',
337
+ executor: 'opus-4.5',
338
+ reviewer: 'opus-4.5',
339
+ fallback: 'opus-4.5',
340
+ },
341
+ routingStrategy: 'performance-first',
342
+ });
343
+ }
344
+ //# sourceMappingURL=router.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"router.js","sourceRoot":"","sources":["../../src/models/router.ts"],"names":[],"mappings":"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"}