@langchain/google-cloud-sql-pg 1.0.21 → 1.0.23

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 (42) hide show
  1. package/CHANGELOG.md +17 -0
  2. package/README.md +37 -23
  3. package/dist/_virtual/{rolldown_runtime.cjs → _rolldown/runtime.cjs} +2 -4
  4. package/dist/chat_message_history.cjs +12 -11
  5. package/dist/chat_message_history.cjs.map +1 -1
  6. package/dist/chat_message_history.d.cts.map +1 -1
  7. package/dist/chat_message_history.d.ts.map +1 -1
  8. package/dist/chat_message_history.js +5 -4
  9. package/dist/chat_message_history.js.map +1 -1
  10. package/dist/engine.cjs +23 -32
  11. package/dist/engine.cjs.map +1 -1
  12. package/dist/engine.d.cts.map +1 -1
  13. package/dist/engine.d.ts.map +1 -1
  14. package/dist/engine.js +15 -25
  15. package/dist/engine.js.map +1 -1
  16. package/dist/index.cjs +9 -9
  17. package/dist/index.js +3 -4
  18. package/dist/indexes.cjs +1 -2
  19. package/dist/indexes.cjs.map +1 -1
  20. package/dist/indexes.d.cts.map +1 -1
  21. package/dist/indexes.d.ts.map +1 -1
  22. package/dist/indexes.js +1 -1
  23. package/dist/indexes.js.map +1 -1
  24. package/dist/loader.cjs +6 -8
  25. package/dist/loader.cjs.map +1 -1
  26. package/dist/loader.d.cts.map +1 -1
  27. package/dist/loader.d.ts.map +1 -1
  28. package/dist/loader.js +2 -4
  29. package/dist/loader.js.map +1 -1
  30. package/dist/utils/utils.cjs +1 -2
  31. package/dist/utils/utils.cjs.map +1 -1
  32. package/dist/utils/utils.js +1 -1
  33. package/dist/utils/utils.js.map +1 -1
  34. package/dist/vectorstore.cjs +29 -27
  35. package/dist/vectorstore.cjs.map +1 -1
  36. package/dist/vectorstore.d.cts +2 -2
  37. package/dist/vectorstore.d.cts.map +1 -1
  38. package/dist/vectorstore.d.ts +2 -2
  39. package/dist/vectorstore.d.ts.map +1 -1
  40. package/dist/vectorstore.js +18 -16
  41. package/dist/vectorstore.js.map +1 -1
  42. package/package.json +15 -25
@@ -1 +1 @@
1
- {"version":3,"file":"utils.js","names":["auth: GoogleAuth","res: { data: any }","row: { [key: string]: string }","content_columns: string[]","dictionary: { [key: string]: string }"],"sources":["../../src/utils/utils.ts"],"sourcesContent":["import { GoogleAuth } from \"google-auth-library\";\n\n/**\n * Get email address associated with current authenticated IAM principal.\n * Email will be used for automatic IAM database authentication to Cloud SQL.\n *\n * @param {GoogleAuth} auth - object to use in finding the associated IAM principal email address.\n * @returns {string} email - email address associated with the current authenticated IAM principal\n */\nexport const getIAMPrincipalEmail = async (\n auth: GoogleAuth\n): Promise<string> => {\n const credentials = await auth.getCredentials();\n\n if (\"client_email\" in credentials && credentials.client_email !== undefined) {\n return credentials.client_email.replace(\".gserviceaccount.com\", \"\");\n }\n\n const accessToken = await auth.getAccessToken();\n const client = await auth.getClient();\n\n const url = `https://oauth2.googleapis.com/tokeninfo?access_token=${accessToken}`;\n const clientResponse = await client\n .request({ url })\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n .then((res: { data: any }) => res.data);\n\n if (!(\"email\" in clientResponse)) {\n throw new Error(\n \"Failed to automatically obtain authenticated IAM principal's \" +\n \"email address using environment's ADC credentials!\"\n );\n }\n const { email } = clientResponse;\n return email.replace(\".gserviceaccount.com\", \"\");\n};\n\n// eslint-disable-next-line @typescript-eslint/no-explicit-any\nexport const customZip = (...arrays: any[]) => {\n const minLength = Math.min(...arrays.map((arr) => arr.length));\n const result = [];\n for (let i = 0; i < minLength; i += 1) {\n result.push(arrays.map((arr) => arr[i]));\n }\n return result;\n};\n\n/*\n Formatter functions\n*/\n\n// txt document formatter.\nexport function textFormatter(\n row: { [key: string]: string },\n content_columns: string[]\n): string {\n return content_columns\n .filter((column) => column in row)\n .map((column) => String(row[column]))\n .join(\" \");\n}\n\n// CSV document formatter.\nexport function csvFormatter(\n row: { [key: string]: string },\n content_columns: string[]\n): string {\n return content_columns\n .filter((column) => column in row)\n .map((column) => String(row[column]))\n .join(\", \");\n}\n\n// YAML document formatter\nexport function yamlFormatter(\n row: { [key: string]: string },\n content_columns: string[]\n): string {\n return content_columns\n .filter((column) => column in row)\n .map((column) => `${column}: ${String(row[column])}`)\n .join(\"\\n\");\n}\n\n// JSON document formatter\nexport function jsonFormatter(\n row: { [key: string]: string },\n content_columns: string[]\n): string {\n const dictionary: { [key: string]: string } = {};\n for (const column of content_columns) {\n if (column in row) {\n dictionary[column] = row[column];\n }\n }\n return JSON.stringify(dictionary);\n}\n"],"mappings":";;;;;;;;AASA,MAAa,uBAAuB,OAClCA,SACoB;CACpB,MAAM,cAAc,MAAM,KAAK,gBAAgB;AAE/C,KAAI,kBAAkB,eAAe,YAAY,iBAAiB,OAChE,QAAO,YAAY,aAAa,QAAQ,wBAAwB,GAAG;CAGrE,MAAM,cAAc,MAAM,KAAK,gBAAgB;CAC/C,MAAM,SAAS,MAAM,KAAK,WAAW;CAErC,MAAM,MAAM,CAAC,qDAAqD,EAAE,aAAa;CACjF,MAAM,iBAAiB,MAAM,OAC1B,QAAQ,EAAE,IAAK,EAAC,CAEhB,KAAK,CAACC,QAAuB,IAAI,KAAK;AAEzC,KAAI,EAAE,WAAW,gBACf,OAAM,IAAI,MACR;CAIJ,MAAM,EAAE,OAAO,GAAG;AAClB,QAAO,MAAM,QAAQ,wBAAwB,GAAG;AACjD;AAGD,MAAa,YAAY,CAAC,GAAG,WAAkB;CAC7C,MAAM,YAAY,KAAK,IAAI,GAAG,OAAO,IAAI,CAAC,QAAQ,IAAI,OAAO,CAAC;CAC9D,MAAM,SAAS,CAAE;AACjB,MAAK,IAAI,IAAI,GAAG,IAAI,WAAW,KAAK,GAClC,OAAO,KAAK,OAAO,IAAI,CAAC,QAAQ,IAAI,GAAG,CAAC;AAE1C,QAAO;AACR;AAOD,SAAgB,cACdC,KACAC,iBACQ;AACR,QAAO,gBACJ,OAAO,CAAC,WAAW,UAAU,IAAI,CACjC,IAAI,CAAC,WAAW,OAAO,IAAI,QAAQ,CAAC,CACpC,KAAK,IAAI;AACb;AAGD,SAAgB,aACdD,KACAC,iBACQ;AACR,QAAO,gBACJ,OAAO,CAAC,WAAW,UAAU,IAAI,CACjC,IAAI,CAAC,WAAW,OAAO,IAAI,QAAQ,CAAC,CACpC,KAAK,KAAK;AACd;AAGD,SAAgB,cACdD,KACAC,iBACQ;AACR,QAAO,gBACJ,OAAO,CAAC,WAAW,UAAU,IAAI,CACjC,IAAI,CAAC,WAAW,GAAG,OAAO,EAAE,EAAE,OAAO,IAAI,QAAQ,EAAE,CAAC,CACpD,KAAK,KAAK;AACd;AAGD,SAAgB,cACdD,KACAC,iBACQ;CACR,MAAMC,aAAwC,CAAE;AAChD,MAAK,MAAM,UAAU,gBACnB,KAAI,UAAU,KACZ,WAAW,UAAU,IAAI;AAG7B,QAAO,KAAK,UAAU,WAAW;AAClC"}
1
+ {"version":3,"file":"utils.js","names":[],"sources":["../../src/utils/utils.ts"],"sourcesContent":["import { GoogleAuth } from \"google-auth-library\";\n\n/**\n * Get email address associated with current authenticated IAM principal.\n * Email will be used for automatic IAM database authentication to Cloud SQL.\n *\n * @param {GoogleAuth} auth - object to use in finding the associated IAM principal email address.\n * @returns {string} email - email address associated with the current authenticated IAM principal\n */\nexport const getIAMPrincipalEmail = async (\n auth: GoogleAuth\n): Promise<string> => {\n const credentials = await auth.getCredentials();\n\n if (\"client_email\" in credentials && credentials.client_email !== undefined) {\n return credentials.client_email.replace(\".gserviceaccount.com\", \"\");\n }\n\n const accessToken = await auth.getAccessToken();\n const client = await auth.getClient();\n\n const url = `https://oauth2.googleapis.com/tokeninfo?access_token=${accessToken}`;\n const clientResponse = await client\n .request({ url })\n // oxlint-disable-next-line @typescript-eslint/no-explicit-any\n .then((res: { data: any }) => res.data);\n\n if (!(\"email\" in clientResponse)) {\n throw new Error(\n \"Failed to automatically obtain authenticated IAM principal's \" +\n \"email address using environment's ADC credentials!\"\n );\n }\n const { email } = clientResponse;\n return email.replace(\".gserviceaccount.com\", \"\");\n};\n\n// oxlint-disable-next-line @typescript-eslint/no-explicit-any\nexport const customZip = (...arrays: any[]) => {\n const minLength = Math.min(...arrays.map((arr) => arr.length));\n const result = [];\n for (let i = 0; i < minLength; i += 1) {\n result.push(arrays.map((arr) => arr[i]));\n }\n return result;\n};\n\n/*\n Formatter functions\n*/\n\n// txt document formatter.\nexport function textFormatter(\n row: { [key: string]: string },\n content_columns: string[]\n): string {\n return content_columns\n .filter((column) => column in row)\n .map((column) => String(row[column]))\n .join(\" \");\n}\n\n// CSV document formatter.\nexport function csvFormatter(\n row: { [key: string]: string },\n content_columns: string[]\n): string {\n return content_columns\n .filter((column) => column in row)\n .map((column) => String(row[column]))\n .join(\", \");\n}\n\n// YAML document formatter\nexport function yamlFormatter(\n row: { [key: string]: string },\n content_columns: string[]\n): string {\n return content_columns\n .filter((column) => column in row)\n .map((column) => `${column}: ${String(row[column])}`)\n .join(\"\\n\");\n}\n\n// JSON document formatter\nexport function jsonFormatter(\n row: { [key: string]: string },\n content_columns: string[]\n): string {\n const dictionary: { [key: string]: string } = {};\n for (const column of content_columns) {\n if (column in row) {\n dictionary[column] = row[column];\n }\n }\n return JSON.stringify(dictionary);\n}\n"],"mappings":";;;;;;;;AASA,MAAa,uBAAuB,OAClC,SACoB;CACpB,MAAM,cAAc,MAAM,KAAK,gBAAgB;AAE/C,KAAI,kBAAkB,eAAe,YAAY,iBAAiB,KAAA,EAChE,QAAO,YAAY,aAAa,QAAQ,wBAAwB,GAAG;CAGrE,MAAM,cAAc,MAAM,KAAK,gBAAgB;CAC/C,MAAM,SAAS,MAAM,KAAK,WAAW;CAErC,MAAM,MAAM,wDAAwD;CACpE,MAAM,iBAAiB,MAAM,OAC1B,QAAQ,EAAE,KAAK,CAAC,CAEhB,MAAM,QAAuB,IAAI,KAAK;AAEzC,KAAI,EAAE,WAAW,gBACf,OAAM,IAAI,MACR,kHAED;CAEH,MAAM,EAAE,UAAU;AAClB,QAAO,MAAM,QAAQ,wBAAwB,GAAG;;AAIlD,MAAa,aAAa,GAAG,WAAkB;CAC7C,MAAM,YAAY,KAAK,IAAI,GAAG,OAAO,KAAK,QAAQ,IAAI,OAAO,CAAC;CAC9D,MAAM,SAAS,EAAE;AACjB,MAAK,IAAI,IAAI,GAAG,IAAI,WAAW,KAAK,EAClC,QAAO,KAAK,OAAO,KAAK,QAAQ,IAAI,GAAG,CAAC;AAE1C,QAAO;;AAQT,SAAgB,cACd,KACA,iBACQ;AACR,QAAO,gBACJ,QAAQ,WAAW,UAAU,IAAI,CACjC,KAAK,WAAW,OAAO,IAAI,QAAQ,CAAC,CACpC,KAAK,IAAI;;AAId,SAAgB,aACd,KACA,iBACQ;AACR,QAAO,gBACJ,QAAQ,WAAW,UAAU,IAAI,CACjC,KAAK,WAAW,OAAO,IAAI,QAAQ,CAAC,CACpC,KAAK,KAAK;;AAIf,SAAgB,cACd,KACA,iBACQ;AACR,QAAO,gBACJ,QAAQ,WAAW,UAAU,IAAI,CACjC,KAAK,WAAW,GAAG,OAAO,IAAI,OAAO,IAAI,QAAQ,GAAG,CACpD,KAAK,KAAK;;AAIf,SAAgB,cACd,KACA,iBACQ;CACR,MAAM,aAAwC,EAAE;AAChD,MAAK,MAAM,UAAU,gBACnB,KAAI,UAAU,IACZ,YAAW,UAAU,IAAI;AAG7B,QAAO,KAAK,UAAU,WAAW"}
@@ -1,11 +1,10 @@
1
- const require_rolldown_runtime = require('./_virtual/rolldown_runtime.cjs');
2
- const require_utils = require('./utils/utils.cjs');
3
- const require_indexes = require('./indexes.cjs');
4
- const __langchain_core_vectorstores = require_rolldown_runtime.__toESM(require("@langchain/core/vectorstores"));
5
- const __langchain_core_documents = require_rolldown_runtime.__toESM(require("@langchain/core/documents"));
6
- const uuid = require_rolldown_runtime.__toESM(require("uuid"));
7
- const __langchain_core_utils_math = require_rolldown_runtime.__toESM(require("@langchain/core/utils/math"));
8
-
1
+ require("./_virtual/_rolldown/runtime.cjs");
2
+ const require_utils = require("./utils/utils.cjs");
3
+ const require_indexes = require("./indexes.cjs");
4
+ let _langchain_core_vectorstores = require("@langchain/core/vectorstores");
5
+ let _langchain_core_documents = require("@langchain/core/documents");
6
+ let _langchain_core_utils_uuid = require("@langchain/core/utils/uuid");
7
+ let _langchain_core_utils_math = require("@langchain/core/utils/math");
9
8
  //#region src/vectorstore.ts
10
9
  /**
11
10
  * Google Cloud SQL for PostgreSQL vector store integration.
@@ -110,7 +109,7 @@ const __langchain_core_utils_math = require_rolldown_runtime.__toESM(require("@l
110
109
  * <summary><strong>Similarity search with filter</strong></summary>
111
110
  *
112
111
  * ```typescript
113
- * const resultsWithFilter = await vectorStore.similaritySearch("thud", 1, "baz = 'bar'");
112
+ * const resultsWithFilter = await vectorStore.similaritySearch("thud", 1, { baz: "bar" });
114
113
  *
115
114
  * for (const doc of resultsWithFilter) {
116
115
  * console.log(`* ${doc.pageContent} [${JSON.stringify(doc.metadata, null)}]`);
@@ -153,7 +152,7 @@ const __langchain_core_utils_math = require_rolldown_runtime.__toESM(require("@l
153
152
  *
154
153
  * <br />
155
154
  */
