
    g3fi                        d Z ddlmZ ddlmZ ddlmZmZ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mZmZ dd	lmZmZmZmZmZ er
dd
lmZmZmZ  G d de      Z G d deeef         Z y)z+Runnable that routes to a set of Runnables.    )annotations)Mapping)TYPE_CHECKINGAnycast)
ConfigDict)	TypedDictoverride)RunnableRunnableSerializablecoerce_to_runnable)RunnableConfigget_config_listget_executor_for_config)ConfigurableFieldSpecInputOutputgather_with_concurrencyget_unique_config_specs)AsyncIteratorCallableIteratorc                  (    e Zd ZU dZded<   	 ded<   y)RouterInputzRouter input.strkeyr   inputN)__name__
__module____qualname____doc____annotations__     ]/var/www/auto_recruiter/arenv/lib/python3.12/site-packages/langchain_core/runnables/router.pyr   r   %   s    	HJ7r$   r   c                      e Zd ZU dZded<   eedd              Z	 	 	 	 d fdZ e	d      Z
eedd              Zeedd	              Ze	 d	 	 	 	 	 	 	 dd
       Ze	 d	 	 	 	 	 	 	 dd       Ze	 ddd	 	 	 	 	 	 	 	 	 dd       Ze	 ddd	 	 	 	 	 	 	 	 	 dd       Ze	 d	 	 	 	 	 	 	 dd       Ze	 d	 	 	 	 	 	 	 dd       Z xZS )RouterRunnablea  `Runnable` that routes to a set of `Runnable` based on `Input['key']`.

    Returns the output of the selected Runnable.

    Example:
        ```python
        from langchain_core.runnables.router import RouterRunnable
        from langchain_core.runnables import RunnableLambda

        add = RunnableLambda(func=lambda x: x + 1)
        square = RunnableLambda(func=lambda x: x**2)

        router = RouterRunnable(runnables={"add": add, "square": square})
        router.invoke({"key": "square", "input": 3})
        ```
    z#Mapping[str, Runnable[Any, Output]]	runnablesc                V    t        d | j                  j                         D              S )Nc              3  B   K   | ]  }|j                   D ]  }|   y wN)config_specs).0stepspecs      r%   	<genexpr>z.RouterRunnable.config_specs.<locals>.<genexpr>E   s-      '
ARAR'
9=D'
'
s   )r   r(   values)selfs    r%   r,   zRouterRunnable.config_specsB   s+     ' '
!^^224'
 
 	
r$   c           
         t         |   |j                         D ci c]  \  }}|t        |       c}}       yc c}}w )zrCreate a `RouterRunnable`.

        Args:
            runnables: A mapping of keys to `Runnable` objects.
        r(   N)super__init__itemsr   )r2   r(   r   r	__class__s       r%   r6   zRouterRunnable.__init__I   s>     	@I@QRfc1s.q11R 	 	
Rs   >
T)arbitrary_types_allowedc                     y)z,Return `True` as this class is serializable.Tr#   clss    r%   is_lc_serializablez!RouterRunnable.is_lc_serializableZ   s     r$   c                
    g dS )zwGet the namespace of the LangChain object.

        Returns:
            `["langchain", "schema", "runnable"]`
        )	langchainschemarunnabler#   r<   s    r%   get_lc_namespacezRouterRunnable.get_lc_namespace`   s
     32r$   c                    |d   }|d   }|| j                   vrd| d}t        |      | j                   |   }|j                  ||      S Nr   r   z!No runnable associated with key '')r(   
ValueErrorinvoker2   r   configkwargsr   actual_inputmsgrB   s           r%   rH   zRouterRunnable.invokej   sY     ElW~dnn$5cU!<CS/!>>#&|V44r$   c                   K   |d   }|d   }|| j                   vrd| d}t        |      | j                   |   }|j                  ||       d {   S 7 wrE   )r(   rG   ainvokerI   s           r%   rO   zRouterRunnable.ainvokew   se      ElW~dnn$5cU!<CS/!>>#&%%lF;;;;s   AAAAF)return_exceptionsc                   |sg S |D cg c]  }|d   	 }}|D cg c]  }|d   	 }}t         fd|D              rd}t        |      	 	 	 	 	 	 	 	 dfd}	|D 
cg c]  }
 j                  |
    }}
