Source code
Revision control
Copy as Markdown
Other Tools
/* This Source Code Form is subject to the terms of the Mozilla Public
* License, v. 2.0. If a copy of the MPL was not distributed with this file,
/**
* @import { ModelHub } from "chrome://global/content/ml/ModelHub.sys.mjs"
*/
/**
* Helpers for managing the install and uninstall of on-device AI models. This
* could be a .sys.mjs module if that makes more sense, but any feature-specific
* helpers could be imported here too.
*/
const XPCOMUtils = ChromeUtils.importESModule(
"resource://gre/modules/XPCOMUtils.sys.mjs"
).XPCOMUtils;
const lazy = XPCOMUtils.declareLazy({
ModelHub: "chrome://global/content/ml/ModelHub.sys.mjs",
log: () =>
console.createInstance({
prefix: "OnDeviceModelManager",
maxLogLevel: "Info",
}),
});
/** @typedef {typeof OnDeviceModelFeatures[keyof typeof OnDeviceModelFeatures]} OnDeviceModelFeaturesEnum */
/**
* Features that support on-device AI models.
*/
const OnDeviceModelFeatures = Object.freeze({
// NOTE: Feel free to change the values here to whatever makes sense.
TabGroups: "tabgroups",
KeyPoints: "keypoints",
PdfAltText: "pdfalttext",
});
export const OnDeviceModelManager = {
features: OnDeviceModelFeatures,
/** @type {ModelHub} */
_modelHub: null,
get modelHub() {
if (!this._modelHub) {
this._modelHub = new lazy.ModelHub();
}
return this._modelHub;
},
/**
* Install the models for a specific feature. This should be used when a user
* explicitly enables a feature, so it's ready when they go to use it.
*
* @param {OnDeviceModelFeaturesEnum} feature The feature key to install.
*/
async install(feature) {
switch (feature) {
case OnDeviceModelFeatures.TabGroups:
lazy.log.info("install TabGroups");
return;
case OnDeviceModelFeatures.KeyPoints:
lazy.log.info("install KeyPoints");
return;
case OnDeviceModelFeatures.PdfAltText:
lazy.log.info("install PdfAltText");
return;
default:
throw new Error(`Unknown on-device model feature "${feature}"`);
}
},
/**
* Uninstall the models for a specific feature.
*
* @param {OnDeviceModelFeaturesEnum} feature The feature key to uninstall.
*/
async uninstall(feature) {
// TODO: Maybe something like this?
// this.modelHub.deleteFilesByEngine(feature);
switch (feature) {
case OnDeviceModelFeatures.TabGroups:
lazy.log.info("uninstall TabGroups");
return;
case OnDeviceModelFeatures.KeyPoints:
lazy.log.info("uninstall KeyPoints");
return;
case OnDeviceModelFeatures.PdfAltText:
lazy.log.info("uninstall PdfAltText");
return;
default:
throw new Error(`Unknown on-device model feature "${feature}"`);
}
},
};