WebAI Studio

The Decisions API (window.DecisionModel) evaluates input text against a caller-defined schema of structured questions (binary, categorical, and ordinal) on the user's device, returning a selected option label, confidence score, and probability distribution for each question.

Enable #decisions-api in chrome://flags to use this API.
No flag? The WebAI Studio extension polyfills window.DecisionModel on every page with a local Laya decision encoder running on LiteRT.js. The model is downloaded once from Hugging Face; inputs never leave the device. Pick the model in the extension settings and inspect calls in the DevTools panel.

Use cases

Intent & action routing

Map a user's natural-language input or support request to a predefined set of application actions, departments, or UI filters.

Pre-send checks & moderation

Evaluate drafts or comments locally against boolean criteria (such as policy checks or tone checks) before submitting or escalating to a generative model.

Ordinal rating & ranking

Score items along an ordered scale (such as 1 to 5 severity or relevance) and read the expected value expectedScore.

Question types

A schema passed to DecisionModel.create() contains a questions array. Each question specifies an id, a prompt, and one of three type values:

TypeOptions RequiredOutput Fields
binaryNo (implicit "true" / "false")Returns label ("true" or "false"), probability, confidence, and probabilities.
categoricalYes (2 or more { label, description } items)Returns the top option label, confidence, and probabilities across all options.
ordinalYes (ordered levels, e.g., "1" through "5")Returns label, expectedScore (weighted average across levels), confidence, and probabilities.

DecisionModel.availability()

Checks whether the browser supports creating a decision model session for the given options.

staticavailability(options?: DecisionModelCreateOptions): Promise<Availability>;

Returns

A promise that resolves to an Availability string: 'available', 'downloadable', 'downloading', or 'unavailable'.

Interactive Playground

DecisionModel.create()

Creates a new DecisionModel instance configured with the provided question schema.

staticcreate(options: DecisionModelCreateOptions): Promise<DecisionModel>;
Interactive Playground

decisionModel.classify()

Evaluates the input string against all questions defined in the session schema and returns a DecisionResult: a record keyed by question id, so you can read result.category.label or destructure const { command } = await decisionModel.classify(input).

classify(input: DOMString, options?: DecisionModelClassifyOptions): Promise<DecisionResult>;
Interactive Playground

Decision properties (Decision)

PropertyTypeDescription
idDOMStringThe question identifier defined in the schema.
labelDOMStringThe highest-probability option label ("true"/"false" for binary, or one of the supplied options).
confidencedouble (0.0 – 1.0)Confidence score for the decision.
probabilitydouble? (0.0 – 1.0)Present for binary questions: probability of "true".
expectedScoredouble?Present for ordinal questions: weighted average across the ordered option levels.
probabilitiessequence<OptionProbability>List of { label, probability } entries across all options for the question.

decisionModel.destroy()

Releases the resources associated with the decision model session when it is no longer needed.

Interactive Playground

API reference (Prospective WebIDL)

Example Output