From 749b43a3b17ad1703a292dd4249e0aa6183f5b69 Mon Sep 17 00:00:00 2001
From: Alex Yang <himself65@outlook.com>
Date: Mon, 16 Sep 2024 15:51:24 -0700
Subject: [PATCH] fix: multi model embedding (#1215)

---
 .changeset/sour-snakes-fry.md                 |   6 ++
 packages/core/src/embeddings/base.ts          |  45 ++++++----
 packages/core/src/embeddings/index.ts         |   1 +
 packages/core/src/embeddings/muti-model.ts    |  81 ++++++++++++++++++
 .../e2e/fixtures/img/llamaindex-white.png     | Bin 0 -> 51654 bytes
 .../llamaindex/e2e/node/embedding/clip.e2e.ts |  30 +++++++
 .../src/embeddings/ClipEmbedding.ts           |   6 +-
 .../embeddings/CloudflareWorkerEmbedding.ts   |   5 +-
 .../src/embeddings/JinaAIEmbedding.ts         |   2 +-
 .../src/embeddings/MultiModalEmbedding.ts     |  71 ---------------
 packages/llamaindex/src/embeddings/index.ts   |   1 -
 11 files changed, 156 insertions(+), 92 deletions(-)
 create mode 100644 .changeset/sour-snakes-fry.md
 create mode 100644 packages/core/src/embeddings/muti-model.ts
 create mode 100644 packages/llamaindex/e2e/fixtures/img/llamaindex-white.png
 create mode 100644 packages/llamaindex/e2e/node/embedding/clip.e2e.ts
 delete mode 100644 packages/llamaindex/src/embeddings/MultiModalEmbedding.ts

diff --git a/.changeset/sour-snakes-fry.md b/.changeset/sour-snakes-fry.md
new file mode 100644
index 000000000..98808fd73
--- /dev/null
+++ b/.changeset/sour-snakes-fry.md
@@ -0,0 +1,6 @@
+---
+"llamaindex": patch
+"@llamaindex/core": patch
+---
+
+fix: clip embedding transform function
diff --git a/packages/core/src/embeddings/base.ts b/packages/core/src/embeddings/base.ts
index d8f66d215..1d1e972a5 100644
--- a/packages/core/src/embeddings/base.ts
+++ b/packages/core/src/embeddings/base.ts
@@ -23,23 +23,34 @@ export abstract class BaseEmbedding extends TransformComponent {
   embedBatchSize = DEFAULT_EMBED_BATCH_SIZE;
   embedInfo?: EmbeddingInfo;
 
-  constructor() {
-    super(
-      async (
-        nodes: BaseNode[],
-        options?: BaseEmbeddingOptions,
-      ): Promise<BaseNode[]> => {
-        const texts = nodes.map((node) => node.getContent(MetadataMode.EMBED));
-
-        const embeddings = await this.getTextEmbeddingsBatch(texts, options);
-
-        for (let i = 0; i < nodes.length; i++) {
-          nodes[i]!.embedding = embeddings[i];
-        }
-
-        return nodes;
-      },
-    );
+  protected constructor(
+    transformFn?: (
+      nodes: BaseNode[],
+      options?: BaseEmbeddingOptions,
+    ) => Promise<BaseNode[]>,
+  ) {
+    if (transformFn) {
+      super(transformFn);
+    } else {
+      super(
+        async (
+          nodes: BaseNode[],
+          options?: BaseEmbeddingOptions,
+        ): Promise<BaseNode[]> => {
+          const texts = nodes.map((node) =>
+            node.getContent(MetadataMode.EMBED),
+          );
+
+          const embeddings = await this.getTextEmbeddingsBatch(texts, options);
+
+          for (let i = 0; i < nodes.length; i++) {
+            nodes[i]!.embedding = embeddings[i];
+          }
+
+          return nodes;
+        },
+      );
+    }
   }
 
   similarity(
diff --git a/packages/core/src/embeddings/index.ts b/packages/core/src/embeddings/index.ts
index 7d6c4aac1..5e96ef5b1 100644
--- a/packages/core/src/embeddings/index.ts
+++ b/packages/core/src/embeddings/index.ts
@@ -1,4 +1,5 @@
 export { BaseEmbedding, batchEmbeddings } from "./base";
 export type { BaseEmbeddingOptions, EmbeddingInfo } from "./base";
+export { MultiModalEmbedding } from "./muti-model";
 export { truncateMaxTokens } from "./tokenizer";
 export { DEFAULT_SIMILARITY_TOP_K, SimilarityType, similarity } from "./utils";
diff --git a/packages/core/src/embeddings/muti-model.ts b/packages/core/src/embeddings/muti-model.ts
new file mode 100644
index 000000000..bf150c95a
--- /dev/null
+++ b/packages/core/src/embeddings/muti-model.ts
@@ -0,0 +1,81 @@
+import type { MessageContentDetail } from "../llms";
+import {
+  ImageNode,
+  MetadataMode,
+  ModalityType,
+  splitNodesByType,
+  type BaseNode,
+  type ImageType,
+} from "../schema";
+import { extractImage, extractSingleText } from "../utils";
+import {
+  BaseEmbedding,
+  batchEmbeddings,
+  type BaseEmbeddingOptions,
+} from "./base";
+
+/*
+ * Base class for Multi Modal embeddings.
+ */
+export abstract class MultiModalEmbedding extends BaseEmbedding {
+  abstract getImageEmbedding(images: ImageType): Promise<number[]>;
+
+  protected constructor() {
+    super(
+      async (
+        nodes: BaseNode[],
+        options?: BaseEmbeddingOptions,
+      ): Promise<BaseNode[]> => {
+        const nodeMap = splitNodesByType(nodes);
+        const imageNodes = nodeMap[ModalityType.IMAGE] ?? [];
+        const textNodes = nodeMap[ModalityType.TEXT] ?? [];
+
+        const embeddings = await batchEmbeddings(
+          textNodes.map((node) => node.getContent(MetadataMode.EMBED)),
+          this.getTextEmbeddings.bind(this),
+          this.embedBatchSize,
+          options,
+        );
+        for (let i = 0; i < textNodes.length; i++) {
+          textNodes[i]!.embedding = embeddings[i];
+        }
+
+        const imageEmbeddings = await batchEmbeddings(
+          imageNodes.map((n) => (n as ImageNode).image),
+          this.getImageEmbeddings.bind(this),
+          this.embedBatchSize,
+          options,
+        );
+        for (let i = 0; i < imageNodes.length; i++) {
+          imageNodes[i]!.embedding = imageEmbeddings[i];
+        }
+
+        return nodes;
+      },
+    );
+  }
+
+  /**
+   * Optionally override this method to retrieve multiple image embeddings in a single request
+   * @param images
+   */
+  async getImageEmbeddings(images: ImageType[]): Promise<number[][]> {
+    return Promise.all(
+      images.map((imgFilePath) => this.getImageEmbedding(imgFilePath)),
+    );
+  }
+
+  async getQueryEmbedding(
+    query: MessageContentDetail,
+  ): Promise<number[] | null> {
+    const image = extractImage(query);
+    if (image) {
+      return await this.getImageEmbedding(image);
+    }
+    const text = extractSingleText(query);
+    if (text) {
+      return await this.getTextEmbedding(text);
+    }
+    return null;
+  }
+}
diff --git a/packages/llamaindex/e2e/fixtures/img/llamaindex-white.png b/packages/llamaindex/e2e/fixtures/img/llamaindex-white.png
new file mode 100644
index 0000000000000000000000000000000000000000..7f72a5e04dc13a5076d80d71584e195f818e2132
GIT binary patch
literal 51654
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%0DII7rWpGt}`PPCTTg2k(
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

literal 0
HcmV?d00001

diff --git a/packages/llamaindex/e2e/node/embedding/clip.e2e.ts b/packages/llamaindex/e2e/node/embedding/clip.e2e.ts
new file mode 100644
index 000000000..110afe5f7
--- /dev/null
+++ b/packages/llamaindex/e2e/node/embedding/clip.e2e.ts
@@ -0,0 +1,30 @@
+import { ClipEmbedding, ImageNode } from "llamaindex";
+import assert from "node:assert";
+import { test } from "node:test";
+
+await test("clip embedding", async (t) => {
+  await t.test("init & get image embedding", async () => {
+    const clipEmbedding = new ClipEmbedding();
+    const imgUrl = new URL(
+      "../../fixtures/img/llamaindex-white.png",
+      import.meta.url,
+    );
+    const vec = await clipEmbedding.getImageEmbedding(imgUrl);
+    assert.ok(vec);
+  });
+
+  await t.test("load image document", async () => {
+    const nodes = [
+      new ImageNode({
+        image: new URL(
+          "../../fixtures/img/llamaindex-white.png",
+          import.meta.url,
+        ),
+      }),
+    ];
+    const clipEmbedding = new ClipEmbedding();
+    const result = await clipEmbedding(nodes);
+    assert.strictEqual(result.length, 1);
+    assert.ok(result[0]!.embedding);
+  });
+});
diff --git a/packages/llamaindex/src/embeddings/ClipEmbedding.ts b/packages/llamaindex/src/embeddings/ClipEmbedding.ts
index c613d0d15..d52d47cd9 100644
--- a/packages/llamaindex/src/embeddings/ClipEmbedding.ts
+++ b/packages/llamaindex/src/embeddings/ClipEmbedding.ts
@@ -1,7 +1,7 @@
+import { MultiModalEmbedding } from "@llamaindex/core/embeddings";
 import type { ImageType } from "@llamaindex/core/schema";
 import _ from "lodash";
 import { lazyLoadTransformers } from "../internal/deps/transformers.js";
-import { MultiModalEmbedding } from "./MultiModalEmbedding.js";
 // only import type, to avoid bundling error
 import type {
   CLIPTextModelWithProjection,
@@ -35,6 +35,10 @@ export class ClipEmbedding extends MultiModalEmbedding {
   private visionModel: CLIPVisionModelWithProjection | null = null;
   private textModel: CLIPTextModelWithProjection | null = null;
 
+  constructor() {
+    super();
+  }
+
   async getTokenizer() {
     const { AutoTokenizer } = await lazyLoadTransformers();
     if (!this.tokenizer) {
diff --git a/packages/llamaindex/src/embeddings/CloudflareWorkerEmbedding.ts b/packages/llamaindex/src/embeddings/CloudflareWorkerEmbedding.ts
index 2034cc41e..76c0fec6f 100644
--- a/packages/llamaindex/src/embeddings/CloudflareWorkerEmbedding.ts
+++ b/packages/llamaindex/src/embeddings/CloudflareWorkerEmbedding.ts
@@ -1,10 +1,13 @@
+import { MultiModalEmbedding } from "@llamaindex/core/embeddings";
 import type { ImageType } from "@llamaindex/core/schema";
-import { MultiModalEmbedding } from "./MultiModalEmbedding.js";
 
 /**
  * Cloudflare worker doesn't support image embeddings for now
  */
 export class CloudflareWorkerMultiModalEmbedding extends MultiModalEmbedding {
+  constructor() {
+    super();
+  }
   getImageEmbedding(images: ImageType): Promise<number[]> {
     throw new Error("Method not implemented.");
   }
diff --git a/packages/llamaindex/src/embeddings/JinaAIEmbedding.ts b/packages/llamaindex/src/embeddings/JinaAIEmbedding.ts
index b0514b998..00188dc00 100644
--- a/packages/llamaindex/src/embeddings/JinaAIEmbedding.ts
+++ b/packages/llamaindex/src/embeddings/JinaAIEmbedding.ts
@@ -1,7 +1,7 @@
+import { MultiModalEmbedding } from "@llamaindex/core/embeddings";
 import { getEnv } from "@llamaindex/env";
 import { imageToDataUrl } from "../internal/utils.js";
 import type { ImageType } from "../Node.js";
-import { MultiModalEmbedding } from "./MultiModalEmbedding.js";
 
 function isLocal(url: ImageType): boolean {
   if (url instanceof Blob) return true;
diff --git a/packages/llamaindex/src/embeddings/MultiModalEmbedding.ts b/packages/llamaindex/src/embeddings/MultiModalEmbedding.ts
deleted file mode 100644
index 6d2ed5bb2..000000000
--- a/packages/llamaindex/src/embeddings/MultiModalEmbedding.ts
+++ /dev/null
@@ -1,71 +0,0 @@
-import { BaseEmbedding, batchEmbeddings } from "@llamaindex/core/embeddings";
-import type { MessageContentDetail } from "@llamaindex/core/llms";
-import {
-  ImageNode,
-  MetadataMode,
-  ModalityType,
-  splitNodesByType,
-  type BaseNode,
-  type ImageType,
-} from "@llamaindex/core/schema";
-import { extractImage, extractSingleText } from "@llamaindex/core/utils";
-
-/*
- * Base class for Multi Modal embeddings.
- */
-
-export abstract class MultiModalEmbedding extends BaseEmbedding {
-  abstract getImageEmbedding(images: ImageType): Promise<number[]>;
-
-  /**
-   * Optionally override this method to retrieve multiple image embeddings in a single request
-   * @param images
-   */
-  async getImageEmbeddings(images: ImageType[]): Promise<number[][]> {
-    return Promise.all(
-      images.map((imgFilePath) => this.getImageEmbedding(imgFilePath)),
-    );
-  }
-
-  async transform(nodes: BaseNode[], _options?: any): Promise<BaseNode[]> {
-    const nodeMap = splitNodesByType(nodes);
-    const imageNodes = nodeMap[ModalityType.IMAGE] ?? [];
-    const textNodes = nodeMap[ModalityType.TEXT] ?? [];
-
-    const embeddings = await batchEmbeddings(
-      textNodes.map((node) => node.getContent(MetadataMode.EMBED)),
-      this.getTextEmbeddings.bind(this),
-      this.embedBatchSize,
-      _options,
-    );
-    for (let i = 0; i < textNodes.length; i++) {
-      textNodes[i]!.embedding = embeddings[i];
-    }
-
-    const imageEmbeddings = await batchEmbeddings(
-      imageNodes.map((n) => (n as ImageNode).image),
-      this.getImageEmbeddings.bind(this),
-      this.embedBatchSize,
-      _options,
-    );
-    for (let i = 0; i < imageNodes.length; i++) {
-      imageNodes[i]!.embedding = imageEmbeddings[i];
-    }
-
-    return nodes;
-  }
-
-  async getQueryEmbedding(
-    query: MessageContentDetail,
-  ): Promise<number[] | null> {
-    const image = extractImage(query);
-    if (image) {
-      return await this.getImageEmbedding(image);
-    }
-    const text = extractSingleText(query);
-    if (text) {
-      return await this.getTextEmbedding(text);
-    }
-    return null;
-  }
-}
diff --git a/packages/llamaindex/src/embeddings/index.ts b/packages/llamaindex/src/embeddings/index.ts
index 7d23905f1..a93a1d378 100644
--- a/packages/llamaindex/src/embeddings/index.ts
+++ b/packages/llamaindex/src/embeddings/index.ts
@@ -6,7 +6,6 @@ export { HuggingFaceInferenceAPIEmbedding } from "./HuggingFaceEmbedding.js";
 export * from "./JinaAIEmbedding.js";
 export * from "./MistralAIEmbedding.js";
 export * from "./MixedbreadAIEmbeddings.js";
-export * from "./MultiModalEmbedding.js";
 export { OllamaEmbedding } from "./OllamaEmbedding.js";
 export * from "./OpenAIEmbedding.js";
 export { TogetherEmbedding } from "./together.js";
-- 
GitLab