diff --git a/src/lib/components/admin/Settings/Models.svelte b/src/lib/components/admin/Settings/Models.svelte index ed0a78387e..df5d123a53 100644 --- a/src/lib/components/admin/Settings/Models.svelte +++ b/src/lib/components/admin/Settings/Models.svelte @@ -90,6 +90,7 @@ let savedModels: ModelListItem[] = []; let allModels: ModelListItem[] = []; + let availableModelIds = new Set(); let filteredModels = []; let selectedModelId = null; @@ -102,7 +103,7 @@ let modelDefaultsPanel = null; let modelDefaultsDirty = false; - let viewOption = ''; + let viewOption = 'available'; let tags: string[] = []; let selectedTag = ''; @@ -156,6 +157,8 @@ .filter((m) => !selectedTag || modelTags(m).includes(selectedTag)) .filter((m) => searchValue === '' || m.name.toLowerCase().includes(searchValue.toLowerCase())) .filter((m) => { + if (viewOption === 'available') return availableModelIds.has(m.id) || isPresetModel(m); + if (viewOption === 'unavailable') return !availableModelIds.has(m.id) && !isPresetModel(m); if (viewOption === 'base') return !isPresetModel(m); if (viewOption === 'workspace') return isPresetModel(m); if (viewOption === 'enabled') return m?.is_active ?? true; @@ -287,8 +290,8 @@ ...allModels, ...providerModels.filter((model: ModelListItem) => !allModelIds.has(model.id)) ]; - const listedModelIds = new Set(allModels.map((model) => model.id)); - allModels.push(...savedModels.filter((model) => !listedModelIds.has(model.id))); + availableModelIds = new Set(allModels.map((model) => model.id)); + allModels.push(...savedModels.filter((model) => !availableModelIds.has(model.id))); models = allModels.map((m: ModelListItem) => { const savedModel = savedModels.find((model: ModelListItem) => model.id === m.id); diff --git a/src/lib/components/admin/Settings/Models/AdminViewSelector.svelte b/src/lib/components/admin/Settings/Models/AdminViewSelector.svelte index c5f2c10a82..b896b4296b 100644 --- a/src/lib/components/admin/Settings/Models/AdminViewSelector.svelte +++ b/src/lib/components/admin/Settings/Models/AdminViewSelector.svelte @@ -14,6 +14,8 @@ const items = [ { value: '', label: $i18n.t('All') }, + { value: 'available', label: $i18n.t('Available') }, + { value: 'unavailable', label: $i18n.t('Unavailable') }, { value: 'base', label: $i18n.t('Base Models') }, { value: 'workspace', label: $i18n.t('Workspace Models') }, { value: 'enabled', label: $i18n.t('Enabled') }, diff --git a/src/lib/i18n/locales/en-US/translation.json b/src/lib/i18n/locales/en-US/translation.json index d5f745dc38..126e81fa95 100644 --- a/src/lib/i18n/locales/en-US/translation.json +++ b/src/lib/i18n/locales/en-US/translation.json @@ -272,6 +272,7 @@ "Automation triggered": "", "Automation updated": "", "Automations": "", + "Available": "", "Available list": "", "Available models": "", "Available Skills": "", @@ -3405,6 +3406,7 @@ "Unarchive": "", "Unarchive Chat": "", "Unassigned": "", + "Unavailable": "", "Underline": "", "unknown": "", "Unknown": "",