feat(attachments): Optimize file ID extraction and image conversion

This commit is contained in:
cogwheel0
2025-12-10 19:40:38 +05:30
parent 0fc82d36f7
commit da63e3cbff
7 changed files with 266 additions and 308 deletions

View File

@@ -2709,15 +2709,20 @@ class ApiService {
final processedMessages = messages.map((message) {
final role = message['role'] as String;
final content = message['content'];
final files = message['files'] as List<Map<String, dynamic>>?;
// Safely cast files list - may be List<dynamic> from spread operations
final rawFiles = message['files'];
final files = rawFiles is List
? rawFiles.whereType<Map<String, dynamic>>().toList()
: <Map<String, dynamic>>[];
final isContentArray = content is List;
final hasImages = files?.any((file) => file['type'] == 'image') ?? false;
final hasImages =
files.isNotEmpty && files.any((file) => file['type'] == 'image');
if (isContentArray) {
return {'role': role, 'content': content};
} else if (hasImages && role == 'user') {
final imageFiles = files!
final imageFiles = files
.where((file) => file['type'] == 'image')
.toList();
final contentText = content is String ? content : '';
@@ -2741,8 +2746,10 @@ class ApiService {
// Separate files from messages
final allFiles = <Map<String, dynamic>>[];
for (final message in messages) {
final files = message['files'] as List<Map<String, dynamic>>?;
if (files != null) {
// Safely cast files list - may be List<dynamic> from spread operations
final rawFiles = message['files'];
if (rawFiles is List) {
final files = rawFiles.whereType<Map<String, dynamic>>().toList();
final nonImageFiles = files
.where((file) => file['type'] != 'image')
.toList();

View File

@@ -279,7 +279,10 @@ Map<String, dynamic> _parseOpenWebUIMessageToJson(
allFiles.add(fileMap);
final url = entry['url'].toString();
final match = RegExp(r'/api/v1/files/([^/]+)/content').firstMatch(url);
// Handle both URL formats: /api/v1/files/{id} and /api/v1/files/{id}/content
final match = RegExp(
r'/api/v1/files/([^/]+)(?:/content)?$',
).firstMatch(url);
if (match != null) {
attachments.add(match.group(1)!);
}