diff --git a/tools/ui/src/lib/components/app/models/ModelsSelector/ModelsSelectorDropdown.svelte b/tools/ui/src/lib/components/app/models/ModelsSelector/ModelsSelectorDropdown.svelte index a5afc3bfeb..e18ef0dc6b 100644 --- a/tools/ui/src/lib/components/app/models/ModelsSelector/ModelsSelectorDropdown.svelte +++ b/tools/ui/src/lib/components/app/models/ModelsSelector/ModelsSelectorDropdown.svelte @@ -342,6 +342,7 @@ void; onInfoClick: (modelName: string) => void; @@ -19,6 +21,7 @@ let { activeId, currentModel, + flat = false, groups, onInfoClick, onSelect, @@ -61,38 +64,44 @@ /> {/snippet} -{#if groups.favorites.length > 0} -

Favorite models

- - {#each groups.favorites as item (`fav-${item.option.id}`)} +{#if flat} + {#each [...groups.favorites, ...groups.available.flatMap((group) => group.items)] as item (item.option.id)} {@render render(item, true)} {/each} -{/if} +{:else} + {#if groups.favorites.length > 0} +

Favorite models

-{#if getDownloadEntries.length > 0} -

Download in progress

- - {#each getDownloadEntries as entry (entry.repoWithTag)} - - {/each} -{/if} - -{#if groups.loaded.length > 0} -

Loaded models

- - {#each groups.loaded as item (`loaded-${item.option.id}`)} - {@render render(item, false)} - {/each} -{/if} - -{#if groups.available.length > 0} -

Downloaded models

- - {#each groups.available as group (group.orgName)} - {#each group.items as item (item.option.id)} + {#each groups.favorites as item (`fav-${item.option.id}`)} {@render render(item, true)} {/each} - {/each} + {/if} + + {#if getDownloadEntries.length > 0} +

Download in progress

+ + {#each getDownloadEntries as entry (entry.repoWithTag)} + + {/each} + {/if} + + {#if groups.loaded.length > 0} +

Loaded models

+ + {#each groups.loaded as item (`loaded-${item.option.id}`)} + {@render render(item, false)} + {/each} + {/if} + + {#if groups.available.length > 0} +

Downloaded models

+ + {#each groups.available as group (group.orgName)} + {#each group.items as item (item.option.id)} + {@render render(item, true)} + {/each} + {/each} + {/if} {/if} { + if (option.backendId !== activeBackendId) return false; + const modelProps = modelsStore.props.getModelProps(option.model); return modelProps?.ui !== false; @@ -61,7 +67,6 @@ export function useModelsSelector(opts: UseModelsSelectorOptions): UseModelsSele const loading = $derived(modelsStore.loading); const updating = $derived(modelsStore.updating); const activeId = $derived(modelsStore.selectedModelId); - const activeBackendId = $derived(backendsStore.active.id); const backends = $derived(backendsStore.enabled); // Router mode and external backends both expose a selectable model list; // a single-model llama.cpp server does not. @@ -272,6 +277,10 @@ export function useModelsSelector(opts: UseModelsSelectorOptions): UseModelsSele return isLoadingModel; }, + get isLocalBackend() { + return isLocalBackend; + }, + get isMultiModel() { return isMultiModel; },