@n8n/n8n-nodes-langchain
Version:

111 lines • 4.1 kB
JavaScript
;
Object.defineProperty(exports, "__esModule", { value: true });
exports.TextSplitterRecursiveCharacterTextSplitter = void 0;
const textsplitters_1 = require("@langchain/textsplitters");
const n8n_workflow_1 = require("n8n-workflow");
const ai_utilities_1 = require("@n8n/ai-utilities");
const supportedLanguages = [
'cpp',
'go',
'java',
'js',
'php',
'proto',
'python',
'rst',
'ruby',
'rust',
'scala',
'swift',
'markdown',
'latex',
'html',
];
class TextSplitterRecursiveCharacterTextSplitter {
constructor() {
this.description = {
displayName: 'Recursive Character Text Splitter',
name: 'textSplitterRecursiveCharacterTextSplitter',
icon: 'node:recursive-character-text-splitter',
iconColor: 'black',
group: ['transform'],
version: 1,
description: 'Split text into chunks by characters recursively, recommended for most use cases',
defaults: {
name: 'Recursive Character Text Splitter',
},
codex: {
categories: ['AI'],
subcategories: {
AI: ['Text Splitters'],
},
resources: {
primaryDocumentation: [
{
url: 'https://docs.n8n.io/integrations/builtin/cluster-nodes/sub-nodes/n8n-nodes-langchain.textsplitterrecursivecharactertextsplitter/',
},
],
},
},
inputs: [],
outputs: [n8n_workflow_1.NodeConnectionTypes.AiTextSplitter],
outputNames: ['Text Splitter'],
properties: [
(0, ai_utilities_1.getConnectionHintNoticeField)([n8n_workflow_1.NodeConnectionTypes.AiDocument]),
{
displayName: 'Chunk Size',
name: 'chunkSize',
type: 'number',
default: 1000,
},
{
displayName: 'Chunk Overlap',
name: 'chunkOverlap',
type: 'number',
default: 0,
},
{
displayName: 'Options',
name: 'options',
placeholder: 'Add Option',
description: 'Additional options to add',
type: 'collection',
default: {},
options: [
{
displayName: 'Split Code',
name: 'splitCode',
default: 'markdown',
type: 'options',
options: supportedLanguages.map((lang) => ({ name: lang, value: lang })),
},
],
},
],
};
}
async supplyData(itemIndex) {
this.logger.debug('Supply Data for Text Splitter');
const chunkSize = this.getNodeParameter('chunkSize', itemIndex);
const chunkOverlap = this.getNodeParameter('chunkOverlap', itemIndex);
const splitCode = this.getNodeParameter('options.splitCode', itemIndex, null);
const params = {
separators: ['\n\n', '\n', ' ', ''],
chunkSize,
chunkOverlap,
keepSeparator: false,
};
let splitter;
if (splitCode && supportedLanguages.includes(splitCode)) {
splitter = textsplitters_1.RecursiveCharacterTextSplitter.fromLanguage(splitCode, params);
}
else {
splitter = new textsplitters_1.RecursiveCharacterTextSplitter(params);
}
return {
response: (0, ai_utilities_1.logWrapper)(splitter, this),
};
}
}
exports.TextSplitterRecursiveCharacterTextSplitter = TextSplitterRecursiveCharacterTextSplitter;
//# sourceMappingURL=TextSplitterRecursiveCharacterTextSplitter.node.js.map