Skip to content

Commit c0ef0fa

Browse files
authored
Fix the JS code to check the worker environment to cover SharedWorker as well (#22)
* Fix the JS code to check the worker environment to cover SharedWorker as well * Add worker dev script
1 parent 617e58f commit c0ef0fa

File tree

3 files changed

+32
-1
lines changed

3 files changed

+32
-1
lines changed

pyodide-e2e/src/main.ts

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -23,3 +23,4 @@ print("out", out)
2323
`);
2424
}
2525
main();
26+
const worker = new Worker(new URL('./worker.ts', import.meta.url), { type: "module" })

pyodide-e2e/src/worker.ts

Lines changed: 30 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,30 @@
1+
/// <reference lib="webworker" />
2+
3+
console.log("WebWorker started");
4+
5+
import type Pyodide from "pyodide"
6+
7+
import wheelUrl from "transformers-js-py.whl"; // This is the alias from vite.config.ts
8+
9+
import { loadPyodide } from "https://cdn.jsdelivr.net/pyodide/v0.23.4/full/pyodide.mjs";
10+
11+
async function main() {
12+
const pyodide: Pyodide.PyodideInterface = await loadPyodide();
13+
14+
await pyodide.loadPackage("micropip");
15+
const micropip = pyodide.pyimport("micropip");
16+
await micropip.install(wheelUrl);
17+
18+
await pyodide.runPythonAsync(`
19+
from transformers_js import import_transformers_js
20+
transformers = await import_transformers_js()
21+
22+
pipeline = transformers.pipeline
23+
24+
pipe = await pipeline('sentiment-analysis')
25+
out = await pipe('I love transformers!')
26+
print("out", out)
27+
`);
28+
}
29+
30+
main();

transformers_js/__init__.py

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -75,7 +75,7 @@ async def import_transformers_js(version: str = "latest"):
7575
"""
7676
async function loadTransformersJs(version) {
7777
const isBrowserMainThread = typeof window !== 'undefined';
78-
const isWorker = typeof self !== 'undefined' && typeof self.postMessage === 'function' && typeof self.importScripts === 'function';
78+
const isWorker = typeof WorkerGlobalScope !== 'undefined' && self instanceof WorkerGlobalScope;
7979
const isBrowser = isBrowserMainThread || isWorker;
8080
const transformers = await import(isBrowser ? 'https://cdn.jsdelivr.net/npm/@xenova/transformers@' + version : '@xenova/transformers');
8181

0 commit comments

Comments
 (0)