diff --git a/backend/open_webui/retrieval/utils.py b/backend/open_webui/retrieval/utils.py index d0dc7ae57e..5a691ab193 100644 --- a/backend/open_webui/retrieval/utils.py +++ b/backend/open_webui/retrieval/utils.py @@ -479,12 +479,38 @@ def get_sources_from_files( "documents": [[note.data.get("content", {}).get("md", "")]], "metadatas": [[{"file_id": note.id, "name": note.title}]], } - elif file.get("context") == "full" and file.get("type") == "file": - # Manual Full Mode Toggle - query_result = { - "documents": [[file.get("file").get("data", {}).get("content")]], - "metadatas": [[{"file_id": file.get("id"), "name": file.get("name")}]], - } + elif file.get("context") == "full": + if file.get("type") == "file": + # Manual Full Mode Toggle + query_result = { + "documents": [[file.get("file").get("data", {}).get("content")]], + "metadatas": [ + [{"file_id": file.get("id"), "name": file.get("name")}] + ], + } + elif file.get("type") == "collection": + # Manual Full Mode Toggle for Collection + file_ids = file.get("data", {}).get("file_ids", []) + + documents = [] + metadatas = [] + for file_id in file_ids: + file_object = Files.get_file_by_id(file_id) + + if file_object: + documents.append(file_object.data.get("content", "")) + metadatas.append( + { + "file_id": file_id, + "name": file_object.filename, + "source": file_object.filename, + } + ) + + query_result = { + "documents": [documents], + "metadatas": [metadatas], + } elif ( file.get("type") != "web_search" and request.app.state.config.BYPASS_EMBEDDING_AND_RETRIEVAL diff --git a/src/lib/components/chat/MessageInput.svelte b/src/lib/components/chat/MessageInput.svelte index 5f0c3a7d04..f917ec1309 100644 --- a/src/lib/components/chat/MessageInput.svelte +++ b/src/lib/components/chat/MessageInput.svelte @@ -1145,18 +1145,8 @@ loading={file.status === 'uploading'} dismissible={true} edit={true} + modal={true} on:dismiss={async () => { - try { - if (file.type !== 'collection' && !file?.collection) { - if (file.id) { - // This will handle both file deletion and Chroma cleanup - await deleteFileById(localStorage.token, file.id); - } - } - } catch (error) { - console.error('Error deleting file:', error); - } - // Remove from UI state files.splice(fileIdx, 1); files = files; diff --git a/src/lib/components/common/FileItem.svelte b/src/lib/components/common/FileItem.svelte index e8d40e2ddc..37ff9de838 100644 --- a/src/lib/components/common/FileItem.svelte +++ b/src/lib/components/common/FileItem.svelte @@ -17,6 +17,7 @@ export let url: string | null = null; export let dismissible = false; + export let modal = false; export let loading = false; export let item = null; @@ -50,7 +51,7 @@ : 'rounded-2xl'} text-left" type="button" on:click={async () => { - if (item?.file?.data?.content) { + if (item?.file?.data?.content || modal) { showModal = !showModal; } else { if (url) { diff --git a/src/lib/components/common/FileItemModal.svelte b/src/lib/components/common/FileItemModal.svelte index 8a28acad55..abec68923c 100644 --- a/src/lib/components/common/FileItemModal.svelte +++ b/src/lib/components/common/FileItemModal.svelte @@ -10,6 +10,7 @@ import Info from '../icons/Info.svelte'; import Switch from './Switch.svelte'; import Tooltip from './Tooltip.svelte'; + import dayjs from 'dayjs'; export let item; export let show = false; @@ -77,6 +78,24 @@