From 2039509811ecf7bfb1839e556debc2e05b5bc4da Mon Sep 17 00:00:00 2001
From: Marcus Schiesser <mail@marcusschiesser.de>
Date: Wed, 13 Dec 2023 17:44:48 +0700
Subject: [PATCH] fix: bugs with persisting and loading image vector stores

---
 packages/core/src/embeddings/ClipEmbedding.ts            | 2 +-
 .../core/src/indices/vectorStore/VectorStoreIndex.ts     | 9 +++++++--
 packages/core/src/storage/StorageContext.ts              | 4 ++++
 3 files changed, 12 insertions(+), 3 deletions(-)

diff --git a/packages/core/src/embeddings/ClipEmbedding.ts b/packages/core/src/embeddings/ClipEmbedding.ts
index 989914dc5..d97dad944 100644
--- a/packages/core/src/embeddings/ClipEmbedding.ts
+++ b/packages/core/src/embeddings/ClipEmbedding.ts
@@ -62,7 +62,7 @@ export class ClipEmbedding extends MultiModalEmbedding {
     const loadedImage = await readImage(image);
     const imageInputs = await (await this.getProcessor())(loadedImage);
     const { image_embeds } = await (await this.getVisionModel())(imageInputs);
-    return image_embeds.data;
+    return Array.from(image_embeds.data);
   }
 
   async getTextEmbedding(text: string): Promise<number[]> {
diff --git a/packages/core/src/indices/vectorStore/VectorStoreIndex.ts b/packages/core/src/indices/vectorStore/VectorStoreIndex.ts
index 6721aaa86..eb66b9c7c 100644
--- a/packages/core/src/indices/vectorStore/VectorStoreIndex.ts
+++ b/packages/core/src/indices/vectorStore/VectorStoreIndex.ts
@@ -66,7 +66,8 @@ export class VectorStoreIndex extends BaseIndex<IndexDict> {
     this.indexStore = init.indexStore;
     this.vectorStore = init.vectorStore ?? init.storageContext.vectorStore;
     this.embedModel = init.serviceContext.embedModel;
-    this.imageVectorStore = init.imageVectorStore;
+    this.imageVectorStore =
+      init.imageVectorStore ?? init.storageContext.imageVectorStore;
     if (this.imageVectorStore) {
       this.imageEmbedModel = new ClipEmbedding();
     }
@@ -219,6 +220,7 @@ export class VectorStoreIndex extends BaseIndex<IndexDict> {
   static async fromVectorStore(
     vectorStore: VectorStore,
     serviceContext: ServiceContext,
+    imageVectorStore?: VectorStore,
   ) {
     if (!vectorStore.storesText) {
       throw new Error(
@@ -226,7 +228,10 @@ export class VectorStoreIndex extends BaseIndex<IndexDict> {
       );
     }
 
-    const storageContext = await storageContextFromDefaults({ vectorStore });
+    const storageContext = await storageContextFromDefaults({
+      vectorStore,
+      imageVectorStore,
+    });
 
     const index = await this.init({
       nodes: [],
diff --git a/packages/core/src/storage/StorageContext.ts b/packages/core/src/storage/StorageContext.ts
index 32a5c8e4d..8e557ea95 100644
--- a/packages/core/src/storage/StorageContext.ts
+++ b/packages/core/src/storage/StorageContext.ts
@@ -11,12 +11,14 @@ export interface StorageContext {
   docStore: BaseDocumentStore;
   indexStore: BaseIndexStore;
   vectorStore: VectorStore;
+  imageVectorStore?: VectorStore;
 }
 
 type BuilderParams = {
   docStore?: BaseDocumentStore;
   indexStore?: BaseIndexStore;
   vectorStore?: VectorStore;
+  imageVectorStore?: VectorStore;
   persistDir?: string;
   fs?: GenericFileSystem;
 };
@@ -25,6 +27,7 @@ export async function storageContextFromDefaults({
   docStore,
   indexStore,
   vectorStore,
+  imageVectorStore,
   persistDir,
   fs,
 }: BuilderParams): Promise<StorageContext> {
@@ -51,5 +54,6 @@ export async function storageContextFromDefaults({
     docStore,
     indexStore,
     vectorStore,
+    imageVectorStore,
   };
 }
-- 
GitLab