diff --git a/src/lib/components/admin/Settings/Models.svelte b/src/lib/components/admin/Settings/Models.svelte index 56ef8ce4f7..1318e9e063 100644 --- a/src/lib/components/admin/Settings/Models.svelte +++ b/src/lib/components/admin/Settings/Models.svelte @@ -39,6 +39,8 @@ import EllipsisHorizontal from '$lib/components/icons/EllipsisHorizontal.svelte'; import EyeSlash from '$lib/components/icons/EyeSlash.svelte'; import Eye from '$lib/components/icons/Eye.svelte'; + import CheckCircle from '$lib/components/icons/CheckCircle.svelte'; + import Minus from '$lib/components/icons/Minus.svelte'; import { WEBUI_API_BASE_URL, WEBUI_BASE_URL } from '$lib/constants'; import { goto } from '$app/navigation'; import { DropdownMenu } from 'bits-ui'; @@ -121,6 +123,28 @@ ); }; + const showAllHandler = async () => { + const modelsToShow = filteredModels.filter((m) => m?.meta?.hidden === true); + // Optimistic UI update + modelsToShow.forEach((m) => { + m.meta = { ...m.meta, hidden: false }; + }); + models = models; + // Sync with server + await Promise.all(modelsToShow.map((model) => upsertModelHandler(model))); + }; + + const hideAllHandler = async () => { + const modelsToHide = filteredModels.filter((m) => !(m?.meta?.hidden ?? false)); + // Optimistic UI update + modelsToHide.forEach((m) => { + m.meta = { ...m.meta, hidden: true }; + }); + models = models; + // Sync with server + await Promise.all(modelsToHide.map((model) => upsertModelHandler(model))); + }; + const downloadModels = async (models) => { let blob = new Blob([JSON.stringify(models)], { type: 'application/json' @@ -485,7 +509,7 @@ enableAllHandler(); }} > - +
{$i18n.t('Enable All')}
@@ -495,9 +519,31 @@ disableAllHandler(); }} > - +
{$i18n.t('Disable All')}
+ +
+ + { + showAllHandler(); + }} + > + +
{$i18n.t('Show All')}
+
+ + { + hideAllHandler(); + }} + > + +
{$i18n.t('Hide All')}
+