Napcar

LanguageModel API

A compatibility layer inspired by the Chrome Prompt API, mapped onto Napcar's local models.

Napcar provides a LanguageModel-style compatibility surface for code written against the Chrome Prompt API. Import it from the SDK — it is opt-in and never patches globalThis.LanguageModel.

import { createLanguageModel } from "@napcar/sdk/language-model";

const LanguageModel = createLanguageModel();

const status = await LanguageModel.availability();
// "unavailable" | "downloadable" | "downloading" | "available"

const session = await LanguageModel.create({ systemPrompt: "You are concise." });

const text = await session.prompt("Explain local LLMs in one paragraph.");

const stream = session.promptStreaming("Write a haiku about browsers.");
for await (const chunk of streamToAsyncIterable(stream)) appendToUI(chunk);

session.destroy();

Mapping

Prompt APINapcar
LanguageModel.availability()navigator.napcar.ai.availability({ task: "chat" })
LanguageModel.create()navigator.napcar.ai.requestSession({ task: "chat" })
session.prompt()session.generate({ input }).then(r => r.text)
session.promptStreaming()session.generateStreaming({ input })
responseConstraintresponseFormat: { type: "json_schema", schema }

Caveats

This is a compatibility layer, not a full implementation of the Chrome Prompt API. It implements availability, create, prompt, promptStreaming, append, clone, destroy, and measureInputUsage. Behaviors that depend on Chrome-internal model downloads or exact token accounting are approximated. Expose it only in secure contexts.

On this page