o
    粪g                     @   sP   d dl Z d dlm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)List)#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
   merged_documents r   a/var/www/html/chatdoc2/venv/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)invoke	get_childformat.0i	retrieverr	   r
   r   r   
<listcomp>J   s    z3MergerRetriever.merge_documents.<locals>.<listcomp>r   default)	enumerater   maxmaplenrangezipappend	r   r	   r
   retriever_docsr   max_docsr   r    docr   r!   r   r   <   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)ainvoker   r   r   r!   r   r   	<genexpr>m   s    
z3MergerRetriever.amerge_documents.<locals>.<genexpr>Nr   r#   )
asynciogatherr%   r   r&   r'   r(   r)   r*   r+   r,   r   r!   r   r   ^   s   
z MergerRetriever.amerge_documentsN)__name__
__module____qualname____doc__r   r   __annotations__strr   r   r   r   r   r   r   r   r   r   r   r      s@   
 


"r   )r2   typingr   langchain_core.callbacksr   r   langchain_core.documentsr   langchain_core.retrieversr   r   r   r   r   r   <module>   s    