
    dh1                       S r SSKJr  SSKrSSKJr  SSKJr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
KJrJrJrJrJr  \(       a
  SSKrSSKJr  \R<                  " \5      r SS jr!  S       SS jjr" " S S\\5      r#g)zFlyteKit callback handler.    )annotationsN)deepcopy)TYPE_CHECKINGAnyDictListTuple)AgentActionAgentFinish)BaseCallbackHandler)	LLMResult)guard_import)BaseMetadataCallbackHandlerflatten_dictimport_pandasimport_spacyimport_textstat)rendererc                 @    [        S5      [        SSS9R                  4$ )z2Import flytekit and flytekitplugins-deck-standard.flytekitzflytekitplugins.deckzflytekitplugins-deck-standard)pip_name)r   r        d/var/www/html/shao/venv/lib/python3.13/site-packages/langchain_community/callbacks/flyte_callback.pyimport_flytekitr      s)     	Z "-L	

(	 r   c                   0 nUGb  UR                  U 5      UR                  U 5      UR                  U 5      UR                  U 5      UR	                  U 5      UR                  U 5      UR                  U 5      UR                  U 5      UR                  U 5      UR                  U 5      UR                  U 5      UR                  U 5      UR                  U 5      UR                  U 5      UR                  U 5      S.nUR                  SU05        UR                  U5        Ub`  [!        5       nU" U 5      nUR"                  R%                  USSSS9nUR"                  R%                  USSSS9nUUS.n	UR                  U	5        U$ )	a"  Analyze text using textstat and spacy.

Parameters:
    text (str): The text to analyze.
    nlp (spacy.lang): The spacy language model to use for visualization.

Returns:
    (dict): A dictionary containing the complexity metrics and visualization
        files serialized to HTML string.
)flesch_reading_easeflesch_kincaid_grade
smog_indexcoleman_liau_indexautomated_readability_indexdale_chall_readability_scoredifficult_wordslinsear_write_formulagunning_fogfernandez_huertaszigriszt_pazosgutierrez_polinicrawfordgulpease_indexosmantext_complexity_metricsdepFT)stylejupyterpageent)dependency_treeentities)r   r   r   r    r!   r"   r#   r$   r%   r&   r'   r(   r)   r*   r+   updater   displacyrender)
textnlptextstatrespr,   spacydocdep_outent_outtext_visualizationss
             r   analyze_textr@   '   s|    D#+#?#?#E$,$A$A$$G"--d3"*"="=d"C+3+O+OPT+U,4,Q,QRV,W'77=%-%C%CD%I#//5 ( 9 9$ ?'77= ( 9 9$ ? ))$/&55d;^^D)#
" 	.0GHI+,
$i..''5%d'S..''5%d'S&
 	'(Kr   c                     ^  \ rS rSrSrSU 4S jjr        SS jrSS jrSS jrSS jr	        SS jr
SS	 jrSS
 jr        SS jrSS jrSS jrSS jrSS jrSS jrSrU =r$ )FlyteCallbackHandlerZ   z2Callback handler that is used within a Flyte task.c                v  > [        5       u  p[        5       U l        SU l         [	        5       U l        Sn [        5       n[        TU ])  5         SU l        U(       a   UR                  S5      U l        UR                  U l        UR                   U l        UR$                  " SU R#                  5       R'                  S5      5      U l        g! [
         a    [        R                  S5         Nf = f! [
         a    [        R                  S5         Nf = f! [         a    [        R                  S5         Nf = f)zInitialize callback handler.NzTextstat library is not installed.                 It may result in the inability to log                 certain metrics that can be captured with Textstat.zSpacy library is not installed.                 It may result in the inability to log                 certain metrics that can be captured with Spacy.en_core_web_smzFlyteCallbackHandler uses spacy's en_core_web_sm model for certain metrics. To download, run the following command in your terminal: `python -m spacy download en_core_web_sm`zLangChain Metricsz## LangChain Metrics)r   r   pandasr9   r   ImportErrorloggerwarningr   super__init__r8   loadOSErrorTableRenderertable_rendererMarkdownRenderermarkdown_rendererDeckto_htmldeck)selfr   r   r;   	__class__s       r   rK   FlyteCallbackHandler.__init__]   s   ,.#o	+-DM 	 NE 	 ::&67 '44!)!:!:MM""$,,-CD
	E  	NNE	  	NNB	  As4   C 
C1 D C.-C.1DDD87D8c                   U =R                   S-  sl         U =R                  S-  sl        U =R                  S-  sl        0 nUR                  SS05        UR                  [	        U5      5        UR                  U R                  5       5        / nU H  nUR                  U5        M     UR                  SU05        U R                  R                  U R                  5       R                  S5      5        U R                  R                  U R                  5       R                  U R                  R                  U/5      5      S-   5        g)zRun when LLM starts.   actionon_llm_startpromptsz### LLM Start
N)step
llm_startsstartsr4   r   get_custom_callback_metaappendrT   rQ   rS   rO   rF   	DataFrame)rU   
serializedr\   kwargsr:   prompt_responsesprompts          r   r[   !FlyteCallbackHandler.on_llm_start   s    
 			Q	1q!X~./L,-D1134F##F+  	Y 012		//199/JK		!))$++*?*?*GH4O	
r   c                    g)z#Run when LLM generates a new token.Nr   )rU   tokenre   s      r   on_llm_new_token%FlyteCallbackHandler.on_llm_new_token   s    r   c           
     J   U =R                   S-  sl         U =R                  S-  sl        U =R                  S-  sl        0 nUR                  SS05        UR                  [	        UR
                  =(       d    0 5      5        UR                  U R                  5       5        U R                  R                  U R                  5       R                  S5      5        U R                  R                  U R                  5       R                  U R                  R                  U/5      5      5        UR                   GHh  nU GH]  n[        U5      nUR                  [	        UR!                  5       5      5        U R"                  (       d  U R$                  (       Ga  UR                  ['        UR(                  U R"                  U R$                  S95        UR+                  S5      nU R                  R                  U R                  5       R                  S5      5        U R                  R                  U R                  5       R                  U R                  R                  U/5      5      S-   5        US	   nU R                  R                  U R                  5       R                  S
5      5        U R                  R                  U5        US   n	U R                  R                  U R                  5       R                  S5      5        U R                  R                  U	5        GM  U R                  R                  U R                  5       R                  S5      5        U R                  R                  U R                  5       R                  UR(                  5      5        GM`     GMk     g)zRun when LLM ends running.rY   rZ   
on_llm_endz### LLM End)r8   r9   r,   z#### Text Complexity Metricsr]   r2   z#### Dependency Treer3   z#### Entitiesz#### Generated ResponseN)r^   llm_endsendsr4   r   
llm_outputra   rT   rb   rQ   rS   rO   rF   rc   generationsr   dictr8   r9   r@   r7   pop)
rU   responsere   r:   rr   
generationgeneration_respcomplexity_metricsr2   r3   s
             r   rn   FlyteCallbackHandler.on_llm_end   s   		Q			Q	!X|,-L!4!4!:;<D1134		//199-HI		,,.66t{{7L7LdV7TUV#//K)
