diff --git a/src/lib/components/chat/ModelSelector.svelte b/src/lib/components/chat/ModelSelector.svelte index 38ed51f7a..bccfd22c0 100644 --- a/src/lib/components/chat/ModelSelector.svelte +++ b/src/lib/components/chat/ModelSelector.svelte @@ -3,7 +3,7 @@ import { models, showSettings, settings, user } from '$lib/stores'; import { onMount, tick, getContext } from 'svelte'; import { toast } from 'svelte-sonner'; - import Select from '../common/Select.svelte'; + import Selector from './ModelSelector/Selector.svelte'; const i18n = getContext('i18n'); @@ -38,7 +38,7 @@
- +
+ +
+ {/if} + +
+ {#each filteredItems as item} + + {item.label} + + {#if value === item.value} +
+ +
+ {/if} +
+ {:else} +
+
+ No results found +
+
+ {/each} + + {#each Object.keys($MODEL_DOWNLOAD_POOL) as model} +
+
+
+ +
+ +
+
+ Downloading "{model}" {'pullProgress' in $MODEL_DOWNLOAD_POOL[model] + ? `(${$MODEL_DOWNLOAD_POOL[model].pullProgress}%)` + : ''} +
+ + {#if 'digest' in $MODEL_DOWNLOAD_POOL[model] && $MODEL_DOWNLOAD_POOL[model].digest} +
+ {$MODEL_DOWNLOAD_POOL[model].digest} +
+ {/if} +
+
+ +
+ + + +
+
+ {/each} + + {#if !(searchValue.trim() in $MODEL_DOWNLOAD_POOL) && searchValue && ollamaVersion && $user.role === 'admin'} + + {/if} +
+ + + diff --git a/src/lib/components/common/Select.svelte b/src/lib/components/common/Selector.svelte similarity index 57% rename from src/lib/components/common/Select.svelte rename to src/lib/components/common/Selector.svelte index a8563cedb..9a56f30bb 100644 --- a/src/lib/components/common/Select.svelte +++ b/src/lib/components/common/Selector.svelte @@ -12,6 +12,9 @@ export let value = ''; export let placeholder = 'Select a model'; + export let searchEnabled = true; + export let searchPlaceholder = 'Search a model'; + export let items = [ { value: 'mango', label: 'Mango' }, { value: 'watermelon', label: 'Watermelon' }, @@ -49,39 +52,44 @@ transition={flyAndScale} sideOffset={4} > -
- + + {#if searchEnabled} +
+ - -
+ +
-
+
+ {/if} -
- {#each filteredItems as item} - - {item.label} +
+ {#each filteredItems as item} + + {item.label} - {#if value === item.value} -
- + {#if value === item.value} +
+ +
+ {/if} + + {:else} +
+
+ No results found
- {/if} - - {:else} - - No results found - - {/each} -
+
+ {/each} +
+ - diff --git a/src/lib/stores/index.ts b/src/lib/stores/index.ts index c0e38a21e..fc58db6bd 100644 --- a/src/lib/stores/index.ts +++ b/src/lib/stores/index.ts @@ -7,8 +7,9 @@ export const config = writable(undefined); export const user = writable(undefined); // Frontend -export const theme = writable('system'); +export const MODEL_DOWNLOAD_POOL = writable({}); +export const theme = writable('system'); export const chatId = writable(''); export const chats = writable([]);