From c89fd237b822877bffbb33a37402622983c7189d Mon Sep 17 00:00:00 2001 From: Timothy Jaeryang Baek Date: Mon, 29 Jun 2026 12:16:05 -0500 Subject: [PATCH] refac --- .../chat/ModelSelector/ModelItem.svelte | 45 +++++++++--------- .../chat/ModelSelector/Selector.svelte | 10 ++-- .../workspace/Models/ModelEditor.svelte | 46 ++++++++++++++----- 3 files changed, 65 insertions(+), 36 deletions(-) diff --git a/src/lib/components/chat/ModelSelector/ModelItem.svelte b/src/lib/components/chat/ModelSelector/ModelItem.svelte index d387bbbe0f..f143ebc38a 100644 --- a/src/lib/components/chat/ModelSelector/ModelItem.svelte +++ b/src/lib/components/chat/ModelSelector/ModelItem.svelte @@ -22,11 +22,12 @@ export let selectedModelIdx: number = -1; export let item: any = {}; export let index: number = -1; - export let value: string = ''; + export let value: string | null = ''; export let unloadModelHandler: (modelValue: string) => void = () => {}; export let pinModelHandler: (modelId: string) => void = () => {}; export let deleteModelHandler: (model: any) => void = () => {}; + export let selectionOnly = false; export let onClick: () => void = () => {}; @@ -237,7 +238,7 @@
- {#if $user?.role === 'admin' && item.model.loaded} + {#if !selectionOnly && $user?.role === 'admin' && item.model.loaded} {/if} - { - copyLinkHandler(item.model); - }} - > - - + + + {/if} {#if value === item.value}
diff --git a/src/lib/components/chat/ModelSelector/Selector.svelte b/src/lib/components/chat/ModelSelector/Selector.svelte index 928bc14eac..62621689a7 100644 --- a/src/lib/components/chat/ModelSelector/Selector.svelte +++ b/src/lib/components/chat/ModelSelector/Selector.svelte @@ -42,10 +42,11 @@ const dispatch = createEventDispatcher(); export let id = ''; - export let value = ''; + export let value: string | null = ''; export let placeholder = $i18n.t('Select a model'); export let searchEnabled = true; export let searchPlaceholder = $i18n.t('Search a model'); + export let selectionOnly = false; export let items: { label: string; @@ -398,7 +399,7 @@ } }); - $: if (show) { + $: if (show && !selectionOnly) { setOllamaVersion(); } @@ -742,6 +743,7 @@ {pinModelHandler} {unloadModelHandler} {deleteModelHandler} + {selectionOnly} onClick={() => { value = item.value; selectedModelIdx = index; @@ -754,7 +756,7 @@
{/if} - {#if !(searchValue.trim() in $MODEL_DOWNLOAD_POOL) && searchValue && ollamaVersion && $user?.role === 'admin'} + {#if !selectionOnly && !(searchValue.trim() in $MODEL_DOWNLOAD_POOL) && searchValue && ollamaVersion && $user?.role === 'admin'} {/if} - {#each Object.keys($MODEL_DOWNLOAD_POOL) as model} + {#each selectionOnly ? [] : Object.keys($MODEL_DOWNLOAD_POOL) as model}
diff --git a/src/lib/components/workspace/Models/ModelEditor.svelte b/src/lib/components/workspace/Models/ModelEditor.svelte index 35240af4b0..8be5346cbc 100644 --- a/src/lib/components/workspace/Models/ModelEditor.svelte +++ b/src/lib/components/workspace/Models/ModelEditor.svelte @@ -13,6 +13,7 @@ import { getVoices } from '$lib/apis/audio'; import AdvancedParams from '$lib/components/chat/Settings/Advanced/AdvancedParams.svelte'; + import ModelSelector from '$lib/components/chat/ModelSelector/Selector.svelte'; import Tags from '$lib/components/common/Tags.svelte'; import Knowledge from '$lib/components/workspace/Models/Knowledge.svelte'; import ToolsSelector from '$lib/components/workspace/Models/ToolsSelector.svelte'; @@ -112,6 +113,25 @@ export let suggestionTags: { name: string }[] = []; let voices: { id: string; name?: string }[] = []; + const getBaseModelItems = (models: any[] = []) => { + const currentModelId = (model as any)?.id; + + return models + .filter( + (baseModel) => + (!currentModelId || baseModel.id !== currentModelId) && + !baseModel?.preset && + baseModel?.owned_by !== 'arena' && + !(baseModel?.direct ?? false) && + (!(baseModel?.info?.meta?.hidden ?? false) || baseModel.id === info.base_model_id) + ) + .map((baseModel) => ({ + value: baseModel.id, + label: baseModel.name, + model: baseModel + })); + }; + const loadSuggestionTags = async () => { const res: string[] = await (preset ? getModelTags : getBaseModelTags)( localStorage.token @@ -144,6 +164,13 @@ return; } + if (preset && !info.base_model_id) { + toast.error($i18n.t('Base Model is required.')); + loading = false; + + return; + } + if (knowledge.some((item) => item.status === 'uploading')) { toast.error($i18n.t('Please wait until all files are uploaded.')); loading = false; @@ -619,19 +646,16 @@
- + />
{/if}