§
    šŠtj¼H  ã                  óà   — d dl mZ d dlZd dlmZ d dlmZ d dlmZm	Z	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mZmZ erd dl Z!dd„Z" G d„ dee¦  «        Z#dS )é    )ÚannotationsN)Údeepcopy)ÚPath)ÚTYPE_CHECKINGÚAnyÚDictÚListÚMappingÚOptionalÚSequence)ÚAgentActionÚAgentFinish)ÚBaseCallbackHandler)Ú	LLMResult©Úguard_import)ÚBaseMetadataCallbackHandlerÚflatten_dictÚhash_stringÚimport_pandasÚimport_spacyÚimport_textstatÚ	load_jsonÚreturnr   c                 ó    — t          d¦  «        S )zLImport the clearml python package and raise an error if it is not installed.Úclearmlr   © ó    úl/var/www/html/CA-Chatbot/venv/lib/python3.11/site-packages/langchain_community/callbacks/clearml_callback.pyÚimport_clearmlr       s   € å˜	Ñ"Ô"Ð"r   c                  óÜ   ‡ — e Zd ZdZ	 	 	 	 	 	 	 dDdEˆ fd„ZdFd„ZdGd„ZdHd„ZdId!„ZdJd$„Z	dKd&„Z
dLd(„ZdJd)„ZdMd+„ZdNd-„ZdJd.„ZdOd0„ZdPd3„ZdQd6„ZdRd8„ZedSd?„¦   «         ZdTd@„Z	 	 	 dUdVdC„Zˆ xZS )WÚClearMLCallbackHandlera   Callback Handler that logs to ClearML.

    Parameters:
        job_type (str): The type of clearml task such as "inference", "testing" or "qc"
        project_name (str): The clearml project name
        tags (list): Tags to add to the task
        task_name (str): Name of the clearml task
        visualize (bool): Whether to visualize the run.
        complexity_metrics (bool): Whether to log complexity metrics
        stream_logs (bool): Whether to stream callback actions to ClearML

    This handler will utilize the associated callback method and formats
    the input of each callback function with metadata regarding the state of LLM run,
    and adds the response to the list of records for both the {method}_records and
    action. It then logs the response to the ClearML console.
    Ú	inferenceÚlangchain_callback_demoNFÚ	task_typeúOptional[str]Úproject_nameÚtagsúOptional[Sequence]Ú	task_nameÚ	visualizeÚboolÚcomplexity_metricsÚstream_logsr   ÚNonec                óØ  •— t          ¦   «         }t          ¦   «         }	t          ¦   «                              ¦   «          || _        || _        || _        || _        || _        || _	        || _
        t          j        ¦   «         | _        |j                             ¦   «         r|j                             ¦   «         | _        n8|j                             | j        | j        | j        | j        d¬¦  «        | _        | j                             ¦   «         | _        d}
| j                             |
dd¬¦  «         g | _        g | _        || _	        || _        |	                     d¦  «        | _        dS )zInitialize callback handler.T)r%   r'   r(   r*   Ú
output_urizÅThe clearml callback is currently in beta and is subject to change based on updates to `langchain`. Please report any issues to https://github.com/allegroai/clearml/issues with the tag `langchain`.é   )ÚlevelÚprint_consoleÚen_core_web_smN)r    r   ÚsuperÚ__init__r%   r'   r(   r*   r+   r-   r.   ÚtempfileÚTemporaryDirectoryÚtemp_dirÚTaskÚcurrent_taskÚtaskÚinitÚ
get_loggerÚloggerÚreport_textÚcallback_columnsÚaction_recordsÚloadÚnlp)Úselfr%   r'   r(   r*   r+   r-   r.   r   ÚspacyÚwarningÚ	__class__s              €r   r7   zClearMLCallbackHandler.__init__2   sP  ø€ õ !Ñ"Ô"ˆÝ‘”ˆÝ‰Œ×ÒÑÔÐà"ˆŒØ(ˆÔØˆŒ	Ø"ˆŒØ"ˆŒØ"4ˆÔØ&ˆÔå Ô3Ñ5Ô5ˆŒð Œ<×$Ò$Ñ&Ô&ð 		Øœ×1Ò1Ñ3Ô3ˆDŒIˆIàœ×)Ò)Øœ.Ø!Ô.Ø”YØœ.Øð *ñ ô ˆDŒIð ”i×*Ò*Ñ,Ô,ˆŒðTð 	ð
 	Œ×Ò ¨rÀÐÑFÔFÐFØ&(ˆÔØ$&ˆÔØ"4ˆÔØ"ˆŒØ—:’:Ð.Ñ/Ô/ˆŒˆˆr   r   c                ó$   — d„ | j         D ¦   «         S )Nc                ó   — i | ]}|d “ŒS )Nr   )Ú.0Úks     r   ú
