@n8n/n8n-nodes-langchain 1.116.2 → 1.118.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.
- package/dist/credentials/McpOAuth2Api.credentials.js +45 -0
- package/dist/credentials/McpOAuth2Api.credentials.js.map +1 -0
- package/dist/known/credentials.json +10 -0
- package/dist/known/nodes.json +4 -0
- package/dist/nodes/Guardrails/Guardrails.node.js +73 -0
- package/dist/nodes/Guardrails/Guardrails.node.js.map +1 -0
- package/dist/nodes/Guardrails/actions/checks/jailbreak.js +50 -0
- package/dist/nodes/Guardrails/actions/checks/jailbreak.js.map +1 -0
- package/dist/nodes/Guardrails/actions/checks/keywords.js +66 -0
- package/dist/nodes/Guardrails/actions/checks/keywords.js.map +1 -0
- package/dist/nodes/Guardrails/actions/checks/nsfw.js +53 -0
- package/dist/nodes/Guardrails/actions/checks/nsfw.js.map +1 -0
- package/dist/nodes/Guardrails/actions/checks/pii.js +232 -0
- package/dist/nodes/Guardrails/actions/checks/pii.js.map +1 -0
- package/dist/nodes/Guardrails/actions/checks/secretKeys.js +201 -0
- package/dist/nodes/Guardrails/actions/checks/secretKeys.js.map +1 -0
- package/dist/nodes/Guardrails/actions/checks/topicalAlignment.js +38 -0
- package/dist/nodes/Guardrails/actions/checks/topicalAlignment.js.map +1 -0
- package/dist/nodes/Guardrails/actions/checks/urls.js +245 -0
- package/dist/nodes/Guardrails/actions/checks/urls.js.map +1 -0
- package/dist/nodes/Guardrails/actions/process.js +220 -0
- package/dist/nodes/Guardrails/actions/process.js.map +1 -0
- package/dist/nodes/Guardrails/actions/types.js +35 -0
- package/dist/nodes/Guardrails/actions/types.js.map +1 -0
- package/dist/nodes/Guardrails/description.js +454 -0
- package/dist/nodes/Guardrails/description.js.map +1 -0
- package/dist/nodes/Guardrails/guardrails.svg +11 -0
- package/dist/nodes/Guardrails/helpers/base.js +67 -0
- package/dist/nodes/Guardrails/helpers/base.js.map +1 -0
- package/dist/nodes/Guardrails/helpers/common.js +45 -0
- package/dist/nodes/Guardrails/helpers/common.js.map +1 -0
- package/dist/nodes/Guardrails/helpers/configureNodeInputs.js +50 -0
- package/dist/nodes/Guardrails/helpers/configureNodeInputs.js.map +1 -0
- package/dist/nodes/Guardrails/helpers/mappers.js +100 -0
- package/dist/nodes/Guardrails/helpers/mappers.js.map +1 -0
- package/dist/nodes/Guardrails/helpers/model.js +144 -0
- package/dist/nodes/Guardrails/helpers/model.js.map +1 -0
- package/dist/nodes/Guardrails/helpers/preflight.js +61 -0
- package/dist/nodes/Guardrails/helpers/preflight.js.map +1 -0
- package/dist/nodes/agents/Agent/V1/AgentV1.node.js +6 -0
- package/dist/nodes/agents/Agent/V1/AgentV1.node.js.map +1 -1
- package/dist/nodes/agents/Agent/V2/AgentV2.node.js +8 -0
- package/dist/nodes/agents/Agent/V2/AgentV2.node.js.map +1 -1
- package/dist/nodes/agents/Agent/V3/AgentV3.node.js +8 -0
- package/dist/nodes/agents/Agent/V3/AgentV3.node.js.map +1 -1
- package/dist/nodes/agents/Agent/agents/SqlAgent/description.js +10 -0
- package/dist/nodes/agents/Agent/agents/SqlAgent/description.js.map +1 -1
- package/dist/nodes/agents/Agent/agents/ToolsAgent/V2/execute.js +22 -0
- package/dist/nodes/agents/Agent/agents/ToolsAgent/V2/execute.js.map +1 -1
- package/dist/nodes/agents/Agent/agents/ToolsAgent/V3/execute.js +24 -5
- package/dist/nodes/agents/Agent/agents/ToolsAgent/V3/execute.js.map +1 -1
- package/dist/nodes/chains/ChainLLM/methods/config.js +4 -0
- package/dist/nodes/chains/ChainLLM/methods/config.js.map +1 -1
- package/dist/nodes/chains/ChainRetrievalQA/ChainRetrievalQa.node.js +6 -0
- package/dist/nodes/chains/ChainRetrievalQA/ChainRetrievalQa.node.js.map +1 -1
- package/dist/nodes/llms/LMChatAnthropic/LmChatAnthropic.node.js +2 -2
- package/dist/nodes/llms/LMChatAnthropic/LmChatAnthropic.node.js.map +1 -1
- package/dist/nodes/llms/LMChatOpenAi/LmChatOpenAi.node.js +448 -24
- package/dist/nodes/llms/LMChatOpenAi/LmChatOpenAi.node.js.map +1 -1
- package/dist/nodes/llms/LMChatOpenAi/common.js +155 -0
- package/dist/nodes/llms/LMChatOpenAi/common.js.map +1 -0
- package/dist/nodes/llms/LMChatOpenAi/methods/loadModels.js +1 -1
- package/dist/nodes/llms/LMChatOpenAi/methods/loadModels.js.map +1 -1
- package/dist/nodes/llms/LMChatOpenAi/types.js +17 -0
- package/dist/nodes/llms/LMChatOpenAi/types.js.map +1 -0
- package/dist/nodes/mcp/McpClientTool/McpClientTool.node.js +48 -3
- package/dist/nodes/mcp/McpClientTool/McpClientTool.node.js.map +1 -1
- package/dist/nodes/mcp/McpClientTool/loadOptions.js +2 -1
- package/dist/nodes/mcp/McpClientTool/loadOptions.js.map +1 -1
- package/dist/nodes/mcp/McpClientTool/types.js.map +1 -1
- package/dist/nodes/mcp/McpClientTool/utils.js +66 -4
- package/dist/nodes/mcp/McpClientTool/utils.js.map +1 -1
- package/dist/nodes/tools/ToolWorkflow/v2/ToolWorkflowV2.node.js +8 -1
- package/dist/nodes/tools/ToolWorkflow/v2/ToolWorkflowV2.node.js.map +1 -1
- package/dist/nodes/trigger/ChatTrigger/ChatTrigger.node.js +45 -2
- package/dist/nodes/trigger/ChatTrigger/ChatTrigger.node.js.map +1 -1
- package/dist/nodes/vector_store/VectorStoreMongoDBAtlas/VectorStoreMongoDBAtlas.node.js +3 -1
- package/dist/nodes/vector_store/VectorStoreMongoDBAtlas/VectorStoreMongoDBAtlas.node.js.map +1 -1
- package/dist/nodes/vendors/Anthropic/actions/descriptions.js +1 -1
- package/dist/nodes/vendors/Anthropic/actions/descriptions.js.map +1 -1
- package/dist/nodes/vendors/OpenAi/helpers/utils.js +5 -0
- package/dist/nodes/vendors/OpenAi/helpers/utils.js.map +1 -1
- package/dist/nodes/vendors/OpenAi/v1/actions/assistant/message.operation.js +6 -12
- package/dist/nodes/vendors/OpenAi/v1/actions/assistant/message.operation.js.map +1 -1
- package/dist/nodes/vendors/OpenAi/v2/actions/text/response.operation.js +31 -6
- package/dist/nodes/vendors/OpenAi/v2/actions/text/response.operation.js.map +1 -1
- package/dist/types/credentials.json +1 -0
- package/dist/types/nodes.json +14 -13
- package/dist/utils/descriptions.js +18 -0
- package/dist/utils/descriptions.js.map +1 -1
- package/dist/utils/helpers.js +4 -1
- package/dist/utils/helpers.js.map +1 -1
- package/package.json +11 -9
|
@@ -0,0 +1,220 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
var __defProp = Object.defineProperty;
|
|
3
|
+
var __getOwnPropDesc = Object.getOwnPropertyDescriptor;
|
|
4
|
+
var __getOwnPropNames = Object.getOwnPropertyNames;
|
|
5
|
+
var __hasOwnProp = Object.prototype.hasOwnProperty;
|
|
6
|
+
var __export = (target, all) => {
|
|
7
|
+
for (var name in all)
|
|
8
|
+
__defProp(target, name, { get: all[name], enumerable: true });
|
|
9
|
+
};
|
|
10
|
+
var __copyProps = (to, from, except, desc) => {
|
|
11
|
+
if (from && typeof from === "object" || typeof from === "function") {
|
|
12
|
+
for (let key of __getOwnPropNames(from))
|
|
13
|
+
if (!__hasOwnProp.call(to, key) && key !== except)
|
|
14
|
+
__defProp(to, key, { get: () => from[key], enumerable: !(desc = __getOwnPropDesc(from, key)) || desc.enumerable });
|
|
15
|
+
}
|
|
16
|
+
return to;
|
|
17
|
+
};
|
|
18
|
+
var __toCommonJS = (mod) => __copyProps(__defProp({}, "__esModule", { value: true }), mod);
|
|
19
|
+
var process_exports = {};
|
|
20
|
+
__export(process_exports, {
|
|
21
|
+
process: () => process
|
|
22
|
+
});
|
|
23
|
+
module.exports = __toCommonJS(process_exports);
|
|
24
|
+
var import_n8n_workflow = require("n8n-workflow");
|
|
25
|
+
var import_base = require("../helpers/base");
|
|
26
|
+
var import_common = require("../helpers/common");
|
|
27
|
+
var import_mappers = require("../helpers/mappers");
|
|
28
|
+
var import_model = require("../helpers/model");
|
|
29
|
+
var import_preflight = require("../helpers/preflight");
|
|
30
|
+
var import_jailbreak = require("./checks/jailbreak");
|
|
31
|
+
var import_keywords = require("./checks/keywords");
|
|
32
|
+
var import_nsfw = require("./checks/nsfw");
|
|
33
|
+
var import_pii = require("./checks/pii");
|
|
34
|
+
var import_secretKeys = require("./checks/secretKeys");
|
|
35
|
+
var import_topicalAlignment = require("./checks/topicalAlignment");
|
|
36
|
+
var import_urls = require("./checks/urls");
|
|
37
|
+
async function process(itemIndex, model) {
|
|
38
|
+
const inputText = this.getNodeParameter("text", itemIndex);
|
|
39
|
+
const operation = this.getNodeParameter("operation", 0);
|
|
40
|
+
const guardrails = this.getNodeParameter("guardrails", itemIndex);
|
|
41
|
+
const customizeSystemMessage = operation === "classify" && this.getNodeParameter("customizeSystemMessage", itemIndex, false);
|
|
42
|
+
const systemMessage = customizeSystemMessage ? this.getNodeParameter("systemMessage", itemIndex) : void 0;
|
|
43
|
+
const failedChecks = [];
|
|
44
|
+
const passedChecks = [];
|
|
45
|
+
const handleFailedResults = (results) => {
|
|
46
|
+
const unexpectedError = results.failed.find(
|
|
47
|
+
(result) => result.status === "rejected" || result.status === "fulfilled" && result.value.executionFailed
|
|
48
|
+
);
|
|
49
|
+
if (results.failed.length && operation === "sanitize") {
|
|
50
|
+
throw new import_n8n_workflow.NodeOperationError(this.getNode(), "Failed to sanitize text", {
|
|
51
|
+
description: (0, import_mappers.mapGuardrailErrorsToMessage)(results.failed),
|
|
52
|
+
itemIndex
|
|
53
|
+
});
|
|
54
|
+
}
|
|
55
|
+
if (unexpectedError && !this.continueOnFail()) {
|
|
56
|
+
const error = unexpectedError.status === "rejected" ? unexpectedError.reason : unexpectedError.value.originalException;
|
|
57
|
+
throw new import_n8n_workflow.NodeOperationError(this.getNode(), error, {
|
|
58
|
+
description: error?.description || error?.message,
|
|
59
|
+
itemIndex
|
|
60
|
+
});
|
|
61
|
+
}
|
|
62
|
+
return results.failed.map(import_mappers.mapGuardrailResultToUserResult);
|
|
63
|
+
};
|
|
64
|
+
const stageGuardrails = {
|
|
65
|
+
preflight: [],
|
|
66
|
+
input: []
|
|
67
|
+
};
|
|
68
|
+
if (guardrails.pii?.value) {
|
|
69
|
+
const { entities } = guardrails.pii.value;
|
|
70
|
+
stageGuardrails.preflight.push({
|
|
71
|
+
name: "personalData",
|
|
72
|
+
check: (0, import_pii.createPiiCheckFn)({
|
|
73
|
+
entities
|
|
74
|
+
})
|
|
75
|
+
});
|
|
76
|
+
}
|
|
77
|
+
if (guardrails.customRegex?.regex) {
|
|
78
|
+
stageGuardrails.preflight.push({
|
|
79
|
+
name: "customRegex",
|
|
80
|
+
check: (0, import_pii.createCustomRegexCheckFn)({
|
|
81
|
+
customRegex: guardrails.customRegex.regex
|
|
82
|
+
})
|
|
83
|
+
});
|
|
84
|
+
}
|
|
85
|
+
if (guardrails.secretKeys?.value) {
|
|
86
|
+
const { permissiveness } = guardrails.secretKeys.value;
|
|
87
|
+
stageGuardrails.preflight.push({
|
|
88
|
+
name: "secretKeys",
|
|
89
|
+
check: (0, import_secretKeys.createSecretKeysCheckFn)({ threshold: permissiveness })
|
|
90
|
+
});
|
|
91
|
+
}
|
|
92
|
+
if (guardrails.urls?.value) {
|
|
93
|
+
const { allowedUrls, allowedSchemes, blockUserinfo, allowSubdomains } = guardrails.urls.value;
|
|
94
|
+
stageGuardrails.preflight.push({
|
|
95
|
+
name: "urls",
|
|
96
|
+
check: (0, import_urls.createUrlsCheckFn)({
|
|
97
|
+
allowedUrls: (0, import_common.splitByComma)(allowedUrls),
|
|
98
|
+
allowedSchemes,
|
|
99
|
+
blockUserinfo,
|
|
100
|
+
allowSubdomains
|
|
101
|
+
})
|
|
102
|
+
});
|
|
103
|
+
}
|
|
104
|
+
if (operation === "classify") {
|
|
105
|
+
if (!model) {
|
|
106
|
+
throw new import_n8n_workflow.NodeOperationError(this.getNode(), "Chat Model is required for classify operation");
|
|
107
|
+
}
|
|
108
|
+
if (guardrails.keywords) {
|
|
109
|
+
stageGuardrails.input.push({
|
|
110
|
+
name: "keywords",
|
|
111
|
+
check: (0, import_keywords.createKeywordsCheckFn)({ keywords: (0, import_common.splitByComma)(guardrails.keywords) })
|
|
112
|
+
});
|
|
113
|
+
}
|
|
114
|
+
if (guardrails.jailbreak?.value) {
|
|
115
|
+
const { prompt, threshold } = guardrails.jailbreak.value;
|
|
116
|
+
stageGuardrails.input.push({
|
|
117
|
+
name: "jailbreak",
|
|
118
|
+
check: (0, import_jailbreak.createJailbreakCheckFn)({
|
|
119
|
+
model,
|
|
120
|
+
prompt: prompt?.trim() || import_jailbreak.JAILBREAK_PROMPT,
|
|
121
|
+
threshold,
|
|
122
|
+
systemMessage
|
|
123
|
+
})
|
|
124
|
+
});
|
|
125
|
+
}
|
|
126
|
+
if (guardrails.nsfw?.value) {
|
|
127
|
+
const { prompt, threshold } = guardrails.nsfw.value;
|
|
128
|
+
stageGuardrails.input.push({
|
|
129
|
+
name: "nsfw",
|
|
130
|
+
check: (0, import_nsfw.createNSFWCheckFn)({
|
|
131
|
+
model,
|
|
132
|
+
prompt: prompt?.trim() || import_nsfw.NSFW_SYSTEM_PROMPT,
|
|
133
|
+
threshold,
|
|
134
|
+
systemMessage
|
|
135
|
+
})
|
|
136
|
+
});
|
|
137
|
+
}
|
|
138
|
+
if (guardrails.topicalAlignment?.value) {
|
|
139
|
+
const { prompt, threshold } = guardrails.topicalAlignment.value;
|
|
140
|
+
stageGuardrails.input.push({
|
|
141
|
+
name: "topicalAlignment",
|
|
142
|
+
check: (0, import_topicalAlignment.createTopicalAlignmentCheckFn)({
|
|
143
|
+
model,
|
|
144
|
+
prompt: prompt?.trim() || import_topicalAlignment.TOPICAL_ALIGNMENT_SYSTEM_PROMPT,
|
|
145
|
+
systemMessage,
|
|
146
|
+
threshold
|
|
147
|
+
})
|
|
148
|
+
});
|
|
149
|
+
}
|
|
150
|
+
if (guardrails.custom?.guardrail) {
|
|
151
|
+
for (const customGuardrail of guardrails.custom.guardrail) {
|
|
152
|
+
const { prompt, threshold, name } = customGuardrail;
|
|
153
|
+
stageGuardrails.input.push({
|
|
154
|
+
name,
|
|
155
|
+
check: (0, import_model.createLLMCheckFn)(name, {
|
|
156
|
+
model,
|
|
157
|
+
prompt,
|
|
158
|
+
threshold,
|
|
159
|
+
systemMessage
|
|
160
|
+
})
|
|
161
|
+
});
|
|
162
|
+
}
|
|
163
|
+
}
|
|
164
|
+
}
|
|
165
|
+
const preflightResults = await (0, import_base.runStageGuardrails)({
|
|
166
|
+
inputText,
|
|
167
|
+
stageGuardrails,
|
|
168
|
+
stage: "preflight",
|
|
169
|
+
failOnlyOnErrors: operation === "sanitize"
|
|
170
|
+
});
|
|
171
|
+
if (preflightResults.failed.length > 0) {
|
|
172
|
+
failedChecks.push.apply(failedChecks, handleFailedResults(preflightResults));
|
|
173
|
+
return {
|
|
174
|
+
guardrailsInput: inputText,
|
|
175
|
+
passed: null,
|
|
176
|
+
failed: {
|
|
177
|
+
checks: failedChecks
|
|
178
|
+
}
|
|
179
|
+
};
|
|
180
|
+
} else {
|
|
181
|
+
passedChecks.push.apply(
|
|
182
|
+
passedChecks,
|
|
183
|
+
preflightResults.passed.map(import_mappers.mapGuardrailResultToUserResult)
|
|
184
|
+
);
|
|
185
|
+
}
|
|
186
|
+
const modifiedInputText = (0, import_preflight.applyPreflightModifications)(
|
|
187
|
+
inputText,
|
|
188
|
+
preflightResults.passed.map((result) => result.value)
|
|
189
|
+
);
|
|
190
|
+
const inputResults = await (0, import_base.runStageGuardrails)({
|
|
191
|
+
inputText: modifiedInputText,
|
|
192
|
+
stageGuardrails,
|
|
193
|
+
stage: "input",
|
|
194
|
+
failOnlyOnErrors: operation === "sanitize"
|
|
195
|
+
});
|
|
196
|
+
if (inputResults.failed.length > 0) {
|
|
197
|
+
failedChecks.push.apply(failedChecks, handleFailedResults(inputResults));
|
|
198
|
+
return {
|
|
199
|
+
guardrailsInput: modifiedInputText,
|
|
200
|
+
passed: null,
|
|
201
|
+
failed: {
|
|
202
|
+
checks: failedChecks
|
|
203
|
+
}
|
|
204
|
+
};
|
|
205
|
+
} else {
|
|
206
|
+
passedChecks.push.apply(passedChecks, inputResults.passed.map(import_mappers.mapGuardrailResultToUserResult));
|
|
207
|
+
}
|
|
208
|
+
return {
|
|
209
|
+
guardrailsInput: modifiedInputText,
|
|
210
|
+
passed: {
|
|
211
|
+
checks: passedChecks
|
|
212
|
+
},
|
|
213
|
+
failed: null
|
|
214
|
+
};
|
|
215
|
+
}
|
|
216
|
+
// Annotate the CommonJS export names for ESM import in node:
|
|
217
|
+
0 && (module.exports = {
|
|
218
|
+
process
|
|
219
|
+
});
|
|
220
|
+
//# sourceMappingURL=process.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"sources":["../../../../nodes/Guardrails/actions/process.ts"],"sourcesContent":["import type { BaseChatModel } from '@langchain/core/language_models/chat_models';\nimport type { IExecuteFunctions } from 'n8n-workflow';\nimport { NodeOperationError } from 'n8n-workflow';\n\nimport { runStageGuardrails } from '../helpers/base';\nimport { splitByComma } from '../helpers/common';\nimport { mapGuardrailErrorsToMessage, mapGuardrailResultToUserResult } from '../helpers/mappers';\nimport { createLLMCheckFn } from '../helpers/model';\nimport { applyPreflightModifications } from '../helpers/preflight';\nimport { createJailbreakCheckFn, JAILBREAK_PROMPT } from './checks/jailbreak';\nimport { createKeywordsCheckFn } from './checks/keywords';\nimport { createNSFWCheckFn, NSFW_SYSTEM_PROMPT } from './checks/nsfw';\nimport { createCustomRegexCheckFn, createPiiCheckFn } from './checks/pii';\nimport { createSecretKeysCheckFn } from './checks/secretKeys';\nimport {\n\tcreateTopicalAlignmentCheckFn,\n\tTOPICAL_ALIGNMENT_SYSTEM_PROMPT,\n} from './checks/topicalAlignment';\nimport { createUrlsCheckFn } from './checks/urls';\nimport type {\n\tGroupedGuardrailResults,\n\tGuardrailsOptions,\n\tGuardrailUserResult,\n\tStageGuardRails,\n} from './types';\n\ninterface Result {\n\tchecks: GuardrailUserResult[];\n}\n\nexport async function process(\n\tthis: IExecuteFunctions,\n\titemIndex: number,\n\tmodel: BaseChatModel | null,\n): Promise<{\n\tguardrailsInput: string;\n\tpassed: Result | null;\n\tfailed: Result | null;\n}> {\n\tconst inputText = this.getNodeParameter('text', itemIndex) as string;\n\tconst operation = this.getNodeParameter('operation', 0) as 'classify' | 'sanitize';\n\tconst guardrails = this.getNodeParameter('guardrails', itemIndex) as GuardrailsOptions;\n\tconst customizeSystemMessage =\n\t\toperation === 'classify' &&\n\t\t(this.getNodeParameter('customizeSystemMessage', itemIndex, false) as boolean);\n\tconst systemMessage = customizeSystemMessage\n\t\t? (this.getNodeParameter('systemMessage', itemIndex) as string)\n\t\t: undefined;\n\tconst failedChecks: GuardrailUserResult[] = [];\n\tconst passedChecks: GuardrailUserResult[] = [];\n\n\tconst handleFailedResults = (results: GroupedGuardrailResults): GuardrailUserResult[] => {\n\t\tconst unexpectedError = results.failed.find(\n\t\t\t(result) =>\n\t\t\t\tresult.status === 'rejected' ||\n\t\t\t\t(result.status === 'fulfilled' && result.value.executionFailed),\n\t\t);\n\n\t\tif (results.failed.length && operation === 'sanitize') {\n\t\t\tthrow new NodeOperationError(this.getNode(), 'Failed to sanitize text', {\n\t\t\t\tdescription: mapGuardrailErrorsToMessage(results.failed),\n\t\t\t\titemIndex,\n\t\t\t});\n\t\t}\n\t\tif (unexpectedError && !this.continueOnFail()) {\n\t\t\tconst error =\n\t\t\t\tunexpectedError.status === 'rejected'\n\t\t\t\t\t? unexpectedError.reason\n\t\t\t\t\t: unexpectedError.value.originalException;\n\t\t\tthrow new NodeOperationError(this.getNode(), error, {\n\t\t\t\tdescription: error?.description || error?.message,\n\t\t\t\titemIndex,\n\t\t\t});\n\t\t}\n\t\treturn results.failed.map(mapGuardrailResultToUserResult);\n\t};\n\n\tconst stageGuardrails: StageGuardRails = {\n\t\tpreflight: [],\n\t\tinput: [],\n\t};\n\n\tif (guardrails.pii?.value) {\n\t\tconst { entities } = guardrails.pii.value;\n\t\tstageGuardrails.preflight.push({\n\t\t\tname: 'personalData',\n\t\t\tcheck: createPiiCheckFn({\n\t\t\t\tentities,\n\t\t\t}),\n\t\t});\n\t}\n\n\tif (guardrails.customRegex?.regex) {\n\t\tstageGuardrails.preflight.push({\n\t\t\tname: 'customRegex',\n\t\t\tcheck: createCustomRegexCheckFn({\n\t\t\t\tcustomRegex: guardrails.customRegex.regex,\n\t\t\t}),\n\t\t});\n\t}\n\n\tif (guardrails.secretKeys?.value) {\n\t\tconst { permissiveness } = guardrails.secretKeys.value;\n\t\tstageGuardrails.preflight.push({\n\t\t\tname: 'secretKeys',\n\t\t\tcheck: createSecretKeysCheckFn({ threshold: permissiveness }),\n\t\t});\n\t}\n\n\tif (guardrails.urls?.value) {\n\t\tconst { allowedUrls, allowedSchemes, blockUserinfo, allowSubdomains } = guardrails.urls.value;\n\t\tstageGuardrails.preflight.push({\n\t\t\tname: 'urls',\n\t\t\tcheck: createUrlsCheckFn({\n\t\t\t\tallowedUrls: splitByComma(allowedUrls),\n\t\t\t\tallowedSchemes,\n\t\t\t\tblockUserinfo,\n\t\t\t\tallowSubdomains,\n\t\t\t}),\n\t\t});\n\t}\n\n\tif (operation === 'classify') {\n\t\tif (!model) {\n\t\t\tthrow new NodeOperationError(this.getNode(), 'Chat Model is required for classify operation');\n\t\t}\n\n\t\tif (guardrails.keywords) {\n\t\t\tstageGuardrails.input.push({\n\t\t\t\tname: 'keywords',\n\t\t\t\tcheck: createKeywordsCheckFn({ keywords: splitByComma(guardrails.keywords) }),\n\t\t\t});\n\t\t}\n\n\t\tif (guardrails.jailbreak?.value) {\n\t\t\tconst { prompt, threshold } = guardrails.jailbreak.value;\n\t\t\tstageGuardrails.input.push({\n\t\t\t\tname: 'jailbreak',\n\t\t\t\tcheck: createJailbreakCheckFn({\n\t\t\t\t\tmodel,\n\t\t\t\t\tprompt: prompt?.trim() || JAILBREAK_PROMPT,\n\t\t\t\t\tthreshold,\n\t\t\t\t\tsystemMessage,\n\t\t\t\t}),\n\t\t\t});\n\t\t}\n\n\t\tif (guardrails.nsfw?.value) {\n\t\t\tconst { prompt, threshold } = guardrails.nsfw.value;\n\t\t\tstageGuardrails.input.push({\n\t\t\t\tname: 'nsfw',\n\t\t\t\tcheck: createNSFWCheckFn({\n\t\t\t\t\tmodel,\n\t\t\t\t\tprompt: prompt?.trim() || NSFW_SYSTEM_PROMPT,\n\t\t\t\t\tthreshold,\n\t\t\t\t\tsystemMessage,\n\t\t\t\t}),\n\t\t\t});\n\t\t}\n\n\t\tif (guardrails.topicalAlignment?.value) {\n\t\t\tconst { prompt, threshold } = guardrails.topicalAlignment.value;\n\t\t\tstageGuardrails.input.push({\n\t\t\t\tname: 'topicalAlignment',\n\t\t\t\tcheck: createTopicalAlignmentCheckFn({\n\t\t\t\t\tmodel,\n\t\t\t\t\tprompt: prompt?.trim() || TOPICAL_ALIGNMENT_SYSTEM_PROMPT,\n\t\t\t\t\tsystemMessage,\n\t\t\t\t\tthreshold,\n\t\t\t\t}),\n\t\t\t});\n\t\t}\n\n\t\tif (guardrails.custom?.guardrail) {\n\t\t\tfor (const customGuardrail of guardrails.custom.guardrail) {\n\t\t\t\tconst { prompt, threshold, name } = customGuardrail;\n\t\t\t\tstageGuardrails.input.push({\n\t\t\t\t\tname,\n\t\t\t\t\tcheck: createLLMCheckFn(name, {\n\t\t\t\t\t\tmodel,\n\t\t\t\t\t\tprompt,\n\t\t\t\t\t\tthreshold,\n\t\t\t\t\t\tsystemMessage,\n\t\t\t\t\t}),\n\t\t\t\t});\n\t\t\t}\n\t\t}\n\t}\n\n\tconst preflightResults = await runStageGuardrails({\n\t\tinputText,\n\t\tstageGuardrails,\n\t\tstage: 'preflight',\n\t\tfailOnlyOnErrors: operation === 'sanitize',\n\t});\n\n\tif (preflightResults.failed.length > 0) {\n\t\tfailedChecks.push.apply(failedChecks, handleFailedResults(preflightResults));\n\t\treturn {\n\t\t\tguardrailsInput: inputText,\n\t\t\tpassed: null,\n\t\t\tfailed: {\n\t\t\t\tchecks: failedChecks,\n\t\t\t},\n\t\t};\n\t} else {\n\t\tpassedChecks.push.apply(\n\t\t\tpassedChecks,\n\t\t\tpreflightResults.passed.map(mapGuardrailResultToUserResult),\n\t\t);\n\t}\n\n\tconst modifiedInputText = applyPreflightModifications(\n\t\tinputText,\n\t\tpreflightResults.passed.map((result) => result.value),\n\t);\n\n\tconst inputResults = await runStageGuardrails({\n\t\tinputText: modifiedInputText,\n\t\tstageGuardrails,\n\t\tstage: 'input',\n\t\tfailOnlyOnErrors: operation === 'sanitize',\n\t});\n\tif (inputResults.failed.length > 0) {\n\t\tfailedChecks.push.apply(failedChecks, handleFailedResults(inputResults));\n\t\treturn {\n\t\t\tguardrailsInput: modifiedInputText,\n\t\t\tpassed: null,\n\t\t\tfailed: {\n\t\t\t\tchecks: failedChecks,\n\t\t\t},\n\t\t};\n\t} else {\n\t\tpassedChecks.push.apply(passedChecks, inputResults.passed.map(mapGuardrailResultToUserResult));\n\t}\n\n\treturn {\n\t\tguardrailsInput: modifiedInputText,\n\t\tpassed: {\n\t\t\tchecks: passedChecks,\n\t\t},\n\t\tfailed: null,\n\t};\n}\n"],"mappings":"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","names":[]}
|
|
@@ -0,0 +1,35 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
var __defProp = Object.defineProperty;
|
|
3
|
+
var __getOwnPropDesc = Object.getOwnPropertyDescriptor;
|
|
4
|
+
var __getOwnPropNames = Object.getOwnPropertyNames;
|
|
5
|
+
var __hasOwnProp = Object.prototype.hasOwnProperty;
|
|
6
|
+
var __export = (target, all) => {
|
|
7
|
+
for (var name in all)
|
|
8
|
+
__defProp(target, name, { get: all[name], enumerable: true });
|
|
9
|
+
};
|
|
10
|
+
var __copyProps = (to, from, except, desc) => {
|
|
11
|
+
if (from && typeof from === "object" || typeof from === "function") {
|
|
12
|
+
for (let key of __getOwnPropNames(from))
|
|
13
|
+
if (!__hasOwnProp.call(to, key) && key !== except)
|
|
14
|
+
__defProp(to, key, { get: () => from[key], enumerable: !(desc = __getOwnPropDesc(from, key)) || desc.enumerable });
|
|
15
|
+
}
|
|
16
|
+
return to;
|
|
17
|
+
};
|
|
18
|
+
var __toCommonJS = (mod) => __copyProps(__defProp({}, "__esModule", { value: true }), mod);
|
|
19
|
+
var types_exports = {};
|
|
20
|
+
__export(types_exports, {
|
|
21
|
+
GuardrailError: () => GuardrailError
|
|
22
|
+
});
|
|
23
|
+
module.exports = __toCommonJS(types_exports);
|
|
24
|
+
class GuardrailError extends Error {
|
|
25
|
+
constructor(guardrailName, message, description) {
|
|
26
|
+
super(message);
|
|
27
|
+
this.guardrailName = guardrailName;
|
|
28
|
+
this.description = description;
|
|
29
|
+
}
|
|
30
|
+
}
|
|
31
|
+
// Annotate the CommonJS export names for ESM import in node:
|
|
32
|
+
0 && (module.exports = {
|
|
33
|
+
GuardrailError
|
|
34
|
+
});
|
|
35
|
+
//# sourceMappingURL=types.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"sources":["../../../../nodes/Guardrails/actions/types.ts"],"sourcesContent":["import type { BaseChatModel } from '@langchain/core/language_models/chat_models';\nimport type { PIIEntity } from './checks/pii';\n\nexport interface GuardrailResult<TInfo extends Record<string, unknown> = Record<string, unknown>> {\n\t/** The name of the guardrail. */\n\tguardrailName: string;\n\t/** True if the guardrail identified a critical failure. */\n\ttripwireTriggered: boolean;\n\t/** The confidence score of the guardrail. */\n\tconfidenceScore?: number;\n\t/** True if the guardrail failed to execute properly. */\n\texecutionFailed?: boolean;\n\t/** The original exception if execution failed. */\n\toriginalException?: Error;\n\t/** Additional structured data about the check result,\n such as error details, matched patterns, or diagnostic messages.\n Must include checked_text field containing the processed text. */\n\tinfo: TInfo & {\n\t\tmaskEntities?: Record<string, string[]>;\n\t};\n}\n\nexport type LLMConfig = {\n\tmodel: BaseChatModel;\n\tsystemMessage?: string;\n\tprompt: string;\n\tthreshold: number;\n};\n\nexport type CheckFn<TInfo extends Record<string, unknown> = Record<string, unknown>> = (\n\tinput: string,\n) => GuardrailResult<TInfo> | Promise<GuardrailResult<TInfo>>;\n\nexport type CreateCheckFn<\n\tTCfg = object,\n\tTInfo extends Record<string, unknown> = Record<string, unknown>,\n> = (config: TCfg) => CheckFn<TInfo>;\n\ntype Value<T> = {\n\tvalue?: T;\n};\n\nexport type CustomRegex = {\n\tname: string;\n\tvalue: string;\n};\n\nexport interface GuardrailsOptions {\n\tkeywords?: string;\n\tjailbreak?: Value<{\n\t\tprompt?: string;\n\t\tthreshold: number;\n\t}>;\n\tnsfw?: Value<{\n\t\tprompt?: string;\n\t\tthreshold: number;\n\t}>;\n\tpii?: Value<{\n\t\ttype: 'all' | 'selected';\n\t\tentities?: PIIEntity[];\n\t}>;\n\turls?: Value<{\n\t\tallowedUrls: string;\n\t\tallowedSchemes: string[];\n\t\tblockUserinfo: boolean;\n\t\tallowSubdomains: boolean;\n\t}>;\n\tsecretKeys?: Value<{\n\t\tpermissiveness: 'strict' | 'balanced' | 'permissive';\n\t}>;\n\ttopicalAlignment?: Value<{\n\t\tprompt?: string;\n\t\tthreshold: number;\n\t}>;\n\tcustom?: {\n\t\tguardrail: Array<{\n\t\t\tname: string;\n\t\t\tprompt: string;\n\t\t\tthreshold: number;\n\t\t}>;\n\t};\n\tcustomRegex?: {\n\t\tregex: CustomRegex[];\n\t};\n}\n\nexport interface GuardrailUserResult {\n\tname: string;\n\ttriggered: boolean;\n\tconfidenceScore?: number;\n\texecutionFailed?: boolean;\n\texception?: {\n\t\tname: string;\n\t\tdescription: string;\n\t};\n\tinfo?: Record<string, unknown>;\n}\n\nexport class GuardrailError extends Error {\n\tconstructor(\n\t\treadonly guardrailName: string,\n\t\tmessage: string,\n\t\treadonly description: string,\n\t) {\n\t\tsuper(message);\n\t}\n}\n\nexport interface StageGuardRails {\n\tpreflight: Array<{ name: string; check: CheckFn }>;\n\tinput: Array<{ name: string; check: CheckFn }>;\n}\nexport type GroupedGuardrailResults = {\n\tpassed: Array<PromiseFulfilledResult<GuardrailResult>>;\n\tfailed: Array<PromiseRejectedResult | PromiseFulfilledResult<GuardrailResult>>;\n};\n"],"mappings":";;;;;;;;;;;;;;;;;;AAAA;AAAA;AAAA;AAAA;AAAA;AAkGO,MAAM,uBAAuB,MAAM;AAAA,EACzC,YACU,eACT,SACS,aACR;AACD,UAAM,OAAO;AAJJ;AAEA;AAAA,EAGV;AACD;","names":[]}
|