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 = {};