@n8n/n8n-nodes-langchain 1.78.0 → 1.80.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 (40) hide show
  1. package/dist/build.tsbuildinfo +1 -1
  2. package/dist/nodes/agents/Agent/agents/ToolsAgent/execute.d.ts +29 -0
  3. package/dist/nodes/agents/Agent/agents/ToolsAgent/execute.js +124 -86
  4. package/dist/nodes/agents/Agent/agents/ToolsAgent/execute.js.map +1 -1
  5. package/dist/nodes/chains/ChainLLM/ChainLlm.node.js +23 -15
  6. package/dist/nodes/chains/ChainLLM/ChainLlm.node.js.map +1 -1
  7. package/dist/nodes/chains/ChainLLM/utils.d.ts +5 -0
  8. package/dist/nodes/chains/ChainLLM/utils.js +14 -0
  9. package/dist/nodes/chains/ChainLLM/utils.js.map +1 -0
  10. package/dist/nodes/chains/ChainRetrievalQA/ChainRetrievalQa.node.js +11 -4
  11. package/dist/nodes/chains/ChainRetrievalQA/ChainRetrievalQa.node.js.map +1 -1
  12. package/dist/nodes/chains/ChainSummarization/V2/ChainSummarizationV2.node.js +3 -3
  13. package/dist/nodes/chains/ChainSummarization/V2/ChainSummarizationV2.node.js.map +1 -1
  14. package/dist/nodes/llms/LMChatOpenAi/LmChatOpenAi.node.js +35 -5
  15. package/dist/nodes/llms/LMChatOpenAi/LmChatOpenAi.node.js.map +1 -1
  16. package/dist/nodes/llms/LmChatGoogleGemini/LmChatGoogleGemini.node.d.ts +1 -1
  17. package/dist/nodes/llms/LmChatGoogleGemini/LmChatGoogleGemini.node.js +7 -1
  18. package/dist/nodes/llms/LmChatGoogleGemini/LmChatGoogleGemini.node.js.map +1 -1
  19. package/dist/nodes/llms/N8nLlmTracing.d.ts +4 -2
  20. package/dist/nodes/llms/N8nLlmTracing.js +4 -0
  21. package/dist/nodes/llms/N8nLlmTracing.js.map +1 -1
  22. package/dist/nodes/tools/ToolCode/ToolCode.node.js +2 -2
  23. package/dist/nodes/tools/ToolCode/ToolCode.node.js.map +1 -1
  24. package/dist/nodes/tools/ToolWorkflow/v2/utils/WorkflowToolService.js +8 -9
  25. package/dist/nodes/tools/ToolWorkflow/v2/utils/WorkflowToolService.js.map +1 -1
  26. package/dist/nodes/vendors/OpenAi/actions/assistant/message.operation.js +1 -1
  27. package/dist/nodes/vendors/OpenAi/actions/assistant/message.operation.js.map +1 -1
  28. package/dist/nodes/vendors/OpenAi/helpers/utils.d.ts +3 -0
  29. package/dist/nodes/vendors/OpenAi/helpers/utils.js +4 -0
  30. package/dist/nodes/vendors/OpenAi/helpers/utils.js.map +1 -1
  31. package/dist/types/nodes.json +2 -2
  32. package/dist/utils/descriptions.d.ts +7 -1
  33. package/dist/utils/descriptions.js +11 -5
  34. package/dist/utils/descriptions.js.map +1 -1
  35. package/dist/utils/logWrapper.js +2 -1
  36. package/dist/utils/logWrapper.js.map +1 -1
  37. package/package.json +4 -4
  38. package/dist/nodes/tools/ToolWorkflow/v2/utils/FromAIParser.d.ts +0 -19
  39. package/dist/nodes/tools/ToolWorkflow/v2/utils/FromAIParser.js +0 -192
  40. package/dist/nodes/tools/ToolWorkflow/v2/utils/FromAIParser.js.map +0 -1
