diff --git a/CHANGELOG.md b/CHANGELOG.md index 76a8d9328..98d9a2c38 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -4,9 +4,15 @@ All notable changes to WebBrain are documented in this file. This changelog was generated from the repository Git history and release tags. Versions without a Git tag are inferred from version-bump commits and the current `package.json` / browser manifest versions. +## [33.1.0] - 2026-08-22 + +### Changed +- Switched to WebBrain VL 2 450M as the local vision fallback. + ## [33.0.8] - 2026-08-20 ### Changed +- Changed the Chrome local vision fallback to the fine-tuned `webbrain-one/webbrain-vl-2-450M-onnx` release, with renewed opt-in consent and a versioned ready marker so older caches cannot be mistaken for the new model. - Added a consent-gated, durable WebBrain Cloud terminal-runtime outbox so executed terminal tool results survive provider-trace export gaps and can be joined through stable de-identified references. - fix: resume vision downloads and organize settings - fix: require vision cache marker and isolate queued worker deadlines diff --git a/docs/apocalypse-mode.md b/docs/apocalypse-mode.md index 508a195fd..ac7004bbc 100644 --- a/docs/apocalypse-mode.md +++ b/docs/apocalypse-mode.md @@ -12,10 +12,10 @@ not enable Apocalypse Mode, query the Kiwix catalog, or store article text. Open the **☢ Apocalypse Mode** link beside **Support** in the Settings header to opt in. -On supported Chromium browsers, local LFM2.5-VL vision is an optional fallback. +On supported Chromium browsers, WebBrain VL 2 450M is an optional local vision fallback. Apocalypse Mode never enables or downloads it. The dedicated **Use local fallback** control in **Settings → Multimodal → Vision** checks WebGPU support, -records explicit consent, and starts caching the approximately 770 MB model +records explicit consent, and starts caching the approximately 810 MB model from Hugging Face. The download continues in the background, but screenshot operations report its status and never wait for it. Wikipedia archives still require their own confirmation. The local **text** model defaults to LFM2.5 diff --git a/docs/providers-and-models.md b/docs/providers-and-models.md index d202fae1e..bd4d64efd 100644 --- a/docs/providers-and-models.md +++ b/docs/providers-and-models.md @@ -428,13 +428,13 @@ const vision = await providerManager.getVisionProvider(); ``` On Chromium, **Settings -> Multimodal -> Vision** also offers a one-click -in-browser fallback. It runs `LiquidAI/LFM2.5-VL-450M-ONNX` through WebGPU in a +in-browser fallback. It runs `webbrain-one/webbrain-vl-2-450M-onnx` through WebGPU in a dedicated Worker with FP16 embeddings/vision encoder and a Q4 decoder. The model is not present in the general provider catalog and never receives agent tools or planning turns. Local vision is disabled by default and neither Apocalypse Mode nor a screenshot operation can enable it or start its download. The dedicated control probes WebGPU, records versioned consent, and then downloads -approximately 770 MB of model data from Hugging Face into the browser cache. The download runs in Chrome's +approximately 810 MB of model data from Hugging Face into the browser cache. The download runs in Chrome's offscreen extension worker, so the user may switch tabs or close Settings while it continues, but must keep Chrome running. Screenshots stay on-device and only the generated description is passed to the active provider. The local diff --git a/docs/remote-downloads.md b/docs/remote-downloads.md index 028a1b8ef..12539fca8 100644 --- a/docs/remote-downloads.md +++ b/docs/remote-downloads.md @@ -23,7 +23,7 @@ WebBrain is designed to minimize remote network dependencies. All downloads fall | Component | Remote Server / Origin | Origin Description | Typical Size | Protocol / Method | Checksum & Integrity | Local Storage Destination | | :--- | :--- | :--- | :--- | :--- | :--- | :--- | | **WebGPU Text Model** | `huggingface.co` / Hugging Face CDN | Official Hugging Face model repository hosting ONNX / SafeTensors weights (e.g., SmolLM2, Llama-3.2) | ~1.5 – 2.5 GB | HTTPS GET (Transformers.js pipeline) | Hugging Face Git LFS SHA-256 hash | Browser Cache API & IndexedDB (`transformers-cache`) | -| **Local Vision Model** | `huggingface.co` / Hugging Face CDN | ONNX weights for local screenshot description and UI analysis (LFM2.5-VL / SmolVLM) | ~770 MB | HTTPS GET (Transformers.js pipeline) | Hugging Face Git LFS SHA-256 hash | Browser Cache API & IndexedDB (`transformers-cache`) | +| **Local Vision Model** | `huggingface.co` / Hugging Face CDN | `webbrain-one/webbrain-vl-2-450M-onnx` weights for local screenshot description and UI analysis | ~810 MB | HTTPS GET (Transformers.js pipeline) | Hugging Face Git LFS SHA-256 hash | Browser Cache API & IndexedDB (`transformers-cache`) | | **Emergency Text Pack & SQLite Index** | `github.com/webbrain-one/emergency-box-corpus` (GitHub Releases CDN) | Release assets for curated public-domain field references, prebuilt SQLite FTS5 database, and precomputed E5 embeddings | ~245 MB (compressed ZIP) | Resumable HTTP `Range: bytes={offset}-` streaming fetch | Strict **SHA-256** hash comparison against hardcoded release descriptor before activation | OPFS (`webbrain-offline-rag/emergency-box-text/`) & IndexedDB (`webbrain_offline_rag`) | | **Multilingual Semantic Model** | `huggingface.co` / Hugging Face CDN (`Xenova/multilingual-e5-small`) | ONNX weights for multilingual query embedding and vector search / candidate reranking | ~134 MB | HTTPS GET (ONNX Runtime Web / Transformers.js) | SHA-256 verification via Transformers.js manifest | Browser Cache API & IndexedDB (`transformers-cache`) | | **Wikipedia ZIM Archive** | `library.kiwix.org` / `download.kiwix.org` / Wikimedia Mirrors | Kiwix openZIM archives containing compressed Wikipedia editions (e.g. Simple English) | ~50 MB – 50+ GB | Metalink XML resolution + piece-by-piece chunked HTTPS download | Chunked **SHA-256** piece verification per Metalink block boundaries | OPFS (`webbrain_apocalypse_mode`) | @@ -41,7 +41,7 @@ When a user turns on **Apocalypse Mode** (or opens `apocalypse-mode.html` with A flowchart TD A["User enables Apocalypse Mode"] --> B["1. Parallel Auto-Downloads Start"] B --> C["WebGPU Text Model (~1.5-2.5 GB)
Hugging Face CDN"] - B --> D["Local Vision Model (~770 MB)
Hugging Face CDN"] + B --> D["Local Vision Model (~810 MB)
Hugging Face CDN"] B --> E["Emergency Text Pack (~245-502 MB)
GitHub Releases CDN"] B --> F["Multilingual E5 Semantic Model (~134 MB)
Hugging Face CDN"] B --> G["Simple English Wikipedia ZIM (~50-100 MB)
Kiwix / Wikimedia Mirrors"] @@ -62,7 +62,7 @@ flowchart TD │ ├─► 2. Parallel Background Downloads (Active Tab + Service Worker / Offscreen): │ ├── [WebGPU Text Model] (Offscreen document, ~1.5-2.5 GB from Hugging Face) - │ ├── [Local Vision Model] (Offscreen document, ~770 MB from Hugging Face) + │ ├── [Local Vision Model] (Offscreen document, ~810 MB from Hugging Face) │ ├── [Emergency Text Pack] (Tab stream, ~245 MB from GitHub Releases) │ │ └── Verify SHA-256 ──► Extract ZIP ──► Register SQLite FTS5 in OPFS SAH-pool │ ├── [Multilingual E5 Semantic Model] (Tab stream, ~134 MB from Hugging Face) diff --git a/package-lock.json b/package-lock.json index 4cecc2a06..80cec09e6 100644 --- a/package-lock.json +++ b/package-lock.json @@ -1,12 +1,12 @@ { "name": "webbrain", - "version": "33.0.8", + "version": "33.1.0", "lockfileVersion": 3, "requires": true, "packages": { "": { "name": "webbrain", - "version": "33.0.8", + "version": "33.1.0", "license": "GPL-3.0-or-later", "devDependencies": { "playwright": "^1.48.0", diff --git a/package.json b/package.json index 6eda42cb9..e06002ef6 100644 --- a/package.json +++ b/package.json @@ -1,6 +1,6 @@ { "name": "webbrain", - "version": "33.0.8", + "version": "33.1.0", "description": "Open-source AI browser agent \u2014 chat with pages, automate tasks, multi-provider LLM support.", "private": true, "type": "module", diff --git a/src/chrome/ARCHITECTURE.md b/src/chrome/ARCHITECTURE.md index ce77d8cc4..519eb7b59 100644 --- a/src/chrome/ARCHITECTURE.md +++ b/src/chrome/ARCHITECTURE.md @@ -1,6 +1,6 @@ # WebBrain Chrome/Edge Extension — Architecture -> Version 33.0.8 · Manifest V3 · Service Worker background +> Version 33.1.0 · Manifest V3 · Service Worker background ## High-Level Overview diff --git a/src/chrome/manifest.json b/src/chrome/manifest.json index 7414a40dc..a24ab1edb 100644 --- a/src/chrome/manifest.json +++ b/src/chrome/manifest.json @@ -1,7 +1,7 @@ { "manifest_version": 3, "name": "WebBrain", - "version": "33.0.8", + "version": "33.1.0", "description": "Open-source AI browser agent — chat with pages, automate tasks, multi-provider LLM support.", "permissions": [ "sidePanel", diff --git a/src/chrome/src/offscreen/inference-worker.js b/src/chrome/src/offscreen/inference-worker.js index c5453daba..da300ee6b 100644 --- a/src/chrome/src/offscreen/inference-worker.js +++ b/src/chrome/src/offscreen/inference-worker.js @@ -26,6 +26,8 @@ const WEBGPU_TEXT_MAX_NEW_TOKENS = 256; const WEBGPU_LFM25_MODEL_ID = 'LiquidAI/LFM2.5-2.6B-ONNX'; const WEBGPU_BONSAI27_MODEL_ID = 'prism-ml/Bonsai-27B-gguf'; const WEBGPU_LFM25_MAX_NEW_TOKENS = 2048; +const WEBGPU_VISION_READY_MARKER_VERSION = 2; +const WEBGPU_VISION_READY_MARKER_PREFIX = 'https://webbrain.one/.well-known/webgpu-vision-ready/'; function createWebGpuTextSessionOptions() { return { extra: { @@ -127,7 +129,14 @@ function fetchTargetsActiveVisionModel(input) { } function visionReadyMarkerUrl(modelId) { - return `https://webbrain.one/.well-known/webgpu-vision-ready/${encodeURIComponent(String(modelId || '').trim())}`; + return `${WEBGPU_VISION_READY_MARKER_PREFIX}v${WEBGPU_VISION_READY_MARKER_VERSION}/${encodeURIComponent(String(modelId || '').trim())}`; +} + +function isVisionReadyMarkerForModel(url, modelId) { + const candidate = String(url || ''); + const encodedModelId = encodeURIComponent(String(modelId || '').trim()); + return candidate.startsWith(WEBGPU_VISION_READY_MARKER_PREFIX) + && candidate.endsWith(`/${encodedModelId}`); } async function isVisionModelCached(modelId) { @@ -151,7 +160,10 @@ async function markVisionModelReady(modelId) { const normalized = String(modelId || '').trim(); if (!normalized || typeof caches === 'undefined') return; const cache = await caches.open(TRANSFORMERS_CACHE_NAME); - await cache.put(visionReadyMarkerUrl(normalized), new Response(JSON.stringify({ modelId: normalized }), { + await cache.put(visionReadyMarkerUrl(normalized), new Response(JSON.stringify({ + modelId: normalized, + markerVersion: WEBGPU_VISION_READY_MARKER_VERSION, + }), { headers: { 'content-type': 'application/json' }, })); } @@ -1083,7 +1095,7 @@ export async function clearVisionModelCache(modelId) { const cache = await caches.open(name); for (const request of await cache.keys()) { const url = safeDecodedUrl(request.url); - if (url.includes(modelPath) || request.url === markerUrl) { + if (url.includes(modelPath) || isVisionReadyMarkerForModel(request.url, normalizedModelId)) { if (await cache.delete(request)) deletedEntries++; } } diff --git a/src/chrome/src/providers/manager.js b/src/chrome/src/providers/manager.js index 2a4cd6234..302a7be80 100644 --- a/src/chrome/src/providers/manager.js +++ b/src/chrome/src/providers/manager.js @@ -1214,7 +1214,7 @@ export class ProviderManager { } } - /** Return the Chrome-only LiquidAI fallback, but only when explicitly enabled and ready. */ + /** Return the Chrome-only WebBrain VL fallback, but only when explicitly enabled and ready. */ async getLocalVisionFallbackProvider() { try { const readiness = await this.getWebgpuVisionReadiness(); diff --git a/src/chrome/src/providers/webgpu.js b/src/chrome/src/providers/webgpu.js index 7f3b0fef8..17a8c21a8 100644 --- a/src/chrome/src/providers/webgpu.js +++ b/src/chrome/src/providers/webgpu.js @@ -3,7 +3,7 @@ import { BaseLLMProvider } from './base.js'; import { ensureOffscreen } from '../offscreen/ensure.js'; -export const WEBGPU_VISION_MODEL_ID = 'LiquidAI/LFM2.5-VL-450M-ONNX'; +export const WEBGPU_VISION_MODEL_ID = 'webbrain-one/webbrain-vl-2-450M-onnx'; export const WEBGPU_MODEL_ID = 'LiquidAI/LFM2.5-2.6B-ONNX'; export const WEBGPU_LFM25_MODEL_ID = WEBGPU_MODEL_ID; export const WEBGPU_BONSAI27_MODEL_ID = 'prism-ml/Bonsai-27B-gguf'; @@ -40,9 +40,10 @@ export const WEBGPU_VISION_ENABLED_KEY = 'webgpuVisionEnabled'; // remove selections made automatically by older Apocalypse Mode builds. export const WEBGPU_VISION_AUTO_SELECTED_KEY = 'webgpuVisionAutoSelected'; export const WEBGPU_VISION_CONSENT_VERSION_KEY = 'webgpuVisionConsentVersion'; -export const WEBGPU_VISION_CONSENT_VERSION = 1; +export const WEBGPU_VISION_CONSENT_VERSION = 2; export const WEBGPU_VISION_DOWNLOAD_STATE_KEY = 'webgpuVisionDownloadState'; export const WEBGPU_VISION_DOWNLOAD_STATE_MESSAGE = 'webgpu-vision-download-state'; +export const WEBGPU_VISION_READY_MARKER_VERSION = 2; export const WEBGPU_WORKER_INIT_TIMEOUT_MS = 15_000; export const WEBGPU_VISION_INFERENCE_TIMEOUT_MS = 90_000; export const WEBGPU_VISION_DTYPE = Object.freeze({ @@ -52,7 +53,7 @@ export const WEBGPU_VISION_DTYPE = Object.freeze({ }); export function webgpuVisionReadyMarkerUrl(modelId = WEBGPU_VISION_MODEL_ID) { - return `https://webbrain.one/.well-known/webgpu-vision-ready/${encodeURIComponent(String(modelId || '').trim())}`; + return `https://webbrain.one/.well-known/webgpu-vision-ready/v${WEBGPU_VISION_READY_MARKER_VERSION}/${encodeURIComponent(String(modelId || '').trim())}`; } /** diff --git a/src/chrome/src/ui/apocalypse-mode.html b/src/chrome/src/ui/apocalypse-mode.html index aa9e14d59..ef262c6ea 100644 --- a/src/chrome/src/ui/apocalypse-mode.html +++ b/src/chrome/src/ui/apocalypse-mode.html @@ -179,7 +179,7 @@

-
~770 MB · WebGPU
+
~810 MB · WebGPU

