Pull embeddings once diff sync is done

This commit is contained in:
vishnukvmd 2023-10-03 22:38:18 +05:30
parent eb4daf331a
commit 32a5adb6d8
5 changed files with 63 additions and 4 deletions

View file

@ -34,7 +34,7 @@ import 'package:photos/services/memories_service.dart';
import 'package:photos/services/push_service.dart';
import 'package:photos/services/remote_sync_service.dart';
import 'package:photos/services/search_service.dart';
import "package:photos/services/semantic_search_service.dart";
import 'package:photos/services/semantic_search/semantic_search_service.dart';
import "package:photos/services/storage_bonus_service.dart";
import 'package:photos/services/sync_service.dart';
import 'package:photos/services/trash_sync_service.dart';
@ -190,7 +190,7 @@ Future<void> _init(bool isBackground, {String via = ''}) async {
});
}
FeatureFlagService.instance.init();
SemanticSearchService.instance.init();
SemanticSearchService.instance.init(preferences);
// Can not including existing tf/ml binaries as they are not being built
// from source.

View file

@ -17,7 +17,7 @@ import 'package:photos/models/search/generic_search_result.dart';
import 'package:photos/models/search/search_result.dart';
import 'package:photos/services/collections_service.dart';
import "package:photos/services/location_service.dart";
import "package:photos/services/semantic_search_service.dart";
import 'package:photos/services/semantic_search/semantic_search_service.dart';
import "package:photos/states/location_screen_state.dart";
import "package:photos/ui/viewer/location/location_screen.dart";
import 'package:photos/utils/date_time_util.dart';

View file

@ -0,0 +1,18 @@
import "package:photos/services/semantic_search/remote_embedding.dart";
import "package:shared_preferences/shared_preferences.dart";
class EmbeddingStore {
EmbeddingStore._privateConstructor();
static final EmbeddingStore instance = EmbeddingStore._privateConstructor();
late SharedPreferences _preferences;
Future<void> init(SharedPreferences preferences) async {
_preferences = preferences;
}
Future<List<RemoteEmbedding>> fetchEmbeddings() async {
return [];
}
}

View file

@ -0,0 +1,30 @@
import "dart:convert";
class RemoteEmbedding {
final int fileID;
final String model;
final String encryptedEmbedding;
final String decryptionHeader;
final int updationTime;
RemoteEmbedding({
required this.fileID,
required this.model,
required this.encryptedEmbedding,
required this.decryptionHeader,
required this.updationTime,
});
factory RemoteEmbedding.fromMap(Map<String, dynamic> map) {
return RemoteEmbedding(
fileID: map['fileID']?.toInt() ?? 0,
model: map['model'] ?? '',
encryptedEmbedding: map['encryptedEmbedding'] ?? '',
decryptionHeader: map['decryptionHeader'] ?? '',
updationTime: map['updationTime']?.toInt() ?? 0,
);
}
factory RemoteEmbedding.fromJson(String source) =>
RemoteEmbedding.fromMap(json.decode(source));
}

View file

@ -6,10 +6,14 @@ import "package:computer/computer.dart";
import "package:flutter/services.dart";
import "package:logging/logging.dart";
import "package:path_provider/path_provider.dart";
import "package:photos/core/event_bus.dart";
import "package:photos/db/files_db.dart";
import "package:photos/events/sync_status_update_event.dart";
import "package:photos/models/embedding.dart";
import "package:photos/models/file/file.dart";
import "package:photos/services/semantic_search/embedding_store.dart";
import "package:photos/utils/thumbnail_util.dart";
import "package:shared_preferences/shared_preferences.dart";
class SemanticSearchService {
SemanticSearchService._privateConstructor();
@ -25,8 +29,15 @@ class SemanticSearchService {
Future<List<EnteFile>>? _ongoingRequest;
PendingQuery? _nextQuery;
Future<void> init() async {
Future<void> init(SharedPreferences preferences) async {
await _loadModel();
await EmbeddingStore.instance.init(preferences);
Bus.instance.on<SyncStatusUpdate>().listen((event) async {
if (event.status == SyncStatus.diffSynced) {
EmbeddingStore.instance.fetchEmbeddings();
}
});
_computeMissingEmbeddings();
}