@@ -1,192 +0,0 @@
1
- "use strict";
2
- Object.defineProperty(exports, "__esModule", { value: true });
3
- exports.AIParametersParser = void 0;
4
- const n8n_workflow_1 = require("n8n-workflow");
5
- const zod_1 = require("zod");
6
- class AIParametersParser {
7
- constructor(ctx) {
8
- this.ctx = ctx;
9
- }
10
- generateZodSchema(placeholder) {
11
- let schema;
12
- switch (placeholder.type?.toLowerCase()) {
13
- case 'string':
14
- schema = zod_1.z.string();
15
- break;
16
- case 'number':
17
- schema = zod_1.z.number();
18
- break;
19
- case 'boolean':
20
- schema = zod_1.z.boolean();
21
- break;
22
- case 'json':
23
- schema = zod_1.z.record(zod_1.z.any());
24
- break;
25
- default:
26
- schema = zod_1.z.string();
27
- }
28
- if (placeholder.description) {
29
- schema = schema.describe(`${schema.description ?? ''} ${placeholder.description}`.trim());
30
- }
31
- if (placeholder.defaultValue !== undefined) {
32
- schema = schema.default(placeholder.defaultValue);
33
- }
34
- return schema;
35
- }
36
- traverseNodeParameters(payload, collectedArgs) {
37
- if (typeof payload === 'string') {
38
- const fromAICalls = this.extractFromAICalls(payload);
39
- fromAICalls.forEach((call) => collectedArgs.push(call));
40
- }
41
- else if (Array.isArray(payload)) {
42
- payload.forEach((item) => this.traverseNodeParameters(item, collectedArgs));
43
- }
44
- else if (typeof payload === 'object' && payload !== null) {
45
- Object.values(payload).forEach((value) => this.traverseNodeParameters(value, collectedArgs));
46
- }
47
- }
48
- extractFromAICalls(str) {
49
- const args = [];
50
- const pattern = /\$fromAI\s*\(\s*/gi;
51
- let match;
52
- while ((match = pattern.exec(str)) !== null) {
53
- const startIndex = match.index + match[0].length;
54
- let current = startIndex;
55
- let inQuotes = false;
56
- let quoteChar = '';
57
- let parenthesesCount = 1;
58
- let argsString = '';
59
- while (current < str.length && parenthesesCount > 0) {
60
- const char = str[current];
61
- if (inQuotes) {
62
- if (char === '\\' && current + 1 < str.length) {
63
- argsString += char + str[current + 1];
64
- current += 2;
65
- continue;
66
- }
67
- if (char === quoteChar) {
68
- inQuotes = false;
69
- quoteChar = '';
70
- }
71
- argsString += char;
72
- }
73
- else {
74
- if (['"', "'", '`'].includes(char)) {
75
- inQuotes = true;
76
- quoteChar = char;
77
- }
78
- else if (char === '(') {
79
- parenthesesCount++;
80
- }
81
- else if (char === ')') {
82
- parenthesesCount--;
83
- }
84
- if (parenthesesCount > 0 || char !== ')') {
85
- argsString += char;
86
- }
87
- }
88
- current++;
89
- }
90
- if (parenthesesCount === 0) {
91
- try {
92
- const parsedArgs = this.parseArguments(argsString);
93
- args.push(parsedArgs);
94
- }
95
- catch (error) {
96
- throw new n8n_workflow_1.NodeOperationError(this.ctx.getNode(), `Failed to parse $fromAI arguments: ${argsString}: ${error}`);
97
- }
98
- }
99
- else {
100
- throw new n8n_workflow_1.NodeOperationError(this.ctx.getNode(), `Unbalanced parentheses while parsing $fromAI call: ${str.slice(startIndex)}`);
101
- }
102
- }
103
- return args;
104
- }
105
- parseArguments(argsString) {
106
- const args = [];
107
- let currentArg = '';
108
- let inQuotes = false;
109
- let quoteChar = '';
110
- let escapeNext = false;
111
- for (let i = 0; i < argsString.length; i++) {
112
- const char = argsString[i];
113
- if (escapeNext) {
114
- currentArg += char;
115
- escapeNext = false;
116
- continue;
117
- }
118
- if (char === '\\') {
119
- escapeNext = true;
120
- continue;
121
- }
122
- if (['"', "'", '`'].includes(char)) {
123
- if (!inQuotes) {
124
- inQuotes = true;
125
- quoteChar = char;
126
- currentArg += char;
127
- }
128
- else if (char === quoteChar) {
129
- inQuotes = false;
130
- quoteChar = '';
131
- currentArg += char;
132
- }
133
- else {
134
- currentArg += char;
135
- }
136
- continue;
137
- }
138
- if (char === ',' && !inQuotes) {
139
- args.push(currentArg.trim());
140
- currentArg = '';
141
- continue;
142
- }
143
- currentArg += char;
144
- }
145
- if (currentArg) {
146
- args.push(currentArg.trim());
147
- }
148
- const cleanArgs = args.map((arg) => {
149
- const trimmed = arg.trim();
150
- if ((trimmed.startsWith("'") && trimmed.endsWith("'")) ||
151
- (trimmed.startsWith('`') && trimmed.endsWith('`')) ||
152
- (trimmed.startsWith('"') && trimmed.endsWith('"'))) {
153
- return trimmed
154
- .slice(1, -1)
155
- .replace(/\\'/g, "'")
156
- .replace(/\\`/g, '`')
157
- .replace(/\\"/g, '"')
158
- .replace(/\\\\/g, '\\');
159
- }
160
- return trimmed;
161
- });
162
- const type = cleanArgs?.[2] || 'string';
163
- if (!['string', 'number', 'boolean', 'json'].includes(type.toLowerCase())) {
164
- throw new n8n_workflow_1.NodeOperationError(this.ctx.getNode(), `Invalid type: ${type}`);
165
- }
166
- return {
167
- key: cleanArgs[0] || '',
168
- description: cleanArgs[1],
169
- type: (cleanArgs?.[2] ?? 'string'),
170
- defaultValue: this.parseDefaultValue(cleanArgs[3]),
171
- };
172
- }
173
- parseDefaultValue(value) {
174
- if (value === undefined || value === '')
175
- return undefined;
176
- const lowerValue = value.toLowerCase();
177
- if (lowerValue === 'true')
178
- return true;
179
- if (lowerValue === 'false')
180
- return false;
181
- if (!isNaN(Number(value)))
182
- return Number(value);
183
- try {
184
- return (0, n8n_workflow_1.jsonParse)(value);
185
- }
186
- catch {
187
- return value;
188
- }
189
- }
190
- }
191
- exports.AIParametersParser = AIParametersParser;
192
- //# sourceMappingURL=FromAIParser.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"FromAIParser.js","sourceRoot":"","sources":["../../../../../../nodes/tools/ToolWorkflow/v2/utils/FromAIParser.ts"],"names":[],"mappings":"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"}