From 580cf5d38f7180951907ce7a236971298f873418 Mon Sep 17 00:00:00 2001 From: Louis Date: Tue, 11 Mar 2025 13:30:24 +0700 Subject: [PATCH] fix: app image - could not load model --- .../src/node/index.ts | 30 +++++++++++++++---- 1 file changed, 24 insertions(+), 6 deletions(-) diff --git a/extensions/engine-management-extension/src/node/index.ts b/extensions/engine-management-extension/src/node/index.ts index 4c1daf998..f9f8971b9 100644 --- a/extensions/engine-management-extension/src/node/index.ts +++ b/extensions/engine-management-extension/src/node/index.ts @@ -4,11 +4,12 @@ import { getJanDataFolderPath, log, } from '@janhq/core/node' -import { mkdir, readdir, symlink } from 'fs/promises' - +import { mkdir, readdir, symlink, cp } from 'fs/promises' +import { existsSync } from 'fs' /** * Create symlink to each variant for the default bundled version + * If running in AppImage environment, copy files instead of creating symlinks */ const symlinkEngines = async () => { const sourceEnginePath = path.join( @@ -23,6 +24,8 @@ const symlinkEngines = async () => { 'cortex.llamacpp' ) const variantFolders = await readdir(sourceEnginePath) + const isAppImage = !!process.env.APPIMAGE + for (const variant of variantFolders) { const targetVariantPath = path.join( sourceEnginePath, @@ -39,10 +42,25 @@ const symlinkEngines = async () => { recursive: true, }).catch((error) => log(JSON.stringify(error))) - await symlink(targetVariantPath, symlinkVariantPath, 'junction').catch( - (error) => log(JSON.stringify(error)) - ) - console.log(`Symlink created: ${targetVariantPath} -> ${symlinkEnginePath}`) + // Skip if already exists + if (existsSync(symlinkVariantPath)) { + console.log(`Target already exists: ${symlinkVariantPath}`) + continue + } + + if (isAppImage) { + // Copy files for AppImage environments instead of symlinking + await cp(targetVariantPath, symlinkVariantPath, { recursive: true }).catch( + (error) => log(JSON.stringify(error)) + ) + console.log(`Files copied: ${targetVariantPath} -> ${symlinkVariantPath}`) + } else { + // Create symlink for other environments + await symlink(targetVariantPath, symlinkVariantPath, 'junction').catch( + (error) => log(JSON.stringify(error)) + ) + console.log(`Symlink created: ${targetVariantPath} -> ${symlinkVariantPath}`) + } } }