From 5a1c1397a363adeb1c459b0bdafe6664934442c5 Mon Sep 17 00:00:00 2001 From: Henry Date: Mon, 29 May 2023 00:34:53 +0100 Subject: [PATCH] add notionDB --- .../Notion/{Notion.ts => NotionDB.ts} | 49 +++++++++++++------ packages/components/package.json | 2 +- 2 files changed, 35 insertions(+), 16 deletions(-) rename packages/components/nodes/documentloaders/Notion/{Notion.ts => NotionDB.ts} (54%) diff --git a/packages/components/nodes/documentloaders/Notion/Notion.ts b/packages/components/nodes/documentloaders/Notion/NotionDB.ts similarity index 54% rename from packages/components/nodes/documentloaders/Notion/Notion.ts rename to packages/components/nodes/documentloaders/Notion/NotionDB.ts index f5bfcb2a..e1eb182a 100644 --- a/packages/components/nodes/documentloaders/Notion/Notion.ts +++ b/packages/components/nodes/documentloaders/Notion/NotionDB.ts @@ -1,8 +1,8 @@ import { INode, INodeData, INodeParams } from '../../../src/Interface' import { TextSplitter } from 'langchain/text_splitter' -import { NotionLoader } from 'langchain/document_loaders/fs/notion' +import { NotionDBLoader } from 'langchain/document_loaders/web/notiondb' -class Notion_DocumentLoaders implements INode { +class NotionDB_DocumentLoaders implements INode { label: string name: string description: string @@ -13,27 +13,40 @@ class Notion_DocumentLoaders implements INode { inputs: INodeParams[] constructor() { - this.label = 'Notion Folder' - this.name = 'notionFolder' + this.label = 'Notion Database' + this.name = 'notionDB' this.type = 'Document' this.icon = 'notion.png' this.category = 'Document Loaders' - this.description = `Load data from Notion folder` + this.description = `Load data from Notion Database` this.baseClasses = [this.type] this.inputs = [ - { - label: 'Notion Folder', - name: 'notionFolder', - type: 'string', - description: 'Get folder path', - placeholder: 'Paste folder path' - }, { label: 'Text Splitter', name: 'textSplitter', type: 'TextSplitter', optional: true }, + { + label: 'Notion Database Id', + name: 'databaseId', + type: 'string', + description: + 'If your URL looks like - https://www.notion.so/?v=, then is the database ID' + }, + { + label: 'Notion Integration Token', + name: 'notionIntegrationToken', + type: 'string', + description: + 'You can find integration token here' + }, + { + label: 'Page Size Limit', + name: 'pageSizeLimit', + type: 'number', + default: 10 + }, { label: 'Metadata', name: 'metadata', @@ -46,10 +59,16 @@ class Notion_DocumentLoaders implements INode { async init(nodeData: INodeData): Promise { const textSplitter = nodeData.inputs?.textSplitter as TextSplitter - const notionFolder = nodeData.inputs?.notionFolder as string + const databaseId = nodeData.inputs?.databaseId as string + const notionIntegrationToken = nodeData.inputs?.notionIntegrationToken as string + const pageSizeLimit = nodeData.inputs?.pageSizeLimit as string const metadata = nodeData.inputs?.metadata - const loader = new NotionLoader(notionFolder) + const loader = new NotionDBLoader({ + pageSizeLimit: pageSizeLimit ? parseInt(pageSizeLimit, 10) : 10, + databaseId, + notionIntegrationToken + }) let docs = [] if (textSplitter) { @@ -78,4 +97,4 @@ class Notion_DocumentLoaders implements INode { } } -module.exports = { nodeClass: Notion_DocumentLoaders } +module.exports = { nodeClass: NotionDB_DocumentLoaders } diff --git a/packages/components/package.json b/packages/components/package.json index bf149bfd..b76e729c 100644 --- a/packages/components/package.json +++ b/packages/components/package.json @@ -30,7 +30,7 @@ "express": "^4.17.3", "form-data": "^4.0.0", "graphql": "^16.6.0", - "langchain": "^0.0.82", + "langchain": "^0.0.84", "linkifyjs": "^4.1.1", "mammoth": "^1.5.1", "moment": "^2.29.3",