@langchain/classic 1.0.8 → 1.0.9
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/CHANGELOG.md +8 -0
- package/dist/agents/agent.cjs.map +1 -1
- package/dist/agents/agent.js.map +1 -1
- package/dist/agents/chat/outputParser.d.cts +2 -2
- package/dist/agents/chat/outputParser.d.cts.map +1 -1
- package/dist/agents/helpers.cjs.map +1 -1
- package/dist/agents/helpers.js.map +1 -1
- package/dist/agents/openai_functions/index.cjs.map +1 -1
- package/dist/agents/openai_functions/index.js.map +1 -1
- package/dist/agents/react/index.d.cts +2 -2
- package/dist/agents/react/index.d.cts.map +1 -1
- package/dist/agents/react/index.d.ts +2 -2
- package/dist/agents/react/index.d.ts.map +1 -1
- package/dist/agents/structured_chat/index.d.cts +2 -2
- package/dist/agents/structured_chat/index.d.cts.map +1 -1
- package/dist/agents/structured_chat/index.d.ts +2 -2
- package/dist/agents/structured_chat/index.d.ts.map +1 -1
- package/dist/agents/tool_calling/index.d.cts +2 -2
- package/dist/agents/tool_calling/index.d.cts.map +1 -1
- package/dist/agents/toolkits/conversational_retrieval/token_buffer_memory.d.cts +1 -1
- package/dist/agents/toolkits/conversational_retrieval/token_buffer_memory.d.cts.map +1 -1
- package/dist/agents/toolkits/conversational_retrieval/token_buffer_memory.d.ts +1 -1
- package/dist/agents/toolkits/conversational_retrieval/token_buffer_memory.d.ts.map +1 -1
- package/dist/agents/toolkits/conversational_retrieval/tool.d.cts +1 -1
- package/dist/agents/toolkits/conversational_retrieval/tool.d.cts.map +1 -1
- package/dist/agents/toolkits/conversational_retrieval/tool.d.ts +1 -1
- package/dist/agents/toolkits/conversational_retrieval/tool.d.ts.map +1 -1
- package/dist/agents/types.cjs.map +1 -1
- package/dist/agents/types.js.map +1 -1
- package/dist/chains/base.cjs.map +1 -1
- package/dist/chains/base.js.map +1 -1
- package/dist/chains/combine_docs_chain.cjs.map +1 -1
- package/dist/chains/combine_docs_chain.js.map +1 -1
- package/dist/chains/llm_chain.cjs.map +1 -1
- package/dist/chains/llm_chain.js.map +1 -1
- package/dist/chains/openai_functions/base.cjs.map +1 -1
- package/dist/chains/openai_functions/base.js.map +1 -1
- package/dist/chains/openai_functions/openapi.cjs.map +1 -1
- package/dist/chains/openai_functions/openapi.js.map +1 -1
- package/dist/chains/query_constructor/index.cjs.map +1 -1
- package/dist/chains/query_constructor/index.js.map +1 -1
- package/dist/chains/query_constructor/parser.cjs.map +1 -1
- package/dist/chains/query_constructor/parser.js.map +1 -1
- package/dist/chains/router/multi_prompt.cjs.map +1 -1
- package/dist/chains/router/multi_prompt.js.map +1 -1
- package/dist/chains/transform.cjs.map +1 -1
- package/dist/chains/transform.js.map +1 -1
- package/dist/chat_models/universal.cjs.map +1 -1
- package/dist/chat_models/universal.js.map +1 -1
- package/dist/document_loaders/fs/json.cjs.map +1 -1
- package/dist/document_loaders/fs/json.js.map +1 -1
- package/dist/embeddings/cache_backed.cjs.map +1 -1
- package/dist/embeddings/cache_backed.js.map +1 -1
- package/dist/evaluation/base.cjs.map +1 -1
- package/dist/evaluation/base.js.map +1 -1
- package/dist/evaluation/comparison/pairwise.d.ts +3 -3
- package/dist/evaluation/comparison/pairwise.d.ts.map +1 -1
- package/dist/evaluation/criteria/criteria.d.ts +3 -3
- package/dist/evaluation/criteria/criteria.d.ts.map +1 -1
- package/dist/experimental/autogpt/prompt.d.cts +2 -2
- package/dist/experimental/autogpt/prompt.d.cts.map +1 -1
- package/dist/experimental/autogpt/prompt.d.ts +2 -2
- package/dist/experimental/autogpt/prompt.d.ts.map +1 -1
- package/dist/experimental/masking/regex_masking_transformer.cjs.map +1 -1
- package/dist/experimental/masking/regex_masking_transformer.js.map +1 -1
- package/dist/experimental/openai_assistant/index.cjs.map +1 -1
- package/dist/experimental/openai_assistant/index.js.map +1 -1
- package/dist/experimental/plan_and_execute/agent_executor.cjs.map +1 -1
- package/dist/experimental/plan_and_execute/agent_executor.js.map +1 -1
- package/dist/experimental/prompts/custom_format.cjs.map +1 -1
- package/dist/experimental/prompts/custom_format.js.map +1 -1
- package/dist/experimental/prompts/handlebars.cjs.map +1 -1
- package/dist/experimental/prompts/handlebars.js.map +1 -1
- package/dist/load/import_constants.cjs +24 -24
- package/dist/load/import_constants.cjs.map +1 -1
- package/dist/load/import_constants.js +24 -24
- package/dist/load/import_constants.js.map +1 -1
- package/dist/load/import_map.cjs +44 -44
- package/dist/load/import_map.cjs.map +1 -1
- package/dist/load/import_map.js +52 -52
- package/dist/load/import_map.js.map +1 -1
- package/dist/output_parsers/openai_functions.cjs.map +1 -1
- package/dist/output_parsers/openai_functions.js.map +1 -1
- package/dist/output_parsers/regex.cjs.map +1 -1
- package/dist/output_parsers/regex.js.map +1 -1
- package/dist/output_parsers/router.cjs.map +1 -1
- package/dist/output_parsers/router.js.map +1 -1
- package/dist/output_parsers/structured.cjs.map +1 -1
- package/dist/output_parsers/structured.js.map +1 -1
- package/dist/retrievers/document_compressors/index.cjs.map +1 -1
- package/dist/retrievers/document_compressors/index.js.map +1 -1
- package/dist/retrievers/hyde.cjs +1 -1
- package/dist/retrievers/hyde.cjs.map +1 -1
- package/dist/retrievers/hyde.js +1 -1
- package/dist/retrievers/hyde.js.map +1 -1
- package/dist/retrievers/matryoshka_retriever.cjs +1 -1
- package/dist/retrievers/matryoshka_retriever.cjs.map +1 -1
- package/dist/retrievers/matryoshka_retriever.js +1 -1
- package/dist/retrievers/matryoshka_retriever.js.map +1 -1
- package/dist/retrievers/score_threshold.cjs.map +1 -1
- package/dist/retrievers/score_threshold.js.map +1 -1
- package/dist/retrievers/self_query/index.cjs +1 -1
- package/dist/retrievers/self_query/index.d.ts +1 -1
- package/dist/retrievers/self_query/index.js +1 -1
- package/dist/smith/config.cjs.map +1 -1
- package/dist/smith/config.js.map +1 -1
- package/dist/smith/runner_utils.cjs.map +1 -1
- package/dist/smith/runner_utils.js.map +1 -1
- package/dist/tools/retriever.d.cts +1 -1
- package/dist/tools/retriever.d.cts.map +1 -1
- package/dist/tools/retriever.d.ts +1 -1
- package/dist/tools/retriever.d.ts.map +1 -1
- package/dist/util/sql_utils.cjs.map +1 -1
- package/dist/util/sql_utils.js.map +1 -1
- package/dist/vectorstores/memory.cjs +1 -1
- package/dist/vectorstores/memory.js +1 -1
- package/package.json +17 -18
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"sql_utils.cjs","names":["tablesFromDatabase: Array<SqlTable>","listTables: Array<string>","errorPrefixMsg: string","onlyTableNames: Array<string>","table: SqlTable","includeTables: Array<string>","ignoreTables: Array<string>","rawResultsTableAndColumn: Array<RawResultTableAndColumn>","sqlTable: Array<SqlTable>","appDataSource: DataSource","sql","rep: Array<{ [key: string]: string }>","repLowerCase: Array<RawResultTableAndColumn>","rawResult: unknown","tables: Array<SqlTable> | undefined","nbSampleRow: number","customDescription?: Record<string, string>","schema","SQL_POSTGRES_PROMPT","SQL_SQLITE_PROMPT","SQL_MYSQL_PROMPT","SQL_MSSQL_PROMPT","SQL_SAP_HANA_PROMPT","SQL_ORACLE_PROMPT","DEFAULT_SQL_DATABASE_PROMPT"],"sources":["../../src/util/sql_utils.ts"],"sourcesContent":["import type { DataSource, DataSourceOptions } from \"typeorm\";\nimport type { PromptTemplate } from \"@langchain/core/prompts\";\nimport {\n DEFAULT_SQL_DATABASE_PROMPT,\n SQL_SAP_HANA_PROMPT,\n SQL_MSSQL_PROMPT,\n SQL_MYSQL_PROMPT,\n SQL_POSTGRES_PROMPT,\n SQL_SQLITE_PROMPT,\n SQL_ORACLE_PROMPT,\n} from \"../chains/sql_db/sql_db_prompt.js\";\n\ninterface RawResultTableAndColumn {\n table_name: string;\n column_name: string;\n data_type: string | undefined;\n is_nullable: string;\n}\n\nexport interface SqlDatabaseParams {\n includesTables?: Array<string>;\n ignoreTables?: Array<string>;\n sampleRowsInTableInfo?: number;\n customDescription?: Record<string, string>;\n}\n\nexport interface SqlDatabaseOptionsParams extends SqlDatabaseParams {\n appDataSourceOptions: DataSourceOptions;\n}\n\nexport interface SqlDatabaseDataSourceParams extends SqlDatabaseParams {\n appDataSource: DataSource;\n}\n\nexport type SerializedSqlDatabase = SqlDatabaseOptionsParams & {\n _type: string;\n};\n\nexport interface SqlTable {\n tableName: string;\n columns: SqlColumn[];\n}\n\nexport interface SqlColumn {\n columnName: string;\n dataType?: string;\n isNullable?: boolean;\n}\n\nexport const verifyListTablesExistInDatabase = (\n tablesFromDatabase: Array<SqlTable>,\n listTables: Array<string>,\n errorPrefixMsg: string\n): void => {\n const onlyTableNames: Array<string> = tablesFromDatabase.map(\n (table: SqlTable) => table.tableName\n );\n if (listTables.length > 0) {\n for (const tableName of listTables) {\n if (!onlyTableNames.includes(tableName)) {\n throw new Error(\n `${errorPrefixMsg} the table ${tableName} was not found in the database`\n );\n }\n }\n }\n};\n\nexport const verifyIncludeTablesExistInDatabase = (\n tablesFromDatabase: Array<SqlTable>,\n includeTables: Array<string>\n): void => {\n verifyListTablesExistInDatabase(\n tablesFromDatabase,\n includeTables,\n \"Include tables not found in database:\"\n );\n};\n\nexport const verifyIgnoreTablesExistInDatabase = (\n tablesFromDatabase: Array<SqlTable>,\n ignoreTables: Array<string>\n): void => {\n verifyListTablesExistInDatabase(\n tablesFromDatabase,\n ignoreTables,\n \"Ignore tables not found in database:\"\n );\n};\n\nconst formatToSqlTable = (\n rawResultsTableAndColumn: Array<RawResultTableAndColumn>\n): Array<SqlTable> => {\n const sqlTable: Array<SqlTable> = [];\n for (const oneResult of rawResultsTableAndColumn) {\n const sqlColumn = {\n columnName: oneResult.column_name,\n dataType: oneResult.data_type,\n isNullable: oneResult.is_nullable === \"YES\",\n };\n const currentTable = sqlTable.find(\n (oneTable) => oneTable.tableName === oneResult.table_name\n );\n if (currentTable) {\n currentTable.columns.push(sqlColumn);\n } else {\n const newTable = {\n tableName: oneResult.table_name,\n columns: [sqlColumn],\n };\n sqlTable.push(newTable);\n }\n }\n\n return sqlTable;\n};\n\nexport const getTableAndColumnsName = async (\n appDataSource: DataSource\n): Promise<Array<SqlTable>> => {\n let sql;\n if (appDataSource.options.type === \"postgres\") {\n const schema = appDataSource.options?.schema ?? \"public\";\n sql = `SELECT \n t.table_name, \n c.* \n FROM \n information_schema.tables t \n JOIN information_schema.columns c \n ON t.table_name = c.table_name \n WHERE \n t.table_schema = '${schema}' \n AND c.table_schema = '${schema}' \n ORDER BY \n t.table_name,\n c.ordinal_position;`;\n const rep = await appDataSource.query(sql);\n\n return formatToSqlTable(rep);\n }\n\n if (\n appDataSource.options.type === \"sqlite\" ||\n appDataSource.options.type === \"better-sqlite3\" ||\n appDataSource.options.type === \"sqljs\"\n ) {\n sql =\n \"SELECT \\n\" +\n \" m.name AS table_name,\\n\" +\n \" p.name AS column_name,\\n\" +\n \" p.type AS data_type,\\n\" +\n \" CASE \\n\" +\n \" WHEN p.\\\"notnull\\\" = 0 THEN 'YES' \\n\" +\n \" ELSE 'NO' \\n\" +\n \" END AS is_nullable \\n\" +\n \"FROM \\n\" +\n \" sqlite_master m \\n\" +\n \"JOIN \\n\" +\n \" pragma_table_info(m.name) p \\n\" +\n \"WHERE \\n\" +\n \" m.type = 'table' AND \\n\" +\n \" m.name NOT LIKE 'sqlite_%';\\n\";\n\n const rep = await appDataSource.query(sql);\n\n return formatToSqlTable(rep);\n }\n\n if (\n appDataSource.options.type === \"mysql\" ||\n appDataSource.options.type === \"aurora-mysql\"\n ) {\n sql =\n \"SELECT \" +\n \"TABLE_NAME AS table_name, \" +\n \"COLUMN_NAME AS column_name, \" +\n \"DATA_TYPE AS data_type, \" +\n \"IS_NULLABLE AS is_nullable \" +\n \"FROM INFORMATION_SCHEMA.COLUMNS \" +\n `WHERE TABLE_SCHEMA = '${appDataSource.options.database}';`;\n\n const rep = await appDataSource.query(sql);\n\n return formatToSqlTable(rep);\n }\n\n if (appDataSource.options.type === \"mssql\") {\n const schema = appDataSource.options?.schema;\n const sql = `SELECT\n TABLE_NAME AS table_name,\n COLUMN_NAME AS column_name,\n DATA_TYPE AS data_type,\n IS_NULLABLE AS is_nullable\n FROM INFORMATION_SCHEMA.COLUMNS\n ${schema && `WHERE TABLE_SCHEMA = '${schema}'`} \nORDER BY TABLE_NAME, ORDINAL_POSITION;`;\n\n const rep = await appDataSource.query(sql);\n return formatToSqlTable(rep);\n }\n\n if (appDataSource.options.type === \"sap\") {\n const schema = appDataSource.options?.schema ?? \"public\";\n sql = `SELECT\n TABLE_NAME,\n COLUMN_NAME,\n DATA_TYPE_NAME AS data_type,\n CASE WHEN IS_NULLABLE='TRUE' THEN 'YES' ELSE 'NO' END AS is_nullable\n FROM TABLE_COLUMNS\n WHERE SCHEMA_NAME='${schema}'`;\n\n const rep: Array<{ [key: string]: string }> = await appDataSource.query(\n sql\n );\n\n const repLowerCase: Array<RawResultTableAndColumn> = [];\n rep.forEach((_rep) =>\n repLowerCase.push({\n table_name: _rep.TABLE_NAME,\n column_name: _rep.COLUMN_NAME,\n data_type: _rep.DATA_TYPE,\n is_nullable: _rep.IS_NULLABLE,\n })\n );\n\n return formatToSqlTable(repLowerCase);\n }\n if (appDataSource.options.type === \"oracle\") {\n const schemaName = appDataSource.options.schema;\n const sql = ` \n SELECT\n TABLE_NAME AS \"table_name\",\n COLUMN_NAME AS \"column_name\",\n DATA_TYPE AS \"data_type\",\n NULLABLE AS \"is_nullable\"\n FROM ALL_TAB_COLS\n WHERE\n OWNER = UPPER('${schemaName}')`;\n const rep = await appDataSource.query(sql);\n return formatToSqlTable(rep);\n }\n throw new Error(\"Database type not implemented yet\");\n};\n\nconst formatSqlResponseToSimpleTableString = (rawResult: unknown): string => {\n if (!rawResult || !Array.isArray(rawResult) || rawResult.length === 0) {\n return \"\";\n }\n\n let globalString = \"\";\n for (const oneRow of rawResult) {\n globalString += `${Object.values(oneRow).reduce(\n (completeString, columnValue) => `${completeString} ${columnValue}`,\n \"\"\n )}\\n`;\n }\n\n return globalString;\n};\n\nexport const generateTableInfoFromTables = async (\n tables: Array<SqlTable> | undefined,\n appDataSource: DataSource,\n nbSampleRow: number,\n customDescription?: Record<string, string>\n): Promise<string> => {\n if (!tables) {\n return \"\";\n }\n\n let globalString = \"\";\n for (const currentTable of tables) {\n // Add the custom info of the table\n const tableCustomDescription =\n customDescription &&\n Object.keys(customDescription).includes(currentTable.tableName)\n ? `${customDescription[currentTable.tableName]}\\n`\n : \"\";\n // Add the creation of the table in SQL\n let schema = null;\n if (appDataSource.options.type === \"postgres\") {\n schema = appDataSource.options?.schema ?? \"public\";\n } else if (appDataSource.options.type === \"mssql\") {\n schema = appDataSource.options?.schema;\n } else if (appDataSource.options.type === \"sap\") {\n schema =\n appDataSource.options?.schema ??\n appDataSource.options?.username ??\n \"public\";\n } else if (appDataSource.options.type === \"oracle\") {\n schema = appDataSource.options.schema;\n }\n let sqlCreateTableQuery = schema\n ? `CREATE TABLE \"${schema}\".\"${currentTable.tableName}\" (\\n`\n : `CREATE TABLE ${currentTable.tableName} (\\n`;\n for (const [key, currentColumn] of currentTable.columns.entries()) {\n if (key > 0) {\n sqlCreateTableQuery += \", \";\n }\n sqlCreateTableQuery += `${currentColumn.columnName} ${\n currentColumn.dataType\n } ${currentColumn.isNullable ? \"\" : \"NOT NULL\"}`;\n }\n sqlCreateTableQuery += \") \\n\";\n\n let sqlSelectInfoQuery;\n if (appDataSource.options.type === \"mysql\") {\n // We use backticks to quote the table names and thus allow for example spaces in table names\n sqlSelectInfoQuery = `SELECT * FROM \\`${currentTable.tableName}\\` LIMIT ${nbSampleRow};\\n`;\n } else if (appDataSource.options.type === \"postgres\") {\n const schema = appDataSource.options?.schema ?? \"public\";\n sqlSelectInfoQuery = `SELECT * FROM \"${schema}\".\"${currentTable.tableName}\" LIMIT ${nbSampleRow};\\n`;\n } else if (appDataSource.options.type === \"mssql\") {\n const schema = appDataSource.options?.schema;\n sqlSelectInfoQuery = schema\n ? `SELECT TOP ${nbSampleRow} * FROM ${schema}.[${currentTable.tableName}];\\n`\n : `SELECT TOP ${nbSampleRow} * FROM [${currentTable.tableName}];\\n`;\n } else if (appDataSource.options.type === \"sap\") {\n const schema =\n appDataSource.options?.schema ??\n appDataSource.options?.username ??\n \"public\";\n sqlSelectInfoQuery = `SELECT * FROM \"${schema}\".\"${currentTable.tableName}\" LIMIT ${nbSampleRow};\\n`;\n } else if (appDataSource.options.type === \"oracle\") {\n sqlSelectInfoQuery = `SELECT * FROM \"${schema}\".\"${currentTable.tableName}\" WHERE ROWNUM <= '${nbSampleRow}'`;\n } else {\n sqlSelectInfoQuery = `SELECT * FROM \"${currentTable.tableName}\" LIMIT ${nbSampleRow};\\n`;\n }\n\n const columnNamesConcatString = `${currentTable.columns.reduce(\n (completeString, column) => `${completeString} ${column.columnName}`,\n \"\"\n )}\\n`;\n\n let sample = \"\";\n try {\n const infoObjectResult = nbSampleRow\n ? await appDataSource.query(sqlSelectInfoQuery)\n : null;\n sample = formatSqlResponseToSimpleTableString(infoObjectResult);\n } catch (error) {\n // If the request fails we catch it and only display a log message\n console.log(error);\n }\n\n globalString = globalString.concat(\n tableCustomDescription +\n sqlCreateTableQuery +\n sqlSelectInfoQuery +\n columnNamesConcatString +\n sample\n );\n }\n\n return globalString;\n};\n\nexport const getPromptTemplateFromDataSource = (\n appDataSource: DataSource\n): PromptTemplate => {\n if (appDataSource.options.type === \"postgres\") {\n return SQL_POSTGRES_PROMPT;\n }\n\n if (appDataSource.options.type === \"sqlite\") {\n return SQL_SQLITE_PROMPT;\n }\n\n if (appDataSource.options.type === \"mysql\") {\n return SQL_MYSQL_PROMPT;\n }\n\n if (appDataSource.options.type === \"mssql\") {\n return SQL_MSSQL_PROMPT;\n }\n\n if (appDataSource.options.type === \"sap\") {\n return SQL_SAP_HANA_PROMPT;\n }\n\n if (appDataSource.options.type === \"oracle\") {\n return SQL_ORACLE_PROMPT;\n }\n\n return DEFAULT_SQL_DATABASE_PROMPT;\n};\n"],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"sql_utils.cjs","names":["tablesFromDatabase: Array<SqlTable>","listTables: Array<string>","errorPrefixMsg: string","onlyTableNames: Array<string>","table: SqlTable","includeTables: Array<string>","ignoreTables: Array<string>","rawResultsTableAndColumn: Array<RawResultTableAndColumn>","sqlTable: Array<SqlTable>","appDataSource: DataSource","sql","rep: Array<{ [key: string]: string }>","repLowerCase: Array<RawResultTableAndColumn>","rawResult: unknown","tables: Array<SqlTable> | undefined","nbSampleRow: number","customDescription?: Record<string, string>","schema","SQL_POSTGRES_PROMPT","SQL_SQLITE_PROMPT","SQL_MYSQL_PROMPT","SQL_MSSQL_PROMPT","SQL_SAP_HANA_PROMPT","SQL_ORACLE_PROMPT","DEFAULT_SQL_DATABASE_PROMPT"],"sources":["../../src/util/sql_utils.ts"],"sourcesContent":["import type { DataSource, DataSourceOptions } from \"typeorm\";\nimport type { PromptTemplate } from \"@langchain/core/prompts\";\nimport {\n DEFAULT_SQL_DATABASE_PROMPT,\n SQL_SAP_HANA_PROMPT,\n SQL_MSSQL_PROMPT,\n SQL_MYSQL_PROMPT,\n SQL_POSTGRES_PROMPT,\n SQL_SQLITE_PROMPT,\n SQL_ORACLE_PROMPT,\n} from \"../chains/sql_db/sql_db_prompt.js\";\n\ninterface RawResultTableAndColumn {\n table_name: string;\n column_name: string;\n data_type: string | undefined;\n is_nullable: string;\n}\n\nexport interface SqlDatabaseParams {\n includesTables?: Array<string>;\n ignoreTables?: Array<string>;\n sampleRowsInTableInfo?: number;\n customDescription?: Record<string, string>;\n}\n\nexport interface SqlDatabaseOptionsParams extends SqlDatabaseParams {\n appDataSourceOptions: DataSourceOptions;\n}\n\nexport interface SqlDatabaseDataSourceParams extends SqlDatabaseParams {\n appDataSource: DataSource;\n}\n\nexport type SerializedSqlDatabase = SqlDatabaseOptionsParams & {\n _type: string;\n};\n\nexport interface SqlTable {\n tableName: string;\n columns: SqlColumn[];\n}\n\nexport interface SqlColumn {\n columnName: string;\n dataType?: string;\n isNullable?: boolean;\n}\n\nexport const verifyListTablesExistInDatabase = (\n tablesFromDatabase: Array<SqlTable>,\n listTables: Array<string>,\n errorPrefixMsg: string\n): void => {\n const onlyTableNames: Array<string> = tablesFromDatabase.map(\n (table: SqlTable) => table.tableName\n );\n if (listTables.length > 0) {\n for (const tableName of listTables) {\n if (!onlyTableNames.includes(tableName)) {\n throw new Error(\n `${errorPrefixMsg} the table ${tableName} was not found in the database`\n );\n }\n }\n }\n};\n\nexport const verifyIncludeTablesExistInDatabase = (\n tablesFromDatabase: Array<SqlTable>,\n includeTables: Array<string>\n): void => {\n verifyListTablesExistInDatabase(\n tablesFromDatabase,\n includeTables,\n \"Include tables not found in database:\"\n );\n};\n\nexport const verifyIgnoreTablesExistInDatabase = (\n tablesFromDatabase: Array<SqlTable>,\n ignoreTables: Array<string>\n): void => {\n verifyListTablesExistInDatabase(\n tablesFromDatabase,\n ignoreTables,\n \"Ignore tables not found in database:\"\n );\n};\n\nconst formatToSqlTable = (\n rawResultsTableAndColumn: Array<RawResultTableAndColumn>\n): Array<SqlTable> => {\n const sqlTable: Array<SqlTable> = [];\n for (const oneResult of rawResultsTableAndColumn) {\n const sqlColumn = {\n columnName: oneResult.column_name,\n dataType: oneResult.data_type,\n isNullable: oneResult.is_nullable === \"YES\",\n };\n const currentTable = sqlTable.find(\n (oneTable) => oneTable.tableName === oneResult.table_name\n );\n if (currentTable) {\n currentTable.columns.push(sqlColumn);\n } else {\n const newTable = {\n tableName: oneResult.table_name,\n columns: [sqlColumn],\n };\n sqlTable.push(newTable);\n }\n }\n\n return sqlTable;\n};\n\nexport const getTableAndColumnsName = async (\n appDataSource: DataSource\n): Promise<Array<SqlTable>> => {\n let sql;\n if (appDataSource.options.type === \"postgres\") {\n const schema = appDataSource.options?.schema ?? \"public\";\n sql = `SELECT \n t.table_name, \n c.* \n FROM \n information_schema.tables t \n JOIN information_schema.columns c \n ON t.table_name = c.table_name \n WHERE \n t.table_schema = '${schema}' \n AND c.table_schema = '${schema}' \n ORDER BY \n t.table_name,\n c.ordinal_position;`;\n const rep = await appDataSource.query(sql);\n\n return formatToSqlTable(rep);\n }\n\n if (\n appDataSource.options.type === \"sqlite\" ||\n appDataSource.options.type === \"better-sqlite3\" ||\n appDataSource.options.type === \"sqljs\"\n ) {\n sql =\n \"SELECT \\n\" +\n \" m.name AS table_name,\\n\" +\n \" p.name AS column_name,\\n\" +\n \" p.type AS data_type,\\n\" +\n \" CASE \\n\" +\n \" WHEN p.\\\"notnull\\\" = 0 THEN 'YES' \\n\" +\n \" ELSE 'NO' \\n\" +\n \" END AS is_nullable \\n\" +\n \"FROM \\n\" +\n \" sqlite_master m \\n\" +\n \"JOIN \\n\" +\n \" pragma_table_info(m.name) p \\n\" +\n \"WHERE \\n\" +\n \" m.type = 'table' AND \\n\" +\n \" m.name NOT LIKE 'sqlite_%';\\n\";\n\n const rep = await appDataSource.query(sql);\n\n return formatToSqlTable(rep);\n }\n\n if (\n appDataSource.options.type === \"mysql\" ||\n appDataSource.options.type === \"aurora-mysql\"\n ) {\n sql =\n \"SELECT \" +\n \"TABLE_NAME AS table_name, \" +\n \"COLUMN_NAME AS column_name, \" +\n \"DATA_TYPE AS data_type, \" +\n \"IS_NULLABLE AS is_nullable \" +\n \"FROM INFORMATION_SCHEMA.COLUMNS \" +\n `WHERE TABLE_SCHEMA = '${appDataSource.options.database}';`;\n\n const rep = await appDataSource.query(sql);\n\n return formatToSqlTable(rep);\n }\n\n if (appDataSource.options.type === \"mssql\") {\n const schema = appDataSource.options?.schema;\n const sql = `SELECT\n TABLE_NAME AS table_name,\n COLUMN_NAME AS column_name,\n DATA_TYPE AS data_type,\n IS_NULLABLE AS is_nullable\n FROM INFORMATION_SCHEMA.COLUMNS\n ${schema && `WHERE TABLE_SCHEMA = '${schema}'`} \nORDER BY TABLE_NAME, ORDINAL_POSITION;`;\n\n const rep = await appDataSource.query(sql);\n return formatToSqlTable(rep);\n }\n\n if (appDataSource.options.type === \"sap\") {\n const schema = appDataSource.options?.schema ?? \"public\";\n sql = `SELECT\n TABLE_NAME,\n COLUMN_NAME,\n DATA_TYPE_NAME AS data_type,\n CASE WHEN IS_NULLABLE='TRUE' THEN 'YES' ELSE 'NO' END AS is_nullable\n FROM TABLE_COLUMNS\n WHERE SCHEMA_NAME='${schema}'`;\n\n const rep: Array<{ [key: string]: string }> =\n await appDataSource.query(sql);\n\n const repLowerCase: Array<RawResultTableAndColumn> = [];\n rep.forEach((_rep) =>\n repLowerCase.push({\n table_name: _rep.TABLE_NAME,\n column_name: _rep.COLUMN_NAME,\n data_type: _rep.DATA_TYPE,\n is_nullable: _rep.IS_NULLABLE,\n })\n );\n\n return formatToSqlTable(repLowerCase);\n }\n if (appDataSource.options.type === \"oracle\") {\n const schemaName = appDataSource.options.schema;\n const sql = ` \n SELECT\n TABLE_NAME AS \"table_name\",\n COLUMN_NAME AS \"column_name\",\n DATA_TYPE AS \"data_type\",\n NULLABLE AS \"is_nullable\"\n FROM ALL_TAB_COLS\n WHERE\n OWNER = UPPER('${schemaName}')`;\n const rep = await appDataSource.query(sql);\n return formatToSqlTable(rep);\n }\n throw new Error(\"Database type not implemented yet\");\n};\n\nconst formatSqlResponseToSimpleTableString = (rawResult: unknown): string => {\n if (!rawResult || !Array.isArray(rawResult) || rawResult.length === 0) {\n return \"\";\n }\n\n let globalString = \"\";\n for (const oneRow of rawResult) {\n globalString += `${Object.values(oneRow).reduce(\n (completeString, columnValue) => `${completeString} ${columnValue}`,\n \"\"\n )}\\n`;\n }\n\n return globalString;\n};\n\nexport const generateTableInfoFromTables = async (\n tables: Array<SqlTable> | undefined,\n appDataSource: DataSource,\n nbSampleRow: number,\n customDescription?: Record<string, string>\n): Promise<string> => {\n if (!tables) {\n return \"\";\n }\n\n let globalString = \"\";\n for (const currentTable of tables) {\n // Add the custom info of the table\n const tableCustomDescription =\n customDescription &&\n Object.keys(customDescription).includes(currentTable.tableName)\n ? `${customDescription[currentTable.tableName]}\\n`\n : \"\";\n // Add the creation of the table in SQL\n let schema = null;\n if (appDataSource.options.type === \"postgres\") {\n schema = appDataSource.options?.schema ?? \"public\";\n } else if (appDataSource.options.type === \"mssql\") {\n schema = appDataSource.options?.schema;\n } else if (appDataSource.options.type === \"sap\") {\n schema =\n appDataSource.options?.schema ??\n appDataSource.options?.username ??\n \"public\";\n } else if (appDataSource.options.type === \"oracle\") {\n schema = appDataSource.options.schema;\n }\n let sqlCreateTableQuery = schema\n ? `CREATE TABLE \"${schema}\".\"${currentTable.tableName}\" (\\n`\n : `CREATE TABLE ${currentTable.tableName} (\\n`;\n for (const [key, currentColumn] of currentTable.columns.entries()) {\n if (key > 0) {\n sqlCreateTableQuery += \", \";\n }\n sqlCreateTableQuery += `${currentColumn.columnName} ${\n currentColumn.dataType\n } ${currentColumn.isNullable ? \"\" : \"NOT NULL\"}`;\n }\n sqlCreateTableQuery += \") \\n\";\n\n let sqlSelectInfoQuery;\n if (appDataSource.options.type === \"mysql\") {\n // We use backticks to quote the table names and thus allow for example spaces in table names\n sqlSelectInfoQuery = `SELECT * FROM \\`${currentTable.tableName}\\` LIMIT ${nbSampleRow};\\n`;\n } else if (appDataSource.options.type === \"postgres\") {\n const schema = appDataSource.options?.schema ?? \"public\";\n sqlSelectInfoQuery = `SELECT * FROM \"${schema}\".\"${currentTable.tableName}\" LIMIT ${nbSampleRow};\\n`;\n } else if (appDataSource.options.type === \"mssql\") {\n const schema = appDataSource.options?.schema;\n sqlSelectInfoQuery = schema\n ? `SELECT TOP ${nbSampleRow} * FROM ${schema}.[${currentTable.tableName}];\\n`\n : `SELECT TOP ${nbSampleRow} * FROM [${currentTable.tableName}];\\n`;\n } else if (appDataSource.options.type === \"sap\") {\n const schema =\n appDataSource.options?.schema ??\n appDataSource.options?.username ??\n \"public\";\n sqlSelectInfoQuery = `SELECT * FROM \"${schema}\".\"${currentTable.tableName}\" LIMIT ${nbSampleRow};\\n`;\n } else if (appDataSource.options.type === \"oracle\") {\n sqlSelectInfoQuery = `SELECT * FROM \"${schema}\".\"${currentTable.tableName}\" WHERE ROWNUM <= '${nbSampleRow}'`;\n } else {\n sqlSelectInfoQuery = `SELECT * FROM \"${currentTable.tableName}\" LIMIT ${nbSampleRow};\\n`;\n }\n\n const columnNamesConcatString = `${currentTable.columns.reduce(\n (completeString, column) => `${completeString} ${column.columnName}`,\n \"\"\n )}\\n`;\n\n let sample = \"\";\n try {\n const infoObjectResult = nbSampleRow\n ? await appDataSource.query(sqlSelectInfoQuery)\n : null;\n sample = formatSqlResponseToSimpleTableString(infoObjectResult);\n } catch (error) {\n // If the request fails we catch it and only display a log message\n console.log(error);\n }\n\n globalString = globalString.concat(\n tableCustomDescription +\n sqlCreateTableQuery +\n sqlSelectInfoQuery +\n columnNamesConcatString +\n sample\n );\n }\n\n return globalString;\n};\n\nexport const getPromptTemplateFromDataSource = (\n appDataSource: DataSource\n): PromptTemplate => {\n if (appDataSource.options.type === \"postgres\") {\n return SQL_POSTGRES_PROMPT;\n }\n\n if (appDataSource.options.type === \"sqlite\") {\n return SQL_SQLITE_PROMPT;\n }\n\n if (appDataSource.options.type === \"mysql\") {\n return SQL_MYSQL_PROMPT;\n }\n\n if (appDataSource.options.type === \"mssql\") {\n return SQL_MSSQL_PROMPT;\n }\n\n if (appDataSource.options.type === \"sap\") {\n return SQL_SAP_HANA_PROMPT;\n }\n\n if (appDataSource.options.type === \"oracle\") {\n return SQL_ORACLE_PROMPT;\n }\n\n return DEFAULT_SQL_DATABASE_PROMPT;\n};\n"],"mappings":";;;AAiDA,MAAa,kCAAkC,CAC7CA,oBACAC,YACAC,mBACS;CACT,MAAMC,iBAAgC,mBAAmB,IACvD,CAACC,UAAoB,MAAM,UAC5B;AACD,KAAI,WAAW,SAAS,GACtB;OAAK,MAAM,aAAa,WACtB,KAAI,CAAC,eAAe,SAAS,UAAU,CACrC,OAAM,IAAI,MACR,GAAG,eAAe,WAAW,EAAE,UAAU,8BAA8B,CAAC;CAG7E;AAEJ;AAED,MAAa,qCAAqC,CAChDJ,oBACAK,kBACS;CACT,gCACE,oBACA,eACA,wCACD;AACF;AAED,MAAa,oCAAoC,CAC/CL,oBACAM,iBACS;CACT,gCACE,oBACA,cACA,uCACD;AACF;AAED,MAAM,mBAAmB,CACvBC,6BACoB;CACpB,MAAMC,WAA4B,CAAE;AACpC,MAAK,MAAM,aAAa,0BAA0B;EAChD,MAAM,YAAY;GAChB,YAAY,UAAU;GACtB,UAAU,UAAU;GACpB,YAAY,UAAU,gBAAgB;EACvC;EACD,MAAM,eAAe,SAAS,KAC5B,CAAC,aAAa,SAAS,cAAc,UAAU,WAChD;AACD,MAAI,cACF,aAAa,QAAQ,KAAK,UAAU;OAC/B;GACL,MAAM,WAAW;IACf,WAAW,UAAU;IACrB,SAAS,CAAC,SAAU;GACrB;GACD,SAAS,KAAK,SAAS;EACxB;CACF;AAED,QAAO;AACR;AAED,MAAa,yBAAyB,OACpCC,kBAC6B;CAC7B,IAAI;AACJ,KAAI,cAAc,QAAQ,SAAS,YAAY;EAC7C,MAAM,SAAS,cAAc,SAAS,UAAU;EAChD,MAAM,CAAC;;;;;;;;8BAQmB,EAAE,OAAO;oCACH,EAAE,OAAO;;;+BAGd,CAAC;EAC5B,MAAM,MAAM,MAAM,cAAc,MAAM,IAAI;AAE1C,SAAO,iBAAiB,IAAI;CAC7B;AAED,KACE,cAAc,QAAQ,SAAS,YAC/B,cAAc,QAAQ,SAAS,oBAC/B,cAAc,QAAQ,SAAS,SAC/B;EACA,MACE;EAgBF,MAAM,MAAM,MAAM,cAAc,MAAM,IAAI;AAE1C,SAAO,iBAAiB,IAAI;CAC7B;AAED,KACE,cAAc,QAAQ,SAAS,WAC/B,cAAc,QAAQ,SAAS,gBAC/B;EACA,MACE,CAMC,sKAAsB,EAAE,cAAc,QAAQ,SAAS,EAAE,CAAC;EAE7D,MAAM,MAAM,MAAM,cAAc,MAAM,IAAI;AAE1C,SAAO,iBAAiB,IAAI;CAC7B;AAED,KAAI,cAAc,QAAQ,SAAS,SAAS;EAC1C,MAAM,SAAS,cAAc,SAAS;EACtC,MAAMC,QAAM,CAAC;;;;;;IAMb,EAAE,UAAU,CAAC,sBAAsB,EAAE,OAAO,CAAC,CAAC,CAAC;sCACb,CAAC;EAEnC,MAAM,MAAM,MAAM,cAAc,MAAMA,MAAI;AAC1C,SAAO,iBAAiB,IAAI;CAC7B;AAED,KAAI,cAAc,QAAQ,SAAS,OAAO;EACxC,MAAM,SAAS,cAAc,SAAS,UAAU;EAChD,MAAM,CAAC;;;;;;yBAMc,EAAE,OAAO,CAAC,CAAC;EAEhC,MAAMC,MACJ,MAAM,cAAc,MAAM,IAAI;EAEhC,MAAMC,eAA+C,CAAE;EACvD,IAAI,QAAQ,CAAC,SACX,aAAa,KAAK;GAChB,YAAY,KAAK;GACjB,aAAa,KAAK;GAClB,WAAW,KAAK;GAChB,aAAa,KAAK;EACnB,EAAC,CACH;AAED,SAAO,iBAAiB,aAAa;CACtC;AACD,KAAI,cAAc,QAAQ,SAAS,UAAU;EAC3C,MAAM,aAAa,cAAc,QAAQ;EACzC,MAAMF,QAAM,CAAC;;;;;;;;yBAQQ,EAAE,WAAW,EAAE,CAAC;EACrC,MAAM,MAAM,MAAM,cAAc,MAAMA,MAAI;AAC1C,SAAO,iBAAiB,IAAI;CAC7B;AACD,OAAM,IAAI,MAAM;AACjB;AAED,MAAM,uCAAuC,CAACG,cAA+B;AAC3E,KAAI,CAAC,aAAa,CAAC,MAAM,QAAQ,UAAU,IAAI,UAAU,WAAW,EAClE,QAAO;CAGT,IAAI,eAAe;AACnB,MAAK,MAAM,UAAU,WACnB,gBAAgB,GAAG,OAAO,OAAO,OAAO,CAAC,OACvC,CAAC,gBAAgB,gBAAgB,GAAG,eAAe,CAAC,EAAE,aAAa,EACnE,GACD,CAAC,EAAE,CAAC;AAGP,QAAO;AACR;AAED,MAAa,8BAA8B,OACzCC,QACAL,eACAM,aACAC,sBACoB;AACpB,KAAI,CAAC,OACH,QAAO;CAGT,IAAI,eAAe;AACnB,MAAK,MAAM,gBAAgB,QAAQ;EAEjC,MAAM,yBACJ,qBACA,OAAO,KAAK,kBAAkB,CAAC,SAAS,aAAa,UAAU,GAC3D,GAAG,kBAAkB,aAAa,WAAW,EAAE,CAAC,GAChD;EAEN,IAAI,SAAS;AACb,MAAI,cAAc,QAAQ,SAAS,YACjC,SAAS,cAAc,SAAS,UAAU;WACjC,cAAc,QAAQ,SAAS,SACxC,SAAS,cAAc,SAAS;WACvB,cAAc,QAAQ,SAAS,OACxC,SACE,cAAc,SAAS,UACvB,cAAc,SAAS,YACvB;WACO,cAAc,QAAQ,SAAS,UACxC,SAAS,cAAc,QAAQ;EAEjC,IAAI,sBAAsB,SACtB,CAAC,cAAc,EAAE,OAAO,GAAG,EAAE,aAAa,UAAU,KAAK,CAAC,GAC1D,CAAC,aAAa,EAAE,aAAa,UAAU,IAAI,CAAC;AAChD,OAAK,MAAM,CAAC,KAAK,cAAc,IAAI,aAAa,QAAQ,SAAS,EAAE;AACjE,OAAI,MAAM,GACR,uBAAuB;GAEzB,uBAAuB,GAAG,cAAc,WAAW,CAAC,EAClD,cAAc,SACf,CAAC,EAAE,cAAc,aAAa,KAAK,YAAY;EACjD;EACD,uBAAuB;EAEvB,IAAI;AACJ,MAAI,cAAc,QAAQ,SAAS,SAEjC,qBAAqB,CAAC,gBAAgB,EAAE,aAAa,UAAU,SAAS,EAAE,YAAY,GAAG,CAAC;WACjF,cAAc,QAAQ,SAAS,YAAY;GACpD,MAAMC,WAAS,cAAc,SAAS,UAAU;GAChD,qBAAqB,CAAC,eAAe,EAAEA,SAAO,GAAG,EAAE,aAAa,UAAU,QAAQ,EAAE,YAAY,GAAG,CAAC;EACrG,WAAU,cAAc,QAAQ,SAAS,SAAS;GACjD,MAAMA,WAAS,cAAc,SAAS;GACtC,qBAAqBA,WACjB,CAAC,WAAW,EAAE,YAAY,QAAQ,EAAEA,SAAO,EAAE,EAAE,aAAa,UAAU,IAAI,CAAC,GAC3E,CAAC,WAAW,EAAE,YAAY,SAAS,EAAE,aAAa,UAAU,IAAI,CAAC;EACtE,WAAU,cAAc,QAAQ,SAAS,OAAO;GAC/C,MAAMA,WACJ,cAAc,SAAS,UACvB,cAAc,SAAS,YACvB;GACF,qBAAqB,CAAC,eAAe,EAAEA,SAAO,GAAG,EAAE,aAAa,UAAU,QAAQ,EAAE,YAAY,GAAG,CAAC;EACrG,WAAU,cAAc,QAAQ,SAAS,UACxC,qBAAqB,CAAC,eAAe,EAAE,OAAO,GAAG,EAAE,aAAa,UAAU,mBAAmB,EAAE,YAAY,CAAC,CAAC;OAE7G,qBAAqB,CAAC,eAAe,EAAE,aAAa,UAAU,QAAQ,EAAE,YAAY,GAAG,CAAC;EAG1F,MAAM,0BAA0B,GAAG,aAAa,QAAQ,OACtD,CAAC,gBAAgB,WAAW,GAAG,eAAe,CAAC,EAAE,OAAO,YAAY,EACpE,GACD,CAAC,EAAE,CAAC;EAEL,IAAI,SAAS;AACb,MAAI;GACF,MAAM,mBAAmB,cACrB,MAAM,cAAc,MAAM,mBAAmB,GAC7C;GACJ,SAAS,qCAAqC,iBAAiB;EAChE,SAAQ,OAAO;GAEd,QAAQ,IAAI,MAAM;EACnB;EAED,eAAe,aAAa,OAC1B,yBACE,sBACA,qBACA,0BACA,OACH;CACF;AAED,QAAO;AACR;AAED,MAAa,kCAAkC,CAC7CR,kBACmB;AACnB,KAAI,cAAc,QAAQ,SAAS,WACjC,QAAOS;AAGT,KAAI,cAAc,QAAQ,SAAS,SACjC,QAAOC;AAGT,KAAI,cAAc,QAAQ,SAAS,QACjC,QAAOC;AAGT,KAAI,cAAc,QAAQ,SAAS,QACjC,QAAOC;AAGT,KAAI,cAAc,QAAQ,SAAS,MACjC,QAAOC;AAGT,KAAI,cAAc,QAAQ,SAAS,SACjC,QAAOC;AAGT,QAAOC;AACR"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"sql_utils.js","names":["tablesFromDatabase: Array<SqlTable>","listTables: Array<string>","errorPrefixMsg: string","onlyTableNames: Array<string>","table: SqlTable","includeTables: Array<string>","ignoreTables: Array<string>","rawResultsTableAndColumn: Array<RawResultTableAndColumn>","sqlTable: Array<SqlTable>","appDataSource: DataSource","sql","rep: Array<{ [key: string]: string }>","repLowerCase: Array<RawResultTableAndColumn>","rawResult: unknown","tables: Array<SqlTable> | undefined","nbSampleRow: number","customDescription?: Record<string, string>","schema"],"sources":["../../src/util/sql_utils.ts"],"sourcesContent":["import type { DataSource, DataSourceOptions } from \"typeorm\";\nimport type { PromptTemplate } from \"@langchain/core/prompts\";\nimport {\n DEFAULT_SQL_DATABASE_PROMPT,\n SQL_SAP_HANA_PROMPT,\n SQL_MSSQL_PROMPT,\n SQL_MYSQL_PROMPT,\n SQL_POSTGRES_PROMPT,\n SQL_SQLITE_PROMPT,\n SQL_ORACLE_PROMPT,\n} from \"../chains/sql_db/sql_db_prompt.js\";\n\ninterface RawResultTableAndColumn {\n table_name: string;\n column_name: string;\n data_type: string | undefined;\n is_nullable: string;\n}\n\nexport interface SqlDatabaseParams {\n includesTables?: Array<string>;\n ignoreTables?: Array<string>;\n sampleRowsInTableInfo?: number;\n customDescription?: Record<string, string>;\n}\n\nexport interface SqlDatabaseOptionsParams extends SqlDatabaseParams {\n appDataSourceOptions: DataSourceOptions;\n}\n\nexport interface SqlDatabaseDataSourceParams extends SqlDatabaseParams {\n appDataSource: DataSource;\n}\n\nexport type SerializedSqlDatabase = SqlDatabaseOptionsParams & {\n _type: string;\n};\n\nexport interface SqlTable {\n tableName: string;\n columns: SqlColumn[];\n}\n\nexport interface SqlColumn {\n columnName: string;\n dataType?: string;\n isNullable?: boolean;\n}\n\nexport const verifyListTablesExistInDatabase = (\n tablesFromDatabase: Array<SqlTable>,\n listTables: Array<string>,\n errorPrefixMsg: string\n): void => {\n const onlyTableNames: Array<string> = tablesFromDatabase.map(\n (table: SqlTable) => table.tableName\n );\n if (listTables.length > 0) {\n for (const tableName of listTables) {\n if (!onlyTableNames.includes(tableName)) {\n throw new Error(\n `${errorPrefixMsg} the table ${tableName} was not found in the database`\n );\n }\n }\n }\n};\n\nexport const verifyIncludeTablesExistInDatabase = (\n tablesFromDatabase: Array<SqlTable>,\n includeTables: Array<string>\n): void => {\n verifyListTablesExistInDatabase(\n tablesFromDatabase,\n includeTables,\n \"Include tables not found in database:\"\n );\n};\n\nexport const verifyIgnoreTablesExistInDatabase = (\n tablesFromDatabase: Array<SqlTable>,\n ignoreTables: Array<string>\n): void => {\n verifyListTablesExistInDatabase(\n tablesFromDatabase,\n ignoreTables,\n \"Ignore tables not found in database:\"\n );\n};\n\nconst formatToSqlTable = (\n rawResultsTableAndColumn: Array<RawResultTableAndColumn>\n): Array<SqlTable> => {\n const sqlTable: Array<SqlTable> = [];\n for (const oneResult of rawResultsTableAndColumn) {\n const sqlColumn = {\n columnName: oneResult.column_name,\n dataType: oneResult.data_type,\n isNullable: oneResult.is_nullable === \"YES\",\n };\n const currentTable = sqlTable.find(\n (oneTable) => oneTable.tableName === oneResult.table_name\n );\n if (currentTable) {\n currentTable.columns.push(sqlColumn);\n } else {\n const newTable = {\n tableName: oneResult.table_name,\n columns: [sqlColumn],\n };\n sqlTable.push(newTable);\n }\n }\n\n return sqlTable;\n};\n\nexport const getTableAndColumnsName = async (\n appDataSource: DataSource\n): Promise<Array<SqlTable>> => {\n let sql;\n if (appDataSource.options.type === \"postgres\") {\n const schema = appDataSource.options?.schema ?? \"public\";\n sql = `SELECT \n t.table_name, \n c.* \n FROM \n information_schema.tables t \n JOIN information_schema.columns c \n ON t.table_name = c.table_name \n WHERE \n t.table_schema = '${schema}' \n AND c.table_schema = '${schema}' \n ORDER BY \n t.table_name,\n c.ordinal_position;`;\n const rep = await appDataSource.query(sql);\n\n return formatToSqlTable(rep);\n }\n\n if (\n appDataSource.options.type === \"sqlite\" ||\n appDataSource.options.type === \"better-sqlite3\" ||\n appDataSource.options.type === \"sqljs\"\n ) {\n sql =\n \"SELECT \\n\" +\n \" m.name AS table_name,\\n\" +\n \" p.name AS column_name,\\n\" +\n \" p.type AS data_type,\\n\" +\n \" CASE \\n\" +\n \" WHEN p.\\\"notnull\\\" = 0 THEN 'YES' \\n\" +\n \" ELSE 'NO' \\n\" +\n \" END AS is_nullable \\n\" +\n \"FROM \\n\" +\n \" sqlite_master m \\n\" +\n \"JOIN \\n\" +\n \" pragma_table_info(m.name) p \\n\" +\n \"WHERE \\n\" +\n \" m.type = 'table' AND \\n\" +\n \" m.name NOT LIKE 'sqlite_%';\\n\";\n\n const rep = await appDataSource.query(sql);\n\n return formatToSqlTable(rep);\n }\n\n if (\n appDataSource.options.type === \"mysql\" ||\n appDataSource.options.type === \"aurora-mysql\"\n ) {\n sql =\n \"SELECT \" +\n \"TABLE_NAME AS table_name, \" +\n \"COLUMN_NAME AS column_name, \" +\n \"DATA_TYPE AS data_type, \" +\n \"IS_NULLABLE AS is_nullable \" +\n \"FROM INFORMATION_SCHEMA.COLUMNS \" +\n `WHERE TABLE_SCHEMA = '${appDataSource.options.database}';`;\n\n const rep = await appDataSource.query(sql);\n\n return formatToSqlTable(rep);\n }\n\n if (appDataSource.options.type === \"mssql\") {\n const schema = appDataSource.options?.schema;\n const sql = `SELECT\n TABLE_NAME AS table_name,\n COLUMN_NAME AS column_name,\n DATA_TYPE AS data_type,\n IS_NULLABLE AS is_nullable\n FROM INFORMATION_SCHEMA.COLUMNS\n ${schema && `WHERE TABLE_SCHEMA = '${schema}'`} \nORDER BY TABLE_NAME, ORDINAL_POSITION;`;\n\n const rep = await appDataSource.query(sql);\n return formatToSqlTable(rep);\n }\n\n if (appDataSource.options.type === \"sap\") {\n const schema = appDataSource.options?.schema ?? \"public\";\n sql = `SELECT\n TABLE_NAME,\n COLUMN_NAME,\n DATA_TYPE_NAME AS data_type,\n CASE WHEN IS_NULLABLE='TRUE' THEN 'YES' ELSE 'NO' END AS is_nullable\n FROM TABLE_COLUMNS\n WHERE SCHEMA_NAME='${schema}'`;\n\n const rep: Array<{ [key: string]: string }> = await appDataSource.query(\n sql\n );\n\n const repLowerCase: Array<RawResultTableAndColumn> = [];\n rep.forEach((_rep) =>\n repLowerCase.push({\n table_name: _rep.TABLE_NAME,\n column_name: _rep.COLUMN_NAME,\n data_type: _rep.DATA_TYPE,\n is_nullable: _rep.IS_NULLABLE,\n })\n );\n\n return formatToSqlTable(repLowerCase);\n }\n if (appDataSource.options.type === \"oracle\") {\n const schemaName = appDataSource.options.schema;\n const sql = ` \n SELECT\n TABLE_NAME AS \"table_name\",\n COLUMN_NAME AS \"column_name\",\n DATA_TYPE AS \"data_type\",\n NULLABLE AS \"is_nullable\"\n FROM ALL_TAB_COLS\n WHERE\n OWNER = UPPER('${schemaName}')`;\n const rep = await appDataSource.query(sql);\n return formatToSqlTable(rep);\n }\n throw new Error(\"Database type not implemented yet\");\n};\n\nconst formatSqlResponseToSimpleTableString = (rawResult: unknown): string => {\n if (!rawResult || !Array.isArray(rawResult) || rawResult.length === 0) {\n return \"\";\n }\n\n let globalString = \"\";\n for (const oneRow of rawResult) {\n globalString += `${Object.values(oneRow).reduce(\n (completeString, columnValue) => `${completeString} ${columnValue}`,\n \"\"\n )}\\n`;\n }\n\n return globalString;\n};\n\nexport const generateTableInfoFromTables = async (\n tables: Array<SqlTable> | undefined,\n appDataSource: DataSource,\n nbSampleRow: number,\n customDescription?: Record<string, string>\n): Promise<string> => {\n if (!tables) {\n return \"\";\n }\n\n let globalString = \"\";\n for (const currentTable of tables) {\n // Add the custom info of the table\n const tableCustomDescription =\n customDescription &&\n Object.keys(customDescription).includes(currentTable.tableName)\n ? `${customDescription[currentTable.tableName]}\\n`\n : \"\";\n // Add the creation of the table in SQL\n let schema = null;\n if (appDataSource.options.type === \"postgres\") {\n schema = appDataSource.options?.schema ?? \"public\";\n } else if (appDataSource.options.type === \"mssql\") {\n schema = appDataSource.options?.schema;\n } else if (appDataSource.options.type === \"sap\") {\n schema =\n appDataSource.options?.schema ??\n appDataSource.options?.username ??\n \"public\";\n } else if (appDataSource.options.type === \"oracle\") {\n schema = appDataSource.options.schema;\n }\n let sqlCreateTableQuery = schema\n ? `CREATE TABLE \"${schema}\".\"${currentTable.tableName}\" (\\n`\n : `CREATE TABLE ${currentTable.tableName} (\\n`;\n for (const [key, currentColumn] of currentTable.columns.entries()) {\n if (key > 0) {\n sqlCreateTableQuery += \", \";\n }\n sqlCreateTableQuery += `${currentColumn.columnName} ${\n currentColumn.dataType\n } ${currentColumn.isNullable ? \"\" : \"NOT NULL\"}`;\n }\n sqlCreateTableQuery += \") \\n\";\n\n let sqlSelectInfoQuery;\n if (appDataSource.options.type === \"mysql\") {\n // We use backticks to quote the table names and thus allow for example spaces in table names\n sqlSelectInfoQuery = `SELECT * FROM \\`${currentTable.tableName}\\` LIMIT ${nbSampleRow};\\n`;\n } else if (appDataSource.options.type === \"postgres\") {\n const schema = appDataSource.options?.schema ?? \"public\";\n sqlSelectInfoQuery = `SELECT * FROM \"${schema}\".\"${currentTable.tableName}\" LIMIT ${nbSampleRow};\\n`;\n } else if (appDataSource.options.type === \"mssql\") {\n const schema = appDataSource.options?.schema;\n sqlSelectInfoQuery = schema\n ? `SELECT TOP ${nbSampleRow} * FROM ${schema}.[${currentTable.tableName}];\\n`\n : `SELECT TOP ${nbSampleRow} * FROM [${currentTable.tableName}];\\n`;\n } else if (appDataSource.options.type === \"sap\") {\n const schema =\n appDataSource.options?.schema ??\n appDataSource.options?.username ??\n \"public\";\n sqlSelectInfoQuery = `SELECT * FROM \"${schema}\".\"${currentTable.tableName}\" LIMIT ${nbSampleRow};\\n`;\n } else if (appDataSource.options.type === \"oracle\") {\n sqlSelectInfoQuery = `SELECT * FROM \"${schema}\".\"${currentTable.tableName}\" WHERE ROWNUM <= '${nbSampleRow}'`;\n } else {\n sqlSelectInfoQuery = `SELECT * FROM \"${currentTable.tableName}\" LIMIT ${nbSampleRow};\\n`;\n }\n\n const columnNamesConcatString = `${currentTable.columns.reduce(\n (completeString, column) => `${completeString} ${column.columnName}`,\n \"\"\n )}\\n`;\n\n let sample = \"\";\n try {\n const infoObjectResult = nbSampleRow\n ? await appDataSource.query(sqlSelectInfoQuery)\n : null;\n sample = formatSqlResponseToSimpleTableString(infoObjectResult);\n } catch (error) {\n // If the request fails we catch it and only display a log message\n console.log(error);\n }\n\n globalString = globalString.concat(\n tableCustomDescription +\n sqlCreateTableQuery +\n sqlSelectInfoQuery +\n columnNamesConcatString +\n sample\n );\n }\n\n return globalString;\n};\n\nexport const getPromptTemplateFromDataSource = (\n appDataSource: DataSource\n): PromptTemplate => {\n if (appDataSource.options.type === \"postgres\") {\n return SQL_POSTGRES_PROMPT;\n }\n\n if (appDataSource.options.type === \"sqlite\") {\n return SQL_SQLITE_PROMPT;\n }\n\n if (appDataSource.options.type === \"mysql\") {\n return SQL_MYSQL_PROMPT;\n }\n\n if (appDataSource.options.type === \"mssql\") {\n return SQL_MSSQL_PROMPT;\n }\n\n if (appDataSource.options.type === \"sap\") {\n return SQL_SAP_HANA_PROMPT;\n }\n\n if (appDataSource.options.type === \"oracle\") {\n return SQL_ORACLE_PROMPT;\n }\n\n return DEFAULT_SQL_DATABASE_PROMPT;\n};\n"],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"sql_utils.js","names":["tablesFromDatabase: Array<SqlTable>","listTables: Array<string>","errorPrefixMsg: string","onlyTableNames: Array<string>","table: SqlTable","includeTables: Array<string>","ignoreTables: Array<string>","rawResultsTableAndColumn: Array<RawResultTableAndColumn>","sqlTable: Array<SqlTable>","appDataSource: DataSource","sql","rep: Array<{ [key: string]: string }>","repLowerCase: Array<RawResultTableAndColumn>","rawResult: unknown","tables: Array<SqlTable> | undefined","nbSampleRow: number","customDescription?: Record<string, string>","schema"],"sources":["../../src/util/sql_utils.ts"],"sourcesContent":["import type { DataSource, DataSourceOptions } from \"typeorm\";\nimport type { PromptTemplate } from \"@langchain/core/prompts\";\nimport {\n DEFAULT_SQL_DATABASE_PROMPT,\n SQL_SAP_HANA_PROMPT,\n SQL_MSSQL_PROMPT,\n SQL_MYSQL_PROMPT,\n SQL_POSTGRES_PROMPT,\n SQL_SQLITE_PROMPT,\n SQL_ORACLE_PROMPT,\n} from \"../chains/sql_db/sql_db_prompt.js\";\n\ninterface RawResultTableAndColumn {\n table_name: string;\n column_name: string;\n data_type: string | undefined;\n is_nullable: string;\n}\n\nexport interface SqlDatabaseParams {\n includesTables?: Array<string>;\n ignoreTables?: Array<string>;\n sampleRowsInTableInfo?: number;\n customDescription?: Record<string, string>;\n}\n\nexport interface SqlDatabaseOptionsParams extends SqlDatabaseParams {\n appDataSourceOptions: DataSourceOptions;\n}\n\nexport interface SqlDatabaseDataSourceParams extends SqlDatabaseParams {\n appDataSource: DataSource;\n}\n\nexport type SerializedSqlDatabase = SqlDatabaseOptionsParams & {\n _type: string;\n};\n\nexport interface SqlTable {\n tableName: string;\n columns: SqlColumn[];\n}\n\nexport interface SqlColumn {\n columnName: string;\n dataType?: string;\n isNullable?: boolean;\n}\n\nexport const verifyListTablesExistInDatabase = (\n tablesFromDatabase: Array<SqlTable>,\n listTables: Array<string>,\n errorPrefixMsg: string\n): void => {\n const onlyTableNames: Array<string> = tablesFromDatabase.map(\n (table: SqlTable) => table.tableName\n );\n if (listTables.length > 0) {\n for (const tableName of listTables) {\n if (!onlyTableNames.includes(tableName)) {\n throw new Error(\n `${errorPrefixMsg} the table ${tableName} was not found in the database`\n );\n }\n }\n }\n};\n\nexport const verifyIncludeTablesExistInDatabase = (\n tablesFromDatabase: Array<SqlTable>,\n includeTables: Array<string>\n): void => {\n verifyListTablesExistInDatabase(\n tablesFromDatabase,\n includeTables,\n \"Include tables not found in database:\"\n );\n};\n\nexport const verifyIgnoreTablesExistInDatabase = (\n tablesFromDatabase: Array<SqlTable>,\n ignoreTables: Array<string>\n): void => {\n verifyListTablesExistInDatabase(\n tablesFromDatabase,\n ignoreTables,\n \"Ignore tables not found in database:\"\n );\n};\n\nconst formatToSqlTable = (\n rawResultsTableAndColumn: Array<RawResultTableAndColumn>\n): Array<SqlTable> => {\n const sqlTable: Array<SqlTable> = [];\n for (const oneResult of rawResultsTableAndColumn) {\n const sqlColumn = {\n columnName: oneResult.column_name,\n dataType: oneResult.data_type,\n isNullable: oneResult.is_nullable === \"YES\",\n };\n const currentTable = sqlTable.find(\n (oneTable) => oneTable.tableName === oneResult.table_name\n );\n if (currentTable) {\n currentTable.columns.push(sqlColumn);\n } else {\n const newTable = {\n tableName: oneResult.table_name,\n columns: [sqlColumn],\n };\n sqlTable.push(newTable);\n }\n }\n\n return sqlTable;\n};\n\nexport const getTableAndColumnsName = async (\n appDataSource: DataSource\n): Promise<Array<SqlTable>> => {\n let sql;\n if (appDataSource.options.type === \"postgres\") {\n const schema = appDataSource.options?.schema ?? \"public\";\n sql = `SELECT \n t.table_name, \n c.* \n FROM \n information_schema.tables t \n JOIN information_schema.columns c \n ON t.table_name = c.table_name \n WHERE \n t.table_schema = '${schema}' \n AND c.table_schema = '${schema}' \n ORDER BY \n t.table_name,\n c.ordinal_position;`;\n const rep = await appDataSource.query(sql);\n\n return formatToSqlTable(rep);\n }\n\n if (\n appDataSource.options.type === \"sqlite\" ||\n appDataSource.options.type === \"better-sqlite3\" ||\n appDataSource.options.type === \"sqljs\"\n ) {\n sql =\n \"SELECT \\n\" +\n \" m.name AS table_name,\\n\" +\n \" p.name AS column_name,\\n\" +\n \" p.type AS data_type,\\n\" +\n \" CASE \\n\" +\n \" WHEN p.\\\"notnull\\\" = 0 THEN 'YES' \\n\" +\n \" ELSE 'NO' \\n\" +\n \" END AS is_nullable \\n\" +\n \"FROM \\n\" +\n \" sqlite_master m \\n\" +\n \"JOIN \\n\" +\n \" pragma_table_info(m.name) p \\n\" +\n \"WHERE \\n\" +\n \" m.type = 'table' AND \\n\" +\n \" m.name NOT LIKE 'sqlite_%';\\n\";\n\n const rep = await appDataSource.query(sql);\n\n return formatToSqlTable(rep);\n }\n\n if (\n appDataSource.options.type === \"mysql\" ||\n appDataSource.options.type === \"aurora-mysql\"\n ) {\n sql =\n \"SELECT \" +\n \"TABLE_NAME AS table_name, \" +\n \"COLUMN_NAME AS column_name, \" +\n \"DATA_TYPE AS data_type, \" +\n \"IS_NULLABLE AS is_nullable \" +\n \"FROM INFORMATION_SCHEMA.COLUMNS \" +\n `WHERE TABLE_SCHEMA = '${appDataSource.options.database}';`;\n\n const rep = await appDataSource.query(sql);\n\n return formatToSqlTable(rep);\n }\n\n if (appDataSource.options.type === \"mssql\") {\n const schema = appDataSource.options?.schema;\n const sql = `SELECT\n TABLE_NAME AS table_name,\n COLUMN_NAME AS column_name,\n DATA_TYPE AS data_type,\n IS_NULLABLE AS is_nullable\n FROM INFORMATION_SCHEMA.COLUMNS\n ${schema && `WHERE TABLE_SCHEMA = '${schema}'`} \nORDER BY TABLE_NAME, ORDINAL_POSITION;`;\n\n const rep = await appDataSource.query(sql);\n return formatToSqlTable(rep);\n }\n\n if (appDataSource.options.type === \"sap\") {\n const schema = appDataSource.options?.schema ?? \"public\";\n sql = `SELECT\n TABLE_NAME,\n COLUMN_NAME,\n DATA_TYPE_NAME AS data_type,\n CASE WHEN IS_NULLABLE='TRUE' THEN 'YES' ELSE 'NO' END AS is_nullable\n FROM TABLE_COLUMNS\n WHERE SCHEMA_NAME='${schema}'`;\n\n const rep: Array<{ [key: string]: string }> =\n await appDataSource.query(sql);\n\n const repLowerCase: Array<RawResultTableAndColumn> = [];\n rep.forEach((_rep) =>\n repLowerCase.push({\n table_name: _rep.TABLE_NAME,\n column_name: _rep.COLUMN_NAME,\n data_type: _rep.DATA_TYPE,\n is_nullable: _rep.IS_NULLABLE,\n })\n );\n\n return formatToSqlTable(repLowerCase);\n }\n if (appDataSource.options.type === \"oracle\") {\n const schemaName = appDataSource.options.schema;\n const sql = ` \n SELECT\n TABLE_NAME AS \"table_name\",\n COLUMN_NAME AS \"column_name\",\n DATA_TYPE AS \"data_type\",\n NULLABLE AS \"is_nullable\"\n FROM ALL_TAB_COLS\n WHERE\n OWNER = UPPER('${schemaName}')`;\n const rep = await appDataSource.query(sql);\n return formatToSqlTable(rep);\n }\n throw new Error(\"Database type not implemented yet\");\n};\n\nconst formatSqlResponseToSimpleTableString = (rawResult: unknown): string => {\n if (!rawResult || !Array.isArray(rawResult) || rawResult.length === 0) {\n return \"\";\n }\n\n let globalString = \"\";\n for (const oneRow of rawResult) {\n globalString += `${Object.values(oneRow).reduce(\n (completeString, columnValue) => `${completeString} ${columnValue}`,\n \"\"\n )}\\n`;\n }\n\n return globalString;\n};\n\nexport const generateTableInfoFromTables = async (\n tables: Array<SqlTable> | undefined,\n appDataSource: DataSource,\n nbSampleRow: number,\n customDescription?: Record<string, string>\n): Promise<string> => {\n if (!tables) {\n return \"\";\n }\n\n let globalString = \"\";\n for (const currentTable of tables) {\n // Add the custom info of the table\n const tableCustomDescription =\n customDescription &&\n Object.keys(customDescription).includes(currentTable.tableName)\n ? `${customDescription[currentTable.tableName]}\\n`\n : \"\";\n // Add the creation of the table in SQL\n let schema = null;\n if (appDataSource.options.type === \"postgres\") {\n schema = appDataSource.options?.schema ?? \"public\";\n } else if (appDataSource.options.type === \"mssql\") {\n schema = appDataSource.options?.schema;\n } else if (appDataSource.options.type === \"sap\") {\n schema =\n appDataSource.options?.schema ??\n appDataSource.options?.username ??\n \"public\";\n } else if (appDataSource.options.type === \"oracle\") {\n schema = appDataSource.options.schema;\n }\n let sqlCreateTableQuery = schema\n ? `CREATE TABLE \"${schema}\".\"${currentTable.tableName}\" (\\n`\n : `CREATE TABLE ${currentTable.tableName} (\\n`;\n for (const [key, currentColumn] of currentTable.columns.entries()) {\n if (key > 0) {\n sqlCreateTableQuery += \", \";\n }\n sqlCreateTableQuery += `${currentColumn.columnName} ${\n currentColumn.dataType\n } ${currentColumn.isNullable ? \"\" : \"NOT NULL\"}`;\n }\n sqlCreateTableQuery += \") \\n\";\n\n let sqlSelectInfoQuery;\n if (appDataSource.options.type === \"mysql\") {\n // We use backticks to quote the table names and thus allow for example spaces in table names\n sqlSelectInfoQuery = `SELECT * FROM \\`${currentTable.tableName}\\` LIMIT ${nbSampleRow};\\n`;\n } else if (appDataSource.options.type === \"postgres\") {\n const schema = appDataSource.options?.schema ?? \"public\";\n sqlSelectInfoQuery = `SELECT * FROM \"${schema}\".\"${currentTable.tableName}\" LIMIT ${nbSampleRow};\\n`;\n } else if (appDataSource.options.type === \"mssql\") {\n const schema = appDataSource.options?.schema;\n sqlSelectInfoQuery = schema\n ? `SELECT TOP ${nbSampleRow} * FROM ${schema}.[${currentTable.tableName}];\\n`\n : `SELECT TOP ${nbSampleRow} * FROM [${currentTable.tableName}];\\n`;\n } else if (appDataSource.options.type === \"sap\") {\n const schema =\n appDataSource.options?.schema ??\n appDataSource.options?.username ??\n \"public\";\n sqlSelectInfoQuery = `SELECT * FROM \"${schema}\".\"${currentTable.tableName}\" LIMIT ${nbSampleRow};\\n`;\n } else if (appDataSource.options.type === \"oracle\") {\n sqlSelectInfoQuery = `SELECT * FROM \"${schema}\".\"${currentTable.tableName}\" WHERE ROWNUM <= '${nbSampleRow}'`;\n } else {\n sqlSelectInfoQuery = `SELECT * FROM \"${currentTable.tableName}\" LIMIT ${nbSampleRow};\\n`;\n }\n\n const columnNamesConcatString = `${currentTable.columns.reduce(\n (completeString, column) => `${completeString} ${column.columnName}`,\n \"\"\n )}\\n`;\n\n let sample = \"\";\n try {\n const infoObjectResult = nbSampleRow\n ? await appDataSource.query(sqlSelectInfoQuery)\n : null;\n sample = formatSqlResponseToSimpleTableString(infoObjectResult);\n } catch (error) {\n // If the request fails we catch it and only display a log message\n console.log(error);\n }\n\n globalString = globalString.concat(\n tableCustomDescription +\n sqlCreateTableQuery +\n sqlSelectInfoQuery +\n columnNamesConcatString +\n sample\n );\n }\n\n return globalString;\n};\n\nexport const getPromptTemplateFromDataSource = (\n appDataSource: DataSource\n): PromptTemplate => {\n if (appDataSource.options.type === \"postgres\") {\n return SQL_POSTGRES_PROMPT;\n }\n\n if (appDataSource.options.type === \"sqlite\") {\n return SQL_SQLITE_PROMPT;\n }\n\n if (appDataSource.options.type === \"mysql\") {\n return SQL_MYSQL_PROMPT;\n }\n\n if (appDataSource.options.type === \"mssql\") {\n return SQL_MSSQL_PROMPT;\n }\n\n if (appDataSource.options.type === \"sap\") {\n return SQL_SAP_HANA_PROMPT;\n }\n\n if (appDataSource.options.type === \"oracle\") {\n return SQL_ORACLE_PROMPT;\n }\n\n return DEFAULT_SQL_DATABASE_PROMPT;\n};\n"],"mappings":"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"}
|
|
@@ -1,8 +1,8 @@
|
|
|
1
1
|
const require_rolldown_runtime = require('../_virtual/rolldown_runtime.cjs');
|
|
2
2
|
const require_similarities = require('../util/ml-distance/similarities.cjs');
|
|
3
3
|
const __langchain_core_documents = require_rolldown_runtime.__toESM(require("@langchain/core/documents"));
|
|
4
|
-
const __langchain_core_vectorstores = require_rolldown_runtime.__toESM(require("@langchain/core/vectorstores"));
|
|
5
4
|
const __langchain_core_utils_math = require_rolldown_runtime.__toESM(require("@langchain/core/utils/math"));
|
|
5
|
+
const __langchain_core_vectorstores = require_rolldown_runtime.__toESM(require("@langchain/core/vectorstores"));
|
|
6
6
|
|
|
7
7
|
//#region src/vectorstores/memory.ts
|
|
8
8
|
var memory_exports = {};
|
|
@@ -1,8 +1,8 @@
|
|
|
1
1
|
import { __export } from "../_virtual/rolldown_runtime.js";
|
|
2
2
|
import { cosine } from "../util/ml-distance/similarities.js";
|
|
3
3
|
import { Document } from "@langchain/core/documents";
|
|
4
|
-
import { VectorStore } from "@langchain/core/vectorstores";
|
|
5
4
|
import { maximalMarginalRelevance } from "@langchain/core/utils/math";
|
|
5
|
+
import { VectorStore } from "@langchain/core/vectorstores";
|
|
6
6
|
|
|
7
7
|
//#region src/vectorstores/memory.ts
|
|
8
8
|
var memory_exports = {};
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@langchain/classic",
|
|
3
|
-
"version": "1.0.
|
|
3
|
+
"version": "1.0.9",
|
|
4
4
|
"description": "Old abstractions form LangChain.js",
|
|
5
5
|
"author": "LangChain",
|
|
6
6
|
"license": "MIT",
|
|
@@ -156,13 +156,12 @@
|
|
|
156
156
|
"peggy": "^3.0.2",
|
|
157
157
|
"pg": "^8.16.3",
|
|
158
158
|
"pickleparser": "^0.2.1",
|
|
159
|
-
"prettier": "^
|
|
159
|
+
"prettier": "^3.5.0",
|
|
160
160
|
"prisma": "^4.16.2",
|
|
161
161
|
"readline": "^1.3.0",
|
|
162
162
|
"redis": "^4.6.13",
|
|
163
163
|
"reflect-metadata": "^0.2.2",
|
|
164
164
|
"rimraf": "^5.0.1",
|
|
165
|
-
"rollup": "^3.19.1",
|
|
166
165
|
"sqlite3": "^5.1.4",
|
|
167
166
|
"typeorm": "^0.3.26",
|
|
168
167
|
"typescript": "~5.8.3",
|
|
@@ -171,37 +170,37 @@
|
|
|
171
170
|
"voy-search": "0.6.2",
|
|
172
171
|
"weaviate-client": "^3.8.0",
|
|
173
172
|
"zod-to-json-schema": "^3.24.6",
|
|
174
|
-
"@langchain/anthropic": "1.3.
|
|
175
|
-
"@langchain/aws": "1.
|
|
176
|
-
"@langchain/azure-cosmosdb": "1.1.0",
|
|
173
|
+
"@langchain/anthropic": "1.3.8",
|
|
174
|
+
"@langchain/aws": "1.2.0",
|
|
177
175
|
"@langchain/azure-dynamic-sessions": "1.0.1",
|
|
178
176
|
"@langchain/baidu-qianfan": "1.0.1",
|
|
179
177
|
"@langchain/cloudflare": "1.0.1",
|
|
180
178
|
"@langchain/cohere": "1.0.1",
|
|
181
|
-
"@langchain/core": "1.1.
|
|
182
|
-
"@langchain/
|
|
179
|
+
"@langchain/core": "1.1.13",
|
|
180
|
+
"@langchain/azure-cosmosdb": "1.1.0",
|
|
181
|
+
"@langchain/deepseek": "1.0.5",
|
|
183
182
|
"@langchain/eslint": "0.1.1",
|
|
184
183
|
"@langchain/exa": "1.0.1",
|
|
185
|
-
"@langchain/google-cloud-sql-pg": "1.0.
|
|
186
|
-
"@langchain/google-common": "2.1.
|
|
187
|
-
"@langchain/google-genai": "2.1.
|
|
188
|
-
"@langchain/google-vertexai": "2.1.
|
|
189
|
-
"@langchain/google-vertexai-web": "2.1.
|
|
190
|
-
"@langchain/groq": "1.0.
|
|
184
|
+
"@langchain/google-cloud-sql-pg": "1.0.14",
|
|
185
|
+
"@langchain/google-common": "2.1.8",
|
|
186
|
+
"@langchain/google-genai": "2.1.8",
|
|
187
|
+
"@langchain/google-vertexai": "2.1.8",
|
|
188
|
+
"@langchain/google-vertexai-web": "2.1.8",
|
|
189
|
+
"@langchain/groq": "1.0.3",
|
|
191
190
|
"@langchain/mistralai": "1.0.2",
|
|
192
191
|
"@langchain/mongodb": "1.1.0",
|
|
193
192
|
"@langchain/nomic": "1.0.1",
|
|
194
|
-
"@langchain/ollama": "1.
|
|
193
|
+
"@langchain/ollama": "1.2.0",
|
|
195
194
|
"@langchain/pinecone": "1.0.1",
|
|
196
195
|
"@langchain/qdrant": "1.0.1",
|
|
197
196
|
"@langchain/redis": "1.0.1",
|
|
198
197
|
"@langchain/tavily": "1.2.0",
|
|
199
198
|
"@langchain/textsplitters": "1.0.1",
|
|
200
199
|
"@langchain/weaviate": "1.0.1",
|
|
201
|
-
"@langchain/xai": "1.
|
|
200
|
+
"@langchain/xai": "1.2.1",
|
|
202
201
|
"@langchain/yandex": "1.0.1",
|
|
203
202
|
"@langchain/tsconfig": "0.0.1",
|
|
204
|
-
"langchain": "1.2.
|
|
203
|
+
"langchain": "1.2.8"
|
|
205
204
|
},
|
|
206
205
|
"peerDependencies": {
|
|
207
206
|
"@langchain/core": "^1.0.0",
|
|
@@ -228,7 +227,7 @@
|
|
|
228
227
|
"uuid": "^10.0.0",
|
|
229
228
|
"yaml": "^2.2.1",
|
|
230
229
|
"zod": "^3.25.76 || ^4",
|
|
231
|
-
"@langchain/openai": "1.2.
|
|
230
|
+
"@langchain/openai": "1.2.2",
|
|
232
231
|
"@langchain/textsplitters": "1.0.1"
|
|
233
232
|
},
|
|
234
233
|
"optionalDependencies": {
|