
    dhS"                         S SK r S SKrS SKrS SKrS SKJr  S SKJrJrJ	r	J
r
  S SKJrJr  S SKJr  S SKJr  S SKJr  S\S	\S
S4S jr " S S\5      rg)    N)deepcopy)AnyDictListOptional)AgentActionAgentFinish)BaseCallbackHandler)	LLMResult)flatten_dictdata	file_pathreturnc                 |    [        US5       n[        R                  " X5        SSS5        g! , (       d  f       g= f)z~Save dict to local file path.

Parameters:
    data (dict): The dictionary to be saved.
    file_path (str): Local file path.
wN)openjsondump)r   r   outfiles      h/var/www/html/shao/venv/lib/python3.13/site-packages/langchain_community/callbacks/sagemaker_callback.py	save_jsonr      s(     
i			$  
		s   -
;c                     ^  \ rS rSrSrS\SS4U 4S jjrS)S jrS\\	\4   S	\
\	   S
\SS4S jrS\	S
\SS4S jrS\S
\SS4S jrS\S
\SS4S jrS\\	\4   S\\	\4   S
\SS4S jrS\\	\4   S
\SS4S jrS\S
\SS4S jrS\\	\4   S\	S
\SS4S jrS\S
\SS4S jrS\S
\SS4S jrS\	S
\SS4S jrS\S
\SS4S jrS \S
\S\4S! jr S*S"\\	\4   S#\	S$\	S%\\   SS4
S& jjrS)S' jrS(r U =r!$ )+SageMakerCallbackHandler   zCallback Handler that logs prompt artifacts and metrics to SageMaker Experiments.

Parameters:
    run (sagemaker.experiments.run.Run): Run object where the experiment is logged.
runr   Nc                    > [         TU ]  5         Xl        SSSSSSSSSSSSSS.U l        [        R
                  " 5       U l        g)zInitialize callback handler.r   )stepstartsendserrorstext_ctrchain_starts
chain_ends
llm_startsllm_endsllm_streamstool_starts	tool_ends
agent_endsN)super__init__r   metricstempfilemkdtemptemp_dir)selfr   	__class__s     r   r+   !SageMakerCallbackHandler.__init__#   sW     
" !((*    c                 h    U R                   R                  5        H  u  pSU R                   U'   M     g )Nr   )r,   items)r0   kvs      r   _resetSageMakerCallbackHandler._reset<   s(    LL&&(DADLLO )r3   
serializedpromptskwargsc           	         U R                   S==   S-  ss'   U R                   S==   S-  ss'   U R                   S==   S-  ss'   U R                   S   n0 nUR                  SS05        UR                  [        U5      5        UR                  U R                   5        [        U5       H7  u  pg[	        U5      nXxS'   U R                  UU R                  SU S	U 35        M9     g
)zRun when LLM starts.r      r$   r   actionon_llm_startprompt
llm_start__prompt_N)r,   updater   	enumerater   jsonfr/   )	r0   r:   r;   r<   r$   respidxrA   prompt_resps	            r   r@   %SageMakerCallbackHandler.on_llm_start@   s     	V!\"a'"X!#\\,/
!X~./L,-DLL!$W-KC"4.K$*!JJZL6 .r3   tokenc                    U R                   S==   S-  ss'   U R                   S==   S-  ss'   U R                   S   n0 nUR                  SUS.5        UR                  U R                   5        U R                  X@R                  SU 35        g)z#Run when LLM generates a new token.r   r>   r&   on_llm_new_token)r?   rK   llm_new_tokens_Nr,   rD   rF   r/   )r0   rK   r<   r&   rG   s        r   rM   )SageMakerCallbackHandler.on_llm_new_tokenX   sx    V!]#q(#ll=1!1EBCDLL!