<dictcomp>z5ClearMLCallbackHandler._init_resp.<locals>.<dictcomp>e   s   € Ð7Ð7Ð7˜A��4Ð7Ð7Ð7r   )rB   )rF   s    r   Ú
_init_respz!ClearMLCallbackHandler._init_respd   s   € Ø7Ð7 Ô!6Ð7Ñ7Ô7Ð7r   Ú
serializedúDict[str, Any]Úpromptsú	List[str]Úkwargsr   c                ó*  — | xj         dz  c_         | xj        dz  c_        | xj        dz  c_        |                      ¦   «         }|                     ddi¦  «         |                     t          |¦  «        ¦  «         |                     |                      ¦   «         ¦  «         |D ]k}t          |¦  «        }||d<   | j         	                    |¦  «         | j
         	                    |¦  «         | j        r| j                             |¦  «         ŒldS )zRun when LLM starts.é   ÚactionÚon_llm_startrR   N)ÚstepÚ
llm_startsÚstartsrO   Úupdater   Úget_custom_callback_metar   Úon_llm_start_recordsÚappendrC   r.   r@   rA   )rF   rP   rR   rT   ÚrespÚpromptÚprompt_resps          r   rX   z#ClearMLCallbackHandler.on_llm_startg   s  € ð 	ˆ	Œ	�Q‰ˆ	Œ	ØˆŒ˜1ÑˆŒØˆŒ�qÑˆŒà�ŠÑ Ô ˆØ�Š�X˜~Ð.Ñ/Ô/Ð/Ø�Š•L Ñ,Ô,Ñ-Ô-Ð-Ø�Š�D×1Ò1Ñ3Ô3Ñ4Ô4Ð4àð 	5ð 	5ˆFÝ" 4™.œ.ˆKØ%+ˆK˜	Ñ"ØÔ%×,Ò,¨[Ñ9Ô9Ð9ØÔ×&Ò& {Ñ3Ô3Ð3ØÔð 5Ø”×'Ò'¨Ñ4Ô4Ð4øð	5ð 	5r   ÚtokenÚstrc                óš  — | xj         dz  c_         | xj        dz  c_        |                      ¦   «         }|                     d|dœ¦  «         |                     |                      ¦   «         ¦  «         | j                             |¦  «         | j                             |¦  «         | j        r| j	         
                    |¦  «         dS dS )z#Run when LLM generates a new token.rV   Úon_llm_new_token)rW   rc   N)rY   Úllm_streamsrO   r\   r]   Úon_llm_token_recordsr_   rC   r.   r@   rA   )rF   rc   rT   r`   s       r   rf   z'ClearMLCallbackHandler.on_llm_new_token|   sÌ   € àˆ	Œ	�Q‰ˆ	Œ	ØÐÔ˜AÑÐÔà�ŠÑ Ô ˆØ�ŠÐ1¸EÐBÐBÑCÔCÐCØ�Š�D×1Ò1Ñ3Ô3Ñ4Ô4Ð4àÔ!×(Ò(¨Ñ.Ô.Ð.ØÔ×"Ò" 4Ñ(Ô(Ð(ØÔð 	*ØŒK×#Ò# DÑ)Ô)Ð)Ð)Ð)ð	*ð 	*r   Úresponser   c                ó  — | xj         dz  c_         | xj        dz  c_        | xj        dz  c_        |                      ¦   «         }|                     ddi¦  «         |                     t          |j        pi ¦  «        ¦  «         |                     |                      ¦   «         ¦  «         |j        D ]Ì}|D ]Ç}t          |¦  «        }|                     t          | 
                    ¦   «         ¦  «        ¦  «         |                     |                      |j        ¦  «        ¦  «         | j                             |¦  «         | j                             |¦  «         | j        r| j                             |¦  «         ŒÈŒÍdS )zRun when LLM ends running.rV   rW   Ú
