Skip to content

Commit

Permalink
fix: app shows wrong performance tag, all say not enough ram on windows
Browse files Browse the repository at this point in the history
  • Loading branch information
louis-jan committed Nov 23, 2023
1 parent 00c68ae commit f7f1e3d
Show file tree
Hide file tree
Showing 3 changed files with 43 additions and 31 deletions.
2 changes: 0 additions & 2 deletions web/containers/ModalCancelDownload/index.tsx
Original file line number Diff line number Diff line change
Expand Up @@ -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'

Expand All @@ -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
Expand Down
45 changes: 21 additions & 24 deletions web/hooks/useGetPerformanceTag.ts
Original file line number Diff line number Diff line change
@@ -1,40 +1,37 @@
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))
}

let title = ''
switch (performanceTag) {
case ModelPerformance.PerformancePositive:
title = 'Recommended'
break
case ModelPerformance.PerformanceNeutral:
title = 'Slow on your device'
break
case ModelPerformance.PerformanceNegative:
title = 'Not enough RAM'
break
const performanceTag = calculateRamPerformance(requiredRam, totalRam)

let title = ''

switch (performanceTag) {
case ModelPerformance.PerformancePositive:
title = 'Recommended'
break
case ModelPerformance.PerformanceNeutral:
title = 'Slow on your device'
break
case ModelPerformance.PerformanceNegative:
title = 'Not enough RAM'
break
}
return { title, performanceTag }
}

return { performanceTag, title, getPerformanceForModel }
return { getPerformanceForModel }
}

const calculateRamPerformance = (
Expand Down
27 changes: 22 additions & 5 deletions web/screens/ExploreModels/ExploreModelItemHeader/index.tsx
Original file line number Diff line number Diff line change
@@ -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'
Expand All @@ -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
Expand All @@ -32,18 +34,33 @@ 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]
)
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(() => {
Expand Down

0 comments on commit f7f1e3d

Please sign in to comment.