applyModelChanged method

void applyModelChanged(
  1. Map<String, dynamic> payload
)

Implementation

void applyModelChanged(Map<String, dynamic> payload) {
  final backend = payload['backend']?.toString().trim();
  final provider = payload['provider']?.toString().trim();
  final model = payload['model']?.toString().trim();
  if (provider == null || provider.isEmpty || model == null || model.isEmpty) {
    return;
  }
  final normalizedBackend = backend == null || backend.isEmpty ? null : backend;
  final existing = _models.firstWhereOrNull(
    (option) => option.backend == normalizedBackend && option.provider == provider && option.model == model,
  );
  final payloadHasSupportsAttachments = payload.containsKey('supports_attachments');
  final payloadHasAccepts = payload.containsKey('accepts');
  final payloadSupportsAttachments = payload['supports_attachments'] == true;
  final payloadAccepts = _stringList(payload['accepts']);
  final outputModalities = payload['output_modalities'];
  if (outputModalities is List && outputModalities.isNotEmpty) {
    final firstOutputModality = outputModalities.first?.toString().trim();
    if (firstOutputModality != null && firstOutputModality.isNotEmpty) {
      _activeModality = firstOutputModality;
    }
  }
  final active =
      existing?.copyWith(
        active: true,
        supportsAttachments: payloadHasSupportsAttachments ? payloadSupportsAttachments : null,
        accepts: payloadHasAccepts ? payloadAccepts : null,
      ) ??
      DatasetChatModelOption(
        backend: normalizedBackend,
        provider: provider,
        providerFriendlyName: payload['provider_friendly_name']?.toString() ?? provider,
        model: model,
        modelFriendlyName: payload['model_friendly_name']?.toString(),
        modelDescription: payload['model_description']?.toString(),
        inputFormat: DatasetChatAudioFormat.fromJson(payload['input_format']),
        outputFormat: DatasetChatAudioFormat.fromJson(payload['output_format']),
        turnDetection: payload['turn_detection']?.toString(),
        realtimeProtocols: _stringList(payload['realtime_protocols']),
        supportsAttachments: payloadSupportsAttachments,
        accepts: payloadAccepts,
        modalities: const <String>[],
        active: true,
      );
  if (existing == null) {
    _models = [for (final option in _models) option.copyWith(active: false), active];
  } else {
    _models = [for (final option in _models) option.copyWith(active: option.key == active.key)];
  }
  _activeModel = active;
  _activeModality = _resolvedOutputModality(_activeModel, _activeModality);
  final payloadVoice = payload['voice']?.toString().trim();
  _activeVoice = _resolvedVoice(_activeModel, payloadVoice == null || payloadVoice.isEmpty ? active.defaultOutputVoice : payloadVoice);
  _notifyChanged();
}