a
    ag                     @  s   d dl mZ d dlmZmZmZmZmZ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)AnyDictListOptionalSequenceTupleType)AsyncCallbackManagerForChainRunCallbackManagerForChainRun)Document)
Embeddings)VectorStore)
ConfigDict)RouterChainc                   @  s   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dZ	dddddddZ
d ddddddZeddddd dddZeddddd dddZdS )!EmbeddingRouterChainz4Chain that uses embeddings to route between options.r   vectorstorequeryz	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   v/var/www/html/cobodadashboardai.evdpl.com/venv/lib/python3.9/site-packages/langchain/chains/router/embedding_router.py
input_keys   s    zEmbeddingRouterChain.input_keysNzDict[str, Any]z$Optional[CallbackManagerForChainRun])inputsrun_managerr   c                   s>   d  fdd| jD }| jj|dd} |d jd dS )	N, c                   s   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._callz)Optional[AsyncCallbackManagerForChainRun]c                   sD   d  fdd| jD }| jj|ddI d H } |d jd dS )	Nr   c                   s   g | ]} | qS r   r   r   r!   r   r   r"   2   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._acallz#Sequence[Tuple[str, Sequence[str]]]zType[VectorStore]r   r   )names_and_descriptionsvectorstore_cls
embeddingskwargsr   c           
      K  sP   g }|D ](\}}|D ]}| t|d|id qq|||}	| f d|	i|S )Convenience constructor.r&   Zpage_contentr*   r   )appendr   Zfrom_documents
clsr0   r1   r2   r3   Z	documentsr&   Zdescriptionsdescriptionr   r   r   r   from_names_and_descriptions6   s    	z0EmbeddingRouterChain.from_names_and_descriptionsc           
        sV   g }|D ](\}}|D ]}| t|d|id qq|||I dH }	| f d|	i|S )r4   r&   r5   Nr   )r6   r   Zafrom_documentsr7   r   r   r   afrom_names_and_descriptionsH   s    	z1EmbeddingRouterChain.afrom_names_and_descriptions)N)N)__name__
__module____qualname____doc____annotations__r   r   Zmodel_configpropertyr   r.   r/   classmethodr:   r;   r   r   r   r   r      s"   

  	r   N)
__future__r   typingr   r   r   r   r   r   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   $