
    m
i                        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dS )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<   dS )RoutezA route to a destination chain.z
str | Nonedestinationdict[str, Any]next_inputsN)__name__
__module____qualname____doc____annotations__     C:\Users\Dell Inspiron 16\Desktop\tws\AgrotaPowerBi\back-agrota-powerbi\mcp-client-agrota\venv\Lib\site-packages\langchain_classic/chains/router/base.pyr   r      s0         ))r   r   c                  P    e Zd ZdZeedd                        ZdddZ	 dddZdS )RouterChainzHChain that outputs the name of a destination chain and the inputs to it.return	list[str]c                
    ddgS )Nr   r   r   selfs    r   output_keyszRouterChain.output_keys   s     }--r   Ninputsr   	callbacksr
   r   c                T     | ||          }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
        r$   r   r   )r   r!   r#   r$   results       r   routezRouterChain.route#   s2     f	222VM*F=,ABBBr   c                x   K   |                      ||           d{V }t          |d         |d                   S )r&   r'   Nr   r   )acallr   r(   s       r   aroutezRouterChain.aroute0   sI       zz&Iz>>>>>>>>VM*F=,ABBBr   r   r   N)r#   r   r$   r
   r   r   )	r   r   r   r   propertyr   r"   r*   r-   r   r   r   r   r      s        RR. . . X X.C C C C C   $C C 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dS )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extrar   r   c                    | j         j        S )z6Will be whatever keys the router chain prompt expects.)r3   
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   Nr#   r   run_manager!CallbackManagerForChainRun | Nonec                8   |pt          j                    }|                                }| j                            ||          }|                    t          |j                  dz   t          |j                  z   | j	                   |j        s| 
                    |j        |          S |j        | j        v r" | j        |j                 |j        |          S | j        r| 
                    |j        |          S d|j         d}t          |          Nr'   z: )verbosez)Received invalid destination chain name '')r	   get_noop_manager	get_childr3   r*   on_textstrr   r   rB   r5   r4   r7   
ValueErrorr!   r#   r>   _run_managerr$   r*   msgs          r   _callzMultiRouteChain._call]   s:   
 #S&@&Q&S&S **,,	!'')'DD!""T)C0A,B,BBL 	 	
 	
 	
   	N%%e&79%MMM 777=4*5+<=!#     	N%%e&79%MMMN%:KNNNoor   &AsyncCallbackManagerForChainRun | Nonec                  K   |pt          j                    }|                                }| j                            ||           d {V }|                    t          |j                  dz   t          |j                  z   | j	                   d {V  |j        s'| j
                            |j        |           d {V S |j        | j        v r2| j        |j                                     |j        |           d {V S | j        r'| j
                            |j        |           d {V S d|j         d}t          |          rA   )r   rD   rE   r3   r-   rF   rG   r   r   rB   r5   r,   r4   r7   rH   rI   s          r   _acallzMultiRouteChain._acallv   s     
 #X&E&V&X&X **,,	'..v.KKKKKKKK""!""T)C0A,B,BBL # 
 
 	
 	
 	
 	
 	
 	
 	
   	+11!# 2           77701BCII!# J           	+11!# 2          O%:KNNNoor   r.   r/   )r#   r   r>   r?   r   r   )r#   r   r>   rM   r   r   )r   r   r   r   r   r7   r   model_configr0   r<   r"   rL   rO   r   r   r   r2   r2   B   s         SS9++++4PMT: $  L
 , , , X,    X :>    8 ?C      r   r2   N)r   
__future__r   abcr   collections.abcr   typingr   r   langchain_core.callbacksr   r	   r
   pydanticr   typing_extensionsr   langchain_classic.chains.baser   r   r   r2   r   r   r   <module>rY      s`   % % " " " " " "       # # # # # # " " " " " " " "         
        & & & & & & / / / / / /         J      $C $C $C $C $C% $C $C $CNQ Q Q Q Qe Q Q Q Q Qr   