o
    ®©Zhá1  ã                   @  sâ   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rTddlZddlmZ e e¡Z ddd„Z!		dddd„Z"G d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                   C  s   t dƒt dddjfS )z2Import flytekit and flytekitplugins-deck-standard.Úflytekitzflytekitplugins.deckzflytekitplugins-deck-standard)Zpip_name)r   r   © r   r   úc/var/www/html/lang_env/lib/python3.10/site-packages/langchain_community/callbacks/flyte_callback.pyÚimport_flytekit   s   ÿür   ÚtextÚstrÚnlpr   ÚtextstatÚdictc           
      C  sø   i }|durQ|  | ¡| | ¡| | ¡| | ¡| | ¡| | ¡| | ¡| | ¡| | ¡| 	| ¡| 
| ¡| | ¡| | ¡| | ¡| | ¡dœ}| d|i¡ | |¡ |durztƒ }|| ƒ}|jj|dddd}|jj|d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*   r+   r,   r-   Úupdater   ZdisplacyÚrender)
r   r   r   Úrespr.   ÚspacyÚdocZdep_outZent_outZtext_visualizationsr   r   r   Úanalyze_text'   s<   ñ
þ
r;   c                      s¤   e Zd ZdZd5‡ fdd„Zd6dd„Zd7dd„Zd8dd„Zd9dd„Zd:dd„Z	d;dd„Z
d9d d!„Zd<d#d$„Zd=d&d'„Zd9d(d)„Zd>d+d,„Zd?d/d0„Zd@d3d4„Z‡  ZS )AÚFlyteCallbackHandlerz2Callback handler that is used within a Flyte task.r   ÚNonec                   sÜ   t ƒ \}}tƒ | _d| _ztƒ | _W n ty    t d¡ Y nw d}ztƒ }W n ty6   t d¡ Y nw t	ƒ  
¡  d| _|rXz| d¡| _W n tyW   t d¡ Y nw |j| _|j| _| d|  ¡  d¡¡| _dS )zInitialize callback handler.NzœTextstat library is not installed.                 It may result in the inability to log                 certain metrics that can be captured with Textstat.z–Spacy library is not installed.                 It may result in the inability to log                 certain metrics that can be captured with Spacy.Zen_core_web_smz®FlyteCallbackHandler 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ÚOSErrorZTableRendererÚtable_rendererZMarkdownRendererÚmarkdown_rendererZDeckÚto_htmlÚdeck)Úselfr   r   r9   ©Ú	__class__r   r   rC   ]   sD   
ÿÿ
ÿÿ
ÿÿ
þzFlyteCallbackHandler.__init__Ú
serializedúDict[str, Any]Úpromptsú	List[str]Úkwargsr   c                 K  s¼   |  j d7  _ |  jd7  _|  jd7  _i }| ddi¡ | t|ƒ¡ | |  ¡ ¡ g }|D ]}| |¡ q0| d|i¡ | j |  ¡  	d¡¡ | j |  
¡  	| j |g¡¡d ¡ dS )zRun when LLM starts.é   ÚactionÚon_llm_startrO   z### LLM StartÚ
N)ÚstepZ
llm_startsÚstartsr6   r   Úget_custom_callback_metaÚappendrI   rG   rH   rF   r>   Ú	DataFrame)rJ   rM   rO   rQ   r8   Zprompt_responsesÚpromptr   r   r   rT   Œ   s   ÿz!FlyteCallbackHandler.on_llm_startÚtokenr   c                 K  s   dS )z#Run when LLM generates a new token.Nr   )rJ   r\   rQ   r   r   r   Úon_llm_new_token¥   s    z%FlyteCallbackHandler.on_llm_new_tokenÚresponser   c           
   	   K  s¶  |  j d7  _ |  jd7  _|  jd7  _i }| ddi¡ | t|jp%i ƒ¡ | |  ¡ ¡ | j |  	¡  
