diff --git a/mobile/lib/models/ml/face/face.dart b/mobile/lib/models/ml/face/face.dart index 3036a00630..455938868b 100644 --- a/mobile/lib/models/ml/face/face.dart +++ b/mobile/lib/models/ml/face/face.dart @@ -59,7 +59,7 @@ class Face { return Face( faceID, fileID, - List.from(json['embedding'] as List), + parseAsDoubleList(json['embedding'] as List), json['score'] as double, Detection.fromJson(json['detection'] as Map), // high value means t @@ -77,3 +77,21 @@ class Face { 'blur': blur, }; } + +List parseAsDoubleList(List inputList) { + if (inputList.isEmpty) return const []; + + if (inputList is List) return inputList; + return List.generate( + inputList.length, + (index) { + final value = inputList[index]; + if (value is int) return value.toDouble(); + if (value is double) return value; + throw FormatException( + 'Invalid type at index $index: ${value.runtimeType}', + ); + }, + growable: false, + ); +} diff --git a/mobile/lib/services/filedata/model/file_data.dart b/mobile/lib/services/filedata/model/file_data.dart index d73ee1d2f8..56bfe1cb4e 100644 --- a/mobile/lib/services/filedata/model/file_data.dart +++ b/mobile/lib/services/filedata/model/file_data.dart @@ -147,7 +147,7 @@ class RemoteClipEmbedding { // fromJson factory RemoteClipEmbedding.fromJson(Map json) { return RemoteClipEmbedding( - List.from(json['embedding'] as List), + parseAsDoubleList(json['embedding'] as List), version: json['version'] as int, client: json['client'] as String, );