
    3fio                         d Z ddlmZ ddlmZmZ ddlmZ ddlm	Z	m
Z
 ddlmZ ddlmZ  G d d	e      Z G d
 de      Zy)zEChain pipeline where the outputs of one step feed directly into next.    )Any)AsyncCallbackManagerForChainRunCallbackManagerForChainRun)get_color_mapping)
ConfigDictmodel_validator)Self)Chainc            	       2   e Zd ZU dZee   ed<   ee   ed<   ee   ed<   dZe	ed<    e
dd	      Zed
ee   fd       Zed
ee   fd       Z ed      eded
efd              Z	 ddeeef   dedz  d
eeef   fdZ	 ddeeef   dedz  d
eeef   fdZy)SequentialChainz=Chain where the outputs of one chain feed directly into next.chainsinput_variablesoutput_variablesF
return_allTforbidarbitrary_types_allowedextrareturnc                     | j                   S )z(Return expected input keys to the chain.)r   selfs    a/var/www/auto_recruiter/arenv/lib/python3.12/site-packages/langchain_classic/chains/sequential.py
input_keyszSequentialChain.input_keys   s     ###    c                     | j                   S zReturn output key.)r   r   s    r   output_keyszSequentialChain.output_keys"   s     $$$r   beforemodevaluesc                 n   |d   }|d   }g }d|v rr|d   m	 |d   j                   }t        |      j                  t        |            r:t        |      t        |      z  }ddj                  |       d| d}t	        |      t        ||z         }|D ]  }t        |j
                        j                  |      }	|j                  r%|	j                  |j                  j                         }	|	rd|	 d	| }t	        |      |j                  |j                        }|rd
| }t	        |      |t        |j                        z  } d|vr:|j                  dd      r|j                  |      }
n|d   j                  }
|
|d<   |S t        |d         j                  |      }	|	rd|	 d}t	        |      |S )z6Validate that the correct inputs exist for all chains.r   r   memoryzThe input key(s)  z are found in the Memory keys (z8) - please use input and memory keys that don't overlap.zMissing required input keys: z, only had z(Chain returned keys that already exist: r   r   Fz/Expected output variables that were not found: .)
memory_variablessetintersectionjoin
ValueErrorr   
differencer$   r   get)clsr"   r   r   memory_keysoverlapping_keysmsgknown_variableschainmissing_varsr   s              r   validate_chainszSequentialChain.validate_chains'   s    ! !23v&"2">F *;;K?#00[1AB#&#7#k:J#J '0@(A'B C++6- 867 
 !o%o;< 	6Eu//0;;OLL||+66u||7T7TU3L> B  /02  !o%.;;E<M<MN@AQ@RS o%s5#4#455O!	6$ V+zz,.-88I$Rj44)4F%&  v&89:EEoVLG~UVW o%r   Ninputsrun_managerc                 *   |j                         }|xs t        j                         }t        | j                        D ]1  \  }}|j                         } ||d|      }|j                  |       3 | j                  D 	ci c]  }	|	||	   
 c}	S c c}	w NT)return_only_outputs	callbacks)copyr   get_noop_manager	enumerater   	get_childupdater   )
r   r7   r8   known_values_run_manager_ir4   r<   outputsks
             r   _callzSequentialChain._call\   s    
 {{}"S&@&Q&Q&S"4;;/ 	)IB$..0ILdiXG(	) -1,A,ABq<?"BBBs    Bc                 X  K   |j                         }|xs t        j                         }|j                         }t	        | j
                        D ]2  \  }}|j                  |d|       d {   }|j                  |       4 | j                  D 	ci c]  }	|	||	   
 c}	S 7 5c c}	w wr:   )	r=   r   r>   r@   r?   r   acallrA   r   )
