diff --git a/backend/open_webui/utils/middleware.py b/backend/open_webui/utils/middleware.py index 10189cfae0..86be93e612 100644 --- a/backend/open_webui/utils/middleware.py +++ b/backend/open_webui/utils/middleware.py @@ -1181,8 +1181,18 @@ async def process_chat_payload(request, form_data, user, metadata, model): if files or urls: if not files: files = [] - files = [*files, *[{"type": "url", "url": url, "name": url} for url in urls]] + for file_item in files: + if file_item.get("type", "file") == "folder": + # Get folder files + folder_id = file_item.get("id", None) + if folder_id: + folder = Folders.get_folder_by_id_and_user_id(folder_id, user.id) + if folder and folder.data and "files" in folder.data: + files = [f for f in files if f.get("id", None) != folder_id] + files = [*files, *folder.data["files"]] + + files = [*files, *[{"type": "url", "url": url, "name": url} for url in urls]] # Remove duplicate files based on their content files = list({json.dumps(f, sort_keys=True): f for f in files}.values()) @@ -1275,9 +1285,6 @@ async def process_chat_payload(request, form_data, user, metadata, model): def make_tool_function(client, function_name): async def tool_function(**kwargs): - print(kwargs) - print(client) - print(await client.list_tool_specs()) return await client.call_tool( function_name, function_args=kwargs, diff --git a/src/lib/components/chat/Chat.svelte b/src/lib/components/chat/Chat.svelte index 75b4bed302..333e645e22 100644 --- a/src/lib/components/chat/Chat.svelte +++ b/src/lib/components/chat/Chat.svelte @@ -1547,7 +1547,7 @@ chatFiles.push( ..._files.filter((item) => - ['doc', 'text', 'file', 'note', 'chat', 'collection'].includes(item.type) + ['doc', 'text', 'file', 'note', 'chat', 'folder', 'collection'].includes(item.type) ) ); chatFiles = chatFiles.filter( diff --git a/src/lib/components/chat/MessageInput/Commands/Knowledge.svelte b/src/lib/components/chat/MessageInput/Commands/Knowledge.svelte index 077f97d416..cd1610fd42 100644 --- a/src/lib/components/chat/MessageInput/Commands/Knowledge.svelte +++ b/src/lib/components/chat/MessageInput/Commands/Knowledge.svelte @@ -13,6 +13,8 @@ import Database from '$lib/components/icons/Database.svelte'; import GlobeAlt from '$lib/components/icons/GlobeAlt.svelte'; import Youtube from '$lib/components/icons/Youtube.svelte'; + import { folders } from '$lib/stores'; + import Folder from '$lib/components/icons/Folder.svelte'; const i18n = getContext('i18n'); @@ -144,14 +146,25 @@ ] : []; - items = [...collections, ...collection_files, ...legacy_collections, ...legacy_documents].map( - (item) => { - return { - ...item, - ...(item?.legacy || item?.meta?.legacy || item?.meta?.document ? { legacy: true } : {}) - }; - } - ); + let folder_items = $folders.map((folder) => ({ + ...folder, + type: 'folder', + description: $i18n.t('Folder'), + title: folder.name + })); + + items = [ + ...folder_items, + ...collections, + ...collection_files, + ...legacy_collections, + ...legacy_documents + ].map((item) => { + return { + ...item, + ...(item?.legacy || item?.meta?.legacy || item?.meta?.document ? { legacy: true } : {}) + }; + }); fuse = new Fuse(items, { keys: ['name', 'description'] @@ -213,6 +226,8 @@ > {#if item?.type === 'collection'} + {:else if item?.type === 'folder'} + {:else} {/if} diff --git a/src/lib/components/common/FileItem.svelte b/src/lib/components/common/FileItem.svelte index ba24a97715..6870e828de 100644 --- a/src/lib/components/common/FileItem.svelte +++ b/src/lib/components/common/FileItem.svelte @@ -33,6 +33,7 @@ import Database from '../icons/Database.svelte'; import PageEdit from '../icons/PageEdit.svelte'; import ChatBubble from '../icons/ChatBubble.svelte'; + import Folder from '../icons/Folder.svelte'; let showModal = false; const decodeString = (str: string) => { @@ -115,6 +116,8 @@ {:else if type === 'chat'} + {:else if type === 'folder'} + {:else} {/if} diff --git a/src/lib/components/layout/Sidebar.svelte b/src/lib/components/layout/Sidebar.svelte index 3cc9706ea3..2b7fbc7c8f 100644 --- a/src/lib/components/layout/Sidebar.svelte +++ b/src/lib/components/layout/Sidebar.svelte @@ -91,7 +91,7 @@ toast.error(`${error}`); return []; }); - _folders.set(folderList); + _folders.set(folderList.sort((a, b) => b.updated_at - a.updated_at)); folders = {};