
    Ng                        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
e          ZdS )    )annotations)AnyDictListOptionalSequenceTupleType)AsyncCallbackManagerForChainRunCallbackManagerForChainRun)Document)
Embeddings)VectorStore)
ConfigDict)RouterChainc                      e Zd ZU dZded<   dgZded<    edd	          Zedd            Z		 dd dZ
	 dd!dZed"d            Zed"d            ZdS )#EmbeddingRouterChainz4Chain that uses embeddings to route between options.r   vectorstorequery	List[str]routing_keysTforbid)arbitrary_types_allowedextrareturnc                    | j         S )zTWill be whatever keys the LLM chain prompt expects.

        :meta private:
        )r   )selfs    d/var/www/html/ai-engine/env/lib/python3.11/site-packages/langchain/chains/router/embedding_router.py
input_keyszEmbeddingRouterChain.input_keys   s           NinputsDict[str, Any]run_manager$Optional[CallbackManagerForChainRun]c                    d                     fd| j        D                       }| j                            |d          }|d         j        d         dS )N, c                     g | ]
}|         S  r(   .0kr!   s     r   
<listcomp>z.EmbeddingRouterChain._call.<locals>.<listcomp>)       AAA!F1IAAAr       r+   r   namenext_inputsdestination)joinr   r   similarity_searchmetadatar   r!   r#   _inputresultss    `   r   _callzEmbeddingRouterChain._call$   sc    
 AAAAt/@AAABB"44Vq4AA%gaj6I&6QRRRr    )Optional[AsyncCallbackManagerForChainRun]c                   K   d                     fd| j        D                       }| j                            |d           d {V }|d         j        d         dS )Nr&   c                     g | ]
}|         S r(   r(   r)   s     r   r,   z/EmbeddingRouterChain._acall.<locals>.<listcomp>2   r-   r    r.   r/   r   r0   r1   )r4   r   r   asimilarity_searchr6   r7   s    `   r   _acallzEmbeddingRouterChain._acall-   sy      
 AAAAt/@AAABB(;;Fa;HHHHHHHH%gaj6I&6QRRRr    names_and_descriptions#Sequence[Tuple[str, Sequence[str]]]vectorstore_clsType[VectorStore]
embeddingsr   kwargsr   c           	         g }|D ]0\  }}|D ](}|                     t          |d|i                     )1|                    ||          }	 | dd|	i|S )Convenience constructor.r0   page_contentr6   r   r(   )appendr   from_documents
clsr@   rB   rD   rE   	documentsr0   descriptionsdescriptionr   s
             r   from_names_and_descriptionsz0EmbeddingRouterChain.from_names_and_descriptions6   s     	"8 	 	D,+    +OOO    &44Y
KKs55{5f555r    c           	        K   g }|D ]0\  }}|D ](}|                     t          |d|i                     )1|                    ||           d{V }	 | dd|	i|S )rG   r0   rH   Nr   r(   )rJ   r   afrom_documentsrL   s
             r   afrom_names_and_descriptionsz1EmbeddingRouterChain.afrom_names_and_descriptionsH   s       	"8 	 	D,+    +OOO    ,;;IzRRRRRRRRs55{5f555r    )r   r   )N)r!   r"   r#   r$   r   r"   )r!   r"   r#   r;   r   r"   )
r@   rA   rB   rC   rD   r   rE   r   r   r   )__name__
__module____qualname____doc____annotations__r   r   model_configpropertyr   r:   r?   classmethodrQ   rT   r(   r    r   r   r      s         >>&iL'''': $  L
 ! ! ! X! =AS S S S S BFS S S S S 6 6 6 [6" 6 6 6 [6 6 6r    r   N)
__future__r   typingr   r   r   r   r   r	   r
   langchain_core.callbacksr   r   langchain_core.documentsr   langchain_core.embeddingsr   langchain_core.vectorstoresr   pydanticr   langchain.chains.router.baser   r   r(   r    r   <module>re      s   " " " " " " C C C C C C C C C C C C C C C C C C        . - - - - - 0 0 0 0 0 0 3 3 3 3 3 3       4 4 4 4 4 4G6 G6 G6 G6 G6; G6 G6 G6 G6 G6r    