{"version":3,"file":"xata.cjs","names":["VectorStore","embeddings: EmbeddingsInterface","args: XataClientArgs<XataClient>","documents: Document[]","options?: { ids?: string[] }","vectors: number[][]","params: { ids: string[] }","query: number[]","k: number","filter?: XataFilter | undefined","record: any","Document"],"sources":["../../src/vectorstores/xata.ts"],"sourcesContent":["import { BaseClient } from \"@xata.io/client\";\nimport type { EmbeddingsInterface } from \"@langchain/core/embeddings\";\nimport { VectorStore } from \"@langchain/core/vectorstores\";\nimport { Document } from \"@langchain/core/documents\";\n\n/**\n * Interface for the arguments required to create a XataClient. Includes\n * the client instance and the table name.\n */\nexport interface XataClientArgs<XataClient> {\n  readonly client: XataClient;\n  readonly table: string;\n}\n\n/**\n * Type for the filter object used in Xata database queries.\n */\ntype XataFilter = object;\n\n/**\n * Class for interacting with a Xata database as a VectorStore. Provides\n * methods to add documents and vectors to the database, delete entries,\n * and perform similarity searches.\n */\nexport class XataVectorSearch<\n  XataClient extends BaseClient,\n> extends VectorStore {\n  declare FilterType: XataFilter;\n\n  private readonly client: XataClient;\n\n  private readonly table: string;\n\n  _vectorstoreType(): string {\n    return \"xata\";\n  }\n\n  constructor(\n    embeddings: EmbeddingsInterface,\n    args: XataClientArgs<XataClient>\n  ) {\n    super(embeddings, args);\n\n    this.client = args.client;\n    this.table = args.table;\n  }\n\n  /**\n   * Method to add documents to the Xata database. Maps the page content of\n   * each document, embeds the documents using the embeddings, and adds the\n   * vectors to the database.\n   * @param documents Array of documents to be added.\n   * @param options Optional object containing an array of ids.\n   * @returns Promise resolving to an array of ids of the added documents.\n   */\n  async addDocuments(documents: Document[], options?: { ids?: string[] }) {\n    const texts = documents.map(({ pageContent }) => pageContent);\n    return this.addVectors(\n      await this.embeddings.embedDocuments(texts),\n      documents,\n      options\n    );\n  }\n\n  /**\n   * Method to add vectors to the Xata database. Maps each vector to a row\n   * with the document's content, embedding, and metadata. Creates or\n   * replaces these rows in the Xata database.\n   * @param vectors Array of vectors to be added.\n   * @param documents Array of documents corresponding to the vectors.\n   * @param options Optional object containing an array of ids.\n   * @returns Promise resolving to an array of ids of the added vectors.\n   */\n  async addVectors(\n    vectors: number[][],\n    documents: Document[],\n    options?: { ids?: string[] }\n  ) {\n    const rows = vectors\n      .map((embedding, idx) => ({\n        content: documents[idx].pageContent,\n        embedding,\n        ...documents[idx].metadata,\n      }))\n      .map((row, idx) => {\n        if (options?.ids) {\n          return { id: options.ids[idx], ...row };\n        }\n        return row;\n      });\n\n    const res = await this.client.db[this.table].createOrReplace(rows);\n    // Since we have an untyped BaseClient, it doesn't know the\n    // actual return type of the overload.\n    const results = res as unknown as { id: string }[];\n    const returnedIds = results.map((row) => row.id);\n    return returnedIds;\n  }\n\n  /**\n   * Method to delete entries from the Xata database. Deletes the entries\n   * with the provided ids.\n   * @param params Object containing an array of ids of the entries to be deleted.\n   * @returns Promise resolving to void.\n   */\n  async delete(params: { ids: string[] }): Promise<void> {\n    const { ids } = params;\n    await this.client.db[this.table].delete(ids);\n  }\n\n  /**\n   * Method to perform a similarity search in the Xata database. Returns the\n   * k most similar documents along with their scores.\n   * @param query Query vector for the similarity search.\n   * @param k Number of most similar documents to return.\n   * @param filter Optional filter for the search.\n   * @returns Promise resolving to an array of tuples, each containing a Document and its score.\n   */\n  async similaritySearchVectorWithScore(\n    query: number[],\n    k: number,\n    filter?: XataFilter | undefined\n  ): Promise<[Document, number][]> {\n    const { records } = await this.client.db[this.table].vectorSearch(\n      \"embedding\",\n      query,\n      {\n        size: k,\n        filter,\n      }\n    );\n\n    return (\n      // eslint-disable-next-line @typescript-eslint/no-explicit-any\n      records?.map((record: any) => [\n        new Document({\n          pageContent: record.content,\n          metadata: Object.fromEntries(\n            Object.entries(record).filter(\n              ([key]) =>\n                key !== \"content\" &&\n                key !== \"embedding\" &&\n                key !== \"xata\" &&\n                key !== \"id\"\n            )\n          ),\n        }),\n        record.xata ? record.xata.score : record.xata_score,\n      ]) ?? []\n    );\n  }\n}\n"],"mappings":";;;;;;;;;;;;AAwBA,IAAa,mBAAb,cAEUA,0CAAY;CAGpB,AAAiB;CAEjB,AAAiB;CAEjB,mBAA2B;AACzB,SAAO;CACR;CAED,YACEC,YACAC,MACA;EACA,MAAM,YAAY,KAAK;EAEvB,KAAK,SAAS,KAAK;EACnB,KAAK,QAAQ,KAAK;CACnB;;;;;;;;;CAUD,MAAM,aAAaC,WAAuBC,SAA8B;EACtE,MAAM,QAAQ,UAAU,IAAI,CAAC,EAAE,aAAa,KAAK,YAAY;AAC7D,SAAO,KAAK,WACV,MAAM,KAAK,WAAW,eAAe,MAAM,EAC3C,WACA,QACD;CACF;;;;;;;;;;CAWD,MAAM,WACJC,SACAF,WACAC,SACA;EACA,MAAM,OAAO,QACV,IAAI,CAAC,WAAW,SAAS;GACxB,SAAS,UAAU,KAAK;GACxB;GACA,GAAG,UAAU,KAAK;EACnB,GAAE,CACF,IAAI,CAAC,KAAK,QAAQ;AACjB,OAAI,SAAS,IACX,QAAO;IAAE,IAAI,QAAQ,IAAI;IAAM,GAAG;GAAK;AAEzC,UAAO;EACR,EAAC;EAEJ,MAAM,MAAM,MAAM,KAAK,OAAO,GAAG,KAAK,OAAO,gBAAgB,KAAK;EAGlE,MAAM,UAAU;EAChB,MAAM,cAAc,QAAQ,IAAI,CAAC,QAAQ,IAAI,GAAG;AAChD,SAAO;CACR;;;;;;;CAQD,MAAM,OAAOE,QAA0C;EACrD,MAAM,EAAE,KAAK,GAAG;EAChB,MAAM,KAAK,OAAO,GAAG,KAAK,OAAO,OAAO,IAAI;CAC7C;;;;;;;;;CAUD,MAAM,gCACJC,OACAC,GACAC,QAC+B;EAC/B,MAAM,EAAE,SAAS,GAAG,MAAM,KAAK,OAAO,GAAG,KAAK,OAAO,aACnD,aACA,OACA;GACE,MAAM;GACN;EACD,EACF;AAED,SAEE,SAAS,IAAI,CAACC,WAAgB,CAC5B,IAAIC,oCAAS;GACX,aAAa,OAAO;GACpB,UAAU,OAAO,YACf,OAAO,QAAQ,OAAO,CAAC,OACrB,CAAC,CAAC,IAAI,KACJ,QAAQ,aACR,QAAQ,eACR,QAAQ,UACR,QAAQ,KACX,CACF;EACF,IACD,OAAO,OAAO,OAAO,KAAK,QAAQ,OAAO,UAC1C,EAAC,IAAI,CAAE;CAEX;AACF"}