"*4.&&|JOO4E'FG88t}}}#**$&OODMM <K;N;N1<& II$$..0889WX II$$++-55 KK113E2FG  '66G&HOII$$..0889OP II$$_5.z:HII$$T%;%;%=%E%Eo%VWII$$X.II$$..0889RS II$$T%;%;%=%E%Ejoo%VWI * 0r   c                X    U =R                   S-  sl         U =R                  S-  sl        g)zRun when LLM errors.rY   Nr^   errorsrU   errorre   s      r   on_llm_error!FlyteCallbackHandler.on_llm_error       		Q	qr   c           	        U =R                   S-  sl         U =R                  S-  sl        U =R                  S-  sl        0 nUR                  SS05        UR                  [	        U5      5        UR                  U R                  5       5        SR                  UR                  5        VVs/ sH  u  pVU SU 3PM     snn5      n[        U5      nXxS'   U R                  R                  U R                  5       R                  S5      5        U R                  R                  U R                  5       R                  U R                  R                  U/5      5      S-   5        g	s  snnf )
zRun when chain starts running.rY   rZ   on_chain_start,=inputsz### Chain Startr]   N)r^   chain_startsr`   r4   r   ra   joinitemsr   rT   rb   rQ   rS   rO   rF   rc   )	rU   rd   r   re   r:   kvchain_input
input_resps	            r   r   #FlyteCallbackHandler.on_chain_start   s    			Q	Qq!X/01L,-D1134hhv||~F~tq1#Qqc
~FGd^
*8		//199:KLM		!))$++*?*?*MNQUU	
  Gs   ,E#
c           	        U =R                   S-  sl         U =R                  S-  sl        U =R                  S-  sl        0 nSR                  UR	                  5        VVs/ sH  u  pEU SU 3PM     snn5      nUR                  SUS.5        UR                  U R                  5       5        U R                  R                  U R                  5       R                  S5      5        U R                  R                  U R                  5       R                  U R                  R                  U/5      5      S-   5        gs  snnf )	zRun when chain ends running.rY   r   r   on_chain_end)rZ   outputsz### Chain Endr]   N)r^   
chain_endsrp   r   r   r4   ra   rT   rb   rQ   rS   rO   rF   rc   )rU   r   re   r:   r   r   chain_outputs          r   r   !FlyteCallbackHandler.on_chain_end   s    		Q	1		Q	!xx HA3as HI~,GHD1134		//199/JK		!))$++*?*?*GH4O	
 !Is    D;
