@@ -14,7 +14,6 @@ import {
1414 useCallback ,
1515 useRef ,
1616} from 'react'
17- import { Button } from '@/components/ui/button'
1817import { useModelProvider } from '@/hooks/useModelProvider'
1918import { Card , CardItem } from '@/containers/Card'
2019import { RenderMarkdown } from '@/containers/RenderMarkdown'
@@ -42,15 +41,14 @@ import {
4241} from '@/components/ui/dropdown-menu'
4342import { useServiceHub } from '@/hooks/useServiceHub'
4443import type { CatalogModel } from '@/services/models/types'
45- import { useDownloadStore } from '@/hooks/useDownloadStore'
46- import { Progress } from '@/components/ui/progress'
4744import HeaderPage from '@/containers/HeaderPage'
4845import { Loader } from 'lucide-react'
4946import { useTranslation } from '@/i18n/react-i18next-compat'
5047import Fuse from 'fuse.js'
5148import { useGeneralSetting } from '@/hooks/useGeneralSetting'
5249import { DownloadButtonPlaceholder } from '@/containers/DownloadButton'
5350import { useShallow } from 'zustand/shallow'
51+ import { ModelDownloadAction } from '@/containers/ModelDownloadAction'
5452
5553type SearchParams = {
5654 repo : string
@@ -247,21 +245,6 @@ function HubContent() {
247245 }
248246 }
249247
250- const { downloads, localDownloadingModels, addLocalDownloadingModel } =
251- useDownloadStore ( )
252-
253- const downloadProcesses = useMemo (
254- ( ) =>
255- Object . values ( downloads ) . map ( ( download ) => ( {
256- id : download . name ,
257- name : download . name ,
258- progress : download . progress ,
259- current : download . current ,
260- total : download . total ,
261- } ) ) ,
262- [ downloads ]
263- )
264-
265248 const navigate = useNavigate ( )
266249
267250 const isRecommendedModel = useCallback ( ( modelId : string ) => {
@@ -702,105 +685,12 @@ function HubContent() {
702685 checkModelSupport
703686 }
704687 />
705- { ( ( ) => {
706- const isDownloading =
707- localDownloadingModels . has (
708- variant . model_id
709- ) ||
710- downloadProcesses . some (
711- ( e ) => e . id === variant . model_id
712- )
713- const downloadProgress =
714- downloadProcesses . find (
715- ( e ) => e . id === variant . model_id
716- ) ?. progress || 0
717- const isDownloaded =
718- useModelProvider
719- . getState ( )
720- . getProviderByName ( 'llamacpp' )
721- ?. models . some (
722- ( m : { id : string } ) =>
723- m . id === variant . model_id
724- )
725-
726- if ( isDownloading ) {
727- return (
728- < >
729- < div className = "flex items-center gap-2 w-20" >
730- < Progress
731- value = {
732- downloadProgress * 100
733- }
734- />
735- < span className = "text-xs text-center text-main-view-fg/70" >
736- { Math . round (
737- downloadProgress * 100
738- ) }
739- %
740- </ span >
741- </ div >
742- </ >
743- )
744- }
745-
746- if ( isDownloaded ) {
747- return (
748- < div
749- className = "flex items-center justify-center rounded bg-main-view-fg/10"
750- title = { t ( 'hub:useModel' ) }
751- >
752- < Button
753- variant = "link"
754- size = "sm"
755- onClick = { ( ) =>
756- handleUseModel (
757- variant . model_id
758- )
759- }
760- >
761- { t ( 'hub:use' ) }
762- </ Button >
763- </ div >
764- )
688+ < ModelDownloadAction
689+ variant = { variant }
690+ model = {
691+ filteredModels [ virtualItem . index ]
765692 }
766-
767- return (
768- < div
769- className = "size-6 cursor-pointer flex items-center justify-center rounded hover:bg-main-view-fg/10 transition-all duration-200 ease-in-out"
770- title = { t ( 'hub:downloadModel' ) }
771- onClick = { ( ) => {
772- addLocalDownloadingModel (
773- variant . model_id
774- )
775- serviceHub
776- . models ( )
777- . pullModelWithMetadata (
778- variant . model_id ,
779- variant . path ,
780-
781- (
782- filteredModels [
783- virtualItem . index
784- ] . mmproj_models ?. find (
785- ( e ) =>
786- e . model_id . toLowerCase ( ) ===
787- 'mmproj-f16'
788- ) ||
789- filteredModels [
790- virtualItem . index
791- ] . mmproj_models ?. [ 0 ]
792- ) ?. path ,
793- huggingfaceToken
794- )
795- } }
796- >
797- < IconDownload
798- size = { 16 }
799- className = "text-main-view-fg/80"
800- />
801- </ div >
802- )
803- } ) ( ) }
693+ />
804694 </ div >
805695 }
806696 />
0 commit comments