From 46227f2a701e9aea4de7e7b860e20d8084833c27 Mon Sep 17 00:00:00 2001
From: Alex Yang <himself65@outlook.com>
Date: Wed, 1 May 2024 12:37:43 -0500
Subject: [PATCH] fix: build error on next.js nodejs runtime (#785)

---
 .changeset/fair-penguins-trade.md               |  6 ++++++
 .../examples/nextjs-agent/src/app/test/page.tsx |  5 +++++
 packages/core/src/embeddings/ClipEmbedding.ts   | 17 ++++++++++++++---
 packages/core/src/objects/base.ts               |  2 +-
 4 files changed, 26 insertions(+), 4 deletions(-)
 create mode 100644 .changeset/fair-penguins-trade.md
 create mode 100644 packages/core/e2e/examples/nextjs-agent/src/app/test/page.tsx

diff --git a/.changeset/fair-penguins-trade.md b/.changeset/fair-penguins-trade.md
new file mode 100644
index 000000000..54ca229a1
--- /dev/null
+++ b/.changeset/fair-penguins-trade.md
@@ -0,0 +1,6 @@
+---
+"llamaindex": patch
+"@llamaindex/edge": patch
+---
+
+fix: build error on next.js nodejs runtime
diff --git a/packages/core/e2e/examples/nextjs-agent/src/app/test/page.tsx b/packages/core/e2e/examples/nextjs-agent/src/app/test/page.tsx
new file mode 100644
index 000000000..e1540bfa1
--- /dev/null
+++ b/packages/core/e2e/examples/nextjs-agent/src/app/test/page.tsx
@@ -0,0 +1,5 @@
+import "llamaindex";
+
+export default function Page() {
+  return "hello world!";
+}
diff --git a/packages/core/src/embeddings/ClipEmbedding.ts b/packages/core/src/embeddings/ClipEmbedding.ts
index 0dab86411..5cd6f1bc3 100644
--- a/packages/core/src/embeddings/ClipEmbedding.ts
+++ b/packages/core/src/embeddings/ClipEmbedding.ts
@@ -3,7 +3,10 @@ import type { ImageType } from "../Node.js";
 import { MultiModalEmbedding } from "./MultiModalEmbedding.js";
 
 async function readImage(input: ImageType) {
-  const { RawImage } = await import("@xenova/transformers");
+  const { RawImage } = await import(
+    /* webpackIgnore: true */
+    "@xenova/transformers"
+  );
   if (input instanceof Blob) {
     return await RawImage.fromBlob(input);
   } else if (_.isString(input) || input instanceof URL) {
@@ -29,7 +32,10 @@ export class ClipEmbedding extends MultiModalEmbedding {
 
   async getTokenizer() {
     if (!this.tokenizer) {
-      const { AutoTokenizer } = await import("@xenova/transformers");
+      const { AutoTokenizer } = await import(
+        /* webpackIgnore: true */
+        "@xenova/transformers"
+      );
       this.tokenizer = await AutoTokenizer.from_pretrained(this.modelType);
     }
     return this.tokenizer;
@@ -37,7 +43,10 @@ export class ClipEmbedding extends MultiModalEmbedding {
 
   async getProcessor() {
     if (!this.processor) {
-      const { AutoProcessor } = await import("@xenova/transformers");
+      const { AutoProcessor } = await import(
+        /* webpackIgnore: true */
+        "@xenova/transformers"
+      );
       this.processor = await AutoProcessor.from_pretrained(this.modelType);
     }
     return this.processor;
@@ -46,6 +55,7 @@ export class ClipEmbedding extends MultiModalEmbedding {
   async getVisionModel() {
     if (!this.visionModel) {
       const { CLIPVisionModelWithProjection } = await import(
+        /* webpackIgnore: true */
         "@xenova/transformers"
       );
       this.visionModel = await CLIPVisionModelWithProjection.from_pretrained(
@@ -59,6 +69,7 @@ export class ClipEmbedding extends MultiModalEmbedding {
   async getTextModel() {
     if (!this.textModel) {
       const { CLIPTextModelWithProjection } = await import(
+        /* webpackIgnore: true */
         "@xenova/transformers"
       );
       this.textModel = await CLIPTextModelWithProjection.from_pretrained(
diff --git a/packages/core/src/objects/base.ts b/packages/core/src/objects/base.ts
index 3eade2994..b9b529a0b 100644
--- a/packages/core/src/objects/base.ts
+++ b/packages/core/src/objects/base.ts
@@ -1,7 +1,7 @@
 import type { BaseNode, Metadata } from "../Node.js";
 import { TextNode } from "../Node.js";
 import type { BaseRetriever } from "../Retriever.js";
-import type { VectorStoreIndex } from "../indices/index.js";
+import type { VectorStoreIndex } from "../indices/vectorStore/index.js";
 import type { MessageContent } from "../llm/index.js";
 import { extractText } from "../llm/utils.js";
 import type { BaseTool } from "../types.js";
-- 
GitLab