a
    bŠÝgá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r¨ddlZddlmZ e e¡Z ddœdd„Z!dddd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)ÚrendererzTuple[flytekit, renderer]©Úreturnc                   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   úz/var/www/html/cobodadashboardai.evdpl.com/venv/lib/python3.9/site-packages/langchain_community/callbacks/flyte_callback.pyÚimport_flytekit   s
    ÿþr   Ústrr   Údict)ÚtextÚnlpÚtextstatr   c           
      C  sø   i }|dur¢|  | ¡| | ¡| | ¡| | ¡| | ¡| | ¡| | ¡| | ¡| | ¡| 	| ¡| 
| ¡| | ¡| | ¡| | ¡| | ¡dœ}| d|i¡ | |¡ |durôtƒ }|| ƒ}|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ddœ‡ fdd„Zddddd	œd
d„Zddddœdd„Zddddœdd„Zddddœdd„Zdddddœdd„Z	ddddœdd„Z
ddddœdd„Zddddd œd!d"„Zdddd#œd$d%„Zddddœd&d'„Zdddd(œd)d*„Zd+ddd,œd-d.„Zd/ddd0œd1d2„Z‡  ZS )3ÚFlyteCallbackHandlerz2Callback handler that is used within a Flyte task.ÚNoner   c                   sÜ   t ƒ \}}tƒ | _d| _ztƒ | _W n ty@   t d¡ Y n0 d}z
tƒ }W n tyl   t d¡ Y n0 t	ƒ  
¡  d| _|r°z| d¡| _W n ty®   t d¡ Y n0 |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   ]   s>    
ÿ

ÿ

