MediaSlotModelConfig.fromYaml constructor

MediaSlotModelConfig.fromYaml(
  1. Object? node, {
  2. required String slot,
})

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(),
  );
}