Views
No views yet
q4: --precision int4 --execution_provider webgpu --extra_options int4_accuracy_level=1 int4_block_size=32 int4_algo_config=rtn enable_webgpu_graph=trueq4f16: --precision int4 --execution_provider webgpu --extra_options int4_accuracy_level=2 int4_block_size=64 int4_algo_config=rtn enable_webgpu_graph=trueGemma3ForCausalLM checkpoint extracted from the language component of the original multimodal model:google/translategemma-4b-itGemma3ForCausalLM (text-only)float16 weightsgoogle/translategemma-4b-it page, similar to google/gemma-3-1b-it)const result = await generator(messages, {....1 try {
2 if (!generator) {
3 // Check WebGPU
4 if (!('gpu' in navigator)) {
5 throw new Error("Worker: WebGPU is not supported in this environment.");
6 }
7
8 generator = await pipeline('text-generation', MODEL_ID, {
9 device: 'webgpu',
10 dtype: 'q4f16', //q4
11 progress_callback: (info: any) => {
12 self.postMessage({
13 type: 'progress',
14 data: info
15 });
16 }
17 }) as unknown as TextGenerationPipeline;
18 }
19
20 self.postMessage({ type: 'ready' });
21 console.log('Worker: Model initialized successfully');
22
23 } catch (error: any) {
24 console.error('Worker: Initialization failed', error);
25 self.postMessage({
26 type: 'error',
27 error: error.message || 'Unknown error during initialization'
28 });
29 }
30}
31
32 try {
33 console.log('Worker: Start translation...');
34
35 const sourceName = "jp-ja";
36 const targetName = "zh-tw";
37
38 const messages = [
39 {
40 role: "system",
41 content: `You are an expert multilingual translator. Your task is to accurately and fluently translate text from ${sourceName} into ${targetName}. Provide ONLY the translated text, without any additional explanations, commentary, or greetings.`
42 },
43 {
44 role: "user",
45 content: `${text}.`
46 //content: `Translate the following to ${targetName}:\n\n${text}.` If there are multiple paragraphs or long texts, use this "content."
47 }
48 ];
49
50 const prompt = generator.tokenizer.apply_chat_template(messages, {
51 tokenize: false,
52 add_generation_prompt: true,
53 }) as string;
54 console.log("Check prompt:", prompt)
55 let buffer = "";
56 const streamer = new TextStreamer(generator.tokenizer, {
57 skip_prompt: true,
58 skip_special_tokens: true,
59 callback_function: (output: string) => {
60 buffer += output;
61
62 if (buffer.length >= 3 || output.includes('。') || output.includes('\n')) {
63 self.postMessage({
64 type: 'update',
65 output: buffer
66 });
67 buffer = "";
68 }
69 }
70 });
71
72 const result = await generator(prompt, {
73 max_new_tokens: 1024,
74 temperature: 0.6,
75 repetition_penalty: 1.1,
76 do_sample: false,
77 return_full_text: false,
78 streamer: streamer,
79 // Gemma 3 EOS ID 7
80 //eos_token_id: [1, 106],
81 //stop_strings: ["<end_of_turn>", "<eos>"],
82 });
83 self.postMessage({ type: 'complete', result });
84 console.log("Print result: ", result);
85 console.log('Worker: Translation complete');
86
87 } catch (error: any) {
88 console.error('Worker: Translation failed', error);
89 self.postMessage({
90 type: 'error',
91 error: error.message || 'Error during translation generation'
92 });
93 }