
    gh                        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e          ZdS )    )annotations)Sequence)AnyOptional)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    e/var/www/FlaskApp/flask-venv/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>3   r)   r   r*   r+   r   r,   r-   )r0   r   r   asimilarity_searchr2   r3   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.r,   page_contentr2   r   r$   )appendr	   from_documents
clsr<   r>   r@   rA   	documentsr,   descriptionsdescriptionr   s
             r   from_names_and_descriptionsz0EmbeddingRouterChain.from_names_and_descriptions7   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 )rC   r,   rD   Nr   r$   )rF   r	   afrom_documentsrH   s
             r   afrom_names_and_descriptionsz1EmbeddingRouterChain.afrom_names_and_descriptionsI   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   r7   r   r   )
r<   r=   r>   r?   r@   r
   rA   r   r   r   )__name__
__module____qualname____doc____annotations__r   r   model_configpropertyr   r6   r;   classmethodrM   rP   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   collections.abcr   typingr   r   langchain_core.callbacksr   r   langchain_core.documentsr	   langchain_core.embeddingsr
   langchain_core.vectorstoresr   pydanticr   langchain.chains.router.baser   r   r$   r   r   <module>rb      s   " " " " " " $ $ $ $ $ $                        . - - - - - 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   