From 785cac2c70940b8ca00f1113d8d208c38ea5ddb0 Mon Sep 17 00:00:00 2001 From: Neeraj Gupta <254676+ua741@users.noreply.github.com> Date: Tue, 17 Sep 2024 15:03:30 +0530 Subject: [PATCH] [mob] Define modal for remote prompt --- mobile/lib/models/ml/discover/prompt.dart | 22 ++++++++++++++ .../semantic_search_service.dart | 1 - mobile/lib/services/magic_cache_service.dart | 29 +++++++++++-------- 3 files changed, 39 insertions(+), 13 deletions(-) create mode 100644 mobile/lib/models/ml/discover/prompt.dart diff --git a/mobile/lib/models/ml/discover/prompt.dart b/mobile/lib/models/ml/discover/prompt.dart new file mode 100644 index 0000000000..37ffffc982 --- /dev/null +++ b/mobile/lib/models/ml/discover/prompt.dart @@ -0,0 +1,22 @@ +// https://discover.ente.io/v1.json +class Prompt { + final String id; + final int position; + final String query; + final double minScore; + final double minSize; + final String title; + final bool showVideo; + final bool bestFirst; + + // fromJson + Prompt.fromJson(Map json) + : id = json['id'] ?? json['title'], + query = json['query'] ?? json['prompt'], + minScore = json['minScore'] ?? json['minimumScore'] ?? 0.2, + minSize = json['minSize'] ?? json['minimumSize'] ?? 0.0, + position = json['position'] ?? 0, + title = json['title'], + bestFirst = json['bestFirst'] ?? false, + showVideo = json['showVideo'] ?? false; +} diff --git a/mobile/lib/services/machine_learning/semantic_search/semantic_search_service.dart b/mobile/lib/services/machine_learning/semantic_search/semantic_search_service.dart index 65d70b5c96..f5b08c7a33 100644 --- a/mobile/lib/services/machine_learning/semantic_search/semantic_search_service.dart +++ b/mobile/lib/services/machine_learning/semantic_search/semantic_search_service.dart @@ -184,7 +184,6 @@ class SemanticSearchService { ) async { final results = await getMatchingFiles(query, similarityThreshold: minimumSimilarity); - final matchingFileIDs = []; for (EnteFile file in results) { matchingFileIDs.add(file.uploadedFileID!); diff --git a/mobile/lib/services/magic_cache_service.dart b/mobile/lib/services/magic_cache_service.dart index 595cf3a5c0..5eb880da32 100644 --- a/mobile/lib/services/magic_cache_service.dart +++ b/mobile/lib/services/magic_cache_service.dart @@ -9,6 +9,7 @@ import "package:path_provider/path_provider.dart"; import "package:photos/db/files_db.dart"; import "package:photos/extensions/stop_watch.dart"; import "package:photos/models/file/file.dart"; +import "package:photos/models/ml/discover/prompt.dart"; import "package:photos/models/search/generic_search_result.dart"; import "package:photos/models/search/search_types.dart"; import "package:photos/service_locator.dart"; @@ -140,11 +141,11 @@ class MagicCacheService { } Future> _getMatchingFileIDsForPromptData( - Map promptData, + Prompt promptData, ) async { final result = await SemanticSearchService.instance.getMatchingFileIDs( - promptData["prompt"] as String, - promptData["minimumScore"] as double, + promptData.query, + promptData.minScore, ); return result; @@ -176,8 +177,8 @@ class MagicCacheService { w?.log("cacheWritten"); await _resetLastMagicCacheUpdateTime(); w?.logAndReset('done'); - } catch (e) { - _logger.info("Error updating magic cache", e); + } catch (e, s) { + _logger.info("Error updating magic cache", e, s); } } @@ -215,30 +216,34 @@ class MagicCacheService { } } - static Future> _loadMagicPrompts( + static Future> _loadMagicPrompts( Map args, ) async { final String path = args["path"] as String; final File file = File(path); - final json = jsonDecode(await file.readAsString()); - return json["prompts"]; + final String contents = await file.readAsString(); + final Map promptsJson = jsonDecode(contents); + final List promptData = promptsJson['prompts']; + return promptData + .map((jsonItem) => Prompt.fromJson(jsonItem)) + .toList(); } ///Returns non-empty magic results from magicPromptsData ///Length is number of prompts, can be less if there are not enough non-empty ///results Future> _nonEmptyMagicResults( - List magicPromptsData, + List magicPromptsData, ) async { final results = []; - for (dynamic prompt in magicPromptsData) { + for (Prompt prompt in magicPromptsData) { final fileUploadedIDs = await _getMatchingFileIDsForPromptData( - prompt as Map, + prompt, ); if (fileUploadedIDs.isNotEmpty) { results.add( MagicCache( - prompt["title"] as String, + prompt.title, fileUploadedIDs, ), );