Add an LRU cache for queries
This commit is contained in:
parent
073e2a06e6
commit
d4ebb5c493
|
@ -4,6 +4,7 @@ import "dart:math";
|
||||||
|
|
||||||
import "package:computer/computer.dart";
|
import "package:computer/computer.dart";
|
||||||
import "package:logging/logging.dart";
|
import "package:logging/logging.dart";
|
||||||
|
import "package:photos/core/cache/lru_map.dart";
|
||||||
import "package:photos/core/configuration.dart";
|
import "package:photos/core/configuration.dart";
|
||||||
import "package:photos/core/event_bus.dart";
|
import "package:photos/core/event_bus.dart";
|
||||||
import "package:photos/db/files_db.dart";
|
import "package:photos/db/files_db.dart";
|
||||||
|
@ -27,6 +28,7 @@ class SemanticSearchService {
|
||||||
static final SemanticSearchService instance =
|
static final SemanticSearchService instance =
|
||||||
SemanticSearchService._privateConstructor();
|
SemanticSearchService._privateConstructor();
|
||||||
static final Computer _computer = Computer.shared();
|
static final Computer _computer = Computer.shared();
|
||||||
|
static final LRUMap<String, List<double>> _queryCache = LRUMap(50);
|
||||||
|
|
||||||
static const kModelName = "clip";
|
static const kModelName = "clip";
|
||||||
static const kEmbeddingLength = 512;
|
static const kEmbeddingLength = 512;
|
||||||
|
@ -269,8 +271,13 @@ class SemanticSearchService {
|
||||||
|
|
||||||
Future<List<double>> _getTextEmbedding(String query) async {
|
Future<List<double>> _getTextEmbedding(String query) async {
|
||||||
_logger.info("Searching for " + query);
|
_logger.info("Searching for " + query);
|
||||||
|
final cachedResult = _queryCache.get(query);
|
||||||
|
if (cachedResult != null) {
|
||||||
|
return cachedResult;
|
||||||
|
}
|
||||||
try {
|
try {
|
||||||
final result = await _mlFramework.getTextEmbedding(query);
|
final result = await _mlFramework.getTextEmbedding(query);
|
||||||
|
_queryCache.put(query, result);
|
||||||
return result;
|
return result;
|
||||||
} catch (e) {
|
} catch (e) {
|
||||||
_logger.severe("Could not get text embedding", e);
|
_logger.severe("Could not get text embedding", e);
|
||||||
|
|
Loading…
Reference in a new issue