From 3920441ce06d85b6a7aa6f794c16fbbed791b879 Mon Sep 17 00:00:00 2001 From: Lorenzo Date: Tue, 5 Sep 2023 17:58:10 +0200 Subject: [PATCH 1/4] Added some options for SqlDatabaseChain --- .../SqlDatabaseChain/SqlDatabaseChain.ts | 94 +++++++++++++++++-- 1 file changed, 86 insertions(+), 8 deletions(-) diff --git a/packages/components/nodes/chains/SqlDatabaseChain/SqlDatabaseChain.ts b/packages/components/nodes/chains/SqlDatabaseChain/SqlDatabaseChain.ts index 04d704a5..0e4d1894 100644 --- a/packages/components/nodes/chains/SqlDatabaseChain/SqlDatabaseChain.ts +++ b/packages/components/nodes/chains/SqlDatabaseChain/SqlDatabaseChain.ts @@ -43,7 +43,7 @@ class SqlDatabaseChain_Chains implements INode { constructor() { this.label = 'Sql Database Chain' this.name = 'sqlDatabaseChain' - this.version = 2.0 + this.version = 3.0 this.type = 'SqlDatabaseChain' this.icon = 'sqlchain.svg' this.category = 'Chains' @@ -85,6 +85,41 @@ class SqlDatabaseChain_Chains implements INode { type: 'string', placeholder: '1270.0.0.1:5432/chinook' }, + { + label: 'Include Tables', + name: 'includesTables', + type: 'string', + description: 'Tables to include for queries.', + additionalParams: true, + optional: true + }, + { + label: 'Ignore Tables', + name: 'ignoreTables', + type: 'string', + description: 'Tables to ignore for queries.', + additionalParams: true, + optional: true + }, + { + label: "Sample table's rows info", + name: 'sampleRowsInTableInfo', + type: 'number', + description: 'Number of sample row for tables to load for info.', + placeholder: '3', + additionalParams: true, + optional: true + }, + { + label: 'Top Keys', + name: 'topK', + type: 'number', + description: + 'If you are querying for several rows of a table you can select the maximum number of results you want to get by using the "top_k" parameter (default is 10). This is useful for avoiding query results that exceed the prompt max length or consume tokens unnecessarily.', + placeholder: '10', + additionalParams: true, + optional: true + }, { label: 'Custom Prompt', name: 'customPrompt', @@ -105,9 +140,24 @@ class SqlDatabaseChain_Chains implements INode { const databaseType = nodeData.inputs?.database as DatabaseType const model = nodeData.inputs?.model as BaseLanguageModel const url = nodeData.inputs?.url - const customPrompt = nodeData.inputs?.customPrompt as string + const includesTables = nodeData.inputs?.includesTables + const splittedIncludesTables = includesTables == '' ? undefined : includesTables?.split(',') + const ignoreTables = nodeData.inputs?.ignoreTables?.split(',') + const splittedIgnoreTables = ignoreTables == '' ? undefined : includesTables?.split(',') + const sampleRowsInTableInfo = nodeData.inputs?.sampleRowsInTableInfo + const topK = nodeData.inputs?.topK + const customPrompt = nodeData.inputs?.customPrompt - const chain = await getSQLDBChain(databaseType, url, model, customPrompt) + const chain = await getSQLDBChain( + databaseType, + url, + model, + splittedIncludesTables, + splittedIgnoreTables, + sampleRowsInTableInfo, + topK, + customPrompt + ) return chain } @@ -115,9 +165,24 @@ class SqlDatabaseChain_Chains implements INode { const databaseType = nodeData.inputs?.database as DatabaseType const model = nodeData.inputs?.model as BaseLanguageModel const url = nodeData.inputs?.url - const customPrompt = nodeData.inputs?.customPrompt as string + const includesTables = nodeData.inputs?.includesTables + const splittedIncludesTables = includesTables == '' ? undefined : includesTables?.split(',') + const ignoreTables = nodeData.inputs?.ignoreTables?.split(',') + const splittedIgnoreTables = ignoreTables == '' ? undefined : includesTables?.split(',') + const sampleRowsInTableInfo = nodeData.inputs?.sampleRowsInTableInfo + const topK = nodeData.inputs?.topK + const customPrompt = nodeData.inputs?.customPrompt - const chain = await getSQLDBChain(databaseType, url, model, customPrompt) + const chain = await getSQLDBChain( + databaseType, + url, + model, + splittedIncludesTables, + splittedIgnoreTables, + sampleRowsInTableInfo, + topK, + customPrompt + ) const loggerHandler = new ConsoleCallbackHandler(options.logger) if (options.socketIO && options.socketIOClientId) { @@ -131,7 +196,16 @@ class SqlDatabaseChain_Chains implements INode { } } -const getSQLDBChain = async (databaseType: DatabaseType, url: string, llm: BaseLanguageModel, customPrompt?: string) => { +const getSQLDBChain = async ( + databaseType: DatabaseType, + url: string, + llm: BaseLanguageModel, + includesTables?: string[], + ignoreTables?: string[], + sampleRowsInTableInfo?: number, + topK?: number, + customPrompt?: string +) => { const datasource = new DataSource( databaseType === 'sqlite' ? { @@ -145,13 +219,17 @@ const getSQLDBChain = async (databaseType: DatabaseType, url: string, llm: BaseL ) const db = await SqlDatabase.fromDataSourceParams({ - appDataSource: datasource + appDataSource: datasource, + includesTables: includesTables, + ignoreTables: ignoreTables, + sampleRowsInTableInfo: sampleRowsInTableInfo }) const obj: SqlDatabaseChainInput = { llm, database: db, - verbose: process.env.DEBUG === 'true' ? true : false + verbose: process.env.DEBUG === 'true' ? true : false, + topK: topK } if (customPrompt) { From 7e3a68965628033d7f19880cec3fe5496946dde3 Mon Sep 17 00:00:00 2001 From: Lorenzo Date: Mon, 11 Sep 2023 17:12:35 +0200 Subject: [PATCH 2/4] Remove the typo code --- .../nodes/chains/SqlDatabaseChain/SqlDatabaseChain.ts | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/packages/components/nodes/chains/SqlDatabaseChain/SqlDatabaseChain.ts b/packages/components/nodes/chains/SqlDatabaseChain/SqlDatabaseChain.ts index 0e4d1894..12081b66 100644 --- a/packages/components/nodes/chains/SqlDatabaseChain/SqlDatabaseChain.ts +++ b/packages/components/nodes/chains/SqlDatabaseChain/SqlDatabaseChain.ts @@ -142,7 +142,7 @@ class SqlDatabaseChain_Chains implements INode { const url = nodeData.inputs?.url const includesTables = nodeData.inputs?.includesTables const splittedIncludesTables = includesTables == '' ? undefined : includesTables?.split(',') - const ignoreTables = nodeData.inputs?.ignoreTables?.split(',') + const ignoreTables = nodeData.inputs?.ignoreTables const splittedIgnoreTables = ignoreTables == '' ? undefined : includesTables?.split(',') const sampleRowsInTableInfo = nodeData.inputs?.sampleRowsInTableInfo const topK = nodeData.inputs?.topK @@ -167,7 +167,7 @@ class SqlDatabaseChain_Chains implements INode { const url = nodeData.inputs?.url const includesTables = nodeData.inputs?.includesTables const splittedIncludesTables = includesTables == '' ? undefined : includesTables?.split(',') - const ignoreTables = nodeData.inputs?.ignoreTables?.split(',') + const ignoreTables = nodeData.inputs?.ignoreTables const splittedIgnoreTables = ignoreTables == '' ? undefined : includesTables?.split(',') const sampleRowsInTableInfo = nodeData.inputs?.sampleRowsInTableInfo const topK = nodeData.inputs?.topK From 8fcafe83bc14996a95a0655032f9a12b13f14562 Mon Sep 17 00:00:00 2001 From: Lorenzo Date: Mon, 11 Sep 2023 21:14:46 +0200 Subject: [PATCH 3/4] Removed another typo --- .../nodes/chains/SqlDatabaseChain/SqlDatabaseChain.ts | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/packages/components/nodes/chains/SqlDatabaseChain/SqlDatabaseChain.ts b/packages/components/nodes/chains/SqlDatabaseChain/SqlDatabaseChain.ts index 12081b66..a6e6ab24 100644 --- a/packages/components/nodes/chains/SqlDatabaseChain/SqlDatabaseChain.ts +++ b/packages/components/nodes/chains/SqlDatabaseChain/SqlDatabaseChain.ts @@ -143,7 +143,7 @@ class SqlDatabaseChain_Chains implements INode { const includesTables = nodeData.inputs?.includesTables const splittedIncludesTables = includesTables == '' ? undefined : includesTables?.split(',') const ignoreTables = nodeData.inputs?.ignoreTables - const splittedIgnoreTables = ignoreTables == '' ? undefined : includesTables?.split(',') + const splittedIgnoreTables = ignoreTables == '' ? undefined : ignoreTables?.split(',') const sampleRowsInTableInfo = nodeData.inputs?.sampleRowsInTableInfo const topK = nodeData.inputs?.topK const customPrompt = nodeData.inputs?.customPrompt @@ -168,7 +168,7 @@ class SqlDatabaseChain_Chains implements INode { const includesTables = nodeData.inputs?.includesTables const splittedIncludesTables = includesTables == '' ? undefined : includesTables?.split(',') const ignoreTables = nodeData.inputs?.ignoreTables - const splittedIgnoreTables = ignoreTables == '' ? undefined : includesTables?.split(',') + const splittedIgnoreTables = ignoreTables == '' ? undefined : ignoreTables?.split(',') const sampleRowsInTableInfo = nodeData.inputs?.sampleRowsInTableInfo const topK = nodeData.inputs?.topK const customPrompt = nodeData.inputs?.customPrompt From 35ddb30489d086ef73f047c3145b4f20596202d7 Mon Sep 17 00:00:00 2001 From: Henry Heng Date: Tue, 12 Sep 2023 17:38:13 +0100 Subject: [PATCH 4/4] Update SqlDatabaseChain.ts update types --- .../chains/SqlDatabaseChain/SqlDatabaseChain.ts | 16 ++++++++-------- 1 file changed, 8 insertions(+), 8 deletions(-) diff --git a/packages/components/nodes/chains/SqlDatabaseChain/SqlDatabaseChain.ts b/packages/components/nodes/chains/SqlDatabaseChain/SqlDatabaseChain.ts index a6e6ab24..f5fd0ccc 100644 --- a/packages/components/nodes/chains/SqlDatabaseChain/SqlDatabaseChain.ts +++ b/packages/components/nodes/chains/SqlDatabaseChain/SqlDatabaseChain.ts @@ -139,14 +139,14 @@ class SqlDatabaseChain_Chains implements INode { async init(nodeData: INodeData): Promise { const databaseType = nodeData.inputs?.database as DatabaseType const model = nodeData.inputs?.model as BaseLanguageModel - const url = nodeData.inputs?.url + const url = nodeData.inputs?.url as string const includesTables = nodeData.inputs?.includesTables const splittedIncludesTables = includesTables == '' ? undefined : includesTables?.split(',') const ignoreTables = nodeData.inputs?.ignoreTables const splittedIgnoreTables = ignoreTables == '' ? undefined : ignoreTables?.split(',') - const sampleRowsInTableInfo = nodeData.inputs?.sampleRowsInTableInfo - const topK = nodeData.inputs?.topK - const customPrompt = nodeData.inputs?.customPrompt + const sampleRowsInTableInfo = nodeData.inputs?.sampleRowsInTableInfo as number + const topK = nodeData.inputs?.topK as number + const customPrompt = nodeData.inputs?.customPrompt as string const chain = await getSQLDBChain( databaseType, @@ -164,14 +164,14 @@ class SqlDatabaseChain_Chains implements INode { async run(nodeData: INodeData, input: string, options: ICommonObject): Promise { const databaseType = nodeData.inputs?.database as DatabaseType const model = nodeData.inputs?.model as BaseLanguageModel - const url = nodeData.inputs?.url + const url = nodeData.inputs?.url as string const includesTables = nodeData.inputs?.includesTables const splittedIncludesTables = includesTables == '' ? undefined : includesTables?.split(',') const ignoreTables = nodeData.inputs?.ignoreTables const splittedIgnoreTables = ignoreTables == '' ? undefined : ignoreTables?.split(',') - const sampleRowsInTableInfo = nodeData.inputs?.sampleRowsInTableInfo - const topK = nodeData.inputs?.topK - const customPrompt = nodeData.inputs?.customPrompt + const sampleRowsInTableInfo = nodeData.inputs?.sampleRowsInTableInfo as number + const topK = nodeData.inputs?.topK as number + const customPrompt = nodeData.inputs?.customPrompt as string const chain = await getSQLDBChain( databaseType,