add multi options

This commit is contained in:
Henry
2023-10-13 01:28:48 +01:00
parent 7a13cda9a3
commit db06f85c2a
7 changed files with 249 additions and 8 deletions
@@ -45,6 +45,66 @@ class UnstructuredFolder_DocumentLoaders implements INode {
type: 'string',
default: 'http://localhost:8000/general/v0/general'
},
{
label: 'Element Type',
name: 'elementType',
description:
'Unstructured partition document into different types, select the types to return. If not selected, all types will be returned',
type: 'multiOptions',
options: [
{
label: 'FigureCaption',
name: 'FigureCaption'
},
{
label: 'NarrativeText',
name: 'NarrativeText'
},
{
label: 'ListItem',
name: 'ListItem'
},
{
label: 'Title',
name: 'Title'
},
{
label: 'Address',
name: 'Address'
},
{
label: 'Table',
name: 'Table'
},
{
label: 'PageBreak',
name: 'PageBreak'
},
{
label: 'Header',
name: 'Header'
},
{
label: 'Footer',
name: 'Footer'
},
{
label: 'UncategorizedText',
name: 'UncategorizedText'
},
{
label: 'Image',
name: 'Image'
},
{
label: 'Formula',
name: 'Formula'
}
],
default: [],
optional: true,
additionalParams: true
},
{
label: 'Metadata',
name: 'metadata',
@@ -52,7 +112,6 @@ class UnstructuredFolder_DocumentLoaders implements INode {
optional: true,
additionalParams: true
}
/*TODO Add Filter Options*/
]
}
@@ -60,6 +119,7 @@ class UnstructuredFolder_DocumentLoaders implements INode {
const folderPath = nodeData.inputs?.folderPath as string
const unstructuredAPIUrl = nodeData.inputs?.unstructuredAPIUrl as string
const metadata = nodeData.inputs?.metadata
const elementType = nodeData.inputs?.elementType as string
const obj: UnstructuredLoaderOptions = { apiUrl: unstructuredAPIUrl }
@@ -70,6 +130,15 @@ class UnstructuredFolder_DocumentLoaders implements INode {
const loader = new UnstructuredDirectoryLoader(folderPath, obj)
const docs = await loader.load()
let elementTypes: string[] = []
if (elementType) {
try {
elementTypes = JSON.parse(elementType)
} catch (e) {
elementTypes = []
}
}
if (metadata) {
const parsedMetadata = typeof metadata === 'object' ? metadata : JSON.parse(metadata)
let finaldocs = []
@@ -83,10 +152,10 @@ class UnstructuredFolder_DocumentLoaders implements INode {
}
finaldocs.push(newdoc)
}
return finaldocs
return elementTypes.length ? finaldocs.filter((doc) => elementTypes.includes(doc.metadata.category)) : finaldocs
}
return docs
return elementTypes.length ? docs.filter((doc) => elementTypes.includes(doc.metadata.category)) : docs
}
}