import "dart:typed_data"; import "package:photos/models/ml/clip.dart"; import "package:photos/models/ml/face/face.dart"; import "package:photos/models/ml/vector.dart"; import "package:photos/services/machine_learning/face_ml/face_clustering/face_db_info_for_clustering.dart"; abstract class IMLDataDB { Future bulkInsertFaces(List faces); Future updateFaceIdToClusterId(Map faceIDToClusterID); Future> faceIndexedFileIds({int minimumMlVersion}); Future getFaceIndexedFileCount({int minimumMlVersion}); Future> clusterIdToFaceCount(); Future> getPersonIgnoredClusters(String personID); Future> getPersonClusterIDs(String personID); Future> getPersonsClusterIDs(List personID); Future clearTable(); Future> getFaceEmbeddingsForCluster( String clusterID, { int? limit, }); Future>> getFaceEmbeddingsForClusters( Iterable clusterIDs, { int? limit, }); Future getCoverFaceForPerson({ required T recentFileID, String? personID, String? avatarFaceId, String? clusterID, }); Future?> getFacesForGivenFileID(T fileUploadID); Future>> getClusterToFaceIDs( Set clusterIDs, ); Future getClusterIDForFaceID(String faceID); Future>> getAllClusterIdToFaceIDs(); Future> getFaceIDsForCluster(String clusterID); Future>>> getPersonToClusterIdToFaceIds(); Future>> getClusterIdToFaceIdsForPerson( String personID, ); Future> getFaceIDsForPerson(String personID); Future> getBlurValuesForCluster(String clusterID); Future> getFaceIdsToClusterIds(Iterable faceIds); Future>> getFileIdToClusterIds(); Future forceUpdateClusterIds(Map faceIDToClusterID); Future removeFaceIdToClusterId(Map faceIDToClusterID); Future removePerson(String personID); Future> getFaceInfoForClustering({ int maxFaces, int offset, int batchSize, }); Future> getFaceEmbeddingMapForFaces( Iterable faceIDs, ); Future getTotalFaceCount(); Future getErroredFaceCount(); Future> getErroredFileIDs(); Future deleteFaceIndexForFiles(List fileIDs); Future getClusteredOrFacelessFileCount(); Future getClusteredToIndexableFilesRatio(); Future getUnclusteredFaceCount(); Future assignClusterToPerson({ required String personID, required String clusterID, }); Future bulkAssignClusterToPersonID( Map clusterToPersonID, ); Future captureNotPersonFeedback({ required String personID, required String clusterID, }); Future bulkCaptureNotPersonFeedback( Map clusterToPersonID, ); Future removeNotPersonFeedback({ required String personID, required String clusterID, }); Future removeClusterToPerson({ required String personID, required String clusterID, }); Future>> getFileIdToClusterIDSet(String personID); Future>> getFileIdToClusterIDSetForCluster( Set clusterIDs, ); Future clusterSummaryUpdate(Map summary); Future deleteClusterSummary(String clusterID); Future> getAllClusterSummary([ int? minClusterSize, ]); Future> getClusterToClusterSummary( Iterable clusterIDs, ); Future> getClusterIDToPersonID(); Future dropClustersAndPersonTable({bool faces}); Future dropFacesFeedbackTables(); Future> getFileIDsOfPersonID(String personID); Future> getFileIDsOfClusterID(String clusterID); Future> getAllFileIDsOfFaceIDsNotInAnyCluster(); Future> getAllFilesAssociatedWithAllClusters({ List? exceptClusters, }); Future> getAllClipVectors(); Future> clipIndexedFileWithVersion(); Future> getClipVectorsForFileIDs( Iterable fileIDs, ); Future getClipIndexedFileCount({int minimumMlVersion}); Future putClip(List embeddings); Future deleteClipEmbeddings(List fileIDs); Future deleteClipIndexes(); }