@langchain/classic 1.0.33 → 1.0.35

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.
Files changed (247) hide show
  1. package/CHANGELOG.md +14 -0
  2. package/dist/agents/chat/index.cjs.map +1 -1
  3. package/dist/agents/chat/index.js.map +1 -1
  4. package/dist/agents/chat/outputParser.cjs.map +1 -1
  5. package/dist/agents/chat/outputParser.js.map +1 -1
  6. package/dist/agents/chat_convo/index.cjs.map +1 -1
  7. package/dist/agents/chat_convo/index.js.map +1 -1
  8. package/dist/agents/chat_convo/outputParser.cjs.map +1 -1
  9. package/dist/agents/chat_convo/outputParser.js.map +1 -1
  10. package/dist/agents/executor.cjs.map +1 -1
  11. package/dist/agents/executor.js.map +1 -1
  12. package/dist/agents/format_scratchpad/log.cjs.map +1 -1
  13. package/dist/agents/format_scratchpad/log.js.map +1 -1
  14. package/dist/agents/format_scratchpad/log_to_message.cjs.map +1 -1
  15. package/dist/agents/format_scratchpad/log_to_message.js.map +1 -1
  16. package/dist/agents/initialize.cjs.map +1 -1
  17. package/dist/agents/initialize.js.map +1 -1
  18. package/dist/agents/mrkl/index.cjs.map +1 -1
  19. package/dist/agents/mrkl/index.js.map +1 -1
  20. package/dist/agents/mrkl/outputParser.cjs.map +1 -1
  21. package/dist/agents/mrkl/outputParser.js.map +1 -1
  22. package/dist/agents/openai_functions/index.cjs.map +1 -1
  23. package/dist/agents/openai_functions/index.js.map +1 -1
  24. package/dist/agents/openai_tools/index.cjs.map +1 -1
  25. package/dist/agents/openai_tools/index.js.map +1 -1
  26. package/dist/agents/react/index.cjs.map +1 -1
  27. package/dist/agents/react/index.js.map +1 -1
  28. package/dist/agents/react/output_parser.cjs.map +1 -1
  29. package/dist/agents/react/output_parser.js.map +1 -1
  30. package/dist/agents/structured_chat/index.cjs.map +1 -1
  31. package/dist/agents/structured_chat/index.js.map +1 -1
  32. package/dist/agents/structured_chat/outputParser.cjs.map +1 -1
  33. package/dist/agents/structured_chat/outputParser.js.map +1 -1
  34. package/dist/agents/tool_calling/index.cjs.map +1 -1
  35. package/dist/agents/tool_calling/index.js.map +1 -1
  36. package/dist/agents/toolkits/conversational_retrieval/openai_functions.cjs.map +1 -1
  37. package/dist/agents/toolkits/conversational_retrieval/openai_functions.js.map +1 -1
  38. package/dist/agents/toolkits/conversational_retrieval/tool.cjs.map +1 -1
  39. package/dist/agents/toolkits/conversational_retrieval/tool.js.map +1 -1
  40. package/dist/agents/toolkits/json/json.cjs.map +1 -1
  41. package/dist/agents/toolkits/json/json.js.map +1 -1
  42. package/dist/agents/toolkits/openapi/openapi.cjs.map +1 -1
  43. package/dist/agents/toolkits/openapi/openapi.js.map +1 -1
  44. package/dist/agents/toolkits/sql/sql.cjs.map +1 -1
  45. package/dist/agents/toolkits/sql/sql.js.map +1 -1
  46. package/dist/agents/toolkits/vectorstore/vectorstore.cjs.map +1 -1
  47. package/dist/agents/toolkits/vectorstore/vectorstore.js.map +1 -1
  48. package/dist/agents/xml/index.cjs.map +1 -1
  49. package/dist/agents/xml/index.js.map +1 -1
  50. package/dist/chains/analyze_documents_chain.cjs.map +1 -1
  51. package/dist/chains/analyze_documents_chain.js.map +1 -1
  52. package/dist/chains/api/api_chain.cjs.map +1 -1
  53. package/dist/chains/api/api_chain.js.map +1 -1
  54. package/dist/chains/api/prompts.js.map +1 -1
  55. package/dist/chains/base.cjs.map +1 -1
  56. package/dist/chains/base.js.map +1 -1
  57. package/dist/chains/chat_vector_db_chain.cjs.map +1 -1
  58. package/dist/chains/chat_vector_db_chain.js.map +1 -1
  59. package/dist/chains/combine_docs_chain.cjs.map +1 -1
  60. package/dist/chains/combine_docs_chain.js.map +1 -1
  61. package/dist/chains/combine_documents/base.cjs.map +1 -1
  62. package/dist/chains/combine_documents/base.js.map +1 -1
  63. package/dist/chains/combine_documents/reduce.cjs.map +1 -1
  64. package/dist/chains/combine_documents/reduce.js.map +1 -1
  65. package/dist/chains/constitutional_ai/constitutional_prompts.cjs.map +1 -1
  66. package/dist/chains/constitutional_ai/constitutional_prompts.js.map +1 -1
  67. package/dist/chains/conversational_retrieval_chain.cjs.map +1 -1
  68. package/dist/chains/conversational_retrieval_chain.js.map +1 -1
  69. package/dist/chains/graph_qa/cypher.cjs.map +1 -1
  70. package/dist/chains/graph_qa/cypher.js.map +1 -1
  71. package/dist/chains/graph_qa/prompts.cjs.map +1 -1
  72. package/dist/chains/graph_qa/prompts.js.map +1 -1
  73. package/dist/chains/history_aware_retriever.cjs.map +1 -1
  74. package/dist/chains/history_aware_retriever.js.map +1 -1
  75. package/dist/chains/llm_chain.cjs.map +1 -1
  76. package/dist/chains/llm_chain.js.map +1 -1
  77. package/dist/chains/openai_functions/base.cjs.map +1 -1
  78. package/dist/chains/openai_functions/base.js.map +1 -1
  79. package/dist/chains/openai_functions/openapi.cjs.map +1 -1
  80. package/dist/chains/openai_functions/openapi.js.map +1 -1
  81. package/dist/chains/query_constructor/index.cjs.map +1 -1
  82. package/dist/chains/query_constructor/index.js.map +1 -1
  83. package/dist/chains/query_constructor/parser.cjs.map +1 -1
  84. package/dist/chains/query_constructor/parser.js.map +1 -1
  85. package/dist/chains/query_constructor/prompt.cjs.map +1 -1
  86. package/dist/chains/query_constructor/prompt.js.map +1 -1
  87. package/dist/chains/question_answering/load.cjs.map +1 -1
  88. package/dist/chains/question_answering/load.js.map +1 -1
  89. package/dist/chains/question_answering/map_reduce_prompts.cjs.map +1 -1
  90. package/dist/chains/question_answering/map_reduce_prompts.js.map +1 -1
  91. package/dist/chains/question_answering/refine_prompts.cjs.map +1 -1
  92. package/dist/chains/question_answering/refine_prompts.js.map +1 -1
  93. package/dist/chains/question_answering/stuff_prompts.cjs.map +1 -1
  94. package/dist/chains/question_answering/stuff_prompts.js.map +1 -1
  95. package/dist/chains/retrieval.cjs.map +1 -1
  96. package/dist/chains/retrieval.js.map +1 -1
  97. package/dist/chains/router/multi_prompt.cjs.map +1 -1
  98. package/dist/chains/router/multi_prompt.js.map +1 -1
  99. package/dist/chains/router/multi_retrieval_qa.cjs.map +1 -1
  100. package/dist/chains/router/multi_retrieval_qa.js.map +1 -1
  101. package/dist/chains/sql_db/sql_db_chain.cjs.map +1 -1
  102. package/dist/chains/sql_db/sql_db_chain.js.map +1 -1
  103. package/dist/chains/summarization/load.cjs.map +1 -1
  104. package/dist/chains/summarization/load.js.map +1 -1
  105. package/dist/chains/summarization/refine_prompts.cjs.map +1 -1
  106. package/dist/chains/summarization/refine_prompts.js.map +1 -1
  107. package/dist/chains/summarization/stuff_prompts.cjs.map +1 -1
  108. package/dist/chains/summarization/stuff_prompts.js.map +1 -1
  109. package/dist/chat_models/universal.cjs.map +1 -1
  110. package/dist/chat_models/universal.js.map +1 -1
  111. package/dist/document_loaders/fs/json.cjs.map +1 -1
  112. package/dist/document_loaders/fs/json.js.map +1 -1
  113. package/dist/document_loaders/fs/multi_file.cjs.map +1 -1
  114. package/dist/document_loaders/fs/multi_file.js.map +1 -1
  115. package/dist/document_transformers/openai_functions.cjs.map +1 -1
  116. package/dist/document_transformers/openai_functions.js.map +1 -1
  117. package/dist/evaluation/agents/prompt.cjs.map +1 -1
  118. package/dist/evaluation/agents/prompt.js.map +1 -1
  119. package/dist/evaluation/comparison/pairwise.cjs.map +1 -1
  120. package/dist/evaluation/comparison/pairwise.js.map +1 -1
  121. package/dist/evaluation/comparison/prompt.cjs.map +1 -1
  122. package/dist/evaluation/comparison/prompt.js.map +1 -1
  123. package/dist/evaluation/criteria/criteria.cjs.map +1 -1
  124. package/dist/evaluation/criteria/criteria.js.map +1 -1
  125. package/dist/evaluation/criteria/prompt.cjs.map +1 -1
  126. package/dist/evaluation/criteria/prompt.js.map +1 -1
  127. package/dist/evaluation/embedding_distance/base.cjs.map +1 -1
  128. package/dist/evaluation/embedding_distance/base.js.map +1 -1
  129. package/dist/evaluation/qa/eval_chain.cjs.map +1 -1
  130. package/dist/evaluation/qa/eval_chain.js.map +1 -1
  131. package/dist/evaluation/qa/prompt.cjs.map +1 -1
  132. package/dist/evaluation/qa/prompt.js.map +1 -1
  133. package/dist/experimental/autogpt/agent.cjs.map +1 -1
  134. package/dist/experimental/autogpt/agent.js.map +1 -1
  135. package/dist/experimental/autogpt/prompt.cjs.map +1 -1
  136. package/dist/experimental/autogpt/prompt.js.map +1 -1
  137. package/dist/experimental/autogpt/prompt_generator.cjs.map +1 -1
  138. package/dist/experimental/autogpt/prompt_generator.js.map +1 -1
  139. package/dist/experimental/babyagi/agent.cjs.map +1 -1
  140. package/dist/experimental/babyagi/agent.js.map +1 -1
  141. package/dist/experimental/babyagi/task_creation.cjs.map +1 -1
  142. package/dist/experimental/babyagi/task_creation.js.map +1 -1
  143. package/dist/experimental/babyagi/task_execution.cjs.map +1 -1
  144. package/dist/experimental/babyagi/task_execution.js.map +1 -1
  145. package/dist/experimental/babyagi/task_prioritization.cjs.map +1 -1
  146. package/dist/experimental/babyagi/task_prioritization.js.map +1 -1
  147. package/dist/experimental/chains/violation_of_expectations/violation_of_expectations_chain.cjs.map +1 -1
  148. package/dist/experimental/chains/violation_of_expectations/violation_of_expectations_chain.js.map +1 -1
  149. package/dist/experimental/generative_agents/generative_agent.cjs.map +1 -1
  150. package/dist/experimental/generative_agents/generative_agent.js.map +1 -1
  151. package/dist/experimental/generative_agents/generative_agent_memory.cjs.map +1 -1
  152. package/dist/experimental/generative_agents/generative_agent_memory.js.map +1 -1
  153. package/dist/experimental/masking/regex_masking_transformer.cjs.map +1 -1
  154. package/dist/experimental/masking/regex_masking_transformer.js.map +1 -1
  155. package/dist/experimental/openai_assistant/index.cjs.map +1 -1
  156. package/dist/experimental/openai_assistant/index.js.map +1 -1
  157. package/dist/experimental/plan_and_execute/agent_executor.cjs.map +1 -1
  158. package/dist/experimental/plan_and_execute/agent_executor.js.map +1 -1
  159. package/dist/experimental/plan_and_execute/base.cjs.map +1 -1
  160. package/dist/experimental/plan_and_execute/base.js.map +1 -1
  161. package/dist/experimental/prompts/handlebars.cjs.map +1 -1
  162. package/dist/experimental/prompts/handlebars.js.map +1 -1
  163. package/dist/hub/base.cjs.map +1 -1
  164. package/dist/hub/base.js.map +1 -1
  165. package/dist/hub/index.cjs.map +1 -1
  166. package/dist/hub/index.js.map +1 -1
  167. package/dist/hub/node.cjs.map +1 -1
  168. package/dist/hub/node.js.map +1 -1
  169. package/dist/memory/buffer_memory.cjs.map +1 -1
  170. package/dist/memory/buffer_memory.js.map +1 -1
  171. package/dist/memory/buffer_token_memory.cjs.map +1 -1
  172. package/dist/memory/buffer_token_memory.js.map +1 -1
  173. package/dist/memory/buffer_window_memory.cjs.map +1 -1
  174. package/dist/memory/buffer_window_memory.js.map +1 -1
  175. package/dist/memory/entity_memory.cjs.map +1 -1
  176. package/dist/memory/entity_memory.js.map +1 -1
  177. package/dist/memory/prompt.cjs.map +1 -1
  178. package/dist/memory/prompt.js.map +1 -1
  179. package/dist/memory/summary.cjs.map +1 -1
  180. package/dist/memory/summary.js.map +1 -1
  181. package/dist/output_parsers/expression.cjs.map +1 -1
  182. package/dist/output_parsers/expression.js.map +1 -1
  183. package/dist/output_parsers/expression_type_handlers/base.cjs.map +1 -1
  184. package/dist/output_parsers/expression_type_handlers/base.js.map +1 -1
  185. package/dist/output_parsers/expression_type_handlers/factory.cjs.map +1 -1
  186. package/dist/output_parsers/expression_type_handlers/factory.js.map +1 -1
  187. package/dist/output_parsers/expression_type_handlers/identifier_handler.cjs.map +1 -1
  188. package/dist/output_parsers/expression_type_handlers/identifier_handler.js.map +1 -1
  189. package/dist/output_parsers/expression_type_handlers/property_assignment_handler.cjs.map +1 -1
  190. package/dist/output_parsers/expression_type_handlers/property_assignment_handler.js.map +1 -1
  191. package/dist/output_parsers/expression_type_handlers/string_literal_handler.cjs.map +1 -1
  192. package/dist/output_parsers/expression_type_handlers/string_literal_handler.js.map +1 -1
  193. package/dist/output_parsers/fix.cjs.map +1 -1
  194. package/dist/output_parsers/fix.js.map +1 -1
  195. package/dist/output_parsers/http_response.cjs.map +1 -1
  196. package/dist/output_parsers/http_response.js.map +1 -1
  197. package/dist/output_parsers/openai_functions.cjs.map +1 -1
  198. package/dist/output_parsers/openai_functions.js.map +1 -1
  199. package/dist/output_parsers/openai_tools.cjs.map +1 -1
  200. package/dist/output_parsers/openai_tools.js.map +1 -1
  201. package/dist/output_parsers/prompts.cjs.map +1 -1
  202. package/dist/output_parsers/prompts.js.map +1 -1
  203. package/dist/output_parsers/structured.cjs.map +1 -1
  204. package/dist/output_parsers/structured.js.map +1 -1
  205. package/dist/retrievers/contextual_compression.cjs.map +1 -1
  206. package/dist/retrievers/contextual_compression.js.map +1 -1
  207. package/dist/retrievers/document_compressors/chain_extract.cjs.map +1 -1
  208. package/dist/retrievers/document_compressors/chain_extract.js.map +1 -1
  209. package/dist/retrievers/ensemble.cjs.map +1 -1
  210. package/dist/retrievers/ensemble.js.map +1 -1
  211. package/dist/retrievers/hyde.cjs.map +1 -1
  212. package/dist/retrievers/hyde.js.map +1 -1
  213. package/dist/retrievers/multi_query.cjs.map +1 -1
  214. package/dist/retrievers/multi_query.js.map +1 -1
  215. package/dist/retrievers/multi_vector.cjs.map +1 -1
  216. package/dist/retrievers/multi_vector.js.map +1 -1
  217. package/dist/retrievers/parent_document.cjs.map +1 -1
  218. package/dist/retrievers/parent_document.js.map +1 -1
  219. package/dist/retrievers/score_threshold.cjs.map +1 -1
  220. package/dist/retrievers/score_threshold.js.map +1 -1
  221. package/dist/smith/runner_utils.cjs.map +1 -1
  222. package/dist/smith/runner_utils.js.map +1 -1
  223. package/dist/storage/encoder_backed.cjs.map +1 -1
  224. package/dist/storage/encoder_backed.js.map +1 -1
  225. package/dist/storage/file_system.cjs.map +1 -1
  226. package/dist/storage/file_system.js.map +1 -1
  227. package/dist/tools/json.cjs.map +1 -1
  228. package/dist/tools/json.js.map +1 -1
  229. package/dist/tools/requests.cjs.map +1 -1
  230. package/dist/tools/requests.js.map +1 -1
  231. package/dist/tools/retriever.cjs.map +1 -1
  232. package/dist/tools/retriever.js.map +1 -1
  233. package/dist/tools/sql.cjs.map +1 -1
  234. package/dist/tools/sql.js.map +1 -1
  235. package/dist/tools/webbrowser.cjs.map +1 -1
  236. package/dist/tools/webbrowser.js.map +1 -1
  237. package/dist/util/hub.cjs.map +1 -1
  238. package/dist/util/hub.js.map +1 -1
  239. package/dist/util/load.cjs.map +1 -1
  240. package/dist/util/load.js.map +1 -1
  241. package/dist/util/openapi.cjs.map +1 -1
  242. package/dist/util/openapi.js.map +1 -1
  243. package/dist/util/sql_utils.cjs.map +1 -1
  244. package/dist/util/sql_utils.js.map +1 -1
  245. package/dist/vectorstores/memory.cjs.map +1 -1
  246. package/dist/vectorstores/memory.js.map +1 -1
  247. package/package.json +48 -49
