/** * Engine vocabulary — the words the scheduler itself is defined in. * * Deliberately transport-free. A caller holding a `ScheduledEngine` uses these * directly; a caller reaching the engine over a message port gets them * re-exported from `src/adapters/protocol.js` alongside the wire ops. Keeping * the split visible is the point: the wire protocol is one adapter, not the * interface. */ /** * Scheduling bands, highest first. `interactive` may preempt a running job that * opted into `preemptible`; nothing else ever interrupts work in flight. */ export const PRIORITY = { /** Ghost-text and anything else a human is waiting on keystroke-by-keystroke. */ INTERACTIVE: "interactive", /** Default. Translation, one-shot answers. */ NORMAL: "normal", /** Nobody is watching: reformatting, batch cleanup. Pair with `preemptible`. */ BACKGROUND: "background", }; export const PRIORITY_ORDER = [PRIORITY.INTERACTIVE, PRIORITY.NORMAL, PRIORITY.BACKGROUND]; /** * How far `unload()` goes. * * Two levels rather than two verbs because they are the same intention at * different depths — "I am done with this model" — and the caller should not * have to know that freeing VRAM and freeing disk are different subsystems. * Forgetting the model *entirely* is `remove()`, which stays its own verb * because it is the one that cannot be undone without re-supplying the source. */ export const UNLOAD_LEVEL = { /** Default. Free VRAM, keep the cached bytes — so reloading costs no network. */ VRAM: "vram", /** Also delete the cached bytes. The registry entry survives, so the model is still known. */ CACHE: "cache", }; /** * What a queued job asks its engine to do. * * One pool, not two: priority, session supersession, preemption and * one-task-one-engine are identical for both, and the only thing that differs * is the call at the far end. A second pool would have duplicated the * scheduler to change one line. */ export const JOB_KIND = { CHAT: "chat", EMBEDDING: "embedding", }; /** Engine lifecycle states. */ export const ENGINE_STATE = { IDLE: "idle", LOADING: "loading", READY: "ready", ERROR: "error", }; /** * Out-of-band message kind for configuring an engine worker before WebLLM's own * handshake starts. Distinct from every WebLLM `kind`, so the worker can route * on it without parsing the rest. */ export const WORKER_CONFIGURE = "everything-webgpu/configure";