t        |t	        |            }t        |d         5 }t        dt        |j                  |	|||                  cd d d        S c c}w c c}w c c}
w # 1 sw Y   y xY w)	Nr   r   c              3  :   K   | ]  }|j                   v  y wr+   r4   r-   r   r2   s     r%   r0   z'RouterRunnable.batch.<locals>.<genexpr>        9Ss$..(9   5One or more keys do not have a corresponding runnablec                    r	  | j                   ||fi S  | j                   ||fi S # t        $ r}|cY d }~S d }~ww xY wr+   )rH   	ExceptionrB   input_rJ   erK   rP   s       r%   rH   z$RouterRunnable.batch.<locals>.invoke   sV     !*8??66DVDD 'xvv@@@ ! Hs   - 	A=AAr   list[Output]rB   zRunnable[Input, Output]rZ   r   rJ   r   returnzOutput | Exception)	anyrG   r(   r   lenr   r   listmap)r2   inputsrJ   rP   rK   rZ   keysactual_inputsrM   rH   r   r(   configsexecutors   `  ``         r%   batchzRouterRunnable.batch   s    I,23&u337=>V>>9D99ICS/!		A-		A7<		AFT		A		A 599ST^^C(9	9!&#f+6$WQZ0 	HX\\&)]GLM	 	' 4>  :	 	s   CC C'CC$c          	        K   |sg S |D cg c]  }|d   	 }}|D cg c]  }|d   	 }}t         fd|D              rd}t        |      	 	 	 	 	 	 	 	 dfd}	|D 
cg c]  }
 j                  |
    }}
t        |t	        |            }t        |d   j                  d      gt        |	|||        d {   S c c}w c c}w c c}
w 7 w)	Nr   r   c              3  :   K   | ]  }|j                   v  y wr+   r4   rS   s     r%   r0   z(RouterRunnable.abatch.<locals>.<genexpr>   rT   rU   rV   c                   K   r	  | j                   ||fi  d {   S  | j                   ||fi  d {   S 7  # t        $ r}|cY d }~S d }~ww xY w7 wr+   )rO   rX   rY   s       r%   rO   z&RouterRunnable.abatch.<locals>.ainvoke   sn      !!1!1!1&&!KF!KKK .X--ffGGGG	 L  H HsK   AA ?A AAAA 	A
AAAAAr   max_concurrencyr]   )r_   rG   r(   r   r`   r   getrb   )r2   rc   rJ   rP   rK   rZ   rd   re   rM   rO   r   r(   rf   s   `  ``        r%   abatchzRouterRunnable.abatch   s      I,23&u337=>V>>9D99ICS/!		H-		H7<		HFT		H		H 599ST^^C(9	9!&#f+6,AJNN,-
)]G<
 
 	
' 4>  :
s2   	CCCC6C"C8AC<C=Cc              +     K   |d   }|d   }|| j                   vrd| d}t        |      | j                   |   }|j                  ||      E d {    y 7 wrE   )r(   rG   streamrI   s           r%   rp   zRouterRunnable.stream   s`      ElW~dnn$5cU!<CS/!>>#&??<888s   AAAAc                  K   |d   }|d   }|| j                   vrd| d}t        |      | j                   |   }|j                  ||      2 3 d {   }| 7 
6 y wrE   )r(   rG   astream)	r2   r   rJ   rK   r   rL   rM   rB   outputs	            r%   rr   zRouterRunnable.astream   sv      ElW~dnn$5cU!<CS/!>>#&$,,\6B 	 	&L	Bs*   AA AAAA AA )r^   zlist[ConfigurableFieldSpec])r(   z=Mapping[str, Runnable[Any, Output] | Callable[[Any], Output]]r^   None)r^   bool)r^   z	list[str]r+   )r   r   rJ   RunnableConfig | NonerK   r   r^   r   )r   r   rJ   rv   rK   
Any | Noner^   r   )
rc   zlist[RouterInput]rJ   z,RunnableConfig | list[RunnableConfig] | NonerP   ru   rK   rw   r^   r\   )r   r   rJ   rv   rK   rw   r^   zIterator[Output])r   r   rJ   rv   rK   rw   r^   zAsyncIterator[Output])r   r   r    r!   r"   propertyr
   r,   r6   r   model_configclassmethodr>   rC   rH   rO   rh   rn   rp   rr   __classcell__)r9   s   @r%   r'   r'   .   s(   " 32
  


P
 

  $L    3  3 BF
5 
5*?
5RU
5	
5 
5  )-<< &< 	<
 
< <  @D"
 #("!" ="
  " " 
" "H  @D!

 #(!
!!
 =!

  !
 !
 
!
 !
F  )-99 &9 	9
 
9 9  )- & 	
 
 r$   r'   N)!r!   
__future__r   collections.abcr   typingr   r   r   pydanticr   typing_extensionsr	   r
   langchain_core.runnables.baser   r   r   langchain_core.runnables.configr   r   r   langchain_core.runnables.utilsr   r   r   r   r   r   r   r   r   r'   r#   r$   r%   <module>r      sn    1 " #    1 
 
  AA8) 8A)+v*=> Ar$   