
    3fi                        d Z 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mZmZ ddlmZ ddlmZ dd	lmZ  G d
 de	      Z G d dee      Z G d de      Zy)zBase classes for chain routing.    )annotations)ABC)Mapping)Any
NamedTuple)AsyncCallbackManagerForChainRunCallbackManagerForChainRun	Callbacks)
ConfigDict)override)Chainc                  &    e Zd ZU dZded<   ded<   y)RoutezA route to a destination chain.z
str | Nonedestinationdict[str, Any]next_inputsN)__name__
__module____qualname____doc____annotations__     b/var/www/auto_recruiter/arenv/lib/python3.12/site-packages/langchain_classic/chains/router/base.pyr   r      s    )r   r   c                  L    e Zd ZdZeedd              ZdddZ	 d	 	 	 	 	 ddZy)	RouterChainzHChain that outputs the name of a destination chain and the inputs to it.c                
    ddgS )Nr   r   r   selfs    r   output_keyszRouterChain.output_keys   s     }--r   Nc                :     | ||      }t        |d   |d         S )Route inputs to a destination chain.

        Args:
            inputs: inputs to the chain
            callbacks: callbacks to use for the chain

        Returns:
            a Route object
        	callbacksr   r   )r   r   inputsr$   results       r   routezRouterChain.route#   s'     f	2VM*F=,ABBr   c                h   K   | j                  ||       d{   }t        |d   |d         S 7 w)r"   r#   Nr   r   )acallr   r%   s       r   aroutezRouterChain.aroute0   s9      zz&Iz>>VM*F=,ABB ?s   202returnz	list[str]N)r&   r   r$   r
   r-   r   )	r   r   r   r   propertyr   r    r(   r+   r   r   r   r   r      sO    R.  .C   $CC C 
	Cr   r   c                      e Zd ZU dZded<   	 ded<   	 ded<   	 dZd	ed
<   	  edd      Zedd       Z	edd       Z
	 d	 	 	 	 	 ddZ	 d	 	 	 	 	 ddZy)MultiRouteChainzIUse a single chain to route an input to one of multiple candidate chains.r   router_chainzMapping[str, Chain]destination_chainsr   default_chainFboolsilent_errorsTforbid)arbitrary_types_allowedextrac                .    | j                   j                  S )z6Will be whatever keys the router chain prompt expects.)r2   
input_keysr   s    r   r;   zMultiRouteChain.input_keysS   s       +++r   c                    g S )zWill always return text key.r   r   s    r   r    zMultiRouteChain.output_keysX   s	     	r   Nc                ~   |xs t        j                         }|j                         }| j                  j	                  ||      }|j                  t        |j                        dz   t        |j                        z   | j                         |j                  s| j                  |j                  |      S |j                  | j                  v r+ | j                  |j                     |j                  |      S | j                  r| j                  |j                  |      S d|j                   d}t        |      Nr#   z: )verbosez)Received invalid destination chain name '')r	   get_noop_manager	get_childr2   r(   on_textstrr   r   r?   r4   r3   r6   
ValueErrorr   r&   run_manager_run_managerr$   r(   msgs          r   _callzMultiRouteChain._call]   s+   
 #S&@&Q&Q&S **,	!!'')'D!!"T)C0A0A,BBLL 	 	
   %%e&7&79%MM 7 77=4**5+<+<=!!#  %%e&7&79%MM9%:K:K9LANor   c                &  K   |xs t        j                         }|j                         }| j                  j	                  ||       d {   }|j                  t        |j                        dz   t        |j                        z   | j                         d {    |j                  s/| j                  j                  |j                  |       d {   S |j                  | j                  v r<| j                  |j                     j                  |j                  |       d {   S | j                  r/| j                  j                  |j                  |       d {   S d|j                   d}t        |      7 ;7 7 7 a7 (wr>   )r   rA   rB   r2   r+   rC   rD   r   r   r?   r4   r*   r3   r6   rE   rF   s          r   _acallzMultiRouteChain._acallv   s    
 #X&E&V&V&X **,	''..v.KK""!!"T)C0A0A,BBLL # 
 	
 	
   ++11!!# 2     7 77001B1BCII!!# J    ++11!!# 2    :%:K:K9LANo- L	



s\   A	FFAFF	:FFAF+F,:F&F' F	FFFFr,   r.   )r&   r   rG   z!CallbackManagerForChainRun | Noner-   r   )r&   r   rG   z&AsyncCallbackManagerForChainRun | Noner-   r   )r   r   r   r   r   r6   r   model_configr/   r;   r    rJ   rL   r   r   r   r1   r1   B   s    S9++4PM4T $L
 , ,   :> 7 
	8 ?C < 
	r   r1   N)r   
__future__r   abcr   collections.abcr   typingr   r   langchain_core.callbacksr   r	   r
   pydanticr   typing_extensionsr   langchain_classic.chains.baser   r   r   r1   r   r   r   <module>rV      sT    % "  # " 
   & / J  $C% $CNQe Qr   