From 53a2acd54157cfe3bd999e9013ab96dc2a17032c Mon Sep 17 00:00:00 2001 From: Timothy Jaeryang Baek Date: Sun, 9 Mar 2025 15:00:13 +0000 Subject: [PATCH] enh: local, external, direct model list filter Co-Authored-By: recrudesce <6450799+recrudesce@users.noreply.github.com> --- .../chat/ModelSelector/Selector.svelte | 111 ++++++++++++------ 1 file changed, 74 insertions(+), 37 deletions(-) diff --git a/src/lib/components/chat/ModelSelector/Selector.svelte b/src/lib/components/chat/ModelSelector/Selector.svelte index 4ac937121..f13ec1577 100644 --- a/src/lib/components/chat/ModelSelector/Selector.svelte +++ b/src/lib/components/chat/ModelSelector/Selector.svelte @@ -61,7 +61,9 @@ $: selectedModel = items.find((item) => item.value === value) ?? ''; let searchValue = ''; + let selectedTag = ''; + let selectedConnectionType = ''; let ollamaVersion = null; @@ -95,12 +97,35 @@ } return item.model?.info?.meta?.tags?.map((tag) => tag.name).includes(selectedTag); }) - : items.filter((item) => { - if (selectedTag === '') { - return true; - } - return item.model?.info?.meta?.tags?.map((tag) => tag.name).includes(selectedTag); - }); + .filter((item) => { + if (selectedConnectionType === '') { + return true; + } else if (selectedConnectionType === 'ollama') { + return item.model?.owned_by === 'ollama'; + } else if (selectedConnectionType === 'openai') { + return item.model?.owned_by === 'openai'; + } else if (selectedConnectionType === 'direct') { + return item.model?.direct; + } + }) + : items + .filter((item) => { + if (selectedTag === '') { + return true; + } + return item.model?.info?.meta?.tags?.map((tag) => tag.name).includes(selectedTag); + }) + .filter((item) => { + if (selectedConnectionType === '') { + return true; + } else if (selectedConnectionType === 'ollama') { + return item.model?.owned_by === 'ollama'; + } else if (selectedConnectionType === 'openai') { + return item.model?.owned_by === 'openai'; + } else if (selectedConnectionType === 'direct') { + return item.model?.direct; + } + }); const pullModelHandler = async () => { const sanitizedModelTag = searchValue.trim().replace(/^ollama\s+(run|pull)\s+/, ''); @@ -332,48 +357,59 @@ bind:this={tagsContainerElement} > - + {#if items.find((item) => item.model?.owned_by === 'ollama')} + + {/if} - + {#if items.find((item) => item.model?.owned_by === 'openai')} + + {/if} - + {#if items.find((item) => item.model?.direct)} + + {/if} {#each tags as tag}