Machine LearningΒΆ

This component is an experimental machine learning local inference engine. Currently there is no inference engine actually integrated yet.

Here is an example of the API:

// The engine process manages the life cycle of the engine. It runs in its own process.
// Models can consume large amounts of memory, and this helps encapsulate it at the
// operating system level.
const EngineProcess = ChromeUtils.importESModule("chrome://global/content/ml/EngineProcess.sys.mjs");

// The MLEngineParent is a JSActor that can communicate with the engine process.
const mlEngineParent = await EngineProcess.getMLEngineParent();


/**
 * When implementing a model, there should be a class that provides a `getModel` function
 * that is responsible for providing the `ArrayBuffer` of the model. Typically this
 * download is managed by RemoteSettings.
 */
class SummarizerModel {
  /**
   * @returns {ArrayBuffer}
   */
  static getModel() { ... }
}

// An engine can be created using a unique name for the engine, and the function
// to get the model. This class handles the life cycle of the engine.
const summarizer = mlEngineParent.getEngine(
  "summarizer",
  SummarizerModel.getModel
);

// In order to run the model, use the `run` method. This will initiate the engine if
// it is needed, and return the result. The messaging to the engine process happens
// through a MessagePort.
const result = await summarizer.run("A sentence that can be summarized.")

// The engine can be explicitly terminated, or it will be destroyed through an idle
// timeout when not in use, as the memory requirements for models can be quite large.
summarizer.terminate();