From a13911435f59cbff89dfd5250576f08ebed5a2ff Mon Sep 17 00:00:00 2001 From: Chris Maddox <tyre77@gmail.com> Date: Mon, 31 Jul 2023 19:15:50 +0200 Subject: [PATCH] make VectorStore function signatures unique, export VectorStore types to allow for extensions --- packages/core/src/index.ts | 1 + .../indices/vectorStore/VectorIndexRetriever.ts | 2 +- .../src/storage/vectorStore/SimpleVectorStore.ts | 15 ++++++++------- packages/core/src/storage/vectorStore/types.ts | 8 ++++---- 4 files changed, 14 insertions(+), 12 deletions(-) diff --git a/packages/core/src/index.ts b/packages/core/src/index.ts index 449439a06..46bbec603 100644 --- a/packages/core/src/index.ts +++ b/packages/core/src/index.ts @@ -27,3 +27,4 @@ export * from "./readers/SimpleDirectoryReader"; export * from "./storage/constants"; export * from "./storage/FileSystem"; export * from "./storage/StorageContext"; +export * from "./storage/vectorStore/types"; diff --git a/packages/core/src/indices/vectorStore/VectorIndexRetriever.ts b/packages/core/src/indices/vectorStore/VectorIndexRetriever.ts index eb5e57f23..920fe4982 100644 --- a/packages/core/src/indices/vectorStore/VectorIndexRetriever.ts +++ b/packages/core/src/indices/vectorStore/VectorIndexRetriever.ts @@ -41,7 +41,7 @@ export class VectorIndexRetriever implements BaseRetriever { mode: VectorStoreQueryMode.DEFAULT, similarityTopK: this.similarityTopK, }; - const result = this.index.vectorStore.query(q); + const result = await this.index.vectorStore.query(q); let nodesWithScores: NodeWithScore[] = []; for (let i = 0; i < result.ids.length; i++) { diff --git a/packages/core/src/storage/vectorStore/SimpleVectorStore.ts b/packages/core/src/storage/vectorStore/SimpleVectorStore.ts index 43d267d64..e7e62fe39 100644 --- a/packages/core/src/storage/vectorStore/SimpleVectorStore.ts +++ b/packages/core/src/storage/vectorStore/SimpleVectorStore.ts @@ -51,11 +51,11 @@ export class SimpleVectorStore implements VectorStore { return null; } - get(textId: string): number[] { + async get(textId: string): Promise<number[]> { return this.data.embeddingDict[textId]; } - add(embeddingResults: NodeWithEmbedding[]): string[] { + async add(embeddingResults: NodeWithEmbedding[]): Promise<string[]> { for (let result of embeddingResults) { this.data.embeddingDict[result.node.id_] = result.embedding; @@ -69,13 +69,13 @@ export class SimpleVectorStore implements VectorStore { } if (this.persistPath) { - this.persist(this.persistPath, this.fs); + await this.persist(this.persistPath, this.fs); } return embeddingResults.map((result) => result.node.id_); } - delete(refDocId: string): void { + async delete(refDocId: string): Promise<void> { let textIdsToDelete = Object.keys(this.data.textIdToRefDocId).filter( (textId) => this.data.textIdToRefDocId[textId] === refDocId ); @@ -83,9 +83,10 @@ export class SimpleVectorStore implements VectorStore { delete this.data.embeddingDict[textId]; delete this.data.textIdToRefDocId[textId]; } + return Promise.resolve(); } - query(query: VectorStoreQuery): VectorStoreQueryResult { + async query(query: VectorStoreQuery): Promise<VectorStoreQueryResult> { if (!_.isNil(query.filters)) { throw new Error( "Metadata filters not implemented for SimpleVectorStore yet." @@ -137,10 +138,10 @@ export class SimpleVectorStore implements VectorStore { throw new Error(`Invalid query mode: ${query.mode}`); } - return { + return Promise.resolve({ similarities: topSimilarities, ids: topIds, - }; + }); } async persist( diff --git a/packages/core/src/storage/vectorStore/types.ts b/packages/core/src/storage/vectorStore/types.ts index 884c54759..08ae45e33 100644 --- a/packages/core/src/storage/vectorStore/types.ts +++ b/packages/core/src/storage/vectorStore/types.ts @@ -61,8 +61,8 @@ export interface VectorStore { storesText: boolean; isEmbeddingQuery?: boolean; client(): any; - add(embeddingResults: NodeWithEmbedding[]): string[]; - delete(refDocId: string, deleteKwargs?: any): void; - query(query: VectorStoreQuery, kwargs?: any): VectorStoreQueryResult; - persist(persistPath: string, fs?: GenericFileSystem): void; + add(embeddingResults: NodeWithEmbedding[]): Promise<string[]>; + delete(refDocId: string, deleteKwargs?: any): Promise<void>; + query(query: VectorStoreQuery, kwargs?: any): Promise<VectorStoreQueryResult>; + persist(persistPath: string, fs?: GenericFileSystem): Promise<void>; } -- GitLab