adaptive-memory-multi-model-router 2.14.40 → 2.14.41

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.
@@ -13,7 +13,7 @@
13
13
  * Expression: gtex, human_protein_atlas
14
14
  */
15
15
  Object.defineProperty(exports, "__esModule", { value: true });
16
- exports.scienceTools = void 0;
16
+ exports.scienceTools = exports.RESEARCH_TEMPLATES = void 0;
17
17
  exports.routeScienceQuery = routeScienceQuery;
18
18
  exports.executeScienceQuery = executeScienceQuery;
19
19
  exports.isScienceQuery = isScienceQuery;
@@ -29,13 +29,13 @@ const DOMAIN_SKILLS = {
29
29
  expression: ['gtex_database', 'human_protein_atlas_database'],
30
30
  };
31
31
  // Pre-built research prompts for common science queries
32
- const RESEARCH_TEMPLATES = {
32
+ exports.RESEARCH_TEMPLATES = {
33
33
  protein_structure: 'What is the 3D structure of {protein}? Show the AlphaFold prediction.',
34
34
  gene_function: 'What is the biological function of the {gene} gene in {species}?',
35
35
  disease_genes: 'What genes are associated with {disease}? List with relevance scores.',
36
36
  drug_interactions: 'What drugs interact with target {protein}? Include binding affinities.',
37
37
  pathway_analysis: 'What biological pathways involve {gene}? Show interactions.',
38
- variant, pathogenicity: 'What is the pathogenicity of variant {variant} in {gene}?',
38
+ 'variant_pathogenicity': 'What is the pathogenicity of variant {variant} in {gene}?',
39
39
  expression_levels: 'What is the expression pattern of {gene} in {tissue}?',
40
40
  literature_review: 'Summarize recent literature on {topic}. Include key findings.',
41
41
  };
@@ -92,13 +92,13 @@ function buildSciencePrompt(query, skill) {
92
92
  const { domain, query: question, protein, gene, species, disease } = query;
93
93
  // Template-based prompts for structured research
94
94
  if (protein && question.toLowerCase().includes('structure')) {
95
- return RESEARCH_TEMPLATES.protein_structure.replace('{protein}', protein);
95
+ return exports.RESEARCH_TEMPLATES.protein_structure.replace('{protein}', protein);
96
96
  }
97
97
  if (gene && species) {
98
- return RESEARCH_TEMPLATES.gene_function.replace('{gene}', gene).replace('{species}', species);
98
+ return exports.RESEARCH_TEMPLATES.gene_function.replace('{gene}', gene).replace('{species}', species);
99
99
  }
100
100
  if (disease) {
101
- return RESEARCH_TEMPLATES.disease_genes.replace('{disease}', disease);
101
+ return exports.RESEARCH_TEMPLATES.disease_genes.replace('{disease}', disease);
102
102
  }
103
103
  // Fallback: construct prompt from query components
104
104
  const components = [question];
@@ -174,5 +174,6 @@ exports.default = {
174
174
  isScienceQuery,
175
175
  detectScienceDomain,
176
176
  scienceTools: exports.scienceTools,
177
- RESEARCH_TEMPLATES,
177
+ RESEARCH_TEMPLATES: exports.RESEARCH_TEMPLATES,
178
178
  };
179
+ //# sourceMappingURL=scienceAdapter.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"scienceAdapter.js","sourceRoot":"","sources":["../../src/integrations/scienceAdapter.ts"],"names":[],"mappings":"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"}
@@ -176,3 +176,4 @@ screen.append(box);
176
176
  render();
177
177
  prompt.focus();
178
178
  screen.render();
179
+ //# sourceMappingURL=dashboard.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"dashboard.js","sourceRoot":"","sources":["../../src/tui/dashboard.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"dashboard.js","sourceRoot":"","sources":["../../src/tui/dashboard.ts"],"names":[],"mappings":"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"}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "adaptive-memory-multi-model-router",
3
- "version": "2.14.40",
3
+ "version": "2.14.41",
4
4
  "shortName": "A3M Router",
5
5
  "displayName": "A3M Router - Adaptive Memory Multi-Model Router",
6
6
  "description": "🥇 Cheapest LLM router on RouterArena ($0.05/1K) · 15K+ downloads in 2 weeks · Open-source AI gateway with parallel multi-LLM execution across 47+ providers, ensemble voting, semantic cache, and budget enforcement",
@@ -0,0 +1,374 @@
1
+ /**
2
+ * Multi-Round Dialog Optimization
3
+ *
4
+ * Tracks conversation context over multiple turns and optimizes routing
5
+ * decisions based on accumulated dialogue history.
6
+ *
7
+ * Key features:
8
+ * - Conversation state management
9
+ * - Topic tracking across turns
10
+ * - Model performance history per topic
11
+ * - Adaptive routing based on dialog state
12
+ */
13
+
14
+ import { RouteDecision } from '../routing/advancedRouter';
15
+
16
+ export interface DialogTurn {
17
+ turn: number;
18
+ role: 'user' | 'assistant' | 'system';
19
+ content: string;
20
+ model?: string;
21
+ timestamp: number;
22
+ routingDecision?: RouteDecision;
23
+ }
24
+
25
+ export interface DialogState {
26
+ conversationId: string;
27
+ turns: DialogTurn[];
28
+ topics: Set<string>;
29
+ topicHistory: Map<string, number>; // topic → number of mentions
30
+ modelPerformance: Map<string, Map<string, number>>; // model → topic → success score
31
+ currentTopic: string;
32
+ sentiment: 'positive' | 'negative' | 'neutral';
33
+ complexity: number;
34
+ startedAt: number;
35
+ lastTurnAt: number;
36
+ }
37
+
38
+ export interface MultiRoundConfig {
39
+ /** Max turns to keep in conversation context */
40
+ maxContextTurns: number;
41
+ /** Topic similarity threshold */
42
+ topicThreshold: number;
43
+ /** Performance window size */
44
+ performanceWindow: number;
45
+ /** Enable adaptive complexity tracking */
46
+ trackComplexity: boolean;
47
+ }
48
+
49
+ const DEFAULT_CONFIG: MultiRoundConfig = {
50
+ maxContextTurns: 20,
51
+ topicThreshold: 0.7,
52
+ performanceWindow: 10,
53
+ trackComplexity: true,
54
+ };
55
+
56
+ export class MultiRoundDialogOptimizer {
57
+ private config: MultiRoundConfig;
58
+ private dialogStates: Map<string, DialogState> = new Map();
59
+
60
+ constructor(config: Partial<MultiRoundConfig> = {}) {
61
+ this.config = { ...DEFAULT_CONFIG, ...config };
62
+ }
63
+
64
+ /**
65
+ * Create or get existing dialog state
66
+ */
67
+ getDialogState(conversationId: string): DialogState {
68
+ if (!this.dialogStates.has(conversationId)) {
69
+ this.dialogStates.set(conversationId, this.createNewState(conversationId));
70
+ }
71
+ return this.dialogStates.get(conversationId)!;
72
+ }
73
+
74
+ /**
75
+ * Create a fresh dialog state
76
+ */
77
+ private createNewState(conversationId: string): DialogState {
78
+ return {
79
+ conversationId,
80
+ turns: [],
81
+ topics: new Set(),
82
+ topicHistory: new Map(),
83
+ modelPerformance: new Map(),
84
+ currentTopic: 'general',
85
+ sentiment: 'neutral',
86
+ complexity: 0,
87
+ startedAt: Date.now(),
88
+ lastTurnAt: Date.now(),
89
+ };
90
+ }
91
+
92
+ /**
93
+ * Add a turn to the conversation
94
+ */
95
+ addTurn(
96
+ conversationId: string,
97
+ role: 'user' | 'assistant' | 'system',
98
+ content: string,
99
+ model?: string,
100
+ routingDecision?: RouteDecision
101
+ ): DialogState {
102
+ const state = this.getDialogState(conversationId);
103
+
104
+ const turn: DialogTurn = {
105
+ turn: state.turns.length,
106
+ role,
107
+ content,
108
+ model,
109
+ timestamp: Date.now(),
110
+ routingDecision,
111
+ };
112
+
113
+ state.turns.push(turn);
114
+ state.lastTurnAt = Date.now();
115
+
116
+ // Update topic tracking
117
+ const topics = this.extractTopics(content);
118
+ topics.forEach(topic => {
119
+ state.topics.add(topic);
120
+ const count = state.topicHistory.get(topic) || 0;
121
+ state.topicHistory.set(topic, count + 1);
122
+ });
123
+
124
+ // Update current topic to most mentioned
125
+ if (topics.length > 0) {
126
+ state.currentTopic = this.getMostFrequentTopic(state.topicHistory);
127
+ }
128
+
129
+ // Update complexity
130
+ if (this.config.trackComplexity) {
131
+ state.complexity = this.calculateComplexity(content, state.turns);
132
+ }
133
+
134
+ // Update model performance if assistant turn with routing decision
135
+ if (role === 'assistant' && model && routingDecision) {
136
+ this.updateModelPerformance(state, model, content);
137
+ }
138
+
139
+ // Trim old turns if exceeding max
140
+ if (state.turns.length > this.config.maxContextTurns) {
141
+ state.turns = state.turns.slice(-this.config.maxContextTurns);
142
+ }
143
+
144
+ return state;
145
+ }
146
+
147
+ /**
148
+ * Extract topics from content using keyword analysis
149
+ */
150
+ private extractTopics(content: string): string[] {
151
+ const topics: string[] = [];
152
+ const lower = content.toLowerCase();
153
+
154
+ // Topic keywords
155
+ const topicPatterns: Record<string, string[]> = {
156
+ 'coding': ['code', 'programming', 'function', 'debug', 'syntax', 'api', 'software'],
157
+ 'data-science': ['data', 'analysis', 'ml', 'machine learning', 'model', 'training', 'dataset'],
158
+ 'math': ['equation', 'calculation', 'math', 'number', 'formula', 'algebra'],
159
+ 'science': ['experiment', 'hypothesis', 'research', 'physics', 'chemistry', 'biology'],
160
+ 'business': ['revenue', 'market', 'customer', 'sales', 'strategy', 'business'],
161
+ 'creative': ['story', 'creative', 'writing', 'art', 'design', 'poem'],
162
+ 'security': ['security', 'authentication', 'encryption', 'vulnerability', 'auth'],
163
+ 'devops': ['deploy', 'docker', 'kubernetes', 'ci/cd', 'infrastructure', 'cloud'],
164
+ };
165
+
166
+ for (const [topic, keywords] of Object.entries(topicPatterns)) {
167
+ for (const keyword of keywords) {
168
+ if (lower.includes(keyword)) {
169
+ topics.push(topic);
170
+ break;
171
+ }
172
+ }
173
+ }
174
+
175
+ return topics.length > 0 ? topics : ['general'];
176
+ }
177
+
178
+ /**
179
+ * Get most frequently mentioned topic
180
+ */
181
+ private getMostFrequentTopic(topicHistory: Map<string, number>): string {
182
+ let maxCount = 0;
183
+ let mostFrequent = 'general';
184
+
185
+ for (const [topic, count] of topicHistory) {
186
+ if (count > maxCount) {
187
+ maxCount = count;
188
+ mostFrequent = topic;
189
+ }
190
+ }
191
+
192
+ return mostFrequent;
193
+ }
194
+
195
+ /**
196
+ * Calculate complexity based on content and history
197
+ */
198
+ private calculateComplexity(content: string, turns: DialogTurn[]): number {
199
+ // Base complexity from content length
200
+ let complexity = Math.min(1, content.length / 1000);
201
+
202
+ // Increase for technical terms
203
+ const technicalTerms = ['algorithm', 'architecture', 'optimization', 'performance', 'concurrent', 'distributed'];
204
+ for (const term of technicalTerms) {
205
+ if (content.toLowerCase().includes(term)) {
206
+ complexity += 0.1;
207
+ }
208
+ }
209
+
210
+ // Increase with conversation depth
211
+ complexity += Math.min(0.3, turns.length * 0.02);
212
+
213
+ return Math.min(1, complexity);
214
+ }
215
+
216
+ /**
217
+ * Update model performance tracking for a topic
218
+ */
219
+ private updateModelPerformance(state: DialogState, model: string, response: string) {
220
+ if (!state.modelPerformance.has(model)) {
221
+ state.modelPerformance.set(model, new Map());
222
+ }
223
+
224
+ const modelScores = state.modelPerformance.get(model)!;
225
+ const currentTopic = state.currentTopic;
226
+
227
+ // Simple success scoring based on response length and quality indicators
228
+ const qualityScore = this.scoreResponseQuality(response);
229
+ const currentScore = modelScores.get(currentTopic) || 0;
230
+
231
+ // Rolling average
232
+ const newScore = (currentScore * (this.config.performanceWindow - 1) + qualityScore) / this.config.performanceWindow;
233
+ modelScores.set(currentTopic, newScore);
234
+ }
235
+
236
+ /**
237
+ * Score response quality (simple heuristic)
238
+ */
239
+ private scoreResponseQuality(response: string): number {
240
+ let score = 0.5; // Base score
241
+
242
+ // Longer responses often indicate more thorough answers
243
+ if (response.length > 200) score += 0.1;
244
+ if (response.length > 500) score += 0.1;
245
+
246
+ // Code blocks indicate technical content
247
+ if (response.includes('```')) score += 0.1;
248
+
249
+ // Lists and structured content
250
+ if (response.includes('\n-')) score += 0.05;
251
+ if (response.includes('\n1.')) score += 0.05;
252
+
253
+ return Math.min(1, score);
254
+ }
255
+
256
+ /**
257
+ * Get best model for current topic based on history
258
+ */
259
+ getBestModelForTopic(conversationId: string, availableModels: string[]): string | null {
260
+ const state = this.getDialogState(conversationId);
261
+ const currentTopic = state.currentTopic;
262
+
263
+ let bestModel: string | null = null;
264
+ let bestScore = -1;
265
+
266
+ for (const model of availableModels) {
267
+ const modelScores = state.modelPerformance.get(model);
268
+ if (modelScores) {
269
+ const topicScore = modelScores.get(currentTopic) || 0.5;
270
+ if (topicScore > bestScore) {
271
+ bestScore = topicScore;
272
+ bestModel = model;
273
+ }
274
+ }
275
+ }
276
+
277
+ return bestModel;
278
+ }
279
+
280
+ /**
281
+ * Build optimized context for next query
282
+ */
283
+ buildOptimizedContext(conversationId: string, newQuery: string): string {
284
+ const state = this.getDialogState(conversationId);
285
+ const contextParts: string[] = [];
286
+
287
+ // Add conversation summary
288
+ contextParts.push(`Topic: ${state.currentTopic}`);
289
+ contextParts.push(`Complexity: ${(state.complexity * 100).toFixed(0)}%`);
290
+ contextParts.push(`Turns: ${state.turns.length}`);
291
+
292
+ // Add relevant recent turns (last 3-5)
293
+ const recentTurns = state.turns.slice(-5);
294
+ for (const turn of recentTurns) {
295
+ const prefix = turn.role === 'user' ? 'Q' : 'A';
296
+ const modelTag = turn.model ? `[${turn.model}]` : '';
297
+ contextParts.push(`${prefix}${modelTag}: ${turn.content.slice(0, 200)}`);
298
+ }
299
+
300
+ // Add new query
301
+ contextParts.push(`New query: ${newQuery}`);
302
+
303
+ return contextParts.join('\n');
304
+ }
305
+
306
+ /**
307
+ * Get routing hints based on dialog state
308
+ */
309
+ getRoutingHints(conversationId: string): Record<string, number> {
310
+ const state = this.getDialogState(conversationId);
311
+
312
+ return {
313
+ complexity: state.complexity,
314
+ topicAffinity: this.topicAffinityScore(state.currentTopic),
315
+ depth: Math.min(1, state.turns.length / 20),
316
+ sentiment: state.sentiment === 'negative' ? 0.8 : 0.5,
317
+ };
318
+ }
319
+
320
+ /**
321
+ * Calculate topic affinity for routing
322
+ */
323
+ private topicAffinityScore(topic: string): number {
324
+ const topicScores: Record<string, number> = {
325
+ 'coding': 0.9,
326
+ 'security': 0.95,
327
+ 'devops': 0.85,
328
+ 'data-science': 0.8,
329
+ 'math': 0.7,
330
+ 'science': 0.75,
331
+ 'business': 0.6,
332
+ 'creative': 0.5,
333
+ 'general': 0.5,
334
+ };
335
+
336
+ return topicScores[topic] || 0.5;
337
+ }
338
+
339
+ /**
340
+ * Clear dialog state
341
+ */
342
+ clearState(conversationId: string): void {
343
+ this.dialogStates.delete(conversationId);
344
+ }
345
+
346
+ /**
347
+ * Get dialog summary
348
+ */
349
+ getSummary(conversationId: string): {
350
+ turns: number;
351
+ topics: string[];
352
+ currentTopic: string;
353
+ complexity: number;
354
+ duration: number;
355
+ modelsUsed: string[];
356
+ } {
357
+ const state = this.getDialogState(conversationId);
358
+
359
+ return {
360
+ turns: state.turns.length,
361
+ topics: [...state.topics],
362
+ currentTopic: state.currentTopic,
363
+ complexity: state.complexity,
364
+ duration: Date.now() - state.startedAt,
365
+ modelsUsed: [...state.modelPerformance.keys()],
366
+ };
367
+ }
368
+ }
369
+
370
+ // Export singleton instance
371
+ export const dialogOptimizer = new MultiRoundDialogOptimizer();
372
+
373
+ // Default export
374
+ export default dialogOptimizer;