From c3f301b7993f477a49cbb59eb070f40e48ef24a2 Mon Sep 17 00:00:00 2001 From: Michael Mainguy Date: Sun, 23 Nov 2025 10:44:02 -0600 Subject: [PATCH] Fix Alpine setup to patch transformers backend directly MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Instead of creating a stub onnxruntime-node module, patch the @xenova/transformers backend file to skip the onnxruntime-node import entirely and use only onnxruntime-web. This prevents the "Cannot read properties of undefined" error when the library tries to use the Node backend in a Node.js environment but only has the web backend available. 🤖 Generated with [Claude Code](https://claude.com/claude-code) Co-Authored-By: Claude --- scripts/alpine-setup.sh | 53 ++++++++++++++++++++++++++--------------- 1 file changed, 34 insertions(+), 19 deletions(-) diff --git a/scripts/alpine-setup.sh b/scripts/alpine-setup.sh index 90e8102..ac54a97 100755 --- a/scripts/alpine-setup.sh +++ b/scripts/alpine-setup.sh @@ -1,28 +1,43 @@ #!/bin/sh # Alpine Linux setup script -# Removes onnxruntime-node to prevent glibc dependency errors -# The transformers library will fall back to onnxruntime-web (WASM) +# Patches @xenova/transformers to use onnxruntime-web instead of onnxruntime-node +# This is required for Alpine Linux (musl libc) compatibility -echo "Removing onnxruntime-node for Alpine Linux compatibility..." +echo "Configuring Transformers.js for Alpine Linux (WASM backend)..." -# Remove the onnxruntime-node directory -rm -rf node_modules/onnxruntime-node +# Patch the ONNX backend selector to always use onnxruntime-web +ONNX_BACKEND_FILE="node_modules/@xenova/transformers/src/backends/onnx.js" -# Create a stub module so imports don't fail -mkdir -p node_modules/onnxruntime-node -cat > node_modules/onnxruntime-node/package.json << 'EOF' -{ - "name": "onnxruntime-node", - "version": "0.0.0-stub", - "main": "index.js", - "type": "module" -} +if [ -f "$ONNX_BACKEND_FILE" ]; then + # Backup original file + cp "$ONNX_BACKEND_FILE" "$ONNX_BACKEND_FILE.bak" + + # Replace the backend selection logic to always use ONNX_WEB + cat > "$ONNX_BACKEND_FILE" << 'EOF' +/** + * @file Handler file for choosing the correct version of ONNX Runtime, based on the environment. + * PATCHED FOR ALPINE LINUX: Always uses onnxruntime-web (WASM backend) + * @module backends/onnx + */ + +// Only import onnxruntime-web for Alpine Linux compatibility +import * as ONNX_WEB from 'onnxruntime-web'; + +/** @type {import('onnxruntime-web')} The ONNX runtime module. */ +export let ONNX; + +export const executionProviders = [ + 'wasm' +]; + +// Always use ONNX_WEB (WASM backend) on Alpine Linux +ONNX = ONNX_WEB.default ?? ONNX_WEB; EOF -cat > node_modules/onnxruntime-node/index.js << 'EOF' -// Stub module for Alpine Linux -// @xenova/transformers will use onnxruntime-web instead -export default {}; -EOF + echo "✓ Patched @xenova/transformers backend to use WASM" +else + echo "✗ Could not find $ONNX_BACKEND_FILE" + exit 1 +fi echo "✓ Alpine Linux setup complete - WASM backend will be used"