From 94e9c7fef991090d73df1ffd8dda448ceb104f83 Mon Sep 17 00:00:00 2001 From: G30 <50341825+silentoplayz@users.noreply.github.com> Date: Sat, 10 Oct 2026 12:44:43 -0400 Subject: [PATCH] fix: show a knowledge file's current name in citations after it is renamed (#31860) --- backend/open_webui/retrieval/utils.py | 18 ++++++++++++++++++ backend/open_webui/tools/builtin.py | 13 +++++++++++++ 2 files changed, 31 insertions(+) diff --git a/backend/open_webui/retrieval/utils.py b/backend/open_webui/retrieval/utils.py index da9ab85c06..f4134819df 100644 --- a/backend/open_webui/retrieval/utils.py +++ b/backend/open_webui/retrieval/utils.py @@ -1704,6 +1704,24 @@ async def get_sources_from_items( sources.append(source) except Exception as e: log.exception(e) + + file_ids = { + metadata['file_id'] + for source in sources + for metadata in source['metadata'] + if isinstance(metadata, dict) and metadata.get('file_id') + } + if file_ids: + file_names = { + file.id: (file.meta or {}).get('name') for file in await Files.get_file_metadatas_by_ids(list(file_ids)) + } + for source in sources: + for metadata in source['metadata']: + file_name = file_names.get(metadata.get('file_id')) if isinstance(metadata, dict) else None + if file_name: + if metadata.get('source') == metadata.get('name'): + metadata['source'] = file_name + metadata['name'] = file_name return sources diff --git a/backend/open_webui/tools/builtin.py b/backend/open_webui/tools/builtin.py index 312cc5f7b9..b191326d9e 100644 --- a/backend/open_webui/tools/builtin.py +++ b/backend/open_webui/tools/builtin.py @@ -3325,6 +3325,19 @@ async def query_knowledge_files( metadatas = query_results.get('metadatas', [[]])[0] distances = query_results.get('distances', [[]])[0] + file_ids = {metadata['file_id'] for metadata in metadatas if metadata.get('file_id')} + if file_ids: + file_names = { + file.id: (file.meta or {}).get('name') + for file in await Files.get_file_metadatas_by_ids(list(file_ids)) + } + for metadata in metadatas: + file_name = file_names.get(metadata.get('file_id')) + if file_name: + if metadata.get('source') == metadata.get('name'): + metadata['source'] = file_name + metadata['name'] = file_name + for idx, doc in enumerate(documents): chunk_info = { **filter_source_metadata(metadatas[idx]),