From 5f9f7669659e6dbad419c24da5bc55c6f5584ace Mon Sep 17 00:00:00 2001 From: Faisal Amir Date: Wed, 3 Sep 2025 18:31:07 +0700 Subject: [PATCH 1/2] fix: search hgf repo and downloaded filter --- web-app/src/routes/hub/index.tsx | 47 ++++++++++++++++++++++++++++++-- 1 file changed, 44 insertions(+), 3 deletions(-) diff --git a/web-app/src/routes/hub/index.tsx b/web-app/src/routes/hub/index.tsx index 081009fcd..3f5f35241 100644 --- a/web-app/src/routes/hub/index.tsx +++ b/web-app/src/routes/hub/index.tsx @@ -205,7 +205,8 @@ function Hub() { if ( e.target.value.length && - (e.target.value.includes('/') || e.target.value.startsWith('http')) + (e.target.value.includes('/') || e.target.value.startsWith('http')) && + !showOnlyDownloaded ) { setIsSearching(true) @@ -222,7 +223,8 @@ function Hub() { !sources.some( (s) => catalogModel.model_name.trim().split('/').pop() === - s.model_name.trim() + s.model_name.trim() && + catalogModel.developer.trim() === s.developer?.trim() ) ) { setHuggingFaceRepo(catalogModel) @@ -508,7 +510,46 @@ function Hub() {
{ + setShowOnlyDownloaded(checked) + if (checked) { + setHuggingFaceRepo(null) + } else if ( + searchValue.length && + (searchValue.includes('/') || searchValue.startsWith('http')) + ) { + // Re-trigger HuggingFace search when switching back to "All models" + setIsSearching(true) + if (addModelSourceTimeoutRef.current) { + clearTimeout(addModelSourceTimeoutRef.current) + } + 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) + } + }} /> {t('hub:downloaded')} From 38629afc8946e4a18fc88e62805e8903edd7f437 Mon Sep 17 00:00:00 2001 From: Faisal Amir Date: Wed, 3 Sep 2025 18:37:49 +0700 Subject: [PATCH 2/2] chore: avoid duplicated fn --- web-app/src/routes/hub/index.tsx | 111 ++++++++++++------------------- 1 file changed, 41 insertions(+), 70 deletions(-) diff --git a/web-app/src/routes/hub/index.tsx b/web-app/src/routes/hub/index.tsx index 3f5f35241..9dd2a8979 100644 --- a/web-app/src/routes/hub/index.tsx +++ b/web-app/src/routes/hub/index.tsx @@ -194,48 +194,50 @@ function Hub() { fetchSources() }, [fetchSources]) + const fetchHuggingFaceModel = async (searchValue: string) => { + if ( + !searchValue.length || + (!searchValue.includes('/') && !searchValue.startsWith('http')) + ) { + return + } + + setIsSearching(true) + if (addModelSourceTimeoutRef.current) { + clearTimeout(addModelSourceTimeoutRef.current) + } + + 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) + } + const handleSearchChange = (e: ChangeEvent) => { setIsSearching(false) setSearchValue(e.target.value) setHuggingFaceRepo(null) // Clear previous repo info - if (addModelSourceTimeoutRef.current) { - clearTimeout(addModelSourceTimeoutRef.current) - } - - if ( - e.target.value.length && - (e.target.value.includes('/') || e.target.value.startsWith('http')) && - !showOnlyDownloaded - ) { - 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() && - catalogModel.developer.trim() === s.developer?.trim() - ) - ) { - setHuggingFaceRepo(catalogModel) - } - } - } catch (error) { - console.error('Error fetching repository info:', error) - } finally { - setIsSearching(false) - } - }, 500) + if (!showOnlyDownloaded) { + fetchHuggingFaceModel(e.target.value) } } @@ -514,40 +516,9 @@ function Hub() { setShowOnlyDownloaded(checked) if (checked) { setHuggingFaceRepo(null) - } else if ( - searchValue.length && - (searchValue.includes('/') || searchValue.startsWith('http')) - ) { + } else { // Re-trigger HuggingFace search when switching back to "All models" - setIsSearching(true) - if (addModelSourceTimeoutRef.current) { - clearTimeout(addModelSourceTimeoutRef.current) - } - 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) + fetchHuggingFaceModel(searchValue) } }} />