r   r7   r8   rB   rC   r<   rD   r4   rE   rF   s
             r   _acallzSequentialChain._acalli   s     
 {{}"X&E&V&V&X **,	"4;;/ 	)IB!KK$(# (  G
 (	) -1,A,ABq<?"BB Cs$   A+B*-B#.%B*B% B*%B*N)__name__
__module____qualname____doc__listr
   __annotations__strr   boolr   model_configpropertyr   r   r   classmethoddictr   r6   r   rG   r   rJ    r   r   r   r      s*   GK#Y3iJ $L
 $DI $ $ %T#Y % % (#1T 1c 1  $1l :>CS#XC 0$6C 
c3h	C  ?CCS#XC 5t;C 
c3h	Cr   r   c            	           e Zd ZU dZee   ed<   dZeed<   dZ	e
ed<   dZe
ed<    ed	d
      Zedee
   fd       Zedee
   fd       Z ed      defd       Z	 ddee
e
f   dedz  dee
e
f   fdZ	 ddee
ef   dedz  dee
ef   fdZy)SimpleSequentialChainzCSimple chain where the outputs of one step feed directly into next.r   Fstrip_outputsinput	input_keyoutput
output_keyTr   r   r   c                     | j                   gS )zExpect input key.)r]   r   s    r   r   z SimpleSequentialChain.input_keys   s     r   c                     | j                   gS r   )r_   r   s    r   r   z!SimpleSequentialChain.output_keys   s       r   afterr    c                 $   | j                   D ]  }t        |j                        dk7  r'd| dt        |j                         d}t        |      t        |j                        dk7  s[d| dt        |j                         d}t        |       | S )z1Validate that chains are all single input/output.   z=Chains used in SimplePipeline should all have one input, got z with z inputs.z>Chains used in SimplePipeline should all have one output, got z	 outputs.)r   lenr   r,   r   )r   r4   r2   s      r   r6   z%SimpleSequentialChain.validate_chains   s     [[ 	&E5##$)SgVC(8(8$9#:(D  !o%5$$%*TgVC(9(9$:#;9F  !o%	& r   Nr7   r8   c           	      
   |xs t        j                         }|| j                     }t        t	        t        | j                              D cg c]  }t        |       c}      }t        | j                        D ]t  \  }}|j                  ||j                  d|dz                }| j                  r|j                         }|j                  ||t        |         d| j                         v | j                  |iS c c}w Nstep_rd   )r<   
)colorendverbose)r   r>   r]   r   rangere   r   rR   r?   runr@   r[   stripon_textrl   r_   r   r7   r8   rC   _inputicolor_mappingr4   s           r   rG   zSimpleSequentialChain._call   s    
 #S&@&Q&Q&S')5T[[AQ;R*Sa3q6*ST!$++. 	HAuYY&005QA  F !!  #CF+	 ! 	 (( +Ts   D c           	      :  K   |xs t        j                         }|| j                     }t        t	        t        | j                              D cg c]  }t        |       c}      }t        | j                        D ]  \  }}|j                  ||j                  d|dz                 d {   }| j                  r|j                         }|j                  ||t        |         d| j                         d {     | j                  |iS c c}w 7 h7 wrg   )r   r>   r]   r   rm   re   r   rR   r?   arunr@   r[   ro   rp   rl   r_   rq   s           r   rJ   zSimpleSequentialChain._acall   s    
 #X&E&V&V&X')5T[[AQ;R*Sa3q6*ST!$++. 	HAu ::&005QA &  F !!&&#CF+	 '   	 (( +Ts2   ADD!AD.D/AD=D>DDrK   )rL   rM   rN   rO   rP   r
   rQ   r[   rS   r]   rR   r_   r   rT   rU   r   r   r   r	   r6   rW   r   rG   r   r   rJ   rX   r   r   rZ   rZ   {   s   MKM4IsJ $L
  DI     !T#Y ! ! '"  #( :>)S#X) 0$6) 
c3h	)4 ?C)S#X) 5t;) 
c3h	)r   rZ   N)rO   typingr   langchain_core.callbacksr   r   langchain_core.utils.inputr   pydanticr   r   typing_extensionsr	   langchain_classic.chains.baser
   r   rZ   rX   r   r   <module>r}      s=    K  9 0 " /hCe hCVU)E U)r   