d¡¡ | j |  ¡  
| j |g¡¡¡ |jD ]‹}|D ]†}t|ƒ}| t| ¡ ƒ¡ | jsf| jrÀ| t|j| j| jd¡ | d¡}| j |  	¡  
d¡¡ | j |  ¡  
| j |g¡¡d ¡ |d	 }| j |  	¡  
d
¡¡ | j |¡ |d }	| j |  	¡  
d¡¡ | j |	¡ qQ| j |  	¡  
d¡¡ | j |  	¡  
|j¡¡ qQqMdS )zRun when LLM ends running.rR   rS   Ú
on_llm_endz### LLM End)r   r   r.   z#### Text Complexity MetricsrU   r4   z#### Dependency Treer5   z#### Entitiesz#### Generated ResponseN)rV   Zllm_endsÚendsr6   r   Z
llm_outputrX   rI   rY   rG   rH   rF   r>   rZ   Úgenerationsr   r   r   r   r;   r   Úpop)
rJ   r^   rQ   r8   ra   Z
generationZgeneration_respZcomplexity_metricsr4   r5   r   r   r   r_   ¨   s\    
ÿÿÿÿÿýÿÿÿÜÿzFlyteCallbackHandler.on_llm_endÚerrorÚBaseExceptionc                 K  ó    |  j d7  _ |  jd7  _dS )zRun when LLM errors.rR   N©rV   Úerrors©rJ   rc   rQ   r   r   r   Úon_llm_errorÝ   ó   z!FlyteCallbackHandler.on_llm_errorÚinputsc                 K  s¾   |  j d7  _ |  jd7  _|  jd7  _i }| ddi¡ | t|ƒ¡ | |  ¡ ¡ d dd„ | ¡ D ƒ¡}t|ƒ}||d< | j	 
|  ¡  d¡¡ | j	 
|  ¡  | j |g¡¡d	 ¡ d
S )zRun when chain starts running.rR   rS   Úon_chain_startú,c                 S  ó   g | ]\}}|› d |› ‘qS ©ú=r   ©Ú.0ÚkÚvr   r   r   Ú
<listcomp>ï   ó    z7FlyteCallbackHandler.on_chain_start.<locals>.<listcomp>rk   z### Chain StartrU   N)rV   Zchain_startsrW   r6   r   rX   ÚjoinÚitemsr   rI   rY   rG   rH   rF   r>   rZ   )rJ   rM   rk   rQ   r8   Zchain_inputZ
input_respr   r   r   rl   â   s   ÿz#FlyteCallbackHandler.on_chain_startÚoutputsc                 K  s¢   |  j d7  _ |  jd7  _|  jd7  _i }d dd„ | ¡ D ƒ¡}| d|dœ¡ | |  ¡ ¡ | j |  	¡  
d¡¡ | j |  ¡  
| j |g¡¡d ¡ d	S )
zRun when chain ends running.rR   rm   c                 S  rn   ro   r   rq   r   r   r   ru   ÿ   rv   z5FlyteCallbackHandler.on_chain_end.<locals>.<listcomp>Úon_chain_end)rS   ry   z### Chain EndrU   N)rV   Z
chain_endsr`   rw   rx   r6   rX   rI   rY   rG   rH   rF   r>   rZ   )rJ   ry   rQ   r8   Zchain_outputr   r   r   rz   ø   s   ÿz!FlyteCallbackHandler.on_chain_endc                 K  re   )zRun when chain errors.rR   Nrf   rh   r   r   r   Úon_chain_error  rj   z#FlyteCallbackHandler.on_chain_errorÚ	input_strc                 K  s˜   |  j d7  _ |  jd7  _|  jd7  _i }| d|dœ¡ | t|ƒ¡ | |  ¡ ¡ | j |  ¡  	d¡¡ | j |  
¡  	| j |g¡¡d ¡ dS )zRun when tool starts running.rR   Úon_tool_start)rS   r|   z### Tool StartrU   N)rV   Útool_startsrW   r6   r   rX   rI   rY   rG   rH   rF   r>   rZ   )rJ   rM   r|   rQ   r8   r   r   r   r}     s   ÿz"FlyteCallbackHandler.on_tool_startÚoutputc                 K  sŠ   |  j d7  _ |  jd7  _|  jd7  _i }| d|dœ¡ | |  ¡ ¡ | j |  ¡  d¡¡ | j |  	¡  | j
 |g¡¡d ¡ dS )zRun when tool ends running.rR   Úon_tool_end)rS   r   z### Tool EndrU   N)rV   Z	tool_endsr`   r6   rX   rI   rY   rG   rH   rF   r>   rZ   )rJ   r   rQ   r8   r   r   r   r€     s   ÿz FlyteCallbackHandler.on_tool_endc                 K  re   )zRun when tool errors.rR   Nrf   rh   r   r   r   Úon_tool_error.  rj   z"FlyteCallbackHandler.on_tool_errorr   c                 K  s|   |  j d7  _ |  jd7  _i }| d|dœ¡ | |  ¡ ¡ | j |  ¡  d¡¡ | j |  ¡  | j	 
