@cascadeflow/n8n-nodes-cascadeflow 0.6.7 → 0.7.0

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.
Files changed (27) hide show
  1. package/README.md +16 -11
  2. package/dist/nodes/CascadeFlowAgent/CascadeFlowAgent.node.d.ts +34 -0
  3. package/dist/nodes/CascadeFlowAgent/CascadeFlowAgent.node.d.ts.map +1 -0
  4. package/dist/nodes/CascadeFlowAgent/CascadeFlowAgent.node.js +466 -0
  5. package/dist/nodes/CascadeFlowAgent/CascadeFlowAgent.node.js.map +1 -0
  6. package/dist/nodes/CascadeFlowAgent/__tests__/cascadeflow-agent-executor.test.d.ts +2 -0
  7. package/dist/nodes/CascadeFlowAgent/__tests__/cascadeflow-agent-executor.test.d.ts.map +1 -0
  8. package/dist/nodes/CascadeFlowAgent/__tests__/cascadeflow-agent-executor.test.js +98 -0
  9. package/dist/nodes/CascadeFlowAgent/__tests__/cascadeflow-agent-executor.test.js.map +1 -0
  10. package/dist/nodes/CascadeFlowAgent/cascadeflow.svg +15 -0
  11. package/dist/nodes/LmChatCascadeFlow/LmChatCascadeFlow.node.d.ts +100 -0
  12. package/dist/nodes/LmChatCascadeFlow/LmChatCascadeFlow.node.d.ts.map +1 -1
  13. package/dist/nodes/LmChatCascadeFlow/LmChatCascadeFlow.node.js +432 -303
  14. package/dist/nodes/LmChatCascadeFlow/LmChatCascadeFlow.node.js.map +1 -1
  15. package/dist/nodes/LmChatCascadeFlow/__tests__/lm-chat-cascadeflow-node.test.d.ts +2 -0
  16. package/dist/nodes/LmChatCascadeFlow/__tests__/lm-chat-cascadeflow-node.test.d.ts.map +1 -0
  17. package/dist/nodes/LmChatCascadeFlow/__tests__/lm-chat-cascadeflow-node.test.js +59 -0
  18. package/dist/nodes/LmChatCascadeFlow/__tests__/lm-chat-cascadeflow-node.test.js.map +1 -0
  19. package/dist/nodes/LmChatCascadeFlow/cascade-metadata.d.ts +27 -0
  20. package/dist/nodes/LmChatCascadeFlow/cascade-metadata.d.ts.map +1 -0
  21. package/dist/nodes/LmChatCascadeFlow/cascade-metadata.js +21 -0
  22. package/dist/nodes/LmChatCascadeFlow/cascade-metadata.js.map +1 -0
  23. package/dist/nodes/LmChatCascadeFlow/config.d.ts +41 -0
  24. package/dist/nodes/LmChatCascadeFlow/config.d.ts.map +1 -0
  25. package/dist/nodes/LmChatCascadeFlow/config.js +87 -0
  26. package/dist/nodes/LmChatCascadeFlow/config.js.map +1 -0
  27. package/package.json +17 -12
