fix: import model by folder on win (#3463)
* fix: import model by folder on win * expose getGgufFiles method * fix the missing api * clean log * clean log
This commit is contained in:
parent
c798e9b8e2
commit
52aa87a7ac
@ -58,6 +58,15 @@ const appendFileSync = (...args: any[]) => globalThis.core.api?.appendFileSync(.
|
|||||||
const copyFile: (src: string, dest: string) => Promise<void> = (src, dest) =>
|
const copyFile: (src: string, dest: string) => Promise<void> = (src, dest) =>
|
||||||
globalThis.core.api?.copyFile(src, dest)
|
globalThis.core.api?.copyFile(src, dest)
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Gets the list of gguf files in a directory
|
||||||
|
*
|
||||||
|
* @param path - The paths to the file.
|
||||||
|
* @returns {Promise<{any}>} - A promise that resolves with the list of gguf and non-gguf files
|
||||||
|
*/
|
||||||
|
const getGgufFiles: (paths: string[]) => Promise<any> = (
|
||||||
|
paths) => globalThis.core.api?.getGgufFiles(paths)
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Gets the file's stats.
|
* Gets the file's stats.
|
||||||
*
|
*
|
||||||
@ -84,4 +93,5 @@ export const fs = {
|
|||||||
copyFile,
|
copyFile,
|
||||||
fileStat,
|
fileStat,
|
||||||
writeBlob,
|
writeBlob,
|
||||||
|
getGgufFiles,
|
||||||
}
|
}
|
||||||
|
|||||||
@ -1,5 +1,5 @@
|
|||||||
import { join } from 'path'
|
import { basename, join } from 'path'
|
||||||
import fs from 'fs'
|
import fs, { readdirSync } from 'fs'
|
||||||
import { appResourcePath, normalizeFilePath, validatePath } from '../../helper/path'
|
import { appResourcePath, normalizeFilePath, validatePath } from '../../helper/path'
|
||||||
import { defaultAppConfig, getJanDataFolderPath, getJanDataFolderPath as getPath } from '../../helper'
|
import { defaultAppConfig, getJanDataFolderPath, getJanDataFolderPath as getPath } from '../../helper'
|
||||||
import { Processor } from './Processor'
|
import { Processor } from './Processor'
|
||||||
@ -80,4 +80,53 @@ export class FSExt implements Processor {
|
|||||||
})
|
})
|
||||||
})
|
})
|
||||||
}
|
}
|
||||||
|
|
||||||
|
async getGgufFiles(paths: string[]) {
|
||||||
|
const sanitizedFilePaths: {
|
||||||
|
path: string
|
||||||
|
name: string
|
||||||
|
size: number
|
||||||
|
}[] = []
|
||||||
|
for (const filePath of paths) {
|
||||||
|
const normalizedPath = normalizeFilePath(filePath)
|
||||||
|
|
||||||
|
const isExist = fs.existsSync(normalizedPath)
|
||||||
|
if (!isExist) continue
|
||||||
|
const fileStats = fs.statSync(normalizedPath)
|
||||||
|
if (!fileStats) continue
|
||||||
|
if (!fileStats.isDirectory()) {
|
||||||
|
const fileName = await basename(normalizedPath)
|
||||||
|
sanitizedFilePaths.push({
|
||||||
|
path: normalizedPath,
|
||||||
|
name: fileName,
|
||||||
|
size: fileStats.size,
|
||||||
|
})
|
||||||
|
} else {
|
||||||
|
// allowing only one level of directory
|
||||||
|
const files = await readdirSync(normalizedPath)
|
||||||
|
|
||||||
|
for (const file of files) {
|
||||||
|
const fullPath = await join(normalizedPath, file)
|
||||||
|
const fileStats = await fs.statSync(fullPath)
|
||||||
|
if (!fileStats || fileStats.isDirectory()) continue
|
||||||
|
|
||||||
|
sanitizedFilePaths.push({
|
||||||
|
path: fullPath,
|
||||||
|
name: file,
|
||||||
|
size: fileStats.size,
|
||||||
|
})
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
const unsupportedFiles = sanitizedFilePaths.filter(
|
||||||
|
(file) => !file.path.endsWith('.gguf')
|
||||||
|
)
|
||||||
|
const supportedFiles = sanitizedFilePaths.filter((file) =>
|
||||||
|
file.path.endsWith('.gguf')
|
||||||
|
)
|
||||||
|
return {
|
||||||
|
unsupportedFiles,
|
||||||
|
supportedFiles,
|
||||||
|
}
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
@ -105,6 +105,7 @@ export enum FileManagerRoute {
|
|||||||
getUserHomePath = 'getUserHomePath',
|
getUserHomePath = 'getUserHomePath',
|
||||||
fileStat = 'fileStat',
|
fileStat = 'fileStat',
|
||||||
writeBlob = 'writeBlob',
|
writeBlob = 'writeBlob',
|
||||||
|
getGgufFiles = 'getGgufFiles',
|
||||||
}
|
}
|
||||||
|
|
||||||
export type ApiFunction = (...args: any[]) => any
|
export type ApiFunction = (...args: any[]) => any
|
||||||
|
|||||||
@ -66,44 +66,13 @@ const useImportModel = () => {
|
|||||||
const sanitizeFilePaths = useCallback(
|
const sanitizeFilePaths = useCallback(
|
||||||
async (filePaths: string[]) => {
|
async (filePaths: string[]) => {
|
||||||
if (!filePaths || filePaths.length === 0) return
|
if (!filePaths || filePaths.length === 0) return
|
||||||
|
const { unsupportedFiles, supportedFiles } = (await fs.getGgufFiles(
|
||||||
const sanitizedFilePaths: FilePathWithSize[] = []
|
filePaths
|
||||||
for (const filePath of filePaths) {
|
)) as unknown as {
|
||||||
const fileStats = await fs.fileStat(filePath, true)
|
unsupportedFiles: FilePathWithSize[]
|
||||||
if (!fileStats) continue
|
supportedFiles: FilePathWithSize[]
|
||||||
|
|
||||||
if (!fileStats.isDirectory) {
|
|
||||||
const fileName = await baseName(filePath)
|
|
||||||
sanitizedFilePaths.push({
|
|
||||||
path: filePath,
|
|
||||||
name: fileName,
|
|
||||||
size: fileStats.size,
|
|
||||||
})
|
|
||||||
} else {
|
|
||||||
// allowing only one level of directory
|
|
||||||
const files = await fs.readdirSync(filePath)
|
|
||||||
|
|
||||||
for (const file of files) {
|
|
||||||
const fullPath = await joinPath([filePath, file])
|
|
||||||
const fileStats = await fs.fileStat(fullPath, true)
|
|
||||||
if (!fileStats || fileStats.isDirectory) continue
|
|
||||||
|
|
||||||
sanitizedFilePaths.push({
|
|
||||||
path: fullPath,
|
|
||||||
name: file,
|
|
||||||
size: fileStats.size,
|
|
||||||
})
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
|
|
||||||
const unsupportedFiles = sanitizedFilePaths.filter(
|
|
||||||
(file) => !file.path.endsWith('.gguf')
|
|
||||||
)
|
|
||||||
const supportedFiles = sanitizedFilePaths.filter((file) =>
|
|
||||||
file.path.endsWith('.gguf')
|
|
||||||
)
|
|
||||||
|
|
||||||
const importingModels: ImportingModel[] = supportedFiles.map(
|
const importingModels: ImportingModel[] = supportedFiles.map(
|
||||||
({ path, name, size }: FilePathWithSize) => ({
|
({ path, name, size }: FilePathWithSize) => ({
|
||||||
importId: uuidv4(),
|
importId: uuidv4(),
|
||||||
|
|||||||
Loading…
x
Reference in New Issue
Block a user