InferenceModelSpec constructor

InferenceModelSpec({
  1. required String name,
  2. required ModelSource modelSource,
  3. ModelSource? loraSource,
  4. ModelReplacePolicy replacePolicy = ModelReplacePolicy.keep,
  5. required ModelType modelType,
  6. ModelFileType fileType = ModelFileType.task,
  7. List<DirectoryBundleFile>? directoryFiles,
})

Implementation

InferenceModelSpec({
  required String name,
  required ModelSource modelSource,
  ModelSource? loraSource,
  ModelReplacePolicy replacePolicy = ModelReplacePolicy.keep,
  required ModelType modelType,
  ModelFileType fileType = ModelFileType.task,
  List<DirectoryBundleFile>? directoryFiles,
}) : _name = name,
     _modelSource = modelSource,
     _loraSource = loraSource,
     _replacePolicy = replacePolicy,
     _modelType = modelType,
     _fileType = fileType,
     // Defensive copy: every other facet of this immutable spec is protected,
     // so the bundle must not stay aliased to a list the caller can mutate.
     _directoryFiles = directoryFiles == null
         ? null
         : List<DirectoryBundleFile>.unmodifiable(directoryFiles) {
  // Enforced in RELEASE too — an `assert` is compiled out, so a mis-built
  // directory spec would otherwise surface far downstream as
  // "Bad state: No element" on `files.first`, not here. The install path
  // rejects these earlier; this guards direct construction of the public ctor.
  final bundle = _directoryFiles;
  if (bundle != null) {
    if (loraSource != null) {
      throw ArgumentError.value(
        loraSource,
        'loraSource',
        'directory (ORT-GenAI) models do not support LoRA',
      );
    }
    if (bundle.isEmpty) {
      throw ArgumentError.value(
        directoryFiles,
        'directoryFiles',
        'a directory model needs at least one file (primary first)',
      );
    }
    if (modelSource != bundle.first.source) {
      throw ArgumentError.value(
        modelSource,
        'modelSource',
        'must be the primary (first) directory file source',
      );
    }
  }
}