diff --git a/tools/ui/src/lib/components/app/models/ModelsSelector/ModelsSelectorList.svelte b/tools/ui/src/lib/components/app/models/ModelsSelector/ModelsSelectorList.svelte
index 5bfaa3693c..4ffdd01f67 100644
--- a/tools/ui/src/lib/components/app/models/ModelsSelector/ModelsSelectorList.svelte
+++ b/tools/ui/src/lib/components/app/models/ModelsSelector/ModelsSelectorList.svelte
@@ -43,6 +43,8 @@
showOrgName = true
}: Props = $props();
let render = $derived(renderOption ?? defaultOption);
+ // a local-only install is one list: favorites first, then the rest, no headings
+ let localOnly = $derived(groups.providers.length === 0);
// section headers stick right below the search/tabs block of the dropdown
// scrollport; `--dropdown-sticky-height` is set by DropdownMenuSearchable
// and falls back to 0 in surfaces without one (the mobile sheet)
@@ -84,22 +86,28 @@
{/snippet}
{#if favorites.length > 0}
-
-
- {#snippet trigger()}
-
-
- Favorites
- {/snippet}
-
+ {#if localOnly}
{#each favorites as item (`fav-${item.option.id}`)}
{@render render(item, !showOrgName)}
{/each}
-
+ {:else}
+
+
+ {#snippet trigger()}
+
+
+ Favorites
+ {/snippet}
+
+ {#each favorites as item (`fav-${item.option.id}`)}
+ {@render render(item, !showOrgName)}
+ {/each}
+
+ {/if}
{/if}
{#if getDownloadEntries.length > 0}
@@ -110,29 +118,37 @@
{/each}
{/if}
-{#if groups.loaded.length > 0 || groups.available.length > 0}
-
-
- {#snippet trigger()}
-
+{#snippet localRows()}
+
+ {#each groups.loaded as item (`loaded-${item.option.id}`)}
+ {@render render(item, !showOrgName)}
+ {/each}
- Local models
- {/snippet}
-
- {#each groups.loaded as item (`loaded-${item.option.id}`)}
+ {#each groups.available as group (group.orgName)}
+ {#each group.items as item (item.option.id)}
{@render render(item, !showOrgName)}
{/each}
+ {/each}
+{/snippet}
- {#each groups.available as group (group.orgName)}
- {#each group.items as item (item.option.id)}
- {@render render(item, !showOrgName)}
- {/each}
- {/each}
-
+{#if groups.loaded.length > 0 || groups.available.length > 0}
+ {#if localOnly}
+ {@render localRows()}
+ {:else}
+
+ {#snippet trigger()}
+
+
+ Local models
+ {/snippet}
+
+ {@render localRows()}
+
+ {/if}
{/if}