InferenceModelSpec constructor
InferenceModelSpec({
- required String name,
- required ModelSource modelSource,
- ModelSource? loraSource,
- ModelReplacePolicy replacePolicy = ModelReplacePolicy.keep,
- required ModelType modelType,
- ModelFileType fileType = ModelFileType.task,
- 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',
);
}
}
}