From 346ef9b17dfd6713824f0d113bf06ac71b5ee851 Mon Sep 17 00:00:00 2001 From: Manav Rathi Date: Tue, 20 Aug 2024 21:46:50 +0530 Subject: [PATCH] Disable all clustering traces --- web/apps/photos/src/services/searchService.ts | 48 ++++--- web/packages/new/photos/services/ml/db.ts | 12 +- web/packages/new/photos/services/ml/index.ts | 120 ++++++++---------- 3 files changed, 85 insertions(+), 95 deletions(-) diff --git a/web/apps/photos/src/services/searchService.ts b/web/apps/photos/src/services/searchService.ts index 3156652a38..01a3289d93 100644 --- a/web/apps/photos/src/services/searchService.ts +++ b/web/apps/photos/src/services/searchService.ts @@ -6,12 +6,8 @@ import { isMLEnabled, isMLSupported, mlStatusSnapshot, - wipCluster, - wipClusterEnable, } from "@/new/photos/services/ml"; -import { clusterGroups } from "@/new/photos/services/ml/db"; import type { SearchPerson } from "@/new/photos/services/search"; -import { syncCGroups } from "@/new/photos/services/user-entity"; import { EnteFile } from "@/new/photos/types/file"; import * as chrono from "chrono-node"; import { t } from "i18next"; @@ -420,28 +416,30 @@ function convertSuggestionToSearchQuery(option: Suggestion): Search { } } -let done = false; -async function getAllPeople(limit: number = undefined) { - if (!(await wipClusterEnable())) return []; - if (done) return []; +// let done = false; +// eslint-disable-next-line @typescript-eslint/no-unused-vars +async function getAllPeople(_limit: number = undefined) { + return []; + // if (!(await wipClusterEnable())) return []; + // if (done) return []; - done = true; - if (process.env.NEXT_PUBLIC_ENTE_WIP_CL_FETCH) { - await syncCGroups(); - const people = await clusterGroups(); - log.debug(() => ["people", { people }]); - } + // done = true; + // if (process.env.NEXT_PUBLIC_ENTE_WIP_CL_FETCH) { + // await syncCGroups(); + // const people = await clusterGroups(); + // log.debug(() => ["people", { people }]); + // } - let people: Array = []; // await mlIDbStorage.getAllPeople(); - people = await wipCluster(); - // await mlPeopleStore.iterate((person) => { - // people.push(person); - // }); - people = people ?? []; - const result = people - .sort((p1, p2) => p2.files.length - p1.files.length) - .slice(0, limit); - // log.debug(() => ["getAllPeople", result]); + // let people: Array = []; // await mlIDbStorage.getAllPeople(); + // people = await wipCluster(); + // // await mlPeopleStore.iterate((person) => { + // // people.push(person); + // // }); + // people = people ?? []; + // const result = people + // .sort((p1, p2) => p2.files.length - p1.files.length) + // .slice(0, limit); + // // log.debug(() => ["getAllPeople", result]); - return result; + // return result; } diff --git a/web/packages/new/photos/services/ml/db.ts b/web/packages/new/photos/services/ml/db.ts index 91f0dd21fa..e6ba5fe1bc 100644 --- a/web/packages/new/photos/services/ml/db.ts +++ b/web/packages/new/photos/services/ml/db.ts @@ -123,12 +123,12 @@ const openMLDB = async () => { db.createObjectStore("clip-index", { keyPath: "fileID" }); } // TODO-Cluster - if (oldVersion < 3) { - if (process.env.NEXT_PUBLIC_ENTE_WIP_CL) { - db.createObjectStore("face-cluster", { keyPath: "id" }); - db.createObjectStore("cluster-group", { keyPath: "id" }); - } - } + // if (oldVersion < 3) { + // if (process.env.NEXT_PUBLIC_ENTE_WIP_CL) { + // db.createObjectStore("face-cluster", { keyPath: "id" }); + // db.createObjectStore("cluster-group", { keyPath: "id" }); + // } + // } }, blocking() { log.info( diff --git a/web/packages/new/photos/services/ml/index.ts b/web/packages/new/photos/services/ml/index.ts index 9aa2c4338c..c9e6ac4e08 100644 --- a/web/packages/new/photos/services/ml/index.ts +++ b/web/packages/new/photos/services/ml/index.ts @@ -6,7 +6,6 @@ import { isDesktop } from "@/base/app"; import { assertionFailed } from "@/base/assert"; import { blobCache } from "@/base/blob-cache"; import { ensureElectron } from "@/base/electron"; -import { isDevBuild } from "@/base/env"; import log from "@/base/log"; import type { Electron } from "@/base/types/ipc"; import { ComlinkWorker } from "@/base/worker/comlink-worker"; @@ -16,18 +15,10 @@ import { ensure } from "@/utils/ensure"; import { throttled } from "@/utils/promise"; import { proxy, transfer } from "comlink"; import { isInternalUser } from "../feature-flags"; -import { getAllLocalFiles } from "../files"; import { getRemoteFlag, updateRemoteFlag } from "../remote-store"; -import type { SearchPerson } from "../search"; import type { UploadItem } from "../upload/types"; -import { clusterFaces } from "./cluster-new"; import { regenerateFaceCrops } from "./crop"; -import { - clearMLDB, - faceIndex, - faceIndexes, - indexableAndIndexedCounts, -} from "./db"; +import { clearMLDB, faceIndex, indexableAndIndexedCounts } from "./db"; import { MLWorker } from "./worker"; import type { CLIPMatches } from "./worker-types"; @@ -330,66 +321,66 @@ export const indexNewUpload = (enteFile: EnteFile, uploadItem: UploadItem) => { void worker().then((w) => w.onUpload(enteFile, uploadItem)); }; -// TODO-Cluster temporary import here -let last: SearchPerson[] | undefined; +// // TODO-Cluster temporary import here +// let last: SearchPerson[] | undefined; -/** - * WIP! Don't enable, dragon eggs are hatching here. - */ -export const wipClusterEnable = async () => { - if (!process.env.NEXT_PUBLIC_ENTE_WIP_CL) return false; - if (!isDevBuild || !(await isInternalUser())) return false; - return true; -}; +// /** +// * WIP! Don't enable, dragon eggs are hatching here. +// */ +// export const wipClusterEnable = async () => { +// if (!process.env.NEXT_PUBLIC_ENTE_WIP_CL) return false; +// if (!isDevBuild || !(await isInternalUser())) return false; +// return true; +// }; -export const wipCluster = async () => { - if (!(await wipClusterEnable())) return; +// export const wipCluster = async () => { +// if (!(await wipClusterEnable())) return; - if (last) return last; +// if (last) return last; - const { clusters, cgroups } = await clusterFaces(await faceIndexes()); - const clusterByID = new Map( - clusters.map((cluster) => [cluster.id, cluster]), - ); +// const { clusters, cgroups } = await clusterFaces(await faceIndexes()); +// const clusterByID = new Map( +// clusters.map((cluster) => [cluster.id, cluster]), +// ); - const localFiles = await getAllLocalFiles(); - const localFilesByID = new Map(localFiles.map((f) => [f.id, f])); +// const localFiles = await getAllLocalFiles(); +// const localFilesByID = new Map(localFiles.map((f) => [f.id, f])); - const result: SearchPerson[] = []; - for (const cgroup of cgroups) { - let avatarFaceID = cgroup.avatarFaceID; - // TODO-Cluster - // Temp - if (!avatarFaceID) { - // eslint-disable-next-line @typescript-eslint/no-non-null-assertion - avatarFaceID = cgroup.clusterIDs - .map((id) => clusterByID.get(id)) - .flatMap((cluster) => cluster?.faceIDs ?? [])[0]!; - } - cgroup.clusterIDs; - const avatarFaceFileID = fileIDFromFaceID(avatarFaceID); - const avatarFaceFile = localFilesByID.get(avatarFaceFileID ?? 0); - if (!avatarFaceFileID || !avatarFaceFile) { - assertionFailed(`Face ID ${avatarFaceID} without local file`); - continue; - } - const files = cgroup.clusterIDs - .map((id) => clusterByID.get(id)) - .flatMap((cluster) => cluster?.faceIDs ?? []) - .map((faceID) => fileIDFromFaceID(faceID)) - .filter((fileID) => fileID !== undefined); - result.push({ - id: cgroup.id, - name: cgroup.name, - files, - displayFaceID: avatarFaceID, - displayFaceFile: avatarFaceFile, - }); - } +// const result: SearchPerson[] = []; +// for (const cgroup of cgroups) { +// let avatarFaceID = cgroup.avatarFaceID; +// // TODO-Cluster +// // Temp +// if (!avatarFaceID) { +// // eslint-disable-next-line @typescript-eslint/no-non-null-assertion +// avatarFaceID = cgroup.clusterIDs +// .map((id) => clusterByID.get(id)) +// .flatMap((cluster) => cluster?.faceIDs ?? [])[0]!; +// } +// cgroup.clusterIDs; +// const avatarFaceFileID = fileIDFromFaceID(avatarFaceID); +// const avatarFaceFile = localFilesByID.get(avatarFaceFileID ?? 0); +// if (!avatarFaceFileID || !avatarFaceFile) { +// assertionFailed(`Face ID ${avatarFaceID} without local file`); +// continue; +// } +// const files = cgroup.clusterIDs +// .map((id) => clusterByID.get(id)) +// .flatMap((cluster) => cluster?.faceIDs ?? []) +// .map((faceID) => fileIDFromFaceID(faceID)) +// .filter((fileID) => fileID !== undefined); +// result.push({ +// id: cgroup.id, +// name: cgroup.name, +// files, +// displayFaceID: avatarFaceID, +// displayFaceFile: avatarFaceFile, +// }); +// } - last = result; - return result; -}; +// last = result; +// return result; +// }; export type MLStatus = | { phase: "disabled" /* The ML remote flag is off */ } @@ -558,7 +549,8 @@ export const unidentifiedFaceIDs = async ( * Extract the fileID of the {@link EnteFile} to which the face belongs from its * faceID. */ -const fileIDFromFaceID = (faceID: string) => { +// TODO-Cluster: temporary export to supress linter +export const fileIDFromFaceID = (faceID: string) => { const fileID = parseInt(faceID.split("_")[0] ?? ""); if (isNaN(fileID)) { assertionFailed(`Ignoring attempt to parse invalid faceID ${faceID}`);