mirror of
				https://github.com/langgenius/dify.git
				synced 2025-10-31 10:53:02 +00:00 
			
		
		
		
	
		
			
				
	
	
		
			58 lines
		
	
	
		
			2.0 KiB
		
	
	
	
		
			Python
		
	
	
	
	
	
			
		
		
	
	
			58 lines
		
	
	
		
			2.0 KiB
		
	
	
	
		
			Python
		
	
	
	
	
	
| from typing import Optional
 | |
| 
 | |
| from core.model_manager import ModelInstance
 | |
| from core.rag.models.document import Document
 | |
| 
 | |
| 
 | |
| class RerankModelRunner:
 | |
|     def __init__(self, rerank_model_instance: ModelInstance) -> None:
 | |
|         self.rerank_model_instance = rerank_model_instance
 | |
| 
 | |
|     def run(self, query: str, documents: list[Document], score_threshold: Optional[float] = None,
 | |
|             top_n: Optional[int] = None, user: Optional[str] = None) -> list[Document]:
 | |
|         """
 | |
|         Run rerank model
 | |
|         :param query: search query
 | |
|         :param documents: documents for reranking
 | |
|         :param score_threshold: score threshold
 | |
|         :param top_n: top n
 | |
|         :param user: unique user id if needed
 | |
|         :return:
 | |
|         """
 | |
|         docs = []
 | |
|         doc_id = []
 | |
|         unique_documents = []
 | |
|         for document in documents:
 | |
|             if document.metadata['doc_id'] not in doc_id:
 | |
|                 doc_id.append(document.metadata['doc_id'])
 | |
|                 docs.append(document.page_content)
 | |
|                 unique_documents.append(document)
 | |
| 
 | |
|         documents = unique_documents
 | |
| 
 | |
|         rerank_result = self.rerank_model_instance.invoke_rerank(
 | |
|             query=query,
 | |
|             docs=docs,
 | |
|             score_threshold=score_threshold,
 | |
|             top_n=top_n,
 | |
|             user=user
 | |
|         )
 | |
| 
 | |
|         rerank_documents = []
 | |
| 
 | |
|         for result in rerank_result.docs:
 | |
|             # format document
 | |
|             rerank_document = Document(
 | |
|                 page_content=result.text,
 | |
|                 metadata={
 | |
|                     "doc_id": documents[result.index].metadata['doc_id'],
 | |
|                     "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.score
 | |
|                 }
 | |
|             )
 | |
|             rerank_documents.append(rerank_document)
 | |
| 
 | |
|         return rerank_documents
 | 