on_llm_endN)rY   Úllm_endsÚendsrO   r\   r   Ú
llm_outputr]   Úgenerationsr   ÚdictÚanalyze_textÚtextÚon_llm_end_recordsr_   rC   r.   r@   rA   )rF   ri   rT   r`   ro   Ú
generationÚgeneration_resps          r   rk   z!ClearMLCallbackHandler.on_llm_endŠ   sk  € àˆ	Œ	�Q‰ˆ	Œ	ØˆŒ˜ÑˆŒØˆ	Œ	�Q‰ˆ	Œ	à�ŠÑ Ô ˆØ�Š�X˜|Ð,Ñ-Ô-Ð-Ø�Š•L Ô!4Ð!:¸Ñ;Ô;Ñ<Ô<Ð<Ø�Š�D×1Ò1Ñ3Ô3Ñ4Ô4Ð4à#Ô/ð 	=ð 	=ˆKØ)ð =ð =�
Ý"*¨4¡.¤.�Ø×&Ò&¥|°J·O²OÑ4EÔ4EÑ'FÔ'FÑGÔGÐGØ×&Ò& t×'8Ò'8¸¼Ñ'IÔ'IÑJÔJÐJØÔ'×.Ò.¨Ñ?Ô?Ð?ØÔ#×*Ò*¨?Ñ;Ô;Ð;ØÔ#ð =Ø”K×+Ò+¨OÑ<Ô<Ð<øð=ð	=ð 	=r   ÚerrorÚBaseExceptionc                óF   — | xj         dz  c_         | xj        dz  c_        dS )zRun when LLM errors.rV   N©rY   Úerrors©rF   rv   rT   s      r   Úon_llm_errorz#ClearMLCallbackHandler.on_llm_errorŸ   ó%   € àˆ	Œ	�Q‰ˆ	Œ	ØˆŒ�qÑˆŒˆˆr   Úinputsc                óè  — | xj         dz  c_         | xj        dz  c_        | xj        dz  c_        |                      ¦   «         }|                     ddi¦  «         |                     t          |¦  «        ¦  «         |                     |                      ¦   «         ¦  «         |                     d|                     d¦  «        ¦  «        }t          |t          ¦  «        rmt          |¦  «        }||d<   | j                             |¦  «         | j                             |¦  «         | j        r| j                             |¦  «         dS dS t          |t"          ¦  «        r€|D ]{}t          |¦  «        }|                     |¦  «         | j                             |¦  «         | j                             |¦  «         | j        r| j                             |¦  «         Œ|dS t%          d¦  «        ‚)zRun when chain starts running.rV   rW   Úon_chain_startÚinputÚhuman_inputz Unexpected data format provided!N)rY   Úchain_startsr[   rO   r\   r   r]   ÚgetÚ
isinstancerd   r   Úon_chain_start_recordsr_   rC   r.   r@   rA   ÚlistÚ
ValueError)rF   rP   r~   rT   r`   Úchain_inputÚ
input_respÚinps           r   r€   z%ClearMLCallbackHandler.on_chain_start¤   sè  € ð 	ˆ	Œ	�Q‰ˆ	Œ	ØÐÔ˜QÑÐÔØˆŒ�qÑˆŒà�ŠÑ Ô ˆØ�Š�XÐ/Ð0Ñ1Ô1Ð1Ø�Š•L Ñ,Ô,Ñ-Ô-Ð-Ø�Š�D×1Ò1Ñ3Ô3Ñ4Ô4Ð4à—j’j ¨&¯*ª*°]Ñ*CÔ*CÑDÔDˆå�k¥3Ñ'Ô'ð 	AÝ! $™œˆJØ"-ˆJ�wÑØÔ'×.Ò.¨zÑ:Ô:Ð:ØÔ×&Ò& zÑ2Ô2Ð2ØÔð 4Ø”×'Ò'¨
Ñ3Ô3Ð3Ð3Ð3ð4ð 4å˜¥TÑ*Ô*ð 		AØ"ð 8ð 8�Ý% d™^œ^�
Ø×!Ò! #Ñ&Ô&Ð&ØÔ+×2Ò2°:Ñ>Ô>Ð>ØÔ#×*Ò*¨:Ñ6Ô6Ð6ØÔ#ð 8Ø”K×+Ò+¨JÑ7Ô7Ð7øð8ð 8õ Ð?Ñ@Ô@Ð@r   Úoutputsc           	     ó  — | xj         dz  c_         | xj        dz  c_        | xj        dz  c_        |                      ¦   «         }|                     d|                     d|                     d¦  «        ¦  «        dœ¦  «         |                     |                      ¦   «         ¦  «         | j                             |¦  «         | j	                             |¦  «         | j
        r| j                             |¦  «         dS dS )zRun when chain ends running.rV   Úon_chain_endÚoutputrr   )rW   rŒ   N)rY   Ú
