diff --git a/cortex-js/src/domain/models/model.event.ts b/cortex-js/src/domain/models/model.event.ts index d2544b306..7d2177911 100644 --- a/cortex-js/src/domain/models/model.event.ts +++ b/cortex-js/src/domain/models/model.event.ts @@ -7,6 +7,8 @@ const ModelLoadingEvents = [ 'stopped', 'starting-failed', 'stopping-failed', + 'model-downloaded', + 'model-deleted', ] as const; export type ModelLoadingEvent = (typeof ModelLoadingEvents)[number]; diff --git a/cortex-js/src/infrastructure/controllers/models.controller.ts b/cortex-js/src/infrastructure/controllers/models.controller.ts index a92780838..fa7d50633 100644 --- a/cortex-js/src/infrastructure/controllers/models.controller.ts +++ b/cortex-js/src/infrastructure/controllers/models.controller.ts @@ -112,7 +112,11 @@ export class ModelsController { }) @Get('download/:modelId(*)') downloadModel(@Param('modelId') modelId: string) { - return this.modelsUsecases.pullModel(modelId); + this.modelsUsecases.pullModel(modelId, false); + + return { + message: 'Download model started successfully.', + }; } @ApiOperation({ diff --git a/cortex-js/src/infrastructure/services/download-manager/download-manager.service.ts b/cortex-js/src/infrastructure/services/download-manager/download-manager.service.ts index badb72de4..3c018ab77 100644 --- a/cortex-js/src/infrastructure/services/download-manager/download-manager.service.ts +++ b/cortex-js/src/infrastructure/services/download-manager/download-manager.service.ts @@ -100,6 +100,7 @@ export class DownloadManagerService { (downloadState) => downloadState.id !== downloadId, ); } + this.eventEmitter.emit('download.event', this.allDownloadStates); }; if (!inSequence) { return Promise.all( @@ -140,7 +141,7 @@ export class DownloadManagerService { } const writer = createWriteStream(destination); - const totalBytes = response.headers['content-length']; + const totalBytes = Number(response.headers['content-length']); // update download state const currentDownloadState = this.allDownloadStates.find( diff --git a/cortex-js/src/usecases/models/models.usecases.ts b/cortex-js/src/usecases/models/models.usecases.ts index f2ae08091..e41d4e0f6 100644 --- a/cortex-js/src/usecases/models/models.usecases.ts +++ b/cortex-js/src/usecases/models/models.usecases.ts @@ -128,6 +128,14 @@ export class ModelsUsecases { existsSync(modelFolder) && rmdirSync(modelFolder, { recursive: true }), ) + .then(() => { + const modelEvent: ModelEvent = { + model: id, + event: 'model-deleted', + metadata: {}, + }; + this.eventEmitter.emit(modelEvent.event, modelEvent); + }) .then(() => { return { message: 'Model removed successfully', @@ -342,6 +350,7 @@ export class ModelsUsecases { const toDownloads: Record = files .filter((e) => this.validFileDownload(e)) .reduce((acc: Record, file) => { + // @ts-expect-error ignore acc[file.downloadUrl] = join(modelFolder, file.rfilename); return acc; }, {}); @@ -389,6 +398,12 @@ export class ModelsUsecases { }); } } + const modelEvent: ModelEvent = { + model: modelId, + event: 'model-downloaded', + metadata: {}, + }; + this.eventEmitter.emit(modelEvent.event, modelEvent); }, inSequence, );