
    Ng1                       d Z ddlmZ ddlZddlmZ ddlmZmZm	Z	m
Z
mZ ddlmZmZ ddlmZ ddlmZ dd	lmZ dd
lmZmZmZmZmZ er
ddlZddlmZ  ej        e          Z ddZ!	 	 dddZ" G d dee          Z#dS )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)rendererreturnTuple[flytekit, renderer]c                 L    t          d          t          dd          j        fS )z2Import flytekit and flytekitplugins-deck-standard.flytekitzflytekitplugins.deckzflytekitplugins-deck-standard)pip_name)r   r        h/var/www/html/ai-engine/env/lib/python3.11/site-packages/langchain_community/callbacks/flyte_callback.pyimport_flytekitr      s4     	Z  "-L	
 	
 	

	 r   textstrnlpr   textstatdictc                   i }|[|                     |           |                    |           |                    |           |                    |           |                    |           |                    |           |                    |           |                    |           |                    |           |	                    |           |
                    |           |                    |           |                    |           |                    |           |                    |           d}|                    d|i           |                    |           |ot!                      } ||           }|j                            |ddd          }|j                            |ddd          }||d	}	|                    |	           |S )
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.
    N)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/   r0   r1   r2   updater   displacyrender)
r   r    r!   respr3   spacydocdep_outent_outtext_visualizationss
             r   analyze_textrD   '   s    D#+#?#?#E#E$,$A$A$$G$G"--d33"*"="=d"C"C+3+O+OPT+U+U,4,Q,QRV,W,W'77==%-%C%CD%I%I#//55 ( 9 9$ ? ?'77== ( 9 9$ ? ? ))$//&55d;;^^D))#
 #
" 	.0GHIII+,,,
c$ii.''5%d'SS.''5%d'SS&
 
 	'(((Kr   c                       e Zd ZdZd' fdZd(dZd)dZd*dZd+dZd,dZ	d-dZ
d+dZd.dZd/dZd+dZd0d Zd1d#Zd2d&Z xZS )3FlyteCallbackHandlerz2Callback handler that is used within a Flyte task.r   Nonec                   t                      \  }}t                      | _        d| _        	 t	                      | _        n*# t
          $ r t                              d           Y nw xY wd}	 t                      }n*# t
          $ r t                              d           Y nw xY wt                      
                                 d| _        |rF	 |                    d          | _        n*# t          $ r t                              d           Y nw xY w|j        | _        |j        | _         |j        d|                                                     d                    | _        dS )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   pandasr!   r   ImportErrorloggerwarningr   super__init__r    loadOSErrorTableRenderertable_rendererMarkdownRenderermarkdown_rendererDeckto_htmldeck)selfr   r   r?   	__class__s       r   rO   zFlyteCallbackHandler.__init__]   s   ,..(#oo	+--DMM 	 	 	NNE    	 	 NNEE 	 	 	NNB    	 	 		 ::&677   A     '4!)!:!HM""$$,,-CDD
 
			s5   A $A)(A)/A> >$B%$B%C- -$DD
serializedDict[str, Any]prompts	List[str]kwargsr   c                   | xj         dz  c_         | xj        dz  c_        | xj        dz  c_        i }|                    ddi           |                    t	          |                     |                    |                                            g }|D ]}|                    |           |                    d|i           | j                            |                                 	                    d                     | j                            | 
                                	                    | j                            |g                    dz              dS )zRun when LLM starts.   actionon_llm_startr]   z### LLM Start
N)step
llm_startsstartsr;   r   get_custom_callback_metaappendrX   rU   rW   rS   rJ   	DataFrame)rY   r[   r]   r_   r>   prompt_responsesprompts          r   rc   z!FlyteCallbackHandler.on_llm_start   sS   
 			Q		1q!X~.///L,,---D1133444 	, 	,F##F++++Y 01222	//1199/JJKKK	!!))$+*?*?*G*GHH4O	
 	
 	
 	
 	
r   tokenr   c                    dS )z#Run when LLM generates a new token.Nr   )rY   rm   r_   s      r   on_llm_new_tokenz%FlyteCallbackHandler.on_llm_new_token   s      r   responser   c           	        | xj         dz  c_         | xj        dz  c_        | xj        dz  c_        i }|                    ddi           |                    t	          |j        pi                      |                    |                                            | j                            | 	                                
                    d                     | j                            |                                 
                    | j                            |g                               |j        D ]}|D ]}t          |          }|                    t	          |                                                     | j        s| j        r|                    t'          |j        | j        | j                             |                    d          }| j                            | 	                                
                    d                     | j                            |                                 
                    | j                            |g                    dz              |d	         }| j                            | 	                                
                    d
                     | j                            |           |d         }	| j                            | 	                                
                    d                     | j                            |	           | j                            | 	                                
                    d                     | j                            | 	                                
                    |j                             dS )zRun when LLM ends running.ra   rb   