chain_endsrm   rO   r\   r„   r]   Úon_chain_end_recordsr_   rC   r.   r@   rA   )rF   rŒ   rT   r`   s       r   rŽ   z#ClearMLCallbackHandler.on_chain_endÅ   sþ   € àˆ	Œ	�Q‰ˆ	Œ	ØˆŒ˜1ÑˆŒØˆ	Œ	�Q‰ˆ	Œ	à�ŠÑ Ô ˆØ�Šà(Ø"Ÿ;š; x°·²¸VÑ1DÔ1DÑEÔEðð ñ	
ô 	
ð 	
ð 	�Š�D×1Ò1Ñ3Ô3Ñ4Ô4Ð4àÔ!×(Ò(¨Ñ.Ô.Ð.ØÔ×"Ò" 4Ñ(Ô(Ð(ØÔð 	*ØŒK×#Ò# DÑ)Ô)Ð)Ð)Ð)ð	*ð 	*r   c                óF   — | xj         dz  c_         | xj        dz  c_        dS )zRun when chain errors.rV   Nry   r{   s      r   Úon_chain_errorz%ClearMLCallbackHandler.on_chain_errorÙ   r}   r   Ú	input_strc                óþ  — | xj         dz  c_         | xj        dz  c_        | xj        dz  c_        |                      ¦   «         }|                     d|dœ¦  «         |                     t          |¦  «        ¦  «         |                     |                      ¦   «         ¦  «         | j                             |¦  «         | j	                             |¦  «         | j
        r| j                             |¦  «         dS dS )zRun when tool starts running.rV   Úon_tool_start)rW   r”   N)rY   Útool_startsr[   rO   r\   r   r]   Úon_tool_start_recordsr_   rC   r.   r@   rA   )rF   rP   r”   rT   r`   s        r   r–   z$ClearMLCallbackHandler.on_tool_startÞ   s÷   € ð 	ˆ	Œ	�Q‰ˆ	Œ	ØÐÔ˜AÑÐÔØˆŒ�qÑˆŒà�ŠÑ Ô ˆØ�Š˜¸YÐGÐGÑHÔHÐHØ�Š•L Ñ,Ô,Ñ-Ô-Ð-Ø�Š�D×1Ò1Ñ3Ô3Ñ4Ô4Ð4àÔ"×)Ò)¨$Ñ/Ô/Ð/ØÔ×"Ò" 4Ñ(Ô(Ð(ØÔð 	*ØŒK×#Ò# DÑ)Ô)Ð)Ð)Ð)ð	*ð 	*r   r�   c                óØ  — t          |¦  «        }| xj        dz  c_        | xj        dz  c_        | xj        dz  c_        |                      ¦   «         }|                     d|dœ¦  «         |                     |                      ¦   «         ¦  «         | j                             |¦  «         | j	                             |¦  «         | j
        r| j                             |¦  «         dS dS )zRun when tool ends running.rV   Úon_tool_end)rW   r�   N)rd   rY   Ú	tool_endsrm   rO   r\   r]   Úon_tool_end_recordsr_   rC   r.   r@   rA   )rF   r�   rT   r`   s       r   rš   z"ClearMLCallbackHandler.on_tool_endð   sá   € å�V‘”ˆØˆ	Œ	�Q‰ˆ	Œ	ØˆŒ˜!ÑˆŒØˆ	Œ	�Q‰ˆ	Œ	à�ŠÑ Ô ˆØ�Š˜}¸Ð?Ð?Ñ@Ô@Ð@Ø�Š�D×1Ò1Ñ3Ô3Ñ4Ô4Ð4àÔ ×'Ò'¨Ñ-Ô-Ð-ØÔ×"Ò" 4Ñ(Ô(Ð(ØÔð 	*ØŒK×#Ò# DÑ)Ô)Ð)Ð)Ð)ð	*ð 	*r   c                óF   — | xj         dz  c_         | xj        dz  c_        dS )zRun when tool errors.rV   Nry   r{   s      r   Úon_tool_errorz$ClearMLCallbackHandler.on_tool_error   r}   r   rr   c                óš  — | xj         dz  c_         | xj        dz  c_        |                      ¦   «         }|                     d|dœ¦  «         |                     |                      ¦   «         ¦  «         | j                             |¦  «         | j                             |¦  «         | j        r| j	         
                    |¦  «         dS dS )z+
        Run when agent is ending.
        rV   Úon_text)rW   rr   N)rY   Útext_ctrrO   r\   r]   Úon_text_recordsr_   rC   r.   r@   rA   )rF   rr   rT   r`   s       r   r    zClearMLCallbackHandler.on_text  sÉ   € ð 	ˆ	Œ	�Q‰ˆ	Œ	ØˆŒ˜ÑˆŒà�ŠÑ Ô ˆØ�Š˜y°$Ð7Ð7Ñ8Ô8Ð8Ø�Š�D×1Ò1Ñ3Ô3Ñ4Ô4Ð4àÔ×#Ò# DÑ)Ô)Ð)ØÔ×"Ò" 4Ñ(Ô(Ð(ØÔð 	*ØŒK×#Ò# DÑ)Ô)Ð)Ð)Ð)ð	*ð 	*r   Úfinishr   c                óÜ  — | xj         dz  c_         | xj        dz  c_        | xj        dz  c_        |                      ¦   «         }|                     d|j        d         |j        dœ¦  «         |                     |                      ¦   «         ¦  «         | j         	                    |¦  «         | j
         	                    |¦  «         | j        r| j                             |¦  «         dS dS )zRun when agent ends running.rV   Úon_agent_finishr�   )rW   r�   ÚlogN)rY   Ú