@@ -0,0 +1,98 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ const vitest_1 = require("vitest");
4
+ const messages_1 = require("@langchain/core/messages");
5
+ const CascadeFlowAgent_node_1 = require("../CascadeFlowAgent.node");
6
+ (0, vitest_1.describe)('CascadeFlowAgentExecutor', () => {
7
+ (0, vitest_1.it)('normalizes plain role/content objects and preserves system prompts', async () => {
8
+ let captured = [];
9
+ const cascadeModel = {
10
+ invoke: async (messages) => {
11
+ captured = messages;
12
+ return new messages_1.AIMessage('ok');
13
+ },
14
+ invokeVerifierDirect: async () => new messages_1.AIMessage('verifier'),
15
+ stream: async function* () {
16
+ yield new messages_1.AIMessage('stream');
17
+ },
18
+ };
19
+ const exec = new CascadeFlowAgent_node_1.CascadeFlowAgentExecutor(cascadeModel, [], [], 3);
20
+ await exec.invoke({
21
+ messages: [
22
+ { role: 'system', content: 'You are a helpful assistant.' },
23
+ { role: 'user', content: 'Hello' },
24
+ ],
25
+ });
26
+ (0, vitest_1.expect)(captured).toHaveLength(2);
27
+ (0, vitest_1.expect)(captured[0]).toBeInstanceOf(messages_1.SystemMessage);
28
+ (0, vitest_1.expect)(captured[0].content).toBe('You are a helpful assistant.');
29
+ (0, vitest_1.expect)(captured[1].content).toBe('Hello');
30
+ });
31
+ (0, vitest_1.it)('executes tool calls and returns final response when tool loop ends', async () => {
32
+ const tool = {
33
+ name: 'echo',
34
+ invoke: async (args) => ({ echoed: args }),
35
+ };
36
+ let call = 0;
37
+ const cascadeModel = {
38
+ invoke: async () => {
39
+ call += 1;
40
+ if (call === 1) {
41
+ const msg = new messages_1.AIMessage('calling tool');
42
+ msg.additional_kwargs = {
43
+ tool_calls: [
44
+ {
45
+ id: 't1',
46
+ function: { name: 'echo', arguments: JSON.stringify({ a: 1 }) },
47
+ },
48
+ ],
49
+ };
50
+ return msg;
51
+ }
52
+ return new messages_1.AIMessage('done');
53
+ },
54
+ invokeVerifierDirect: async () => new messages_1.AIMessage('verifier'),
55
+ stream: async function* () {
56
+ yield new messages_1.AIMessage('stream');
57
+ },
58
+ };
59
+ const exec = new CascadeFlowAgent_node_1.CascadeFlowAgentExecutor(cascadeModel, [tool], [], 3);
60
+ const result = await exec.invoke('hi');
61
+ (0, vitest_1.expect)(result).toMatchObject({ output: 'done' });
62
+ (0, vitest_1.expect)(Array.isArray(result.trace)).toBe(true);
63
+ (0, vitest_1.expect)(result.trace.length).toBeGreaterThanOrEqual(2);
64
+ });
65
+ (0, vitest_1.it)('routes to verifier after tool call when routing rule matches', async () => {
66
+ const tool = {
67
+ name: 'echo',
68
+ invoke: async (args) => ({ echoed: args }),
69
+ };
70
+ let verifierCalled = 0;
71
+ const cascadeModel = {
72
+ invoke: async () => {
73
+ const msg = new messages_1.AIMessage('calling tool');
74
+ msg.additional_kwargs = {
75
+ tool_calls: [
76
+ {
77
+ id: 't1',
78
+ function: { name: 'echo', arguments: JSON.stringify({ a: 1 }) },
79
+ },
80
+ ],
81
+ };
82
+ return msg;
83
+ },
84
+ invokeVerifierDirect: async () => {
85
+ verifierCalled += 1;
86
+ return new messages_1.AIMessage('verifier');
87
+ },
88
+ stream: async function* () {
89
+ yield new messages_1.AIMessage('stream');
90
+ },
91
+ };
92
+ const exec = new CascadeFlowAgent_node_1.CascadeFlowAgentExecutor(cascadeModel, [tool], [{ toolName: 'echo', routing: 'verifier' }], 3);
93
+ const result = await exec.invoke('hi');
94
+ (0, vitest_1.expect)(verifierCalled).toBe(1);
95
+ (0, vitest_1.expect)(result.output).toBe('verifier');
96
+ });
97
+ });
98
+ //# sourceMappingURL=cascadeflow-agent-executor.test.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"cascadeflow-agent-executor.test.js","sourceRoot":"","sources":["../../../../nodes/CascadeFlowAgent/__tests__/cascadeflow-agent-executor.test.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: #ffffff;
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>
@@ -1,6 +1,106 @@
1
1
  import type { INodeType, INodeTypeDescription, ISupplyDataFunctions, SupplyData } from 'n8n-workflow';
