
    Ah                        S r SSKJr  SSKJr  SSKJr  SSKJrJ	r	J
r
  SSKJrJrJr  SSKJr  SSKJr   " S	 S
\	5      r " S S\\5      r " S S\5      rg)zBase classes for chain routing.    )annotations)ABC)Mapping)Any
NamedTupleOptional)AsyncCallbackManagerForChainRunCallbackManagerForChainRun	Callbacks)
ConfigDict)Chainc                  *    \ rS rSr% S\S'   S\S'   Srg)Route   zOptional[str]destinationdict[str, Any]next_inputs N)__name__
__module____qualname____firstlineno____annotations____static_attributes__r       T/var/www/html/shao/venv/lib/python3.13/site-packages/langchain/chains/router/base.pyr   r      s    r   r   c                  T    \ rS rSrSr\SS j5       rS	S
S jjr S	     S
S jjrSr	g)RouterChain   zHChain that outputs the name of a destination chain and the inputs to it.c                
    SS/$ )Nr   r   r   selfs    r   output_keysRouterChain.output_keys   s    }--r   Nc                2    U " XS9n[        US   US   5      $ )z
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   routeRouterChain.route   s%     f2VM*F=,ABBr   c                `   #    U R                  XS9I S h  vN n[        US   US   5      $  N7f)Nr&   r   r   )acallr   r(   s       r   arouteRouterChain.aroute-   s6     
 zz&z>>VM*F=,ABB ?s   .,.r   returnz	list[str]N)r)   r   r'   r   r2   r   )
r   r   r   r   __doc__propertyr#   r+   r/   r   r   r   r   r   r      sM    R. .C"  $CC C 
	C Cr   r   c                      \ rS rSr% SrS\S'    S\S'    S\S'    S	rS
\S'    \" SSS9r\	SS j5       r
\	SS j5       r S     SS jjr S     SS jjrSrg)MultiRouteChain6   zIUse 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                .    U R                   R                  $ )zGWill be whatever keys the router chain prompt expects.

:meta private:
)r9   
input_keysr!   s    r   rB   MultiRouteChain.input_keysH   s       +++r   c                    / $ )z-Will always return text key.

:meta private:
r   r!   s    r   r#   MultiRouteChain.output_keysP   s	     	r   Nc                   U=(       d    [         R                  " 5       nUR                  5       nU R                  R	                  XS9nUR                  [        UR                  5      S-   [        UR                  5      -   U R                  S9  UR                  (       d  U R                  UR                  US9$ UR                  U R                  ;   a(  U R                  UR                     " UR                  US9$ U R                  (       a  U R                  UR                  US9$ SUR                   S3n[        U5      eNr&   z: )verbosez)Received invalid destination chain name '')r
   get_noop_manager	get_childr9   r+   on_textstrr   r   rH   r;   r:   r=   
ValueErrorr"   r)   run_manager_run_managerr'   r+   msgs          r   _callMultiRouteChain._callX   s'   
 #S&@&Q&Q&S **,	!!'''D!!"T)C0A0A,BBLL 	 	
   %%e&7&79%MM 7 77**5+<+<=!!#  %%e&7&79%MM9%:K:K9LANor   c                *  #    U=(       d    [         R                  " 5       nUR                  5       nU R                  R	                  XS9I S h  vN nUR                  [        UR                  5      S-   [        UR                  5      -   U R                  S9I S h  vN   UR                  (       d,  U R                  R                  UR                  US9I S h  vN $ UR                  U R                  ;   a9  U R                  UR                     R                  UR                  US9I S h  vN $ U R                  (       a,  U R                  R                  UR                  US9I S h  vN $ SUR                   S3n[        U5      e GN; N N Nc N(7frG   )r	   rJ   rK   r9   r/   rL   rM   r   r   rH   r;   r.   r:   r=   rN   rO   s          r   _acallMultiRouteChain._acallq   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   r1   r3   )r)   r   rP   z$Optional[CallbackManagerForChainRun]r2   r   )r)   r   rP   z)Optional[AsyncCallbackManagerForChainRun]r2   r   )r   r   r   r   r4   r   r=   r   model_configr5   rB   r#   rS   rV   r   r   r   r   r7   r7   6   s    S9++4PM4  $L
 , ,   =A : 
	8 BF ? 
	 r   r7   N)r4   
__future__r   abcr   collections.abcr   typingr   r   r   langchain_core.callbacksr	   r
   r   pydanticr   langchain.chains.baser   r   r   r7   r   r   r   <module>r`      sS    % "  # , , 
   ' J  
C% C<Xe Xr   