Skip to main content

Engines

ClassEntryidsupportsConstraintdelete()
PromptApiEngine/prompt-apiprompt-apiyes (responseConstraint)no
WebLlmEngine/web-llmweb-llm:<model id>yes (response_format)yes
TransformersJsEngine/transformerstransformers:<model id>noyes

WebLLM and transformers.js are imported on first use, so they are not in the initial bundle.

Prompt API​

import { PromptApiEngine } from '@soverius-ai/browser-models/prompt-api';

new PromptApiEngine({ languages: ['en', 'de'] });
OptionDefault
languages['en']
languageModelglobal LanguageModel
  • The browser owns the model, so there is no delete().
  • load() may need a user gesture.
  • The session is reused while the conversation continues.

WebLLM​

import { WebLlmEngine } from '@soverius-ai/browser-models/web-llm';

new WebLlmEngine('Qwen3-0.6B-q4f16_1-MLC', {
worker: () =>
new Worker(new URL('./web-llm.worker.ts', import.meta.url), {
type: 'module',
}),
});
// web-llm.worker.ts
import { startWebLlmWorker } from '@soverius-ai/browser-models/web-llm/worker';
startWebLlmWorker();
OptionDefault
workernone: runs on the main thread
appConfigWebLLM's prebuiltAppConfig (Cache API)

OPFS: appConfig: { ...prebuiltAppConfig, cacheBackend: 'opfs' }.

transformers.js​

import { TransformersJsEngine } from '@soverius-ai/browser-models/transformers';

new TransformersJsEngine('onnx-community/Qwen3-0.6B-ONNX');
new TransformersJsEngine('onnx-community/gemma-4-E4B-it-ONNX', {
task: 'image-text-to-text',
});
OptionValuesDefault
task'text-generation', 'image-text-to-text' (AutoProcessor)'text-generation'
device'webgpu', 'wasm''webgpu'
dtype'q4f16', 'q4', 'q8', 'fp16', 'fp32''q4f16' (WebGPU), 'q4' (WASM)
maxNewTokensnumber1024
storage'cache-api', 'opfs' (global for all transformers.js models)'cache-api'

image-text-to-text models get text only.

transformers.js loads ONNX Runtime's wasm from a CDN. With Vite, add the official onnxruntime-web-use-extern-wasm condition, or Vite emits an unused 26 MB copy:

import { defaultClientConditions, defineConfig } from 'vite';

export default defineConfig({
resolve: {
conditions: ['onnxruntime-web-use-extern-wasm', ...defaultClientConditions],
},
});

Custom engine​

import type { Engine } from '@soverius-ai/browser-models';

const echo: Engine = {
id: 'echo',
supportsConstraint: false,
availability: async () => 'available',
load: async () => undefined,
unload: async () => undefined,
async *generate({ messages }) {
yield messages.at(-1)?.content ?? '';
},
};
MemberPurpose
idstable id, shown as engineId in Model state
supportsConstraintgenerate() can force JSON Schema output with constraint
availability()available · downloadable · downloading · unavailable
load({ onProgress, signal })download and load
generate({ messages, constraint, signal })stream text; throws when signal aborts
unload()free memory, GPU buffers, worker; stop a load in progress
delete()optional: unload, then remove the download