mirror of
https://github.com/open-webui/open-webui.git
synced 2026-05-06 10:58:17 -05:00
[PR #21644] [CLOSED] fix: correct document/metadata swap in hybrid search sort #65035
Reference in New Issue
Block a user
Delete Branch "%!s()"
Deleting a branch is permanent. Although the deleted branch may continue to exist for a short time before it actually gets removed, it CANNOT be undone in most cases. Continue?
📋 Pull Request Information
Original PR: https://github.com/open-webui/open-webui/pull/21644
Author: @hackwell
Created: 2/20/2026
Status: ❌ Closed
Base:
dev← Head:fix/hybrid-search-document-metadata-swap📝 Commits (10+)
fe6783cMerge pull request #19030 from open-webui/devfc05e0aMerge pull request #19405 from open-webui/deve3faec6Merge pull request #19416 from open-webui/dev9899293Merge pull request #19448 from open-webui/dev140605eMerge pull request #19462 from open-webui/dev6f1486fMerge pull request #19466 from open-webui/devd95f533Merge pull request #19729 from open-webui/deva7271530.6.43 (#20093)6adde20Merge pull request #20394 from open-webui/devf9b0534Merge pull request #20522 from open-webui/dev📊 Changes
1 file changed (+1 additions, -1 deletions)
View changed files
📝
backend/open_webui/retrieval/utils.py(+1 -1)📄 Description
Pull Request Checklist
devbranch./api/v1/retrieval/query/collectionwith a Qdrant-backed knowledge base and hybrid search + reranking enabled. Verified results are returned correctly after the fix. See details below.fix:Changelog Entry
Description
Fix a variable ordering bug in
query_doc_with_hybrid_searchthat causes all hybrid search results to be silently dropped whenTOP_K < TOP_K_RERANKER(the default configuration).Fixed
backend/open_webui/retrieval/utils.pyline 295,zip(distances, metadatas, documents)used incorrect ordering. The subsequent unpackingdistances, documents, metadatas = map(list, zip(*sorted_items))expected(distances, documents, metadatas)order, causing thedocumentsandmetadatasvariables to be swapped. Downstream,merge_and_sort_query_resultschecksisinstance(document, str)which returnedFalsefor the dict metadata objects now in the documents field, silently discarding all results.Additional Information
Root cause analysis:
The sorting block at line 293-302 activates when
k < k_reranker(default:TOP_K=8,TOP_K_RERANKER=20):Impact:
merge_and_sort_query_resultsdiscards everything because it receives dicts where it expects stringsHow it was discovered:
sources_retrieved: count: 0despite logs showing successfulquery_doc_with_hybrid_search:resultwith actual document content and scoresmerge_and_sort_query_resultswhich revealedfirst_doc_type=<class 'dict'>instead of the expected<class 'str'>Testing
Before fix — API call to
/api/v1/retrieval/query/collection:After fix — same API call:
Contributor License Agreement
By submitting this pull request, I confirm that I have read and fully agree to the Contributor License Agreement (CLA), and I am providing my contributions under its terms.
🔄 This issue represents a GitHub Pull Request. It cannot be merged through Gitea due to API limitations.