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

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,113 @@
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
+ import { RouteDecision } from '../routing/advancedRouter';
14
+ export interface DialogTurn {
15
+ turn: number;
16
+ role: 'user' | 'assistant' | 'system';
17
+ content: string;
18
+ model?: string;
19
+ timestamp: number;
20
+ routingDecision?: RouteDecision;
21
+ }
22
+ export interface DialogState {
23
+ conversationId: string;
24
+ turns: DialogTurn[];
25
+ topics: Set<string>;
26
+ topicHistory: Map<string, number>;
27
+ modelPerformance: Map<string, Map<string, number>>;
28
+ currentTopic: string;
29
+ sentiment: 'positive' | 'negative' | 'neutral';
30
+ complexity: number;
31
+ startedAt: number;
32
+ lastTurnAt: number;
33
+ }
34
+ export interface MultiRoundConfig {
35
+ /** Max turns to keep in conversation context */
36
+ maxContextTurns: number;
37
+ /** Topic similarity threshold */
38
+ topicThreshold: number;
39
+ /** Performance window size */
40
+ performanceWindow: number;
41
+ /** Enable adaptive complexity tracking */
42
+ trackComplexity: boolean;
43
+ }
44
+ export declare class MultiRoundDialogOptimizer {
45
+ private config;
46
+ private dialogStates;
47
+ constructor(config?: Partial<MultiRoundConfig>);
48
+ /**
49
+ * Create or get existing dialog state
50
+ */
51
+ getDialogState(conversationId: string): DialogState;
52
+ /**
53
+ * Create a fresh dialog state
54
+ */
55
+ private createNewState;
56
+ /**
57
+ * Add a turn to the conversation
58
+ */
59
+ addTurn(conversationId: string, role: 'user' | 'assistant' | 'system', content: string, model?: string, routingDecision?: RouteDecision): DialogState;
60
+ /**
61
+ * Extract topics from content using keyword analysis
62
+ */
63
+ private extractTopics;
64
+ /**
65
+ * Get most frequently mentioned topic
66
+ */
67
+ private getMostFrequentTopic;
68
+ /**
69
+ * Calculate complexity based on content and history
70
+ */
71
+ private calculateComplexity;
72
+ /**
73
+ * Update model performance tracking for a topic
74
+ */
75
+ private updateModelPerformance;
76
+ /**
77
+ * Score response quality (simple heuristic)
78
+ */
79
+ private scoreResponseQuality;
80
+ /**
81
+ * Get best model for current topic based on history
82
+ */
83
+ getBestModelForTopic(conversationId: string, availableModels: string[]): string | null;
84
+ /**
85
+ * Build optimized context for next query
86
+ */
87
+ buildOptimizedContext(conversationId: string, newQuery: string): string;
88
+ /**
89
+ * Get routing hints based on dialog state
90
+ */
91
+ getRoutingHints(conversationId: string): Record<string, number>;
92
+ /**
93
+ * Calculate topic affinity for routing
94
+ */
95
+ private topicAffinityScore;
96
+ /**
97
+ * Clear dialog state
98
+ */
99
+ clearState(conversationId: string): void;
100
+ /**
101
+ * Get dialog summary
102
+ */
103
+ getSummary(conversationId: string): {
104
+ turns: number;
105
+ topics: string[];
106
+ currentTopic: string;
107
+ complexity: number;
108
+ duration: number;
109
+ modelsUsed: string[];
110
+ };
111
+ }
112
+ export declare const dialogOptimizer: MultiRoundDialogOptimizer;
113
+ export default dialogOptimizer;
@@ -0,0 +1,284 @@
1
+ "use strict";
2
+ /**
3
+ * Multi-Round Dialog Optimization
4
+ *
5
+ * Tracks conversation context over multiple turns and optimizes routing
6
+ * decisions based on accumulated dialogue history.
7
+ *
8
+ * Key features:
9
+ * - Conversation state management
10
+ * - Topic tracking across turns
11
+ * - Model performance history per topic
12
+ * - Adaptive routing based on dialog state
13
+ */
14
+ Object.defineProperty(exports, "__esModule", { value: true });
15
+ exports.dialogOptimizer = exports.MultiRoundDialogOptimizer = void 0;
16
+ const DEFAULT_CONFIG = {
17
+ maxContextTurns: 20,
18
+ topicThreshold: 0.7,
19
+ performanceWindow: 10,
20
+ trackComplexity: true,
21
+ };
22
+ class MultiRoundDialogOptimizer {
23
+ config;
24
+ dialogStates = new Map();
25
+ constructor(config = {}) {
26
+ this.config = { ...DEFAULT_CONFIG, ...config };
27
+ }
28
+ /**
29
+ * Create or get existing dialog state
30
+ */
31
+ getDialogState(conversationId) {
32
+ if (!this.dialogStates.has(conversationId)) {
33
+ this.dialogStates.set(conversationId, this.createNewState(conversationId));
34
+ }
35
+ return this.dialogStates.get(conversationId);
36
+ }
37
+ /**
38
+ * Create a fresh dialog state
39
+ */
40
+ createNewState(conversationId) {
41
+ return {
42
+ conversationId,
43
+ turns: [],
44
+ topics: new Set(),
45
+ topicHistory: new Map(),
46
+ modelPerformance: new Map(),
47
+ currentTopic: 'general',
48
+ sentiment: 'neutral',
49
+ complexity: 0,
50
+ startedAt: Date.now(),
51
+ lastTurnAt: Date.now(),
52
+ };
53
+ }
54
+ /**
55
+ * Add a turn to the conversation
56
+ */
57
+ addTurn(conversationId, role, content, model, routingDecision) {
58
+ const state = this.getDialogState(conversationId);
59
+ const turn = {
60
+ turn: state.turns.length,
61
+ role,
62
+ content,
63
+ model,
64
+ timestamp: Date.now(),
65
+ routingDecision,
66
+ };
67
+ state.turns.push(turn);
68
+ state.lastTurnAt = Date.now();
69
+ // Update topic tracking
70
+ const topics = this.extractTopics(content);
71
+ topics.forEach(topic => {
72
+ state.topics.add(topic);
73
+ const count = state.topicHistory.get(topic) || 0;
74
+ state.topicHistory.set(topic, count + 1);
75
+ });
76
+ // Update current topic to most mentioned
77
+ if (topics.length > 0) {
78
+ state.currentTopic = this.getMostFrequentTopic(state.topicHistory);
79
+ }
80
+ // Update complexity
81
+ if (this.config.trackComplexity) {
82
+ state.complexity = this.calculateComplexity(content, state.turns);
83
+ }
84
+ // Update model performance if assistant turn with routing decision
85
+ if (role === 'assistant' && model && routingDecision) {
86
+ this.updateModelPerformance(state, model, content);
87
+ }
88
+ // Trim old turns if exceeding max
89
+ if (state.turns.length > this.config.maxContextTurns) {
90
+ state.turns = state.turns.slice(-this.config.maxContextTurns);
91
+ }
92
+ return state;
93
+ }
94
+ /**
95
+ * Extract topics from content using keyword analysis
96
+ */
97
+ extractTopics(content) {
98
+ const topics = [];
99
+ const lower = content.toLowerCase();
100
+ // Topic keywords
101
+ const topicPatterns = {
102
+ 'coding': ['code', 'programming', 'function', 'debug', 'syntax', 'api', 'software'],
103
+ 'data-science': ['data', 'analysis', 'ml', 'machine learning', 'model', 'training', 'dataset'],
104
+ 'math': ['equation', 'calculation', 'math', 'number', 'formula', 'algebra'],
105
+ 'science': ['experiment', 'hypothesis', 'research', 'physics', 'chemistry', 'biology'],
106
+ 'business': ['revenue', 'market', 'customer', 'sales', 'strategy', 'business'],
107
+ 'creative': ['story', 'creative', 'writing', 'art', 'design', 'poem'],
108
+ 'security': ['security', 'authentication', 'encryption', 'vulnerability', 'auth'],
109
+ 'devops': ['deploy', 'docker', 'kubernetes', 'ci/cd', 'infrastructure', 'cloud'],
110
+ };
111
+ for (const [topic, keywords] of Object.entries(topicPatterns)) {
112
+ for (const keyword of keywords) {
113
+ if (lower.includes(keyword)) {
114
+ topics.push(topic);
115
+ break;
116
+ }
117
+ }
118
+ }
119
+ return topics.length > 0 ? topics : ['general'];
120
+ }
121
+ /**
122
+ * Get most frequently mentioned topic
123
+ */
124
+ getMostFrequentTopic(topicHistory) {
125
+ let maxCount = 0;
126
+ let mostFrequent = 'general';
127
+ for (const [topic, count] of topicHistory) {
128
+ if (count > maxCount) {
129
+ maxCount = count;
130
+ mostFrequent = topic;
131
+ }
132
+ }
133
+ return mostFrequent;
134
+ }
135
+ /**
136
+ * Calculate complexity based on content and history
137
+ */
138
+ calculateComplexity(content, turns) {
139
+ // Base complexity from content length
140
+ let complexity = Math.min(1, content.length / 1000);
141
+ // Increase for technical terms
142
+ const technicalTerms = ['algorithm', 'architecture', 'optimization', 'performance', 'concurrent', 'distributed'];
143
+ for (const term of technicalTerms) {
144
+ if (content.toLowerCase().includes(term)) {
145
+ complexity += 0.1;
146
+ }
147
+ }
148
+ // Increase with conversation depth
149
+ complexity += Math.min(0.3, turns.length * 0.02);
150
+ return Math.min(1, complexity);
151
+ }
152
+ /**
153
+ * Update model performance tracking for a topic
154
+ */
155
+ updateModelPerformance(state, model, response) {
156
+ if (!state.modelPerformance.has(model)) {
157
+ state.modelPerformance.set(model, new Map());
158
+ }
159
+ const modelScores = state.modelPerformance.get(model);
160
+ const currentTopic = state.currentTopic;
161
+ // Simple success scoring based on response length and quality indicators
162
+ const qualityScore = this.scoreResponseQuality(response);
163
+ const currentScore = modelScores.get(currentTopic) || 0;
164
+ // Rolling average
165
+ const newScore = (currentScore * (this.config.performanceWindow - 1) + qualityScore) / this.config.performanceWindow;
166
+ modelScores.set(currentTopic, newScore);
167
+ }
168
+ /**
169
+ * Score response quality (simple heuristic)
170
+ */
171
+ scoreResponseQuality(response) {
172
+ let score = 0.5; // Base score
173
+ // Longer responses often indicate more thorough answers
174
+ if (response.length > 200)
175
+ score += 0.1;
176
+ if (response.length > 500)
177
+ score += 0.1;
178
+ // Code blocks indicate technical content
179
+ if (response.includes('```'))
180
+ score += 0.1;
181
+ // Lists and structured content
182
+ if (response.includes('\n-'))
183
+ score += 0.05;
184
+ if (response.includes('\n1.'))
185
+ score += 0.05;
186
+ return Math.min(1, score);
187
+ }
188
+ /**
189
+ * Get best model for current topic based on history
190
+ */
191
+ getBestModelForTopic(conversationId, availableModels) {
192
+ const state = this.getDialogState(conversationId);
193
+ const currentTopic = state.currentTopic;
194
+ let bestModel = null;
195
+ let bestScore = -1;
196
+ for (const model of availableModels) {
197
+ const modelScores = state.modelPerformance.get(model);
198
+ if (modelScores) {
199
+ const topicScore = modelScores.get(currentTopic) || 0.5;
200
+ if (topicScore > bestScore) {
201
+ bestScore = topicScore;
202
+ bestModel = model;
203
+ }
204
+ }
205
+ }
206
+ return bestModel;
207
+ }
208
+ /**
209
+ * Build optimized context for next query
210
+ */
211
+ buildOptimizedContext(conversationId, newQuery) {
212
+ const state = this.getDialogState(conversationId);
213
+ const contextParts = [];
214
+ // Add conversation summary
215
+ contextParts.push(`Topic: ${state.currentTopic}`);
216
+ contextParts.push(`Complexity: ${(state.complexity * 100).toFixed(0)}%`);
217
+ contextParts.push(`Turns: ${state.turns.length}`);
218
+ // Add relevant recent turns (last 3-5)
219
+ const recentTurns = state.turns.slice(-5);
220
+ for (const turn of recentTurns) {
221
+ const prefix = turn.role === 'user' ? 'Q' : 'A';
222
+ const modelTag = turn.model ? `[${turn.model}]` : '';
223
+ contextParts.push(`${prefix}${modelTag}: ${turn.content.slice(0, 200)}`);
224
+ }
225
+ // Add new query
226
+ contextParts.push(`New query: ${newQuery}`);
227
+ return contextParts.join('\n');
228
+ }
229
+ /**
230
+ * Get routing hints based on dialog state
231
+ */
232
+ getRoutingHints(conversationId) {
233
+ const state = this.getDialogState(conversationId);
234
+ return {
235
+ complexity: state.complexity,
236
+ topicAffinity: this.topicAffinityScore(state.currentTopic),
237
+ depth: Math.min(1, state.turns.length / 20),
238
+ sentiment: state.sentiment === 'negative' ? 0.8 : 0.5,
239
+ };
240
+ }
241
+ /**
242
+ * Calculate topic affinity for routing
243
+ */
244
+ topicAffinityScore(topic) {
245
+ const topicScores = {
246
+ 'coding': 0.9,
247
+ 'security': 0.95,
248
+ 'devops': 0.85,
249
+ 'data-science': 0.8,
250
+ 'math': 0.7,
251
+ 'science': 0.75,
252
+ 'business': 0.6,
253
+ 'creative': 0.5,
254
+ 'general': 0.5,
255
+ };
256
+ return topicScores[topic] || 0.5;
257
+ }
258
+ /**
259
+ * Clear dialog state
260
+ */
261
+ clearState(conversationId) {
262
+ this.dialogStates.delete(conversationId);
263
+ }
264
+ /**
265
+ * Get dialog summary
266
+ */
267
+ getSummary(conversationId) {
268
+ const state = this.getDialogState(conversationId);
269
+ return {
270
+ turns: state.turns.length,
271
+ topics: [...state.topics],
272
+ currentTopic: state.currentTopic,
273
+ complexity: state.complexity,
274
+ duration: Date.now() - state.startedAt,
275
+ modelsUsed: [...state.modelPerformance.keys()],
276
+ };
277
+ }
278
+ }
279
+ exports.MultiRoundDialogOptimizer = MultiRoundDialogOptimizer;
280
+ // Export singleton instance
281
+ exports.dialogOptimizer = new MultiRoundDialogOptimizer();
282
+ // Default export
283
+ exports.default = exports.dialogOptimizer;
284
+ //# sourceMappingURL=multiRoundDialog.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"multiRoundDialog.js","sourceRoot":"","sources":["../../src/ensemble/multiRoundDialog.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,119 @@
1
+ /**
2
+ * Enhanced Shapley Value Calculator for Ensemble Credit Assignment
3
+ *
4
+ * Incorporates game theory concepts for efficient and fair credit distribution:
5
+ *
6
+ * 1. ETHNOCENTRISM (In-group Loyalty Adjustment):
7
+ * - Players (models) have historical loyalty biases toward certain partners
8
+ * - Models that collaborate successfully develop "trust bonds"
9
+ * - Loyalty increases marginal contribution of trusted partners
10
+ * - Math: L[i,j] = exponential moving avg of historical success(i with j)
11
+ *
12
+ * 2. HANDICAP PRINCIPLE (Zahavi, 1975 - Costly Signaling):
13
+ * - Honest signals require costly investment
14
+ * - Models providing correct answers despite cost signal reliability
15
+ * - Math: H[i] = cost_i * reliability_i (handicap bonus)
16
+ *
17
+ * 3. CORE SHAPLEY VALUE:
18
+ * - φ_i = Σ_{S⊆N\{i}} (|S|! * (n-|S|-1)! / n!) * (v(S∪{i}) - v(S))
19
+ *
20
+ * Combined: φ_i* = α*Shapley_i + β*Loyalty_i + γ*Handicap_i
21
+ * Where α + β + γ = 1 (normalized weights)
22
+ */
23
+ export interface ShapleyConfig {
24
+ nPermutations?: number;
25
+ useMonteCarlo?: boolean;
26
+ alpha?: number;
27
+ beta?: number;
28
+ gamma?: number;
29
+ }
30
+ export interface ModelContribution {
31
+ modelId: string;
32
+ shapleyValue: number;
33
+ loyaltyValue: number;
34
+ handicapValue: number;
35
+ combinedCredit: number;
36
+ marginalContributions: number[];
37
+ timesSelected: number;
38
+ averageMarginal: number;
39
+ reliabilityScore: number;
40
+ costInvested: number;
41
+ ethnocentrismBias: number;
42
+ }
43
+ type AccuracyFunction = (modelIds: string[]) => number;
44
+ export interface LoyaltyConfig {
45
+ decayRate?: number;
46
+ minInteractions?: number;
47
+ }
48
+ /**
49
+ * Loyalty Matrix L[i][j] = loyalty of model i toward model j (0-1)
50
+ * Models develop trust through successful collaborations
51
+ */
52
+ export declare class LoyaltyMatrix {
53
+ private matrix;
54
+ private counts;
55
+ private config;
56
+ constructor(cfg?: LoyaltyConfig);
57
+ /** Record successful collaboration between two models */
58
+ recordSuccess(i: string, j: string, weight?: number): void;
59
+ /** Get loyalty of model i toward model j */
60
+ getLoyalty(i: string, j: string): number;
61
+ /** Ethnocentrism = average loyalty toward all partners */
62
+ ethnoCentrism(model: string, allModels: string[]): number;
63
+ }
64
+ export interface HandicapConfig {
65
+ costSensitivity?: number;
66
+ reliabilityWeight?: number;
67
+ minCostThreshold?: number;
68
+ }
69
+ /**
70
+ * Handicap Principle (Zahavi, 1975):
71
+ * "A handicapping signal is honest because it is costly to produce"
72
+ *
73
+ * Models spending more tokens on answers despite being correct signal reliability.
74
+ * H[i] = cost_i * reliability_i (higher = more reliable despite cost)
75
+ */
76
+ export declare class HandicapCalculator {
77
+ private costs;
78
+ private correct;
79
+ private totals;
80
+ private config;
81
+ constructor(cfg?: HandicapConfig);
82
+ /** Record performance: cost spent and whether answer was correct */
83
+ record(model: string, cost: number, isCorrect: boolean): void;
84
+ /** Reliability = correct / total (prior probability of being right) */
85
+ reliability(model: string): number;
86
+ /** Average cost invested by model */
87
+ avgCost(model: string): number;
88
+ /**
89
+ * Handicap bonus = honest signal of quality
90
+ * H[i] = (cost_i - minCost) / maxCost * reliability_i
91
+ * Higher cost investment + higher reliability = higher handicap
92
+ */
93
+ handicap(model: string, maxCost?: number): number;
94
+ }
95
+ /**
96
+ * Combined enhanced Shapley value with ethnocentrism and handicap
97
+ * φ_i* = α*φ_i(Shapley) + β*ε_i(Ethnocentrism) + γ*H_i(Handicap)
98
+ */
99
+ export declare function calculateEnhancedShapley(modelIds: string[], accuracyFn: AccuracyFunction, loyalty: LoyaltyMatrix, handicap: HandicapCalculator, cfg?: ShapleyConfig): Map<string, ModelContribution>;
100
+ /** Create ensemble accuracy function for Shapley calculation */
101
+ export declare function createAccuracyFn(groundTruth: string, getAnswer: (modelId: string) => string): AccuracyFunction;
102
+ /** Apply Shapley credit to voting weights */
103
+ export declare function applyCredit(contributions: Map<string, ModelContribution>, baseWeights: Record<string, number>, alpha?: number): Record<string, number>;
104
+ export interface ShapleySummary {
105
+ totalCredit: number;
106
+ perModel: ModelContribution[];
107
+ bestContributor: string;
108
+ worstContributor: string;
109
+ }
110
+ export declare function summarize(contributions: Map<string, ModelContribution>): ShapleySummary;
111
+ declare const _default: {
112
+ calculateEnhancedShapley: typeof calculateEnhancedShapley;
113
+ LoyaltyMatrix: typeof LoyaltyMatrix;
114
+ HandicapCalculator: typeof HandicapCalculator;
115
+ createAccuracyFn: typeof createAccuracyFn;
116
+ applyCredit: typeof applyCredit;
117
+ summarize: typeof summarize;
118
+ };
119
+ export default _default;