|g¡¡d ¡ dS )z+
        Run when agent is ending.
        rR   Úon_text)rS   r   z### On TextrU   N)rV   Ztext_ctrr6   rX   rI   rY   rG   rH   rF   r>   rZ   )rJ   r   rQ   r8   r   r   r   r‚   3  s   ÿzFlyteCallbackHandler.on_textÚfinishr
   c                 K  s”   |  j d7  _ |  jd7  _|  jd7  _i }| d|jd |jdœ¡ | |  ¡ ¡ | j |  	¡  
d¡¡ | j |  ¡  
| j |g¡¡d ¡ dS )zRun when agent ends running.rR   Úon_agent_finishr   )rS   r   Úlogz### Agent FinishrU   N)rV   Z
agent_endsr`   r6   Zreturn_valuesr…   rX   rI   rY   rG   rH   rF   r>   rZ   )rJ   rƒ   rQ   r8   r   r   r   r„   C  s   ýÿÿz$FlyteCallbackHandler.on_agent_finishrS   r	   c                 K  s”   |  j d7  _ |  jd7  _|  jd7  _i }| d|j|j|jdœ¡ | |  ¡ ¡ | j 	|  
¡  d¡¡ | j 	|  ¡  | j |g¡¡d ¡ dS )zRun on agent action.rR   Úon_agent_action)rS   ÚtoolÚ
tool_inputr…   z### Agent ActionrU   N)rV   r~   rW   r6   r‡   rˆ   r…   rX   rI   rY   rG   rH   rF   r>   rZ   )rJ   rS   rQ   r8   r   r   r   r†   X  s    üÿÿz$FlyteCallbackHandler.on_agent_action)r   r=   )rM   rN   rO   rP   rQ   r   r   r=   )r\   r   rQ   r   r   r=   )r^   r   rQ   r   r   r=   )rc   rd   rQ   r   r   r=   )rM   rN   rk   rN   rQ   r   r   r=   )ry   rN   rQ   r   r   r=   )rM   rN   r|   r   rQ   r   r   r=   )r   r   rQ   r   r   r=   )r   r   rQ   r   r   r=   )rƒ   r
   rQ   r   r   r=   )rS   r	   rQ   r   r   r   )Ú__name__Ú
__module__Ú__qualname__Ú__doc__rC   rT   r]   r_   ri   rl   rz   r{   r}   r€   r   r‚   r„   r†   Ú__classcell__r   r   rK   r   r<   Z   s     
/


5







r<   )r   r   )NN)r   r   r   r   r   r   r   r   )$rŒ   Ú
__future__r   ÚloggingÚcopyr   Útypingr   r   r   r   r   Zlangchain_core.agentsr	   r
   Zlangchain_core.callbacksr   Zlangchain_core.outputsr   Zlangchain_core.utilsr   Z#langchain_community.callbacks.utilsr   r   r   r   r   r   Zflytekitplugins.deckr   Ú	getLoggerr‰   r@   r   r;   r<   r   r   r   r   Ú<module>   s&    

ý3