* Eslint import order * Initial Uikit * Rename file with camelCase * Remove unused code * Remove unused code * Set position traficlight mac * Grouping Ribbon, Topbar and Bottombar as layout * Added image brand * Moving feature toggle into context folder * Fix active state of setting menu * Cleanup downloadModel atom helper * Cleanup useGetConfigureModel * Added wave animation * Create useMainViewState intead of import helper atom * Remove unused code * Take a back switch ui * Toggle using switch component * Add dynamic primary color * Cleanup import * Added uikit scroll area * Add best practice form * Added toaster container * Fix loader container * Add hooks useDownloadState * Added tooltip on ribbon menu * Added case user multiple download model * Adjust input style with bigger ring * Restyle my model screen * Replace useStartStop model with useActiveModel * Import icon using Icon name * Fix missing login loading start and stop model * WIP integrate with cmdk * Move layout search bar on middle of app * Added function cancel download * Cleanup model explore * Cleanup unused code * Move app version in bototmbar or footer * WIP chat screen * WIP chat screen * Cleanup style and remove unsed code * Added command for showing downloaded model * Fix missing keyframe loader dot animation * Conditional loader of plugin setting * WIP history list message * chore: rebase main * Adding script ui into root package * Fix different version react hooks form * Add close toaster * Added status model active or not on list of command * Conditional showing info if user don't have a model * Disabled toolbar chat when user not yet have convo * chore: fix state * fix: get resource atom * Fix conditional bottom bar * fix: model download state * Fix font * Improve icon my model * Add toaster delete chat * Remove test classname * Fix scroll chat body * Fix scrolling chat body * chore: add message update * Add uikit into depedencies on root package * Update chat flow * Fix hot reload ui changes * Increate background color chat screen light mode * Added visual conversation active state * Added build:uikit on gh actions * chore: attempt to fix CI * fix: deps * fix: tests * chore: attempt to fix CI --------- Co-authored-by: Louis <louis@jan.ai>
84 lines
2.3 KiB
TypeScript
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,
|
|
}
|
|
}
|