diff --git a/backend/open_webui/retrieval/external.py b/backend/open_webui/retrieval/external.py index 269b6db8cd..efb0e1a60b 100644 --- a/backend/open_webui/retrieval/external.py +++ b/backend/open_webui/retrieval/external.py @@ -47,7 +47,7 @@ def _normalize_result(result: dict, mapping: dict, knowledge: KnowledgeModel, di source_name = source or title or metadata.get('source') or metadata.get('name') or knowledge.name metadata.update( { - 'name': title or source_name, + 'name': title or metadata.get('name') or source_name, 'source': source_name, 'url': url, 'file_id': document_id or f'external-{knowledge.id}', diff --git a/src/lib/components/chat/Messages/ContentRenderer.svelte b/src/lib/components/chat/Messages/ContentRenderer.svelte index bcd233b130..05bc83822f 100644 --- a/src/lib/components/chat/Messages/ContentRenderer.svelte +++ b/src/lib/components/chat/Messages/ContentRenderer.svelte @@ -105,6 +105,7 @@ const getSourceIds = (sources) => { const result = []; + const seenIds = new Set(); for (const source of sources ?? []) { for (let index = 0; index < (source.document ?? []).length; index++) { if (model?.info?.meta?.capabilities?.citations == false) { @@ -112,7 +113,11 @@ continue; } const metadata = source.metadata?.[index]; - const id = metadata?.source ?? 'N/A'; + const id = metadata?.source ?? source?.source?.id ?? 'N/A'; + if (seenIds.has(id)) { + continue; + } + seenIds.add(id); if (metadata?.name) { result.push(metadata.name); } else if (id.startsWith('http://') || id.startsWith('https://')) { @@ -122,7 +127,7 @@ } } } - sourceIds = [...new Set(result)]; + sourceIds = result; }; /** @param {string} messageContent */