UNPKG

@langchain/community

Version:
1 lines • 15.4 kB
{"version":3,"file":"zep_cloud.cjs","names":["results: DocumentSearchResult[]","Document","value: string | Record<string, unknown> | object | undefined","VectorStore","embeddings: EmbeddingsInterface","args: IZepCloudConfig","ZepClient","NotFoundError","documents: Document[]","docs: Array<CreateDocumentRequest>","doc: CreateDocumentRequest","params: IZepCloudDeleteParams","query: string","k: number","filter?: Record<string, unknown> | undefined","filter: Record<string, unknown> | undefined","filter: this[\"FilterType\"] | undefined","_callbacks: Callbacks | undefined","options: MaxMarginalRelevanceSearchOptions<this[\"FilterType\"]>","zepConfig: IZepCloudConfig","FakeEmbeddings","texts: string[]","metadatas: object[] | object","docs: Document[]"],"sources":["../../src/vectorstores/zep_cloud.ts"],"sourcesContent":["import { ZepClient } from \"@getzep/zep-cloud\";\nimport {\n CreateDocumentRequest,\n DocumentSearchResult,\n NotFoundError,\n} from \"@getzep/zep-cloud/api\";\nimport {\n MaxMarginalRelevanceSearchOptions,\n VectorStore,\n} from \"@langchain/core/vectorstores\";\nimport type { EmbeddingsInterface } from \"@langchain/core/embeddings\";\nimport { Document } from \"@langchain/core/documents\";\nimport { Callbacks } from \"@langchain/core/callbacks/manager\";\nimport { maximalMarginalRelevance } from \"@langchain/core/utils/math\";\nimport { FakeEmbeddings } from \"@langchain/core/utils/testing\";\n\nfunction zepDocsToDocumentsAndScore(\n results: DocumentSearchResult[]\n): [Document, number][] {\n return results.map((d) => [\n new Document({\n pageContent: d.content ?? \"\",\n metadata: d.metadata,\n }),\n d.score ? d.score : 0,\n ]);\n}\n\nfunction assignMetadata(\n value: string | Record<string, unknown> | object | undefined\n): Record<string, unknown> | undefined {\n if (typeof value === \"object\" && value !== null) {\n return value as Record<string, unknown>;\n }\n if (value !== undefined) {\n console.warn(\"Metadata filters must be an object, Record, or undefined.\");\n }\n return undefined;\n}\n\n/**\n * Interface for the configuration options for a ZepCloudVectorStore instance.\n */\nexport interface IZepCloudConfig {\n apiKey?: string;\n client?: ZepClient;\n collectionName: string;\n description?: string;\n metadata?: Record<string, never>;\n}\n\n/**\n * Interface for the parameters required to delete documents from a\n * ZepCloudVectorStore instance.\n */\nexport interface IZepCloudDeleteParams {\n uuids: string[];\n}\n\n/**\n * ZepCloudVectorStore is a VectorStore implementation\n * that uses the Zep long-term memory store as a backend.\n *\n * If the collection does not exist, it will be created automatically.\n *\n * Requires `@getzep/zep-cloud` to be installed:\n *\n *\n * @property {ZepClient} client - The ZepClient instance used to interact with Zep's API.\n * @property {Promise<void>} initPromise - A promise that resolves\n * when the collection is initialized.\n */\nexport class ZepCloudVectorStore extends VectorStore {\n public client: ZepClient;\n\n public collectionName: string;\n\n private readonly initPromise: Promise<void>;\n\n constructor(embeddings: EmbeddingsInterface, args: IZepCloudConfig) {\n super(embeddings, args);\n\n this.initPromise = this.initCollection(args).catch((err) => {\n console.error(\"Error initializing collection:\", err);\n throw err;\n });\n }\n\n /**\n * Initializes the document collection. If the collection does not exist, it creates a new one.\n *\n * @param {IZepConfig} args - The configuration object for the Zep API.\n */\n private async initCollection(args: IZepCloudConfig) {\n if (args.client) {\n this.client = args.client;\n } else {\n this.client = new ZepClient({\n apiKey: args.apiKey,\n });\n }\n try {\n this.collectionName = args.collectionName;\n await this.client.document.getCollection(this.collectionName);\n } catch (err) {\n // eslint-disable-next-line no-instanceof/no-instanceof\n if (err instanceof Error) {\n // eslint-disable-next-line no-instanceof/no-instanceof\n if (err instanceof NotFoundError || err.name === \"NotFoundError\") {\n await this.createCollection(args);\n } else {\n throw err;\n }\n }\n }\n }\n\n /**\n * Creates a new document collection.\n *\n * @param {IZepConfig} args - The configuration object for the Zep API.\n */\n private async createCollection(args: IZepCloudConfig) {\n await this.client.document.addCollection(args.collectionName, {\n description: args.description,\n metadata: args.metadata,\n });\n }\n\n async addVectors(): Promise<string[]> {\n throw new Error(\"Adding vectors is not supported in Zep Cloud.\");\n }\n\n /**\n * Adds documents to the collection. The documents are first embedded into vectors\n * using the provided embedding model.\n *\n * @param {Document[]} documents - The documents to add.\n * @returns {Promise<string[]>} - A promise that resolves with the UUIDs of the added documents.\n */\n async addDocuments(documents: Document[]): Promise<string[]> {\n const docs: Array<CreateDocumentRequest> = [];\n for (let i = 0; i < documents.length; i += 1) {\n const doc: CreateDocumentRequest = {\n content: documents[i].pageContent,\n metadata: documents[i].metadata,\n };\n docs.push(doc);\n }\n // Wait for collection to be initialized\n await this.initPromise;\n return this.client.document.addDocuments(this.collectionName, docs);\n }\n\n _vectorstoreType(): string {\n return \"zep\";\n }\n\n /**\n * Deletes documents from the collection.\n *\n * @param {IZepDeleteParams} params - The list of Zep document UUIDs to delete.\n * @returns {Promise<void>}\n */\n async delete(params: IZepCloudDeleteParams): Promise<void> {\n // Wait for collection to be initialized\n await this.initPromise;\n for await (const uuid of params.uuids) {\n await this.client.document.deleteDocument(this.collectionName, uuid);\n }\n }\n\n async similaritySearchVectorWithScore(): Promise<[Document, number][]> {\n throw new Error(\"Unsupported in Zep Cloud.\");\n }\n\n async _similaritySearchWithScore(\n query: string,\n k: number,\n filter?: Record<string, unknown> | undefined\n ): Promise<[Document, number][]> {\n await this.initPromise;\n const { results } = await this.client.document.search(this.collectionName, {\n text: query,\n metadata: assignMetadata(filter),\n limit: k,\n });\n return zepDocsToDocumentsAndScore(results!);\n }\n\n async similaritySearchWithScore(\n query: string,\n k = 4,\n filter: Record<string, unknown> | undefined = undefined,\n _callbacks = undefined // implement passing to embedQuery later\n ): Promise<[Document, number][]> {\n return this._similaritySearchWithScore(query, k, filter);\n }\n\n /**\n * Performs a similarity search on the Zep collection.\n *\n * @param {string} query - The query string to search for.\n * @param {number} [k=4] - The number of results to return. Defaults to 4.\n * @param {this[\"FilterType\"] | undefined} [filter=undefined] - An optional set of JSONPath filters to apply to the search.\n * @param {Callbacks | undefined} [_callbacks=undefined] - Optional callbacks. Currently not implemented.\n * @returns {Promise<Document[]>} - A promise that resolves to an array of Documents that are similar to the query.\n *\n * @async\n */\n async similaritySearch(\n query: string,\n k = 4,\n filter: this[\"FilterType\"] | undefined = undefined,\n _callbacks: Callbacks | undefined = undefined // implement passing to embedQuery later\n ): Promise<Document[]> {\n await this.initPromise;\n\n const { results: zepResults } = await this.client.document.search(\n this.collectionName,\n {\n text: query,\n metadata: assignMetadata(filter),\n limit: k,\n }\n );\n const results = zepDocsToDocumentsAndScore(zepResults!);\n\n return results.map((result) => result[0]);\n }\n\n /**\n * Return documents selected using the maximal marginal relevance.\n * Maximal marginal relevance optimizes for similarity to the query AND diversity\n * among selected documents.\n *\n * @param {string} query - Text to look up documents similar to.\n * @param options\n * @param {number} options.k - Number of documents to return.\n * @param {number} options.fetchK=20- Number of documents to fetch before passing to the MMR algorithm.\n * @param {number} options.lambda=0.5 - Number between 0 and 1 that determines the degree of diversity among the results,\n * where 0 corresponds to maximum diversity and 1 to minimum diversity.\n * @param {Record<string, any>} options.filter - Optional Zep JSONPath query to pre-filter on document metadata field\n *\n * @returns {Promise<Document[]>} - List of documents selected by maximal marginal relevance.\n */\n async maxMarginalRelevanceSearch(\n query: string,\n options: MaxMarginalRelevanceSearchOptions<this[\"FilterType\"]>\n ): Promise<Document[]> {\n const { k, fetchK = 20, lambda = 0.5, filter } = options;\n\n const r = await this.client.document.search(this.collectionName, {\n text: query,\n metadata: assignMetadata(filter),\n limit: fetchK,\n });\n\n const queryEmbedding = Array.from(r.queryVector!);\n\n const results = zepDocsToDocumentsAndScore(r.results!);\n\n const embeddingList = r.results!.map((doc) =>\n Array.from(doc.embedding ? doc.embedding : [])\n );\n\n const mmrIndexes = maximalMarginalRelevance(\n queryEmbedding,\n embeddingList,\n lambda,\n k\n );\n\n return mmrIndexes.filter((idx) => idx !== -1).map((idx) => results[idx][0]);\n }\n\n static async init(zepConfig: IZepCloudConfig) {\n const instance = new this(new FakeEmbeddings(), zepConfig);\n // Wait for collection to be initialized\n await instance.initPromise;\n return instance;\n }\n\n /**\n * Creates a new ZepVectorStore instance from an array of texts. Each text is converted into a Document and added to the collection.\n *\n * @param {string[]} texts - The texts to convert into Documents.\n * @param {object[] | object} metadatas - The metadata to associate with each Document.\n * If an array is provided, each element is associated with the corresponding Document.\n * If an object is provided, it is associated with all Documents.\n * @param {Embeddings} embeddings - Pass FakeEmbeddings, Zep Cloud will handle text embedding for you.\n * @param {IZepConfig} zepConfig - The configuration object for the Zep API.\n * @returns {Promise<ZepVectorStore>} - A promise that resolves with the new ZepVectorStore instance.\n */\n static async fromTexts(\n texts: string[],\n metadatas: object[] | object,\n embeddings: EmbeddingsInterface,\n zepConfig: IZepCloudConfig\n ): Promise<ZepCloudVectorStore> {\n const docs: Document[] = [];\n for (let i = 0; i < texts.length; i += 1) {\n const metadata = Array.isArray(metadatas) ? metadatas[i] : metadatas;\n const newDoc = new Document({\n pageContent: texts[i],\n metadata,\n });\n docs.push(newDoc);\n }\n return ZepCloudVectorStore.fromDocuments(docs, embeddings, zepConfig);\n }\n\n /**\n * Creates a new ZepVectorStore instance from an array of Documents. Each Document is added to a Zep collection.\n *\n * @param {Document[]} docs - The Documents to add.\n * @param {Embeddings} embeddings - Pass FakeEmbeddings, Zep Cloud will handle text embedding for you.\n * @param {IZepConfig} zepConfig - The configuration object for the Zep API.\n * @returns {Promise<ZepVectorStore>} - A promise that resolves with the new ZepVectorStore instance.\n */\n static async fromDocuments(\n docs: Document[],\n embeddings: EmbeddingsInterface,\n zepConfig: IZepCloudConfig\n ): Promise<ZepCloudVectorStore> {\n const instance = new this(embeddings, zepConfig);\n // Wait for collection to be initialized\n await instance.initPromise;\n await instance.addDocuments(docs);\n return instance;\n }\n}\n"],"mappings":"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"}