[mob] Skip backfill if remote fetch fails
This commit is contained in:
parent
0fa29b3d7c
commit
b8417d1fcc
2 changed files with 27 additions and 14 deletions
|
@ -27,25 +27,33 @@ class EmbeddingStore {
|
|||
|
||||
late SharedPreferences _preferences;
|
||||
|
||||
Completer<void>? _syncStatus;
|
||||
Completer<bool>? _remoteSyncStatus;
|
||||
|
||||
Future<void> init() async {
|
||||
_preferences = await SharedPreferences.getInstance();
|
||||
}
|
||||
|
||||
Future<void> pullEmbeddings(Model model) async {
|
||||
if (_syncStatus != null) {
|
||||
return _syncStatus!.future;
|
||||
Future<bool> pullEmbeddings(Model model) async {
|
||||
if (_remoteSyncStatus != null) {
|
||||
return _remoteSyncStatus!.future;
|
||||
}
|
||||
_syncStatus = Completer();
|
||||
var remoteEmbeddings = await _getRemoteEmbeddings(model);
|
||||
await _storeRemoteEmbeddings(remoteEmbeddings.embeddings);
|
||||
while (remoteEmbeddings.hasMore) {
|
||||
remoteEmbeddings = await _getRemoteEmbeddings(model);
|
||||
_remoteSyncStatus = Completer();
|
||||
try {
|
||||
var remoteEmbeddings = await _getRemoteEmbeddings(model);
|
||||
await _storeRemoteEmbeddings(remoteEmbeddings.embeddings);
|
||||
while (remoteEmbeddings.hasMore) {
|
||||
remoteEmbeddings = await _getRemoteEmbeddings(model);
|
||||
await _storeRemoteEmbeddings(remoteEmbeddings.embeddings);
|
||||
}
|
||||
_remoteSyncStatus!.complete(true);
|
||||
_remoteSyncStatus = null;
|
||||
return true;
|
||||
} catch (e, s) {
|
||||
_logger.severe("failed to fetch from remote", e, s);
|
||||
_remoteSyncStatus!.complete(false);
|
||||
_remoteSyncStatus = null;
|
||||
return false;
|
||||
}
|
||||
_syncStatus!.complete();
|
||||
_syncStatus = null;
|
||||
}
|
||||
|
||||
Future<void> pushEmbeddings() async {
|
||||
|
@ -117,7 +125,9 @@ class EmbeddingStore {
|
|||
final remoteEmbeddings = <RemoteEmbedding>[];
|
||||
try {
|
||||
final sinceTime = _preferences.getInt(kEmbeddingsSyncTimeKey) ?? 0;
|
||||
_logger.info("Fetching embeddings since $sinceTime");
|
||||
_logger.info(
|
||||
"Fetching embeddings since $sinceTime (${DateTime.fromMicrosecondsSinceEpoch(sinceTime)})",
|
||||
);
|
||||
final response = await _dio.get(
|
||||
"/embeddings/diff",
|
||||
queryParameters: {
|
||||
|
|
|
@ -125,8 +125,11 @@ class SemanticSearchService {
|
|||
return;
|
||||
}
|
||||
_isSyncing = true;
|
||||
await EmbeddingStore.instance.pullEmbeddings(_currentModel);
|
||||
await _backFill();
|
||||
final fetchCompleted =
|
||||
await EmbeddingStore.instance.pullEmbeddings(_currentModel);
|
||||
if (fetchCompleted) {
|
||||
await _backFill();
|
||||
}
|
||||
_isSyncing = false;
|
||||
}
|
||||
|
||||
|
|
Loading…
Add table
Reference in a new issue