diff --git a/src/lib/components/workspace/Models/ModelEditor.svelte b/src/lib/components/workspace/Models/ModelEditor.svelte
index bedc0920be..2bd001dbd8 100644
--- a/src/lib/components/workspace/Models/ModelEditor.svelte
+++ b/src/lib/components/workspace/Models/ModelEditor.svelte
@@ -6,6 +6,7 @@
import { WEBUI_BASE_URL, DEFAULT_CAPABILITIES } from '$lib/constants';
import { getTools } from '$lib/apis/tools';
+ import { getSkills } from '$lib/apis/skills';
import { getFunctions } from '$lib/apis/functions';
import { getModelsDefaults } from '$lib/apis/configs';
@@ -93,6 +94,7 @@
let knowledge = [];
let toolIds = [];
let skillIds = [];
+ let skillsList = [];
let filterIds = [];
let defaultFilterIds = [];
@@ -248,6 +250,7 @@
onMount(async () => {
await tools.set(await getTools(localStorage.token));
+ skillsList = (await getSkills(localStorage.token).catch(() => null)) ?? [];
await functions.set(await getFunctions(localStorage.token));
// Fetch admin-configured default model metadata so the editor
@@ -771,7 +774,7 @@
-
+
{#if ($functions ?? []).filter((func) => func.type === 'filter').length > 0 || ($functions ?? []).filter((func) => func.type === 'action').length > 0}
diff --git a/src/lib/components/workspace/Models/SkillsSelector.svelte b/src/lib/components/workspace/Models/SkillsSelector.svelte
index 6a7a481064..6effb1dc43 100644
--- a/src/lib/components/workspace/Models/SkillsSelector.svelte
+++ b/src/lib/components/workspace/Models/SkillsSelector.svelte
@@ -3,18 +3,25 @@
import Tooltip from '$lib/components/common/Tooltip.svelte';
import { getContext, onMount } from 'svelte';
- import { getSkillItems } from '$lib/apis/skills';
+ export let skills = [];
+
+ let _skills = {};
+ let searchQuery = '';
export let selectedSkillIds: string[] = [];
- let _skills: Record = {};
-
const i18n = getContext('i18n');
- onMount(async () => {
- const res = await getSkillItems(localStorage.token).catch(() => null);
- const skills = res?.items ?? [];
- _skills = skills.reduce((acc: Record, skill: any) => {
+ $: filteredSkillKeys = Object.keys(_skills).filter((id) => {
+ if (!searchQuery.trim()) return true;
+ const q = searchQuery.toLowerCase();
+ return (
+ _skills[id].name?.toLowerCase().includes(q) || _skills[id].id?.toLowerCase().includes(q)
+ );
+ });
+
+ onMount(() => {
+ _skills = skills.reduce((acc, skill) => {
acc[skill.id] = {
...skill,
selected: selectedSkillIds.includes(skill.id)
@@ -30,10 +37,21 @@
{$i18n.t('Skills')}
+ {#if Object.keys(_skills).length > 10}
+
+
+
+ {/if}
+
- {#if Object.keys(_skills).length > 0}
+ {#if skills.length > 0}
- {#each Object.keys(_skills) as skill, skillIdx}
+ {#each filteredSkillKeys as skill, skillIdx}