WebLLM: اجرای مدل زبانی مستقیم توی مرورگر
خلاصهٔ کاملتر
WebLLM یه موتور استنتاج (inference، یعنی همون مرحلهای که مدل جواب تولید میکنه) برای مدلهای زبانیه که کل کار رو داخل خود مرورگر انجام میده و برای شتابدهی از WebGPU (رابط جاوااسکریپتی دسترسی به کارت گرافیک) استفاده میکنه. هیچ سروری وسط نیست: وزنهای مدل روی دستگاه کاربر دانلود و همونجا اجرا میشن. این پروژه همراهِ MLC LLM ساخته شده و بهصورت پکیج npm با نام @mlc-ai/web-llm منتشر میشه.
نقطهٔ قوت اصلیاش سازگاری کامل با API اوپنایآیه، یعنی همون شکل فراخوانی آشنا، ولی روی مدلهای متنباز و بدون کلید API. ساخت موتور با CreateMLCEngine انجام میشه و چون بار اول باید مدل دانلود بشه، این فراخوانی زمانبر و asyncه؛ initProgressCallback همون چیزیه که پیشرفت دانلود رو بهت گزارش میده.
import { CreateMLCEngine } from "@mlc-ai/web-llm";
const selectedModel = "Llama-3.1-8B-Instruct-q4f32_1-MLC";
const engine = await CreateMLCEngine(selectedModel, { initProgressCallback });بعد از آماده شدن موتور، جوابها رو از engine.chat.completions.create میگیری. استریم هم هست: کافیه stream: true بدی تا خروجی بهشکل AsyncGenerator تکهتکه برسه و بشه همزمان روی صفحه نشونش داد. آخرین تکه هم اطلاعات usage رو داره.
const chunks = await engine.chat.completions.create({
messages,
stream: true,
stream_options: { include_usage: true },
});جز استریم، حالت JSON ساختاریافته (که برای سرعت تو بخش WebAssembly پیاده شده)، seed برای خروجی تکرارپذیر و function calling که هنوز در دست کاره هم پشتیبانی میشن. از خانوادههای Llama (نسخههای ۲ و ۳)، Phi، Gemma-2B، Mistral-7B-v0.3 و Qwen2 در اندازههای ۰.۵ تا ۷ میلیارد پارامتر پشتیبانی میکنه و اگه مدل خودت رو به فرمت MLC کامپایل کنی، اونم سوار میشه.
برای اینکه محاسبات سنگین رابط کاربری رو قفل نکنه، نسخههای Web Worker و Service Worker هم داره؛ دومی مدل رو بین بازدیدها نگه میداره و تجربهٔ آفلاین رو بهتر میکنه، البته چون مرورگر هر لحظه میتونه سرویسورکر رو بکشه، مدیریت خطا با خودته. کش مدل هم چهار حالت داره: cache که پیشفرضه، indexeddb، opfs و cross-origin که آزمایشیه و به یه افزونهٔ کروم نیاز داره.
نکات کلیدی:
-
همهچیز سمت کلاینت با WebGPU اجرا میشه؛ نه سروری لازمه نه دادهای از دستگاه بیرون میره
-
سازگار با API اوپنایآی: streaming، حالت JSON، seed و function calling (هنوز WIP)
-
پشتیبانی از Llama 3، Phi 3، Gemma-2B، Mistral-7B-v0.3 و Qwen2 (۰.۵ تا ۷ میلیارد پارامتر)
-
نصب با npm install @mlc-ai/web-llm یا ایمپورت مستقیم از CDN با esm.run
-
چهار بکاند کش: cache (پیشفرض)، indexeddb، opfs و cross-origin آزمایشی




