Rearrange model position in Hub page (#2622)
* Rearrange model position in Hub page * fix linting * Update web/screens/ExploreModels/ExploreModelList/index.tsx Co-authored-by: Louis <louis@jan.ai> --------- Co-authored-by: Jack Tri Le <Jack> Co-authored-by: Louis <louis@jan.ai>
This commit is contained in:
parent
b3c8bab153
commit
815a7aef96
3
.gitignore
vendored
3
.gitignore
vendored
@ -1,5 +1,6 @@
|
||||
.vscode
|
||||
.env
|
||||
.idea
|
||||
|
||||
# Jan inference
|
||||
error.log
|
||||
@ -35,4 +36,4 @@ extensions/*-extension/bin/vulkaninfo
|
||||
|
||||
|
||||
# Turborepo
|
||||
.turbo
|
||||
.turbo
|
||||
|
||||
@ -1,50 +1,46 @@
|
||||
import { useMemo } from 'react'
|
||||
|
||||
import { Model } from '@janhq/core'
|
||||
|
||||
import { useAtomValue } from 'jotai'
|
||||
|
||||
import ExploreModelItem from '@/screens/ExploreModels/ExploreModelItem'
|
||||
|
||||
import { downloadedModelsAtom } from '@/helpers/atoms/Model.atom'
|
||||
|
||||
type Props = {
|
||||
models: Model[]
|
||||
}
|
||||
|
||||
const ExploreModelList: React.FC<Props> = ({ models }) => {
|
||||
const takenModelIds: string[] = []
|
||||
const featuredModels = models
|
||||
.filter((m) => {
|
||||
const downloadedModels = useAtomValue(downloadedModelsAtom)
|
||||
const sortedModels: Model[] = useMemo(() => {
|
||||
const featuredModels: Model[] = []
|
||||
const remoteModels: Model[] = []
|
||||
const localModels: Model[] = []
|
||||
const remainingModels: Model[] = []
|
||||
models.forEach((m) => {
|
||||
if (m.metadata?.tags?.includes('Featured')) {
|
||||
takenModelIds.push(m.id)
|
||||
return m
|
||||
featuredModels.push(m)
|
||||
} else if (m.format === 'api') {
|
||||
remoteModels.push(m)
|
||||
} else if (downloadedModels.map((m) => m.id).includes(m.id)) {
|
||||
localModels.push(m)
|
||||
} else {
|
||||
remainingModels.push(m)
|
||||
}
|
||||
})
|
||||
.sort((m1, m2) => m1.metadata.size - m2.metadata.size)
|
||||
|
||||
const recommendedModels = models
|
||||
.filter((m) => {
|
||||
if (m.metadata?.tags?.includes('Recommended')) {
|
||||
takenModelIds.push(m.id)
|
||||
return m
|
||||
}
|
||||
})
|
||||
.sort((m1, m2) => m1.metadata.size - m2.metadata.size)
|
||||
|
||||
const openAiModels = models
|
||||
.filter((m) => {
|
||||
if (m.engine === 'openai') {
|
||||
takenModelIds.push(m.id)
|
||||
return m
|
||||
}
|
||||
})
|
||||
.sort((m1: Model, m2: Model) => m1.name.localeCompare(m2.name))
|
||||
|
||||
const remainingModels = models
|
||||
.filter((m) => !takenModelIds.includes(m.id))
|
||||
.sort((m1, m2) => m1.metadata.size - m2.metadata.size)
|
||||
|
||||
const sortedModels: Model[] = [
|
||||
...featuredModels,
|
||||
...recommendedModels,
|
||||
...openAiModels,
|
||||
...remainingModels,
|
||||
]
|
||||
featuredModels.sort((m1, m2) => m1.name.localeCompare(m2.name))
|
||||
remoteModels.sort((m1, m2) => m1.name.localeCompare(m2.name))
|
||||
localModels.sort((m1, m2) => m1.name.localeCompare(m2.name))
|
||||
remainingModels.sort((m1, m2) => m1.name.localeCompare(m2.name))
|
||||
return [
|
||||
...featuredModels,
|
||||
...remoteModels,
|
||||
...localModels,
|
||||
...remainingModels,
|
||||
]
|
||||
}, [models, downloadedModels])
|
||||
|
||||
return (
|
||||
<div className="relative h-full w-full flex-shrink-0">
|
||||
|
||||
Loading…
x
Reference in New Issue
Block a user