o
    `+ i`                     @   sD   d dl Z d dlmZmZ d dlmZ d dlmZ G dd deZdS )    N)#AsyncCallbackManagerForRetrieverRunCallbackManagerForRetrieverRun)Document)BaseRetrieverc                   @   s   e Zd ZU dZee ed< 	 dededee	 fddZ
dededee	 fdd	Zdededee	 fd
dZdededee	 fddZdS )MergerRetrieverz9Retriever that merges the results of multiple retrievers.
retrieversqueryrun_managerreturnc                C   s   |  ||S )z
        Get the relevant documents for a given query.

        Args:
            query: The query to search for.

        Returns:
            A list of relevant documents.
        )merge_documentsselfr   r	    r   q/home/app/PaddleOCR-VL-test/.venv_paddleocr/lib/python3.10/site-packages/langchain/retrievers/merger_retriever.py_get_relevant_documents   s   z'MergerRetriever._get_relevant_documentsc                   s   |  ||I dH S )z
        Asynchronously get the relevant documents for a given query.

        Args:
            query: The query to search for.

        Returns:
            A list of relevant documents.
        N)amerge_documentsr   r   r   r   _aget_relevant_documents$   s   z(MergerRetriever._aget_relevant_documentsc           	         sr    fddt | jD }g }ttt|dd}t|D ]}t| j|D ]\}}|t|k r5|||  q$q|S )z
        Merge the results of the retrievers.

        Args:
            query: The query to search for.

        Returns:
            A list of merged documents.
        c              
      s2   g | ]\}}|j  d d|d  idqS )	callbacks
retriever_   config)Zinvoke	get_child.0iZ	retrieverr   r	   r   r   
<listcomp>G   s    z3MergerRetriever.merge_documents.<locals>.<listcomp>r   default)	enumerater   maxmaplenrangezipappend	r   r   r	   Zretriever_docsZmerged_documentsZmax_docsr   Z
_retrieverdocr   r   r   r   7   s   	zMergerRetriever.merge_documentsc           	         s   t j fddt| jD  I dH }g }ttt|dd}t|D ]}t| j|D ]\}}|t|k r<|	||  q+q#|S )z
        Asynchronously merge the results of the retrievers.

        Args:
            query: The query to search for.

        Returns:
            A list of merged documents.
        c              	   3   s6    | ]\}}|j  d d|d  idV  qdS )r   r   r   r   N)Zainvoker   r   r   r   r   	<genexpr>j   s    
z3MergerRetriever.amerge_documents.<locals>.<genexpr>Nr   r   )
asynciogatherr    r   r!   r"   r#   r$   r%   r&   r'   r   r   r   r   Y   s   
z MergerRetriever.amerge_documentsN)__name__
__module____qualname____doc__listr   __annotations__strr   r   r   r   r   r   r   r   r   r   r   r      s@   
 


"r   )	r*   Zlangchain_core.callbacksr   r   Zlangchain_core.documentsr   Zlangchain_core.retrieversr   r   r   r   r   r   <module>   s
    