2
+ import { BaseChatModel } from '@langchain/core/language_models/chat_models';
3
+ import { CallbackManagerForLLMRun } from '@langchain/core/callbacks/manager';
4
+ import { BaseMessage } from '@langchain/core/messages';
5
+ import { ChatResult, ChatGenerationChunk } from '@langchain/core/outputs';
6
+ import { type ComplexityThresholds, type DomainType } from './config';
7
+ interface DomainConfig {
8
+ enabled: boolean;
9
+ threshold: number;
10
+ temperature: number;
11
+ model?: BaseChatModel;
12
+ }
13
+ /**
14
+ * Custom CascadeChatModel that wraps multiple models (drafter, verifier, and domain-specific)
15
+ * and implements intelligent domain-aware cascading logic with cost tracking
16
+ */
17
+ export declare class CascadeChatModel extends BaseChatModel {
18
+ private drafterModelGetter;
19
+ private drafterModel?;
20
+ verifierModelGetter: () => Promise<BaseChatModel>;
21
+ qualityThreshold: number;
22
+ confidenceThresholds?: ComplexityThresholds;
23
+ useComplexityThresholds: boolean;
24
+ useComplexityRouting: boolean;
25
+ private domainModels;
26
+ private domainModelGetters;
27
+ private domainConfigs;
28
+ private enabledDomains;
29
+ private drafterCost;
30
+ private verifierCost;
31
+ private domainCosts;
32
+ private drafterCount;
33
+ private verifierCount;
34
+ private domainCounts;
35
+ private verifierModel?;
36
+ private qualityValidator;
37
+ private costCalculator;
38
+ private complexityDetector;
39
+ private domainDetector;
40
+ private preRouter;
41
+ constructor(drafterModelGetter: () => Promise<BaseChatModel>, verifierModelGetter: () => Promise<BaseChatModel>, qualityThreshold?: number, useSemanticValidation?: boolean, useAlignmentScoring?: boolean, useComplexityRouting?: boolean, useComplexityThresholds?: boolean, useDomainRouting?: boolean, enabledDomains?: DomainType[], domainModelGetters?: Map<DomainType, () => Promise<BaseChatModel | undefined>>, domainConfigs?: Map<DomainType, DomainConfig>, confidenceThresholds?: ComplexityThresholds);
42
+ getVerifierModel(): Promise<BaseChatModel>;
43
+ /**
44
+ * Agent helper: force a direct verifier call (bypasses cascade logic) while still
45
+ * attaching the same `response_metadata` fields as the standard flows.
46
+ */
47
+ invokeVerifierDirect(messages: BaseMessage[], options: this['ParsedCallOptions'], runManager?: CallbackManagerForLLMRun): Promise<BaseMessage>;
48
+ /**
49
+ * Lazy-load drafter model (so n8n highlights it only when actually used).
50
+ */
51
+ private getDrafterModel;
52
+ /**
53
+ * Get a connected domain-specific model (lazy-loaded).
54
+ * Returns undefined if no domain model is connected.
55
+ */
56
+ private getDomainModel;
57
+ /**
58
+ * Helper to get model info string (type and name)
59
+ */
60
+ private getModelInfo;
61
+ /**
62
+ * Detect query complexity using whichever detector API is available.
63
+ */
64
+ private detectComplexity;
65
+ /**
66
+ * Get effective confidence threshold for a given complexity tier.
67
+ */
68
+ private getThresholdForComplexity;
69
+ /**
70
+ * Estimate baseline cost for a different model using the same token usage.
71
+ */
72
+ private estimateAlternateModelCost;
73
+ private attachCascadeMetadata;
74
+ /**
75
+ * Detect the domain of a query using semantic detection
76
+ */
77
+ private detectDomain;
78
+ /**
79
+ * Check if message contains tool calls
80
+ */
81
+ private hasToolCalls;
82
+ /**
83
+ * Get count of tool calls in message
84
+ */
85
+ private getToolCallsCount;
86
+ /**
87
+ * Calculate accurate cost from message token usage
88
+ */
89
+ private calculateMessageCost;
90
+ /**
91
+ * Simple quality validation fallback (when @cascadeflow/core not available)
92
+ */
93
+ private simpleQualityCheck;
94
+ _llmType(): string;
95
+ _generate(messages: BaseMessage[], options: this['ParsedCallOptions'], runManager?: CallbackManagerForLLMRun): Promise<ChatResult>;
96
+ /**
97
+ * Streaming implementation for real-time cascade feedback
98
+ */
99
+ _streamResponseChunks(messages: BaseMessage[], options: this['ParsedCallOptions'], runManager?: CallbackManagerForLLMRun): AsyncGenerator<ChatGenerationChunk>;
100
+ }
2
101
  export declare class LmChatCascadeFlow implements INodeType {
3
102
  description: INodeTypeDescription;
4
103
  supplyData(this: ISupplyDataFunctions): Promise<SupplyData>;
5
104
  }
105
+ export {};
6
106
  //# sourceMappingURL=LmChatCascadeFlow.node.d.ts.map
@@ -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;AA+kCtB,qBAAa,iBAAkB,YAAW,SAAS;IACjD,WAAW,EAAE,oBAAoB,CA+G/B;IAEI,UAAU,CAAC,IAAI,EAAE,oBAAoB,GAAG,OAAO,CAAC,UAAU,CAAC;CAkKlE"}
1
+ {"version":3,"file":"LmChatCascadeFlow.node.d.ts","sourceRoot":"","sources":["../../../nodes/LmChatCascadeFlow/LmChatCascadeFlow.node.ts"],"names":[],"mappings":"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"}