4/+(GHr3   responsec           
      `   U R                   S==   S-  ss'   U R                   S==   S-  ss'   U R                   S==   S-  ss'   U R                   S   n0 nUR                  SS05        UR                  [        UR                  =(       d    0 5      5        UR                  U R                   5        UR                   Hm  n[        U5       H[  u  pg[        U5      nUR                  [        UR                  5       5      5        U R                  UU R                  SU SU 35        M]     Mo     g	)
zRun when LLM ends running.r   r>   r%   r   r?   
on_llm_endllm_end__generation_N)
r,   rD   r   
llm_outputgenerationsrE   r   dictrF   r/   )	r0   rQ   r<   r%   rG   rW   rH   
generationgeneration_resps	            r   rS   #SageMakerCallbackHandler.on_llm_ende   s    V!Z A% V!<<
+!X|,-L!4!4!:;<DLL!#//K#,[#9"*4.&&|JOO4E'FG

MMxjSE:	 $: 0r3   errorc                 `    U R                   S==   S-  ss'   U R                   S==   S-  ss'   g)zRun when LLM errors.r   r>   r    Nr,   r0   r\   r<   s      r   on_llm_error%SageMakerCallbackHandler.on_llm_error~   *    V!X!#r3   inputsc           	         U R                   S==   S-  ss'   U R                   S==   S-  ss'   U R                   S==   S-  ss'   U R                   S   n0 nUR                  SS05        UR                  [        U5      5        UR                  U R                   5        SR                  UR	                  5        VVs/ sH  u  pgU SU 3PM     snn5      n[        U5      n	XS	'   U R                  XR                  S
U 35        gs  snnf )zRun when chain starts running.r   r>   r"   r   r?   on_chain_start,=rc   chain_start_N)r,   rD   r   joinr5   r   rF   r/   )
r0   r:   rc   r<   r"   rG   r6   r7   chain_input
input_resps
             r   re   'SageMakerCallbackHandler.on_chain_start   s     	V!^$)$X!#||N3!X/01L,-DLL!hhv||~F~tq1#Qqc
~FGd^
*8

:}}\N.KL	  Gs   =D
outputsc           	         U R                   S==   S-  ss'   U R                   S==   S-  ss'   U R                   S==   S-  ss'   U R                   S   n0 nSR                  UR                  5        VVs/ sH  u  pVU SU 3PM     snn5      nUR                  SUS.5        UR                  U R                   5        U R	                  X@R
                  S	U 35        g
s  snnf )zRun when chain ends running.r   r>   r#   r   rf   rg   on_chain_end)r?   rm   
chain_end_N)r,   ri   r5   rD   rF   r/   )r0   rm   r<   r#   rG   r6   r7   chain_outputs           r   ro   %SageMakerCallbackHandler.on_chain_end   s    V!\"a'"V!\\,/
!xx HA3as HI~,GHDLL!

4*ZL(AB	 !Is   5C
c                 `    U R                   S==   S-  ss'   U R                   S==   S-  ss'   g)zRun when chain errors.r   r>   r    Nr^   r_   s      r   on_chain_error'SageMakerCallbackHandler.on_chain_error   rb   r3   	input_strc                    U R                   S==   S-  ss'   U R                   S==   S-  ss'   U R                   S==   S-  ss'   U R                   S   n0 nUR                  SUS.5        UR                  [        U5      5        UR                  U R                   5        U R                  XPR                  SU 35        g)	zRun when tool starts running.r   r>   r'   r   on_tool_start)r?   rv   tool_start_N)r,   rD   r   rF   r/   )r0   r:   rv   r<   r'   rG   s         r   rx   &SageMakerCallbackHandler.on_tool_start   s     	V!]#q(#X!#ll=1!YGHL,-DLL!

4+k](CDr3   outputc                 b   [        U5      nU R                  S==   S-  ss'   U R                  S==   S-  ss'   U R                  S==   S-  ss'   U R                  S   n0 nUR                  SUS.5        UR                  U R                  5        U R                  X@R                  SU 35        g)	zRun when tool ends running.r   r>   r(   r   on_tool_end)r?   r{   	tool_end_N)strr,   rD   rF   r/   )r0   r{   r<   r(   rG   s        r   r}   $SageMakerCallbackHandler.on_tool_end   s    VV![!Q&!V!LL-	!}?@DLL!

4)I;(?@r3   c                 `    U R                   S==   S-  ss'   U R                   S==   S-  ss'   g)zRun when tool errors.r   r>   r    Nr^   r_   s      r   on_tool_error&SageMakerCallbackHandler.on_tool_error   rb   r3   textc                    U R                   S==   S-  ss'   U R                   S==   S-  ss'   U R                   S   n0 nUR                  SUS.5        UR                  U R                   5        U R                  X@R                  SU 35        g)z
Run when agent is ending.
r   r>   r!   on_text)r?   r   on_text_NrO   )r0   r   r<   r!   rG   s        r   r    SageMakerCallbackHandler.on_text   sy     	V!Z A% <<
+!y$78DLL!

