From 954613944b317a78d5929456ae1388543aa052c8 Mon Sep 17 00:00:00 2001 From: Timothy Jaeryang Baek Date: Sun, 16 Aug 2026 23:51:38 -0700 Subject: [PATCH] refac --- backend/open_webui/routers/skills.py | 5 + backend/open_webui/routers/tools.py | 14 +- src/lib/apis/skills/index.ts | 7 +- src/lib/apis/tools/index.ts | 7 +- .../chat/MessageInput/IntegrationsMenu.svelte | 521 +++++++++++------- 5 files changed, 349 insertions(+), 205 deletions(-) diff --git a/backend/open_webui/routers/skills.py b/backend/open_webui/routers/skills.py index 4fefa2cb7a..7d2daabf8e 100644 --- a/backend/open_webui/routers/skills.py +++ b/backend/open_webui/routers/skills.py @@ -38,6 +38,7 @@ router = APIRouter() @router.get('/', response_model=list[SkillUserResponse]) async def get_skills( request: Request, + query: Optional[str] = None, user=Depends(get_verified_user), db: AsyncSession = Depends(get_async_session), ): @@ -60,6 +61,10 @@ async def get_skills( ) ] + if query: + q = query.casefold() + skills = [skill for skill in skills if q in (skill.name or '').casefold()] + return skills diff --git a/backend/open_webui/routers/tools.py b/backend/open_webui/routers/tools.py index f14b89d6ad..fb44bfc0a7 100644 --- a/backend/open_webui/routers/tools.py +++ b/backend/open_webui/routers/tools.py @@ -66,6 +66,7 @@ async def get_tool_module(request, tool_id, load_from_db=True): @router.get('/', response_model=list[ToolUserResponse]) async def get_tools( request: Request, + query: Optional[str] = None, user=Depends(get_verified_user), db: AsyncSession = Depends(get_async_session), ): @@ -165,10 +166,7 @@ async def get_tools( ) ) - if user.role == 'admin' and BYPASS_ADMIN_ACCESS_CONTROL: - # Admin can see all tools - return tools - else: + if not (user.role == 'admin' and BYPASS_ADMIN_ACCESS_CONTROL): user_group_ids = {group.id for group in await Groups.get_groups_by_member_id(user.id, db=db)} filtered_tools = [] for tool in tools: @@ -192,7 +190,13 @@ async def get_tools( db=db, ): filtered_tools.append(tool) - return filtered_tools + tools = filtered_tools + + if query: + q = query.casefold() + tools = [tool for tool in tools if q in (tool.name or '').casefold()] + + return tools ############################ diff --git a/src/lib/apis/skills/index.ts b/src/lib/apis/skills/index.ts index fc1dc24ce1..5185d5efaf 100644 --- a/src/lib/apis/skills/index.ts +++ b/src/lib/apis/skills/index.ts @@ -31,10 +31,13 @@ export const createNewSkill = async (token: string, skill: object) => { return res; }; -export const getSkills = async (token: string = '') => { +export const getSkills = async (token: string = '', query: string | null = null) => { let error = null; - const res = await fetch(`${WEBUI_API_BASE_URL}/skills/`, { + const searchParams = new URLSearchParams(); + if (query) searchParams.append('query', query); + + const res = await fetch(`${WEBUI_API_BASE_URL}/skills/?${searchParams.toString()}`, { method: 'GET', headers: { Accept: 'application/json', diff --git a/src/lib/apis/tools/index.ts b/src/lib/apis/tools/index.ts index 5d26e50fee..8378299923 100644 --- a/src/lib/apis/tools/index.ts +++ b/src/lib/apis/tools/index.ts @@ -65,10 +65,13 @@ export const loadToolByUrl = async (token: string = '', url: string) => { return res; }; -export const getTools = async (token: string = '') => { +export const getTools = async (token: string = '', query: string | null = null) => { let error = null; - const res = await fetch(`${WEBUI_API_BASE_URL}/tools/`, { + const searchParams = new URLSearchParams(); + if (query) searchParams.append('query', query); + + const res = await fetch(`${WEBUI_API_BASE_URL}/tools/?${searchParams.toString()}`, { method: 'GET', headers: { Accept: 'application/json', diff --git a/src/lib/components/chat/MessageInput/IntegrationsMenu.svelte b/src/lib/components/chat/MessageInput/IntegrationsMenu.svelte index b840eb5c96..40d7c49dbc 100644 --- a/src/lib/components/chat/MessageInput/IntegrationsMenu.svelte +++ b/src/lib/components/chat/MessageInput/IntegrationsMenu.svelte @@ -1,17 +1,8 @@ { if (state === false) { onClose(); @@ -141,11 +276,12 @@
- + {#if tab === ''} -
+
{#if tools} {#if Object.keys(tools).length > 0} - {#each Object.keys(tools) as toolId} -
+ + {#if (tools?.[toolId]?.authenticated ?? true) && toolId.startsWith('server:mcp:')} +
+ + + +
+ {/if} + + {#if tools?.[toolId]?.has_user_valves && ($user?.role === 'admin' || ($user?.permissions?.chat?.valves ?? true))} +
+ + + +
+ {/if} + +
+ +
+ + {/each}
- - {#if (tools[toolId]?.authenticated ?? true) && toolId.startsWith('server:mcp:')} -
- - - -
- {/if} - - {#if tools[toolId]?.has_user_valves && ($user?.role === 'admin' || ($user?.permissions?.chat?.valves ?? true))} -
- - - -
- {/if} - -
- -
- - {/each} + {/if} +
{:else if tab === 'skills' && skills} -
+
- {#each Object.keys(skills) as skillId} -
-
-
- +
+ +
+ + {/each}
- - {/each} + {/if} + {/if}