diff --git a/lib/core/services/api_service.dart b/lib/core/services/api_service.dart index 0fdc5da..f4cdb66 100644 --- a/lib/core/services/api_service.dart +++ b/lib/core/services/api_service.dart @@ -809,6 +809,20 @@ class ApiService { final messageId = msg.id; // Build message for messages map (history.messages) + final List> combinedFilesMap = []; + if (msg.attachmentIds != null && msg.attachmentIds!.isNotEmpty) { + for (final id in msg.attachmentIds!) { + if (id.startsWith('data:') || id.startsWith('http')) { + combinedFilesMap.add({'type': 'image', 'url': id}); + } else { + combinedFilesMap.add({'file_id': id}); + } + } + } + if (msg.files != null && msg.files!.isNotEmpty) { + combinedFilesMap.addAll(msg.files!); + } + messagesMap[messageId] = { 'id': messageId, 'parentId': previousId, @@ -822,9 +836,7 @@ class ApiService { if (msg.role == 'assistant') 'modelIdx': 0, if (msg.role == 'assistant') 'done': true, if (msg.role == 'user' && model != null) 'models': [model], - if (msg.attachmentIds != null && msg.attachmentIds!.isNotEmpty) - 'files': msg.attachmentIds!.map((id) => {'file_id': id}).toList(), - if (msg.files != null && msg.files!.isNotEmpty) 'files': msg.files, + if (combinedFilesMap.isNotEmpty) 'files': combinedFilesMap, }; // Update parent's childrenIds @@ -833,6 +845,20 @@ class ApiService { } // Build message for messages array + final List> combinedFilesArray = []; + if (msg.attachmentIds != null && msg.attachmentIds!.isNotEmpty) { + for (final id in msg.attachmentIds!) { + if (id.startsWith('data:') || id.startsWith('http')) { + combinedFilesArray.add({'type': 'image', 'url': id}); + } else { + combinedFilesArray.add({'file_id': id}); + } + } + } + if (msg.files != null && msg.files!.isNotEmpty) { + combinedFilesArray.addAll(msg.files!); + } + messagesArray.add({ 'id': messageId, 'parentId': previousId, @@ -846,9 +872,7 @@ class ApiService { if (msg.role == 'assistant') 'modelIdx': 0, if (msg.role == 'assistant') 'done': true, if (msg.role == 'user' && model != null) 'models': [model], - if (msg.attachmentIds != null && msg.attachmentIds!.isNotEmpty) - 'files': msg.attachmentIds!.map((id) => {'file_id': id}).toList(), - if (msg.files != null && msg.files!.isNotEmpty) 'files': msg.files, + if (combinedFilesArray.isNotEmpty) 'files': combinedFilesArray, }); previousId = messageId;