@cascadeflow/n8n-nodes-cascadeflow 0.4.7 → 0.4.9
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/nodes/CascadeFlow/CascadeFlow.node.d.ts.map +1 -1
- package/dist/nodes/CascadeFlow/CascadeFlow.node.js +43 -8
- package/dist/nodes/CascadeFlow/CascadeFlow.node.js.map +1 -1
- package/dist/nodes/CascadeFlow/cascadeflow.svg +2 -2
- package/dist/nodes/LmChatCascadeFlow/LmChatCascadeFlow.node.d.ts +6 -0
- package/dist/nodes/LmChatCascadeFlow/LmChatCascadeFlow.node.d.ts.map +1 -0
- package/dist/nodes/LmChatCascadeFlow/LmChatCascadeFlow.node.js +124 -0
- package/dist/nodes/LmChatCascadeFlow/LmChatCascadeFlow.node.js.map +1 -0
- package/dist/nodes/LmChatCascadeFlow/cascadeflow.svg +15 -0
- package/package.json +5 -3
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"CascadeFlow.node.d.ts","sourceRoot":"","sources":["../../../nodes/CascadeFlow/CascadeFlow.node.ts"],"names":[],"mappings":"AAAA,OAAO,EACL,iBAAiB,EACjB,kBAAkB,EAClB,SAAS,EACT,oBAAoB,EAErB,MAAM,cAAc,CAAC;AAItB,qBAAa,WAAY,YAAW,SAAS;IAC3C,WAAW,EAAE,oBAAoB,
|
|
1
|
+
{"version":3,"file":"CascadeFlow.node.d.ts","sourceRoot":"","sources":["../../../nodes/CascadeFlow/CascadeFlow.node.ts"],"names":[],"mappings":"AAAA,OAAO,EACL,iBAAiB,EACjB,kBAAkB,EAClB,SAAS,EACT,oBAAoB,EAErB,MAAM,cAAc,CAAC;AAItB,qBAAa,WAAY,YAAW,SAAS;IAC3C,WAAW,EAAE,oBAAoB,CAmE/B;IAEI,OAAO,CAAC,IAAI,EAAE,iBAAiB,GAAG,OAAO,CAAC,kBAAkB,EAAE,EAAE,CAAC;CAuOxE"}
|
|
@@ -18,8 +18,10 @@ class CascadeFlow {
|
|
|
18
18
|
},
|
|
19
19
|
// eslint-disable-next-line n8n-nodes-base/node-class-description-inputs-wrong-regular-node
|
|
20
20
|
inputs: ['main', 'main', 'main'],
|
|
21
|
-
inputNames: ['
|
|
22
|
-
outputs
|
|
21
|
+
inputNames: ['Chat/Agent Output', 'Drafter Provider', 'Verifier Provider'],
|
|
22
|
+
// eslint-disable-next-line n8n-nodes-base/node-class-description-outputs-wrong
|
|
23
|
+
outputs: ['main', 'main'],
|
|
24
|
+
outputNames: ['Draft Accepted', 'Escalated to Verifier'],
|
|
23
25
|
properties: [
|
|
24
26
|
// Quality Threshold
|
|
25
27
|
{
|
|
@@ -34,9 +36,17 @@ class CascadeFlow {
|
|
|
34
36
|
},
|
|
35
37
|
description: 'Minimum quality score (0-1) to accept drafter response. Lower = more cost savings, higher = better quality.',
|
|
36
38
|
},
|
|
39
|
+
// Split Output by Path
|
|
40
|
+
{
|
|
41
|
+
displayName: 'Split Output by Path',
|
|
42
|
+
name: 'splitOutput',
|
|
43
|
+
type: 'boolean',
|
|
44
|
+
default: false,
|
|
45
|
+
description: 'Whether to split output into two connectors: one for draft-accepted responses, one for escalated responses. Enables visual flow tracking.',
|
|
46
|
+
},
|
|
37
47
|
// Output Options
|
|
38
48
|
{
|
|
39
|
-
displayName: 'Output',
|
|
49
|
+
displayName: 'Output Format',
|
|
40
50
|
name: 'output',
|
|
41
51
|
type: 'options',
|
|
42
52
|
default: 'contentOnly',
|
|
@@ -64,6 +74,7 @@ class CascadeFlow {
|
|
|
64
74
|
}
|
|
65
75
|
async execute() {
|
|
66
76
|
const returnData = [];
|
|
77
|
+
const escalatedData = [];
|
|
67
78
|
// Get data from all three inputs
|
|
68
79
|
const inputData = this.getInputData(0); // Input (prompt/query)
|
|
69
80
|
const drafterInputData = this.getInputData(1); // Drafter model
|
|
@@ -151,6 +162,8 @@ class CascadeFlow {
|
|
|
151
162
|
const drafterConfig = extractModelConfig(drafterInputData, 'Drafter Model');
|
|
152
163
|
const verifierConfig = extractModelConfig(verifierInputData, 'Verifier Model');
|
|
153
164
|
const modelConfigs = [drafterConfig, verifierConfig];
|
|
165
|
+
// Get split output setting (same for all items)
|
|
166
|
+
const splitOutput = this.getNodeParameter('splitOutput', 0, false);
|
|
154
167
|
// Process each input item
|
|
155
168
|
for (let itemIndex = 0; itemIndex < inputData.length; itemIndex++) {
|
|
156
169
|
try {
|
|
@@ -222,26 +235,48 @@ class CascadeFlow {
|
|
|
222
235
|
default:
|
|
223
236
|
outputData = result;
|
|
224
237
|
}
|
|
225
|
-
|
|
238
|
+
const outputItem = {
|
|
226
239
|
json: outputData,
|
|
227
240
|
pairedItem: { item: itemIndex },
|
|
228
|
-
}
|
|
241
|
+
};
|
|
242
|
+
// Route to appropriate output based on splitOutput setting
|
|
243
|
+
if (splitOutput) {
|
|
244
|
+
if (result.draftAccepted) {
|
|
245
|
+
returnData.push(outputItem);
|
|
246
|
+
}
|
|
247
|
+
else {
|
|
248
|
+
escalatedData.push(outputItem);
|
|
249
|
+
}
|
|
250
|
+
}
|
|
251
|
+
else {
|
|
252
|
+
returnData.push(outputItem);
|
|
253
|
+
}
|
|
229
254
|
}
|
|
230
255
|
catch (error) {
|
|
231
256
|
if (this.continueOnFail()) {
|
|
232
257
|
const errorMessage = error instanceof Error ? error.message : String(error);
|
|
233
|
-
|
|
258
|
+
const errorItem = {
|
|
234
259
|
json: {
|
|
235
260
|
error: errorMessage,
|
|
236
261
|
},
|
|
237
262
|
pairedItem: { item: itemIndex },
|
|
238
|
-
}
|
|
263
|
+
};
|
|
264
|
+
// Errors always go to first output
|
|
265
|
+
returnData.push(errorItem);
|
|
239
266
|
continue;
|
|
240
267
|
}
|
|
241
268
|
throw error;
|
|
242
269
|
}
|
|
243
270
|
}
|
|
244
|
-
|
|
271
|
+
// Return appropriate outputs based on splitOutput setting
|
|
272
|
+
if (splitOutput) {
|
|
273
|
+
// Split mode: Draft accepted goes to output 0, escalated to output 1
|
|
274
|
+
return [returnData, escalatedData];
|
|
275
|
+
}
|
|
276
|
+
else {
|
|
277
|
+
// Single output mode: All results go to output 0, output 1 is empty
|
|
278
|
+
return [returnData, []];
|
|
279
|
+
}
|
|
245
280
|
}
|
|
246
281
|
}
|
|
247
282
|
exports.CascadeFlow = CascadeFlow;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"CascadeFlow.node.js","sourceRoot":"","sources":["../../../nodes/CascadeFlow/CascadeFlow.node.ts"],"names":[],"mappings":";;;AAAA,+CAMsB;AAEtB,4CAA8D;AAE9D,MAAa,WAAW;IAAxB;QACE,gBAAW,GAAyB;YAClC,WAAW,EAAE,aAAa;YAC1B,IAAI,EAAE,aAAa;YACnB,IAAI,EAAE,sBAAsB;YAC5B,KAAK,EAAE,CAAC,WAAW,CAAC;YACpB,OAAO,EAAE,CAAC;YACV,QAAQ,EAAE,oBAAoB;YAC9B,WAAW,EAAE,mDAAmD;YAChE,QAAQ,EAAE;gBACR,IAAI,EAAE,aAAa;aACpB;YACD,2FAA2F;YAC3F,MAAM,EAAE,CAAC,MAAM,EAAE,MAAM,EAAE,MAAM,CAAC;YAChC,UAAU,EAAE,CAAC,
|
|
1
|
+
{"version":3,"file":"CascadeFlow.node.js","sourceRoot":"","sources":["../../../nodes/CascadeFlow/CascadeFlow.node.ts"],"names":[],"mappings":";;;AAAA,+CAMsB;AAEtB,4CAA8D;AAE9D,MAAa,WAAW;IAAxB;QACE,gBAAW,GAAyB;YAClC,WAAW,EAAE,aAAa;YAC1B,IAAI,EAAE,aAAa;YACnB,IAAI,EAAE,sBAAsB;YAC5B,KAAK,EAAE,CAAC,WAAW,CAAC;YACpB,OAAO,EAAE,CAAC;YACV,QAAQ,EAAE,oBAAoB;YAC9B,WAAW,EAAE,mDAAmD;YAChE,QAAQ,EAAE;gBACR,IAAI,EAAE,aAAa;aACpB;YACD,2FAA2F;YAC3F,MAAM,EAAE,CAAC,MAAM,EAAE,MAAM,EAAE,MAAM,CAAC;YAChC,UAAU,EAAE,CAAC,mBAAmB,EAAE,kBAAkB,EAAE,mBAAmB,CAAC;YAC1E,+EAA+E;YAC/E,OAAO,EAAE,CAAC,MAAM,EAAE,MAAM,CAAC;YACzB,WAAW,EAAE,CAAC,gBAAgB,EAAE,uBAAuB,CAAC;YACxD,UAAU,EAAE;gBACV,oBAAoB;gBACpB;oBACE,WAAW,EAAE,mBAAmB;oBAChC,IAAI,EAAE,kBAAkB;oBACxB,IAAI,EAAE,QAAQ;oBACd,OAAO,EAAE,GAAG;oBACZ,WAAW,EAAE;wBACX,QAAQ,EAAE,CAAC;wBACX,QAAQ,EAAE,CAAC;wBACX,eAAe,EAAE,CAAC;qBACnB;oBACD,WAAW,EAAE,6GAA6G;iBAC3H;gBAED,uBAAuB;gBACvB;oBACE,WAAW,EAAE,sBAAsB;oBACnC,IAAI,EAAE,aAAa;oBACnB,IAAI,EAAE,SAAS;oBACf,OAAO,EAAE,KAAK;oBACd,WAAW,EAAE,2IAA2I;iBACzJ;gBAED,iBAAiB;gBACjB;oBACE,WAAW,EAAE,eAAe;oBAC5B,IAAI,EAAE,QAAQ;oBACd,IAAI,EAAE,SAAS;oBACf,OAAO,EAAE,aAAa;oBACtB,OAAO,EAAE;wBACP;4BACE,IAAI,EAAE,cAAc;4BACpB,KAAK,EAAE,aAAa;4BACpB,WAAW,EAAE,kCAAkC;yBAChD;wBACD;4BACE,IAAI,EAAE,iBAAiB;4BACvB,KAAK,EAAE,gBAAgB;4BACvB,WAAW,EAAE,sDAAsD;yBACpE;wBACD;4BACE,IAAI,EAAE,cAAc;4BACpB,KAAK,EAAE,aAAa;4BACpB,WAAW,EAAE,uCAAuC;yBACrD;qBACF;oBACD,WAAW,EAAE,qBAAqB;iBACnC;aACF;SACF,CAAC;IAyOJ,CAAC;IAvOC,KAAK,CAAC,OAAO;QACX,MAAM,UAAU,GAAyB,EAAE,CAAC;QAC5C,MAAM,aAAa,GAAyB,EAAE,CAAC;QAE/C,iCAAiC;QACjC,MAAM,SAAS,GAAG,IAAI,CAAC,YAAY,CAAC,CAAC,CAAC,CAAC,CAAC,uBAAuB;QAC/D,MAAM,gBAAgB,GAAG,IAAI,CAAC,YAAY,CAAC,CAAC,CAAC,CAAC,CAAC,gBAAgB;QAC/D,MAAM,iBAAiB,GAAG,IAAI,CAAC,YAAY,CAAC,CAAC,CAAC,CAAC,CAAC,iBAAiB;QAEjE,2DAA2D;QAC3D,MAAM,kBAAkB,GAAG,CAAC,YAAkC,EAAE,SAAiB,EAAe,EAAE;YAChG,IAAI,CAAC,YAAY,IAAI,YAAY,CAAC,MAAM,KAAK,CAAC,EAAE,CAAC;gBAC/C,MAAM,IAAI,iCAAkB,CAC1B,IAAI,CAAC,OAAO,EAAE,EACd,yBAAyB,SAAS,iFAAiF,CACpH,CAAC;YACJ,CAAC;YAED,MAAM,IAAI,GAAG,YAAY,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC;YAElC,8DAA8D;YAC9D,gDAAgD;YAChD,wDAAwD;YACxD,MAAM,SAAS,GAAI,IAAI,CAAC,KAAgB;gBACtB,IAAI,CAAC,SAAoB;gBACzB,IAAI,CAAC,IAAe;gBACpB,IAAI,CAAC,UAAqB;gBAC3B,aAAa,CAAC;YAE/B,6CAA6C;YAC7C,IAAI,WAAW,GAAI,IAAI,CAAC,QAAmB;gBACxB,IAAI,CAAC,YAAuB;gBAC7B,EAAE,CAAC;YAErB,oEAAoE;YACpE,IAAI,CAAC,WAAW,EAAE,CAAC;gBACjB,IAAI,SAAS,CAAC,QAAQ,CAAC,KAAK,CAAC,IAAI,SAAS,CAAC,QAAQ,CAAC,IAAI,CAAC,IAAI,SAAS,CAAC,QAAQ,CAAC,IAAI,CAAC,EAAE,CAAC;oBACtF,WAAW,GAAG,QAAQ,CAAC;gBACzB,CAAC;qBAAM,IAAI,SAAS,CAAC,QAAQ,CAAC,QAAQ,CAAC,EAAE,CAAC;oBACxC,WAAW,GAAG,WAAW,CAAC;gBAC5B,CAAC;qBAAM,IAAI,SAAS,CAAC,QAAQ,CAAC,OAAO,CAAC,IAAI,SAAS,CAAC,QAAQ,CAAC,SAAS,CAAC,IAAI,SAAS,CAAC,QAAQ,CAAC,MAAM,CAAC,EAAE,CAAC;oBACtG,2BAA2B;oBAC3B,MAAM,OAAO,GAAI,IAAI,CAAC,OAAkB,IAAK,IAAI,CAAC,QAAmB,IAAI,EAAE,CAAC;oBAC5E,IAAI,OAAO,CAAC,QAAQ,CAAC,QAAQ,CAAC,IAAI,OAAO,CAAC,QAAQ,CAAC,OAAO,CAAC,EAAE,CAAC;wBAC5D,WAAW,GAAG,QAAQ,CAAC;oBACzB,CAAC;yBAAM,CAAC;wBACN,WAAW,GAAG,MAAM,CAAC;oBACvB,CAAC;gBACH,CAAC;qBAAM,CAAC;oBACN,WAAW,GAAG,QAAQ,CAAC,CAAC,mBAAmB;gBAC7C,CAAC;YACH,CAAC;YAED,4BAA4B;YAC5B,MAAM,MAAM,GAAI,IAAI,CAAC,MAAiB;gBACtB,IAAI,CAAC,OAAkB;gBACvB,IAAI,CAAC,KAAgB;gBACtB,EAAE,CAAC;YAElB,MAAM,OAAO,GAAI,IAAI,CAAC,OAAkB;gBACvB,IAAI,CAAC,QAAmB;gBACzB,SAAS,CAAC;YAE1B,oEAAoE;YACpE,IAAI,IAAI,GAAI,IAAI,CAAC,IAAe,IAAK,IAAI,CAAC,SAAoB,CAAC;YAC/D,IAAI,CAAC,IAAI,EAAE,CAAC;gBACV,uDAAuD;gBACvD,IAAI,WAAW,KAAK,WAAW,EAAE,CAAC;oBAChC,IAAI,GAAG,SAAS,CAAC,QAAQ,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,KAAK,CAAC;gBACnD,CAAC;qBAAM,IAAI,WAAW,KAAK,QAAQ,EAAE,CAAC;oBACpC,IAAI,SAAS,CAAC,QAAQ,CAAC,IAAI,CAAC,IAAI,SAAS,CAAC,QAAQ,CAAC,IAAI,CAAC;wBAAE,IAAI,GAAG,IAAI,CAAC;yBACjE,IAAI,SAAS,CAAC,QAAQ,CAAC,OAAO,CAAC;wBAAE,IAAI,GAAG,KAAK,CAAC;;wBAC9C,IAAI,GAAG,MAAM,CAAC;gBACrB,CAAC;qBAAM,CAAC;oBACN,IAAI,GAAG,KAAK,CAAC,CAAC,oCAAoC;gBACpD,CAAC;YACH,CAAC;YAED,MAAM,MAAM,GAAgB;gBAC1B,IAAI,EAAE,SAAS;gBACf,QAAQ,EAAE,WAAkB;gBAC5B,IAAI;gBACJ,MAAM;aACP,CAAC;YAEF,+DAA+D;YAC/D,IAAI,OAAO,EAAE,CAAC;gBACX,MAAc,CAAC,OAAO,GAAG,OAAO,CAAC;YACpC,CAAC;YAED,OAAO,MAAM,CAAC;QAChB,CAAC,CAAC;QAEF,oDAAoD;QACpD,MAAM,aAAa,GAAG,kBAAkB,CAAC,gBAAgB,EAAE,eAAe,CAAC,CAAC;QAC5E,MAAM,cAAc,GAAG,kBAAkB,CAAC,iBAAiB,EAAE,gBAAgB,CAAC,CAAC;QAE/E,MAAM,YAAY,GAAkB,CAAC,aAAa,EAAE,cAAc,CAAC,CAAC;QAEpE,gDAAgD;QAChD,MAAM,WAAW,GAAG,IAAI,CAAC,gBAAgB,CAAC,aAAa,EAAE,CAAC,EAAE,KAAK,CAAY,CAAC;QAE9E,0BAA0B;QAC1B,KAAK,IAAI,SAAS,GAAG,CAAC,EAAE,SAAS,GAAG,SAAS,CAAC,MAAM,EAAE,SAAS,EAAE,EAAE,CAAC;YAClE,IAAI,CAAC;gBACH,iBAAiB;gBACjB,MAAM,gBAAgB,GAAG,IAAI,CAAC,gBAAgB,CAAC,kBAAkB,EAAE,SAAS,EAAE,GAAG,CAAW,CAAC;gBAC7F,MAAM,UAAU,GAAG,IAAI,CAAC,gBAAgB,CAAC,QAAQ,EAAE,SAAS,EAAE,aAAa,CAAW,CAAC;gBAEvF,+DAA+D;gBAC/D,MAAM,IAAI,GAAG,SAAS,CAAC,SAAS,CAAC,CAAC,IAAI,CAAC;gBACvC,MAAM,MAAM,GAAI,IAAI,CAAC,MAAiB;oBACvB,IAAI,CAAC,OAAkB;oBACvB,IAAI,CAAC,KAAgB;oBACrB,IAAI,CAAC,IAAe;oBACpB,IAAI,CAAC,KAAgB;oBACtB,IAAI,CAAC,SAAS,CAAC,IAAI,CAAC,CAAC;gBAEnC,IAAI,CAAC,MAAM,IAAI,MAAM,CAAC,MAAM,KAAK,CAAC,EAAE,CAAC;oBACnC,MAAM,IAAI,iCAAkB,CAC1B,IAAI,CAAC,OAAO,EAAE,EACd,2GAA2G,EAC3G,EAAE,SAAS,EAAE,CACd,CAAC;gBACJ,CAAC;gBAED,mDAAmD;gBACnD,MAAM,KAAK,GAAI,IAAI,CAAC,KAAe,IAAI,SAAS,CAAC;gBAEjD,sBAAsB;gBACtB,MAAM,KAAK,GAAG,IAAI,mBAAY,CAAC;oBAC7B,MAAM,EAAE,YAAY;oBACpB,OAAO,EAAE;wBACP,SAAS,EAAE,gBAAgB;wBAC3B,oBAAoB,EAAE,EAAE;qBACzB;iBACF,CAAC,CAAC;gBAEH,sBAAsB;gBACtB,MAAM,UAAU,GAAQ,EAAE,CAAC;gBAC3B,IAAI,KAAK,EAAE,CAAC;oBACV,UAAU,CAAC,KAAK,GAAG,KAAK,CAAC;gBAC3B,CAAC;gBAED,kBAAkB;gBAClB,MAAM,MAAM,GAAG,MAAM,KAAK,CAAC,GAAG,CAAC,MAAM,EAAE,UAAU,CAAC,CAAC;gBAEnD,oCAAoC;gBACpC,IAAI,UAAe,CAAC;gBAEpB,QAAQ,UAAU,EAAE,CAAC;oBACnB,KAAK,aAAa;wBAChB,UAAU,GAAG;4BACX,OAAO,EAAE,MAAM,CAAC,OAAO;4BACvB,SAAS,EAAE,MAAM,CAAC,SAAS;yBAC5B,CAAC;wBACF,MAAM;oBAER,KAAK,gBAAgB;wBACnB,UAAU,GAAG;4BACX,OAAO,EAAE,MAAM,CAAC,OAAO;4BACvB,SAAS,EAAE,MAAM,CAAC,SAAS;4BAC3B,SAAS,EAAE,MAAM,CAAC,SAAS;4BAC3B,SAAS,EAAE,MAAM,CAAC,SAAS;4BAC3B,iBAAiB,EAAE,MAAM,CAAC,iBAAiB;4BAC3C,QAAQ,EAAE,MAAM,CAAC,QAAQ;4BACzB,aAAa,EAAE,MAAM,CAAC,aAAa;4BACnC,SAAS,EAAE,MAAM,CAAC,SAAS;yBAC5B,CAAC;wBACF,MAAM;oBAER,KAAK,aAAa;wBAChB,UAAU,GAAG;4BACX,GAAG,MAAM;4BACT,2BAA2B;4BAC3B,OAAO,EAAE;gCACP,KAAK,EAAE,GAAG,MAAM,CAAC,iBAAiB,EAAE,OAAO,CAAC,CAAC,CAAC,GAAG;gCACjD,IAAI,EAAE,IAAI,MAAM,CAAC,SAAS,CAAC,OAAO,CAAC,CAAC,CAAC,EAAE;gCACvC,KAAK,EAAE,MAAM,CAAC,SAAS;gCACvB,KAAK,EAAE,GAAG,MAAM,CAAC,SAAS,IAAI;gCAC9B,MAAM,EAAE,MAAM,CAAC,aAAa,CAAC,CAAC,CAAC,kBAAkB,CAAC,CAAC,CAAC,0BAA0B;6BAC/E;yBACF,CAAC;wBACF,MAAM;oBAER;wBACE,UAAU,GAAG,MAAM,CAAC;gBACxB,CAAC;gBAED,MAAM,UAAU,GAAG;oBACjB,IAAI,EAAE,UAAU;oBAChB,UAAU,EAAE,EAAE,IAAI,EAAE,SAAS,EAAE;iBAChC,CAAC;gBAEF,2DAA2D;gBAC3D,IAAI,WAAW,EAAE,CAAC;oBAChB,IAAI,MAAM,CAAC,aAAa,EAAE,CAAC;wBACzB,UAAU,CAAC,IAAI,CAAC,UAAU,CAAC,CAAC;oBAC9B,CAAC;yBAAM,CAAC;wBACN,aAAa,CAAC,IAAI,CAAC,UAAU,CAAC,CAAC;oBACjC,CAAC;gBACH,CAAC;qBAAM,CAAC;oBACN,UAAU,CAAC,IAAI,CAAC,UAAU,CAAC,CAAC;gBAC9B,CAAC;YAEH,CAAC;YAAC,OAAO,KAAK,EAAE,CAAC;gBACf,IAAI,IAAI,CAAC,cAAc,EAAE,EAAE,CAAC;oBAC1B,MAAM,YAAY,GAAG,KAAK,YAAY,KAAK,CAAC,CAAC,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC;oBAC5E,MAAM,SAAS,GAAG;wBAChB,IAAI,EAAE;4BACJ,KAAK,EAAE,YAAY;yBACpB;wBACD,UAAU,EAAE,EAAE,IAAI,EAAE,SAAS,EAAE;qBAChC,CAAC;oBACF,mCAAmC;oBACnC,UAAU,CAAC,IAAI,CAAC,SAAS,CAAC,CAAC;oBAC3B,SAAS;gBACX,CAAC;gBACD,MAAM,KAAK,CAAC;YACd,CAAC;QACH,CAAC;QAED,0DAA0D;QAC1D,IAAI,WAAW,EAAE,CAAC;YAChB,qEAAqE;YACrE,OAAO,CAAC,UAAU,EAAE,aAAa,CAAC,CAAC;QACrC,CAAC;aAAM,CAAC;YACN,oEAAoE;YACpE,OAAO,CAAC,UAAU,EAAE,EAAE,CAAC,CAAC;QAC1B,CAAC;IACH,CAAC;CACF;AA7SD,kCA6SC"}
|
|
@@ -3,7 +3,7 @@
|
|
|
3
3
|
<defs>
|
|
4
4
|
<style>
|
|
5
5
|
.cls-1 {
|
|
6
|
-
fill: #
|
|
6
|
+
fill: #667eea;
|
|
7
7
|
}
|
|
8
8
|
</style>
|
|
9
9
|
</defs>
|
|
@@ -12,4 +12,4 @@
|
|
|
12
12
|
<path class="cls-1" d="M14.35,77.41c-7.93,0-14.35-6.42-14.35-14.35V29.8h14.35v47.61Z"/>
|
|
13
13
|
<path class="cls-1" d="M28.36,0h34.7c7.93,0,14.35,6.42,14.35,14.35H28.36V0Z"/>
|
|
14
14
|
<path class="cls-1" d="M77.41,14.35c7.93,0,14.35,6.42,14.35,14.35v33.26h-14.35V14.35Z"/>
|
|
15
|
-
</svg>
|
|
15
|
+
</svg>
|
|
@@ -0,0 +1,6 @@
|
|
|
1
|
+
import type { INodeType, INodeTypeDescription, ISupplyDataFunctions, SupplyData } from 'n8n-workflow';
|
|
2
|
+
export declare class LmChatCascadeFlow implements INodeType {
|
|
3
|
+
description: INodeTypeDescription;
|
|
4
|
+
supplyData(this: ISupplyDataFunctions): Promise<SupplyData>;
|
|
5
|
+
}
|
|
6
|
+
//# sourceMappingURL=LmChatCascadeFlow.node.d.ts.map
|
|
@@ -0,0 +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;AA+DtB,qBAAa,iBAAkB,YAAW,SAAS;IACjD,WAAW,EAAE,oBAAoB,CAyD/B;IAEI,UAAU,CAAC,IAAI,EAAE,oBAAoB,GAAG,OAAO,CAAC,UAAU,CAAC;CAwClE"}
|
|
@@ -0,0 +1,124 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.LmChatCascadeFlow = void 0;
|
|
4
|
+
const n8n_workflow_1 = require("n8n-workflow");
|
|
5
|
+
const chat_models_1 = require("@langchain/core/language_models/chat_models");
|
|
6
|
+
/**
|
|
7
|
+
* Custom CascadeChatModel that wraps two models (drafter and verifier)
|
|
8
|
+
* and implements cascading logic
|
|
9
|
+
*/
|
|
10
|
+
class CascadeChatModel extends chat_models_1.BaseChatModel {
|
|
11
|
+
constructor(drafterModel, verifierModel, qualityThreshold = 0.7) {
|
|
12
|
+
super({});
|
|
13
|
+
this.drafterModel = drafterModel;
|
|
14
|
+
this.verifierModel = verifierModel;
|
|
15
|
+
this.qualityThreshold = qualityThreshold;
|
|
16
|
+
}
|
|
17
|
+
_llmType() {
|
|
18
|
+
return 'cascade';
|
|
19
|
+
}
|
|
20
|
+
async _generate(messages, options, runManager) {
|
|
21
|
+
try {
|
|
22
|
+
// Step 1: Try the drafter model
|
|
23
|
+
const drafterResult = await this.drafterModel._generate(messages, options, runManager);
|
|
24
|
+
const drafterMessage = drafterResult.generations[0].message;
|
|
25
|
+
// Step 2: Simple quality check (can be enhanced)
|
|
26
|
+
// For now, we'll just check if the response is substantive
|
|
27
|
+
const responseText = drafterMessage.content.toString();
|
|
28
|
+
const qualityScore = Math.min(responseText.length / 100, 1.0); // Simple heuristic
|
|
29
|
+
// Step 3: If quality is sufficient, return drafter response
|
|
30
|
+
if (qualityScore >= this.qualityThreshold) {
|
|
31
|
+
return drafterResult;
|
|
32
|
+
}
|
|
33
|
+
// Step 4: Otherwise, escalate to verifier
|
|
34
|
+
const verifierResult = await this.verifierModel._generate(messages, options, runManager);
|
|
35
|
+
return verifierResult;
|
|
36
|
+
}
|
|
37
|
+
catch (error) {
|
|
38
|
+
// Fallback to verifier on error
|
|
39
|
+
return await this.verifierModel._generate(messages, options, runManager);
|
|
40
|
+
}
|
|
41
|
+
}
|
|
42
|
+
}
|
|
43
|
+
class LmChatCascadeFlow {
|
|
44
|
+
constructor() {
|
|
45
|
+
this.description = {
|
|
46
|
+
displayName: 'CascadeFlow Chat Model',
|
|
47
|
+
name: 'lmChatCascadeFlow',
|
|
48
|
+
icon: 'file:cascadeflow.svg',
|
|
49
|
+
group: ['transform'],
|
|
50
|
+
version: 1,
|
|
51
|
+
description: 'Smart AI model cascading with 40-85% cost savings. Connects two chat models (drafter and verifier) and intelligently cascades between them.',
|
|
52
|
+
defaults: {
|
|
53
|
+
name: 'CascadeFlow Chat Model',
|
|
54
|
+
},
|
|
55
|
+
codex: {
|
|
56
|
+
categories: ['AI'],
|
|
57
|
+
subcategories: {
|
|
58
|
+
AI: ['Language Models', 'Chat Models'],
|
|
59
|
+
},
|
|
60
|
+
resources: {
|
|
61
|
+
primaryDocumentation: [
|
|
62
|
+
{
|
|
63
|
+
url: 'https://github.com/lemony-ai/cascadeflow',
|
|
64
|
+
},
|
|
65
|
+
],
|
|
66
|
+
},
|
|
67
|
+
},
|
|
68
|
+
// Sub-node: no regular inputs, takes AI model connections
|
|
69
|
+
// eslint-disable-next-line n8n-nodes-base/node-class-description-inputs-wrong-regular-node
|
|
70
|
+
inputs: [
|
|
71
|
+
{
|
|
72
|
+
displayName: 'Drafter Model',
|
|
73
|
+
type: 'ai_languageModel',
|
|
74
|
+
maxConnections: 1,
|
|
75
|
+
required: true,
|
|
76
|
+
},
|
|
77
|
+
{
|
|
78
|
+
displayName: 'Verifier Model',
|
|
79
|
+
type: 'ai_languageModel',
|
|
80
|
+
maxConnections: 1,
|
|
81
|
+
required: true,
|
|
82
|
+
},
|
|
83
|
+
],
|
|
84
|
+
// Outputs an AI model that can be connected to Agent
|
|
85
|
+
// eslint-disable-next-line n8n-nodes-base/node-class-description-outputs-wrong
|
|
86
|
+
outputs: ['ai_languageModel'],
|
|
87
|
+
outputNames: ['Model'],
|
|
88
|
+
properties: [
|
|
89
|
+
{
|
|
90
|
+
displayName: 'Quality Threshold',
|
|
91
|
+
name: 'qualityThreshold',
|
|
92
|
+
type: 'number',
|
|
93
|
+
default: 0.7,
|
|
94
|
+
typeOptions: {
|
|
95
|
+
minValue: 0,
|
|
96
|
+
maxValue: 1,
|
|
97
|
+
numberPrecision: 2,
|
|
98
|
+
},
|
|
99
|
+
description: 'Minimum quality score (0-1) to accept drafter response. Lower = more cost savings, higher = better quality.',
|
|
100
|
+
},
|
|
101
|
+
],
|
|
102
|
+
};
|
|
103
|
+
}
|
|
104
|
+
async supplyData() {
|
|
105
|
+
// Get the quality threshold parameter
|
|
106
|
+
const qualityThreshold = this.getNodeParameter('qualityThreshold', 0, 0.7);
|
|
107
|
+
// Get the connected chat models from inputs
|
|
108
|
+
const drafterModel = (await this.getInputConnectionData('ai_languageModel', 0));
|
|
109
|
+
const verifierModel = (await this.getInputConnectionData('ai_languageModel', 1));
|
|
110
|
+
if (!drafterModel) {
|
|
111
|
+
throw new n8n_workflow_1.NodeOperationError(this.getNode(), 'Drafter model is required. Please connect an AI chat model to the "Drafter Model" input.');
|
|
112
|
+
}
|
|
113
|
+
if (!verifierModel) {
|
|
114
|
+
throw new n8n_workflow_1.NodeOperationError(this.getNode(), 'Verifier model is required. Please connect an AI chat model to the "Verifier Model" input.');
|
|
115
|
+
}
|
|
116
|
+
// Create and return the cascade model
|
|
117
|
+
const cascadeModel = new CascadeChatModel(drafterModel, verifierModel, qualityThreshold);
|
|
118
|
+
return {
|
|
119
|
+
response: cascadeModel,
|
|
120
|
+
};
|
|
121
|
+
}
|
|
122
|
+
}
|
|
123
|
+
exports.LmChatCascadeFlow = LmChatCascadeFlow;
|
|
124
|
+
//# sourceMappingURL=LmChatCascadeFlow.node.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"LmChatCascadeFlow.node.js","sourceRoot":"","sources":["../../../nodes/LmChatCascadeFlow/LmChatCascadeFlow.node.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,15 @@
|
|
|
1
|
+
<?xml version="1.0" encoding="UTF-8"?>
|
|
2
|
+
<svg id="Layer_1" xmlns="http://www.w3.org/2000/svg" viewBox="0 0 91.76 91.76">
|
|
3
|
+
<defs>
|
|
4
|
+
<style>
|
|
5
|
+
.cls-1 {
|
|
6
|
+
fill: #667eea;
|
|
7
|
+
}
|
|
8
|
+
</style>
|
|
9
|
+
</defs>
|
|
10
|
+
<path class="cls-1" d="M38.19,54.36c-4.15-4.15-4.15-10.87,0-15.02,4.15-4.15,10.87-4.15,15.02,0,4.15,4.15,4.15,10.87,0,15.02s-10.87,4.15-15.02,0Z"/>
|
|
11
|
+
<path class="cls-1" d="M63.4,91.76H28.7c-7.93,0-14.35-6.42-14.35-14.35h49.05v14.35Z"/>
|
|
12
|
+
<path class="cls-1" d="M14.35,77.41c-7.93,0-14.35-6.42-14.35-14.35V29.8h14.35v47.61Z"/>
|
|
13
|
+
<path class="cls-1" d="M28.36,0h34.7c7.93,0,14.35,6.42,14.35,14.35H28.36V0Z"/>
|
|
14
|
+
<path class="cls-1" d="M77.41,14.35c7.93,0,14.35,6.42,14.35,14.35v33.26h-14.35V14.35Z"/>
|
|
15
|
+
</svg>
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@cascadeflow/n8n-nodes-cascadeflow",
|
|
3
|
-
"version": "0.4.
|
|
3
|
+
"version": "0.4.9",
|
|
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",
|
|
@@ -30,7 +30,8 @@
|
|
|
30
30
|
"dist/credentials/CascadeFlowApi.credentials.js"
|
|
31
31
|
],
|
|
32
32
|
"nodes": [
|
|
33
|
-
"dist/nodes/CascadeFlow/CascadeFlow.node.js"
|
|
33
|
+
"dist/nodes/CascadeFlow/CascadeFlow.node.js",
|
|
34
|
+
"dist/nodes/LmChatCascadeFlow/LmChatCascadeFlow.node.js"
|
|
34
35
|
]
|
|
35
36
|
},
|
|
36
37
|
"devDependencies": {
|
|
@@ -50,7 +51,8 @@
|
|
|
50
51
|
"@cascadeflow/core": "^0.4.0",
|
|
51
52
|
"openai": "^4.73.1",
|
|
52
53
|
"@anthropic-ai/sdk": "^0.30.0",
|
|
53
|
-
"groq-sdk": "^0.5.0"
|
|
54
|
+
"groq-sdk": "^0.5.0",
|
|
55
|
+
"@langchain/core": "^0.3.0"
|
|
54
56
|
},
|
|
55
57
|
"scripts": {
|
|
56
58
|
"build": "tsc && gulp build:icons",
|