
    3fiN                        d dl mZ d dlmZ d dl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 d d
lmZ  G d de      Zy)    )annotations)Sequence)Any)AsyncCallbackManagerForChainRunCallbackManagerForChainRun)Document)
Embeddings)VectorStore)
ConfigDict)override)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	e
	 d	 	 	 	 	 dd       Ze
	 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 )z3Will be whatever keys the LLM chain prompt expects.)r   )selfs    n/var/www/auto_recruiter/arenv/lib/python3.12/site-packages/langchain_classic/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 ]1  \  }}|j                  |D cg c]  }t        |d|i       c}       3 |j                  ||      }	 | dd|	i|S c c}w )Convenience constructor.r    page_contentr%   r    )extendr   from_documents
clsnames_and_descriptionsvectorstore_cls
embeddingskwargs	documentsr    descriptionsdescriptionr   s
             r   from_names_and_descriptionsz0EmbeddingRouterChain.from_names_and_descriptions7   sz     	"8 	D, (4# +O	 &44Y
K5{5f55s   A
c                   K   g }|j                  |D cg c]  \  }}|D ]  }t        |d|i        c}}}       |j                  ||       d{   }	 | dd|	i|S c c}}}w 7 w)r0   r    r1   Nr   r3   )r4   r   afrom_documentsr6   s
             r   afrom_names_and_descriptionsz1EmbeddingRouterChain.afrom_names_and_descriptionsK   s      	 +A &D,#/   kVTNKK	
 ,;;IzRR5{5f55 Ss   A, A#A,A*A,)returnr   )N)r'   dict[str, Any]r(   z!CallbackManagerForChainRun | NonerC   rD   )r'   rD   r(   z&AsyncCallbackManagerForChainRun | NonerC   rD   )
r8   z#Sequence[tuple[str, Sequence[str]]]r9   ztype[VectorStore]r:   r	   r;   r   rC   r   )__name__
__module____qualname____doc____annotations__r   r   model_configpropertyr   r   r+   r.   classmethodr?   rB   r3   r   r   r   r      s8   >&iL)' $L
 ! !  :>SS 7S 
	S S  ?CSS <S 
	S S 6 C6 +6 	6
 6 
6 6& 6 C6 +6 	6
 6 
6 6r   r   N)
__future__r   collections.abcr   typingr   langchain_core.callbacksr   r   langchain_core.documentsr   langchain_core.embeddingsr	   langchain_core.vectorstoresr
   pydanticr   typing_extensionsr   $langchain_classic.chains.router.baser   r   r3   r   r   <module>rW      s5    " $  . 0 3  & <J6; J6r   