Skip to content

Commit 2fb4ac4

Browse files
JonaMXjacoblee93
andauthored
Fix [ERR_REQUIRE_ESM] error when importing hf_transformers (#5746)
* Fix [ERR_REQUIRE_ESM] error when importing hf_transformers * Use alternate fix, add export test --------- Co-authored-by: jacoblee93 <[email protected]>
1 parent b1cef30 commit 2fb4ac4

File tree

11 files changed

+23
-22
lines changed

11 files changed

+23
-22
lines changed

environment_tests/test-exports-cjs/package.json

+1
Original file line numberDiff line numberDiff line change
@@ -26,6 +26,7 @@
2626
"@langchain/core": "workspace:*",
2727
"@langchain/openai": "workspace:*",
2828
"@tsconfig/recommended": "^1.0.2",
29+
"@xenova/transformers": "^2.5.4",
2930
"d3-dsv": "2",
3031
"hnswlib-node": "^3.0.0",
3132
"langchain": "workspace:*",

environment_tests/test-exports-cjs/src/import.js

+2-2
Original file line numberDiff line numberDiff line change
@@ -4,7 +4,7 @@ async function test() {
44
const { LLMChain } = await import("langchain/chains");
55
const { ChatPromptTemplate } = await import("@langchain/core/prompts");
66
const { HNSWLib } = await import("@langchain/community/vectorstores/hnswlib");
7-
const { OpenAIEmbeddings } = await import("@langchain/openai");
7+
const { HuggingFaceTransformersEmbeddings } = await import("@langchain/community/embeddings/hf_transformers");
88
const { Document } = await import("@langchain/core/documents");
99
const { CSVLoader } = await import("langchain/document_loaders/fs/csv");
1010

@@ -17,7 +17,7 @@ async function test() {
1717
// Test dynamic imports of peer dependencies
1818
const { HierarchicalNSW } = await HNSWLib.imports();
1919

20-
const vs = new HNSWLib(new OpenAIEmbeddings({ openAIApiKey: "sk-XXXX" }), {
20+
const vs = new HNSWLib(new HuggingFaceTransformersEmbeddings({ model: "Xenova/all-MiniLM-L6-v2" }), {
2121
space: "ip",
2222
numDimensions: 3,
2323
index: new HierarchicalNSW("ip", 3),

environment_tests/test-exports-cjs/src/index.mjs

+2-2
Original file line numberDiff line numberDiff line change
@@ -3,7 +3,7 @@ import { OpenAI } from "@langchain/openai";
33
import { LLMChain } from "langchain/chains";
44
import { HNSWLib } from "@langchain/community/vectorstores/hnswlib";
55
import { ChatPromptTemplate } from "@langchain/core/prompts";
6-
import { OpenAIEmbeddings } from "@langchain/openai";
6+
import { HuggingFaceTransformersEmbeddings } from "@langchain/community/embeddings/hf_transformers";
77
import { Document } from "@langchain/core/documents";
88
import { CSVLoader } from "langchain/document_loaders/fs/csv";
99

@@ -16,7 +16,7 @@ assert(typeof HNSWLib === "function");
1616
// Test dynamic imports of peer dependencies
1717
const { HierarchicalNSW } = await HNSWLib.imports();
1818

19-
const vs = new HNSWLib(new OpenAIEmbeddings({ openAIApiKey: "sk-XXXX" }), {
19+
const vs = new HNSWLib(new HuggingFaceTransformersEmbeddings({ model: "Xenova/all-MiniLM-L6-v2" }), {
2020
space: "ip",
2121
numDimensions: 3,
2222
index: new HierarchicalNSW("ip", 3),

environment_tests/test-exports-cjs/src/index.ts

+2-2
Original file line numberDiff line numberDiff line change
@@ -3,7 +3,7 @@ import { OpenAI } from "@langchain/openai";
33
import { LLMChain } from "langchain/chains";
44
import { ChatPromptTemplate } from "@langchain/core/prompts";
55
import { HNSWLib } from "@langchain/community/vectorstores/hnswlib";
6-
import { OpenAIEmbeddings } from "@langchain/openai";
6+
import { HuggingFaceTransformersEmbeddings } from "@langchain/community/embeddings/hf_transformers";
77
import { Document } from "@langchain/core/documents";
88
import { CSVLoader } from "langchain/document_loaders/fs/csv";
99

@@ -26,7 +26,7 @@ async function test(useAzure: boolean = false) {
2626
: {
2727
openAIApiKey: "sk-XXXX",
2828
};
29-
const vs = new HNSWLib(new OpenAIEmbeddings({ openAIApiKey: "sk-XXXX" }), {
29+
const vs = new HNSWLib(new HuggingFaceTransformersEmbeddings({ model: "Xenova/all-MiniLM-L6-v2" }), {
3030
space: "ip",
3131
numDimensions: 3,
3232
index: new HierarchicalNSW("ip", 3),

environment_tests/test-exports-cjs/src/require.js

+2-2
Original file line numberDiff line numberDiff line change
@@ -3,7 +3,7 @@ const { OpenAI } = require("@langchain/openai");
33
const { LLMChain } = require("langchain/chains");
44
const { ChatPromptTemplate } = require("@langchain/core/prompts");
55
const { HNSWLib } = require("@langchain/community/vectorstores/hnswlib");
6-
const { OpenAIEmbeddings } = require("@langchain/openai");
6+
const { HuggingFaceTransformersEmbeddings } = require("@langchain/community/embeddings/hf_transformers");
77
const { Document } = require("@langchain/core/documents");
88
const { CSVLoader } = require("langchain/document_loaders/fs/csv");
99

@@ -17,7 +17,7 @@ async function test() {
1717
// Test dynamic imports of peer dependencies
1818
const { HierarchicalNSW } = await HNSWLib.imports();
1919

20-
const vs = new HNSWLib(new OpenAIEmbeddings({ openAIApiKey: "sk-XXXX" }), {
20+
const vs = new HNSWLib(new HuggingFaceTransformersEmbeddings({ model: "Xenova/all-MiniLM-L6-v2" }), {
2121
space: "ip",
2222
numDimensions: 3,
2323
index: new HierarchicalNSW("ip", 3),

environment_tests/test-exports-esm/package.json

+1
Original file line numberDiff line numberDiff line change
@@ -27,6 +27,7 @@
2727
"@langchain/core": "workspace:*",
2828
"@langchain/openai": "workspace:*",
2929
"@tsconfig/recommended": "^1.0.2",
30+
"@xenova/transformers": "^2.5.4",
3031
"d3-dsv": "2",
3132
"hnswlib-node": "^3.0.0",
3233
"langchain": "workspace:*",

environment_tests/test-exports-esm/src/import.cjs

+2-2
Original file line numberDiff line numberDiff line change
@@ -4,7 +4,7 @@ async function test() {
44
const { LLMChain } = await import("langchain/chains");
55
const { ChatPromptTemplate } = await import("@langchain/core/prompts");
66
const { HNSWLib } = await import("@langchain/community/vectorstores/hnswlib");
7-
const { OpenAIEmbeddings } = await import("@langchain/openai");
7+
const { HuggingFaceTransformersEmbeddings } = await import("@langchain/community/embeddings/hf_transformers");
88
const { Document } = await import("@langchain/core/documents");
99
const { CSVLoader } = await import("langchain/document_loaders/fs/csv");
1010

@@ -17,7 +17,7 @@ async function test() {
1717
// Test dynamic imports of peer dependencies
1818
const { HierarchicalNSW } = await HNSWLib.imports();
1919

20-
const vs = new HNSWLib(new OpenAIEmbeddings({ openAIApiKey: "sk-XXXX" }), {
20+
const vs = new HNSWLib(new HuggingFaceTransformersEmbeddings({ model: "Xenova/all-MiniLM-L6-v2", }), {
2121
space: "ip",
2222
numDimensions: 3,
2323
index: new HierarchicalNSW("ip", 3),

environment_tests/test-exports-esm/src/index.js

+3-3
Original file line numberDiff line numberDiff line change
@@ -3,7 +3,7 @@ import { OpenAI } from "@langchain/openai";
33
import { LLMChain } from "langchain/chains";
44
import { ChatPromptTemplate } from "@langchain/core/prompts";
55
import { HNSWLib } from "@langchain/community/vectorstores/hnswlib";
6-
import { OpenAIEmbeddings } from "@langchain/openai";
6+
import { HuggingFaceTransformersEmbeddings } from "@langchain/community/embeddings/hf_transformers";
77
import { Document } from "@langchain/core/documents";
88
import { CSVLoader } from "langchain/document_loaders/fs/csv";
99
import { CallbackManager } from "@langchain/core/callbacks/manager";
@@ -13,13 +13,13 @@ assert(typeof OpenAI === "function");
1313
assert(typeof LLMChain === "function");
1414
assert(typeof ChatPromptTemplate === "function");
1515
assert(typeof HNSWLib === "function");
16-
assert(typeof OpenAIEmbeddings === "function");
16+
assert(typeof HuggingFaceTransformersEmbeddings === "function");
1717
assert(typeof CallbackManager === "function");
1818

1919
// Test dynamic imports of peer dependencies
2020
const { HierarchicalNSW } = await HNSWLib.imports();
2121

22-
const vs = new HNSWLib(new OpenAIEmbeddings({ openAIApiKey: "sk-XXXX" }), {
22+
const vs = new HNSWLib(new HuggingFaceTransformersEmbeddings({ model: "Xenova/all-MiniLM-L6-v2", }), {
2323
space: "ip",
2424
numDimensions: 3,
2525
index: new HierarchicalNSW("ip", 3),

environment_tests/test-exports-esm/src/index.ts

+2-2
Original file line numberDiff line numberDiff line change
@@ -3,7 +3,7 @@ import { OpenAI } from "@langchain/openai";
33
import { LLMChain } from "langchain/chains";
44
import { ChatPromptTemplate } from "@langchain/core/prompts";
55
import { HNSWLib } from "@langchain/community/vectorstores/hnswlib";
6-
import { OpenAIEmbeddings } from "@langchain/openai";
6+
import { HuggingFaceTransformersEmbeddings } from "@langchain/community/embeddings/hf_transformers";
77
import { Document } from "@langchain/core/documents";
88
import { CSVLoader } from "langchain/document_loaders/fs/csv";
99

@@ -27,7 +27,7 @@ async function test(useAzure: boolean = false) {
2727
openAIApiKey: "sk-XXXX",
2828
};
2929

30-
const vs = new HNSWLib(new OpenAIEmbeddings(openAIParameters), {
30+
const vs = new HNSWLib(new HuggingFaceTransformersEmbeddings({ model: "Xenova/all-MiniLM-L6-v2", }), {
3131
space: "ip",
3232
numDimensions: 3,
3333
index: new HierarchicalNSW("ip", 3),

environment_tests/test-exports-esm/src/require.cjs

+2-2
Original file line numberDiff line numberDiff line change
@@ -3,7 +3,7 @@ const { OpenAI } = require("@langchain/openai");
33
const { LLMChain } = require("langchain/chains");
44
const { ChatPromptTemplate } = require("@langchain/core/prompts");
55
const { HNSWLib } = require("@langchain/community/vectorstores/hnswlib");
6-
const { OpenAIEmbeddings } = require("@langchain/openai");
6+
const { HuggingFaceTransformersEmbeddings } = require("@langchain/community/embeddings/hf_transformers");
77
const { Document } = require("@langchain/core/documents");
88
const { CSVLoader } = require("langchain/document_loaders/fs/csv");
99

@@ -17,7 +17,7 @@ async function test() {
1717
// Test dynamic imports of peer dependencies
1818
const { HierarchicalNSW } = await HNSWLib.imports();
1919

20-
const vs = new HNSWLib(new OpenAIEmbeddings({ openAIApiKey: "sk-XXXX" }), {
20+
const vs = new HNSWLib(new HuggingFaceTransformersEmbeddings({ model: "Xenova/all-MiniLM-L6-v2", }), {
2121
space: "ip",
2222
numDimensions: 3,
2323
index: new HierarchicalNSW("ip", 3),

libs/langchain-community/src/embeddings/hf_transformers.ts

+4-5
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,4 @@
1-
import { Pipeline, pipeline } from "@xenova/transformers";
1+
import type { Pipeline } from "@xenova/transformers";
22
import { Embeddings, type EmbeddingsParams } from "@langchain/core/embeddings";
33
import { chunkArray } from "@langchain/core/utils/chunk_array";
44

@@ -100,10 +100,9 @@ export class HuggingFaceTransformersEmbeddings
100100
}
101101

102102
private async runEmbedding(texts: string[]) {
103-
const pipe = await (this.pipelinePromise ??= pipeline(
104-
"feature-extraction",
105-
this.model
106-
));
103+
const pipe = await (this.pipelinePromise ??= (
104+
await import("@xenova/transformers")
105+
).pipeline("feature-extraction", this.model));
107106

108107
return this.caller.call(async () => {
109108
const output = await pipe(texts, { pooling: "mean", normalize: true });

0 commit comments

Comments
 (0)