jan/web/hooks/useDownloadModel.ts
NamH 52d56a8ae1
refactor: move file to jan root (#598)
* feat: move necessary files to jan root

Signed-off-by: James <james@jan.ai>

* chore: check model dir

---------

Signed-off-by: James <james@jan.ai>
Co-authored-by: James <james@jan.ai>
Co-authored-by: Louis <louis@jan.ai>
2023-11-16 12:09:09 +07:00

84 lines
2.3 KiB
TypeScript

import { PluginType } from '@janhq/core'
import { ModelPlugin } from '@janhq/core/lib/plugins'
import { Model, ModelCatalog, ModelVersion } from '@janhq/core/lib/types'
import { useAtom } from 'jotai'
import { useDownloadState } from './useDownloadState'
import { downloadingModelsAtom } from '@/helpers/atoms/Model.atom'
import { pluginManager } from '@/plugin/PluginManager'
export default function useDownloadModel() {
const { setDownloadState } = useDownloadState()
const [downloadingModels, setDownloadingModels] = useAtom(
downloadingModelsAtom
)
const assistanModel = (
model: ModelCatalog,
modelVersion: ModelVersion
): Model => {
return {
// eslint-disable-next-line @typescript-eslint/naming-convention
id: modelVersion.id,
name: modelVersion.name,
quantMethod: modelVersion.quantMethod,
bits: modelVersion.bits,
size: modelVersion.size,
maxRamRequired: modelVersion.maxRamRequired,
usecase: modelVersion.usecase,
downloadLink: modelVersion.downloadLink,
startDownloadAt: modelVersion.startDownloadAt,
finishDownloadAt: modelVersion.finishDownloadAt,
productId: model.id,
productName: model.name,
shortDescription: model.shortDescription,
longDescription: model.longDescription,
avatarUrl: model.avatarUrl,
author: model.author,
version: model.version,
modelUrl: model.modelUrl,
createdAt: new Date(model.createdAt).getTime(),
updatedAt: new Date(model.updatedAt ?? '').getTime(),
status: '',
releaseDate: -1,
tags: model.tags,
}
}
const downloadModel = async (
model: ModelCatalog,
modelVersion: ModelVersion
) => {
// set an initial download state
setDownloadState({
modelId: modelVersion.id,
time: {
elapsed: 0,
remaining: 0,
},
speed: 0,
percent: 0,
size: {
total: 0,
transferred: 0,
},
fileName: modelVersion.id,
})
modelVersion.startDownloadAt = Date.now()
const assistantModel = assistanModel(model, modelVersion)
setDownloadingModels([...downloadingModels, assistantModel])
await pluginManager
.get<ModelPlugin>(PluginType.Model)
?.downloadModel(assistantModel)
}
return {
downloadModel,
}
}