diff --git a/packages/components/nodes/documentloaders/PlainText/PlainText.ts b/packages/components/nodes/documentloaders/PlainText/PlainText.ts index 261f2d98c..539536981 100644 --- a/packages/components/nodes/documentloaders/PlainText/PlainText.ts +++ b/packages/components/nodes/documentloaders/PlainText/PlainText.ts @@ -1,6 +1,7 @@ -import { INode, INodeData, INodeParams } from '../../../src/Interface' +import { INode, INodeData, INodeOutputsValue, INodeParams } from '../../../src/Interface' import { TextSplitter } from 'langchain/text_splitter' import { Document } from 'langchain/document' +import { handleEscapeCharacters } from '../../../src' class PlainText_DocumentLoaders implements INode { label: string @@ -12,6 +13,7 @@ class PlainText_DocumentLoaders implements INode { category: string baseClasses: string[] inputs: INodeParams[] + outputs: INodeOutputsValue[] constructor() { this.label = 'Plain Text' @@ -45,12 +47,25 @@ class PlainText_DocumentLoaders implements INode { additionalParams: true } ] + this.outputs = [ + { + label: 'Document', + name: 'document', + baseClasses: this.baseClasses + }, + { + label: 'Text', + name: 'text', + baseClasses: ['string', 'json'] + } + ] } async init(nodeData: INodeData): Promise { const textSplitter = nodeData.inputs?.textSplitter as TextSplitter const text = nodeData.inputs?.text as string const metadata = nodeData.inputs?.metadata + const output = nodeData.outputs?.output as string let alldocs: Document>[] = [] @@ -65,9 +80,9 @@ class PlainText_DocumentLoaders implements INode { ) } + let finaldocs: Document>[] = [] if (metadata) { const parsedMetadata = typeof metadata === 'object' ? metadata : JSON.parse(metadata) - let finaldocs: Document>[] = [] for (const doc of alldocs) { const newdoc = { ...doc, @@ -78,10 +93,19 @@ class PlainText_DocumentLoaders implements INode { } finaldocs.push(newdoc) } - return finaldocs + } else { + finaldocs = alldocs } - return alldocs + if (output === 'document') { + return finaldocs + } else { + let finaltext = '' + for (const doc of finaldocs) { + finaltext += `${doc.pageContent}\n` + } + return handleEscapeCharacters(finaltext, false) + } } } diff --git a/packages/components/nodes/documentloaders/Text/Text.ts b/packages/components/nodes/documentloaders/Text/Text.ts index dacf087c9..01b6ae5dd 100644 --- a/packages/components/nodes/documentloaders/Text/Text.ts +++ b/packages/components/nodes/documentloaders/Text/Text.ts @@ -1,6 +1,8 @@ -import { INode, INodeData, INodeParams } from '../../../src/Interface' +import { INode, INodeData, INodeOutputsValue, INodeParams } from '../../../src/Interface' import { TextSplitter } from 'langchain/text_splitter' import { TextLoader } from 'langchain/document_loaders/fs/text' +import { Document } from 'langchain/document' +import { handleEscapeCharacters } from '../../../src' class Text_DocumentLoaders implements INode { label: string @@ -12,6 +14,7 @@ class Text_DocumentLoaders implements INode { category: string baseClasses: string[] inputs: INodeParams[] + outputs: INodeOutputsValue[] constructor() { this.label = 'Text File' @@ -43,12 +46,25 @@ class Text_DocumentLoaders implements INode { additionalParams: true } ] + this.outputs = [ + { + label: 'Document', + name: 'document', + baseClasses: this.baseClasses + }, + { + label: 'Text', + name: 'text', + baseClasses: ['string', 'json'] + } + ] } async init(nodeData: INodeData): Promise { const textSplitter = nodeData.inputs?.textSplitter as TextSplitter const txtFileBase64 = nodeData.inputs?.txtFile as string const metadata = nodeData.inputs?.metadata + const output = nodeData.outputs?.output as string let alldocs = [] let files: string[] = [] @@ -75,9 +91,9 @@ class Text_DocumentLoaders implements INode { } } + let finaldocs: Document>[] = [] if (metadata) { const parsedMetadata = typeof metadata === 'object' ? metadata : JSON.parse(metadata) - let finaldocs = [] for (const doc of alldocs) { const newdoc = { ...doc, @@ -88,9 +104,19 @@ class Text_DocumentLoaders implements INode { } finaldocs.push(newdoc) } - return finaldocs + } else { + finaldocs = alldocs + } + + if (output === 'document') { + return finaldocs + } else { + let finaltext = '' + for (const doc of finaldocs) { + finaltext += `${doc.pageContent}\n` + } + return handleEscapeCharacters(finaltext, false) } - return alldocs } }