documents index mismatched when using rerank #762

Closed
opened 2026-02-21 17:28:19 -05:00 by yindo · 1 comment
Owner

Originally created by @wangbooth on GitHub (Nov 30, 2023).

Originally assigned to: @takatost, @JohnJyong on GitHub.

Dify version

0.3.32

Cloud or Self Hosted

Self Hosted (Source)

Steps to reproduce

def rerank(self, query: str, documents: List[Document], score_threshold: Optional[float], top_k: Optional[int]) -> Optional[List[Document]]:
        docs = []
        doc_id = []
        for document in documents:
            if document.metadata['doc_id'] not in doc_id:  # <--- The lists doc_id and docs only save unique documents, which means that the docs list may NOT be equal to documents.
                doc_id.append(document.metadata['doc_id'])
                docs.append(document.page_content)
        
        results = self.client.rerank(query=query, documents=docs, model=self.name, top_n=top_k)  
        rerank_documents = []

        for idx, result in enumerate(results):
            # format document
            rerank_document = Document(
                page_content=result.document['text'],
                metadata={
                    "doc_id": documents[result.index].metadata['doc_id'], # <--- The `result.index` is docs's index, may NOT be equal to documents's index.
                    "doc_hash": documents[result.index].metadata['doc_hash'],
                    "document_id": documents[result.index].metadata['document_id'],
                    "dataset_id": documents[result.index].metadata['dataset_id'],
                    'score': result.relevance_score
                }
            )
            # score threshold check
            if score_threshold is not None:
                if result.relevance_score >= score_threshold:
                    rerank_documents.append(rerank_document)
            else:
                rerank_documents.append(rerank_document)
        return rerank_documents

✔️ Expected Behavior

No response

Actual Behavior

No response

Originally created by @wangbooth on GitHub (Nov 30, 2023). Originally assigned to: @takatost, @JohnJyong on GitHub. ### Dify version 0.3.32 ### Cloud or Self Hosted Self Hosted (Source) ### Steps to reproduce ``` def rerank(self, query: str, documents: List[Document], score_threshold: Optional[float], top_k: Optional[int]) -> Optional[List[Document]]: docs = [] doc_id = [] for document in documents: if document.metadata['doc_id'] not in doc_id: # <--- The lists doc_id and docs only save unique documents, which means that the docs list may NOT be equal to documents. doc_id.append(document.metadata['doc_id']) docs.append(document.page_content) results = self.client.rerank(query=query, documents=docs, model=self.name, top_n=top_k) rerank_documents = [] for idx, result in enumerate(results): # format document rerank_document = Document( page_content=result.document['text'], metadata={ "doc_id": documents[result.index].metadata['doc_id'], # <--- The `result.index` is docs's index, may NOT be equal to documents's index. "doc_hash": documents[result.index].metadata['doc_hash'], "document_id": documents[result.index].metadata['document_id'], "dataset_id": documents[result.index].metadata['dataset_id'], 'score': result.relevance_score } ) # score threshold check if score_threshold is not None: if result.relevance_score >= score_threshold: rerank_documents.append(rerank_document) else: rerank_documents.append(rerank_document) return rerank_documents ``` ### ✔️ Expected Behavior _No response_ ### ❌ Actual Behavior _No response_
yindo added the 🐞 bug label 2026-02-21 17:28:19 -05:00
yindo closed this issue 2026-02-21 17:28:19 -05:00
Author
Owner

@crazywoola commented on GitHub (Nov 30, 2023):

Thanks we will look at this pr tomorrow.

@crazywoola commented on GitHub (Nov 30, 2023): Thanks we will look at this pr tomorrow.
Sign in to join this conversation.
1 Participants
Notifications
Due Date
No due date set.
Dependencies

No dependencies set.

Reference: langgenius/dify#762