on_llm_endz### LLM End)r    r!   r3   z#### Text Complexity Metricsrd   r9   z#### Dependency Treer:   z#### Entitiesz#### Generated ResponseN)re   llm_endsendsr;   r   
llm_outputrh   rX   ri   rU   rW   rS   rJ   rj   generationsr   r"   r    r!   rD   r   pop)
rY   rp   r_   r>   rv   
generationgeneration_respcomplexity_metricsr9   r:   s
             r   rr   zFlyteCallbackHandler.on_llm_end   s   		Q				Q		!X|,---L!4!:;;<<<D1133444	//1199-HHIII	,,..66t{7L7LdV7T7TUUVVV#/ %	X %	XK) $X $X
"*4..&&|JOO4E4E'F'FGGG8 !Xt} !X#**$&ODM     <K;N;N1< <& I$$..00889WXX   I$$++--55 K113E2FGG     '66G&HOI$$..00889OPP   I$$_555.z:HI$$T%;%;%=%=%E%Eo%V%VWWWI$$X....I$$..00889RSS   I$$T%;%;%=%=%E%Ejo%V%VWWWWI$X%	X %	Xr   errorBaseExceptionc                F    | xj         dz  c_         | xj        dz  c_        dS )zRun when LLM errors.ra   Nre   errorsrY   r{   r_   s      r   on_llm_errorz!FlyteCallbackHandler.on_llm_error   %    		Q		qr   inputsc                   | xj         dz  c_         | xj        dz  c_        | xj        dz  c_        i }|                    ddi           |                    t	          |                     |                    |                                            d                    d |                                D                       }t          |          }||d<   | j	        
                    |                                                     d                     | j	        
                    |                                                     | j                            |g                    dz              d	S )
zRun when chain starts running.ra   rb   on_chain_start,c                "    g | ]\  }}| d | S =r   .0kvs      r   
<listcomp>z7FlyteCallbackHandler.on_chain_start.<locals>.<listcomp>   s&    FFFtq!1

q

FFFr   r   z### Chain Startrd   N)re   chain_startsrg   r;   r   rh   joinitemsr   rX   ri   rU   rW   rS   rJ   rj   )rY   r[   r   r_   r>   chain_input
input_resps          r   r   z#FlyteCallbackHandler.on_chain_start   sS    			Q		Qq!X/0111L,,---D1133444hhFFv||~~FFFGGd^^
*
8	//1199:KLLMMM	!!))$+*?*?*M*MNNQUU	
 	
 	
 	
 	
r   outputsc                ~   | xj         dz  c_         | xj        dz  c_        | xj        dz  c_        i }d                    d |                                D                       }|                    d|d           |                    |                                            | j                            | 	                                
                    d                     | j                            |                                 
                    | j                            |g                    dz              dS )	zRun when chain ends running.ra   r   c                "    g | ]\  }}| d | S r   r   r   s      r   r   z5FlyteCallbackHandler.on_chain_end.<locals>.<listcomp>   s&     H H H1A H H Hr   on_chain_end)rb   r   z### Chain Endrd   N)re   
chain_endsrt   r   r   r;   rh   rX   ri   rU   rW   rS   rJ   rj   )rY   r   r_   r>   chain_outputs        r   r   z!FlyteCallbackHandler.on_chain_end   s   		Q		1		Q		!xx H H H H HII~,GGHHHD1133444	//1199/JJKKK	!!))$+*?*?*G*GHH4O	
 	
 	
 	
 	
r   c                F    | xj         dz  c_         | xj        dz  c_        dS )zRun when chain errors.ra   Nr~   r   s      r   on_chain_errorz#FlyteCallbackHandler.on_chain_error  r   r   	input_strc                `   | xj         dz  c_         | xj        dz  c_        | xj        dz  c_        i }|                    d|d           |                    t	          |                     |                    |                                            | j                            |                                 	                    d                     | j                            | 
                                	                    | j                            |g                    dz              dS )zRun when tool starts running.ra   on_tool_start)rb   r   z### Tool Startrd   N)re   tool_startsrg   r;   r   rh   rX   ri   rU   rW   rS   rJ   rj   )rY   r[   r   r_   r>   s        r   r   z"FlyteCallbackHandler.on_tool_start  s    			Q		Aq!YGGHHHL,,---D1133444	//1199:JKKLLL	!!))$+*?*?*G*GHH4O	
 	
 	
 	
 	