156
- var PostgresVectorStore = class PostgresVectorStore extends __langchain_core_vectorstores.VectorStore {
155
+ var PostgresVectorStore = class PostgresVectorStore extends _langchain_core_vectorstores.VectorStore {
157
156
  engine;
158
157
  embeddings;
159
158
  tableName;
@@ -254,7 +253,7 @@ var PostgresVectorStore = class PostgresVectorStore extends __langchain_core_vec
254
253
  static async fromTexts(texts, metadatas, embeddings, dbConfig) {
255
254
  const documents = [];
256
255
  for (let i = 0; i < texts.length; i += 1) {
257
- const doc = new __langchain_core_documents.Document({
256
+ const doc = new _langchain_core_documents.Document({
258
257
  pageContent: texts[i],
259
258
  metadata: Array.isArray(metadatas) ? metadatas[i] : metadatas
260
259
  });
@@ -277,7 +276,7 @@ var PostgresVectorStore = class PostgresVectorStore extends __langchain_core_vec
277
276
  if (options?.ids) ids = options.ids;
278
277
  else documents.forEach((document) => {
279
278
  if (document.id !== void 0) ids.push(document.id);
280
- else ids.push((0, uuid.v4)());
279
+ else ids.push((0, _langchain_core_utils_uuid.v4)());
281
280
  });
282
281
  if (options && options.ids && options.ids.length !== documents.length) throw new Error("The number of ids must match the number of documents provided.");
283
282
  documents.forEach((document) => {
@@ -325,8 +324,7 @@ var PostgresVectorStore = class PostgresVectorStore extends __langchain_core_vec
325
324
  const texts = [];
326
325
  for (const doc of documents) texts.push(doc.pageContent);
327
326
  const embeddings = await this.embeddings.embedDocuments(texts);
328
- const results = await this.addVectors(embeddings, documents, options);
329
- return results;
327
+ return await this.addVectors(embeddings, documents, options);
330
328
  }
331
329
  /**
332
330
  * Deletes documents from the vector store based on the specified ids.
@@ -347,7 +345,7 @@ var PostgresVectorStore = class PostgresVectorStore extends __langchain_core_vec
347
345
  for (const row of results) {
348
346
  const metadata = this.metadataJsonColumn && row[this.metadataJsonColumn] ? row[this.metadataJsonColumn] : {};
349
347
  for (const col of this.metadataColumns) metadata[col] = row[col];
350
- documentsWithScores.push([new __langchain_core_documents.Document({
348
+ documentsWithScores.push([new _langchain_core_documents.Document({
351
349
  pageContent: row[this.contentColumn],
352
350
  metadata
353
351
  }), row.distance]);
@@ -358,12 +356,19 @@ var PostgresVectorStore = class PostgresVectorStore extends __langchain_core_vec
358
356
  const fetchK = k ?? this.k;
359
357
  const { operator } = this.distanceStrategy;
360
358
  const { searchFunction } = this.distanceStrategy;
361
- const _filter = filter !== void 0 ? `WHERE ${filter}` : "";
359
+ const filterColumns = filter !== void 0 ? Object.keys(filter) : [];
360
+ const filterBindings = {};
361
+ let _filter = "";
362
+ if (filterColumns.length > 0) _filter = `WHERE ${filterColumns.map((col, i) => {
363
+ const bindingKey = `filter_${i}`;
364
+ filterBindings[bindingKey] = filter[col];
365
+ return `"${col.replace(/"/g, "\"\"")}" = :${bindingKey}`;
366
+ }).join(" AND ")}`;
362
367
  const metadataColNames = this.metadataColumns.length > 0 ? `, "${this.metadataColumns.join("\",\"")}"` : "";
363
368
  const metadataJsonColName = this.metadataJsonColumn ? `, "${this.metadataJsonColumn}"` : "";
364
369
  const query = `SELECT "${this.idColumn}", "${this.contentColumn}", "${this.embeddingColumn}" ${metadataColNames} ${metadataJsonColName}, ${searchFunction}("${this.embeddingColumn}", '[${embedding}]') as distance FROM "${this.schemaName}"."${this.tableName}" ${_filter} ORDER BY "${this.embeddingColumn}" ${operator} '[${embedding}]' LIMIT ${fetchK};`;
365
370
  if (this.indexQueryOptions) await this.engine.pool.raw(`SET LOCAL ${this.indexQueryOptions.to_string()}`);
366
- const { rows } = await this.engine.pool.raw(query);
371
+ const { rows } = await this.engine.pool.raw(query, filterBindings);
367
372
  return rows;
368
373
  }
369
374
  async maxMarginalRelevanceSearch(query, options) {
@@ -372,12 +377,11 @@ var PostgresVectorStore = class PostgresVectorStore extends __langchain_core_vec
372
377
  const k = options?.k ? options.k : this.k;
373
378
  const documentsWithScores = [];
374
379
  let docsList = [];
375
- const embeddingList = results.map((row) => JSON.parse(row[this.embeddingColumn]));
376
- const mmrSelected = (0, __langchain_core_utils_math.maximalMarginalRelevance)(vector, embeddingList, options?.lambda, k);
380
+ const mmrSelected = (0, _langchain_core_utils_math.maximalMarginalRelevance)(vector, results.map((row) => JSON.parse(row[this.embeddingColumn])), options?.lambda, k);
377
381
  for (const row of results) {
378
382
  const metadata = this.metadataJsonColumn && row[this.metadataJsonColumn] ? row[this.metadataJsonColumn] : {};
379
383
  for (const col of this.metadataColumns) metadata[col] = row[col];
380
- documentsWithScores.push([new __langchain_core_documents.Document({
384
+ documentsWithScores.push([new _langchain_core_documents.Document({
381
385
  pageContent: row[this.contentColumn],
382
386
  metadata
383
387
  }), row.distance]);
@@ -410,7 +414,7 @@ var PostgresVectorStore = class PostgresVectorStore extends __langchain_core_vec
410
414
  * @param {string} indexName Optional - index name
411
415
  */
412
416
  async isValidIndex(indexName) {
413
- const idxName = indexName || this.tableName + require_indexes.DEFAULT_INDEX_NAME_SUFFIX;
417
+ const idxName = indexName || this.tableName + "langchainvectorindex";
414
418
  const stmt = `SELECT tablename, indexname
415
419
  FROM pg_indexes
416
420
  WHERE tablename = '${this.tableName}' AND schemaname = '${this.schemaName}' AND indexname = '${idxName}';`;
@@ -422,8 +426,7 @@ var PostgresVectorStore = class PostgresVectorStore extends __langchain_core_vec
422
426
  * @param {string} indexName Optional - index name
423
427
  */
424
428
  async dropVectorIndex(indexName) {
425
- const idxName = indexName || this.tableName + require_indexes.DEFAULT_INDEX_NAME_SUFFIX;
426
- const query = `DROP INDEX IF EXISTS ${idxName};`;
429
+ const query = `DROP INDEX IF EXISTS ${indexName || this.tableName + "langchainvectorindex"};`;
427
430
  await this.engine.pool.raw(query);
428
431
  }
429
432
  /**
@@ -431,12 +434,11 @@ var PostgresVectorStore = class PostgresVectorStore extends __langchain_core_vec
431
434
  * @param {string} indexName Optional - index name
432
435
  */
433
436
  async reIndex(indexName) {
434
- const idxName = indexName || this.tableName + require_indexes.DEFAULT_INDEX_NAME_SUFFIX;
435
- const query = `REINDEX INDEX ${idxName};`;
437
+ const query = `REINDEX INDEX ${indexName || this.tableName + "langchainvectorindex"};`;
436
438
  await this.engine.pool.raw(query);
437
439
  }
438
440
  };
439
-
440
441
  //#endregion
441
- exports.PostgresVectorStore = PostgresVectorStore;
442
+ exports.default = PostgresVectorStore;
443
+
442
444
  //# sourceMappingURL=vectorstore.cjs.map
@@ -1 +1 @@
1
- {"version":3,"file":"vectorstore.cjs","names":["VectorStore","embeddings: EmbeddingsInterface","dbConfig: VSArgs","engine: PostgresEngine","tableName: string","DEFAULT_DISTANCE_STRATEGY","columns: { [key: string]: string }","allMetadataColumns: string[]","texts: string[]","metadatas: object[] | object","dbConfig: dbConfigArgs","documents: Document[]","Document","docs: Document[]","vectors: number[][]","options?: { ids?: string[] }","ids: string[]","metadatas: Record<string, string>[]","customZip","values: { [key: string]: string | string[] }","params: { ids?: string[] }","embedding: number[]","k: number","filter?: this[\"FilterType\"]","documentsWithScores: [Document, number][]","k?: number | undefined","filter?: this[\"FilterType\"] | undefined","query: string","options: MaxMarginalRelevanceSearchOptions<this[\"FilterType\"]>","docsList: Document[]","row: { [x: string]: string }","index: BaseIndex","name?: string","concurrently: boolean","DEFAULT_INDEX_NAME_SUFFIX","indexName?: string"],"sources":["../src/vectorstore.ts"],"sourcesContent":["import { EmbeddingsInterface } from \"@langchain/core/embeddings\";\nimport {\n MaxMarginalRelevanceSearchOptions,\n VectorStore,\n} from \"@langchain/core/vectorstores\";\nimport { Document } from \"@langchain/core/documents\";\nimport { v4 as uuidv4 } from \"uuid\";\nimport { maximalMarginalRelevance } from \"@langchain/core/utils/math\";\nimport {\n BaseIndex,\n DEFAULT_DISTANCE_STRATEGY,\n DEFAULT_INDEX_NAME_SUFFIX,\n DistanceStrategy,\n QueryOptions,\n} from \"./indexes.js\";\nimport PostgresEngine from \"./engine.js\";\nimport { customZip } from \"./utils/utils.js\";\n\nexport interface PostgresVectorStoreArgs {\n schemaName?: string;\n contentColumn?: string;\n embeddingColumn?: string;\n metadataColumns?: Array<string>;\n idColumn?: string;\n distanceStrategy?: DistanceStrategy;\n k?: number;\n fetchK?: number;\n lambdaMult?: number;\n ignoreMetadataColumns?: Array<string>;\n metadataJsonColumn?: string;\n indexQueryOptions?: QueryOptions;\n}\n\nexport interface dbConfigArgs {\n engine: PostgresEngine;\n tableName: string;\n dbConfig?: PostgresVectorStoreArgs;\n}\n\ninterface VSArgs {\n engine: PostgresEngine;\n tableName: string;\n schemaName: string;\n contentColumn: string;\n embeddingColumn: string;\n metadataColumns: Array<string>;\n idColumn: string;\n distanceStrategy: DistanceStrategy;\n k: number;\n fetchK: number;\n lambdaMult: number;\n metadataJsonColumn: string;\n indexQueryOptions?: QueryOptions;\n}\n\n/**\n * Google Cloud SQL for PostgreSQL vector store integration.\n *\n * Setup:\n * Install `@langchain/google-cloud-sql-pg`\n *\n * ```bash\n * npm install @langchain/google-cloud-sql-pg\n * ```\n *\n * <details open>\n * <summary><strong>Instantiate</strong></summary>\n *\n * ```typescript\n * import { Column, PostgresEngine, PostgresEngineArgs, PostgresVectorStore, VectorStoreTableArgs } from \"@langchain/google-cloud-sql-pg\";\n * // Or other embeddings\n * import { OpenAIEmbeddings } from '@langchain/openai';\n *\n *\n * const embeddings = new OpenAIEmbeddings({\n * model: \"text-embedding-3-small\",\n * });\n *\n * const pgArgs: PostgresEngineArgs = {\n * user: \"db-user\",\n * password: \"password\"\n * }\n * // Create a shared connection pool\n * const engine: PostgresEngine = await PostgresEngine.fromInstance(\n * \"project-id\",\n * \"region\",\n * \"instance-name\",\n * \"database-name\",\n * pgArgs\n * );\n * // (Optional) Specify metadata columns for filtering\n * // All other metadata will be added to JSON\n * const vectorStoreTableArgs: VectorStoreTableArgs = {\n * metadataColumns: [new Column(\"baz\", \"TEXT\")],\n * };\n * // Create a vector store table\n * await engine.initVectorstoreTable(\"my-table\", 768, vectorStoreTableArgs);\n * // Customize the vector store\n * const pvectorArgs: PostgresVectorStoreArgs = {\n * idColumn: \"ID_COLUMN\",\n * contentColumn: \"CONTENT_COLUMN\",\n * embeddingColumn: \"EMBEDDING_COLUMN\",\n * metadataColumns: [\"baz\"]\n * }\n *\n * const vectorStore = await PostgresVectorStore.initialize(engine, embeddingService, \"my-table\", pvectorArgs);\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 * const ids = [\"1\", \"2\", \"3\"];\n * await vectorStore.addDocuments(documents, { ids });\n * ```\n * </details>\n *\n * <br />\n *\n * <details>\n * <summary><strong>Delete documents</strong></summary>\n *\n * ```typescript\n * await vectorStore.delete({ ids: [\"3\"] });\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 PostgresVectorStore extends VectorStore {\n declare FilterType: string;\n\n engine: PostgresEngine;\n\n embeddings: EmbeddingsInterface;\n\n tableName: string;\n\n schemaName: string;\n\n contentColumn: string;\n\n embeddingColumn: string;\n\n metadataColumns: Array<string>;\n\n idColumn: string;\n\n metadataJsonColumn: string;\n\n distanceStrategy: DistanceStrategy;\n\n k: number;\n\n fetchK: number;\n\n lambdaMult: number;\n\n indexQueryOptions: QueryOptions | undefined;\n\n /**\n * Initializes a new vector store with embeddings and database configuration.\n *\n * @param embeddings - Instance of `EmbeddingsInterface` used to embed queries.\n * @param dbConfig - Configuration settings for the database or storage system.\n */\n constructor(embeddings: EmbeddingsInterface, dbConfig: VSArgs) {\n super(embeddings, dbConfig);\n this.embeddings = embeddings;\n this.engine = dbConfig.engine;\n this.tableName = dbConfig.tableName;\n this.schemaName = dbConfig.schemaName;\n this.contentColumn = dbConfig.contentColumn;\n this.embeddingColumn = dbConfig.embeddingColumn;\n this.metadataColumns = dbConfig.metadataColumns\n ? dbConfig.metadataColumns\n : [];\n this.idColumn = dbConfig.idColumn;\n this.metadataJsonColumn = dbConfig.metadataJsonColumn;\n this.distanceStrategy = dbConfig.distanceStrategy;\n this.k = dbConfig.k;\n this.fetchK = dbConfig.fetchK;\n this.lambdaMult = dbConfig.lambdaMult;\n this.indexQueryOptions = dbConfig.indexQueryOptions;\n }\n\n /**\n * Create a new PostgresVectorStore instance.\n * @param {PostgresEngine} engine Required - Connection pool engine for managing connections to Cloud SQL for PostgreSQL database.\n * @param {Embeddings} embeddings Required - Text embedding model to use.\n * @param {string} tableName Required - Name of an existing table or table to be created.\n * @param {string} schemaName Database schema name of the table. Defaults to \"public\".\n * @param {string} contentColumn Column that represent a Document's page_content. Defaults to \"content\".\n * @param {string} embeddingColumn Column for embedding vectors. The embedding is generated from the document value. Defaults to \"embedding\".\n * @param {Array<string>} metadataColumns Column(s) that represent a document's metadata.\n * @param {Array<string>} ignoreMetadataColumns Optional - Column(s) to ignore in pre-existing tables for a document's metadata. Can not be used with metadata_columns.\n * @param {string} idColumn Column that represents the Document's id. Defaults to \"langchain_id\".\n * @param {string} metadataJsonColumn Optional - Column to store metadata as JSON. Defaults to \"langchain_metadata\".\n * @param {DistanceStrategy} distanceStrategy Distance strategy to use for vector similarity search. Defaults to COSINE_DISTANCE.\n * @param {number} k Number of Documents to return from search. Defaults to 4.\n * @param {number} fetchK Number of Documents to fetch to pass to MMR algorithm.\n * @param {number} lambdaMult Number between 0 and 1 that determines the degree of diversity among the results with 0 corresponding to maximum diversity and 1 to minimum diversity. Defaults to 0.5.\n * @param {QueryOptions} indexQueryOptions Optional - Index query option.\n * @returns PostgresVectorStore instance.\n */\n static async initialize(\n engine: PostgresEngine,\n embeddings: EmbeddingsInterface,\n tableName: string,\n {\n schemaName = \"public\",\n contentColumn = \"content\",\n embeddingColumn = \"embedding\",\n metadataColumns = [],\n ignoreMetadataColumns,\n idColumn = \"langchain_id\",\n metadataJsonColumn = \"langchain_metadata\",\n distanceStrategy = DEFAULT_DISTANCE_STRATEGY,\n k = 4,\n fetchK = 20,\n lambdaMult = 0.5,\n indexQueryOptions,\n }: PostgresVectorStoreArgs = {}\n ): Promise<PostgresVectorStore> {\n if (metadataColumns !== undefined && ignoreMetadataColumns !== undefined) {\n throw Error(\n \"Can not use both metadata_columns and ignore_metadata_columns.\"\n );\n }\n\n const { rows } = await engine.pool.raw(\n `SELECT column_name, data_type FROM information_schema.columns WHERE table_name = '${tableName}' AND table_schema = '${schemaName}'`\n );\n const columns: { [key: string]: string } = {};\n\n for (const index in rows) {\n if (rows[index]) {\n const row = rows[index];\n columns[row.column_name] = row.data_type;\n }\n }\n\n if (!Object.prototype.hasOwnProperty.call(columns, idColumn)) {\n throw Error(`Id column: ${idColumn}, does not exist.`);\n }\n\n if (!Object.prototype.hasOwnProperty.call(columns, contentColumn)) {\n throw Error(`Content column: ${contentColumn}, does not exist.`);\n }\n\n const contentType = columns[contentColumn];\n\n if (contentType !== \"text\" && !contentType.includes(\"char\")) {\n throw Error(\n `Content column: ${contentColumn}, is type: ${contentType}. It must be a type of character string.`\n );\n }\n\n if (!Object.prototype.hasOwnProperty.call(columns, embeddingColumn)) {\n throw Error(`Embedding column: ${embeddingColumn}, does not exist.`);\n }\n\n if (columns[embeddingColumn] !== \"USER-DEFINED\") {\n throw Error(\n `Embedding column: ${embeddingColumn} is not of type Vector.`\n );\n }\n\n const jsonColumn = Object.prototype.hasOwnProperty.call(\n columns,\n metadataJsonColumn\n )\n ? metadataJsonColumn\n : \"\";\n\n for (const column of metadataColumns) {\n if (!Object.prototype.hasOwnProperty.call(columns, column)) {\n throw Error(`Metadata column: ${column}, does not exist.`);\n }\n }\n\n const allColumns = columns;\n let allMetadataColumns: string[] = [];\n if (\n ignoreMetadataColumns !== undefined &&\n ignoreMetadataColumns.length > 0\n ) {\n for (const column of ignoreMetadataColumns) {\n delete allColumns[column];\n }\n\n delete allColumns[idColumn];\n delete allColumns[contentColumn];\n delete allColumns[embeddingColumn];\n allMetadataColumns = Object.keys(allColumns);\n } else {\n for (const column of metadataColumns) {\n if (Object.prototype.hasOwnProperty.call(allColumns, column)) {\n allMetadataColumns.push(column);\n }\n }\n }\n return new PostgresVectorStore(embeddings, {\n engine,\n tableName,\n schemaName,\n contentColumn,\n embeddingColumn,\n metadataColumns: allMetadataColumns,\n idColumn,\n metadataJsonColumn: jsonColumn,\n distanceStrategy,\n k,\n fetchK,\n lambdaMult,\n indexQueryOptions,\n });\n }\n\n static async fromTexts(\n texts: string[],\n metadatas: object[] | object,\n embeddings: EmbeddingsInterface,\n dbConfig: dbConfigArgs\n ): Promise<VectorStore> {\n const documents: Document[] = [];\n\n for (let i = 0; i < texts.length; i += 1) {\n const doc = new Document({\n pageContent: texts[i],\n metadata: Array.isArray(metadatas) ? metadatas[i] : metadatas,\n });\n documents.push(doc);\n }\n\n return PostgresVectorStore.fromDocuments(documents, embeddings, dbConfig);\n }\n\n static async fromDocuments(\n docs: Document[],\n embeddings: EmbeddingsInterface,\n dbConfig: dbConfigArgs\n ): Promise<VectorStore> {\n const { engine } = dbConfig;\n const { tableName } = dbConfig;\n const config = dbConfig.dbConfig;\n const vectorStore = await this.initialize(\n engine,\n embeddings,\n tableName,\n config\n );\n\n await vectorStore.addDocuments(docs);\n\n return vectorStore;\n }\n\n async addVectors(\n vectors: number[][],\n documents: Document[],\n options?: { ids?: string[] }\n ): Promise<string[] | void> {\n let ids: string[] = [];\n const metadatas: Record<string, string>[] = [];\n\n if (vectors.length !== documents.length) {\n throw new Error(\n \"The number of vectors must match the number of documents provided.\"\n );\n }\n\n if (options?.ids) {\n ids = options.ids;\n } else {\n documents.forEach((document) => {\n if (document.id !== undefined) {\n ids.push(document.id);\n } else {\n ids.push(uuidv4());\n }\n });\n }\n\n if (options && options.ids && options.ids.length !== documents.length) {\n throw new Error(\n \"The number of ids must match the number of documents provided.\"\n );\n }\n\n documents.forEach((document) => {\n metadatas.push(document.metadata);\n });\n\n const tuples = customZip(ids, documents, vectors, metadatas);\n\n // Insert embeddings\n for (const [id, document, embedding, metadata] of tuples) {\n const metadataColNames =\n this.metadataColumns.length > 0\n ? `, \"${this.metadataColumns.join('\",\"')}\"`\n : \"\";\n\n let stmt = `INSERT INTO \"${this.schemaName}\".\"${this.tableName}\"(\"${this.idColumn}\", \"${this.contentColumn}\", \"${this.embeddingColumn}\" ${metadataColNames}`;\n const values: { [key: string]: string | string[] } = {\n id,\n content: document.pageContent,\n embedding: `[${embedding.toString()}]`,\n };\n let valuesStmt = \" VALUES (:id, :content, :embedding\";\n\n // Add metadata\n const extra = metadata;\n for (const metadataColumn of this.metadataColumns) {\n if (Object.prototype.hasOwnProperty.call(metadata, metadataColumn)) {\n valuesStmt += `, :${metadataColumn}`;\n values[metadataColumn] = metadata[metadataColumn];\n delete extra[metadataColumn];\n } else {\n valuesStmt += \" ,null\";\n }\n }\n\n // Add JSON column and/or close statement\n stmt += this.metadataJsonColumn ? `, ${this.metadataJsonColumn})` : \")\";\n if (this.metadataJsonColumn) {\n valuesStmt += \", :extra)\";\n Object.assign(values, { extra: JSON.stringify(extra) });\n } else {\n valuesStmt += \")\";\n }\n\n const query = stmt + valuesStmt;\n await this.engine.pool.raw(query, values);\n }\n\n return options?.ids;\n }\n\n _vectorstoreType(): string {\n return \"cloudsqlpostgresql\";\n }\n\n /**\n * Adds documents to the vector store, embedding them first through the\n * `embeddings` instance.\n *\n * @param documents - Array of documents to embed and add.\n * @param options - Optional configuration for embedding and storing documents.\n * @returns A promise resolving to an array of document IDs or void, based on implementation.\n * @abstract\n */\n async addDocuments(\n documents: Document[],\n options?: { ids?: string[] }\n ): Promise<string[] | void> {\n const texts = [];\n\n for (const doc of documents) {\n texts.push(doc.pageContent);\n }\n\n const embeddings = await this.embeddings.embedDocuments(texts);\n const results = await this.addVectors(embeddings, documents, options);\n\n return results;\n }\n\n /**\n * Deletes documents from the vector store based on the specified ids.\n *\n * @param params - Flexible key-value pairs defining conditions for document deletion.\n * @param ids - Optional: Property of {params} that contains the array of ids to be deleted\n * @returns A promise that resolves once the deletion is complete.\n */\n async delete(params: { ids?: string[] }): Promise<void> {\n if (params.ids === undefined) return;\n const idList = params.ids.map((id) => `'${id}'`).join(\", \");\n const query = `DELETE FROM \"${this.schemaName}\".\"${this.tableName}\" WHERE \"${this.idColumn}\" in (${idList})`;\n await this.engine.pool.raw(query);\n }\n\n async similaritySearchVectorWithScore(\n embedding: number[],\n k: number,\n filter?: this[\"FilterType\"]\n ): Promise<[Document, number][]> {\n const results = await this.queryCollection(embedding, k, filter);\n const documentsWithScores: [Document, number][] = [];\n\n for (const row of results) {\n const metadata =\n this.metadataJsonColumn && row[this.metadataJsonColumn]\n ? row[this.metadataJsonColumn]\n : {};\n\n for (const col of this.metadataColumns) {\n metadata[col] = row[col];\n }\n\n documentsWithScores.push([\n new Document({ pageContent: row[this.contentColumn], metadata }),\n row.distance,\n ]);\n }\n\n return documentsWithScores;\n }\n\n private async queryCollection(\n embedding: number[],\n k?: number | undefined,\n filter?: this[\"FilterType\"] | undefined\n ) {\n const fetchK = k ?? this.k;\n const { operator } = this.distanceStrategy;\n const { searchFunction } = this.distanceStrategy;\n const _filter = filter !== undefined ? `WHERE ${filter}` : \"\";\n const metadataColNames =\n this.metadataColumns.length > 0\n ? `, \"${this.metadataColumns.join('\",\"')}\"`\n : \"\";\n const metadataJsonColName = this.metadataJsonColumn\n ? `, \"${this.metadataJsonColumn}\"`\n : \"\";\n\n const query = `SELECT \"${this.idColumn}\", \"${this.contentColumn}\", \"${this.embeddingColumn}\" ${metadataColNames} ${metadataJsonColName}, ${searchFunction}(\"${this.embeddingColumn}\", '[${embedding}]') as distance FROM \"${this.schemaName}\".\"${this.tableName}\" ${_filter} ORDER BY \"${this.embeddingColumn}\" ${operator} '[${embedding}]' LIMIT ${fetchK};`;\n\n if (this.indexQueryOptions) {\n await this.engine.pool.raw(\n `SET LOCAL ${this.indexQueryOptions.to_string()}`\n );\n }\n\n const { rows } = await this.engine.pool.raw(query);\n\n return rows;\n }\n\n async maxMarginalRelevanceSearch(\n query: string,\n options: MaxMarginalRelevanceSearchOptions<this[\"FilterType\"]>\n ): Promise<Document[]> {\n const vector = await this.embeddings.embedQuery(query);\n const results = await this.queryCollection(\n vector,\n options?.k,\n options?.filter\n );\n const k = options?.k ? options.k : this.k;\n const documentsWithScores: [Document, number][] = [];\n let docsList: Document[] = [];\n\n const embeddingList = results.map((row: { [x: string]: string }) =>\n JSON.parse(row[this.embeddingColumn])\n );\n const mmrSelected = maximalMarginalRelevance(\n vector,\n embeddingList,\n options?.lambda,\n k\n );\n\n for (const row of results) {\n const metadata =\n this.metadataJsonColumn && row[this.metadataJsonColumn]\n ? row[this.metadataJsonColumn]\n : {};\n for (const col of this.metadataColumns) {\n metadata[col] = row[col];\n }\n documentsWithScores.push([\n new Document({\n pageContent: row[this.contentColumn],\n metadata,\n }),\n row.distance,\n ]);\n }\n\n docsList = documentsWithScores\n .filter((_, i) => mmrSelected.includes(i))\n .map(([doc, _]) => doc);\n\n return docsList;\n }\n\n /**\n * Create an index on the vector store table\n * @param {BaseIndex} index\n * @param {string} name Optional\n * @param {boolean} concurrently Optional\n */\n async applyVectorIndex(\n index: BaseIndex,\n name?: string,\n concurrently: boolean = false\n ): Promise<void> {\n if (index.constructor.name === \"ExactNearestNeighbor\") {\n await this.dropVectorIndex();\n return;\n }\n\n const filter =\n index.partialIndexes && index.partialIndexes?.length > 0\n ? `WHERE (${index.partialIndexes})`\n : \"\";\n const params = `WITH ${index.indexOptions()}`;\n const funct = index.distanceStrategy.indexFunction;\n\n let indexName = name;\n if (!indexName) {\n if (!index.name) {\n indexName = this.tableName + DEFAULT_INDEX_NAME_SUFFIX;\n } else {\n indexName = index.name;\n }\n }\n\n const stmt = `CREATE INDEX ${\n concurrently ? \"CONCURRENTLY\" : \"\"\n } ${indexName} ON \"${this.schemaName}\".\"${this.tableName}\" USING ${\n index.indexType\n } (${this.embeddingColumn} ${funct}) ${params} ${filter};`;\n\n await this.engine.pool.raw(stmt);\n }\n\n /**\n * Check if index exists in the table.\n * @param {string} indexName Optional - index name\n */\n async isValidIndex(indexName?: string): Promise<boolean> {\n const idxName = indexName || this.tableName + DEFAULT_INDEX_NAME_SUFFIX;\n const stmt = `SELECT tablename, indexname\n FROM pg_indexes\n WHERE tablename = '${this.tableName}' AND schemaname = '${this.schemaName}' AND indexname = '${idxName}';`;\n const { rows } = await this.engine.pool.raw(stmt);\n\n return rows.length === 1;\n }\n\n /**\n * Drop the vector index\n * @param {string} indexName Optional - index name\n */\n async dropVectorIndex(indexName?: string): Promise<void> {\n const idxName = indexName || this.tableName + DEFAULT_INDEX_NAME_SUFFIX;\n const query = `DROP INDEX IF EXISTS ${idxName};`;\n await this.engine.pool.raw(query);\n }\n\n /**\n * Re-index the vector store table\n * @param {string} indexName Optional - index name\n */\n async reIndex(indexName?: string) {\n const idxName = indexName || this.tableName + DEFAULT_INDEX_NAME_SUFFIX;\n const query = `REINDEX INDEX ${idxName};`;\n await this.engine.pool.raw(query);\n }\n}\n\nexport default PostgresVectorStore;\n"],"mappings":"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"}
1
+ {"version":3,"file":"vectorstore.cjs","names":["VectorStore","DEFAULT_DISTANCE_STRATEGY","Document","customZip","DEFAULT_INDEX_NAME_SUFFIX"],"sources":["../src/vectorstore.ts"],"sourcesContent":["import { EmbeddingsInterface } from \"@langchain/core/embeddings\";\nimport {\n MaxMarginalRelevanceSearchOptions,\n VectorStore,\n} from \"@langchain/core/vectorstores\";\nimport { Document } from \"@langchain/core/documents\";\nimport { v4 as uuidv4 } from \"@langchain/core/utils/uuid\";\nimport { maximalMarginalRelevance } from \"@langchain/core/utils/math\";\nimport {\n BaseIndex,\n DEFAULT_DISTANCE_STRATEGY,\n DEFAULT_INDEX_NAME_SUFFIX,\n DistanceStrategy,\n QueryOptions,\n} from \"./indexes.js\";\nimport PostgresEngine from \"./engine.js\";\nimport { customZip } from \"./utils/utils.js\";\n\nexport interface PostgresVectorStoreArgs {\n schemaName?: string;\n contentColumn?: string;\n embeddingColumn?: string;\n metadataColumns?: Array<string>;\n idColumn?: string;\n distanceStrategy?: DistanceStrategy;\n k?: number;\n fetchK?: number;\n lambdaMult?: number;\n ignoreMetadataColumns?: Array<string>;\n metadataJsonColumn?: string;\n indexQueryOptions?: QueryOptions;\n}\n\nexport interface dbConfigArgs {\n engine: PostgresEngine;\n tableName: string;\n dbConfig?: PostgresVectorStoreArgs;\n}\n\ninterface VSArgs {\n engine: PostgresEngine;\n tableName: string;\n schemaName: string;\n contentColumn: string;\n embeddingColumn: string;\n metadataColumns: Array<string>;\n idColumn: string;\n distanceStrategy: DistanceStrategy;\n k: number;\n fetchK: number;\n lambdaMult: number;\n metadataJsonColumn: string;\n indexQueryOptions?: QueryOptions;\n}\n\n/**\n * Google Cloud SQL for PostgreSQL vector store integration.\n *\n * Setup:\n * Install `@langchain/google-cloud-sql-pg`\n *\n * ```bash\n * npm install @langchain/google-cloud-sql-pg\n * ```\n *\n * <details open>\n * <summary><strong>Instantiate</strong></summary>\n *\n * ```typescript\n * import { Column, PostgresEngine, PostgresEngineArgs, PostgresVectorStore, VectorStoreTableArgs } from \"@langchain/google-cloud-sql-pg\";\n * // Or other embeddings\n * import { OpenAIEmbeddings } from '@langchain/openai';\n *\n *\n * const embeddings = new OpenAIEmbeddings({\n * model: \"text-embedding-3-small\",\n * });\n *\n * const pgArgs: PostgresEngineArgs = {\n * user: \"db-user\",\n * password: \"password\"\n * }\n * // Create a shared connection pool\n * const engine: PostgresEngine = await PostgresEngine.fromInstance(\n * \"project-id\",\n * \"region\",\n * \"instance-name\",\n * \"database-name\",\n * pgArgs\n * );\n * // (Optional) Specify metadata columns for filtering\n * // All other metadata will be added to JSON\n * const vectorStoreTableArgs: VectorStoreTableArgs = {\n * metadataColumns: [new Column(\"baz\", \"TEXT\")],\n * };\n * // Create a vector store table\n * await engine.initVectorstoreTable(\"my-table\", 768, vectorStoreTableArgs);\n * // Customize the vector store\n * const pvectorArgs: PostgresVectorStoreArgs = {\n * idColumn: \"ID_COLUMN\",\n * contentColumn: \"CONTENT_COLUMN\",\n * embeddingColumn: \"EMBEDDING_COLUMN\",\n * metadataColumns: [\"baz\"]\n * }\n *\n * const vectorStore = await PostgresVectorStore.initialize(engine, embeddingService, \"my-table\", pvectorArgs);\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 * const ids = [\"1\", \"2\", \"3\"];\n * await vectorStore.addDocuments(documents, { ids });\n * ```\n * </details>\n *\n * <br />\n *\n * <details>\n * <summary><strong>Delete documents</strong></summary>\n *\n * ```typescript\n * await vectorStore.delete({ ids: [\"3\"] });\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 PostgresVectorStore extends VectorStore {\n declare FilterType: Record<string, string>;\n\n engine: PostgresEngine;\n\n embeddings: EmbeddingsInterface;\n\n tableName: string;\n\n schemaName: string;\n\n contentColumn: string;\n\n embeddingColumn: string;\n\n metadataColumns: Array<string>;\n\n idColumn: string;\n\n metadataJsonColumn: string;\n\n distanceStrategy: DistanceStrategy;\n\n k: number;\n\n fetchK: number;\n\n lambdaMult: number;\n\n indexQueryOptions: QueryOptions | undefined;\n\n /**\n * Initializes a new vector store with embeddings and database configuration.\n *\n * @param embeddings - Instance of `EmbeddingsInterface` used to embed queries.\n * @param dbConfig - Configuration settings for the database or storage system.\n */\n constructor(embeddings: EmbeddingsInterface, dbConfig: VSArgs) {\n super(embeddings, dbConfig);\n this.embeddings = embeddings;\n this.engine = dbConfig.engine;\n this.tableName = dbConfig.tableName;\n this.schemaName = dbConfig.schemaName;\n this.contentColumn = dbConfig.contentColumn;\n this.embeddingColumn = dbConfig.embeddingColumn;\n this.metadataColumns = dbConfig.metadataColumns\n ? dbConfig.metadataColumns\n : [];\n this.idColumn = dbConfig.idColumn;\n this.metadataJsonColumn = dbConfig.metadataJsonColumn;\n this.distanceStrategy = dbConfig.distanceStrategy;\n this.k = dbConfig.k;\n this.fetchK = dbConfig.fetchK;\n this.lambdaMult = dbConfig.lambdaMult;\n this.indexQueryOptions = dbConfig.indexQueryOptions;\n }\n\n /**\n * Create a new PostgresVectorStore instance.\n * @param {PostgresEngine} engine Required - Connection pool engine for managing connections to Cloud SQL for PostgreSQL database.\n * @param {Embeddings} embeddings Required - Text embedding model to use.\n * @param {string} tableName Required - Name of an existing table or table to be created.\n * @param {string} schemaName Database schema name of the table. Defaults to \"public\".\n * @param {string} contentColumn Column that represent a Document's page_content. Defaults to \"content\".\n * @param {string} embeddingColumn Column for embedding vectors. The embedding is generated from the document value. Defaults to \"embedding\".\n * @param {Array<string>} metadataColumns Column(s) that represent a document's metadata.\n * @param {Array<string>} ignoreMetadataColumns Optional - Column(s) to ignore in pre-existing tables for a document's metadata. Can not be used with metadata_columns.\n * @param {string} idColumn Column that represents the Document's id. Defaults to \"langchain_id\".\n * @param {string} metadataJsonColumn Optional - Column to store metadata as JSON. Defaults to \"langchain_metadata\".\n * @param {DistanceStrategy} distanceStrategy Distance strategy to use for vector similarity search. Defaults to COSINE_DISTANCE.\n * @param {number} k Number of Documents to return from search. Defaults to 4.\n * @param {number} fetchK Number of Documents to fetch to pass to MMR algorithm.\n * @param {number} lambdaMult Number between 0 and 1 that determines the degree of diversity among the results with 0 corresponding to maximum diversity and 1 to minimum diversity. Defaults to 0.5.\n * @param {QueryOptions} indexQueryOptions Optional - Index query option.\n * @returns PostgresVectorStore instance.\n */\n static async initialize(\n engine: PostgresEngine,\n embeddings: EmbeddingsInterface,\n tableName: string,\n {\n schemaName = \"public\",\n contentColumn = \"content\",\n embeddingColumn = \"embedding\",\n metadataColumns = [],\n ignoreMetadataColumns,\n idColumn = \"langchain_id\",\n metadataJsonColumn = \"langchain_metadata\",\n distanceStrategy = DEFAULT_DISTANCE_STRATEGY,\n k = 4,\n fetchK = 20,\n lambdaMult = 0.5,\n indexQueryOptions,\n }: PostgresVectorStoreArgs = {}\n ): Promise<PostgresVectorStore> {\n if (metadataColumns !== undefined && ignoreMetadataColumns !== undefined) {\n throw Error(\n \"Can not use both metadata_columns and ignore_metadata_columns.\"\n );\n }\n\n const { rows } = await engine.pool.raw(\n `SELECT column_name, data_type FROM information_schema.columns WHERE table_name = '${tableName}' AND table_schema = '${schemaName}'`\n );\n const columns: { [key: string]: string } = {};\n\n for (const index in rows) {\n if (rows[index]) {\n const row = rows[index];\n columns[row.column_name] = row.data_type;\n }\n }\n\n if (!Object.prototype.hasOwnProperty.call(columns, idColumn)) {\n throw Error(`Id column: ${idColumn}, does not exist.`);\n }\n\n if (!Object.prototype.hasOwnProperty.call(columns, contentColumn)) {\n throw Error(`Content column: ${contentColumn}, does not exist.`);\n }\n\n const contentType = columns[contentColumn];\n\n if (contentType !== \"text\" && !contentType.includes(\"char\")) {\n throw Error(\n `Content column: ${contentColumn}, is type: ${contentType}. It must be a type of character string.`\n );\n }\n\n if (!Object.prototype.hasOwnProperty.call(columns, embeddingColumn)) {\n throw Error(`Embedding column: ${embeddingColumn}, does not exist.`);\n }\n\n if (columns[embeddingColumn] !== \"USER-DEFINED\") {\n throw Error(\n `Embedding column: ${embeddingColumn} is not of type Vector.`\n );\n }\n\n const jsonColumn = Object.prototype.hasOwnProperty.call(\n columns,\n metadataJsonColumn\n )\n ? metadataJsonColumn\n : \"\";\n\n for (const column of metadataColumns) {\n if (!Object.prototype.hasOwnProperty.call(columns, column)) {\n throw Error(`Metadata column: ${column}, does not exist.`);\n }\n }\n\n const allColumns = columns;\n let allMetadataColumns: string[] = [];\n if (\n ignoreMetadataColumns !== undefined &&\n ignoreMetadataColumns.length > 0\n ) {\n for (const column of ignoreMetadataColumns) {\n delete allColumns[column];\n }\n\n delete allColumns[idColumn];\n delete allColumns[contentColumn];\n delete allColumns[embeddingColumn];\n allMetadataColumns = Object.keys(allColumns);\n } else {\n for (const column of metadataColumns) {\n if (Object.prototype.hasOwnProperty.call(allColumns, column)) {\n allMetadataColumns.push(column);\n }\n }\n }\n return new PostgresVectorStore(embeddings, {\n engine,\n tableName,\n schemaName,\n contentColumn,\n embeddingColumn,\n metadataColumns: allMetadataColumns,\n idColumn,\n metadataJsonColumn: jsonColumn,\n distanceStrategy,\n k,\n fetchK,\n lambdaMult,\n indexQueryOptions,\n });\n }\n\n static async fromTexts(\n texts: string[],\n metadatas: object[] | object,\n embeddings: EmbeddingsInterface,\n dbConfig: dbConfigArgs\n ): Promise<VectorStore> {\n const documents: Document[] = [];\n\n for (let i = 0; i < texts.length; i += 1) {\n const doc = new Document({\n pageContent: texts[i],\n metadata: Array.isArray(metadatas) ? metadatas[i] : metadatas,\n });\n documents.push(doc);\n }\n\n return PostgresVectorStore.fromDocuments(documents, embeddings, dbConfig);\n }\n\n static async fromDocuments(\n docs: Document[],\n embeddings: EmbeddingsInterface,\n dbConfig: dbConfigArgs\n ): Promise<VectorStore> {\n const { engine } = dbConfig;\n const { tableName } = dbConfig;\n const config = dbConfig.dbConfig;\n const vectorStore = await this.initialize(\n engine,\n embeddings,\n tableName,\n config\n );\n\n await vectorStore.addDocuments(docs);\n\n return vectorStore;\n }\n\n async addVectors(\n vectors: number[][],\n documents: Document[],\n options?: { ids?: string[] }\n ): Promise<string[] | void> {\n let ids: string[] = [];\n const metadatas: Record<string, string>[] = [];\n\n if (vectors.length !== documents.length) {\n throw new Error(\n \"The number of vectors must match the number of documents provided.\"\n );\n }\n\n if (options?.ids) {\n ids = options.ids;\n } else {\n documents.forEach((document) => {\n if (document.id !== undefined) {\n ids.push(document.id);\n } else {\n ids.push(uuidv4());\n }\n });\n }\n\n if (options && options.ids && options.ids.length !== documents.length) {\n throw new Error(\n \"The number of ids must match the number of documents provided.\"\n );\n }\n\n documents.forEach((document) => {\n metadatas.push(document.metadata);\n });\n\n const tuples = customZip(ids, documents, vectors, metadatas);\n\n // Insert embeddings\n for (const [id, document, embedding, metadata] of tuples) {\n const metadataColNames =\n this.metadataColumns.length > 0\n ? `, \"${this.metadataColumns.join('\",\"')}\"`\n : \"\";\n\n let stmt = `INSERT INTO \"${this.schemaName}\".\"${this.tableName}\"(\"${this.idColumn}\", \"${this.contentColumn}\", \"${this.embeddingColumn}\" ${metadataColNames}`;\n const values: { [key: string]: string | string[] } = {\n id,\n content: document.pageContent,\n embedding: `[${embedding.toString()}]`,\n };\n let valuesStmt = \" VALUES (:id, :content, :embedding\";\n\n // Add metadata\n const extra = metadata;\n for (const metadataColumn of this.metadataColumns) {\n if (Object.prototype.hasOwnProperty.call(metadata, metadataColumn)) {\n valuesStmt += `, :${metadataColumn}`;\n values[metadataColumn] = metadata[metadataColumn];\n delete extra[metadataColumn];\n } else {\n valuesStmt += \" ,null\";\n }\n }\n\n // Add JSON column and/or close statement\n stmt += this.metadataJsonColumn ? `, ${this.metadataJsonColumn})` : \")\";\n if (this.metadataJsonColumn) {\n valuesStmt += \", :extra)\";\n Object.assign(values, { extra: JSON.stringify(extra) });\n } else {\n valuesStmt += \")\";\n }\n\n const query = stmt + valuesStmt;\n await this.engine.pool.raw(query, values);\n }\n\n return options?.ids;\n }\n\n _vectorstoreType(): string {\n return \"cloudsqlpostgresql\";\n }\n\n /**\n * Adds documents to the vector store, embedding them first through the\n * `embeddings` instance.\n *\n * @param documents - Array of documents to embed and add.\n * @param options - Optional configuration for embedding and storing documents.\n * @returns A promise resolving to an array of document IDs or void, based on implementation.\n * @abstract\n */\n async addDocuments(\n documents: Document[],\n options?: { ids?: string[] }\n ): Promise<string[] | void> {\n const texts = [];\n\n for (const doc of documents) {\n texts.push(doc.pageContent);\n }\n\n const embeddings = await this.embeddings.embedDocuments(texts);\n const results = await this.addVectors(embeddings, documents, options);\n\n return results;\n }\n\n /**\n * Deletes documents from the vector store based on the specified ids.\n *\n * @param params - Flexible key-value pairs defining conditions for document deletion.\n * @param ids - Optional: Property of {params} that contains the array of ids to be deleted\n * @returns A promise that resolves once the deletion is complete.\n */\n async delete(params: { ids?: string[] }): Promise<void> {\n if (params.ids === undefined) return;\n const idList = params.ids.map((id) => `'${id}'`).join(\", \");\n const query = `DELETE FROM \"${this.schemaName}\".\"${this.tableName}\" WHERE \"${this.idColumn}\" in (${idList})`;\n await this.engine.pool.raw(query);\n }\n\n async similaritySearchVectorWithScore(\n embedding: number[],\n k: number,\n filter?: this[\"FilterType\"]\n ): Promise<[Document, number][]> {\n const results = await this.queryCollection(embedding, k, filter);\n const documentsWithScores: [Document, number][] = [];\n\n for (const row of results) {\n const metadata =\n this.metadataJsonColumn && row[this.metadataJsonColumn]\n ? row[this.metadataJsonColumn]\n : {};\n\n for (const col of this.metadataColumns) {\n metadata[col] = row[col];\n }\n\n documentsWithScores.push([\n new Document({ pageContent: row[this.contentColumn], metadata }),\n row.distance,\n ]);\n }\n\n return documentsWithScores;\n }\n\n private async queryCollection(\n embedding: number[],\n k?: number | undefined,\n filter?: this[\"FilterType\"] | undefined\n ) {\n const fetchK = k ?? this.k;\n const { operator } = this.distanceStrategy;\n const { searchFunction } = this.distanceStrategy;\n const filterColumns = filter !== undefined ? Object.keys(filter) : [];\n const filterBindings: Record<string, string> = {};\n let _filter = \"\";\n if (filterColumns.length > 0) {\n const conditions = filterColumns.map((col, i) => {\n const bindingKey = `filter_${i}`;\n filterBindings[bindingKey] = filter[col];\n return `\"${col.replace(/\"/g, '\"\"')}\" = :${bindingKey}`;\n });\n _filter = `WHERE ${conditions.join(\" AND \")}`;\n }\n const metadataColNames =\n this.metadataColumns.length > 0\n ? `, \"${this.metadataColumns.join('\",\"')}\"`\n : \"\";\n const metadataJsonColName = this.metadataJsonColumn\n ? `, \"${this.metadataJsonColumn}\"`\n : \"\";\n\n const query = `SELECT \"${this.idColumn}\", \"${this.contentColumn}\", \"${this.embeddingColumn}\" ${metadataColNames} ${metadataJsonColName}, ${searchFunction}(\"${this.embeddingColumn}\", '[${embedding}]') as distance FROM \"${this.schemaName}\".\"${this.tableName}\" ${_filter} ORDER BY \"${this.embeddingColumn}\" ${operator} '[${embedding}]' LIMIT ${fetchK};`;\n\n if (this.indexQueryOptions) {\n await this.engine.pool.raw(\n `SET LOCAL ${this.indexQueryOptions.to_string()}`\n );\n }\n\n const { rows } = await this.engine.pool.raw(query, filterBindings);\n\n return rows;\n }\n\n async maxMarginalRelevanceSearch(\n query: string,\n options: MaxMarginalRelevanceSearchOptions<this[\"FilterType\"]>\n ): Promise<Document[]> {\n const vector = await this.embeddings.embedQuery(query);\n const results = await this.queryCollection(\n vector,\n options?.k,\n options?.filter\n );\n const k = options?.k ? options.k : this.k;\n const documentsWithScores: [Document, number][] = [];\n let docsList: Document[] = [];\n\n const embeddingList = results.map((row: { [x: string]: string }) =>\n JSON.parse(row[this.embeddingColumn])\n );\n const mmrSelected = maximalMarginalRelevance(\n vector,\n embeddingList,\n options?.lambda,\n k\n );\n\n for (const row of results) {\n const metadata =\n this.metadataJsonColumn && row[this.metadataJsonColumn]\n ? row[this.metadataJsonColumn]\n : {};\n for (const col of this.metadataColumns) {\n metadata[col] = row[col];\n }\n documentsWithScores.push([\n new Document({\n pageContent: row[this.contentColumn],\n metadata,\n }),\n row.distance,\n ]);\n }\n\n docsList = documentsWithScores\n .filter((_, i) => mmrSelected.includes(i))\n .map(([doc, _]) => doc);\n\n return docsList;\n }\n\n /**\n * Create an index on the vector store table\n * @param {BaseIndex} index\n * @param {string} name Optional\n * @param {boolean} concurrently Optional\n */\n async applyVectorIndex(\n index: BaseIndex,\n name?: string,\n concurrently: boolean = false\n ): Promise<void> {\n if (index.constructor.name === \"ExactNearestNeighbor\") {\n await this.dropVectorIndex();\n return;\n }\n\n const filter =\n index.partialIndexes && index.partialIndexes?.length > 0\n ? `WHERE (${index.partialIndexes})`\n : \"\";\n const params = `WITH ${index.indexOptions()}`;\n const funct = index.distanceStrategy.indexFunction;\n\n let indexName = name;\n if (!indexName) {\n if (!index.name) {\n indexName = this.tableName + DEFAULT_INDEX_NAME_SUFFIX;\n } else {\n indexName = index.name;\n }\n }\n\n const stmt = `CREATE INDEX ${\n concurrently ? \"CONCURRENTLY\" : \"\"\n } ${indexName} ON \"${this.schemaName}\".\"${this.tableName}\" USING ${\n index.indexType\n } (${this.embeddingColumn} ${funct}) ${params} ${filter};`;\n\n await this.engine.pool.raw(stmt);\n }\n\n /**\n * Check if index exists in the table.\n * @param {string} indexName Optional - index name\n */\n async isValidIndex(indexName?: string): Promise<boolean> {\n const idxName = indexName || this.tableName + DEFAULT_INDEX_NAME_SUFFIX;\n const stmt = `SELECT tablename, indexname\n FROM pg_indexes\n WHERE tablename = '${this.tableName}' AND schemaname = '${this.schemaName}' AND indexname = '${idxName}';`;\n const { rows } = await this.engine.pool.raw(stmt);\n\n return rows.length === 1;\n }\n\n /**\n * Drop the vector index\n * @param {string} indexName Optional - index name\n */\n async dropVectorIndex(indexName?: string): Promise<void> {\n const idxName = indexName || this.tableName + DEFAULT_INDEX_NAME_SUFFIX;\n const query = `DROP INDEX IF EXISTS ${idxName};`;\n await this.engine.pool.raw(query);\n }\n\n /**\n * Re-index the vector store table\n * @param {string} indexName Optional - index name\n */\n async reIndex(indexName?: string) {\n const idxName = indexName || this.tableName + DEFAULT_INDEX_NAME_SUFFIX;\n const query = `REINDEX INDEX ${idxName};`;\n await this.engine.pool.raw(query);\n }\n}\n\nexport default PostgresVectorStore;\n"],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AAyMA,IAAa,sBAAb,MAAa,4BAA4BA,6BAAAA,YAAY;CAGnD;CAEA;CAEA;CAEA;CAEA;CAEA;CAEA;CAEA;CAEA;CAEA;CAEA;CAEA;CAEA;CAEA;;;;;;;CAQA,YAAY,YAAiC,UAAkB;AAC7D,QAAM,YAAY,SAAS;AAC3B,OAAK,aAAa;AAClB,OAAK,SAAS,SAAS;AACvB,OAAK,YAAY,SAAS;AAC1B,OAAK,aAAa,SAAS;AAC3B,OAAK,gBAAgB,SAAS;AAC9B,OAAK,kBAAkB,SAAS;AAChC,OAAK,kBAAkB,SAAS,kBAC5B,SAAS,kBACT,EAAE;AACN,OAAK,WAAW,SAAS;AACzB,OAAK,qBAAqB,SAAS;AACnC,OAAK,mBAAmB,SAAS;AACjC,OAAK,IAAI,SAAS;AAClB,OAAK,SAAS,SAAS;AACvB,OAAK,aAAa,SAAS;AAC3B,OAAK,oBAAoB,SAAS;;;;;;;;;;;;;;;;;;;;;CAsBpC,aAAa,WACX,QACA,YACA,WACA,EACE,aAAa,UACb,gBAAgB,WAChB,kBAAkB,aAClB,kBAAkB,EAAE,EACpB,uBACA,WAAW,gBACX,qBAAqB,sBACrB,mBAAmBC,gBAAAA,2BACnB,IAAI,GACJ,SAAS,IACT,aAAa,IACb,sBAC2B,EAAE,EACD;AAC9B,MAAI,oBAAoB,KAAA,KAAa,0BAA0B,KAAA,EAC7D,OAAM,MACJ,iEACD;EAGH,MAAM,EAAE,SAAS,MAAM,OAAO,KAAK,IACjC,qFAAqF,UAAU,wBAAwB,WAAW,GACnI;EACD,MAAM,UAAqC,EAAE;AAE7C,OAAK,MAAM,SAAS,KAClB,KAAI,KAAK,QAAQ;GACf,MAAM,MAAM,KAAK;AACjB,WAAQ,IAAI,eAAe,IAAI;;AAInC,MAAI,CAAC,OAAO,UAAU,eAAe,KAAK,SAAS,SAAS,CAC1D,OAAM,MAAM,cAAc,SAAS,mBAAmB;AAGxD,MAAI,CAAC,OAAO,UAAU,eAAe,KAAK,SAAS,cAAc,CAC/D,OAAM,MAAM,mBAAmB,cAAc,mBAAmB;EAGlE,MAAM,cAAc,QAAQ;AAE5B,MAAI,gBAAgB,UAAU,CAAC,YAAY,SAAS,OAAO,CACzD,OAAM,MACJ,mBAAmB,cAAc,aAAa,YAAY,0CAC3D;AAGH,MAAI,CAAC,OAAO,UAAU,eAAe,KAAK,SAAS,gBAAgB,CACjE,OAAM,MAAM,qBAAqB,gBAAgB,mBAAmB;AAGtE,MAAI,QAAQ,qBAAqB,eAC/B,OAAM,MACJ,qBAAqB,gBAAgB,yBACtC;EAGH,MAAM,aAAa,OAAO,UAAU,eAAe,KACjD,SACA,mBACD,GACG,qBACA;AAEJ,OAAK,MAAM,UAAU,gBACnB,KAAI,CAAC,OAAO,UAAU,eAAe,KAAK,SAAS,OAAO,CACxD,OAAM,MAAM,oBAAoB,OAAO,mBAAmB;EAI9D,MAAM,aAAa;EACnB,IAAI,qBAA+B,EAAE;AACrC,MACE,0BAA0B,KAAA,KAC1B,sBAAsB,SAAS,GAC/B;AACA,QAAK,MAAM,UAAU,sBACnB,QAAO,WAAW;AAGpB,UAAO,WAAW;AAClB,UAAO,WAAW;AAClB,UAAO,WAAW;AAClB,wBAAqB,OAAO,KAAK,WAAW;QAE5C,MAAK,MAAM,UAAU,gBACnB,KAAI,OAAO,UAAU,eAAe,KAAK,YAAY,OAAO,CAC1D,oBAAmB,KAAK,OAAO;AAIrC,SAAO,IAAI,oBAAoB,YAAY;GACzC;GACA;GACA;GACA;GACA;GACA,iBAAiB;GACjB;GACA,oBAAoB;GACpB;GACA;GACA;GACA;GACA;GACD,CAAC;;CAGJ,aAAa,UACX,OACA,WACA,YACA,UACsB;EACtB,MAAM,YAAwB,EAAE;AAEhC,OAAK,IAAI,IAAI,GAAG,IAAI,MAAM,QAAQ,KAAK,GAAG;GACxC,MAAM,MAAM,IAAIC,0BAAAA,SAAS;IACvB,aAAa,MAAM;IACnB,UAAU,MAAM,QAAQ,UAAU,GAAG,UAAU,KAAK;IACrD,CAAC;AACF,aAAU,KAAK,IAAI;;AAGrB,SAAO,oBAAoB,cAAc,WAAW,YAAY,SAAS;;CAG3E,aAAa,cACX,MACA,YACA,UACsB;EACtB,MAAM,EAAE,WAAW;EACnB,MAAM,EAAE,cAAc;EACtB,MAAM,SAAS,SAAS;EACxB,MAAM,cAAc,MAAM,KAAK,WAC7B,QACA,YACA,WACA,OACD;AAED,QAAM,YAAY,aAAa,KAAK;AAEpC,SAAO;;CAGT,MAAM,WACJ,SACA,WACA,SAC0B;EAC1B,IAAI,MAAgB,EAAE;EACtB,MAAM,YAAsC,EAAE;AAE9C,MAAI,QAAQ,WAAW,UAAU,OAC/B,OAAM,IAAI,MACR,qEACD;AAGH,MAAI,SAAS,IACX,OAAM,QAAQ;MAEd,WAAU,SAAS,aAAa;AAC9B,OAAI,SAAS,OAAO,KAAA,EAClB,KAAI,KAAK,SAAS,GAAG;OAErB,KAAI,MAAA,GAAA,2BAAA,KAAa,CAAC;IAEpB;AAGJ,MAAI,WAAW,QAAQ,OAAO,QAAQ,IAAI,WAAW,UAAU,OAC7D,OAAM,IAAI,MACR,iEACD;AAGH,YAAU,SAAS,aAAa;AAC9B,aAAU,KAAK,SAAS,SAAS;IACjC;EAEF,MAAM,SAASC,cAAAA,UAAU,KAAK,WAAW,SAAS,UAAU;AAG5D,OAAK,MAAM,CAAC,IAAI,UAAU,WAAW,aAAa,QAAQ;GACxD,MAAM,mBACJ,KAAK,gBAAgB,SAAS,IAC1B,MAAM,KAAK,gBAAgB,KAAK,QAAM,CAAC,KACvC;GAEN,IAAI,OAAO,gBAAgB,KAAK,WAAW,KAAK,KAAK,UAAU,KAAK,KAAK,SAAS,MAAM,KAAK,cAAc,MAAM,KAAK,gBAAgB,IAAI;GAC1I,MAAM,SAA+C;IACnD;IACA,SAAS,SAAS;IAClB,WAAW,IAAI,UAAU,UAAU,CAAC;IACrC;GACD,IAAI,aAAa;GAGjB,MAAM,QAAQ;AACd,QAAK,MAAM,kBAAkB,KAAK,gBAChC,KAAI,OAAO,UAAU,eAAe,KAAK,UAAU,eAAe,EAAE;AAClE,kBAAc,MAAM;AACpB,WAAO,kBAAkB,SAAS;AAClC,WAAO,MAAM;SAEb,eAAc;AAKlB,WAAQ,KAAK,qBAAqB,KAAK,KAAK,mBAAmB,KAAK;AACpE,OAAI,KAAK,oBAAoB;AAC3B,kBAAc;AACd,WAAO,OAAO,QAAQ,EAAE,OAAO,KAAK,UAAU,MAAM,EAAE,CAAC;SAEvD,eAAc;GAGhB,MAAM,QAAQ,OAAO;AACrB,SAAM,KAAK,OAAO,KAAK,IAAI,OAAO,OAAO;;AAG3C,SAAO,SAAS;;CAGlB,mBAA2B;AACzB,SAAO;;;;;;;;;;;CAYT,MAAM,aACJ,WACA,SAC0B;EAC1B,MAAM,QAAQ,EAAE;AAEhB,OAAK,MAAM,OAAO,UAChB,OAAM,KAAK,IAAI,YAAY;EAG7B,MAAM,aAAa,MAAM,KAAK,WAAW,eAAe,MAAM;AAG9D,SAFgB,MAAM,KAAK,WAAW,YAAY,WAAW,QAAQ;;;;;;;;;CAYvE,MAAM,OAAO,QAA2C;AACtD,MAAI,OAAO,QAAQ,KAAA,EAAW;EAC9B,MAAM,SAAS,OAAO,IAAI,KAAK,OAAO,IAAI,GAAG,GAAG,CAAC,KAAK,KAAK;EAC3D,MAAM,QAAQ,gBAAgB,KAAK,WAAW,KAAK,KAAK,UAAU,WAAW,KAAK,SAAS,QAAQ,OAAO;AAC1G,QAAM,KAAK,OAAO,KAAK,IAAI,MAAM;;CAGnC,MAAM,gCACJ,WACA,GACA,QAC+B;EAC/B,MAAM,UAAU,MAAM,KAAK,gBAAgB,WAAW,GAAG,OAAO;EAChE,MAAM,sBAA4C,EAAE;AAEpD,OAAK,MAAM,OAAO,SAAS;GACzB,MAAM,WACJ,KAAK,sBAAsB,IAAI,KAAK,sBAChC,IAAI,KAAK,sBACT,EAAE;AAER,QAAK,MAAM,OAAO,KAAK,gBACrB,UAAS,OAAO,IAAI;AAGtB,uBAAoB,KAAK,CACvB,IAAID,0BAAAA,SAAS;IAAE,aAAa,IAAI,KAAK;IAAgB;IAAU,CAAC,EAChE,IAAI,SACL,CAAC;;AAGJ,SAAO;;CAGT,MAAc,gBACZ,WACA,GACA,QACA;EACA,MAAM,SAAS,KAAK,KAAK;EACzB,MAAM,EAAE,aAAa,KAAK;EAC1B,MAAM,EAAE,mBAAmB,KAAK;EAChC,MAAM,gBAAgB,WAAW,KAAA,IAAY,OAAO,KAAK,OAAO,GAAG,EAAE;EACrE,MAAM,iBAAyC,EAAE;EACjD,IAAI,UAAU;AACd,MAAI,cAAc,SAAS,EAMzB,WAAU,SALS,cAAc,KAAK,KAAK,MAAM;GAC/C,MAAM,aAAa,UAAU;AAC7B,kBAAe,cAAc,OAAO;AACpC,UAAO,IAAI,IAAI,QAAQ,MAAM,OAAK,CAAC,OAAO;IAC1C,CAC4B,KAAK,QAAQ;EAE7C,MAAM,mBACJ,KAAK,gBAAgB,SAAS,IAC1B,MAAM,KAAK,gBAAgB,KAAK,QAAM,CAAC,KACvC;EACN,MAAM,sBAAsB,KAAK,qBAC7B,MAAM,KAAK,mBAAmB,KAC9B;EAEJ,MAAM,QAAQ,WAAW,KAAK,SAAS,MAAM,KAAK,cAAc,MAAM,KAAK,gBAAgB,IAAI,iBAAiB,GAAG,oBAAoB,IAAI,eAAe,IAAI,KAAK,gBAAgB,OAAO,UAAU,wBAAwB,KAAK,WAAW,KAAK,KAAK,UAAU,IAAI,QAAQ,aAAa,KAAK,gBAAgB,IAAI,SAAS,KAAK,UAAU,WAAW,OAAO;AAE5V,MAAI,KAAK,kBACP,OAAM,KAAK,OAAO,KAAK,IACrB,aAAa,KAAK,kBAAkB,WAAW,GAChD;EAGH,MAAM,EAAE,SAAS,MAAM,KAAK,OAAO,KAAK,IAAI,OAAO,eAAe;AAElE,SAAO;;CAGT,MAAM,2BACJ,OACA,SACqB;EACrB,MAAM,SAAS,MAAM,KAAK,WAAW,WAAW,MAAM;EACtD,MAAM,UAAU,MAAM,KAAK,gBACzB,QACA,SAAS,GACT,SAAS,OACV;EACD,MAAM,IAAI,SAAS,IAAI,QAAQ,IAAI,KAAK;EACxC,MAAM,sBAA4C,EAAE;EACpD,IAAI,WAAuB,EAAE;EAK7B,MAAM,eAAA,GAAA,2BAAA,0BACJ,QAJoB,QAAQ,KAAK,QACjC,KAAK,MAAM,IAAI,KAAK,iBAAiB,CACtC,EAIC,SAAS,QACT,EACD;AAED,OAAK,MAAM,OAAO,SAAS;GACzB,MAAM,WACJ,KAAK,sBAAsB,IAAI,KAAK,sBAChC,IAAI,KAAK,sBACT,EAAE;AACR,QAAK,MAAM,OAAO,KAAK,gBACrB,UAAS,OAAO,IAAI;AAEtB,uBAAoB,KAAK,CACvB,IAAIA,0BAAAA,SAAS;IACX,aAAa,IAAI,KAAK;IACtB;IACD,CAAC,EACF,IAAI,SACL,CAAC;;AAGJ,aAAW,oBACR,QAAQ,GAAG,MAAM,YAAY,SAAS,EAAE,CAAC,CACzC,KAAK,CAAC,KAAK,OAAO,IAAI;AAEzB,SAAO;;;;;;;;CAST,MAAM,iBACJ,OACA,MACA,eAAwB,OACT;AACf,MAAI,MAAM,YAAY,SAAS,wBAAwB;AACrD,SAAM,KAAK,iBAAiB;AAC5B;;EAGF,MAAM,SACJ,MAAM,kBAAkB,MAAM,gBAAgB,SAAS,IACnD,UAAU,MAAM,eAAe,KAC/B;EACN,MAAM,SAAS,QAAQ,MAAM,cAAc;EAC3C,MAAM,QAAQ,MAAM,iBAAiB;EAErC,IAAI,YAAY;AAChB,MAAI,CAAC,UACH,KAAI,CAAC,MAAM,KACT,aAAY,KAAK,YAAYE,gBAAAA;MAE7B,aAAY,MAAM;EAItB,MAAM,OAAO,gBACX,eAAe,iBAAiB,GACjC,GAAG,UAAU,OAAO,KAAK,WAAW,KAAK,KAAK,UAAU,UACvD,MAAM,UACP,IAAI,KAAK,gBAAgB,GAAG,MAAM,IAAI,OAAO,GAAG,OAAO;AAExD,QAAM,KAAK,OAAO,KAAK,IAAI,KAAK;;;;;;CAOlC,MAAM,aAAa,WAAsC;EACvD,MAAM,UAAU,aAAa,KAAK,YAAA;EAClC,MAAM,OAAO;;uCAEsB,KAAK,UAAU,sBAAsB,KAAK,WAAW,qBAAqB,QAAQ;EACrH,MAAM,EAAE,SAAS,MAAM,KAAK,OAAO,KAAK,IAAI,KAAK;AAEjD,SAAO,KAAK,WAAW;;;;;;CAOzB,MAAM,gBAAgB,WAAmC;EAEvD,MAAM,QAAQ,wBADE,aAAa,KAAK,YAAA,uBACY;AAC9C,QAAM,KAAK,OAAO,KAAK,IAAI,MAAM;;;;;;CAOnC,MAAM,QAAQ,WAAoB;EAEhC,MAAM,QAAQ,iBADE,aAAa,KAAK,YAAA,uBACK;AACvC,QAAM,KAAK,OAAO,KAAK,IAAI,MAAM"}
@@ -142,7 +142,7 @@ interface VSArgs {
142
142
  * <summary><strong>Similarity search with filter</strong></summary>
143
143
  *
144
144
  * ```typescript
145
- * const resultsWithFilter = await vectorStore.similaritySearch("thud", 1, "baz = 'bar'");
145
+ * const resultsWithFilter = await vectorStore.similaritySearch("thud", 1, { baz: "bar" });
146
146
  *
147
147
  * for (const doc of resultsWithFilter) {
148
148
  * console.log(`* ${doc.pageContent} [${JSON.stringify(doc.metadata, null)}]`);
@@ -186,7 +186,7 @@ interface VSArgs {
186
186
  * <br />
187
187
  */
188
188
  declare class PostgresVectorStore extends VectorStore {
189
- FilterType: string;
189
+ FilterType: Record<string, string>;
190
190
  engine: PostgresEngine;
191
191
  embeddings: EmbeddingsInterface;
192
192
  tableName: string;
@@ -1 +1 @@
1
- {"version":3,"file":"vectorstore.d.cts","names":["EmbeddingsInterface","MaxMarginalRelevanceSearchOptions","VectorStore","Document","BaseIndex","DistanceStrategy","QueryOptions","PostgresEngine","PostgresVectorStoreArgs","Array","dbConfigArgs","VSArgs","PostgresVectorStore","schemaName","contentColumn","embeddingColumn","metadataColumns","ignoreMetadataColumns","idColumn","metadataJsonColumn","distanceStrategy","k","fetchK","lambdaMult","indexQueryOptions","Promise","default"],"sources":["../src/vectorstore.d.ts"],"sourcesContent":["import { EmbeddingsInterface } from \"@langchain/core/embeddings\";\nimport { MaxMarginalRelevanceSearchOptions, VectorStore } from \"@langchain/core/vectorstores\";\nimport { Document } from \"@langchain/core/documents\";\nimport { BaseIndex, DistanceStrategy, QueryOptions } from \"./indexes.js\";\nimport PostgresEngine from \"./engine.js\";\nexport interface PostgresVectorStoreArgs {\n schemaName?: string;\n contentColumn?: string;\n embeddingColumn?: string;\n metadataColumns?: Array<string>;\n idColumn?: string;\n distanceStrategy?: DistanceStrategy;\n k?: number;\n fetchK?: number;\n lambdaMult?: number;\n ignoreMetadataColumns?: Array<string>;\n metadataJsonColumn?: string;\n indexQueryOptions?: QueryOptions;\n}\nexport interface dbConfigArgs {\n engine: PostgresEngine;\n tableName: string;\n dbConfig?: PostgresVectorStoreArgs;\n}\ninterface VSArgs {\n engine: PostgresEngine;\n tableName: string;\n schemaName: string;\n contentColumn: string;\n embeddingColumn: string;\n metadataColumns: Array<string>;\n idColumn: string;\n distanceStrategy: DistanceStrategy;\n k: number;\n fetchK: number;\n lambdaMult: number;\n metadataJsonColumn: string;\n indexQueryOptions?: QueryOptions;\n}\n/**\n * Google Cloud SQL for PostgreSQL vector store integration.\n *\n * Setup:\n * Install `@langchain/google-cloud-sql-pg`\n *\n * ```bash\n * npm install @langchain/google-cloud-sql-pg\n * ```\n *\n * <details open>\n * <summary><strong>Instantiate</strong></summary>\n *\n * ```typescript\n * import { Column, PostgresEngine, PostgresEngineArgs, PostgresVectorStore, VectorStoreTableArgs } from \"@langchain/google-cloud-sql-pg\";\n * // Or other embeddings\n * import { OpenAIEmbeddings } from '@langchain/openai';\n *\n *\n * const embeddings = new OpenAIEmbeddings({\n * model: \"text-embedding-3-small\",\n * });\n *\n * const pgArgs: PostgresEngineArgs = {\n * user: \"db-user\",\n * password: \"password\"\n * }\n * // Create a shared connection pool\n * const engine: PostgresEngine = await PostgresEngine.fromInstance(\n * \"project-id\",\n * \"region\",\n * \"instance-name\",\n * \"database-name\",\n * pgArgs\n * );\n * // (Optional) Specify metadata columns for filtering\n * // All other metadata will be added to JSON\n * const vectorStoreTableArgs: VectorStoreTableArgs = {\n * metadataColumns: [new Column(\"baz\", \"TEXT\")],\n * };\n * // Create a vector store table\n * await engine.initVectorstoreTable(\"my-table\", 768, vectorStoreTableArgs);\n * // Customize the vector store\n * const pvectorArgs: PostgresVectorStoreArgs = {\n * idColumn: \"ID_COLUMN\",\n * contentColumn: \"CONTENT_COLUMN\",\n * embeddingColumn: \"EMBEDDING_COLUMN\",\n * metadataColumns: [\"baz\"]\n * }\n *\n * const vectorStore = await PostgresVectorStore.initialize(engine, embeddingService, \"my-table\", pvectorArgs);\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 * const ids = [\"1\", \"2\", \"3\"];\n * await vectorStore.addDocuments(documents, { ids });\n * ```\n * </details>\n *\n * <br />\n *\n * <details>\n * <summary><strong>Delete documents</strong></summary>\n *\n * ```typescript\n * await vectorStore.delete({ ids: [\"3\"] });\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 declare class PostgresVectorStore extends VectorStore {\n FilterType: string;\n engine: PostgresEngine;\n embeddings: EmbeddingsInterface;\n tableName: string;\n schemaName: string;\n contentColumn: string;\n embeddingColumn: string;\n metadataColumns: Array<string>;\n idColumn: string;\n metadataJsonColumn: string;\n distanceStrategy: DistanceStrategy;\n k: number;\n fetchK: number;\n lambdaMult: number;\n indexQueryOptions: QueryOptions | undefined;\n /**\n * Initializes a new vector store with embeddings and database configuration.\n *\n * @param embeddings - Instance of `EmbeddingsInterface` used to embed queries.\n * @param dbConfig - Configuration settings for the database or storage system.\n */\n constructor(embeddings: EmbeddingsInterface, dbConfig: VSArgs);\n /**\n * Create a new PostgresVectorStore instance.\n * @param {PostgresEngine} engine Required - Connection pool engine for managing connections to Cloud SQL for PostgreSQL database.\n * @param {Embeddings} embeddings Required - Text embedding model to use.\n * @param {string} tableName Required - Name of an existing table or table to be created.\n * @param {string} schemaName Database schema name of the table. Defaults to \"public\".\n * @param {string} contentColumn Column that represent a Document's page_content. Defaults to \"content\".\n * @param {string} embeddingColumn Column for embedding vectors. The embedding is generated from the document value. Defaults to \"embedding\".\n * @param {Array<string>} metadataColumns Column(s) that represent a document's metadata.\n * @param {Array<string>} ignoreMetadataColumns Optional - Column(s) to ignore in pre-existing tables for a document's metadata. Can not be used with metadata_columns.\n * @param {string} idColumn Column that represents the Document's id. Defaults to \"langchain_id\".\n * @param {string} metadataJsonColumn Optional - Column to store metadata as JSON. Defaults to \"langchain_metadata\".\n * @param {DistanceStrategy} distanceStrategy Distance strategy to use for vector similarity search. Defaults to COSINE_DISTANCE.\n * @param {number} k Number of Documents to return from search. Defaults to 4.\n * @param {number} fetchK Number of Documents to fetch to pass to MMR algorithm.\n * @param {number} lambdaMult Number between 0 and 1 that determines the degree of diversity among the results with 0 corresponding to maximum diversity and 1 to minimum diversity. Defaults to 0.5.\n * @param {QueryOptions} indexQueryOptions Optional - Index query option.\n * @returns PostgresVectorStore instance.\n */\n static initialize(engine: PostgresEngine, embeddings: EmbeddingsInterface, tableName: string, { schemaName, contentColumn, embeddingColumn, metadataColumns, ignoreMetadataColumns, idColumn, metadataJsonColumn, distanceStrategy, k, fetchK, lambdaMult, indexQueryOptions }?: PostgresVectorStoreArgs): Promise<PostgresVectorStore>;\n static fromTexts(texts: string[], metadatas: object[] | object, embeddings: EmbeddingsInterface, dbConfig: dbConfigArgs): Promise<VectorStore>;\n static fromDocuments(docs: Document[], embeddings: EmbeddingsInterface, dbConfig: dbConfigArgs): Promise<VectorStore>;\n addVectors(vectors: number[][], documents: Document[], options?: {\n ids?: string[];\n }): Promise<string[] | void>;\n _vectorstoreType(): string;\n /**\n * Adds documents to the vector store, embedding them first through the\n * `embeddings` instance.\n *\n * @param documents - Array of documents to embed and add.\n * @param options - Optional configuration for embedding and storing documents.\n * @returns A promise resolving to an array of document IDs or void, based on implementation.\n * @abstract\n */\n addDocuments(documents: Document[], options?: {\n ids?: string[];\n }): Promise<string[] | void>;\n /**\n * Deletes documents from the vector store based on the specified ids.\n *\n * @param params - Flexible key-value pairs defining conditions for document deletion.\n * @param ids - Optional: Property of {params} that contains the array of ids to be deleted\n * @returns A promise that resolves once the deletion is complete.\n */\n delete(params: {\n ids?: string[];\n }): Promise<void>;\n similaritySearchVectorWithScore(embedding: number[], k: number, filter?: this[\"FilterType\"]): Promise<[Document, number][]>;\n private queryCollection;\n maxMarginalRelevanceSearch(query: string, options: MaxMarginalRelevanceSearchOptions<this[\"FilterType\"]>): Promise<Document[]>;\n /**\n * Create an index on the vector store table\n * @param {BaseIndex} index\n * @param {string} name Optional\n * @param {boolean} concurrently Optional\n */\n applyVectorIndex(index: BaseIndex, name?: string, concurrently?: boolean): Promise<void>;\n /**\n * Check if index exists in the table.\n * @param {string} indexName Optional - index name\n */\n isValidIndex(indexName?: string): Promise<boolean>;\n /**\n * Drop the vector index\n * @param {string} indexName Optional - index name\n */\n dropVectorIndex(indexName?: string): Promise<void>;\n /**\n * Re-index the vector store table\n * @param {string} indexName Optional - index name\n */\n reIndex(indexName?: string): Promise<void>;\n}\nexport default PostgresVectorStore;\n//# sourceMappingURL=vectorstore.d.ts.map"],"mappings":";;;;;;;UAKiBQ,uBAAAA;;EAAAA,aAAAA,CAAAA,EAAAA,MAAAA;EAIKC,eAAAA,CAAAA,EAAAA,MAAAA;EAECJ,eAAAA,CAAAA,EAFDI,KAECJ,CAAAA,MAAAA,CAAAA;EAIKI,QAAAA,CAAAA,EAAAA,MAAAA;EAEJH,gBAAAA,CAAAA,EANDD,gBAMCC;EAAY,CAAA,CAAA,EAAA,MAAA;EAEnBI,MAAAA,CAAAA,EAAAA,MAAY;EAKnBC,UAAM,CAAA,EAAA,MAAA;EACJJ,qBAAAA,CAAAA,EAVgBE,KAUhBF,CAAAA,MAAAA,CAAAA;EAKSE,kBAAAA,CAAAA,EAAAA,MAAAA;EAECJ,iBAAAA,CAAAA,EAfEC,YAeFD;;AAKc,UAlBnBK,YAAAA,CAkBmB;EAoJfE,MAAAA,EArKTL,cAqK4B;EAE5BA,SAAAA,EAAAA,MAAAA;EACIP,QAAAA,CAAAA,EAtKDQ,uBAsKCR;;UApKNW,MAAAA,CA4KYN;EAICC,MAAAA,EA/KXC,cA+KWD;EAOKN,SAAAA,EAAAA,MAAAA;EAA+BW,UAAAA,EAAAA,MAAAA;EAoB7BJ,aAAAA,EAAAA,MAAAA;EAA4BP,eAAAA,EAAAA,MAAAA;EAA0Ca,eAAAA,EArM/EJ,KAqM+EI,CAAAA,MAAAA,CAAAA;EAAYC,QAAAA,EAAAA,MAAAA;EAAeC,gBAAAA,EAnMzGV,gBAmMyGU;EAAiBC,CAAAA,EAAAA,MAAAA;EAAiBC,MAAAA,EAAAA,MAAAA;EAAuBC,UAAAA,EAAAA,MAAAA;EAAUC,kBAAAA,EAAAA,MAAAA;EAAoBC,iBAAAA,CAAAA,EA9L9Ld,YA8L8Lc;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AA1C1J;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;cAAvCR,mBAAAA,SAA4BV,WAAAA;;UAErCK;cACIP;;;;;mBAKKS;;;oBAGCJ;;;;qBAICC;;;;;;;0BAOKN,+BAA+BW;;;;;;;;;;;;;;;;;;;;4BAoB7BJ,4BAA4BP;;;;;;;;;;;;;MAA2NQ,0BAA0BiB,QAAQb;8EACvOZ,+BAA+BU,eAAee,QAAQvB;6BACvGC,wBAAwBH,+BAA+BU,eAAee,QAAQvB;6CAC9DC;;MAEvCsB;;;;;;;;;;;0BAWoBtB;;MAEpBsB;;;;;;;;;;MAUAA;gGAC0FA,SAAStB;;qDAEpDF,wDAAwDwB,QAAQtB;;;;;;;0BAO3FC,mDAAmDqB;;;;;oCAKzCA;;;;;uCAKGA;;;;;+BAKRA"}
1
+ {"version":3,"file":"vectorstore.d.cts","names":[],"sources":["../src/vectorstore.ts"],"mappings":";;;;;;;UAkBiB,uBAAA;EACf,UAAA;EACA,aAAA;EACA,eAAA;EACA,eAAA,GAAkB,KAAA;EAClB,QAAA;EACA,gBAAA,GAAmB,gBAAA;EACnB,CAAA;EACA,MAAA;EACA,UAAA;EACA,qBAAA,GAAwB,KAAA;EACxB,kBAAA;EACA,iBAAA,GAAoB,YAAA;AAAA;AAAA,UAGL,YAAA;EACf,MAAA,EAAQ,cAAA;EACR,SAAA;EACA,QAAA,GAAW,uBAAA;AAAA;AAAA,UAGH,MAAA;EACR,MAAA,EAAQ,cAAA;EACR,SAAA;EACA,UAAA;EACA,aAAA;EACA,eAAA;EACA,eAAA,EAAiB,KAAA;EACjB,QAAA;EACA,gBAAA,EAAkB,gBAAA;EAClB,CAAA;EACA,MAAA;EACA,UAAA;EACA,kBAAA;EACA,iBAAA,GAAoB,YAAA;AAAA;;;;;;;AAfrB;;;;;;;;;;;;;;;;;;;;;;;;;;;;AAoKD;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;cAAa,mBAAA,SAA4B,WAAA;EAC/B,UAAA,EAAY,MAAA;EAEpB,MAAA,EAAQ,cAAA;EAER,UAAA,EAAY,mBAAA;EAEZ,SAAA;EAEA,UAAA;EAEA,aAAA;EAEA,eAAA;EAEA,eAAA,EAAiB,KAAA;EAEjB,QAAA;EAEA,kBAAA;EAEA,gBAAA,EAAkB,gBAAA;EAElB,CAAA;EAEA,MAAA;EAEA,UAAA;EAEA,iBAAA,EAAmB,YAAA;EAsLjB;;;;;;EA9KF,WAAA,CAAY,UAAA,EAAY,mBAAA,EAAqB,QAAA,EAAU,MAAA;EAkM1C;;;;;;;;;;;;;;;;;;;EAAA,OA3JA,UAAA,CACX,MAAA,EAAQ,cAAA,EACR,UAAA,EAAY,mBAAA,EACZ,SAAA;IAEE,UAAA;IACA,aAAA;IACA,eAAA;IACA,eAAA;IACA,qBAAA;IACA,QAAA;IACA,kBAAA;IACA,gBAAA;IACA,CAAA;IACA,MAAA;IACA,UAAA;IACA;EAAA,IACC,uBAAA,GACF,OAAA,CAAQ,mBAAA;EAAA,OAgGE,SAAA,CACX,KAAA,YACA,SAAA,qBACA,UAAA,EAAY,mBAAA,EACZ,QAAA,EAAU,YAAA,GACT,OAAA,CAAQ,WAAA;EAAA,OAcE,aAAA,CACX,IAAA,EAAM,QAAA,IACN,UAAA,EAAY,mBAAA,EACZ,QAAA,EAAU,YAAA,GACT,OAAA,CAAQ,WAAA;EAgBL,UAAA,CACJ,OAAA,cACA,SAAA,EAAW,QAAA,IACX,OAAA;IAAY,GAAA;EAAA,IACX,OAAA;EA6EH,gBAAA,CAAA;EAgHE;;;;;;;;;EAnGI,YAAA,CACJ,SAAA,EAAW,QAAA,IACX,OAAA;IAAY,GAAA;EAAA,IACX,OAAA;EAyMG;;;;;;;EArLA,MAAA,CAAO,MAAA;IAAU,GAAA;EAAA,IAAmB,OAAA;EAOpC,+BAAA,CACJ,SAAA,YACA,CAAA,UACA,MAAA,wBACC,OAAA,EAAS,QAAA;EAAA,QAuBE,eAAA;EAwCR,0BAAA,CACJ,KAAA,UACA,OAAA,EAAS,iCAAA,uBACR,OAAA,CAAQ,QAAA;;;;;;;EAmDL,gBAAA,CACJ,KAAA,EAAO,SAAA,EACP,IAAA,WACA,YAAA,aACC,OAAA;;;;;EAmCG,YAAA,CAAa,SAAA,YAAqB,OAAA;;;;;EAclC,eAAA,CAAgB,SAAA,YAAqB,OAAA;;;;;EAUrC,OAAA,CAAQ,SAAA,YAAkB,OAAA;AAAA"}
@@ -142,7 +142,7 @@ interface VSArgs {
142
142
  * <summary><strong>Similarity search with filter</strong></summary>
143
143
  *
144
144
  * ```typescript
145
- * const resultsWithFilter = await vectorStore.similaritySearch("thud", 1, "baz = 'bar'");
145
+ * const resultsWithFilter = await vectorStore.similaritySearch("thud", 1, { baz: "bar" });
146
146
  *
147
147
  * for (const doc of resultsWithFilter) {
148
148
  * console.log(`* ${doc.pageContent} [${JSON.stringify(doc.metadata, null)}]`);
@@ -186,7 +186,7 @@ interface VSArgs {
186
186
  * <br />
187
187
  */
188
188
  declare class PostgresVectorStore extends VectorStore {
189
- FilterType: string;
189
+ FilterType: Record<string, string>;
190
190
  engine: PostgresEngine;
191
191
  embeddings: EmbeddingsInterface;
192
192
  tableName: string;
@@ -1 +1 @@
1
- {"version":3,"file":"vectorstore.d.ts","names":["EmbeddingsInterface","MaxMarginalRelevanceSearchOptions","VectorStore","Document","BaseIndex","DistanceStrategy","QueryOptions","PostgresEngine","PostgresVectorStoreArgs","Array","dbConfigArgs","VSArgs","PostgresVectorStore","schemaName","contentColumn","embeddingColumn","metadataColumns","ignoreMetadataColumns","idColumn","metadataJsonColumn","distanceStrategy","k","fetchK","lambdaMult","indexQueryOptions","Promise","default"],"sources":["../src/vectorstore.d.ts"],"sourcesContent":["import { EmbeddingsInterface } from \"@langchain/core/embeddings\";\nimport { MaxMarginalRelevanceSearchOptions, VectorStore } from \"@langchain/core/vectorstores\";\nimport { Document } from \"@langchain/core/documents\";\nimport { BaseIndex, DistanceStrategy, QueryOptions } from \"./indexes.js\";\nimport PostgresEngine from \"./engine.js\";\nexport interface PostgresVectorStoreArgs {\n schemaName?: string;\n contentColumn?: string;\n embeddingColumn?: string;\n metadataColumns?: Array<string>;\n idColumn?: string;\n distanceStrategy?: DistanceStrategy;\n k?: number;\n fetchK?: number;\n lambdaMult?: number;\n ignoreMetadataColumns?: Array<string>;\n metadataJsonColumn?: string;\n indexQueryOptions?: QueryOptions;\n}\nexport interface dbConfigArgs {\n engine: PostgresEngine;\n tableName: string;\n dbConfig?: PostgresVectorStoreArgs;\n}\ninterface VSArgs {\n engine: PostgresEngine;\n tableName: string;\n schemaName: string;\n contentColumn: string;\n embeddingColumn: string;\n metadataColumns: Array<string>;\n idColumn: string;\n distanceStrategy: DistanceStrategy;\n k: number;\n fetchK: number;\n lambdaMult: number;\n metadataJsonColumn: string;\n indexQueryOptions?: QueryOptions;\n}\n/**\n * Google Cloud SQL for PostgreSQL vector store integration.\n *\n * Setup:\n * Install `@langchain/google-cloud-sql-pg`\n *\n * ```bash\n * npm install @langchain/google-cloud-sql-pg\n * ```\n *\n * <details open>\n * <summary><strong>Instantiate</strong></summary>\n *\n * ```typescript\n * import { Column, PostgresEngine, PostgresEngineArgs, PostgresVectorStore, VectorStoreTableArgs } from \"@langchain/google-cloud-sql-pg\";\n * // Or other embeddings\n * import { OpenAIEmbeddings } from '@langchain/openai';\n *\n *\n * const embeddings = new OpenAIEmbeddings({\n * model: \"text-embedding-3-small\",\n * });\n *\n * const pgArgs: PostgresEngineArgs = {\n * user: \"db-user\",\n * password: \"password\"\n * }\n * // Create a shared connection pool\n * const engine: PostgresEngine = await PostgresEngine.fromInstance(\n * \"project-id\",\n * \"region\",\n * \"instance-name\",\n * \"database-name\",\n * pgArgs\n * );\n * // (Optional) Specify metadata columns for filtering\n * // All other metadata will be added to JSON\n * const vectorStoreTableArgs: VectorStoreTableArgs = {\n * metadataColumns: [new Column(\"baz\", \"TEXT\")],\n * };\n * // Create a vector store table\n * await engine.initVectorstoreTable(\"my-table\", 768, vectorStoreTableArgs);\n * // Customize the vector store\n * const pvectorArgs: PostgresVectorStoreArgs = {\n * idColumn: \"ID_COLUMN\",\n * contentColumn: \"CONTENT_COLUMN\",\n * embeddingColumn: \"EMBEDDING_COLUMN\",\n * metadataColumns: [\"baz\"]\n * }\n *\n * const vectorStore = await PostgresVectorStore.initialize(engine, embeddingService, \"my-table\", pvectorArgs);\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 * const ids = [\"1\", \"2\", \"3\"];\n * await vectorStore.addDocuments(documents, { ids });\n * ```\n * </details>\n *\n * <br />\n *\n * <details>\n * <summary><strong>Delete documents</strong></summary>\n *\n * ```typescript\n * await vectorStore.delete({ ids: [\"3\"] });\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 declare class PostgresVectorStore extends VectorStore {\n FilterType: string;\n engine: PostgresEngine;\n embeddings: EmbeddingsInterface;\n tableName: string;\n schemaName: string;\n contentColumn: string;\n embeddingColumn: string;\n metadataColumns: Array<string>;\n idColumn: string;\n metadataJsonColumn: string;\n distanceStrategy: DistanceStrategy;\n k: number;\n fetchK: number;\n lambdaMult: number;\n indexQueryOptions: QueryOptions | undefined;\n /**\n * Initializes a new vector store with embeddings and database configuration.\n *\n * @param embeddings - Instance of `EmbeddingsInterface` used to embed queries.\n * @param dbConfig - Configuration settings for the database or storage system.\n */\n constructor(embeddings: EmbeddingsInterface, dbConfig: VSArgs);\n /**\n * Create a new PostgresVectorStore instance.\n * @param {PostgresEngine} engine Required - Connection pool engine for managing connections to Cloud SQL for PostgreSQL database.\n * @param {Embeddings} embeddings Required - Text embedding model to use.\n * @param {string} tableName Required - Name of an existing table or table to be created.\n * @param {string} schemaName Database schema name of the table. Defaults to \"public\".\n * @param {string} contentColumn Column that represent a Document's page_content. Defaults to \"content\".\n * @param {string} embeddingColumn Column for embedding vectors. The embedding is generated from the document value. Defaults to \"embedding\".\n * @param {Array<string>} metadataColumns Column(s) that represent a document's metadata.\n * @param {Array<string>} ignoreMetadataColumns Optional - Column(s) to ignore in pre-existing tables for a document's metadata. Can not be used with metadata_columns.\n * @param {string} idColumn Column that represents the Document's id. Defaults to \"langchain_id\".\n * @param {string} metadataJsonColumn Optional - Column to store metadata as JSON. Defaults to \"langchain_metadata\".\n * @param {DistanceStrategy} distanceStrategy Distance strategy to use for vector similarity search. Defaults to COSINE_DISTANCE.\n * @param {number} k Number of Documents to return from search. Defaults to 4.\n * @param {number} fetchK Number of Documents to fetch to pass to MMR algorithm.\n * @param {number} lambdaMult Number between 0 and 1 that determines the degree of diversity among the results with 0 corresponding to maximum diversity and 1 to minimum diversity. Defaults to 0.5.\n * @param {QueryOptions} indexQueryOptions Optional - Index query option.\n * @returns PostgresVectorStore instance.\n */\n static initialize(engine: PostgresEngine, embeddings: EmbeddingsInterface, tableName: string, { schemaName, contentColumn, embeddingColumn, metadataColumns, ignoreMetadataColumns, idColumn, metadataJsonColumn, distanceStrategy, k, fetchK, lambdaMult, indexQueryOptions }?: PostgresVectorStoreArgs): Promise<PostgresVectorStore>;\n static fromTexts(texts: string[], metadatas: object[] | object, embeddings: EmbeddingsInterface, dbConfig: dbConfigArgs): Promise<VectorStore>;\n static fromDocuments(docs: Document[], embeddings: EmbeddingsInterface, dbConfig: dbConfigArgs): Promise<VectorStore>;\n addVectors(vectors: number[][], documents: Document[], options?: {\n ids?: string[];\n }): Promise<string[] | void>;\n _vectorstoreType(): string;\n /**\n * Adds documents to the vector store, embedding them first through the\n * `embeddings` instance.\n *\n * @param documents - Array of documents to embed and add.\n * @param options - Optional configuration for embedding and storing documents.\n * @returns A promise resolving to an array of document IDs or void, based on implementation.\n * @abstract\n */\n addDocuments(documents: Document[], options?: {\n ids?: string[];\n }): Promise<string[] | void>;\n /**\n * Deletes documents from the vector store based on the specified ids.\n *\n * @param params - Flexible key-value pairs defining conditions for document deletion.\n * @param ids - Optional: Property of {params} that contains the array of ids to be deleted\n * @returns A promise that resolves once the deletion is complete.\n */\n delete(params: {\n ids?: string[];\n }): Promise<void>;\n similaritySearchVectorWithScore(embedding: number[], k: number, filter?: this[\"FilterType\"]): Promise<[Document, number][]>;\n private queryCollection;\n maxMarginalRelevanceSearch(query: string, options: MaxMarginalRelevanceSearchOptions<this[\"FilterType\"]>): Promise<Document[]>;\n /**\n * Create an index on the vector store table\n * @param {BaseIndex} index\n * @param {string} name Optional\n * @param {boolean} concurrently Optional\n */\n applyVectorIndex(index: BaseIndex, name?: string, concurrently?: boolean): Promise<void>;\n /**\n * Check if index exists in the table.\n * @param {string} indexName Optional - index name\n */\n isValidIndex(indexName?: string): Promise<boolean>;\n /**\n * Drop the vector index\n * @param {string} indexName Optional - index name\n */\n dropVectorIndex(indexName?: string): Promise<void>;\n /**\n * Re-index the vector store table\n * @param {string} indexName Optional - index name\n */\n reIndex(indexName?: string): Promise<void>;\n}\nexport default PostgresVectorStore;\n//# sourceMappingURL=vectorstore.d.ts.map"],"mappings":";;;;;;;UAKiBQ,uBAAAA;;EAAAA,aAAAA,CAAAA,EAAAA,MAAAA;EAIKC,eAAAA,CAAAA,EAAAA,MAAAA;EAECJ,eAAAA,CAAAA,EAFDI,KAECJ,CAAAA,MAAAA,CAAAA;EAIKI,QAAAA,CAAAA,EAAAA,MAAAA;EAEJH,gBAAAA,CAAAA,EANDD,gBAMCC;EAAY,CAAA,CAAA,EAAA,MAAA;EAEnBI,MAAAA,CAAAA,EAAAA,MAAY;EAKnBC,UAAM,CAAA,EAAA,MAAA;EACJJ,qBAAAA,CAAAA,EAVgBE,KAUhBF,CAAAA,MAAAA,CAAAA;EAKSE,kBAAAA,CAAAA,EAAAA,MAAAA;EAECJ,iBAAAA,CAAAA,EAfEC,YAeFD;;AAKc,UAlBnBK,YAAAA,CAkBmB;EAoJfE,MAAAA,EArKTL,cAqK4B;EAE5BA,SAAAA,EAAAA,MAAAA;EACIP,QAAAA,CAAAA,EAtKDQ,uBAsKCR;;UApKNW,MAAAA,CA4KYN;EAICC,MAAAA,EA/KXC,cA+KWD;EAOKN,SAAAA,EAAAA,MAAAA;EAA+BW,UAAAA,EAAAA,MAAAA;EAoB7BJ,aAAAA,EAAAA,MAAAA;EAA4BP,eAAAA,EAAAA,MAAAA;EAA0Ca,eAAAA,EArM/EJ,KAqM+EI,CAAAA,MAAAA,CAAAA;EAAYC,QAAAA,EAAAA,MAAAA;EAAeC,gBAAAA,EAnMzGV,gBAmMyGU;EAAiBC,CAAAA,EAAAA,MAAAA;EAAiBC,MAAAA,EAAAA,MAAAA;EAAuBC,UAAAA,EAAAA,MAAAA;EAAUC,kBAAAA,EAAAA,MAAAA;EAAoBC,iBAAAA,CAAAA,EA9L9Ld,YA8L8Lc;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AA1C1J;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;cAAvCR,mBAAAA,SAA4BV,WAAAA;;UAErCK;cACIP;;;;;mBAKKS;;;oBAGCJ;;;;qBAICC;;;;;;;0BAOKN,+BAA+BW;;;;;;;;;;;;;;;;;;;;4BAoB7BJ,4BAA4BP;;;;;;;;;;;;;MAA2NQ,0BAA0BiB,QAAQb;8EACvOZ,+BAA+BU,eAAee,QAAQvB;6BACvGC,wBAAwBH,+BAA+BU,eAAee,QAAQvB;6CAC9DC;;MAEvCsB;;;;;;;;;;;0BAWoBtB;;MAEpBsB;;;;;;;;;;MAUAA;gGAC0FA,SAAStB;;qDAEpDF,wDAAwDwB,QAAQtB;;;;;;;0BAO3FC,mDAAmDqB;;;;;oCAKzCA;;;;;uCAKGA;;;;;+BAKRA"}
1
+ {"version":3,"file":"vectorstore.d.ts","names":[],"sources":["../src/vectorstore.ts"],"mappings":";;;;;;;UAkBiB,uBAAA;EACf,UAAA;EACA,aAAA;EACA,eAAA;EACA,eAAA,GAAkB,KAAA;EAClB,QAAA;EACA,gBAAA,GAAmB,gBAAA;EACnB,CAAA;EACA,MAAA;EACA,UAAA;EACA,qBAAA,GAAwB,KAAA;EACxB,kBAAA;EACA,iBAAA,GAAoB,YAAA;AAAA;AAAA,UAGL,YAAA;EACf,MAAA,EAAQ,cAAA;EACR,SAAA;EACA,QAAA,GAAW,uBAAA;AAAA;AAAA,UAGH,MAAA;EACR,MAAA,EAAQ,cAAA;EACR,SAAA;EACA,UAAA;EACA,aAAA;EACA,eAAA;EACA,eAAA,EAAiB,KAAA;EACjB,QAAA;EACA,gBAAA,EAAkB,gBAAA;EAClB,CAAA;EACA,MAAA;EACA,UAAA;EACA,kBAAA;EACA,iBAAA,GAAoB,YAAA;AAAA;;;;;;;AAfrB;;;;;;;;;;;;;;;;;;;;;;;;;;;;AAoKD;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;cAAa,mBAAA,SAA4B,WAAA;EAC/B,UAAA,EAAY,MAAA;EAEpB,MAAA,EAAQ,cAAA;EAER,UAAA,EAAY,mBAAA;EAEZ,SAAA;EAEA,UAAA;EAEA,aAAA;EAEA,eAAA;EAEA,eAAA,EAAiB,KAAA;EAEjB,QAAA;EAEA,kBAAA;EAEA,gBAAA,EAAkB,gBAAA;EAElB,CAAA;EAEA,MAAA;EAEA,UAAA;EAEA,iBAAA,EAAmB,YAAA;EAsLjB;;;;;;EA9KF,WAAA,CAAY,UAAA,EAAY,mBAAA,EAAqB,QAAA,EAAU,MAAA;EAkM1C;;;;;;;;;;;;;;;;;;;EAAA,OA3JA,UAAA,CACX,MAAA,EAAQ,cAAA,EACR,UAAA,EAAY,mBAAA,EACZ,SAAA;IAEE,UAAA;IACA,aAAA;IACA,eAAA;IACA,eAAA;IACA,qBAAA;IACA,QAAA;IACA,kBAAA;IACA,gBAAA;IACA,CAAA;IACA,MAAA;IACA,UAAA;IACA;EAAA,IACC,uBAAA,GACF,OAAA,CAAQ,mBAAA;EAAA,OAgGE,SAAA,CACX,KAAA,YACA,SAAA,qBACA,UAAA,EAAY,mBAAA,EACZ,QAAA,EAAU,YAAA,GACT,OAAA,CAAQ,WAAA;EAAA,OAcE,aAAA,CACX,IAAA,EAAM,QAAA,IACN,UAAA,EAAY,mBAAA,EACZ,QAAA,EAAU,YAAA,GACT,OAAA,CAAQ,WAAA;EAgBL,UAAA,CACJ,OAAA,cACA,SAAA,EAAW,QAAA,IACX,OAAA;IAAY,GAAA;EAAA,IACX,OAAA;EA6EH,gBAAA,CAAA;EAgHE;;;;;;;;;EAnGI,YAAA,CACJ,SAAA,EAAW,QAAA,IACX,OAAA;IAAY,GAAA;EAAA,IACX,OAAA;EAyMG;;;;;;;EArLA,MAAA,CAAO,MAAA;IAAU,GAAA;EAAA,IAAmB,OAAA;EAOpC,+BAAA,CACJ,SAAA,YACA,CAAA,UACA,MAAA,wBACC,OAAA,EAAS,QAAA;EAAA,QAuBE,eAAA;EAwCR,0BAAA,CACJ,KAAA,UACA,OAAA,EAAS,iCAAA,uBACR,OAAA,CAAQ,QAAA;;;;;;;EAmDL,gBAAA,CACJ,KAAA,EAAO,SAAA,EACP,IAAA,WACA,YAAA,aACC,OAAA;;;;;EAmCG,YAAA,CAAa,SAAA,YAAqB,OAAA;;;;;EAclC,eAAA,CAAgB,SAAA,YAAqB,OAAA;;;;;EAUrC,OAAA,CAAQ,SAAA,YAAkB,OAAA;AAAA"}
@@ -2,9 +2,8 @@ import { customZip } from "./utils/utils.js";
2
2
  import { DEFAULT_DISTANCE_STRATEGY, DEFAULT_INDEX_NAME_SUFFIX } from "./indexes.js";
3
3
  import { VectorStore } from "@langchain/core/vectorstores";
4
4
  import { Document } from "@langchain/core/documents";
5
- import { v4 } from "uuid";
5
+ import { v4 } from "@langchain/core/utils/uuid";
6
6
  import { maximalMarginalRelevance } from "@langchain/core/utils/math";
7
-
8
7
  //#region src/vectorstore.ts
9
8
  /**
10
9
  * Google Cloud SQL for PostgreSQL vector store integration.
@@ -109,7 +108,7 @@ import { maximalMarginalRelevance } from "@langchain/core/utils/math";
109
108
  * <summary><strong>Similarity search with filter</strong></summary>
110
109
  *
111
110
  * ```typescript
112
- * const resultsWithFilter = await vectorStore.similaritySearch("thud", 1, "baz = 'bar'");
111
+ * const resultsWithFilter = await vectorStore.similaritySearch("thud", 1, { baz: "bar" });
113
112
  *
114
113
  * for (const doc of resultsWithFilter) {
115
114
  * console.log(`* ${doc.pageContent} [${JSON.stringify(doc.metadata, null)}]`);
@@ -324,8 +323,7 @@ var PostgresVectorStore = class PostgresVectorStore extends VectorStore {
324
323
  const texts = [];
325
324
  for (const doc of documents) texts.push(doc.pageContent);
326
325
  const embeddings = await this.embeddings.embedDocuments(texts);
327
- const results = await this.addVectors(embeddings, documents, options);
328
- return results;
326
+ return await this.addVectors(embeddings, documents, options);
329
327
  }
330
328
  /**
331
329
  * Deletes documents from the vector store based on the specified ids.
@@ -357,12 +355,19 @@ var PostgresVectorStore = class PostgresVectorStore extends VectorStore {
357
355
  const fetchK = k ?? this.k;
358
356
  const { operator } = this.distanceStrategy;
359
357
  const { searchFunction } = this.distanceStrategy;
360
- const _filter = filter !== void 0 ? `WHERE ${filter}` : "";
358
+ const filterColumns = filter !== void 0 ? Object.keys(filter) : [];
359
+ const filterBindings = {};
360
+ let _filter = "";
361
+ if (filterColumns.length > 0) _filter = `WHERE ${filterColumns.map((col, i) => {
362
+ const bindingKey = `filter_${i}`;
363
+ filterBindings[bindingKey] = filter[col];
364
+ return `"${col.replace(/"/g, "\"\"")}" = :${bindingKey}`;
365
+ }).join(" AND ")}`;
361
366
  const metadataColNames = this.metadataColumns.length > 0 ? `, "${this.metadataColumns.join("\",\"")}"` : "";
362
367
  const metadataJsonColName = this.metadataJsonColumn ? `, "${this.metadataJsonColumn}"` : "";
363
368
  const query = `SELECT "${this.idColumn}", "${this.contentColumn}", "${this.embeddingColumn}" ${metadataColNames} ${metadataJsonColName}, ${searchFunction}("${this.embeddingColumn}", '[${embedding}]') as distance FROM "${this.schemaName}"."${this.tableName}" ${_filter} ORDER BY "${this.embeddingColumn}" ${operator} '[${embedding}]' LIMIT ${fetchK};`;
364
369
  if (this.indexQueryOptions) await this.engine.pool.raw(`SET LOCAL ${this.indexQueryOptions.to_string()}`);
365
- const { rows } = await this.engine.pool.raw(query);
370
+ const { rows } = await this.engine.pool.raw(query, filterBindings);
366
371
  return rows;
367
372
  }
368
373
  async maxMarginalRelevanceSearch(query, options) {
@@ -371,8 +376,7 @@ var PostgresVectorStore = class PostgresVectorStore extends VectorStore {
371
376
  const k = options?.k ? options.k : this.k;
372
377
  const documentsWithScores = [];
373
378
  let docsList = [];
374
- const embeddingList = results.map((row) => JSON.parse(row[this.embeddingColumn]));
375
- const mmrSelected = maximalMarginalRelevance(vector, embeddingList, options?.lambda, k);
379
+ const mmrSelected = maximalMarginalRelevance(vector, results.map((row) => JSON.parse(row[this.embeddingColumn])), options?.lambda, k);
376
380
  for (const row of results) {
377
381
  const metadata = this.metadataJsonColumn && row[this.metadataJsonColumn] ? row[this.metadataJsonColumn] : {};
378
382
  for (const col of this.metadataColumns) metadata[col] = row[col];
@@ -409,7 +413,7 @@ var PostgresVectorStore = class PostgresVectorStore extends VectorStore {
409
413
  * @param {string} indexName Optional - index name
410
414
  */
411
415
  async isValidIndex(indexName) {
412
- const idxName = indexName || this.tableName + DEFAULT_INDEX_NAME_SUFFIX;
416
+ const idxName = indexName || this.tableName + "langchainvectorindex";
413
417
  const stmt = `SELECT tablename, indexname
414
418
  FROM pg_indexes
415
419
  WHERE tablename = '${this.tableName}' AND schemaname = '${this.schemaName}' AND indexname = '${idxName}';`;
@@ -421,8 +425,7 @@ var PostgresVectorStore = class PostgresVectorStore extends VectorStore {
421
425
  * @param {string} indexName Optional - index name
422
426
  */
423
427
  async dropVectorIndex(indexName) {
424
- const idxName = indexName || this.tableName + DEFAULT_INDEX_NAME_SUFFIX;
425
- const query = `DROP INDEX IF EXISTS ${idxName};`;
428
+ const query = `DROP INDEX IF EXISTS ${indexName || this.tableName + "langchainvectorindex"};`;
426
429
  await this.engine.pool.raw(query);
427
430
  }
428
431
  /**
@@ -430,12 +433,11 @@ var PostgresVectorStore = class PostgresVectorStore extends VectorStore {
430
433
  * @param {string} indexName Optional - index name
431
434
  */
432
435
  async reIndex(indexName) {
433
- const idxName = indexName || this.tableName + DEFAULT_INDEX_NAME_SUFFIX;
434
- const query = `REINDEX INDEX ${idxName};`;
436
+ const query = `REINDEX INDEX ${indexName || this.tableName + "langchainvectorindex"};`;
435
437
  await this.engine.pool.raw(query);
436
438
  }
437
439
  };
438
-
439
440
  //#endregion
440
- export { PostgresVectorStore };
441
+ export { PostgresVectorStore as default };
442
+
441
443
  //# sourceMappingURL=vectorstore.js.map