@n8n/n8n-nodes-langchain 1.117.0 → 1.118.1
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 +8 -3
- 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/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/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/trigger/ChatTrigger/ChatTrigger.node.js +45 -2
- package/dist/nodes/trigger/ChatTrigger/ChatTrigger.node.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 +12 -11
- 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 +10 -8
|
@@ -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":[]}
|