agent_endsrm   rO   r\   Úreturn_valuesr¦   r]   Úon_agent_finish_recordsr_   rC   r.   r@   rA   )rF   r£   rT   r`   s       r   r¥   z&ClearMLCallbackHandler.on_agent_finish  sñ   € àˆ	Œ	�Q‰ˆ	Œ	ØˆŒ˜1ÑˆŒØˆ	Œ	�Q‰ˆ	Œ	à�ŠÑ Ô ˆØ�Šà+Ø Ô.¨xÔ8Ø”zðð ñ	
ô 	
ð 	
ð 	�Š�D×1Ò1Ñ3Ô3Ñ4Ô4Ð4àÔ$×+Ò+¨DÑ1Ô1Ð1ØÔ×"Ò" 4Ñ(Ô(Ð(ØÔð 	*ØŒK×#Ò# DÑ)Ô)Ð)Ð)Ð)ð	*ð 	*r   rW   r   c                óÜ  — | xj         dz  c_         | xj        dz  c_        | xj        dz  c_        |                      ¦   «         }|                     d|j        |j        |j        dœ¦  «         |                     |                      ¦   «         ¦  «         | j	         
                    |¦  «         | j         
                    |¦  «         | j        r| j                             |¦  «         dS dS )zRun on agent action.rV   Úon_agent_action)rW   ÚtoolÚ
tool_inputr¦   N)rY   r—   r[   rO   r\   r¬   r­   r¦   r]   Úon_agent_action_recordsr_   rC   r.   r@   rA   )rF   rW   rT   r`   s       r   r«   z&ClearMLCallbackHandler.on_agent_action*  sö   € àˆ	Œ	�Q‰ˆ	Œ	ØÐÔ˜AÑÐÔØˆŒ�qÑˆŒà�ŠÑ Ô ˆØ�Šà+ØœØ$Ô/Ø”zð	ð ñ	
ô 	
ð 	
ð 	�Š�D×1Ò1Ñ3Ô3Ñ4Ô4Ð4ØÔ$×+Ò+¨DÑ1Ô1Ð1ØÔ×"Ò" 4Ñ(Ô(Ð(ØÔð 	*ØŒK×#Ò# DÑ)Ô)Ð)Ð)Ð)ð	*ð 	*r   rp   c                óì  — i }t          ¦   «         }t          ¦   «         }| j        �rwi d|                     |¦  «        “d|                     |¦  «        “d|                     |¦  «        “d|                     |¦  «        “d|                     |¦  «        “d|                     |¦  «        “d| 	                    |¦  «        “d| 
                    |¦  «        “d	|                     |¦  «        “d
|                     |¦  «        “d|                     |¦  «        “d|                     |¦  «        “d|                     |¦  «        “d|                     |¦  «        “d|                     |¦  «        “d|                     |¦  «        “}|                     |¦  «         | j        �rN| j        �rF| j        j        ��9|                      |¦  «        }|j                             |ddd¬¦  «        }t5          | j        j        t7          d|› �¦  «        dz   ¦  «        }|                     dd¬¦  «                             |¦  «         |j                             |ddd¬¦  «        }	t5          | j        j        t7          d|› �¦  «        dz   ¦  «        }
|
                     dd¬¦  «                             |	¦  «         | j                             d||¬¦  «         | j                             d||
