@cascadeflow/n8n-nodes-cascadeflow 0.4.4 → 0.4.6
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/LICENSE +21 -0
- package/dist/credentials/CascadeFlowApi.credentials.d.ts +2 -2
- package/dist/credentials/CascadeFlowApi.credentials.d.ts.map +1 -1
- package/dist/credentials/CascadeFlowApi.credentials.js +4 -4
- package/dist/credentials/CascadeFlowApi.credentials.js.map +1 -1
- package/dist/nodes/CascadeFlow/CascadeFlow.node.d.ts +1 -1
- package/dist/nodes/CascadeFlow/CascadeFlow.node.d.ts.map +1 -1
- package/dist/nodes/CascadeFlow/CascadeFlow.node.js +55 -270
- package/dist/nodes/CascadeFlow/CascadeFlow.node.js.map +1 -1
- package/package.json +9 -10
package/LICENSE
ADDED
|
@@ -0,0 +1,21 @@
|
|
|
1
|
+
MIT License
|
|
2
|
+
|
|
3
|
+
Copyright (c) 2025 Lemony Inc.
|
|
4
|
+
|
|
5
|
+
Permission is hereby granted, free of charge, to any person obtaining a copy
|
|
6
|
+
of this software and associated documentation files (the "Software"), to deal
|
|
7
|
+
in the Software without restriction, including without limitation the rights
|
|
8
|
+
to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
|
|
9
|
+
copies of the Software, and to permit persons to whom the Software is
|
|
10
|
+
furnished to do so, subject to the following conditions:
|
|
11
|
+
|
|
12
|
+
The above copyright notice and this permission notice shall be included in all
|
|
13
|
+
copies or substantial portions of the Software.
|
|
14
|
+
|
|
15
|
+
THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
|
|
16
|
+
IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
|
|
17
|
+
FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
|
|
18
|
+
AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
|
|
19
|
+
LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
|
|
20
|
+
OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
|
|
21
|
+
SOFTWARE.
|
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
import { IAuthenticateGeneric, ICredentialTestRequest, ICredentialType, INodeProperties } from 'n8n-workflow';
|
|
2
|
-
export declare class
|
|
2
|
+
export declare class CascadeFlowApi implements ICredentialType {
|
|
3
3
|
name: string;
|
|
4
4
|
displayName: string;
|
|
5
5
|
documentationUrl: string;
|
|
@@ -7,4 +7,4 @@ export declare class cascadeflowApi implements ICredentialType {
|
|
|
7
7
|
authenticate: IAuthenticateGeneric;
|
|
8
8
|
test: ICredentialTestRequest;
|
|
9
9
|
}
|
|
10
|
-
//# sourceMappingURL=
|
|
10
|
+
//# sourceMappingURL=CascadeFlowApi.credentials.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"
|
|
1
|
+
{"version":3,"file":"CascadeFlowApi.credentials.d.ts","sourceRoot":"","sources":["../../credentials/CascadeFlowApi.credentials.ts"],"names":[],"mappings":"AAAA,OAAO,EACL,oBAAoB,EACpB,sBAAsB,EACtB,eAAe,EACf,eAAe,EAChB,MAAM,cAAc,CAAC;AAEtB,qBAAa,cAAe,YAAW,eAAe;IACpD,IAAI,SAAoB;IACxB,WAAW,SAAqB;IAChC,gBAAgB,SAA8C;IAC9D,UAAU,EAAE,eAAe,EAAE,CA8C3B;IAEF,YAAY,EAAE,oBAAoB,CAGhC;IAEF,IAAI,EAAE,sBAAsB,CAS1B;CACH"}
|
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
"use strict";
|
|
2
2
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
-
exports.
|
|
4
|
-
class
|
|
3
|
+
exports.CascadeFlowApi = void 0;
|
|
4
|
+
class CascadeFlowApi {
|
|
5
5
|
constructor() {
|
|
6
6
|
this.name = 'cascadeFlowApi';
|
|
7
7
|
this.displayName = 'Cascadeflow API';
|
|
@@ -69,5 +69,5 @@ class cascadeflowApi {
|
|
|
69
69
|
};
|
|
70
70
|
}
|
|
71
71
|
}
|
|
72
|
-
exports.
|
|
73
|
-
//# sourceMappingURL=
|
|
72
|
+
exports.CascadeFlowApi = CascadeFlowApi;
|
|
73
|
+
//# sourceMappingURL=CascadeFlowApi.credentials.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"
|
|
1
|
+
{"version":3,"file":"CascadeFlowApi.credentials.js","sourceRoot":"","sources":["../../credentials/CascadeFlowApi.credentials.ts"],"names":[],"mappings":";;;AAOA,MAAa,cAAc;IAA3B;QACE,SAAI,GAAG,gBAAgB,CAAC;QACxB,gBAAW,GAAG,iBAAiB,CAAC;QAChC,qBAAgB,GAAG,0CAA0C,CAAC;QAC9D,eAAU,GAAsB;YAC9B;gBACE,WAAW,EAAE,gBAAgB;gBAC7B,IAAI,EAAE,cAAc;gBACpB,IAAI,EAAE,QAAQ;gBACd,WAAW,EAAE,EAAE,QAAQ,EAAE,IAAI,EAAE;gBAC/B,OAAO,EAAE,EAAE;gBACX,WAAW,EAAE,0CAA0C;gBACvD,WAAW,EAAE,QAAQ;aACtB;YACD;gBACE,WAAW,EAAE,mBAAmB;gBAChC,IAAI,EAAE,iBAAiB;gBACvB,IAAI,EAAE,QAAQ;gBACd,WAAW,EAAE,EAAE,QAAQ,EAAE,IAAI,EAAE;gBAC/B,OAAO,EAAE,EAAE;gBACX,WAAW,EAAE,uCAAuC;gBACpD,WAAW,EAAE,YAAY;aAC1B;YACD;gBACE,WAAW,EAAE,cAAc;gBAC3B,IAAI,EAAE,YAAY;gBAClB,IAAI,EAAE,QAAQ;gBACd,WAAW,EAAE,EAAE,QAAQ,EAAE,IAAI,EAAE;gBAC/B,OAAO,EAAE,EAAE;gBACX,WAAW,EAAE,yCAAyC;gBACtD,WAAW,EAAE,SAAS;aACvB;YACD;gBACE,WAAW,EAAE,qBAAqB;gBAClC,IAAI,EAAE,gBAAgB;gBACtB,IAAI,EAAE,QAAQ;gBACd,WAAW,EAAE,EAAE,QAAQ,EAAE,IAAI,EAAE;gBAC/B,OAAO,EAAE,EAAE;gBACX,WAAW,EAAE,yBAAyB;gBACtC,WAAW,EAAE,EAAE;aAChB;YACD;gBACE,WAAW,EAAE,qBAAqB;gBAClC,IAAI,EAAE,mBAAmB;gBACzB,IAAI,EAAE,QAAQ;gBACd,WAAW,EAAE,EAAE,QAAQ,EAAE,IAAI,EAAE;gBAC/B,OAAO,EAAE,EAAE;gBACX,WAAW,EAAE,mCAAmC;gBAChD,WAAW,EAAE,QAAQ;aACtB;SACF,CAAC;QAEF,iBAAY,GAAyB;YACnC,IAAI,EAAE,SAAS;YACf,UAAU,EAAE,EAAE;SACf,CAAC;QAEF,SAAI,GAA2B;YAC7B,OAAO,EAAE;gBACP,OAAO,EAAE,2BAA2B;gBACpC,GAAG,EAAE,SAAS;gBACd,MAAM,EAAE,KAAK;gBACb,OAAO,EAAE;oBACP,aAAa,EAAE,uCAAuC;iBACvD;aACF;SACF,CAAC;IACJ,CAAC;CAAA;AAnED,wCAmEC"}
|
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
import { IExecuteFunctions, INodeExecutionData, INodeType, INodeTypeDescription } from 'n8n-workflow';
|
|
2
|
-
export declare class
|
|
2
|
+
export declare class CascadeFlow implements INodeType {
|
|
3
3
|
description: INodeTypeDescription;
|
|
4
4
|
execute(this: IExecuteFunctions): Promise<INodeExecutionData[][]>;
|
|
5
5
|
}
|
|
@@ -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,CA4E/B;IAEI,OAAO,CAAC,IAAI,EAAE,iBAAiB,GAAG,OAAO,CAAC,kBAAkB,EAAE,EAAE,CAAC;CAgJxE"}
|
|
@@ -1,22 +1,24 @@
|
|
|
1
1
|
"use strict";
|
|
2
2
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
-
exports.
|
|
3
|
+
exports.CascadeFlow = void 0;
|
|
4
4
|
const n8n_workflow_1 = require("n8n-workflow");
|
|
5
5
|
const core_1 = require("@cascadeflow/core");
|
|
6
|
-
class
|
|
6
|
+
class CascadeFlow {
|
|
7
7
|
constructor() {
|
|
8
8
|
this.description = {
|
|
9
|
-
displayName: '
|
|
9
|
+
displayName: 'CascadeFlow',
|
|
10
10
|
name: 'cascadeFlow',
|
|
11
11
|
icon: 'file:cascadeflow.svg',
|
|
12
12
|
group: ['transform'],
|
|
13
|
-
version:
|
|
14
|
-
subtitle: '
|
|
13
|
+
version: 2,
|
|
14
|
+
subtitle: 'AI Model Cascading',
|
|
15
15
|
description: 'Smart AI model cascading with 40-85% cost savings',
|
|
16
16
|
defaults: {
|
|
17
|
-
name: '
|
|
17
|
+
name: 'CascadeFlow',
|
|
18
18
|
},
|
|
19
|
-
inputs
|
|
19
|
+
// eslint-disable-next-line n8n-nodes-base/node-class-description-inputs-wrong-regular-node
|
|
20
|
+
inputs: ['main', 'main'],
|
|
21
|
+
inputNames: ['Drafter Model', 'Verifier Model'],
|
|
20
22
|
outputs: ['main'],
|
|
21
23
|
credentials: [
|
|
22
24
|
{
|
|
@@ -25,234 +27,31 @@ class cascadeflow {
|
|
|
25
27
|
},
|
|
26
28
|
],
|
|
27
29
|
properties: [
|
|
28
|
-
{
|
|
29
|
-
displayName: 'Operation',
|
|
30
|
-
name: 'operation',
|
|
31
|
-
type: 'options',
|
|
32
|
-
noDataExpression: true,
|
|
33
|
-
options: [
|
|
34
|
-
{
|
|
35
|
-
name: 'Generate Text',
|
|
36
|
-
value: 'generateText',
|
|
37
|
-
description: 'Generate AI response with cascading',
|
|
38
|
-
action: 'Generate text with cascading',
|
|
39
|
-
},
|
|
40
|
-
{
|
|
41
|
-
name: 'Generate with Tools',
|
|
42
|
-
value: 'generateWithTools',
|
|
43
|
-
description: 'Generate AI response with tool calling',
|
|
44
|
-
action: 'Generate with tool calling',
|
|
45
|
-
},
|
|
46
|
-
],
|
|
47
|
-
default: 'generateText',
|
|
48
|
-
},
|
|
49
30
|
// Input message
|
|
50
31
|
{
|
|
51
|
-
displayName: '
|
|
52
|
-
name: '
|
|
32
|
+
displayName: 'Prompt',
|
|
33
|
+
name: 'prompt',
|
|
53
34
|
type: 'string',
|
|
54
35
|
default: '',
|
|
55
36
|
required: true,
|
|
56
37
|
typeOptions: {
|
|
57
38
|
rows: 4,
|
|
58
39
|
},
|
|
59
|
-
description: 'The message or query to send to AI',
|
|
40
|
+
description: 'The message or query to send to AI models',
|
|
60
41
|
placeholder: 'What is the capital of France?',
|
|
61
42
|
},
|
|
62
|
-
//
|
|
63
|
-
{
|
|
64
|
-
displayName: 'Models Configuration',
|
|
65
|
-
name: 'modelsConfig',
|
|
66
|
-
type: 'fixedCollection',
|
|
67
|
-
typeOptions: {
|
|
68
|
-
multipleValues: false,
|
|
69
|
-
},
|
|
70
|
-
default: {},
|
|
71
|
-
options: [
|
|
72
|
-
{
|
|
73
|
-
name: 'models',
|
|
74
|
-
displayName: 'Models',
|
|
75
|
-
values: [
|
|
76
|
-
{
|
|
77
|
-
displayName: 'Draft Model Cost',
|
|
78
|
-
name: 'draftCost',
|
|
79
|
-
type: 'number',
|
|
80
|
-
default: 0.000375,
|
|
81
|
-
description: 'Cost per 1K tokens (blended)',
|
|
82
|
-
},
|
|
83
|
-
{
|
|
84
|
-
displayName: 'Draft Model Name',
|
|
85
|
-
name: 'draftModel',
|
|
86
|
-
type: 'string',
|
|
87
|
-
default: 'gpt-4o-mini',
|
|
88
|
-
description: 'Model name for draft generation',
|
|
89
|
-
placeholder: 'gpt-4o-mini',
|
|
90
|
-
},
|
|
91
|
-
{
|
|
92
|
-
displayName: 'Draft Model Provider',
|
|
93
|
-
name: 'draftProvider',
|
|
94
|
-
type: 'options',
|
|
95
|
-
default: 'openai',
|
|
96
|
-
options: [
|
|
97
|
-
{
|
|
98
|
-
name: 'Anthropic',
|
|
99
|
-
value: 'anthropic',
|
|
100
|
-
},
|
|
101
|
-
{
|
|
102
|
-
name: 'Groq',
|
|
103
|
-
value: 'groq',
|
|
104
|
-
},
|
|
105
|
-
{
|
|
106
|
-
name: 'Ollama (Local)',
|
|
107
|
-
value: 'ollama',
|
|
108
|
-
},
|
|
109
|
-
{
|
|
110
|
-
name: 'OpenAI',
|
|
111
|
-
value: 'openai',
|
|
112
|
-
},
|
|
113
|
-
{
|
|
114
|
-
name: 'Together AI',
|
|
115
|
-
value: 'together',
|
|
116
|
-
},
|
|
117
|
-
],
|
|
118
|
-
description: 'Provider for the cheap draft model',
|
|
119
|
-
},
|
|
120
|
-
{
|
|
121
|
-
displayName: 'Verifier Model Cost',
|
|
122
|
-
name: 'verifierCost',
|
|
123
|
-
type: 'number',
|
|
124
|
-
default: 0.00625,
|
|
125
|
-
description: 'Cost per 1K tokens (blended)',
|
|
126
|
-
},
|
|
127
|
-
{
|
|
128
|
-
displayName: 'Verifier Model Name',
|
|
129
|
-
name: 'verifierModel',
|
|
130
|
-
type: 'string',
|
|
131
|
-
default: 'gpt-4o',
|
|
132
|
-
description: 'Model name for verification',
|
|
133
|
-
placeholder: 'gpt-4o',
|
|
134
|
-
},
|
|
135
|
-
{
|
|
136
|
-
displayName: 'Verifier Model Provider',
|
|
137
|
-
name: 'verifierProvider',
|
|
138
|
-
type: 'options',
|
|
139
|
-
default: 'openai',
|
|
140
|
-
options: [
|
|
141
|
-
{
|
|
142
|
-
name: 'OpenAI',
|
|
143
|
-
value: 'openai',
|
|
144
|
-
},
|
|
145
|
-
{
|
|
146
|
-
name: 'Anthropic',
|
|
147
|
-
value: 'anthropic',
|
|
148
|
-
},
|
|
149
|
-
{
|
|
150
|
-
name: 'Groq',
|
|
151
|
-
value: 'groq',
|
|
152
|
-
},
|
|
153
|
-
{
|
|
154
|
-
name: 'Together AI',
|
|
155
|
-
value: 'together',
|
|
156
|
-
},
|
|
157
|
-
],
|
|
158
|
-
description: 'Provider for the expensive verifier model',
|
|
159
|
-
},
|
|
160
|
-
],
|
|
161
|
-
},
|
|
162
|
-
],
|
|
163
|
-
},
|
|
164
|
-
// Quality Configuration
|
|
43
|
+
// Quality Threshold
|
|
165
44
|
{
|
|
166
|
-
displayName: 'Quality
|
|
167
|
-
name: '
|
|
168
|
-
type: '
|
|
45
|
+
displayName: 'Quality Threshold',
|
|
46
|
+
name: 'qualityThreshold',
|
|
47
|
+
type: 'number',
|
|
48
|
+
default: 0.7,
|
|
169
49
|
typeOptions: {
|
|
170
|
-
|
|
50
|
+
minValue: 0,
|
|
51
|
+
maxValue: 1,
|
|
52
|
+
numberPrecision: 2,
|
|
171
53
|
},
|
|
172
|
-
|
|
173
|
-
options: [
|
|
174
|
-
{
|
|
175
|
-
name: 'quality',
|
|
176
|
-
displayName: 'Quality',
|
|
177
|
-
values: [
|
|
178
|
-
{
|
|
179
|
-
displayName: 'Quality Threshold',
|
|
180
|
-
name: 'threshold',
|
|
181
|
-
type: 'number',
|
|
182
|
-
default: 0.7,
|
|
183
|
-
typeOptions: {
|
|
184
|
-
minValue: 0,
|
|
185
|
-
maxValue: 1,
|
|
186
|
-
numberPrecision: 2,
|
|
187
|
-
},
|
|
188
|
-
description: 'Minimum quality score to accept draft (0-1)',
|
|
189
|
-
},
|
|
190
|
-
{
|
|
191
|
-
displayName: 'Require Minimum Tokens',
|
|
192
|
-
name: 'requireMinimumTokens',
|
|
193
|
-
type: 'number',
|
|
194
|
-
default: 10,
|
|
195
|
-
typeOptions: {
|
|
196
|
-
minValue: 0,
|
|
197
|
-
},
|
|
198
|
-
description: 'Minimum response length in tokens',
|
|
199
|
-
},
|
|
200
|
-
],
|
|
201
|
-
},
|
|
202
|
-
],
|
|
203
|
-
},
|
|
204
|
-
// Advanced Options
|
|
205
|
-
{
|
|
206
|
-
displayName: 'Advanced Options',
|
|
207
|
-
name: 'advancedOptions',
|
|
208
|
-
type: 'collection',
|
|
209
|
-
default: {},
|
|
210
|
-
placeholder: 'Add Option',
|
|
211
|
-
options: [
|
|
212
|
-
{
|
|
213
|
-
displayName: 'Max Tokens',
|
|
214
|
-
name: 'maxTokens',
|
|
215
|
-
type: 'number',
|
|
216
|
-
default: 1000,
|
|
217
|
-
description: 'Maximum tokens to generate',
|
|
218
|
-
},
|
|
219
|
-
{
|
|
220
|
-
displayName: 'Temperature',
|
|
221
|
-
name: 'temperature',
|
|
222
|
-
type: 'number',
|
|
223
|
-
default: 0.7,
|
|
224
|
-
typeOptions: {
|
|
225
|
-
minValue: 0,
|
|
226
|
-
maxValue: 2,
|
|
227
|
-
numberPrecision: 1,
|
|
228
|
-
},
|
|
229
|
-
description: 'Sampling temperature (0-2)',
|
|
230
|
-
},
|
|
231
|
-
{
|
|
232
|
-
displayName: 'System Prompt',
|
|
233
|
-
name: 'systemPrompt',
|
|
234
|
-
type: 'string',
|
|
235
|
-
default: '',
|
|
236
|
-
typeOptions: {
|
|
237
|
-
rows: 3,
|
|
238
|
-
},
|
|
239
|
-
description: 'Optional system prompt',
|
|
240
|
-
},
|
|
241
|
-
],
|
|
242
|
-
},
|
|
243
|
-
// Tool Calling (for generateWithTools operation)
|
|
244
|
-
{
|
|
245
|
-
displayName: 'Tools',
|
|
246
|
-
name: 'tools',
|
|
247
|
-
type: 'json',
|
|
248
|
-
displayOptions: {
|
|
249
|
-
show: {
|
|
250
|
-
operation: ['generateWithTools'],
|
|
251
|
-
},
|
|
252
|
-
},
|
|
253
|
-
default: '[]',
|
|
254
|
-
description: 'Tools in OpenAI format (JSON array)',
|
|
255
|
-
placeholder: '[{"type": "function", "function": {"name": "get_weather", ...}}]',
|
|
54
|
+
description: 'Minimum quality score (0-1) to accept drafter response. Lower = more cost savings, higher = better quality.',
|
|
256
55
|
},
|
|
257
56
|
// Output Options
|
|
258
57
|
{
|
|
@@ -283,11 +82,13 @@ class cascadeflow {
|
|
|
283
82
|
};
|
|
284
83
|
}
|
|
285
84
|
async execute() {
|
|
286
|
-
const items = this.getInputData();
|
|
287
85
|
const returnData = [];
|
|
86
|
+
// Get data from both inputs
|
|
87
|
+
const drafterInputData = this.getInputData(0); // Drafter model input
|
|
88
|
+
const verifierInputData = this.getInputData(1); // Verifier model input
|
|
288
89
|
// Get credentials
|
|
289
90
|
const credentials = await this.getCredentials('cascadeFlowApi');
|
|
290
|
-
// Helper to get API key for provider
|
|
91
|
+
// Helper to get API key for provider
|
|
291
92
|
const getApiKeyForProvider = (creds, provider) => {
|
|
292
93
|
const keyMap = {
|
|
293
94
|
openai: 'openaiApiKey',
|
|
@@ -302,62 +103,46 @@ class cascadeflow {
|
|
|
302
103
|
}
|
|
303
104
|
return creds[keyName] || '';
|
|
304
105
|
};
|
|
305
|
-
|
|
106
|
+
// Helper to extract model config from input data
|
|
107
|
+
const extractModelConfig = (inputData, inputName) => {
|
|
108
|
+
if (!inputData || inputData.length === 0) {
|
|
109
|
+
throw new n8n_workflow_1.NodeOperationError(this.getNode(), `No data received from ${inputName} input. Please connect an OpenAI or other provider node.`);
|
|
110
|
+
}
|
|
111
|
+
const data = inputData[0].json;
|
|
112
|
+
// Try to extract model information from the input
|
|
113
|
+
// This works with OpenAI node output and similar provider nodes
|
|
114
|
+
const modelName = data.model || data.modelName || 'gpt-4o-mini';
|
|
115
|
+
const providerStr = data.provider || 'openai';
|
|
116
|
+
const cost = data.cost || data.modelCost || 0.001;
|
|
117
|
+
return {
|
|
118
|
+
name: modelName,
|
|
119
|
+
provider: providerStr,
|
|
120
|
+
cost,
|
|
121
|
+
apiKey: getApiKeyForProvider(credentials, providerStr),
|
|
122
|
+
};
|
|
123
|
+
};
|
|
124
|
+
// Extract model configurations from inputs
|
|
125
|
+
const drafterConfig = extractModelConfig(drafterInputData, 'Drafter');
|
|
126
|
+
const verifierConfig = extractModelConfig(verifierInputData, 'Verifier');
|
|
127
|
+
const modelConfigs = [drafterConfig, verifierConfig];
|
|
128
|
+
for (let itemIndex = 0; itemIndex < drafterInputData.length; itemIndex++) {
|
|
306
129
|
try {
|
|
307
130
|
// Get parameters
|
|
308
|
-
const
|
|
309
|
-
const
|
|
310
|
-
const modelsConfig = this.getNodeParameter('modelsConfig', itemIndex, {});
|
|
311
|
-
const qualitySettings = this.getNodeParameter('qualitySettings', itemIndex, {});
|
|
312
|
-
const advancedOptions = this.getNodeParameter('advancedOptions', itemIndex, {});
|
|
131
|
+
const prompt = this.getNodeParameter('prompt', itemIndex);
|
|
132
|
+
const qualityThreshold = this.getNodeParameter('qualityThreshold', itemIndex, 0.7);
|
|
313
133
|
const outputMode = this.getNodeParameter('output', itemIndex, 'fullMetrics');
|
|
314
|
-
// Extract model configuration
|
|
315
|
-
const models = modelsConfig.models || {};
|
|
316
|
-
const quality = qualitySettings.quality || {};
|
|
317
|
-
// Build model configs
|
|
318
|
-
const modelConfigs = [
|
|
319
|
-
// Draft model
|
|
320
|
-
{
|
|
321
|
-
name: models.draftModel || 'gpt-4o-mini',
|
|
322
|
-
provider: models.draftProvider || 'openai',
|
|
323
|
-
cost: models.draftCost || 0.000375,
|
|
324
|
-
apiKey: getApiKeyForProvider(credentials, models.draftProvider || 'openai'),
|
|
325
|
-
},
|
|
326
|
-
// Verifier model
|
|
327
|
-
{
|
|
328
|
-
name: models.verifierModel || 'gpt-4o',
|
|
329
|
-
provider: models.verifierProvider || 'openai',
|
|
330
|
-
cost: models.verifierCost || 0.00625,
|
|
331
|
-
apiKey: getApiKeyForProvider(credentials, models.verifierProvider || 'openai'),
|
|
332
|
-
},
|
|
333
|
-
];
|
|
334
134
|
// Create CascadeAgent
|
|
335
135
|
const agent = new core_1.CascadeAgent({
|
|
336
136
|
models: modelConfigs,
|
|
337
137
|
quality: {
|
|
338
|
-
threshold:
|
|
339
|
-
requireMinimumTokens:
|
|
138
|
+
threshold: qualityThreshold,
|
|
139
|
+
requireMinimumTokens: 10,
|
|
340
140
|
},
|
|
341
141
|
});
|
|
342
142
|
// Prepare run options
|
|
343
|
-
const runOptions = {
|
|
344
|
-
maxTokens: advancedOptions.maxTokens,
|
|
345
|
-
temperature: advancedOptions.temperature,
|
|
346
|
-
systemPrompt: advancedOptions.systemPrompt,
|
|
347
|
-
};
|
|
348
|
-
// Add tools if generateWithTools operation
|
|
349
|
-
if (operation === 'generateWithTools') {
|
|
350
|
-
const toolsJson = this.getNodeParameter('tools', itemIndex, '[]');
|
|
351
|
-
try {
|
|
352
|
-
runOptions.tools = JSON.parse(toolsJson);
|
|
353
|
-
}
|
|
354
|
-
catch (error) {
|
|
355
|
-
const errorMessage = error instanceof Error ? error.message : String(error);
|
|
356
|
-
throw new n8n_workflow_1.NodeOperationError(this.getNode(), `Invalid tools JSON: ${errorMessage}`, { itemIndex });
|
|
357
|
-
}
|
|
358
|
-
}
|
|
143
|
+
const runOptions = {};
|
|
359
144
|
// Execute cascade
|
|
360
|
-
const result = await agent.run(
|
|
145
|
+
const result = await agent.run(prompt, runOptions);
|
|
361
146
|
// Format output based on outputMode
|
|
362
147
|
let outputData;
|
|
363
148
|
switch (outputMode) {
|
|
@@ -416,5 +201,5 @@ class cascadeflow {
|
|
|
416
201
|
return [returnData];
|
|
417
202
|
}
|
|
418
203
|
}
|
|
419
|
-
exports.
|
|
204
|
+
exports.CascadeFlow = CascadeFlow;
|
|
420
205
|
//# sourceMappingURL=CascadeFlow.node.js.map
|
|
@@ -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,
|
|
1
|
+
{"version":3,"file":"CascadeFlow.node.js","sourceRoot":"","sources":["../../../nodes/CascadeFlow/CascadeFlow.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.4.
|
|
3
|
+
"version": "0.4.6",
|
|
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",
|
|
@@ -21,14 +21,6 @@
|
|
|
21
21
|
"url": "https://github.com/lemony-ai/cascadeflow.git",
|
|
22
22
|
"directory": "packages/integrations/n8n"
|
|
23
23
|
},
|
|
24
|
-
"scripts": {
|
|
25
|
-
"build": "tsc && gulp build:icons",
|
|
26
|
-
"dev": "tsc --watch",
|
|
27
|
-
"format": "prettier nodes credentials --write",
|
|
28
|
-
"lint": "eslint \"nodes/**/*.ts\" \"credentials/**/*.ts\" package.json",
|
|
29
|
-
"lintfix": "eslint \"nodes/**/*.ts\" \"credentials/**/*.ts\" package.json --fix",
|
|
30
|
-
"prepublishOnly": "npm run build && npm run lint"
|
|
31
|
-
},
|
|
32
24
|
"files": [
|
|
33
25
|
"dist"
|
|
34
26
|
],
|
|
@@ -59,5 +51,12 @@
|
|
|
59
51
|
"openai": "^4.73.1",
|
|
60
52
|
"@anthropic-ai/sdk": "^0.30.0",
|
|
61
53
|
"groq-sdk": "^0.5.0"
|
|
54
|
+
},
|
|
55
|
+
"scripts": {
|
|
56
|
+
"build": "tsc && gulp build:icons",
|
|
57
|
+
"dev": "tsc --watch",
|
|
58
|
+
"format": "prettier nodes credentials --write",
|
|
59
|
+
"lint": "eslint \"nodes/**/*.ts\" \"credentials/**/*.ts\" package.json",
|
|
60
|
+
"lintfix": "eslint \"nodes/**/*.ts\" \"credentials/**/*.ts\" package.json --fix"
|
|
62
61
|
}
|
|
63
|
-
}
|
|
62
|
+
}
|