Skip to content

Commit 37d59a0

Browse files
committed
revert: remove all commits after 0f136a7 (back to Gemma 4 Vision tag baseline)
Reverts 80b2204, a5440fc, c1cbbdf, d207965 — restores to 0f136a7 state
1 parent 80b2204 commit 37d59a0

5 files changed

Lines changed: 32 additions & 83 deletions

File tree

ai-worker-gemma4.js

Lines changed: 31 additions & 65 deletions
Original file line numberDiff line numberDiff line change
@@ -25,19 +25,6 @@ let processor = null;
2525
self.postMessage({ type: "status", message: `[Gemma4] Loading transformers.js ${TRANSFORMERS_URL.split('@').pop()}...` });
2626
console.log(`[Gemma4 worker] TRANSFORMERS_URL = ${TRANSFORMERS_URL}`);
2727

28-
// ── Global safety net ────────────────────────────────────────────────────────
29-
// Catch any uncaught async rejection (e.g. from the message handler's async fn)
30-
// and convert it to a postMessage error so the UI shows a readable status
31-
// instead of firing worker.onerror → "AI Worker error: Event".
32-
self.addEventListener('unhandledrejection', (event) => {
33-
const msg = event.reason && event.reason.message
34-
? event.reason.message
35-
: String(event.reason || 'Unknown error in Gemma4 worker');
36-
console.error('[Gemma4 worker] Unhandled rejection:', msg);
37-
self.postMessage({ type: 'error', message: `Gemma 4 worker error: ${msg}` });
38-
event.preventDefault();
39-
});
40-
4128
// ============================================
4229
// Progress callback factory
4330
// ============================================
@@ -86,16 +73,6 @@ async function loadModel() {
8673
read_audio = transformers.read_audio;
8774
TextStreamer = transformers.TextStreamer;
8875

89-
// ── Verify Gemma 4 classes are available in this version ──
90-
if (!Gemma4ForConditionalGeneration || !Gemma4Processor) {
91-
const ver = TRANSFORMERS_URL.split('@').pop();
92-
throw new Error(
93-
`Gemma 4 classes not found in transformers.js@${ver}. ` +
94-
`The loaded version does not support Gemma 4 yet. ` +
95-
`Try clearing site data and reloading.`
96-
);
97-
}
98-
9976
// 2. WebGPU detection
10077
let device = "wasm";
10178
if (typeof navigator !== "undefined" && navigator.gpu) {
@@ -261,47 +238,36 @@ async function generate({ userPrompt, prompt, attachments = [], context, chatHis
261238
self.addEventListener("message", async (event) => {
262239
const { type } = event.data;
263240

264-
try {
265-
switch (type) {
266-
case "setModelId":
267-
MODEL_ID = event.data.modelId || MODEL_ID;
268-
MODEL_LABEL = event.data.modelLabel || MODEL_LABEL;
269-
break;
270-
271-
case "load":
272-
await loadModel();
273-
break;
274-
275-
case "generate":
276-
await generate(event.data);
277-
break;
278-
279-
// Compatibility alias used by ai-docgen-generate.js
280-
case "process":
281-
await generate({
282-
prompt: event.data.prompt || event.data.task,
283-
attachments: event.data.attachments || [],
284-
context: event.data.context,
285-
messageId: event.data.messageId,
286-
options: event.data.options || {},
287-
});
288-
break;
289-
290-
case "ping":
291-
self.postMessage({ type: "pong" });
292-
break;
293-
294-
default:
295-
console.warn("Gemma4 worker — unknown message type:", type);
296-
}
297-
} catch (err) {
298-
// Catch synchronous throws from any case and route them as error messages
299-
// so they don't escape to worker.onerror (which shows generic "Model unavailable")
300-
console.error('[Gemma4 worker] Uncaught in message handler:', err);
301-
self.postMessage({
302-
type: 'error',
303-
message: `Gemma 4 worker error (${type}): ${err.message}`,
304-
messageId: event.data.messageId,
305-
});
241+
switch (type) {
242+
case "setModelId":
243+
MODEL_ID = event.data.modelId || MODEL_ID;
244+
MODEL_LABEL = event.data.modelLabel || MODEL_LABEL;
245+
break;
246+
247+
case "load":
248+
await loadModel();
249+
break;
250+
251+
case "generate":
252+
await generate(event.data);
253+
break;
254+
255+
// Compatibility alias used by ai-docgen-generate.js
256+
case "process":
257+
await generate({
258+
prompt: event.data.prompt || event.data.task,
259+
attachments: event.data.attachments || [],
260+
context: event.data.context,
261+
messageId: event.data.messageId,
262+
options: event.data.options || {},
263+
});
264+
break;
265+
266+
case "ping":
267+
self.postMessage({ type: "pong" });
268+
break;
269+
270+
default:
271+
console.warn("Gemma4 worker — unknown message type:", type);
306272
}
307273
});

changelogs/CHANGELOG-gemma4-worker-classic-fix.md

Lines changed: 0 additions & 5 deletions
This file was deleted.

changelogs/CHANGELOG-gemma4-worker-error-handling.md

Lines changed: 0 additions & 6 deletions
This file was deleted.

js/ai-assistant.js

Lines changed: 1 addition & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -697,11 +697,7 @@
697697
const workerPath = (cfg && cfg.workerFile) || 'ai-worker.js';
698698
// Add cache-buster for local workers in dev mode so edits are always picked up
699699
const workerUrl = workerPath + '?v=' + (window._workerVersion || Date.now());
700-
// Some workers (e.g. gemma4) use dynamic import() of external CDN URLs.
701-
// These MUST be classic workers — module workers in Vite dev mode have their
702-
// imports intercepted by the module bundler, causing CDN imports to fail.
703-
const workerType = (cfg && cfg.workerType) || 'module';
704-
const worker = new Worker(workerUrl, { type: workerType });
700+
const worker = new Worker(workerUrl, { type: 'module' });
705701
ls.worker = worker;
706702

707703
// Send model ID before loading

js/ai-models.js

Lines changed: 0 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -103,7 +103,6 @@
103103
category: 'local-multimodal',
104104
localModelId: 'onnx-community/gemma-4-E2B-it-ONNX',
105105
workerFile: 'ai-worker-gemma4.js',
106-
workerType: 'classic', // Must be classic — uses dynamic import() of CDN URL
107106
downloadSize: '~2 GB',
108107
requiresWebGPU: true,
109108
supportsVision: true,
@@ -125,7 +124,6 @@
125124
category: 'local-multimodal',
126125
localModelId: 'onnx-community/gemma-4-E4B-it-ONNX',
127126
workerFile: 'ai-worker-gemma4.js',
128-
workerType: 'classic', // Must be classic — uses dynamic import() of CDN URL
129127
downloadSize: '~4 GB',
130128
requiresWebGPU: true,
131129
requiresHighEnd: true,

0 commit comments

Comments
 (0)