From 4be4b5c9beb494f594d79643419725e02aec5278 Mon Sep 17 00:00:00 2001 From: Louis Date: Sun, 4 Aug 2024 22:15:47 +0700 Subject: [PATCH] fix: persists engine version on init --- .../providers/cortex/cortex.provider.ts | 12 ++++++++++++ .../repositories/extensions/extension.repository.ts | 2 +- cortex-js/src/usecases/engines/engines.usecase.ts | 11 +++++++++-- 3 files changed, 22 insertions(+), 3 deletions(-) diff --git a/cortex-js/src/infrastructure/providers/cortex/cortex.provider.ts b/cortex-js/src/infrastructure/providers/cortex/cortex.provider.ts index 8663da7ac..fd45b1fcd 100644 --- a/cortex-js/src/infrastructure/providers/cortex/cortex.provider.ts +++ b/cortex-js/src/infrastructure/providers/cortex/cortex.provider.ts @@ -13,6 +13,7 @@ import { readdirSync } from 'node:fs'; import { normalizeModelId } from '@/utils/normalize-model-id'; import { firstValueFrom } from 'rxjs'; import { fileManagerService } from '@/infrastructure/services/file-manager/file-manager.service'; +import { existsSync, readFileSync } from 'fs'; export interface ModelStatResponse { object: string; @@ -34,6 +35,7 @@ export default class CortexProvider extends OAIEngineExtension { constructor(protected readonly httpService: HttpService) { super(httpService); + this.persistEngineVersion(); } // Override the inference method to make an inference request to the engine @@ -162,4 +164,14 @@ export default class CortexProvider extends OAIEngineExtension { // Return an error if none of the conditions are met return { error: 'Cannot split prompt template' }; }; + + private persistEngineVersion = async () => { + const versionFilePath = join( + await fileManagerService.getCortexCppEnginePath(), + this.name, + 'version.txt', + ); + if (existsSync(versionFilePath)) + this.version = readFileSync(versionFilePath, 'utf-8'); + }; } diff --git a/cortex-js/src/infrastructure/repositories/extensions/extension.repository.ts b/cortex-js/src/infrastructure/repositories/extensions/extension.repository.ts index a0a22398b..ce43b068e 100644 --- a/cortex-js/src/infrastructure/repositories/extensions/extension.repository.ts +++ b/cortex-js/src/infrastructure/repositories/extensions/extension.repository.ts @@ -32,7 +32,7 @@ export class ExtensionRepositoryImpl implements ExtensionRepository { // Watch engine folder only for now fileManagerService.getCortexCppEnginePath().then((path) => { if (!existsSync(path)) mkdirSync(path); - watch(path, (eventType, filename) => { + watch(path, () => { this.extensions.clear(); this.loadCoreExtensions(); this.loadExternalExtensions(); diff --git a/cortex-js/src/usecases/engines/engines.usecase.ts b/cortex-js/src/usecases/engines/engines.usecase.ts index 5b50c33a3..7df0a23e3 100644 --- a/cortex-js/src/usecases/engines/engines.usecase.ts +++ b/cortex-js/src/usecases/engines/engines.usecase.ts @@ -1,7 +1,7 @@ import { isEmpty } from 'lodash'; import { ForbiddenException, Injectable } from '@nestjs/common'; import { ExtensionRepository } from '@/domain/repositories/extension.interface'; -import { cpSync, existsSync, mkdirSync, readdirSync } from 'fs'; +import { cpSync, existsSync, mkdirSync, readdirSync, writeFileSync } from 'fs'; import { join } from 'path'; import { HttpService } from '@nestjs/axios'; import decompress from 'decompress'; @@ -275,6 +275,7 @@ export class EnginesUsecases { engine, DownloadType.Engine, { [toDownloadAsset.browser_download_url]: destination }, + // On completed - post processing async () => { try { await decompress(destination, engineDir); @@ -287,9 +288,15 @@ export class EnginesUsecases { // Copy the additional files to the cortex-cpp directory for (const file of readdirSync(join(engineDir, engine))) { if (!file.includes('engine')) { - await cpSync(join(engineDir, engine, file), join(engineDir, file)); + cpSync(join(engineDir, engine, file), join(engineDir, file)); } } + + writeFileSync( + join(engineDir, engine, 'version.txt'), + release.tag_name.replace(/^v/, ''), + 'utf-8', + ); }, ); }