o
    {qi4                     @  s   d dl mZ d dlmZ d dlmZmZ d dlmZm	Z	 d dl
mZ d dlmZ d dlmZ d dlmZ d d	lmZ G d
d deZdS )    )annotations)Sequence)AnyOptional)AsyncCallbackManagerForChainRunCallbackManagerForChainRunDocument)
Embeddings)VectorStore)
ConfigDict)RouterChainc                   @  sz   e Zd ZU dZded< dgZded< eddd	Zed#ddZ		d$d%ddZ
	d$d&ddZed'dd Zed'd!d"ZdS )(EmbeddingRouterChainz4Chain that uses embeddings to route between options.r   vectorstorequery	list[str]routing_keysTZforbid)Zarbitrary_types_allowedextrareturnc                 C  s   | j S )zTWill be whatever keys the LLM chain prompt expects.

        :meta private:
        )r   )self r   o/home/app/PaddleOCR-VL/.venv_paddleocr/lib/python3.10/site-packages/langchain/chains/router/embedding_router.py
input_keys   s   zEmbeddingRouterChain.input_keysNinputsdict[str, Any]run_manager$Optional[CallbackManagerForChainRun]c                   s>   d  fdd| jD }| jj|dd} |d jd dS )	N, c                      g | ]} | qS r   r   .0kr   r   r   
<listcomp>*       z.EmbeddingRouterChain._call.<locals>.<listcomp>   r!   r   nameZnext_inputsdestination)joinr   r   Zsimilarity_searchmetadatar   r   r   _inputresultsr   r"   r   _call%   s   zEmbeddingRouterChain._call)Optional[AsyncCallbackManagerForChainRun]c                   sF   d  fdd| jD }| jj|ddI d H } |d jd dS )	Nr   c                   r   r   r   r   r"   r   r   r#   3   r$   z/EmbeddingRouterChain._acall.<locals>.<listcomp>r%   r&   r   r'   r(   )r*   r   r   Zasimilarity_searchr+   r,   r   r"   r   _acall.   s   zEmbeddingRouterChain._acallnames_and_descriptions#Sequence[tuple[str, Sequence[str]]]vectorstore_clstype[VectorStore]
embeddingsr
   kwargsr   c                   sH   g }|D ]\ }|  fdd|D  q|||}| dd|i|S )Convenience constructor.c                   s   g | ]
}t |d  idqS r'   )Zpage_contentr+   r   )r    descriptionr'   r   r   r#   C   s    zDEmbeddingRouterChain.from_names_and_descriptions.<locals>.<listcomp>r   Nr   )extendZfrom_documents)clsr2   r4   r6   r7   	documentsdescriptionsr   r   r;   r   from_names_and_descriptions7   s   	
z0EmbeddingRouterChain.from_names_and_descriptionsc                   s>   g }| dd |D  |||I dH }| dd|i|S )r8   c                 S  s*   g | ]\}}|D ]
}t |d |idqqS r9   r   )r    r'   r?   r:   r   r   r   r#   V   s    zEEmbeddingRouterChain.afrom_names_and_descriptions.<locals>.<listcomp>Nr   r   )r<   Zafrom_documents)r=   r2   r4   r6   r7   r>   r   r   r   r   afrom_names_and_descriptionsK   s   	z1EmbeddingRouterChain.afrom_names_and_descriptions)r   r   )N)r   r   r   r   r   r   )r   r   r   r0   r   r   )
r2   r3   r4   r5   r6   r
   r7   r   r   r   )__name__
__module____qualname____doc____annotations__r   r   Zmodel_configpropertyr   r/   r1   classmethodr@   rA   r   r   r   r   r      s$   
 
	r   N)
__future__r   collections.abcr   typingr   r   Zlangchain_core.callbacksr   r   Zlangchain_core.documentsr	   Zlangchain_core.embeddingsr
   Zlangchain_core.vectorstoresr   Zpydanticr   Zlangchain.chains.router.baser   r   r   r   r   r   <module>   s    