jan/web/hooks/useDownloadModel.ts
NamH 0bd52e58ec
fix: download now change state immediately (#475)
* fix: download now change state immediately

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

* fix: add back last message

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

* update send button status

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

---------

Signed-off-by: James <james@jan.ai>
Co-authored-by: James <james@jan.ai>
2023-10-27 14:10:47 +07:00

73 lines
2.1 KiB
TypeScript

import { executeSerial } from '@services/pluginService'
import { ModelManagementService } from '@janhq/core'
import { useSetAtom } from 'jotai'
import { setDownloadStateAtom } from '@helpers/atoms/DownloadState.atom'
export default function useDownloadModel() {
const setDownloadState = useSetAtom(setDownloadStateAtom)
const assistanModel = (
model: Product,
modelVersion: ModelVersion
): AssistantModel => {
return {
_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,
nsfw: model.nsfw === true ? false : true,
greeting: model.greeting,
type: model.type,
createdAt: new Date(model.createdAt).getTime(),
updatedAt: new Date(model.updatedAt ?? '').getTime(),
status: '',
releaseDate: -1,
tags: model.tags,
}
}
const downloadModel = async (model: Product, 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)
await executeSerial(ModelManagementService.StoreModel, assistantModel)
await executeSerial(ModelManagementService.DownloadModel, {
downloadUrl: modelVersion.downloadLink,
fileName: modelVersion._id,
})
}
return {
downloadModel,
}
}