4(8*(=>r3   finishc                 |   U R                   S==   S-  ss'   U R                   S==   S-  ss'   U R                   S==   S-  ss'   U R                   S   n0 nUR                  SUR                  S   UR                  S.5        UR                  U R                   5        U R	                  X@R
                  SU 35        g	)
zRun when agent ends running.r   r>   r)   r   on_agent_finishr{   )r?   r{   logagent_finish_N)r,   rD   return_valuesr   rF   r/   )r0   r   r<   r)   rG   s        r   r   (SageMakerCallbackHandler.on_agent_finish   s    V!\"a'"V!\\,/
!+ ..x8zz	
 	DLL!

4-
|(DEr3   r?   c                    U R                   S==   S-  ss'   U R                   S==   S-  ss'   U R                   S==   S-  ss'   U R                   S   n0 nUR                  SUR                  UR                  UR                  S.5        UR                  U R                   5        U R                  X@R                  SU 35        g)	zRun on agent action.r   r>   r'   r   on_agent_action)r?   tool
tool_inputr   agent_action_N)r,   rD   r   r   r   rF   r/   )r0   r?   r<   r'   rG   s        r   r   (SageMakerCallbackHandler.on_agent_action   s    V!]#q(#X!#ll=1!+$//zz		
 	DLL!

4-}(EFr3   r   data_dirfilename	is_outputc                     [         R                  R                  X# S35      n[        X5        U R                  R                  XSUS9  g)z,To log the input data as json file artifact.z.json)namer   N)ospathri   r   r   log_file)r0   r   r   r   r   r   s         r   rF   SageMakerCallbackHandler.jsonf  s<     GGLLZu+=>	$")iHr3   c                 d    U R                  5         [        R                  " U R                  5        g)z9Reset the steps and delete the temporary local directory.N)r8   shutilrmtreer/   )r0   s    r   flush_tracker&SageMakerCallbackHandler.flush_tracker  s    dmm$r3   )r,   r   r/   )r   N)T)"__name__
__module____qualname____firstlineno____doc__r   r+   r8   r   r   r   r@   rM   r   rS   BaseExceptionr`   re   ro   rt   rx   r}   r   r   r	   r   r   r   r   boolrF   r   __static_attributes____classcell__)r1   s   @r   r   r      s3   +C +D +2 sCx.379HK	0Ic IS IT I9   2$- $3 $4 $
MsCx.M26sCx.MLOM	M*CDcN Cc Cd C$M $S $T $
EsCx.E58EDGE	E"A# A A A$= $C $D $
?C ?3 ?4 ?Fk FS FT F&Gk GS GS G0 %)
I38n
I 
I 	
I
 D>
I 

I% %r3   r   )r   r   r   r-   copyr   typingr   r   r   r   langchain_core.agentsr   r	   langchain_core.callbacksr
   langchain_core.outputsr   #langchain_community.callbacks.utilsr   rX   r   r   r    r3   r   <module>r      sQ     	    , , : 8 ,
!D !S !T !y%2 y%r3   