MediaSlotModelConfig.fromYaml constructor
Parses one slot entry from yaml, strictly: unknown fields, missing
required strings, and empty values throw ConfigException (a bad
models: section must surface, never silently vanish).
Implementation
factory MediaSlotModelConfig.fromYaml(Object? node, {required String slot}) {
if (node is! YamlMap) {
throw ConfigException(
'models.slots.$slot must be a map with fields '
'${mediaSlotOverrideFields.join(', ')}',
);
}
for (final key in node.keys) {
if (!mediaSlotOverrideFields.contains(key)) {
throw ConfigException(
'unknown field "$key" in models.slots.$slot — expected '
'${mediaSlotOverrideFields.join(', ')}',
);
}
}
String required(String field) {
final value = node[field];
if (value is! String || value.trim().isEmpty) {
throw ConfigException(
'models.slots.$slot.$field must be a non-empty string',
);
}
return value.trim();
}
final apiKeyName = node['apiKeyName'];
if (apiKeyName != null &&
(apiKeyName is! String || apiKeyName.trim().isEmpty)) {
throw ConfigException(
'models.slots.$slot.apiKeyName must be a non-empty string',
);
}
return MediaSlotModelConfig(
providerKind: required('providerKind'),
baseUrl: required('baseUrl'),
modelId: required('modelId'),
apiKeyName: (apiKeyName as String?)?.trim(),
);
}