¬¦  «         |S ) z¹Analyze text using textstat and spacy.

        Parameters:
            text (str): The text to analyze.

        Returns:
            `dict` containing the complexity metrics.
        Ú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Útext_standardÚfernandez_huertaÚszigriszt_pazosÚgutierrez_poliniÚcrawfordÚgulpease_indexÚosmanNÚdepFT)ÚstyleÚjupyterÚpagezdep-z.htmlÚwzutf-8)ÚencodingÚentzent-zDependencies Plot)Ú
local_pathzEntities Plot) r   r   r-   r°   r±   r²   r³   r´   rµ   r¶   r·   r¸   r¹   rº   r»   r¼   r½   r¾   r¿   r\   r+   rE   r:   ÚnameÚdisplacyÚrenderr   r   ÚopenÚwriter@   Úreport_media)rF   rr   r`   ÚtextstatrG   Útext_complexity_metricsÚdocÚdep_outÚdep_output_pathÚent_outÚent_output_paths              r   rq   z#ClearMLCallbackHandler.analyze_text?  sI  € ð ˆÝ"Ñ$Ô$ˆÝ‘”ˆØÔ"ñ 	1ð'Ø% x×'CÒ'CÀDÑ'IÔ'Ið'à&¨×(EÒ(EÀdÑ(KÔ(Kð'ð ˜h×1Ò1°$Ñ7Ô7ð'ð % h×&AÒ&AÀ$Ñ&GÔ&Gð	'ð
 .¨x×/SÒ/SØñ0ô 0ð'ð /°×0UÒ0UØñ1ô 1ð'ð " 8×#;Ò#;¸DÑ#AÔ#Að'ð (¨×)GÒ)GÈÑ)MÔ)Mð'ð ˜x×3Ò3°DÑ9Ô9ð'ð   ×!7Ò!7¸Ñ!=Ô!=ð'ð # H×$=Ò$=¸dÑ$CÔ$Cð'ð  " 8×#;Ò#;¸DÑ#AÔ#Að!'ð" # H×$=Ò$=¸dÑ$CÔ$Cð#'ð$ ˜H×-Ò-¨dÑ3Ô3ð%'ð& ! (×"9Ò"9¸$Ñ"?Ô"?ð''ð( ˜Ÿš¨Ñ-Ô-ð)'Ð#ð, �KŠKÐ/Ñ0Ô0Ð0àŒ>ñ 	X˜dœhñ 	X¨4¬=Ô+=Ñ+IØ—(’(˜4‘.”.ˆCà”n×+Ò+¨C°uÀeÐRVÐ+ÑWÔWˆGÝ"Ø”Ô"¥K°°t°°Ñ$>Ô$>ÀÑ$Hñô ˆOð × Ò  ¨wÐ Ñ7Ô7×=Ò=¸gÑFÔFÐFà”n×+Ò+¨C°uÀeÐRVÐ+ÑWÔWˆGÝ"Ø”Ô"¥K°°t°°Ñ$>Ô$>ÀÑ$Hñô ˆOð × Ò  ¨wÐ Ñ7Ô7×=Ò=¸gÑFÔFÐFàŒK×$Ò$Ø# T°oð %ñ ô ð ð ŒK×$Ò$ _°dÀÐ$ÑWÔWÐWàˆr   Úbase_dfúpd.DataFrameÚbase_df_fieldsr   Ú
rename_mapr
   c                óÐ   ‡ ‡— ˆ fd„‰D ¦   «         Šˆfd„|                      ¦   «         D ¦   «         }‰ ‰                              d¬¦  «        }|r|                     |d¬¦  «        }|S )Nc                ó   •— g | ]}|‰v ¯|‘Œ	S r   r   )rL   ÚfieldrÕ   s     €r   ú
<listcomp>z8ClearMLCallbackHandler._build_llm_df.<locals>.<listcomp>~  s#   ø€ ÐPÐPÐP E¸uÈÐ?OÐ?O˜%Ð?OÐ?OÐ?Or   c                ó$   •— i | ]\  }}|‰v ¯	||“ŒS r   r   )rL   Úmap_entry_kÚmap_entry_vr×   s      €r   rN   z8ClearMLCallbackHandler._build_llm_df.<locals>.<dictcomp>  s4   ø€ ð 
ð 
ð 
á(�˜[Ø˜nÐ,Ð,ð ˜à,Ð,Ð,r   rV   ©Úaxis)ÚitemsÚdropnaÚrename)rÕ   r×   rØ   Úllm_dfs   ``  r   Ú_build_llm_dfz$ClearMLCallbackHandler._build_llm_dfz  s“   øø€ ð QÐPÐPÐP¨^ÐPÑPÔPˆð
ð 
ð 
ð 
à,6×,<Ò,<Ñ,>Ô,>ð
ñ 
ô 
ˆ
ð
 ˜Ô(×/Ò/°QÐ/Ñ7Ô7ˆØð 	7Ø—]’] :°A�]Ñ6Ô6ˆFØˆr   c                ó8  — t          ¦   «         } |j        | j        ¦  «        }t                               |ddgd|v rdgndgz   ddi¬¦  «        }g }g }| j        rg d¢}t                               |g d¢|z   |z   d	d
dœ¦  «        } |j        ||gd¬¦  «        }|S )z=Create a dataframe with all the information from the session.rY   rR   rÈ   ÚidÚprompt_step)rÕ   r×   rØ   )r°   r±   r²   r³   r´   rµ   r¶   r·   r¸   r¹   rº   r»   r¼   r½   r¾   r¿   )rY   rr   Útoken_usage_total_tokensÚtoken_usage_prompt_tokensÚtoken_usage_completion_tokensÚoutput_stepr�   )rY   rr   rV   rà   )r   Ú	DataFramers   r"   ræ   r-   Úconcat)rF   ÚpdÚon_llm_end_records_dfÚllm_input_prompts_dfÚcomplexity_metrics_columnsÚvisualizations_columnsÚllm_outputs_dfÚsession_analysis_dfs           r   Ú_create_session_analysis_dfz2ClearMLCallbackHandler._create_session_analysis_df‰  s  € å‰_Œ_ˆØ , ¤¨TÔ-DÑ EÔ EÐå5×CÒCØ)Ø" IÐ.Ø!Ð%:Ð:Ð:�ˆxˆxÀÀñHà Ð.ð	  Dñ  
ô  
Ðð &(Ð"Ø')ÐàÔ"ð 	ð*ð *ð *Ð&õ& 0×=Ò=Ø!ðð ð ð )ñ)ð %ñ%ð #¨HÐ5Ð5ñ
ô 
ˆð (˜bœiÐ)=¸~Ð(NÐUVÐWÑWÔWÐØ"Ð"r   rÈ   Úlangchain_assetc                óÌ  — t          ¦   «         }t          ¦   «         }| j                             d| |j        | j        ¦  «        ¬¦  «         |                      ¦   «         }| j                             d||¬¦  «         | j        r0| j                              |j        | j        ¦  «        |dœ¦  «         |�r/t          | j
        j        d¦  «        }	 |                     |¦  «         |                     | j        t          |¦  «        ¬¦  «        }|                     t#          |¦  «        d|¬¦  «         n°# t$          $ rf |                     |¦  «         |                     | j        t          |¦  «        ¬¦  «        }|                     t#          |¦  «        d|¬¦  «         Y nAt(          $ r5}	t+          d	¦  «         t+          t-          |	¦  «        ¦  «         Y d
}	~	nd
}	~	ww xY w| j                             d¬¦  «         | j
                             ¦   «          t3          j        ¦   «         | _
        |                      ¦   «          |r| j                             ¦   «          d
S d
S )aU  Flush the tracker and setup the session.

        Everything after this will be a new table.

        Args:
            name: Name of the performed session so far so it is identifiable
            langchain_asset: The langchain asset to save.
            finish: Whether to finish the run.

            Returns:
                None
        zAction Records)Ú
table_plotzSession Analysis)rC   Úsession_analysisz
model.json)r=   Úconfig_textF)Úweights_filenameÚauto_delete_fileÚtarget_filenamezCould not save model.NT)Úwait_for_uploads)r   r    r@   Úreport_tablerî   rC   r÷   r.   rA   r   r:   rÈ   ÚsaveÚOutputModelr=   r   Úupdate_weightsrd   rˆ   Ú
save_agentÚNotImplementedErrorÚprintÚreprÚflushÚcleanupr8   r9   Úreset_callback_metaÚclose)
rF   rÈ   rø   r£   rð   r   rö   Úlangchain_asset_pathÚoutput_modelÚes
             r   Úflush_trackerz$ClearMLCallbackHandler.flush_tracker»  s»  € õ$ ‰_Œ_ˆÝ Ñ"Ô"ˆð 	Œ× Ò Ø˜d¨|¨r¬|¸DÔ<OÑ/PÔ/Pð 	!ñ 	
ô 	
ð 	
ð
 #×>Ò>Ñ@Ô@ÐØŒ× Ò Ø Ð1Dð 	!ñ 	
ô 	
ð 	
ð Ôð 	ØŒK×#Ò#à&2 b¤l°4Ô3FÑ&GÔ&GØ(;ðð ñô ð ð ñ 	Ý#'¨¬Ô(:¸LÑ#IÔ#IÐ ðØ×$Ò$Ð%9Ñ:Ô:Ð:à&×2Ò2Øœµ	Ð:NÑ0OÔ0Oð  3ñ  ô  �ð ×+Ò+Ý%(Ð)=Ñ%>Ô%>Ø%*Ø$(ð ,ñ ô ð ð øõ
 ð 	ð 	ð 	Ø×*Ò*Ð+?Ñ@Ô@Ð@Ø&×2Ò2Øœµ	Ð:NÑ0OÔ0Oð  3ñ  ô  �ð ×+Ò+Ý%(Ð)=Ñ%>Ô%>Ø%*Ø$(ð ,ñ ô ð ð ð õ
 'ð ð ð ÝÐ-Ñ.Ô.Ð.Ý•d˜1‘g”g‘”�Ø����øøøøðøøøð 	Œ	�Š¨ˆÑ.Ô.Ð.ØŒ×ÒÑÔÐÝ Ô3Ñ5Ô5ˆŒØ× Ò Ñ"Ô"Ð"àð 	ØŒI�OŠOÑÔÐÐÐð	ð 	s    ÃA#D7 Ä7A-G$Æ&	G$Æ/+GÇG$)r#   r$   NNFFF)r%   r&   r'   r&   r(   r)   r*   r&   r+   r,   r-   r,   r.   r,   r   r/   )r   r   )rP   rQ   rR   rS   rT   r   r   r/   )rc   rd   rT   r   r   r/   )ri   r   rT   r   r   r/   )rv   rw   rT   r   r   r/   )rP   rQ   r~   rQ   rT   r   r   r/   )rŒ   rQ   rT   r   r   r/   )rP   rQ   r”   rd   rT   r   r   r/   )r�   r   rT   r   r   r/   )rr   rd   rT   r   r   r/   )r£   r   rT   r   r   r/   )rW   r   rT   r   r   r   )rr   rd   r   rp   )rÕ   rÖ   r×   r   rØ   r
   r   rÖ   ©r   r   )NNF)rÈ   r&   rø   r   r£   r,   r   r/   )Ú__name__Ú
__module__Ú__qualname__Ú__doc__r7   rO   rX   rf   rk   r|   r€   rŽ   r“   r–   rš   rž   r    r¥   r«   rq   Ústaticmethodræ   r÷   r  Ú__classcell__)rI   s   @r   r"   r"       sø  ø€ € € € € ðð ð& $/Ø&?Ø#'Ø#'ØØ#(Ø!ð00ð 00ð 00ð 00ð 00ð 00ð 00ðd8ð 8ð 8ð 8ð5ð 5ð 5ð 5ð**ð *ð *ð *ð=ð =ð =ð =ð*ð ð ð ð
Að Að Að AðB*ð *ð *ð *ð(ð ð ð ð
*ð *ð *ð *ð$*ð *ð *ð *ð ð ð ð ð
*ð *ð *ð *ð *ð *ð *ð *ð**ð *ð *ð *ð*9ð 9ð 9ð 9ðv ðð ð ñ „\ðð0#ð 0#ð 0#ð 0#ðh #Ø#Øð	Kð Kð Kð Kð Kð Kð Kð Kð Kr   r"   r  )$Ú
__future__r   r8   Úcopyr   Úpathlibr   Útypingr   r   r   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   r   Úpandasrð   r    r"   r   r   r   ú<module>r"     sŽ  ðØ "Ð "Ð "Ð "Ð "Ð "à €€€Ø Ð Ð Ð Ð Ð Ø Ð Ð Ð Ð Ð Ø NÐ NÐ NÐ NÐ NÐ NÐ NÐ NÐ NÐ NÐ NÐ NÐ NÐ NÐ NÐ NÐ NÐ Nà :Ð :Ð :Ð :Ð :Ð :Ð :Ð :Ø 8Ð 8Ð 8Ð 8Ð 8Ð 8Ø ,Ð ,Ð ,Ð ,Ð ,Ð ,Ø -Ð -Ð -Ð -Ð -Ð -ðð ð ð ð ð ð ð ð ð ð ð ð ð ð ð ð ð ð ð ØÐÐÐð#ð #ð #ð #ð
fð fð fð fð fÐ8Ð:Mñ fô fð fð fð fr   