fix: app shows wrong performance tag, all say not enough ram on windows
This commit is contained in:
parent
00c68aea74
commit
f7f1e3da74
@ -16,7 +16,6 @@ import {
|
||||
import { atom, useAtomValue } from 'jotai'
|
||||
|
||||
import { useDownloadState } from '@/hooks/useDownloadState'
|
||||
import useGetPerformanceTag from '@/hooks/useGetPerformanceTag'
|
||||
|
||||
import { formatDownloadPercentage } from '@/utils/converter'
|
||||
|
||||
@ -30,7 +29,6 @@ export default function ModalCancelDownload({
|
||||
isFromList,
|
||||
}: Props) {
|
||||
const { modelDownloadStateAtom } = useDownloadState()
|
||||
useGetPerformanceTag()
|
||||
const downloadAtom = useMemo(
|
||||
() => atom((get) => get(modelDownloadStateAtom)[suitableModel.name]),
|
||||
// eslint-disable-next-line react-hooks/exhaustive-deps
|
||||
|
||||
@ -1,27 +1,22 @@
|
||||
import { useState } from 'react'
|
||||
|
||||
import { ModelVersion } from '@janhq/core/lib/types'
|
||||
import { useAtomValue } from 'jotai'
|
||||
|
||||
import { ModelPerformance, TagType } from '@/constants/tagType'
|
||||
|
||||
import { totalRamAtom } from '@/helpers/atoms/SystemBar.atom'
|
||||
|
||||
// Recommendation:
|
||||
// `Recommended (green)`: "Max RAM required" is 80% of users max RAM.
|
||||
// `Slow on your device (yellow)`: Max RAM required is 80-100% of users max RAM
|
||||
// `Not enough RAM (red)`: User RAM is below "Max RAM required"
|
||||
|
||||
export default function useGetPerformanceTag() {
|
||||
const [performanceTag, setPerformanceTag] = useState<TagType | undefined>()
|
||||
const totalRam = useAtomValue(totalRamAtom)
|
||||
|
||||
const getPerformanceForModel = async (modelVersion: ModelVersion) => {
|
||||
async function getPerformanceForModel(
|
||||
modelVersion: ModelVersion,
|
||||
totalRam: number
|
||||
): Promise<{ title: string; performanceTag: TagType }> {
|
||||
const requiredRam = modelVersion.maxRamRequired
|
||||
setPerformanceTag(calculateRamPerformance(requiredRam, totalRam))
|
||||
}
|
||||
const performanceTag = calculateRamPerformance(requiredRam, totalRam)
|
||||
|
||||
let title = ''
|
||||
|
||||
switch (performanceTag) {
|
||||
case ModelPerformance.PerformancePositive:
|
||||
title = 'Recommended'
|
||||
@ -33,8 +28,10 @@ export default function useGetPerformanceTag() {
|
||||
title = 'Not enough RAM'
|
||||
break
|
||||
}
|
||||
return { title, performanceTag }
|
||||
}
|
||||
|
||||
return { performanceTag, title, getPerformanceForModel }
|
||||
return { getPerformanceForModel }
|
||||
}
|
||||
|
||||
const calculateRamPerformance = (
|
||||
|
||||
@ -1,5 +1,5 @@
|
||||
/* eslint-disable react-hooks/exhaustive-deps */
|
||||
import { useCallback, useEffect, useMemo } from 'react'
|
||||
import { useCallback, useEffect, useMemo, useState } from 'react'
|
||||
|
||||
import { ModelCatalog, ModelVersion } from '@janhq/core/lib/types'
|
||||
import { Badge, Button } from '@janhq/uikit'
|
||||
@ -20,6 +20,8 @@ import { useMainViewState } from '@/hooks/useMainViewState'
|
||||
|
||||
import { toGigabytes } from '@/utils/converter'
|
||||
|
||||
import { totalRamAtom } from '@/helpers/atoms/SystemBar.atom'
|
||||
|
||||
type Props = {
|
||||
suitableModel: ModelVersion
|
||||
exploreModel: ModelCatalog
|
||||
@ -32,8 +34,12 @@ const ExploreModelItemHeader: React.FC<Props> = ({
|
||||
const { downloadModel } = useDownloadModel()
|
||||
const { downloadedModels } = useGetDownloadedModels()
|
||||
const { modelDownloadStateAtom, downloadStates } = useDownloadState()
|
||||
const { performanceTag, title, getPerformanceForModel } =
|
||||
useGetPerformanceTag()
|
||||
const { getPerformanceForModel } = useGetPerformanceTag()
|
||||
const [title, setTitle] = useState<string>('Recommended')
|
||||
const totalRam = useAtomValue(totalRamAtom)
|
||||
const [performanceTag, setPerformanceTag] = useState<TagType>(
|
||||
ModelPerformance.PerformancePositive
|
||||
)
|
||||
const downloadAtom = useMemo(
|
||||
() => atom((get) => get(modelDownloadStateAtom)[suitableModel.name]),
|
||||
[suitableModel.name]
|
||||
@ -41,9 +47,20 @@ const ExploreModelItemHeader: React.FC<Props> = ({
|
||||
const downloadState = useAtomValue(downloadAtom)
|
||||
const { setMainViewState } = useMainViewState()
|
||||
|
||||
const calculatePerformance = useCallback(
|
||||
(suitableModel: ModelVersion) => async () => {
|
||||
const { title, performanceTag } = await getPerformanceForModel(
|
||||
suitableModel,
|
||||
totalRam
|
||||
)
|
||||
setPerformanceTag(performanceTag)
|
||||
setTitle(title)
|
||||
},
|
||||
[totalRam]
|
||||
)
|
||||
|
||||
useEffect(() => {
|
||||
getPerformanceForModel(suitableModel)
|
||||
// eslint-disable-next-line react-hooks/exhaustive-deps
|
||||
calculatePerformance(suitableModel)
|
||||
}, [suitableModel])
|
||||
|
||||
const onDownloadClick = useCallback(() => {
|
||||
|
||||
Loading…
x
Reference in New Issue
Block a user