Skip to content

Commit 45d53b7

Browse files
committed
fix: incorrectly fall back to web worker after service worker has initialized
1 parent 160e63a commit 45d53b7

File tree

3 files changed

+23
-17
lines changed

3 files changed

+23
-17
lines changed

app/components/home.tsx

Lines changed: 18 additions & 12 deletions
Original file line numberDiff line numberDiff line change
@@ -6,7 +6,7 @@ import styles from "./home.module.scss";
66

77
import log from "loglevel";
88
import dynamic from "next/dynamic";
9-
import { useState, useEffect } from "react";
9+
import { useState, useEffect, useRef } from "react";
1010
import {
1111
HashRouter as Router,
1212
Routes,
@@ -164,6 +164,19 @@ const useWebLLM = () => {
164164
const [webllm, setWebLLM] = useState<WebLLMApi | undefined>(undefined);
165165
const [isWebllmActive, setWebllmAlive] = useState(false);
166166

167+
const isWebllmInitialized = useRef(false);
168+
169+
// If service worker registration timeout, fall back to web worker
170+
const timeout = setTimeout(() => {
171+
if (!isWebllmInitialized.current && !isWebllmActive && !webllm) {
172+
log.info(
173+
"Service Worker activation is timed out. Falling back to use web worker.",
174+
);
175+
setWebLLM(new WebLLMApi("webWorker", config.logLevel));
176+
setWebllmAlive(true);
177+
}
178+
}, 2_000);
179+
167180
// Initialize WebLLM engine
168181
useEffect(() => {
169182
if ("serviceWorker" in navigator) {
@@ -198,6 +211,8 @@ const useWebLLM = () => {
198211
),
199212
);
200213
setWebllmAlive(true);
214+
isWebllmInitialized.current = true;
215+
clearTimeout(timeout);
201216
}
202217
navigator.serviceWorker.removeEventListener(
203218
"message",
@@ -217,18 +232,9 @@ const useWebLLM = () => {
217232
);
218233
setWebLLM(new WebLLMApi("webWorker", config.logLevel));
219234
setWebllmAlive(true);
235+
isWebllmInitialized.current = true;
236+
clearTimeout(timeout);
220237
}
221-
222-
// If service worker registration timeout
223-
setTimeout(() => {
224-
if (!isWebllmActive && !webllm) {
225-
log.info(
226-
"Service Worker activation is timed out. Falling back to use web worker.",
227-
);
228-
setWebLLM(new WebLLMApi("webWorker", config.logLevel));
229-
setWebllmAlive(true);
230-
}
231-
}, 3_000);
232238
}, []);
233239

234240
if (webllm?.webllm.type === "serviceWorker") {

package.json

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -17,7 +17,7 @@
1717
"dependencies": {
1818
"@fortaine/fetch-event-source": "^3.0.6",
1919
"@hello-pangea/dnd": "^16.5.0",
20-
"@neet-nestor/web-llm": "^0.2.55",
20+
"@neet-nestor/web-llm": "^0.2.56",
2121
"@serwist/next": "^9.0.2",
2222
"@svgr/webpack": "^6.5.1",
2323
"emoji-picker-react": "^4.9.2",

yarn.lock

Lines changed: 4 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -2089,10 +2089,10 @@
20892089
"@jridgewell/resolve-uri" "^3.1.0"
20902090
"@jridgewell/sourcemap-codec" "^1.4.14"
20912091

2092-
"@neet-nestor/web-llm@^0.2.55":
2093-
version "0.2.55"
2094-
resolved "https://registry.yarnpkg.com/@neet-nestor/web-llm/-/web-llm-0.2.55.tgz#56a23faaaa43d1b5a4f63e6b0a54d85e66ebb5a3"
2095-
integrity sha512-J/qKFT8fpVs+Q1z3YJwTZLbWNjZtMZs7A9pUL9ogioI6bYQA/roxKyYkjTtio6x6n63leE+4E+LYOC6bb6OUWw==
2092+
"@neet-nestor/web-llm@^0.2.56":
2093+
version "0.2.56"
2094+
resolved "https://registry.yarnpkg.com/@neet-nestor/web-llm/-/web-llm-0.2.56.tgz#db85a1599dc03a3507825eb1457a4f3a9cec9a46"
2095+
integrity sha512-eCjNyrIVP1YbEqEKi2QkIdenQUOmV3n8bQ/aInv1qr840ppjNoBcCV/K+z2FbXm6ltymeWEhAbNIWI2rxx0j1w==
20962096
dependencies:
20972097
loglevel "^1.9.1"
20982098

0 commit comments

Comments
 (0)