loadPretrainedModel function domain exported ~ 54.5%

Last updated: 2026-03-02T11:04:51.015Z

Metrics

LOC: 57 Complexity: 5 Params: 0 Coverage: 54.5% (12/22 lines, 5x executed)

Signature

loadPretrainedModel(): : Promise<void>

Summary

Loads the pre-trained TF.js model. Priority: 1. Runtime-trained model stored in chrome.storage.local (via options page) 2. Bundled model files from public/model/ (ship-time default) Safe to call multiple times — subsequent calls are no-ops.

Source Code

export async function loadPretrainedModel(): Promise<void> {
  if (_pretrained) return;
  if (_pretrainedLoadPromise) return _pretrainedLoadPromise;

  _pretrainedLoadPromise = (async () => {
    try {
      await loadTfModule();

      // Step 1: Try runtime-trained model (user dataset, options page)
      const runtimeModel = await loadRuntimeModel();
      if (runtimeModel) {
        _pretrained = runtimeModel;
        await loadLearnedVectors();
        log.info(
          TF_MESSAGES.modelLoaded.runtime(
            runtimeModel.labels.length,
            runtimeModel.vocab.size,
            _learnedVectors.length,
          ),
        );
        return;
      }

      // Step 2: Fall back to bundled model files
      const tf = await loadTfModule();
      const base = chrome.runtime.getURL("");
      const [model, vocabRaw, labelsRaw] = await Promise.all([
        tf.loadLayersModel(`${base}${TF_CONFIG.model.json}`),
        fetch(`${base}${TF_CONFIG.model.vocab}`).then(
          (r) => r.json() as Promise<Record<string, number>>,
        ),
        fetch(`${base}${TF_CONFIG.model.labels}`).then(
          (r) => r.json() as Promise<string[]>,
        ),
      ]);
      _pretrained = {
        model,
        vocab: new Map(Object.entries(vocabRaw)),
        labels: labelsRaw as FieldType[],
      };
      await loadLearnedVectors();

      log.info(
        TF_MESSAGES.modelLoaded.bundled(
          labelsRaw.length,
          _pretrained.vocab.size,
          _learnedVectors.length,
        ),
      );
    } catch (err) {
      log.error(TF_MESSAGES.modelLoadFailed.error, err);
      log.warn(TF_MESSAGES.modelLoadFailed.fallback);
    }
  })();

  return _pretrainedLoadPromise;
}

Dependencies (Outgoing)

graph LR loadPretrainedModel["loadPretrainedModel"] loadTfModule["loadTfModule"] loadLearnedVectors["loadLearnedVectors"] loadPretrainedModel -->|calls| loadTfModule loadPretrainedModel -->|calls| loadLearnedVectors style loadPretrainedModel fill:#dbeafe,stroke:#2563eb,stroke-width:2px click loadPretrainedModel "5945d42bd468f616.html" click loadTfModule "0aaf7f2a78a8a2ae.html" click loadLearnedVectors "c050c9d2aa02d198.html"
TargetType
loadTfModule calls
loadLearnedVectors calls

Impact (Incoming)

graph LR loadPretrainedModel["loadPretrainedModel"] FillableElement["FillableElement"] makeField["makeField"] reloadClassifier["reloadClassifier"] resetModelMock["resetModelMock"] FillableElement -->|uses| loadPretrainedModel makeField -->|uses| loadPretrainedModel reloadClassifier -->|calls| loadPretrainedModel resetModelMock -->|uses| loadPretrainedModel style loadPretrainedModel fill:#dbeafe,stroke:#2563eb,stroke-width:2px click loadPretrainedModel "5945d42bd468f616.html" click FillableElement "2ecf5aaac3f668a8.html" click makeField "ae72134e0e8cd3e2.html" click reloadClassifier "30b3749d6c005c84.html" click resetModelMock "4ef72c19f1c89871.html"
SourceType
FillableElement uses
makeField uses
reloadClassifier calls
resetModelMock uses