From bdad18a572867fca7499d9f73084b20456bc60d2 Mon Sep 17 00:00:00 2001 From: Jason Rasmussen Date: Fri, 20 Jan 2023 11:35:55 -0500 Subject: [PATCH] feat(server): turn off machine learning endpoint (#1361) --- server/apps/immich/src/api-v1/job/job.service.ts | 5 +++++ server/apps/immich/src/main.ts | 4 +++- .../src/processors/machine-learning.processor.ts | 15 +++++++++++---- server/libs/common/src/constants/index.ts | 3 +++ .../components/admin-page/jobs/jobs-panel.svelte | 10 +++------- 5 files changed, 25 insertions(+), 12 deletions(-) diff --git a/server/apps/immich/src/api-v1/job/job.service.ts b/server/apps/immich/src/api-v1/job/job.service.ts index b09db2a84..0326357a0 100644 --- a/server/apps/immich/src/api-v1/job/job.service.ts +++ b/server/apps/immich/src/api-v1/job/job.service.ts @@ -9,6 +9,7 @@ import { GetJobDto, JobId } from './dto/get-job.dto'; import { JobStatusResponseDto } from './response-dto/job-status-response.dto'; import { IMachineLearningJob } from '@app/job/interfaces/machine-learning.interface'; import { StorageService } from '@app/storage'; +import { MACHINE_LEARNING_ENABLED } from '@app/common'; @Injectable() export class JobService { @@ -161,6 +162,10 @@ export class JobService { } private async runMachineLearningPipeline(): Promise { + if (!MACHINE_LEARNING_ENABLED) { + throw new BadRequestException('Machine learning is not enabled.'); + } + const jobCount = await this.machineLearningQueue.getJobCounts(); if (jobCount.waiting > 0) { diff --git a/server/apps/immich/src/main.ts b/server/apps/immich/src/main.ts index 18d92c24e..79eed0854 100644 --- a/server/apps/immich/src/main.ts +++ b/server/apps/immich/src/main.ts @@ -10,7 +10,7 @@ import { SERVER_VERSION } from './constants/server_version.constant'; import { RedisIoAdapter } from './middlewares/redis-io.adapter.middleware'; import { json } from 'body-parser'; import { patchOpenAPI } from './utils/patch-open-api.util'; -import { getLogLevels } from '@app/common'; +import { getLogLevels, MACHINE_LEARNING_ENABLED } from '@app/common'; const logger = new Logger('ImmichServer'); @@ -69,5 +69,7 @@ async function bootstrap() { const envName = (process.env.NODE_ENV || 'development').toUpperCase(); logger.log(`Running Immich Server in ${envName} environment - version ${SERVER_VERSION}`); }); + + logger.warn(`Machine learning is ${MACHINE_LEARNING_ENABLED ? 'enabled' : 'disabled'}`); } bootstrap(); diff --git a/server/apps/microservices/src/processors/machine-learning.processor.ts b/server/apps/microservices/src/processors/machine-learning.processor.ts index 6236c9a19..8c2a28f31 100644 --- a/server/apps/microservices/src/processors/machine-learning.processor.ts +++ b/server/apps/microservices/src/processors/machine-learning.processor.ts @@ -8,8 +8,7 @@ import { InjectRepository } from '@nestjs/typeorm'; import axios from 'axios'; import { Job } from 'bull'; import { Repository } from 'typeorm'; - -const immich_machine_learning_url = process.env.IMMICH_MACHINE_LEARNING_URL || 'http://immich-machine-learning:3003'; +import { MACHINE_LEARNING_ENABLED, MACHINE_LEARNING_URL } from '@app/common'; @Processor(QueueName.MACHINE_LEARNING) export class MachineLearningProcessor { @@ -20,9 +19,13 @@ export class MachineLearningProcessor { @Process({ name: JobName.IMAGE_TAGGING, concurrency: 2 }) async tagImage(job: Job) { + if (!MACHINE_LEARNING_ENABLED) { + return; + } + const { asset } = job.data; - const res = await axios.post(immich_machine_learning_url + '/image-classifier/tag-image', { + const res = await axios.post(MACHINE_LEARNING_URL + '/image-classifier/tag-image', { thumbnailPath: asset.resizePath, }); @@ -39,10 +42,14 @@ export class MachineLearningProcessor { @Process({ name: JobName.OBJECT_DETECTION, concurrency: 2 }) async detectObject(job: Job) { + if (!MACHINE_LEARNING_ENABLED) { + return; + } + try { const { asset }: { asset: AssetEntity } = job.data; - const res = await axios.post(immich_machine_learning_url + '/object-detection/detect-object', { + const res = await axios.post(MACHINE_LEARNING_URL + '/object-detection/detect-object', { thumbnailPath: asset.resizePath, }); diff --git a/server/libs/common/src/constants/index.ts b/server/libs/common/src/constants/index.ts index 0751fea60..c0ceffa4c 100644 --- a/server/libs/common/src/constants/index.ts +++ b/server/libs/common/src/constants/index.ts @@ -1 +1,4 @@ export * from './upload_location.constant'; + +export const MACHINE_LEARNING_URL = process.env.IMMICH_MACHINE_LEARNING_URL || 'http://immich-machine-learning:3003'; +export const MACHINE_LEARNING_ENABLED = MACHINE_LEARNING_URL !== 'false'; diff --git a/web/src/lib/components/admin-page/jobs/jobs-panel.svelte b/web/src/lib/components/admin-page/jobs/jobs-panel.svelte index 97af135ba..f374340dd 100644 --- a/web/src/lib/components/admin-page/jobs/jobs-panel.svelte +++ b/web/src/lib/components/admin-page/jobs/jobs-panel.svelte @@ -3,6 +3,7 @@ notificationController, NotificationType } from '$lib/components/shared-components/notification/notification'; + import { handleError } from '$lib/utils/handle-error'; import { AllJobStatusResponseDto, api, JobCommand, JobId } from '@api'; import { onDestroy, onMount } from 'svelte'; import JobTile from './job-tile.svelte'; @@ -95,13 +96,8 @@ type: NotificationType.Info }); } - } catch (e) { - console.log('[ERROR] runMachineLearning', e); - - notificationController.show({ - message: `Error running machine learning job, check console for more detail`, - type: NotificationType.Error - }); + } catch (error) { + handleError(error, `Error running machine learning job, check console for more detail`); } };