From ea7619d40520b330fb8281fb8c61aa74d64b8d61 Mon Sep 17 00:00:00 2001 From: Manav Rathi Date: Thu, 27 Jun 2024 11:51:39 +0530 Subject: [PATCH] Potential entry point --- web/packages/new/photos/services/embedding.ts | 2 +- .../new/photos/services/face/worker.ts | 22 +++++++++++++++++++ 2 files changed, 23 insertions(+), 1 deletion(-) create mode 100644 web/packages/new/photos/services/face/worker.ts diff --git a/web/packages/new/photos/services/embedding.ts b/web/packages/new/photos/services/embedding.ts index 603b14767b..b7fe375975 100644 --- a/web/packages/new/photos/services/embedding.ts +++ b/web/packages/new/photos/services/embedding.ts @@ -87,7 +87,7 @@ type RemoteEmbedding = z.infer; * This function should be called only after we have synced files with remote. * See: [Note: Ignoring embeddings for unknown files]. */ -export const pullEmbeddings = async ( +const pullEmbeddings = async ( model: EmbeddingModel, save: (decryptedEmbedding: string) => Promise, ) => { diff --git a/web/packages/new/photos/services/face/worker.ts b/web/packages/new/photos/services/face/worker.ts new file mode 100644 index 0000000000..0902bed53b --- /dev/null +++ b/web/packages/new/photos/services/face/worker.ts @@ -0,0 +1,22 @@ +import { pullFaceEmbeddings } from "../embedding"; + +/** + * Run operations related to face indexing and search in a Web Worker. + * + * This is a normal class that is however exposed (via comlink) as a proxy + * running inside a Web Worker. This way, we do not bother the main thread with + * tasks that might degrade interactivity. + */ +export class FaceWorker { + private isSyncing = false; + + /** + * Pull embeddings from remote, and start backfilling if needed. + */ + async sync() { + if (this.isSyncing) return; + this.isSyncing = true; + await pullFaceEmbeddings(); + this.isSyncing = false; + } +}