Skip to content

Commit e7c0806

Browse files
authored
[ServiceWorker] Add verbose mode for debugging (#410)
Using service worker sometimes is tricky, especially when you are trying to debug an issue. This PR adds additional `debug` level logs for printing the entire event trace for easier debugging. Broswer console in default logging level: <img width="876" alt="Screenshot 2024-05-22 at 7 51 22 PM" src="https://github.com/mlc-ai/web-llm/assets/23090573/dfc4b477-0e5e-4bb7-abd7-773b045043f4"> Broswer console in verbose logging level: <img width="878" alt="Screenshot 2024-05-22 at 7 51 48 PM" src="https://github.com/mlc-ai/web-llm/assets/23090573/47d085ad-a584-4ffa-890d-07ab892f1e67">
1 parent 373545b commit e7c0806

File tree

2 files changed

+13
-3
lines changed

2 files changed

+13
-3
lines changed

.prettierrc

+3
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,3 @@
1+
{
2+
"trailingComma": "all"
3+
}

src/service_worker.ts

+10-3
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,5 @@
11
import * as tvmjs from "tvmjs";
2-
import { AppConfig, ChatOptions, MLCEngineConfig, ModelRecord } from "./config";
2+
import { AppConfig, ChatOptions, MLCEngineConfig } from "./config";
33
import { ReloadParams, WorkerRequest, WorkerResponse } from "./message";
44
import { MLCEngineInterface, InitProgressReport } from "./types";
55
import {
@@ -40,7 +40,7 @@ export class ServiceWorkerMLCEngineHandler extends MLCEngineWorkerHandler {
4040
>();
4141
private initReuqestUuid?: string;
4242

43-
constructor(engine: MLCEngineInterface, verbose = false) {
43+
constructor(engine: MLCEngineInterface) {
4444
if (!self || !("addEventListener" in self)) {
4545
throw new Error(
4646
"ServiceWorkerGlobalScope is not defined. ServiceWorkerMLCEngineHandler must be created in service worker script.",
@@ -90,6 +90,9 @@ export class ServiceWorkerMLCEngineHandler extends MLCEngineWorkerHandler {
9090
onError?: () => void,
9191
): void {
9292
const msg = event.data as WorkerRequest;
93+
console.debug(
94+
`ServiceWorker message: [${msg.kind}] ${JSON.stringify(msg.content)}`,
95+
);
9396

9497
if (msg.kind === "keepAlive") {
9598
const reply: WorkerRequest = {
@@ -212,7 +215,7 @@ export async function CreateServiceWorkerMLCEngine(
212215
export class ServiceWorkerMLCEngine extends WebWorkerMLCEngine {
213216
missedHeatbeat = 0;
214217

215-
constructor(worker: IServiceWorker, keepAliveMs = 10000, verbose = false) {
218+
constructor(worker: IServiceWorker, keepAliveMs = 10000) {
216219
if (!("serviceWorker" in navigator)) {
217220
throw new Error("Service worker API is not available");
218221
}
@@ -223,6 +226,9 @@ export class ServiceWorkerMLCEngine extends WebWorkerMLCEngine {
223226
"message",
224227
(event: MessageEvent) => {
225228
const msg = event.data;
229+
console.debug(
230+
`MLC client message: [${msg.kind}] ${JSON.stringify(msg.content)}`,
231+
);
226232
try {
227233
if (msg.kind === "heartbeat") {
228234
this.missedHeatbeat = 0;
@@ -241,6 +247,7 @@ export class ServiceWorkerMLCEngine extends WebWorkerMLCEngine {
241247
setInterval(() => {
242248
this.worker.postMessage({ kind: "keepAlive", uuid: crypto.randomUUID() });
243249
this.missedHeatbeat += 1;
250+
console.debug("missedHeatbeat", this.missedHeatbeat);
244251
}, keepAliveMs);
245252
}
246253

0 commit comments

Comments
 (0)