From d7f161f668f59a1207c8daa51a3e2b0662ad3aa1 Mon Sep 17 00:00:00 2001 From: NamH Date: Tue, 4 Jun 2024 10:14:11 +0700 Subject: [PATCH] fix: scan the models folder recursive to find model metadata file (#2982) Co-authored-by: James --- extensions/model-extension/src/index.ts | 28 +++++++++++++++++++++++-- 1 file changed, 26 insertions(+), 2 deletions(-) diff --git a/extensions/model-extension/src/index.ts b/extensions/model-extension/src/index.ts index 887ce7474..aa8f6603b 100644 --- a/extensions/model-extension/src/index.ts +++ b/extensions/model-extension/src/index.ts @@ -417,6 +417,30 @@ export default class JanModelExtension extends ModelExtension { ) } + private async getModelJsonPath( + folderFullPath: string + ): Promise { + // try to find model.json recursively inside each folder + if (!(await fs.existsSync(folderFullPath))) return undefined + const files: string[] = await fs.readdirSync(folderFullPath) + if (files.length === 0) return undefined + if (files.includes(JanModelExtension._modelMetadataFileName)) { + return joinPath([ + folderFullPath, + JanModelExtension._modelMetadataFileName, + ]) + } + // continue recursive + for (const file of files) { + const path = await joinPath([folderFullPath, file]) + const fileStats = await fs.fileStat(path) + if (fileStats.isDirectory) { + const result = await this.getModelJsonPath(path) + if (result) return result + } + } + } + private async getModelsMetadata( selector?: (path: string, model: Model) => Promise ): Promise { @@ -438,11 +462,11 @@ export default class JanModelExtension extends ModelExtension { const readJsonPromises = allDirectories.map(async (dirName) => { // filter out directories that don't match the selector // read model.json - const jsonPath = await joinPath([ + const folderFullPath = await joinPath([ JanModelExtension._homeDir, dirName, - JanModelExtension._modelMetadataFileName, ]) + const jsonPath = await this.getModelJsonPath(folderFullPath) if (await fs.existsSync(jsonPath)) { // if we have the model.json file, read it