@@ -1 +1 @@
1
- {"version":3,"file":"sql_utils.js","names":[],"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 (\n appDataSource.options.type === \"postgres\" ||\n appDataSource.options.type === \"aurora-postgres\"\n ) {\n const schema =\n appDataSource.options.type === \"postgres\"\n ? (appDataSource.options?.schema ?? \"public\")\n : \"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 === \"aurora-postgres\") {\n 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 =\n appDataSource.options.type === \"postgres\"\n ? (appDataSource.options?.schema ?? \"public\")\n : \"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 (\n appDataSource.options.type === \"postgres\" ||\n appDataSource.options.type === \"aurora-postgres\"\n ) {\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":[],"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 (\n appDataSource.options.type === \"postgres\" ||\n appDataSource.options.type === \"aurora-postgres\"\n ) {\n const schema =\n appDataSource.options.type === \"postgres\"\n ? (appDataSource.options?.schema ?? \"public\")\n : \"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 === \"aurora-postgres\") {\n 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 =\n appDataSource.options.type === \"postgres\"\n ? (appDataSource.options?.schema ?? \"public\")\n : \"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 (\n appDataSource.options.type === \"postgres\" ||\n appDataSource.options.type === \"aurora-postgres\"\n ) {\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 +1 @@
1
- {"version":3,"file":"memory.cjs","names":["VectorStore","cosine","Document"],"sources":["../../src/vectorstores/memory.ts"],"sourcesContent":["import {\n MaxMarginalRelevanceSearchOptions,\n VectorStore,\n} from \"@langchain/core/vectorstores\";\nimport type { EmbeddingsInterface } from \"@langchain/core/embeddings\";\nimport { Document, DocumentInterface } from \"@langchain/core/documents\";\nimport { maximalMarginalRelevance } from \"@langchain/core/utils/math\";\nimport { cosine } from \"../util/ml-distance/similarities.js\";\n\n/**\n * Interface representing a vector in memory. It includes the content\n * (text), the corresponding embedding (vector), and any associated\n * metadata.\n */\ninterface MemoryVector {\n content: string;\n embedding: number[];\n // oxlint-disable-next-line @typescript-eslint/no-explicit-any\n metadata: Record<string, any>;\n id?: string;\n}\n\n/**\n * Interface for the arguments that can be passed to the\n * `MemoryVectorStore` constructor. It includes an optional `similarity`\n * function.\n */\nexport interface MemoryVectorStoreArgs {\n similarity?: typeof cosine;\n}\n\n/**\n * In-memory, ephemeral vector store.\n *\n * Setup:\n * Install `langchain`:\n *\n * ```bash\n * npm install langchain\n * ```\n *\n * ## [Constructor args](https://api.js.langchain.com/classes/langchain.vectorstores_memory.MemoryVectorStore.html#constructor)\n *\n * <details open>\n * <summary><strong>Instantiate</strong></summary>\n *\n * ```typescript\n * import { MemoryVectorStore } from 'langchain/vectorstores/memory';\n * // Or other embeddings\n * import { OpenAIEmbeddings } from '@langchain/openai';\n *\n * const embeddings = new OpenAIEmbeddings({\n * model: \"text-embedding-3-small\",\n * });\n *\n * const vectorStore = new MemoryVectorStore(embeddings);\n * ```\n * </details>\n *\n * <br />\n *\n * <details>\n * <summary><strong>Add documents</strong></summary>\n *\n * ```typescript\n * import type { Document } from '@langchain/core/documents';\n *\n * const document1 = { pageContent: \"foo\", metadata: { baz: \"bar\" } };\n * const document2 = { pageContent: \"thud\", metadata: { bar: \"baz\" } };\n * const document3 = { pageContent: \"i will be deleted :(\", metadata: {} };\n *\n * const documents: Document[] = [document1, document2, document3];\n *\n * await vectorStore.addDocuments(documents);\n * ```\n * </details>\n *\n * <br />\n *\n * <details>\n * <summary><strong>Similarity search</strong></summary>\n *\n * ```typescript\n * const results = await vectorStore.similaritySearch(\"thud\", 1);\n * for (const doc of results) {\n * console.log(`* ${doc.pageContent} [${JSON.stringify(doc.metadata, null)}]`);\n * }\n * // Output: * thud [{\"baz\":\"bar\"}]\n * ```\n * </details>\n *\n * <br />\n *\n *\n * <details>\n * <summary><strong>Similarity search with filter</strong></summary>\n *\n * ```typescript\n * const resultsWithFilter = await vectorStore.similaritySearch(\"thud\", 1, { baz: \"bar\" });\n *\n * for (const doc of resultsWithFilter) {\n * console.log(`* ${doc.pageContent} [${JSON.stringify(doc.metadata, null)}]`);\n * }\n * // Output: * foo [{\"baz\":\"bar\"}]\n * ```\n * </details>\n *\n * <br />\n *\n *\n * <details>\n * <summary><strong>Similarity search with score</strong></summary>\n *\n * ```typescript\n * const resultsWithScore = await vectorStore.similaritySearchWithScore(\"qux\", 1);\n * for (const [doc, score] of resultsWithScore) {\n * console.log(`* [SIM=${score.toFixed(6)}] ${doc.pageContent} [${JSON.stringify(doc.metadata, null)}]`);\n * }\n * // Output: * [SIM=0.000000] qux [{\"bar\":\"baz\",\"baz\":\"bar\"}]\n * ```\n * </details>\n *\n * <br />\n *\n * <details>\n * <summary><strong>As a retriever</strong></summary>\n *\n * ```typescript\n * const retriever = vectorStore.asRetriever({\n * searchType: \"mmr\", // Leave blank for standard similarity search\n * k: 1,\n * });\n * const resultAsRetriever = await retriever.invoke(\"thud\");\n * console.log(resultAsRetriever);\n *\n * // Output: [Document({ metadata: { \"baz\":\"bar\" }, pageContent: \"thud\" })]\n * ```\n * </details>\n *\n * <br />\n */\nexport class MemoryVectorStore extends VectorStore {\n declare FilterType: (doc: Document) => boolean;\n\n memoryVectors: MemoryVector[] = [];\n\n similarity: typeof cosine;\n\n _vectorstoreType(): string {\n return \"memory\";\n }\n\n constructor(\n embeddings: EmbeddingsInterface,\n { similarity, ...rest }: MemoryVectorStoreArgs = {}\n ) {\n super(embeddings, rest);\n\n this.similarity = similarity ?? cosine;\n }\n\n /**\n * Method to add documents to the memory vector store. It extracts the\n * text from each document, generates embeddings for them, and adds the\n * resulting vectors to the store.\n * @param documents Array of `Document` instances to be added to the store.\n * @returns Promise that resolves when all documents have been added.\n */\n async addDocuments(documents: Document[]): Promise<void> {\n const texts = documents.map(({ pageContent }) => pageContent);\n return this.addVectors(\n await this.embeddings.embedDocuments(texts),\n documents\n );\n }\n\n /**\n * Method to add vectors to the memory vector store. It creates\n * `MemoryVector` instances for each vector and document pair and adds\n * them to the store.\n * @param vectors Array of vectors to be added to the store.\n * @param documents Array of `Document` instances corresponding to the vectors.\n * @returns Promise that resolves when all vectors have been added.\n */\n async addVectors(vectors: number[][], documents: Document[]): Promise<void> {\n const memoryVectors = vectors.map((embedding, idx) => ({\n content: documents[idx].pageContent,\n embedding,\n metadata: documents[idx].metadata,\n id: documents[idx].id,\n }));\n\n this.memoryVectors = this.memoryVectors.concat(memoryVectors);\n }\n\n protected async _queryVectors(\n query: number[],\n k: number,\n filter?: this[\"FilterType\"]\n ) {\n const filterFunction = (memoryVector: MemoryVector) => {\n if (!filter) {\n return true;\n }\n\n const doc = new Document({\n metadata: memoryVector.metadata,\n pageContent: memoryVector.content,\n id: memoryVector.id,\n });\n return filter(doc);\n };\n const filteredMemoryVectors = this.memoryVectors.filter(filterFunction);\n return filteredMemoryVectors\n .map((vector, index) => ({\n similarity: this.similarity(query, vector.embedding),\n index,\n metadata: vector.metadata,\n content: vector.content,\n embedding: vector.embedding,\n id: vector.id,\n }))\n .sort((a, b) => (a.similarity > b.similarity ? -1 : 0))\n .slice(0, k);\n }\n\n /**\n * Method to perform a similarity search in the memory vector store. It\n * calculates the similarity between the query vector and each vector in\n * the store, sorts the results by similarity, and returns the top `k`\n * results along with their scores.\n * @param query Query vector to compare against the vectors in the store.\n * @param k Number of top results to return.\n * @param filter Optional filter function to apply to the vectors before performing the search.\n * @returns Promise that resolves with an array of tuples, each containing a `Document` and its similarity score.\n */\n async similaritySearchVectorWithScore(\n query: number[],\n k: number,\n filter?: this[\"FilterType\"]\n ): Promise<[Document, number][]> {\n const searches = await this._queryVectors(query, k, filter);\n const result: [Document, number][] = searches.map((search) => [\n new Document({\n metadata: search.metadata,\n pageContent: search.content,\n id: search.id,\n }),\n search.similarity,\n ]);\n\n return result;\n }\n\n async maxMarginalRelevanceSearch(\n query: string,\n options: MaxMarginalRelevanceSearchOptions<this[\"FilterType\"]>\n ): Promise<DocumentInterface[]> {\n const queryEmbedding = await this.embeddings.embedQuery(query);\n\n const searches = await this._queryVectors(\n queryEmbedding,\n options.fetchK ?? 20,\n options.filter\n );\n\n const embeddingList = searches.map((searchResp) => searchResp.embedding);\n\n const mmrIndexes = maximalMarginalRelevance(\n queryEmbedding,\n embeddingList,\n options.lambda,\n options.k\n );\n\n return mmrIndexes.map(\n (idx) =>\n new Document({\n metadata: searches[idx].metadata,\n pageContent: searches[idx].content,\n id: searches[idx].id,\n })\n );\n }\n\n /**\n * Static method to create a `MemoryVectorStore` instance from an array of\n * texts. It creates a `Document` for each text and metadata pair, and\n * adds them to the store.\n * @param texts Array of texts to be added to the store.\n * @param metadatas Array or single object of metadata corresponding to the texts.\n * @param embeddings `Embeddings` instance used to generate embeddings for the texts.\n * @param dbConfig Optional `MemoryVectorStoreArgs` to configure the `MemoryVectorStore` instance.\n * @returns Promise that resolves with a new `MemoryVectorStore` instance.\n */\n static async fromTexts(\n texts: string[],\n metadatas: object[] | object,\n embeddings: EmbeddingsInterface,\n dbConfig?: MemoryVectorStoreArgs\n ): Promise<MemoryVectorStore> {\n const docs: Document[] = [];\n for (let i = 0; i < texts.length; i += 1) {\n const metadata = Array.isArray(metadatas) ? metadatas[i] : metadatas;\n const newDoc = new Document({\n pageContent: texts[i],\n metadata,\n });\n docs.push(newDoc);\n }\n return MemoryVectorStore.fromDocuments(docs, embeddings, dbConfig);\n }\n\n /**\n * Static method to create a `MemoryVectorStore` instance from an array of\n * `Document` instances. It adds the documents to the store.\n * @param docs Array of `Document` instances to be added to the store.\n * @param embeddings `Embeddings` instance used to generate embeddings for the documents.\n * @param dbConfig Optional `MemoryVectorStoreArgs` to configure the `MemoryVectorStore` instance.\n * @returns Promise that resolves with a new `MemoryVectorStore` instance.\n */\n static async fromDocuments(\n docs: Document[],\n embeddings: EmbeddingsInterface,\n dbConfig?: MemoryVectorStoreArgs\n ): Promise<MemoryVectorStore> {\n const instance = new this(embeddings, dbConfig);\n await instance.addDocuments(docs);\n return instance;\n }\n\n /**\n * Static method to create a `MemoryVectorStore` instance from an existing\n * index. It creates a new `MemoryVectorStore` instance without adding any\n * documents or vectors.\n * @param embeddings `Embeddings` instance used to generate embeddings for the documents.\n * @param dbConfig Optional `MemoryVectorStoreArgs` to configure the `MemoryVectorStore` instance.\n * @returns Promise that resolves with a new `MemoryVectorStore` instance.\n */\n static async fromExistingIndex(\n embeddings: EmbeddingsInterface,\n dbConfig?: MemoryVectorStoreArgs\n ): Promise<MemoryVectorStore> {\n const instance = new this(embeddings, dbConfig);\n return instance;\n }\n}\n"],"mappings":"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"}
1
+ {"version":3,"file":"memory.cjs","names":["VectorStore","cosine","Document"],"sources":["../../src/vectorstores/memory.ts"],"sourcesContent":["import {\n MaxMarginalRelevanceSearchOptions,\n VectorStore,\n} from \"@langchain/core/vectorstores\";\nimport type { EmbeddingsInterface } from \"@langchain/core/embeddings\";\nimport { Document, DocumentInterface } from \"@langchain/core/documents\";\nimport { maximalMarginalRelevance } from \"@langchain/core/utils/math\";\nimport { cosine } from \"../util/ml-distance/similarities.js\";\n\n/**\n * Interface representing a vector in memory. It includes the content\n * (text), the corresponding embedding (vector), and any associated\n * metadata.\n */\ninterface MemoryVector {\n content: string;\n embedding: number[];\n // oxlint-disable-next-line @typescript-eslint/no-explicit-any\n metadata: Record<string, any>;\n id?: string;\n}\n\n/**\n * Interface for the arguments that can be passed to the\n * `MemoryVectorStore` constructor. It includes an optional `similarity`\n * function.\n */\nexport interface MemoryVectorStoreArgs {\n similarity?: typeof cosine;\n}\n\n/**\n * In-memory, ephemeral vector store.\n *\n * Setup:\n * Install `langchain`:\n *\n * ```bash\n * npm install langchain\n * ```\n *\n * ## [Constructor args](https://api.js.langchain.com/classes/langchain.vectorstores_memory.MemoryVectorStore.html#constructor)\n *\n * <details open>\n * <summary><strong>Instantiate</strong></summary>\n *\n * ```typescript\n * import { MemoryVectorStore } from 'langchain/vectorstores/memory';\n * // Or other embeddings\n * import { OpenAIEmbeddings } from '@langchain/openai';\n *\n * const embeddings = new OpenAIEmbeddings({\n * model: \"text-embedding-3-small\",\n * });\n *\n * const vectorStore = new MemoryVectorStore(embeddings);\n * ```\n * </details>\n *\n * <br />\n *\n * <details>\n * <summary><strong>Add documents</strong></summary>\n *\n * ```typescript\n * import type { Document } from '@langchain/core/documents';\n *\n * const document1 = { pageContent: \"foo\", metadata: { baz: \"bar\" } };\n * const document2 = { pageContent: \"thud\", metadata: { bar: \"baz\" } };\n * const document3 = { pageContent: \"i will be deleted :(\", metadata: {} };\n *\n * const documents: Document[] = [document1, document2, document3];\n *\n * await vectorStore.addDocuments(documents);\n * ```\n * </details>\n *\n * <br />\n *\n * <details>\n * <summary><strong>Similarity search</strong></summary>\n *\n * ```typescript\n * const results = await vectorStore.similaritySearch(\"thud\", 1);\n * for (const doc of results) {\n * console.log(`* ${doc.pageContent} [${JSON.stringify(doc.metadata, null)}]`);\n * }\n * // Output: * thud [{\"baz\":\"bar\"}]\n * ```\n * </details>\n *\n * <br />\n *\n *\n * <details>\n * <summary><strong>Similarity search with filter</strong></summary>\n *\n * ```typescript\n * const resultsWithFilter = await vectorStore.similaritySearch(\"thud\", 1, { baz: \"bar\" });\n *\n * for (const doc of resultsWithFilter) {\n * console.log(`* ${doc.pageContent} [${JSON.stringify(doc.metadata, null)}]`);\n * }\n * // Output: * foo [{\"baz\":\"bar\"}]\n * ```\n * </details>\n *\n * <br />\n *\n *\n * <details>\n * <summary><strong>Similarity search with score</strong></summary>\n *\n * ```typescript\n * const resultsWithScore = await vectorStore.similaritySearchWithScore(\"qux\", 1);\n * for (const [doc, score] of resultsWithScore) {\n * console.log(`* [SIM=${score.toFixed(6)}] ${doc.pageContent} [${JSON.stringify(doc.metadata, null)}]`);\n * }\n * // Output: * [SIM=0.000000] qux [{\"bar\":\"baz\",\"baz\":\"bar\"}]\n * ```\n * </details>\n *\n * <br />\n *\n * <details>\n * <summary><strong>As a retriever</strong></summary>\n *\n * ```typescript\n * const retriever = vectorStore.asRetriever({\n * searchType: \"mmr\", // Leave blank for standard similarity search\n * k: 1,\n * });\n * const resultAsRetriever = await retriever.invoke(\"thud\");\n * console.log(resultAsRetriever);\n *\n * // Output: [Document({ metadata: { \"baz\":\"bar\" }, pageContent: \"thud\" })]\n * ```\n * </details>\n *\n * <br />\n */\nexport class MemoryVectorStore extends VectorStore {\n declare FilterType: (doc: Document) => boolean;\n\n memoryVectors: MemoryVector[] = [];\n\n similarity: typeof cosine;\n\n _vectorstoreType(): string {\n return \"memory\";\n }\n\n constructor(\n embeddings: EmbeddingsInterface,\n { similarity, ...rest }: MemoryVectorStoreArgs = {}\n ) {\n super(embeddings, rest);\n\n this.similarity = similarity ?? cosine;\n }\n\n /**\n * Method to add documents to the memory vector store. It extracts the\n * text from each document, generates embeddings for them, and adds the\n * resulting vectors to the store.\n * @param documents Array of `Document` instances to be added to the store.\n * @returns Promise that resolves when all documents have been added.\n */\n async addDocuments(documents: Document[]): Promise<void> {\n const texts = documents.map(({ pageContent }) => pageContent);\n return this.addVectors(\n await this.embeddings.embedDocuments(texts),\n documents\n );\n }\n\n /**\n * Method to add vectors to the memory vector store. It creates\n * `MemoryVector` instances for each vector and document pair and adds\n * them to the store.\n * @param vectors Array of vectors to be added to the store.\n * @param documents Array of `Document` instances corresponding to the vectors.\n * @returns Promise that resolves when all vectors have been added.\n */\n async addVectors(vectors: number[][], documents: Document[]): Promise<void> {\n const memoryVectors = vectors.map((embedding, idx) => ({\n content: documents[idx].pageContent,\n embedding,\n metadata: documents[idx].metadata,\n id: documents[idx].id,\n }));\n\n this.memoryVectors = this.memoryVectors.concat(memoryVectors);\n }\n\n protected async _queryVectors(\n query: number[],\n k: number,\n filter?: this[\"FilterType\"]\n ) {\n const filterFunction = (memoryVector: MemoryVector) => {\n if (!filter) {\n return true;\n }\n\n const doc = new Document({\n metadata: memoryVector.metadata,\n pageContent: memoryVector.content,\n id: memoryVector.id,\n });\n return filter(doc);\n };\n const filteredMemoryVectors = this.memoryVectors.filter(filterFunction);\n return filteredMemoryVectors\n .map((vector, index) => ({\n similarity: this.similarity(query, vector.embedding),\n index,\n metadata: vector.metadata,\n content: vector.content,\n embedding: vector.embedding,\n id: vector.id,\n }))\n .sort((a, b) => (a.similarity > b.similarity ? -1 : 0))\n .slice(0, k);\n }\n\n /**\n * Method to perform a similarity search in the memory vector store. It\n * calculates the similarity between the query vector and each vector in\n * the store, sorts the results by similarity, and returns the top `k`\n * results along with their scores.\n * @param query Query vector to compare against the vectors in the store.\n * @param k Number of top results to return.\n * @param filter Optional filter function to apply to the vectors before performing the search.\n * @returns Promise that resolves with an array of tuples, each containing a `Document` and its similarity score.\n */\n async similaritySearchVectorWithScore(\n query: number[],\n k: number,\n filter?: this[\"FilterType\"]\n ): Promise<[Document, number][]> {\n const searches = await this._queryVectors(query, k, filter);\n const result: [Document, number][] = searches.map((search) => [\n new Document({\n metadata: search.metadata,\n pageContent: search.content,\n id: search.id,\n }),\n search.similarity,\n ]);\n\n return result;\n }\n\n async maxMarginalRelevanceSearch(\n query: string,\n options: MaxMarginalRelevanceSearchOptions<this[\"FilterType\"]>\n ): Promise<DocumentInterface[]> {\n const queryEmbedding = await this.embeddings.embedQuery(query);\n\n const searches = await this._queryVectors(\n queryEmbedding,\n options.fetchK ?? 20,\n options.filter\n );\n\n const embeddingList = searches.map((searchResp) => searchResp.embedding);\n\n const mmrIndexes = maximalMarginalRelevance(\n queryEmbedding,\n embeddingList,\n options.lambda,\n options.k\n );\n\n return mmrIndexes.map(\n (idx) =>\n new Document({\n metadata: searches[idx].metadata,\n pageContent: searches[idx].content,\n id: searches[idx].id,\n })\n );\n }\n\n /**\n * Static method to create a `MemoryVectorStore` instance from an array of\n * texts. It creates a `Document` for each text and metadata pair, and\n * adds them to the store.\n * @param texts Array of texts to be added to the store.\n * @param metadatas Array or single object of metadata corresponding to the texts.\n * @param embeddings `Embeddings` instance used to generate embeddings for the texts.\n * @param dbConfig Optional `MemoryVectorStoreArgs` to configure the `MemoryVectorStore` instance.\n * @returns Promise that resolves with a new `MemoryVectorStore` instance.\n */\n static async fromTexts(\n texts: string[],\n metadatas: object[] | object,\n embeddings: EmbeddingsInterface,\n dbConfig?: MemoryVectorStoreArgs\n ): Promise<MemoryVectorStore> {\n const docs: Document[] = [];\n for (let i = 0; i < texts.length; i += 1) {\n const metadata = Array.isArray(metadatas) ? metadatas[i] : metadatas;\n const newDoc = new Document({\n pageContent: texts[i],\n metadata,\n });\n docs.push(newDoc);\n }\n return MemoryVectorStore.fromDocuments(docs, embeddings, dbConfig);\n }\n\n /**\n * Static method to create a `MemoryVectorStore` instance from an array of\n * `Document` instances. It adds the documents to the store.\n * @param docs Array of `Document` instances to be added to the store.\n * @param embeddings `Embeddings` instance used to generate embeddings for the documents.\n * @param dbConfig Optional `MemoryVectorStoreArgs` to configure the `MemoryVectorStore` instance.\n * @returns Promise that resolves with a new `MemoryVectorStore` instance.\n */\n static async fromDocuments(\n docs: Document[],\n embeddings: EmbeddingsInterface,\n dbConfig?: MemoryVectorStoreArgs\n ): Promise<MemoryVectorStore> {\n const instance = new this(embeddings, dbConfig);\n await instance.addDocuments(docs);\n return instance;\n }\n\n /**\n * Static method to create a `MemoryVectorStore` instance from an existing\n * index. It creates a new `MemoryVectorStore` instance without adding any\n * documents or vectors.\n * @param embeddings `Embeddings` instance used to generate embeddings for the documents.\n * @param dbConfig Optional `MemoryVectorStoreArgs` to configure the `MemoryVectorStore` instance.\n * @returns Promise that resolves with a new `MemoryVectorStore` instance.\n */\n static async fromExistingIndex(\n embeddings: EmbeddingsInterface,\n dbConfig?: MemoryVectorStoreArgs\n ): Promise<MemoryVectorStore> {\n const instance = new this(embeddings, dbConfig);\n return instance;\n }\n}\n"],"mappings":"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"}
@@ -1 +1 @@
1
- {"version":3,"file":"memory.js","names":[],"sources":["../../src/vectorstores/memory.ts"],"sourcesContent":["import {\n MaxMarginalRelevanceSearchOptions,\n VectorStore,\n} from \"@langchain/core/vectorstores\";\nimport type { EmbeddingsInterface } from \"@langchain/core/embeddings\";\nimport { Document, DocumentInterface } from \"@langchain/core/documents\";\nimport { maximalMarginalRelevance } from \"@langchain/core/utils/math\";\nimport { cosine } from \"../util/ml-distance/similarities.js\";\n\n/**\n * Interface representing a vector in memory. It includes the content\n * (text), the corresponding embedding (vector), and any associated\n * metadata.\n */\ninterface MemoryVector {\n content: string;\n embedding: number[];\n // oxlint-disable-next-line @typescript-eslint/no-explicit-any\n metadata: Record<string, any>;\n id?: string;\n}\n\n/**\n * Interface for the arguments that can be passed to the\n * `MemoryVectorStore` constructor. It includes an optional `similarity`\n * function.\n */\nexport interface MemoryVectorStoreArgs {\n similarity?: typeof cosine;\n}\n\n/**\n * In-memory, ephemeral vector store.\n *\n * Setup:\n * Install `langchain`:\n *\n * ```bash\n * npm install langchain\n * ```\n *\n * ## [Constructor args](https://api.js.langchain.com/classes/langchain.vectorstores_memory.MemoryVectorStore.html#constructor)\n *\n * <details open>\n * <summary><strong>Instantiate</strong></summary>\n *\n * ```typescript\n * import { MemoryVectorStore } from 'langchain/vectorstores/memory';\n * // Or other embeddings\n * import { OpenAIEmbeddings } from '@langchain/openai';\n *\n * const embeddings = new OpenAIEmbeddings({\n * model: \"text-embedding-3-small\",\n * });\n *\n * const vectorStore = new MemoryVectorStore(embeddings);\n * ```\n * </details>\n *\n * <br />\n *\n * <details>\n * <summary><strong>Add documents</strong></summary>\n *\n * ```typescript\n * import type { Document } from '@langchain/core/documents';\n *\n * const document1 = { pageContent: \"foo\", metadata: { baz: \"bar\" } };\n * const document2 = { pageContent: \"thud\", metadata: { bar: \"baz\" } };\n * const document3 = { pageContent: \"i will be deleted :(\", metadata: {} };\n *\n * const documents: Document[] = [document1, document2, document3];\n *\n * await vectorStore.addDocuments(documents);\n * ```\n * </details>\n *\n * <br />\n *\n * <details>\n * <summary><strong>Similarity search</strong></summary>\n *\n * ```typescript\n * const results = await vectorStore.similaritySearch(\"thud\", 1);\n * for (const doc of results) {\n * console.log(`* ${doc.pageContent} [${JSON.stringify(doc.metadata, null)}]`);\n * }\n * // Output: * thud [{\"baz\":\"bar\"}]\n * ```\n * </details>\n *\n * <br />\n *\n *\n * <details>\n * <summary><strong>Similarity search with filter</strong></summary>\n *\n * ```typescript\n * const resultsWithFilter = await vectorStore.similaritySearch(\"thud\", 1, { baz: \"bar\" });\n *\n * for (const doc of resultsWithFilter) {\n * console.log(`* ${doc.pageContent} [${JSON.stringify(doc.metadata, null)}]`);\n * }\n * // Output: * foo [{\"baz\":\"bar\"}]\n * ```\n * </details>\n *\n * <br />\n *\n *\n * <details>\n * <summary><strong>Similarity search with score</strong></summary>\n *\n * ```typescript\n * const resultsWithScore = await vectorStore.similaritySearchWithScore(\"qux\", 1);\n * for (const [doc, score] of resultsWithScore) {\n * console.log(`* [SIM=${score.toFixed(6)}] ${doc.pageContent} [${JSON.stringify(doc.metadata, null)}]`);\n * }\n * // Output: * [SIM=0.000000] qux [{\"bar\":\"baz\",\"baz\":\"bar\"}]\n * ```\n * </details>\n *\n * <br />\n *\n * <details>\n * <summary><strong>As a retriever</strong></summary>\n *\n * ```typescript\n * const retriever = vectorStore.asRetriever({\n * searchType: \"mmr\", // Leave blank for standard similarity search\n * k: 1,\n * });\n * const resultAsRetriever = await retriever.invoke(\"thud\");\n * console.log(resultAsRetriever);\n *\n * // Output: [Document({ metadata: { \"baz\":\"bar\" }, pageContent: \"thud\" })]\n * ```\n * </details>\n *\n * <br />\n */\nexport class MemoryVectorStore extends VectorStore {\n declare FilterType: (doc: Document) => boolean;\n\n memoryVectors: MemoryVector[] = [];\n\n similarity: typeof cosine;\n\n _vectorstoreType(): string {\n return \"memory\";\n }\n\n constructor(\n embeddings: EmbeddingsInterface,\n { similarity, ...rest }: MemoryVectorStoreArgs = {}\n ) {\n super(embeddings, rest);\n\n this.similarity = similarity ?? cosine;\n }\n\n /**\n * Method to add documents to the memory vector store. It extracts the\n * text from each document, generates embeddings for them, and adds the\n * resulting vectors to the store.\n * @param documents Array of `Document` instances to be added to the store.\n * @returns Promise that resolves when all documents have been added.\n */\n async addDocuments(documents: Document[]): Promise<void> {\n const texts = documents.map(({ pageContent }) => pageContent);\n return this.addVectors(\n await this.embeddings.embedDocuments(texts),\n documents\n );\n }\n\n /**\n * Method to add vectors to the memory vector store. It creates\n * `MemoryVector` instances for each vector and document pair and adds\n * them to the store.\n * @param vectors Array of vectors to be added to the store.\n * @param documents Array of `Document` instances corresponding to the vectors.\n * @returns Promise that resolves when all vectors have been added.\n */\n async addVectors(vectors: number[][], documents: Document[]): Promise<void> {\n const memoryVectors = vectors.map((embedding, idx) => ({\n content: documents[idx].pageContent,\n embedding,\n metadata: documents[idx].metadata,\n id: documents[idx].id,\n }));\n\n this.memoryVectors = this.memoryVectors.concat(memoryVectors);\n }\n\n protected async _queryVectors(\n query: number[],\n k: number,\n filter?: this[\"FilterType\"]\n ) {\n const filterFunction = (memoryVector: MemoryVector) => {\n if (!filter) {\n return true;\n }\n\n const doc = new Document({\n metadata: memoryVector.metadata,\n pageContent: memoryVector.content,\n id: memoryVector.id,\n });\n return filter(doc);\n };\n const filteredMemoryVectors = this.memoryVectors.filter(filterFunction);\n return filteredMemoryVectors\n .map((vector, index) => ({\n similarity: this.similarity(query, vector.embedding),\n index,\n metadata: vector.metadata,\n content: vector.content,\n embedding: vector.embedding,\n id: vector.id,\n }))\n .sort((a, b) => (a.similarity > b.similarity ? -1 : 0))\n .slice(0, k);\n }\n\n /**\n * Method to perform a similarity search in the memory vector store. It\n * calculates the similarity between the query vector and each vector in\n * the store, sorts the results by similarity, and returns the top `k`\n * results along with their scores.\n * @param query Query vector to compare against the vectors in the store.\n * @param k Number of top results to return.\n * @param filter Optional filter function to apply to the vectors before performing the search.\n * @returns Promise that resolves with an array of tuples, each containing a `Document` and its similarity score.\n */\n async similaritySearchVectorWithScore(\n query: number[],\n k: number,\n filter?: this[\"FilterType\"]\n ): Promise<[Document, number][]> {\n const searches = await this._queryVectors(query, k, filter);\n const result: [Document, number][] = searches.map((search) => [\n new Document({\n metadata: search.metadata,\n pageContent: search.content,\n id: search.id,\n }),\n search.similarity,\n ]);\n\n return result;\n }\n\n async maxMarginalRelevanceSearch(\n query: string,\n options: MaxMarginalRelevanceSearchOptions<this[\"FilterType\"]>\n ): Promise<DocumentInterface[]> {\n const queryEmbedding = await this.embeddings.embedQuery(query);\n\n const searches = await this._queryVectors(\n queryEmbedding,\n options.fetchK ?? 20,\n options.filter\n );\n\n const embeddingList = searches.map((searchResp) => searchResp.embedding);\n\n const mmrIndexes = maximalMarginalRelevance(\n queryEmbedding,\n embeddingList,\n options.lambda,\n options.k\n );\n\n return mmrIndexes.map(\n (idx) =>\n new Document({\n metadata: searches[idx].metadata,\n pageContent: searches[idx].content,\n id: searches[idx].id,\n })\n );\n }\n\n /**\n * Static method to create a `MemoryVectorStore` instance from an array of\n * texts. It creates a `Document` for each text and metadata pair, and\n * adds them to the store.\n * @param texts Array of texts to be added to the store.\n * @param metadatas Array or single object of metadata corresponding to the texts.\n * @param embeddings `Embeddings` instance used to generate embeddings for the texts.\n * @param dbConfig Optional `MemoryVectorStoreArgs` to configure the `MemoryVectorStore` instance.\n * @returns Promise that resolves with a new `MemoryVectorStore` instance.\n */\n static async fromTexts(\n texts: string[],\n metadatas: object[] | object,\n embeddings: EmbeddingsInterface,\n dbConfig?: MemoryVectorStoreArgs\n ): Promise<MemoryVectorStore> {\n const docs: Document[] = [];\n for (let i = 0; i < texts.length; i += 1) {\n const metadata = Array.isArray(metadatas) ? metadatas[i] : metadatas;\n const newDoc = new Document({\n pageContent: texts[i],\n metadata,\n });\n docs.push(newDoc);\n }\n return MemoryVectorStore.fromDocuments(docs, embeddings, dbConfig);\n }\n\n /**\n * Static method to create a `MemoryVectorStore` instance from an array of\n * `Document` instances. It adds the documents to the store.\n * @param docs Array of `Document` instances to be added to the store.\n * @param embeddings `Embeddings` instance used to generate embeddings for the documents.\n * @param dbConfig Optional `MemoryVectorStoreArgs` to configure the `MemoryVectorStore` instance.\n * @returns Promise that resolves with a new `MemoryVectorStore` instance.\n */\n static async fromDocuments(\n docs: Document[],\n embeddings: EmbeddingsInterface,\n dbConfig?: MemoryVectorStoreArgs\n ): Promise<MemoryVectorStore> {\n const instance = new this(embeddings, dbConfig);\n await instance.addDocuments(docs);\n return instance;\n }\n\n /**\n * Static method to create a `MemoryVectorStore` instance from an existing\n * index. It creates a new `MemoryVectorStore` instance without adding any\n * documents or vectors.\n * @param embeddings `Embeddings` instance used to generate embeddings for the documents.\n * @param dbConfig Optional `MemoryVectorStoreArgs` to configure the `MemoryVectorStore` instance.\n * @returns Promise that resolves with a new `MemoryVectorStore` instance.\n */\n static async fromExistingIndex(\n embeddings: EmbeddingsInterface,\n dbConfig?: MemoryVectorStoreArgs\n ): Promise<MemoryVectorStore> {\n const instance = new this(embeddings, dbConfig);\n return instance;\n }\n}\n"],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AA6IA,IAAa,oBAAb,MAAa,0BAA0B,YAAY;CAGjD,gBAAgC,EAAE;CAElC;CAEA,mBAA2B;AACzB,SAAO;;CAGT,YACE,YACA,EAAE,YAAY,GAAG,SAAgC,EAAE,EACnD;AACA,QAAM,YAAY,KAAK;AAEvB,OAAK,aAAa,cAAc;;;;;;;;;CAUlC,MAAM,aAAa,WAAsC;EACvD,MAAM,QAAQ,UAAU,KAAK,EAAE,kBAAkB,YAAY;AAC7D,SAAO,KAAK,WACV,MAAM,KAAK,WAAW,eAAe,MAAM,EAC3C,UACD;;;;;;;;;;CAWH,MAAM,WAAW,SAAqB,WAAsC;EAC1E,MAAM,gBAAgB,QAAQ,KAAK,WAAW,SAAS;GACrD,SAAS,UAAU,KAAK;GACxB;GACA,UAAU,UAAU,KAAK;GACzB,IAAI,UAAU,KAAK;GACpB,EAAE;AAEH,OAAK,gBAAgB,KAAK,cAAc,OAAO,cAAc;;CAG/D,MAAgB,cACd,OACA,GACA,QACA;EACA,MAAM,kBAAkB,iBAA+B;AACrD,OAAI,CAAC,OACH,QAAO;AAQT,UAAO,OALK,IAAI,SAAS;IACvB,UAAU,aAAa;IACvB,aAAa,aAAa;IAC1B,IAAI,aAAa;IAClB,CAAC,CACgB;;AAGpB,SAD8B,KAAK,cAAc,OAAO,eAAe,CAEpE,KAAK,QAAQ,WAAW;GACvB,YAAY,KAAK,WAAW,OAAO,OAAO,UAAU;GACpD;GACA,UAAU,OAAO;GACjB,SAAS,OAAO;GAChB,WAAW,OAAO;GAClB,IAAI,OAAO;GACZ,EAAE,CACF,MAAM,GAAG,MAAO,EAAE,aAAa,EAAE,aAAa,KAAK,EAAG,CACtD,MAAM,GAAG,EAAE;;;;;;;;;;;;CAahB,MAAM,gCACJ,OACA,GACA,QAC+B;AAW/B,UAViB,MAAM,KAAK,cAAc,OAAO,GAAG,OAAO,EACb,KAAK,WAAW,CAC5D,IAAI,SAAS;GACX,UAAU,OAAO;GACjB,aAAa,OAAO;GACpB,IAAI,OAAO;GACZ,CAAC,EACF,OAAO,WACR,CAAC;;CAKJ,MAAM,2BACJ,OACA,SAC8B;EAC9B,MAAM,iBAAiB,MAAM,KAAK,WAAW,WAAW,MAAM;EAE9D,MAAM,WAAW,MAAM,KAAK,cAC1B,gBACA,QAAQ,UAAU,IAClB,QAAQ,OACT;AAWD,SAPmB,yBACjB,gBAHoB,SAAS,KAAK,eAAe,WAAW,UAAU,EAKtE,QAAQ,QACR,QAAQ,EACT,CAEiB,KACf,QACC,IAAI,SAAS;GACX,UAAU,SAAS,KAAK;GACxB,aAAa,SAAS,KAAK;GAC3B,IAAI,SAAS,KAAK;GACnB,CAAC,CACL;;;;;;;;;;;;CAaH,aAAa,UACX,OACA,WACA,YACA,UAC4B;EAC5B,MAAM,OAAmB,EAAE;AAC3B,OAAK,IAAI,IAAI,GAAG,IAAI,MAAM,QAAQ,KAAK,GAAG;GACxC,MAAM,WAAW,MAAM,QAAQ,UAAU,GAAG,UAAU,KAAK;GAC3D,MAAM,SAAS,IAAI,SAAS;IAC1B,aAAa,MAAM;IACnB;IACD,CAAC;AACF,QAAK,KAAK,OAAO;;AAEnB,SAAO,kBAAkB,cAAc,MAAM,YAAY,SAAS;;;;;;;;;;CAWpE,aAAa,cACX,MACA,YACA,UAC4B;EAC5B,MAAM,WAAW,IAAI,KAAK,YAAY,SAAS;AAC/C,QAAM,SAAS,aAAa,KAAK;AACjC,SAAO;;;;;;;;;;CAWT,aAAa,kBACX,YACA,UAC4B;AAE5B,SADiB,IAAI,KAAK,YAAY,SAAS"}
1
+ {"version":3,"file":"memory.js","names":[],"sources":["../../src/vectorstores/memory.ts"],"sourcesContent":["import {\n MaxMarginalRelevanceSearchOptions,\n VectorStore,\n} from \"@langchain/core/vectorstores\";\nimport type { EmbeddingsInterface } from \"@langchain/core/embeddings\";\nimport { Document, DocumentInterface } from \"@langchain/core/documents\";\nimport { maximalMarginalRelevance } from \"@langchain/core/utils/math\";\nimport { cosine } from \"../util/ml-distance/similarities.js\";\n\n/**\n * Interface representing a vector in memory. It includes the content\n * (text), the corresponding embedding (vector), and any associated\n * metadata.\n */\ninterface MemoryVector {\n content: string;\n embedding: number[];\n // oxlint-disable-next-line @typescript-eslint/no-explicit-any\n metadata: Record<string, any>;\n id?: string;\n}\n\n/**\n * Interface for the arguments that can be passed to the\n * `MemoryVectorStore` constructor. It includes an optional `similarity`\n * function.\n */\nexport interface MemoryVectorStoreArgs {\n similarity?: typeof cosine;\n}\n\n/**\n * In-memory, ephemeral vector store.\n *\n * Setup:\n * Install `langchain`:\n *\n * ```bash\n * npm install langchain\n * ```\n *\n * ## [Constructor args](https://api.js.langchain.com/classes/langchain.vectorstores_memory.MemoryVectorStore.html#constructor)\n *\n * <details open>\n * <summary><strong>Instantiate</strong></summary>\n *\n * ```typescript\n * import { MemoryVectorStore } from 'langchain/vectorstores/memory';\n * // Or other embeddings\n * import { OpenAIEmbeddings } from '@langchain/openai';\n *\n * const embeddings = new OpenAIEmbeddings({\n * model: \"text-embedding-3-small\",\n * });\n *\n * const vectorStore = new MemoryVectorStore(embeddings);\n * ```\n * </details>\n *\n * <br />\n *\n * <details>\n * <summary><strong>Add documents</strong></summary>\n *\n * ```typescript\n * import type { Document } from '@langchain/core/documents';\n *\n * const document1 = { pageContent: \"foo\", metadata: { baz: \"bar\" } };\n * const document2 = { pageContent: \"thud\", metadata: { bar: \"baz\" } };\n * const document3 = { pageContent: \"i will be deleted :(\", metadata: {} };\n *\n * const documents: Document[] = [document1, document2, document3];\n *\n * await vectorStore.addDocuments(documents);\n * ```\n * </details>\n *\n * <br />\n *\n * <details>\n * <summary><strong>Similarity search</strong></summary>\n *\n * ```typescript\n * const results = await vectorStore.similaritySearch(\"thud\", 1);\n * for (const doc of results) {\n * console.log(`* ${doc.pageContent} [${JSON.stringify(doc.metadata, null)}]`);\n * }\n * // Output: * thud [{\"baz\":\"bar\"}]\n * ```\n * </details>\n *\n * <br />\n *\n *\n * <details>\n * <summary><strong>Similarity search with filter</strong></summary>\n *\n * ```typescript\n * const resultsWithFilter = await vectorStore.similaritySearch(\"thud\", 1, { baz: \"bar\" });\n *\n * for (const doc of resultsWithFilter) {\n * console.log(`* ${doc.pageContent} [${JSON.stringify(doc.metadata, null)}]`);\n * }\n * // Output: * foo [{\"baz\":\"bar\"}]\n * ```\n * </details>\n *\n * <br />\n *\n *\n * <details>\n * <summary><strong>Similarity search with score</strong></summary>\n *\n * ```typescript\n * const resultsWithScore = await vectorStore.similaritySearchWithScore(\"qux\", 1);\n * for (const [doc, score] of resultsWithScore) {\n * console.log(`* [SIM=${score.toFixed(6)}] ${doc.pageContent} [${JSON.stringify(doc.metadata, null)}]`);\n * }\n * // Output: * [SIM=0.000000] qux [{\"bar\":\"baz\",\"baz\":\"bar\"}]\n * ```\n * </details>\n *\n * <br />\n *\n * <details>\n * <summary><strong>As a retriever</strong></summary>\n *\n * ```typescript\n * const retriever = vectorStore.asRetriever({\n * searchType: \"mmr\", // Leave blank for standard similarity search\n * k: 1,\n * });\n * const resultAsRetriever = await retriever.invoke(\"thud\");\n * console.log(resultAsRetriever);\n *\n * // Output: [Document({ metadata: { \"baz\":\"bar\" }, pageContent: \"thud\" })]\n * ```\n * </details>\n *\n * <br />\n */\nexport class MemoryVectorStore extends VectorStore {\n declare FilterType: (doc: Document) => boolean;\n\n memoryVectors: MemoryVector[] = [];\n\n similarity: typeof cosine;\n\n _vectorstoreType(): string {\n return \"memory\";\n }\n\n constructor(\n embeddings: EmbeddingsInterface,\n { similarity, ...rest }: MemoryVectorStoreArgs = {}\n ) {\n super(embeddings, rest);\n\n this.similarity = similarity ?? cosine;\n }\n\n /**\n * Method to add documents to the memory vector store. It extracts the\n * text from each document, generates embeddings for them, and adds the\n * resulting vectors to the store.\n * @param documents Array of `Document` instances to be added to the store.\n * @returns Promise that resolves when all documents have been added.\n */\n async addDocuments(documents: Document[]): Promise<void> {\n const texts = documents.map(({ pageContent }) => pageContent);\n return this.addVectors(\n await this.embeddings.embedDocuments(texts),\n documents\n );\n }\n\n /**\n * Method to add vectors to the memory vector store. It creates\n * `MemoryVector` instances for each vector and document pair and adds\n * them to the store.\n * @param vectors Array of vectors to be added to the store.\n * @param documents Array of `Document` instances corresponding to the vectors.\n * @returns Promise that resolves when all vectors have been added.\n */\n async addVectors(vectors: number[][], documents: Document[]): Promise<void> {\n const memoryVectors = vectors.map((embedding, idx) => ({\n content: documents[idx].pageContent,\n embedding,\n metadata: documents[idx].metadata,\n id: documents[idx].id,\n }));\n\n this.memoryVectors = this.memoryVectors.concat(memoryVectors);\n }\n\n protected async _queryVectors(\n query: number[],\n k: number,\n filter?: this[\"FilterType\"]\n ) {\n const filterFunction = (memoryVector: MemoryVector) => {\n if (!filter) {\n return true;\n }\n\n const doc = new Document({\n metadata: memoryVector.metadata,\n pageContent: memoryVector.content,\n id: memoryVector.id,\n });\n return filter(doc);\n };\n const filteredMemoryVectors = this.memoryVectors.filter(filterFunction);\n return filteredMemoryVectors\n .map((vector, index) => ({\n similarity: this.similarity(query, vector.embedding),\n index,\n metadata: vector.metadata,\n content: vector.content,\n embedding: vector.embedding,\n id: vector.id,\n }))\n .sort((a, b) => (a.similarity > b.similarity ? -1 : 0))\n .slice(0, k);\n }\n\n /**\n * Method to perform a similarity search in the memory vector store. It\n * calculates the similarity between the query vector and each vector in\n * the store, sorts the results by similarity, and returns the top `k`\n * results along with their scores.\n * @param query Query vector to compare against the vectors in the store.\n * @param k Number of top results to return.\n * @param filter Optional filter function to apply to the vectors before performing the search.\n * @returns Promise that resolves with an array of tuples, each containing a `Document` and its similarity score.\n */\n async similaritySearchVectorWithScore(\n query: number[],\n k: number,\n filter?: this[\"FilterType\"]\n ): Promise<[Document, number][]> {\n const searches = await this._queryVectors(query, k, filter);\n const result: [Document, number][] = searches.map((search) => [\n new Document({\n metadata: search.metadata,\n pageContent: search.content,\n id: search.id,\n }),\n search.similarity,\n ]);\n\n return result;\n }\n\n async maxMarginalRelevanceSearch(\n query: string,\n options: MaxMarginalRelevanceSearchOptions<this[\"FilterType\"]>\n ): Promise<DocumentInterface[]> {\n const queryEmbedding = await this.embeddings.embedQuery(query);\n\n const searches = await this._queryVectors(\n queryEmbedding,\n options.fetchK ?? 20,\n options.filter\n );\n\n const embeddingList = searches.map((searchResp) => searchResp.embedding);\n\n const mmrIndexes = maximalMarginalRelevance(\n queryEmbedding,\n embeddingList,\n options.lambda,\n options.k\n );\n\n return mmrIndexes.map(\n (idx) =>\n new Document({\n metadata: searches[idx].metadata,\n pageContent: searches[idx].content,\n id: searches[idx].id,\n })\n );\n }\n\n /**\n * Static method to create a `MemoryVectorStore` instance from an array of\n * texts. It creates a `Document` for each text and metadata pair, and\n * adds them to the store.\n * @param texts Array of texts to be added to the store.\n * @param metadatas Array or single object of metadata corresponding to the texts.\n * @param embeddings `Embeddings` instance used to generate embeddings for the texts.\n * @param dbConfig Optional `MemoryVectorStoreArgs` to configure the `MemoryVectorStore` instance.\n * @returns Promise that resolves with a new `MemoryVectorStore` instance.\n */\n static async fromTexts(\n texts: string[],\n metadatas: object[] | object,\n embeddings: EmbeddingsInterface,\n dbConfig?: MemoryVectorStoreArgs\n ): Promise<MemoryVectorStore> {\n const docs: Document[] = [];\n for (let i = 0; i < texts.length; i += 1) {\n const metadata = Array.isArray(metadatas) ? metadatas[i] : metadatas;\n const newDoc = new Document({\n pageContent: texts[i],\n metadata,\n });\n docs.push(newDoc);\n }\n return MemoryVectorStore.fromDocuments(docs, embeddings, dbConfig);\n }\n\n /**\n * Static method to create a `MemoryVectorStore` instance from an array of\n * `Document` instances. It adds the documents to the store.\n * @param docs Array of `Document` instances to be added to the store.\n * @param embeddings `Embeddings` instance used to generate embeddings for the documents.\n * @param dbConfig Optional `MemoryVectorStoreArgs` to configure the `MemoryVectorStore` instance.\n * @returns Promise that resolves with a new `MemoryVectorStore` instance.\n */\n static async fromDocuments(\n docs: Document[],\n embeddings: EmbeddingsInterface,\n dbConfig?: MemoryVectorStoreArgs\n ): Promise<MemoryVectorStore> {\n const instance = new this(embeddings, dbConfig);\n await instance.addDocuments(docs);\n return instance;\n }\n\n /**\n * Static method to create a `MemoryVectorStore` instance from an existing\n * index. It creates a new `MemoryVectorStore` instance without adding any\n * documents or vectors.\n * @param embeddings `Embeddings` instance used to generate embeddings for the documents.\n * @param dbConfig Optional `MemoryVectorStoreArgs` to configure the `MemoryVectorStore` instance.\n * @returns Promise that resolves with a new `MemoryVectorStore` instance.\n */\n static async fromExistingIndex(\n embeddings: EmbeddingsInterface,\n dbConfig?: MemoryVectorStoreArgs\n ): Promise<MemoryVectorStore> {\n const instance = new this(embeddings, dbConfig);\n return instance;\n }\n}\n"],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AA6IA,IAAa,oBAAb,MAAa,0BAA0B,YAAY;CAGjD,gBAAgC,EAAE;CAElC;CAEA,mBAA2B;AACzB,SAAO;;CAGT,YACE,YACA,EAAE,YAAY,GAAG,SAAgC,EAAE,EACnD;AACA,QAAM,YAAY,KAAK;AAEvB,OAAK,aAAa,cAAc;;;;;;;;;CAUlC,MAAM,aAAa,WAAsC;EACvD,MAAM,QAAQ,UAAU,KAAK,EAAE,kBAAkB,YAAY;AAC7D,SAAO,KAAK,WACV,MAAM,KAAK,WAAW,eAAe,MAAM,EAC3C,UACD;;;;;;;;;;CAWH,MAAM,WAAW,SAAqB,WAAsC;EAC1E,MAAM,gBAAgB,QAAQ,KAAK,WAAW,SAAS;GACrD,SAAS,UAAU,KAAK;GACxB;GACA,UAAU,UAAU,KAAK;GACzB,IAAI,UAAU,KAAK;GACpB,EAAE;AAEH,OAAK,gBAAgB,KAAK,cAAc,OAAO,cAAc;;CAG/D,MAAgB,cACd,OACA,GACA,QACA;EACA,MAAM,kBAAkB,iBAA+B;AACrD,OAAI,CAAC,OACH,QAAO;AAQT,UAAO,OAAO,IALE,SAAS;IACvB,UAAU,aAAa;IACvB,aAAa,aAAa;IAC1B,IAAI,aAAa;IAClB,CACgB,CAAC;;AAGpB,SAD8B,KAAK,cAAc,OAAO,eAC5B,CACzB,KAAK,QAAQ,WAAW;GACvB,YAAY,KAAK,WAAW,OAAO,OAAO,UAAU;GACpD;GACA,UAAU,OAAO;GACjB,SAAS,OAAO;GAChB,WAAW,OAAO;GAClB,IAAI,OAAO;GACZ,EAAE,CACF,MAAM,GAAG,MAAO,EAAE,aAAa,EAAE,aAAa,KAAK,EAAG,CACtD,MAAM,GAAG,EAAE;;;;;;;;;;;;CAahB,MAAM,gCACJ,OACA,GACA,QAC+B;AAW/B,UATqC,MADd,KAAK,cAAc,OAAO,GAAG,OAAO,EACb,KAAK,WAAW,CAC5D,IAAI,SAAS;GACX,UAAU,OAAO;GACjB,aAAa,OAAO;GACpB,IAAI,OAAO;GACZ,CAAC,EACF,OAAO,WACR,CAEY;;CAGf,MAAM,2BACJ,OACA,SAC8B;EAC9B,MAAM,iBAAiB,MAAM,KAAK,WAAW,WAAW,MAAM;EAE9D,MAAM,WAAW,MAAM,KAAK,cAC1B,gBACA,QAAQ,UAAU,IAClB,QAAQ,OACT;AAWD,SAPmB,yBACjB,gBAHoB,SAAS,KAAK,eAAe,WAAW,UAI/C,EACb,QAAQ,QACR,QAAQ,EAGO,CAAC,KACf,QACC,IAAI,SAAS;GACX,UAAU,SAAS,KAAK;GACxB,aAAa,SAAS,KAAK;GAC3B,IAAI,SAAS,KAAK;GACnB,CAAC,CACL;;;;;;;;;;;;CAaH,aAAa,UACX,OACA,WACA,YACA,UAC4B;EAC5B,MAAM,OAAmB,EAAE;AAC3B,OAAK,IAAI,IAAI,GAAG,IAAI,MAAM,QAAQ,KAAK,GAAG;GACxC,MAAM,WAAW,MAAM,QAAQ,UAAU,GAAG,UAAU,KAAK;GAC3D,MAAM,SAAS,IAAI,SAAS;IAC1B,aAAa,MAAM;IACnB;IACD,CAAC;AACF,QAAK,KAAK,OAAO;;AAEnB,SAAO,kBAAkB,cAAc,MAAM,YAAY,SAAS;;;;;;;;;;CAWpE,aAAa,cACX,MACA,YACA,UAC4B;EAC5B,MAAM,WAAW,IAAI,KAAK,YAAY,SAAS;AAC/C,QAAM,SAAS,aAAa,KAAK;AACjC,SAAO;;;;;;;;;;CAWT,aAAa,kBACX,YACA,UAC4B;AAE5B,SAAO,IADc,KAAK,YAAY,SACvB"}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@langchain/classic",
3
- "version": "1.0.33",
3
+ "version": "1.0.35",
4
4
  "description": "Old abstractions from LangChain.js",
5
5
  "author": "LangChain",
6
6
  "license": "MIT",
@@ -95,104 +95,103 @@
95
95
  },
96
96
  "homepage": "https://github.com/langchain-ai/langchainjs/tree/main/langchain/",
97
97
  "devDependencies": {
98
- "@aws-sdk/dsql-signer": "^3.858.0",
98
+ "@aws-sdk/dsql-signer": "^3.1059.0",
99
99
  "@azure/identity": "^4.12.0",
100
100
  "@browserbasehq/stagehand": "^1.3.0",
101
101
  "@clickhouse/client": "^0.2.5",
102
- "@cloudflare/workers-types": "^4.20260508.1",
102
+ "@cloudflare/workers-types": "^4.20260602.1",
103
103
  "@elastic/elasticsearch": "^8.4.0",
104
104
  "@faker-js/faker": "^10.4.0",
105
105
  "@getmetal/metal-sdk": "^7.7.1",
106
106
  "@getzep/zep-cloud": "^1.0.12",
107
107
  "@getzep/zep-js": "^2.0.2",
108
- "@gomomento/sdk": "1.117.2",
108
+ "@gomomento/sdk": "1.117.4",
109
109
  "@google/generative-ai": "^0.24.1",
110
- "@lancedb/lancedb": "^0.26.2",
111
- "@langchain/langgraph": "1.0.0-alpha.5",
110
+ "@lancedb/lancedb": "^0.30.0",
111
+ "@langchain/langgraph": "1.3.4",
112
112
  "@layerup/layerup-security": "^1.5.12",
113
113
  "@opensearch-project/opensearch": "^2.2.0",
114
114
  "@pinecone-database/pinecone": "^5.0.2",
115
115
  "@planetscale/database": "^1.20.1",
116
- "@prisma/client": "^4.16.2",
117
- "@qdrant/js-client-rest": "^1.17.0",
116
+ "@prisma/client": "^6.19.3",
117
+ "@qdrant/js-client-rest": "^1.18.0",
118
118
  "@rockset/client": "^0.9.1",
119
- "@supabase/supabase-js": "^2.53.0",
119
+ "@supabase/supabase-js": "^2.107.0",
120
120
  "@tensorflow/tfjs-backend-cpu": "^4.22.0",
121
121
  "@tsconfig/recommended": "^1.0.2",
122
122
  "@types/js-yaml": "^4",
123
- "@types/jsdom": "^28.0.1",
123
+ "@types/jsdom": "^28.0.3",
124
124
  "@types/pg": "^8.15.5",
125
125
  "@types/ws": "^8",
126
- "@upstash/redis": "^1.37.0",
126
+ "@upstash/redis": "^1.38.0",
127
127
  "@upstash/vector": "^1.2.2",
128
128
  "@vercel/kv": "^3.0.0",
129
- "@vitest/coverage-v8": "^3.2.4",
129
+ "@vitest/coverage-v8": "^4.1.8",
130
130
  "@xata.io/client": "^0.30.1",
131
131
  "@zilliz/milvus2-sdk-node": "^2.6.14",
132
- "axios": "^1.15.0",
132
+ "axios": "^1.16.1",
133
133
  "cheerio": "1.2.0",
134
134
  "chromadb": "^1.5.3",
135
135
  "cohere-ai": "^7.14.0",
136
- "convex": "^1.32.0",
137
- "date-fns": "^4.1.0",
136
+ "convex": "^1.40.0",
137
+ "date-fns": "^4.4.0",
138
138
  "dotenv": "^17.4.0",
139
139
  "dpdm": "^3.14.0",
140
140
  "duck-duck-scrape": "^2.2.5",
141
141
  "exa-js": "^1.10.3",
142
- "firebase-admin": "^13.7.0",
143
- "graphql": "^16.6.0",
142
+ "firebase-admin": "^13.10.0",
143
+ "graphql": "^16.14.1",
144
144
  "hdb": "^0.19.8",
145
- "ioredis": "^5.10.1",
145
+ "ioredis": "^5.11.0",
146
146
  "langsmith": ">=0.4.0 <1.0.0",
147
- "lorem-ipsum": "^2.0.8",
147
+ "lorem-ipsum": "^3.0.0",
148
148
  "lunary": "^0.8.8",
149
149
  "mariadb": "^3.5.1",
150
- "mem0ai": "^3.0.3",
150
+ "mem0ai": "^3.0.6",
151
151
  "mongodb": "^6.17.0",
152
- "openai": "^6.37.0",
152
+ "openai": "^6.41.0",
153
153
  "peggy": "^5.1.0",
154
- "pg": "^8.16.3",
154
+ "pg": "^8.21.0",
155
155
  "pickleparser": "^0.2.1",
156
- "prisma": "^4.16.2",
156
+ "prisma": "^7.8.0",
157
157
  "readline": "^1.3.0",
158
158
  "redis": "^4.6.13",
159
159
  "reflect-metadata": "^0.2.2",
160
160
  "rimraf": "^6.1.3",
161
161
  "sqlite3": "^5.1.4",
162
- "typeorm": "^0.3.28",
163
- "typescript": "~5.8.3",
162
+ "typeorm": "^1.0.0",
163
+ "typescript": "~6.0.3",
164
164
  "typesense": "^3.0.5",
165
- "vitest": "^4.1.2",
165
+ "vitest": "^4.1.8",
166
166
  "voy-search": "0.6.3",
167
- "weaviate-client": "^3.13.0",
167
+ "weaviate-client": "^3.13.1",
168
168
  "zod-to-json-schema": "^3.25.2",
169
- "@langchain/anthropic": "1.4.0",
170
- "@langchain/aws": "1.3.8",
171
- "@langchain/cloudflare": "1.0.6",
172
- "@langchain/core": "^1.1.47",
173
- "@langchain/deepseek": "1.0.26",
174
- "@langchain/fireworks": "0.1.4",
175
- "@langchain/google-cloud-sql-pg": "1.0.23",
176
- "@langchain/google-common": "2.1.31",
177
- "@langchain/google-genai": "2.1.31",
178
- "@langchain/google-vertexai": "2.1.31",
179
- "@langchain/google-vertexai-web": "2.1.31",
180
- "@langchain/groq": "1.2.1",
181
- "@langchain/mistralai": "1.0.8",
182
- "@langchain/mongodb": "1.2.1",
183
- "@langchain/ollama": "1.2.7",
169
+ "@langchain/anthropic": "1.5.0",
170
+ "@langchain/aws": "1.4.0",
171
+ "@langchain/cloudflare": "1.1.0",
172
+ "@langchain/core": "^1.2.0",
173
+ "@langchain/deepseek": "1.1.0",
174
+ "@langchain/fireworks": "0.2.0",
175
+ "@langchain/google-common": "2.2.0",
176
+ "@langchain/google-genai": "2.2.0",
177
+ "@langchain/google-vertexai": "2.2.0",
178
+ "@langchain/google-vertexai-web": "2.2.0",
179
+ "@langchain/groq": "1.3.0",
180
+ "@langchain/mistralai": "1.2.0",
181
+ "@langchain/mongodb": "1.3.0",
182
+ "@langchain/ollama": "1.3.0",
184
183
  "@langchain/redis": "1.1.3",
185
184
  "@langchain/textsplitters": "1.0.1",
186
- "@langchain/xai": "1.3.18",
185
+ "@langchain/xai": "1.4.0",
187
186
  "@langchain/tsconfig": "0.0.1",
188
- "langchain": "1.4.1",
189
- "@langchain/together-ai": "0.1.4"
187
+ "langchain": "1.4.6",
188
+ "@langchain/together-ai": "0.2.0"
190
189
  },
191
190
  "peerDependencies": {
192
191
  "cheerio": "*",
193
192
  "peggy": "^5.1.0",
194
193
  "typeorm": "*",
195
- "@langchain/core": "^1.1.47"
194
+ "@langchain/core": "^1.2.0"
196
195
  },
197
196
  "peerDependenciesMeta": {
198
197
  "cheerio": {
@@ -207,12 +206,12 @@
207
206
  },
208
207
  "dependencies": {
209
208
  "handlebars": "^4.7.9",
210
- "js-yaml": "^4.1.1",
209
+ "js-yaml": "^4.2.0",
211
210
  "jsonpointer": "^5.0.1",
212
211
  "openapi-types": "^12.1.3",
213
- "yaml": "^2.8.3",
212
+ "yaml": "^2.9.0",
214
213
  "zod": "^3.25.76 || ^4",
215
- "@langchain/openai": "1.4.6",
214
+ "@langchain/openai": "1.5.0",
216
215
  "@langchain/textsplitters": "1.0.1"
217
216
  },
218
217
  "optionalDependencies": {