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.
- package/dist/ensemble/multiRoundDialog.d.ts +113 -0
- package/dist/ensemble/multiRoundDialog.js +284 -0
- package/dist/ensemble/multiRoundDialog.js.map +1 -0
- package/dist/ensemble/shapleyValue.d.ts +119 -0
- package/dist/ensemble/shapleyValue.js +280 -0
- package/dist/ensemble/shapleyValue.js.map +1 -0
- package/dist/ensemble.d.ts +18 -3
- package/dist/ensemble.js +90 -16
- package/dist/index.d.ts +3 -0
- package/dist/index.js +28 -1
- package/dist/integrations/scienceAdapter.d.ts +77 -0
- package/dist/integrations/scienceAdapter.js +8 -7
- package/dist/integrations/scienceAdapter.js.map +1 -0
- package/dist/tui/dashboard.js +1 -0
- package/dist/tui/dashboard.js.map +1 -1
- package/package.json +1 -1
- package/src/ensemble/multiRoundDialog.ts +374 -0
- package/src/ensemble/shapleyValue.ts +353 -0
- package/src/ensemble.ts +117 -26
- package/src/index.ts +24 -0
- package/src/integrations/scienceAdapter.ts +2 -2
|
@@ -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
|
-
|
|
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
|
-
|
|
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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"}
|
package/dist/tui/dashboard.js
CHANGED
|
@@ -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.
|
|
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;
|