applyModelChanged method
void
applyModelChanged(
- 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();
}