From 6827a13e37a0f7acbf5a67a7a6192b66944a9a15 Mon Sep 17 00:00:00 2001 From: Henry Date: Tue, 11 Jul 2023 16:29:30 +0100 Subject: [PATCH 01/57] clear session memory --- .../nodes/memory/DynamoDb/DynamoDb.ts | 66 +++++++++++-------- .../memory/MotorheadMemory/MotorheadMemory.ts | 63 ++++++++++-------- .../RedisBackedChatMemory.ts | 55 +++++++++------- .../nodes/memory/ZepMemory/ZepMemory.ts | 53 +++++++++------ packages/components/src/Interface.ts | 1 + packages/server/src/index.ts | 18 ++++- packages/server/src/utils/index.ts | 23 +++++++ 7 files changed, 178 insertions(+), 101 deletions(-) diff --git a/packages/components/nodes/memory/DynamoDb/DynamoDb.ts b/packages/components/nodes/memory/DynamoDb/DynamoDb.ts index 49d15cb61..2ea7ba048 100644 --- a/packages/components/nodes/memory/DynamoDb/DynamoDb.ts +++ b/packages/components/nodes/memory/DynamoDb/DynamoDb.ts @@ -65,37 +65,47 @@ class DynamoDb_Memory implements INode { } ] } + async init(nodeData: INodeData, _: string, options: ICommonObject): Promise { - const tableName = nodeData.inputs?.tableName as string - const partitionKey = nodeData.inputs?.partitionKey as string - const sessionId = nodeData.inputs?.sessionId as string - const region = nodeData.inputs?.region as string - const accessKey = nodeData.inputs?.accessKey as string - const secretAccessKey = nodeData.inputs?.secretAccessKey as string - const memoryKey = nodeData.inputs?.memoryKey as string + return initalizeDynamoDB(nodeData, options) + } - const chatId = options.chatId - - const dynamoDb = new DynamoDBChatMessageHistory({ - tableName, - partitionKey, - sessionId: sessionId ? sessionId : chatId, - config: { - region, - credentials: { - accessKeyId: accessKey, - secretAccessKey - } - } - }) - - const memory = new BufferMemory({ - memoryKey, - chatHistory: dynamoDb, - returnMessages: true - }) - return memory + async clearSessionMemory(nodeData: INodeData, options: ICommonObject): Promise { + const dynamodbMemory = initalizeDynamoDB(nodeData, options) + dynamodbMemory.clear() } } +const initalizeDynamoDB = (nodeData: INodeData, options: ICommonObject): BufferMemory => { + const tableName = nodeData.inputs?.tableName as string + const partitionKey = nodeData.inputs?.partitionKey as string + const sessionId = nodeData.inputs?.sessionId as string + const region = nodeData.inputs?.region as string + const accessKey = nodeData.inputs?.accessKey as string + const secretAccessKey = nodeData.inputs?.secretAccessKey as string + const memoryKey = nodeData.inputs?.memoryKey as string + + const chatId = options.chatId + + const dynamoDb = new DynamoDBChatMessageHistory({ + tableName, + partitionKey, + sessionId: sessionId ? sessionId : chatId, + config: { + region, + credentials: { + accessKeyId: accessKey, + secretAccessKey + } + } + }) + + const memory = new BufferMemory({ + memoryKey, + chatHistory: dynamoDb, + returnMessages: true + }) + return memory +} + module.exports = { nodeClass: DynamoDb_Memory } diff --git a/packages/components/nodes/memory/MotorheadMemory/MotorheadMemory.ts b/packages/components/nodes/memory/MotorheadMemory/MotorheadMemory.ts index 01d57614b..b710b30ab 100644 --- a/packages/components/nodes/memory/MotorheadMemory/MotorheadMemory.ts +++ b/packages/components/nodes/memory/MotorheadMemory/MotorheadMemory.ts @@ -64,35 +64,44 @@ class MotorMemory_Memory implements INode { } async init(nodeData: INodeData, _: string, options: ICommonObject): Promise { - const memoryKey = nodeData.inputs?.memoryKey as string - const baseURL = nodeData.inputs?.baseURL as string - const sessionId = nodeData.inputs?.sessionId as string - const apiKey = nodeData.inputs?.apiKey as string - const clientId = nodeData.inputs?.clientId as string + return initalizeMotorhead(nodeData, options) + } - const chatId = options?.chatId as string - - let obj: MotorheadMemoryInput = { - returnMessages: true, - sessionId: sessionId ? sessionId : chatId, - memoryKey - } - - if (baseURL) { - obj = { - ...obj, - url: baseURL - } - } else { - obj = { - ...obj, - apiKey, - clientId - } - } - - return new MotorheadMemory(obj) + async clearSessionMemory(nodeData: INodeData, options: ICommonObject): Promise { + const motorhead = initalizeMotorhead(nodeData, options) + motorhead.clear() } } +const initalizeMotorhead = (nodeData: INodeData, options: ICommonObject): MotorheadMemory => { + const memoryKey = nodeData.inputs?.memoryKey as string + const baseURL = nodeData.inputs?.baseURL as string + const sessionId = nodeData.inputs?.sessionId as string + const apiKey = nodeData.inputs?.apiKey as string + const clientId = nodeData.inputs?.clientId as string + + const chatId = options?.chatId as string + + let obj: MotorheadMemoryInput = { + returnMessages: true, + sessionId: sessionId ? sessionId : chatId, + memoryKey + } + + if (baseURL) { + obj = { + ...obj, + url: baseURL + } + } else { + obj = { + ...obj, + apiKey, + clientId + } + } + + return new MotorheadMemory(obj) +} + module.exports = { nodeClass: MotorMemory_Memory } diff --git a/packages/components/nodes/memory/RedisBackedChatMemory/RedisBackedChatMemory.ts b/packages/components/nodes/memory/RedisBackedChatMemory/RedisBackedChatMemory.ts index 2b4e51c26..cd406f59e 100644 --- a/packages/components/nodes/memory/RedisBackedChatMemory/RedisBackedChatMemory.ts +++ b/packages/components/nodes/memory/RedisBackedChatMemory/RedisBackedChatMemory.ts @@ -56,31 +56,40 @@ class RedisBackedChatMemory_Memory implements INode { } async init(nodeData: INodeData, _: string, options: ICommonObject): Promise { - const baseURL = nodeData.inputs?.baseURL as string - const sessionId = nodeData.inputs?.sessionId as string - const sessionTTL = nodeData.inputs?.sessionTTL as number - const memoryKey = nodeData.inputs?.memoryKey as string + return initalizeRedis(nodeData, options) + } - const chatId = options?.chatId as string - - const redisClient = createClient({ url: baseURL }) - let obj: RedisChatMessageHistoryInput = { - sessionId: sessionId ? sessionId : chatId, - client: redisClient - } - - if (sessionTTL) { - obj = { - ...obj, - sessionTTL - } - } - - let redisChatMessageHistory = new RedisChatMessageHistory(obj) - let redis = new BufferMemory({ memoryKey, chatHistory: redisChatMessageHistory, returnMessages: true }) - - return redis + async clearSessionMemory(nodeData: INodeData, options: ICommonObject): Promise { + const redis = initalizeRedis(nodeData, options) + redis.clear() } } +const initalizeRedis = (nodeData: INodeData, options: ICommonObject): BufferMemory => { + const baseURL = nodeData.inputs?.baseURL as string + const sessionId = nodeData.inputs?.sessionId as string + const sessionTTL = nodeData.inputs?.sessionTTL as number + const memoryKey = nodeData.inputs?.memoryKey as string + + const chatId = options?.chatId as string + + const redisClient = createClient({ url: baseURL }) + let obj: RedisChatMessageHistoryInput = { + sessionId: sessionId ? sessionId : chatId, + client: redisClient + } + + if (sessionTTL) { + obj = { + ...obj, + sessionTTL + } + } + + let redisChatMessageHistory = new RedisChatMessageHistory(obj) + let redis = new BufferMemory({ memoryKey, chatHistory: redisChatMessageHistory, returnMessages: true }) + + return redis +} + module.exports = { nodeClass: RedisBackedChatMemory_Memory } diff --git a/packages/components/nodes/memory/ZepMemory/ZepMemory.ts b/packages/components/nodes/memory/ZepMemory/ZepMemory.ts index 6e1a14bd7..d9bac948a 100644 --- a/packages/components/nodes/memory/ZepMemory/ZepMemory.ts +++ b/packages/components/nodes/memory/ZepMemory/ZepMemory.ts @@ -104,31 +104,11 @@ class ZepMemory_Memory implements INode { } async init(nodeData: INodeData, _: string, options: ICommonObject): Promise { - const baseURL = nodeData.inputs?.baseURL as string - const aiPrefix = nodeData.inputs?.aiPrefix as string - const humanPrefix = nodeData.inputs?.humanPrefix as string - const memoryKey = nodeData.inputs?.memoryKey as string - const inputKey = nodeData.inputs?.inputKey as string const autoSummaryTemplate = nodeData.inputs?.autoSummaryTemplate as string const autoSummary = nodeData.inputs?.autoSummary as boolean - const sessionId = nodeData.inputs?.sessionId as string - const apiKey = nodeData.inputs?.apiKey as string const k = nodeData.inputs?.k as string - const chatId = options?.chatId as string - - const obj: ZepMemoryInput = { - baseURL, - sessionId: sessionId ? sessionId : chatId, - aiPrefix, - humanPrefix, - returnMessages: true, - memoryKey, - inputKey - } - if (apiKey) obj.apiKey = apiKey - - let zep = new ZepMemory(obj) + let zep = initalizeZep(nodeData, options) // hack to support summary let tmpFunc = zep.loadMemoryVariables @@ -153,6 +133,37 @@ class ZepMemory_Memory implements INode { } return zep } + + async clearSessionMemory(nodeData: INodeData, options: ICommonObject): Promise { + const zep = initalizeZep(nodeData, options) + zep.clear() + } +} + +const initalizeZep = (nodeData: INodeData, options: ICommonObject) => { + const baseURL = nodeData.inputs?.baseURL as string + const aiPrefix = nodeData.inputs?.aiPrefix as string + const humanPrefix = nodeData.inputs?.humanPrefix as string + const memoryKey = nodeData.inputs?.memoryKey as string + const inputKey = nodeData.inputs?.inputKey as string + + const sessionId = nodeData.inputs?.sessionId as string + const apiKey = nodeData.inputs?.apiKey as string + + const chatId = options?.chatId as string + + const obj: ZepMemoryInput = { + baseURL, + sessionId: sessionId ? sessionId : chatId, + aiPrefix, + humanPrefix, + returnMessages: true, + memoryKey, + inputKey + } + if (apiKey) obj.apiKey = apiKey + + return new ZepMemory(obj) } module.exports = { nodeClass: ZepMemory_Memory } diff --git a/packages/components/src/Interface.ts b/packages/components/src/Interface.ts index d9233e490..862b81ac8 100644 --- a/packages/components/src/Interface.ts +++ b/packages/components/src/Interface.ts @@ -96,6 +96,7 @@ export interface INode extends INodeProperties { } init?(nodeData: INodeData, input: string, options?: ICommonObject): Promise run?(nodeData: INodeData, input: string, options?: ICommonObject): Promise + clearSessionMemory?(nodeData: INodeData, options?: ICommonObject): Promise } export interface INodeData extends INodeProperties { diff --git a/packages/server/src/index.ts b/packages/server/src/index.ts index 0f87aebad..e11fa283b 100644 --- a/packages/server/src/index.ts +++ b/packages/server/src/index.ts @@ -39,7 +39,8 @@ import { isFlowValidForStream, isVectorStoreFaiss, databaseEntities, - getApiKey + getApiKey, + clearSessionMemory } from './utils' import { cloneDeep } from 'lodash' import { getDataSource } from './DataSource' @@ -320,6 +321,19 @@ export class App { // Delete all chatmessages from chatflowid this.app.delete('/api/v1/chatmessage/:id', async (req: Request, res: Response) => { + const chatflow = await this.AppDataSource.getRepository(ChatFlow).findOneBy({ + id: req.params.id + }) + if (!chatflow) { + res.status(404).send(`Chatflow ${req.params.id} not found`) + return + } + const flowData = chatflow.flowData + const parsedFlowData: IReactFlowObject = JSON.parse(flowData) + const nodes = parsedFlowData.nodes + let chatId = await getChatId(chatflow.id) + if (!chatId) chatId = chatflow.id + clearSessionMemory(nodes, this.nodesPool.componentNodes, chatId, req.query.sessionId as string) const results = await this.AppDataSource.getRepository(ChatMessage).delete({ chatflowid: req.params.id }) return res.json(results) }) @@ -662,7 +676,7 @@ export class App { if (!chatflow) return res.status(404).send(`Chatflow ${chatflowid} not found`) let chatId = await getChatId(chatflow.id) - if (!chatId) chatId = Date.now().toString() + if (!chatId) chatId = chatflowid if (!isInternal) { await this.validateKey(req, res, chatflow) diff --git a/packages/server/src/utils/index.ts b/packages/server/src/utils/index.ts index 3ee7a25b2..e13bca979 100644 --- a/packages/server/src/utils/index.ts +++ b/packages/server/src/utils/index.ts @@ -267,6 +267,29 @@ export const buildLangchain = async ( return flowNodes } +/** + * Clear memory + * @param {IReactFlowNode[]} reactFlowNodes + * @param {IComponentNodes} componentNodes + * @param {string} chatId + * @param {string} sessionId + */ +export const clearSessionMemory = async ( + reactFlowNodes: IReactFlowNode[], + componentNodes: IComponentNodes, + chatId: string, + sessionId?: string +) => { + for (const node of reactFlowNodes) { + if (node.data.category !== 'Memory') continue + const nodeInstanceFilePath = componentNodes[node.data.name].filePath as string + const nodeModule = await import(nodeInstanceFilePath) + const newNodeInstance = new nodeModule.nodeClass() + if (sessionId && node.data.inputs) node.data.inputs.sessionId = sessionId + if (newNodeInstance.clearSessionMemory) await newNodeInstance?.clearSessionMemory(node.data, { chatId }) + } +} + /** * Get variable value from outputResponses.output * @param {string} paramValue From 880754358db6a32030f1ab820140c7bdebc6709f Mon Sep 17 00:00:00 2001 From: apeng-singlestore <127370261+apeng-singlestore@users.noreply.github.com> Date: Thu, 13 Jul 2023 16:54:48 -0700 Subject: [PATCH 02/57] Add singlestore upsert and existing --- package.json | 5 +- .../Singlestore_Existing.ts | 138 ++++++++++++++++ .../Singlestore_Existing/singlestore.svg | 20 +++ .../Singlestore_Upsert/Singlestore_Upsert.ts | 154 ++++++++++++++++++ .../Singlestore_Upsert/singlestore.svg | 20 +++ 5 files changed, 336 insertions(+), 1 deletion(-) create mode 100644 packages/components/nodes/vectorstores/Singlestore_Existing/Singlestore_Existing.ts create mode 100644 packages/components/nodes/vectorstores/Singlestore_Existing/singlestore.svg create mode 100644 packages/components/nodes/vectorstores/Singlestore_Upsert/Singlestore_Upsert.ts create mode 100644 packages/components/nodes/vectorstores/Singlestore_Upsert/singlestore.svg diff --git a/package.json b/package.json index 61ea436b4..8f9004baa 100644 --- a/package.json +++ b/package.json @@ -28,7 +28,6 @@ "*.{js,jsx,ts,tsx,json,md}": "eslint --fix" }, "devDependencies": { - "turbo": "1.7.4", "@babel/preset-env": "^7.19.4", "@babel/preset-typescript": "7.18.6", "@types/express": "^4.17.13", @@ -48,9 +47,13 @@ "pretty-quick": "^3.1.3", "rimraf": "^3.0.2", "run-script-os": "^1.1.6", + "turbo": "1.7.4", "typescript": "^4.8.4" }, "engines": { "node": ">=18.15.0" + }, + "dependencies": { + "mysql2": "^3.5.1" } } diff --git a/packages/components/nodes/vectorstores/Singlestore_Existing/Singlestore_Existing.ts b/packages/components/nodes/vectorstores/Singlestore_Existing/Singlestore_Existing.ts new file mode 100644 index 000000000..61ae84f60 --- /dev/null +++ b/packages/components/nodes/vectorstores/Singlestore_Existing/Singlestore_Existing.ts @@ -0,0 +1,138 @@ +import { INode, INodeData, INodeOutputsValue, INodeParams, INodeOptionsValue } from '../../../src/Interface' +import { Embeddings } from 'langchain/embeddings/base' +import { Document } from 'langchain/document' +import { getBaseClasses } from '../../../src/utils' +import { ConnectionOptions, SingleStoreVectorStore, SingleStoreVectorStoreConfig } from 'langchain/vectorstores/singlestore' +import { flatten } from 'lodash' +import { integer } from '@opensearch-project/opensearch/api/types' + +class SingleStoreExisting_VectorStores implements INode { + label: string + name: string + description: string + type: string + icon: string + category: string + baseClasses: string[] + inputs: INodeParams[] + outputs: INodeOutputsValue[] + + constructor() { + this.label = 'SingleStore Load Existing Table' + this.name = 'singlestoreExisting' + this.type = 'SingleStore' + this.icon = 'singlestore.svg' + this.category = 'Vector Stores' + this.description = 'Load existing document from SingleStore' + this.baseClasses = [this.type, 'VectorStoreRetriever', 'BaseRetriever'] + this.inputs = [ + { + label: 'Embeddings', + name: 'embeddings', + type: 'Embeddings' + }, + { + label: 'Host', + name: 'host', + type: 'string' + }, + { + label: 'Port', + name: 'port', + type: 'string' + }, + { + label: 'User', + name: 'user', + type: 'string' + }, + { + label: 'Password', + name: 'password', + type: 'password' + }, + { + label: 'Database', + name: 'database', + type: 'string' + }, + { + label: 'Table Name', + name: 'tableName', + type: 'string' + }, + { + label: 'Content Column Name', + name: 'contentColumnName', + type: 'string' + }, + { + label: 'Vector Column Name', + name: 'vectorColumnName', + type: 'string' + }, + { + label: 'Metadata Column Name', + name: 'metadataColumnName', + type: 'string' + }, + { + label: 'Top K', + name: 'topK', + description: 'Number of top results to fetch. Default to 4', + placeholder: '4', + type: 'number', + additionalParams: true, + optional: true + } + ] + this.outputs = [ + { + label: 'SingleStore Retriever', + name: 'retriever', + baseClasses: this.baseClasses + }, + { + label: 'SingleStore Vector Store', + name: 'vectorStore', + baseClasses: [this.type, ...getBaseClasses(SingleStoreVectorStore)] + } + ] + } + + async init(nodeData: INodeData): Promise { + const singleStoreConnectionConfig = { + connectionOptions: { + host: nodeData.inputs?.host as string, + port: nodeData.inputs?.port as integer, + user: nodeData.inputs?.user as string, + password: nodeData.inputs?.password as string, + database: nodeData.inputs?.database as string + }, + tableName: nodeData.inputs?.tableName as string, + contentColumnName: nodeData.inputs?.contentColumnName as string, + vectorColumnName: nodeData.inputs?.vectorColumnName as string, + metadataColumnName: nodeData.inputs?.metadataColumnName as string + } as SingleStoreVectorStoreConfig + + const embeddings = nodeData.inputs?.embeddings as Embeddings + const output = nodeData.outputs?.output as string + const topK = nodeData.inputs?.topK as string + const k = topK ? parseInt(topK, 10) : 4 + + let vectorStore: SingleStoreVectorStore + + vectorStore = new SingleStoreVectorStore(embeddings, singleStoreConnectionConfig) + + if (output === 'retriever') { + const retriever = vectorStore.asRetriever(k) + return retriever + } else if (output === 'vectorStore') { + ;(vectorStore as any).k = k + return vectorStore + } + return vectorStore + } +} + +module.exports = { nodeClass: SingleStoreExisting_VectorStores } diff --git a/packages/components/nodes/vectorstores/Singlestore_Existing/singlestore.svg b/packages/components/nodes/vectorstores/Singlestore_Existing/singlestore.svg new file mode 100644 index 000000000..bd8dc8177 --- /dev/null +++ b/packages/components/nodes/vectorstores/Singlestore_Existing/singlestore.svg @@ -0,0 +1,20 @@ + + + SingleStore + + + + + + + + + + + + + + + + + diff --git a/packages/components/nodes/vectorstores/Singlestore_Upsert/Singlestore_Upsert.ts b/packages/components/nodes/vectorstores/Singlestore_Upsert/Singlestore_Upsert.ts new file mode 100644 index 000000000..b5f873a58 --- /dev/null +++ b/packages/components/nodes/vectorstores/Singlestore_Upsert/Singlestore_Upsert.ts @@ -0,0 +1,154 @@ +import { INode, INodeData, INodeOutputsValue, INodeParams, INodeOptionsValue } from '../../../src/Interface' +import { Embeddings } from 'langchain/embeddings/base' +import { Document } from 'langchain/document' +import { getBaseClasses } from '../../../src/utils' +import { ConnectionOptions, SingleStoreVectorStore, SingleStoreVectorStoreConfig } from 'langchain/vectorstores/singlestore' +import { flatten } from 'lodash' +import { integer } from '@opensearch-project/opensearch/api/types' +import { MemoryVectorStore } from 'langchain/vectorstores/memory' + +class SingleStoreUpsert_VectorStores implements INode { + label: string + name: string + description: string + type: string + icon: string + category: string + baseClasses: string[] + inputs: INodeParams[] + outputs: INodeOutputsValue[] + + constructor() { + this.label = 'SingleStore Upsert Document' + this.name = 'singlestoreUpsert' + this.type = 'SingleStore' + this.icon = 'singlestore.svg' + this.category = 'Vector Stores' + this.description = 'Upsert documents to SingleStore' + this.baseClasses = [this.type, 'VectorStoreRetriever', 'BaseRetriever'] + this.inputs = [ + { + label: 'Document', + name: 'document', + type: 'Document', + list: true + }, + { + label: 'Embeddings', + name: 'embeddings', + type: 'Embeddings' + }, + { + label: 'Host', + name: 'host', + type: 'string' + }, + { + label: 'Port', + name: 'port', + type: 'string' + }, + { + label: 'User', + name: 'user', + type: 'string' + }, + { + label: 'Password', + name: 'password', + type: 'password' + }, + { + label: 'Database', + name: 'database', + type: 'string' + }, + { + label: 'Table Name', + name: 'tableName', + type: 'string' + }, + { + label: 'Content Column Name', + name: 'contentColumnName', + type: 'string' + }, + { + label: 'Vector Column Name', + name: 'vectorColumnName', + type: 'string' + }, + { + label: 'Metadata Column Name', + name: 'metadataColumnName', + type: 'string' + }, + { + label: 'Top K', + name: 'topK', + description: 'Number of top results to fetch. Default to 4', + placeholder: '4', + type: 'number', + additionalParams: true, + optional: true + } + ] + this.outputs = [ + { + label: 'SingleStore Retriever', + name: 'retriever', + baseClasses: this.baseClasses + }, + { + label: 'SingleStore Vector Store', + name: 'vectorStore', + baseClasses: [this.type, ...getBaseClasses(SingleStoreVectorStore)] + } + ] + } + + async init(nodeData: INodeData): Promise { + const singleStoreConnectionConfig = { + connectionOptions: { + host: nodeData.inputs?.host as string, + port: nodeData.inputs?.port as integer, + user: nodeData.inputs?.user as string, + password: nodeData.inputs?.password as string, + database: nodeData.inputs?.database as string + }, + tableName: nodeData.inputs?.tableName as string, + contentColumnName: nodeData.inputs?.contentColumnName as string, + vectorColumnName: nodeData.inputs?.vectorColumnName as string, + metadataColumnName: nodeData.inputs?.metadataColumnName as string + } as SingleStoreVectorStoreConfig + + const docs = nodeData.inputs?.document as Document[] + const embeddings = nodeData.inputs?.embeddings as Embeddings + const output = nodeData.outputs?.output as string + const topK = nodeData.inputs?.topK as string + const k = topK ? parseInt(topK, 10) : 4 + + const flattenDocs = docs && docs.length ? flatten(docs) : [] + const finalDocs = [] + for (let i = 0; i < flattenDocs.length; i += 1) { + finalDocs.push(new Document(flattenDocs[i])) + } + + let vectorStore: SingleStoreVectorStore | MemoryVectorStore + + vectorStore = new SingleStoreVectorStore(embeddings, singleStoreConnectionConfig) + vectorStore.addDocuments.bind(vectorStore)(finalDocs) + + + if (output === 'retriever') { + const retriever = vectorStore.asRetriever(k) + return retriever + } else if (output === 'vectorStore') { + ;(vectorStore as any).k = k + return vectorStore + } + return vectorStore + } +} + +module.exports = { nodeClass: SingleStoreUpsert_VectorStores } diff --git a/packages/components/nodes/vectorstores/Singlestore_Upsert/singlestore.svg b/packages/components/nodes/vectorstores/Singlestore_Upsert/singlestore.svg new file mode 100644 index 000000000..bd8dc8177 --- /dev/null +++ b/packages/components/nodes/vectorstores/Singlestore_Upsert/singlestore.svg @@ -0,0 +1,20 @@ + + + SingleStore + + + + + + + + + + + + + + + + + From f893edcc02f9b830a5d51a26e2d77166f863ad48 Mon Sep 17 00:00:00 2001 From: Atish Amte Date: Sat, 15 Jul 2023 00:49:31 +0530 Subject: [PATCH 03/57] ChatMessage Order Fixed --- packages/server/src/index.ts | 9 +++++++-- 1 file changed, 7 insertions(+), 2 deletions(-) diff --git a/packages/server/src/index.ts b/packages/server/src/index.ts index 74c4d07e4..ff7d375d0 100644 --- a/packages/server/src/index.ts +++ b/packages/server/src/index.ts @@ -306,8 +306,13 @@ export class App { // Get all chatmessages from chatflowid this.app.get('/api/v1/chatmessage/:id', async (req: Request, res: Response) => { - const chatmessages = await this.AppDataSource.getRepository(ChatMessage).findBy({ - chatflowid: req.params.id + const chatmessages = await this.AppDataSource.getRepository(ChatMessage).find({ + where: { + chatflowid: req.params.id + }, + order: { + createdDate: 'ASC' + }, }) return res.json(chatmessages) }) From 5ce082e34f8a9499cdf195dbc15ce0339a1d935d Mon Sep 17 00:00:00 2001 From: apeng-singlestore <127370261+apeng-singlestore@users.noreply.github.com> Date: Fri, 14 Jul 2023 15:24:24 -0700 Subject: [PATCH 04/57] remove redundant imports and move some options to additional --- .../Singlestore_Existing.ts | 43 +++++++++--------- .../Singlestore_Upsert/Singlestore_Upsert.ts | 44 ++++++++++--------- 2 files changed, 47 insertions(+), 40 deletions(-) diff --git a/packages/components/nodes/vectorstores/Singlestore_Existing/Singlestore_Existing.ts b/packages/components/nodes/vectorstores/Singlestore_Existing/Singlestore_Existing.ts index 61ae84f60..3b880b24c 100644 --- a/packages/components/nodes/vectorstores/Singlestore_Existing/Singlestore_Existing.ts +++ b/packages/components/nodes/vectorstores/Singlestore_Existing/Singlestore_Existing.ts @@ -1,10 +1,7 @@ -import { INode, INodeData, INodeOutputsValue, INodeParams, INodeOptionsValue } from '../../../src/Interface' +import { INode, INodeData, INodeOutputsValue, INodeParams } from '../../../src/Interface' import { Embeddings } from 'langchain/embeddings/base' -import { Document } from 'langchain/document' import { getBaseClasses } from '../../../src/utils' -import { ConnectionOptions, SingleStoreVectorStore, SingleStoreVectorStoreConfig } from 'langchain/vectorstores/singlestore' -import { flatten } from 'lodash' -import { integer } from '@opensearch-project/opensearch/api/types' +import { SingleStoreVectorStore, SingleStoreVectorStoreConfig } from 'langchain/vectorstores/singlestore' class SingleStoreExisting_VectorStores implements INode { label: string @@ -36,11 +33,6 @@ class SingleStoreExisting_VectorStores implements INode { name: 'host', type: 'string' }, - { - label: 'Port', - name: 'port', - type: 'string' - }, { label: 'User', name: 'user', @@ -59,27 +51,38 @@ class SingleStoreExisting_VectorStores implements INode { { label: 'Table Name', name: 'tableName', - type: 'string' + type: 'string', + placeholder: 'embeddings', + additionalParams: true, + optional: true }, { label: 'Content Column Name', name: 'contentColumnName', - type: 'string' + type: 'string', + placeholder: 'content', + additionalParams: true, + optional: true }, { label: 'Vector Column Name', name: 'vectorColumnName', - type: 'string' + type: 'string', + placeholder: 'vector', + additionalParams: true, + optional: true }, { label: 'Metadata Column Name', name: 'metadataColumnName', - type: 'string' + type: 'string', + placeholder: 'metadata', + additionalParams: true, + optional: true }, { label: 'Top K', name: 'topK', - description: 'Number of top results to fetch. Default to 4', placeholder: '4', type: 'number', additionalParams: true, @@ -104,15 +107,15 @@ class SingleStoreExisting_VectorStores implements INode { const singleStoreConnectionConfig = { connectionOptions: { host: nodeData.inputs?.host as string, - port: nodeData.inputs?.port as integer, + port: 3306, user: nodeData.inputs?.user as string, password: nodeData.inputs?.password as string, database: nodeData.inputs?.database as string }, - tableName: nodeData.inputs?.tableName as string, - contentColumnName: nodeData.inputs?.contentColumnName as string, - vectorColumnName: nodeData.inputs?.vectorColumnName as string, - metadataColumnName: nodeData.inputs?.metadataColumnName as string + ...(nodeData.inputs?.tableName ? { tableName: nodeData.inputs.tableName as string } : {}), + ...(nodeData.inputs?.contentColumnName ? { contentColumnName: nodeData.inputs.contentColumnName as string } : {}), + ...(nodeData.inputs?.vectorColumnName ? { vectorColumnName: nodeData.inputs.vectorColumnName as string } : {}), + ...(nodeData.inputs?.metadataColumnName ? { metadataColumnName: nodeData.inputs.metadataColumnName as string } : {}) } as SingleStoreVectorStoreConfig const embeddings = nodeData.inputs?.embeddings as Embeddings diff --git a/packages/components/nodes/vectorstores/Singlestore_Upsert/Singlestore_Upsert.ts b/packages/components/nodes/vectorstores/Singlestore_Upsert/Singlestore_Upsert.ts index b5f873a58..dc59edb6d 100644 --- a/packages/components/nodes/vectorstores/Singlestore_Upsert/Singlestore_Upsert.ts +++ b/packages/components/nodes/vectorstores/Singlestore_Upsert/Singlestore_Upsert.ts @@ -2,9 +2,8 @@ import { INode, INodeData, INodeOutputsValue, INodeParams, INodeOptionsValue } f import { Embeddings } from 'langchain/embeddings/base' import { Document } from 'langchain/document' import { getBaseClasses } from '../../../src/utils' -import { ConnectionOptions, SingleStoreVectorStore, SingleStoreVectorStoreConfig } from 'langchain/vectorstores/singlestore' +import { SingleStoreVectorStore, SingleStoreVectorStoreConfig } from 'langchain/vectorstores/singlestore' import { flatten } from 'lodash' -import { integer } from '@opensearch-project/opensearch/api/types' import { MemoryVectorStore } from 'langchain/vectorstores/memory' class SingleStoreUpsert_VectorStores implements INode { @@ -43,11 +42,6 @@ class SingleStoreUpsert_VectorStores implements INode { name: 'host', type: 'string' }, - { - label: 'Port', - name: 'port', - type: 'string' - }, { label: 'User', name: 'user', @@ -66,27 +60,38 @@ class SingleStoreUpsert_VectorStores implements INode { { label: 'Table Name', name: 'tableName', - type: 'string' + type: 'string', + placeholder: 'embeddings', + additionalParams: true, + optional: true }, { label: 'Content Column Name', name: 'contentColumnName', - type: 'string' + type: 'string', + placeholder: 'content', + additionalParams: true, + optional: true }, { label: 'Vector Column Name', name: 'vectorColumnName', - type: 'string' + type: 'string', + placeholder: 'vector', + additionalParams: true, + optional: true }, { label: 'Metadata Column Name', name: 'metadataColumnName', - type: 'string' + type: 'string', + placeholder: 'metadata', + additionalParams: true, + optional: true }, { label: 'Top K', name: 'topK', - description: 'Number of top results to fetch. Default to 4', placeholder: '4', type: 'number', additionalParams: true, @@ -111,15 +116,15 @@ class SingleStoreUpsert_VectorStores implements INode { const singleStoreConnectionConfig = { connectionOptions: { host: nodeData.inputs?.host as string, - port: nodeData.inputs?.port as integer, + port: 3306, user: nodeData.inputs?.user as string, password: nodeData.inputs?.password as string, database: nodeData.inputs?.database as string }, - tableName: nodeData.inputs?.tableName as string, - contentColumnName: nodeData.inputs?.contentColumnName as string, - vectorColumnName: nodeData.inputs?.vectorColumnName as string, - metadataColumnName: nodeData.inputs?.metadataColumnName as string + ...(nodeData.inputs?.tableName ? { tableName: nodeData.inputs.tableName as string } : {}), + ...(nodeData.inputs?.contentColumnName ? { contentColumnName: nodeData.inputs.contentColumnName as string } : {}), + ...(nodeData.inputs?.vectorColumnName ? { vectorColumnName: nodeData.inputs.vectorColumnName as string } : {}), + ...(nodeData.inputs?.metadataColumnName ? { metadataColumnName: nodeData.inputs.metadataColumnName as string } : {}) } as SingleStoreVectorStoreConfig const docs = nodeData.inputs?.document as Document[] @@ -134,11 +139,10 @@ class SingleStoreUpsert_VectorStores implements INode { finalDocs.push(new Document(flattenDocs[i])) } - let vectorStore: SingleStoreVectorStore | MemoryVectorStore - + let vectorStore: SingleStoreVectorStore + vectorStore = new SingleStoreVectorStore(embeddings, singleStoreConnectionConfig) vectorStore.addDocuments.bind(vectorStore)(finalDocs) - if (output === 'retriever') { const retriever = vectorStore.asRetriever(k) From 647bb1f8649d11f27686b827ae67d40e9644fae4 Mon Sep 17 00:00:00 2001 From: denchi Date: Sat, 15 Jul 2023 13:34:08 +0100 Subject: [PATCH 05/57] Added BraveSearch Api Tool --- .../tools/BraveSearchAPI/BraveSearchAPI.ts | 38 +++++++++++++++ .../nodes/tools/BraveSearchAPI/brave-logo.svg | 46 +++++++++++++++++++ 2 files changed, 84 insertions(+) create mode 100644 packages/components/nodes/tools/BraveSearchAPI/BraveSearchAPI.ts create mode 100644 packages/components/nodes/tools/BraveSearchAPI/brave-logo.svg diff --git a/packages/components/nodes/tools/BraveSearchAPI/BraveSearchAPI.ts b/packages/components/nodes/tools/BraveSearchAPI/BraveSearchAPI.ts new file mode 100644 index 000000000..75d0d5c53 --- /dev/null +++ b/packages/components/nodes/tools/BraveSearchAPI/BraveSearchAPI.ts @@ -0,0 +1,38 @@ +import { INode, INodeData, INodeParams } from '../../../src/Interface' +import { getBaseClasses } from '../../../src/utils' +import { BraveSearch } from 'langchain/tools' + +class BraveSearchAPI_Tools implements INode { + label: string + name: string + description: string + type: string + icon: string + category: string + baseClasses: string[] + inputs: INodeParams[] + + constructor() { + this.label = 'BraveSearch API' + this.name = 'braveSearchAPI' + this.type = 'BraveSearchAPI' + this.icon = 'brave-logo.svg' + this.category = 'Tools' + this.description = 'Wrapper around BraveSearch API - a real-time API to access Brave search results' + this.inputs = [ + { + label: 'BraveSearch API Key', + name: 'apiKey', + type: 'password' + } + ] + this.baseClasses = [this.type, ...getBaseClasses(BraveSearch)] + } + + async init(nodeData: INodeData): Promise { + const apiKey = nodeData.inputs?.apiKey as string + return new BraveSearch({apiKey}) + } +} + +module.exports = { nodeClass: BraveSearchAPI_Tools } diff --git a/packages/components/nodes/tools/BraveSearchAPI/brave-logo.svg b/packages/components/nodes/tools/BraveSearchAPI/brave-logo.svg new file mode 100644 index 000000000..686b5c413 --- /dev/null +++ b/packages/components/nodes/tools/BraveSearchAPI/brave-logo.svg @@ -0,0 +1,46 @@ + + + + Logotypes/bat/logo-dark@1x + Created with Sketch. + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file From c4e4e92fb213d5a208474b60ca057306b84200d7 Mon Sep 17 00:00:00 2001 From: denchi Date: Sat, 15 Jul 2023 15:56:52 +0100 Subject: [PATCH 06/57] Fix linting error --- .../components/nodes/tools/BraveSearchAPI/BraveSearchAPI.ts | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/packages/components/nodes/tools/BraveSearchAPI/BraveSearchAPI.ts b/packages/components/nodes/tools/BraveSearchAPI/BraveSearchAPI.ts index 75d0d5c53..76629392c 100644 --- a/packages/components/nodes/tools/BraveSearchAPI/BraveSearchAPI.ts +++ b/packages/components/nodes/tools/BraveSearchAPI/BraveSearchAPI.ts @@ -31,7 +31,7 @@ class BraveSearchAPI_Tools implements INode { async init(nodeData: INodeData): Promise { const apiKey = nodeData.inputs?.apiKey as string - return new BraveSearch({apiKey}) + return new BraveSearch({ apiKey }) } } From 78ee45565f2395f25e68aefe2769e2d0ee9eb5b2 Mon Sep 17 00:00:00 2001 From: Atish Amte Date: Sun, 16 Jul 2023 01:06:38 +0530 Subject: [PATCH 07/57] Update index.ts --- packages/server/src/index.ts | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/packages/server/src/index.ts b/packages/server/src/index.ts index ff7d375d0..1c2d4ebc4 100644 --- a/packages/server/src/index.ts +++ b/packages/server/src/index.ts @@ -312,7 +312,7 @@ export class App { }, order: { createdDate: 'ASC' - }, + } }) return res.json(chatmessages) }) From 97eb80b9b54ed186c4994938edc10bd79d5654c2 Mon Sep 17 00:00:00 2001 From: chungyau97 Date: Sun, 16 Jul 2023 09:49:11 +0800 Subject: [PATCH 08/57] add content type text/xml --- packages/components/src/utils.ts | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/packages/components/src/utils.ts b/packages/components/src/utils.ts index 027ec8db2..78486643c 100644 --- a/packages/components/src/utils.ts +++ b/packages/components/src/utils.ts @@ -320,7 +320,7 @@ export async function xmlScrape(currentURL: string, limit: number): Promise Date: Sat, 15 Jul 2023 18:53:57 -0300 Subject: [PATCH 09/57] HtmlToMarkdownTextSplitter --- .../HtmlToMarkdownTextSplitter.ts | 75 +++++++++++++++++++ .../htmlToMarkdownTextSplitter.svg | 6 ++ packages/components/package.json | 1 + 3 files changed, 82 insertions(+) create mode 100644 packages/components/nodes/textsplitters/HtmlToMarkdownTextSplitter/HtmlToMarkdownTextSplitter.ts create mode 100644 packages/components/nodes/textsplitters/HtmlToMarkdownTextSplitter/htmlToMarkdownTextSplitter.svg diff --git a/packages/components/nodes/textsplitters/HtmlToMarkdownTextSplitter/HtmlToMarkdownTextSplitter.ts b/packages/components/nodes/textsplitters/HtmlToMarkdownTextSplitter/HtmlToMarkdownTextSplitter.ts new file mode 100644 index 000000000..d05298fe1 --- /dev/null +++ b/packages/components/nodes/textsplitters/HtmlToMarkdownTextSplitter/HtmlToMarkdownTextSplitter.ts @@ -0,0 +1,75 @@ +import { INode, INodeData, INodeParams } from '../../../src/Interface' +import { getBaseClasses } from '../../../src/utils' +import { MarkdownTextSplitter, MarkdownTextSplitterParams } from 'langchain/text_splitter' +import { NodeHtmlMarkdown } from 'node-html-markdown' + +class HtmlToMarkdownTextSplitter_TextSplitters implements INode { + label: string + name: string + description: string + type: string + icon: string + category: string + baseClasses: string[] + inputs: INodeParams[] + + constructor() { + this.label = 'HtmlToMarkdown Text Splitter' + this.name = 'htmlToMarkdownTextSplitter' + this.type = 'HtmlToMarkdownTextSplitter' + this.icon = 'htmlToMarkdownTextSplitter.svg' + this.category = 'Text Splitters' + this.description = `Converts Html to Markdown and then split your content into documents based on the Markdown headers` + this.baseClasses = [this.type, ...getBaseClasses(HtmlToMarkdownTextSplitter)] + this.inputs = [ + { + label: 'Chunk Size', + name: 'chunkSize', + type: 'number', + default: 1000, + optional: true + }, + { + label: 'Chunk Overlap', + name: 'chunkOverlap', + type: 'number', + optional: true + } + ] + } + + async init(nodeData: INodeData): Promise { + const chunkSize = nodeData.inputs?.chunkSize as string + const chunkOverlap = nodeData.inputs?.chunkOverlap as string + + const obj = {} as MarkdownTextSplitterParams + + if (chunkSize) obj.chunkSize = parseInt(chunkSize, 10) + if (chunkOverlap) obj.chunkOverlap = parseInt(chunkOverlap, 10) + + const splitter = new HtmlToMarkdownTextSplitter(obj) + + return splitter + } +} +class HtmlToMarkdownTextSplitter extends MarkdownTextSplitter implements MarkdownTextSplitterParams { + constructor(fields?: Partial) { + { + super(fields) + } + } + splitText(text: string): Promise { + return new Promise((resolve, reject) => { + const markdown = NodeHtmlMarkdown.translate( + /* html */ text, + /* options (optional) */ {}, + /* customTranslators (optional) */ undefined, + /* customCodeBlockTranslators (optional) */ undefined + ) + super.splitText(markdown).then((result) => { + resolve(result) + }) + }) + } +} +module.exports = { nodeClass: HtmlToMarkdownTextSplitter_TextSplitters } diff --git a/packages/components/nodes/textsplitters/HtmlToMarkdownTextSplitter/htmlToMarkdownTextSplitter.svg b/packages/components/nodes/textsplitters/HtmlToMarkdownTextSplitter/htmlToMarkdownTextSplitter.svg new file mode 100644 index 000000000..f7d45d603 --- /dev/null +++ b/packages/components/nodes/textsplitters/HtmlToMarkdownTextSplitter/htmlToMarkdownTextSplitter.svg @@ -0,0 +1,6 @@ + + + + + + \ No newline at end of file diff --git a/packages/components/package.json b/packages/components/package.json index 3459a372f..d3ac06c35 100644 --- a/packages/components/package.json +++ b/packages/components/package.json @@ -42,6 +42,7 @@ "mammoth": "^1.5.1", "moment": "^2.29.3", "node-fetch": "^2.6.11", + "node-html-markdown": "^1.3.0", "pdf-parse": "^1.1.1", "pdfjs-dist": "^3.7.107", "playwright": "^1.35.0", From b4b7ccdbd78cd8ff11b9f5894ea0893360beb3f4 Mon Sep 17 00:00:00 2001 From: Rafael Reis Date: Sun, 16 Jul 2023 01:34:18 -0300 Subject: [PATCH 10/57] clean code --- .../HtmlToMarkdownTextSplitter.ts | 9 ++------- 1 file changed, 2 insertions(+), 7 deletions(-) diff --git a/packages/components/nodes/textsplitters/HtmlToMarkdownTextSplitter/HtmlToMarkdownTextSplitter.ts b/packages/components/nodes/textsplitters/HtmlToMarkdownTextSplitter/HtmlToMarkdownTextSplitter.ts index d05298fe1..161cb89e7 100644 --- a/packages/components/nodes/textsplitters/HtmlToMarkdownTextSplitter/HtmlToMarkdownTextSplitter.ts +++ b/packages/components/nodes/textsplitters/HtmlToMarkdownTextSplitter/HtmlToMarkdownTextSplitter.ts @@ -59,13 +59,8 @@ class HtmlToMarkdownTextSplitter extends MarkdownTextSplitter implements Markdow } } splitText(text: string): Promise { - return new Promise((resolve, reject) => { - const markdown = NodeHtmlMarkdown.translate( - /* html */ text, - /* options (optional) */ {}, - /* customTranslators (optional) */ undefined, - /* customCodeBlockTranslators (optional) */ undefined - ) + return new Promise((resolve) => { + const markdown = NodeHtmlMarkdown.translate(text) super.splitText(markdown).then((result) => { resolve(result) }) From b5a41be7db9224c85d632488835eef4612246226 Mon Sep 17 00:00:00 2001 From: Yongtae Date: Sun, 16 Jul 2023 17:59:25 +0900 Subject: [PATCH 11/57] add -H "Content-Type: application/json" in curl command --- packages/ui/src/views/chatflows/APICodeDialog.js | 12 +++++++++--- 1 file changed, 9 insertions(+), 3 deletions(-) diff --git a/packages/ui/src/views/chatflows/APICodeDialog.js b/packages/ui/src/views/chatflows/APICodeDialog.js index 5e32c1d4b..ed9d8986c 100644 --- a/packages/ui/src/views/chatflows/APICodeDialog.js +++ b/packages/ui/src/views/chatflows/APICodeDialog.js @@ -204,7 +204,8 @@ query({"question": "Hey, how are you?"}).then((response) => { } else if (codeLang === 'cURL') { return `curl ${baseURL}/api/v1/prediction/${dialogProps.chatflowid} \\ -X POST \\ - -d '{"question": "Hey, how are you?"}'` + -d '{"question": "Hey, how are you?"}' \\ + -H "Content-Type: application/json"` } return '' } @@ -246,6 +247,7 @@ query({"question": "Hey, how are you?"}).then((response) => { return `curl ${baseURL}/api/v1/prediction/${dialogProps.chatflowid} \\ -X POST \\ -d '{"question": "Hey, how are you?"}' \\ + -H "Content-Type: application/json" \\ -H "Authorization: Bearer ${selectedApiKey?.apiKey}"` } return '' @@ -316,7 +318,8 @@ query(formData).then((response) => { ` } else if (codeLang === 'cURL') { return `curl ${baseURL}/api/v1/prediction/${dialogProps.chatflowid} \\ - -X POST \\${getConfigExamplesForCurl(configData, 'formData')}` + -X POST \\${getConfigExamplesForCurl(configData, 'formData')} \\ + -H "Content-Type: application/json"` } return '' } @@ -363,6 +366,7 @@ query(formData).then((response) => { } else if (codeLang === 'cURL') { return `curl ${baseURL}/api/v1/prediction/${dialogProps.chatflowid} \\ -X POST \\${getConfigExamplesForCurl(configData, 'formData')} \\ + -H "Content-Type: application/json" \\ -H "Authorization: Bearer ${selectedApiKey?.apiKey}"` } return '' @@ -410,7 +414,8 @@ query({ } else if (codeLang === 'cURL') { return `curl ${baseURL}/api/v1/prediction/${dialogProps.chatflowid} \\ -X POST \\ - -d '{"question": "Hey, how are you?", "overrideConfig": {${getConfigExamplesForCurl(configData, 'json')}}'` + -d '{"question": "Hey, how are you?", "overrideConfig": {${getConfigExamplesForCurl(configData, 'json')}}' \\ + -H "Content-Type: application/json"` } return '' } @@ -460,6 +465,7 @@ query({ return `curl ${baseURL}/api/v1/prediction/${dialogProps.chatflowid} \\ -X POST \\ -d '{"question": "Hey, how are you?", "overrideConfig": {${getConfigExamplesForCurl(configData, 'json')}}' \\ + -H "Content-Type: application/json" \\ -H "Authorization: Bearer ${selectedApiKey?.apiKey}"` } return '' From 832064634bdae63ed4fadd9019c6d5a8a3c225a1 Mon Sep 17 00:00:00 2001 From: Yongtae Date: Sun, 16 Jul 2023 18:22:31 +0900 Subject: [PATCH 12/57] Refactor API request to include Content-Type header --- .../ui/src/views/chatflows/APICodeDialog.js | 36 ++++++++++++++----- 1 file changed, 27 insertions(+), 9 deletions(-) diff --git a/packages/ui/src/views/chatflows/APICodeDialog.js b/packages/ui/src/views/chatflows/APICodeDialog.js index 5e32c1d4b..9a036948b 100644 --- a/packages/ui/src/views/chatflows/APICodeDialog.js +++ b/packages/ui/src/views/chatflows/APICodeDialog.js @@ -190,7 +190,10 @@ output = query({ "${baseURL}/api/v1/prediction/${dialogProps.chatflowid}", { method: "POST", - body: data + headers: { + "Content-Type": "application/json" + }, + body: JSON.stringify(data) } ); const result = await response.json(); @@ -229,9 +232,12 @@ output = query({ const response = await fetch( "${baseURL}/api/v1/prediction/${dialogProps.chatflowid}", { - headers: { Authorization: "Bearer ${selectedApiKey?.apiKey}" }, + headers: { + Authorization: "Bearer ${selectedApiKey?.apiKey}", + "Content-Type": "application/json" + }, method: "POST", - body: data + body: JSON.stringify(data) } ); const result = await response.json(); @@ -303,7 +309,10 @@ async function query(formData) { "${baseURL}/api/v1/prediction/${dialogProps.chatflowid}", { method: "POST", - body: formData + headers: { + "Content-Type": "application/json" + }, + body: JSON.stringify(formData) } ); const result = await response.json(); @@ -347,9 +356,12 @@ async function query(formData) { const response = await fetch( "${baseURL}/api/v1/prediction/${dialogProps.chatflowid}", { - headers: { Authorization: "Bearer ${selectedApiKey?.apiKey}" }, + headers: { + Authorization: "Bearer ${selectedApiKey?.apiKey}", + "Content-Type": "application/json" + }, method: "POST", - body: formData + body: JSON.stringify(formData) } ); const result = await response.json(); @@ -392,7 +404,10 @@ output = query({ "${baseURL}/api/v1/prediction/${dialogProps.chatflowid}", { method: "POST", - body: data + headers: { + "Content-Type": "application/json" + }, + body: JSON.stringify(data) } ); const result = await response.json(); @@ -439,9 +454,12 @@ output = query({ const response = await fetch( "${baseURL}/api/v1/prediction/${dialogProps.chatflowid}", { - headers: { Authorization: "Bearer ${selectedApiKey?.apiKey}" }, + headers: { + Authorization: "Bearer ${selectedApiKey?.apiKey}", + "Content-Type": "application/json" + }, method: "POST", - body: data + body: JSON.stringify(data) } ); const result = await response.json(); From 7ec8f8ea2841db6ad7d9738ddc81f7c133dedf62 Mon Sep 17 00:00:00 2001 From: Henry Date: Sun, 16 Jul 2023 14:32:47 +0100 Subject: [PATCH 13/57] address vm2 security --- README.md | 24 +++++++------ docker/.env.example | 2 ++ docker/docker-compose.yml | 2 ++ .../components/nodes/tools/CustomTool/core.ts | 36 ++++++++++++------- packages/server/.env.example | 2 ++ packages/server/README.md | 24 +++++++------ packages/server/src/commands/start.ts | 6 +++- 7 files changed, 61 insertions(+), 35 deletions(-) diff --git a/README.md b/README.md index 5023a1b77..b4d4b860e 100644 --- a/README.md +++ b/README.md @@ -130,17 +130,19 @@ FLOWISE_PASSWORD=1234 Flowise support different environment variables to configure your instance. You can specify the following variables in the `.env` file inside `packages/server` folder. -| Variable | Description | Type | Default | -| ---------------- | ---------------------------------------------------------------- | ------------------------------------------------ | ----------------------------------- | -| PORT | The HTTP port Flowise runs on | Number | 3000 | -| FLOWISE_USERNAME | Username to login | String | -| FLOWISE_PASSWORD | Password to login | String | -| DEBUG | Print logs from components | Boolean | -| LOG_PATH | Location where log files are stored | String | `your-path/Flowise/logs` | -| LOG_LEVEL | Different levels of logs | Enum String: `error`, `info`, `verbose`, `debug` | `info` | -| DATABASE_PATH | Location where database is saved | String | `your-home-dir/.flowise` | -| APIKEY_PATH | Location where api keys are saved | String | `your-path/Flowise/packages/server` | -| EXECUTION_MODE | Whether predictions run in their own process or the main process | Enum String: `child`, `main` | `main` | +| Variable | Description | Type | Default | +| -------------------------- | ---------------------------------------------------------------- | ------------------------------------------------ | ----------------------------------- | +| PORT | The HTTP port Flowise runs on | Number | 3000 | +| FLOWISE_USERNAME | Username to login | String | +| FLOWISE_PASSWORD | Password to login | String | +| DEBUG | Print logs from components | Boolean | +| LOG_PATH | Location where log files are stored | String | `your-path/Flowise/logs` | +| LOG_LEVEL | Different levels of logs | Enum String: `error`, `info`, `verbose`, `debug` | `info` | +| DATABASE_PATH | Location where database is saved | String | `your-home-dir/.flowise` | +| APIKEY_PATH | Location where api keys are saved | String | `your-path/Flowise/packages/server` | +| EXECUTION_MODE | Whether predictions run in their own process or the main process | Enum String: `child`, `main` | `main` | +| TOOL_FUNCTION_BUILTIN_DEP | NodeJS built-in modules to be used for Tool Function | String | | +| TOOL_FUNCTION_EXTERNAL_DEP | External modules to be used for Tool Function | String | | You can also specify the env variables when using `npx`. For example: diff --git a/docker/.env.example b/docker/.env.example index 262e08a63..a0b1fb26f 100644 --- a/docker/.env.example +++ b/docker/.env.example @@ -6,3 +6,5 @@ PORT=3000 # APIKEY_PATH=/your_api_key_path/.flowise # LOG_PATH=/your_log_path/logs # EXECUTION_MODE=child or main +# TOOL_FUNCTION_BUILTIN_DEP=crypto,fs +# TOOL_FUNCTION_EXTERNAL_DEP=moment,lodash \ No newline at end of file diff --git a/docker/docker-compose.yml b/docker/docker-compose.yml index 3077c43d3..4a8c4dbb8 100644 --- a/docker/docker-compose.yml +++ b/docker/docker-compose.yml @@ -13,6 +13,8 @@ services: - LOG_PATH=${LOG_PATH} - EXECUTION_MODE=${EXECUTION_MODE} - DEBUG=${DEBUG} + - TOOL_FUNCTION_BUILTIN_DEP=${TOOL_FUNCTION_BUILTIN_DEP} + - TOOL_FUNCTION_EXTERNAL_DEP=${TOOL_FUNCTION_EXTERNAL_DEP} ports: - '${PORT}:${PORT}' volumes: diff --git a/packages/components/nodes/tools/CustomTool/core.ts b/packages/components/nodes/tools/CustomTool/core.ts index 0d3d7bcd9..2aa06b547 100644 --- a/packages/components/nodes/tools/CustomTool/core.ts +++ b/packages/components/nodes/tools/CustomTool/core.ts @@ -51,25 +51,37 @@ export class DynamicStructuredTool< } } + const defaultAllowBuiltInDep = [ + 'assert', + 'buffer', + 'crypto', + 'events', + 'http', + 'https', + 'net', + 'path', + 'querystring', + 'timers', + 'tls', + 'url', + 'zlib' + ] + + const builtinDeps = process.env.TOOL_FUNCTION_BUILTIN_DEP + ? defaultAllowBuiltInDep.concat(process.env.TOOL_FUNCTION_BUILTIN_DEP.split(',')) + : defaultAllowBuiltInDep + const externalDeps = process.env.TOOL_FUNCTION_EXTERNAL_DEP ? process.env.TOOL_FUNCTION_EXTERNAL_DEP.split(',') : [] + const deps = availableDependencies.concat(externalDeps) + const options = { console: 'inherit', sandbox, require: { - external: false as boolean | { modules: string[] }, - builtin: ['*'] + external: { modules: deps }, + builtin: builtinDeps } } as any - const external = JSON.stringify(availableDependencies) - if (external) { - const deps = JSON.parse(external) - if (deps && deps.length) { - options.require.external = { - modules: deps - } - } - } - const vm = new NodeVM(options) const response = await vm.run(`module.exports = async function() {${this.code}}()`, __dirname) diff --git a/packages/server/.env.example b/packages/server/.env.example index d9b2da762..81bac2dcc 100644 --- a/packages/server/.env.example +++ b/packages/server/.env.example @@ -7,3 +7,5 @@ PORT=3000 # LOG_PATH=/your_log_path/logs # LOG_LEVEL=debug (error | warn | info | verbose | debug) # EXECUTION_MODE=main (child | main) +# TOOL_FUNCTION_BUILTIN_DEP=crypto,fs +# TOOL_FUNCTION_EXTERNAL_DEP=moment,lodash diff --git a/packages/server/README.md b/packages/server/README.md index fb3a0c123..e7aacf32e 100644 --- a/packages/server/README.md +++ b/packages/server/README.md @@ -33,17 +33,19 @@ FLOWISE_PASSWORD=1234 Flowise support different environment variables to configure your instance. You can specify the following variables in the `.env` file inside `packages/server` folder. -| Variable | Description | Type | Default | -| ---------------- | ---------------------------------------------------------------- | ------------------------------------------------ | ----------------------------------- | -| PORT | The HTTP port Flowise runs on | Number | 3000 | -| FLOWISE_USERNAME | Username to login | String | -| FLOWISE_PASSWORD | Password to login | String | -| DEBUG | Print logs from components | Boolean | -| LOG_PATH | Location where log files are stored | String | `your-path/Flowise/logs` | -| LOG_LEVEL | Different levels of logs | Enum String: `error`, `info`, `verbose`, `debug` | `info` | -| DATABASE_PATH | Location where database is saved | String | `your-home-dir/.flowise` | -| APIKEY_PATH | Location where api keys are saved | String | `your-path/Flowise/packages/server` | -| EXECUTION_MODE | Whether predictions run in their own process or the main process | Enum String: `child`, `main` | `main` | +| Variable | Description | Type | Default | +| -------------------------- | ---------------------------------------------------------------- | ------------------------------------------------ | ----------------------------------- | +| PORT | The HTTP port Flowise runs on | Number | 3000 | +| FLOWISE_USERNAME | Username to login | String | +| FLOWISE_PASSWORD | Password to login | String | +| DEBUG | Print logs from components | Boolean | +| LOG_PATH | Location where log files are stored | String | `your-path/Flowise/logs` | +| LOG_LEVEL | Different levels of logs | Enum String: `error`, `info`, `verbose`, `debug` | `info` | +| DATABASE_PATH | Location where database is saved | String | `your-home-dir/.flowise` | +| APIKEY_PATH | Location where api keys are saved | String | `your-path/Flowise/packages/server` | +| EXECUTION_MODE | Whether predictions run in their own process or the main process | Enum String: `child`, `main` | `main` | +| TOOL_FUNCTION_BUILTIN_DEP | NodeJS built-in modules to be used for Tool Function | String | | +| TOOL_FUNCTION_EXTERNAL_DEP | External modules to be used for Tool Function | String | | You can also specify the env variables when using `npx`. For example: diff --git a/packages/server/src/commands/start.ts b/packages/server/src/commands/start.ts index 276a3036e..ffb6e4496 100644 --- a/packages/server/src/commands/start.ts +++ b/packages/server/src/commands/start.ts @@ -24,7 +24,9 @@ export default class Start extends Command { APIKEY_PATH: Flags.string(), LOG_PATH: Flags.string(), LOG_LEVEL: Flags.string(), - EXECUTION_MODE: Flags.string() + EXECUTION_MODE: Flags.string(), + TOOL_FUNCTION_BUILTIN_DEP: Flags.string(), + TOOL_FUNCTION_EXTERNAL_DEP: Flags.string() } async stopProcess() { @@ -65,6 +67,8 @@ export default class Start extends Command { if (flags.LOG_LEVEL) process.env.LOG_LEVEL = flags.LOG_LEVEL if (flags.EXECUTION_MODE) process.env.EXECUTION_MODE = flags.EXECUTION_MODE if (flags.DEBUG) process.env.DEBUG = flags.DEBUG + if (flags.TOOL_FUNCTION_BUILTIN_DEP) process.env.TOOL_FUNCTION_BUILTIN_DEP = flags.TOOL_FUNCTION_BUILTIN_DEP + if (flags.TOOL_FUNCTION_EXTERNAL_DEP) process.env.TOOL_FUNCTION_EXTERNAL_DEP = flags.TOOL_FUNCTION_EXTERNAL_DEP await (async () => { try { From be49c11f6b712ef781a8f1c7672c7d9357e2c3e1 Mon Sep 17 00:00:00 2001 From: Yongtae Date: Mon, 17 Jul 2023 13:49:16 +0900 Subject: [PATCH 14/57] Update content-type header to application/x-www-form-urlencoded in APICodeDialog.js --- packages/ui/src/views/chatflows/APICodeDialog.js | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/packages/ui/src/views/chatflows/APICodeDialog.js b/packages/ui/src/views/chatflows/APICodeDialog.js index 9a036948b..b28cee739 100644 --- a/packages/ui/src/views/chatflows/APICodeDialog.js +++ b/packages/ui/src/views/chatflows/APICodeDialog.js @@ -310,9 +310,9 @@ async function query(formData) { { method: "POST", headers: { - "Content-Type": "application/json" + "Content-Type": "application/x-www-form-urlencoded" }, - body: JSON.stringify(formData) + body: new URLSearchParams(formData) } ); const result = await response.json(); @@ -358,10 +358,10 @@ async function query(formData) { { headers: { Authorization: "Bearer ${selectedApiKey?.apiKey}", - "Content-Type": "application/json" + "Content-Type": "application/x-www-form-urlencoded" }, method: "POST", - body: JSON.stringify(formData) + body: new URLSearchParams(formData) } ); const result = await response.json(); From 6804216c6a7e2e6bd72178a88a902f353a41d2e0 Mon Sep 17 00:00:00 2001 From: Yongtae Date: Mon, 17 Jul 2023 14:11:06 +0900 Subject: [PATCH 15/57] Update cURL command with new Content-Type header --- packages/ui/src/views/chatflows/APICodeDialog.js | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/packages/ui/src/views/chatflows/APICodeDialog.js b/packages/ui/src/views/chatflows/APICodeDialog.js index ed9d8986c..c9d5565aa 100644 --- a/packages/ui/src/views/chatflows/APICodeDialog.js +++ b/packages/ui/src/views/chatflows/APICodeDialog.js @@ -319,7 +319,7 @@ query(formData).then((response) => { } else if (codeLang === 'cURL') { return `curl ${baseURL}/api/v1/prediction/${dialogProps.chatflowid} \\ -X POST \\${getConfigExamplesForCurl(configData, 'formData')} \\ - -H "Content-Type: application/json"` + -H "Content-Type: multipart/form-data"` } return '' } @@ -366,7 +366,7 @@ query(formData).then((response) => { } else if (codeLang === 'cURL') { return `curl ${baseURL}/api/v1/prediction/${dialogProps.chatflowid} \\ -X POST \\${getConfigExamplesForCurl(configData, 'formData')} \\ - -H "Content-Type: application/json" \\ + -H "Content-Type: multipart/form-data" \\ -H "Authorization: Bearer ${selectedApiKey?.apiKey}"` } return '' From d03d77d870b85d7fea47ebedad27e4d7f5f66596 Mon Sep 17 00:00:00 2001 From: yejiezhao Date: Mon, 17 Jul 2023 15:40:35 +0800 Subject: [PATCH 16/57] fix: bug inputType --- packages/ui/src/ui-component/input/Input.js | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/packages/ui/src/ui-component/input/Input.js b/packages/ui/src/ui-component/input/Input.js index e77447641..5a7f45b7b 100644 --- a/packages/ui/src/ui-component/input/Input.js +++ b/packages/ui/src/ui-component/input/Input.js @@ -61,7 +61,7 @@ export const Input = ({ inputParam, value, onChange, disabled = false, showDialo Input.propTypes = { inputParam: PropTypes.object, - value: PropTypes.string, + value: PropTypes.oneOfType([PropTypes.string, PropTypes.number]), onChange: PropTypes.func, disabled: PropTypes.bool, showDialog: PropTypes.bool, From 551b0d515a8706f6ed452b6cef7d819543777c42 Mon Sep 17 00:00:00 2001 From: Henry Date: Mon, 17 Jul 2023 15:53:53 +0100 Subject: [PATCH 17/57] update log path --- README.md | 2 +- packages/server/README.md | 2 +- packages/server/src/utils/config.ts | 2 +- 3 files changed, 3 insertions(+), 3 deletions(-) diff --git a/README.md b/README.md index 5023a1b77..2c7002d51 100644 --- a/README.md +++ b/README.md @@ -136,7 +136,7 @@ Flowise support different environment variables to configure your instance. You | FLOWISE_USERNAME | Username to login | String | | FLOWISE_PASSWORD | Password to login | String | | DEBUG | Print logs from components | Boolean | -| LOG_PATH | Location where log files are stored | String | `your-path/Flowise/logs` | +| LOG_PATH | Location where log files are stored | String | `your-path/Flowise/packages/server` | | LOG_LEVEL | Different levels of logs | Enum String: `error`, `info`, `verbose`, `debug` | `info` | | DATABASE_PATH | Location where database is saved | String | `your-home-dir/.flowise` | | APIKEY_PATH | Location where api keys are saved | String | `your-path/Flowise/packages/server` | diff --git a/packages/server/README.md b/packages/server/README.md index fb3a0c123..087483e1a 100644 --- a/packages/server/README.md +++ b/packages/server/README.md @@ -39,7 +39,7 @@ Flowise support different environment variables to configure your instance. You | FLOWISE_USERNAME | Username to login | String | | FLOWISE_PASSWORD | Password to login | String | | DEBUG | Print logs from components | Boolean | -| LOG_PATH | Location where log files are stored | String | `your-path/Flowise/logs` | +| LOG_PATH | Location where log files are stored | String | `your-path/Flowise/packages/server` | | LOG_LEVEL | Different levels of logs | Enum String: `error`, `info`, `verbose`, `debug` | `info` | | DATABASE_PATH | Location where database is saved | String | `your-home-dir/.flowise` | | APIKEY_PATH | Location where api keys are saved | String | `your-path/Flowise/packages/server` | diff --git a/packages/server/src/utils/config.ts b/packages/server/src/utils/config.ts index 8540b3b12..b5f5884eb 100644 --- a/packages/server/src/utils/config.ts +++ b/packages/server/src/utils/config.ts @@ -7,7 +7,7 @@ dotenv.config({ path: path.join(__dirname, '..', '..', '.env'), override: true } // default config const loggingConfig = { - dir: process.env.LOG_PATH ?? path.join(__dirname, '..', '..', '..', '..', 'logs'), + dir: process.env.LOG_PATH ?? path.join(__dirname, '..', '..', 'logs'), server: { level: process.env.LOG_LEVEL ?? 'info', filename: 'server.log', From 3fc496ecb0182de8a853733b3564a0aa15142aac Mon Sep 17 00:00:00 2001 From: Henry Date: Mon, 17 Jul 2023 18:11:56 +0100 Subject: [PATCH 18/57] added unwanted log urls to prevent logging node-icon api calls --- packages/server/src/index.ts | 6 +-- packages/server/src/utils/logger.ts | 71 +++++++++++++++-------------- 2 files changed, 40 insertions(+), 37 deletions(-) diff --git a/packages/server/src/index.ts b/packages/server/src/index.ts index 1c2d4ebc4..35545bc3a 100644 --- a/packages/server/src/index.ts +++ b/packages/server/src/index.ts @@ -59,9 +59,6 @@ export class App { constructor() { this.app = express() - - // Add the expressRequestLogger middleware to log all requests - this.app.use(expressRequestLogger) } async initDatabase() { @@ -92,6 +89,9 @@ export class App { // Allow access from * this.app.use(cors()) + // Add the expressRequestLogger middleware to log all requests + this.app.use(expressRequestLogger) + if (process.env.FLOWISE_USERNAME && process.env.FLOWISE_PASSWORD) { const username = process.env.FLOWISE_USERNAME const password = process.env.FLOWISE_PASSWORD diff --git a/packages/server/src/utils/logger.ts b/packages/server/src/utils/logger.ts index 5d7ffedf1..57d5f64a8 100644 --- a/packages/server/src/utils/logger.ts +++ b/packages/server/src/utils/logger.ts @@ -57,43 +57,46 @@ const logger = createLogger({ * this.app.use(expressRequestLogger) */ export function expressRequestLogger(req: Request, res: Response, next: NextFunction): void { - const fileLogger = createLogger({ - format: combine(timestamp({ format: 'YYYY-MM-DD HH:mm:ss' }), format.json(), errors({ stack: true })), - defaultMeta: { - package: 'server', - request: { - method: req.method, - url: req.url, - body: req.body, - query: req.query, - params: req.params, - headers: req.headers - } - }, - transports: [ - new transports.File({ - filename: path.join(logDir, config.logging.express.filename ?? 'server-requests.log.jsonl'), - level: config.logging.express.level ?? 'debug' - }) - ] - }) + const unwantedLogURLs = ['/api/v1/node-icon/'] + if (req.url.includes('/api/v1/') && !unwantedLogURLs.some((url) => req.url.includes(url))) { + const fileLogger = createLogger({ + format: combine(timestamp({ format: 'YYYY-MM-DD HH:mm:ss' }), format.json(), errors({ stack: true })), + defaultMeta: { + package: 'server', + request: { + method: req.method, + url: req.url, + body: req.body, + query: req.query, + params: req.params, + headers: req.headers + } + }, + transports: [ + new transports.File({ + filename: path.join(logDir, config.logging.express.filename ?? 'server-requests.log.jsonl'), + level: config.logging.express.level ?? 'debug' + }) + ] + }) - const getRequestEmoji = (method: string) => { - const requetsEmojis: Record = { - GET: '⬇️', - POST: '⬆️', - PUT: '🖊', - DELETE: '❌' + const getRequestEmoji = (method: string) => { + const requetsEmojis: Record = { + GET: '⬇️', + POST: '⬆️', + PUT: '🖊', + DELETE: '❌' + } + + return requetsEmojis[method] || '?' } - return requetsEmojis[method] || '?' - } - - if (req.method !== 'GET') { - fileLogger.info(`${getRequestEmoji(req.method)} ${req.method} ${req.url}`) - logger.info(`${getRequestEmoji(req.method)} ${req.method} ${req.url}`) - } else { - fileLogger.http(`${getRequestEmoji(req.method)} ${req.method} ${req.url}`) + if (req.method !== 'GET') { + fileLogger.info(`${getRequestEmoji(req.method)} ${req.method} ${req.url}`) + logger.info(`${getRequestEmoji(req.method)} ${req.method} ${req.url}`) + } else { + fileLogger.http(`${getRequestEmoji(req.method)} ${req.method} ${req.url}`) + } } next() From 25b160261a92fb4f075228334f7c03113ef39271 Mon Sep 17 00:00:00 2001 From: Henry Date: Mon, 17 Jul 2023 18:25:53 +0100 Subject: [PATCH 19/57] update README --- README.md | 4 ++-- packages/server/README.md | 4 ++-- 2 files changed, 4 insertions(+), 4 deletions(-) diff --git a/README.md b/README.md index 2c7002d51..de7d218bb 100644 --- a/README.md +++ b/README.md @@ -135,9 +135,9 @@ Flowise support different environment variables to configure your instance. You | PORT | The HTTP port Flowise runs on | Number | 3000 | | FLOWISE_USERNAME | Username to login | String | | FLOWISE_PASSWORD | Password to login | String | -| DEBUG | Print logs from components | Boolean | +| DEBUG | Print logs onto terminal/console | Boolean | | LOG_PATH | Location where log files are stored | String | `your-path/Flowise/packages/server` | -| LOG_LEVEL | Different levels of logs | Enum String: `error`, `info`, `verbose`, `debug` | `info` | +| LOG_LEVEL | Different log levels for loggers to be saved | Enum String: `error`, `info`, `verbose`, `debug` | `info` | | DATABASE_PATH | Location where database is saved | String | `your-home-dir/.flowise` | | APIKEY_PATH | Location where api keys are saved | String | `your-path/Flowise/packages/server` | | EXECUTION_MODE | Whether predictions run in their own process or the main process | Enum String: `child`, `main` | `main` | diff --git a/packages/server/README.md b/packages/server/README.md index 087483e1a..3d039c266 100644 --- a/packages/server/README.md +++ b/packages/server/README.md @@ -38,9 +38,9 @@ Flowise support different environment variables to configure your instance. You | PORT | The HTTP port Flowise runs on | Number | 3000 | | FLOWISE_USERNAME | Username to login | String | | FLOWISE_PASSWORD | Password to login | String | -| DEBUG | Print logs from components | Boolean | +| DEBUG | Print logs onto terminal/console | Boolean | | LOG_PATH | Location where log files are stored | String | `your-path/Flowise/packages/server` | -| LOG_LEVEL | Different levels of logs | Enum String: `error`, `info`, `verbose`, `debug` | `info` | +| LOG_LEVEL | Different log levels for loggers to be saved | Enum String: `error`, `info`, `verbose`, `debug` | `info` | | DATABASE_PATH | Location where database is saved | String | `your-home-dir/.flowise` | | APIKEY_PATH | Location where api keys are saved | String | `your-path/Flowise/packages/server` | | EXECUTION_MODE | Whether predictions run in their own process or the main process | Enum String: `child`, `main` | `main` | From 745a42224fed43102e93de8caf489776a56b1a4d Mon Sep 17 00:00:00 2001 From: Henry Date: Mon, 17 Jul 2023 20:02:04 +0100 Subject: [PATCH 20/57] update docs on Docker env path --- README.md | 2 +- docker/.env.example | 7 ++++--- docker/README.md | 24 +++++++++++++++++++++++- docker/docker-compose.yml | 3 ++- packages/server/.env.example | 2 +- packages/server/README.md | 2 +- 6 files changed, 32 insertions(+), 8 deletions(-) diff --git a/README.md b/README.md index de7d218bb..15e781c98 100644 --- a/README.md +++ b/README.md @@ -128,7 +128,7 @@ FLOWISE_PASSWORD=1234 ## 🌱 Env Variables -Flowise support different environment variables to configure your instance. You can specify the following variables in the `.env` file inside `packages/server` folder. +Flowise support different environment variables to configure your instance. You can specify the following variables in the `.env` file inside `packages/server` folder. Read [more](https://docs.flowiseai.com/environment-variables) | Variable | Description | Type | Default | | ---------------- | ---------------------------------------------------------------- | ------------------------------------------------ | ----------------------------------- | diff --git a/docker/.env.example b/docker/.env.example index 262e08a63..cbee9c896 100644 --- a/docker/.env.example +++ b/docker/.env.example @@ -1,8 +1,9 @@ PORT=3000 +DATABASE_PATH=/root/.flowise +APIKEY_PATH=/root/.flowise +LOG_PATH=/root/.flowise/logs # FLOWISE_USERNAME=user # FLOWISE_PASSWORD=1234 # DEBUG=true -# DATABASE_PATH=/your_database_path/.flowise -# APIKEY_PATH=/your_api_key_path/.flowise -# LOG_PATH=/your_log_path/logs +# LOG_LEVEL=debug (error | warn | info | verbose | debug) # EXECUTION_MODE=child or main diff --git a/docker/README.md b/docker/README.md index 7f991a042..995db6fff 100644 --- a/docker/README.md +++ b/docker/README.md @@ -9,7 +9,7 @@ Starts Flowise from [DockerHub Image](https://hub.docker.com/repository/docker/f 3. Open [http://localhost:3000](http://localhost:3000) 4. You can bring the containers down by `docker-compose stop` -## With Authrorization +## 🔒 Authrorization 1. Create `.env` file and specify the `PORT`, `FLOWISE_USERNAME`, and `FLOWISE_PASSWORD` (refer to `.env.example`) 2. Pass `FLOWISE_USERNAME` and `FLOWISE_PASSWORD` to the `docker-compose.yml` file: @@ -22,3 +22,25 @@ Starts Flowise from [DockerHub Image](https://hub.docker.com/repository/docker/f 3. `docker-compose up -d` 4. Open [http://localhost:3000](http://localhost:3000) 5. You can bring the containers down by `docker-compose stop` + +## 🌱 Env Variables + +If you like to persist your data (flows, logs, apikeys), set these variables in the `.env` file inside `docker` folder: + +- DATABASE_PATH=/root/.flowise +- APIKEY_PATH=/root/.flowise +- LOG_PATH=/root/.flowise/logs + +Flowise also support different environment variables to configure your instance. Read [more](https://docs.flowiseai.com/environment-variables) + +| Variable | Description | Type | Default | +| ---------------- | ---------------------------------------------------------------- | ------------------------------------------------ | ----------------------------------- | +| PORT | The HTTP port Flowise runs on | Number | 3000 | +| FLOWISE_USERNAME | Username to login | String | +| FLOWISE_PASSWORD | Password to login | String | +| DEBUG | Print logs onto terminal/console | Boolean | +| LOG_PATH | Location where log files are stored | String | `your-path/Flowise/packages/server` | +| LOG_LEVEL | Different log levels for loggers to be saved | Enum String: `error`, `info`, `verbose`, `debug` | `info` | +| DATABASE_PATH | Location where database is saved | String | `your-home-dir/.flowise` | +| APIKEY_PATH | Location where api keys are saved | String | `your-path/Flowise/packages/server` | +| EXECUTION_MODE | Whether predictions run in their own process or the main process | Enum String: `child`, `main` | `main` | diff --git a/docker/docker-compose.yml b/docker/docker-compose.yml index 3077c43d3..7f616fa5f 100644 --- a/docker/docker-compose.yml +++ b/docker/docker-compose.yml @@ -8,11 +8,12 @@ services: - PORT=${PORT} - FLOWISE_USERNAME=${FLOWISE_USERNAME} - FLOWISE_PASSWORD=${FLOWISE_PASSWORD} + - DEBUG=${DEBUG} - DATABASE_PATH=${DATABASE_PATH} - APIKEY_PATH=${APIKEY_PATH} - LOG_PATH=${LOG_PATH} + - LOG_LEVEL=${LOG_LEVEL} - EXECUTION_MODE=${EXECUTION_MODE} - - DEBUG=${DEBUG} ports: - '${PORT}:${PORT}' volumes: diff --git a/packages/server/.env.example b/packages/server/.env.example index d9b2da762..181ad7157 100644 --- a/packages/server/.env.example +++ b/packages/server/.env.example @@ -4,6 +4,6 @@ PORT=3000 # DEBUG=true # DATABASE_PATH=/your_database_path/.flowise # APIKEY_PATH=/your_api_key_path/.flowise -# LOG_PATH=/your_log_path/logs +# LOG_PATH=/your_log_path/.flowise/logs # LOG_LEVEL=debug (error | warn | info | verbose | debug) # EXECUTION_MODE=main (child | main) diff --git a/packages/server/README.md b/packages/server/README.md index 3d039c266..e18da6978 100644 --- a/packages/server/README.md +++ b/packages/server/README.md @@ -31,7 +31,7 @@ FLOWISE_PASSWORD=1234 ## 🌱 Env Variables -Flowise support different environment variables to configure your instance. You can specify the following variables in the `.env` file inside `packages/server` folder. +Flowise support different environment variables to configure your instance. You can specify the following variables in the `.env` file inside `packages/server` folder. Read [more](https://docs.flowiseai.com/environment-variables) | Variable | Description | Type | Default | | ---------------- | ---------------------------------------------------------------- | ------------------------------------------------ | ----------------------------------- | From 72489fb078cd77549d7eb6779091b01b02094d1a Mon Sep 17 00:00:00 2001 From: Henry Heng Date: Mon, 17 Jul 2023 23:18:36 +0100 Subject: [PATCH 21/57] Fix lint Singlestore_Existing.ts --- .../vectorstores/Singlestore_Existing/Singlestore_Existing.ts | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/packages/components/nodes/vectorstores/Singlestore_Existing/Singlestore_Existing.ts b/packages/components/nodes/vectorstores/Singlestore_Existing/Singlestore_Existing.ts index 3b880b24c..1b37a4008 100644 --- a/packages/components/nodes/vectorstores/Singlestore_Existing/Singlestore_Existing.ts +++ b/packages/components/nodes/vectorstores/Singlestore_Existing/Singlestore_Existing.ts @@ -124,7 +124,7 @@ class SingleStoreExisting_VectorStores implements INode { const k = topK ? parseInt(topK, 10) : 4 let vectorStore: SingleStoreVectorStore - + vectorStore = new SingleStoreVectorStore(embeddings, singleStoreConnectionConfig) if (output === 'retriever') { From 587ac62296fd240dde00a54fb7c8591c31f1adfb Mon Sep 17 00:00:00 2001 From: Henry Heng Date: Mon, 17 Jul 2023 23:19:38 +0100 Subject: [PATCH 22/57] Fix lint Singlestore_Upsert.ts --- .../vectorstores/Singlestore_Upsert/Singlestore_Upsert.ts | 3 +-- 1 file changed, 1 insertion(+), 2 deletions(-) diff --git a/packages/components/nodes/vectorstores/Singlestore_Upsert/Singlestore_Upsert.ts b/packages/components/nodes/vectorstores/Singlestore_Upsert/Singlestore_Upsert.ts index dc59edb6d..eb00381d2 100644 --- a/packages/components/nodes/vectorstores/Singlestore_Upsert/Singlestore_Upsert.ts +++ b/packages/components/nodes/vectorstores/Singlestore_Upsert/Singlestore_Upsert.ts @@ -1,10 +1,9 @@ -import { INode, INodeData, INodeOutputsValue, INodeParams, INodeOptionsValue } from '../../../src/Interface' +import { INode, INodeData, INodeOutputsValue, INodeParams } from '../../../src/Interface' import { Embeddings } from 'langchain/embeddings/base' import { Document } from 'langchain/document' import { getBaseClasses } from '../../../src/utils' import { SingleStoreVectorStore, SingleStoreVectorStoreConfig } from 'langchain/vectorstores/singlestore' import { flatten } from 'lodash' -import { MemoryVectorStore } from 'langchain/vectorstores/memory' class SingleStoreUpsert_VectorStores implements INode { label: string From 05e8e33d5a226741345410056eee8ad9ee066391 Mon Sep 17 00:00:00 2001 From: Henry Date: Mon, 17 Jul 2023 23:36:18 +0100 Subject: [PATCH 23/57] update Brave Tool logo --- .../tools/BraveSearchAPI/BraveSearchAPI.ts | 2 +- .../nodes/tools/BraveSearchAPI/brave-logo.svg | 46 ------------------- .../nodes/tools/BraveSearchAPI/brave.svg | 1 + 3 files changed, 2 insertions(+), 47 deletions(-) delete mode 100644 packages/components/nodes/tools/BraveSearchAPI/brave-logo.svg create mode 100644 packages/components/nodes/tools/BraveSearchAPI/brave.svg diff --git a/packages/components/nodes/tools/BraveSearchAPI/BraveSearchAPI.ts b/packages/components/nodes/tools/BraveSearchAPI/BraveSearchAPI.ts index 76629392c..b84aaccd2 100644 --- a/packages/components/nodes/tools/BraveSearchAPI/BraveSearchAPI.ts +++ b/packages/components/nodes/tools/BraveSearchAPI/BraveSearchAPI.ts @@ -16,7 +16,7 @@ class BraveSearchAPI_Tools implements INode { this.label = 'BraveSearch API' this.name = 'braveSearchAPI' this.type = 'BraveSearchAPI' - this.icon = 'brave-logo.svg' + this.icon = 'brave.svg' this.category = 'Tools' this.description = 'Wrapper around BraveSearch API - a real-time API to access Brave search results' this.inputs = [ diff --git a/packages/components/nodes/tools/BraveSearchAPI/brave-logo.svg b/packages/components/nodes/tools/BraveSearchAPI/brave-logo.svg deleted file mode 100644 index 686b5c413..000000000 --- a/packages/components/nodes/tools/BraveSearchAPI/brave-logo.svg +++ /dev/null @@ -1,46 +0,0 @@ - - - - Logotypes/bat/logo-dark@1x - Created with Sketch. - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - \ No newline at end of file diff --git a/packages/components/nodes/tools/BraveSearchAPI/brave.svg b/packages/components/nodes/tools/BraveSearchAPI/brave.svg new file mode 100644 index 000000000..0c0c0e86e --- /dev/null +++ b/packages/components/nodes/tools/BraveSearchAPI/brave.svg @@ -0,0 +1 @@ + \ No newline at end of file From 673cc029bd0c57a921a5d0d88e00b41eb7777cb0 Mon Sep 17 00:00:00 2001 From: Henry Date: Tue, 18 Jul 2023 01:22:20 +0100 Subject: [PATCH 24/57] update conversational retrieval qa chain prompt --- .../ConversationalRetrievalQAChain.ts | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/packages/components/nodes/chains/ConversationalRetrievalQAChain/ConversationalRetrievalQAChain.ts b/packages/components/nodes/chains/ConversationalRetrievalQAChain/ConversationalRetrievalQAChain.ts index 24b40d481..eeebe1ec3 100644 --- a/packages/components/nodes/chains/ConversationalRetrievalQAChain/ConversationalRetrievalQAChain.ts +++ b/packages/components/nodes/chains/ConversationalRetrievalQAChain/ConversationalRetrievalQAChain.ts @@ -7,14 +7,14 @@ import { BaseChatMemory, BufferMemory, ChatMessageHistory } from 'langchain/memo import { PromptTemplate } from 'langchain/prompts' import { ConsoleCallbackHandler, CustomChainHandler } from '../../../src/handler' -const default_qa_template = `Use the following pieces of context to answer the question at the end, in its original language. If you don't know the answer, just say that you don't know in its original language, don't try to make up an answer. +const default_qa_template = `Use the following pieces of context to answer the question at the end. If you don't know the answer, just say that you don't know, don't try to make up an answer. {context} Question: {question} Helpful Answer:` -const qa_template = `Use the following pieces of context to answer the question at the end, in its original language. +const qa_template = `Use the following pieces of context to answer the question at the end. {context} From 56aa5258880b30d1ec646f60e8221fc9e66b79fd Mon Sep 17 00:00:00 2001 From: Henry Date: Tue, 18 Jul 2023 01:26:52 +0100 Subject: [PATCH 25/57] update Zep version --- packages/components/package.json | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/packages/components/package.json b/packages/components/package.json index d3ac06c35..8cc022359 100644 --- a/packages/components/package.json +++ b/packages/components/package.json @@ -18,7 +18,7 @@ "dependencies": { "@aws-sdk/client-dynamodb": "^3.360.0", "@dqbd/tiktoken": "^1.0.7", - "@getzep/zep-js": "^0.3.1", + "@getzep/zep-js": "^0.4.1", "@huggingface/inference": "^2.6.1", "@opensearch-project/opensearch": "^1.2.0", "@pinecone-database/pinecone": "^0.0.12", From ed0bbe7bb73ce158d70ecae70ef3631d40ef987b Mon Sep 17 00:00:00 2001 From: Yongtae Date: Tue, 18 Jul 2023 15:09:22 +0900 Subject: [PATCH 26/57] revert content type related to form --- packages/ui/src/views/chatflows/APICodeDialog.js | 12 +++--------- 1 file changed, 3 insertions(+), 9 deletions(-) diff --git a/packages/ui/src/views/chatflows/APICodeDialog.js b/packages/ui/src/views/chatflows/APICodeDialog.js index b28cee739..57484c80e 100644 --- a/packages/ui/src/views/chatflows/APICodeDialog.js +++ b/packages/ui/src/views/chatflows/APICodeDialog.js @@ -309,10 +309,7 @@ async function query(formData) { "${baseURL}/api/v1/prediction/${dialogProps.chatflowid}", { method: "POST", - headers: { - "Content-Type": "application/x-www-form-urlencoded" - }, - body: new URLSearchParams(formData) + body: formData } ); const result = await response.json(); @@ -356,12 +353,9 @@ async function query(formData) { const response = await fetch( "${baseURL}/api/v1/prediction/${dialogProps.chatflowid}", { - headers: { - Authorization: "Bearer ${selectedApiKey?.apiKey}", - "Content-Type": "application/x-www-form-urlencoded" - }, + headers: { Authorization: "Bearer ${selectedApiKey?.apiKey}" }, method: "POST", - body: new URLSearchParams(formData) + body: formData } ); const result = await response.json(); From c5eff32cf05519b99fe15d7c2a3cf214178bff9c Mon Sep 17 00:00:00 2001 From: Atish Amte Date: Tue, 18 Jul 2023 23:52:16 +0530 Subject: [PATCH 27/57] Multiple Database Support --- packages/server/.env.example | 14 +++++- packages/server/README.md | 9 +++- packages/server/package.json | 2 + packages/server/src/ChildProcess.ts | 60 ++++++++++++++++++++--- packages/server/src/DataSource.ts | 59 ++++++++++++++++++---- packages/server/src/entity/ChatFlow.ts | 2 +- packages/server/src/entity/ChatMessage.ts | 2 +- packages/server/src/entity/Tool.ts | 2 +- 8 files changed, 128 insertions(+), 22 deletions(-) diff --git a/packages/server/.env.example b/packages/server/.env.example index d9b2da762..699960bc7 100644 --- a/packages/server/.env.example +++ b/packages/server/.env.example @@ -2,8 +2,20 @@ PORT=3000 # FLOWISE_USERNAME=user # FLOWISE_PASSWORD=1234 # DEBUG=true -# DATABASE_PATH=/your_database_path/.flowise # APIKEY_PATH=/your_api_key_path/.flowise # LOG_PATH=/your_log_path/logs # LOG_LEVEL=debug (error | warn | info | verbose | debug) # EXECUTION_MODE=main (child | main) + +OVERRIDE_DATABASE="true" +DATABASE_TYPE="sqlite" # sqlite, mysql, postgres + +# When database is sqlite +# DATABASE_PATH=/your_database_path/.flowise + +# When database is not sqlite +# DATABASE_PORT="3306" +# DATABASE_HOST="127.0.0.1" +# DATABASE_NAME="flowise" +# DATABASE_USER="root" +# DATABASE_PASSWORD="atish123" \ No newline at end of file diff --git a/packages/server/README.md b/packages/server/README.md index fb3a0c123..ed0c6a4ca 100644 --- a/packages/server/README.md +++ b/packages/server/README.md @@ -41,9 +41,16 @@ Flowise support different environment variables to configure your instance. You | DEBUG | Print logs from components | Boolean | | LOG_PATH | Location where log files are stored | String | `your-path/Flowise/logs` | | LOG_LEVEL | Different levels of logs | Enum String: `error`, `info`, `verbose`, `debug` | `info` | -| DATABASE_PATH | Location where database is saved | String | `your-home-dir/.flowise` | | APIKEY_PATH | Location where api keys are saved | String | `your-path/Flowise/packages/server` | | EXECUTION_MODE | Whether predictions run in their own process or the main process | Enum String: `child`, `main` | `main` | +| OVERRIDE_DATABASE| Override current database with default | Enum String: `true`, `false` | `true` | +| DATABASE_TYPE | Type of database to store the flowise data | Enum String: `sqlite`, `mysql`, `postgres` | `sqlite` | +| DATABASE_PATH | Location where database is saved (When DATABASE_TYPE is sqlite) | String | `your-home-dir/.flowise` | +| DATABASE_HOST | Host URL or IP address (When DATABASE_TYPE is not sqlite) | String | | +| DATABASE_PORT | Database port (When DATABASE_TYPE is not sqlite) | String | | +| DATABASE_USERNAME| Database username (When DATABASE_TYPE is not sqlite) | String | | +| DATABASE_PASSWORD| Database password (When DATABASE_TYPE is not sqlite) | String | | +| DATABASE_NAME | Database name (When DATABASE_TYPE is not sqlite) | String | | You can also specify the env variables when using `npx`. For example: diff --git a/packages/server/package.json b/packages/server/package.json index daed16d86..73acc64c5 100644 --- a/packages/server/package.json +++ b/packages/server/package.json @@ -55,6 +55,8 @@ "flowise-ui": "*", "moment-timezone": "^0.5.34", "multer": "^1.4.5-lts.1", + "mysql": "^2.18.1", + "pg": "^8.11.1", "reflect-metadata": "^0.1.13", "socket.io": "^4.6.1", "sqlite3": "^5.1.6", diff --git a/packages/server/src/ChildProcess.ts b/packages/server/src/ChildProcess.ts index 27629480f..c14a49778 100644 --- a/packages/server/src/ChildProcess.ts +++ b/packages/server/src/ChildProcess.ts @@ -142,14 +142,58 @@ export class ChildProcess { * @returns {DataSource} */ async function initDB() { - const homePath = process.env.DATABASE_PATH ?? path.join(getUserHome(), '.flowise') - const childAppDataSource = new DataSource({ - type: 'sqlite', - database: path.resolve(homePath, 'database.sqlite'), - synchronize: true, - entities: [ChatFlow, ChatMessage, Tool], - migrations: [] - }) + let childAppDataSource; + let homePath; + switch (process.env.DATABASE_TYPE) { + case 'sqlite': + homePath = process.env.DATABASE_PATH ?? path.join(getUserHome(), '.flowise') + childAppDataSource = new DataSource({ + type: 'sqlite', + database: path.resolve(homePath, 'database.sqlite'), + synchronize: (process.env.OVERRIDE_DATABASE == 'true'), + entities: [ChatFlow, ChatMessage, Tool], + migrations: [] + }) + break; + case 'mysql': + childAppDataSource = new DataSource({ + type: 'mysql', + host: process.env.DATABASE_HOST, + port: parseInt(process.env.DATABASE_PORT || '3306'), + username: process.env.DATABASE_USER, + password: process.env.DATABASE_PASSWORD, + database: process.env.DATABASE_NAME, + charset: 'utf8mb4', + synchronize: (process.env.OVERRIDE_DATABASE == 'true'), + entities: [ChatFlow, ChatMessage, Tool], + migrations: [] + }) + break; + case 'postgres': + childAppDataSource = new DataSource({ + type: 'postgres', + host: process.env.DATABASE_HOST, + port: parseInt(process.env.DATABASE_PORT || '5432'), + username: process.env.DATABASE_USER, + password: process.env.DATABASE_PASSWORD, + database: process.env.DATABASE_NAME, + synchronize: (process.env.OVERRIDE_DATABASE == 'true'), + entities: [ChatFlow, ChatMessage, Tool], + migrations: [] + }) + break; + default: + homePath = process.env.DATABASE_PATH ?? path.join(getUserHome(), '.flowise') + childAppDataSource = new DataSource({ + type: 'sqlite', + database: path.resolve(homePath, 'database.sqlite'), + synchronize: (process.env.OVERRIDE_DATABASE == 'true'), + entities: [ChatFlow, ChatMessage, Tool], + migrations: [] + }) + break; + } + return await childAppDataSource.initialize() } diff --git a/packages/server/src/DataSource.ts b/packages/server/src/DataSource.ts index 03b9d5ce6..b2ae5cd97 100644 --- a/packages/server/src/DataSource.ts +++ b/packages/server/src/DataSource.ts @@ -9,15 +9,56 @@ import { getUserHome } from './utils' let appDataSource: DataSource export const init = async (): Promise => { - const homePath = process.env.DATABASE_PATH ?? path.join(getUserHome(), '.flowise') - - appDataSource = new DataSource({ - type: 'sqlite', - database: path.resolve(homePath, 'database.sqlite'), - synchronize: true, - entities: [ChatFlow, ChatMessage, Tool], - migrations: [] - }) + let homePath; + switch (process.env.DATABASE_TYPE) { + case 'sqlite': + homePath = process.env.DATABASE_PATH ?? path.join(getUserHome(), '.flowise') + appDataSource = new DataSource({ + type: 'sqlite', + database: path.resolve(homePath, 'database.sqlite'), + synchronize: (process.env.OVERRIDE_DATABASE == 'true'), + entities: [ChatFlow, ChatMessage, Tool], + migrations: [] + }) + break; + case 'mysql': + appDataSource = new DataSource({ + type: 'mysql', + host: process.env.DATABASE_HOST, + port: parseInt(process.env.DATABASE_PORT || '3306'), + username: process.env.DATABASE_USER, + password: process.env.DATABASE_PASSWORD, + database: process.env.DATABASE_NAME, + charset: 'utf8mb4', + synchronize: (process.env.OVERRIDE_DATABASE == 'true'), + entities: [ChatFlow, ChatMessage, Tool], + migrations: [] + }) + break; + case 'postgres': + appDataSource = new DataSource({ + type: 'postgres', + host: process.env.DATABASE_HOST, + port: parseInt(process.env.DATABASE_PORT || '5432'), + username: process.env.DATABASE_USER, + password: process.env.DATABASE_PASSWORD, + database: process.env.DATABASE_NAME, + synchronize: (process.env.OVERRIDE_DATABASE == 'true'), + entities: [ChatFlow, ChatMessage, Tool], + migrations: [] + }) + break; + default: + homePath = process.env.DATABASE_PATH ?? path.join(getUserHome(), '.flowise') + appDataSource = new DataSource({ + type: 'sqlite', + database: path.resolve(homePath, 'database.sqlite'), + synchronize: (process.env.OVERRIDE_DATABASE == 'true'), + entities: [ChatFlow, ChatMessage, Tool], + migrations: [] + }) + break; + } } export function getDataSource(): DataSource { diff --git a/packages/server/src/entity/ChatFlow.ts b/packages/server/src/entity/ChatFlow.ts index e1d212cf6..adaf0917e 100644 --- a/packages/server/src/entity/ChatFlow.ts +++ b/packages/server/src/entity/ChatFlow.ts @@ -10,7 +10,7 @@ export class ChatFlow implements IChatFlow { @Column() name: string - @Column() + @Column({ type: "text" }) flowData: string @Column({ nullable: true }) diff --git a/packages/server/src/entity/ChatMessage.ts b/packages/server/src/entity/ChatMessage.ts index 3e4e41d2b..46972f6aa 100644 --- a/packages/server/src/entity/ChatMessage.ts +++ b/packages/server/src/entity/ChatMessage.ts @@ -14,7 +14,7 @@ export class ChatMessage implements IChatMessage { @Column() chatflowid: string - @Column() + @Column({ type: "text" }) content: string @Column({ nullable: true }) diff --git a/packages/server/src/entity/Tool.ts b/packages/server/src/entity/Tool.ts index 222fd7666..4fc895198 100644 --- a/packages/server/src/entity/Tool.ts +++ b/packages/server/src/entity/Tool.ts @@ -10,7 +10,7 @@ export class Tool implements ITool { @Column() name: string - @Column() + @Column({ type: "text" }) description: string @Column() From 318bd516d79e0bc40799130f8ae10a5b90337359 Mon Sep 17 00:00:00 2001 From: Atish Amte Date: Tue, 18 Jul 2023 23:57:44 +0530 Subject: [PATCH 28/57] Update .env.example --- packages/server/.env.example | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/packages/server/.env.example b/packages/server/.env.example index 57deb4312..923c62a0e 100644 --- a/packages/server/.env.example +++ b/packages/server/.env.example @@ -14,11 +14,11 @@ DATABASE_TYPE="sqlite" # sqlite, mysql, postgres # DATABASE_PATH=/your_database_path/.flowise # When database is not sqlite -# DATABASE_PORT="3306" -# DATABASE_HOST="127.0.0.1" +# DATABASE_PORT="" +# DATABASE_HOST="" # DATABASE_NAME="flowise" -# DATABASE_USER="root" -# DATABASE_PASSWORD="atish123" +# DATABASE_USER="" +# DATABASE_PASSWORD="" # TOOL_FUNCTION_BUILTIN_DEP=crypto,fs # TOOL_FUNCTION_EXTERNAL_DEP=moment,lodash From 4c4fd6ff6794e7fc2b5861d8e1d7bd44cc48a620 Mon Sep 17 00:00:00 2001 From: Atish Amte Date: Wed, 19 Jul 2023 00:03:48 +0530 Subject: [PATCH 29/57] Resolved linting error --- packages/server/src/ChildProcess.ts | 20 ++++++++++---------- packages/server/src/DataSource.ts | 18 +++++++++--------- 2 files changed, 19 insertions(+), 19 deletions(-) diff --git a/packages/server/src/ChildProcess.ts b/packages/server/src/ChildProcess.ts index c14a49778..a93906c0e 100644 --- a/packages/server/src/ChildProcess.ts +++ b/packages/server/src/ChildProcess.ts @@ -142,19 +142,19 @@ export class ChildProcess { * @returns {DataSource} */ async function initDB() { - let childAppDataSource; - let homePath; + let childAppDataSource + let homePath switch (process.env.DATABASE_TYPE) { case 'sqlite': homePath = process.env.DATABASE_PATH ?? path.join(getUserHome(), '.flowise') childAppDataSource = new DataSource({ type: 'sqlite', database: path.resolve(homePath, 'database.sqlite'), - synchronize: (process.env.OVERRIDE_DATABASE == 'true'), + synchronize: process.env.OVERRIDE_DATABASE == 'true', entities: [ChatFlow, ChatMessage, Tool], migrations: [] }) - break; + break case 'mysql': childAppDataSource = new DataSource({ type: 'mysql', @@ -164,11 +164,11 @@ async function initDB() { password: process.env.DATABASE_PASSWORD, database: process.env.DATABASE_NAME, charset: 'utf8mb4', - synchronize: (process.env.OVERRIDE_DATABASE == 'true'), + synchronize: process.env.OVERRIDE_DATABASE == 'true', entities: [ChatFlow, ChatMessage, Tool], migrations: [] }) - break; + break case 'postgres': childAppDataSource = new DataSource({ type: 'postgres', @@ -177,21 +177,21 @@ async function initDB() { username: process.env.DATABASE_USER, password: process.env.DATABASE_PASSWORD, database: process.env.DATABASE_NAME, - synchronize: (process.env.OVERRIDE_DATABASE == 'true'), + synchronize: process.env.OVERRIDE_DATABASE == 'true', entities: [ChatFlow, ChatMessage, Tool], migrations: [] }) - break; + break default: homePath = process.env.DATABASE_PATH ?? path.join(getUserHome(), '.flowise') childAppDataSource = new DataSource({ type: 'sqlite', database: path.resolve(homePath, 'database.sqlite'), - synchronize: (process.env.OVERRIDE_DATABASE == 'true'), + synchronize: process.env.OVERRIDE_DATABASE == 'true', entities: [ChatFlow, ChatMessage, Tool], migrations: [] }) - break; + break } return await childAppDataSource.initialize() diff --git a/packages/server/src/DataSource.ts b/packages/server/src/DataSource.ts index b2ae5cd97..958074cce 100644 --- a/packages/server/src/DataSource.ts +++ b/packages/server/src/DataSource.ts @@ -9,18 +9,18 @@ import { getUserHome } from './utils' let appDataSource: DataSource export const init = async (): Promise => { - let homePath; + let homePath switch (process.env.DATABASE_TYPE) { case 'sqlite': homePath = process.env.DATABASE_PATH ?? path.join(getUserHome(), '.flowise') appDataSource = new DataSource({ type: 'sqlite', database: path.resolve(homePath, 'database.sqlite'), - synchronize: (process.env.OVERRIDE_DATABASE == 'true'), + synchronize: process.env.OVERRIDE_DATABASE == 'true', entities: [ChatFlow, ChatMessage, Tool], migrations: [] }) - break; + break case 'mysql': appDataSource = new DataSource({ type: 'mysql', @@ -30,11 +30,11 @@ export const init = async (): Promise => { password: process.env.DATABASE_PASSWORD, database: process.env.DATABASE_NAME, charset: 'utf8mb4', - synchronize: (process.env.OVERRIDE_DATABASE == 'true'), + synchronize: process.env.OVERRIDE_DATABASE == 'true', entities: [ChatFlow, ChatMessage, Tool], migrations: [] }) - break; + break case 'postgres': appDataSource = new DataSource({ type: 'postgres', @@ -43,21 +43,21 @@ export const init = async (): Promise => { username: process.env.DATABASE_USER, password: process.env.DATABASE_PASSWORD, database: process.env.DATABASE_NAME, - synchronize: (process.env.OVERRIDE_DATABASE == 'true'), + synchronize: process.env.OVERRIDE_DATABASE == 'true', entities: [ChatFlow, ChatMessage, Tool], migrations: [] }) - break; + break default: homePath = process.env.DATABASE_PATH ?? path.join(getUserHome(), '.flowise') appDataSource = new DataSource({ type: 'sqlite', database: path.resolve(homePath, 'database.sqlite'), - synchronize: (process.env.OVERRIDE_DATABASE == 'true'), + synchronize: process.env.OVERRIDE_DATABASE == 'true', entities: [ChatFlow, ChatMessage, Tool], migrations: [] }) - break; + break } } From 7f5acf32aaf585f2810bbf8a00d5a148e27f832e Mon Sep 17 00:00:00 2001 From: Atish Amte Date: Wed, 19 Jul 2023 00:07:42 +0530 Subject: [PATCH 30/57] Readme updated --- README.md | 21 ++++++++++++++------- 1 file changed, 14 insertions(+), 7 deletions(-) diff --git a/README.md b/README.md index b4b7fe76b..951c11988 100644 --- a/README.md +++ b/README.md @@ -131,18 +131,25 @@ FLOWISE_PASSWORD=1234 Flowise support different environment variables to configure your instance. You can specify the following variables in the `.env` file inside `packages/server` folder. Read [more](https://docs.flowiseai.com/environment-variables) | Variable | Description | Type | Default | -| -------------------------- | ---------------------------------------------------------------- | ------------------------------------------------ | ----------------------------------- | +| ---------------- | ---------------------------------------------------------------- | ------------------------------------------------ | ----------------------------------- | | PORT | The HTTP port Flowise runs on | Number | 3000 | -| FLOWISE_USERNAME | Username to login | String | -| FLOWISE_PASSWORD | Password to login | String | -| DEBUG | Print logs onto terminal/console | Boolean | -| LOG_PATH | Location where log files are stored | String | `your-path/Flowise/packages/server` | -| LOG_LEVEL | Different log levels for loggers to be saved | Enum String: `error`, `info`, `verbose`, `debug` | `info` | -| DATABASE_PATH | Location where database is saved | String | `your-home-dir/.flowise` | +| FLOWISE_USERNAME | Username to login | String | | +| FLOWISE_PASSWORD | Password to login | String | | +| DEBUG | Print logs from components | Boolean | | +| LOG_PATH | Location where log files are stored | String | `your-path/Flowise/logs` | +| LOG_LEVEL | Different levels of logs | Enum String: `error`, `info`, `verbose`, `debug` | `info` | | APIKEY_PATH | Location where api keys are saved | String | `your-path/Flowise/packages/server` | | EXECUTION_MODE | Whether predictions run in their own process or the main process | Enum String: `child`, `main` | `main` | | TOOL_FUNCTION_BUILTIN_DEP | NodeJS built-in modules to be used for Tool Function | String | | | TOOL_FUNCTION_EXTERNAL_DEP | External modules to be used for Tool Function | String | | +| OVERRIDE_DATABASE | Override current database with default | Enum String: `true`, `false` | `true` | +| DATABASE_TYPE | Type of database to store the flowise data | Enum String: `sqlite`, `mysql`, `postgres` | `sqlite` | +| DATABASE_PATH | Location where database is saved (When DATABASE_TYPE is sqlite) | String | `your-home-dir/.flowise` | +| DATABASE_HOST | Host URL or IP address (When DATABASE_TYPE is not sqlite) | String | | +| DATABASE_PORT | Database port (When DATABASE_TYPE is not sqlite) | String | | +| DATABASE_USERNAME | Database username (When DATABASE_TYPE is not sqlite) | String | | +| DATABASE_PASSWORD | Database password (When DATABASE_TYPE is not sqlite) | String | | +| DATABASE_NAME | Database name (When DATABASE_TYPE is not sqlite) | String | | You can also specify the env variables when using `npx`. For example: From 5d561bfd4e74d963577ade7b353e65ecd4fe76c0 Mon Sep 17 00:00:00 2001 From: Henry Date: Tue, 18 Jul 2023 20:55:03 +0100 Subject: [PATCH 31/57] add replicate --- .../nodes/llms/Replicate/Replicate.ts | 118 ++++++++ .../nodes/llms/Replicate/replicate.svg | 7 + packages/components/package.json | 3 +- .../marketplaces/chatflows/Replicate LLM.json | 273 ++++++++++++++++++ 4 files changed, 400 insertions(+), 1 deletion(-) create mode 100644 packages/components/nodes/llms/Replicate/Replicate.ts create mode 100644 packages/components/nodes/llms/Replicate/replicate.svg create mode 100644 packages/server/marketplaces/chatflows/Replicate LLM.json diff --git a/packages/components/nodes/llms/Replicate/Replicate.ts b/packages/components/nodes/llms/Replicate/Replicate.ts new file mode 100644 index 000000000..03e20fb70 --- /dev/null +++ b/packages/components/nodes/llms/Replicate/Replicate.ts @@ -0,0 +1,118 @@ +import { INode, INodeData, INodeParams } from '../../../src/Interface' +import { getBaseClasses } from '../../../src/utils' +import { Replicate, ReplicateInput } from 'langchain/llms/replicate' + +class Replicate_LLMs implements INode { + label: string + name: string + type: string + icon: string + category: string + description: string + baseClasses: string[] + inputs: INodeParams[] + + constructor() { + this.label = 'Replicate' + this.name = 'replicate' + this.type = 'Replicate' + this.icon = 'replicate.svg' + this.category = 'LLMs' + this.description = 'Use Replicate to run open source models on cloud' + this.baseClasses = [this.type, 'BaseChatModel', ...getBaseClasses(Replicate)] + this.inputs = [ + { + label: 'Replicate Api Key', + name: 'replicateApiKey', + type: 'password' + }, + { + label: 'Model', + name: 'model', + type: 'string', + placeholder: 'a16z-infra/llama13b-v2-chat:df7690f1994d94e96ad9d568eac121aecf50684a0b0963b25a41cc40061269e5', + optional: true + }, + { + label: 'Temperature', + name: 'temperature', + type: 'number', + description: + 'Adjusts randomness of outputs, greater than 1 is random and 0 is deterministic, 0.75 is a good starting value.', + default: 0.7, + optional: true + }, + { + label: 'Max Tokens', + name: 'maxTokens', + type: 'number', + description: 'Maximum number of tokens to generate. A word is generally 2-3 tokens', + optional: true, + additionalParams: true + }, + { + label: 'Top Probability', + name: 'topP', + type: 'number', + description: + 'When decoding text, samples from the top p percentage of most likely tokens; lower to ignore less likely tokens', + optional: true, + additionalParams: true + }, + { + label: 'Repetition Penalty', + name: 'repetitionPenalty', + type: 'number', + description: + 'Penalty for repeated words in generated text; 1 is no penalty, values greater than 1 discourage repetition, less than 1 encourage it. (minimum: 0.01; maximum: 5)', + optional: true, + additionalParams: true + }, + { + label: 'Additional Inputs', + name: 'additionalInputs', + type: 'json', + description: + 'Each model has different parameters, refer to the specific model accepted inputs. For example: llama13b-v2', + additionalParams: true, + optional: true + } + ] + } + + async init(nodeData: INodeData): Promise { + const modelName = nodeData.inputs?.model as string + const apiKey = nodeData.inputs?.replicateApiKey as string + const temperature = nodeData.inputs?.temperature as string + const maxTokens = nodeData.inputs?.maxTokens as string + const topP = nodeData.inputs?.topP as string + const repetitionPenalty = nodeData.inputs?.repetitionPenalty as string + const additionalInputs = nodeData.inputs?.additionalInputs as string + + const version = modelName.split(':').pop() + const name = modelName.split(':')[0].split('/').pop() + const org = modelName.split(':')[0].split('/')[0] + + const obj: ReplicateInput = { + model: `${org}/${name}:${version}`, + apiKey + } + + let inputs: any = {} + if (maxTokens) inputs.max_length = parseInt(maxTokens, 10) + if (temperature) inputs.temperature = parseFloat(temperature) + if (topP) inputs.top_p = parseFloat(topP) + if (repetitionPenalty) inputs.repetition_penalty = parseFloat(repetitionPenalty) + if (additionalInputs) { + const parsedInputs = + typeof additionalInputs === 'object' ? additionalInputs : additionalInputs ? JSON.parse(additionalInputs) : {} + inputs = { ...inputs, ...parsedInputs } + } + if (Object.keys(inputs).length) obj.input = inputs + + const model = new Replicate(obj) + return model + } +} + +module.exports = { nodeClass: Replicate_LLMs } diff --git a/packages/components/nodes/llms/Replicate/replicate.svg b/packages/components/nodes/llms/Replicate/replicate.svg new file mode 100644 index 000000000..2e46453f8 --- /dev/null +++ b/packages/components/nodes/llms/Replicate/replicate.svg @@ -0,0 +1,7 @@ + \ No newline at end of file diff --git a/packages/components/package.json b/packages/components/package.json index 8cc022359..77f376f81 100644 --- a/packages/components/package.json +++ b/packages/components/package.json @@ -37,7 +37,7 @@ "form-data": "^4.0.0", "graphql": "^16.6.0", "html-to-text": "^9.0.5", - "langchain": "^0.0.104", + "langchain": "^0.0.112", "linkifyjs": "^4.1.1", "mammoth": "^1.5.1", "moment": "^2.29.3", @@ -48,6 +48,7 @@ "playwright": "^1.35.0", "puppeteer": "^20.7.1", "redis": "^4.6.7", + "replicate": "^0.12.3", "srt-parser-2": "^1.2.3", "vm2": "^3.9.19", "weaviate-ts-client": "^1.1.0", diff --git a/packages/server/marketplaces/chatflows/Replicate LLM.json b/packages/server/marketplaces/chatflows/Replicate LLM.json new file mode 100644 index 000000000..663776634 --- /dev/null +++ b/packages/server/marketplaces/chatflows/Replicate LLM.json @@ -0,0 +1,273 @@ +{ + "description": "Use Replicate API that runs Llama 13b v2 model with LLMChain", + "nodes": [ + { + "width": 300, + "height": 405, + "id": "llmChain_1", + "position": { + "x": 967.581544453458, + "y": 320.56761595884564 + }, + "type": "customNode", + "data": { + "id": "llmChain_1", + "label": "LLM Chain", + "name": "llmChain", + "type": "LLMChain", + "baseClasses": ["LLMChain", "BaseChain", "BaseLangChain"], + "category": "Chains", + "description": "Chain to run queries against LLMs", + "inputParams": [ + { + "label": "Chain Name", + "name": "chainName", + "type": "string", + "placeholder": "Name Your Chain", + "optional": true, + "id": "llmChain_1-input-chainName-string" + } + ], + "inputAnchors": [ + { + "label": "Language Model", + "name": "model", + "type": "BaseLanguageModel", + "id": "llmChain_1-input-model-BaseLanguageModel" + }, + { + "label": "Prompt", + "name": "prompt", + "type": "BasePromptTemplate", + "id": "llmChain_1-input-prompt-BasePromptTemplate" + } + ], + "inputs": { + "model": "{{replicate_0.data.instance}}", + "prompt": "{{promptTemplate_0.data.instance}}", + "chainName": "" + }, + "outputAnchors": [ + { + "name": "output", + "label": "Output", + "type": "options", + "options": [ + { + "id": "llmChain_1-output-llmChain-LLMChain|BaseChain|BaseLangChain", + "name": "llmChain", + "label": "LLM Chain", + "type": "LLMChain | BaseChain | BaseLangChain" + }, + { + "id": "llmChain_1-output-outputPrediction-string|json", + "name": "outputPrediction", + "label": "Output Prediction", + "type": "string | json" + } + ], + "default": "llmChain" + } + ], + "outputs": { + "output": "llmChain" + }, + "selected": false + }, + "positionAbsolute": { + "x": 967.581544453458, + "y": 320.56761595884564 + }, + "selected": false, + "dragging": false + }, + { + "width": 300, + "height": 475, + "id": "promptTemplate_0", + "position": { + "x": 269.2203229225663, + "y": 129.02909641085535 + }, + "type": "customNode", + "data": { + "id": "promptTemplate_0", + "label": "Prompt Template", + "name": "promptTemplate", + "type": "PromptTemplate", + "baseClasses": ["PromptTemplate", "BaseStringPromptTemplate", "BasePromptTemplate"], + "category": "Prompts", + "description": "Schema to represent a basic prompt for an LLM", + "inputParams": [ + { + "label": "Template", + "name": "template", + "type": "string", + "rows": 4, + "placeholder": "What is a good name for a company that makes {product}?", + "id": "promptTemplate_0-input-template-string" + }, + { + "label": "Format Prompt Values", + "name": "promptValues", + "type": "json", + "optional": true, + "acceptVariable": true, + "list": true, + "id": "promptTemplate_0-input-promptValues-json" + } + ], + "inputAnchors": [], + "inputs": { + "template": "Assistant: You are a helpful assistant. You do not respond as 'User' or pretend to be 'User'. You only respond once as Assistant.\nUser: {query}\nAssistant:", + "promptValues": "{\"query\":\"{{question}}\"}" + }, + "outputAnchors": [ + { + "id": "promptTemplate_0-output-promptTemplate-PromptTemplate|BaseStringPromptTemplate|BasePromptTemplate", + "name": "promptTemplate", + "label": "PromptTemplate", + "type": "PromptTemplate | BaseStringPromptTemplate | BasePromptTemplate" + } + ], + "outputs": {}, + "selected": false + }, + "selected": false, + "positionAbsolute": { + "x": 269.2203229225663, + "y": 129.02909641085535 + }, + "dragging": false + }, + { + "width": 300, + "height": 527, + "id": "replicate_0", + "position": { + "x": 607.4915400488668, + "y": -60.643337207007804 + }, + "type": "customNode", + "data": { + "id": "replicate_0", + "label": "Replicate", + "name": "replicate", + "type": "Replicate", + "baseClasses": ["Replicate", "LLM", "BaseLLM", "BaseLanguageModel"], + "category": "LLMs", + "description": "Use Replicate to run open source models on cloud", + "inputParams": [ + { + "label": "Replicate Api Key", + "name": "replicateApiKey", + "type": "password", + "id": "replicate_0-input-replicateApiKey-password" + }, + { + "label": "Model", + "name": "model", + "type": "string", + "placeholder": "a16z-infra/llama13b-v2-chat:df7690f1994d94e96ad9d568eac121aecf50684a0b0963b25a41cc40061269e5", + "optional": true, + "id": "replicate_0-input-model-string" + }, + { + "label": "Temperature", + "name": "temperature", + "type": "number", + "description": "Adjusts randomness of outputs, greater than 1 is random and 0 is deterministic, 0.75 is a good starting value.", + "default": 0.7, + "optional": true, + "id": "replicate_0-input-temperature-number" + }, + { + "label": "Max Tokens", + "name": "maxTokens", + "type": "number", + "description": "Maximum number of tokens to generate. A word is generally 2-3 tokens", + "optional": true, + "additionalParams": true, + "id": "replicate_0-input-maxTokens-number" + }, + { + "label": "Top Probability", + "name": "topP", + "type": "number", + "description": "When decoding text, samples from the top p percentage of most likely tokens; lower to ignore less likely tokens", + "optional": true, + "additionalParams": true, + "id": "replicate_0-input-topP-number" + }, + { + "label": "Repetition Penalty", + "name": "repetitionPenalty", + "type": "number", + "description": "Penalty for repeated words in generated text; 1 is no penalty, values greater than 1 discourage repetition, less than 1 encourage it. (minimum: 0.01; maximum: 5)", + "optional": true, + "additionalParams": true, + "id": "replicate_0-input-repetitionPenalty-number" + }, + { + "label": "Additional Inputs", + "name": "additionalInputs", + "type": "json", + "description": "Each model has different parameters, refer to the specific model accepted inputs. For example: llama13b-v2", + "additionalParams": true, + "optional": true, + "id": "replicate_0-input-additionalInputs-json" + } + ], + "inputAnchors": [], + "inputs": { + "model": "a16z-infra/llama13b-v2-chat:df7690f1994d94e96ad9d568eac121aecf50684a0b0963b25a41cc40061269e5", + "temperature": 0.7, + "maxTokens": "", + "topP": "", + "repetitionPenalty": "", + "additionalInputs": "" + }, + "outputAnchors": [ + { + "id": "replicate_0-output-replicate-Replicate|LLM|BaseLLM|BaseLanguageModel", + "name": "replicate", + "label": "Replicate", + "type": "Replicate | LLM | BaseLLM | BaseLanguageModel" + } + ], + "outputs": {}, + "selected": false + }, + "selected": false, + "positionAbsolute": { + "x": 607.4915400488668, + "y": -60.643337207007804 + }, + "dragging": false + } + ], + "edges": [ + { + "source": "promptTemplate_0", + "sourceHandle": "promptTemplate_0-output-promptTemplate-PromptTemplate|BaseStringPromptTemplate|BasePromptTemplate", + "target": "llmChain_1", + "targetHandle": "llmChain_1-input-prompt-BasePromptTemplate", + "type": "buttonedge", + "id": "promptTemplate_0-promptTemplate_0-output-promptTemplate-PromptTemplate|BaseStringPromptTemplate|BasePromptTemplate-llmChain_1-llmChain_1-input-prompt-BasePromptTemplate", + "data": { + "label": "" + } + }, + { + "source": "replicate_0", + "sourceHandle": "replicate_0-output-replicate-Replicate|LLM|BaseLLM|BaseLanguageModel", + "target": "llmChain_1", + "targetHandle": "llmChain_1-input-model-BaseLanguageModel", + "type": "buttonedge", + "id": "replicate_0-replicate_0-output-replicate-Replicate|LLM|BaseLLM|BaseLanguageModel-llmChain_1-llmChain_1-input-model-BaseLanguageModel", + "data": { + "label": "" + } + } + ] +} From 4cf2a089a6be44beda3dea8d9385a9cb37916873 Mon Sep 17 00:00:00 2001 From: Henry Date: Tue, 18 Jul 2023 21:55:09 +0100 Subject: [PATCH 32/57] =?UTF-8?q?=F0=9F=A5=B3=20flowise-components@1.2.17?= =?UTF-8?q?=20release?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- packages/components/package.json | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/packages/components/package.json b/packages/components/package.json index 77f376f81..37d630c33 100644 --- a/packages/components/package.json +++ b/packages/components/package.json @@ -1,6 +1,6 @@ { "name": "flowise-components", - "version": "1.2.16", + "version": "1.2.17", "description": "Flowiseai Components", "main": "dist/src/index", "types": "dist/src/index.d.ts", From 50e1a5a4ac934856eb59e4d8e1e57d2dc0e725db Mon Sep 17 00:00:00 2001 From: Henry Date: Tue, 18 Jul 2023 21:56:01 +0100 Subject: [PATCH 33/57] =?UTF-8?q?=F0=9F=A5=B3=20flowise-ui@1.2.15=20releas?= =?UTF-8?q?e?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- packages/ui/package.json | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/packages/ui/package.json b/packages/ui/package.json index 0df27569e..bdb498464 100644 --- a/packages/ui/package.json +++ b/packages/ui/package.json @@ -1,6 +1,6 @@ { "name": "flowise-ui", - "version": "1.2.14", + "version": "1.2.15", "license": "SEE LICENSE IN LICENSE.md", "homepage": "https://flowiseai.com", "author": { From 30d278731e86e83d814611123e01482e2608e077 Mon Sep 17 00:00:00 2001 From: Henry Date: Wed, 19 Jul 2023 00:10:16 +0100 Subject: [PATCH 34/57] =?UTF-8?q?=F0=9F=A5=B3=20flowise@1.2.16=20release?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- package.json | 2 +- packages/server/package.json | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/package.json b/package.json index 9d0d9d1a8..59f213b53 100644 --- a/package.json +++ b/package.json @@ -1,6 +1,6 @@ { "name": "flowise", - "version": "1.2.15", + "version": "1.2.16", "private": true, "homepage": "https://flowiseai.com", "workspaces": [ diff --git a/packages/server/package.json b/packages/server/package.json index daed16d86..10b7fb3b8 100644 --- a/packages/server/package.json +++ b/packages/server/package.json @@ -1,6 +1,6 @@ { "name": "flowise", - "version": "1.2.15", + "version": "1.2.16", "description": "Flowiseai Server", "main": "dist/index", "types": "dist/index.d.ts", From 59a9651d73fa0e3f64ecbd06580aa6d26cbe3088 Mon Sep 17 00:00:00 2001 From: Henry Date: Wed, 19 Jul 2023 02:23:56 +0100 Subject: [PATCH 35/57] update README --- README.md | 19 ++++++++++++++++--- images/flowise.png | Bin 0 -> 536083 bytes 2 files changed, 16 insertions(+), 3 deletions(-) create mode 100644 images/flowise.png diff --git a/README.md b/README.md index b4b7fe76b..88ad0475c 100644 --- a/README.md +++ b/README.md @@ -1,12 +1,19 @@ -# Flowise + +# Flowise - Build LLM Apps Easily + +[![Release Notes](https://img.shields.io/github/release/FlowiseAI/Flowise)](https://github.com/FlowiseAI/Flowise/releases) +[![Discord](https://img.shields.io/discord/1087698854775881778?label=Discord&logo=discord)](https://discord.gg/jbaHfsRVBW) +[![Twitter Follow](https://img.shields.io/twitter/follow/FlowiseAI?style=social)](https://twitter.com/FlowiseAI) +[![GitHub star chart](https://img.shields.io/github/stars/FlowiseAI/Flowise?style=social)](https://star-history.com/#FlowiseAI/Flowise) +[![GitHub fork](https://img.shields.io/github/forks/FlowiseAI/Flowise?style=social)](https://github.com/FlowiseAI/Flowise/fork) + +

Drag & drop UI to build your customized LLM flow

-Drag & drop UI to build your customized LLM flow - ## ⚡Quick Start Download and Install [NodeJS](https://nodejs.org/en/download) >= 18.15.0 @@ -182,6 +189,12 @@ Feel free to ask any questions, raise problems, and request new features in [dis ## 🙌 Contributing +Thanks go to these awesome contributors + + + + + See [contributing guide](CONTRIBUTING.md). Reach out to us at [Discord](https://discord.gg/jbaHfsRVBW) if you have any questions or issues. [![Star History Chart](https://api.star-history.com/svg?repos=FlowiseAI/Flowise&type=Timeline)](https://star-history.com/#FlowiseAI/Flowise&Date) diff --git a/images/flowise.png b/images/flowise.png new file mode 100644 index 0000000000000000000000000000000000000000..09c71fde2b46e034cb8ac63af3e8ee36e46ac2d6 GIT binary patch literal 536083 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 Nj^58b8sDy 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 Date: Tue, 18 Jul 2023 21:36:23 -0700 Subject: [PATCH 36/57] moved package to packages/components/package.json --- package.json | 3 --- packages/components/package.json | 3 ++- 2 files changed, 2 insertions(+), 4 deletions(-) diff --git a/package.json b/package.json index 8f9004baa..d22d5a7cd 100644 --- a/package.json +++ b/package.json @@ -52,8 +52,5 @@ }, "engines": { "node": ">=18.15.0" - }, - "dependencies": { - "mysql2": "^3.5.1" } } diff --git a/packages/components/package.json b/packages/components/package.json index 32a846109..060519cfd 100644 --- a/packages/components/package.json +++ b/packages/components/package.json @@ -50,7 +50,8 @@ "srt-parser-2": "^1.2.3", "vm2": "^3.9.19", "weaviate-ts-client": "^1.1.0", - "ws": "^8.9.0" + "ws": "^8.9.0", + "mysql2": "^3.5.1" }, "devDependencies": { "@types/gulp": "4.0.9", From 3f7b586170b74b37dda1d0bcb0508c2a146dbac0 Mon Sep 17 00:00:00 2001 From: Henry Date: Wed, 19 Jul 2023 18:30:45 +0100 Subject: [PATCH 37/57] add system message fix --- .../ConversationalRetrievalQAChain.ts | 49 +++++++++---------- .../ConversationalRetrievalQAChain/prompts.ts | 35 +++++++++++++ 2 files changed, 58 insertions(+), 26 deletions(-) create mode 100644 packages/components/nodes/chains/ConversationalRetrievalQAChain/prompts.ts diff --git a/packages/components/nodes/chains/ConversationalRetrievalQAChain/ConversationalRetrievalQAChain.ts b/packages/components/nodes/chains/ConversationalRetrievalQAChain/ConversationalRetrievalQAChain.ts index eeebe1ec3..8ec663f9a 100644 --- a/packages/components/nodes/chains/ConversationalRetrievalQAChain/ConversationalRetrievalQAChain.ts +++ b/packages/components/nodes/chains/ConversationalRetrievalQAChain/ConversationalRetrievalQAChain.ts @@ -6,27 +6,13 @@ import { AIMessage, BaseRetriever, HumanMessage } from 'langchain/schema' import { BaseChatMemory, BufferMemory, ChatMessageHistory } from 'langchain/memory' import { PromptTemplate } from 'langchain/prompts' import { ConsoleCallbackHandler, CustomChainHandler } from '../../../src/handler' - -const default_qa_template = `Use the following pieces of context to answer the question at the end. If you don't know the answer, just say that you don't know, don't try to make up an answer. - -{context} - -Question: {question} -Helpful Answer:` - -const qa_template = `Use the following pieces of context to answer the question at the end. - -{context} - -Question: {question} -Helpful Answer:` - -const CUSTOM_QUESTION_GENERATOR_CHAIN_PROMPT = `Given the following conversation and a follow up question, rephrase the follow up question to be a standalone question, in its original language. include it in the standalone question. - -Chat History: -{chat_history} -Follow Up Input: {question} -Standalone question:` +import { + default_map_reduce_template, + default_qa_template, + qa_template, + map_reduce_template, + CUSTOM_QUESTION_GENERATOR_CHAIN_PROMPT +} from './prompts' class ConversationalRetrievalQAChain_Chains implements INode { label: string @@ -118,16 +104,27 @@ class ConversationalRetrievalQAChain_Chains implements INode { const obj: any = { verbose: process.env.DEBUG === 'true' ? true : false, - qaChainOptions: { - type: 'stuff', - prompt: PromptTemplate.fromTemplate(systemMessagePrompt ? `${systemMessagePrompt}\n${qa_template}` : default_qa_template) - }, questionGeneratorChainOptions: { template: CUSTOM_QUESTION_GENERATOR_CHAIN_PROMPT } } if (returnSourceDocuments) obj.returnSourceDocuments = returnSourceDocuments - if (chainOption) obj.qaChainOptions = { ...obj.qaChainOptions, type: chainOption } + if (chainOption === 'map_reduce') { + obj.qaChainOptions = { + type: 'map_reduce', + combinePrompt: PromptTemplate.fromTemplate( + systemMessagePrompt ? `${systemMessagePrompt}\n${map_reduce_template}` : default_map_reduce_template + ) + } + } else if (chainOption === 'refine') { + // TODO: Add custom system message + } else { + obj.qaChainOptions = { + type: 'stuff', + prompt: PromptTemplate.fromTemplate(systemMessagePrompt ? `${systemMessagePrompt}\n${qa_template}` : default_qa_template) + } + } + if (memory) { memory.inputKey = 'question' memory.outputKey = 'text' diff --git a/packages/components/nodes/chains/ConversationalRetrievalQAChain/prompts.ts b/packages/components/nodes/chains/ConversationalRetrievalQAChain/prompts.ts new file mode 100644 index 000000000..66b80f470 --- /dev/null +++ b/packages/components/nodes/chains/ConversationalRetrievalQAChain/prompts.ts @@ -0,0 +1,35 @@ +export const default_qa_template = `Use the following pieces of context to answer the question at the end. If you don't know the answer, just say that you don't know, don't try to make up an answer. + +{context} + +Question: {question} +Helpful Answer:` + +export const qa_template = `Use the following pieces of context to answer the question at the end. + +{context} + +Question: {question} +Helpful Answer:` + +export const default_map_reduce_template = `Given the following extracted parts of a long document and a question, create a final answer. +If you don't know the answer, just say that you don't know. Don't try to make up an answer. + +{summaries} + +Question: {question} +Helpful Answer:` + +export const map_reduce_template = `Given the following extracted parts of a long document and a question, create a final answer. + +{summaries} + +Question: {question} +Helpful Answer:` + +export const CUSTOM_QUESTION_GENERATOR_CHAIN_PROMPT = `Given the following conversation and a follow up question, rephrase the follow up question to be a standalone question, in its original language. include it in the standalone question. + +Chat History: +{chat_history} +Follow Up Input: {question} +Standalone question:` From 3530d29d9095aed97547e32f18385155db2c6a3b Mon Sep 17 00:00:00 2001 From: Henry Date: Wed, 19 Jul 2023 19:25:13 +0100 Subject: [PATCH 38/57] update CONTRIBUTING README --- CONTRIBUTING.md | 33 ++++++++++++++++++++++++++- README.md | 29 +---------------------- docker/.env.example | 11 ++++++++- docker/README.md | 16 +------------ packages/server/.env.example | 22 ++++++++---------- packages/server/src/ChildProcess.ts | 9 ++++---- packages/server/src/DataSource.ts | 9 ++++---- packages/server/src/commands/start.ts | 22 +++++++++++++++--- 8 files changed, 82 insertions(+), 69 deletions(-) diff --git a/CONTRIBUTING.md b/CONTRIBUTING.md index 03211d510..43866c9ab 100644 --- a/CONTRIBUTING.md +++ b/CONTRIBUTING.md @@ -114,9 +114,40 @@ Flowise has 3 different modules in a single mono repository. 11. Commit code and submit Pull Request from forked branch pointing to [Flowise master](https://github.com/FlowiseAI/Flowise/tree/master). +## 🌱 Env Variables + +Flowise support different environment variables to configure your instance. You can specify the following variables in the `.env` file inside `packages/server` folder. Read [more](https://docs.flowiseai.com/environment-variables) + +| Variable | Description | Type | Default | +| -------------------------- | ---------------------------------------------------------------- | ------------------------------------------------ | ----------------------------------- | +| PORT | The HTTP port Flowise runs on | Number | 3000 | +| FLOWISE_USERNAME | Username to login | String | | +| FLOWISE_PASSWORD | Password to login | String | | +| DEBUG | Print logs from components | Boolean | | +| LOG_PATH | Location where log files are stored | String | `your-path/Flowise/logs` | +| LOG_LEVEL | Different levels of logs | Enum String: `error`, `info`, `verbose`, `debug` | `info` | +| APIKEY_PATH | Location where api keys are saved | String | `your-path/Flowise/packages/server` | +| EXECUTION_MODE | Whether predictions run in their own process or the main process | Enum String: `child`, `main` | `main` | +| TOOL_FUNCTION_BUILTIN_DEP | NodeJS built-in modules to be used for Tool Function | String | | +| TOOL_FUNCTION_EXTERNAL_DEP | External modules to be used for Tool Function | String | | +| OVERRIDE_DATABASE | Override current database with default | Enum String: `true`, `false` | `true` | +| DATABASE_TYPE | Type of database to store the flowise data | Enum String: `sqlite`, `mysql`, `postgres` | `sqlite` | +| DATABASE_PATH | Location where database is saved (When DATABASE_TYPE is sqlite) | String | `your-home-dir/.flowise` | +| DATABASE_HOST | Host URL or IP address (When DATABASE_TYPE is not sqlite) | String | | +| DATABASE_PORT | Database port (When DATABASE_TYPE is not sqlite) | String | | +| DATABASE_USERNAME | Database username (When DATABASE_TYPE is not sqlite) | String | | +| DATABASE_PASSWORD | Database password (When DATABASE_TYPE is not sqlite) | String | | +| DATABASE_NAME | Database name (When DATABASE_TYPE is not sqlite) | String | | + +You can also specify the env variables when using `npx`. For example: + +``` +npx flowise start --PORT=3000 --DEBUG=true +``` + ## 📖 Contribute to Docs -In-Progress +[Flowise Docs](https://github.com/FlowiseAI/FlowiseDocs) ## 🏷️ Pull Request process diff --git a/README.md b/README.md index 281d75657..13da94206 100644 --- a/README.md +++ b/README.md @@ -135,34 +135,7 @@ FLOWISE_PASSWORD=1234 ## 🌱 Env Variables -Flowise support different environment variables to configure your instance. You can specify the following variables in the `.env` file inside `packages/server` folder. Read [more](https://docs.flowiseai.com/environment-variables) - -| Variable | Description | Type | Default | -| ---------------- | ---------------------------------------------------------------- | ------------------------------------------------ | ----------------------------------- | -| PORT | The HTTP port Flowise runs on | Number | 3000 | -| FLOWISE_USERNAME | Username to login | String | | -| FLOWISE_PASSWORD | Password to login | String | | -| DEBUG | Print logs from components | Boolean | | -| LOG_PATH | Location where log files are stored | String | `your-path/Flowise/logs` | -| LOG_LEVEL | Different levels of logs | Enum String: `error`, `info`, `verbose`, `debug` | `info` | -| APIKEY_PATH | Location where api keys are saved | String | `your-path/Flowise/packages/server` | -| EXECUTION_MODE | Whether predictions run in their own process or the main process | Enum String: `child`, `main` | `main` | -| TOOL_FUNCTION_BUILTIN_DEP | NodeJS built-in modules to be used for Tool Function | String | | -| TOOL_FUNCTION_EXTERNAL_DEP | External modules to be used for Tool Function | String | | -| OVERRIDE_DATABASE | Override current database with default | Enum String: `true`, `false` | `true` | -| DATABASE_TYPE | Type of database to store the flowise data | Enum String: `sqlite`, `mysql`, `postgres` | `sqlite` | -| DATABASE_PATH | Location where database is saved (When DATABASE_TYPE is sqlite) | String | `your-home-dir/.flowise` | -| DATABASE_HOST | Host URL or IP address (When DATABASE_TYPE is not sqlite) | String | | -| DATABASE_PORT | Database port (When DATABASE_TYPE is not sqlite) | String | | -| DATABASE_USERNAME | Database username (When DATABASE_TYPE is not sqlite) | String | | -| DATABASE_PASSWORD | Database password (When DATABASE_TYPE is not sqlite) | String | | -| DATABASE_NAME | Database name (When DATABASE_TYPE is not sqlite) | String | | - -You can also specify the env variables when using `npx`. For example: - -``` -npx flowise start --PORT=3000 --DEBUG=true -``` +Flowise support different environment variables to configure your instance. You can specify the following variables in the `.env` file inside `packages/server` folder. Read [more](https://github.com/FlowiseAI/Flowise/blob/main/CONTRIBUTING.md#-env-variables) ## 📖 Documentation diff --git a/docker/.env.example b/docker/.env.example index 42dc696d8..e7d352729 100644 --- a/docker/.env.example +++ b/docker/.env.example @@ -1,5 +1,14 @@ PORT=3000 +OVERRIDE_DATABASE=true +DATABASE_TYPE=sqlite DATABASE_PATH=/root/.flowise +# When database is not sqlite +# DATABASE_PORT="" +# DATABASE_HOST="" +# DATABASE_NAME="flowise" +# DATABASE_USER="" +# DATABASE_PASSWORD="" + APIKEY_PATH=/root/.flowise LOG_PATH=/root/.flowise/logs # FLOWISE_USERNAME=user @@ -8,4 +17,4 @@ LOG_PATH=/root/.flowise/logs # LOG_LEVEL=debug (error | warn | info | verbose | debug) # EXECUTION_MODE=child or main # TOOL_FUNCTION_BUILTIN_DEP=crypto,fs -# TOOL_FUNCTION_EXTERNAL_DEP=moment,lodash \ No newline at end of file +# TOOL_FUNCTION_EXTERNAL_DEP=moment,lodash diff --git a/docker/README.md b/docker/README.md index d0ce5a7af..0060fa384 100644 --- a/docker/README.md +++ b/docker/README.md @@ -9,7 +9,7 @@ Starts Flowise from [DockerHub Image](https://hub.docker.com/repository/docker/f 3. Open [http://localhost:3000](http://localhost:3000) 4. You can bring the containers down by `docker-compose stop` -## 🔒 Authrorization +## 🔒 Authentication 1. Create `.env` file and specify the `PORT`, `FLOWISE_USERNAME`, and `FLOWISE_PASSWORD` (refer to `.env.example`) 2. Pass `FLOWISE_USERNAME` and `FLOWISE_PASSWORD` to the `docker-compose.yml` file: @@ -32,17 +32,3 @@ If you like to persist your data (flows, logs, apikeys), set these variables in - LOG_PATH=/root/.flowise/logs Flowise also support different environment variables to configure your instance. Read [more](https://docs.flowiseai.com/environment-variables) - -| Variable | Description | Type | Default | -| -------------------------- | ---------------------------------------------------------------- | ------------------------------------------------ | ----------------------------------- | -| PORT | The HTTP port Flowise runs on | Number | 3000 | -| FLOWISE_USERNAME | Username to login | String | -| FLOWISE_PASSWORD | Password to login | String | -| DEBUG | Print logs onto terminal/console | Boolean | -| LOG_PATH | Location where log files are stored | String | `your-path/Flowise/packages/server` | -| LOG_LEVEL | Different log levels for loggers to be saved | Enum String: `error`, `info`, `verbose`, `debug` | `info` | -| DATABASE_PATH | Location where database is saved | String | `your-home-dir/.flowise` | -| APIKEY_PATH | Location where api keys are saved | String | `your-path/Flowise/packages/server` | -| EXECUTION_MODE | Whether predictions run in their own process or the main process | Enum String: `child`, `main` | `main` | -| TOOL_FUNCTION_BUILTIN_DEP | NodeJS built-in modules to be used for Tool Function | String | | -| TOOL_FUNCTION_EXTERNAL_DEP | External modules to be used for Tool Function | String | | diff --git a/packages/server/.env.example b/packages/server/.env.example index 923c62a0e..1b33382b8 100644 --- a/packages/server/.env.example +++ b/packages/server/.env.example @@ -1,18 +1,7 @@ PORT=3000 -# FLOWISE_USERNAME=user -# FLOWISE_PASSWORD=1234 -# DEBUG=true -# APIKEY_PATH=/your_api_key_path/.flowise -# LOG_PATH=/your_log_path/.flowise/logs -# LOG_LEVEL=debug (error | warn | info | verbose | debug) -# EXECUTION_MODE=main (child | main) - -OVERRIDE_DATABASE="true" -DATABASE_TYPE="sqlite" # sqlite, mysql, postgres - -# When database is sqlite +OVERRIDE_DATABASE=true +DATABASE_TYPE=sqlite # DATABASE_PATH=/your_database_path/.flowise - # When database is not sqlite # DATABASE_PORT="" # DATABASE_HOST="" @@ -20,5 +9,12 @@ DATABASE_TYPE="sqlite" # sqlite, mysql, postgres # DATABASE_USER="" # DATABASE_PASSWORD="" +# FLOWISE_USERNAME=user +# FLOWISE_PASSWORD=1234 +# DEBUG=true +# APIKEY_PATH=/your_api_key_path/.flowise +# LOG_PATH=/your_log_path/.flowise/logs +# LOG_LEVEL=debug (error | warn | info | verbose | debug) +# EXECUTION_MODE=main (child | main) # TOOL_FUNCTION_BUILTIN_DEP=crypto,fs # TOOL_FUNCTION_EXTERNAL_DEP=moment,lodash diff --git a/packages/server/src/ChildProcess.ts b/packages/server/src/ChildProcess.ts index a93906c0e..f0117b6dc 100644 --- a/packages/server/src/ChildProcess.ts +++ b/packages/server/src/ChildProcess.ts @@ -144,13 +144,14 @@ export class ChildProcess { async function initDB() { let childAppDataSource let homePath + const synchronize = process.env.OVERRIDE_DATABASE === 'false' ? false : true switch (process.env.DATABASE_TYPE) { case 'sqlite': homePath = process.env.DATABASE_PATH ?? path.join(getUserHome(), '.flowise') childAppDataSource = new DataSource({ type: 'sqlite', database: path.resolve(homePath, 'database.sqlite'), - synchronize: process.env.OVERRIDE_DATABASE == 'true', + synchronize, entities: [ChatFlow, ChatMessage, Tool], migrations: [] }) @@ -164,7 +165,7 @@ async function initDB() { password: process.env.DATABASE_PASSWORD, database: process.env.DATABASE_NAME, charset: 'utf8mb4', - synchronize: process.env.OVERRIDE_DATABASE == 'true', + synchronize, entities: [ChatFlow, ChatMessage, Tool], migrations: [] }) @@ -177,7 +178,7 @@ async function initDB() { username: process.env.DATABASE_USER, password: process.env.DATABASE_PASSWORD, database: process.env.DATABASE_NAME, - synchronize: process.env.OVERRIDE_DATABASE == 'true', + synchronize, entities: [ChatFlow, ChatMessage, Tool], migrations: [] }) @@ -187,7 +188,7 @@ async function initDB() { childAppDataSource = new DataSource({ type: 'sqlite', database: path.resolve(homePath, 'database.sqlite'), - synchronize: process.env.OVERRIDE_DATABASE == 'true', + synchronize, entities: [ChatFlow, ChatMessage, Tool], migrations: [] }) diff --git a/packages/server/src/DataSource.ts b/packages/server/src/DataSource.ts index 958074cce..14e22669d 100644 --- a/packages/server/src/DataSource.ts +++ b/packages/server/src/DataSource.ts @@ -10,13 +10,14 @@ let appDataSource: DataSource export const init = async (): Promise => { let homePath + const synchronize = process.env.OVERRIDE_DATABASE === 'false' ? false : true switch (process.env.DATABASE_TYPE) { case 'sqlite': homePath = process.env.DATABASE_PATH ?? path.join(getUserHome(), '.flowise') appDataSource = new DataSource({ type: 'sqlite', database: path.resolve(homePath, 'database.sqlite'), - synchronize: process.env.OVERRIDE_DATABASE == 'true', + synchronize, entities: [ChatFlow, ChatMessage, Tool], migrations: [] }) @@ -30,7 +31,7 @@ export const init = async (): Promise => { password: process.env.DATABASE_PASSWORD, database: process.env.DATABASE_NAME, charset: 'utf8mb4', - synchronize: process.env.OVERRIDE_DATABASE == 'true', + synchronize, entities: [ChatFlow, ChatMessage, Tool], migrations: [] }) @@ -43,7 +44,7 @@ export const init = async (): Promise => { username: process.env.DATABASE_USER, password: process.env.DATABASE_PASSWORD, database: process.env.DATABASE_NAME, - synchronize: process.env.OVERRIDE_DATABASE == 'true', + synchronize, entities: [ChatFlow, ChatMessage, Tool], migrations: [] }) @@ -53,7 +54,7 @@ export const init = async (): Promise => { appDataSource = new DataSource({ type: 'sqlite', database: path.resolve(homePath, 'database.sqlite'), - synchronize: process.env.OVERRIDE_DATABASE == 'true', + synchronize, entities: [ChatFlow, ChatMessage, Tool], migrations: [] }) diff --git a/packages/server/src/commands/start.ts b/packages/server/src/commands/start.ts index ffb6e4496..d1287d2f1 100644 --- a/packages/server/src/commands/start.ts +++ b/packages/server/src/commands/start.ts @@ -20,13 +20,20 @@ export default class Start extends Command { FLOWISE_PASSWORD: Flags.string(), PORT: Flags.string(), DEBUG: Flags.string(), - DATABASE_PATH: Flags.string(), APIKEY_PATH: Flags.string(), LOG_PATH: Flags.string(), LOG_LEVEL: Flags.string(), EXECUTION_MODE: Flags.string(), TOOL_FUNCTION_BUILTIN_DEP: Flags.string(), - TOOL_FUNCTION_EXTERNAL_DEP: Flags.string() + TOOL_FUNCTION_EXTERNAL_DEP: Flags.string(), + OVERRIDE_DATABASE: Flags.string(), + DATABASE_TYPE: Flags.string(), + DATABASE_PATH: Flags.string(), + DATABASE_PORT: Flags.string(), + DATABASE_HOST: Flags.string(), + DATABASE_NAME: Flags.string(), + DATABASE_USER: Flags.string(), + DATABASE_PASSWORD: Flags.string() } async stopProcess() { @@ -61,7 +68,6 @@ export default class Start extends Command { if (flags.FLOWISE_USERNAME) process.env.FLOWISE_USERNAME = flags.FLOWISE_USERNAME if (flags.FLOWISE_PASSWORD) process.env.FLOWISE_PASSWORD = flags.FLOWISE_PASSWORD if (flags.PORT) process.env.PORT = flags.PORT - if (flags.DATABASE_PATH) process.env.DATABASE_PATH = flags.DATABASE_PATH if (flags.APIKEY_PATH) process.env.APIKEY_PATH = flags.APIKEY_PATH if (flags.LOG_PATH) process.env.LOG_PATH = flags.LOG_PATH if (flags.LOG_LEVEL) process.env.LOG_LEVEL = flags.LOG_LEVEL @@ -70,6 +76,16 @@ export default class Start extends Command { if (flags.TOOL_FUNCTION_BUILTIN_DEP) process.env.TOOL_FUNCTION_BUILTIN_DEP = flags.TOOL_FUNCTION_BUILTIN_DEP if (flags.TOOL_FUNCTION_EXTERNAL_DEP) process.env.TOOL_FUNCTION_EXTERNAL_DEP = flags.TOOL_FUNCTION_EXTERNAL_DEP + // Database config + if (flags.OVERRIDE_DATABASE) process.env.OVERRIDE_DATABASE = flags.OVERRIDE_DATABASE + if (flags.DATABASE_TYPE) process.env.DATABASE_TYPE = flags.DATABASE_TYPE + if (flags.DATABASE_PATH) process.env.DATABASE_PATH = flags.DATABASE_PATH + if (flags.DATABASE_PORT) process.env.DATABASE_PORT = flags.DATABASE_PORT + if (flags.DATABASE_HOST) process.env.DATABASE_HOST = flags.DATABASE_HOST + if (flags.DATABASE_NAME) process.env.DATABASE_NAME = flags.DATABASE_NAME + if (flags.DATABASE_USER) process.env.DATABASE_USER = flags.DATABASE_USER + if (flags.DATABASE_PASSWORD) process.env.DATABASE_PASSWORD = flags.DATABASE_PASSWORD + await (async () => { try { logger.info('Starting Flowise...') From 741b97e80e36a4bd28e770a9a7f4ce5eb1015f2e Mon Sep 17 00:00:00 2001 From: Henry Date: Thu, 20 Jul 2023 01:07:29 +0100 Subject: [PATCH 39/57] add fix to HF Embeddings --- .../HuggingFaceInferenceEmbedding/core.ts | 18 +++++++++++++----- 1 file changed, 13 insertions(+), 5 deletions(-) diff --git a/packages/components/nodes/embeddings/HuggingFaceInferenceEmbedding/core.ts b/packages/components/nodes/embeddings/HuggingFaceInferenceEmbedding/core.ts index 41e63aa49..c75658d45 100644 --- a/packages/components/nodes/embeddings/HuggingFaceInferenceEmbedding/core.ts +++ b/packages/components/nodes/embeddings/HuggingFaceInferenceEmbedding/core.ts @@ -30,18 +30,26 @@ export class HuggingFaceInferenceEmbeddings extends Embeddings implements Huggin async _embed(texts: string[]): Promise { // replace newlines, which can negatively affect performance. const clean = texts.map((text) => text.replace(/\n/g, ' ')) + const hf = new HfInference(this.apiKey) const obj: any = { inputs: clean } - if (!this.endpoint) obj.model = this.model - return this.caller.call(() => this.client.featureExtraction(obj)) as Promise + if (this.endpoint) { + hf.endpoint(this.endpoint) + } else { + obj.model = this.model + } + + const res = await this.caller.callWithOptions({}, hf.featureExtraction.bind(hf), obj) + return res as number[][] } - embedQuery(document: string): Promise { - return this._embed([document]).then((embeddings) => embeddings[0]) + async embedQuery(document: string): Promise { + const res = await this._embed([document]) + return res[0] } - embedDocuments(documents: string[]): Promise { + async embedDocuments(documents: string[]): Promise { return this._embed(documents) } } From ffd354066dfc55ea48b4d3bc56061e286c55cab8 Mon Sep 17 00:00:00 2001 From: yejiezhao Date: Fri, 21 Jul 2023 10:51:48 +0800 Subject: [PATCH 40/57] fix:server watch the component change to restart --- packages/server/nodemon.json | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/packages/server/nodemon.json b/packages/server/nodemon.json index d896b48b0..39b78ab01 100644 --- a/packages/server/nodemon.json +++ b/packages/server/nodemon.json @@ -1,5 +1,5 @@ { - "ignore": ["**/*.spec.ts", ".git", "node_modules"], + "ignore": ["**/*.spec.ts", ".git", "node_modules", "../components/nodes", "../components/src"], "watch": ["commands", "index.ts", "src"], "exec": "yarn oclif-dev", "ext": "ts" From 412986dfabe0de66261f94d9fa4476fb39626f43 Mon Sep 17 00:00:00 2001 From: yejiezhao Date: Fri, 21 Jul 2023 10:55:20 +0800 Subject: [PATCH 41/57] fix:server watch the component change to restart --- packages/server/nodemon.json | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/packages/server/nodemon.json b/packages/server/nodemon.json index 39b78ab01..bf25eb004 100644 --- a/packages/server/nodemon.json +++ b/packages/server/nodemon.json @@ -1,6 +1,6 @@ { - "ignore": ["**/*.spec.ts", ".git", "node_modules", "../components/nodes", "../components/src"], - "watch": ["commands", "index.ts", "src"], + "ignore": ["**/*.spec.ts", ".git", "node_modules"], + "watch": ["commands", "index.ts", "src", "../components/nodes", "../components/src"], "exec": "yarn oclif-dev", "ext": "ts" } From 1da012305ab684170ca10356bbed8e983b2df53d Mon Sep 17 00:00:00 2001 From: Henry Date: Fri, 21 Jul 2023 11:48:21 +0100 Subject: [PATCH 42/57] add airtable loader --- .../documentloaders/Airtable/Airtable.ts | 226 ++++++++++++++++++ .../documentloaders/Airtable/airtable.svg | 9 + packages/components/src/Interface.ts | 1 + packages/ui/src/ui-component/input/Input.js | 2 +- 4 files changed, 237 insertions(+), 1 deletion(-) create mode 100644 packages/components/nodes/documentloaders/Airtable/Airtable.ts create mode 100644 packages/components/nodes/documentloaders/Airtable/airtable.svg diff --git a/packages/components/nodes/documentloaders/Airtable/Airtable.ts b/packages/components/nodes/documentloaders/Airtable/Airtable.ts new file mode 100644 index 000000000..9607693a1 --- /dev/null +++ b/packages/components/nodes/documentloaders/Airtable/Airtable.ts @@ -0,0 +1,226 @@ +import { ICommonObject, INode, INodeData, INodeParams } from '../../../src/Interface' +import { TextSplitter } from 'langchain/text_splitter' +import { BaseDocumentLoader } from 'langchain/document_loaders/base' +import { Document } from 'langchain/document' +import axios from 'axios' + +class Airtable_DocumentLoaders implements INode { + label: string + name: string + description: string + type: string + icon: string + category: string + baseClasses: string[] + inputs?: INodeParams[] + + constructor() { + this.label = 'Airtable' + this.name = 'airtable' + this.type = 'Document' + this.icon = 'airtable.svg' + this.category = 'Document Loaders' + this.description = `Load data from Airtable table` + this.baseClasses = [this.type] + this.inputs = [ + { + label: 'Text Splitter', + name: 'textSplitter', + type: 'TextSplitter', + optional: true + }, + { + label: 'Personal Access Token', + name: 'accessToken', + type: 'password', + description: + 'Get personal access token from official guide' + }, + { + label: 'Base Id', + name: 'baseId', + type: 'string', + placeholder: 'app11RobdGoX0YNsC', + description: + 'If your table URL looks like: https://airtable.com/app11RobdGoX0YNsC/tblJdmvbrgizbYICO/viw9UrP77Id0CE4ee, app11RovdGoX0YNsC is the base id' + }, + { + label: 'Table Id', + name: 'tableId', + type: 'string', + placeholder: 'tblJdmvbrgizbYICO', + description: + 'If your table URL looks like: https://airtable.com/app11RobdGoX0YNsC/tblJdmvbrgizbYICO/viw9UrP77Id0CE4ee, tblJdmvbrgizbYICO is the table id' + }, + { + label: 'Return All', + name: 'returnAll', + type: 'boolean', + default: true, + additionalParams: true, + description: 'If all results should be returned or only up to a given limit' + }, + { + label: 'Limit', + name: 'limit', + type: 'number', + default: 100, + step: 1, + additionalParams: true, + description: 'Number of results to return' + }, + { + label: 'Metadata', + name: 'metadata', + type: 'json', + optional: true, + additionalParams: true + } + ] + } + async init(nodeData: INodeData): Promise { + const accessToken = nodeData.inputs?.accessToken as string + const baseId = nodeData.inputs?.baseId as string + const tableId = nodeData.inputs?.tableId as string + const returnAll = nodeData.inputs?.returnAll as boolean + const limit = nodeData.inputs?.limit as string + const textSplitter = nodeData.inputs?.textSplitter as TextSplitter + const metadata = nodeData.inputs?.metadata + + const options: AirtableLoaderParams = { + baseId, + tableId, + returnAll, + accessToken, + limit: limit ? parseInt(limit, 10) : 100 + } + + const loader = new AirtableLoader(options) + + let docs = [] + + if (textSplitter) { + docs = await loader.loadAndSplit(textSplitter) + } else { + docs = await loader.load() + } + + if (metadata) { + const parsedMetadata = typeof metadata === 'object' ? metadata : JSON.parse(metadata) + let finaldocs = [] + for (const doc of docs) { + const newdoc = { + ...doc, + metadata: { + ...doc.metadata, + ...parsedMetadata + } + } + finaldocs.push(newdoc) + } + return finaldocs + } + + return docs + } +} + +interface AirtableLoaderParams { + baseId: string + tableId: string + accessToken: string + limit?: number + returnAll?: boolean +} + +interface AirtableLoaderResponse { + records: AirtableLoaderPage[] + offset?: string +} + +interface AirtableLoaderPage { + id: string + createdTime: string + fields: ICommonObject +} + +class AirtableLoader extends BaseDocumentLoader { + public readonly baseId: string + + public readonly tableId: string + + public readonly accessToken: string + + public readonly limit: number + + public readonly returnAll: boolean + + constructor({ baseId, tableId, accessToken, limit = 100, returnAll = false }: AirtableLoaderParams) { + super() + this.baseId = baseId + this.tableId = tableId + this.accessToken = accessToken + this.limit = limit + this.returnAll = returnAll + } + + public async load(): Promise { + if (this.returnAll) { + return this.loadAll() + } + return this.loadLimit() + } + + protected async fetchAirtableData(url: string, params: ICommonObject): Promise { + try { + const headers = { + Authorization: `Bearer ${this.accessToken}`, + 'Content-Type': 'application/json', + Accept: 'application/json' + } + const response = await axios.get(url, { params, headers }) + return response.data + } catch (error) { + throw new Error(`Failed to fetch ${url} from Airtable: ${error}`) + } + } + + private createDocumentFromPage(page: AirtableLoaderPage): Document { + // Generate the URL + const pageUrl = `https://api.airtable.com/v0/${this.baseId}/${this.tableId}/${page.id}` + + // Return a langchain document + return new Document({ + pageContent: JSON.stringify(page.fields, null, 2), + metadata: { + url: pageUrl + } + }) + } + + private async loadLimit(): Promise { + const params = { maxRecords: this.limit } + const data = await this.fetchAirtableData(`https://api.airtable.com/v0/${this.baseId}/${this.tableId}`, params) + if (data.records.length === 0) { + return [] + } + return data.records.map((page) => this.createDocumentFromPage(page)) + } + + private async loadAll(): Promise { + const params: ICommonObject = { pageSize: 100 } + let data: AirtableLoaderResponse + let returnPages: AirtableLoaderPage[] = [] + + do { + data = await this.fetchAirtableData(`https://api.airtable.com/v0/${this.baseId}/${this.tableId}`, params) + returnPages.push.apply(returnPages, data.records) + params.offset = data.offset + } while (data.offset !== undefined) + return returnPages.map((page) => this.createDocumentFromPage(page)) + } +} + +module.exports = { + nodeClass: Airtable_DocumentLoaders +} diff --git a/packages/components/nodes/documentloaders/Airtable/airtable.svg b/packages/components/nodes/documentloaders/Airtable/airtable.svg new file mode 100644 index 000000000..867c3b5ae --- /dev/null +++ b/packages/components/nodes/documentloaders/Airtable/airtable.svg @@ -0,0 +1,9 @@ + + + + + + + + + diff --git a/packages/components/src/Interface.ts b/packages/components/src/Interface.ts index 862b81ac8..47b5aba29 100644 --- a/packages/components/src/Interface.ts +++ b/packages/components/src/Interface.ts @@ -60,6 +60,7 @@ export interface INodeParams { warning?: string options?: Array optional?: boolean | INodeDisplay + step?: number rows?: number list?: boolean acceptVariable?: boolean diff --git a/packages/ui/src/ui-component/input/Input.js b/packages/ui/src/ui-component/input/Input.js index 5a7f45b7b..b7e161db5 100644 --- a/packages/ui/src/ui-component/input/Input.js +++ b/packages/ui/src/ui-component/input/Input.js @@ -37,7 +37,7 @@ export const Input = ({ inputParam, value, onChange, disabled = false, showDialo onChange(e.target.value) }} inputProps={{ - step: 0.1, + step: inputParam.step ?? 0.1, style: { height: inputParam.rows ? '90px' : 'inherit' } From b5b9b9c8b0b89ecdf9cbcb18d1316964c2b7597f Mon Sep 17 00:00:00 2001 From: Henry Date: Fri, 21 Jul 2023 17:27:39 +0100 Subject: [PATCH 43/57] update Notion Loader --- .../{NotionDB => Notion}/NotionDB.ts | 34 +++---- .../{NotionFolder => Notion}/NotionFolder.ts | 0 .../documentloaders/Notion/NotionPage.ts | 96 ++++++++++++++++++ .../{NotionDB => Notion}/notion.png | Bin .../documentloaders/NotionFolder/notion.png | Bin 11406 -> 0 bytes packages/components/package.json | 6 +- 6 files changed, 114 insertions(+), 22 deletions(-) rename packages/components/nodes/documentloaders/{NotionDB => Notion}/NotionDB.ts (77%) rename packages/components/nodes/documentloaders/{NotionFolder => Notion}/NotionFolder.ts (100%) create mode 100644 packages/components/nodes/documentloaders/Notion/NotionPage.ts rename packages/components/nodes/documentloaders/{NotionDB => Notion}/notion.png (100%) delete mode 100644 packages/components/nodes/documentloaders/NotionFolder/notion.png diff --git a/packages/components/nodes/documentloaders/NotionDB/NotionDB.ts b/packages/components/nodes/documentloaders/Notion/NotionDB.ts similarity index 77% rename from packages/components/nodes/documentloaders/NotionDB/NotionDB.ts rename to packages/components/nodes/documentloaders/Notion/NotionDB.ts index 71e5e507a..111e37180 100644 --- a/packages/components/nodes/documentloaders/NotionDB/NotionDB.ts +++ b/packages/components/nodes/documentloaders/Notion/NotionDB.ts @@ -1,6 +1,6 @@ import { INode, INodeData, INodeParams } from '../../../src/Interface' import { TextSplitter } from 'langchain/text_splitter' -import { NotionDBLoader, NotionDBLoaderParams } from 'langchain/document_loaders/web/notiondb' +import { NotionAPILoader, NotionAPILoaderOptions } from 'langchain/document_loaders/web/notionapi' class NotionDB_DocumentLoaders implements INode { label: string @@ -18,7 +18,7 @@ class NotionDB_DocumentLoaders implements INode { this.type = 'Document' this.icon = 'notion.png' this.category = 'Document Loaders' - this.description = 'Load data from Notion Database ID' + this.description = 'Load data from Notion Database (each row is a separate document with all properties as metadata)' this.baseClasses = [this.type] this.inputs = [ { @@ -27,13 +27,6 @@ class NotionDB_DocumentLoaders implements INode { 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', @@ -42,10 +35,10 @@ class NotionDB_DocumentLoaders implements INode { 'You can find integration token here' }, { - label: 'Page Size Limit', - name: 'pageSizeLimit', - type: 'number', - default: 10 + label: 'Notion Database Id', + name: 'databaseId', + type: 'string', + description: 'If your URL looks like - https://www.notion.so/abcdefh?v=long_hash_2, then abcdefh is the database ID' }, { label: 'Metadata', @@ -60,16 +53,17 @@ class NotionDB_DocumentLoaders implements INode { async init(nodeData: INodeData): Promise { const textSplitter = nodeData.inputs?.textSplitter as TextSplitter 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 notionIntegrationToken = nodeData.inputs?.notionIntegrationToken as string - const obj: NotionDBLoaderParams = { - pageSizeLimit: pageSizeLimit ? parseInt(pageSizeLimit, 10) : 10, - databaseId, - notionIntegrationToken + const obj: NotionAPILoaderOptions = { + clientOptions: { + auth: notionIntegrationToken + }, + id: databaseId, + type: 'database' } - const loader = new NotionDBLoader(obj) + const loader = new NotionAPILoader(obj) let docs = [] if (textSplitter) { diff --git a/packages/components/nodes/documentloaders/NotionFolder/NotionFolder.ts b/packages/components/nodes/documentloaders/Notion/NotionFolder.ts similarity index 100% rename from packages/components/nodes/documentloaders/NotionFolder/NotionFolder.ts rename to packages/components/nodes/documentloaders/Notion/NotionFolder.ts diff --git a/packages/components/nodes/documentloaders/Notion/NotionPage.ts b/packages/components/nodes/documentloaders/Notion/NotionPage.ts new file mode 100644 index 000000000..37c43d558 --- /dev/null +++ b/packages/components/nodes/documentloaders/Notion/NotionPage.ts @@ -0,0 +1,96 @@ +import { INode, INodeData, INodeParams } from '../../../src/Interface' +import { TextSplitter } from 'langchain/text_splitter' +import { NotionAPILoader, NotionAPILoaderOptions } from 'langchain/document_loaders/web/notionapi' + +class NotionPage_DocumentLoaders implements INode { + label: string + name: string + description: string + type: string + icon: string + category: string + baseClasses: string[] + inputs: INodeParams[] + + constructor() { + this.label = 'Notion Page' + this.name = 'notionPage' + this.type = 'Document' + this.icon = 'notion.png' + this.category = 'Document Loaders' + this.description = 'Load data from Notion Page (including child pages all as separate documents)' + this.baseClasses = [this.type] + this.inputs = [ + { + label: 'Text Splitter', + name: 'textSplitter', + type: 'TextSplitter', + optional: true + }, + { + label: 'Notion Integration Token', + name: 'notionIntegrationToken', + type: 'password', + description: + 'You can find integration token here' + }, + { + label: 'Notion Page Id', + name: 'pageId', + type: 'string', + description: + 'The last The 32 char hex in the url path. For example: https://www.notion.so/skarard/LangChain-Notion-API-b34ca03f219c4420a6046fc4bdfdf7b4, b34ca03f219c4420a6046fc4bdfdf7b4 is the Page ID' + }, + { + label: 'Metadata', + name: 'metadata', + type: 'json', + optional: true, + additionalParams: true + } + ] + } + + async init(nodeData: INodeData): Promise { + const textSplitter = nodeData.inputs?.textSplitter as TextSplitter + const pageId = nodeData.inputs?.pageId as string + const metadata = nodeData.inputs?.metadata + const notionIntegrationToken = nodeData.inputs?.notionIntegrationToken as string + + const obj: NotionAPILoaderOptions = { + clientOptions: { + auth: notionIntegrationToken + }, + id: pageId, + type: 'page' + } + const loader = new NotionAPILoader(obj) + + let docs = [] + if (textSplitter) { + docs = await loader.loadAndSplit(textSplitter) + } else { + docs = await loader.load() + } + + if (metadata) { + const parsedMetadata = typeof metadata === 'object' ? metadata : JSON.parse(metadata) + let finaldocs = [] + for (const doc of docs) { + const newdoc = { + ...doc, + metadata: { + ...doc.metadata, + ...parsedMetadata + } + } + finaldocs.push(newdoc) + } + return finaldocs + } + + return docs + } +} + +module.exports = { nodeClass: NotionPage_DocumentLoaders } diff --git a/packages/components/nodes/documentloaders/NotionDB/notion.png b/packages/components/nodes/documentloaders/Notion/notion.png similarity index 100% rename from packages/components/nodes/documentloaders/NotionDB/notion.png rename to packages/components/nodes/documentloaders/Notion/notion.png diff --git a/packages/components/nodes/documentloaders/NotionFolder/notion.png b/packages/components/nodes/documentloaders/NotionFolder/notion.png deleted file mode 100644 index 391051679c8cc33e7e52891593147283bf93dcb0..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 11406 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 Date: Fri, 21 Jul 2023 19:22:54 +0100 Subject: [PATCH 44/57] add API document loader --- .../nodes/documentloaders/API/APILoader.ts | 198 ++++++++++++++++++ .../nodes/documentloaders/API/api-loader.png | Bin 0 -> 1402 bytes 2 files changed, 198 insertions(+) create mode 100644 packages/components/nodes/documentloaders/API/APILoader.ts create mode 100644 packages/components/nodes/documentloaders/API/api-loader.png diff --git a/packages/components/nodes/documentloaders/API/APILoader.ts b/packages/components/nodes/documentloaders/API/APILoader.ts new file mode 100644 index 000000000..30fa31d7a --- /dev/null +++ b/packages/components/nodes/documentloaders/API/APILoader.ts @@ -0,0 +1,198 @@ +import { ICommonObject, INode, INodeData, INodeParams } from '../../../src/Interface' +import { TextSplitter } from 'langchain/text_splitter' +import { BaseDocumentLoader } from 'langchain/document_loaders/base' +import { Document } from 'langchain/document' +import axios, { AxiosRequestConfig } from 'axios' + +class API_DocumentLoaders implements INode { + label: string + name: string + description: string + type: string + icon: string + category: string + baseClasses: string[] + inputs?: INodeParams[] + + constructor() { + this.label = 'API Loader' + this.name = 'apiLoader' + this.type = 'Document' + this.icon = 'api-loader.png' + this.category = 'Document Loaders' + this.description = `Load data from an API` + this.baseClasses = [this.type] + this.inputs = [ + { + label: 'Text Splitter', + name: 'textSplitter', + type: 'TextSplitter', + optional: true + }, + { + label: 'Method', + name: 'method', + type: 'options', + options: [ + { + label: 'GET', + name: 'GET' + }, + { + label: 'POST', + name: 'POST' + } + ] + }, + { + label: 'URL', + name: 'url', + type: 'string' + }, + { + label: 'Headers', + name: 'headers', + type: 'json', + additionalParams: true, + optional: true + }, + { + label: 'Body', + name: 'body', + type: 'json', + description: + 'JSON body for the POST request. If not specified, agent will try to figure out itself from AIPlugin if provided', + additionalParams: true, + optional: true + } + ] + } + async init(nodeData: INodeData): Promise { + const headers = nodeData.inputs?.headers as string + const url = nodeData.inputs?.url as string + const body = nodeData.inputs?.body as string + const method = nodeData.inputs?.method as string + const textSplitter = nodeData.inputs?.textSplitter as TextSplitter + const metadata = nodeData.inputs?.metadata + + const options: ApiLoaderParams = { + url, + method + } + + if (headers) { + const parsedHeaders = typeof headers === 'object' ? headers : JSON.parse(headers) + options.headers = parsedHeaders + } + + if (body) { + const parsedBody = typeof body === 'object' ? body : JSON.parse(body) + options.body = parsedBody + } + + const loader = new ApiLoader(options) + + let docs = [] + + if (textSplitter) { + docs = await loader.loadAndSplit(textSplitter) + } else { + docs = await loader.load() + } + + if (metadata) { + const parsedMetadata = typeof metadata === 'object' ? metadata : JSON.parse(metadata) + let finaldocs = [] + for (const doc of docs) { + const newdoc = { + ...doc, + metadata: { + ...doc.metadata, + ...parsedMetadata + } + } + finaldocs.push(newdoc) + } + return finaldocs + } + + return docs + } +} + +interface ApiLoaderParams { + url: string + method: string + headers?: ICommonObject + body?: ICommonObject +} + +class ApiLoader extends BaseDocumentLoader { + public readonly url: string + + public readonly headers?: ICommonObject + + public readonly body?: ICommonObject + + public readonly method: string + + constructor({ url, headers, body, method }: ApiLoaderParams) { + super() + this.url = url + this.headers = headers + this.body = body + this.method = method + } + + public async load(): Promise { + if (this.method === 'POST') { + return this.executePostRequest(this.url, this.headers, this.body) + } else { + return this.executeGetRequest(this.url, this.headers) + } + } + + protected async executeGetRequest(url: string, headers?: ICommonObject): Promise { + try { + const config: AxiosRequestConfig = {} + if (headers) { + config.headers = headers + } + const response = await axios.get(url, config) + const responseJsonString = JSON.stringify(response.data, null, 2) + const doc = new Document({ + pageContent: responseJsonString, + metadata: { + url + } + }) + return [doc] + } catch (error) { + throw new Error(`Failed to fetch ${url}: ${error}`) + } + } + + protected async executePostRequest(url: string, headers?: ICommonObject, body?: ICommonObject): Promise { + try { + const config: AxiosRequestConfig = {} + if (headers) { + config.headers = headers + } + const response = await axios.post(url, body ?? {}, config) + const responseJsonString = JSON.stringify(response.data, null, 2) + const doc = new Document({ + pageContent: responseJsonString, + metadata: { + url + } + }) + return [doc] + } catch (error) { + throw new Error(`Failed to post ${url}: ${error}`) + } + } +} + +module.exports = { + nodeClass: API_DocumentLoaders +} diff --git a/packages/components/nodes/documentloaders/API/api-loader.png b/packages/components/nodes/documentloaders/API/api-loader.png new file mode 100644 index 0000000000000000000000000000000000000000..93668c4cf1e90538e0c508f4d2f16e5dc69db3de GIT binary patch literal 1402 zcmV-=1%>*FP)z_&000000000000000_>Ycmb-iiHv?1h= zrcfDEC=FB9KFG}YMy~1*YDr)Nr!%cDH!LMgAxm($@;T^a$q>p~^qIb_Y3G|l9)#mn zL(y(n@<3A}m_qfy`KqZ@Yglr1<2fH`M>jnHEm^#BwOU;N=(l7VqhAHG&@hDTYCr%r z0s&Mo0$B27-2xawDF~nf5h_N^ zp$RY-yQnMAa@~7vCcv4CCD)gF^|0MC0siO2L{Z5L<1i!B#`7(QRr zSNFDo0B?Ph_jH6)()xzA^`)VpNFU25Ux4H1it{?+nSHrH1bAt{o@K8bvh~(ejxLt@ z>s7wYik}z(ZeE|!C6|}4X6G+XAOg5u|HR&$>vOCau#+pmvj=VMhbgS!iFCTp$c%v z$NXySLav-l0Uq0(V_)L&JvluzUaP>LvK*=a*RD~ntFS~0uyLfe`lZ##jq5Uc)iHi) zde^7Zp$V|`gADtdi*^DdphGApJP)AoCEIp zoX@wtCuSUc%^Ib1%%bGvU;dhNjW~#lNP-p$i4&mvTRz1+`o*P{&XKdV^8m%nQXd`5 zdL8sazwKI#z5aCq>wusBDY28?;`c8(_nkprq?f;%zd7f|?onr!?HP6SZXcnR3j{@ zij*+Bp)?mIP5>^q6A$gEt#tdx_-mi)^KQ;H%iwsi(xMRzRluM(U`wI2u zQGOnvzD*bcP_ajIOlMDHDQ>|F@N^$v{Zc2A3ZA((&7>e=(k@q0RJ{(O=&QEhw&tUG>;>@JdUEfU`M-4S`jwx&znkEz zVhAwDAv97ssM7WGt#`$M?Yexubwl{Qn%GCc@d>`7rApV&@9*5`9zid*VAn#d1@PK> zLK|ZJ-sha+Z*t&F`2G4=3-Elu`__}YH~ag_fXGLoi3o_^5hhYl^v*CNFw6lWW&+S5 zLs37pnGiFCnyNnnaAcW|^vE(g0XFK9V Date: Sat, 22 Jul 2023 01:16:23 +0100 Subject: [PATCH 45/57] add csv agent --- .../nodes/agents/CSVAgent/CSVAgent.ts | 142 ++++++++++++++++++ .../components/nodes/agents/CSVAgent/core.ts | 35 +++++ .../nodes/agents/CSVAgent/csvagent.png | Bin 0 -> 2036 bytes packages/components/package.json | 1 + packages/components/src/utils.ts | 14 ++ 5 files changed, 192 insertions(+) create mode 100644 packages/components/nodes/agents/CSVAgent/CSVAgent.ts create mode 100644 packages/components/nodes/agents/CSVAgent/core.ts create mode 100644 packages/components/nodes/agents/CSVAgent/csvagent.png diff --git a/packages/components/nodes/agents/CSVAgent/CSVAgent.ts b/packages/components/nodes/agents/CSVAgent/CSVAgent.ts new file mode 100644 index 000000000..8fcae727a --- /dev/null +++ b/packages/components/nodes/agents/CSVAgent/CSVAgent.ts @@ -0,0 +1,142 @@ +import { INode, INodeData, INodeParams, PromptTemplate } from '../../../src/Interface' +import { AgentExecutor } from 'langchain/agents' +import { getBaseClasses } from '../../../src/utils' +import { LoadPyodide, finalSystemPrompt, systemPrompt } from './core' +import { LLMChain } from 'langchain/chains' +import { BaseLanguageModel } from 'langchain/base_language' + +class CSV_Agents implements INode { + label: string + name: string + description: string + type: string + icon: string + category: string + baseClasses: string[] + inputs: INodeParams[] + + constructor() { + this.label = 'CSV Agent' + this.name = 'csvAgentLLM' + this.type = 'AgentExecutor' + this.category = 'Agents' + this.icon = 'csvagent.png' + this.description = 'Agent used to to answer queries on CSV data' + this.baseClasses = [this.type, ...getBaseClasses(AgentExecutor)] + this.inputs = [ + { + label: 'Csv File', + name: 'csvFile', + type: 'file', + fileType: '.csv' + }, + { + label: 'Language Model', + name: 'model', + type: 'BaseLanguageModel' + } + ] + } + + async init(): Promise { + // Not used + return undefined + } + + async run(nodeData: INodeData, input: string): Promise { + const csvFileBase64 = nodeData.inputs?.csvFile as string + const model = nodeData.inputs?.model as BaseLanguageModel + + let files: string[] = [] + + if (csvFileBase64.startsWith('[') && csvFileBase64.endsWith(']')) { + files = JSON.parse(csvFileBase64) + } else { + files = [csvFileBase64] + } + + let base64String = '' + + for (const file of files) { + const splitDataURI = file.split(',') + splitDataURI.pop() + base64String = splitDataURI.pop() ?? '' + } + + const pyodide = await LoadPyodide() + + // First load the csv file and get the dataframe dictionary of column types + // For example using titanic.csv: {'PassengerId': 'int64', 'Survived': 'int64', 'Pclass': 'int64', 'Name': 'object', 'Sex': 'object', 'Age': 'float64', 'SibSp': 'int64', 'Parch': 'int64', 'Ticket': 'object', 'Fare': 'float64', 'Cabin': 'object', 'Embarked': 'object'} + let executionResult = '' + try { + const code = `import pandas as pd +import base64 +from io import StringIO +import json + +base64_string = "${base64String}" + +decoded_data = base64.b64decode(base64_string) + +csv_data = StringIO(decoded_data.decode('utf-8')) + +df = pd.read_csv(csv_data) +my_dict = df.dtypes.astype(str).to_dict() +print(my_dict) +json.dumps(my_dict)` + executionResult = await pyodide.runPythonAsync(code) + } catch (error) { + throw new Error(error) + } + console.log('executionResult= ', executionResult) + + // Then tell GPT to come out with ONLY python code + // For example: len(df), df[df['SibSp'] > 3]['PassengerId'].count() + let pythonCode = '' + if (executionResult) { + const chain = new LLMChain({ + llm: model, + prompt: PromptTemplate.fromTemplate(systemPrompt), + verbose: process.env.DEBUG === 'true' ? true : false + }) + const inputs = { + dict: executionResult, + question: input + } + const res = await chain.call(inputs) + pythonCode = res?.text + } + console.log('pythonCode= ', pythonCode) + + // Then run the code using Pyodide + let finalResult = '' + if (pythonCode) { + try { + const code = `import pandas as pd\n${pythonCode}` + finalResult = await pyodide.runPythonAsync(code) + } catch (error) { + throw new Error(error) + } + } + console.log('finalResult= ', finalResult) + + // Finally, return a complete answer + if (finalResult) { + const chain = new LLMChain({ + llm: model, + prompt: PromptTemplate.fromTemplate(finalSystemPrompt), + verbose: process.env.DEBUG === 'true' ? true : false + }) + const inputs = { + question: input, + answer: finalResult + } + const res = await chain.call(inputs) + return res?.text + } + + return executionResult + } +} + +module.exports = { nodeClass: CSV_Agents } diff --git a/packages/components/nodes/agents/CSVAgent/core.ts b/packages/components/nodes/agents/CSVAgent/core.ts new file mode 100644 index 000000000..95a1f3d3b --- /dev/null +++ b/packages/components/nodes/agents/CSVAgent/core.ts @@ -0,0 +1,35 @@ +import type { PyodideInterface } from 'pyodide' +import * as path from 'path' +import { getUserHome } from '../../../src/utils' + +let pyodideInstance: PyodideInterface | undefined + +export async function LoadPyodide(): Promise { + if (pyodideInstance === undefined) { + const { loadPyodide } = await import('pyodide') + const obj: any = { packageCacheDir: path.join(getUserHome(), '.flowise', 'pyodideCacheDir') } + pyodideInstance = await loadPyodide(obj) + await pyodideInstance.loadPackage('micropip') + const micropip = pyodideInstance.pyimport('micropip') + await micropip.install('pandas') + await micropip.install('numpy') + //let mountDir = "/mnt"; + //pyodideInstance.FS.mkdir(mountDir); + //pyodideInstance.FS.mount(pyodideInstance.FS.filesystems.NODEFS, { root: path.join(getUserHome(), '.flowise', 'pyodideFS') }, mountDir); + } + + return pyodideInstance +} + +export const systemPrompt = `You are working with a pandas dataframe in Python. The name of the dataframe is df. + +The columns and data types of a dataframe are given below as a Python dictionary with keys showing column names and values showing the data types. +{dict} + +I will ask question, and you will output the Python code using pandas dataframe to answer my question. Do not provide any explanations. Do not respond with anything except the output of the code. + +Question: {question} +Output Code:` + +export const finalSystemPrompt = `You are given the question: {question}. You have an answer to the question: {answer}. Rephrase the answer with more details. +Helpful Answer:` diff --git a/packages/components/nodes/agents/CSVAgent/csvagent.png b/packages/components/nodes/agents/CSVAgent/csvagent.png new file mode 100644 index 0000000000000000000000000000000000000000..3ed16bb2c5fa787bde2fcf52ad727b00a6694bbd GIT binary patch literal 2036 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.21.0-alpha.2", "redis": "^4.6.7", "replicate": "^0.12.3", "srt-parser-2": "^1.2.3", diff --git a/packages/components/src/utils.ts b/packages/components/src/utils.ts index 78486643c..eaf90fef1 100644 --- a/packages/components/src/utils.ts +++ b/packages/components/src/utils.ts @@ -377,3 +377,17 @@ export const availableDependencies = [ 'typeorm', 'weaviate-ts-client' ] + +export const getUserHome = (): string => { + let variableName = 'HOME' + if (process.platform === 'win32') { + variableName = 'USERPROFILE' + } + + if (process.env[variableName] === undefined) { + // If for some reason the variable does not exist + // fall back to current folder + return process.cwd() + } + return process.env[variableName] as string +} From d4d4f0c8c28f9d7162d9747ef66b9b43d2ed045e Mon Sep 17 00:00:00 2001 From: Henry Date: Sat, 22 Jul 2023 02:27:52 +0100 Subject: [PATCH 46/57] yarn lint --- .../nodes/agents/CSVAgent/CSVAgent.ts | 42 ++++++++++++------- .../components/nodes/agents/CSVAgent/core.ts | 4 +- packages/server/src/utils/index.ts | 2 +- 3 files changed, 30 insertions(+), 18 deletions(-) diff --git a/packages/components/nodes/agents/CSVAgent/CSVAgent.ts b/packages/components/nodes/agents/CSVAgent/CSVAgent.ts index 8fcae727a..e93b52d39 100644 --- a/packages/components/nodes/agents/CSVAgent/CSVAgent.ts +++ b/packages/components/nodes/agents/CSVAgent/CSVAgent.ts @@ -1,9 +1,10 @@ -import { INode, INodeData, INodeParams, PromptTemplate } from '../../../src/Interface' +import { ICommonObject, INode, INodeData, INodeParams, PromptTemplate } from '../../../src/Interface' import { AgentExecutor } from 'langchain/agents' import { getBaseClasses } from '../../../src/utils' import { LoadPyodide, finalSystemPrompt, systemPrompt } from './core' import { LLMChain } from 'langchain/chains' import { BaseLanguageModel } from 'langchain/base_language' +import { ConsoleCallbackHandler, CustomChainHandler } from '../../../src/handler' class CSV_Agents implements INode { label: string @@ -17,7 +18,7 @@ class CSV_Agents implements INode { constructor() { this.label = 'CSV Agent' - this.name = 'csvAgentLLM' + this.name = 'csvAgent' this.type = 'AgentExecutor' this.category = 'Agents' this.icon = 'csvagent.png' @@ -43,10 +44,13 @@ class CSV_Agents implements INode { return undefined } - async run(nodeData: INodeData, input: string): Promise { + async run(nodeData: INodeData, input: string, options: ICommonObject): Promise { const csvFileBase64 = nodeData.inputs?.csvFile as string const model = nodeData.inputs?.model as BaseLanguageModel + const loggerHandler = new ConsoleCallbackHandler(options.logger) + const handler = new CustomChainHandler(options.socketIO, options.socketIOClientId) + let files: string[] = [] if (csvFileBase64.startsWith('[') && csvFileBase64.endsWith(']')) { @@ -67,7 +71,7 @@ class CSV_Agents implements INode { // First load the csv file and get the dataframe dictionary of column types // For example using titanic.csv: {'PassengerId': 'int64', 'Survived': 'int64', 'Pclass': 'int64', 'Name': 'object', 'Sex': 'object', 'Age': 'float64', 'SibSp': 'int64', 'Parch': 'int64', 'Ticket': 'object', 'Fare': 'float64', 'Cabin': 'object', 'Embarked': 'object'} - let executionResult = '' + let dataframeColDict = '' try { const code = `import pandas as pd import base64 @@ -84,29 +88,29 @@ df = pd.read_csv(csv_data) my_dict = df.dtypes.astype(str).to_dict() print(my_dict) json.dumps(my_dict)` - executionResult = await pyodide.runPythonAsync(code) + dataframeColDict = await pyodide.runPythonAsync(code) } catch (error) { throw new Error(error) } - console.log('executionResult= ', executionResult) + options.logger.debug('[components/CSVAgent] [1] DataframeColDict =>', dataframeColDict) // Then tell GPT to come out with ONLY python code // For example: len(df), df[df['SibSp'] > 3]['PassengerId'].count() let pythonCode = '' - if (executionResult) { + if (dataframeColDict) { const chain = new LLMChain({ llm: model, prompt: PromptTemplate.fromTemplate(systemPrompt), verbose: process.env.DEBUG === 'true' ? true : false }) const inputs = { - dict: executionResult, + dict: dataframeColDict, question: input } - const res = await chain.call(inputs) + const res = await chain.call(inputs, [loggerHandler]) pythonCode = res?.text } - console.log('pythonCode= ', pythonCode) + options.logger.debug('[components/CSVAgent] [2] Generated Python Code =>', pythonCode) // Then run the code using Pyodide let finalResult = '' @@ -115,10 +119,10 @@ json.dumps(my_dict)` const code = `import pandas as pd\n${pythonCode}` finalResult = await pyodide.runPythonAsync(code) } catch (error) { - throw new Error(error) + throw new Error(pythonCode) } } - console.log('finalResult= ', finalResult) + options.logger.debug('[components/CSVAgent] [3] Pyodide Result =>', finalResult) // Finally, return a complete answer if (finalResult) { @@ -131,11 +135,19 @@ json.dumps(my_dict)` question: input, answer: finalResult } - const res = await chain.call(inputs) - return res?.text + + if (options.socketIO && options.socketIOClientId) { + const result = await chain.call(inputs, [loggerHandler, handler]) + options.logger.debug('[components/CSVAgent] [4] Final Result =>', result?.text) + return result?.text + } else { + const result = await chain.call(inputs, [loggerHandler]) + options.logger.debug('[components/CSVAgent] [4] Final Result =>', result?.text) + return result?.text + } } - return executionResult + return pythonCode } } diff --git a/packages/components/nodes/agents/CSVAgent/core.ts b/packages/components/nodes/agents/CSVAgent/core.ts index 95a1f3d3b..1c193091a 100644 --- a/packages/components/nodes/agents/CSVAgent/core.ts +++ b/packages/components/nodes/agents/CSVAgent/core.ts @@ -31,5 +31,5 @@ I will ask question, and you will output the Python code using pandas dataframe Question: {question} Output Code:` -export const finalSystemPrompt = `You are given the question: {question}. You have an answer to the question: {answer}. Rephrase the answer with more details. -Helpful Answer:` +export const finalSystemPrompt = `You are given the question: {question}. You have an answer to the question: {answer}. Rephrase the answer into a standalone answer. +Standalone Answer:` diff --git a/packages/server/src/utils/index.ts b/packages/server/src/utils/index.ts index 203cee4fe..1da6a84ea 100644 --- a/packages/server/src/utils/index.ts +++ b/packages/server/src/utils/index.ts @@ -728,7 +728,7 @@ export const isFlowValidForStream = (reactFlowNodes: IReactFlowNode[], endingNod isValidChainOrAgent = !blacklistChains.includes(endingNodeData.name) } else if (endingNodeData.category === 'Agents') { // Agent that are available to stream - const whitelistAgents = ['openAIFunctionAgent'] + const whitelistAgents = ['openAIFunctionAgent', 'csvAgent'] isValidChainOrAgent = whitelistAgents.includes(endingNodeData.name) } From de5ab826bbeddf51fe2fb9dedcbc61a99f53ae77 Mon Sep 17 00:00:00 2001 From: Henry Date: Sat, 22 Jul 2023 15:28:50 +0100 Subject: [PATCH 47/57] add artillery load test yml file --- artillery-load-test.yml | 36 ++++++++++++++++++++++++++++++++++++ 1 file changed, 36 insertions(+) create mode 100644 artillery-load-test.yml diff --git a/artillery-load-test.yml b/artillery-load-test.yml new file mode 100644 index 000000000..6b1c81401 --- /dev/null +++ b/artillery-load-test.yml @@ -0,0 +1,36 @@ +# npm install -g artillery@latest +# artillery run artillery-load-test.yml +# Refer https://www.artillery.io/docs + +config: + target: http://128.128.128.128:3000 # replace with your url + phases: + - duration: 1 + arrivalRate: 1 + rampTo: 2 + name: Warm up phase + - duration: 1 + arrivalRate: 2 + rampTo: 3 + name: Ramp up load + - duration: 1 + arrivalRate: 3 + name: Sustained peak load +scenarios: + - flow: + - loop: + - post: + url: '/api/v1/prediction/chatflow-id' # replace with your chatflowid + json: + question: 'hello' # replace with your question + count: 1 # how many request each user make + +# User __ +# 3 / +# 2 / +# 1 _/ +# 1 2 3 +# Seconds +# Total Users = 2 + 3 + 3 = 8 +# Each making 1 HTTP call +# Over a duration of 3 seconds From 5a76af15b2767af740c42b881442edb258ebb6bf Mon Sep 17 00:00:00 2001 From: Henry Date: Sat, 22 Jul 2023 19:52:32 +0100 Subject: [PATCH 48/57] add airtable agent --- .../agents/AirtableAgent/AirtableAgent.ts | 234 ++++++++++++++++++ .../nodes/agents/AirtableAgent/airtable.svg | 9 + .../nodes/agents/AirtableAgent/core.ts | 29 +++ .../nodes/agents/CSVAgent/CSVAgent.ts | 2 +- .../components/nodes/agents/CSVAgent/core.ts | 8 +- packages/server/src/utils/index.ts | 2 +- 6 files changed, 275 insertions(+), 9 deletions(-) create mode 100644 packages/components/nodes/agents/AirtableAgent/AirtableAgent.ts create mode 100644 packages/components/nodes/agents/AirtableAgent/airtable.svg create mode 100644 packages/components/nodes/agents/AirtableAgent/core.ts diff --git a/packages/components/nodes/agents/AirtableAgent/AirtableAgent.ts b/packages/components/nodes/agents/AirtableAgent/AirtableAgent.ts new file mode 100644 index 000000000..5d42d8be8 --- /dev/null +++ b/packages/components/nodes/agents/AirtableAgent/AirtableAgent.ts @@ -0,0 +1,234 @@ +import { ICommonObject, INode, INodeData, INodeParams, PromptTemplate } from '../../../src/Interface' +import { AgentExecutor } from 'langchain/agents' +import { getBaseClasses } from '../../../src/utils' +import { LoadPyodide, finalSystemPrompt, systemPrompt } from './core' +import { LLMChain } from 'langchain/chains' +import { BaseLanguageModel } from 'langchain/base_language' +import { ConsoleCallbackHandler, CustomChainHandler } from '../../../src/handler' +import axios from 'axios' + +class Airtable_Agents implements INode { + label: string + name: string + description: string + type: string + icon: string + category: string + baseClasses: string[] + inputs: INodeParams[] + + constructor() { + this.label = 'Airtable Agent' + this.name = 'airtableAgent' + this.type = 'AgentExecutor' + this.category = 'Agents' + this.icon = 'airtable.svg' + this.description = 'Agent used to to answer queries on Airtable table' + this.baseClasses = [this.type, ...getBaseClasses(AgentExecutor)] + this.inputs = [ + { + label: 'Language Model', + name: 'model', + type: 'BaseLanguageModel' + }, + { + label: 'Personal Access Token', + name: 'accessToken', + type: 'password', + description: + 'Get personal access token from official guide' + }, + { + label: 'Base Id', + name: 'baseId', + type: 'string', + placeholder: 'app11RobdGoX0YNsC', + description: + 'If your table URL looks like: https://airtable.com/app11RobdGoX0YNsC/tblJdmvbrgizbYICO/viw9UrP77Id0CE4ee, app11RovdGoX0YNsC is the base id' + }, + { + label: 'Table Id', + name: 'tableId', + type: 'string', + placeholder: 'tblJdmvbrgizbYICO', + description: + 'If your table URL looks like: https://airtable.com/app11RobdGoX0YNsC/tblJdmvbrgizbYICO/viw9UrP77Id0CE4ee, tblJdmvbrgizbYICO is the table id' + }, + { + label: 'Return All', + name: 'returnAll', + type: 'boolean', + default: true, + additionalParams: true, + description: 'If all results should be returned or only up to a given limit' + }, + { + label: 'Limit', + name: 'limit', + type: 'number', + default: 100, + step: 1, + additionalParams: true, + description: 'Number of results to return' + } + ] + } + + async init(): Promise { + // Not used + return undefined + } + + async run(nodeData: INodeData, input: string, options: ICommonObject): Promise { + const model = nodeData.inputs?.model as BaseLanguageModel + const accessToken = nodeData.inputs?.accessToken as string + const baseId = nodeData.inputs?.baseId as string + const tableId = nodeData.inputs?.tableId as string + const returnAll = nodeData.inputs?.returnAll as boolean + const limit = nodeData.inputs?.limit as string + + let airtableData: ICommonObject[] = [] + + if (returnAll) { + airtableData = await loadAll(baseId, tableId, accessToken) + } else { + airtableData = await loadLimit(limit ? parseInt(limit, 10) : 100, baseId, tableId, accessToken) + } + + let base64String = Buffer.from(JSON.stringify(airtableData)).toString('base64') + + const loggerHandler = new ConsoleCallbackHandler(options.logger) + const handler = new CustomChainHandler(options.socketIO, options.socketIOClientId) + + const pyodide = await LoadPyodide() + + // First load the csv file and get the dataframe dictionary of column types + // For example using titanic.csv: {'PassengerId': 'int64', 'Survived': 'int64', 'Pclass': 'int64', 'Name': 'object', 'Sex': 'object', 'Age': 'float64', 'SibSp': 'int64', 'Parch': 'int64', 'Ticket': 'object', 'Fare': 'float64', 'Cabin': 'object', 'Embarked': 'object'} + let dataframeColDict = '' + try { + const code = `import pandas as pd +import base64 +import json + +base64_string = "${base64String}" + +decoded_data = base64.b64decode(base64_string) + +json_data = json.loads(decoded_data) + +df = pd.DataFrame(json_data) +my_dict = df.dtypes.astype(str).to_dict() +print(my_dict) +json.dumps(my_dict)` + dataframeColDict = await pyodide.runPythonAsync(code) + } catch (error) { + throw new Error(error) + } + options.logger.debug('[components/AirtableAgent] [1] DataframeColDict =>', dataframeColDict) + + // Then tell GPT to come out with ONLY python code + // For example: len(df), df[df['SibSp'] > 3]['PassengerId'].count() + let pythonCode = '' + if (dataframeColDict) { + const chain = new LLMChain({ + llm: model, + prompt: PromptTemplate.fromTemplate(systemPrompt), + verbose: process.env.DEBUG === 'true' ? true : false + }) + const inputs = { + dict: dataframeColDict, + question: input + } + const res = await chain.call(inputs, [loggerHandler]) + pythonCode = res?.text + } + options.logger.debug('[components/AirtableAgent] [2] Generated Python Code =>', pythonCode) + + // Then run the code using Pyodide + let finalResult = '' + if (pythonCode) { + try { + const code = `import pandas as pd\n${pythonCode}` + finalResult = await pyodide.runPythonAsync(code) + } catch (error) { + throw new Error(`Sorry, I'm unable to find answer for question: "${input}" using follwoing code: "${pythonCode}"`) + } + } + options.logger.debug('[components/AirtableAgent] [3] Pyodide Result =>', finalResult) + + // Finally, return a complete answer + if (finalResult) { + const chain = new LLMChain({ + llm: model, + prompt: PromptTemplate.fromTemplate(finalSystemPrompt), + verbose: process.env.DEBUG === 'true' ? true : false + }) + const inputs = { + question: input, + answer: finalResult + } + + if (options.socketIO && options.socketIOClientId) { + const result = await chain.call(inputs, [loggerHandler, handler]) + options.logger.debug('[components/AirtableAgent] [4] Final Result =>', result?.text) + return result?.text + } else { + const result = await chain.call(inputs, [loggerHandler]) + options.logger.debug('[components/AirtableAgent] [4] Final Result =>', result?.text) + return result?.text + } + } + + return pythonCode + } +} + +interface AirtableLoaderResponse { + records: AirtableLoaderPage[] + offset?: string +} + +interface AirtableLoaderPage { + id: string + createdTime: string + fields: ICommonObject +} + +const fetchAirtableData = async (url: string, params: ICommonObject, accessToken: string): Promise => { + try { + const headers = { + Authorization: `Bearer ${accessToken}`, + 'Content-Type': 'application/json', + Accept: 'application/json' + } + const response = await axios.get(url, { params, headers }) + return response.data + } catch (error) { + throw new Error(`Failed to fetch ${url} from Airtable: ${error}`) + } +} + +const loadAll = async (baseId: string, tableId: string, accessToken: string): Promise => { + const params: ICommonObject = { pageSize: 100 } + let data: AirtableLoaderResponse + let returnPages: AirtableLoaderPage[] = [] + + do { + data = await fetchAirtableData(`https://api.airtable.com/v0/${baseId}/${tableId}`, params, accessToken) + returnPages.push.apply(returnPages, data.records) + params.offset = data.offset + } while (data.offset !== undefined) + + return data.records.map((page) => page.fields) +} + +const loadLimit = async (limit: number, baseId: string, tableId: string, accessToken: string): Promise => { + const params = { maxRecords: limit } + const data = await fetchAirtableData(`https://api.airtable.com/v0/${baseId}/${tableId}`, params, accessToken) + if (data.records.length === 0) { + return [] + } + return data.records.map((page) => page.fields) +} + +module.exports = { nodeClass: Airtable_Agents } diff --git a/packages/components/nodes/agents/AirtableAgent/airtable.svg b/packages/components/nodes/agents/AirtableAgent/airtable.svg new file mode 100644 index 000000000..867c3b5ae --- /dev/null +++ b/packages/components/nodes/agents/AirtableAgent/airtable.svg @@ -0,0 +1,9 @@ + + + + + + + + + diff --git a/packages/components/nodes/agents/AirtableAgent/core.ts b/packages/components/nodes/agents/AirtableAgent/core.ts new file mode 100644 index 000000000..450bf5ea6 --- /dev/null +++ b/packages/components/nodes/agents/AirtableAgent/core.ts @@ -0,0 +1,29 @@ +import type { PyodideInterface } from 'pyodide' +import * as path from 'path' +import { getUserHome } from '../../../src/utils' + +let pyodideInstance: PyodideInterface | undefined + +export async function LoadPyodide(): Promise { + if (pyodideInstance === undefined) { + const { loadPyodide } = await import('pyodide') + const obj: any = { packageCacheDir: path.join(getUserHome(), '.flowise', 'pyodideCacheDir') } + pyodideInstance = await loadPyodide(obj) + await pyodideInstance.loadPackage(['pandas', 'numpy']) + } + + return pyodideInstance +} + +export const systemPrompt = `You are working with a pandas dataframe in Python. The name of the dataframe is df. + +The columns and data types of a dataframe are given below as a Python dictionary with keys showing column names and values showing the data types. +{dict} + +I will ask question, and you will output the Python code using pandas dataframe to answer my question. Do not provide any explanations. Do not respond with anything except the output of the code. + +Question: {question} +Output Code:` + +export const finalSystemPrompt = `You are given the question: {question}. You have an answer to the question: {answer}. Rephrase the answer into a standalone answer. +Standalone Answer:` diff --git a/packages/components/nodes/agents/CSVAgent/CSVAgent.ts b/packages/components/nodes/agents/CSVAgent/CSVAgent.ts index e93b52d39..dae909903 100644 --- a/packages/components/nodes/agents/CSVAgent/CSVAgent.ts +++ b/packages/components/nodes/agents/CSVAgent/CSVAgent.ts @@ -119,7 +119,7 @@ json.dumps(my_dict)` const code = `import pandas as pd\n${pythonCode}` finalResult = await pyodide.runPythonAsync(code) } catch (error) { - throw new Error(pythonCode) + throw new Error(`Sorry, I'm unable to find answer for question: "${input}" using follwoing code: "${pythonCode}"`) } } options.logger.debug('[components/CSVAgent] [3] Pyodide Result =>', finalResult) diff --git a/packages/components/nodes/agents/CSVAgent/core.ts b/packages/components/nodes/agents/CSVAgent/core.ts index 1c193091a..450bf5ea6 100644 --- a/packages/components/nodes/agents/CSVAgent/core.ts +++ b/packages/components/nodes/agents/CSVAgent/core.ts @@ -9,13 +9,7 @@ export async function LoadPyodide(): Promise { const { loadPyodide } = await import('pyodide') const obj: any = { packageCacheDir: path.join(getUserHome(), '.flowise', 'pyodideCacheDir') } pyodideInstance = await loadPyodide(obj) - await pyodideInstance.loadPackage('micropip') - const micropip = pyodideInstance.pyimport('micropip') - await micropip.install('pandas') - await micropip.install('numpy') - //let mountDir = "/mnt"; - //pyodideInstance.FS.mkdir(mountDir); - //pyodideInstance.FS.mount(pyodideInstance.FS.filesystems.NODEFS, { root: path.join(getUserHome(), '.flowise', 'pyodideFS') }, mountDir); + await pyodideInstance.loadPackage(['pandas', 'numpy']) } return pyodideInstance diff --git a/packages/server/src/utils/index.ts b/packages/server/src/utils/index.ts index 1da6a84ea..5fa33cff9 100644 --- a/packages/server/src/utils/index.ts +++ b/packages/server/src/utils/index.ts @@ -728,7 +728,7 @@ export const isFlowValidForStream = (reactFlowNodes: IReactFlowNode[], endingNod isValidChainOrAgent = !blacklistChains.includes(endingNodeData.name) } else if (endingNodeData.category === 'Agents') { // Agent that are available to stream - const whitelistAgents = ['openAIFunctionAgent', 'csvAgent'] + const whitelistAgents = ['openAIFunctionAgent', 'csvAgent', 'airtableAgent'] isValidChainOrAgent = whitelistAgents.includes(endingNodeData.name) } From c602fdf2dc0f829fe170b4078875298c9b601b52 Mon Sep 17 00:00:00 2001 From: Henry Date: Sun, 23 Jul 2023 19:00:46 +0100 Subject: [PATCH 49/57] prevent backspace delete node when dialog opened --- packages/ui/src/store/actions.js | 2 ++ packages/ui/src/store/reducers/canvasReducer.js | 13 ++++++++++++- .../ui-component/dialog/AdditionalParamsDialog.js | 8 ++++++++ .../ui/src/ui-component/dialog/ExpandTextDialog.js | 9 ++++++++- .../ui-component/dialog/FormatPromptValuesDialog.js | 10 +++++++++- packages/ui/src/views/canvas/index.js | 1 + 6 files changed, 40 insertions(+), 3 deletions(-) diff --git a/packages/ui/src/store/actions.js b/packages/ui/src/store/actions.js index 306c5cb0a..64be4918b 100644 --- a/packages/ui/src/store/actions.js +++ b/packages/ui/src/store/actions.js @@ -11,6 +11,8 @@ export const SET_DARKMODE = '@customization/SET_DARKMODE' export const SET_DIRTY = '@canvas/SET_DIRTY' export const REMOVE_DIRTY = '@canvas/REMOVE_DIRTY' export const SET_CHATFLOW = '@canvas/SET_CHATFLOW' +export const SHOW_CANVAS_DIALOG = '@canvas/SHOW_CANVAS_DIALOG' +export const HIDE_CANVAS_DIALOG = '@canvas/HIDE_CANVAS_DIALOG' // action - notifier reducer export const ENQUEUE_SNACKBAR = 'ENQUEUE_SNACKBAR' diff --git a/packages/ui/src/store/reducers/canvasReducer.js b/packages/ui/src/store/reducers/canvasReducer.js index e98805bb1..8dfae5277 100644 --- a/packages/ui/src/store/reducers/canvasReducer.js +++ b/packages/ui/src/store/reducers/canvasReducer.js @@ -3,7 +3,8 @@ import * as actionTypes from '../actions' export const initialState = { isDirty: false, - chatflow: null + chatflow: null, + canvasDialogShow: false } // ==============================|| CANVAS REDUCER ||============================== // @@ -25,6 +26,16 @@ const canvasReducer = (state = initialState, action) => { ...state, chatflow: action.chatflow } + case actionTypes.SHOW_CANVAS_DIALOG: + return { + ...state, + canvasDialogShow: true + } + case actionTypes.HIDE_CANVAS_DIALOG: + return { + ...state, + canvasDialogShow: false + } default: return state } diff --git a/packages/ui/src/ui-component/dialog/AdditionalParamsDialog.js b/packages/ui/src/ui-component/dialog/AdditionalParamsDialog.js index 66a1eaf64..364706f41 100644 --- a/packages/ui/src/ui-component/dialog/AdditionalParamsDialog.js +++ b/packages/ui/src/ui-component/dialog/AdditionalParamsDialog.js @@ -1,12 +1,15 @@ import { createPortal } from 'react-dom' +import { useDispatch } from 'react-redux' import { useState, useEffect } from 'react' import PropTypes from 'prop-types' import { Dialog, DialogContent } from '@mui/material' import PerfectScrollbar from 'react-perfect-scrollbar' import NodeInputHandler from 'views/canvas/NodeInputHandler' +import { HIDE_CANVAS_DIALOG, SHOW_CANVAS_DIALOG } from 'store/actions' const AdditionalParamsDialog = ({ show, dialogProps, onCancel }) => { const portalElement = document.getElementById('portal') + const dispatch = useDispatch() const [inputParams, setInputParams] = useState([]) const [data, setData] = useState({}) @@ -21,6 +24,11 @@ const AdditionalParamsDialog = ({ show, dialogProps, onCancel }) => { } }, [dialogProps]) + useEffect(() => { + if (show) dispatch({ type: SHOW_CANVAS_DIALOG }) + else dispatch({ type: HIDE_CANVAS_DIALOG }) + }, [show, dispatch]) + const component = show ? ( { const portalElement = document.getElementById('portal') const theme = useTheme() + const dispatch = useDispatch() const customization = useSelector((state) => state.customization) const languageType = 'json' @@ -31,6 +33,11 @@ const ExpandTextDialog = ({ show, dialogProps, onCancel, onConfirm }) => { } }, [dialogProps]) + useEffect(() => { + if (show) dispatch({ type: SHOW_CANVAS_DIALOG }) + else dispatch({ type: HIDE_CANVAS_DIALOG }) + }, [show, dispatch]) + const component = show ? ( diff --git a/packages/ui/src/ui-component/dialog/FormatPromptValuesDialog.js b/packages/ui/src/ui-component/dialog/FormatPromptValuesDialog.js index df1d357ed..95f833c95 100644 --- a/packages/ui/src/ui-component/dialog/FormatPromptValuesDialog.js +++ b/packages/ui/src/ui-component/dialog/FormatPromptValuesDialog.js @@ -1,13 +1,21 @@ +import { useEffect } from 'react' import { createPortal } from 'react-dom' -import { useSelector } from 'react-redux' +import { useSelector, useDispatch } from 'react-redux' import PropTypes from 'prop-types' import { Dialog, DialogContent, DialogTitle } from '@mui/material' import PerfectScrollbar from 'react-perfect-scrollbar' import { JsonEditorInput } from 'ui-component/json/JsonEditor' +import { HIDE_CANVAS_DIALOG, SHOW_CANVAS_DIALOG } from 'store/actions' const FormatPromptValuesDialog = ({ show, dialogProps, onChange, onCancel }) => { const portalElement = document.getElementById('portal') const customization = useSelector((state) => state.customization) + const dispatch = useDispatch() + + useEffect(() => { + if (show) dispatch({ type: SHOW_CANVAS_DIALOG }) + else dispatch({ type: HIDE_CANVAS_DIALOG }) + }, [show, dispatch]) const component = show ? ( { onConnect={onConnect} onInit={setReactFlowInstance} fitView + deleteKeyCode={canvas.canvasDialogShow ? null : ['Backspace', 'Delete']} minZoom={0.1} > Date: Mon, 24 Jul 2023 19:11:39 +0100 Subject: [PATCH 50/57] - add refine chain type custom system message - allow all memory type to conver_re_qa_chain - fix startsWith undefined where override config file is not passed - ability to generate new session id when sharing chatbot --- .../ConversationalRetrievalQAChain.ts | 58 ++- .../ConversationalRetrievalQAChain/prompts.ts | 31 +- .../Conversational Retrieval QA Chain.json | 429 +++++++++--------- packages/server/src/ChildProcess.ts | 12 +- packages/server/src/index.ts | 5 +- packages/server/src/utils/index.ts | 9 +- packages/ui/src/views/canvas/CanvasHeader.js | 20 +- packages/ui/src/views/chatbot/index.js | 19 +- .../ui/src/views/chatflows/APICodeDialog.js | 4 +- .../ui/src/views/chatflows/ShareChatbot.js | 26 +- 10 files changed, 373 insertions(+), 240 deletions(-) diff --git a/packages/components/nodes/chains/ConversationalRetrievalQAChain/ConversationalRetrievalQAChain.ts b/packages/components/nodes/chains/ConversationalRetrievalQAChain/ConversationalRetrievalQAChain.ts index 8ec663f9a..3ac99bc3b 100644 --- a/packages/components/nodes/chains/ConversationalRetrievalQAChain/ConversationalRetrievalQAChain.ts +++ b/packages/components/nodes/chains/ConversationalRetrievalQAChain/ConversationalRetrievalQAChain.ts @@ -1,9 +1,9 @@ import { BaseLanguageModel } from 'langchain/base_language' import { ICommonObject, IMessage, INode, INodeData, INodeParams } from '../../../src/Interface' import { getBaseClasses } from '../../../src/utils' -import { ConversationalRetrievalQAChain } from 'langchain/chains' +import { ConversationalRetrievalQAChain, QAChainParams } from 'langchain/chains' import { AIMessage, BaseRetriever, HumanMessage } from 'langchain/schema' -import { BaseChatMemory, BufferMemory, ChatMessageHistory } from 'langchain/memory' +import { BaseChatMemory, BufferMemory, ChatMessageHistory, BufferMemoryInput } from 'langchain/memory' import { PromptTemplate } from 'langchain/prompts' import { ConsoleCallbackHandler, CustomChainHandler } from '../../../src/handler' import { @@ -11,7 +11,9 @@ import { default_qa_template, qa_template, map_reduce_template, - CUSTOM_QUESTION_GENERATOR_CHAIN_PROMPT + CUSTOM_QUESTION_GENERATOR_CHAIN_PROMPT, + refine_question_template, + refine_template } from './prompts' class ConversationalRetrievalQAChain_Chains implements INode { @@ -46,9 +48,9 @@ class ConversationalRetrievalQAChain_Chains implements INode { { label: 'Memory', name: 'memory', - type: 'DynamoDBChatMemory | RedisBackedChatMemory | ZepMemory', + type: 'BaseMemory', optional: true, - description: 'If no memory connected, default BufferMemory will be used' + description: 'If left empty, a default BufferMemory will be used' }, { label: 'Return Source Documents', @@ -115,28 +117,43 @@ class ConversationalRetrievalQAChain_Chains implements INode { combinePrompt: PromptTemplate.fromTemplate( systemMessagePrompt ? `${systemMessagePrompt}\n${map_reduce_template}` : default_map_reduce_template ) - } + } as QAChainParams } else if (chainOption === 'refine') { - // TODO: Add custom system message + const qprompt = new PromptTemplate({ + inputVariables: ['context', 'question'], + template: refine_question_template(systemMessagePrompt) + }) + const rprompt = new PromptTemplate({ + inputVariables: ['context', 'question', 'existing_answer'], + template: refine_template + }) + obj.qaChainOptions = { + type: 'refine', + questionPrompt: qprompt, + refinePrompt: rprompt + } as QAChainParams } else { obj.qaChainOptions = { type: 'stuff', prompt: PromptTemplate.fromTemplate(systemMessagePrompt ? `${systemMessagePrompt}\n${qa_template}` : default_qa_template) - } + } as QAChainParams } if (memory) { memory.inputKey = 'question' - memory.outputKey = 'text' memory.memoryKey = 'chat_history' + if (chainOption === 'refine') memory.outputKey = 'output_text' + else memory.outputKey = 'text' obj.memory = memory } else { - obj.memory = new BufferMemory({ + const fields: BufferMemoryInput = { memoryKey: 'chat_history', inputKey: 'question', - outputKey: 'text', returnMessages: true - }) + } + if (chainOption === 'refine') fields.outputKey = 'output_text' + else fields.outputKey = 'text' + obj.memory = new BufferMemory(fields) } const chain = ConversationalRetrievalQAChain.fromLLM(model, vectorStoreRetriever, obj) @@ -147,6 +164,7 @@ class ConversationalRetrievalQAChain_Chains implements INode { const chain = nodeData.instance as ConversationalRetrievalQAChain const returnSourceDocuments = nodeData.inputs?.returnSourceDocuments as boolean const memory = nodeData.inputs?.memory + const chainOption = nodeData.inputs?.chainOption as string let model = nodeData.inputs?.model @@ -176,8 +194,22 @@ class ConversationalRetrievalQAChain_Chains implements INode { const loggerHandler = new ConsoleCallbackHandler(options.logger) if (options.socketIO && options.socketIOClientId) { - const handler = new CustomChainHandler(options.socketIO, options.socketIOClientId, undefined, returnSourceDocuments) + const handler = new CustomChainHandler( + options.socketIO, + options.socketIOClientId, + chainOption === 'refine' ? 4 : undefined, + returnSourceDocuments + ) const res = await chain.call(obj, [loggerHandler, handler]) + if (chainOption === 'refine') { + if (res.output_text && res.sourceDocuments) { + return { + text: res.output_text, + sourceDocuments: res.sourceDocuments + } + } + return res?.output_text + } if (res.text && res.sourceDocuments) return res return res?.text } else { diff --git a/packages/components/nodes/chains/ConversationalRetrievalQAChain/prompts.ts b/packages/components/nodes/chains/ConversationalRetrievalQAChain/prompts.ts index 66b80f470..132e3a97e 100644 --- a/packages/components/nodes/chains/ConversationalRetrievalQAChain/prompts.ts +++ b/packages/components/nodes/chains/ConversationalRetrievalQAChain/prompts.ts @@ -27,7 +27,36 @@ export const map_reduce_template = `Given the following extracted parts of a lon Question: {question} Helpful Answer:` -export const CUSTOM_QUESTION_GENERATOR_CHAIN_PROMPT = `Given the following conversation and a follow up question, rephrase the follow up question to be a standalone question, in its original language. include it in the standalone question. +export const refine_question_template = (sysPrompt?: string) => { + let returnPrompt = '' + if (sysPrompt) + returnPrompt = `Context information is below. +--------------------- +{context} +--------------------- +Given the context information and not prior knowledge, ${sysPrompt} +Answer the question: {question}. +Answer:` + if (!sysPrompt) + returnPrompt = `Context information is below. +--------------------- +{context} +--------------------- +Given the context information and not prior knowledge, answer the question: {question}. +Answer:` + return returnPrompt +} + +export const refine_template = `The original question is as follows: {question} +We have provided an existing answer: {existing_answer} +We have the opportunity to refine the existing answer (only if needed) with some more context below. +------------ +{context} +------------ +Given the new context, refine the original answer to better answer the question. +If you can't find answer from the context, return the original answer.` + +export const CUSTOM_QUESTION_GENERATOR_CHAIN_PROMPT = `Given the following conversation and a follow up question, rephrase the follow up question to be a standalone question, answer in the same language as the follow up question. include it in the standalone question. Chat History: {chat_history} diff --git a/packages/server/marketplaces/chatflows/Conversational Retrieval QA Chain.json b/packages/server/marketplaces/chatflows/Conversational Retrieval QA Chain.json index e420fefe9..e267214e7 100644 --- a/packages/server/marketplaces/chatflows/Conversational Retrieval QA Chain.json +++ b/packages/server/marketplaces/chatflows/Conversational Retrieval QA Chain.json @@ -58,70 +58,6 @@ }, "dragging": false }, - { - "width": 300, - "height": 392, - "id": "textFile_1", - "position": { - "x": 810.6456923854021, - "y": 61.45989039390216 - }, - "type": "customNode", - "data": { - "id": "textFile_1", - "label": "Text File", - "name": "textFile", - "type": "Document", - "baseClasses": ["Document"], - "category": "Document Loaders", - "description": "Load data from text files", - "inputParams": [ - { - "label": "Txt File", - "name": "txtFile", - "type": "file", - "fileType": ".txt", - "id": "textFile_1-input-txtFile-file" - }, - { - "label": "Metadata", - "name": "metadata", - "type": "json", - "optional": true, - "additionalParams": true, - "id": "textFile_1-input-metadata-json" - } - ], - "inputAnchors": [ - { - "label": "Text Splitter", - "name": "textSplitter", - "type": "TextSplitter", - "optional": true, - "id": "textFile_1-input-textSplitter-TextSplitter" - } - ], - "inputs": { - "textSplitter": "{{recursiveCharacterTextSplitter_1.data.instance}}" - }, - "outputAnchors": [ - { - "id": "textFile_1-output-textFile-Document", - "name": "textFile", - "label": "Document", - "type": "Document" - } - ], - "outputs": {}, - "selected": false - }, - "selected": false, - "positionAbsolute": { - "x": 810.6456923854021, - "y": 61.45989039390216 - }, - "dragging": false - }, { "width": 300, "height": 330, @@ -203,118 +139,6 @@ }, "dragging": false }, - { - "width": 300, - "height": 702, - "id": "pineconeUpsert_1", - "position": { - "x": 1201.3427203075867, - "y": 545.1800202023215 - }, - "type": "customNode", - "data": { - "id": "pineconeUpsert_1", - "label": "Pinecone Upsert Document", - "name": "pineconeUpsert", - "type": "Pinecone", - "baseClasses": ["Pinecone", "VectorStoreRetriever", "BaseRetriever"], - "category": "Vector Stores", - "description": "Upsert documents to Pinecone", - "inputParams": [ - { - "label": "Pinecone Api Key", - "name": "pineconeApiKey", - "type": "password", - "id": "pineconeUpsert_1-input-pineconeApiKey-password" - }, - { - "label": "Pinecone Environment", - "name": "pineconeEnv", - "type": "string", - "id": "pineconeUpsert_1-input-pineconeEnv-string" - }, - { - "label": "Pinecone Index", - "name": "pineconeIndex", - "type": "string", - "id": "pineconeUpsert_1-input-pineconeIndex-string" - }, - { - "label": "Pinecone Namespace", - "name": "pineconeNamespace", - "type": "string", - "placeholder": "my-first-namespace", - "optional": true, - "additionalParams": true, - "id": "pineconeUpsert_1-input-pineconeNamespace-string" - }, - { - "label": "Top K", - "name": "topK", - "description": "Number of top results to fetch. Default to 4", - "placeholder": "4", - "type": "number", - "additionalParams": true, - "optional": true, - "id": "pineconeUpsert_1-input-topK-number" - } - ], - "inputAnchors": [ - { - "label": "Document", - "name": "document", - "type": "Document", - "list": true, - "id": "pineconeUpsert_1-input-document-Document" - }, - { - "label": "Embeddings", - "name": "embeddings", - "type": "Embeddings", - "id": "pineconeUpsert_1-input-embeddings-Embeddings" - } - ], - "inputs": { - "document": ["{{textFile_1.data.instance}}"], - "embeddings": "{{openAIEmbeddings_1.data.instance}}", - "pineconeEnv": "us-west4-gcp", - "pineconeIndex": "myindex", - "pineconeNamespace": "mynamespace" - }, - "outputAnchors": [ - { - "name": "output", - "label": "Output", - "type": "options", - "options": [ - { - "id": "pineconeUpsert_1-output-retriever-Pinecone|VectorStoreRetriever|BaseRetriever", - "name": "retriever", - "label": "Pinecone Retriever", - "type": "Pinecone | VectorStoreRetriever | BaseRetriever" - }, - { - "id": "pineconeUpsert_1-output-vectorStore-Pinecone|VectorStore", - "name": "vectorStore", - "label": "Pinecone Vector Store", - "type": "Pinecone | VectorStore" - } - ], - "default": "retriever" - } - ], - "outputs": { - "output": "retriever" - }, - "selected": false - }, - "selected": false, - "dragging": false, - "positionAbsolute": { - "x": 1201.3427203075867, - "y": 545.1800202023215 - } - }, { "width": 300, "height": 524, @@ -468,7 +292,7 @@ }, { "width": 300, - "height": 280, + "height": 480, "id": "conversationalRetrievalQAChain_0", "position": { "x": 1627.1855024401737, @@ -551,7 +375,7 @@ ], "inputs": { "model": "{{chatOpenAI_0.data.instance}}", - "vectorStoreRetriever": "{{pineconeUpsert_1.data.instance}}" + "vectorStoreRetriever": "{{pineconeUpsert_0.data.instance}}" }, "outputAnchors": [ { @@ -570,42 +394,186 @@ "y": 394.42287890442145 }, "dragging": false + }, + { + "width": 300, + "height": 411, + "id": "textFile_0", + "position": { + "x": 806.1207502345, + "y": 98.75458062792087 + }, + "type": "customNode", + "data": { + "id": "textFile_0", + "label": "Text File", + "name": "textFile", + "type": "Document", + "baseClasses": ["Document"], + "category": "Document Loaders", + "description": "Load data from text files", + "inputParams": [ + { + "label": "Txt File", + "name": "txtFile", + "type": "file", + "fileType": ".txt", + "id": "textFile_0-input-txtFile-file" + }, + { + "label": "Metadata", + "name": "metadata", + "type": "json", + "optional": true, + "additionalParams": true, + "id": "textFile_0-input-metadata-json" + } + ], + "inputAnchors": [ + { + "label": "Text Splitter", + "name": "textSplitter", + "type": "TextSplitter", + "optional": true, + "id": "textFile_0-input-textSplitter-TextSplitter" + } + ], + "inputs": { + "textSplitter": "{{recursiveCharacterTextSplitter_1.data.instance}}", + "metadata": "" + }, + "outputAnchors": [ + { + "id": "textFile_0-output-textFile-Document", + "name": "textFile", + "label": "Document", + "type": "Document" + } + ], + "outputs": {}, + "selected": false + }, + "positionAbsolute": { + "x": 806.1207502345, + "y": 98.75458062792087 + }, + "selected": false + }, + { + "width": 300, + "height": 655, + "id": "pineconeUpsert_0", + "position": { + "x": 1206.7979889462367, + "y": 526.4616330622748 + }, + "type": "customNode", + "data": { + "id": "pineconeUpsert_0", + "label": "Pinecone Upsert Document", + "name": "pineconeUpsert", + "type": "Pinecone", + "baseClasses": ["Pinecone", "VectorStoreRetriever", "BaseRetriever"], + "category": "Vector Stores", + "description": "Upsert documents to Pinecone", + "inputParams": [ + { + "label": "Pinecone Api Key", + "name": "pineconeApiKey", + "type": "password", + "id": "pineconeUpsert_0-input-pineconeApiKey-password" + }, + { + "label": "Pinecone Environment", + "name": "pineconeEnv", + "type": "string", + "id": "pineconeUpsert_0-input-pineconeEnv-string" + }, + { + "label": "Pinecone Index", + "name": "pineconeIndex", + "type": "string", + "id": "pineconeUpsert_0-input-pineconeIndex-string" + }, + { + "label": "Pinecone Namespace", + "name": "pineconeNamespace", + "type": "string", + "placeholder": "my-first-namespace", + "additionalParams": true, + "optional": true, + "id": "pineconeUpsert_0-input-pineconeNamespace-string" + }, + { + "label": "Top K", + "name": "topK", + "description": "Number of top results to fetch. Default to 4", + "placeholder": "4", + "type": "number", + "additionalParams": true, + "optional": true, + "id": "pineconeUpsert_0-input-topK-number" + } + ], + "inputAnchors": [ + { + "label": "Document", + "name": "document", + "type": "Document", + "list": true, + "id": "pineconeUpsert_0-input-document-Document" + }, + { + "label": "Embeddings", + "name": "embeddings", + "type": "Embeddings", + "id": "pineconeUpsert_0-input-embeddings-Embeddings" + } + ], + "inputs": { + "document": ["{{textFile_0.data.instance}}"], + "embeddings": "{{openAIEmbeddings_1.data.instance}}", + "pineconeEnv": "", + "pineconeIndex": "", + "pineconeNamespace": "", + "topK": "" + }, + "outputAnchors": [ + { + "name": "output", + "label": "Output", + "type": "options", + "options": [ + { + "id": "pineconeUpsert_0-output-retriever-Pinecone|VectorStoreRetriever|BaseRetriever", + "name": "retriever", + "label": "Pinecone Retriever", + "type": "Pinecone | VectorStoreRetriever | BaseRetriever" + }, + { + "id": "pineconeUpsert_0-output-vectorStore-Pinecone|VectorStore", + "name": "vectorStore", + "label": "Pinecone Vector Store", + "type": "Pinecone | VectorStore" + } + ], + "default": "retriever" + } + ], + "outputs": { + "output": "retriever" + }, + "selected": false + }, + "selected": false, + "positionAbsolute": { + "x": 1206.7979889462367, + "y": 526.4616330622748 + }, + "dragging": false } ], "edges": [ - { - "source": "openAIEmbeddings_1", - "sourceHandle": "openAIEmbeddings_1-output-openAIEmbeddings-OpenAIEmbeddings|Embeddings", - "target": "pineconeUpsert_1", - "targetHandle": "pineconeUpsert_1-input-embeddings-Embeddings", - "type": "buttonedge", - "id": "openAIEmbeddings_1-openAIEmbeddings_1-output-openAIEmbeddings-OpenAIEmbeddings|Embeddings-pineconeUpsert_1-pineconeUpsert_1-input-embeddings-Embeddings", - "data": { - "label": "" - } - }, - { - "source": "textFile_1", - "sourceHandle": "textFile_1-output-textFile-Document", - "target": "pineconeUpsert_1", - "targetHandle": "pineconeUpsert_1-input-document-Document", - "type": "buttonedge", - "id": "textFile_1-textFile_1-output-textFile-Document-pineconeUpsert_1-pineconeUpsert_1-input-document-Document", - "data": { - "label": "" - } - }, - { - "source": "recursiveCharacterTextSplitter_1", - "sourceHandle": "recursiveCharacterTextSplitter_1-output-recursiveCharacterTextSplitter-RecursiveCharacterTextSplitter|TextSplitter", - "target": "textFile_1", - "targetHandle": "textFile_1-input-textSplitter-TextSplitter", - "type": "buttonedge", - "id": "recursiveCharacterTextSplitter_1-recursiveCharacterTextSplitter_1-output-recursiveCharacterTextSplitter-RecursiveCharacterTextSplitter|TextSplitter-textFile_1-textFile_1-input-textSplitter-TextSplitter", - "data": { - "label": "" - } - }, { "source": "chatOpenAI_0", "sourceHandle": "chatOpenAI_0-output-chatOpenAI-ChatOpenAI|BaseChatModel|BaseLanguageModel|BaseLangChain", @@ -618,12 +586,45 @@ } }, { - "source": "pineconeUpsert_1", - "sourceHandle": "pineconeUpsert_1-output-retriever-Pinecone|VectorStoreRetriever|BaseRetriever", + "source": "recursiveCharacterTextSplitter_1", + "sourceHandle": "recursiveCharacterTextSplitter_1-output-recursiveCharacterTextSplitter-RecursiveCharacterTextSplitter|TextSplitter", + "target": "textFile_0", + "targetHandle": "textFile_0-input-textSplitter-TextSplitter", + "type": "buttonedge", + "id": "recursiveCharacterTextSplitter_1-recursiveCharacterTextSplitter_1-output-recursiveCharacterTextSplitter-RecursiveCharacterTextSplitter|TextSplitter-textFile_0-textFile_0-input-textSplitter-TextSplitter", + "data": { + "label": "" + } + }, + { + "source": "textFile_0", + "sourceHandle": "textFile_0-output-textFile-Document", + "target": "pineconeUpsert_0", + "targetHandle": "pineconeUpsert_0-input-document-Document", + "type": "buttonedge", + "id": "textFile_0-textFile_0-output-textFile-Document-pineconeUpsert_0-pineconeUpsert_0-input-document-Document", + "data": { + "label": "" + } + }, + { + "source": "openAIEmbeddings_1", + "sourceHandle": "openAIEmbeddings_1-output-openAIEmbeddings-OpenAIEmbeddings|Embeddings", + "target": "pineconeUpsert_0", + "targetHandle": "pineconeUpsert_0-input-embeddings-Embeddings", + "type": "buttonedge", + "id": "openAIEmbeddings_1-openAIEmbeddings_1-output-openAIEmbeddings-OpenAIEmbeddings|Embeddings-pineconeUpsert_0-pineconeUpsert_0-input-embeddings-Embeddings", + "data": { + "label": "" + } + }, + { + "source": "pineconeUpsert_0", + "sourceHandle": "pineconeUpsert_0-output-retriever-Pinecone|VectorStoreRetriever|BaseRetriever", "target": "conversationalRetrievalQAChain_0", "targetHandle": "conversationalRetrievalQAChain_0-input-vectorStoreRetriever-BaseRetriever", "type": "buttonedge", - "id": "pineconeUpsert_1-pineconeUpsert_1-output-retriever-Pinecone|VectorStoreRetriever|BaseRetriever-conversationalRetrievalQAChain_0-conversationalRetrievalQAChain_0-input-vectorStoreRetriever-BaseRetriever", + "id": "pineconeUpsert_0-pineconeUpsert_0-output-retriever-Pinecone|VectorStoreRetriever|BaseRetriever-conversationalRetrievalQAChain_0-conversationalRetrievalQAChain_0-input-vectorStoreRetriever-BaseRetriever", "data": { "label": "" } diff --git a/packages/server/src/ChildProcess.ts b/packages/server/src/ChildProcess.ts index f0117b6dc..2228cda63 100644 --- a/packages/server/src/ChildProcess.ts +++ b/packages/server/src/ChildProcess.ts @@ -1,6 +1,14 @@ import path from 'path' import { IChildProcessMessage, IReactFlowNode, IReactFlowObject, IRunChatflowMessageValue, INodeData } from './Interface' -import { buildLangchain, constructGraphs, getEndingNode, getStartingNodes, getUserHome, resolveVariables } from './utils' +import { + buildLangchain, + constructGraphs, + getEndingNode, + getStartingNodes, + getUserHome, + replaceInputsWithConfig, + resolveVariables +} from './utils' import { DataSource } from 'typeorm' import { ChatFlow } from './entity/ChatFlow' import { ChatMessage } from './entity/ChatMessage' @@ -109,6 +117,8 @@ export class ChildProcess { return } + if (incomingInput.overrideConfig) + nodeToExecute.data = replaceInputsWithConfig(nodeToExecute.data, incomingInput.overrideConfig) const reactFlowNodeData: INodeData = resolveVariables(nodeToExecute.data, reactFlowNodes, incomingInput.question) nodeToExecuteData = reactFlowNodeData diff --git a/packages/server/src/index.ts b/packages/server/src/index.ts index aece8b6fb..6746278ef 100644 --- a/packages/server/src/index.ts +++ b/packages/server/src/index.ts @@ -40,7 +40,8 @@ import { isVectorStoreFaiss, databaseEntities, getApiKey, - clearSessionMemory + clearSessionMemory, + replaceInputsWithConfig } from './utils' import { cloneDeep } from 'lodash' import { getDataSource } from './DataSource' @@ -819,6 +820,8 @@ export class App { const nodeToExecute = reactFlowNodes.find((node: IReactFlowNode) => node.id === endingNodeId) if (!nodeToExecute) return res.status(404).send(`Node ${endingNodeId} not found`) + if (incomingInput.overrideConfig) + nodeToExecute.data = replaceInputsWithConfig(nodeToExecute.data, incomingInput.overrideConfig) const reactFlowNodeData: INodeData = resolveVariables(nodeToExecute.data, reactFlowNodes, incomingInput.question) nodeToExecuteData = reactFlowNodeData diff --git a/packages/server/src/utils/index.ts b/packages/server/src/utils/index.ts index 5fa33cff9..8e743031b 100644 --- a/packages/server/src/utils/index.ts +++ b/packages/server/src/utils/index.ts @@ -428,9 +428,12 @@ export const replaceInputsWithConfig = (flowNodeData: INodeData, overrideConfig: const types = 'inputs' const getParamValues = (paramsObj: ICommonObject) => { - for (const key in paramsObj) { - const paramValue: string = paramsObj[key] - paramsObj[key] = overrideConfig[key] ?? paramValue + for (const config in overrideConfig) { + let paramValue = overrideConfig[config] ?? paramsObj[config] + // Check if boolean + if (paramValue === 'true') paramValue = true + else if (paramValue === 'false') paramValue = false + paramsObj[config] = paramValue } } diff --git a/packages/ui/src/views/canvas/CanvasHeader.js b/packages/ui/src/views/canvas/CanvasHeader.js index 1c1e5212d..d25635325 100644 --- a/packages/ui/src/views/canvas/CanvasHeader.js +++ b/packages/ui/src/views/canvas/CanvasHeader.js @@ -90,8 +90,8 @@ const CanvasHeader = ({ chatflow, handleSaveFlow, handleDeleteFlow, handleLoadFl } const onAPIDialogClick = () => { + // If file type is file, isFormDataRequired = true let isFormDataRequired = false - try { const flowData = JSON.parse(chatflow.flowData) const nodes = flowData.nodes @@ -105,11 +105,27 @@ const CanvasHeader = ({ chatflow, handleSaveFlow, handleDeleteFlow, handleLoadFl console.error(e) } + // If sessionId memory, isSessionMemory = true + let isSessionMemory = false + try { + const flowData = JSON.parse(chatflow.flowData) + const nodes = flowData.nodes + for (const node of nodes) { + if (node.data.inputParams.find((param) => param.name === 'sessionId')) { + isSessionMemory = true + break + } + } + } catch (e) { + console.error(e) + } + setAPIDialogProps({ title: 'Embed in website or use as API', chatflowid: chatflow.id, chatflowApiKeyId: chatflow.apikeyid, - isFormDataRequired + isFormDataRequired, + isSessionMemory }) setAPIDialogOpen(true) } diff --git a/packages/ui/src/views/chatbot/index.js b/packages/ui/src/views/chatbot/index.js index f29c35ee1..2b5721e79 100644 --- a/packages/ui/src/views/chatbot/index.js +++ b/packages/ui/src/views/chatbot/index.js @@ -26,6 +26,7 @@ const ChatbotFull = () => { const [loginDialogOpen, setLoginDialogOpen] = useState(false) const [loginDialogProps, setLoginDialogProps] = useState({}) const [isLoading, setLoading] = useState(true) + const [chatbotOverrideConfig, setChatbotOverrideConfig] = useState({}) const getSpecificChatflowFromPublicApi = useApi(chatflowsApi.getSpecificChatflowFromPublicEndpoint) const getSpecificChatflowApi = useApi(chatflowsApi.getSpecificChatflow) @@ -77,10 +78,19 @@ const ChatbotFull = () => { setChatflow(chatflowData) if (chatflowData.chatbotConfig) { try { - setChatbotTheme(JSON.parse(chatflowData.chatbotConfig)) + const parsedConfig = JSON.parse(chatflowData.chatbotConfig) + setChatbotTheme(parsedConfig) + if (parsedConfig.overrideConfig) { + // Generate new sessionId + if (parsedConfig.overrideConfig.generateNewSession) { + parsedConfig.overrideConfig.sessionId = Date.now().toString() + } + setChatbotOverrideConfig(parsedConfig.overrideConfig) + } } catch (e) { console.error(e) setChatbotTheme({}) + setChatbotOverrideConfig({}) } } } @@ -97,7 +107,12 @@ const ChatbotFull = () => { {!chatflow || chatflow.apikeyid ? (

Invalid Chatbot

) : ( - + )} diff --git a/packages/ui/src/views/chatflows/APICodeDialog.js b/packages/ui/src/views/chatflows/APICodeDialog.js index 716ac3ff2..994f75526 100644 --- a/packages/ui/src/views/chatflows/APICodeDialog.js +++ b/packages/ui/src/views/chatflows/APICodeDialog.js @@ -612,7 +612,9 @@ query({ )} )} - {codeLang === 'Share Chatbot' && !chatflowApiKeyId && } + {codeLang === 'Share Chatbot' && !chatflowApiKeyId && ( + + )} ))}
diff --git a/packages/ui/src/views/chatflows/ShareChatbot.js b/packages/ui/src/views/chatflows/ShareChatbot.js index 51e12e545..0f05c28ab 100644 --- a/packages/ui/src/views/chatflows/ShareChatbot.js +++ b/packages/ui/src/views/chatflows/ShareChatbot.js @@ -2,6 +2,7 @@ import { useState } from 'react' import { useDispatch, useSelector } from 'react-redux' import { enqueueSnackbar as enqueueSnackbarAction, closeSnackbar as closeSnackbarAction, SET_CHATFLOW } from 'store/actions' import { SketchPicker } from 'react-color' +import PropTypes from 'prop-types' import { Box, Typography, Button, Switch, OutlinedInput, Popover, Stack, IconButton } from '@mui/material' import { useTheme } from '@mui/material/styles' @@ -41,7 +42,7 @@ const defaultConfig = { } } -const ShareChatbot = () => { +const ShareChatbot = ({ isSessionMemory }) => { const dispatch = useDispatch() const theme = useTheme() const chatflow = useSelector((state) => state.canvas.chatflow) @@ -54,6 +55,7 @@ const ShareChatbot = () => { const closeSnackbar = (...args) => dispatch(closeSnackbarAction(...args)) const [isPublicChatflow, setChatflowIsPublic] = useState(chatflow.isPublic ?? false) + const [generateNewSession, setGenerateNewSession] = useState(chatbotConfig?.generateNewSession ?? false) const [welcomeMessage, setWelcomeMessage] = useState(chatbotConfig?.welcomeMessage ?? '') const [backgroundColor, setBackgroundColor] = useState(chatbotConfig?.backgroundColor ?? defaultConfig.backgroundColor) @@ -103,7 +105,8 @@ const ShareChatbot = () => { userMessage: { showAvatar: false }, - textInput: {} + textInput: {}, + overrideConfig: {} } if (welcomeMessage) obj.welcomeMessage = welcomeMessage if (backgroundColor) obj.backgroundColor = backgroundColor @@ -125,6 +128,8 @@ const ShareChatbot = () => { if (textInputPlaceholder) obj.textInput.placeholder = textInputPlaceholder if (textInputSendButtonColor) obj.textInput.sendButtonColor = textInputSendButtonColor + if (isSessionMemory) obj.overrideConfig.generateNewSession = generateNewSession + return obj } @@ -273,6 +278,9 @@ const ShareChatbot = () => { case 'userMessageShowAvatar': setUserMessageShowAvatar(value) break + case 'generateNewSession': + setGenerateNewSession(value) + break } } @@ -431,6 +439,16 @@ const ShareChatbot = () => { {textField(textInputPlaceholder, 'textInputPlaceholder', 'TextInput Placeholder', 'string', `Type question..`)} {colorField(textInputSendButtonColor, 'textInputSendButtonColor', 'TextIntput Send Button Color')} + {/*Session Memory Input*/} + {isSessionMemory && ( + <> + + Session Memory + + {booleanField(generateNewSession, 'generateNewSession', 'Start new session when chatbot link is opened or refreshed')} + + )} + onSave()}> Save Changes @@ -470,4 +488,8 @@ const ShareChatbot = () => { ) } +ShareChatbot.propTypes = { + isSessionMemory: PropTypes.bool +} + export default ShareChatbot From 2f10d46abcd41cfe2f6b280260ba95f9815c05ce Mon Sep 17 00:00:00 2001 From: Henry Date: Tue, 25 Jul 2023 00:32:50 +0100 Subject: [PATCH 51/57] add handleEscapeChar --- .../nodes/chains/LLMChain/LLMChain.ts | 19 ++++++++--- .../ChatPromptTemplate/ChatPromptTemplate.ts | 2 +- .../FewShotPromptTemplate.ts | 2 +- .../prompts/PromptTemplate/PromptTemplate.ts | 2 +- packages/components/src/utils.ts | 34 +++++++++++++++++++ packages/components/tsconfig.json | 2 +- packages/server/src/utils/index.ts | 9 +++-- 7 files changed, 60 insertions(+), 10 deletions(-) diff --git a/packages/components/nodes/chains/LLMChain/LLMChain.ts b/packages/components/nodes/chains/LLMChain/LLMChain.ts index 1d0ccb92d..eca56d318 100644 --- a/packages/components/nodes/chains/LLMChain/LLMChain.ts +++ b/packages/components/nodes/chains/LLMChain/LLMChain.ts @@ -1,5 +1,5 @@ import { ICommonObject, INode, INodeData, INodeOutputsValue, INodeParams } from '../../../src/Interface' -import { getBaseClasses } from '../../../src/utils' +import { getBaseClasses, handleEscapeCharacters } from '../../../src/utils' import { LLMChain } from 'langchain/chains' import { BaseLanguageModel } from 'langchain/base_language' import { ConsoleCallbackHandler, CustomChainHandler } from '../../../src/handler' @@ -73,7 +73,12 @@ class LLMChain_Chains implements INode { console.log('\x1b[92m\x1b[1m\n*****OUTPUT PREDICTION*****\n\x1b[0m\x1b[0m') // eslint-disable-next-line no-console console.log(res) - return res + /** + * Apply string transformation to convert special chars: + * FROM: hello i am ben\n\n\thow are you? + * TO: hello i am benFLOWISE_NEWLINEFLOWISE_NEWLINEFLOWISE_TABhow are you? + */ + return handleEscapeCharacters(res, false) } } @@ -81,7 +86,6 @@ class LLMChain_Chains implements INode { const inputVariables = nodeData.instance.prompt.inputVariables as string[] // ["product"] const chain = nodeData.instance as LLMChain const promptValues = nodeData.inputs?.prompt.promptValues as ICommonObject - const res = await runPrediction(inputVariables, chain, input, promptValues, options) // eslint-disable-next-line no-console console.log('\x1b[93m\x1b[1m\n*****FINAL RESULT*****\n\x1b[0m\x1b[0m') @@ -95,7 +99,7 @@ const runPrediction = async ( inputVariables: string[], chain: LLMChain, input: string, - promptValues: ICommonObject, + promptValuesRaw: ICommonObject, options: ICommonObject ) => { const loggerHandler = new ConsoleCallbackHandler(options.logger) @@ -103,6 +107,13 @@ const runPrediction = async ( const socketIO = isStreaming ? options.socketIO : undefined const socketIOClientId = isStreaming ? options.socketIOClientId : '' + /** + * Apply string transformation to reverse converted special chars: + * FROM: { "value": "hello i am benFLOWISE_NEWLINEFLOWISE_NEWLINEFLOWISE_TABhow are you?" } + * TO: { "value": "hello i am ben\n\n\thow are you?" } + */ + const promptValues = handleEscapeCharacters(promptValuesRaw, true) + if (inputVariables.length === 1) { if (isStreaming) { const handler = new CustomChainHandler(socketIO, socketIOClientId) diff --git a/packages/components/nodes/prompts/ChatPromptTemplate/ChatPromptTemplate.ts b/packages/components/nodes/prompts/ChatPromptTemplate/ChatPromptTemplate.ts index 4eeb1dd23..88803348b 100644 --- a/packages/components/nodes/prompts/ChatPromptTemplate/ChatPromptTemplate.ts +++ b/packages/components/nodes/prompts/ChatPromptTemplate/ChatPromptTemplate.ts @@ -58,7 +58,7 @@ class ChatPromptTemplate_Prompts implements INode { let promptValues: ICommonObject = {} if (promptValuesStr) { - promptValues = JSON.parse(promptValuesStr.replace(/\s/g, '')) + promptValues = JSON.parse(promptValuesStr) } // @ts-ignore prompt.promptValues = promptValues diff --git a/packages/components/nodes/prompts/FewShotPromptTemplate/FewShotPromptTemplate.ts b/packages/components/nodes/prompts/FewShotPromptTemplate/FewShotPromptTemplate.ts index a42a1d088..3bf305a48 100644 --- a/packages/components/nodes/prompts/FewShotPromptTemplate/FewShotPromptTemplate.ts +++ b/packages/components/nodes/prompts/FewShotPromptTemplate/FewShotPromptTemplate.ts @@ -86,7 +86,7 @@ class FewShotPromptTemplate_Prompts implements INode { const examplePrompt = nodeData.inputs?.examplePrompt as PromptTemplate const inputVariables = getInputVariables(suffix) - const examples: Example[] = JSON.parse(examplesStr.replace(/\s/g, '')) + const examples: Example[] = JSON.parse(examplesStr) try { const obj: FewShotPromptTemplateInput = { diff --git a/packages/components/nodes/prompts/PromptTemplate/PromptTemplate.ts b/packages/components/nodes/prompts/PromptTemplate/PromptTemplate.ts index f9c6c53e3..bd5740d85 100644 --- a/packages/components/nodes/prompts/PromptTemplate/PromptTemplate.ts +++ b/packages/components/nodes/prompts/PromptTemplate/PromptTemplate.ts @@ -45,7 +45,7 @@ class PromptTemplate_Prompts implements INode { let promptValues: ICommonObject = {} if (promptValuesStr) { - promptValues = JSON.parse(promptValuesStr.replace(/\s/g, '')) + promptValues = JSON.parse(promptValuesStr) } const inputVariables = getInputVariables(template) diff --git a/packages/components/src/utils.ts b/packages/components/src/utils.ts index eaf90fef1..e00f74e64 100644 --- a/packages/components/src/utils.ts +++ b/packages/components/src/utils.ts @@ -347,6 +347,40 @@ export const getEnvironmentVariable = (name: string): string | undefined => { } } +// reference https://www.freeformatter.com/json-escape.html +const jsonEscapeCharacters = [ + { escape: '"', value: 'FLOWISE_DOUBLE_QUOTE' }, + { escape: '\n', value: 'FLOWISE_NEWLINE' }, + { escape: '\b', value: 'FLOWISE_BACKSPACE' }, + { escape: '\f', value: 'FLOWISE_FORM_FEED' }, + { escape: '\r', value: 'FLOWISE_CARRIAGE_RETURN' }, + { escape: '\t', value: 'FLOWISE_TAB' }, + { escape: '\\', value: 'FLOWISE_BACKSLASH' } +] + +function handleEscapesJSONParse(input: string, reverse: Boolean): string { + for (const element of jsonEscapeCharacters) { + input = reverse ? input.replaceAll(element.value, element.escape) : input.replaceAll(element.escape, element.value) + } + return input +} + +function iterateEscapesJSONParse(input: any, reverse: Boolean): any { + for (const element in input) { + const type = typeof input[element] + if (type === 'string') input[element] = handleEscapesJSONParse(input[element], reverse) + else if (type === 'object') input[element] = iterateEscapesJSONParse(input[element], reverse) + } + return input +} + +export function handleEscapeCharacters(input: any, reverse: Boolean): any { + const type = typeof input + if (type === 'string') return handleEscapesJSONParse(input, reverse) + else if (type === 'object') return iterateEscapesJSONParse(input, reverse) + return input +} + /* * List of dependencies allowed to be import in vm2 */ diff --git a/packages/components/tsconfig.json b/packages/components/tsconfig.json index 2002d62f7..f4bdbd6ad 100644 --- a/packages/components/tsconfig.json +++ b/packages/components/tsconfig.json @@ -1,6 +1,6 @@ { "compilerOptions": { - "lib": ["ES2020"], + "lib": ["ES2020", "ES2021.String"], "experimentalDecorators": true /* Enable experimental support for TC39 stage 2 draft decorators. */, "emitDecoratorMetadata": true /* Emit design-type metadata for decorated declarations in source files. */, "target": "ES2020", // or higher diff --git a/packages/server/src/utils/index.ts b/packages/server/src/utils/index.ts index 8e743031b..4519a52ed 100644 --- a/packages/server/src/utils/index.ts +++ b/packages/server/src/utils/index.ts @@ -16,7 +16,7 @@ import { IOverrideConfig } from '../Interface' import { cloneDeep, get, omit, merge } from 'lodash' -import { ICommonObject, getInputVariables, IDatabaseEntity } from 'flowise-components' +import { ICommonObject, getInputVariables, IDatabaseEntity, handleEscapeCharacters } from 'flowise-components' import { scryptSync, randomBytes, timingSafeEqual } from 'crypto' import { ChatFlow } from '../entity/ChatFlow' import { ChatMessage } from '../entity/ChatMessage' @@ -325,8 +325,13 @@ export const getVariableValue = (paramValue: string, reactFlowNodes: IReactFlowN const variableEndIdx = startIdx const variableFullPath = returnVal.substring(variableStartIdx, variableEndIdx) + /** + * Apply string transformation to convert special chars: + * FROM: hello i am ben\n\n\thow are you? + * TO: hello i am benFLOWISE_NEWLINEFLOWISE_NEWLINEFLOWISE_TABhow are you? + */ if (isAcceptVariable && variableFullPath === QUESTION_VAR_PREFIX) { - variableDict[`{{${variableFullPath}}}`] = question + variableDict[`{{${variableFullPath}}}`] = handleEscapeCharacters(question, false) } // Split by first occurrence of '.' to get just nodeId From e561f1c30b7f2db0641aba9b08ed5f1dbbcf4d63 Mon Sep 17 00:00:00 2001 From: Yongtae Date: Tue, 25 Jul 2023 18:23:47 +0900 Subject: [PATCH 52/57] add svg --- .../nodes/retrievers/HydeRetriever/hyderetriever.svg | 9 +++++++++ 1 file changed, 9 insertions(+) create mode 100644 packages/components/nodes/retrievers/HydeRetriever/hyderetriever.svg diff --git a/packages/components/nodes/retrievers/HydeRetriever/hyderetriever.svg b/packages/components/nodes/retrievers/HydeRetriever/hyderetriever.svg new file mode 100644 index 000000000..da3a9f207 --- /dev/null +++ b/packages/components/nodes/retrievers/HydeRetriever/hyderetriever.svg @@ -0,0 +1,9 @@ + + + + + + + + + \ No newline at end of file From 8fd9332224892699f6d12347fb5ef36071cda1a5 Mon Sep 17 00:00:00 2001 From: Yongtae Date: Tue, 25 Jul 2023 18:24:10 +0900 Subject: [PATCH 53/57] add Hyde component.js --- .../components/nodes/retrievers/HydeRetriever/HydeRetriever.js | 0 1 file changed, 0 insertions(+), 0 deletions(-) create mode 100644 packages/components/nodes/retrievers/HydeRetriever/HydeRetriever.js diff --git a/packages/components/nodes/retrievers/HydeRetriever/HydeRetriever.js b/packages/components/nodes/retrievers/HydeRetriever/HydeRetriever.js new file mode 100644 index 000000000..e69de29bb From 0ffdea771c4893138f5c19629e1fc1e1054a3714 Mon Sep 17 00:00:00 2001 From: Yongtae Date: Tue, 25 Jul 2023 18:27:41 +0900 Subject: [PATCH 54/57] Add HydeRetriever node class for retrieving from a vector store --- .../retrievers/HydeRetriever/HydeRetriever.js | 0 .../retrievers/HydeRetriever/HydeRetriever.ts | 114 ++++++++++++++++++ packages/components/src/Interface.ts | 10 ++ 3 files changed, 124 insertions(+) delete mode 100644 packages/components/nodes/retrievers/HydeRetriever/HydeRetriever.js create mode 100644 packages/components/nodes/retrievers/HydeRetriever/HydeRetriever.ts diff --git a/packages/components/nodes/retrievers/HydeRetriever/HydeRetriever.js b/packages/components/nodes/retrievers/HydeRetriever/HydeRetriever.js deleted file mode 100644 index e69de29bb..000000000 diff --git a/packages/components/nodes/retrievers/HydeRetriever/HydeRetriever.ts b/packages/components/nodes/retrievers/HydeRetriever/HydeRetriever.ts new file mode 100644 index 000000000..058f98861 --- /dev/null +++ b/packages/components/nodes/retrievers/HydeRetriever/HydeRetriever.ts @@ -0,0 +1,114 @@ +import { VectorStore } from 'langchain/vectorstores/base' +import { INode, INodeData, INodeParams, HyDERetrieverInput } from '../../../src/Interface' +import { HydeRetriever } from 'langchain/retrievers/hyde' +import { BaseLanguageModel } from 'langchain/base_language' +import { Embeddings } from 'langchain/embeddings/base' + +class HydeRetriever_Retrievers implements INode { + label: string + name: string + description: string + type: string + icon: string + category: string + baseClasses: string[] + inputs: INodeParams[] + + constructor() { + this.label = 'Hyde Retriever' + this.name = 'HydeRetriever' + this.type = 'HydeRetriever' + this.icon = 'hyderetriever.svg' + this.category = 'Retrievers' + this.description = 'Use HyDE retriever to retrieve from a vector store' + this.baseClasses = [this.type, 'BaseRetriever'] + this.inputs = [ + { + label: 'Language Model', + name: 'model', + type: 'BaseLanguageModel' + }, + { + label: 'Vector Store', + name: 'vectorStore', + type: 'VectorStore' + }, + { + label: 'Embeddings', + name: 'embeddings', + type: 'Embeddings' + }, + { + label: 'Prompt Key', + name: 'promptKey', + type: 'options', + options: [ + { + label: 'websearch', + name: 'websearch' + }, + { + label: 'scifact', + name: 'scifact' + }, + { + label: 'arguana', + name: 'arguana' + }, + { + label: 'trec-covid', + name: 'trec-covid' + }, + { + label: 'fiqa', + name: 'fiqa' + }, + { + label: 'dbpedia-entity', + name: 'dbpedia-entity' + }, + { + label: 'trec-news', + name: 'trec-news' + }, + { + label: 'mr-tydi', + name: 'mr-tydi' + } + ], + default: 'websearch' + }, + { + label: 'Top K', + name: 'topK', + description: 'Number of top results to fetch. Default to 4', + placeholder: '4', + type: 'number', + default: 4, + additionalParams: true, + optional: true + } + ] + } + + async init(nodeData: INodeData): Promise { + const llm = nodeData.inputs?.model as BaseLanguageModel + const vectorStore = nodeData.inputs?.vectorStore as VectorStore + const embeddings = nodeData.inputs?.embeddings as Embeddings + const promptKey = nodeData.inputs?.promptKey as string + const topK = nodeData.inputs?.topK as number + + const obj = { + llm, + vectorStore, + embeddings, + promptKey, + topK + } as HyDERetrieverInput + + const retriever = new HydeRetriever(obj) + return retriever + } +} + +module.exports = { nodeClass: HydeRetriever_Retrievers } diff --git a/packages/components/src/Interface.ts b/packages/components/src/Interface.ts index 47b5aba29..17c80aea9 100644 --- a/packages/components/src/Interface.ts +++ b/packages/components/src/Interface.ts @@ -119,6 +119,8 @@ export interface IMessage { import { PromptTemplate as LangchainPromptTemplate, PromptTemplateInput } from 'langchain/prompts' import { VectorStore } from 'langchain/vectorstores/base' +import { BaseLanguageModel } from 'langchain/base_language' +import { Embeddings } from 'langchain/embeddings/base' export class PromptTemplate extends LangchainPromptTemplate { promptValues: ICommonObject @@ -166,3 +168,11 @@ export class VectorStoreRetriever { this.vectorStore = fields.vectorStore } } + +export interface HyDERetrieverInput { + llm: BaseLanguageModel + vectorStore: VectorStore + embeddings: Embeddings + promptKey: string + topK: number +} \ No newline at end of file From 0f6c700e583005087a920148b53af91532dd6a54 Mon Sep 17 00:00:00 2001 From: Yongtae Date: Tue, 25 Jul 2023 19:19:25 +0900 Subject: [PATCH 55/57] fix lint --- packages/components/src/Interface.ts | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/packages/components/src/Interface.ts b/packages/components/src/Interface.ts index 17c80aea9..942754ca6 100644 --- a/packages/components/src/Interface.ts +++ b/packages/components/src/Interface.ts @@ -175,4 +175,4 @@ export interface HyDERetrieverInput { embeddings: Embeddings promptKey: string topK: number -} \ No newline at end of file +} From b567e39f3eae37d963292d5014f8852138022145 Mon Sep 17 00:00:00 2001 From: Henry Heng Date: Tue, 25 Jul 2023 15:44:05 +0100 Subject: [PATCH 56/57] Update HydeRetriever.ts Add custom prompt --- .../retrievers/HydeRetriever/HydeRetriever.ts | 39 +++++++++++-------- 1 file changed, 23 insertions(+), 16 deletions(-) diff --git a/packages/components/nodes/retrievers/HydeRetriever/HydeRetriever.ts b/packages/components/nodes/retrievers/HydeRetriever/HydeRetriever.ts index 058f98861..a90f98704 100644 --- a/packages/components/nodes/retrievers/HydeRetriever/HydeRetriever.ts +++ b/packages/components/nodes/retrievers/HydeRetriever/HydeRetriever.ts @@ -1,8 +1,8 @@ import { VectorStore } from 'langchain/vectorstores/base' -import { INode, INodeData, INodeParams, HyDERetrieverInput } from '../../../src/Interface' -import { HydeRetriever } from 'langchain/retrievers/hyde' +import { INode, INodeData, INodeParams } from '../../../src/Interface' +import { HydeRetriever, HydeRetrieverOptions, PromptKey } from 'langchain/retrievers/hyde' import { BaseLanguageModel } from 'langchain/base_language' -import { Embeddings } from 'langchain/embeddings/base' +import { PromptTemplate } from 'langchain/prompts' class HydeRetriever_Retrievers implements INode { label: string @@ -33,11 +33,6 @@ class HydeRetriever_Retrievers implements INode { name: 'vectorStore', type: 'VectorStore' }, - { - label: 'Embeddings', - name: 'embeddings', - type: 'Embeddings' - }, { label: 'Prompt Key', name: 'promptKey', @@ -78,6 +73,16 @@ class HydeRetriever_Retrievers implements INode { ], default: 'websearch' }, + { + label: 'Custom Prompt', + name: 'customPrompt', + description: 'If custom prompt is used, this will override Prompt Key', + placeholder: 'Please write a passage to answer the question\nQuestion: {question}\nPassage:', + type: 'string', + rows: 4, + additionalParams: true, + optional: true + }, { label: 'Top K', name: 'topK', @@ -94,17 +99,19 @@ class HydeRetriever_Retrievers implements INode { async init(nodeData: INodeData): Promise { const llm = nodeData.inputs?.model as BaseLanguageModel const vectorStore = nodeData.inputs?.vectorStore as VectorStore - const embeddings = nodeData.inputs?.embeddings as Embeddings - const promptKey = nodeData.inputs?.promptKey as string - const topK = nodeData.inputs?.topK as number + const promptKey = nodeData.inputs?.promptKey as PromptKey + const customPrompt = nodeData.inputs?.customPrompt as string + const topK = nodeData.inputs?.topK as string + const k = topK ? parseInt(topK, 10) : 4 - const obj = { + const obj: HydeRetrieverOptions = { llm, vectorStore, - embeddings, - promptKey, - topK - } as HyDERetrieverInput + k + } + + if (customPrompt) obj.promptTemplate = PromptTemplate.fromTemplate(customPrompt) + else if (promptKey) obj.promptTemplate = promptKey const retriever = new HydeRetriever(obj) return retriever From 63d896599ee1647bfc87de49e88691abe8139cc2 Mon Sep 17 00:00:00 2001 From: Henry Heng Date: Tue, 25 Jul 2023 15:45:06 +0100 Subject: [PATCH 57/57] Update Interface.ts --- packages/components/src/Interface.ts | 10 ---------- 1 file changed, 10 deletions(-) diff --git a/packages/components/src/Interface.ts b/packages/components/src/Interface.ts index 942754ca6..47b5aba29 100644 --- a/packages/components/src/Interface.ts +++ b/packages/components/src/Interface.ts @@ -119,8 +119,6 @@ export interface IMessage { import { PromptTemplate as LangchainPromptTemplate, PromptTemplateInput } from 'langchain/prompts' import { VectorStore } from 'langchain/vectorstores/base' -import { BaseLanguageModel } from 'langchain/base_language' -import { Embeddings } from 'langchain/embeddings/base' export class PromptTemplate extends LangchainPromptTemplate { promptValues: ICommonObject @@ -168,11 +166,3 @@ export class VectorStoreRetriever { this.vectorStore = fields.vectorStore } } - -export interface HyDERetrieverInput { - llm: BaseLanguageModel - vectorStore: VectorStore - embeddings: Embeddings - promptKey: string - topK: number -}