diff --git a/examples/audio-demo/package.json b/examples/audio-demo/package.json index dcbc35d..2dd8082 100644 --- a/examples/audio-demo/package.json +++ b/examples/audio-demo/package.json @@ -12,7 +12,7 @@ "deploy": "gh-pages -d dist" }, "dependencies": { - "@browserai/browserai": "^1.0.13", + "@browserai/browserai": "^1.0.16", "@emotion/styled": "^11.14.0", "@huggingface/transformers": "^3.2.4", "@mlc-ai/web-llm": "^0.2.77", diff --git a/examples/audio-demo/src/components/ChatInterface.tsx b/examples/audio-demo/src/components/ChatInterface.tsx index d8eb1c8..7d2e07a 100644 --- a/examples/audio-demo/src/components/ChatInterface.tsx +++ b/examples/audio-demo/src/components/ChatInterface.tsx @@ -719,7 +719,9 @@ export default function ChatInterface() { const audioLoadStart = performance.now(); setStatus('Loading audio model...'); try { - await audioAIRef.loadModel('whisper-tiny-en'); + await audioAIRef.loadModel('whisper-tiny-en', { + device: 'webgpu' + }); console.log('Audio model loaded successfully'); } catch (error) { console.error('Error loading audio model:', error); @@ -733,7 +735,7 @@ export default function ChatInterface() { const ttsLoadStart = performance.now(); setStatus('Loading TTS model...'); try { - await ttsAIRef.loadModel('speecht5-tts'); + await ttsAIRef.loadModel('kokoro-tts'); console.log('TTS model loaded successfully'); } catch (error) { console.error('Error loading TTS model:', error); diff --git a/examples/tts-demo/package.json b/examples/tts-demo/package.json index d4d2c8e..bc29598 100644 --- a/examples/tts-demo/package.json +++ b/examples/tts-demo/package.json @@ -10,7 +10,7 @@ "preview": "vite preview" }, "dependencies": { - "@browserai/browserai": "^1.0.15", + "@browserai/browserai": "^1.0.16", "@emotion/styled": "^11.14.0", "react": "^18.3.1", "react-dom": "^18.3.1" diff --git a/package.json b/package.json index a1e6538..402817f 100644 --- a/package.json +++ b/package.json @@ -1,6 +1,6 @@ { "name": "@browserai/browserai", - "version": "1.0.15", + "version": "1.0.16", "private": false, "description": "A library for running AI models directly in the browser", "main": "dist/index.js", diff --git a/src/libs/transformers/backends/onnx.ts b/src/libs/transformers/backends/onnx.ts index 1580401..43e26b7 100644 --- a/src/libs/transformers/backends/onnx.ts +++ b/src/libs/transformers/backends/onnx.ts @@ -109,7 +109,6 @@ export async function createInferenceSession( session_options: any, session_config: any ) { - const preferredBackend = session_config.backend || 'webgpu'; if (wasmInitPromise) { // A previous session has already initialized the WASM runtime // so we wait for it to resolve before creating this new session. @@ -142,9 +141,13 @@ if (ONNX_ENV?.wasm) { // 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/`; + + ONNX_ENV.wasm.wasmPaths = { + wasm: `https://cdn.jsdelivr.net/npm/@huggingface/transformers@${env.version}/dist/ort-wasm-simd-threaded.jsep.wasm`, + mjs: `https://cdn.jsdelivr.net/npm/@huggingface/transformers@${env.version}/dist/ort-wasm-simd-threaded.jsep.mjs`, + }; // https://cdn.jsdelivr.net/npm/@huggingface/transformers@3.2.4/dist/ort-wasm-simd-threaded.jsep.wasm - // console.log('ONNX_ENV.wasm.wasmPaths', ONNX_ENV.wasm.wasmPaths); + console.log('ONNX_ENV.wasm.wasmPaths', ONNX_ENV.wasm.wasmPaths); // 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 @@ -152,6 +155,9 @@ if (ONNX_ENV?.wasm) { // However, this is not necessary when using WebGPU, so we default to false. ONNX_ENV.wasm.proxy = false; + // Disable threading to avoid potential issues + ONNX_ENV.wasm.numThreads = 1; + // https://developer.mozilla.org/en-US/docs/Web/API/crossOriginIsolated if (typeof crossOriginIsolated === 'undefined' || !crossOriginIsolated) { ONNX_ENV.wasm.numThreads = 1; @@ -159,6 +165,7 @@ if (ONNX_ENV?.wasm) { } if (ONNX_ENV?.webgpu) { + console.log('ONNX_ENV.webgpu', ONNX_ENV.webgpu); ONNX_ENV.webgpu.powerPreference = 'high-performance'; } diff --git a/src/libs/transformers/backends/ort-wasm-simd-threaded.jsep.wasm b/src/libs/transformers/backends/ort-wasm-simd-threaded.jsep.wasm new file mode 100644 index 0000000..da2b62a Binary files /dev/null and b/src/libs/transformers/backends/ort-wasm-simd-threaded.jsep.wasm differ diff --git a/src/libs/transformers/env.ts b/src/libs/transformers/env.ts index be0e4b4..17cf9b2 100644 --- a/src/libs/transformers/env.ts +++ b/src/libs/transformers/env.ts @@ -25,7 +25,7 @@ import path from 'path'; import url from 'url'; -const VERSION = '3.2.4'; +const VERSION = '3.3.1'; // Check if various APIs are available (depends on environment) const IS_BROWSER_ENV = typeof window !== 'undefined' && typeof window.document !== 'undefined'; diff --git a/vite.config.js b/vite.config.js new file mode 100644 index 0000000..0519ecb --- /dev/null +++ b/vite.config.js @@ -0,0 +1 @@ + \ No newline at end of file