
    KKi                        S r SSKJr  SSKJr  SSKJr  SSK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	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)AsyncCallbackManagerForChainRunCallbackManagerForChainRun	Callbacks)
ConfigDict)override)Chainc                  .    \ rS rSr% SrS\S'   S\S'   Srg)	Route   zA route to a destination chain.z
str | Nonedestinationdict[str, Any]next_inputs N)__name__
__module____qualname____firstlineno____doc____annotations____static_attributes__r       f/var/www/html/dynamic-report/venv/lib/python3.13/site-packages/langchain_classic/chains/router/base.pyr   r      s    )r   r   c                  ^    \ rS rSrSr\\SS j5       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      $ )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)r'   r(   Nr   r   )acallr   r*   s       r   arouteRouterChain.aroute0   s6      zz&z>>VM*F=,ABB ?s   .,.r   returnz	list[str]N)r+   r   r)   r
   r4   r   )r   r   r   r   r   propertyr   r$   r-   r1   r   r   r   r   r   r      sU    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)MultiRouteChainB   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                  $ )z6Will be whatever keys the router chain prompt expects.)r:   
input_keysr"   s    r   rC   MultiRouteChain.input_keysS   s       +++r   c                    / $ )zWill always return text key.r   r"   s    r   r$   MultiRouteChain.output_keysX   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_childr:   r-   on_textstrr   r   rI   r<   r;   r>   
ValueErrorr#   r+   run_manager_run_managerr)   r-   msgs          r   _callMultiRouteChain._call]   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rH   )r   rK   rL   r:   r1   rM   rN   r   r   rI   r<   r0   r;   r>   rO   rP   s          r   _acall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   r3   r5   )r+   r   rQ   z!CallbackManagerForChainRun | Noner4   r   )r+   r   rQ   z&AsyncCallbackManagerForChainRun | Noner4   r   )r   r   r   r   r   r   r>   r   model_configr6   rC   r$   rT   rW   r   r   r   r   r8   r8   B   s    S9++4PM4T $L
 , ,   :> 7 
	8 ?C < 
	 r   r8   N)r   
__future__r   abcr   collections.abcr   typingr   r   langchain_core.callbacksr   r	   r
   pydanticr   typing_extensionsr   langchain_classic.chains.baser   r   r   r8   r   r   r   <module>rb      sT    % "  # " 
   & / J  $C% $CNQe Qr   