ÿ
þzFlyteCallbackHandler.__init__zDict[str, Any]z	List[str]r   )Ú
serializedÚpromptsÚkwargsr   c                 K  s¼   |  j d7  _ |  jd7  _|  jd7  _i }| ddi¡ | t|ƒ¡ | |  ¡ ¡ g }|D ]}| |¡ q`| d|i¡ | j |  ¡  	d¡¡ | j |  
¡  	| j |g¡¡d ¡ dS )zRun when LLM starts.é   ÚactionÚon_llm_startrN   z### LLM StartÚ
N)ÚstepZ
llm_startsÚstartsr6   r   Úget_custom_callback_metaÚappendrI   rG   rH   rF   r>   Ú	DataFrame)rJ   rM   rN   rO   r8   Zprompt_responsesÚpromptr   r   r   rR   Œ   s    ÿz!FlyteCallbackHandler.on_llm_startr   )ÚtokenrO   r   c                 K  s   dS )z#Run when LLM generates a new token.Nr   )rJ   rZ   rO   r   r   r   Úon_llm_new_token¥   s    z%FlyteCallbackHandler.on_llm_new_tokenr   )ÚresponserO   r   c           
   	   K  s¼  |  j d7  _ |  jd7  _|  jd7  _i }| ddi¡ | t|jpJi ƒ¡ | |  ¡ ¡ | j |  	¡  
d¡¡ | j |  ¡  
| j |g¡¡¡ |jD ]}|D ]}t|ƒ}| t| ¡ ƒ¡ | jsÒ| jr†| t|j| j| jd¡ | d¡}| j |  	¡  
d¡¡ | j |  ¡  
| j |g¡¡d ¡ |d	 }| j |  	¡  
d
¡¡ | j |¡ |d }	| j |  	¡  
d¡¡ | j |	¡ q¤| j |  	¡  
d¡¡ | j |  	¡  
|j¡¡ q¤qšdS )zRun when LLM ends running.rP   rQ   Ú
on_llm_endz### LLM End)r   r   r.   z#### Text Complexity MetricsrS   r4   z#### Dependency Treer5   z#### Entitiesz#### Generated ResponseN)rT   Zllm_endsÚendsr6   r   Z
llm_outputrV   rI   rW   rG   rH   rF   r>   rX   Úgenerationsr   r   r   r   r;   r   Úpop)
rJ   r\   rO   r8   r_   Z
generationZgeneration_respZcomplexity_metricsr4   r5   r   r   r   r]   ¨   sX     
ÿÿÿÿÿýÿÿÿzFlyteCallbackHandler.on_llm_endÚBaseException)ÚerrorrO   r   c                 K  s    |  j d7  _ |  jd7  _dS )zRun when LLM errors.rP   N©rT   Úerrors©rJ   rb   rO   r   r   r   Úon_llm_errorÝ   s    z!FlyteCallbackHandler.on_llm_error)rM   ÚinputsrO   r   c                 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.rP   rQ   Úon_chain_startú,c                 S  s   g | ]\}}|› d |› ‘qS ©ú=r   ©Ú.0ÚkÚvr   r   r   Ú
<listcomp>ï   ó    z7FlyteCallbackHandler.on_chain_start.<locals>.<listcomp>rg   z### Chain StartrS   N)rT   Zchain_startsrU   r6   r   rV   ÚjoinÚitemsr   rI   rW   rG   rH   rF   r>   rX   )rJ   rM   rg   rO   r8   Zchain_inputZ
input_respr   r   r   rh   â   s    ÿz#FlyteCallbackHandler.on_chain_start)ÚoutputsrO   r   c                 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.rP   ri   c                 S  s   g | ]\}}|› d |› ‘qS rj   r   rl   r   r   r   rp   ÿ   rq   z5FlyteCallbackHandler.on_chain_end.<locals>.<listcomp>Úon_chain_end)rQ   rt   z### Chain EndrS   N)rT   Z
chain_endsr^   rr   rs   r6   rV   rI   rW   rG   rH   rF   r>   rX   )rJ   rt   rO   r8   Zchain_outputr   r   r   ru   ø   s    ÿz!FlyteCallbackHandler.on_chain_endc                 K  s    |  j d7  _ |  jd7  _dS )zRun when chain errors.rP   Nrc   re   r   r   r   Úon_chain_error  s    z#FlyteCallbackHandler.on_chain_error)rM   Ú	input_strrO   r   c                 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.rP   Úon_tool_start)rQ   rw   z### Tool StartrS   N)rT   Útool_startsrU   r6   r   rV   rI   rW   rG   rH   rF   r>   rX   )rJ   rM   rw   rO   r8   r   r   r   rx     s    ÿz"FlyteCallbackHandler.on_tool_start)ÚoutputrO   r   c                 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.rP   Úon_tool_end)rQ   rz   z### Tool EndrS   N)rT   Z	tool_endsr^   r6   rV   rI   rW   rG   rH   rF   r>   rX   )rJ   rz   rO   r8   r   r   r   r{     s    ÿz FlyteCallbackHandler.on_tool_endc                 K  s    |  j d7  _ |  jd7  _dS )zRun when tool errors.rP   Nrc   re   r   r   r   Úon_tool_error.  s    z"FlyteCallbackHandler.on_tool_error)r   rO   r   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.
        rP   Úon_text)rQ   r   z### On TextrS   N)rT   Ztext_ctrr6   rV   rI   rW   rG   rH   rF   r>   rX   )rJ   r   rO   r8   r   r   r   r}   3  s    ÿzFlyteCallbackHandler.on_textr
   )ÚfinishrO   r   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.rP   Úon_agent_finishrz   )rQ   rz   Úlogz### Agent FinishrS   N)rT   Z
agent_endsr^   r6   Zreturn_valuesr€   rV   rI   rW   rG   rH   rF   r>   rX   )rJ   r~   rO   r8   r   r   r   r   C  s    ýÿÿz$FlyteCallbackHandler.on_agent_finishr	   )rQ   rO   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.rP   Úon_agent_action)rQ   ÚtoolÚ
tool_inputr€   z### Agent ActionrS   N)rT   ry   rU   r6   r‚   rƒ   r€   rV   rI   rW   rG   rH   rF   r>   rX   )rJ   rQ   rO   r8   r   r   r   r   X  s     üÿÿz$FlyteCallbackHandler.on_agent_action)Ú__name__Ú
__module__Ú__qualname__Ú__doc__rC   rR   r[   r]   rf   rh   ru   rv   rx   r{   r|   r}   r   r   Ú__classcell__r   r   rK   r   r<   Z   s   /5r<   )NN)$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