r   outputc                   | xj         dz  c_         | xj        dz  c_        | xj        dz  c_        i }|                    d|d           |                    |                                            | j                            |                                                     d                     | j                            | 	                                                    | j
                            |g                    dz              dS )zRun when tool ends running.ra   on_tool_end)rb   r   z### Tool Endrd   N)re   	tool_endsrt   r;   rh   rX   ri   rU   rW   rS   rJ   rj   )rY   r   r_   r>   s       r   r   z FlyteCallbackHandler.on_tool_end  s    		Q		!		Q		!}??@@@D1133444	//1199.IIJJJ	!!))$+*?*?*G*GHH4O	
 	
 	
 	
 	
r   c                F    | xj         dz  c_         | xj        dz  c_        dS )zRun when tool errors.ra   Nr~   r   s      r   on_tool_errorz"FlyteCallbackHandler.on_tool_error.  r   r   r   c                   | xj         dz  c_         | xj        dz  c_        i }|                    d|d           |                    |                                            | j                            |                                                     d                     | j                            |                                                     | j	        
                    |g                    dz              dS )z+
        Run when agent is ending.
        ra   on_text)rb   r   z### On Textrd   N)re   text_ctrr;   rh   rX   ri   rU   rW   rS   rJ   rj   )rY   r   r_   r>   s       r   r   zFlyteCallbackHandler.on_text3  s     			Q		!y$77888D1133444	//1199-HHIII	!!))$+*?*?*G*GHH4O	
 	
 	
 	
 	
r   finishr   c                >   | xj         dz  c_         | xj        dz  c_        | xj        dz  c_        i }|                    d|j        d         |j        d           |                    |                                            | j                            | 	                                
                    d                     | j                            |                                 
                    | j                            |g                    dz              dS )zRun when agent ends running.ra   on_agent_finishr   )rb   r   logz### Agent Finishrd   N)re   
agent_endsrt   r;   return_valuesr   rh   rX   ri   rU   rW   rS   rJ   rj   )rY   r   r_   r>   s       r   r   z$FlyteCallbackHandler.on_agent_finishC  s   		Q		1		Q		!+ .x8z 	
 	
 	
 	D1133444	//1199:LMMNNN	!!))$+*?*?*G*GHH4O	
 	
 	
 	
 	
r   rb   r
   c                >   | xj         dz  c_         | xj        dz  c_        | xj        dz  c_        i }|                    d|j        |j        |j        d           |                    |                                            | j        	                    | 
                                                    d                     | j        	                    |                                                     | j                            |g                    dz              dS )zRun on agent action.ra   on_agent_action)rb   tool
tool_inputr   z### Agent Actionrd   N)re   r   rg   r;   r   r   r   rh   rX   ri   rU   rW   rS   rJ   rj   )rY   rb   r_   r>   s       r   r   z$FlyteCallbackHandler.on_agent_actionX  s   		Q		Aq!+$/z	 	
 	
 	
 	D1133444	//1199:LMMNNN	!!))$+*?*?*G*GHH4O	
 	
 	
 	
 	
r   )r   rG   )r[   r\   r]   r^   r_   r   r   rG   )rm   r   r_   r   r   rG   )rp   r   r_   r   r   rG   )r{   r|   r_   r   r   rG   )r[   r\   r   r\   r_   r   r   rG   )r   r\   r_   r   r   rG   )r[   r\   r   r   r_   r   r   rG   )r   r   r_   r   r   rG   )r   r   r_   r   r   rG   )r   r   r_   r   r   rG   )rb   r
   r_   r   r   r   )__name__
__module____qualname____doc__rO   rc   ro   rr   r   r   r   r   r   r   r   r   r   r   __classcell__)rZ   s   @r   rF   rF   Z   sM       <<-
 -
 -
 -
 -
 -
^
 
 
 
22 2 2 23X 3X 3X 3Xj   

 
 
 
,
 
 
 
    

 
 
 
$
 
 
 
   

 
 
 
 
 
 
 
*
 
 
 
 
 
 
 
r   rF   )r   r   )NN)r   r   r    r   r!   r   r   r"   )$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   rL   r   rD   rF   r   r   r   <module>r      s       " " " " " "        8 8 8 8 8 8 8 8 8 8 8 8 8 8 : : : : : : : : 8 8 8 8 8 8 , , , , , , - - - - - -               .OOO------		8	$	$    0 0 0 0 0fR
 R
 R
 R
 R
68K R
 R
 R
 R
 R
r   