
    9|h                        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y)    )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y)EmbeddingRouterChainz4Chain that uses embeddings to route between options.r   vectorstorequery	List[str]routing_keysTforbid)arbitrary_types_allowedextrac                    | j                   S )zTWill be whatever keys the LLM chain prompt expects.

        :meta private:
        )r   )selfs    g/var/www/html/test/engine/venv/lib/python3.12/site-packages/langchain/chains/router/embedding_router.py
input_keyszEmbeddingRouterChain.input_keys   s            Nc                    dj                  | j                  D cg c]  }||   	 c}      }| j                  j                  |d      }||d   j                  d   dS c c}w Nz,    )kr   name)next_inputsdestination)joinr   r   similarity_searchmetadatar   inputsrun_managerr#   _inputresultss         r   _callzEmbeddingRouterChain._call$   sb    
 t/@/@A!F1IAB""44Vq4A%gaj6I6I&6QRR Bs   Ac                   K   dj                  | j                  D cg c]  }||   	 c}      }| j                  j                  |d       d {   }||d   j                  d   dS c c}w 7 wr!   )r'   r   r   asimilarity_searchr)   r*   s         r   _acallzEmbeddingRouterChain._acall-   sl     
 t/@/@A!F1IAB((;;Fa;HH%gaj6I6I&6QRR BHs   A0A)'A0A.A0c           	         g }|D ]*  \  }}|D ]   }|j                  t        |d|i             " , |j                  ||      }	 | dd|	i|S )Convenience constructor.r$   page_contentr)   r    )appendr   from_documents
clsnames_and_descriptionsvectorstore_cls
embeddingskwargs	documentsr$   descriptionsdescriptionr   s
             r   from_names_and_descriptionsz0EmbeddingRouterChain.from_names_and_descriptions6   so     	"8 	D,+   +O	
 &44Y
K5{5f55r   c           	        K   g }|D ]*  \  }}|D ]   }|j                  t        |d|i             " , |j                  ||       d{   }	 | dd|	i|S 7 w)r4   r$   r5   Nr   r7   )r8   r   afrom_documentsr:   s
             r   afrom_names_and_descriptionsz1EmbeddingRouterChain.afrom_names_and_descriptionsH   s|      	"8 	D,+   +O	
 ,;;IzRR5{5f55 Ss   AA	A
A)returnr   )N)r+   Dict[str, Any]r,   z$Optional[CallbackManagerForChainRun]rG   rH   )r+   rH   r,   z)Optional[AsyncCallbackManagerForChainRun]rG   rH   )
r<   z#Sequence[Tuple[str, Sequence[str]]]r=   zType[VectorStore]r>   r   r?   r   rG   r   )__name__
__module____qualname____doc____annotations__r   r   model_configpropertyr   r/   r2   classmethodrC   rF   r7   r   r   r   r      s   >&iL)' $L
 ! ! =ASS :S 
	S BFSS ?S 
	S 6 C6 +6 	6
 6 
6 6" 6 C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   r7   r   r   <module>rY      s5    " C C C . 0 3  4G6; G6r   