diff --git a/server/src/interfaces/search.interface.ts b/server/src/interfaces/search.interface.ts index a4be05549..1287202ad 100644 --- a/server/src/interfaces/search.interface.ts +++ b/server/src/interfaces/search.interface.ts @@ -1,7 +1,6 @@ import { AssetFaceEntity } from 'src/entities/asset-face.entity'; import { AssetEntity, AssetType } from 'src/entities/asset.entity'; import { GeodataPlacesEntity } from 'src/entities/geodata-places.entity'; -import { SmartInfoEntity } from 'src/entities/smart-info.entity'; import { Paginated } from 'src/utils/pagination'; export const ISearchRepository = 'ISearchRepository'; @@ -188,7 +187,7 @@ export interface ISearchRepository { searchMetadata(pagination: SearchPaginationOptions, options: AssetSearchOptions): Paginated; searchSmart(pagination: SearchPaginationOptions, options: SmartSearchOptions): Paginated; searchFaces(search: FaceEmbeddingSearch): Promise; - upsert(smartInfo: Partial, embedding?: Embedding): Promise; + upsert(assetId: string, embedding: number[]): Promise; searchPlaces(placeName: string): Promise; getAssetsByCity(userIds: string[]): Promise; deleteAllSearchEmbeddings(): Promise; diff --git a/server/src/repositories/search.repository.ts b/server/src/repositories/search.repository.ts index a151c0750..85cb45b3d 100644 --- a/server/src/repositories/search.repository.ts +++ b/server/src/repositories/search.repository.ts @@ -10,7 +10,6 @@ import { SmartSearchEntity } from 'src/entities/smart-search.entity'; import { DatabaseExtension } from 'src/interfaces/database.interface'; import { AssetSearchOptions, - Embedding, FaceEmbeddingSearch, FaceSearchResult, ISearchRepository, @@ -247,16 +246,7 @@ export class SearchRepository implements ISearchRepository { return items; } - async upsert(smartInfo: Partial, embedding?: Embedding): Promise { - await this.repository.upsert(smartInfo, { conflictPaths: ['assetId'] }); - if (!smartInfo.assetId || !embedding) { - return; - } - - await this.upsertEmbedding(smartInfo.assetId, embedding); - } - - private async upsertEmbedding(assetId: string, embedding: number[]): Promise { + async upsert(assetId: string, embedding: number[]): Promise { await this.smartSearchRepository.upsert( { assetId, embedding: () => asVector(embedding, true) }, { conflictPaths: ['assetId'] }, diff --git a/server/src/services/smart-info.service.spec.ts b/server/src/services/smart-info.service.spec.ts index 81d7935c3..968aeac5f 100644 --- a/server/src/services/smart-info.service.spec.ts +++ b/server/src/services/smart-info.service.spec.ts @@ -104,7 +104,6 @@ describe(SmartInfoService.name, () => { }); it('should save the returned objects', async () => { - searchMock.upsert.mockResolvedValue(); machineMock.encodeImage.mockResolvedValue([0.01, 0.02, 0.03]); await sut.handleEncodeClip({ id: asset.id }); @@ -114,12 +113,7 @@ describe(SmartInfoService.name, () => { { imagePath: 'path/to/resize.ext' }, { enabled: true, modelName: 'ViT-B-32__openai' }, ); - expect(searchMock.upsert).toHaveBeenCalledWith( - { - assetId: 'asset-1', - }, - [0.01, 0.02, 0.03], - ); + expect(searchMock.upsert).toHaveBeenCalledWith('asset-1', [0.01, 0.02, 0.03]); }); }); diff --git a/server/src/services/smart-info.service.ts b/server/src/services/smart-info.service.ts index fb19e90a7..183c45b80 100644 --- a/server/src/services/smart-info.service.ts +++ b/server/src/services/smart-info.service.ts @@ -98,7 +98,7 @@ export class SmartInfoService { await this.databaseRepository.wait(DatabaseLock.CLIPDimSize); } - await this.repository.upsert({ assetId: asset.id }, clipEmbedding); + await this.repository.upsert(asset.id, clipEmbedding); return JobStatus.SUCCESS; }