@cascadeflow/n8n-nodes-cascadeflow 0.5.5 → 0.6.1
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.
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"LmChatCascadeFlow.node.d.ts","sourceRoot":"","sources":["../../../nodes/LmChatCascadeFlow/LmChatCascadeFlow.node.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EACV,SAAS,EACT,oBAAoB,EACpB,oBAAoB,EACpB,UAAU,EACX,MAAM,cAAc,CAAC;
|
|
1
|
+
{"version":3,"file":"LmChatCascadeFlow.node.d.ts","sourceRoot":"","sources":["../../../nodes/LmChatCascadeFlow/LmChatCascadeFlow.node.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EACV,SAAS,EACT,oBAAoB,EACpB,oBAAoB,EACpB,UAAU,EACX,MAAM,cAAc,CAAC;AA2hCtB,qBAAa,iBAAkB,YAAW,SAAS;IACjD,WAAW,EAAE,oBAAoB,CAsI/B;IAEI,UAAU,CAAC,IAAI,EAAE,oBAAoB,GAAG,OAAO,CAAC,UAAU,CAAC;CAqJlE"}
|
|
@@ -3,41 +3,133 @@ Object.defineProperty(exports, "__esModule", { value: true });
|
|
|
3
3
|
exports.LmChatCascadeFlow = void 0;
|
|
4
4
|
const n8n_workflow_1 = require("n8n-workflow");
|
|
5
5
|
const chat_models_1 = require("@langchain/core/language_models/chat_models");
|
|
6
|
-
|
|
6
|
+
const outputs_1 = require("@langchain/core/outputs");
|
|
7
|
+
// =============================================================================
|
|
8
|
+
// DOMAIN CONSTANTS - All 16 supported domains
|
|
9
|
+
// =============================================================================
|
|
10
|
+
const DOMAINS = {
|
|
11
|
+
CODE: 'code',
|
|
12
|
+
DATA: 'data',
|
|
13
|
+
STRUCTURED: 'structured',
|
|
14
|
+
RAG: 'rag',
|
|
15
|
+
CONVERSATION: 'conversation',
|
|
16
|
+
TOOL: 'tool',
|
|
17
|
+
CREATIVE: 'creative',
|
|
18
|
+
SUMMARY: 'summary',
|
|
19
|
+
TRANSLATION: 'translation',
|
|
20
|
+
MATH: 'math',
|
|
21
|
+
SCIENCE: 'science',
|
|
22
|
+
MEDICAL: 'medical',
|
|
23
|
+
LEGAL: 'legal',
|
|
24
|
+
FINANCIAL: 'financial',
|
|
25
|
+
MULTIMODAL: 'multimodal',
|
|
26
|
+
GENERAL: 'general',
|
|
27
|
+
};
|
|
28
|
+
// Domain display names for n8n UI
|
|
29
|
+
const DOMAIN_DISPLAY_NAMES = {
|
|
30
|
+
code: 'Code',
|
|
31
|
+
data: 'Data Analysis',
|
|
32
|
+
structured: 'Structured Output',
|
|
33
|
+
rag: 'RAG (Retrieval)',
|
|
34
|
+
conversation: 'Conversation',
|
|
35
|
+
tool: 'Tool Calling',
|
|
36
|
+
creative: 'Creative Writing',
|
|
37
|
+
summary: 'Summarization',
|
|
38
|
+
translation: 'Translation',
|
|
39
|
+
math: 'Mathematics',
|
|
40
|
+
science: 'Science',
|
|
41
|
+
medical: 'Medical',
|
|
42
|
+
legal: 'Legal',
|
|
43
|
+
financial: 'Financial',
|
|
44
|
+
multimodal: 'Multimodal',
|
|
45
|
+
general: 'General',
|
|
46
|
+
};
|
|
47
|
+
// Domain descriptions for n8n UI
|
|
48
|
+
const DOMAIN_DESCRIPTIONS = {
|
|
49
|
+
code: 'Programming, debugging, code generation',
|
|
50
|
+
data: 'Data analysis, statistics, pandas/SQL',
|
|
51
|
+
structured: 'JSON, XML, structured data extraction',
|
|
52
|
+
rag: 'Retrieval-augmented generation, document Q&A',
|
|
53
|
+
conversation: 'Chat, dialogue, multi-turn conversations',
|
|
54
|
+
tool: 'Function calling, tool use, API interactions',
|
|
55
|
+
creative: 'Creative writing, stories, poetry',
|
|
56
|
+
summary: 'Text summarization, condensing content',
|
|
57
|
+
translation: 'Language translation, multilingual',
|
|
58
|
+
math: 'Mathematical reasoning, calculations, proofs',
|
|
59
|
+
science: 'Scientific knowledge, research, experiments',
|
|
60
|
+
medical: 'Healthcare, medical knowledge, clinical',
|
|
61
|
+
legal: 'Legal documents, contracts, regulations',
|
|
62
|
+
financial: 'Finance, accounting, investment analysis',
|
|
63
|
+
multimodal: 'Images, audio, video understanding',
|
|
64
|
+
general: 'General purpose, fallback domain',
|
|
65
|
+
};
|
|
66
|
+
// Quality validation, cost tracking, routing, and circuit breaker - optional import
|
|
7
67
|
let QualityValidator;
|
|
8
68
|
let CASCADE_QUALITY_CONFIG;
|
|
69
|
+
let CostCalculator;
|
|
70
|
+
let ComplexityDetector;
|
|
71
|
+
let PreRouter;
|
|
72
|
+
let DomainDetector;
|
|
73
|
+
let CircuitBreaker;
|
|
9
74
|
try {
|
|
10
75
|
const cascadeCore = require('@cascadeflow/core');
|
|
11
76
|
QualityValidator = cascadeCore.QualityValidator;
|
|
12
77
|
CASCADE_QUALITY_CONFIG = cascadeCore.CASCADE_QUALITY_CONFIG;
|
|
78
|
+
CostCalculator = cascadeCore.CostCalculator;
|
|
79
|
+
ComplexityDetector = cascadeCore.ComplexityDetector;
|
|
80
|
+
PreRouter = cascadeCore.PreRouter;
|
|
81
|
+
DomainDetector = cascadeCore.DomainDetector;
|
|
82
|
+
CircuitBreaker = cascadeCore.CircuitBreaker;
|
|
13
83
|
}
|
|
14
84
|
catch (e) {
|
|
15
|
-
// @cascadeflow/core not available - use simple validation
|
|
16
|
-
console.warn('⚠️ @cascadeflow/core not available, using
|
|
85
|
+
// @cascadeflow/core not available - use simple validation and estimates
|
|
86
|
+
console.warn('⚠️ @cascadeflow/core not available, using fallbacks');
|
|
17
87
|
}
|
|
18
88
|
/**
|
|
19
|
-
* Custom CascadeChatModel that wraps
|
|
20
|
-
* and implements cascading logic with cost tracking
|
|
89
|
+
* Custom CascadeChatModel that wraps multiple models (drafter, verifier, and domain-specific)
|
|
90
|
+
* and implements intelligent domain-aware cascading logic with cost tracking
|
|
21
91
|
*/
|
|
22
92
|
class CascadeChatModel extends chat_models_1.BaseChatModel {
|
|
23
|
-
constructor(drafterModel, verifierModelGetter, qualityThreshold = 0.7) {
|
|
93
|
+
constructor(drafterModel, verifierModelGetter, qualityThreshold = 0.7, useSemanticValidation = true, useAlignmentScoring = true, useComplexityRouting = true, useDomainRouting = false, enabledDomains = [], domainModelGetters = new Map(), domainConfigs = new Map(), useCircuitBreaker = true) {
|
|
24
94
|
super({});
|
|
95
|
+
// Domain-specific models and configurations
|
|
96
|
+
this.domainModels = new Map();
|
|
97
|
+
this.domainConfigs = new Map();
|
|
98
|
+
this.enabledDomains = [];
|
|
25
99
|
// Cost tracking
|
|
26
100
|
this.drafterCost = 0;
|
|
27
101
|
this.verifierCost = 0;
|
|
102
|
+
this.domainCosts = new Map();
|
|
28
103
|
this.drafterCount = 0;
|
|
29
104
|
this.verifierCount = 0;
|
|
105
|
+
this.domainCounts = new Map();
|
|
30
106
|
this.drafterModel = drafterModel;
|
|
31
107
|
this.verifierModelGetter = verifierModelGetter;
|
|
32
108
|
this.qualityThreshold = qualityThreshold;
|
|
33
|
-
|
|
109
|
+
this.enabledDomains = enabledDomains;
|
|
110
|
+
this.domainConfigs = domainConfigs;
|
|
111
|
+
// Store domain model getters for lazy loading
|
|
112
|
+
for (const [domain, getter] of domainModelGetters.entries()) {
|
|
113
|
+
// Lazy load domain models
|
|
114
|
+
this.domainModels.set(domain, undefined);
|
|
115
|
+
}
|
|
116
|
+
// Initialize quality validator with CASCADE-optimized config + semantic validation
|
|
34
117
|
if (QualityValidator && CASCADE_QUALITY_CONFIG) {
|
|
35
118
|
try {
|
|
36
119
|
this.qualityValidator = new QualityValidator({
|
|
37
120
|
...CASCADE_QUALITY_CONFIG,
|
|
38
121
|
minConfidence: qualityThreshold,
|
|
122
|
+
useSemanticValidation,
|
|
123
|
+
useAlignmentScoring,
|
|
124
|
+
semanticThreshold: 0.5,
|
|
39
125
|
});
|
|
40
126
|
console.log('✅ CascadeFlow quality validator initialized');
|
|
127
|
+
if (useSemanticValidation) {
|
|
128
|
+
console.log(' 📊 Semantic validation enabled (requires @cascadeflow/ml)');
|
|
129
|
+
}
|
|
130
|
+
if (useAlignmentScoring) {
|
|
131
|
+
console.log(' 🎯 Alignment scoring enabled');
|
|
132
|
+
}
|
|
41
133
|
}
|
|
42
134
|
catch (e) {
|
|
43
135
|
console.warn('⚠️ Quality validator initialization failed, using simple check');
|
|
@@ -47,6 +139,66 @@ class CascadeChatModel extends chat_models_1.BaseChatModel {
|
|
|
47
139
|
else {
|
|
48
140
|
this.qualityValidator = null;
|
|
49
141
|
}
|
|
142
|
+
// Initialize cost calculator if available
|
|
143
|
+
if (CostCalculator) {
|
|
144
|
+
try {
|
|
145
|
+
this.costCalculator = new CostCalculator();
|
|
146
|
+
console.log('💰 CascadeFlow cost calculator initialized');
|
|
147
|
+
}
|
|
148
|
+
catch (e) {
|
|
149
|
+
console.warn('⚠️ Cost calculator initialization failed, using estimates');
|
|
150
|
+
this.costCalculator = null;
|
|
151
|
+
}
|
|
152
|
+
}
|
|
153
|
+
else {
|
|
154
|
+
this.costCalculator = null;
|
|
155
|
+
}
|
|
156
|
+
// Initialize complexity detector and domain detector
|
|
157
|
+
if (useComplexityRouting && ComplexityDetector) {
|
|
158
|
+
try {
|
|
159
|
+
this.complexityDetector = new ComplexityDetector();
|
|
160
|
+
console.log('🧠 CascadeFlow complexity-based routing enabled');
|
|
161
|
+
}
|
|
162
|
+
catch (e) {
|
|
163
|
+
console.warn('⚠️ Complexity detector initialization failed');
|
|
164
|
+
this.complexityDetector = null;
|
|
165
|
+
}
|
|
166
|
+
}
|
|
167
|
+
else {
|
|
168
|
+
this.complexityDetector = null;
|
|
169
|
+
}
|
|
170
|
+
// Initialize domain detector if domain routing is enabled
|
|
171
|
+
if (useDomainRouting && DomainDetector && enabledDomains.length > 0) {
|
|
172
|
+
try {
|
|
173
|
+
this.domainDetector = new DomainDetector({ enabledDomains });
|
|
174
|
+
console.log(`🎯 CascadeFlow domain routing enabled for: ${enabledDomains.join(', ')}`);
|
|
175
|
+
}
|
|
176
|
+
catch (e) {
|
|
177
|
+
console.warn('⚠️ Domain detector initialization failed');
|
|
178
|
+
this.domainDetector = null;
|
|
179
|
+
}
|
|
180
|
+
}
|
|
181
|
+
else {
|
|
182
|
+
this.domainDetector = null;
|
|
183
|
+
}
|
|
184
|
+
// Initialize circuit breaker for fault tolerance
|
|
185
|
+
if (useCircuitBreaker && CircuitBreaker) {
|
|
186
|
+
try {
|
|
187
|
+
this.circuitBreaker = new CircuitBreaker({
|
|
188
|
+
failureThreshold: 3,
|
|
189
|
+
recoveryTimeout: 30000, // 30 seconds
|
|
190
|
+
halfOpenMaxCalls: 2,
|
|
191
|
+
});
|
|
192
|
+
console.log('🛡️ CascadeFlow circuit breaker enabled');
|
|
193
|
+
}
|
|
194
|
+
catch (e) {
|
|
195
|
+
console.warn('⚠️ Circuit breaker initialization failed');
|
|
196
|
+
this.circuitBreaker = null;
|
|
197
|
+
}
|
|
198
|
+
}
|
|
199
|
+
else {
|
|
200
|
+
this.circuitBreaker = null;
|
|
201
|
+
}
|
|
50
202
|
}
|
|
51
203
|
async getVerifierModel() {
|
|
52
204
|
if (!this.verifierModel) {
|
|
@@ -57,6 +209,17 @@ class CascadeChatModel extends chat_models_1.BaseChatModel {
|
|
|
57
209
|
}
|
|
58
210
|
return this.verifierModel;
|
|
59
211
|
}
|
|
212
|
+
/**
|
|
213
|
+
* Get domain-specific model if available, falls back to drafter
|
|
214
|
+
*/
|
|
215
|
+
async getDomainModel(domain) {
|
|
216
|
+
const existingModel = this.domainModels.get(domain);
|
|
217
|
+
if (existingModel) {
|
|
218
|
+
return existingModel;
|
|
219
|
+
}
|
|
220
|
+
// Fallback to drafter if no domain-specific model
|
|
221
|
+
return this.drafterModel;
|
|
222
|
+
}
|
|
60
223
|
/**
|
|
61
224
|
* Helper to get model info string (type and name)
|
|
62
225
|
*/
|
|
@@ -65,14 +228,109 @@ class CascadeChatModel extends chat_models_1.BaseChatModel {
|
|
|
65
228
|
const modelName = model.modelName || model.model || 'unknown';
|
|
66
229
|
return `${type} (${modelName})`;
|
|
67
230
|
}
|
|
231
|
+
/**
|
|
232
|
+
* Detect the domain of a query using semantic detection
|
|
233
|
+
*/
|
|
234
|
+
async detectDomain(queryText) {
|
|
235
|
+
if (!this.domainDetector || this.enabledDomains.length === 0) {
|
|
236
|
+
return null;
|
|
237
|
+
}
|
|
238
|
+
try {
|
|
239
|
+
const result = await this.domainDetector.detect(queryText);
|
|
240
|
+
if (result && result.domain && this.enabledDomains.includes(result.domain)) {
|
|
241
|
+
console.log(`🎯 Domain detected: ${result.domain} (confidence: ${result.confidence?.toFixed(2) || 'N/A'})`);
|
|
242
|
+
return result.domain;
|
|
243
|
+
}
|
|
244
|
+
}
|
|
245
|
+
catch (e) {
|
|
246
|
+
console.warn('Domain detection failed, using default routing');
|
|
247
|
+
}
|
|
248
|
+
return null;
|
|
249
|
+
}
|
|
250
|
+
/**
|
|
251
|
+
* Check if message contains tool calls
|
|
252
|
+
*/
|
|
253
|
+
hasToolCalls(message) {
|
|
254
|
+
const additionalKwargs = message.additional_kwargs || {};
|
|
255
|
+
if (additionalKwargs.tool_calls && Array.isArray(additionalKwargs.tool_calls) && additionalKwargs.tool_calls.length > 0) {
|
|
256
|
+
return true;
|
|
257
|
+
}
|
|
258
|
+
if (additionalKwargs.function_call && typeof additionalKwargs.function_call === 'object') {
|
|
259
|
+
return true;
|
|
260
|
+
}
|
|
261
|
+
const responseMetadata = message.response_metadata || {};
|
|
262
|
+
if (responseMetadata.tool_calls && Array.isArray(responseMetadata.tool_calls) && responseMetadata.tool_calls.length > 0) {
|
|
263
|
+
return true;
|
|
264
|
+
}
|
|
265
|
+
return false;
|
|
266
|
+
}
|
|
267
|
+
/**
|
|
268
|
+
* Get count of tool calls in message
|
|
269
|
+
*/
|
|
270
|
+
getToolCallsCount(message) {
|
|
271
|
+
const additionalKwargs = message.additional_kwargs || {};
|
|
272
|
+
const responseMetadata = message.response_metadata || {};
|
|
273
|
+
if (additionalKwargs.tool_calls && Array.isArray(additionalKwargs.tool_calls)) {
|
|
274
|
+
return additionalKwargs.tool_calls.length;
|
|
275
|
+
}
|
|
276
|
+
if (additionalKwargs.function_call) {
|
|
277
|
+
return 1;
|
|
278
|
+
}
|
|
279
|
+
if (responseMetadata.tool_calls && Array.isArray(responseMetadata.tool_calls)) {
|
|
280
|
+
return responseMetadata.tool_calls.length;
|
|
281
|
+
}
|
|
282
|
+
return 0;
|
|
283
|
+
}
|
|
284
|
+
/**
|
|
285
|
+
* Calculate accurate cost from message token usage
|
|
286
|
+
*/
|
|
287
|
+
async calculateMessageCost(message, model) {
|
|
288
|
+
const responseMetadata = message.response_metadata || {};
|
|
289
|
+
const tokenUsage = responseMetadata.tokenUsage || responseMetadata.usage || {};
|
|
290
|
+
const inputTokens = tokenUsage.promptTokens || tokenUsage.prompt_tokens || 0;
|
|
291
|
+
const outputTokens = tokenUsage.completionTokens || tokenUsage.completion_tokens || 0;
|
|
292
|
+
const modelName = model.modelName || model.model || 'unknown';
|
|
293
|
+
if (this.costCalculator && inputTokens > 0) {
|
|
294
|
+
try {
|
|
295
|
+
const cost = await this.costCalculator.calculateCost({
|
|
296
|
+
model: modelName,
|
|
297
|
+
inputTokens,
|
|
298
|
+
outputTokens,
|
|
299
|
+
});
|
|
300
|
+
return cost;
|
|
301
|
+
}
|
|
302
|
+
catch (e) {
|
|
303
|
+
console.warn(`Cost calculation failed for ${modelName}, using estimate`);
|
|
304
|
+
}
|
|
305
|
+
}
|
|
306
|
+
// Fallback to rough estimates based on model name
|
|
307
|
+
const estimatesPerMillion = {
|
|
308
|
+
'gpt-4o-mini': { input: 0.15, output: 0.6 },
|
|
309
|
+
'gpt-4o': { input: 5.0, output: 15.0 },
|
|
310
|
+
'gpt-4-turbo': { input: 10.0, output: 30.0 },
|
|
311
|
+
'gpt-4': { input: 30.0, output: 60.0 },
|
|
312
|
+
'gpt-3.5-turbo': { input: 0.5, output: 1.5 },
|
|
313
|
+
'claude-3-5-sonnet': { input: 3.0, output: 15.0 },
|
|
314
|
+
'claude-3-haiku': { input: 0.25, output: 1.25 },
|
|
315
|
+
default: { input: 1.0, output: 2.0 },
|
|
316
|
+
};
|
|
317
|
+
let estimate = estimatesPerMillion.default;
|
|
318
|
+
for (const [key, value] of Object.entries(estimatesPerMillion)) {
|
|
319
|
+
if (modelName.includes(key)) {
|
|
320
|
+
estimate = value;
|
|
321
|
+
break;
|
|
322
|
+
}
|
|
323
|
+
}
|
|
324
|
+
const cost = (inputTokens / 1000000) * estimate.input +
|
|
325
|
+
(outputTokens / 1000000) * estimate.output;
|
|
326
|
+
return cost;
|
|
327
|
+
}
|
|
68
328
|
/**
|
|
69
329
|
* Simple quality validation fallback (when @cascadeflow/core not available)
|
|
70
330
|
*/
|
|
71
331
|
simpleQualityCheck(responseText) {
|
|
72
332
|
const wordCount = responseText.split(/\s+/).length;
|
|
73
|
-
// Base confidence on response length and structure
|
|
74
333
|
let confidence = 0.75;
|
|
75
|
-
// Very short responses get lower confidence
|
|
76
334
|
if (wordCount < 5) {
|
|
77
335
|
confidence = 0.50;
|
|
78
336
|
}
|
|
@@ -82,7 +340,6 @@ class CascadeChatModel extends chat_models_1.BaseChatModel {
|
|
|
82
340
|
else if (wordCount > 30) {
|
|
83
341
|
confidence = 0.85;
|
|
84
342
|
}
|
|
85
|
-
// Check for uncertainty markers
|
|
86
343
|
const uncertaintyMarkers = ['i don\'t know', 'i\'m not sure', 'unclear', 'uncertain'];
|
|
87
344
|
const hasUncertainty = uncertaintyMarkers.some(marker => responseText.toLowerCase().includes(marker));
|
|
88
345
|
if (hasUncertainty) {
|
|
@@ -99,23 +356,154 @@ class CascadeChatModel extends chat_models_1.BaseChatModel {
|
|
|
99
356
|
}
|
|
100
357
|
async _generate(messages, options, runManager) {
|
|
101
358
|
try {
|
|
102
|
-
|
|
103
|
-
|
|
104
|
-
|
|
105
|
-
|
|
359
|
+
const queryText = messages.map(m => m.content.toString()).join(' ');
|
|
360
|
+
// Step 1: Detect domain if domain routing is enabled
|
|
361
|
+
let detectedDomain = null;
|
|
362
|
+
let domainModel = null;
|
|
363
|
+
if (this.enabledDomains.length > 0) {
|
|
364
|
+
detectedDomain = await this.detectDomain(queryText);
|
|
365
|
+
if (detectedDomain) {
|
|
366
|
+
const domainConfig = this.domainConfigs.get(detectedDomain);
|
|
367
|
+
if (domainConfig?.model) {
|
|
368
|
+
domainModel = domainConfig.model;
|
|
369
|
+
await runManager?.handleText(`🎯 Domain: ${DOMAIN_DISPLAY_NAMES[detectedDomain]} → Using domain-specific model\n`);
|
|
370
|
+
}
|
|
371
|
+
}
|
|
372
|
+
}
|
|
373
|
+
// Step 2: Detect query complexity
|
|
374
|
+
let complexity;
|
|
375
|
+
let shouldSkipDrafter = false;
|
|
376
|
+
if (this.complexityDetector) {
|
|
377
|
+
try {
|
|
378
|
+
const complexityResult = await this.complexityDetector.detectComplexity(queryText);
|
|
379
|
+
complexity = complexityResult.level;
|
|
380
|
+
if (complexity === 'hard' || complexity === 'expert') {
|
|
381
|
+
shouldSkipDrafter = true;
|
|
382
|
+
await runManager?.handleText(`🧠 Complexity: ${complexity} → Routing directly to verifier (skip drafter)\n`);
|
|
383
|
+
console.log(`🧠 Complexity: ${complexity} → Direct verifier route`);
|
|
384
|
+
}
|
|
385
|
+
else {
|
|
386
|
+
await runManager?.handleText(`🧠 Complexity: ${complexity} → Trying drafter first\n`);
|
|
387
|
+
console.log(`🧠 Complexity: ${complexity} → Drafter route`);
|
|
388
|
+
}
|
|
389
|
+
}
|
|
390
|
+
catch (e) {
|
|
391
|
+
console.warn('Complexity detection failed, using normal flow');
|
|
392
|
+
}
|
|
393
|
+
}
|
|
394
|
+
// Step 3: Execute with circuit breaker protection if available
|
|
395
|
+
const executeWithProtection = async (model, modelType) => {
|
|
396
|
+
if (this.circuitBreaker) {
|
|
397
|
+
return await this.circuitBreaker.execute(modelType, async () => await model.invoke(messages, options));
|
|
398
|
+
}
|
|
399
|
+
return await model.invoke(messages, options);
|
|
400
|
+
};
|
|
401
|
+
// Step 3a: If complexity routing says skip drafter, go directly to verifier
|
|
402
|
+
if (shouldSkipDrafter) {
|
|
403
|
+
const verifierModel = await this.getVerifierModel();
|
|
404
|
+
const verifierInfo = this.getModelInfo(verifierModel);
|
|
405
|
+
await runManager?.handleText(`⚡ Direct route: Using verifier for ${complexity} query\n`);
|
|
406
|
+
const verifierStartTime = Date.now();
|
|
407
|
+
const verifierMessage = await executeWithProtection(verifierModel, 'verifier');
|
|
408
|
+
const verifierLatency = Date.now() - verifierStartTime;
|
|
409
|
+
this.verifierCount++;
|
|
410
|
+
const verifierCost = await this.calculateMessageCost(verifierMessage, verifierModel);
|
|
411
|
+
const flowLog = `
|
|
412
|
+
┌────────────────────────────────────────────┐
|
|
413
|
+
│ ⚡ FLOW: DIRECT VERIFIER (SMART ROUTE) │
|
|
414
|
+
└────────────────────────────────────────────┘
|
|
415
|
+
Query → Complexity Check (${complexity}) → Verifier → Response
|
|
416
|
+
🧠 Smart routing: Skipped drafter for complex query
|
|
417
|
+
Model used: ${verifierInfo}
|
|
418
|
+
Latency: ${verifierLatency}ms
|
|
419
|
+
💰 Cost: $${verifierCost.toFixed(6)}
|
|
420
|
+
📊 Stats: ${this.drafterCount} drafter, ${this.verifierCount} verifier
|
|
421
|
+
`;
|
|
422
|
+
await runManager?.handleText(flowLog);
|
|
423
|
+
console.log(flowLog);
|
|
424
|
+
if (!verifierMessage.response_metadata) {
|
|
425
|
+
verifierMessage.response_metadata = {};
|
|
426
|
+
}
|
|
427
|
+
verifierMessage.response_metadata.cascadeflow = {
|
|
428
|
+
flow: 'direct_verifier',
|
|
429
|
+
complexity,
|
|
430
|
+
domain: detectedDomain,
|
|
431
|
+
latency_ms: verifierLatency,
|
|
432
|
+
cost_usd: verifierCost,
|
|
433
|
+
model_used: 'verifier',
|
|
434
|
+
reason: `Query complexity (${complexity}) warranted direct verifier routing`
|
|
435
|
+
};
|
|
436
|
+
return {
|
|
437
|
+
generations: [{
|
|
438
|
+
text: verifierMessage.content.toString(),
|
|
439
|
+
message: verifierMessage,
|
|
440
|
+
}],
|
|
441
|
+
};
|
|
442
|
+
}
|
|
443
|
+
// Step 4: Try domain-specific model first if available
|
|
444
|
+
const modelToUse = domainModel || this.drafterModel;
|
|
445
|
+
const modelType = domainModel ? `domain:${detectedDomain}` : 'drafter';
|
|
446
|
+
const modelInfo = this.getModelInfo(modelToUse);
|
|
447
|
+
await runManager?.handleText(`🎯 CascadeFlow: Trying ${modelType} model: ${modelInfo}\n`);
|
|
448
|
+
console.log(`🎯 CascadeFlow: Trying ${modelType} model: ${modelInfo}`);
|
|
106
449
|
const drafterStartTime = Date.now();
|
|
107
|
-
const drafterMessage = await
|
|
450
|
+
const drafterMessage = await executeWithProtection(modelToUse, modelType);
|
|
108
451
|
const drafterLatency = Date.now() - drafterStartTime;
|
|
109
|
-
|
|
110
|
-
|
|
452
|
+
if (domainModel && detectedDomain) {
|
|
453
|
+
this.domainCounts.set(detectedDomain, (this.domainCounts.get(detectedDomain) || 0) + 1);
|
|
454
|
+
}
|
|
455
|
+
else {
|
|
456
|
+
this.drafterCount++;
|
|
457
|
+
}
|
|
458
|
+
// Step 5: Check if response contains tool calls
|
|
459
|
+
const hasToolCalls = this.hasToolCalls(drafterMessage);
|
|
460
|
+
if (hasToolCalls) {
|
|
461
|
+
const toolCallsCount = this.getToolCallsCount(drafterMessage);
|
|
462
|
+
const toolLog = ` 🔧 Tool calls detected (${toolCallsCount}) - bypassing quality check\n`;
|
|
463
|
+
await runManager?.handleText(toolLog);
|
|
464
|
+
console.log(toolLog);
|
|
465
|
+
const flowLog = `
|
|
466
|
+
┌──────────────────────────────────────────┐
|
|
467
|
+
│ 🔧 FLOW: TOOL CALLS (DIRECT PASS) │
|
|
468
|
+
└──────────────────────────────────────────┘
|
|
469
|
+
Query → ${modelType} → Tool Calls (${toolCallsCount}) → Response
|
|
470
|
+
⚡ Tool calling: ${modelType} generated tool calls
|
|
471
|
+
Model used: ${modelInfo}
|
|
472
|
+
${detectedDomain ? `Domain: ${DOMAIN_DISPLAY_NAMES[detectedDomain]}` : ''}
|
|
473
|
+
Latency: ${drafterLatency}ms
|
|
474
|
+
📊 Stats: ${this.drafterCount} drafter, ${this.verifierCount} verifier
|
|
475
|
+
`;
|
|
476
|
+
await runManager?.handleText(flowLog);
|
|
477
|
+
console.log(flowLog);
|
|
478
|
+
if (!drafterMessage.response_metadata) {
|
|
479
|
+
drafterMessage.response_metadata = {};
|
|
480
|
+
}
|
|
481
|
+
drafterMessage.response_metadata.cascadeflow = {
|
|
482
|
+
flow: 'tool_calls_direct',
|
|
483
|
+
has_tool_calls: true,
|
|
484
|
+
tool_calls_count: toolCallsCount,
|
|
485
|
+
domain: detectedDomain,
|
|
486
|
+
latency_ms: drafterLatency,
|
|
487
|
+
model_used: modelType
|
|
488
|
+
};
|
|
489
|
+
return {
|
|
490
|
+
generations: [{
|
|
491
|
+
text: drafterMessage.content.toString(),
|
|
492
|
+
message: drafterMessage,
|
|
493
|
+
}],
|
|
494
|
+
};
|
|
495
|
+
}
|
|
496
|
+
// Step 6: Quality check with domain-aware threshold
|
|
111
497
|
const responseText = drafterMessage.content.toString();
|
|
498
|
+
const effectiveThreshold = detectedDomain
|
|
499
|
+
? (this.domainConfigs.get(detectedDomain)?.threshold ?? this.qualityThreshold)
|
|
500
|
+
: this.qualityThreshold;
|
|
112
501
|
let validationResult;
|
|
113
502
|
if (this.qualityValidator) {
|
|
114
|
-
// Use full CascadeFlow quality validator
|
|
115
|
-
const queryText = messages.map(m => m.content.toString()).join(' ');
|
|
116
503
|
try {
|
|
117
504
|
validationResult = await this.qualityValidator.validate(responseText, queryText);
|
|
118
|
-
|
|
505
|
+
validationResult.passed = validationResult.confidence >= effectiveThreshold;
|
|
506
|
+
const qualityLog = ` 📊 Quality validation: confidence=${validationResult.confidence.toFixed(2)}, threshold=${effectiveThreshold}, method=${validationResult.method}\n`;
|
|
119
507
|
await runManager?.handleText(qualityLog);
|
|
120
508
|
console.log(qualityLog);
|
|
121
509
|
if (validationResult.details?.alignmentScore) {
|
|
@@ -129,35 +517,46 @@ class CascadeChatModel extends chat_models_1.BaseChatModel {
|
|
|
129
517
|
await runManager?.handleText(errorLog);
|
|
130
518
|
console.warn(errorLog);
|
|
131
519
|
validationResult = this.simpleQualityCheck(responseText);
|
|
520
|
+
validationResult.passed = validationResult.confidence >= effectiveThreshold;
|
|
132
521
|
}
|
|
133
522
|
}
|
|
134
523
|
else {
|
|
135
|
-
// Use simple quality check (fallback)
|
|
136
524
|
validationResult = this.simpleQualityCheck(responseText);
|
|
525
|
+
validationResult.passed = validationResult.confidence >= effectiveThreshold;
|
|
137
526
|
const simpleLog = ` 📊 Simple quality check: confidence=${validationResult.confidence.toFixed(2)}\n`;
|
|
138
527
|
await runManager?.handleText(simpleLog);
|
|
139
528
|
console.log(simpleLog);
|
|
140
529
|
}
|
|
141
|
-
// Step
|
|
530
|
+
// Step 7: If quality is sufficient, return response
|
|
142
531
|
if (validationResult.passed) {
|
|
143
|
-
|
|
144
|
-
const
|
|
145
|
-
|
|
146
|
-
|
|
147
|
-
|
|
532
|
+
const drafterCost = await this.calculateMessageCost(drafterMessage, modelToUse);
|
|
533
|
+
const flowLog = `
|
|
534
|
+
┌─────────────────────────────────────────┐
|
|
535
|
+
│ ✅ FLOW: ${modelType.toUpperCase()} ACCEPTED (FAST PATH) │
|
|
536
|
+
└─────────────────────────────────────────┘
|
|
537
|
+
Query → ${detectedDomain ? `Domain(${detectedDomain}) → ` : ''}${modelType} → Quality Check ✅ → Response
|
|
538
|
+
⚡ Fast & Cheap: Used ${modelType} model only
|
|
539
|
+
Model used: ${modelInfo}
|
|
540
|
+
${detectedDomain ? `Domain: ${DOMAIN_DISPLAY_NAMES[detectedDomain]}` : ''}
|
|
541
|
+
Confidence: ${validationResult.confidence.toFixed(2)} (threshold: ${effectiveThreshold})
|
|
542
|
+
Quality score: ${validationResult.score.toFixed(2)}
|
|
543
|
+
Latency: ${drafterLatency}ms
|
|
544
|
+
💰 Cost: $${drafterCost.toFixed(6)} (${modelType} only)
|
|
545
|
+
📊 Stats: ${this.drafterCount} drafter, ${this.verifierCount} verifier, domains: ${JSON.stringify(Object.fromEntries(this.domainCounts))}
|
|
546
|
+
`;
|
|
148
547
|
await runManager?.handleText(flowLog);
|
|
149
548
|
console.log(flowLog);
|
|
150
|
-
// Add flow metadata to message for n8n UI visibility (logs only, not in response text)
|
|
151
549
|
if (!drafterMessage.response_metadata) {
|
|
152
550
|
drafterMessage.response_metadata = {};
|
|
153
551
|
}
|
|
154
552
|
drafterMessage.response_metadata.cascadeflow = {
|
|
155
|
-
flow:
|
|
553
|
+
flow: `${modelType}_accepted`,
|
|
156
554
|
confidence: validationResult.confidence,
|
|
157
555
|
quality_score: validationResult.score,
|
|
556
|
+
domain: detectedDomain,
|
|
158
557
|
latency_ms: drafterLatency,
|
|
159
|
-
|
|
160
|
-
model_used:
|
|
558
|
+
cost_usd: drafterCost,
|
|
559
|
+
model_used: modelType
|
|
161
560
|
};
|
|
162
561
|
return {
|
|
163
562
|
generations: [{
|
|
@@ -166,32 +565,50 @@ class CascadeChatModel extends chat_models_1.BaseChatModel {
|
|
|
166
565
|
}],
|
|
167
566
|
};
|
|
168
567
|
}
|
|
169
|
-
// Step
|
|
170
|
-
const escalateLog =
|
|
568
|
+
// Step 8: Otherwise, escalate to verifier
|
|
569
|
+
const escalateLog = `
|
|
570
|
+
┌────────────────────────────────────────────────┐
|
|
571
|
+
│ ⚠️ FLOW: ESCALATED TO VERIFIER (SLOW PATH) │
|
|
572
|
+
└────────────────────────────────────────────────┘
|
|
573
|
+
Query → ${detectedDomain ? `Domain(${detectedDomain}) → ` : ''}${modelType} → Quality Check ❌ → Verifier → Response
|
|
574
|
+
🔄 Escalating: ${modelType} quality too low, using verifier
|
|
575
|
+
Confidence: ${validationResult.confidence.toFixed(2)} < ${effectiveThreshold} (threshold)
|
|
576
|
+
Reason: ${validationResult.reason}
|
|
577
|
+
${modelType} latency: ${drafterLatency}ms
|
|
578
|
+
🔄 Loading verifier model...
|
|
579
|
+
`;
|
|
171
580
|
await runManager?.handleText(escalateLog);
|
|
172
581
|
console.log(escalateLog);
|
|
173
582
|
const verifierStartTime = Date.now();
|
|
174
583
|
const verifierModel = await this.getVerifierModel();
|
|
175
584
|
const verifierInfo = this.getModelInfo(verifierModel);
|
|
176
|
-
const verifierMessage = await verifierModel
|
|
585
|
+
const verifierMessage = await executeWithProtection(verifierModel, 'verifier');
|
|
177
586
|
const verifierLatency = Date.now() - verifierStartTime;
|
|
178
587
|
this.verifierCount++;
|
|
588
|
+
const verifierCost = await this.calculateMessageCost(verifierMessage, verifierModel);
|
|
589
|
+
const totalCost = verifierCost;
|
|
179
590
|
const totalLatency = drafterLatency + verifierLatency;
|
|
180
591
|
const acceptanceRate = (this.drafterCount / (this.drafterCount + this.verifierCount) * 100).toFixed(1);
|
|
181
|
-
const completionLog = ` ✅ Verifier completed successfully
|
|
592
|
+
const completionLog = ` ✅ Verifier completed successfully
|
|
593
|
+
Model used: ${verifierInfo}
|
|
594
|
+
Verifier latency: ${verifierLatency}ms
|
|
595
|
+
Total latency: ${totalLatency}ms (${modelType}: ${drafterLatency}ms + verifier: ${verifierLatency}ms)
|
|
596
|
+
💰 Cost: $${totalCost.toFixed(6)} (verifier only, ${modelType} attempt wasted)
|
|
597
|
+
📊 Stats: ${this.drafterCount} drafter (${acceptanceRate}%), ${this.verifierCount} verifier
|
|
598
|
+
`;
|
|
182
599
|
await runManager?.handleText(completionLog);
|
|
183
600
|
console.log(completionLog);
|
|
184
|
-
// Add flow metadata to message for n8n UI visibility (logs only, not in response text)
|
|
185
601
|
if (!verifierMessage.response_metadata) {
|
|
186
602
|
verifierMessage.response_metadata = {};
|
|
187
603
|
}
|
|
188
604
|
verifierMessage.response_metadata.cascadeflow = {
|
|
189
605
|
flow: 'escalated_to_verifier',
|
|
190
606
|
confidence: validationResult.confidence,
|
|
607
|
+
domain: detectedDomain,
|
|
191
608
|
drafter_latency_ms: drafterLatency,
|
|
192
609
|
verifier_latency_ms: verifierLatency,
|
|
193
610
|
total_latency_ms: totalLatency,
|
|
194
|
-
|
|
611
|
+
cost_usd: totalCost,
|
|
195
612
|
model_used: 'verifier',
|
|
196
613
|
reason: validationResult.reason
|
|
197
614
|
};
|
|
@@ -203,24 +620,35 @@ class CascadeChatModel extends chat_models_1.BaseChatModel {
|
|
|
203
620
|
};
|
|
204
621
|
}
|
|
205
622
|
catch (error) {
|
|
206
|
-
//
|
|
623
|
+
// Handle circuit breaker open state
|
|
207
624
|
const errorMsg = error instanceof Error ? error.message : String(error);
|
|
208
|
-
const
|
|
625
|
+
const isCircuitOpen = errorMsg.includes('Circuit breaker') || errorMsg.includes('circuit is open');
|
|
626
|
+
const errorLog = `
|
|
627
|
+
┌─────────────────────────────────────────────┐
|
|
628
|
+
│ ❌ FLOW: ${isCircuitOpen ? 'CIRCUIT OPEN' : 'DRAFTER ERROR'} - FALLBACK PATH │
|
|
629
|
+
└─────────────────────────────────────────────┘
|
|
630
|
+
Query → Drafter ❌ ${isCircuitOpen ? 'CIRCUIT OPEN' : 'ERROR'} → Verifier → Response
|
|
631
|
+
🔄 Fallback: ${isCircuitOpen ? 'Circuit breaker open' : 'Drafter failed'}, using verifier as backup
|
|
632
|
+
Error: ${errorMsg}
|
|
633
|
+
🔄 Loading verifier model...
|
|
634
|
+
`;
|
|
209
635
|
await runManager?.handleText(errorLog);
|
|
210
636
|
console.log(errorLog);
|
|
211
637
|
const verifierModel = await this.getVerifierModel();
|
|
212
638
|
const verifierInfo = this.getModelInfo(verifierModel);
|
|
213
639
|
const verifierMessage = await verifierModel.invoke(messages, options);
|
|
214
640
|
this.verifierCount++;
|
|
215
|
-
const fallbackCompleteLog = ` ✅ Verifier fallback completed successfully
|
|
641
|
+
const fallbackCompleteLog = ` ✅ Verifier fallback completed successfully
|
|
642
|
+
Model used: ${verifierInfo}
|
|
643
|
+
💰 Cost: Full verifier cost (fallback due to ${isCircuitOpen ? 'circuit open' : 'error'})
|
|
644
|
+
`;
|
|
216
645
|
await runManager?.handleText(fallbackCompleteLog);
|
|
217
646
|
console.log(fallbackCompleteLog);
|
|
218
|
-
// Add flow metadata to message for n8n UI visibility (logs only, not in response text)
|
|
219
647
|
if (!verifierMessage.response_metadata) {
|
|
220
648
|
verifierMessage.response_metadata = {};
|
|
221
649
|
}
|
|
222
650
|
verifierMessage.response_metadata.cascadeflow = {
|
|
223
|
-
flow: 'error_fallback',
|
|
651
|
+
flow: isCircuitOpen ? 'circuit_breaker_fallback' : 'error_fallback',
|
|
224
652
|
error: errorMsg,
|
|
225
653
|
cost_savings_percent: 0,
|
|
226
654
|
model_used: 'verifier'
|
|
@@ -233,6 +661,224 @@ class CascadeChatModel extends chat_models_1.BaseChatModel {
|
|
|
233
661
|
};
|
|
234
662
|
}
|
|
235
663
|
}
|
|
664
|
+
/**
|
|
665
|
+
* Streaming implementation for real-time cascade feedback
|
|
666
|
+
*/
|
|
667
|
+
async *_streamResponseChunks(messages, options, runManager) {
|
|
668
|
+
try {
|
|
669
|
+
const queryText = messages.map(m => m.content.toString()).join(' ');
|
|
670
|
+
// Detect domain for streaming
|
|
671
|
+
let detectedDomain = null;
|
|
672
|
+
let modelToUse = this.drafterModel;
|
|
673
|
+
if (this.enabledDomains.length > 0) {
|
|
674
|
+
detectedDomain = await this.detectDomain(queryText);
|
|
675
|
+
if (detectedDomain) {
|
|
676
|
+
const domainConfig = this.domainConfigs.get(detectedDomain);
|
|
677
|
+
if (domainConfig?.model) {
|
|
678
|
+
modelToUse = domainConfig.model;
|
|
679
|
+
}
|
|
680
|
+
}
|
|
681
|
+
}
|
|
682
|
+
const modelInfo = this.getModelInfo(modelToUse);
|
|
683
|
+
const modelType = detectedDomain ? `domain:${detectedDomain}` : 'drafter';
|
|
684
|
+
await runManager?.handleText(`🎯 CascadeFlow (Streaming): Trying ${modelType} model: ${modelInfo}\n`);
|
|
685
|
+
console.log(`🎯 CascadeFlow (Streaming): Trying ${modelType} model: ${modelInfo}`);
|
|
686
|
+
const drafterStartTime = Date.now();
|
|
687
|
+
let fullDrafterContent = '';
|
|
688
|
+
let lastChunk = null;
|
|
689
|
+
const drafterStream = await modelToUse.stream(messages, options);
|
|
690
|
+
for await (const chunk of drafterStream) {
|
|
691
|
+
fullDrafterContent += chunk.content;
|
|
692
|
+
const generationChunk = new outputs_1.ChatGenerationChunk({
|
|
693
|
+
text: chunk.content.toString(),
|
|
694
|
+
message: chunk,
|
|
695
|
+
});
|
|
696
|
+
lastChunk = generationChunk;
|
|
697
|
+
yield generationChunk;
|
|
698
|
+
}
|
|
699
|
+
const drafterLatency = Date.now() - drafterStartTime;
|
|
700
|
+
this.drafterCount++;
|
|
701
|
+
if (lastChunk && this.hasToolCalls(lastChunk.message)) {
|
|
702
|
+
const toolCallsCount = this.getToolCallsCount(lastChunk.message);
|
|
703
|
+
const toolLog = `\n🔧 Tool calls detected (${toolCallsCount}) - cascade complete\n`;
|
|
704
|
+
await runManager?.handleText(toolLog);
|
|
705
|
+
console.log(toolLog);
|
|
706
|
+
return;
|
|
707
|
+
}
|
|
708
|
+
await runManager?.handleText(`\n📊 Running quality check...\n`);
|
|
709
|
+
const effectiveThreshold = detectedDomain
|
|
710
|
+
? (this.domainConfigs.get(detectedDomain)?.threshold ?? this.qualityThreshold)
|
|
711
|
+
: this.qualityThreshold;
|
|
712
|
+
let validationResult;
|
|
713
|
+
if (this.qualityValidator) {
|
|
714
|
+
try {
|
|
715
|
+
validationResult = await this.qualityValidator.validate(fullDrafterContent, queryText);
|
|
716
|
+
validationResult.passed = validationResult.confidence >= effectiveThreshold;
|
|
717
|
+
await runManager?.handleText(` Confidence: ${validationResult.confidence.toFixed(2)} (threshold: ${effectiveThreshold})\n`);
|
|
718
|
+
}
|
|
719
|
+
catch (e) {
|
|
720
|
+
validationResult = this.simpleQualityCheck(fullDrafterContent);
|
|
721
|
+
validationResult.passed = validationResult.confidence >= effectiveThreshold;
|
|
722
|
+
}
|
|
723
|
+
}
|
|
724
|
+
else {
|
|
725
|
+
validationResult = this.simpleQualityCheck(fullDrafterContent);
|
|
726
|
+
validationResult.passed = validationResult.confidence >= effectiveThreshold;
|
|
727
|
+
}
|
|
728
|
+
if (validationResult.passed) {
|
|
729
|
+
await runManager?.handleText(`✅ Quality check passed - cascade complete (${modelType} accepted)\n`);
|
|
730
|
+
console.log(`✅ Streaming: ${modelType} accepted (${drafterLatency}ms)`);
|
|
731
|
+
return;
|
|
732
|
+
}
|
|
733
|
+
await runManager?.handleText(`\n⚠️ Quality check failed - escalating to verifier...\n`);
|
|
734
|
+
console.log(`⚠️ Streaming: Escalating to verifier (confidence ${validationResult.confidence.toFixed(2)} < ${effectiveThreshold})`);
|
|
735
|
+
const verifierModel = await this.getVerifierModel();
|
|
736
|
+
const verifierInfo = this.getModelInfo(verifierModel);
|
|
737
|
+
await runManager?.handleText(`🔄 Streaming verifier response from ${verifierInfo}...\n`);
|
|
738
|
+
const verifierStartTime = Date.now();
|
|
739
|
+
const verifierStream = await verifierModel.stream(messages, options);
|
|
740
|
+
this.verifierCount++;
|
|
741
|
+
for await (const chunk of verifierStream) {
|
|
742
|
+
yield new outputs_1.ChatGenerationChunk({
|
|
743
|
+
text: chunk.content.toString(),
|
|
744
|
+
message: chunk,
|
|
745
|
+
});
|
|
746
|
+
}
|
|
747
|
+
const verifierLatency = Date.now() - verifierStartTime;
|
|
748
|
+
await runManager?.handleText(`\n✅ Verifier streaming complete (${verifierLatency}ms)\n`);
|
|
749
|
+
console.log(`✅ Streaming: Verifier complete (${verifierLatency}ms)`);
|
|
750
|
+
}
|
|
751
|
+
catch (error) {
|
|
752
|
+
const errorMsg = error instanceof Error ? error.message : String(error);
|
|
753
|
+
await runManager?.handleText(`\n❌ Drafter error - falling back to verifier: ${errorMsg}\n`);
|
|
754
|
+
console.log(`❌ Streaming: Drafter error, using verifier fallback`);
|
|
755
|
+
const verifierModel = await this.getVerifierModel();
|
|
756
|
+
const verifierStream = await verifierModel.stream(messages, options);
|
|
757
|
+
this.verifierCount++;
|
|
758
|
+
for await (const chunk of verifierStream) {
|
|
759
|
+
yield new outputs_1.ChatGenerationChunk({
|
|
760
|
+
text: chunk.content.toString(),
|
|
761
|
+
message: chunk,
|
|
762
|
+
});
|
|
763
|
+
}
|
|
764
|
+
}
|
|
765
|
+
}
|
|
766
|
+
}
|
|
767
|
+
// =============================================================================
|
|
768
|
+
// Generate dynamic inputs based on enabled domains
|
|
769
|
+
// =============================================================================
|
|
770
|
+
function generateDomainInputs(enabledDomains) {
|
|
771
|
+
const baseInputs = [
|
|
772
|
+
{
|
|
773
|
+
displayName: 'Verifier',
|
|
774
|
+
type: 'ai_languageModel',
|
|
775
|
+
maxConnections: 1,
|
|
776
|
+
required: true,
|
|
777
|
+
},
|
|
778
|
+
{
|
|
779
|
+
displayName: 'Drafter',
|
|
780
|
+
type: 'ai_languageModel',
|
|
781
|
+
maxConnections: 1,
|
|
782
|
+
required: true,
|
|
783
|
+
},
|
|
784
|
+
];
|
|
785
|
+
// Add domain-specific model inputs for each enabled domain
|
|
786
|
+
for (const domain of enabledDomains) {
|
|
787
|
+
baseInputs.push({
|
|
788
|
+
displayName: `${DOMAIN_DISPLAY_NAMES[domain]} Model`,
|
|
789
|
+
type: 'ai_languageModel',
|
|
790
|
+
maxConnections: 1,
|
|
791
|
+
required: false,
|
|
792
|
+
});
|
|
793
|
+
}
|
|
794
|
+
return baseInputs;
|
|
795
|
+
}
|
|
796
|
+
// =============================================================================
|
|
797
|
+
// Generate domain toggle properties for n8n UI
|
|
798
|
+
// =============================================================================
|
|
799
|
+
function generateDomainProperties() {
|
|
800
|
+
const domainOptions = Object.entries(DOMAINS).map(([key, value]) => ({
|
|
801
|
+
name: DOMAIN_DISPLAY_NAMES[value],
|
|
802
|
+
value: value,
|
|
803
|
+
description: DOMAIN_DESCRIPTIONS[value],
|
|
804
|
+
}));
|
|
805
|
+
return [
|
|
806
|
+
{
|
|
807
|
+
displayName: 'Enable Domain Routing',
|
|
808
|
+
name: 'enableDomainRouting',
|
|
809
|
+
type: 'boolean',
|
|
810
|
+
default: false,
|
|
811
|
+
description: 'Whether to enable intelligent routing based on detected query domain (math, code, legal, etc.)',
|
|
812
|
+
},
|
|
813
|
+
{
|
|
814
|
+
displayName: 'Enabled Domains',
|
|
815
|
+
name: 'enabledDomains',
|
|
816
|
+
type: 'multiOptions',
|
|
817
|
+
options: domainOptions,
|
|
818
|
+
default: [],
|
|
819
|
+
displayOptions: {
|
|
820
|
+
show: {
|
|
821
|
+
enableDomainRouting: [true],
|
|
822
|
+
},
|
|
823
|
+
},
|
|
824
|
+
description: 'Select which domains to enable for intelligent routing. Connect domain-specific models for each.',
|
|
825
|
+
},
|
|
826
|
+
{
|
|
827
|
+
displayName: 'Domain-Specific Settings',
|
|
828
|
+
name: 'domainSettings',
|
|
829
|
+
type: 'fixedCollection',
|
|
830
|
+
typeOptions: {
|
|
831
|
+
multipleValues: true,
|
|
832
|
+
},
|
|
833
|
+
displayOptions: {
|
|
834
|
+
show: {
|
|
835
|
+
enableDomainRouting: [true],
|
|
836
|
+
},
|
|
837
|
+
},
|
|
838
|
+
default: {},
|
|
839
|
+
options: [
|
|
840
|
+
{
|
|
841
|
+
name: 'domainConfig',
|
|
842
|
+
displayName: 'Domain Configuration',
|
|
843
|
+
values: [
|
|
844
|
+
{
|
|
845
|
+
displayName: 'Domain',
|
|
846
|
+
name: 'domain',
|
|
847
|
+
type: 'options',
|
|
848
|
+
options: domainOptions,
|
|
849
|
+
default: 'general',
|
|
850
|
+
description: 'Select the domain to configure',
|
|
851
|
+
},
|
|
852
|
+
{
|
|
853
|
+
displayName: 'Quality Threshold',
|
|
854
|
+
name: 'threshold',
|
|
855
|
+
type: 'number',
|
|
856
|
+
default: 0.64,
|
|
857
|
+
typeOptions: {
|
|
858
|
+
minValue: 0,
|
|
859
|
+
maxValue: 1,
|
|
860
|
+
numberPrecision: 2,
|
|
861
|
+
},
|
|
862
|
+
description: 'Quality threshold for this domain (overrides global threshold)',
|
|
863
|
+
},
|
|
864
|
+
{
|
|
865
|
+
displayName: 'Temperature',
|
|
866
|
+
name: 'temperature',
|
|
867
|
+
type: 'number',
|
|
868
|
+
default: 0.7,
|
|
869
|
+
typeOptions: {
|
|
870
|
+
minValue: 0,
|
|
871
|
+
maxValue: 2,
|
|
872
|
+
numberPrecision: 1,
|
|
873
|
+
},
|
|
874
|
+
description: 'Temperature setting for this domain',
|
|
875
|
+
},
|
|
876
|
+
],
|
|
877
|
+
},
|
|
878
|
+
],
|
|
879
|
+
description: 'Configure per-domain quality thresholds and temperatures',
|
|
880
|
+
},
|
|
881
|
+
];
|
|
236
882
|
}
|
|
237
883
|
class LmChatCascadeFlow {
|
|
238
884
|
constructor() {
|
|
@@ -241,8 +887,8 @@ class LmChatCascadeFlow {
|
|
|
241
887
|
name: 'lmChatCascadeFlow',
|
|
242
888
|
icon: 'file:cascadeflow.svg',
|
|
243
889
|
group: ['transform'],
|
|
244
|
-
version:
|
|
245
|
-
description: 'Smart AI model cascading with 40-85% cost savings.
|
|
890
|
+
version: 2,
|
|
891
|
+
description: 'Smart AI model cascading with 40-85% cost savings. Supports 16 domains with domain-specific model routing.',
|
|
246
892
|
defaults: {
|
|
247
893
|
name: 'CascadeFlow',
|
|
248
894
|
},
|
|
@@ -259,10 +905,6 @@ class LmChatCascadeFlow {
|
|
|
259
905
|
],
|
|
260
906
|
},
|
|
261
907
|
},
|
|
262
|
-
// Sub-node: accepts AI model connections
|
|
263
|
-
// Visual layout: Index 0 = "Verifier" label (top), Index 1 = "Drafter" label (bottom)
|
|
264
|
-
// Actual logic: Index 0 = VERIFIER model (only if needed), Index 1 = DRAFTER model (tried first)
|
|
265
|
-
// User connects: TOP port = verifier model, BOTTOM port = drafter model
|
|
266
908
|
// eslint-disable-next-line n8n-nodes-base/node-class-description-inputs-wrong-regular-node
|
|
267
909
|
inputs: [
|
|
268
910
|
{
|
|
@@ -277,8 +919,56 @@ class LmChatCascadeFlow {
|
|
|
277
919
|
maxConnections: 1,
|
|
278
920
|
required: true,
|
|
279
921
|
},
|
|
922
|
+
// Domain-specific model inputs (optional, up to 16)
|
|
923
|
+
{
|
|
924
|
+
displayName: 'Code Model',
|
|
925
|
+
type: 'ai_languageModel',
|
|
926
|
+
maxConnections: 1,
|
|
927
|
+
required: false,
|
|
928
|
+
},
|
|
929
|
+
{
|
|
930
|
+
displayName: 'Math Model',
|
|
931
|
+
type: 'ai_languageModel',
|
|
932
|
+
maxConnections: 1,
|
|
933
|
+
required: false,
|
|
934
|
+
},
|
|
935
|
+
{
|
|
936
|
+
displayName: 'Data Model',
|
|
937
|
+
type: 'ai_languageModel',
|
|
938
|
+
maxConnections: 1,
|
|
939
|
+
required: false,
|
|
940
|
+
},
|
|
941
|
+
{
|
|
942
|
+
displayName: 'Creative Model',
|
|
943
|
+
type: 'ai_languageModel',
|
|
944
|
+
maxConnections: 1,
|
|
945
|
+
required: false,
|
|
946
|
+
},
|
|
947
|
+
{
|
|
948
|
+
displayName: 'Legal Model',
|
|
949
|
+
type: 'ai_languageModel',
|
|
950
|
+
maxConnections: 1,
|
|
951
|
+
required: false,
|
|
952
|
+
},
|
|
953
|
+
{
|
|
954
|
+
displayName: 'Medical Model',
|
|
955
|
+
type: 'ai_languageModel',
|
|
956
|
+
maxConnections: 1,
|
|
957
|
+
required: false,
|
|
958
|
+
},
|
|
959
|
+
{
|
|
960
|
+
displayName: 'Financial Model',
|
|
961
|
+
type: 'ai_languageModel',
|
|
962
|
+
maxConnections: 1,
|
|
963
|
+
required: false,
|
|
964
|
+
},
|
|
965
|
+
{
|
|
966
|
+
displayName: 'Science Model',
|
|
967
|
+
type: 'ai_languageModel',
|
|
968
|
+
maxConnections: 1,
|
|
969
|
+
required: false,
|
|
970
|
+
},
|
|
280
971
|
],
|
|
281
|
-
// Outputs an AI model that can be connected to Chain nodes
|
|
282
972
|
// eslint-disable-next-line n8n-nodes-base/node-class-description-outputs-wrong
|
|
283
973
|
outputs: ['ai_languageModel'],
|
|
284
974
|
outputNames: ['Model'],
|
|
@@ -295,19 +985,70 @@ class LmChatCascadeFlow {
|
|
|
295
985
|
},
|
|
296
986
|
description: 'Minimum quality score (0-1) to accept drafter response. Lower = more cost savings, higher = better quality.',
|
|
297
987
|
},
|
|
988
|
+
{
|
|
989
|
+
displayName: 'Enable Semantic Validation',
|
|
990
|
+
name: 'useSemanticValidation',
|
|
991
|
+
type: 'boolean',
|
|
992
|
+
default: true,
|
|
993
|
+
description: 'Whether to use ML-based semantic similarity validation for better quality detection',
|
|
994
|
+
},
|
|
995
|
+
{
|
|
996
|
+
displayName: 'Enable Alignment Scoring',
|
|
997
|
+
name: 'useAlignmentScoring',
|
|
998
|
+
type: 'boolean',
|
|
999
|
+
default: true,
|
|
1000
|
+
description: 'Whether to score query-response alignment for improved validation accuracy',
|
|
1001
|
+
},
|
|
1002
|
+
{
|
|
1003
|
+
displayName: 'Enable Complexity Routing',
|
|
1004
|
+
name: 'useComplexityRouting',
|
|
1005
|
+
type: 'boolean',
|
|
1006
|
+
default: true,
|
|
1007
|
+
description: 'Whether to route queries directly to the verifier based on detected complexity',
|
|
1008
|
+
},
|
|
1009
|
+
{
|
|
1010
|
+
displayName: 'Enable Circuit Breaker',
|
|
1011
|
+
name: 'useCircuitBreaker',
|
|
1012
|
+
type: 'boolean',
|
|
1013
|
+
default: true,
|
|
1014
|
+
description: 'Whether to use circuit breaker for fault tolerance (auto-fallback on repeated failures)',
|
|
1015
|
+
},
|
|
1016
|
+
// Domain routing settings
|
|
1017
|
+
...generateDomainProperties(),
|
|
298
1018
|
],
|
|
299
1019
|
};
|
|
300
1020
|
}
|
|
301
1021
|
async supplyData() {
|
|
302
|
-
// Get parameters
|
|
1022
|
+
// Get core parameters
|
|
303
1023
|
const qualityThreshold = this.getNodeParameter('qualityThreshold', 0, 0.64);
|
|
304
|
-
|
|
1024
|
+
const useSemanticValidation = this.getNodeParameter('useSemanticValidation', 0, true);
|
|
1025
|
+
const useAlignmentScoring = this.getNodeParameter('useAlignmentScoring', 0, true);
|
|
1026
|
+
const useComplexityRouting = this.getNodeParameter('useComplexityRouting', 0, true);
|
|
1027
|
+
const useCircuitBreaker = this.getNodeParameter('useCircuitBreaker', 0, true);
|
|
1028
|
+
// Get domain routing parameters
|
|
1029
|
+
const enableDomainRouting = this.getNodeParameter('enableDomainRouting', 0, false);
|
|
1030
|
+
const enabledDomains = enableDomainRouting
|
|
1031
|
+
? this.getNodeParameter('enabledDomains', 0, [])
|
|
1032
|
+
: [];
|
|
1033
|
+
// Get domain-specific settings
|
|
1034
|
+
const domainSettingsRaw = this.getNodeParameter('domainSettings', 0, { domainConfig: [] });
|
|
1035
|
+
const domainConfigs = new Map();
|
|
1036
|
+
if (domainSettingsRaw?.domainConfig) {
|
|
1037
|
+
for (const config of domainSettingsRaw.domainConfig) {
|
|
1038
|
+
domainConfigs.set(config.domain, {
|
|
1039
|
+
enabled: enabledDomains.includes(config.domain),
|
|
1040
|
+
threshold: config.threshold || qualityThreshold,
|
|
1041
|
+
temperature: config.temperature || 0.7,
|
|
1042
|
+
});
|
|
1043
|
+
}
|
|
1044
|
+
}
|
|
1045
|
+
// Get the drafter model (index 1 - bottom port, labeled "Drafter")
|
|
305
1046
|
const drafterData = await this.getInputConnectionData('ai_languageModel', 1);
|
|
306
1047
|
const drafterModel = (Array.isArray(drafterData) ? drafterData[0] : drafterData);
|
|
307
1048
|
if (!drafterModel) {
|
|
308
1049
|
throw new n8n_workflow_1.NodeOperationError(this.getNode(), 'Drafter model is required. Please connect your DRAFTER model to the BOTTOM port (labeled "Drafter").');
|
|
309
1050
|
}
|
|
310
|
-
// Create
|
|
1051
|
+
// Create lazy loader for verifier (index 0 - top port, labeled "Verifier")
|
|
311
1052
|
const verifierModelGetter = async () => {
|
|
312
1053
|
const verifierData = await this.getInputConnectionData('ai_languageModel', 0);
|
|
313
1054
|
const verifierModel = (Array.isArray(verifierData) ? verifierData[0] : verifierData);
|
|
@@ -316,19 +1057,79 @@ class LmChatCascadeFlow {
|
|
|
316
1057
|
}
|
|
317
1058
|
return verifierModel;
|
|
318
1059
|
};
|
|
319
|
-
//
|
|
1060
|
+
// Map domain inputs to their index positions (starting at index 2)
|
|
1061
|
+
const domainInputMap = {
|
|
1062
|
+
code: 2,
|
|
1063
|
+
math: 3,
|
|
1064
|
+
data: 4,
|
|
1065
|
+
creative: 5,
|
|
1066
|
+
legal: 6,
|
|
1067
|
+
medical: 7,
|
|
1068
|
+
financial: 8,
|
|
1069
|
+
science: 9,
|
|
1070
|
+
// Additional domains use drafter as fallback
|
|
1071
|
+
structured: -1,
|
|
1072
|
+
rag: -1,
|
|
1073
|
+
conversation: -1,
|
|
1074
|
+
tool: -1,
|
|
1075
|
+
summary: -1,
|
|
1076
|
+
translation: -1,
|
|
1077
|
+
multimodal: -1,
|
|
1078
|
+
general: -1,
|
|
1079
|
+
};
|
|
1080
|
+
// Create domain model getters for enabled domains
|
|
1081
|
+
const domainModelGetters = new Map();
|
|
1082
|
+
for (const domain of enabledDomains) {
|
|
1083
|
+
const inputIndex = domainInputMap[domain];
|
|
1084
|
+
if (inputIndex >= 0) {
|
|
1085
|
+
domainModelGetters.set(domain, async () => {
|
|
1086
|
+
try {
|
|
1087
|
+
const domainData = await this.getInputConnectionData('ai_languageModel', inputIndex);
|
|
1088
|
+
const domainModel = (Array.isArray(domainData) ? domainData[0] : domainData);
|
|
1089
|
+
if (domainModel) {
|
|
1090
|
+
// Store in domain config
|
|
1091
|
+
const config = domainConfigs.get(domain) || {
|
|
1092
|
+
enabled: true,
|
|
1093
|
+
threshold: qualityThreshold,
|
|
1094
|
+
temperature: 0.7,
|
|
1095
|
+
};
|
|
1096
|
+
config.model = domainModel;
|
|
1097
|
+
domainConfigs.set(domain, config);
|
|
1098
|
+
return domainModel;
|
|
1099
|
+
}
|
|
1100
|
+
}
|
|
1101
|
+
catch (e) {
|
|
1102
|
+
console.log(`No ${domain} model connected, using drafter as fallback`);
|
|
1103
|
+
}
|
|
1104
|
+
return undefined;
|
|
1105
|
+
});
|
|
1106
|
+
}
|
|
1107
|
+
}
|
|
1108
|
+
// Eagerly load domain models
|
|
1109
|
+
for (const [domain, getter] of domainModelGetters.entries()) {
|
|
1110
|
+
await getter();
|
|
1111
|
+
}
|
|
1112
|
+
// Debug info
|
|
320
1113
|
const getDrafterInfo = () => {
|
|
321
1114
|
const type = typeof drafterModel._llmType === 'function' ? drafterModel._llmType() : 'unknown';
|
|
322
1115
|
const modelName = drafterModel.modelName || drafterModel.model || 'unknown';
|
|
323
1116
|
return `${type} (${modelName})`;
|
|
324
1117
|
};
|
|
325
|
-
console.log('🚀 CascadeFlow initialized');
|
|
1118
|
+
console.log('🚀 CascadeFlow v2 initialized');
|
|
326
1119
|
console.log(` PORT MAPPING:`);
|
|
327
|
-
console.log(` ├─ TOP port (labeled "Verifier") → VERIFIER model: lazy-loaded
|
|
1120
|
+
console.log(` ├─ TOP port (labeled "Verifier") → VERIFIER model: lazy-loaded`);
|
|
328
1121
|
console.log(` └─ BOTTOM port (labeled "Drafter") → DRAFTER model: ${getDrafterInfo()}`);
|
|
329
1122
|
console.log(` Quality threshold: ${qualityThreshold}`);
|
|
330
|
-
|
|
331
|
-
|
|
1123
|
+
console.log(` Semantic validation: ${useSemanticValidation ? 'enabled' : 'disabled'}`);
|
|
1124
|
+
console.log(` Alignment scoring: ${useAlignmentScoring ? 'enabled' : 'disabled'}`);
|
|
1125
|
+
console.log(` Complexity routing: ${useComplexityRouting ? 'enabled' : 'disabled'}`);
|
|
1126
|
+
console.log(` Circuit breaker: ${useCircuitBreaker ? 'enabled' : 'disabled'}`);
|
|
1127
|
+
console.log(` Domain routing: ${enableDomainRouting ? 'enabled' : 'disabled'}`);
|
|
1128
|
+
if (enabledDomains.length > 0) {
|
|
1129
|
+
console.log(` Enabled domains: ${enabledDomains.join(', ')}`);
|
|
1130
|
+
}
|
|
1131
|
+
// Create and return the cascade model
|
|
1132
|
+
const cascadeModel = new CascadeChatModel(drafterModel, verifierModelGetter, qualityThreshold, useSemanticValidation, useAlignmentScoring, useComplexityRouting, enableDomainRouting, enabledDomains, domainModelGetters, domainConfigs, useCircuitBreaker);
|
|
332
1133
|
return {
|
|
333
1134
|
response: cascadeModel,
|
|
334
1135
|
};
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"LmChatCascadeFlow.node.js","sourceRoot":"","sources":["../../../nodes/LmChatCascadeFlow/LmChatCascadeFlow.node.ts"],"names":[],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"LmChatCascadeFlow.node.js","sourceRoot":"","sources":["../../../nodes/LmChatCascadeFlow/LmChatCascadeFlow.node.ts"],"names":[],"mappings":"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"}
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@cascadeflow/n8n-nodes-cascadeflow",
|
|
3
|
-
"version": "0.
|
|
3
|
+
"version": "0.6.1",
|
|
4
4
|
"description": "n8n node for cascadeflow - Smart AI model cascading with 40-85% cost savings",
|
|
5
5
|
"keywords": [
|
|
6
6
|
"n8n-community-node-package",
|
|
@@ -56,6 +56,6 @@
|
|
|
56
56
|
},
|
|
57
57
|
"dependencies": {
|
|
58
58
|
"@langchain/core": "^0.3.0",
|
|
59
|
-
"@cascadeflow/core": "^
|
|
59
|
+
"@cascadeflow/core": "^0.6.0"
|
|
60
60
|
}
|
|
61
61
|
}
|