From b4b09313945d184c7e4716ef9c5369cf11704443 Mon Sep 17 00:00:00 2001 From: Yulong Wang <7679871+fs-eire@users.noreply.github.com> Date: Wed, 29 Jan 2025 11:53:34 -0800 Subject: [PATCH 1/5] Upgrade package export --- package-lock.json | 8 +++---- package.json | 8 +++---- src/backends/onnx.js | 28 +++++++++++++----------- webpack.config.js | 51 +++++++++++++++++++++----------------------- 4 files changed, 48 insertions(+), 47 deletions(-) diff --git a/package-lock.json b/package-lock.json index 091d86367..ea2d1131e 100644 --- a/package-lock.json +++ b/package-lock.json @@ -11,7 +11,7 @@ "dependencies": { "@huggingface/jinja": "^0.3.2", "onnxruntime-node": "1.20.1", - "onnxruntime-web": "1.21.0-dev.20250114-228dd16893", + "onnxruntime-web": "1.21.0-dev.20250129-80bc1d25f0", "sharp": "^0.33.5" }, "devDependencies": { @@ -8782,9 +8782,9 @@ } }, "node_modules/onnxruntime-web": { - "version": "1.21.0-dev.20250114-228dd16893", - "resolved": "https://registry.npmjs.org/onnxruntime-web/-/onnxruntime-web-1.21.0-dev.20250114-228dd16893.tgz", - "integrity": "sha512-fUnedxS63NYwNkQJlvdD55jVcOtyM+Qzw1SGt9Pj3jZVaIwR4mltx/5C0yvwdue44BTSV7M5Q0qnhL6/30ewqA==", + "version": "1.21.0-dev.20250129-80bc1d25f0", + "resolved": "https://registry.npmjs.org/onnxruntime-web/-/onnxruntime-web-1.21.0-dev.20250129-80bc1d25f0.tgz", + "integrity": "sha512-+xw53OJARUpqxoDDEVyGqrx3kFudSdveGLObSG4S4I7EarpmdlOwYUei3KW3MUjm4gOPJGAlI6KS8+NpIDPMPA==", "license": "MIT", "dependencies": { "flatbuffers": "^1.12.0", diff --git a/package.json b/package.json index aee07e63d..71ae46954 100644 --- a/package.json +++ b/package.json @@ -9,16 +9,16 @@ "node": { "import": { "types": "./types/transformers.d.ts", - "default": "./dist/transformers.mjs" + "default": "./dist/transformers.node.mjs" }, "require": { "types": "./types/transformers.d.ts", - "default": "./dist/transformers.cjs" + "default": "./dist/transformers.node.cjs" } }, "default": { "types": "./types/transformers.d.ts", - "default": "./dist/transformers.js" + "default": "./dist/transformers.web.js" } }, "scripts": { @@ -57,7 +57,7 @@ "dependencies": { "@huggingface/jinja": "^0.3.2", "onnxruntime-node": "1.20.1", - "onnxruntime-web": "1.21.0-dev.20250114-228dd16893", + "onnxruntime-web": "1.21.0-dev.20250129-80bc1d25f0", "sharp": "^0.33.5" }, "devDependencies": { diff --git a/src/backends/onnx.js b/src/backends/onnx.js index 38cd71337..70465675c 100644 --- a/src/backends/onnx.js +++ b/src/backends/onnx.js @@ -57,8 +57,8 @@ let ONNX; const ORT_SYMBOL = Symbol.for('onnxruntime'); if (ORT_SYMBOL in globalThis) { - // If the JS runtime exposes their own ONNX runtime, use it - ONNX = globalThis[ORT_SYMBOL]; + // If the JS runtime exposes their own ONNX runtime, use it + ONNX = globalThis[ORT_SYMBOL]; } else if (apis.IS_NODE_ENV) { ONNX = ONNX_NODE.default ?? ONNX_NODE; @@ -175,11 +175,20 @@ const ONNX_ENV = ONNX?.env; if (ONNX_ENV?.wasm) { // Initialize wasm backend with suitable default settings. - // (Optional) Set path to wasm files. This is needed when running in a web worker. - // https://onnxruntime.ai/docs/api/js/interfaces/Env.WebAssemblyFlags.html#wasmPaths - // We use remote wasm files by default to make it easier for newer users. - // In practice, users should probably self-host the necessary .wasm files. - ONNX_ENV.wasm.wasmPaths = `https://cdn.jsdelivr.net/npm/@huggingface/transformers@${env.version}/dist/`; + // (Optional) Set path to wasm files. This will override the default path search behavior of onnxruntime-web. + // Currently, this behavior is disabled. To enable it, uncomment the following code. + + // // Override the wasm search path if: + // // 1. We are not in a service worker. + // // 2. ONNX Runtime Web version is defined. + // // 3. The wasmPaths are not already set. + // // + // // @ts-ignore Cannot find name 'ServiceWorkerGlobalScope'.ts(2304) + // if (!(typeof ServiceWorkerGlobalScope !== 'undefined' && self instanceof ServiceWorkerGlobalScope) + // && typeof ONNX?.versions?.web === 'string' + // && !ONNX_ENV.wasm.wasmPaths) { + // ONNX_ENV.wasm.wasmPaths = `https://cdn.jsdelivr.net/npm/onnxruntime-web@${ONNX.versions.web}/dist/`; + // } // TODO: Add support for loading WASM files from cached buffer when we upgrade to onnxruntime-web@1.19.0 // https://github.com/microsoft/onnxruntime/pull/21534 @@ -187,11 +196,6 @@ if (ONNX_ENV?.wasm) { // Users may wish to proxy the WASM backend to prevent the UI from freezing, // However, this is not necessary when using WebGPU, so we default to false. ONNX_ENV.wasm.proxy = false; - - // https://developer.mozilla.org/en-US/docs/Web/API/crossOriginIsolated - if (typeof crossOriginIsolated === 'undefined' || !crossOriginIsolated) { - ONNX_ENV.wasm.numThreads = 1; - } } if (ONNX_ENV?.webgpu) { diff --git a/webpack.config.js b/webpack.config.js index 7ad880868..09611f1e4 100644 --- a/webpack.config.js +++ b/webpack.config.js @@ -24,36 +24,13 @@ class PostBuildPlugin { const file = path.join(dist, ORT_BUNDLE_FILE); if (fs.existsSync(file)) fs.unlinkSync(file); } - + // 2. Copy unbundled JSEP file { const src = path.join(__dirname, 'node_modules/onnxruntime-web/dist', ORT_JSEP_FILE); const dest = path.join(dist, ORT_JSEP_FILE); fs.copyFileSync(src, dest); } - - // 3. Replace strings in certain files - { - const files = ['transformers.js', 'transformers.min.js']; - for (const file of files) { - const filePath = path.join(dist, file); - let content = fs.readFileSync(filePath, 'utf8'); - content = content.replace( - // Replace all instances of `new URL("./", import.meta.url)` with `new URL(import.meta.url)`, - // as it causes several issues with build tools and bundlers. - // - // See the following issues for more information: - // - https://github.com/huggingface/transformers.js/issues/911 - // - https://github.com/huggingface/transformers.js/issues/984 - // - https://github.com/huggingface/transformers.js/issues/980 - // - https://github.com/huggingface/transformers.js/issues/1021 - // - https://github.com/huggingface/transformers.js/issues/1026 - new RegExp('new URL\\(["\']\\.\\\/["\'],\\s*import\\.meta\\.url\\)', 'gm'), - "new URL(import.meta.url)", - ); - fs.writeFileSync(filePath, content, 'utf8'); - } - } }); } } @@ -98,7 +75,7 @@ function buildConfig({ type, }, assetModuleFilename: "[name][ext]", - chunkFormat: "module", + chunkFormat: false, }, optimization: { minimize: true, @@ -157,6 +134,7 @@ const NODE_IGNORE_MODULES = ["onnxruntime-web"]; // NOTE: This is necessary for both type="module" and type="commonjs", // and will be ignored when building for web (only used for node/deno) const NODE_EXTERNAL_MODULES = [ + "onnxruntime-common", "onnxruntime-node", "sharp", "fs", @@ -164,8 +142,25 @@ const NODE_EXTERNAL_MODULES = [ "url", ]; +// Do not bundle onnxruntime-node when packaging for the web. +const WEB_IGNORE_MODULES = ["onnxruntime-node"]; + +// Do not bundle the following modules with webpack (mark as external) +const WEB_EXTERNAL_MODULES = [ + "onnxruntime-common", + "onnxruntime-web", +]; + // Web-only build const WEB_BUILD = buildConfig({ + name: ".web", + type: "module", + ignoreModules: WEB_IGNORE_MODULES, + externalModules: WEB_EXTERNAL_MODULES, +}); + +// Web-only build, bundled with onnxruntime-web +const BUNDLE_BUILD = buildConfig({ type: "module", plugins: [new PostBuildPlugin()], }); @@ -173,12 +168,14 @@ const WEB_BUILD = buildConfig({ // Node-compatible builds const NODE_BUILDS = [ buildConfig({ + name: ".node", suffix: ".mjs", type: "module", ignoreModules: NODE_IGNORE_MODULES, externalModules: NODE_EXTERNAL_MODULES, }), buildConfig({ + name: ".node", suffix: ".cjs", type: "commonjs", ignoreModules: NODE_IGNORE_MODULES, @@ -188,6 +185,6 @@ const NODE_BUILDS = [ // When running with `webpack serve`, only build the web target. const BUILDS = process.env.WEBPACK_SERVE - ? [WEB_BUILD] - : [WEB_BUILD, ...NODE_BUILDS]; + ? [BUNDLE_BUILD] + : [BUNDLE_BUILD, WEB_BUILD, ...NODE_BUILDS]; export default BUILDS; From 85bde3259fed93b6be9e41bdf65ab8bc7c0e0b99 Mon Sep 17 00:00:00 2001 From: Yulong Wang <7679871+fs-eire@users.noreply.github.com> Date: Wed, 5 Feb 2025 19:11:59 -0800 Subject: [PATCH 2/5] set wasm path --- src/backends/onnx.js | 25 ++++++++++++------------- 1 file changed, 12 insertions(+), 13 deletions(-) diff --git a/src/backends/onnx.js b/src/backends/onnx.js index 70465675c..129a8dbec 100644 --- a/src/backends/onnx.js +++ b/src/backends/onnx.js @@ -176,19 +176,18 @@ if (ONNX_ENV?.wasm) { // Initialize wasm backend with suitable default settings. // (Optional) Set path to wasm files. This will override the default path search behavior of onnxruntime-web. - // Currently, this behavior is disabled. To enable it, uncomment the following code. - - // // Override the wasm search path if: - // // 1. We are not in a service worker. - // // 2. ONNX Runtime Web version is defined. - // // 3. The wasmPaths are not already set. - // // - // // @ts-ignore Cannot find name 'ServiceWorkerGlobalScope'.ts(2304) - // if (!(typeof ServiceWorkerGlobalScope !== 'undefined' && self instanceof ServiceWorkerGlobalScope) - // && typeof ONNX?.versions?.web === 'string' - // && !ONNX_ENV.wasm.wasmPaths) { - // ONNX_ENV.wasm.wasmPaths = `https://cdn.jsdelivr.net/npm/onnxruntime-web@${ONNX.versions.web}/dist/`; - // } + + // Override the wasm search path if: + // 1. We are not in a service worker. + // 2. ONNX Runtime Web version is defined. + // 3. The wasmPaths are not already set. + // + // @ts-ignore Cannot find name 'ServiceWorkerGlobalScope'.ts(2304) + if (!(typeof ServiceWorkerGlobalScope !== 'undefined' && self instanceof ServiceWorkerGlobalScope) + && typeof ONNX?.versions?.web === 'string' + && !ONNX_ENV.wasm.wasmPaths) { + ONNX_ENV.wasm.wasmPaths = `https://cdn.jsdelivr.net/npm/onnxruntime-web@${ONNX.versions.web}/dist/`; + } // TODO: Add support for loading WASM files from cached buffer when we upgrade to onnxruntime-web@1.19.0 // https://github.com/microsoft/onnxruntime/pull/21534 From b352705f5447d07fa232d5c78f16b23d37998788 Mon Sep 17 00:00:00 2001 From: Joshua Lochner Date: Mon, 3 Mar 2025 16:46:47 +0000 Subject: [PATCH 3/5] Update default wasmPaths URL --- src/backends/onnx.js | 18 +++++++----------- 1 file changed, 7 insertions(+), 11 deletions(-) diff --git a/src/backends/onnx.js b/src/backends/onnx.js index 129a8dbec..445582421 100644 --- a/src/backends/onnx.js +++ b/src/backends/onnx.js @@ -176,17 +176,13 @@ if (ONNX_ENV?.wasm) { // Initialize wasm backend with suitable default settings. // (Optional) Set path to wasm files. This will override the default path search behavior of onnxruntime-web. - - // Override the wasm search path if: - // 1. We are not in a service worker. - // 2. ONNX Runtime Web version is defined. - // 3. The wasmPaths are not already set. - // - // @ts-ignore Cannot find name 'ServiceWorkerGlobalScope'.ts(2304) - if (!(typeof ServiceWorkerGlobalScope !== 'undefined' && self instanceof ServiceWorkerGlobalScope) - && typeof ONNX?.versions?.web === 'string' - && !ONNX_ENV.wasm.wasmPaths) { - ONNX_ENV.wasm.wasmPaths = `https://cdn.jsdelivr.net/npm/onnxruntime-web@${ONNX.versions.web}/dist/`; + // By default, we only do this if we are not in a service worker and the wasmPaths are not already set. + if ( + // @ts-ignore Cannot find name 'ServiceWorkerGlobalScope'.ts(2304) + !(typeof ServiceWorkerGlobalScope !== 'undefined' && self instanceof ServiceWorkerGlobalScope) + && !ONNX_ENV.wasm.wasmPaths + ) { + ONNX_ENV.wasm.wasmPaths = `https://cdn.jsdelivr.net/npm/@huggingface/transformers@${env.version}/dist/`; } // TODO: Add support for loading WASM files from cached buffer when we upgrade to onnxruntime-web@1.19.0 From 9ecfe9b01b4e53f5653f7f7f15be4c76c207e16b Mon Sep 17 00:00:00 2001 From: Joshua Lochner Date: Thu, 6 Mar 2025 11:20:20 +0000 Subject: [PATCH 4/5] Bump versions --- package-lock.json | 20 ++++++++++---------- package.json | 4 ++-- 2 files changed, 12 insertions(+), 12 deletions(-) diff --git a/package-lock.json b/package-lock.json index 26121305b..f40aac1c3 100644 --- a/package-lock.json +++ b/package-lock.json @@ -1,17 +1,17 @@ { "name": "@huggingface/transformers", - "version": "3.3.3", + "version": "3.4.0", "lockfileVersion": 3, "requires": true, "packages": { "": { "name": "@huggingface/transformers", - "version": "3.3.3", + "version": "3.4.0", "license": "Apache-2.0", "dependencies": { "@huggingface/jinja": "^0.3.3", "onnxruntime-node": "1.20.1", - "onnxruntime-web": "1.21.0-dev.20250206-d981b153d3", + "onnxruntime-web": "1.22.0-dev.20250306-aafa8d170a", "sharp": "^0.33.5" }, "devDependencies": { @@ -8783,23 +8783,23 @@ } }, "node_modules/onnxruntime-web": { - "version": "1.21.0-dev.20250206-d981b153d3", - "resolved": "https://registry.npmjs.org/onnxruntime-web/-/onnxruntime-web-1.21.0-dev.20250206-d981b153d3.tgz", - "integrity": "sha512-esDVQdRic6J44VBMFLumYvcGfioMh80ceLmzF1yheJyuLKq/Th8VT2aj42XWQst+2bcWnAhw4IKmRQaqzU8ugg==", + "version": "1.22.0-dev.20250306-aafa8d170a", + "resolved": "https://registry.npmjs.org/onnxruntime-web/-/onnxruntime-web-1.22.0-dev.20250306-aafa8d170a.tgz", + "integrity": "sha512-g72WvR1IZFVZQe3fp7K4lk5Ka6zEnMkAVc1jpLK5TIzTc2anOIEYzGTjG2t0cM+BRKN2wxSS20zWtYOL+h5C6Q==", "license": "MIT", "dependencies": { "flatbuffers": "^25.1.24", "guid-typescript": "^1.0.9", "long": "^5.2.3", - "onnxruntime-common": "1.21.0-dev.20250206-d981b153d3", + "onnxruntime-common": "1.22.0-dev.20250306-aafa8d170a", "platform": "^1.3.6", "protobufjs": "^7.2.4" } }, "node_modules/onnxruntime-web/node_modules/onnxruntime-common": { - "version": "1.21.0-dev.20250206-d981b153d3", - "resolved": "https://registry.npmjs.org/onnxruntime-common/-/onnxruntime-common-1.21.0-dev.20250206-d981b153d3.tgz", - "integrity": "sha512-TwaE51xV9q2y8pM61q73rbywJnusw9ivTEHAJ39GVWNZqxCoDBpe/tQkh/w9S+o/g+zS7YeeL0I/2mEWd+dgyA==", + "version": "1.22.0-dev.20250306-aafa8d170a", + "resolved": "https://registry.npmjs.org/onnxruntime-common/-/onnxruntime-common-1.22.0-dev.20250306-aafa8d170a.tgz", + "integrity": "sha512-NfIQnW4lIk/8LnhnYqknYPeet0U0+AADgKQRlKex36QrNoVSCY+aNaX6wyy2VzQ4CNWxsYh0E203ajRD/zxn0g==", "license": "MIT" }, "node_modules/open": { diff --git a/package.json b/package.json index dea71fd47..ccc866d16 100644 --- a/package.json +++ b/package.json @@ -1,6 +1,6 @@ { "name": "@huggingface/transformers", - "version": "3.3.3", + "version": "3.4.0", "description": "State-of-the-art Machine Learning for the web. Run 🤗 Transformers directly in your browser, with no need for a server!", "main": "./src/transformers.js", "types": "./types/transformers.d.ts", @@ -57,7 +57,7 @@ "dependencies": { "@huggingface/jinja": "^0.3.3", "onnxruntime-node": "1.20.1", - "onnxruntime-web": "1.21.0-dev.20250206-d981b153d3", + "onnxruntime-web": "1.22.0-dev.20250306-aafa8d170a", "sharp": "^0.33.5" }, "devDependencies": { From a2bf77c62820d67d3d26a023e6d783c6720b5115 Mon Sep 17 00:00:00 2001 From: Joshua Lochner Date: Thu, 6 Mar 2025 14:56:37 +0000 Subject: [PATCH 5/5] Set version correctly for separate PR --- package-lock.json | 4 ++-- package.json | 2 +- 2 files changed, 3 insertions(+), 3 deletions(-) diff --git a/package-lock.json b/package-lock.json index f40aac1c3..61c93aaec 100644 --- a/package-lock.json +++ b/package-lock.json @@ -1,12 +1,12 @@ { "name": "@huggingface/transformers", - "version": "3.4.0", + "version": "3.3.3", "lockfileVersion": 3, "requires": true, "packages": { "": { "name": "@huggingface/transformers", - "version": "3.4.0", + "version": "3.3.3", "license": "Apache-2.0", "dependencies": { "@huggingface/jinja": "^0.3.3", diff --git a/package.json b/package.json index ccc866d16..de519020c 100644 --- a/package.json +++ b/package.json @@ -1,6 +1,6 @@ { "name": "@huggingface/transformers", - "version": "3.4.0", + "version": "3.3.3", "description": "State-of-the-art Machine Learning for the web. Run 🤗 Transformers directly in your browser, with no need for a server!", "main": "./src/transformers.js", "types": "./types/transformers.d.ts",