c                X    U =R                   S-  sl         U =R                  S-  sl        g)zRun when chain errors.rY   Nr{   r}   s      r   on_chain_error#FlyteCallbackHandler.on_chain_error  r   r   c                :   U =R                   S-  sl         U =R                  S-  sl        U =R                  S-  sl        0 nUR                  SUS.5        UR                  [	        U5      5        UR                  U R                  5       5        U R                  R                  U R                  5       R                  S5      5        U R                  R                  U R                  5       R                  U R                  R                  U/5      5      S-   5        g)zRun when tool starts running.rY   on_tool_start)rZ   	input_strz### Tool Startr]   N)r^   tool_startsr`   r4   r   ra   rT   rb   rQ   rS   rO   rF   rc   )rU   rd   r   re   r:   s        r   r   "FlyteCallbackHandler.on_tool_start  s     			Q	Aq!YGHL,-D1134		//199:JKL		!))$++*?*?*GH4O	
r   c                   U =R                   S-  sl         U =R                  S-  sl        U =R                  S-  sl        0 nUR                  SUS.5        UR                  U R	                  5       5        U R
                  R                  U R                  5       R                  S5      5        U R
                  R                  U R                  5       R                  U R                  R                  U/5      5      S-   5        g)zRun when tool ends running.rY   on_tool_end)rZ   outputz### Tool Endr]   N)r^   	tool_endsrp   r4   ra   rT   rb   rQ   rS   rO   rF   rc   )rU   r   re   r:   s       r   r    FlyteCallbackHandler.on_tool_end  s    		Q	!		Q	!}?@D1134		//199.IJ		!))$++*?*?*GH4O	
r   c                X    U =R                   S-  sl         U =R                  S-  sl        g)zRun when tool errors.rY   Nr{   r}   s      r   on_tool_error"FlyteCallbackHandler.on_tool_error.  r   r   c                   U =R                   S-  sl         U =R                  S-  sl        0 nUR                  SUS.5        UR                  U R                  5       5        U R                  R                  U R                  5       R                  S5      5        U R                  R                  U R                  5       R                  U R                  R                  U/5      5      S-   5        g)z
Run when agent is ending.
rY   on_text)rZ   r7   z### On Textr]   N)r^   text_ctrr4   ra   rT   rb   rQ   rS   rO   rF   rc   )rU   r7   re   r:   s       r   r   FlyteCallbackHandler.on_text3  s     			Q	!y$78D1134		//199-HI		!))$++*?*?*GH4O	
r   c                6   U =R                   S-  sl         U =R                  S-  sl        U =R                  S-  sl        0 nUR                  SUR                  S   UR
                  S.5        UR                  U R                  5       5        U R                  R                  U R                  5       R                  S5      5        U R                  R                  U R                  5       R                  U R                  R                  U/5      5      S-   5        g)zRun when agent ends running.rY   on_agent_finishr   )rZ   r   logz### Agent Finishr]   N)r^   
agent_endsrp   r4   return_valuesr   ra   rT   rb   rQ   rS   rO   rF   rc   )rU   finishre   r:   s       r   r   $FlyteCallbackHandler.on_agent_finishC  s    		Q	1		Q	!+ ..x8zz	
 	D1134		//199:LMN		!))$++*?*?*GH4O	
r   c                F   U =R                   S-  sl         U =R                  S-  sl        U =R                  S-  sl        0 nUR                  SUR                  UR
                  UR                  S.5        UR                  U R                  5       5        U R                  R                  U R                  5       R                  S5      5        U R                  R                  U R                  5       R                  U R                  R                  U/5      5      S-   5        g)zRun on agent action.rY   on_agent_action)rZ   tool
tool_inputr   z### Agent Actionr]   N)r^   r   r`   r4   r   r   r   ra   rT   rb   rQ   rS   rO   rF   rc   )rU   rZ   re   r:   s       r   r   $FlyteCallbackHandler.on_agent_actionX  s    		Q	Aq!+$//zz		
 	D1134		//199:LMN		!))$++*?*?*GH4O	
r   )rT   rQ   r8   rF   rO   r9   )returnNone)rd   Dict[str, Any]r\   z	List[str]re   r   r   r   )rj   strre   r   r   r   )ru   r   re   r   r   r   )r~   BaseExceptionre   r   r   r   )rd   r   r   r   re   r   r   r   )r   r   re   r   r   r   )rd   r   r   r   re   r   r   r   )r   r   re   r   r   r   )r7   r   re   r   r   r   )r   r   re   r   r   r   )rZ   r
   re   r   r   r   )__name__
__module____qualname____firstlineno____doc__rK   r[   rk   rn   r   r   r   r   r   r   r   r   r   r   __static_attributes____classcell__)rV   s   @r   rB   rB   Z   s    <-
^
(
3<
HK
	
223Xj

(
2@
LO
	
,
 

(
58
DG
	
$


 
*
 
r   rB   )r   zTuple[flytekit, renderer])NN)r7   r   r8   r   r9   r   r   rs   )$r   
__future__r   loggingcopyr   typingr   r   r   r   r	   langchain_core.agentsr
   r   langchain_core.callbacksr   langchain_core.outputsr   langchain_core.utilsr   #langchain_community.callbacks.utilsr   r   r   r   r   r   flytekitplugins.deckr   	getLoggerr   rH   r   r@   rB   r   r   r   <module>r      s      "   8 8 : 8 , -  -			8	$ 0
0	0 0 
	0fR
68K R
r   