diff --git a/src/chrome/src/ui/locales/ar.js b/src/chrome/src/ui/locales/ar.js index d4b10bf24..e4de160f1 100644 --- a/src/chrome/src/ui/locales/ar.js +++ b/src/chrome/src/ui/locales/ar.js @@ -319,8 +319,8 @@ export default { 'st.provider.field.model_loaded_hint': 'اتركه فارغًا لاستخدام النموذج المُحمَّل', 'st.vision.desc': 'إذا تم تعيينه، تُرسَل لقطات الشاشة إلى هذا النموذج لقراءة الصفحة، بينما يتولّى المزوّد النشط التخطيط واستدعاءات الأدوات. اتركه فارغًا لاستخدام المزوّد النشط للرؤية أيضًا. نقاط نهاية متوافقة مع OpenAI فقط.', - 'st.vision.local.title': 'بديل محلي لـ LFM2.5-VL', - "st.vision.local.desc": "يشغّل LiquidAI/LFM2.5-VL-450M-ONNX على معالج الرسومات لديك، وتبقى لقطات الشاشة على هذا الجهاز. يؤدي اختيار «استخدام البديل المحلي» إلى فحص WebGPU وتسجيل موافقتك وبدء تنزيل نحو 770 ميغابايت من Hugging Face في الخلفية. تعرض المهام الحالة ولا تنتظر اكتمال التنزيل؛ أبقِ Chrome مفتوحًا.", + 'st.vision.local.title': 'بديل محلي لـ WebBrain VL 2 450M', + "st.vision.local.desc": "يشغّل webbrain-one/webbrain-vl-2-450M-onnx على معالج الرسومات لديك، وتبقى لقطات الشاشة على هذا الجهاز. يؤدي اختيار «استخدام البديل المحلي» إلى فحص WebGPU وتسجيل موافقتك وبدء تنزيل نحو 810 ميغابايت من Hugging Face في الخلفية. تعرض المهام الحالة ولا تنتظر اكتمال التنزيل؛ أبقِ Chrome مفتوحًا.", 'st.vision.local.enable': 'استخدام البديل المحلي', 'st.vision.local.disable': 'تعطيل البديل المحلي', 'st.vision.local.saved': 'تم تفعيل بديل الرؤية المحلي.', diff --git a/src/chrome/src/ui/locales/bn.js b/src/chrome/src/ui/locales/bn.js index c9de0f2f4..2a443b195 100644 --- a/src/chrome/src/ui/locales/bn.js +++ b/src/chrome/src/ui/locales/bn.js @@ -791,8 +791,8 @@ export default { 'st.vision.heading': "দৃষ্টি", 'st.vision.desc': "সেট করা থাকলে, পৃষ্ঠা পড়ার জন্য এই মডেলে স্ক্রিনশট পাঠানো হয়, যখন সক্রিয় প্রদানকারী পরিকল্পনা এবং টুল কল পরিচালনা করে। দৃষ্টির জন্যও সক্রিয় প্রদানকারী ব্যবহার করতে ফাঁকা রাখুন। শুধুমাত্র OpenAI- সামঞ্জস্যপূর্ণ শেষ পয়েন্ট।", - 'st.vision.local.title': 'LFM2.5-VL-এর স্থানীয় বিকল্প', - "st.vision.local.desc": "আপনার GPU-তে LiquidAI/LFM2.5-VL-450M-ONNX চালায় এবং স্ক্রিনশট এই ডিভাইসেই রাখে। “স্থানীয় বিকল্প ব্যবহার করুন” নির্বাচন করলে WebGPU পরীক্ষা হয়, আপনার সম্মতি নথিভুক্ত হয় এবং Hugging Face থেকে প্রায় 770 MB ব্যাকগ্রাউন্ড ডাউনলোড শুরু হয়। কাজগুলো অবস্থা দেখায়, ডাউনলোডের জন্য অপেক্ষা করে না; Chrome খোলা রাখুন।", + 'st.vision.local.title': 'WebBrain VL 2 450M-এর স্থানীয় বিকল্প', + "st.vision.local.desc": "আপনার GPU-তে webbrain-one/webbrain-vl-2-450M-onnx চালায় এবং স্ক্রিনশট এই ডিভাইসেই রাখে। “স্থানীয় বিকল্প ব্যবহার করুন” নির্বাচন করলে WebGPU পরীক্ষা হয়, আপনার সম্মতি নথিভুক্ত হয় এবং Hugging Face থেকে প্রায় 810 MB ব্যাকগ্রাউন্ড ডাউনলোড শুরু হয়। কাজগুলো অবস্থা দেখায়, ডাউনলোডের জন্য অপেক্ষা করে না; Chrome খোলা রাখুন।", 'st.vision.local.enable': 'স্থানীয় বিকল্প ব্যবহার করুন', 'st.vision.local.disable': 'স্থানীয় বিকল্প বন্ধ করুন', 'st.vision.local.saved': 'স্থানীয় ভিশন বিকল্প চালু হয়েছে।', diff --git a/src/chrome/src/ui/locales/de.js b/src/chrome/src/ui/locales/de.js index be3234b6f..7a6a95789 100644 --- a/src/chrome/src/ui/locales/de.js +++ b/src/chrome/src/ui/locales/de.js @@ -731,8 +731,8 @@ export default { // --- Vision settings --- 'st.vision.heading': 'Vision', 'st.vision.desc': 'Wenn gesetzt, werden Screenshots an dieses Modell gesendet, um die Seite zu lesen...', - 'st.vision.local.title': 'Lokale LFM2.5-VL-Ausweichlösung', - "st.vision.local.desc": "Führt LiquidAI/LFM2.5-VL-450M-ONNX auf deiner GPU aus; Screenshots bleiben auf diesem Gerät. „Lokale Ausweichlösung verwenden“ prüft WebGPU, protokolliert deine Einwilligung und startet einen Hintergrunddownload von etwa 770 MB von Hugging Face. Aufgaben zeigen den Status an und warten nicht auf den Download; Chrome muss geöffnet bleiben.", + 'st.vision.local.title': 'Lokale WebBrain VL 2 450M-Ausweichlösung', + "st.vision.local.desc": "Führt webbrain-one/webbrain-vl-2-450M-onnx auf deiner GPU aus; Screenshots bleiben auf diesem Gerät. „Lokale Ausweichlösung verwenden“ prüft WebGPU, protokolliert deine Einwilligung und startet einen Hintergrunddownload von etwa 810 MB von Hugging Face. Aufgaben zeigen den Status an und warten nicht auf den Download; Chrome muss geöffnet bleiben.", 'st.vision.local.enable': 'Lokale Ausweichlösung verwenden', 'st.vision.local.disable': 'Lokale Ausweichlösung deaktivieren', 'st.vision.local.saved': 'Lokale Ausweichlösung für Bilderkennung aktiviert.', diff --git a/src/chrome/src/ui/locales/en.js b/src/chrome/src/ui/locales/en.js index 743475f20..8bffb1590 100644 --- a/src/chrome/src/ui/locales/en.js +++ b/src/chrome/src/ui/locales/en.js @@ -792,8 +792,8 @@ export default { 'st.vision.heading': 'Vision', 'st.vision.desc': 'Choose a separate model to read screenshots while the active provider handles planning and tool calls. Leave both options unset to use the active provider for vision.', - 'st.vision.local.title': 'LFM2.5-VL local fallback', - "st.vision.local.desc": "Runs LiquidAI/LFM2.5-VL-450M-ONNX on your GPU. Screenshots stay on this device. Selecting “Use local fallback” checks WebGPU, records your consent, and starts an approximately 770 MB background download from Hugging Face. Tasks report its status and never wait for it; keep Chrome open.", + 'st.vision.local.title': 'WebBrain VL 2 450M local fallback', + "st.vision.local.desc": "Runs webbrain-one/webbrain-vl-2-450M-onnx on your GPU. Screenshots stay on this device. Selecting “Use local fallback” checks WebGPU, records your consent, and starts an approximately 810 MB background download from Hugging Face. Tasks report its status and never wait for it; keep Chrome open.", 'st.vision.local.enable': 'Use local fallback', 'st.vision.local.disable': 'Disable local fallback', 'st.vision.local.saved': 'Local vision fallback enabled.', diff --git a/src/chrome/src/ui/locales/es.js b/src/chrome/src/ui/locales/es.js index 6a72cc899..99235a1b4 100644 --- a/src/chrome/src/ui/locales/es.js +++ b/src/chrome/src/ui/locales/es.js @@ -319,8 +319,8 @@ export default { 'st.provider.field.model_loaded_hint': 'déjalo en blanco para usar el modelo cargado', 'st.vision.desc': 'Si se define, las capturas de pantalla se envían a este modelo para leer la página, mientras el proveedor activo se encarga de la planificación y las llamadas a herramientas. Déjalo en blanco para usar también el proveedor activo para la visión. Solo endpoints compatibles con OpenAI.', - 'st.vision.local.title': 'Alternativa local LFM2.5-VL', - "st.vision.local.desc": "Ejecuta LiquidAI/LFM2.5-VL-450M-ONNX en tu GPU; las capturas permanecen en este dispositivo. Al seleccionar «Usar alternativa local» se comprueba WebGPU, se registra tu consentimiento y se inicia una descarga en segundo plano de unos 770 MB desde Hugging Face. Las tareas muestran el estado y no esperan la descarga; mantén Chrome abierto.", + 'st.vision.local.title': 'Alternativa local WebBrain VL 2 450M', + "st.vision.local.desc": "Ejecuta webbrain-one/webbrain-vl-2-450M-onnx en tu GPU; las capturas permanecen en este dispositivo. Al seleccionar «Usar alternativa local» se comprueba WebGPU, se registra tu consentimiento y se inicia una descarga en segundo plano de unos 810 MB desde Hugging Face. Las tareas muestran el estado y no esperan la descarga; mantén Chrome abierto.", 'st.vision.local.enable': 'Usar alternativa local', 'st.vision.local.disable': 'Desactivar alternativa local', 'st.vision.local.saved': 'Alternativa local de visión activada.', diff --git a/src/chrome/src/ui/locales/fa.js b/src/chrome/src/ui/locales/fa.js index 71745128b..c67c15e51 100644 --- a/src/chrome/src/ui/locales/fa.js +++ b/src/chrome/src/ui/locales/fa.js @@ -791,8 +791,8 @@ export default { 'st.vision.heading': "چشم انداز", 'st.vision.desc': "در صورت تنظیم، اسکرین شات ها برای خواندن صفحه به این مدل ارسال می شود، در حالی که ارائه دهنده فعال برنامه ریزی و تماس های ابزار را مدیریت می کند. برای استفاده از ارائه دهنده فعال برای بینایی نیز خالی بگذارید. فقط نقاط پایانی سازگار با OpenAI.", - 'st.vision.local.title': 'جایگزین محلی LFM2.5-VL', - "st.vision.local.desc": "LiquidAI/LFM2.5-VL-450M-ONNX را روی GPU شما اجرا می‌کند و تصاویر صفحه را در همین دستگاه نگه می‌دارد. انتخاب «استفاده از جایگزین محلی» WebGPU را بررسی می‌کند، رضایت شما را ثبت می‌کند و دانلود پس‌زمینه حدود 770 مگابایت از Hugging Face را آغاز می‌کند. کارها وضعیت را نشان می‌دهند و منتظر دانلود نمی‌مانند؛ Chrome را باز نگه دارید.", + 'st.vision.local.title': 'جایگزین محلی WebBrain VL 2 450M', + "st.vision.local.desc": "webbrain-one/webbrain-vl-2-450M-onnx را روی GPU شما اجرا می‌کند و تصاویر صفحه را در همین دستگاه نگه می‌دارد. انتخاب «استفاده از جایگزین محلی» WebGPU را بررسی می‌کند، رضایت شما را ثبت می‌کند و دانلود پس‌زمینه حدود 810 مگابایت از Hugging Face را آغاز می‌کند. کارها وضعیت را نشان می‌دهند و منتظر دانلود نمی‌مانند؛ Chrome را باز نگه دارید.", 'st.vision.local.enable': 'استفاده از جایگزین محلی', 'st.vision.local.disable': 'غیرفعال‌کردن جایگزین محلی', 'st.vision.local.saved': 'جایگزین محلی بینایی فعال شد.', diff --git a/src/chrome/src/ui/locales/fr.js b/src/chrome/src/ui/locales/fr.js index e0e3427d8..269cb6015 100644 --- a/src/chrome/src/ui/locales/fr.js +++ b/src/chrome/src/ui/locales/fr.js @@ -319,8 +319,8 @@ export default { 'st.provider.field.model_loaded_hint': 'laisser vide pour utiliser le modèle chargé', 'st.vision.desc': 'Si défini, les captures d\'écran sont envoyées à ce modèle pour lire la page, pendant que le fournisseur actif gère la planification et les appels d\'outils. Laissez vide pour utiliser également le fournisseur actif pour la vision. Uniquement pour les endpoints compatibles OpenAI.', - 'st.vision.local.title': 'Solution de secours locale LFM2.5-VL', - "st.vision.local.desc": "Exécute LiquidAI/LFM2.5-VL-450M-ONNX sur votre GPU ; les captures restent sur cet appareil. Sélectionner « Utiliser la solution de secours locale » vérifie WebGPU, enregistre votre consentement et lance un téléchargement d’environ 770 Mo depuis Hugging Face en arrière-plan. Les tâches affichent son état sans l’attendre ; laissez Chrome ouvert.", + 'st.vision.local.title': 'Solution de secours locale WebBrain VL 2 450M', + "st.vision.local.desc": "Exécute webbrain-one/webbrain-vl-2-450M-onnx sur votre GPU ; les captures restent sur cet appareil. Sélectionner « Utiliser la solution de secours locale » vérifie WebGPU, enregistre votre consentement et lance un téléchargement d’environ 810 Mo depuis Hugging Face en arrière-plan. Les tâches affichent son état sans l’attendre ; laissez Chrome ouvert.", 'st.vision.local.enable': 'Utiliser la solution de secours locale', 'st.vision.local.disable': 'Désactiver la solution de secours locale', 'st.vision.local.saved': 'Solution de secours locale pour la vision activée.', diff --git a/src/chrome/src/ui/locales/he.js b/src/chrome/src/ui/locales/he.js index b0b6fcaf1..22f385b73 100644 --- a/src/chrome/src/ui/locales/he.js +++ b/src/chrome/src/ui/locales/he.js @@ -702,8 +702,8 @@ export default { "st.provider.field.bedrock_model_id": "מזהה מודל Bedrock", "st.vision.heading": "ראייה", "st.vision.desc": "אם הוגדר, צילומי מסך נשלחים למודל זה לקריאת הדף, בעוד הספק הפעיל מטפל בתכנון ובשיחות כלי עבודה. השאר ריק כדי להשתמש בספק הפעיל גם לראייה. OpenAI-נקודות קצה תואמות בלבד.", - "st.vision.local.title": "LFM2.5-VL local fallback", - "st.vision.local.desc": "מפעיל את LiquidAI/LFM2.5-VL-450M-ONNX ב-GPU שלך ושומר את צילומי המסך במכשיר. בחירה ב„שימוש בחלופה המקומית” בודקת WebGPU, מתעדת את הסכמתך ומתחילה הורדה ברקע של כ-770 MB מ-Hugging Face. המשימות מציגות את המצב ואינן ממתינות להורדה; יש להשאיר את Chrome פתוח.", + "st.vision.local.title": "WebBrain VL 2 450M local fallback", + "st.vision.local.desc": "מפעיל את webbrain-one/webbrain-vl-2-450M-onnx ב-GPU שלך ושומר את צילומי המסך במכשיר. בחירה ב„שימוש בחלופה המקומית” בודקת WebGPU, מתעדת את הסכמתך ומתחילה הורדה ברקע של כ-810 MB מ-Hugging Face. המשימות מציגות את המצב ואינן ממתינות להורדה; יש להשאיר את Chrome פתוח.", "st.vision.local.enable": "Use local fallback", "st.vision.local.disable": "Disable local fallback", "st.vision.local.saved": "Local vision fallback enabled.", @@ -1031,8 +1031,8 @@ export default { "st.sync.confirm.reset": "האם להחליף את עותק הענן המוצפן בהגדרות WebBrain הנוכחיות של המכשיר הזה?", "st.sync.consent.legacy": "להפעיל סנכרון מוצפן? WebBrain ישדר עותק מוצפן מקצה לקצה של הזיכרונות, המילוי האוטומטי של הפרופיל והגדרות ספק מפתח ה-API שלך ל-WebBrain Cloud. היסטוריית הצ'אט וכניסות OAuth אינן מסונכרנות.", "st.sync.consent.denied": "הרשאת סנכרון מוצפן לא ניתנה.", - 'st.vision.local.title': 'חלופה מקומית של LFM2.5-VL', - "st.vision.local.desc": "מפעיל את LiquidAI/LFM2.5-VL-450M-ONNX ב-GPU שלך ושומר את צילומי המסך במכשיר. בחירה ב„שימוש בחלופה המקומית” בודקת WebGPU, מתעדת את הסכמתך ומתחילה הורדה ברקע של כ-770 MB מ-Hugging Face. המשימות מציגות את המצב ואינן ממתינות להורדה; יש להשאיר את Chrome פתוח.", + 'st.vision.local.title': 'חלופה מקומית של WebBrain VL 2 450M', + "st.vision.local.desc": "מפעיל את webbrain-one/webbrain-vl-2-450M-onnx ב-GPU שלך ושומר את צילומי המסך במכשיר. בחירה ב„שימוש בחלופה המקומית” בודקת WebGPU, מתעדת את הסכמתך ומתחילה הורדה ברקע של כ-810 MB מ-Hugging Face. המשימות מציגות את המצב ואינן ממתינות להורדה; יש להשאיר את Chrome פתוח.", 'st.vision.local.enable': 'שימוש בחלופה המקומית', 'st.vision.local.disable': 'השבתת החלופה המקומית', 'st.vision.local.saved': 'חלופת הראייה המקומית הופעלה.', diff --git a/src/chrome/src/ui/locales/hi.js b/src/chrome/src/ui/locales/hi.js index 853970814..6d33b2a05 100644 --- a/src/chrome/src/ui/locales/hi.js +++ b/src/chrome/src/ui/locales/hi.js @@ -791,8 +791,8 @@ export default { 'st.vision.heading': "दृष्टि", 'st.vision.desc': "यदि सेट किया जाता है, तो पृष्ठ को पढ़ने के लिए स्क्रीनशॉट इस मॉडल पर भेजे जाते हैं, जबकि सक्रिय प्रदाता योजना और टूल कॉल को संभालता है। दृष्टि के लिए भी सक्रिय प्रदाता का उपयोग करने के लिए खाली छोड़ दें। केवल OpenAI-संगत समापन बिंदु।", - 'st.vision.local.title': 'LFM2.5-VL स्थानीय विकल्प', - "st.vision.local.desc": "आपके GPU पर LiquidAI/LFM2.5-VL-450M-ONNX चलाता है और स्क्रीनशॉट इसी डिवाइस पर रखता है। “स्थानीय विकल्प इस्तेमाल करें” चुनने से WebGPU की जाँच होती है, आपकी सहमति दर्ज होती है और Hugging Face से लगभग 770 MB का बैकग्राउंड डाउनलोड शुरू होता है। कार्य स्थिति दिखाते हैं और डाउनलोड की प्रतीक्षा नहीं करते; Chrome खुला रखें।", + 'st.vision.local.title': 'WebBrain VL 2 450M स्थानीय विकल्प', + "st.vision.local.desc": "आपके GPU पर webbrain-one/webbrain-vl-2-450M-onnx चलाता है और स्क्रीनशॉट इसी डिवाइस पर रखता है। “स्थानीय विकल्प इस्तेमाल करें” चुनने से WebGPU की जाँच होती है, आपकी सहमति दर्ज होती है और Hugging Face से लगभग 810 MB का बैकग्राउंड डाउनलोड शुरू होता है। कार्य स्थिति दिखाते हैं और डाउनलोड की प्रतीक्षा नहीं करते; Chrome खुला रखें।", 'st.vision.local.enable': 'स्थानीय विकल्प इस्तेमाल करें', 'st.vision.local.disable': 'स्थानीय विकल्प बंद करें', 'st.vision.local.saved': 'स्थानीय विज़न विकल्प चालू है।', diff --git a/src/chrome/src/ui/locales/id.js b/src/chrome/src/ui/locales/id.js index 303dda0d4..ec2ddd836 100644 --- a/src/chrome/src/ui/locales/id.js +++ b/src/chrome/src/ui/locales/id.js @@ -319,8 +319,8 @@ export default { 'st.provider.field.model_loaded_hint': 'kosongkan untuk menggunakan model yang sudah dimuat', 'st.vision.desc': 'Jika diatur, tangkapan layar dikirim ke model ini untuk membaca halaman, sementara penyedia aktif menangani perencanaan dan pemanggilan alat. Kosongkan agar penyedia aktif juga menangani visi. Hanya endpoint yang kompatibel dengan OpenAI.', - 'st.vision.local.title': 'Fallback lokal LFM2.5-VL', - "st.vision.local.desc": "Menjalankan LiquidAI/LFM2.5-VL-450M-ONNX di GPU Anda; tangkapan layar tetap di perangkat ini. Memilih “Gunakan fallback lokal” memeriksa WebGPU, merekam persetujuan Anda, dan memulai unduhan latar belakang sekitar 770 MB dari Hugging Face. Tugas menampilkan status dan tidak menunggu unduhan; biarkan Chrome tetap terbuka.", + 'st.vision.local.title': 'Fallback lokal WebBrain VL 2 450M', + "st.vision.local.desc": "Menjalankan webbrain-one/webbrain-vl-2-450M-onnx di GPU Anda; tangkapan layar tetap di perangkat ini. Memilih “Gunakan fallback lokal” memeriksa WebGPU, merekam persetujuan Anda, dan memulai unduhan latar belakang sekitar 810 MB dari Hugging Face. Tugas menampilkan status dan tidak menunggu unduhan; biarkan Chrome tetap terbuka.", 'st.vision.local.enable': 'Gunakan fallback lokal', 'st.vision.local.disable': 'Nonaktifkan fallback lokal', 'st.vision.local.saved': 'Fallback visi lokal diaktifkan.', diff --git a/src/chrome/src/ui/locales/ja.js b/src/chrome/src/ui/locales/ja.js index aa7f5ff62..9b7f2308f 100644 --- a/src/chrome/src/ui/locales/ja.js +++ b/src/chrome/src/ui/locales/ja.js @@ -319,8 +319,8 @@ export default { 'st.provider.field.model_loaded_hint': '空欄にすると読み込み済みモデルを使用', 'st.vision.desc': '設定すると、ページ読み取り用のスクリーンショットはこのモデルに送られ、プランニングとツール呼び出しはアクティブなプロバイダーが担当します。空欄なら画像認識もアクティブなプロバイダーを使います。OpenAI 互換エンドポイントのみ対応。', - 'st.vision.local.title': 'LFM2.5-VL ローカルフォールバック', - "st.vision.local.desc": "LiquidAI/LFM2.5-VL-450M-ONNXをGPU上で実行し、スクリーンショットはこのデバイス内に保持します。「ローカルフォールバックを使用」を選ぶと、WebGPUを確認して同意を記録し、Hugging Faceから約770 MBのバックグラウンドダウンロードを開始します。タスクは状態を表示し、完了を待ちません。Chromeは開いたままにしてください。", + 'st.vision.local.title': 'WebBrain VL 2 450M ローカルフォールバック', + "st.vision.local.desc": "webbrain-one/webbrain-vl-2-450M-onnxをGPU上で実行し、スクリーンショットはこのデバイス内に保持します。「ローカルフォールバックを使用」を選ぶと、WebGPUを確認して同意を記録し、Hugging Faceから約810 MBのバックグラウンドダウンロードを開始します。タスクは状態を表示し、完了を待ちません。Chromeは開いたままにしてください。", 'st.vision.local.enable': 'ローカルフォールバックを使用', 'st.vision.local.disable': 'ローカルフォールバックを無効化', 'st.vision.local.saved': 'ローカルビジョンフォールバックを有効にしました。', diff --git a/src/chrome/src/ui/locales/ko.js b/src/chrome/src/ui/locales/ko.js index 97f1cab42..ba0995750 100644 --- a/src/chrome/src/ui/locales/ko.js +++ b/src/chrome/src/ui/locales/ko.js @@ -319,8 +319,8 @@ export default { 'st.provider.field.model_loaded_hint': '비워 두면 이미 로드된 모델을 사용', 'st.vision.desc': '설정하면 페이지 읽기용 스크린샷은 이 모델로 전송되고, 활성 제공자는 계획 수립과 도구 호출을 담당합니다. 비워 두면 비전에도 활성 제공자가 사용됩니다. OpenAI 호환 엔드포인트만 지원합니다.', - 'st.vision.local.title': 'LFM2.5-VL 로컬 대체 모델', - "st.vision.local.desc": "LiquidAI/LFM2.5-VL-450M-ONNX를 GPU에서 실행하며 스크린샷은 이 기기에만 남습니다. “로컬 대체 모델 사용”을 선택하면 WebGPU를 확인하고 동의를 기록한 뒤 Hugging Face에서 약 770 MB의 백그라운드 다운로드를 시작합니다. 작업은 상태를 표시하며 다운로드를 기다리지 않습니다. Chrome은 열어 두세요.", + 'st.vision.local.title': 'WebBrain VL 2 450M 로컬 대체 모델', + "st.vision.local.desc": "webbrain-one/webbrain-vl-2-450M-onnx를 GPU에서 실행하며 스크린샷은 이 기기에만 남습니다. “로컬 대체 모델 사용”을 선택하면 WebGPU를 확인하고 동의를 기록한 뒤 Hugging Face에서 약 810 MB의 백그라운드 다운로드를 시작합니다. 작업은 상태를 표시하며 다운로드를 기다리지 않습니다. Chrome은 열어 두세요.", 'st.vision.local.enable': '로컬 대체 모델 사용', 'st.vision.local.disable': '로컬 대체 모델 사용 중지', 'st.vision.local.saved': '로컬 비전 대체 모델이 활성화되었습니다.', diff --git a/src/chrome/src/ui/locales/ms.js b/src/chrome/src/ui/locales/ms.js index 672580296..d692dd92f 100644 --- a/src/chrome/src/ui/locales/ms.js +++ b/src/chrome/src/ui/locales/ms.js @@ -319,8 +319,8 @@ export default { 'st.provider.field.model_loaded_hint': 'biarkan kosong untuk menggunakan model yang telah dimuatkan', 'st.vision.desc': 'Jika ditetapkan, tangkapan skrin dihantar kepada model ini untuk membaca halaman, manakala pembekal aktif mengendalikan perancangan dan panggilan alat. Biarkan kosong agar pembekal aktif juga mengendalikan penglihatan. Hanya hujung yang serasi dengan OpenAI.', - 'st.vision.local.title': 'Model sandaran setempat LFM2.5-VL', - "st.vision.local.desc": "Menjalankan LiquidAI/LFM2.5-VL-450M-ONNX pada GPU anda; tangkapan skrin kekal pada peranti ini. Memilih “Gunakan model sandaran setempat” memeriksa WebGPU, merekodkan persetujuan anda dan memulakan muat turun latar belakang kira-kira 770 MB daripada Hugging Face. Tugas memaparkan status dan tidak menunggu muat turun; pastikan Chrome terus dibuka.", + 'st.vision.local.title': 'Model sandaran setempat WebBrain VL 2 450M', + "st.vision.local.desc": "Menjalankan webbrain-one/webbrain-vl-2-450M-onnx pada GPU anda; tangkapan skrin kekal pada peranti ini. Memilih “Gunakan model sandaran setempat” memeriksa WebGPU, merekodkan persetujuan anda dan memulakan muat turun latar belakang kira-kira 810 MB daripada Hugging Face. Tugas memaparkan status dan tidak menunggu muat turun; pastikan Chrome terus dibuka.", 'st.vision.local.enable': 'Gunakan model sandaran setempat', 'st.vision.local.disable': 'Lumpuhkan model sandaran setempat', 'st.vision.local.saved': 'Model sandaran penglihatan setempat diaktifkan.', diff --git a/src/chrome/src/ui/locales/nl.js b/src/chrome/src/ui/locales/nl.js index d4b13eb18..772ee9581 100644 --- a/src/chrome/src/ui/locales/nl.js +++ b/src/chrome/src/ui/locales/nl.js @@ -703,8 +703,8 @@ export default { 'st.provider.field.bedrock_model_id': 'Bedrock model-id', 'st.vision.heading': 'Visie', 'st.vision.desc': 'Indien ingesteld, worden schermafbeeldingen naar dit model verzonden...', - 'st.vision.local.title': 'Lokale LFM2.5-VL-terugvaloptie', - "st.vision.local.desc": "Voert LiquidAI/LFM2.5-VL-450M-ONNX uit op je GPU; schermafbeeldingen blijven op dit apparaat. Als je ‘Lokale terugvaloptie gebruiken’ kiest, wordt WebGPU gecontroleerd, je toestemming vastgelegd en een achtergronddownload van ongeveer 770 MB vanaf Hugging Face gestart. Taken tonen de status en wachten niet op de download; laat Chrome open.", + 'st.vision.local.title': 'Lokale WebBrain VL 2 450M-terugvaloptie', + "st.vision.local.desc": "Voert webbrain-one/webbrain-vl-2-450M-onnx uit op je GPU; schermafbeeldingen blijven op dit apparaat. Als je ‘Lokale terugvaloptie gebruiken’ kiest, wordt WebGPU gecontroleerd, je toestemming vastgelegd en een achtergronddownload van ongeveer 810 MB vanaf Hugging Face gestart. Taken tonen de status en wachten niet op de download; laat Chrome open.", 'st.vision.local.enable': 'Lokale terugvaloptie gebruiken', 'st.vision.local.disable': 'Lokale terugvaloptie uitschakelen', 'st.vision.local.saved': 'Lokale terugvaloptie voor beeldherkenning ingeschakeld.', diff --git a/src/chrome/src/ui/locales/pl.js b/src/chrome/src/ui/locales/pl.js index 867b42d86..26480b434 100644 --- a/src/chrome/src/ui/locales/pl.js +++ b/src/chrome/src/ui/locales/pl.js @@ -536,8 +536,8 @@ export default { 'st.provider.field.model_custom': 'Niestandardowy...', 'st.vision.heading': 'Wizja', 'st.vision.desc': 'Jeśli ustawione, zrzuty ekranu są wysyłane do tego modelu w celu odczytania strony, podczas gdy aktywny dostawca zajmuje się planowaniem i wywołaniami narzędzi. Pozostaw puste, aby używać aktywnego dostawcy także do wizji. Tylko punkty końcowe zgodne z OpenAI.', - 'st.vision.local.title': 'Lokalny model awaryjny LFM2.5-VL', - "st.vision.local.desc": "Uruchamia LiquidAI/LFM2.5-VL-450M-ONNX na Twoim GPU; zrzuty ekranu pozostają na tym urządzeniu. Wybranie „Użyj lokalnego modelu awaryjnego” sprawdza WebGPU, zapisuje zgodę i rozpoczyna w tle pobieranie około 770 MB z Hugging Face. Zadania pokazują stan i nie czekają na pobranie; pozostaw Chrome otwarty.", + 'st.vision.local.title': 'Lokalny model awaryjny WebBrain VL 2 450M', + "st.vision.local.desc": "Uruchamia webbrain-one/webbrain-vl-2-450M-onnx na Twoim GPU; zrzuty ekranu pozostają na tym urządzeniu. Wybranie „Użyj lokalnego modelu awaryjnego” sprawdza WebGPU, zapisuje zgodę i rozpoczyna w tle pobieranie około 810 MB z Hugging Face. Zadania pokazują stan i nie czekają na pobranie; pozostaw Chrome otwarty.", 'st.vision.local.enable': 'Użyj lokalnego modelu awaryjnego', 'st.vision.local.disable': 'Wyłącz lokalny model awaryjny', 'st.vision.local.saved': 'Włączono lokalny awaryjny model wizyjny.', diff --git a/src/chrome/src/ui/locales/pt.js b/src/chrome/src/ui/locales/pt.js index ac655167e..abab90a15 100644 --- a/src/chrome/src/ui/locales/pt.js +++ b/src/chrome/src/ui/locales/pt.js @@ -791,8 +791,8 @@ export default { 'st.vision.heading': "Visão", 'st.vision.desc': "Se definido, as capturas de tela serão enviadas a esse modelo para leitura da página, enquanto o provedor ativo cuida do planejamento e das chamadas de ferramentas. Deixe em branco para usar também o provedor ativo para visão. Somente terminais compatíveis com OpenAI.", - 'st.vision.local.title': 'Fallback local do LFM2.5-VL', - "st.vision.local.desc": "Executa o LiquidAI/LFM2.5-VL-450M-ONNX na sua GPU; as capturas permanecem neste dispositivo. Selecionar “Usar fallback local” verifica o WebGPU, registra seu consentimento e inicia em segundo plano um download de aproximadamente 770 MB do Hugging Face. As tarefas mostram o status e não aguardam o download; mantenha o Chrome aberto.", + 'st.vision.local.title': 'Fallback local do WebBrain VL 2 450M', + "st.vision.local.desc": "Executa o webbrain-one/webbrain-vl-2-450M-onnx na sua GPU; as capturas permanecem neste dispositivo. Selecionar “Usar fallback local” verifica o WebGPU, registra seu consentimento e inicia em segundo plano um download de aproximadamente 810 MB do Hugging Face. As tarefas mostram o status e não aguardam o download; mantenha o Chrome aberto.", 'st.vision.local.enable': 'Usar fallback local', 'st.vision.local.disable': 'Desativar fallback local', 'st.vision.local.saved': 'Fallback local de visão ativado.', diff --git a/src/chrome/src/ui/locales/ru.js b/src/chrome/src/ui/locales/ru.js index 966ddc615..e7a74aff7 100644 --- a/src/chrome/src/ui/locales/ru.js +++ b/src/chrome/src/ui/locales/ru.js @@ -319,8 +319,8 @@ export default { 'st.provider.field.model_loaded_hint': 'оставьте пустым, чтобы использовать загруженную модель', 'st.vision.desc': 'Если задано, скриншоты отправляются этой модели для чтения страницы, а активный провайдер занимается планированием и вызовами инструментов. Оставьте пустым, чтобы и для зрения использовался активный провайдер. Только эндпоинты, совместимые с OpenAI.', - 'st.vision.local.title': 'Локальная резервная модель LFM2.5-VL', - "st.vision.local.desc": "Запускает LiquidAI/LFM2.5-VL-450M-ONNX на вашем GPU; снимки экрана остаются на этом устройстве. Выбор «Использовать локальную резервную модель» проверяет WebGPU, фиксирует согласие и запускает фоновую загрузку около 770 МБ с Hugging Face. Задачи показывают состояние и не ждут загрузку; не закрывайте Chrome.", + 'st.vision.local.title': 'Локальная резервная модель WebBrain VL 2 450M', + "st.vision.local.desc": "Запускает webbrain-one/webbrain-vl-2-450M-onnx на вашем GPU; снимки экрана остаются на этом устройстве. Выбор «Использовать локальную резервную модель» проверяет WebGPU, фиксирует согласие и запускает фоновую загрузку около 810 МБ с Hugging Face. Задачи показывают состояние и не ждут загрузку; не закрывайте Chrome.", 'st.vision.local.enable': 'Использовать локальную резервную модель', 'st.vision.local.disable': 'Отключить локальную резервную модель', 'st.vision.local.saved': 'Локальная резервная модель для обработки изображений включена.', diff --git a/src/chrome/src/ui/locales/th.js b/src/chrome/src/ui/locales/th.js index 84808b18c..0f5b78943 100644 --- a/src/chrome/src/ui/locales/th.js +++ b/src/chrome/src/ui/locales/th.js @@ -319,8 +319,8 @@ export default { 'st.provider.field.model_loaded_hint': 'เว้นว่างเพื่อใช้โมเดลที่โหลดไว้', 'st.vision.desc': 'หากตั้งค่าไว้ ภาพหน้าจอจะถูกส่งไปยังโมเดลนี้เพื่ออ่านหน้า ขณะที่ผู้ให้บริการที่ใช้งานอยู่จะดูแลการวางแผนและการเรียกใช้เครื่องมือ เว้นว่างเพื่อให้ผู้ให้บริการที่ใช้งานอยู่ดูแลการมองเห็นด้วย รองรับเฉพาะปลายทางที่เข้ากันได้กับ OpenAI', - 'st.vision.local.title': 'ตัวเลือกสำรอง LFM2.5-VL แบบภายในเครื่อง', - "st.vision.local.desc": "เรียกใช้ LiquidAI/LFM2.5-VL-450M-ONNX บน GPU ของคุณ โดยภาพหน้าจอจะอยู่ในอุปกรณ์นี้ การเลือก “ใช้ตัวเลือกสำรองในเครื่อง” จะตรวจสอบ WebGPU บันทึกความยินยอม และเริ่มดาวน์โหลดประมาณ 770 MB จาก Hugging Face ในเบื้องหลัง งานจะแสดงสถานะและไม่รอให้ดาวน์โหลดเสร็จ โปรดเปิด Chrome ไว้", + 'st.vision.local.title': 'ตัวเลือกสำรอง WebBrain VL 2 450M แบบภายในเครื่อง', + "st.vision.local.desc": "เรียกใช้ webbrain-one/webbrain-vl-2-450M-onnx บน GPU ของคุณ โดยภาพหน้าจอจะอยู่ในอุปกรณ์นี้ การเลือก “ใช้ตัวเลือกสำรองในเครื่อง” จะตรวจสอบ WebGPU บันทึกความยินยอม และเริ่มดาวน์โหลดประมาณ 810 MB จาก Hugging Face ในเบื้องหลัง งานจะแสดงสถานะและไม่รอให้ดาวน์โหลดเสร็จ โปรดเปิด Chrome ไว้", 'st.vision.local.enable': 'ใช้ตัวเลือกสำรองในเครื่อง', 'st.vision.local.disable': 'ปิดตัวเลือกสำรองในเครื่อง', 'st.vision.local.saved': 'เปิดใช้ตัวเลือกสำรองการมองเห็นในเครื่องแล้ว', diff --git a/src/chrome/src/ui/locales/tl.js b/src/chrome/src/ui/locales/tl.js index 19e65b444..ceb1bd16c 100644 --- a/src/chrome/src/ui/locales/tl.js +++ b/src/chrome/src/ui/locales/tl.js @@ -319,8 +319,8 @@ export default { 'st.provider.field.model_loaded_hint': 'iwang blangko para gamitin ang na-load na modelo', 'st.vision.desc': 'Kung naitakda, ipinapadala ang mga screenshot sa modelong ito para basahin ang pahina, habang ang aktibong provider ang humahawak sa pagpaplano at mga tool call. Iwang blangko para gamitin din ang aktibong provider para sa bisyon. Para lamang sa mga OpenAI-compatible na endpoint.', - 'st.vision.local.title': 'Lokal na fallback ng LFM2.5-VL', - "st.vision.local.desc": "Pinapagana ang LiquidAI/LFM2.5-VL-450M-ONNX sa iyong GPU at nananatili sa device ang mga screenshot. Kapag pinili ang “Gamitin ang lokal na fallback,” susuriin ang WebGPU, itatala ang pahintulot, at magsisimula ang humigit-kumulang 770 MB na background download mula sa Hugging Face. Ipinapakita ng mga gawain ang status at hindi hinihintay ang download; panatilihing bukas ang Chrome.", + 'st.vision.local.title': 'Lokal na fallback ng WebBrain VL 2 450M', + "st.vision.local.desc": "Pinapagana ang webbrain-one/webbrain-vl-2-450M-onnx sa iyong GPU at nananatili sa device ang mga screenshot. Kapag pinili ang “Gamitin ang lokal na fallback,” susuriin ang WebGPU, itatala ang pahintulot, at magsisimula ang humigit-kumulang 810 MB na background download mula sa Hugging Face. Ipinapakita ng mga gawain ang status at hindi hinihintay ang download; panatilihing bukas ang Chrome.", 'st.vision.local.enable': 'Gamitin ang lokal na fallback', 'st.vision.local.disable': 'I-disable ang lokal na fallback', 'st.vision.local.saved': 'Naka-enable ang lokal na vision fallback.', diff --git a/src/chrome/src/ui/locales/tr.js b/src/chrome/src/ui/locales/tr.js index 8a4b396e9..812dff0f2 100644 --- a/src/chrome/src/ui/locales/tr.js +++ b/src/chrome/src/ui/locales/tr.js @@ -358,8 +358,8 @@ export default { 'st.provider.field.model_loaded_hint': 'yüklenmiş modeli kullanmak için boş bırak', 'st.vision.desc': 'Ayarlandığında, sayfa okuma için ekran görüntüleri bu modele gönderilir; planlama ve araç çağrılarını aktif sağlayıcı yürütür. Görme için de aktif sağlayıcıyı kullanmak istiyorsan boş bırak. Yalnızca OpenAI uyumlu uç noktalar.', - 'st.vision.local.title': 'LFM2.5-VL yerel yedek modeli', - "st.vision.local.desc": "LiquidAI/LFM2.5-VL-450M-ONNX modelini GPU’nuzda çalıştırır; ekran görüntüleri bu cihazda kalır. “Yerel yedek modeli kullan” seçildiğinde WebGPU denetlenir, onayınız kaydedilir ve Hugging Face’ten yaklaşık 770 MB arka plan indirmesi başlar. Görevler durumu gösterir ve indirmeyi beklemez; Chrome’u açık tutun.", + 'st.vision.local.title': 'WebBrain VL 2 450M yerel yedek modeli', + "st.vision.local.desc": "webbrain-one/webbrain-vl-2-450M-onnx modelini GPU’nuzda çalıştırır; ekran görüntüleri bu cihazda kalır. “Yerel yedek modeli kullan” seçildiğinde WebGPU denetlenir, onayınız kaydedilir ve Hugging Face’ten yaklaşık 810 MB arka plan indirmesi başlar. Görevler durumu gösterir ve indirmeyi beklemez; Chrome’u açık tutun.", 'st.vision.local.enable': 'Yerel yedek modeli kullan', 'st.vision.local.disable': 'Yerel yedek modeli devre dışı bırak', 'st.vision.local.saved': 'Yerel görüntü yedek modeli etkinleştirildi.', diff --git a/src/chrome/src/ui/locales/uk.js b/src/chrome/src/ui/locales/uk.js index 427ba54cd..f56d46007 100644 --- a/src/chrome/src/ui/locales/uk.js +++ b/src/chrome/src/ui/locales/uk.js @@ -319,8 +319,8 @@ export default { 'st.provider.field.model_loaded_hint': 'залиште порожнім, щоб використовувати завантажену модель', 'st.vision.desc': 'Якщо задано, скриншоти надсилаються цій моделі для читання сторінки, а активний провайдер виконує планування та виклики інструментів. Залиште порожнім, щоб і для зору використовувався активний провайдер. Лише ендпоінти, сумісні з OpenAI.', - 'st.vision.local.title': 'Локальна резервна модель LFM2.5-VL', - "st.vision.local.desc": "Запускає LiquidAI/LFM2.5-VL-450M-ONNX на вашому GPU; знімки екрана залишаються на цьому пристрої. Вибір «Використовувати локальну резервну модель» перевіряє WebGPU, фіксує згоду та запускає фонове завантаження близько 770 МБ із Hugging Face. Завдання показують стан і не чекають на завантаження; не закривайте Chrome.", + 'st.vision.local.title': 'Локальна резервна модель WebBrain VL 2 450M', + "st.vision.local.desc": "Запускає webbrain-one/webbrain-vl-2-450M-onnx на вашому GPU; знімки екрана залишаються на цьому пристрої. Вибір «Використовувати локальну резервну модель» перевіряє WebGPU, фіксує згоду та запускає фонове завантаження близько 810 МБ із Hugging Face. Завдання показують стан і не чекають на завантаження; не закривайте Chrome.", 'st.vision.local.enable': 'Використовувати локальну резервну модель', 'st.vision.local.disable': 'Вимкнути локальну резервну модель', 'st.vision.local.saved': 'Локальну резервну модель для розпізнавання зображень увімкнено.', diff --git a/src/chrome/src/ui/locales/vi.js b/src/chrome/src/ui/locales/vi.js index 3eeb7f28b..7c11262dc 100644 --- a/src/chrome/src/ui/locales/vi.js +++ b/src/chrome/src/ui/locales/vi.js @@ -791,8 +791,8 @@ export default { 'st.vision.heading': "Tầm nhìn", 'st.vision.desc': "Nếu được đặt, ảnh chụp màn hình sẽ được gửi đến mô hình này để đọc trang, trong khi nhà cung cấp hoạt động xử lý các lệnh gọi công cụ và lập kế hoạch. Để trống để sử dụng nhà cung cấp hoạt động cho thị lực. Chỉ các điểm cuối tương thích với OpenAI.", - 'st.vision.local.title': 'Mô hình dự phòng cục bộ LFM2.5-VL', - "st.vision.local.desc": "Chạy LiquidAI/LFM2.5-VL-450M-ONNX trên GPU của bạn; ảnh chụp màn hình chỉ lưu trên thiết bị này. Chọn “Sử dụng mô hình dự phòng cục bộ” sẽ kiểm tra WebGPU, ghi nhận sự đồng ý và bắt đầu tải nền khoảng 770 MB từ Hugging Face. Tác vụ hiển thị trạng thái và không chờ tải xong; hãy giữ Chrome mở.", + 'st.vision.local.title': 'Mô hình dự phòng cục bộ WebBrain VL 2 450M', + "st.vision.local.desc": "Chạy webbrain-one/webbrain-vl-2-450M-onnx trên GPU của bạn; ảnh chụp màn hình chỉ lưu trên thiết bị này. Chọn “Sử dụng mô hình dự phòng cục bộ” sẽ kiểm tra WebGPU, ghi nhận sự đồng ý và bắt đầu tải nền khoảng 810 MB từ Hugging Face. Tác vụ hiển thị trạng thái và không chờ tải xong; hãy giữ Chrome mở.", 'st.vision.local.enable': 'Sử dụng mô hình dự phòng cục bộ', 'st.vision.local.disable': 'Tắt mô hình dự phòng cục bộ', 'st.vision.local.saved': 'Đã bật mô hình thị giác dự phòng cục bộ.', diff --git a/src/chrome/src/ui/locales/zh.js b/src/chrome/src/ui/locales/zh.js index 5437cf450..d76a8d35b 100644 --- a/src/chrome/src/ui/locales/zh.js +++ b/src/chrome/src/ui/locales/zh.js @@ -319,8 +319,8 @@ export default { 'st.provider.field.model_loaded_hint': '留空则使用已加载的模型', 'st.vision.desc': '设置后,页面阅读的截图会发送给此模型,而当前提供商负责规划和工具调用。留空则视觉也使用当前提供商。仅限 OpenAI 兼容的端点。', - 'st.vision.local.title': 'LFM2.5-VL 本地备用模型', - "st.vision.local.desc": "在您的 GPU 上运行 LiquidAI/LFM2.5-VL-450M-ONNX,屏幕截图仅保留在本设备上。选择“使用本地备用模型”会检查 WebGPU、记录您的同意,并从 Hugging Face 开始约 770 MB 的后台下载。任务会显示下载状态且不会等待完成;请保持 Chrome 运行。", + 'st.vision.local.title': 'WebBrain VL 2 450M 本地备用模型', + "st.vision.local.desc": "在您的 GPU 上运行 webbrain-one/webbrain-vl-2-450M-onnx,屏幕截图仅保留在本设备上。选择“使用本地备用模型”会检查 WebGPU、记录您的同意,并从 Hugging Face 开始约 810 MB 的后台下载。任务会显示下载状态且不会等待完成;请保持 Chrome 运行。", 'st.vision.local.enable': '使用本地备用模型', 'st.vision.local.disable': '禁用本地备用模型', 'st.vision.local.saved': '已启用本地视觉备用模型。', diff --git a/src/chrome/src/ui/settings.js b/src/chrome/src/ui/settings.js index 1c36ee631..81568649c 100644 --- a/src/chrome/src/ui/settings.js +++ b/src/chrome/src/ui/settings.js @@ -65,7 +65,7 @@ const VISION_UI_PROVIDER_IDS = new Set(['ollama', ...AUTO_VISION_PROVIDER_IDS]); // Version shown in the subtitle. Kept here so it only needs one update per // release; the subtitle string itself is translated. -const EXT_VERSION = '33.0.8'; +const EXT_VERSION = '33.1.0'; const providersContainer = document.getElementById('providers'); const displaySettings = document.getElementById('display-settings'); @@ -1591,7 +1591,7 @@ async function setWebgpuVisionEnabled(enabled) { if (!result?.ok) throw new Error(result?.error || 'The local vision model download could not be started.'); } else { // Release GPU allocations, but keep the browser-cached model download so - // re-enabling does not require another ~770 MB transfer. + // re-enabling does not require another ~810 MB transfer. await sendToBackground('dispose_webgpu_vision').catch(() => {}); await chrome.storage.local.remove([ WEBGPU_VISION_ENABLED_KEY, diff --git a/src/firefox/ARCHITECTURE.md b/src/firefox/ARCHITECTURE.md index 4cfe46307..5b0a90e4d 100644 --- a/src/firefox/ARCHITECTURE.md +++ b/src/firefox/ARCHITECTURE.md @@ -1,6 +1,6 @@ # WebBrain Firefox Extension — Architecture -> Version 33.0.8 · Manifest V2 · Background Page +> Version 33.1.0 · Manifest V2 · Background Page ## How Firefox Differs from Chrome diff --git a/src/firefox/manifest.json b/src/firefox/manifest.json index 60742855c..47af50408 100644 --- a/src/firefox/manifest.json +++ b/src/firefox/manifest.json @@ -1,7 +1,7 @@ { "manifest_version": 2, "name": "WebBrain", - "version": "33.0.8", + "version": "33.1.0", "description": "Open-source AI browser agent — chat with pages, automate tasks, multi-provider LLM support.", "permissions": [ "activeTab", diff --git a/src/firefox/src/ui/settings.js b/src/firefox/src/ui/settings.js index 6a87b7b20..fd350f66d 100644 --- a/src/firefox/src/ui/settings.js +++ b/src/firefox/src/ui/settings.js @@ -59,7 +59,7 @@ const VISION_UI_PROVIDER_IDS = new Set(['ollama', ...AUTO_VISION_PROVIDER_IDS]); // Version shown in the subtitle. Kept here so it only needs one update per // release; the subtitle string itself is translated. -const EXT_VERSION = '33.0.8'; +const EXT_VERSION = '33.1.0'; const providersContainer = document.getElementById('providers'); const displaySettings = document.getElementById('display-settings'); diff --git a/test/run.js b/test/run.js index c7111226c..e52f6c454 100644 --- a/test/run.js +++ b/test/run.js @@ -918,6 +918,7 @@ const { WEBGPU_VISION_DOWNLOAD_STATE_MESSAGE, WEBGPU_VISION_ENABLED_KEY, WEBGPU_VISION_MODEL_ID, + WEBGPU_VISION_READY_MARKER_VERSION, normalizeWebgpuModelId, webgpuVisionReadyMarkerUrl, } = await import( @@ -33427,11 +33428,15 @@ test('vision Settings copy is explicit, bounded, and mirrored across every local `${label}: automatic screenshot policy copy diverged across browsers`); assert.ok(chromeLocale['st.display.auto_screenshot.desc']?.trim(), `${label}: automatic screenshot policy copy is missing`); + assert.match(chromeLocale['st.vision.local.title'], /WebBrain VL 2 450M/, + `${label}: local vision title does not identify the shipped WebBrain VL model`); assert.match(chromeLocale['st.vision.local.desc'], /WebGPU/, `${label}: local vision copy does not identify the explicit hardware probe`); - assert.match(chromeLocale['st.vision.local.desc'], /770/, + assert.match(chromeLocale['st.vision.local.desc'], /webbrain-one\/webbrain-vl-2-450M-onnx/, + `${label}: local vision copy does not identify the shipped WebBrain VL model`); + assert.match(chromeLocale['st.vision.local.desc'], /810/, `${label}: local vision copy omits the explicit download size`); - assert.doesNotMatch(chromeLocale['st.vision.local.testing'], /770|Hugging Face/, + assert.doesNotMatch(chromeLocale['st.vision.local.testing'], /810|Hugging Face/, `${label}: testing copy still claims that inference can initiate a download`); } }); @@ -33734,6 +33739,8 @@ test('public Apocalypse Mode guide and launch essay document the offline boundar 'docs: the guide should state the browser-specific WebGPU boundary'); assert.match(guide, /LiquidAI\/LFM2\.5-2\.6B-ONNX[\s\S]*?does not silently change the provider/, 'docs: the local text model should be named without implying global provider selection'); + assert.match(guide, /about 810 MB[\s\S]*?WebBrain VL 2 450M/, + 'docs: the shipped local vision model and approximate download size should be current'); assert.match(guide, /Wikipedia reader[\s\S]*?Emergency Box[\s\S]*?Medical guidance becomes outdated/, 'docs: the offline readers and medical-content warning should be covered'); assert.match(guide, /Universal Basic Lexicon[\s\S]*?13 essential health[\s\S]*?0\.004 GB built in \+ ≈ 0\.06 GB download[\s\S]*?203-resource catalog[\s\S]*?≈ 12\.1 GB download[\s\S]*?storage figures are estimates/i, @@ -53486,6 +53493,11 @@ test('Chrome exposes separate endpoint-free WebGPU text and vision providers', a const manager = new ProviderManagerCh(); const webgpuConfig = manager._defaultConfigs().webgpu; + assert.equal(WEBGPU_VISION_MODEL_ID, 'webbrain-one/webbrain-vl-2-450M-onnx'); + assert.equal(WEBGPU_VISION_CONSENT_VERSION, 2, + 'switching the shipped vision model must require explicit consent again'); + assert.equal(WEBGPU_VISION_READY_MARKER_VERSION, 2); + assert.match(webgpuVisionReadyMarkerUrl(), /\/webgpu-vision-ready\/v2\/webbrain-one%2Fwebbrain-vl-2-450M-onnx$/); assert.equal(webgpuConfig.model, WEBGPU_MODEL_ID); assert.equal(WEBGPU_MODEL_ID, WEBGPU_LFM25_MODEL_ID); assert.equal(webgpuConfig.baseUrl, ''); @@ -53633,7 +53645,7 @@ test('Chrome exposes separate endpoint-free WebGPU text and vision providers', a } }); -test('vision routing keeps LiquidAI behind explicit overrides and active raw vision', async () => { +test('vision routing keeps the WebBrain VL fallback behind explicit overrides and active raw vision', async () => { const manager = new ProviderManagerCh(); const activeVision = { name: 'webbrain-cloud', model: 'cloud-vision', supportsVision: true }; const activeText = { name: 'text-only', supportsVision: false }; @@ -53970,6 +53982,24 @@ test('local vision defaults off and migration requires re-consent without deleti assert.equal(await fresh.getLocalVisionFallbackProvider(), null); assert.deepEqual(sentMessages, [], 'a fresh readiness check must not create a worker or start a download'); + Object.assign(state, { + [WEBGPU_VISION_ENABLED_KEY]: true, + [WEBGPU_VISION_CONSENT_VERSION_KEY]: 1, + [WEBGPU_VISION_DOWNLOAD_STATE_KEY]: { + modelId: 'LiquidAI/LFM2.5-VL-450M-ONNX', + status: 'ready', + progress: 100, + }, + }); + await fresh._migrateWebgpuVisionConsent({ ...state }); + assert.equal(state[WEBGPU_VISION_ENABLED_KEY], undefined, + 'the previous model consent must not silently authorize the replacement download'); + assert.equal(state[WEBGPU_VISION_CONSENT_VERSION_KEY], 1); + assert.equal(state[WEBGPU_VISION_DOWNLOAD_STATE_KEY].status, 'ready', + 'requiring renewed consent must not delete the previous cached model'); + delete state[WEBGPU_VISION_CONSENT_VERSION_KEY]; + delete state[WEBGPU_VISION_DOWNLOAD_STATE_KEY]; + Object.assign(state, { visionModel: { type: 'openai', baseUrl: 'https://vision.example/v1', model: 'remote-vision', apiKey: 'keep-me' }, [WEBGPU_VISION_ENABLED_KEY]: true, @@ -54242,7 +54272,7 @@ test('Apocalypse enable keeps a selected Bonsai preset and does not auto-downloa } }); -test('WebGPU worker follows local text-generation and LiquidAI vision contracts', () => { +test('WebGPU worker follows local text-generation and WebBrain VL vision contracts', () => { const worker = fs.readFileSync(path.join(ROOT, 'src/chrome/src/offscreen/inference-worker.js'), 'utf8'); const host = fs.readFileSync(path.join(ROOT, 'src/chrome/src/offscreen/vision-inference-host.js'), 'utf8'); const background = fs.readFileSync(path.join(ROOT, 'src/chrome/src/background.js'), 'utf8'); @@ -54274,7 +54304,8 @@ test('WebGPU worker follows local text-generation and LiquidAI vision contracts' assert.match(worker, /getVisionRuntime\(modelId, dtype, device, \{ localFilesOnly: true \}\)/, 'automatic screenshot inference must not download missing local vision weights'); assert.match(worker, /async function markVisionModelReady/); - assert.match(worker, /webgpu-vision-ready\//, + assert.match(worker, /WEBGPU_VISION_READY_MARKER_VERSION = 2/); + assert.match(worker, /webgpu-vision-ready\/['"]/, 'a completed Vision Model preload must write a ready marker, not infer completeness from any cached file'); assert.match(worker, /queued: queued && !active/, 'cancel acknowledgements must distinguish queued vision inference from an active generation'); @@ -54453,6 +54484,9 @@ test('WebGPU worker follows local text-generation and LiquidAI vision contracts' assert.match(apocalypseHtml, /data-vision-download-action="pause"/); assert.match(apocalypseHtml, /data-vision-download-action="resume"/); assert.match(apocalypseHtml, /data-vision-download-action="stop"/); + assert.match(apocalypseHtml, /~810 MB · WebGPU/); + assert.match(apocalypseDocs, /WebBrain VL 2 450M/); + assert.match(apocalypseDocs, /approximately 810 MB/); for (const [label, script] of [ ['chrome', apocalypseScript], ['firefox', apocalypseFirefoxScript], @@ -54991,11 +55025,13 @@ test('Vision Model removal deletes only its cache entries', async () => { const previousCaches = globalThis.caches; const visionBase = `https://huggingface.co/${WEBGPU_VISION_MODEL_ID}/resolve/main/`; const textBase = `https://huggingface.co/${WEBGPU_MODEL_ID}/resolve/main/`; - const markerUrl = `https://webbrain.one/.well-known/webgpu-vision-ready/${encodeURIComponent(WEBGPU_VISION_MODEL_ID)}`; + const markerUrl = webgpuVisionReadyMarkerUrl(WEBGPU_VISION_MODEL_ID); + const legacyMarkerUrl = `https://webbrain.one/.well-known/webgpu-vision-ready/${encodeURIComponent(WEBGPU_VISION_MODEL_ID)}`; const cacheEntries = new Map([ [`${visionBase}config.json`, true], [`${visionBase}onnx/model_q4.onnx`, true], [markerUrl, true], + [legacyMarkerUrl, true], [`${textBase}config.json`, true], ['https://huggingface.co/another/model/resolve/main/config.json', true], ]); @@ -55016,11 +55052,13 @@ test('Vision Model removal deletes only its cache entries', async () => { const workerUrl = `${pathToFileURL(path.join(ROOT, 'src/chrome/src/offscreen/inference-worker.js')).href}?vision-cache-scope-test`; const { clearVisionModelCache } = await import(workerUrl); const result = await clearVisionModelCache(WEBGPU_VISION_MODEL_ID); - assert.equal(result.deletedEntries, 3); + assert.equal(result.deletedEntries, 4); assert.equal(cacheEntries.has(`${visionBase}config.json`), false); assert.equal(cacheEntries.has(`${visionBase}onnx/model_q4.onnx`), false); assert.equal(cacheEntries.has(markerUrl), false, 'removing the Vision Model must delete its ready marker'); + assert.equal(cacheEntries.has(legacyMarkerUrl), false, + 'removing the Vision Model must delete stale ready markers from earlier marker versions'); assert.equal(cacheEntries.has(`${textBase}config.json`), true, 'removing the Vision Model must preserve the Text Model cache'); assert.equal(cacheEntries.has('https://huggingface.co/another/model/resolve/main/config.json'), true); diff --git a/web/assets/browser-vision-benchmark-strict-passes.png b/web/assets/browser-vision-benchmark-strict-passes.png new file mode 100644 index 000000000..932344b18 Binary files /dev/null and b/web/assets/browser-vision-benchmark-strict-passes.png differ diff --git a/web/assets/browser-vision-model-size.png b/web/assets/browser-vision-model-size.png new file mode 100644 index 000000000..d3d4fd47a Binary files /dev/null and b/web/assets/browser-vision-model-size.png differ diff --git a/web/blog/fine-tuning-lfm25-vl-450m-for-browser-tasks/index.html b/web/blog/fine-tuning-lfm25-vl-450m-for-browser-tasks/index.html new file mode 100644 index 000000000..ba4e55b06 --- /dev/null +++ b/web/blog/fine-tuning-lfm25-vl-450m-for-browser-tasks/index.html @@ -0,0 +1,641 @@ + + + + + + Fine-Tuning LFM2.5-VL-450M for Browser Tasks - WebBrain Blog + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+ + +
+
August 22, 2026 · 10 min read · ← All posts
+

From 16K to 50K Browser Screenshots: Fine-Tuning LFM2.5-VL-450M

+

The first benchmark result was bad enough to be useful. Off-the-shelf LFM2.5-VL-450M could recover fragments of browser state, but it almost never satisfied WebBrain's exact six-section screenshot contract. We kept the model small and changed the data instead. A first training round built around a 20K target produced 16,646 accepted examples. A second round expanded the corpus to exactly 50,000 screenshots and targeted the remaining failures. The deployed result now passes 44 of the same 100 held-out cases—and runs inside the browser through WebGPU.

+

Why start with LFM2.5-VL-450M?

+

The obvious way to improve vision quality is to use a larger model. For WebBrain's local fallback, that answer is incomplete. The model has to download into an extension, fit alongside the main browser workload, keep screenshots on-device, and run on consumer WebGPU implementations.

+

Liquid AI's LFM2.5-VL-450M gave us a useful starting shape: a genuinely small multimodal checkpoint, an architecture that could be exported for browser inference, and a model family designed to be adapted. The raw checkpoint was not already good at our particular response contract. That was the experiment.

+

The target was deliberately narrow. Given a 1280×720 browser viewport, produce six sections for a browser-automation agent:

+
  1. page purpose and current task;
  2. exact visible text;
  3. actionable controls and inputs;
  4. state, selection, loading, or validation signals;
  5. blockers such as modals, consent layers, and security challenges;
  6. unknowns, unreadable text, and uncertainty.
+

The goal was not to teach a 450M model all of computer vision. It was to make it much better at this one production call.

+

The unchanged evaluation gate

+

We froze a 100-case suite before selecting the final checkpoint. It spans authentication screens, search results, checkout, validation, modals, toast messages, loading states, consent banners, dashboards, charts, tables, email, kanban, calendars, maps, photos, multilingual OCR, occlusion, security challenges, and uncertainty calibration.

+

The suite is public on GitHub. Training and validation images were checked for exact and perceptual overlap with those 100 cases. The benchmark was run only after checkpoint selection; it was not used as a training loss or early-stopping oracle.

+

That separation matters. Without it, “44/100” could simply mean that the model memorized our release test.

+

Round one: a 20K target, 16,646 accepted examples

+

The first corpus was planned as an approximately 20K browser-GUI dataset. Licensing checks, deduplication, structural validation, and label review left 16,646 accepted rows:

+
SourceAccepted rowsRole
HuggingFaceM4/WebSight9,561Broad webpage layouts and text
Farama Foundation MiniWoB++4,592Compact browser tasks and controls
docling-project/ScreenParse2,493Screen parsing and GUI structure
Total16,646First frozen training corpus
+

Each screenshot was paired with WebBrain's production system prompt and a six-section teacher response. The response mattered as much as the image: a model can recognize a login screen yet still fail WebBrain if it invents labels, omits blockers, or ignores the required sections.

+

This first LoRA fine-tune moved the release-lineage result from 0/100 strict passes and 4.17% mean rubric to 30/100 and 70.06% under the same PyTorch/Transformers evaluation path. That was not production-ready, but it proved that the small base had substantial task-specific capacity.

+

Round two: keep the useful rows, target the failures

+

The 50K corpus did not throw away round one. It retained the 16,646 reviewed examples and added 33,354 targeted browser-GUI screenshots, producing exactly 50,000 unique rows:

+
ComponentRows
Reviewed round-one corpus16,646
Targeted browser-GUI synthetic corpus33,354
Total50,000
+

“Synthetic” here does not mean an image generator painted approximate websites. We generated controlled HTML/CSS browser interfaces and rendered them as screenshots in a real browser. That gave us exact knowledge of the labels, states, blockers, disabled controls, overlays, contrast, and multilingual strings present in each scene.

+

The targeted mix concentrated on the failure modes exposed by round one: 8,000 multilingual OCR examples, 4,500 forms, 3,500 modal and consent states, 3,500 tables, 2,500 authentication scenes, 2,500 loading states, 2,500 dashboards, 2,500 calendars, 1,500 occlusion and contrast examples, plus general browser observations.

+

Teacher labels were generated primarily by qwen/qwen3.6-35b-a3b, with 366 accepted labels from a local Q4 variant. Structural and grounding filters rejected malformed outputs, but teacher labels can still contain OCR mistakes or hallucinations; the dataset card says so explicitly.

+

The final split contains 46,879 training rows and 3,121 validation rows, grouped by task/site and deduplicated by image identity.

+

The 50K dataset is published on Hugging Face, with row-level provenance, split metadata, teacher identifiers, and leakage checks documented in its dataset card.

+

Training less than one percent of the model

+

Round two used supervised LoRA fine-tuning on one RTX 4090 with 24 GB VRAM:

+
SettingValue
Base checkpointLiquidAI/LFM2.5-VL-450M
Total parameters452,847,616
Trainable LoRA parameters4,128,768, about 0.91%
LoRA configurationrank 16, alpha 32, dropout 0.05
Effective batch size16
PrecisionBF16
Training lengthone epoch, 2,929 steps
Peak VRAM23,272 MiB
+

Validation loss continued improving to the end. The deterministic post-training evaluator measured 0.326301 at step 2,500 and 0.324976 at step 2,929, so we selected the final checkpoint rather than stopping early.

+

Only the adapter is small. Once merged, the released model remains the same 453M parameter class as its base; adding more training examples changes the weights, not the number of parameters.

+

What changed across the two rounds

+

The cleanest lineage comparison uses the same PyTorch/Transformers evaluator:

+
CheckpointTraining examplesStrict passesMean rubricErrors
Off-the-shelf LFM2.5-VL-450M00/1004.17%0
WebBrain V116,64630/10070.06%0
WebBrain V250,00036/10074.99%0
+

The first data round produced the dramatic gain. The second produced a smaller but still real improvement on the same held-out suite: six additional full passes and 4.93 mean-rubric points. That is a familiar fine-tuning curve. Once a small model learns the broad task and output grammar, more data mostly improves difficult edge cases rather than recreating the first leap.

+

The earlier tiny-model benchmark reported the raw 450M checkpoint at 1/100 and 21.6% through MLX. That is a different inference and decoding stack from the release-lineage PyTorch row above, so we do not subtract one number from the other. Both measurements tell the same practical story: the unfine-tuned model was far below the browser-specific checkpoints.

+

The deployed WebGPU result

+

Training success is not enough if the browser export collapses. We merged the adapter, exported the model to ONNX, kept the embeddings and vision encoder in FP16 to preserve small-text and GUI detail, and quantized the merged decoder to symmetric Q4.

+

The deployed package passed a real Transformers.js/WebGPU smoke test and produced this release-gate result:

+
DeploymentStrict passesMean rubricSix-section completionErrors
WebBrain V2, PyTorch36/10074.99%0
WebBrain V2, ONNX Q4/FP1644/10076.24%87/1000
+

Strictpass results for webbrainvl2, three Qwen 3.5 sizes, gemma4e4b, and lfm2.5vl1.6b

+

The deployed WebGPU row is shown against the same compact-model benchmark results used in our expanded comparison.

+

Quantization does not normally promise higher quality. Autoregressive generation can shift with numerical format, runtime kernels, and decoding behavior, and in this suite those shifts happened to cross more strict thresholds. We publish both rows rather than pretending one runtime is a universal property of the checkpoint.

+

The merged model and WebGPU-ready ONNX package are both available on Hugging Face.

+

A 450M specialist versus much larger models

+

The fine-tuned 450M model did something the raw size would not predict. Its deployed 44/100 result sits in the same strict-pass band as Qwen 3.5 2B at 39/100 and Gemma 4 E4B at 41/100. Qwen and Gemma retain higher mean rubric scores, so the right claim is task-specific parity, not universal superiority.

+

Performanceversusparameter scatter plot for webbrainvl2, Qwen 3.5, gemma4e4b, and lfm2.5vl1.6b

+

With parameters on X and strict passes on Y, the browser-specific 450M model sits apart in the upper-left. Gemma E4B is shown at its effective 4B class.

+

The result against LFM2.5-VL-3B is more dramatic. The 3B MLX run scored 0/100 strict passes and a 7.76% mean because it repeatedly ignored the required numbered six-section contract. WebBrain V2 followed that contract far more reliably and scored 44/100 despite having roughly one-seventh as many parameters.

+

That does not prove that 450M is a generally stronger vision model than LFM 3B. It proves something more useful for product engineering: under WebBrain's exact browser-observation prompt and grader, the smaller specialist is much more effective than the larger off-the-shelf checkpoint.

+

Kudos to Liquid AI. A fine-tune can only expose capacity and adaptability that exist in the foundation. LFM2.5-VL-450M gave us enough of both to build a useful browser specialist without turning the extension into a multi-gigabyte inference appliance.

+

A much less expensive WebBrain stack

+

WebBrain can split planning and vision instead of paying a multimodal API for every turn:

+
  1. Run the main text-and-tool loop through an inexpensive hosted planner such as Poolside Laguna S 2.1 on OpenRouter.
  2. Route the minority of calls that actually need pixels to WebBrain VL 2 450M locally through WebGPU.
  3. Keep corroborating high-impact observations with DOM, accessibility, and browser-native state.
+

The economics are attractive. Our saved 100-case Laguna S high-reasoning planner replay reported $0.0227, while a separate GPT-5.6 Luna Pro 100-case planner replay reported $0.228—about ten times as much. Those runs used different benchmark revisions and should not be treated as a controlled billing comparison, but they show the scale of the available budget tier. OpenRouter prices and cache behavior can also change.

+

The local vision side adds no remote image-token bill after the model download. That makes it plausible to run WebBrain with an inexpensive text-only API and private local screenshot fallback at roughly an order-of-magnitude lower observed planner cost than an already economical hosted route such as Luna, without giving up visual recovery entirely.

+

If you can run a strong local multimodal model or prefer a frontier vision API, those remain excellent options. The point is that they are no longer the only coherent way to give a browser agent eyes.

+

What the experiment taught us

+

More parameters are a powerful general-purpose prior. Better data is a powerful product-specific prior.

+

The off-the-shelf 450M model was not good enough for WebBrain's screenshot contract. The first 16,646 accepted examples taught it the task. The 50K corpus broadened difficult browser states and improved the held-out result again. ONNX export preserved—and in this release run slightly improved—the behavior in the runtime users will actually execute.

+

That is the power of fine-tuning: not making 450M universally equal to 4B, but making 450M unusually good at the precise job your system needs.

+

Tags: #WebBrain #LFM25VL #LiquidAI #FineTuning #LoRA #WebGPU #ONNX #BrowserVision #LocalAI #TeacherDistillation

+ +
+ Written by Emre Sokullu. WebBrain 33.0.0 and later is GPL-3.0-or-later and open on GitHub. +
+
+ + + + + + diff --git a/web/blog/index.html b/web/blog/index.html index d7b43e5e8..9fda2c105 100644 --- a/web/blog/index.html +++ b/web/blog/index.html @@ -669,6 +669,30 @@ "url": "https://webbrain.one/blog", "image": "https://webbrain.one/og-image.png", "blogPost": [ + { + "@type": "BlogPosting", + "headline": "Tiny Vision Models Compared II: WebBrain, Gemma 4, and Larger Qwen 3.5 Models Join the Race", + "url": "https://webbrain.one/blog/tiny-vision-models-compared-ii", + "datePublished": "2026-08-22", + "description": "WebBrain VL 2 450M joins our 100-case browser-vision benchmark alongside Qwen 3.5 2B and 4B and Gemma 4 E4B, with the earlier Qwen and LFM baselines retained for context.", + "author": { + "@type": "Person", + "name": "Emre Sokullu", + "url": "https://emresokullu.com" + } + }, + { + "@type": "BlogPosting", + "headline": "From 16K to 50K Browser Screenshots: Fine-Tuning LFM2.5-VL-450M", + "url": "https://webbrain.one/blog/fine-tuning-lfm25-vl-450m-for-browser-tasks", + "datePublished": "2026-08-22", + "description": "How WebBrain turned Liquid AI's 450M vision-language model into a browser specialist using a reviewed 16,646-example first dataset, a targeted 50,000-example second dataset, LoRA, and a held-out 100-case test.", + "author": { + "@type": "Person", + "name": "Emre Sokullu", + "url": "https://emresokullu.com" + } + }, { "@type": "BlogPosting", "headline": "Tiny Vision Models Compared: LFM 2.5 VL vs Qwen 3.5 0.8B", @@ -1228,14 +1252,24 @@

WebBrain Blog

- 43 notes + 45 notes
- + + +
Tiny Vision Models Compared II: WebBrain, Gemma 4, and Larger Qwen 3.5 Models Join the Race
+
A browser-specific 450M fine-tune reaches the same strict-pass band as Qwen 3.5 2B and Gemma 4 E4B while remaining small enough for WebGPU. It will become WebBrain's default local vision model.
+
+ + +
From 16K to 50K Browser Screenshots: Fine-Tuning LFM2.5-VL-450M
+
The raw 450M model started near zero on WebBrain's strict browser contract. Two data rounds moved it to 44/100 in the deployed WebGPU package—above a 3B LFM run and into the same band as much larger Qwen and Gemma models.
+
+
Tiny Vision Models Compared: LFM 2.5 VL vs Qwen 3.5 0.8B
Qwen 3.8 27B is clearly better. The surprise is that Qwen 3.5 0.8B and tiny LFM2.5-VL models can still recover useful browser state, especially when vision is a local fallback rather than the whole agent.
diff --git a/web/blog/posts/fine-tuning-lfm25-vl-450m-for-browser-tasks.md b/web/blog/posts/fine-tuning-lfm25-vl-450m-for-browser-tasks.md new file mode 100644 index 000000000..349d776bf --- /dev/null +++ b/web/blog/posts/fine-tuning-lfm25-vl-450m-for-browser-tasks.md @@ -0,0 +1,187 @@ +--- +title: > + From 16K to 50K Browser Screenshots: Fine-Tuning LFM2.5-VL-450M +slug: fine-tuning-lfm25-vl-450m-for-browser-tasks +sortOrder: -230 +date: 2026-08-22 +readTime: 10 min read +description: > + How WebBrain turned Liquid AI's 450M vision-language model into a browser specialist using a reviewed 16,646-example first dataset, a targeted 50,000-example second dataset, LoRA, and a held-out 100-case test. +excerpt: > + The raw 450M model started near zero on WebBrain's strict browser contract. Two data rounds moved it to 44/100 in the deployed WebGPU package—above a 3B LFM run and into the same band as much larger Qwen and Gemma models. +titleTag: > + Fine-Tuning LFM2.5-VL-450M for Browser Tasks - WebBrain Blog +ogTitle: > + From 16K to 50K screenshots: building WebBrain VL 2 450M +ogDescription: > + A reproducible account of the data, LoRA training, validation, ONNX export, and browser benchmark behind WebBrain's 450M WebGPU vision model. +twitterTitle: > + The fine-tuning story behind WebBrain VL 2 450M +twitterDescription: > + Base model: near zero strict passes. First dataset: 30/100. 50K dataset: 36/100 PyTorch and 44/100 in the deployed WebGPU package. +keywords: + - WebBrain VL 2 450M + - LFM2.5-VL-450M + - Liquid AI + - fine-tuning + - LoRA + - browser screenshots + - GUI dataset + - WebGPU + - ONNX + - teacher distillation +author: Emre Sokullu +authorUrl: https://emresokullu.com +lede: > + **The first benchmark result was bad enough to be useful.** Off-the-shelf LFM2.5-VL-450M could recover fragments of browser state, but it almost never satisfied WebBrain's exact six-section screenshot contract. We kept the model small and changed the data instead. A first training round built around a 20K target produced 16,646 accepted examples. A second round expanded the corpus to exactly 50,000 screenshots and targeted the remaining failures. The deployed result now passes 44 of the same 100 held-out cases—and runs inside the browser through WebGPU. +--- + +## Why start with LFM2.5-VL-450M? + +The obvious way to improve vision quality is to use a larger model. For WebBrain's local fallback, that answer is incomplete. The model has to download into an extension, fit alongside the main browser workload, keep screenshots on-device, and run on consumer WebGPU implementations. + +[Liquid AI's LFM2.5-VL-450M](https://huggingface.co/LiquidAI/LFM2.5-VL-450M) gave us a useful starting shape: a genuinely small multimodal checkpoint, an architecture that could be exported for browser inference, and a model family designed to be adapted. The raw checkpoint was not already good at our particular response contract. That was the experiment. + +The target was deliberately narrow. Given a 1280×720 browser viewport, produce six sections for a browser-automation agent: + +1. page purpose and current task; +2. exact visible text; +3. actionable controls and inputs; +4. state, selection, loading, or validation signals; +5. blockers such as modals, consent layers, and security challenges; +6. unknowns, unreadable text, and uncertainty. + +The goal was not to teach a 450M model all of computer vision. It was to make it much better at this one production call. + +## The unchanged evaluation gate + +We froze a 100-case suite before selecting the final checkpoint. It spans authentication screens, search results, checkout, validation, modals, toast messages, loading states, consent banners, dashboards, charts, tables, email, kanban, calendars, maps, photos, multilingual OCR, occlusion, security challenges, and uncertainty calibration. + +The [suite is public on GitHub](https://github.com/esokullu/webbrain/tree/main/test/vision). Training and validation images were checked for exact and perceptual overlap with those 100 cases. The benchmark was run only after checkpoint selection; it was not used as a training loss or early-stopping oracle. + +That separation matters. Without it, “44/100” could simply mean that the model memorized our release test. + +## Round one: a 20K target, 16,646 accepted examples + +The first corpus was planned as an approximately 20K browser-GUI dataset. Licensing checks, deduplication, structural validation, and label review left **16,646 accepted rows**: + +| Source | Accepted rows | Role | +| --- | ---: | --- | +| HuggingFaceM4/WebSight | 9,561 | Broad webpage layouts and text | +| Farama Foundation MiniWoB++ | 4,592 | Compact browser tasks and controls | +| docling-project/ScreenParse | 2,493 | Screen parsing and GUI structure | +| **Total** | **16,646** | First frozen training corpus | + +Each screenshot was paired with WebBrain's production system prompt and a six-section teacher response. The response mattered as much as the image: a model can recognize a login screen yet still fail WebBrain if it invents labels, omits blockers, or ignores the required sections. + +This first LoRA fine-tune moved the release-lineage result from **0/100 strict passes and 4.17% mean rubric** to **30/100 and 70.06%** under the same PyTorch/Transformers evaluation path. That was not production-ready, but it proved that the small base had substantial task-specific capacity. + +## Round two: keep the useful rows, target the failures + +The 50K corpus did not throw away round one. It retained the 16,646 reviewed examples and added **33,354 targeted browser-GUI screenshots**, producing exactly 50,000 unique rows: + +| Component | Rows | +| --- | ---: | +| Reviewed round-one corpus | 16,646 | +| Targeted browser-GUI synthetic corpus | 33,354 | +| **Total** | **50,000** | + +“Synthetic” here does not mean an image generator painted approximate websites. We generated controlled HTML/CSS browser interfaces and rendered them as screenshots in a real browser. That gave us exact knowledge of the labels, states, blockers, disabled controls, overlays, contrast, and multilingual strings present in each scene. + +The targeted mix concentrated on the failure modes exposed by round one: 8,000 multilingual OCR examples, 4,500 forms, 3,500 modal and consent states, 3,500 tables, 2,500 authentication scenes, 2,500 loading states, 2,500 dashboards, 2,500 calendars, 1,500 occlusion and contrast examples, plus general browser observations. + +Teacher labels were generated primarily by `qwen/qwen3.6-35b-a3b`, with 366 accepted labels from a local Q4 variant. Structural and grounding filters rejected malformed outputs, but teacher labels can still contain OCR mistakes or hallucinations; the dataset card says so explicitly. + +The final split contains **46,879 training rows and 3,121 validation rows**, grouped by task/site and deduplicated by image identity. + +The [50K dataset is published on Hugging Face](https://huggingface.co/datasets/webbrain-one/webbrain-vl-2-450M-dataset), with row-level provenance, split metadata, teacher identifiers, and leakage checks documented in its dataset card. + +## Training less than one percent of the model + +Round two used supervised LoRA fine-tuning on one RTX 4090 with 24 GB VRAM: + +| Setting | Value | +| --- | --- | +| Base checkpoint | LiquidAI/LFM2.5-VL-450M | +| Total parameters | 452,847,616 | +| Trainable LoRA parameters | 4,128,768, about 0.91% | +| LoRA configuration | rank 16, alpha 32, dropout 0.05 | +| Effective batch size | 16 | +| Precision | BF16 | +| Training length | one epoch, 2,929 steps | +| Peak VRAM | 23,272 MiB | + +Validation loss continued improving to the end. The deterministic post-training evaluator measured 0.326301 at step 2,500 and 0.324976 at step 2,929, so we selected the final checkpoint rather than stopping early. + +Only the adapter is small. Once merged, the released model remains the same 453M parameter class as its base; adding more training examples changes the weights, not the number of parameters. + +## What changed across the two rounds + +The cleanest lineage comparison uses the same PyTorch/Transformers evaluator: + +| Checkpoint | Training examples | Strict passes | Mean rubric | Errors | +| --- | ---: | ---: | ---: | ---: | +| Off-the-shelf LFM2.5-VL-450M | 0 | 0/100 | 4.17% | 0 | +| WebBrain V1 | 16,646 | 30/100 | 70.06% | 0 | +| **WebBrain V2** | **50,000** | **36/100** | **74.99%** | **0** | + +The first data round produced the dramatic gain. The second produced a smaller but still real improvement on the same held-out suite: six additional full passes and 4.93 mean-rubric points. That is a familiar fine-tuning curve. Once a small model learns the broad task and output grammar, more data mostly improves difficult edge cases rather than recreating the first leap. + +The earlier [tiny-model benchmark](/blog/tiny-vision-models-qwen38-reference/) reported the raw 450M checkpoint at 1/100 and 21.6% through MLX. That is a different inference and decoding stack from the release-lineage PyTorch row above, so we do not subtract one number from the other. Both measurements tell the same practical story: the unfine-tuned model was far below the browser-specific checkpoints. + +## The deployed WebGPU result + +Training success is not enough if the browser export collapses. We merged the adapter, exported the model to ONNX, kept the embeddings and vision encoder in FP16 to preserve small-text and GUI detail, and quantized the merged decoder to symmetric Q4. + +The deployed package passed a real Transformers.js/WebGPU smoke test and produced this release-gate result: + +| Deployment | Strict passes | Mean rubric | Six-section completion | Errors | +| --- | ---: | ---: | ---: | ---: | +| WebBrain V2, PyTorch | 36/100 | 74.99% | — | 0 | +| **WebBrain V2, ONNX Q4/FP16** | **44/100** | **76.24%** | **87/100** | **0** | + +![Strict-pass results for webbrain-vl-2, three Qwen 3.5 sizes, gemma4-e4b, and lfm-2.5-vl-1.6b](/assets/browser-vision-benchmark-strict-passes.png) + +*The deployed WebGPU row is shown against the same compact-model benchmark results used in our expanded comparison.* + +Quantization does not normally promise higher quality. Autoregressive generation can shift with numerical format, runtime kernels, and decoding behavior, and in this suite those shifts happened to cross more strict thresholds. We publish both rows rather than pretending one runtime is a universal property of the checkpoint. + +The [merged model](https://huggingface.co/webbrain-one/webbrain-vl-2-450M) and [WebGPU-ready ONNX package](https://huggingface.co/webbrain-one/webbrain-vl-2-450M-onnx) are both available on Hugging Face. + +## A 450M specialist versus much larger models + +The fine-tuned 450M model did something the raw size would not predict. Its deployed 44/100 result sits in the same strict-pass band as Qwen 3.5 2B at 39/100 and Gemma 4 E4B at 41/100. Qwen and Gemma retain higher mean rubric scores, so the right claim is task-specific parity, not universal superiority. + +![Performance-versus-parameter scatter plot for webbrain-vl-2, Qwen 3.5, gemma4-e4b, and lfm-2.5-vl-1.6b](/assets/browser-vision-model-size.png) + +*With parameters on X and strict passes on Y, the browser-specific 450M model sits apart in the upper-left. Gemma E4B is shown at its effective 4B class.* + +The result against LFM2.5-VL-3B is more dramatic. The 3B MLX run scored 0/100 strict passes and a 7.76% mean because it repeatedly ignored the required numbered six-section contract. WebBrain V2 followed that contract far more reliably and scored 44/100 despite having roughly one-seventh as many parameters. + +That does **not** prove that 450M is a generally stronger vision model than LFM 3B. It proves something more useful for product engineering: under WebBrain's exact browser-observation prompt and grader, the smaller specialist is much more effective than the larger off-the-shelf checkpoint. + +Kudos to Liquid AI. A fine-tune can only expose capacity and adaptability that exist in the foundation. LFM2.5-VL-450M gave us enough of both to build a useful browser specialist without turning the extension into a multi-gigabyte inference appliance. + +## A much less expensive WebBrain stack + +WebBrain can split planning and vision instead of paying a multimodal API for every turn: + +1. Run the main text-and-tool loop through an inexpensive hosted planner such as [Poolside Laguna S 2.1 on OpenRouter](/blog/poolside-laguna-s-openrouter-planner-benchmark/). +2. Route the minority of calls that actually need pixels to WebBrain VL 2 450M locally through WebGPU. +3. Keep corroborating high-impact observations with DOM, accessibility, and browser-native state. + +The economics are attractive. Our saved 100-case Laguna S high-reasoning planner replay reported **$0.0227**, while a separate GPT-5.6 Luna Pro 100-case planner replay reported **$0.228**—about ten times as much. Those runs used different benchmark revisions and should not be treated as a controlled billing comparison, but they show the scale of the available budget tier. OpenRouter prices and cache behavior can also change. + +The local vision side adds no remote image-token bill after the model download. That makes it plausible to run WebBrain with an inexpensive text-only API and private local screenshot fallback at roughly an order-of-magnitude lower observed planner cost than an already economical hosted route such as Luna, without giving up visual recovery entirely. + +If you can run a strong local multimodal model or prefer a frontier vision API, those remain excellent options. The point is that they are no longer the only coherent way to give a browser agent eyes. + +## What the experiment taught us + +More parameters are a powerful general-purpose prior. Better data is a powerful product-specific prior. + +The off-the-shelf 450M model was not good enough for WebBrain's screenshot contract. The first 16,646 accepted examples taught it the task. The 50K corpus broadened difficult browser states and improved the held-out result again. ONNX export preserved—and in this release run slightly improved—the behavior in the runtime users will actually execute. + +That is the power of fine-tuning: not making 450M universally equal to 4B, but making 450M unusually good at the precise job your system needs. + +Tags: #WebBrain #LFM25VL #LiquidAI #FineTuning #LoRA #WebGPU #ONNX #BrowserVision #LocalAI #TeacherDistillation diff --git a/web/blog/posts/tiny-vision-models-compared-ii.md b/web/blog/posts/tiny-vision-models-compared-ii.md new file mode 100644 index 000000000..93bede5db --- /dev/null +++ b/web/blog/posts/tiny-vision-models-compared-ii.md @@ -0,0 +1,116 @@ +--- +title: > + Tiny Vision Models Compared II: WebBrain, Gemma 4, and Larger Qwen 3.5 Models Join the Race +slug: tiny-vision-models-compared-ii +sortOrder: -240 +date: 2026-08-22 +readTime: 8 min read +description: > + WebBrain VL 2 450M joins our 100-case browser-vision benchmark alongside Qwen 3.5 2B and 4B and Gemma 4 E4B, with the earlier Qwen and LFM baselines retained for context. +excerpt: > + A browser-specific 450M fine-tune reaches the same strict-pass band as Qwen 3.5 2B and Gemma 4 E4B while remaining small enough for WebGPU. It will become WebBrain's default local vision model. +titleTag: > + Tiny Vision Models Compared II: WebBrain vs Qwen 3.5 and Gemma 4 - WebBrain Blog +ogTitle: > + Tiny Vision Models Compared II: WebBrain joins Qwen and Gemma +ogDescription: > + WebBrain VL 2 450M reaches 44 strict passes in a 100-case browser benchmark, close to Qwen 3.5 2B and Gemma 4 E4B with far fewer parameters. +twitterTitle: > + WebBrain VL 2 450M joins the tiny vision race +twitterDescription: > + 44/100 strict passes in WebBrain's browser-vision suite: similar to Qwen 3.5 2B and Gemma 4 E4B with roughly one-quarter to one-ninth as many parameters. +keywords: + - WebBrain VL 2 450M + - WebBrain + - Qwen 3.5 4B + - Qwen 3.5 2B + - Qwen 3.5 0.8B + - Gemma 4 E4B + - LFM2.5-VL + - WebGPU + - browser vision + - vision-language model +author: Emre Sokullu +authorUrl: https://emresokullu.com +lede: > + **A 450M model trained for one narrow job can compete with much larger general-purpose vision models on that job.** WebBrain VL 2 450M passed 44 of our 100 browser-vision cases in its deployed ONNX/WebGPU configuration. Qwen 3.5 2B passed 39 and Gemma 4 E4B passed 41. Their mean rubric scores remain higher, so this is not a claim that 450M broadly beats either model. It is evidence that task-specific fine-tuning can move a genuinely tiny model into the same useful browser-observation band. +--- + +## The expanded table + +Our [first tiny-vision comparison](/blog/tiny-vision-models-qwen38-reference/) established the baseline: the off-the-shelf LFM2.5-VL models were compact but weak under WebBrain's exact screenshot contract, while Qwen 3.5 0.8B was unexpectedly capable for its size. + +This follow-up adds four rows: **[WebBrain VL 2 450M](https://huggingface.co/webbrain-one/webbrain-vl-2-450M)**, **[Qwen 3.5 2B](https://huggingface.co/Qwen/Qwen3.5-2B)**, **[Qwen 3.5 4B](https://huggingface.co/Qwen/Qwen3.5-4B)**, and **[Gemma 4 E4B IT](https://huggingface.co/google/gemma-4-E4B-it)**. Every model saw the same 100 screenshots, the same production six-section prompt, and the same deterministic rubric. + +![Strict-pass results for webbrain-vl-2, three Qwen 3.5 sizes, gemma4-e4b, and lfm-2.5-vl-1.6b](/assets/browser-vision-benchmark-strict-passes.png) + +*One benchmark, one production prompt, and 100 held-out browser screenshots. A strict pass requires the complete six-section observation contract.* + +| Model | Parameter class | Strict passes | Mean rubric | Errors | Reading | +| --- | ---: | ---: | ---: | ---: | --- | +| **[Qwen 3.5 4B](https://huggingface.co/Qwen/Qwen3.5-4B)**, MLX | 4B | **55/100** | **83.4%** | 0 | Strongest model in this small-model table | +| **[WebBrain VL 2 450M](https://huggingface.co/webbrain-one/webbrain-vl-2-450M)**, deployed ONNX | **453M** | **44/100** | 76.2% | 0 | Best strict-pass efficiency; WebGPU-ready | +| **[Gemma 4 E4B IT](https://huggingface.co/google/gemma-4-E4B-it)**, MLX | E4B | 41/100 | 81.3% | 0 | Better partial coverage, three fewer full passes | +| **[Qwen 3.5 2B](https://huggingface.co/Qwen/Qwen3.5-2B)**, MLX | 2B | 39/100 | 79.1% | 0 | Similar overall browser-observation band | +| **[Qwen 3.5 0.8B](https://huggingface.co/Qwen/Qwen3.5-0.8B)** | 0.8B | 20/100 | 41.6% | 0 | Strong off-the-shelf sub-1B baseline | +| **[LFM2.5-VL-1.6B](https://huggingface.co/LiquidAI/LFM2.5-VL-1.6B)**, MLX | 1.6B | 12/100 | 44.4% | 0 | Partial evidence more often than complete answers | +| **[LFM2.5-VL-450M](https://huggingface.co/LiquidAI/LFM2.5-VL-450M)**, MLX | 450M | 1/100 | 21.6% | 0 | The off-the-shelf starting point | + +The complete [benchmark source, screenshots, expected facts, scoring code, and committed result files are on GitHub](https://github.com/esokullu/webbrain/tree/main/test/vision). + +We intentionally leave LFM2.5-VL-3B out of this comparison. Its run did not follow the numbered six-section output contract reliably, so including it in a compact-model leaderboard would mostly measure formatting failure rather than useful visual understanding. We discuss that result separately in the fine-tuning story. + +## Strict pass and mean rubric measure different things + +A strict pass is a complete answer under WebBrain's production contract. The model must return six numbered sections covering page purpose, exact visible text, inputs, state signals, blockers, and unknowns. It must recover the weighted facts for that case without a critical contradiction or confident guess. + +The mean rubric score gives partial credit. A model can correctly read a page title, two controls, and an error message yet fail the case because it missed the modal blocking the entire viewport. That answer contributes to the mean score but not to the strict-pass count. + +This is why the middle three rows need careful language: + +- WebBrain V2 has **more complete passes** than Gemma E4B and Qwen 2B. +- Gemma and Qwen have **higher average rubric scores**, meaning they recover more of the expected evidence across all 100 cases. +- The fair conclusion is that all three occupy a similar task-performance band—not that the 450M model is universally better. + +## What fine-tuning bought + +WebBrain V2 uses the same 452,847,616-parameter LFM2.5-VL-450M foundation as the one-pass base row. Only 4,128,768 LoRA parameters—about 0.91% of the model—were trainable. The merged checkpoint does not become a multi-billion-parameter model after training; it remains a 453M model whose behavior has been redirected toward browser screenshots and WebBrain's response contract. + +The deployed package uses FP16 embeddings and vision encoder weights with a symmetric-Q4 merged decoder. Its complete browser package is about **0.81 GB**. For scale, the local artifacts used in the new comparison were approximately 1.75 GB for Qwen 2B MLX 4-bit, 3.06 GB for Qwen 4B MLX 4-bit, and 6.86 GB for Gemma E4B MLX 4-bit. Those byte counts are not perfectly interchangeable—WebBrain uses ONNX while the other rows use MLX—but they describe the practical download and storage difference. + +By nominal parameter count, WebBrain V2 has roughly **one-quarter as many parameters as Qwen 2B** and **one-ninth as many as Gemma E4B**. That is the efficiency result worth celebrating. + +![Performance-versus-parameter scatter plot for webbrain-vl-2, Qwen 3.5, gemma4-e4b, and lfm-2.5-vl-1.6b](/assets/browser-vision-model-size.png) + +*With parameters on X and strict passes on Y, WebBrain V2 is the clear upper-left efficiency outlier. Gemma's E4B label denotes its effective 4B class.* + +## Qwen 4B still leads this table + +Qwen 3.5 4B is the strongest row among the models collected here: 55 strict passes and an 83.4% mean rubric score. Its advantage persists into harder cases, and it is more reliable on multilingual OCR than the smaller rows. + +If your deployment can comfortably host it, Qwen 4B is the higher-quality general-purpose choice in this group. The WebBrain result addresses a different constraint: how much browser-specific vision can fit into an extension-friendly local sidecar that runs through WebGPU. + +## Why WebBrain V2 becomes the default + +WebBrain normally reads the browser through structured sources first: page text, DOM state, accessibility information, URLs, and tool results. Vision is called when pixels contain information those sources missed—charts, canvas content, selected states, overlays, low-contrast labels, or a screenshot after a meaningful state change. + +That architecture rewards a compact specialist. The model does not need to replace the planner or solve every multimodal problem. It needs to turn a browser viewport into reliable evidence often enough to unblock the main agent, while keeping screenshots local and the download reasonable. + +For that role, V2 is a material upgrade over the raw 450M fallback: + +- 44 strict passes instead of one in the comparable deployed/off-the-shelf table; +- no API or per-image token cost after download; +- a real Transformers.js/WebGPU smoke pass, not only server-side ONNX inference; +- an open-weight checkpoint, public dataset, evaluation artifacts, and release manifests. + +We are therefore making **WebBrain VL 2 450M the default local vision model in WebBrain**, replacing the off-the-shelf LFM2.5-VL-450M behavior for this fallback slot. As always, the agent should corroborate high-impact visual claims before clicking, submitting, paying, or changing account state. + +## The power of fine-tuning + +WebBrain VL 2 450M is an open-weight tiny vision model focused on browser tasks and runnable on WebGPU. In this test it performed similarly to Qwen 3.5 2B and Gemma 4 E4B while using far fewer parameters—roughly one-quarter to one-ninth as many. + +That does not shrink every vision problem to 450M parameters. It shows that a narrow production contract, a held-out benchmark, targeted data, and disciplined fine-tuning can move a small model much further than its raw checkpoint suggests. + +The power of fine-tuning, actually. + +Tags: #WebBrain #WebBrainVL #Qwen35 #Gemma4 #LFM25VL #WebGPU #FineTuning #BrowserAgent #LocalAI diff --git a/web/blog/tiny-vision-models-compared-ii/index.html b/web/blog/tiny-vision-models-compared-ii/index.html new file mode 100644 index 000000000..56e826db4 --- /dev/null +++ b/web/blog/tiny-vision-models-compared-ii/index.html @@ -0,0 +1,615 @@ + + + + + + Tiny Vision Models Compared II: WebBrain vs Qwen 3.5 and Gemma 4 - WebBrain Blog + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+
+ +
+
August 22, 2026 · 8 min read · ← All posts
+

Tiny Vision Models Compared II: WebBrain, Gemma 4, and Larger Qwen 3.5 Models Join the Race

+

A 450M model trained for one narrow job can compete with much larger general-purpose vision models on that job. WebBrain VL 2 450M passed 44 of our 100 browser-vision cases in its deployed ONNX/WebGPU configuration. Qwen 3.5 2B passed 39 and Gemma 4 E4B passed 41. Their mean rubric scores remain higher, so this is not a claim that 450M broadly beats either model. It is evidence that task-specific fine-tuning can move a genuinely tiny model into the same useful browser-observation band.

+

The expanded table

+

Our first tiny-vision comparison established the baseline: the off-the-shelf LFM2.5-VL models were compact but weak under WebBrain's exact screenshot contract, while Qwen 3.5 0.8B was unexpectedly capable for its size.

+

This follow-up adds four rows: WebBrain VL 2 450M, Qwen 3.5 2B, Qwen 3.5 4B, and Gemma 4 E4B IT. Every model saw the same 100 screenshots, the same production six-section prompt, and the same deterministic rubric.

+

Strictpass results for webbrainvl2, three Qwen 3.5 sizes, gemma4e4b, and lfm2.5vl1.6b

+

One benchmark, one production prompt, and 100 held-out browser screenshots. A strict pass requires the complete six-section observation contract.

+
ModelParameter classStrict passesMean rubricErrorsReading
Qwen 3.5 4B, MLX4B55/10083.4%0Strongest model in this small-model table
WebBrain VL 2 450M, deployed ONNX453M44/10076.2%0Best strict-pass efficiency; WebGPU-ready
Gemma 4 E4B IT, MLXE4B41/10081.3%0Better partial coverage, three fewer full passes
Qwen 3.5 2B, MLX2B39/10079.1%0Similar overall browser-observation band
Qwen 3.5 0.8B0.8B20/10041.6%0Strong off-the-shelf sub-1B baseline
LFM2.5-VL-1.6B, MLX1.6B12/10044.4%0Partial evidence more often than complete answers
LFM2.5-VL-450M, MLX450M1/10021.6%0The off-the-shelf starting point
+

The complete benchmark source, screenshots, expected facts, scoring code, and committed result files are on GitHub.

+

We intentionally leave LFM2.5-VL-3B out of this comparison. Its run did not follow the numbered six-section output contract reliably, so including it in a compact-model leaderboard would mostly measure formatting failure rather than useful visual understanding. We discuss that result separately in the fine-tuning story.

+

Strict pass and mean rubric measure different things

+

A strict pass is a complete answer under WebBrain's production contract. The model must return six numbered sections covering page purpose, exact visible text, inputs, state signals, blockers, and unknowns. It must recover the weighted facts for that case without a critical contradiction or confident guess.

+

The mean rubric score gives partial credit. A model can correctly read a page title, two controls, and an error message yet fail the case because it missed the modal blocking the entire viewport. That answer contributes to the mean score but not to the strict-pass count.

+

This is why the middle three rows need careful language:

+ +

What fine-tuning bought

+

WebBrain V2 uses the same 452,847,616-parameter LFM2.5-VL-450M foundation as the one-pass base row. Only 4,128,768 LoRA parameters—about 0.91% of the model—were trainable. The merged checkpoint does not become a multi-billion-parameter model after training; it remains a 453M model whose behavior has been redirected toward browser screenshots and WebBrain's response contract.

+

The deployed package uses FP16 embeddings and vision encoder weights with a symmetric-Q4 merged decoder. Its complete browser package is about 0.81 GB. For scale, the local artifacts used in the new comparison were approximately 1.75 GB for Qwen 2B MLX 4-bit, 3.06 GB for Qwen 4B MLX 4-bit, and 6.86 GB for Gemma E4B MLX 4-bit. Those byte counts are not perfectly interchangeable—WebBrain uses ONNX while the other rows use MLX—but they describe the practical download and storage difference.

+

By nominal parameter count, WebBrain V2 has roughly one-quarter as many parameters as Qwen 2B and one-ninth as many as Gemma E4B. That is the efficiency result worth celebrating.

+

Performanceversusparameter scatter plot for webbrainvl2, Qwen 3.5, gemma4e4b, and lfm2.5vl1.6b

+

With parameters on X and strict passes on Y, WebBrain V2 is the clear upper-left efficiency outlier. Gemma's E4B label denotes its effective 4B class.

+

Qwen 4B still leads this table

+

Qwen 3.5 4B is the strongest row among the models collected here: 55 strict passes and an 83.4% mean rubric score. Its advantage persists into harder cases, and it is more reliable on multilingual OCR than the smaller rows.

+

If your deployment can comfortably host it, Qwen 4B is the higher-quality general-purpose choice in this group. The WebBrain result addresses a different constraint: how much browser-specific vision can fit into an extension-friendly local sidecar that runs through WebGPU.

+

Why WebBrain V2 becomes the default

+

WebBrain normally reads the browser through structured sources first: page text, DOM state, accessibility information, URLs, and tool results. Vision is called when pixels contain information those sources missed—charts, canvas content, selected states, overlays, low-contrast labels, or a screenshot after a meaningful state change.

+

That architecture rewards a compact specialist. The model does not need to replace the planner or solve every multimodal problem. It needs to turn a browser viewport into reliable evidence often enough to unblock the main agent, while keeping screenshots local and the download reasonable.

+

For that role, V2 is a material upgrade over the raw 450M fallback:

+ +

We are therefore making WebBrain VL 2 450M the default local vision model in WebBrain, replacing the off-the-shelf LFM2.5-VL-450M behavior for this fallback slot. As always, the agent should corroborate high-impact visual claims before clicking, submitting, paying, or changing account state.

+

The power of fine-tuning

+

WebBrain VL 2 450M is an open-weight tiny vision model focused on browser tasks and runnable on WebGPU. In this test it performed similarly to Qwen 3.5 2B and Gemma 4 E4B while using far fewer parameters—roughly one-quarter to one-ninth as many.

+

That does not shrink every vision problem to 450M parameters. It shows that a narrow production contract, a held-out benchmark, targeted data, and disciplined fine-tuning can move a small model much further than its raw checkpoint suggests.

+

The power of fine-tuning, actually.

+

Tags: #WebBrain #WebBrainVL #Qwen35 #Gemma4 #LFM25VL #WebGPU #FineTuning #BrowserAgent #LocalAI

+ +
+ Written by Emre Sokullu. WebBrain 33.0.0 and later is GPL-3.0-or-later and open on GitHub. +
+
+ + + + + + diff --git a/web/docs/apocalypse-mode/index.html b/web/docs/apocalypse-mode/index.html index 6aa7ab50e..1e19eed3c 100644 --- a/web/docs/apocalypse-mode/index.html +++ b/web/docs/apocalypse-mode/index.html @@ -19,15 +19,15 @@
-
WebBrain, ready when the internet isn’t

Prepare local intelligence and practical knowledge before you need them.

Apocalypse Mode assembles an offline-ready kit inside your browser: on-device text and vision models on supported Chromium systems, a searchable Wikipedia archive, and an Emergency Box of books and field references.

Text model1.55 GB · local WebGPU inference
Vision modelabout 770 MB · screenshots stay local
WikipediaSimple English · searchable offline
+
WebBrain, ready when the internet isn’t

Prepare local intelligence and practical knowledge before you need them.

Apocalypse Mode assembles an offline-ready kit inside your browser: on-device text and vision models on supported Chromium systems, a searchable Wikipedia archive, and an Emergency Box of books and field references.

Text model1.55 GB · local WebGPU inference
Vision modelabout 810 MB · screenshots stay local
WikipediaSimple English · searchable offline

What “offline” means

You need an internet connection for the first download. Once the model files, Wikipedia archive, and chosen documents are stored, their core inference, search, and reading paths run locally from the browser profile. WebGPU performs model inference on the device; downloaded screenshots do not need a remote vision service.

Prepare on an ordinary day

Large downloads and storage checks are much easier while power, connectivity, and time are predictable. Enable the mode, let every required item reach Ready, and test the readers before treating the kit as available.

Apocalypse Mode does not make every website or WebBrain task work offline. Live pages, hosted model providers, current news, and any resource you did not download still require a network. It prepares a self-contained local core; it is not a copy of the internet.

The Chromium and Firefox builds are different

BuildWhat enabling the mode preparesReady and Emergency Box
Chromium, with compatible WebGPU hardwareStarts the fixed local text model, local vision model, and the newest Simple English text-only Wikipedia archive. Model transfers share one local worker and run in sequence.Ready requires all three essentials. The Emergency Box unlocks when they are complete.
FirefoxProvides the offline Wikipedia library, reader, and Emergency Box. The Chromium-only WebGPU text and vision download stack is not shown.Archive and document controls remain available without pretending Firefox has the Chromium WebGPU runtime.

If the text and vision cards do not appear, first confirm that you are using the Chromium build on hardware and a browser version with WebGPU support.

-

Build the basic kit

  1. Open Apocalypse Mode. Use the nuclear-symbol Apocalypse Mode control in the Settings header.
  2. Check your storage and connection. The Chromium basics include a 1.55 GB text model, an approximately 770 MB vision model, and the current Simple English Wikipedia archive. Leave additional room for temporary download state and Emergency Box resources.
  3. Turn the mode on. On supported Chromium systems, WebBrain starts the text model first, queues vision behind it, and starts the required Wikipedia archive automatically.
  4. Keep the browser open for model downloads. You may switch tabs or close Settings, but Chrome must stay open while the local model transfer continues. Follow the per-item progress instead of relying only on the total storage number.
  5. Resolve anything not ready. Resume a paused item, retry an error, or free storage. Removing a completed model deletes its cached files and requires another download before offline use.
  6. Test the kit. Use the vision test, open the Wikipedia reader, search for an article, and open at least one installed PDF. A download is not a plan until you have proved you can read it.
+

Build the basic kit

  1. Open Apocalypse Mode. Use the nuclear-symbol Apocalypse Mode control in the Settings header.
  2. Check your storage and connection. The Chromium basics include a 1.55 GB text model, an approximately 810 MB vision model, and the current Simple English Wikipedia archive. Leave additional room for temporary download state and Emergency Box resources.
  3. Turn the mode on. On supported Chromium systems, WebBrain starts the text model first, queues vision behind it, and starts the required Wikipedia archive automatically.
  4. Keep the browser open for model downloads. You may switch tabs or close Settings, but Chrome must stay open while the local model transfer continues. Follow the per-item progress instead of relying only on the total storage number.
  5. Resolve anything not ready. Resume a paused item, retry an error, or free storage. Removing a completed model deletes its cached files and requires another download before offline use.
  6. Test the kit. Use the vision test, open the Wikipedia reader, search for an article, and open at least one installed PDF. A download is not a plan until you have proved you can read it.
-

What the local models do

Text · 1.55 GB

LFM2.5 2.6B

WebBrain downloads LiquidAI/LFM2.5-2.6B-ONNX in q4f16 form for local text generation through WebGPU. Use the nuclear control in standalone chat after it is ready.

Vision · about 770 MB

LFM2.5-VL-450M

The local vision layer interprets screenshots on the device, turning visual evidence into context without sending the image to a remote vision provider.

Apocalypse Mode does not replace your selected provider

The downloaded text model is a run-scoped option for standalone chat. Enabling or downloading it does not silently change the provider used by ordinary WebBrain conversations.

+

What the local models do

Text · 1.55 GB

LFM2.5 2.6B

WebBrain downloads LiquidAI/LFM2.5-2.6B-ONNX in q4f16 form for local text generation through WebGPU. Use the nuclear control in standalone chat after it is ready.

Vision · about 810 MB

WebBrain VL 2 450M

The local vision layer interprets screenshots on the device, turning visual evidence into context without sending the image to a remote vision provider.

Apocalypse Mode does not replace your selected provider

The downloaded text model is a run-scoped option for standalone chat. Enabling or downloading it does not silently change the provider used by ordinary WebBrain conversations.

Keep Wikipedia you can actually search

The basic setup downloads the newest compact, text-only Simple English archive. Open Manage archives when you want another language, a fuller edition, or an edition with images. WebBrain resolves the archive’s current version, date, and exact size before installation.

ChoiceTrade-offGood for
Text onlySmaller and faster to download; article text without the full image payload.Compact reference, local factual retrieval, and broad language coverage.
With imagesUses substantially more storage.Articles where diagrams, maps, and photographs matter.
Import a .zim fileYou manage the source file and may need to reauthorize access after a restart.Existing Kiwix collections or archives moved between machines.

The Wikipedia reader searches article titles and opens the matching article from local storage. Local standalone chat can retrieve compact, attributed passages from the installed archive. When you replace the required Simple English archive, WebBrain keeps the old copy until the replacement has downloaded and verified successfully.

diff --git a/web/docs/zh/apocalypse-mode/index.html b/web/docs/zh/apocalypse-mode/index.html index de7630db9..2ee0d53e8 100644 --- a/web/docs/zh/apocalypse-mode/index.html +++ b/web/docs/zh/apocalypse-mode/index.html @@ -18,15 +18,15 @@
-
WebBrain,当互联网不可用时也能使用

提前准备好本地智能和实用知识。

末日模式在你的浏览器中组装一套离线就绪的工具包:在支持的 Chromium 系统上运行设备端文本和视觉模型,可搜索的维基百科存档,以及包含书籍和现场参考资料的应急箱。

文本模型1.55 GB · 本地 WebGPU 推理
视觉模型约 770 MB · 截图保留在本地
维基百科简易英语版 · 可离线搜索
+
WebBrain,当互联网不可用时也能使用

提前准备好本地智能和实用知识。

末日模式在你的浏览器中组装一套离线就绪的工具包:在支持的 Chromium 系统上运行设备端文本和视觉模型,可搜索的维基百科存档,以及包含书籍和现场参考资料的应急箱。

文本模型1.55 GB · 本地 WebGPU 推理
视觉模型约 810 MB · 截图保留在本地
维基百科简易英语版 · 可离线搜索

"离线"的含义

首次下载需要互联网连接。模型文件、维基百科存档和所选文档存储后,其核心推理、搜索和阅读路径从浏览器配置文件本地运行。WebGPU 在设备上执行模型推理;下载的截图不需要远程视觉服务。

在平常的日子里准备

在电力、网络和时间都可预测时进行大文件下载和存储检查要容易得多。启用模式,让每个必要项目达到就绪状态,并在将工具包视为可用之前测试阅读器。

末日模式不会让每个网站或 WebBrain 任务都能离线工作。实时页面、托管模型提供商、当前新闻以及你未下载的任何资源仍需要网络。它准备了一个自包含的本地核心;它不是互联网的副本。

Chromium 和 Firefox 版本有所不同

版本启用模式后准备的内容就绪与应急箱
Chromium,具有兼容的 WebGPU 硬件启动固定的本地文本模型、本地视觉模型和最新的简易英语纯文本维基百科存档。模型传输共享一个本地工作者并按顺序运行。就绪要求三个核心要素全部完成。应急箱在它们完成后解锁。
Firefox提供离线维基百科库、阅读器和应急箱。不显示仅限 Chromium 的 WebGPU 文本和视觉下载栈。在不假装 Firefox 拥有 Chromium WebGPU 运行时的情况下,存档和文档控件仍然可用。

如果文本和视觉卡片没有显示,请首先确认你使用的是具有 WebGPU 支持的硬件和浏览器版本上的 Chromium 版本。

-

构建基础工具包

  1. 打开末日模式。使用设置标题中的核符号末日模式控件。
  2. 检查存储和连接。Chromium 基础套件包括 1.55 GB 文本模型、约 770 MB 视觉模型和当前的简易英语维基百科存档。为临时下载状态和应急箱资源留出额外空间。
  3. 开启模式。在支持的 Chromium 系统上,WebBrain 先启动文本模型,将视觉模型排队在其后,并自动启动所需的维基百科存档。
  4. 保持浏览器打开以进行模型下载。你可以切换标签页或关闭设置,但在本地模型传输继续期间必须保持 Chrome 打开。跟踪每个项目的进度,不要仅依赖总存储数字。
  5. 解决任何未就绪的项目。恢复暂停的项目、重试错误或释放存储空间。移除已完成的模型会删除其缓存文件,需要在离线使用前再次下载。
  6. 测试工具包。使用视觉测试,打开维基百科阅读器,搜索一篇文章,并打开至少一个已安装的 PDF。下载不等于计划,除非你已证明可以阅读它。
+

构建基础工具包

  1. 打开末日模式。使用设置标题中的核符号末日模式控件。
  2. 检查存储和连接。Chromium 基础套件包括 1.55 GB 文本模型、约 810 MB 视觉模型和当前的简易英语维基百科存档。为临时下载状态和应急箱资源留出额外空间。
  3. 开启模式。在支持的 Chromium 系统上,WebBrain 先启动文本模型,将视觉模型排队在其后,并自动启动所需的维基百科存档。
  4. 保持浏览器打开以进行模型下载。你可以切换标签页或关闭设置,但在本地模型传输继续期间必须保持 Chrome 打开。跟踪每个项目的进度,不要仅依赖总存储数字。
  5. 解决任何未就绪的项目。恢复暂停的项目、重试错误或释放存储空间。移除已完成的模型会删除其缓存文件,需要在离线使用前再次下载。
  6. 测试工具包。使用视觉测试,打开维基百科阅读器,搜索一篇文章,并打开至少一个已安装的 PDF。下载不等于计划,除非你已证明可以阅读它。
-

本地模型的功能

文本 · 1.55 GB

LFM2.5 2.6B

WebBrain 下载 LiquidAI/LFM2.5-2.6B-ONNXq4f16 形式,用于通过 WebGPU 进行本地文本生成。就绪后在独立聊天中使用核控件。

视觉 · 约 770 MB

LFM2.5-VL-450M

本地视觉层在设备上解读截图,将视觉证据转化为上下文,无需将图像发送到远程视觉提供商。

末日模式不会替代你选择的提供商

下载的文本模型是独立聊天的运行时选项。启用或下载它不会静默更改普通 WebBrain 对话使用的提供商。

+

本地模型的功能

文本 · 1.55 GB

LFM2.5 2.6B

WebBrain 下载 LiquidAI/LFM2.5-2.6B-ONNXq4f16 形式,用于通过 WebGPU 进行本地文本生成。就绪后在独立聊天中使用核控件。

视觉 · 约 810 MB

WebBrain VL 2 450M

本地视觉层在设备上解读截图,将视觉证据转化为上下文,无需将图像发送到远程视觉提供商。

末日模式不会替代你选择的提供商

下载的文本模型是独立聊天的运行时选项。启用或下载它不会静默更改普通 WebBrain 对话使用的提供商。

保留你可以真正搜索的维基百科

基础设置下载最新的紧凑型纯文本简易英语存档。当你需要其他语言、更完整版本或包含图像的版本时,打开管理存档。WebBrain 会在安装前解析存档的当前版本、日期和确切大小。

选项权衡适用场景
纯文本更小、下载更快;不含完整图像负载的文章文本。紧凑参考、本地事实检索和广泛的语言覆盖。
包含图像使用大量存储空间。图表、地图和照片很重要的文章。
导入 .zim 文件你管理源文件,重启后可能需要重新授权访问。现有的 Kiwix 集合或在机器之间移动的存档。

维基百科阅读器搜索文章标题并从本地存储打开匹配的文章。本地独立聊天可以从已安装的存档中检索紧凑的、有出处的段落。当你替换必需的简易英语存档时,WebBrain 会保留旧副本,直到替换下载并验证成功。