diff --git a/web-app/src/routes/hub/index.tsx b/web-app/src/routes/hub/index.tsx index 081009fcd9..9dd2a89799 100644 --- a/web-app/src/routes/hub/index.tsx +++ b/web-app/src/routes/hub/index.tsx @@ -194,46 +194,50 @@ function Hub() { fetchSources() }, [fetchSources]) - const handleSearchChange = (e: ChangeEvent) => { - setIsSearching(false) - setSearchValue(e.target.value) - setHuggingFaceRepo(null) // Clear previous repo info + const fetchHuggingFaceModel = async (searchValue: string) => { + if ( + !searchValue.length || + (!searchValue.includes('/') && !searchValue.startsWith('http')) + ) { + return + } + setIsSearching(true) if (addModelSourceTimeoutRef.current) { clearTimeout(addModelSourceTimeoutRef.current) } - if ( - e.target.value.length && - (e.target.value.includes('/') || e.target.value.startsWith('http')) - ) { - setIsSearching(true) - - addModelSourceTimeoutRef.current = setTimeout(async () => { - try { - // Fetch HuggingFace repository information - const repoInfo = await fetchHuggingFaceRepo( - e.target.value, - huggingfaceToken - ) - if (repoInfo) { - const catalogModel = convertHfRepoToCatalogModel(repoInfo) - if ( - !sources.some( - (s) => - catalogModel.model_name.trim().split('/').pop() === - s.model_name.trim() - ) - ) { - setHuggingFaceRepo(catalogModel) - } + addModelSourceTimeoutRef.current = setTimeout(async () => { + try { + const repoInfo = await fetchHuggingFaceRepo(searchValue, huggingfaceToken) + if (repoInfo) { + const catalogModel = convertHfRepoToCatalogModel(repoInfo) + if ( + !sources.some( + (s) => + catalogModel.model_name.trim().split('/').pop() === + s.model_name.trim() && + catalogModel.developer.trim() === s.developer?.trim() + ) + ) { + setHuggingFaceRepo(catalogModel) } - } catch (error) { - console.error('Error fetching repository info:', error) - } finally { - setIsSearching(false) } - }, 500) + } catch (error) { + console.error('Error fetching repository info:', error) + } finally { + setIsSearching(false) + } + }, 500) + } + + const handleSearchChange = (e: ChangeEvent) => { + setIsSearching(false) + setSearchValue(e.target.value) + setHuggingFaceRepo(null) // Clear previous repo info + + if (!showOnlyDownloaded) { + fetchHuggingFaceModel(e.target.value) } } @@ -508,7 +512,15 @@ function Hub() {
{ + setShowOnlyDownloaded(checked) + if (checked) { + setHuggingFaceRepo(null) + } else { + // Re-trigger HuggingFace search when switching back to "All models" + fetchHuggingFaceModel(searchValue) + } + }} /> {t('hub:downloaded')}